From 84be665172b21220938ee702c4654e1a0cd0a584 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Tue, 17 Jan 2023 08:49:04 +0100 Subject: [PATCH 01/58] First commit. --- .../data-solutions/shielded-folder/README.md | 1 + .../data/firewall-policies/cidrs.yaml | 15 ++ .../hierarchical-policy-rules.yaml | 50 ++++++ .../data/org-policies/compute.yaml | 73 ++++++++ .../data/org-policies/iam.yaml | 12 ++ .../data/org-policies/serverless.yaml | 26 +++ .../data/org-policies/sql.yaml | 9 + .../data/org-policies/storage.yaml | 6 + .../data-solutions/shielded-folder/maint.tf | 79 +++++++++ .../shielded-folder/variables.tf | 159 ++++++++++++++++++ 10 files changed, 430 insertions(+) create mode 100644 blueprints/data-solutions/shielded-folder/README.md create mode 100644 blueprints/data-solutions/shielded-folder/data/firewall-policies/cidrs.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/firewall-policies/hierarchical-policy-rules.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/org-policies/compute.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/org-policies/iam.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/org-policies/serverless.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/org-policies/sql.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/org-policies/storage.yaml create mode 100644 blueprints/data-solutions/shielded-folder/maint.tf create mode 100644 blueprints/data-solutions/shielded-folder/variables.tf diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md new file mode 100644 index 00000000..503fa1da --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -0,0 +1 @@ +#TODO \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/data/firewall-policies/cidrs.yaml b/blueprints/data-solutions/shielded-folder/data/firewall-policies/cidrs.yaml new file mode 100644 index 00000000..90dabfb6 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/firewall-policies/cidrs.yaml @@ -0,0 +1,15 @@ +# skip boilerplate check + +healthchecks: + - 35.191.0.0/16 + - 130.211.0.0/22 + - 209.85.152.0/22 + - 209.85.204.0/22 + +rfc1918: + - 10.0.0.0/8 + - 172.16.0.0/12 + - 192.168.0.0/16 + +onprem_probes: + - 10.255.255.254/32 \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/data/firewall-policies/hierarchical-policy-rules.yaml b/blueprints/data-solutions/shielded-folder/data/firewall-policies/hierarchical-policy-rules.yaml new file mode 100644 index 00000000..6a3b3133 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/firewall-policies/hierarchical-policy-rules.yaml @@ -0,0 +1,50 @@ +# skip boilerplate check + +allow-admins: + description: Access from the admin subnet to all subnets + direction: INGRESS + action: allow + priority: 1000 + ranges: + - $rfc1918 + ports: + all: [] + target_resources: null + enable_logging: false + +allow-healthchecks: + description: Enable HTTP and HTTPS healthchecks + direction: INGRESS + action: allow + priority: 1001 + ranges: + - $healthchecks + ports: + tcp: ["80", "443"] + target_resources: null + enable_logging: false + +allow-ssh-from-iap: + description: Enable SSH from IAP + direction: INGRESS + action: allow + priority: 1002 + ranges: + - 35.235.240.0/20 + ports: + tcp: ["22"] + target_resources: null + enable_logging: false + +allow-icmp: + description: Enable ICMP + direction: INGRESS + action: allow + priority: 1003 + ranges: + - 0.0.0.0/0 + ports: + icmp: [] + target_resources: null + enable_logging: false + \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/data/org-policies/compute.yaml b/blueprints/data-solutions/shielded-folder/data/org-policies/compute.yaml new file mode 100644 index 00000000..0d27ac42 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/org-policies/compute.yaml @@ -0,0 +1,73 @@ +# skip boilerplate check +# +# sample subset of useful organization policies, edit to suit requirements + +compute.disableGuestAttributesAccess: + enforce: true + +compute.requireOsLogin: + enforce: true + +compute.restrictLoadBalancerCreationForTypes: + allow: + values: + - in:INTERNAL + +compute.skipDefaultNetworkCreation: + enforce: true + +compute.vmExternalIpAccess: + deny: + all: true + + +# compute.disableInternetNetworkEndpointGroup: +# enforce: true + +# compute.disableNestedVirtualization: +# enforce: true + +# compute.disableSerialPortAccess: +# enforce: true + +# compute.restrictCloudNATUsage: +# deny: +# all: true + +# compute.restrictDedicatedInterconnectUsage: +# deny: +# all: true + +# compute.restrictPartnerInterconnectUsage: +# deny: +# all: true + +# compute.restrictProtocolForwardingCreationForTypes: +# deny: +# all: true + +# compute.restrictSharedVpcHostProjects: +# deny: +# all: true + +# compute.restrictSharedVpcSubnetworks: +# deny: +# all: true + +# compute.restrictVpcPeering: +# deny: +# all: true + +# compute.restrictVpnPeerIPs: +# deny: +# all: true + +# compute.restrictXpnProjectLienRemoval: +# enforce: true + +# compute.setNewProjectDefaultToZonalDNSOnly: +# enforce: true + +# compute.vmCanIpForward: +# deny: +# all: true diff --git a/blueprints/data-solutions/shielded-folder/data/org-policies/iam.yaml b/blueprints/data-solutions/shielded-folder/data/org-policies/iam.yaml new file mode 100644 index 00000000..4d83f827 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/org-policies/iam.yaml @@ -0,0 +1,12 @@ +# skip boilerplate check +# +# sample subset of useful organization policies, edit to suit requirements + +iam.automaticIamGrantsForDefaultServiceAccounts: + enforce: true + +iam.disableServiceAccountKeyCreation: + enforce: true + +iam.disableServiceAccountKeyUpload: + enforce: true diff --git a/blueprints/data-solutions/shielded-folder/data/org-policies/serverless.yaml b/blueprints/data-solutions/shielded-folder/data/org-policies/serverless.yaml new file mode 100644 index 00000000..de62e6c7 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/org-policies/serverless.yaml @@ -0,0 +1,26 @@ +# skip boilerplate check +# +# sample subset of useful organization policies, edit to suit requirements + +run.allowedIngress: + allow: + values: + - is:internal + +# run.allowedVPCEgress: +# allow: +# values: +# - is:private-ranges-only + +# cloudfunctions.allowedIngressSettings: +# allow: +# values: +# - is:ALLOW_INTERNAL_ONLY + +# cloudfunctions.allowedVpcConnectorEgressSettings: +# allow: +# values: +# - is:PRIVATE_RANGES_ONLY + +# cloudfunctions.requireVPCConnector: +# enforce: true diff --git a/blueprints/data-solutions/shielded-folder/data/org-policies/sql.yaml b/blueprints/data-solutions/shielded-folder/data/org-policies/sql.yaml new file mode 100644 index 00000000..88b84d9d --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/org-policies/sql.yaml @@ -0,0 +1,9 @@ +# skip boilerplate check +# +# sample subset of useful organization policies, edit to suit requirements + +sql.restrictAuthorizedNetworks: + enforce: true + +sql.restrictPublicIp: + enforce: true diff --git a/blueprints/data-solutions/shielded-folder/data/org-policies/storage.yaml b/blueprints/data-solutions/shielded-folder/data/org-policies/storage.yaml new file mode 100644 index 00000000..6c0a673f --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/org-policies/storage.yaml @@ -0,0 +1,6 @@ +# skip boilerplate check +# +# sample subset of useful organization policies, edit to suit requirements + +storage.uniformBucketLevelAccess: + enforce: true diff --git a/blueprints/data-solutions/shielded-folder/maint.tf b/blueprints/data-solutions/shielded-folder/maint.tf new file mode 100644 index 00000000..33774d43 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/maint.tf @@ -0,0 +1,79 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Folder resources. + +locals { + groups = { + for k, v in var.groups : k => "${v}@${var.organization_domain}" + } + groups_iam = { + for k, v in local.groups : k => "group:${v}" + } + group_iam = { + (local.groups.data-engineers) = [ + "roles/editor", + ] + } + + vpc_sc_resources = [ + for k, v in data.google_projects.folder-projects.projects : format("projects/%s", v.number) + ] + +} + +module "folder" { + source = "../../../modules/folder" + folder_create = var.folder_create != null + parent = try(var.folder_create.parent, null) + name = try(var.folder_create.display_name, null) + id = var.folder_id + group_iam = local.group_iam + org_policies_data_path = "${var.data_dir}/org-policies" + firewall_policy_factory = { + cidr_file = "${var.data_dir}/firewall-policies/cidrs.yaml" + policy_name = "hierarchical-policy" + rules_file = "${var.data_dir}/firewall-policies/hierarchical-policy-rules.yaml" + } + #TODO logsink +} + +#TODO VPCSC +data "google_projects" "folder-projects" { + filter = "parent.id:${split("/", module.folder.id)[1]}" +} + +module "vpc-sc" { + source = "../../../modules/vpc-sc" + access_policy = var.access_policy + access_policy_create = var.access_policy_create + access_levels = var.vpc_sc_access_levels + egress_policies = var.vpc_sc_egress_policies + ingress_policies = var.vpc_sc_ingress_policies + service_perimeters_regular = { + shielded = { + status = { + access_levels = keys(var.vpc_sc_access_levels) + resources = local.vpc_sc_resources + restricted_services = var.vpc_sc_restricted_services + egress_policies = keys(var.vpc_sc_egress_policies) + ingress_policies = keys(var.vpc_sc_ingress_policies) + vpc_accessible_services = { + allowed_services = var.vpc_sc_accessible_services + enable_restriction = true + } + } + } + } +} diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf new file mode 100644 index 00000000..4990abfa --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -0,0 +1,159 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# tfdoc:file:description Folder resources. + +variable "access_policy" { + description = "Access Policy name, set to null if creating one." + type = string + +} + +variable "access_policy_create" { + description = "Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format." + type = object({ + parent = string + title = string + }) + default = null +} + +variable "data_dir" { + description = "Relative path for the folder storing configuration data." + type = string + default = "data" +} + +variable "folder_create" { + description = "Provide values if project creation is needed, uses existing project if null. Parent is in 'folders/nnn' or 'organizations/nnn' format." + type = object({ + display_name = string + parent = string + }) + default = null +} + +variable "folder_id" { + description = "Folder ID in case you use folder_create=null." + type = string + default = null +} + +variable "groups" { + description = "User groups." + type = map(string) + default = { + #TODO data-analysts = "gcp-data-analysts" + data-engineers = "gcp-data-engineers" + #TODO data-security = "gcp-data-security" + } +} + +variable "organization_domain" { + description = "Organization domain." + type = string +} + +variable "vpc_sc_access_levels" { + description = "VPC SC access level definitions." + type = map(object({ + combining_function = optional(string) + conditions = optional(list(object({ + device_policy = optional(object({ + allowed_device_management_levels = optional(list(string)) + allowed_encryption_statuses = optional(list(string)) + require_admin_approval = bool + require_corp_owned = bool + require_screen_lock = optional(bool) + os_constraints = optional(list(object({ + os_type = string + minimum_version = optional(string) + require_verified_chrome_os = optional(bool) + }))) + })) + ip_subnetworks = optional(list(string), []) + members = optional(list(string), []) + negate = optional(bool) + regions = optional(list(string), []) + required_access_levels = optional(list(string), []) + })), []) + description = optional(string) + })) + default = {} + nullable = false +} + +variable "vpc_sc_accessible_services" { + description = "VPC SC accessible services." + type = list(string) + default = ["storage.googleapis.com"] +} + +variable "vpc_sc_restricted_services" { + description = "VPC SC restricted services." + type = list(string) + default = ["storage.googleapis.com"] +} + +variable "vpc_sc_egress_policies" { + description = "VPC SC egress policy defnitions." + type = map(object({ + from = object({ + identity_type = optional(string, "ANY_IDENTITY") + identities = optional(list(string)) + }) + to = object({ + operations = optional(list(object({ + method_selectors = optional(list(string)) + service_name = string + })), []) + resources = optional(list(string)) + resource_type_external = optional(bool, false) + }) + })) + default = {} + nullable = false +} + +variable "vpc_sc_ingress_policies" { + description = "VPC SC ingress policy defnitions." + type = map(object({ + from = object({ + access_levels = optional(list(string), []) + identity_type = optional(string) + identities = optional(list(string)) + resources = optional(list(string), []) + }) + to = object({ + operations = optional(list(object({ + method_selectors = optional(list(string)) + service_name = string + })), []) + resources = optional(list(string)) + }) + })) + default = {} + nullable = false +} + +variable "vpc_sc_perimeters" { + description = "VPC SC regular perimeter definitions for shielded folder. All projects in the perimeter will be added." + type = object({ + access_levels = optional(list(string), []) + egress_policies = optional(list(string), []) + ingress_policies = optional(list(string), []) + }) + default = {} + nullable = false +} From b9a4c27a03dcde76bdea9486671c064a6f2f9e3a Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 18 Jan 2023 15:50:49 +0100 Subject: [PATCH 02/58] VPC-SC --- .../data-solutions/shielded-folder/README.md | 12 +- .../data/vpc-sc/accessible-services.yaml | 117 ++++++++++++++++++ .../data/vpc-sc/restricted-services.yaml | 117 ++++++++++++++++++ .../shielded-folder/{maint.tf => main.tf} | 11 +- .../shielded-folder/variables.tf | 13 +- 5 files changed, 255 insertions(+), 15 deletions(-) create mode 100644 blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml create mode 100644 blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml rename blueprints/data-solutions/shielded-folder/{maint.tf => main.tf} (87%) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 503fa1da..fb91f4b2 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -1 +1,11 @@ -#TODO \ No newline at end of file +#TODO Proper README (after deciding if this is a blueprint or a FAST stage) + +# Implemented +- Use of Scoped Policies (create or inherit) +- VPC SC adding all Folder's project into the perimeter +- Org policies +- Hierarchical firewall rules + +# TODO +- Log sync +- KMS \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml b/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml new file mode 100644 index 00000000..85e8835a --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml @@ -0,0 +1,117 @@ +- accessapproval.googleapis.com +- adsdatahub.googleapis.com +- aiplatform.googleapis.com +- alloydb.googleapis.com +- alpha-documentai.googleapis.com +- analyticshub.googleapis.com +- apigee.googleapis.com +- apigeeconnect.googleapis.com +- artifactregistry.googleapis.com +- assuredworkloads.googleapis.com +- automl.googleapis.com +- baremetalsolution.googleapis.com +- batch.googleapis.com +- beyondcorp.googleapis.com +- bigquery.googleapis.com +- bigquerydatapolicy.googleapis.com +- bigquerydatatransfer.googleapis.com +- bigquerymigration.googleapis.com +- bigqueryreservation.googleapis.com +- bigtable.googleapis.com +- binaryauthorization.googleapis.com +- cloudasset.googleapis.com +- cloudbuild.googleapis.com +- clouddebugger.googleapis.com +- clouderrorreporting.googleapis.com +- cloudfunctions.googleapis.com +- cloudkms.googleapis.com +- cloudprofiler.googleapis.com +- cloudresourcemanager.googleapis.com +- cloudsearch.googleapis.com +- cloudtrace.googleapis.com +- composer.googleapis.com +- compute.googleapis.com +- connectgateway.googleapis.com +- contactcenterinsights.googleapis.com +- container.googleapis.com +- containeranalysis.googleapis.com +- containerfilesystem.googleapis.com +- containerregistry.googleapis.com +- containerthreatdetection.googleapis.com +- contentwarehouse.googleapis.com +- datacatalog.googleapis.com +- dataflow.googleapis.com +- datafusion.googleapis.com +- datalineage.googleapis.com +- datamigration.googleapis.com +- datapipelines.googleapis.com +- dataplex.googleapis.com +- dataproc.googleapis.com +- datastream.googleapis.com +- dialogflow.googleapis.com +- dlp.googleapis.com +- dns.googleapis.com +- documentai.googleapis.com +- domains.googleapis.com +- essentialcontacts.googleapis.com +- eventarc.googleapis.com +- file.googleapis.com +- firebaseappcheck.googleapis.com +- firebaserules.googleapis.com +- firestore.googleapis.com +- gameservices.googleapis.com +- gkebackup.googleapis.com +- gkeconnect.googleapis.com +- gkehub.googleapis.com +- gkemulticloud.googleapis.com +- healthcare.googleapis.com +- iam.googleapis.com +- iamcredentials.googleapis.com +- iaptunnel.googleapis.com +- ids.googleapis.com +- integrations.googleapis.com +- language.googleapis.com +- lifesciences.googleapis.com +- logging.googleapis.com +- managedidentities.googleapis.com +- memcache.googleapis.com +- meshca.googleapis.com +- metastore.googleapis.com +- ml.googleapis.com +- monitoring.googleapis.com +- networkconnectivity.googleapis.com +- networkmanagement.googleapis.com +- networksecurity.googleapis.com +- networkservices.googleapis.com +- notebooks.googleapis.com +- opsconfigmonitoring.googleapis.com +- osconfig.googleapis.com +- oslogin.googleapis.com +- policytroubleshooter.googleapis.com +- privateca.googleapis.com +- pubsub.googleapis.com +- pubsublite.googleapis.com +- recaptchaenterprise.googleapis.com +- recommender.googleapis.com +- redis.googleapis.com +- retail.googleapis.com +- run.googleapis.com +- secretmanager.googleapis.com +- servicecontrol.googleapis.com +- servicedirectory.googleapis.com +- spanner.googleapis.com +- speakerid.googleapis.com +- speech.googleapis.com +- sqladmin.googleapis.com +- storage.googleapis.com +- storagetransfer.googleapis.com +- texttospeech.googleapis.com +- tpu.googleapis.com +- trafficdirector.googleapis.com +- transcoder.googleapis.com +- translate.googleapis.com +- videointelligence.googleapis.com +- vision.googleapis.com +- visionai.googleapis.com +- vpcaccess.googleapis.com +- workstations.googleapis.com \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml b/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml new file mode 100644 index 00000000..85e8835a --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml @@ -0,0 +1,117 @@ +- accessapproval.googleapis.com +- adsdatahub.googleapis.com +- aiplatform.googleapis.com +- alloydb.googleapis.com +- alpha-documentai.googleapis.com +- analyticshub.googleapis.com +- apigee.googleapis.com +- apigeeconnect.googleapis.com +- artifactregistry.googleapis.com +- assuredworkloads.googleapis.com +- automl.googleapis.com +- baremetalsolution.googleapis.com +- batch.googleapis.com +- beyondcorp.googleapis.com +- bigquery.googleapis.com +- bigquerydatapolicy.googleapis.com +- bigquerydatatransfer.googleapis.com +- bigquerymigration.googleapis.com +- bigqueryreservation.googleapis.com +- bigtable.googleapis.com +- binaryauthorization.googleapis.com +- cloudasset.googleapis.com +- cloudbuild.googleapis.com +- clouddebugger.googleapis.com +- clouderrorreporting.googleapis.com +- cloudfunctions.googleapis.com +- cloudkms.googleapis.com +- cloudprofiler.googleapis.com +- cloudresourcemanager.googleapis.com +- cloudsearch.googleapis.com +- cloudtrace.googleapis.com +- composer.googleapis.com +- compute.googleapis.com +- connectgateway.googleapis.com +- contactcenterinsights.googleapis.com +- container.googleapis.com +- containeranalysis.googleapis.com +- containerfilesystem.googleapis.com +- containerregistry.googleapis.com +- containerthreatdetection.googleapis.com +- contentwarehouse.googleapis.com +- datacatalog.googleapis.com +- dataflow.googleapis.com +- datafusion.googleapis.com +- datalineage.googleapis.com +- datamigration.googleapis.com +- datapipelines.googleapis.com +- dataplex.googleapis.com +- dataproc.googleapis.com +- datastream.googleapis.com +- dialogflow.googleapis.com +- dlp.googleapis.com +- dns.googleapis.com +- documentai.googleapis.com +- domains.googleapis.com +- essentialcontacts.googleapis.com +- eventarc.googleapis.com +- file.googleapis.com +- firebaseappcheck.googleapis.com +- firebaserules.googleapis.com +- firestore.googleapis.com +- gameservices.googleapis.com +- gkebackup.googleapis.com +- gkeconnect.googleapis.com +- gkehub.googleapis.com +- gkemulticloud.googleapis.com +- healthcare.googleapis.com +- iam.googleapis.com +- iamcredentials.googleapis.com +- iaptunnel.googleapis.com +- ids.googleapis.com +- integrations.googleapis.com +- language.googleapis.com +- lifesciences.googleapis.com +- logging.googleapis.com +- managedidentities.googleapis.com +- memcache.googleapis.com +- meshca.googleapis.com +- metastore.googleapis.com +- ml.googleapis.com +- monitoring.googleapis.com +- networkconnectivity.googleapis.com +- networkmanagement.googleapis.com +- networksecurity.googleapis.com +- networkservices.googleapis.com +- notebooks.googleapis.com +- opsconfigmonitoring.googleapis.com +- osconfig.googleapis.com +- oslogin.googleapis.com +- policytroubleshooter.googleapis.com +- privateca.googleapis.com +- pubsub.googleapis.com +- pubsublite.googleapis.com +- recaptchaenterprise.googleapis.com +- recommender.googleapis.com +- redis.googleapis.com +- retail.googleapis.com +- run.googleapis.com +- secretmanager.googleapis.com +- servicecontrol.googleapis.com +- servicedirectory.googleapis.com +- spanner.googleapis.com +- speakerid.googleapis.com +- speech.googleapis.com +- sqladmin.googleapis.com +- storage.googleapis.com +- storagetransfer.googleapis.com +- texttospeech.googleapis.com +- tpu.googleapis.com +- trafficdirector.googleapis.com +- transcoder.googleapis.com +- translate.googleapis.com +- videointelligence.googleapis.com +- vision.googleapis.com +- visionai.googleapis.com +- vpcaccess.googleapis.com +- workstations.googleapis.com \ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/maint.tf b/blueprints/data-solutions/shielded-folder/main.tf similarity index 87% rename from blueprints/data-solutions/shielded-folder/maint.tf rename to blueprints/data-solutions/shielded-folder/main.tf index 33774d43..410931e8 100644 --- a/blueprints/data-solutions/shielded-folder/maint.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -15,6 +15,13 @@ # tfdoc:file:description Folder resources. locals { + _vpc_sc_vpc_accessible_services = yamldecode( + file("${var.data_dir}/vpc-sc/restricted-services.yaml") + ) + _vpc_sc_restricted_services = yamldecode( + file("${var.data_dir}/vpc-sc/restricted-services.yaml") + ) + groups = { for k, v in var.groups : k => "${v}@${var.organization_domain}" } @@ -66,11 +73,11 @@ module "vpc-sc" { status = { access_levels = keys(var.vpc_sc_access_levels) resources = local.vpc_sc_resources - restricted_services = var.vpc_sc_restricted_services + restricted_services = local._vpc_sc_restricted_services egress_policies = keys(var.vpc_sc_egress_policies) ingress_policies = keys(var.vpc_sc_ingress_policies) vpc_accessible_services = { - allowed_services = var.vpc_sc_accessible_services + allowed_services = local._vpc_sc_vpc_accessible_services enable_restriction = true } } diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 4990abfa..77b68a4e 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -25,6 +25,7 @@ variable "access_policy_create" { type = object({ parent = string title = string + scopes = optional(list(string)) }) default = null } @@ -94,18 +95,6 @@ variable "vpc_sc_access_levels" { nullable = false } -variable "vpc_sc_accessible_services" { - description = "VPC SC accessible services." - type = list(string) - default = ["storage.googleapis.com"] -} - -variable "vpc_sc_restricted_services" { - description = "VPC SC restricted services." - type = list(string) - default = ["storage.googleapis.com"] -} - variable "vpc_sc_egress_policies" { description = "VPC SC egress policy defnitions." type = map(object({ From 4007d42705a930e9e526a8da3616712ad0e646f6 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Sat, 21 Jan 2023 01:08:51 +0100 Subject: [PATCH 03/58] Add KMS and Log. --- .../data-solutions/shielded-folder/kms.tf | 100 ++++++++++++++++++ .../shielded-folder/log-export.tf | 95 +++++++++++++++++ .../data-solutions/shielded-folder/main.tf | 37 +++++-- .../shielded-folder/variables.tf | 90 +++++++++++++++- 4 files changed, 311 insertions(+), 11 deletions(-) create mode 100644 blueprints/data-solutions/shielded-folder/kms.tf create mode 100644 blueprints/data-solutions/shielded-folder/log-export.tf diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf new file mode 100644 index 00000000..94ff244d --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -0,0 +1,100 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + kms_locations = distinct(flatten([ + for k, v in var.kms_keys : v.locations + ])) + kms_locations_keys = { + for loc in local.kms_locations : loc => { + for k, v in var.kms_keys : k => v if contains(v.locations, loc) + } + } + + kms_log_locations = distinct(flatten([ + for k, v in local.kms_log_sink_keys : compact(v.locations) + ])) + + # Log sink keys + kms_log_sink_keys = { + "log-gcs" = { + labels = {} + locations = [var.log_locations.gcs] + rotation_period = "7776000s" + } + "log-bq" = { + labels = {} + locations = [var.log_locations.bq] + rotation_period = "7776000s" + } + "log-pubsub" = { + labels = {} + locations = [var.log_locations.pubsub] + rotation_period = "7776000s" + } + } + kms_log_locations_keys = { + for loc in local.kms_log_locations : loc => { + for k, v in local.kms_log_sink_keys : k => v if contains(v.locations, loc) + } + } +} + +module "sec-project" { + source = "../../../modules/project" + name = "sec-core" + parent = module.folder.id + billing_account = try(var.projects_create.billing_account_id, null) + project_create = var.projects_create != null + prefix = var.projects_create == null ? null : var.prefix + group_iam = { + (local.groups.data-engineers) = [ + "roles/cloudkms.admin", + "roles/viewer", + ] + } + services = [ + "cloudkms.googleapis.com", + "secretmanager.googleapis.com", + "stackdriver.googleapis.com" + ] +} + +module "sec-kms" { + for_each = toset(local.kms_locations) + source = "../../../modules/kms" + project_id = module.sec-project.project_id + keyring = { + location = each.key + name = "${each.key}" + } + # rename to `key_iam` to switch to authoritative bindings + key_iam_additive = { + for k, v in local.kms_locations_keys[each.key] : k => v.iam + } + keys = local.kms_locations_keys[each.key] +} + +module "log-kms" { + for_each = toset(local.kms_log_locations) + source = "../../../modules/kms" + project_id = module.sec-project.project_id + keyring = { + location = each.key + name = "log-${each.key}" + } + keys = local.kms_log_locations_keys[each.key] +} diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf new file mode 100644 index 00000000..430b9f33 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -0,0 +1,95 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +# tfdoc:file:description Audit log project and sink. + +locals { + gcs_storage_class = ( + length(split("-", var.log_locations.gcs)) < 2 + ? "MULTI_REGIONAL" + : "REGIONAL" + ) + log_types = toset([for k, v in var.log_sinks : v.type]) + _log_keys = { + bq = [module.log-kms[var.log_locations.bq].keys["log-bq"].id] + pubsub = try([module.log-kms[var.log_locations.pubsub].keys["log-pubsub"].id], null) + storage = [module.log-kms[var.log_locations.gcs].keys["log-gcs"].id] + } + + log_keys = { + for service, key in local._log_keys : service => key if key != null + } +} + +module "log-export-project" { + source = "../../../modules/project" + name = "audit-logs" + parent = module.folder.id + billing_account = try(var.projects_create.billing_account_id, null) + project_create = var.projects_create != null + prefix = var.projects_create == null ? null : var.prefix + iam = { + # "roles/owner" = [module.automation-tf-bootstrap-sa.iam_email] + } + services = [ + "bigquery.googleapis.com", + "storage.googleapis.com", + "stackdriver.googleapis.com" + ] + service_encryption_key_ids = local.log_keys +} + +# one log export per type, with conditionals to skip those not needed + +module "log-export-dataset" { + source = "../../../modules/bigquery-dataset" + count = contains(local.log_types, "bigquery") ? 1 : 0 + project_id = module.log-export-project.project_id + id = "${var.prefix}_audit_export" + friendly_name = "Audit logs export." + location = replace(var.log_locations.bq, "europe", "EU") + encryption_key = module.log-kms[var.log_locations.bq].keys["log-bq"].id +} + +module "log-export-gcs" { + source = "../../../modules/gcs" + count = contains(local.log_types, "storage") ? 1 : 0 + project_id = module.log-export-project.project_id + name = "audit-logs" + prefix = var.prefix + location = replace(var.log_locations.gcs, "europe", "EU") + storage_class = local.gcs_storage_class + encryption_key = module.log-kms[var.log_locations.gcs].keys["log-gcs"].id +} + +module "log-export-logbucket" { + source = "../../../modules/logging-bucket" + for_each = toset([for k, v in var.log_sinks : k if v.type == "logging"]) + parent_type = "project" + parent = module.log-export-project.project_id + id = "audit-logs-${each.key}" + location = var.log_locations.logging + #TODO check if logging bucket support encryption. +} + +module "log-export-pubsub" { + source = "../../../modules/pubsub" + for_each = toset([for k, v in var.log_sinks : k if v.type == "pubsub"]) + project_id = module.log-export-project.project_id + name = "audit-logs-${each.key}" + regions = [var.log_locations.pubsub] + kms_key = module.log-kms[var.log_locations.pubsub].keys["log-pubsub"].id +} diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 410931e8..33a2b50b 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -23,7 +23,7 @@ locals { ) groups = { - for k, v in var.groups : k => "${v}@${var.organization_domain}" + for k, v in var.groups : k => "${v}@${var.organization.domain}" } groups_iam = { for k, v in local.groups : k => "group:${v}" @@ -38,14 +38,28 @@ locals { for k, v in data.google_projects.folder-projects.projects : format("projects/%s", v.number) ] + log_sink_destinations = merge( + # use the same dataset for all sinks with `bigquery` as destination + { for k, v in var.log_sinks : k => module.log-export-dataset.0 if v.type == "bigquery" }, + # use the same gcs bucket for all sinks with `storage` as destination + { for k, v in var.log_sinks : k => module.log-export-gcs.0 if v.type == "storage" }, + # use separate pubsub topics and logging buckets for sinks with + # destination `pubsub` and `logging` + module.log-export-pubsub, + module.log-export-logbucket + ) } module "folder" { - source = "../../../modules/folder" - folder_create = var.folder_create != null - parent = try(var.folder_create.parent, null) - name = try(var.folder_create.display_name, null) - id = var.folder_id + source = "../../../modules/folder" + folder_create = var.folder_create != null + parent = try(var.folder_create.parent, null) + name = try(var.folder_create.display_name, null) + id = var.folder_id + iam = { + "roles/owner" = ["serviceAccount:${var.bootstrap_service_account}"] + "roles/resourcemanager.projectCreator" = ["serviceAccount:${var.bootstrap_service_account}"] + } group_iam = local.group_iam org_policies_data_path = "${var.data_dir}/org-policies" firewall_policy_factory = { @@ -53,7 +67,14 @@ module "folder" { policy_name = "hierarchical-policy" rules_file = "${var.data_dir}/firewall-policies/hierarchical-policy-rules.yaml" } - #TODO logsink + logging_sinks = { + for name, attrs in var.log_sinks : name => { + bq_partitioned_table = attrs.type == "bigquery" + destination = local.log_sink_destinations[name].id + filter = attrs.filter + type = attrs.type + } + } } #TODO VPCSC @@ -72,7 +93,7 @@ module "vpc-sc" { shielded = { status = { access_levels = keys(var.vpc_sc_access_levels) - resources = local.vpc_sc_resources + resources = null #TODO local.vpc_sc_resources restricted_services = local._vpc_sc_restricted_services egress_policies = keys(var.vpc_sc_egress_policies) ingress_policies = keys(var.vpc_sc_ingress_policies) diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 77b68a4e..548d6fd2 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -30,6 +30,11 @@ variable "access_policy_create" { default = null } +variable "bootstrap_service_account" { + description = "Folder bootstrap service account: owner of the folder." + type = string +} + variable "data_dir" { description = "Relative path for the folder storing configuration data." type = string @@ -57,13 +62,92 @@ variable "groups" { default = { #TODO data-analysts = "gcp-data-analysts" data-engineers = "gcp-data-engineers" - #TODO data-security = "gcp-data-security" + data-security = "gcp-data-security" } } -variable "organization_domain" { - description = "Organization domain." +variable "kms_keys" { + description = "KMS keys to create, keyed by name." + type = map(object({ + iam = optional(map(list(string)), {}) + labels = optional(map(string), {}) + locations = optional(list(string), ["global", "europe", "europe-west1"]) + rotation_period = optional(string, "7776000s") + })) + default = {} +} + +variable "log_locations" { + description = "Optional locations for GCS, BigQuery, and logging buckets created here." + type = object({ + bq = optional(string, "europe") + gcs = optional(string, "europe") + logging = optional(string, "global") + pubsub = optional(string, null) + }) + default = { + bq = "europe" + gcs = "europe" + logging = "global" + pubsub = null + } + nullable = false +} + +variable "log_sinks" { + description = "Org-level log sinks, in name => {type, filter} format." + type = map(object({ + filter = string + type = string + })) + default = { + audit-logs = { + filter = "logName:\"/logs/cloudaudit.googleapis.com%2Factivity\" OR logName:\"/logs/cloudaudit.googleapis.com%2Fsystem_event\"" + type = "bigquery" + } + vpc-sc = { + filter = "protoPayload.metadata.@type=\"type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata\"" + type = "bigquery" + } + } + validation { + condition = alltrue([ + for k, v in var.log_sinks : + contains(["bigquery", "logging", "pubsub", "storage"], v.type) + ]) + error_message = "Type must be one of 'bigquery', 'logging', 'pubsub', 'storage'." + } +} + +variable "organization" { + description = "Organization details." + type = object({ + domain = string + }) +} + +variable "prefix" { + description = "Prefix used for resources that need unique names. Use 9 characters or less." type = string + + validation { + condition = try(length(var.prefix), 0) < 10 + error_message = "Use a maximum of 9 characters for prefix." + } +} + +variable "projects_create" { + description = "Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder." + type = object({ + billing_account_id = string + }) + default = null +} + +variable "projects_id" { + description = "Project id, references existing project if `project_create` is null. Projects will be moved into the shielded folder." + type = map(string) + default = null } variable "vpc_sc_access_levels" { From 440e9c59b93d91370e2ff356f5982ab6352347ea Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 25 Jan 2023 12:32:10 +0100 Subject: [PATCH 04/58] Update --- .../data-solutions/shielded-folder/kms.tf | 8 ++++---- .../shielded-folder/log-export.tf | 14 +++++++------- .../data-solutions/shielded-folder/main.tf | 4 ++-- .../data-solutions/shielded-folder/variables.tf | 17 ++++++++++++++--- 4 files changed, 27 insertions(+), 16 deletions(-) diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index 94ff244d..a4824306 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -30,17 +30,17 @@ locals { # Log sink keys kms_log_sink_keys = { - "log-gcs" = { + "storage" = { labels = {} locations = [var.log_locations.gcs] rotation_period = "7776000s" } - "log-bq" = { + "bq" = { labels = {} locations = [var.log_locations.bq] rotation_period = "7776000s" } - "log-pubsub" = { + "pubsub" = { labels = {} locations = [var.log_locations.pubsub] rotation_period = "7776000s" @@ -58,7 +58,7 @@ module "sec-project" { name = "sec-core" parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) - project_create = var.projects_create != null + project_create = var.projects_create != null && var.enable_features.kms prefix = var.projects_create == null ? null : var.prefix group_iam = { (local.groups.data-engineers) = [ diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index 430b9f33..2d8a5f84 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -24,9 +24,9 @@ locals { ) log_types = toset([for k, v in var.log_sinks : v.type]) _log_keys = { - bq = [module.log-kms[var.log_locations.bq].keys["log-bq"].id] - pubsub = try([module.log-kms[var.log_locations.pubsub].keys["log-pubsub"].id], null) - storage = [module.log-kms[var.log_locations.gcs].keys["log-gcs"].id] + bq = [module.log-kms[var.log_locations.bq].keys["bq"].id] + pubsub = try([module.log-kms[var.log_locations.pubsub].keys["pubsub"].id], null) + storage = [module.log-kms[var.log_locations.gcs].keys["storage"].id] } log_keys = { @@ -39,7 +39,7 @@ module "log-export-project" { name = "audit-logs" parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) - project_create = var.projects_create != null + project_create = var.projects_create != null && var.enable_features.log_sink prefix = var.projects_create == null ? null : var.prefix iam = { # "roles/owner" = [module.automation-tf-bootstrap-sa.iam_email] @@ -61,7 +61,7 @@ module "log-export-dataset" { id = "${var.prefix}_audit_export" friendly_name = "Audit logs export." location = replace(var.log_locations.bq, "europe", "EU") - encryption_key = module.log-kms[var.log_locations.bq].keys["log-bq"].id + encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.bq].keys["bq"].id : false } module "log-export-gcs" { @@ -72,7 +72,7 @@ module "log-export-gcs" { prefix = var.prefix location = replace(var.log_locations.gcs, "europe", "EU") storage_class = local.gcs_storage_class - encryption_key = module.log-kms[var.log_locations.gcs].keys["log-gcs"].id + encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.gcs].keys["storage"].id : null } module "log-export-logbucket" { @@ -91,5 +91,5 @@ module "log-export-pubsub" { project_id = module.log-export-project.project_id name = "audit-logs-${each.key}" regions = [var.log_locations.pubsub] - kms_key = module.log-kms[var.log_locations.pubsub].keys["log-pubsub"].id + kms_key = var.enable_features.kms ? module.log-kms[var.log_locations.pubsub].keys["pubsub"].id : null } diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 33a2b50b..924b5167 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -67,14 +67,14 @@ module "folder" { policy_name = "hierarchical-policy" rules_file = "${var.data_dir}/firewall-policies/hierarchical-policy-rules.yaml" } - logging_sinks = { + logging_sinks = var.enable_features.log_sink ? { for name, attrs in var.log_sinks : name => { bq_partitioned_table = attrs.type == "bigquery" destination = local.log_sink_destinations[name].id filter = attrs.filter type = attrs.type } - } + } : null } #TODO VPCSC diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 548d6fd2..8735886d 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -41,8 +41,19 @@ variable "data_dir" { default = "data" } +variable "enable_features" { + description = "Flag to enable features on the solution." + type = object({ + kms = bool + log_sink = bool + }) + default = { + kms = true + log_sink = true + } +} variable "folder_create" { - description = "Provide values if project creation is needed, uses existing project if null. Parent is in 'folders/nnn' or 'organizations/nnn' format." + description = "Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format." type = object({ display_name = string parent = string @@ -83,13 +94,13 @@ variable "log_locations" { bq = optional(string, "europe") gcs = optional(string, "europe") logging = optional(string, "global") - pubsub = optional(string, null) + pubsub = optional(string, "global") }) default = { bq = "europe" gcs = "europe" logging = "global" - pubsub = null + pubsub = "global" } nullable = false } From 0ce110f170d372e1c05ed56f1b47c5dfd7292319 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 25 Jan 2023 18:22:43 +0100 Subject: [PATCH 05/58] Make KMS and Log sink optionals --- .../data-solutions/shielded-folder/kms.tf | 13 ++++--- .../shielded-folder/log-export.tf | 38 +++++++++++-------- .../data-solutions/shielded-folder/main.tf | 6 +-- .../shielded-folder/variables.tf | 6 +-- 4 files changed, 35 insertions(+), 28 deletions(-) diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index a4824306..fbf47b08 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -32,7 +32,7 @@ locals { kms_log_sink_keys = { "storage" = { labels = {} - locations = [var.log_locations.gcs] + locations = [var.log_locations.storage] rotation_period = "7776000s" } "bq" = { @@ -54,6 +54,7 @@ locals { } module "sec-project" { + count = var.enable_features.kms ? 1 : 0 source = "../../../modules/project" name = "sec-core" parent = module.folder.id @@ -74,9 +75,9 @@ module "sec-project" { } module "sec-kms" { - for_each = toset(local.kms_locations) + for_each = var.enable_features.log_sink ? toset(local.kms_locations) : toset([]) source = "../../../modules/kms" - project_id = module.sec-project.project_id + project_id = module.sec-project[0].project_id keyring = { location = each.key name = "${each.key}" @@ -89,12 +90,12 @@ module "sec-kms" { } module "log-kms" { - for_each = toset(local.kms_log_locations) + for_each = var.enable_features.log_sink ? toset(local.kms_log_locations) : toset([]) source = "../../../modules/kms" - project_id = module.sec-project.project_id + project_id = module.sec-project[0].project_id keyring = { location = each.key - name = "log-${each.key}" + name = "${each.key}" } keys = local.kms_log_locations_keys[each.key] } diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index 2d8a5f84..0c72298d 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -18,15 +18,15 @@ locals { gcs_storage_class = ( - length(split("-", var.log_locations.gcs)) < 2 + length(split("-", var.log_locations.storage)) < 2 ? "MULTI_REGIONAL" : "REGIONAL" ) log_types = toset([for k, v in var.log_sinks : v.type]) _log_keys = { - bq = [module.log-kms[var.log_locations.bq].keys["bq"].id] - pubsub = try([module.log-kms[var.log_locations.pubsub].keys["pubsub"].id], null) - storage = [module.log-kms[var.log_locations.gcs].keys["storage"].id] + bq = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.bq}/keyRings/${var.log_locations.bq}/cryptoKeys/bq"] : null + pubsub = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.pubsub}/keyRings/${var.log_locations.pubsub}/cryptoKeys/pubsub"] : null + storage = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.storage}/keyRings/${var.log_locations.storage}/cryptoKeys/storage"] : null } log_keys = { @@ -35,29 +35,35 @@ locals { } module "log-export-project" { + count = var.enable_features.log_sink ? 1 : 0 source = "../../../modules/project" name = "audit-logs" parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) - project_create = var.projects_create != null && var.enable_features.log_sink + project_create = var.projects_create != null prefix = var.projects_create == null ? null : var.prefix iam = { # "roles/owner" = [module.automation-tf-bootstrap-sa.iam_email] } services = [ "bigquery.googleapis.com", + "pubsub.googleapis.com", "storage.googleapis.com", "stackdriver.googleapis.com" ] - service_encryption_key_ids = local.log_keys + service_encryption_key_ids = var.enable_features.kms ? local.log_keys : null + + depends_on = [ + module.log-kms + ] } # one log export per type, with conditionals to skip those not needed module "log-export-dataset" { source = "../../../modules/bigquery-dataset" - count = contains(local.log_types, "bigquery") ? 1 : 0 - project_id = module.log-export-project.project_id + count = var.enable_features.log_sink && contains(local.log_types, "bigquery") ? 1 : 0 + project_id = module.log-export-project[0].project_id id = "${var.prefix}_audit_export" friendly_name = "Audit logs export." location = replace(var.log_locations.bq, "europe", "EU") @@ -66,20 +72,20 @@ module "log-export-dataset" { module "log-export-gcs" { source = "../../../modules/gcs" - count = contains(local.log_types, "storage") ? 1 : 0 - project_id = module.log-export-project.project_id + count = var.enable_features.log_sink && contains(local.log_types, "storage") ? 1 : 0 + project_id = module.log-export-project[0].project_id name = "audit-logs" prefix = var.prefix - location = replace(var.log_locations.gcs, "europe", "EU") + location = replace(var.log_locations.storage, "europe", "EU") storage_class = local.gcs_storage_class - encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.gcs].keys["storage"].id : null + encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.storage].keys["storage"].id : null } module "log-export-logbucket" { source = "../../../modules/logging-bucket" - for_each = toset([for k, v in var.log_sinks : k if v.type == "logging"]) + for_each = var.enable_features.log_sink ? toset([for k, v in var.log_sinks : k if v.type == "logging"]) : [] parent_type = "project" - parent = module.log-export-project.project_id + parent = module.log-export-project[0].project_id id = "audit-logs-${each.key}" location = var.log_locations.logging #TODO check if logging bucket support encryption. @@ -87,8 +93,8 @@ module "log-export-logbucket" { module "log-export-pubsub" { source = "../../../modules/pubsub" - for_each = toset([for k, v in var.log_sinks : k if v.type == "pubsub"]) - project_id = module.log-export-project.project_id + for_each = toset([for k, v in var.log_sinks : k if v.type == "pubsub" && var.enable_features.log_sink]) + project_id = module.log-export-project[0].project_id name = "audit-logs-${each.key}" regions = [var.log_locations.pubsub] kms_key = var.enable_features.kms ? module.log-kms[var.log_locations.pubsub].keys["pubsub"].id : null diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 924b5167..91c47707 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -38,7 +38,7 @@ locals { for k, v in data.google_projects.folder-projects.projects : format("projects/%s", v.number) ] - log_sink_destinations = merge( + log_sink_destinations = var.enable_features.log_sink ? merge( # use the same dataset for all sinks with `bigquery` as destination { for k, v in var.log_sinks : k => module.log-export-dataset.0 if v.type == "bigquery" }, # use the same gcs bucket for all sinks with `storage` as destination @@ -47,7 +47,7 @@ locals { # destination `pubsub` and `logging` module.log-export-pubsub, module.log-export-logbucket - ) + ) : null } module "folder" { @@ -64,7 +64,7 @@ module "folder" { org_policies_data_path = "${var.data_dir}/org-policies" firewall_policy_factory = { cidr_file = "${var.data_dir}/firewall-policies/cidrs.yaml" - policy_name = "hierarchical-policy" + policy_name = "${var.prefix}-fw-policy" rules_file = "${var.data_dir}/firewall-policies/hierarchical-policy-rules.yaml" } logging_sinks = var.enable_features.log_sink ? { diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 8735886d..a770df6b 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -92,15 +92,15 @@ variable "log_locations" { description = "Optional locations for GCS, BigQuery, and logging buckets created here." type = object({ bq = optional(string, "europe") - gcs = optional(string, "europe") + storage = optional(string, "europe") logging = optional(string, "global") pubsub = optional(string, "global") }) default = { bq = "europe" - gcs = "europe" + storage = "europe" logging = "global" - pubsub = "global" + pubsub = null } nullable = false } From 1189e38788529cd0de5483d3505e436778644b38 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 25 Jan 2023 18:30:21 +0100 Subject: [PATCH 06/58] Fix --- blueprints/data-solutions/shielded-folder/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 91c47707..fe53e008 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -77,7 +77,7 @@ module "folder" { } : null } -#TODO VPCSC +#TODO VPCSC: Access levels data "google_projects" "folder-projects" { filter = "parent.id:${split("/", module.folder.id)[1]}" } From 9a46f06dd024058540987433c4916321125d884e Mon Sep 17 00:00:00 2001 From: lcaggio Date: Fri, 27 Jan 2023 10:05:19 +0100 Subject: [PATCH 07/58] update readme --- blueprints/data-solutions/shielded-folder/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index fb91f4b2..45247d72 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -1,3 +1,16 @@ +# Shielded folder + +This module implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads hineriting contrains from the folder they belong to. + +In this blueprint, a folder will be created implementing the following features: +- Organizational policies +- Hirarckical firewall rules +- VPC-SC + +Withing the folder the following projects will be created: +- ' + + #TODO Proper README (after deciding if this is a blueprint or a FAST stage) # Implemented From a808ea3293bace72a2473151b956e6056ef55f54 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Mon, 30 Jan 2023 23:32:13 +0100 Subject: [PATCH 08/58] Draft README --- .../data-solutions/shielded-folder/README.md | 98 +++++++++++++++++- .../images/overview_diagram.png | Bin 0 -> 83444 bytes .../data-solutions/shielded-folder/kms.tf | 8 +- .../shielded-folder/log-export.tf | 15 +-- .../data-solutions/shielded-folder/main.tf | 39 ++++--- .../data-solutions/shielded-folder/output.tf | 22 ++++ .../shielded-folder/variables.tf | 19 ++-- 7 files changed, 166 insertions(+), 35 deletions(-) create mode 100644 blueprints/data-solutions/shielded-folder/images/overview_diagram.png create mode 100644 blueprints/data-solutions/shielded-folder/output.tf diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 45247d72..e20c54c7 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -1,16 +1,108 @@ # Shielded folder -This module implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads hineriting contrains from the folder they belong to. +This blueprint implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads hineriting contrains from the folder they belong to. In this blueprint, a folder will be created implementing the following features: - Organizational policies - Hirarckical firewall rules +- Cloud KMS - VPC-SC -Withing the folder the following projects will be created: -- ' +Within the folder the following projects will be created: +- 'audit-logs' where Audit Logs sink will be created +- 'sec-core' where Cloud KMS and Cloud Secret manager will be configured +The following diagram is a high-level reference of the resources created and managed here: + +![Shielded architecture overview](./images/overview_diagram.png "Shielded architecture overview") + +# Design overview and choices + +Despite its simplicity, this blueprint implements the basics of a design that we've seen working well for various customers. + +The approach adapts to different high-level requirements: +- IAM roles inheritance +- Organizational policies +- Audit log sink +- VPC Service Control +- Cloud KMS + +# Project structure +The Shielded Folder blueprint is designed to rely on several projects: +- `audit-log`: to host Audit logging buckets and Audit log sync to GCS, BigQuery or PubSub +- `sec-core`: to host security related resources such as Cloud KMS and Cloud Secrets Manager + +This separation into projects allows adhering to the least-privilege principle by using project-level roles. + +# User groups +User groups provide a stable frame of reference that allows decoupling the final set of permissions from the stage where entities and resources are created, and their IAM bindings defined. + +We use three groups to control access to resources: +- `data-engineers`: They handle and run workloads on the `wokload` subfolder. They have owner access to all resources in the `workload` folder in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. +- `data-security`: They handle security configurations for the shielded folder. They have owner access to the `audit-log` and `sec-core` projects. + +# Encryption +The blueprint support the configuration of an instance of Cloud KMS to handle encryption on the resources. The encryption is disabled by default, but you can enble it configuring the `enable_features.kms` variable. + +The script will create keys to encrypt log sink bucket/dataset/topic in the specified regions. Configuring the `kms_keys` variable, you can create additional KMS keys needed by your workload. + +# How to run this script +To deploy this blueprint on your GCP organization, you will need +- a folder or organization where resources will be created +- a billing account that will be associated with the new projects + +The Shielded Folder blueprint is meant to be executed by a Service Account (or a regular user) having this minimal set of permission: +- Billing account + - `roles/billing.user` +- Folder level + - `roles/resourcemanager.folderAdmin` + - `roles/resourcemanager.projectCreator` + +The shielded Folfer blueprint assumes [groups described](#groups) are created in your GCP organization. + +## Variable configuration +There are three sets of variables you will need to fill in: +``` +organization = { + domain = "example.com" +} +prefix = "prefix" +``` + +## Deploying the blueprint +Once the configuration is complete, run the project factory by running + +```bash +terraform init +terraform apply +``` + + +## Variables + +| name | description | type | required | default | +|---|---|:---:|:---:|:---:| +| [organization](variables.tf#L128) | Organization details. | object({…}) | ✓ | | +| [prefix](variables.tf#L136) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | +| [access_policy](variables.tf#L17) | Access Policy name, set to null if creating one. | string | | null | +| [access_policy_create](variables.tf#L23) | Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format. | object({…}) | | null | +| [data_dir](variables.tf#L33) | Relative path for the folder storing configuration data. | string | | "data" | +| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | +| [folder_create](variables.tf#L50) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | +| [folder_id](variables.tf#L59) | Folder ID in case you use folder_create=null. | string | | null | +| [groups](variables.tf#L65) | User groups. | map(string) | | {…} | +| [kms_keys](variables.tf#L75) | KMS keys to create, keyed by name. | map(object({…})) | | {} | +| [log_locations](variables.tf#L86) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | +| [log_sinks](variables.tf#L103) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | +| [projects_create](variables.tf#L146) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | +| [projects_id](variables.tf#L154) | Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | +| [vpc_sc_access_levels](variables.tf#L163) | VPC SC access level definitions. | map(object({…})) | | {} | +| [vpc_sc_egress_policies](variables.tf#L192) | VPC SC egress policy defnitions. | map(object({…})) | | {} | +| [vpc_sc_ingress_policies](variables.tf#L212) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | +| [vpc_sc_perimeters](variables.tf#L233) | VPC SC regular perimeter definitions for shielded folder. All projects in the perimeter will be added. | object({…}) | | {} | + + #TODO Proper README (after deciding if this is a blueprint or a FAST stage) # Implemented diff --git a/blueprints/data-solutions/shielded-folder/images/overview_diagram.png b/blueprints/data-solutions/shielded-folder/images/overview_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..dcc3bccd8c1027906475a54339b68721529efec2 GIT binary patch literal 83444 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

_u4aR(!=6+WfEL#{4A1$|AnE4o7Zz*zD zgs0eaj6_-V1i2M4D@w-}rfkFu$deAp=o^{j6OKRKP%YAZp{zYb{hQTBCekA6GiAMa zAb)9D(1x;7{9_5h@ae0rDxr)JS&PM^u3*CHsRv=63R~I7ovZX8gEDN2KLeOfu*qBx z(w+nVNUXSF=IuwS=g!-Uy!mKm9gUL-HP@8_8$91v28iEoE2BT^*V%L3yTZ4@7>3vl z4+%2j=R0hrJFYW~FP_Wh_0e^Nc zH4&{>`dM)hE4PES-&Sqr-#WD?F*XVq#uaIDn71aXG_ZnC2RMAilvQId$9#}P&pHxQ zCe-o;6&Rtx@*WhKvl)QP&!WiqgKAPvWVO`#Y=P!Wk+-$Fywqzx+-`$W5&wI)% zj!w+NJnDAR8$8F}WMES+?(P8dXRUx+YK5bKDMGe}r2pWBZ7U!}^nLEN8^*Rf=$T9Ne`uX zn!OvU0KTWdrkXx1&_E$QMTf;<8HoBKmWz!_4%MP0jA1b~MPCDn#?^{knpJW_s;CSq zSySBBo|M5t5zc$o`(x6zG8$Msah|)D+6np1LP1t))k-up9ZV5FQxSm=tGtCfOcY+p zF+9PS=h9;-Buhq*ic|q1{v7u*+@7joB_)XOV>X$mCkdjTpU*-2R;BamShk<&AnxEE zL%o+Mnm1Ia>5zHEIg{2N1|$VFxO?hCB@2S{L)`;;Xzla3Cz#;Poi~0@g5f&6V={|P z7;a)9%qrmYuXu;u1R^NkUV+F;EKWx8HnQpk0gfnlD&lP8XU2!%=b&tQ9a1|zCRtD_GS zp=tQf&FOJgIX)O)tN{E#_CK!djh)GBw=vo}jiM2HcF<9|n{V>Anh5_nIN&+{%#!{8 zD~Q3{x;Ob18wkt^!qb?;^y<3B$?i0r{Lw;tsJOGKdZg7PTQjA+gK$iBW=-xGf80ZG zd9o^ioRpmUOlH8~uNq9-)b27_3=bg>i8gNq=t2G}J@>TWB%p{<{qAa=ATG&jWvz?by0?@7w$i9pt=;eb&t`Av z{hq@PQ~~F!JOEBCoEJJ`ZbZq!!)?9Y-S<!hy!SAfCAXGc#e8|6%ikBTjGA}+nb0qXaGqa{{&-)zk^=ru-ruI>@7Y3{NQrs z_vmjZ4TnICdh+e=$Xo3{YRnMVnuo|N((1_4t?LKnl&?%+mk{SLNzQ(^>&3~vgeWv0 zd@8_53&O5DBU4%iB)&y1OKP8=5;nn4v84j+&;XF4zbnuopgfXpcw64-ah(H4Xul^W zIunIK%D2R6>t3(9y;JDwk=D~GDt^C+8dK=*h_JpWND?5Otkb-C)(yMrUs0w8qMW^z zUU&nlNG8}k3DxG7n7RxAmx}h>fxrX(yXHAANPH=M-M`UP@QN_UG`re_=>}_<*>Gsb zpBR3fqLAs{h1Uo;#D`AIPxeE$nN;hue^Lt8YOK`?*Ny^O>Udao=M$d`_MiV%10=r0 zo9M*6s_uMzl6)|wK?47hv}wLm=?2;GA5k!c9;Z^8+`T=F1n9UO9$VZSf;5nUE8Jau z743CHkx$}4g9&tN!UXdV(b&EK0zKmkF}zisvsk*b@qc&uVhQgvxi{F_Q8WG;k~qd+ zm{iwiwA92UUdu@;sIbntuZGjJ5fZx)T%Uc>I~14(=)=F;SgiN%5&DidIXL497Mbh7 zr|{<>hSEhq_tD#pG(#|dBkHC&69pyC+mC`6?_zH6?CKf>_H@qo5WYBhq`UnUaR(QyLltu~L>B z0TaDIK(98~ib-%$sW8|1>^Rqkb11~AqB7)UBxJYqrKfX>_oGZ!{@(jaT{LoGfczO| zpwRwmff;(T4mT^+>MqXGkC*8!5e=LPnK>8&w#fKY1b~}RazIk1slBWDhCjWG0fhpN zNK&tEB}x^jhyVR4x=Z#Y$7F{eQd2ubEy2T?WpQqgb2VV=4vumYBnYVfEL@7X9 zEeEvlTUC9)Aaas99G|3p1HUH=fZu+U`3>rg^z`Nc>CtxacD_~KRY1KD7?i)JzmY+a z0w9CVn*?jH0Ot>}R}?&V0^5KSbV9HJ(ouCB&4Ig=Z2TIucbCmzB7{3H6 z?}?;bKl%*=kTC%Uc>8vV;+Bo%f$J35A6f#-3;a0?#UDt%>bFXie;h)l`w%|j0r%fs zzR1F>@oF-3N6+?+x(qyq4~3N#O6Ej%e$OuKIJur+>0E`)Ik`UXWC;^Yc6Y-JT z{V%@KH#dVr@PnJBoW6C`;k?MeRX;XRFy5T&344BXZLq`t{pY#pK9pZJ^#9m}*GeMF z=#hJ>oSI5+P(caB0_hDp>F}m{pS&BgAwCUlnlsUZryeE{39Y90(C1;3xdED|yF3rg zui7b*7g|#=g%{7;5<;&Bb#dHy`^)dAi%h~=Gg@`m z7j}gwz0K_^@~4~oj9429?YjHts|X1mQYURa3GdQKFE5y%;iJia_t?D~qr)=p0ff?q@q} zbhRz)*0iSO9}Cgs-l|!lE!T3YH}f+`j=8Svx!T>9y9VGDtrxorpNbzQocx?DaDIqu zepSjJIn8hDEl%D&nFigmwPYmxu@qT+Vdv#|dbNMP!2vGXNopR66f-S{4{lLTH^PGU z)Z@Drp1FIK>ZjHlA5_=q|tb8i^Z{z zHhwi$+UF*|Jr_2F>rQTYJrVkj9s7`dzRU{_IPLcpOgnp*3vx1&V5ll(&uuBvg=oB^ z{3I7jm2x#_y2xm685elsc(Z!B#|C_n6xW8~4f5ULf!*N^YX9;68UAZ#*D%80Q}g9# zR>E9jz%QX-WHTFL%4!(MQdFy^Eh7Fgh$TX14L_LPjp#06a~pZ0h!p?@aBxJ-b?c5& zkO9>LZ^z<$qk6;&JWYFqUb4dfHz$B0v3bF;Q9Q+6!}!*Y>Gr*|DK_OUFi;|gPzPO{ zsOd%s!9e+|9KJZf4>q(YEI6-gl${Mq9V9S77J^WuTcH`x z)kHaptO<&AAAo(kj~%c9uI-tPfEbi*qwoj;<&&sq%<$~%rN=ke5D`O^?2vM2+kbf) z{GgNpq!83Y!am;IWkq(z$!#+`PDiR#Uo@|s{VX$rYVlTsrh{_wlNa2-U)=yC!VEuX zscp6^NmTk+g7@YKI0VysnRr5`{|$RuA}#eKu-Y@Suo$A2S)PCKBlq<5@id)H5wG0% zgKR{K*J^46ub%F~4m-n|85O@gK;n9KgPvp&;2op#`7+#62FzJ1bwB$MeG44}8sOCG z{p5sKNkvJ@eab#fNy=)ltI4y@7?(a#5_4lr&W0Zx98{QIIFfs#B+$-Cm|#)ZA_gJM z6hgqld2MkZKlN$}dd&9br6%K#B_gcr|A zvy5}Wc0qY0PiF9``LW(l?>-vDM)Jh5E;D9rUmSF}{M(p_3^TwJ2u!IHwJh5Ma@JeG zMR*Y35W3wLH>kXguslUl0d^@T?`Yn}?_WSv*qXV3fu9y`bL z-Ew0UES!>2d5v{L8nVZTZ>k}A&5ZAp;lKVjZwVWwiKGr9#+G(y2<&H`RnGs@ch9Yi$OzNr7mK9H1GqSB|c|-eqlE zp-o3Z`KHy-XPTv9&_T)kR`h~3&EQX%v8d(bbfkD zrlH@*>FG*|)`-a}BBg!eFdEk84iLd322fci_m!O*_nh#Uqc>>m>8!>PGyJ?qbB6X6;pAdJ!{E1S}= z+{_FOS&BdN)@;i7tf!-EUZ{iVg3avKr^fiedxaSa2rS98pfxcPv?!931Vl~Bi;*ZW{`gXhT!>C|*69fE>3C~Lm zk0?zx^K}?En}=@Xt^8rcNyx`t_>WbS&yRy7@i$Fs%rq5EKWLPBqR~g*oq^SY9hnyEW~`Mp(rwZbT3`2M5z9)if)(*KGC|Dz_43 z;kt#Qzf3351gYNpu$*pUcPhwPCB`=l;Y4*E_0kq*sw91tGIdaO9I&T#y-yH=0I2!= z+&Ra#UghrgA3)6 zcp_QGj&HS&Qn}z?Mi!q;SAew=VOEHkjr*h8b3piZ)Dvioat4i=`D8xw0+TX^^3OtA zL`!GE7y%B!0Wusg`+>O$=_kA$l^XEv-C!(!nDf#X_Iv?R|DbTt`UhSLH2D1adjn7% z1lY*jN@WMwh!8oSN$Gn@nkH|0`Wk@wO$|gtowah~SR#p{@IG2O__z*E5}O!2PDk=C z`uU!o1i(ae^>&nihMo_2Usw8eyBLi=2&om&zDhYz=YmDV>i2+Jh}x0QnM&3Kgf{g$ z0wLJsn!y2kc75m@60h#R&kJqcegIEP*BYL{<;hf|phHX_!n=_0=Lkxe_I~6RV25E1a=5*~pZa4@`&bFN zK&+60RuU-q*fNUHB&_c|@QBKLLWNV4N1=oEDAN5qPWTx*O`-CQ0 zitD&BGJ-lPK$u$Tj=aChoUyOOC`_D%y_E0N?Tt|c?hP9T!7>qE{~V*(hG-EMAj2Ye zypAe4ABPe4Q9zE^lP@%h;G1Ba@%ZH@ZL~^iwwK`m$Jvdq$N?^%cpVuu1>y-m-m5D}jo4`5b?hnOTay?wAw zU0VO`iR8JzHSk{9>i&_KT}YT2XyRH_wzGc;9ZU#}>tR*|Lb5-Y=+GKu!P+g^-Nk%1 zE#w>SPY%|&)EbKv7`<*Tmb=zq%Ek#4>Os+oNW%pO2ELE`tqW+Y0&g@IlKyHFx zRMRh`eLbiCXq+Lowcos6KyrtK_UdbC&?;BgE{xyUX3KESWUhQJgNv zgxhxf^Y{8#NrY-ggTI?m;w&2}~PJ zL!M)>=u{mxFJo9Sn+Ui*;i`AsN|pFnXRGlJD!skb5fIzOnUJepTveLH?lN%_E3tf3 zIhWl;IJ|vs?7sA6Zo)sqDIq!a*KZ?!?P#S!IVc0PUmrx{^Gp*k#$El zlUJ9Q88UK&PgJon@-^Lcf8f`)1a-vQX`dP;Y+Y}J-qG<0{}$gj--*>kdg0qs#p@sP zz(sLBA|u}1#Q0TL52^KKV7|}D(-@I))NyaZocU4lVz)rh9zsDT^_kVpE}`n-e=0M& z3c>99$%ysN41W2f=F{WQG8_x#%23tQ(?;g&Sl+!^pO@E1SZO7j zto3h>W-}&HdtNuTuHkm1b@p9f#`wL^DL7kfk|a50hLqJFjp35IFBpArFth!QUp_&# zZ_@9LUiD7<{6*Yy@mnEy$U&cH3e+3zOV@F8YBS2pbCJK2zw-Qx|u<~a=gbg$@(iLDLgBW!^Jq(diL%1j{J*-{gNxBc8CvmZj7*7)z2W&tvZXDLv9CB zuC)2Yjnhp!vPE8+lcIvH{F}bWPD^A7C#~%y397QZ4 zl~48K@#8(HaouWdJ3SRD4mKu%uY_3Ch?9c9@vLmjFGLh!vM6IFFlQ7&pE_AMw z7B+a@lP{?B^>fb_t-`~C+_&R7HP8c353Pz>D_%c+7aH1Aag5xiHoCh?;Qmg$jlOVR z4Jx2{(X}#9a6Fm7fBJ#j2YveZs>WLsxz_6KxQ2RN&1H49Hl&!@;bJE=OvsHd8+&yL z%UGwP)wpYMskF~I?1&7L9A4v7euqJds_uS$LdY2Otg9fdFs1)d6tdv%Zid3$6VKS=jDL&eLa!~B&WSr`l@}DeR|wn^~?d|=Y2kVh^hOpr&os;r0W_g z*KH|TIQ4$Ax-UA@)$RlgJiDY`Jn2>#wi}HY+0Eg%Vs_i*dMA!S5V~E)Izh>vnk2+D zp|@wn)g=z%ql&S(4#EO==HBJH+2 zM~$GnvUW1`RhteP&nL<}gs%;EzaM&>>O|pDCdHe12bC2s`mwW>eLb|Q%P-uooskPGPhbj>u zXVMWdMyumKyg9ubmnY~}-(xrYGj^Xwr&fRQhY};Y>+Wft+>(lWo$(~;wdUE;`0u)l zDk<3@vu;_d3_QHpeGiZ8lQn|z1h>L%1C@izp}{y7Kb$}+>&4!o<%mJp9o2h3j7% z=SVLXep3$*n@`QDt7nvpU-xWNIfVT-a43^L$UoW0DcG)G4&k0&xATfMegvwfrJ0Tj z!B8xRrYFIF{FS(eJM2kGq15lAO%T1O96ieWnmU$TFHXC-OP;o;ytzId$kpOJF6!6_ z3@n;?x8?~S!ti!lt^P8P>G*PY@Hh2`5?9Uu#ajJfrn@Fq=2uH^NUx_~D;+LQI<_Iq zGkWYx4L4N_8T)VA&`4X$Y#cZYUs)8UxTa<=3-Kx{Q;wYvA&=`gDN8JH19u6yPbf}k znNQC$K@?t-BPHpCm|drOu_l<9JN*F> z&yvTrq=EZ!1eu7IK2Lpj~;lF+x&mSYQETPyv8S!L9B;;7K09sI zVX9f)l3I4#uq|@<5;TA1KSkQ9E1fxRZZgR>RPHN@3o--Y~4w_R{ct!`$P8^14aE+_v2x2OQ>= zXCp|*$%ltF)*uSSv%Bpclb-AaX%OcX%}iuLrR9QO5QUy}T`RCG>e&kN z{LtLYUfOnoZN7lSsNThjd!$a3TQ~1vxYFKZGqn^A!v<-{u^SZMh){(>Qayb;X81@M z^l0OzRWs(GlXP^f3ME< z4Er5L@~SYTGPh<)^f*}VzPK$9xpc zTpTW!m*yQZ3wJ;65QyoRN?;a`qc4DYx!q$ zncz=lmzt}};kvMjUb&MBH>2i`ZC7S9Zp25+ND8@{Ze1;t`$Af_+m5X0-&NCa zg*?t#O&6>Bq4>GSkU3&**{!L(hGlZ-PYeDI9e1y2&KN`X~%Cq&6uY;AiGhm_&eR zoWg+6Q(GkRt~L1?L`748p;&y(%dd&FQ>W5y@aR#@=8_pLl9O+2?tNZvYTiOK(?~eE zKBF=;+6U`#znfAlFV7D4UcCheWA^@a>DuMf-y%{egq3$Y)i|}V<)x6n#WXfIpHeL< zSAmwCZ^xR3{}A;z_|>3U3Avp1aI3CNQ?fK2N2sojjt)8a#X6w#n3 z7=bA}ManLWWxXUqg+x{|AawZ|fBSs!)WifuVEZe%BM&s8uP-H}S!)f;`JI;?95=b3 zj71<*+6QtYj{<97#$mC=i8%Dw5!g<=E-EitGgdCJGdi!;6R(V{b-ezuJbhABv-d^c zAL`FcGPGSi9Jk(iI`5;i5fQxCft=2drdIQA{Cr#z6tjwba=4- z^hbZ!c)M(@`Bz1bs&q}4LDkCqVi5zq=waEFr+lHVkT;OuwrCl^_ zD!BamWt%G zmZwXnzr4NEX(EsF3e@V?)5_~4WmY-fOTX2Y<&F}pH6ILWO^CYweV*U$;Hwy?6zn?! zy>_{py5nidA-5U`x^g!dN+jX_r>vAI9rDI~JH6d<#VnSV@WIFM~2BrAAa{lCD zV~kEq%UCx9%WFxr?{v#)cP4mja%BzHXnZmf4;L%6(q19P)9Ntnj{|O>NebkUnWd$!t1CxOL={~)vq+3AM>=^WkV+7 z7i6mx$t0_-{;aROzb;Ce(?qi`1?sT_HCno!O|oMAT%rALC*94|-MAIcG{Knm`?eKf;ax8dyX*yw@A4rK7n9TPjjmCjwup8QD=4Z#UPKn2d5Uiy zQcfMa=^J4dH&QXX!fzYhaaFAO#jKQC9$n(@u$V!0X_+#58#F;Qr1d=0CZb1l;Aae4 zDBCwD9SRD18%m|S53iT&^XnHbI1RpA@0VT5b)PL1W-QZl$Hggy(BdyDmvU}MZAS~F zl8MJRgo>ZVLShMXxHlqPO3OQWS_$~ulP)GmY|amNg6H?1q;h5ykwfoVPE^T}=wBQi z_;!o#&CG9dYt8UIt}>GgpJ=JI?g!s@p^FNwrqZ_GT^Uk7A0kH9=Wa-jRoNX;t+ZUu z9mcP?a;qwj+c};bv_+ZT6e4@Q9x*&JkQoj zC=R>tazq+-A~z=wtt7){YwKDE&lx^%Oej(l`bSvtYY!h;r|v82OjC_3Y*fzsBQUi? z@>^TJ$=~sLu(}ydhhf*A&ty(tkA@7nnxw#GA^Jv{l824do@zggBQl>aVOY@dAkxWS1Wmo3@I3|5W)yb06j1Uv`*~Uj=q@X^6o^ zc|@CIT%%Dkqu=d$7{?TbgbEBiPRXH)`YKyU!(~1E?*;7=lP&mUEgc*I6KZ^5Haf|i z*cViru5eSS6qltht4m`3a{oIW^mkmf5%kfF?QHzzqQ%GDDXHg@@3bAp`GU{U2b?}Z z7dKJr2*bl??~?-3D%6&slSnBA?SWeLeVA2O70~VM7k8VO;_}3j0XFdq+Arp%QbGq@ zjO~IN-Iu@@>*g^sPZHRuDBnorbiJRQ&0EXiu#tbVct?fS@!m=v1Mg<22}AZ6jiQSy zc%hJ5OzEr)_POpR8as}8(sPaRov!D%YtR*|+GbSvKfkSNnU#{mGTn!7HZ zWdR9?Dz@jyPS#aj9`j%xZW2K+$`m zarEsm68y8*0~c zI!1BUBPO!emA;Okb4)+j{weCG=y9aU)Rv!gi^BuY0p5e=qs0# zg9zCDnCoI3pT4&xAcdD5_IB*8=w5AtWEd{XB6E-q(^!f7K8cZg<^I)ye*&MQ0p-`1 zl}oVi6W?coReSFc_B{cq_6pAl-r9}Exypq6(}dP3Vt!{`<(~UdV>O0NBoGd{A+s>* zNBk=35snP=VHdb3l{kHh}3$ranR#!gLpPoN1i!q3^LKn#mmi(AL z^H?`{MC{#5rQ1e5kqeGF$8g{77rwR)`jl<7@NA|9*tkly-XVOM1~H4#o5F-z_ek z5{`J(yT@+j+Iv$MxE$w3FV4RkI4HMZY}Xw8{!AD*o1%}ND&Ng93d)Cf&{P-Q{k&qt z!Po1_c)X0iL9}cu@@tCH&D4tm0^7_AKAP#aRxW0VRo2GD#?sklE-LvD8(s8ZLB7i4 z{qTiCJKDN;LhG4xfi^985;k^5)Ezd5z_eDPwD*h5?0y@?Gmam0v{F;JTkm_1w|qkb zU5=C-rQ}w_qqde`Oaa+AMmh+M=4fnOw?6nyJU}%DDqAUet(mL{(WqjgCzHhc&5yYXL`3y=Lw*{(2~hr`^{zq zl=yG(49Y9H2%zF**7Mu)-w2!6-#nAdPID5h)c2<~!P6P6T~kxQzC9iR9FJqiA#>X@ zGypnQ)}(hm*`-J)GqjuO?t!4?Z(oQA6jo7pHrL#-H)R=jJlN!3s5vmp4^3y^A*9{!j^9-Stb1&2()WZ zE7oZWRM2o15~`py3o7xj>JuC2Q%sR}4snQm>AAD}M1<&NLxQL2`k!VZ58P$Y(R6b@ z6)ZnODG$lNZNwtOv;^*|wZE<44I;?0k-kAThun_F#=JvhLc&ye23p1hEuU`u+XN25 z0wF-C$_?XjnK=Ui_cM3>rcF5hn;&*rLcIiB-STn`rlr{`kElUlu?ny$XC(%@Pj@iCmzM?hOAWl5 zSs`z-L`0(cVt)Qh^pag568DGuOn*8itVx7>Rsb@r@s5Tt{cB1v$~UFN(!r_z{&x~9 zCWSwFnJlj7KZ0+4jp?;2i|ZNWQV$s_Qb-66`16tJiolZg5dU|8Gwwc2mH?dy6lC*3 z*!)lVu@x1NE2xTnJ+%?n)}VaR>+|z-x$F~tLsA*9G3M{FHCojOrM*BgrY0-T-b5Ey zwB2tDeW0%O(FO}eW@e%7Y$*coG3i6n8t+Jafl!_kwM;HMlZOw^=sMM}2XgZa#B3s%Y zt#$&s_3T97j#_i017!RYYSw?%)p;e2E}SrfCa(JX_&3iGla>EfvBdHiaBmwP?=v=Z znl(8vKe+wZCnaF#f#=~Iw-{>zb<4+PW+u1dnfMvj6KN{X+YZ!KC`u}gy0g(w{WOix zxm+3MpltQ?siq)3T4EX#p)Qy{E5Z4-72&x2LO6KOKr}B0Q>aSfspaUKqaD$Zu;XfB zs)rBk`CEXuV@%ddJ*5za!)d8&J}s@`T*O7*(m!F!>)c;h&{Ah(v|e?|Z2#b~W;g{5 zwBIQD1`AUTvzKd6Re);$*W0)FueWb7&tOE-EH6*+tedD(^9bsJRpxI)jwsDY_AvL?cQ7|M7x5TO5P;Y;`{5!XA@v&%w|@t2EQ%8f;(?=IEAQQ@z>ba{*BPU` zmSi%bBEkreNsDESz|Cbwhc^uL>;~H0>yjf@hc%-DP!P5qjT1%7_N59Ux@&~Tt9H*k5T10<>Vj~M* zU+gn8Giz1Z5%Ah9aI0NhUMIis7dqc4-kPkwzE~DMj)dxgwgG2g&whI#!HJLsAh0V- z9qW%Lnrk>zO~eH8atgOBac!-r6Z?`O8;<6a;BZroE8BM#*7j>FtsC1LbEFwg)j-hj zS;7+YDk@Z8&Mer@{k%u;aH3GJwajAt>ZrV4%j5D;)cgMXy!fhdg_9_wczOdqqM(n+ z7?xut5^I!qLZ`v3J5aJXB|m?E!Y9UG1Cs6vg^kpETrVsvBqviCk(!MHB4m|DOSntc9xS$rT+4`SmMN~W=g?fq|QlW-7k(=obXK$ z*>Il5@t}%M+vFPmc8#Lt6~kcruU}tB)@$~=Lq)MQ>yF0EgiqV#6ciQZbXH{-R|a#2 zGv!laGvYn2PUQp-!`^Jf+IGKJZi77e8o2F#TK|VXFw%BWXv4Iq{K; zIQ%*6TWB*nWYj-6lE}8wecvzNFMP0KupW%}dLuK8zUP^PTS<3#2>PmIL}<9Lb(aD`WM!%q)(5JgFb&4{@T<$vN9Sfud*uz! zT-gb4K_&Bmu8`>_XOs66vp7MY$2B&OWLxAiB+aMQi}ZabGV1317%%ScwW-bw*5-Ybvqg@DlECAb>W2o>1- zG9gp9njSM&K+wx-kh*`eJ1=PoiG6={acV=WWoaShH(^Y|V?FZ%Un^BQY?o#CGrsoM z404a7;)Jx+R6213nyyw-4<=u1b}2vUECNC210@wLTpS$AYHZ4@^Xcn|Fvfx!g*Mj0 zg8TmmUvC)|R}*v#2SO4E4uK%S-8HzoySoO0yKC^^?(XjHuEE{i-GcKSV$XZuyS|$> zKeEmYXHIujS6A<AoaG)Xoc(luJjXnXapYnZXjU7NX`MXOVfQQg+bCeuO)12oBa(TA8M){|$xPq%AAO-v+>^-X z^F}}y=GtzxL*N(oJwLZHNORomgNFcwnF2MLu>7O6ByL#0VM(fkey1zS*Gq`E7_YR|Z|SplMxz(0!3y!k2y%mwf!W2inA?5Nw#u_v-P!3zn=#)BO4zA$O-JCxGt_2%oStc66n811o4Ty zUUB`Y9xsG{J5!=g)~c_XpCyKLGLaivM%P2p2~MmvE(P(^&D1DpFnrei~fy!uF8Dha`OF;v-xv)Ixj$ZXfyIWYSt(HnXg=4SA6yV=+ z!@**VhdhtWTryqm5x-gqR{a|)`!)iU=r~nh^esmz)X*sHKJ8B5e$e;jSO@1Cnt2{FxY1B9*T}6?OF;==5%|<@tHZ11qC8zjG_&K%osn+EPoJ&!VciBm5>aZ<|mpoYRo$d3CqzkAvQDW z<<#I0SVu1Vx#aY9CWthEnaF$r8$r*MY_S4?xH>PDV+5#e2_yM$~feV*q zRDAyJs6NQYO^sqOF%CLFRVlT<=}Ui+Sf=H++!t+Dd#@!a!h;)fKH$l2NE86$4tXx- z#9HZL1_c!lNUevuUE*dwo?fKS$9mvW6KS9Ub#VjXCxEc?Oq=Cc(xbtQ-qkn$?Bb`TW(YYv)|)Vs_ykdx2Cf zVc;?;v^K@je8Ck6!D8&;)lftdNxM#c&Z<1bs8!DQN45G40T+2gxyof)p4PR9=rXl* z!%V!#QiJaUOL7MdQ=9Ts2%S`C+M91_ z)QIJTH#VGe7}sYXgfr)<$6Hg-brC#8V#|m`>icGyB{G`FaEZq!AGOju3dmMG9%w#0 zZAB~MQ${&5R5XQjRm&s{bzk37nk(lB&QsQ2Wm8yv7pn+w7yaskEf!D9?Nj@Jyc(3&75&n#LmF7HMsN<2R5*d^MorIDp55P!N-V(kh?_y1?=nDzr z7*JUm5VsQ!2frE@rGmDosMKrR0DR}+lotY^Klf+bR)l30v2VIE3x^X+z11g>SSr)@ z>hc%CjDL-3DKz`W+SLVbiJW=mk zyj1_N98b5oNOa;<=)hG~a<5-nY)bsKu`=>Ee35)lYM~$p$)rMId%$Ak**vv8x#&_< zQ*!NXyLuYPGLVy1N^JUA%IMlE!#w>(IH6X~Cbzc1FS=ynH~ThNmkDJc;!P@R-9+cGIb&nr z>nk}CfuTMjv%axzQqkoim>LC-Y`l|s8zMr00UQr)&P(|-_vuaM-gr zYt%5*p^!cA9a=yw^Fl=9_ zqU9W}su9wvf{iaXpnHKx&|ZfFjo)LTRXnhuZ(m@eFqNS69_Xb!j%077mmJUeAoPC+1Y0W#*FZPu?p;j-*g(3A1mPdFS=;I z#&Yx0hhO=dA8=OK&ixml0Yc;-Mnw|1gN5+F%OI_wLrvF%o&S9h;GlH~+QVM|gG9g{ z0Q92aEJ>|KulffmXT_SG2LRSuz?Z2MQ#zaA0!*WpB$j=s0v$DwsT5awN_YwY2$2MN zx0Xo+aSzZCR~YX0AdNC0e<$w^wiJWDjh1Cz9*rJTgm|n9i9f!4HMRMTZduHto7UW1 zo0D2*X|VV>@hQ9nHvl7c9jI6{`*euCN`U<=9}*l~&Xk})mFvQ%sE(?67OXjDa?==5*hgWE^| zo>gugyF(6i*(7ttwl@?;Sdz(A==UZ-t7f_4`F%t}hNd^;{fY_%MS#3GCbcB23kNRW zhNc@J3{ed?46D=zA2~WXi9e_R`qpEv57;T;k+tSd!R=qg{zE7;L_GkW&OVjVKc*)b z&Tj&CElkYp_Wu^9Cqi0C|$t-?B!RnJ``mz8NYqiut5ZD-mf%Wv> zg8y$6;o5l_An-ZC9Xq*y3}5PBL^_&7y)MhBCGDV^(f9v84+-)`!#G_e{$Kpn2Ix)n zCNtyI!0LMMSyV)xZy+r#EjJkh5aIxq4`AhAUf>_+!50h`0zUyr!o=~e@;#nmAQ6mD zd(Qdv3+ETmCnV1N*#drr^)x}xqb=2A$2+taD)+wN&Ho~61D$`WjFl#J=!>(NZoW};XBpxxK+Um|@cVYy*mQ;F0(E_#n4d@T_;EDpg#9yAFX?drAA7CC}Pw8ytp^ugQH4m`T4>dWKwK^zob>X zqAQhuo6Yohs@i6O<4n)7rpk+I%&!QaN8a|sIGURT=I<&2PGEnETxPDn&&eST;@Lpy z_?Pro_LRBEf7L!u0B3|=tf&7c z3@)X~Rh>`w;&PAMGXGYZ2bbYXz3TS!|BiB1@Np|ofIR{kx@BJk{L)&0T2$g!W7DHC z`|Z9^lRv?3l#45)XW%;Yt-dV&%cr7$(W?uz90mc5c<^~4(@J~}{3N>mg}nI7#o#ai z^O!w;h>cCXZ5vsP_^&t!Y>>b_v}+;$H4}BrOB|B_&FU*}2%Y|C2?4m5vMbPeN&`x5 z`p0MhJ(vJ6k0Cj-%72-_>WgeyEoA;*d%WPUfI-F#_M~HH)oM<57tDpKCraxjzGw@o zKjxR=yqPXhZ!}wCNfjR)7)W5TE$B_xx)`kRs<5bjQP@y5Z=R|zHUUf298UOb90OcZ zKRJKgiM1{XVc8)gY`^V=+q0i{M*3RmD@DGxTrNRg{fIedVhM!)6FsQu zUZQ*~$<$lcu{Xo-Ss5SH=w}7OTM^mUdo@Ka2%#BTD>LV~xQsz4aOnlGmYl?SdVr{G zC#v%f1OwdRxpu%kyAMkltKO*$&_r3&62)$!C(Q$^9izc90b z#->?gV{{P)VHuq@DOHt(1)9J4AF%6@Bb#Y7xkY6eqTfQMU zH{}Q&s#^cwE+zo~(*OLg_#gC*_n%hKO9c&xEbNe9{)q>0wfO^{FK{S7|4#+Lkg%;X zG+|7J`uE~M2Dlo?P=LH0;Imp7BGy5K76-+(XvM++Uy=?&=#a^FUyiOit|oy8=p8p( zA|LckRcqnvE(uT zS26xiSch=Onj0VA?5105rBwXaDUiVrJi^$x?BuV-icR{4bb(V^*_JdIkPiYBVC^Dl3|Gy>!pD26aoav=BAg}qGPnS0( zH1Mw>0ZvNvWiBJg(T{uDfpXyQ*;xgM(7OU1|Bv}gOW{&bh;j0fMgVPiDP8h2NUh3E+h0w4muT@s6}k(^w#2rgWmhmouSXe&PR-vIy&dAwh))q8r0q4@7%pnzT5 zFf1hNUq1zx1AsFvC85`v%rkF@09*3^&Y>6p4O_)^@77QiW8=^kI>C}eAPx0?-dB71 zS%qJIJlgtV$8(WSkBqbK&>QFH=g-%9o8i#U%*?-2LN093=;-K(;4Np+a$L!(mm`mW zsMq5R9VHbf&;fWm(kTtrLGmJPQ@`jBj|bGYIvv$ZfLdh%IN*`)Pc9_i`RnA)vfz>d zA(>1GmTyM?JZuaHX#B=_MT)s|BPBuvS>6*eQ0`4Dy&o8Vv8*IkCDkR-J(Rm_PTc>cS zcMkzITt+bOv^|d*+Z(I6X~>BdgYS9F#TDgU&J3}Xo|`<@d*?f^y91j^;K1A|%O6YV zynT{MX{ZDN5%%iO%f=ow+`??y^qd7jb=~GCWY1IN-?zfJM)0@}blX1Lengg|c!E zz$B7J?#GOOuE9byv+x~cYTzrw{x>E*49|Jr1od0ZbXB3rIBUR{cz8;O%Q64QV|W_kr6t~>1W;JAV8xW?hA8wk%I!;7slRb2y%apmJEZ{Qo8o_>bXh zkR`&>h0!k`0_StZ5_cmr>bwro{u_)94M;(#x(moG+ke;iLby_^4h2hH(XQ~)70KlO z_W<|7^|G&>4Ua>wj$+J=vGB?XLRxtBP5(0q7bpf%TH+PWi_Kjeiah^5KQKpJnxGBJ zSXW2L#(4k3%Kj2BS2L|0OplN{eQTppwuJxAr%v#z;!qI9B<;@E7N>tN0#ls;pLRD3 z1wr@U#HZ!L`FmT_5tY7f!Kew(6f{}-Mvf0E@jw5l0moB_iBZ-S>IN4jBBJa}3}{&t zN`r*Zg2hiAS!p4DFEET`vlgv2fj_DNs*#HQ+4Rd7xHqp))~|K+>WT5Vu4o1*!5a}b zz}PTlZGCQe(vK#kH*P0<3*L_{5wGs)(!aNBWX&u!XropfhO;;FrK03+oAAd%!1g4@ z!)9PeC>SjA$)(5*Mf(m3b@e%8!HYxWOC%LecjVN{XNS7nlUMdu4SLlA$}4ji2%{og zjK8MP5Cd#WD6J9k^lm7c;JTEt%T!4_FaN`XfM6;1?E}P?E}VE7_xHCT1zG*Os4O+d z399J6Au&ak-@y?9lc@8*V#&zfmFu|E-)2{Z9)9~w5tRRW7UT7aP9X6-G-1=dFhis9 zxqLO<$GXZp(J$7Dwuwg(T=(F+IUE8yqDj}#0og)n3vj2mP$4XXw-W)zALDa|0xT82x(KUw^O&hhc@HDPXXUP27xRXHnEj4Qq;F|Jl# zVR@aEE4y``TXD>hXsk zl8LX33?jCuz~Tbg#aO7_7EcTz_dZF7w0nhy zxy#38(}-AG9K29B?r@$bA+J%?YCel5Rz<<0n6ePuuy9U{zw=asR94Cig) zZDO)-1TKNBpZ9|PT>Y5M9r2UV_R>}*(XJFxA+~29T-qH9YDrNvmFjRt9= zkQZji8KR@*mT&VIeNH^*^Q1}fUzSW@#HUbFz0Pv$@z$NIH7^vZ4qv>tdWTSI_d=l` zrdZiY?X`{wNcOJun{M2P{C@K7=4ZY=6csCYS}R5O4VE{cElzG*g;LEZHfT|AWNT@{ z^|SjBC5K2ot&sb?_EmQ+|CPH@wYSDsuib-a<@3}NA*h>q%B&3hpdabCHR^{|NaGaV zU-4_Y#u&iZvp37u;%ah^^N19t3BcoyMBKMl5@UpYY)YpCq8HZGT6eiDk(Oa?3&N+u zxP}m^<<)i{2mONH5aE@uf>ui!<&|jO&6E~mK%JmntTg3;r7axT0=Etj(K-A8Q5Em8 zYb5q~2|c*{!<2Ha1QgTjtM$r(qQTOk5(yi#B1+U;iHedx5Xku3WMty*#-9<53*;Q( z#S|9CIX+#U`rhR8C;BwzLXw=pn*_>7a?Udel&U=a-N$hDVC!xI?Jnpb0Oe&09l`iMsqA<66^p(%&8 zf3}q(`%QiYlTm2Woo{U>F>~))h~itBf2ws2x8?QPTlbY=m4qa-v&0eU>aX-ppYPB%d=UF_@jDy$jr^m@LMif@j=0lTgIdP5_(d!hRZ+ILMhw zUOn^W5Y8y8SurKMUy|0X-)sy(8d42~^c%K<*F!HsT$Rh+qrCF;<)$X4n^wP0sFiY?LD;uzVS8?HK2<7ZTT7wgg1_siHVrY#hdm$D7@T> zy<%l+PP9v*W@d+cJi=1Ot=k!zUR7J8fT=D7&-DT8LVNch_>t5)I90I&fC&@|f|Be9 zi~O{&86N$3u%av&0>jk%8o?0H^9Ik^#5lIfv18Eaf`CwW2W4iKBzPmoVVsU&44Z+) z#6V)UWm$_Qk&0n5pn8hCa;-Whi_!1l#^L-F`5yeB+Zo-bw*=|X<+=*oKOTP+IDpVFj_;@uL42#|64#@H;m;T=C5zTt8v>>qAWP+Y!sRDSq0pyb%zx+LeSE`{Xh zB(BD`>iol2P?@|{Zq`mNiB5&qf)WS(6Kp3uaRIT*)x{2u?QL4W99HL;(Ttc)WHA@}tq6b-CZ`P4`@x$q~C|0$RA*#6AoQ|XR zcAwG|tC2V5lx1YT8?27@knK!{Chk{uLz1eGBu4EYGIGUP2d1ZUSdI`Ll$46y`gz|4 z(lAL9KtJ{Zet0-nFaR3i0I}#Q6UU?^q)*@ZikfW~4YZ2mtp%fj!A{fZr;6W63}6j! zS5-0R@@b8O-UY^9cFQk6h7Q=9D^!*!day+pR3Gz%p?Q1fLk?@qZ$X`h{Vh-Lr2|`$Rx}So*k%C~5?=WL0-!FtfFp7Z>ZNWp>ya8F7 z>=iNzn7HK{nqx-geB|G$9Yl6U0r46{YJI>s@;ZlUDY}k1VHFU6U&d6Uv20MzBp_*N z02?xhT5;^5E!txe+CJNG(@l4qts|Ws<}j8>SH$#22s;M?1^v_X592CaYX4!>i~a58 z<3mO%Q%jTPx?N$h{1od%+gYXFkLVov%?}PDC`-~MK!~>724C!UfiS_K7_oT|JelB7 z4k!K3-sEuu1|HBciMFR7FuMKB!OfTYU*y?Oqbg6hf*Urvji57FDJIzM({UCyI7~j$ z-`F)acl302jB-%RT7jx=bf+sFA_%EGrsr9jJ9)J;Z!{DvV4mk(8lh7WC(qR%`?#t# z7V(7VWI&rOcCUX6ki+`CmLawID@iB`EQ$wf_y|H?TdVCA&!s5twWL2#TnSYI7rFSY zAOFUM!>`*JC<2b=ZthSy$&N2D3l!RpqZ~Nq)@{Y5>AQC{;ifl9h)J3l7?TTt((tsc z=7p->a*t|3??G?lOl=>s&@7Xo@b{aB8HuHUI%gWFY%NLN9UiGf8p4^9oY{{cypI*# zx=L6+fcYq*7@7lVH`=|XZGZ?wvAM1}jZh*jN-73qB%L^&q?xeY>JSn}=t2g3C$LCW zcDu|~YS`k60Day;b8Ds?xtzs0EzHf&IYMtMRme@|_2A5su#+hmlSn4?!e-qj%d`+` z%fJVtL21O>-1JI0M>C~qXI*t71{v!6CR^dDJR@*!DCt5Af)Ho$KYW}d8lsSFS<)4| zN;q|!W;iiSRKD4R9)~3B9taGfPhXv3$(AKp-%VOg@h0uG#!q7ek_9J3eODUEHka$H z^2<2pnXj0(?MbRQJwB6D56D5h5LY+%llt*WDR)aw3l6bwoO=u_c>BtV3D?@^##0p` zvai~H6x9NmN7`CSR)Fb zHL%=y^~XU47nw@SO?&zr5*-fk*D{Y}n#qQmS5`krs>Asih&tGA`hhik_c)s~NIfd3 znKQG;mr~g2VP)nlMmW7ifMg`eMuhPa^?^JF@K z{Uc5ck%kfD`t`{XysM9%vr>B;vQRLivh!}|+(D$p$KJ~+XhsKFSN-w1Y|BoVxe_LG zA#1~0{O>%$-Oa3HV{fKhh5ZqS75zUNO*&F!oh3#XBKrPBB(Hj| z^4QTqt}`H1RpG=^H7HwVC!w^}Ij(}Jmql1tfrT7JCY8f_ZCDQpNeU24%Uufz8e3^d zm{&i+CIF{4s7HPwi$h^^mx+XG%_>J;(HaMZ5BucDUe`U5gsHV-EPS+8Yda%mh>(Nc zWs#a1!ci_d&o*Nsuk`|F(nuorbq`FOZcxW|L<*JTbu`V6t=~q@9HA5wM|U&Z&nNL~ z=u*Yzr(zp@M&QAqNAGUp>Gx`e~lp5)#tw7z=n2a%pD3$w|3CHMm@)uCJx}g-) zuk!o?=2t!%uuj1$k7_bU<84r#`LrhH@KWldo+Ctu%y^&cy6(T+xH{b6fFMZ0pXx`q zCaB%FwA;x=&xPo@CRxj`K<i6l@{g_DOp%-JY=pk zh{djBS?2XRu`#;3*h4Y}#|+5r%QGPvL)&imYN=;iXEg9poC%>--Kw2p&i(Rh0g>+9H+p`%qbjvMlu|)p4Fn*I`ppF&b0?p~V`o}L!Lz;(jcXE3 znn3Ec!7hWza{7y^ta0!?5>MXDZ&*ZZ#P_3w+%qwqkQ0jHe|#6Jj-2F;iW*SM|uQBSY4QCd?stg9j} z`lux6u8dWj11aYpTvq!D={s5Vq&O3SlP3)~jyO8(yB$aM|BO;s+&^)R#Fz^EwgpeyjQMS;_Ja zmVF!Q=qk6zIJTMCF-wWfB7yUb>2?n&yBC+*#@OaOtgXg*9*=DNgP!9!Xg^%;0A!>| zuX@vSm69CyYdw@Q8fO-S;U6wvx(;UoUe9=X6rTw-y`Gqcx8(duc~gNMh@QBbCIR)$o-FLIo`{-uxIz6Y)FQb<}>qKH^Qs zhqwd-RhUtB-gshY1`*MT!Os!Fy*58zMMln!c~r2doFQ~+&6?3Qop%uU@*P|4OaTI< zW-);gtL=x|ZV|OUF=Ny|gyx_b&08R+;rKcis&P->6U0}G;ux50!sbG4K5vtRR&E>U zI#7kIA14e-3liB#U;d;UOn=&EnLxxa-}70;&oQ_^W3!@ecorRYHmMP+r72BhaXY>n zwbf$Q_uZB;Gd*gzPo&SeN_v_YX&zi5hRS=0V9GPSa_Wj!?=oxP>@oxwb{OpV<)=jO z#uX~1ag~@!S+K3jJ11z%FOtDiwzwshsZ-UwQQy5t^J`aR5`4>^O&4xeO0w)DYzFzt zvs74QNmEKAKCRic$A}`yL-=gTVR@CjhQ;IOsx{zOFlzPNeqxeY(rdQG@#GnQC^~YSt4V_@ostVttJN+jwA z5UGi<=g=exXNn~YZu<_qV?aJ~!Yrs~f0bmSI0AHldjcY@9_6EFgx?MOtA@Vcx>`|K zx^r)iDEnE(RM5ID>^EJwj*0*-`U3r!h%WKGLhcQ)(KtYkEf{3ov(BA1w3!m46n?g~ z?U>S#mC-8Y53RR%91w?&0a4Z`OtgM8>=e8)FrJcEE(sB3G6K)j8;pg2C4sDP%BACNGv%eTJ5@>=pKI1V6AK~xfWDKjs% z^R39O^#pJ<`Vx038T!Oixd~z0fh#TL>iJMDhEWipj!gE58|AQSkQ1SrM)%Js5-oe_ z*1BJ>rl!gI7Rnwt1`5{|rP@5(fJm!%y6q?H;5?Rg>SO>!y*!S6?r_^KKm-!qS%}^n zgE56bUid=QdEZ4fetD0hTPpHa)v~l#J?Crpp5)YAZ*8YKAsAIAanMjq z&m}aD)t($T$;rAXecbm?AQBpaAr!{P{b1xJJkqD$=;_%kdv@Z>6K^|xE{WK3G}cH> zc5ZJsvM72x%+1whCWh~nflUX`lPQ;TSRgJm&W7VcQClxTLU%kZZADW(hC{`B0f)}i zJ4_Ku^N?B;J@9k!ritJ^`FJn{eh-28C$`tGxp+#o|LhJFpkK`6u|NA_R*sC$=<{r1 zi1&E(?S<^(n}m7MWqIv%TxJ!tw^lRc;`3-Kq#V(JnUq9o_pURjA0t%@m4iF~HKl#qM5&9#%Eg2-EZ)>k;n4i8Jx|oD$Qvvp*<(x=r6%yoQr4xR zga~3m#~764jA!LTejVYEC^nl(8T>0;!E;_vcme<>CpHi8YSG{@wE8KJh04H|u~LI6 zSFaaVrbjwdKvIg+t}7B6A^lSXPTLC#L+Fzv#sh>LR_10xIXXPSY9ybg`YbXVp%Sl+ zwLav68aPOxa+$G3{`DQ$kh!cg6n8|f4NlvM(klV?+0*=qGe5pI2+S}pYENp0SFKDL zTS5u;!QdsDJG!BgaGm4{M*9`WKP8eId-jFW0>M$L7Q5?wI(?h>gPt~)s1_S~hj-sD zV1vZJni6zF6iUMY<0}P!HWb~B5YUXC!Z7P#vO&5_?hg5&o$C1|(va40l;-LH$r#s@ z5>E?`T}Nbg+VmLl+a?UzGz4f|bO|)pAvbkA->{l}$Cef%kj1vV22k#Db(}wC0C4=( z&)Gi7u#mo&We z)r3MaN4mRS_Y&m1EF#&5s1s9`xR8ThvdNZf9dA5$9s5YA5bIkoPY&9+ah~j(oZG>- z6mcLf2}jH9H~OWAd=wM3AwTq2wk_C8VL4BS9fRX3fs3t>OFlUrMOI>Ymez5Cj(!f; zmurpuv7>)}176_>`Kg9GZ{o|{kOX{0wOL8J>0%VF=Psd#>06Am%BoB0sP7YGZqv^X zbd=`26Y53TQiA%_wo)_L&CT35`*EAFeFbZDHJr^W^jaDIm|!;6$pKw4OioZ?wqaaZ z;FDeA`?@Ilrx@=SJS1t43s^67&MM`7FPY;j@4I(UpjFJ-r4jgdu=`&NnipdUW?JkP z*<|r`A=9F9T1*|LQqDEbb_(hmkO%-oWNIc8U70Soj1L@b3SJ`(StdK0kSTq^SoF-g zA_)|{&P05r>Lx?cS*L~BTP*2JF*8Dqk`Vk;rqpLj(4Y*l>waJ?ejd{XN;{W1gQ}J$ zD+!FIEDfHs>^AMk=Y#ND7-2y*16lV@@{h)|Zrk;h%N9^<2bB;l4cR*i-qEmdVMW&w zf?`*SZ}ogR!8uinOJ38>bl%bKW}-n%&~T@ z_6Cvy%Vv6#3IDibBZHNWm~&Hm!Ax5&I*}xcsJdRRkK+`mPl%*Jn==$ow4nEV|Zn%+4I%z zghbrsGM;c)3jr0-x}oMk=jQ^=F$#(hyVS}NvJmYzW5ui)JCy>${nyBXZDI&;dOKe{ zM#t*o_wibl@JDe#p=;9h^Pi)XuMMRrEMgs}X!ME;p$`tcjCPYcJ)6A?1;DAffK8xW zgsVs*4mI^MFe+i?9X!*K@N=cEQq%&**bc;NpTT#hlrRlWY)yRFK&lU{6X5i`Gd>!R z>q$%~mC``nVrkB^*p7&&j`ev{JNsdSyEwh`8K=l0*%w8@l?`z(Vp4Vz93 z)V!34Rx2(kB%L$tzsAp1z9#?9_O*0+%gj#jUO)^rpyNj*7}-b4-n*Z*kUf$!@su9J zgwB{CvCPf*8-g$kphL=~rk|?n%1cH4_Y=v6$%nA;exOjsXEY?TpCop`^HYF`X-iUw zyAPN)R7^%*m*CkKvyvIzliHL2pj>3)M(b05pZUOYHF~`F#q}`Vg^3(tREVn!w=ZH@ zQeLyqsdT;Xjiy}hh){532`YsICZUx5q=PL9GCCNPe85ay*G=&bhuQ&Y=sAw=)cJ!Y zj~NyS%`-5lVIre@8ufoF%BUrf@ekApDGFF`1Y^+Q^jHIh4aX@)%24G(njEAvwLsG zFs=@PGJf>v&UTmDO1b>-bK*qk=_n_2i_&);{A2tAVSvLU9eN{~Ca@zwOfpVlQVsAn z^4Yy=zi?`RZH+ z>#vV*&f+}%Y@NPYTp4N$#f-F(yn95g>`4)5!%xV$if3nXoZZ<`*q%u#vQT7cf>vkh zW2%hOLwskjP8lH5-$S$9gtdK`$1N>kem=g}+)sx$z7;C+vc z?xhFu!X{LX$kiK8nshd5ZmbzlmY!46ILWscHRB#N>hox>F|d_v)C|ALITkyQnD zNaI1j0b%?_kQ)IUU+V)js%5-&rMZn$^3`#Jm4R|~Wk&nP>3dTttT&PsaY!pU%ods4 zL6tX*5qr_tIJAX6Bl~R!9hsCwX$y+9FAWIH79?mGebuels*(I60ds@D5*EIZq3d$^=GPZ< zF=CGn3raAeC^t43{)Xnh!o0In}8*Y?uY1;msyR$uA8Z4I!_1e9WCoxK^&KIdnT}(17-p4u*n8 z58KV%#qL3y(io%&E`0E~q3tIxzgXndAG_9HBeP~woC&KHPn=V2n z+M6N#DWX|koGKSv1~n4wil-V6ZI5_*?CcbqWVXAFxzUeNG@Zrno><$ zi<#}SiEXhYw_w~##~(z3FozvKU2f|7MVDR1^r$IZc8M&n9hB2@DqQ+ipN$#f&D~FP z@9o`?G8|?X@Bu?{vex0j9MA1*x{!nK@&Z4uZZNEwXCrVtzFd3|inXk&;G)q&B11=O z@I!UheicriFC8&A6l4DRDrdbiSHBr9S~7vzd%$Dgy8Sy=7mbrUeJtXbR&`BRkis^7T|%DQK~!3uQ+?gxq(0WuD`ZrV6zD_+DtP>_ z+gFg#Z*_Oq)AOfhrd`g52Z=)6=(PIuC$^WpbJb-;<^!5s$v7P3-AdA!oVF~Pz4p2N z!cXp}lUA*mW1lxZv%O6-)Ucdtf|%G*F}?nb)hg?-AJ>r9dvqCE-VdbD<`St-ueU0N zR;kMSSyd^p7}OokXAQ8LrERV+J#g@HHJu0h&H#}Kqgt18lV0Dcf{O8m>}RI33$nmD z7Po=Jd~4*(fxh{wyNzbm=}fxs?Yeu7rAaJy7OQ2_bURDFIQRs)$Mfgi*S2JGSJcA5 zkJN}IFf-!NeBJ5!To%)>Kb*|srnQ5-h+Q{`fDl=lWb0}x&n%Z=ZXDI3cBakix-@BQ z_FYs6T>W7IxA=+iFxK%RAzSJ&LUx=`EZNJxyXeVF@>7rcGa6KkNcKXDTK&-=((v2f zS+bl=Mdo@uBhmo{3b(?3sC=R71Sadl)BSFDDhkq1Y%YgE#^$IDPPofRttuBZ--w9y z?Od;J0p;cOY_qPq{;>8XMHvU9t93?5iBIABS_WO>DjI5a*BkaypQ5!Ms|+uVK~;Ry z=)1rmMu9NR1&bdRv+TV88B%L#p=o=9nQ_GnYmr^GMM!iciDl+QA#^0@wl12A{rp@TK zqdnK{{7_Z+^JKPa>mpl(EUvY%PHK|Tpsa$$dI*Wmg1O=yw5(nnHpmf}mQdq%%zaGL zZL21w^K*!x8|AIbfuf5cZDL9D6~|l(`@=bz1Qury`exr#vXFbF_24btZ6{S~66?8D z6+(@Je~R}bE!KSVQKEWca>Fas_m&9?4|a!^9;`a##0_?*xo1&kp`Ds~_B;72F@}E4#m~H`Cq^bSOx>tX)wrL_{)I^>&am*H#OpI~KsU*1V6NMMbyT4@nt3;rcxx#%^69uFSKH?IfJVeo~61d_i9Y<(5O9i zQ?`#%?IQgEHb;7M9nzNcIp!OA-Mut$RUgiLFePr0$T`i$ABkLv1~+%hokHPYbPO@9 z2NzCEa}`N(3?n?Ce8uHCGC(-LPT11na22ztN7-T|v*MU|CM7-g&La2Cv!8X8pGBYkc zt{DSTGyRRb=a==2WSq(8;94l?oJVL%1ZUTwem~?_&~Bs7e2Co)PeLA=9=~TL?Q%NA z6>;dOuO9z6D8nz$s6q*xD9;10lnZNbvXcs*hM^e=5xIl;^nE8-X?>tzeZ-vG93}TViOSbPU^~i<~5)1~cbXgC5B34FTx7D(-OhO6ykKXh2 zJ2}oV?x*wPKcBw2G|?m^F7JMbhwJ8DBusA|vY_?CgG`vMxQ@6|Hyhiq(!TyAN{tvH zOPNF_bg;JWh? zmE{Yq@@bjyk!}BGW}nu$nlK*C$@R(cLe1IeF~z&Yr**`L9?52>&8~bo+^MKIGsORo zs;`cUs%!g(VSu4w=A=5XfhYhU|U7i@`yjzRPJ(VE&}WXf{SX-d9k+9I2r!bk*g>(=NfJ4R=B9CNSy zA~o+mWd@~+G2d2Hd^z`6@wim{<>T~SS9IxNt&RNY-H`hb5)ml0=!+xGu+n&go5S#> z=If*$=T9F!oxJqk2>32nqY_=t-K;=DBB+pXwJh zn_^M#V~k-+=%GBJvu^>TH2MR_M_t`RZK@#A&6MDOi5S{S+`iAt_Om+j76B zUMJxhmoo8uZR)n{L5SG-EHlQ$jB&(HcV0~g^-IGOe!qG8@sH5DJbH1ye&;n@|HfBO z+EK~?Oz`PptSVGk^K=XNXlm(#2>S zxsRfiAOoyl?c51bgW05N{GFz?td@GWg2z|xrn?c7p)Z6LJg{QzKMooDUw)~)GSNko zvV0pU!0}R?Z^Fh?iR36UNIIHp=d>UICQz+h|0-Z&s4t>QR2pCJ)JDk59bW%JKuN|eLayjT@3CPHaCB!tC*FwA(kPzH1u%M zvnE?98Z$ls6JVkxIQfHhek-#G_`G+{o6i;_U1r5mOk-ugkNYAn{Nls)0Y+0=t}gFP z+^v@@(8?$URYveTx zwxagJkT!%^pL4r>`$|uuGA&1ko<-q(oSxvJfUl0G7FWbD{O5Uk<@+w8zLR&`s9Ntz zr-9ZZ2=6?%2K0i4y$Kqp%lpkQI1HSA!%qhcP7O=b_ z80GAJ4WFGbj46q)-Iq?Ekf8;kWY2IeZ7kjViH3hn>ujM|g?h0)dL}G`Kq>H&{P(@> z5cy5|1u;LEXsMAc#V;f5NpaHYCm>rDV4*SQFRx^Fc%-qBsMnp#H7+>KTsmE(T0luo z+&>)lYe!FZ`S$J1na;M1|KX^29yj~j+S$&#b7Xei-N}=RUr)E4r_9=i-CHW$1V&7? zye(Obx61MUvLKJ^g*G3Nx2AN;ofgBh^Tmbc>*KFH3n^bsAT~F=8|x%}%Lx$*x#1z! zW_0oncI?+bmH{@Q+!0x+CjGi?yHPc!1|#_2_kNz}O1j&aam_Zly%l%+XbtaCj|w2# zw+BmpDdtJFW7y4n8&!?Qvzw(3d&88}VMrf-O>`#Czs4XHKws%vImFn#JVsny47ZG` z4cEG|dyDck%NdLp$-xwgMDQGdML;GRwrT+~2U7Qi?DXyI%U0k|B{9MXzy_J_gK(32 zn@32KkuSH89ZJgjt7uC5b(J|LnooEaRlu!3rX1X|M13t!Pe(TBo*SW9-EybFjz#z} z+&UQ@{=Hu$xiHSnO zTpwV}Fx}2Z&!ilim>KzF=&5>8?f#g+yBHAA{j@1N%Zw*|sV+9BMP*xiL=qWD`^aJ) zsY*IxR0*3I+Fz@p4ovZPAP^@75?hU3#)O%I}}qx0YBs3d|=lH39nEsT`Zr;hRCc(w&9B-b_Va-s$huq2_N6AV z&Panqe7BpK&V0k!D-qr8Bp@LQ+Hayt*PRTU(GM593zOa+eDdkV!d|# zzr7%dD69;3gyi)G?CbjosSl^J$V*QfUxgYg^><4uTC5+BeGqS0qS7qRnwK3bddI@A zmG_gRiw^%3+`4FZVCOob(3pq}X6w2nvmr=z&rE({2ccD8=Y z2P`Px%l0x=y+&4LfKU$P2xW}$y~NsJ!7Nx(HxzpsM>NWbuR?1~6!>sX(9?5yxPq@0 zAfi9t9p<##uD>ng;kfJ12FbTb$`lf@y$DWzy0Ho0JQSxKWAm1L#d#r?1~oqXCgz-5 za;muo+w$I_h5Wvm;m}l17BA&hme_kx<>Ef{s)x{T=g7EVfLyFyRh_&BYO_Ac@j4AE z^x=H;tT&`M_JfGMtx3Qf%6VL{8hPCvMyq2-?op3tk~Fsi!}~FzFXQTEao6d(SNUmJPax3Koc2SjR=TTJ>{z$i(X1*WEO z|DI#hX3;s~#ACN|=F!VK$1f>U06U_eP3OGTwFO-Ehl16utboi?s z6;H%KJk*ktENg!PYPD&$rxI%u-m4LE?3Kjges3==879m$R;s^Lo{;>^AYFbZn1XGWRSmgHEL!l6!{pez+dbRuOrrX9n9|Lfq$+IEiK4aMc zI1cAn?;?I#L(5o`9G3hM(apZcm#q4rRIcOUkM=~?xZgH@=P_)aXNhQO6*FLrI)1jd zUC`S6{-A0@+LOY6|I#-`j7Bdp;?ev6Nb`&96cL&LR!TLkR~{a}p7Dy9FB~m!r$`Ge zRxBxqW*9`@;amn;^M+-gZC<&=Sd(^cbkA5Vb?gx%QXe|(QGMuTECk_k%J7L;{bS-Q zE=*i#hs46Sz1F2pav>7_SI-!0xb8D*C=!%ww{2;w9bQ8*#U`{{e6PBLOlW7nSZm_A~$p?RoxVv6vJ8<7{lA^>2>Tc%nu0li%lo z0J7eXW+H!)&gb8l*nli$pwApId;G`HCe8*R=5X?YjSeeznE&by{$n46LE^@mWO2lB zQ(wL^fc^4cUm*!2^g8lhH8qqP$W) zsQ-gf|Chl2-%q6O8v1D=pC<8NXQW7oI8A1TmCwZv1qTgNtk#9{c`cI;l|dc9v(LSn2r(!N zYPgn;W$kW%nN-bhU0x_faS=|{?8>Nn z&*^&?<<&-f1l6FeIYs=|ARs0<949`*HSw1&XAKtSMBRgR1FKH4@`wwZd!iCWP??dk|Zf?F4flWW2DPYR^2>}&A zcK0WPgTV=a$k`I{*@-u~91;RAc8z!vk;9pFXbM>Io{dB#1ii^2?tbg!Z_0`mSg@r_|XHEvj^e>0U?T|LXKRTBuR~PU{u~ zxb~hIe3Yw}@i*|ke!_Tnd~uHC1+PCm7AA0B_$<&Yh5HMW_pTny6-G!CR(GQ!dEFia<`S-)`iQY=j>lOE>E%GM@W@hPKQuk#J z&vP>xx0B@->)F!QR>8u&Y;+QSM<9AyK){!849Fa1(QiaeXZrrDG2Q4c^|ea!)|YTyKwWm_$@J)g);E! zM79V@|HZVbn2Mqzk%$*Jqmy8k8WW|4x_W?@QCgB~Hyk25^V@cUbOud@1?s5CNVi|B ze+Gyhgm1SKC+)GZvGY`VI_1cq-<<=W62x7gfP^4=e4|GD-)$m3J^gOMG_IQjVuvBh zJv20g4TN9{x-vqMGmn>=q}-*sbHd1dbsBHqxX!+=mi9d#q9^xzI1{;EhEv%0oR~fzJ_TYES#)b@`1tVOFJejsQ`Fy#a!rW8Nct%!Q6Jlz^RP{?xSRAs;}M7m zmkJ8rHdo1E>$nN5d@&d$tq4c=n- z-M}d)C?0>fI_fs*yFY1D6#*np*hSr@gRw&O_$UeevU$}R_yOqKqX5wr2mFCLXZD~mSN2RHRCWNVpo?3S6$)Y;kp6^Hm1!tgWG3Cqa=@FT+|3pJE zk5>lrl?4&4_j4tJW(2~4L72dzB=Ra0G}IzNK}OCED*X*S?F{t5GF%7!W3RUpto;{$ zBy|Dc$G^O6s{kxRpksLVUC;HJANlWoHF6;TW}72R*t7O_ogMql>(?Q#_9k)$y_e6@N ziXM^RA9By=slh#gBa4w!=6>R-+_WhS{@?o6L<=*riNe+nlZqeKn@0w&msM8oRSv(k zypb~nwKg|5=jBPT1aTk5Dxwz^(kcv3OlUiAgWKzZ7%`y!pRwV0Zk;Y)Ff=${kh{_e z7KxgrgY)Bo&6A;>;RyOqZ{%+e{ysg;*7@LE;?AU1?vGwPgCb_b5T$msO(6fA95r!soRZ8wMjoe6TczPKyUfE-vQ{+4zFlMbfrH zQS(p5la&<|1e`X(RKZdN{pPsXc#6`e-H{65t87kBWP4Ncy4NFTP0Nimfv^9cCM|M#!Ym`2Km1gpB zNvLG{Sw&ESME19flg173Dpu2SAIdJisK{>&QQom#kZzE&uF)$l&YJD{2_Hp-)s1D` zg}X%NmejHlN}Pl#Jh_xxX>3Q8S+Jo>?aoO}4QK3?d;G#D^c+!%hNKCL9@??=Eezdj zD~68>97i>60`Rs9Y0071kg{Ui5o!IVWoMMemzvx67YA@TWaZ!b=vJKlk~EZ`J;l#e z2q>EBGLcyaW}us_emtxj&kzkWdcGCC_i0v=%V@&Rfq^ddbZaNxwuLB6;jR2+zLxb3 zKCZI~b}FV}(NbaP-IJg?IsK7W*&nhO1du|ztXaN5$1Cu!$z%&SP?=={^FCSA4(4n{j&xcoVWMLq2KXpWbpZdMrw7>&(O zHNBr39OVT{Z1k?+f}JB&zoiGebuOC-Ni&C_stcrOZ@SY3!>E1~PX#0)1dd1qyuvVu z7$79^?!ayslwwdFwJZ1gU1i&7ruop2KO{Nq1i85Hp_MHP8u@Vhdn5Fz~% zma6Gu)u*+mKWn5yZbl6$UPa7-B1W_S?l+UrfUD-}22G6L^0`b%6n6-Clsp(YMJL!6 zy)~=yNbz~1pI@4?P?WxsJ5kHAV`0(u-ROY_PJP|ZvfwbAW7`F9>5DFBrctb>W+vH% zO-%8hj-vgx4R{;7ob28p3KH#|*H2^cX;S~3CNM*u#kr~E`oY0(R|)_nQ{mqu+&^(0 z6naQTB2*Tx8;VF@(aO>>XWR#(39SoA1!E@(lu}vyXBcrPNKEb#nRDbuW2-vu4$lV3 zwY?ehQhXk7_riao;Hs?F;-MUi-K@iv_&i-XJcS0TWk24{clP+4?`Aj*P`ZtTgzbtw z{T8b->?G?J-5##-W8HKw5%T|GCZ^~D_ZjoYR=Q1PcWr6Y8URuJtdw&2_~ne+#&_83 z>0OQw9!jC_MFIJjs9%e9h&4NyQDBtQ9d8dLiscnxb_WL>>z;wzqIozjs0qeZf)?%g z6i9R)xKpy7a(eo64F|tq0&(O_#&uCv?Zu1|aPiF6+oiyGn(ut%A;EEWb|&-O#`-Kt z2ZWwTGO@0ni0W+;O>oIO)UV|aC zK;R%v4FywQ!~t2(2&I4Pvpx;)GMARJM_eCFu^u#1KA( z;ihR(I*s-Ib2*;}GTGUzHtx+;lGtsSf7@FtX(=38gNeKkq|OIOF0#^(9#OG_$)kB*MK!eJ`1V!tlz?#p8#_xI!yT6fl(thl;BNw?zr+i9BI&;Vm&RB zvbLem<&OrNjVv^C6sL7ZJoK4KQsc4@`*~qzZ|ts)7OTBj4Lc0pC`4J6)ag7jDu$;I>kOM!J_7MvQJ2xZsdC2V#f=XiF$G^`+~APQuYg;07r}gR+Gm zPJ1CXAWwe(UMLa^wya{XTBu$$Mzs`|?2APjLQNJ7)8MYgt<}r0cD`6XArTPOHI9~I z*>zhPaWMUEdf8#{e20q)i6u_@oboIWg!sJOkn~EJeJNo@>A|S3xOSD#FLQ`q!9K^a za=Gasyh%I1*^!g{703C?274PJY^BeU1%C9(Ylu+_-q}L#^taZ6OpFXFx*}uzzIsk) zBb(rtK`ojx?$UHFxj@H=@xEN~HM_ov3XO0U?h011kwqKuD(L5*5@f=@S1`&sinbUh0pU9TW@oI?lQmx~`=Kr&J)H+!W3*m|I)B--Q{w*`nTQe4pP|;3j7zms*i4G~LgsZuZC! zma|Je;gh^~+=aA&G@g*Z0)^QKlwax6Q=XrdskBIBpfIt^z zY?tG#^-_EUmAIYHvQn#}#MqT$rfPRK-`Vx2L=0nCiQ=u1+5#gQSN|zTn1I?xq$~zT z#z24J2y#8BtfKOl5zcVdFOZ5>Oa9%)x++W5Dk@r`a5DiZW(wzl^~bgt_&i2^p||LqPs7yKBNP_5gN?T&;P)8 zlwSJ~y7=sDbnNuc&T+XXQq z`7pRcXL<2$IOjv5Ilh~gF)k*3N zD(WSZJQ1m|P=x3|ff@M5=ty9!)4SmLxfTrETVKuzuYRN6>0i7LoiZ_1!Z@kf+fAG& z0y`hf>7I^I`bZsn6xK+FPu&r84cGYmv=0jZN2yIQ3=uCT zWH*9Qjy~tEX?15$Fz(Tt^IeCaDr|$l=&EsWR8=G;@NsDD)+T!^TladGkTmiH6ivZ0 zRE-6x48Q+rSApp(Ob~9;(wDC)KoH+b=1KK-ygOg@0(J|TNECgxH#KDAGVqhTG-=Nw zhS-DJ)j?=1x(vy1r5;oAj()w68#vVqN7-EibXw7BQGZb6v|A=iFb(YoCR5qx*eaY0 zHQtH^arI}=rTxk=ZcOVFDo)#t@7iNj(C;$D z`(nP!4**?%NaQx=S!h3M-$>_8D zd)13M)7O)OH@iX7eLk9IMjGBg;N(m|cb*01-9!qDK4zROR!|c%Z;%%HQfk-R?~~?O zf{0A;$wXQedLavZ!+8T>7qw<}DIHx*q=HwxfB zi49;R-zm}=cy3?DvOB)~#0hVzjVBaH!{4j@Mg{f9-tP%940qSe1g4Mk?j{YNU(sW8 z$iwgsoWY^RP4FzSfWC9d5uALo2&`o&kgtj2PtMr!J2CrANG6vFPMIOr{a_(DCr8 z?nZ&Z91vVY>;}i&0TS*bv$Wt4S%%aeuWn#B!_9kV6cn5QE+Fz&qX34AJDU+&zKj#S z+aF=;jHcLd6ba=+{Sh+FRqo^{Uiro9=_ip1QXb>XEwD+F|Ps46(D6I+9Esa!QNl%f6%G9_qIK`U5?Y|B0~f+V3B{%LV3#37Ag z8wD6$pJRW(<=B75K*3`cH~RK`xS!n&0?u}ivIZ`end{L;TkP-hf2Yaji1~>=CZqJ= zBcd=EHwF)&S~{L+F`7}$K?ph^B7- zO{t}!o5VtuU#v#_G-)$s9F65gf0tVsZw1|V26-SQ`6-<4Xr}ma|H3^{eAr!|>-swP z!2BM7LU2I&oY#eB91$R zFb@tRshi!$c}wf^JQ)tlCY_9M`(BJUmF+Sd2BZWOSk{Q>BE~C2`sJ{nstbEkAqev9 z>PNBG#>z#e?_}U>?=+JN-N{GU%6`)n7fH&n*H?C6JjYqOd}xbJs2N#t^z`bYuRc9YJoROP@LPdlJ4G^t z7P4>wJQ>&eTZvnV&@l_8C^6~%LIxz$_t5;jrm4v=`6HACEWrmP)SlB5#Xs&kObX+0%zMqS2>7kc7m^Uk;t$+$)0g$^t3w~E(257}}sKUP0v zWHDX8eMMf3$}vtn|F}2u$kp+=Z5g?Q%bfAet06mW5L=8#Z};lOm{PCX%MXh0nE_1^ zkPr2AWnUv`kpOUMT}ezcayMBNlhUinvhQy?^x$Ux>ul|M>-={Kvdt&6%sexU$Tmxmc%33z|AmynPOWgGwP z&^0qYp=+z>F*-foQ-R-`K{>kTq20HdC-F*+q^1kMOe+bVMFIpU?4WAEvAU$F+XaKh zu@{Z6iwr8h9Jv!}{4hsO>7qWKiGq)Z*PH z^Or!$62#>I?%@a`l5&gyJ{5|k4fU`v+7R|l1wgHP_MU0wG* zpg?>(s@l&Lo7cg|3MH)h96n2SP2DK();fHur6p-YI3qDKi>$n6An_(s%ImudML!4X zs|h&9e^81z3}g0w>qvF`tPNqHq)E=?rOmzFC>o&QnX3e|+=|nc_PmMPN4rT@EA9U^ zFr3VEHch#gi!iEZ)ah~i7(x{G4MQg@5MM@Fi{Zrn#xr0dGk-|}HJL=vMg9|s93SSU z_}6U&BF4?AJOKeHq4&{xZKxHpa7X9GyyQ{TvBa!{o_| z`&vx1sWT?ROo3aAM(BX_5$1kk%AfrPRnvBWW3>j@9h(0?C%cQ(`Ms zQbyx)roE5f0j}H&{8s!1{#%z@_~Y?gu=rP$*ff(^AX2^Te0zR?`Y-wUE3;leNN6u) z?=(z$ul}3XU&LK75oSiZ#H4!ZMT}%j@1c0VfAKao_L&NBO1xzUQZ;$ekjw>%tq6$n zv=~2E+hUEF0*HBy+Ia9?$v%K*L!D`>c}&KMyejgAHgS}*bv!B2qF>xaIVY( zI!7Gp?>s$i4KI*fQ-jUC$qyow)I2&9UP6=tC%nX|NK`7vq4$%Du_W6Pi!aCyN#|Zm z^-4*pF>MG^55A9Q>h`iR<2AHE3!)8-df`Qxd8#JX8pHYmjgqn|xsSn2iq2WB+SBfk z3NX_Q0))X4zZ4LO^o-a|+CeD50DWl6VT^`|!>kj0fc3^f^nHvngWEziS>n`rtxWj~ zX)Fdu2`Rf1+KO277}ppb@rcq~a}zXL7oi)&5n}V9OQRn|NalmRU|A0_4c z#n+x~eAwGpZ?X^+-EOY=eq+wLdK}tHjicpS&YDJP=&=Fc5>A4pHHRL=_>o6R0Q-)% zy{E<;{m*G2!&$WwWWVvMM#*d9A4SNsD5L_+-h|S-3XCMgk|e1dW=SVgr{C;1xuxE1 zn7yP1rQWgI0`v$4m+1g%Lt!gaht@bDSVbM_C$&<(sq}bj2MmljjDoa;=A=;at8?#* zFB-*3Bm%G*mXj`S@h}()FymulUV!|IG7lf^fAtwFp)i`V%HS%U8qf${P<|Jqsd&8O zO+(3R5l?JQ8F3}a)d7vSEes>QTwVaPtElT@)EABgI1rcRXt5P3c{%-~;u7HaP666E zxVpb1N|BEHWuJSW*2?Yets))Z`~Jt4oY{^ZI4bpz0wW+>6=noeyFw5C4{9s5mQ*9Z z5g0CPdK3V<5D7;~rDTE{Y5~^QI;6Hg@K9M<-*oGPbd)s3!1A&|Nkp}mNefMqybNmF z+pl+rWodX}Xiz6|WB1@}L8#EFYvn^FA$^77Tc1+TvG2;6Fe87XF_^=>Rfm7-W(_2UGEiF@r6f{B0vAnyWuS=V6o43pm7Q z?z+b>b6ml1ToJuJ6oY8p%@|;m?p}S=F0#_N7NI_4Ip_m z!;;EQKL;2U!n;u;O17f#*<`EMF=AfY`YNWrmb_`{in&YB>XFz87_G1ChO*qAt zn*g9NsYtNdE&Ny!(XT1mbJDd8nYWNWwmLDZz=HQB!$N=}$P=*bOo~n=@7Y1+iPt1&)m)SO`&w%;`j7bX2qU`%-|EA z%5Rr$4v(?q?YnFA2Rnm!F%xL$acdoJuJ`{iFUQ2M6qYBZ-V~-GoJg0<`754+}cAHRJT!czuucaP(rUCiMt+6UFzi*1s-k%{}MP1Bw73gT3+w1NDF&#aE#4 zS9oJAOX;@K)7~|_*b{!U5uba3I@P`MMZ@V|Q{!HQoQX1RM~2Uobk8*`I=|bJcj@Q~ zp(#Ek+etmh)`o?HIxbaQ4iNB!js&>TgUI5Vx_4^m?&z^vH99{S7y^4aaLVjLj3ASX zfcvfpb6q!NS-ZGpa5C^CT~E7Uq)J$krR0a6O(6-=z68u&{1CMV>S|$i1&JXrLD z-ZnC`kvVrd=IUk8&QD^J%b1v#3g>66_E`8_LNWdiWA%%+bY&tH+6bE_fH;TyhK09K zf8kUf{MoiTG^ylkvT z7Z-PrGIIrYG+21?Lqr6U1xp&LHwf^vIl@U!oLh;ANg;Z>u5DN${Fd#)GyyMZDLUK3 z7h2&goTA3?-ZdBo1fNY#D}Eze7l$>qHc%oDKR|s z6lHN9*L6$S(1gUzE$o`ts^M*E#=RL_Gkjr(1s%d4eC;URvOXfl(WB9opMlT4{zPP} z22)4dgK8H?9ZE1|3f9VZpU9bQ^HlI_%0-9y*tN2oiHKJ0ixD0CeJ?p$*|^FEB?g_eyHSnyk#qha2q^v9y2M*sf9*V zS&l|Gi@@1!n%3&cjAGoiyXiiq>?=-_r7#x|!?r)=u|ECoUpJ(}y+TuK3e{C-0v1&x zD0GpO!auD3Nnk9@1(BeZ0m+3Dc86At{Y|}~^RX%ZTXbGD(Br$v2P>}*13?;6G;k!- zM8)bK4)C6;0ffyKjkYHW&>&5OL!TEKrVV)eolAL4`W9^fnL=(!{^=|rKbT}C=hkJr z{Fulua$eRW@mFH-kJPE~S-gp(JNLJ!{L@Q_B=|r7mkZEhIp|*Q-}V0dJ69k3Up9Cp zomoire`J6OF!WU)w#|3`=gkzao(o1K^Ur4y(%&E8dVs+UaqZ!89c2l9gYuR<ZYHSr@a+3_~Rq5?1hqN>!fd5o^klH2W7 z;z~8)(`dlN-V@?e0dx_q%1HH?(?u@m$?s8H!rSYRy{*3)sI+bUmWxC3*r!Z!WU8hG zL9M2R>UED-Sf|Zz>{ACVxg!&vkY+j*z1&`O&h1}%wP(W~xM9=XWz5JuDTBmlCSAeO z-41c=8E7xBpC^E<7cl(h>+qSz7DVFF{F3Kh$S@WO4+e{%;EnsH{Jt2kTVB(^*%^<_ zF3HU=k$;W(5$g3z-XTv4xzPSzEF)mZtkKM!Yl(9r4Wr}txPIra(Q&TMrbUdbu|fRY zB2DSgDrxJ9Pv`2#?*6rxgHeN^TOGAr+gjxqa1xaoXvrgD){^tU#cNouN%IWLvO#Y% zCSCA_lReyIBDhCs{qze-l!jvZ4J53Fl7YMz(phSbcD$d-X4<6BO#8aRzFhS+C5(A6 z+?(3hpCys!d#$`&7L*hfQF+seaVPv=wk=coXHuObF_j)m{!bY8iR$5*e!&fRWS2E0v%~GSRza6Dis|n zXgCQdQkOiahW6#Qk%_{87mPm`42m2YG_sB8m8JU6G5~bS+@PcO*m^u;&;P!cA|FXj zRMzEpwd241`}1110yB_PSIFr6&uEZvOHgEtPc$%f*%3=>z0N#Ea%2Zy!kX5acn)%h zIGVk6CH0Q=SI$&P(Mjy;fXDm3bt4J+Tt;a10{2qfVq6Z2;~G(c#8PQ?r4!4E{99ZH z^tl%#V5n)LAm2ey=7t)h->}?gc}`M8BwG92O^oa~NH>ZUtSP^!40Sn3kig=(CDL400iVx*VCnjOZEb$*YPVJv z_!L1XEIYexFv{Yanf891n1JgCQ8^irjvOB1q>Y36}#0qd!M|>EYzv!7&0g3)U^A%TdR_;P@_@8UYJD6^g(&bS@ii52{wKSDYq7 z+j+~TyNF&^p{$0?!<~`eR>UlVB+Vb-NnDXp8EvaoT7uH3H|e*++^`H+skx~f1_W6c zfs*223rwYHk@j8Ft9|-4-rl2wKc&{iz^|B20zfn!z*o+Li_oKJJi;1 z%*!r6YWhChu24mbgCuChZwWNpm6x?a76py(-or^3UT>WW+^6)iu6$qJN_rbJWh3A} zjQA2&5)^>hMZYqk&zy=37ol&QDI>%ZwDeQI&3V+VR5m(jk%Am1m?wcXc4YC>tKJE)1cj*Z0BvenZ7qwk#(cE zQB2#A7gwYpNX&Ra{yF#noj4#LD!2RACS>vcrsL!1Aknj6{tgc_O%FxTFeXEd;M<%x z-e0~I&qRBv49eb#vY_p;32HqUi+Icxf9_Y^=Et*Zdb9R%MEnl?DL|eA3@iaDm`}Pl z(iH4gmhSvUnd}Oy67quzKNgyxAXhe|22;rj1u|^Tp87(b1p#YjOeSJ|lK+07&=z zy^Dl|lnt8B0Y6a1w+wc4hf&g2^SiyA7h|8)>Pu97(!&@j7AhFTIm&aimbG;i6Mo+{l z)vEY`#Y# z@t8_^XnheHaJ(tV%jxszXuC^(W!}cDAGa8vUTpe{@c!s>j>E?z%8N?c4+?n!+fUXH z)Gh2+(9!ZkXgD8JE@_kf${m1x;^X5t0Rty>>ns4QCB!;7H~5u7oyFM2!E_h~`D)#} z3Hbtu)WKekANm`Q5tb$cK#hv|vCZvRui0?};2Q3pwOX<Vmd1| zysLIOir*jC@#*c_xxI1u$r)6omEvMkTJ}ICdZQ!x3ziIxWM8#Q!=Jv@X=~us3?S}p zS~?~qBz!fo-lCd9c9XB9px`vN6DRg4ZYURqPFnbt1fuooRjuhDI=|XuVPPSl@ZH#I zln6p-u%2~Rkvr{X6IWONxM(Ze6hVNHEaJEh;=<*Ok(6d#5%}u& z)46>B`#Qwv%~^BW@bKX8y$L@+)9mq6ocii;R;e6+)T8>=^>F53$)Piu=yxBCu{*?} z8yJ&_8-jxj_lW=-yUuozQ&TZ1&X|oJ1v3Wxa*x00;jL{lDk+wYI@4RBqPTrkX|B z#uC~vPplf1j*_GYA!6iX!18tKX!7H+=*<99AK-$%+OM<*J{>LAowbK4i*5?MY41Xbi8p{e*T_jC#1~V+4$EP|ljc#tkQRTf6~sWG zVdSNodcT;s>4IO?9)1D46PBab?r_Q)0QtH4warEgSR@|+Z8MWW!*`3iEPkhai?Q_N zUo!(ERn^tiFS7(?3#J-`Uy(0pJ2H0QgeaB3$0DOJ7X@jf*Gf^n&F{htRL?6(x4iNf zfio31#_A@S0MtP#%E1hGy zwBuypWoW~FWQV@1)!I3#9UVY=13>;m?$86J6c)TxJ|LuyR#p6_=Avf1+^k+T zFZF5!^g9XYIg;Yqu_YDPvwdYBLO4eiD80c@`Ftg2Q+z8&V>S0^iNCjH1X zfmPnY!QIe5YJlP&Hz?1KP&)_E-KKHLs9ILJule9>ILgM6v3N+v|2ZFFW7mWHpcrNmP=f&_JsJta@r2kD zkl<<0FSB?WNXTs&&w$BiyTJZ#Jo6*99My?K=O2WStjx@4Uq|o&WQ0~JMVzQ72F{@t z7~771g}R}6ga6Bx1T%|YMw@7LpFr{sFbgzTPMH9Yog{%KVU+?{YV%Zra8ebKxEd!3 zGvO&Tt*b-hYWBX}PA%NZ?o%5w9|;3rc8ylPZ%_5M&5wQwwU_!Sd>`KU*35pfAaNTT zvSoU--zR$a{ou$=DWczkefS#MtXcl4b%xWad~yAWF`m7&dmnxJ-sgHHY+M%$ztzV{ zW5Z$qcBy@zd^pD7B*5VMr) z3v|KrB|J^zvtPc+a$oIcgCP@VTXU_w@GNBnzO_QJu;`2(x}vZnvGXxaG)qab$mXH~13@@Q_Ba?%R6Y+V`Y-5~yU5)n+QT+C zH`&XP;lw!v4>!Wd@p^NEf6i4%vA4S$H%ffQ#P_k|SCdS_uA+sg;o$zc|E6~&HF%FP z+YLSiibZ#2L`Ms-9c(nvmvL^tNMe9GthDlgq=pMnOGczHM9esy=%HQc6R>b|(XUg0 zu^#tM1Ze5_a+(ewEpE);`>t4rB1t8fMz>lqo#&FSknl#mNyLDEQ72(PQaip_(%F#V z$M$?r^2CVdoWg0Ae^)MUzz*)k9342Kg$fxEkTSeBs_bUG=$?)t$6N085Pz6`ccXB7 zP@JQd3gD*mu1N3~PE`giP}R?6-qO;j^CwdUVW;gVA$`}xWNx3{kSAOK@4ad=!ktTp z?U8xzW&V5s^}c?;s{}Hp@h5w?O_rt$vJi;o?r}H+dW`;0Qyy?CfE;5Oqfw9zPenJ` zxHH(TFXLALBAI^$y7rluKYdaObKwP!AjSp<)gb`OtJQqN`X#S?79a)TwVq+%H@cCA zKjVdNJ)ZVrcnngoM@RJt;VyQ&1o(R6ko_K($v_N5Bj&a3@`p7s=nKSb2P$tK#YV(b zKBjjfy{fD_{4E3x`8b^OndMWiL+fQ3R1C|i#RP9?2=$d}0%lEgr0S=hqT@sI6<|eo29WiMAh4>e5eCr#9ZgD<|ttdc}7|dSYAO>s%&2H~-iNt(2X{taZaOe2G z(Yc7q!{(MYna}IZU!t4&i0yVujjPyLp%$CwK`)JG;C+SxyH?66)fo;Jp#Hc$b%r(+ zU_$YTBv2#|Bb=r%7-nNn2TQzNno)kJLqg{ny`Ih<$H&G(FjikzcNpm;mym8CE$sn1 zS*Bq8$Nn<>f~u4D-!Bg`P^*k_P#p}d+R8*?+FHv`{-P{&dMvkdb>Y+>pr-K~1@GZym1zpBSz+Mx$eSek7Ze z&Ro9{d#0&5!kMO{(IouCnK)80?(PPW?k?#PBqSx2kZw>w>29REr15_rPv&BDe)hNY3&bZ@$n2;rc8DY)_Qy*)R+d(i`yF;nI?$ z@S;JDiGrNqX|4Q`2GV(*u9YPIYq!URWy;3&(S|`i& z*!~#5?M4wU(9duoJxkB$e_FZkMeD1}>&=V{aXJz5sNjVremzEq6ieDtEyA4>msqmvf-$Lu z>LufQD9FKigN`(ATazq)pM7V~QYK%_B)4POQ||9;^GwN1)hroiYHLtiE>W8`nL7!S4p`WMFaN#XOaCV->)7UAgJg+lCXz5)8@w?j&G2>5=i`zXdo_3~Kx8$?hI zlx=Pn!DnB(W1$UI)q0B=<9uQ|OfuP)I!cy&W6&&7c9}-_gPrby2ygt=v8)inNs1>z4 z_Z;9oN((1Y+U8^RUL3T>D|H%qj(Fn~eA@FIR!T*N#6kd$6;ez{tmO6vN$jU-F)YX& zO)HtWqsYWK5P+#OaNe69u_B>ilbazB!9+$yH}jEVu+3mtDamNA)5j&_+U;q1Z>UOM z^NDTrqNj!1lE6w(-k}=2ahh%0Em8tp@4ka~+6*7rjPN?GNr)_x@Y#)N|F_D{&8@SF zF0(e=!(F={L1AL`6WvlipJfT8G9$=u3MvtW&!WhYNt>5_W4c|i_7%DL32IO;)kHyW z2N5h$p<+=onb*=0gw9gd=%7&rOHigjmAhnHgCv0l_()KVV?UY0Fl!5*D{;odJxvgX z(}zCCmP{#C_MU^M?Bn$&`q%}tdrMnyGp0#op0a9Kf+%Pecm`aJ2^;(KQJp(IAhjeJ zJ@MIq>;2Fp8wxr>D!yW-?54s8z1*4Wb{VoK)-_R`8j*Cv@OL3tgySWlY+*V+RY~l` zrwABmpf1Y9sW6=hTAz<+6rtGx6wGJKcpy&n^uh3DOw;zL9Sd`iSUuFopPSD;^hT^&HjurYSoxv3e6MbXcF8lNtog`JPp9lT@TO%J`?Tj6%2|I5b z%q{=tjF?`V;5z?Irx(Bt+;h*Dq`E;4tW+&VJ^GMtU#0_KY@<$Dtq~?8pH)V%GOH*^ z@O7ZpV@b(fK11w1>SuNFdHJe4h{twFWf{0S+g<>!m8+}I(d|+`1j%pt z39*C*rM00i<-}z!`8=o+Kt_$q_zRja_BD$Oh;~RdqoX`W%lBs$$U3x%)%i>U zx>)vrE|dtg-H9kxnl5yR=mE8NAp{qCq@k>1Ds~iM9--*r1{l{LQTZH8wqdJk zf?qICOtI>bsIuxA)0>(aiu_FF%$$nn5>0ycakK5^MX?y_WY*b6a0JE{g%Nk{Xp}QW zDjvm~QzMC=8Jwb-RIEQSm(Ps8Qy7)`K#3B{4@Z0Y6*rPhJ;TN^>9$a2^B;M43#1DA z)pazz;4y@35w8*$ z-y56T`OusCI#N`vzjJfwF-vj^d0{>AeKyV$>ByvOVbclZbBd1S>7yZNaJ?HJ36~gp zd5aY)mbf7=RqCQ< zk#67h93_BCMX8D5t+@u0ml4*CCRS0eOf*)53j!p)?*v*q^f@An(~D-5Ko?p~L@y%- z$&|gYNQfU2!!~6c>4C{z=c+1Hat#s>gC-DLhD};ckGwu*Jh;(=) zs~!euDG3kyPhLpf6G2$DY$6B*dM2c#m;@`pMWj9H(Krz4g=lX5EL>VY2AVxD*$S=k zmG!(!N7;ahG#DB8ypH=@cB1yF>nUEHFaS@Z{_b%O}_PJq*aa+MX!}J zYGZoS;C?0ZEy}?AMiD@DI^>hBl;AAjmm!9~5gjq%$!`k-zrldANpzM&p??jb>M}k2 zni)GHVTh*oy6-)_x>P|fi2&;d^U32F%(+e)m1M>&IQVAtAT%^0eXOT`4KYx*V!#}| zfjr!&2uXL+ic@_g#ZVq(1z(*^R2HnN{0pFqx{GoRA5jR^Q6&kt7Zxw9`y?rvRn_E~ zvqB7JuQ)ClQmOeSQ-~~0ZL$caSve6K1fhz2k^$~#=nERF_O4S1#R$BD3DcX2(+~o| z6I}i%WWxdwTRuF7Ot|Qo4w9N3m#8VJBU=WZxPa-6gu#%|6b{4HT6>7=-4Kcxp4#&T zRX(FhF6kQ+dWfogRt&Rh3>&95QB}9Lo#Nm^MzZEYie$zLC_&^pIFhh#M18nudUG$( zgXxSUZre^l{@I;$Hz;#}ay0Mw3kL4uZ0?~a&+QxTIWxtDWWix>wT0J~x=o$6;^sRQ zCGVx4B+Uqkr;f6q-3<(5PCyd zzaXT`ms!l2Sa9_Z!$)!wb;o;SVSaaPT8_wPY1?6SLi)LpGPM$|PAfw=gcgmMg}}mE z&KcGK!;iNS)Dc#Vvs>VM*62Q(Dnv#-))?FBN+|5-u%npe(H?=J#Qp0-??%e=sy|5M#g%>3a}+uTg~0!rg|^IG~Cw-w&R87!<8- zBNKFs5y?odRN^H!Tbb{tVmzm}WE8F>*~B{o-5rZZjunZjz&hQ`M5Doi(o_x*dqCG7 zTs8}p#z$7qMJ^nvI*c>UIXJG4`K@*pM}KgSks~o0X?r@jyr@a22sq5`KQ@p&I3KSq zefp$dK_uY#XsS3L6wiP&{IpsktFRbx9G_tsEYMmok?*qspSfPQfKp71LdGccCISgB z#F@;LKF1!ULj`-y!532a;DTk$rQ*Eng&N7yiy^ZF8^YFvKO{x zmFx~ED{{dy=P=+;k2REQm+sSZ3cmHx85Q^HHM@BzX!M<*8Aok-^nnWEVgN`b$CDZF)<>4Zu$UJ^97VksA6fz`11ppIORI4P zz0OOnYfDu2ZVh&0RV@td-`{sWu)qV`SO#M zwCpN#^>ReAZ$Rh3`Fcvd<9tcR+CX2HwKMCLqwUSj?9z#r;Y@gDY@W@G>6VPB3OTM+ z^@G2}mD1jJ;J233gGMo3@`*{=z>4V-+qHAmY)pqpR>&UMH&nRU8%44NMFgf4k#px3 zBcXIeGrlHa5ra$ zK9h}>D*CM6yS`ZL-wQq4yni|GXHvakPExsjQp9(XXj9WLY95)^lr8!}uSzezFAmb5 z?scY4(bxIK&(EoxNyUAUm!ozU25Mz4FW0${%;{J3cXI~x2}9XK-w}!H$$DCFm$kc| zDJ^zP9!I9?IArte=-N^4(jX}gsPkF(mh_;*miB+gN*6q8czyXCNiM|e!PfA}nZM0; z@PMzMp@e9hxA{y!cd(t4=rEPH4LZmIlV;Kf9%ivPLzAFg0%@Nrjtng#8JY`++K3BI zMMx{&OT(GzG(hiT@1tHEIp&A%LQjn`CT5sY3QlOik}U_~hQJ`AqGa0DDiF2I-TXj6 z4lHr&ZVaCF=IpqSeRUgUP}_1-{7mxOvQ5j+g<|ZhI1=E9nWN2ZP_I9Ud&5(0pIdjn zu_Iq+&^+iiUE|c|ZIUuL4AhJ%QT2c$S>e{`QjaJpbHS)pkE)vIR)5&e1H_ShNk|g|r%h{oj3C)>Z>gh4t$o6&RyCbe_ zvSO1%jrm!^#U7Ujk4J)VmSbLLxk#?yX5NN7k9MW(WRbU2n;a+~-lY6=+L`dmPcVrg z=Ckx+*oTwvPMC!+?J93{I%hqQix1;4!l4JQ*b?@R3_z%nMwR6@g~VhgB~R^z=DHp_ zEPh$5hS*psvZpX^n0xfT>XQ}N1qO+N16fucOG>!v!2L$L(o#Y|eV-GGpyu-Tc_$*8jb6u7 z!qRX!NnYw-BzLH}FHa0cZ>$MJk`R0T#IXFsP}YFPO3+~Ln`6dGU-DMGavJaIY|iS- ztFG+mh{(v2U2)cd{#P%2(x7F!!bP4b*U0<$f`LxJE9e!-FlS$1wlT$xMCNq*Aik8c z`fCv~y1wl4vT(UC$XIQK_8cEREEeL;h)c3{2N;N2O;o7RDWYb1kk%k zhjLnQPj}eD9zfM`ZsYf&?E&@VR>bm|K zjzEtNKqu&jQZjx+)_)HyrUYDHkVIh}@gKa&C{S!K`gEn^1+0%SyoozzH44LkM%%}R zH}D+1U>TN0L2MPp;PZ28dUj-a^5u+TXCG!F!rw@Ct-E}Yw#KBFIawPTwrg7m~t zaX2h$VXOb41S+8>IwUXT!5@uf=NZKJq)JDRTt4n1$bp3qOANaBI%RhS6Z#p`ow}*O zw|XH1%i<;mbNofdMh_Ixc(}#7hCSf(PI~K!(k$XWrY5$8J)fLDSFSEy=Xm7`+69vu)@&DgjO+ zUw`Ii6?Uwlx%-^0f0dXcVYsF%ikC!2gOYPXbbNF?SC)crUjF&Gqr6e_!a%IoXxy`5 zL}o)qX6E|&Lno-o*U)0JT?O7kJ!jFf)Amz6v!o>JDm~t#^1rby2C?#Q;Am9tj>mIG zt=jU<%{J%UiPn!w@;BDMVmc}Lt?)J!Mf#^tL-naE=B0k*!?oGOz^L0Q0B~Jv6k}ft zNAiQlg(aZFXy$C#`}_L`2L|zwq?XD~kyL+-41@zXm~kpg-?G%8F{WKVs291*Mkpj+ z?V5CSTKr+qCjJsmUo#Z<^rM`KSPl!TH_KlvlY# z`^m8I5)hC(InQQXJxF+eZr;3R<$>Qa&m;(%2eTxK6r%-&c-S;Z?aDCcpxQbXou8-v z&_d)>+oJ3-^8Yee%L9q{Tcf3eoOh$_(XoMxYN8=BkQ0k%OmzRDs6ffdT_?XA;a5YE!d;SqFiZlbLporFInSWu_V6%?}nEf(4X6*ETf77EFbk4TK)b;Rx zhNI>7q^__V{m*zo^l;GTZXDH#70sSHvVWnIKr>qm7|DdIzd@_{f96VAfC;3Ai`1T( z{pUGFK*sL2p0Yy(Rj>)#*q*0e-pu>){k4hmmQBf;X_#2{ zNvdEtvaVMGL&$}he&G6p=zIRx+WA2RL`>N7Qk!;c)cwcITZmsUr{&fXt8&}OW4lc> zszW&OJRA=OD;pklodL;N!ks>=L6R;dM-B4(xKJf28O~O!XCVeclM%6R(qq)JkuD_Q z2gwhSYqEjt8;M_e`%=?$nQ!dUYjJ5wgH7S|(%qNYWz#18YNgvUzX^q8=u}b@I%ayh zdORc;4^web`ee#U(qII*swLlMphl+v+;0kqeL;^gWS9ZTy{~I9MeNHUoD+>FPBru@ z4>tpiXZbxdoafOS{8^qUU3Ot~ICel&NTIZJ&ry&M6L}rzD|spj1fg@AXi7b7%Semf zjlOLy7G%d?V`(|)ns^M5`bJJ;rj-u&0Z2pzMi6OywPQC>{D&50AQZ~ zRG{D-dbJB3Z#y{1;1#@h@g&3#q>#$c zte;-?q@p#)Y`sd&4pF?_jplw7mo_vm(3c7H#gTCY?7rwCL>pif=Zm{&laSW4?0)X%~u!| z23<7i;5fJz5xwH(LKZ1gu9t)ket?>6LlY&T~Z3@qz zutVu3yUZpZPOekTJ{#cK48FR{k@mU}=SK)<+vU1`&T6zePRW$hf1KH_n$mKKzx+S@ zl?GToofiRdM5w`|(uafY!_{MxHED(N6nV@A_h`cr&mG^LOtd`5gE~el-U6lC__DqIN z?qcJ7t0FH4=S_XYF9YhtttKqA1KjfgRJ~n)9zvz$mtWX2Piv8U`<7ilAyqL|D!5Kc z`E?8NPIH&<%|&{>Y8+plmx_M-JH_|ue&gW|-SP7j1NykjWO< zp?B4<4`K@%a~%xmNy39IyVl_-&T~lxVR9b?i*5>Q?7i#MCY0tiI0wneZi0S~ou=S*) z6`cJkek50?kmU8;=QeV-m~vE{S0q%fy-+qASqv8)R1 z8X=o8(r(8Fz2`)H(67J4lK8Qj_CSk@as%ZmA)yX{TI*@1u&m5x;iD}8H4S}%F>c!F zFju<{kc?iRtaiS-KHeJ6I9YDR;lt{gT1~~v|6_eaL;(kas{tHBLDpYtWuFNkcu2oIEN;o)7GV{)95%#XZt5lyKeMs1?*Tg6oQ5g z(;_Z6xYN`V@efULi=o^t9k>a$o8k7%XNGCs_)P$Kv>c}v+0$-KBx|4x@s*Pkv!97d z+jh47*yQ6@hH+2T+&g6wA25_r#i2+lKEzW!is~K*!R>N)yr%sJz8C<|MAS|s7Q6#6 zL1JwyKAZ6qUBUo+)=ahjcoqs9{S5`BfO5V-w0hNNqZ*_3e8E?5!+JD_z5omy6nUkJ zIZrp6i7#KiJRR&(oKx4X(s5n(oW0r|7l)&JKty|Zx<4@&d!G7!>WveicPG%bmlPlq zgvM(V;Dj$qUi-7}`16I4_(tODso95*S~1_nZp+}Ls5clO-EVDY!bMq;t#DG2{Uqu} zx<3s94HQ;ibE7W-6aj+Z#eD4aq9`U^GX~Z_v77FC|{qBl!upiB^hpN z2`VE41LE?Gt*vcO`C_2CnOPE|hM|`i_f!QV1sg)?GO6XbpAXQ%_f6;?DL*RKH7ltW zw4tO zSfC4tqy;#LAe;RXapc-CH9$Cs7uvKy~k|&4+)R{*uwy2<=jlf?xILI{kpw z+eyL*;WeN+;CodAb2W~eBFcw7(hUdb0T6FwlukpT77uX752FU8nR1`iP!`{4Ne;sFD3t zhT>rGi%C-!ennPWd+OVaf_F=GHVKzOoPB;cHZ@lVv*v`wjM$8UtmmdvMI$8d%xc({ z>gwut<048_2odNaA|W1cciylCsGfF1JAO}4O)-NwK{0JnFf}D3mwR4#uaBB6h7cWn zOrnEJI?m6ca4n@Qh~lA7LrLlLEkpaaPnr@DVLK?oH>pdALA99`>D)*hzL0l78GU|G zoru)Z=D{1m3UmfI^4eUuUg72`O%`Q!Q+|q_J#5XbSD6w$8dg5iDh6qz2j}-r#NlE@ zcbLrEtpghRxcI6o(l)j6|iPBCvR=b*}99{-OuvPaK#&X=E zQfI_BDJj$k83gw8q-|3Lv=W05qGf`a5NsK`>7=CS;X;ih4Ix2XwE~3V)<1 zb)XPcXhy4<_C&9qnpAfl&xERrbdQ}=l-*K_y-dQyQYg5YC;Cb zxlT6udR|cGqUU&(a)jCwqDuo@NE3MTMrw#_=-=_HB7k6^$0+3eIU0PAZ{*iipwVBh zwQ-z;>9xl$%D{O%ojMuQUoL>%wtvxFH){hlVx$Ku7b&>*;US$rfk0N!_80V?yZLzudjGwHi;K!XAM8?b{NpP0N=!-^esTenVt9BsI{0Cd2<@JPsJ6bi0&3HgzKOV=1wNHJ8N6;FY)#6v4yB?o zJ&|B#oQET^h(Sx=g}!#0$8rxA&m>4#cCui&m+2h?&PHqDKz`#I6qz9=Uf|T=du?=| zS^v_uB+oKUmJdk9Xp{=X5m16&DQ)9qtoo>oz+I<|T8(yk?Dc>PX+|q}%5C)S-!W~B z?#pRw%0`T$ApG_4Pj*W)jx1;;7<*DPCldBDhbJAF-$e=?(8*Ydk$RVeK{tcuMotF(en{rGe*dDS72xmU}guk617A~4*?xT zT_*6YMIN5Ay2y1KJTqs(USZgmAGzK##`xR;m~OL;uK;ITl!3&zGB1aJrMEM_Z^K^P zp`~{)B>71 z&HM4F@HE5<6#bW*SE!M~Q;BtC{5Bpoo(D4M z1`Y*${?yly1Lf;F3c1+Ynd;YEtW!!vM)_@ffr)#tk@4VzF%H%cj)li-y`;9W#5Mq0 z3q$9r^J+LlWa8P8LDBlfkO2U>H~3dgbK~Q6@Z_A^r!`S{szRg29A% zkUI4CW0wj-$${6Id-4mS-^W6FN+5aJBb8W1|J?aemR8a+Yf%vwVj$?|~ri*-nbGzA_=Zo1#PS|=O4O0Sl~ zD9b7%67IU$<=P(Lx{_+IK|D55e1q+Y%(8^aQJPU`#I?M*X|^!yejyoVbST|P`-Mqg zqgAfRV(U+?N<>T~bE$2;3xSt%CC#nn<*XLHpcHkm9IDNt$ZSPEy!{#Df|KD>q$D?~ zTDD7wEPq*Eoj0Ptn8G}Ml2rS4gX%U-rw1V~LzC!Rocn&~*p*KV)Qs(O6Di=T&aZ^? zxDq&{r(auG&-C=p)%mihjp9EV0r!;G>&H zOxKs{NCvDo$+D#9aJ1CF8_?E5WItE-`xV6u*EMqU0*R7gy^3ji|0TG!5 zYw){)tN68vIvYwZcu8;uW|FMEm6KF1LQB(%DZWsYz;CxD8jOcw#7AQzRY&QLccdYBGPIu`O)XsP4K|#_yL-;%Rmp`)I`Nj zZppyPiHc!zCC+oBd0IOyWCj{s|CivQL`{Rn{2+v&zY!E1qQ4iGVe39uF*$U{C3+XVzlg)-xFad6z0cJ-H`Y2RU-XN}`T|HyM**7roqT&Tm?};s$bBgpS z_Ctd7wOUVxh~O7v*hhx>@PeC}nb^A&Ws`)CL=d$33@p~Npg+Y54HYk=1Od=j)kKu` z7t}D^GHqp!S~)O{(o9?C-?`Gh$QAdyNVk7AVa1J?dVo48`T|kg@@o#1f6|ev^=}mz zG@wt-xOrEnd|%I7>~syPm|6>Ap$C0Ji<~?zE843Q(?bG!!kG!)Q!18X;eoeNvMNzJ zIXN7!V-g?HNCM}Xgv6^_KuRh}DI9#Vq`T0~4nAXO9HB1YwSx8Z{Qmj+Bi}++15l#| z2X90`l6{)%1p`pq21}P6q{IC%_jX4-orr@xcntg-Wb5t!D4!`QYTV~hz4xDSBGTiw z8Lx9kSQ_1^Jvn*EhL53wsT<7D&2K!9py*(Lov%Xm*Qe6!how>f`orHlg1X>$r2|bd zA^cy_22vA!th|1viu2!QND>JGG!zPY&;~p`;I)Pb$@my0Y%Io(1TTRI+0R!~RMNvp z^XC^~aS&mfQP!mt{LHHu?As%>(7><39o2slwczTT&!60)&qB(lKZmtoaAilFLE48X z6kt*?C!uH?*98iDebj~C^|s%_s>XyuNC-dXu5x>|NY2hR6r;| zfD}L!NH&_5l`N73Ps{y-ZD`Bl{EtX}2_^tTCQfmGsrdQZ?sadA=V%{MB71wOd|w9< z{0iChUw&&Q6R)X|D3Gnr?86N()Gnb$wl)kyuBi*~;YI9jlLe}YF^@tp=JJG+_Fww` zJP;`oG%aB-M4m28)*mH@{&cMHH-88IQkOF*mv57YUFv_*B8B7v>TDYB2Op0AO>m6| zEUw3|S!i!xi}d2Njq9G;FkQXL|A{U6^CEM_aB(_uhOc(%_YX9|)%|I^Z)>yEUyGjy zP>&SGb?qNXyPT&MvV6`EEsXtT?YgW%-I+@Yx4RqxFqFYAs6KWE#umd_IqN3h1Y|`Z zK{^dP%X?WeHUoX*2$X}AGF^dxz8}cX3IiXO)b)BZ*S`H6n0J&Bh@pu%VWsE8cgnSN zpy;p9c=>yKfa_{-{%~K4`!!@p+5h?*3sN(>zXB2g;lAwYrh%+C{|E=xYKPwh5D9D9 z^?z0N*ZLr!uC*j0h*qS zbx8}pO$pindmONG^xF?Z|4m@`LC-~^nyrm6LxXjmjFthY9{rj`@Gg0ftn)87;lYJ3 zug?a_yrj-X5%C`#K}Q8j$uYFM|9z`06N0~n!Kx4SpWXm;EA$G&x zvlD@LIW#Z$j{6r-;zt@J1YJnb9a#&w*>O=I2LcvJG)fpF6+HB7hzxubYQs`RkSGnX z5yOR`kNGe>W=2TE{>Ct2gqc|X3`0_oGWY|bt%1KKWx&ViaOe8N+1a@?Or@EVOixTy z{WVyCU7{5O>RM=V{}Vs3P*dQyn3zU=f7>Up@d_e`2DY?#a#$uDV8dA9Octn9`cKPE zD8F+4T@Hvp{3{qD{L~FpWg%3nq6_!7PM5w^zvj8TzHrDeAXW88A=sk^=?(cs}~GM4YAI;TOmNxE`rGQFYFSk^PrcL{d@L>ep2#R2WMG0c-rY*+2H5^_2wc zVOHL(ss~hU*}wPKNPgGgFKdu-{{}a}e`o*!s_GUGMCE@7nVtZ1d6|eK{#qmo-elh8 z!F9YD)!f?a_gF@70P3I=K)F}0^6pd782y)-rVIpLD9xZ}l>m5124WHGt;SLvD<~&I zk{r?)&@C5ZS~i6#VDz{aYV+V}$)Fxp!=up!@S2El0-iB0Ldy*AxA5M+hUkC@7Yf^D z6p~j29RsS}vLgmusPSt%sDwe>qhbO94|z<`%({z&Mz9XU? z{-4V9l&nad=dU9vUrt!VKR@#42Pq7n>yt$;(Q&UvcxWFm%z4sCVQjg>%L6V3B2H0w*CYBCHIZSNIKIUU z`8Au;nBKD&j;_Q4lhd&&~hF)ki`&4jp9qFGv9d6$!Zi@iz*1{{i{P z09O?O*ctobx<76kyyH-@!T5*nuL^&R3Sbca|9%bgmnAr7!(=?&6CyBM=$>qcmWrUY+Pv2atFD8@NjlhzGIU>#t-Cb0dJIS_@?l4#EDR{b`?VE>`_JM1meJ0_m_j~p-otO>a0 z_8)QCk(sE-OX>o%3yvalS)02}(@!{_^LE?mn6!33Czw%`tuZ$5TWefi;7Uq!-B%`1 z&ix#|Q$5@0I9=R$SaIpmeJ+@Dog1Wlf)ao4ZBK5XSHIo0?z?2ZQ~2imt9v|TUt8Q}<^1-W`Kl|IOPkfxY~oQ1?U(eZI*m_bA3x07IE0${_zb}91OOrxuHm}Fi0d{dO)JMxVg37Uti3mJPMwQaMZ4pyJ9Fbn+%`My)FpNpGaxeN zC*aMj*ZX~(4>wU>p4O%&K}3*0{yBKPh>~lUXLNs7*WTY;;R(?&Z8y31kzIwwzjjw- zCcOHUvWif}j}?=CO-bP39c73K4nyd@su%(J8$+X5TPpi_&in{{XFfWR9J;tVSL3=gq;7cPshAWzrYl zj6NCa%?IR7l9ALLyUianv`YYp6Om~OAY`rbwb7vfRPh=7oWl?4rz?z)<_&#w&QF3B ziWedL4r7v7-)$IE1o~O$e!S3YMo_0BTz#mQ zL}K*J{l={G(W_>>pw&`@pgfRjd2-v~$zsMgRO!BZ)yY+VO|I1V>a9AzRy((4yi6Ac z;PeEO3jyq65CFKyA9-ngCzq$i@wi&lHWJib+ppm*)e(@F<99tg<9M%h%;(bLImuUV z_E_r^*>Bf*wyz~i+|p>d?*F1+A}P?X7M0BS=^`muF#8Vuncy;__Tl4M6H#P6vyJD% zK>4&2@tCj9YPzrgy!Kr#RjZ5V4VUBoj6!aw$MyNBbmNJjZl@DF^;TSGbxyYmw%X8{ zpVNAiu(NL6-f1+)%g^vu3at3<{)5Ly`>|VS7*&RXre8)H;Idwo?|ydmzw>rH|9pLb zdiXwvPg_0#s~0gLbdY((uw~eSUBFK|adL-cRHwE?X|zwZmpvhONUAFDUU_F5r|_W{ zwy}ForS8F`-cos{snbD{ob`)RemcCgU3GD?c-}_9ReI4uBgv>u7Bz|h*129Mh5f*{ zoNJ;N8L!HDtG(1};-rddz9qqrUU%xopQR=)&ENYeb+=izYC8ycJa{-w!f-hOX;R!= zddhzARWsz^!^-!M&*a5Gn(18&j?(f~Gf#Or%`w8p`-fvTP9#fDy;=4hkCuzWfy9)t z>_t=bFMM?(r}YJu>eD690$Q$5=iz^5TQ=|$x3u3I@_1bm>oo7X*bqO?=DryAjt;&i z6uKYYZ*M}f;lHinv1`a^xBl5-Kfd6v%~k%`6NtmK=%aGF{OWKi--1T&k64aul)TCNV?T!Q0445c7~tlHNh?(pJPr`9GzstF0=#XeyJS>W^5)tZYyly&!BK7Fg zVRaJS<*ax;(W+iFG8!rIGl*yx;pgP4^)?o!x!2IeChScn%FJW1mx6LN_fz9BR4We` z{#A~*W&6X~hHmFcSr+BU1}KwYZN&#N7>*&lWRLi~YGF@nY;^Kgs%?}V#f zStziOSyzI5Jg>Q|sx~U?llSJd~bsn$dl0_#&$!@jGW>Pr;{Z-O){x z!Ng8|#3NjLZULdvZ_{~`1SKU^%U%xKZ;ym)?#xFnI0AAx-@CTg)BTXyPq6NMpGEky z`=a;WOKG)!r!Tjp)tY(bM}M0l53?YiQcG2Nv&(zd7{9#=107iBY!=s`-vjduomon@!e2V<58n{?T5Qr`l=)@r32U z_Op_xP*3{pyUxH2Pi|+MZ`i;I4ZHBZSw83PMqVlErR5jrH-4Qz_TTTBouTB7L}X%A z1(|ijTsf^YJAGMKe-W#FLNL*)(ELrW?L+O{1b?Lpk$1<$qJD(XVrrl#!;l+}>5jlHgySx1QZ+5TgVe+%V+#m(UxiaQS{Mjw>@ z>4)t6(fs^oh!&R-<4#@fE7AFV;Wt0+i&-V%T}~t2zUtQzJRYVdvbPCP1=nIEJ#T=2 z6|4gRge?`)r2I9gX)%dhTBUa85ij`lJL!mC(GHORi3gt`3G8sU0%>%R=?BjoQbtjdpI%3Ac0zizm`(tOa&IWwJ? zw;;1WSyOp&ITlS=RRISJgZB1>pKRuG1(7FK{CW84rt?YTY458}U-ypyPtJ3uUHWa* zwS4{DPk}F96`^Y1crQFCx-9AIv6la=Ohm$NC|Y~oaCd{dqn44S|3Hj&dP`_snizLX zWhYIhn7UtW{a(H@3oagIp2-K{r;v-j_x$CLC&LNXy|pt3Th6TqtRK?RBKy{3rl$ULbMgdIkL{-p0vP(t-Tf(<(-g+3X~a#~FQ6_~ z>Wl8Z4bOXZbhChLzu75Wf-%RtzMKo}01s!i5I-_9-M*`meU~38d6~ZCtzo87r}NGH z^82d|it|f2-JMQ~*0*fOsO7x`jaOr>AkGQ{uBARp{yPmBgEVIv`+ zzZ|{u-^q5AW?NBJD0H{iW>j+bJeJ&Pf_)B-QOVb~VL9J^8SDX!o(3dHMIZ^0|N2eK zRyH@JHmo?YGs)EPr0xOR!||T5VZ4V`svbF;?ZB(-BmLsHp>wZr&-Q6pmJ(4!C7oIkESj{FTvyb4Y`Q6S7_8n^xyqoD2y<~ZhmMVmfVGm*G+OzfKpO8s=$&tbM zU=bf6&X33tcBg^V1ZsXG%XYFFWv(Rf(QsmC@DxO-3>~&NVjx{ z(m8-ql7a$CmmnR&&>-E-5CaU2Fm&h4J>&CyAAQ|F;a*&0#12WL`#-cq0{RZvS)}-Q=PBZ=V*@U4K;;JI6jkc4#>R{g5nG&&@ zlzjD81WilQ9L>#fTf+zY2W zjp@P}VZRRMI=gYDjp>4V7&9Zcmn+;*j3P*~EC#Qltv{r(&6??k_1@l*=Cf_ColT-^ z1K!ffYIpx_wQ!@mA(+^5c)f9|&rXS^l9a&4Q0;r6(Zm_#&^!4Y&EWe-nKB?CPrgWr zV&g}0)l3p+-Skd|0S<$boX=C%)aHP0_3zfNcQ4)J!%ph9UYYh1M0x}u;U46ea`)^u zW~pMotb-`u&c3wl{+2f61XnHDs(Y%WC%?(E-GOH(bd@%><1#erAqH{syv(2C5ICCU zBlicK$On&6!HaVFa}g4P4;1c408A1nm;p>cuP0~+Tn8LernO51EsmgNm}^B)7Bo|L z``eij4PqaT57xm{Bd1+zRTO}6EM!gD8RbWLMZotM2CiF!!^>I4FV+poH$-K~u&{@W z>Y-W>Idq#h#%UmAqr$`pATCzsV4mJ)%($`RS4vDH z%4tmjTg4~8A`s()mhcn#TWTpAsjuk8%CSbGLZFM|dfd9i152*YD<9?Ye)!dFo9X(g zEh+&@76ZAe5VR#7?4e`L>g4*x!{Mya>lkX|lu)AxhFBL#n$hQ7uir zM_7F2BV$q=NL@oSl7#uw?%oPeN{~@7W7Kw#!HeVkcL2_)#|G%JTQ!-I5{A0+qFTF1 z{!|fSTjYqWbSAO|vRVD+gL-IK)sVR`=PA|m`BM1&+d~uQ_!4dU5}r1gk4nn$hOmmI z?ykB|Z^G5e-jv^AyZ%&BPMF7e3sY$QrIP? zr9Md7BxkNO8~>U9Fgg>NSSI1N>V_Zhvr=KID{uJq8^>;#tVdWbVlPSyEGkrDlps9M z^JrJh&uME0shb`hjCN?jRRqE z-SNG@JgBc!%6gwkwxbIIYR<79#&=4LC2YrzQEwNP6o-6IcX5ohs#J1P%hH+i5QB=I z$tjIL^!E>gL8t>4{I_AQ0f>F$&E{Y;&f;^y8|1E6z##`v6Lt5nKPU2K8`JK#$a?5q z#?Z)!9?IbbCO_bknU8>(x6kr&2-s5j9E>M9`I{|^G9v(o)!pIa*4M9#?{@kt z@Go$Y7nU>Mr0#zVW@7F3giTy*`lb?Zph|d4bD)>BgK0*7l{`j)TGUQ$1g%33T%`Ir z7>7v|dy;=yJ1)}v^-01_w4uYSGxalMa7)wbYh4`2y&&jmy0H5x-FibNOs}RA9Bb)& zS#kkmpFIV|-lOtN@WXXx%?OyM*PxhCFy?c_c-3Bxe#~K=*86Uz+VQA99eg;NS{D~f z`rh{#{aG;aS_k90{AJT=$!^HW{sv3nFOvoz zQACFZ2T-Na_6(d9hl+T=&j$GVjQaW?)==O!ND}*cuiHJjklW4%>oVd=Qb)ZzR_Zfgt)DFX9MMpV0wo~Tv|@~5YNuxP7cYFyh!X3{8SoX0 z7XQiG`%A?o+D}2tA3BeY`b!&;{5R3ASmY1TI|p(lN1ZKzYUilF|Gw-P0VcN&v7Y}A z=oJbAIoAPheQD?Kq`ntE<#(6;j=@Fs2OrX+|C2FO602B^KmHeQ)B@;DDU}bqG*60cB*s!}R-K_rCZoS-*gH|MkMa52)~$DnJk^AZIE1En58B#zmTc zrS%w)mg(>Gw0}8o&?51_^z?SicEcEt1R7gZ)}6ihEB3Ewulw_L z7Z=yQdtSA}oxMOHuN%C*H5PMXok_;7A`mjds9=6%2%P;n#7_IrWNmFFR|wRin+&f< zo&-lr_#MIxoFYYlIMslVy}8_BUxENOr9P!gr}jOu3VT43sg&**2TCiD%m=r__QOy1 zyTScLglb0PXVeIQt9m%h8bz@SHs%87E;qQE%zJTaB!;_e)!n{w2i%jK&z$?(5w*-J#VS!86vt z!azd;Zw#$fh*C&IKv1!#|C{;1(I&TP#|(E~qLV2vS+)z%=tgFHZ8eH}FV#YWFDb;i z_i~YAVTHnFz~>7wW#5b`~fLVn=&5rq@ebv)HUgK^q%7n zYFQd(TK@ijw|!5gixG}jSqncu|I~fh0P4{rgG=A4*GlUVbB8e42@UzFIzkTEJM>7TDAUHchLaAkCyol zumP4b;3`N00KX43o$t?D5`+fm9aw15|5iyreYRv10Qe`Nr^Q15Gdy4&lmt{FG@Gcu zQ2rKRpalyx)`NeVMvDe0H0YA%5B{tkFF61yspO9SB$$+6W*w|2H5Ls5H$c$KkL4gp{G~1lSZ1!xPxW{HNoY#;Di_M_)+l zpF97b95V6=19za4nzFBZXG17FO6+vOy#=P8zJ-@r#Wy@;D&w~9YEiyFGX+=;knmZm zFJr9-TsTzv9y=q2N`4N(6DC_jLt-rsE6ZYcJhw$_clIN0xfka17pI7qL*q>SogwfW z#NZo2%A=&4TGOd5l?Di1k_VfJr{m*2qnFkwW@k&x_Cu`9ZC!`q-C#NcHbJi(VMFPq*IKAG<>DSaU*l=i{vl`Tdd?h6TM&JHB@l zH$dwlUB>m4u5acSEN6sb*OhgnN)#W%W66f+wd>OFi5q6Uz%)3bzNyFKvYXEKz$+Qp zj+#zUH;655NPi?^y0l*hW1~3#9O-u@lWXm(^3J2!xTNctu*HLOCn~X>xRebh%)vYc z>dXEJMeK$9%}@BUj3-8^)RN#uY)`l+zjHTX?zH<{G(V_J5P?6pTP1#Y`T4PgP_ZY> z(aeI;L|sVCd{s1hnD_QoNrOU=skJjq>Ft*p`}VSiXo{4lNgN@V<^>1dY@E*X1C0+R z`*l0JK}Zhcga%!~;idP6tW3wnk?HYw)9oo2Y&Z7OvZnlkA- zmg3C>JCp5w3hCYtAODn4su_(5K9O;Bj=gnAr&eW^rmX_Kcja@u8bUwD?euIZ3 zR$;{HbK{!e_ZoR`GIrW9$LsE1? zE0PqQDFs3P^7Z+Q^>D`1*nz!ZW%3zMH=nZ13jRIe+70Fh%?}7^e-Kl9T86{3ufOJ%ge5N2FYik8HNbgTATpQJ5(5WuPYj98FsN4_4;s&8W?@l6fSG>wm!g}2*Rl)re96W_JGY0nih^8UU<<FMBxC-+kpl#VR50aFTXc2usPi z;rZcd+t_+nqR0)xl}%ilnbZD6(=gYAqAGK$;STKXq|%dlJO8YRtyUt*=c=w0r!6^Has@N*D2mw!GOzS~?4_uHDkU>WBKs_Ij4d!LY%+JFJ>fb%Yi0 zTF+PdW(zdKZq-{eU!Z4Tn#;}&z78vTqOuTaV@@6?*w2Z}Uv*7P92c((j97hDkzG`^ zkewR=#h6Wrx=LA+CoZnECjoc)-Qadpu%(6rvtKi**0CZ#YHGl4y!NBin1|^SBJP{I z@|v&x6r+Niq*6RipEhNFpe8A8m4#u8xL7eg5(Vva%!>8LwJyqx#^Q}uC0+YroWhzj z4sAm|T-M{IIbcm22=z6HMMzCTuHPPgtWKi4l_BaYYWpjyO!!3B{u+oli4z63+FlMW zCV7m#`@bwj&=lboBS3w7FT_?aFdzK%49d*m0<*u;>=Y%O=2b#V-uTn|!Mx)_i-Kx< zb*`176?eXK^73(#vfBsj3H3S7wbA8T+c@;}w;YxX*7FHCYt~~%rt z$=A}kI_49E%FkpUWTI{)4)9oE3q+27I=y`B@g!5eb+kre)!Zc)v^!3zzLq&s5u9M} z;7>w$U(VqfJ$yHahdU{9$jakfRXO6PXFk6X=EL`Hb=QyIjx5taqL0Yk9&aCaVuR%1 z2q{Y0uYBP9GEvh?*K9Lr^*=oCv#q61d-Xh%K+5pE(-y97kzT>J{o#^hKoVUD!@vGn zW8~>D%CPXkpvt#*Ex8p3*RXM8r~Bs*K`cXlmEqdSI!DiLRewHvTQToT-GNuC12E2` z@w*x9smqr3rZh-hUi5ss8>6_*m2dleQa6cRUQZoFi=+Euol%ZL zbZZ16T9%{wM!(S*e#K9lr%H6e(HbFahEI$oP9j$m)}W-4B3p3&N0Zj^jtx$qpK8S@ zHm+}qbqlyioSIn2_%jub9#Y}%iYe3BNVGxb5M?b#_LBwlz{w53VD_R0^P0#t_{ly# zx`R`-of)Yw&$4oOhHLE73+mh_Paci=*B1!Zh05`WzfhRFZVx(9g{hoX?eaR?m|0rg z5&1;ieBx%2Vz+i>J=tY7yiB}Xl>gKIYC6RKd~x4Dx&2pGOpXhU`u4LWZPqa#;S(99 zhs4Qczl2@kLn_E3rn8J0teH!d3>+IFo~xffEX_@tF6|Mye5xL|-ZwA4_+g6(s@T0H zWybDBW6blWCw7@UlL}Z}YI@v1+py3bJmIiDYHTMh5zf9BOzG}qKjmAAhd;OyPrt5W z$g;h+>;~;9*hy$)ii_2idoE7us#y@O)~WUsP&kkDMXO{z!|#0%RGBP-oco`$OWg>( zVQ=ts<8>Zgf-7iGS8dyEqO~x**-s{$$oIoFBP9l&0LB2fn|bGCZChRvGsu{KC@!}9 zT}=4lfo3@Y9pfVb?oRKDw;@$J*Zb<_Dd2K_0pGC2i;qXV6m^q@nmWu!3mFEn#mK7@ z*xgPyUiZ}PR2lkGA!@{qpNn+s&#HzYql5NNmEplE7uiO$E>Oqlx;Pq{Hi^VRtjHL9D#-!LQ^=CLxM@#pT~ssu&V zZm`FLyXHLPI!upg;C7qO=J0H$+K3JhRJ$CrEEMGOM3Y;~c{u4(^9!g#xLu5pN#kB+ z^O1DKWxf5~_>BA$F@5B=kAq@^(AHME%llI4aT=vse}0245AN!iv5WT&wnaQS^kb)N z^`vR=OtoEwlS7=@uZxXOT&vc1D#oqM7mVDjxwvhD3{!3Tby!q=W@=0x8;~e|<>yOE zitXvFG1;gw+V?&_UrJ9fs5viIQdLW>ZCzWui+nU`pB<>)o~W>iL!c;*7E;=oF=D5M zOINf~X+q!BMaotpT)i`w^;^L}n6@O_h)RJSDE4r)J~#ch7_J7V_1Xpa&w5FghVdXVYlUkg<0;= zgcvSaoBd=!=PD|#X->8ZzAe9)13->*bv6MeB@Acm4?zX&*bU^KJc^HH%}4S2GTs-mMucT8#pEnL8_#`SMcCA0v@IsG?(_a-k<3pe zPPywd<*TXU<-Mct+ZBScJG1r7r)fuS?>AYB{fu@FTX6JsO@f=Ea)J%JO1krhT?K~3 zrZaabmWoDJ@p1qst*pHGC!rb9t zmS?o#{url2y5fWcTPmc@w4nrO;^#>PcVuLJ8QsdKC>ugnJAvbMX z0fN50vRdk-KemNqfw;WuGaz2Q)l>tcFM_Pqr{xAsE^7c`)_<4K2FALLW``QWeZk`8{c|KOgB?TE+D5Faw%*UqSJ zzzt=ZolIaJEjYeg%GNa()o64dakFN^!PT?iF;wrq_4xhx@H58#XY!(&JmwdkO5lN} zN6&CcdL>Y(VR2p#K>+v(immlV0*%D)nBOIXGM2?Ob$MB&iA5W^TOB{!OE0gfyIyYE z3UG3BmKsUHRjp~9uX+XtSjrR8BfI8<1JNSO!dAL%YqhKL;p@gV@4nU7k_>K1ttQ%NGO9pd2LW5O zYw83cdPemVAT40jP|hTC<`Vw<#mqc^uV#U3sEJlwM#WOPMuEcd`f zZ(?jBjn}IyGo4poxyIId{gdO9d)0Qm z7|My49D5g4(mHF2Ojl@Cfj>wI30-C9~1$RB=NLBlG0@SrPj90~Q*FmApkcD~>h;8lMo z;p;t^wgdP+1;B=w^N6+z_YdZZ!$+?llDB3PBL4HYm$!f?c|J)iGQbf3y=bWbdmPhK z8v0)*4FJU^04S%97dM0XhttUeF>yI=ka(WI*dQN@)8Df2_@_L??{^#nB6FG3s#lf& yLu>MqcqrCzXkgZ~e_Bu8@q literal 0 HcmV?d00001 diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index fbf47b08..4ac6ab79 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -14,6 +14,8 @@ * limitations under the License. */ +# tfdoc:file:description Security project, Cloud KMS and Secret Manager resources. + locals { kms_locations = distinct(flatten([ for k, v in var.kms_keys : v.locations @@ -56,7 +58,7 @@ locals { module "sec-project" { count = var.enable_features.kms ? 1 : 0 source = "../../../modules/project" - name = "sec-core" + name = var.projects_create != null ? "sec-core" : var.projects_id["sec-core"] parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) project_create = var.projects_create != null && var.enable_features.kms @@ -75,7 +77,7 @@ module "sec-project" { } module "sec-kms" { - for_each = var.enable_features.log_sink ? toset(local.kms_locations) : toset([]) + for_each = var.enable_features.kms ? toset(local.kms_locations) : toset([]) source = "../../../modules/kms" project_id = module.sec-project[0].project_id keyring = { @@ -90,7 +92,7 @@ module "sec-kms" { } module "log-kms" { - for_each = var.enable_features.log_sink ? toset(local.kms_log_locations) : toset([]) + for_each = var.enable_features.kms ? toset(local.kms_log_locations) : toset([]) source = "../../../modules/kms" project_id = module.sec-project[0].project_id keyring = { diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index 0c72298d..daa657bd 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -23,11 +23,12 @@ locals { : "REGIONAL" ) log_types = toset([for k, v in var.log_sinks : v.type]) - _log_keys = { - bq = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.bq}/keyRings/${var.log_locations.bq}/cryptoKeys/bq"] : null - pubsub = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.pubsub}/keyRings/${var.log_locations.pubsub}/cryptoKeys/pubsub"] : null - storage = var.enable_features.log_sink ? ["projects/${module.sec-project.project_id}/locations/${var.log_locations.storage}/keyRings/${var.log_locations.storage}/cryptoKeys/storage"] : null - } + + _log_keys = var.enable_features.kms ? { + bq = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.bq}/keyRings/${var.log_locations.bq}/cryptoKeys/bq"] : null + pubsub = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.pubsub}/keyRings/${var.log_locations.pubsub}/cryptoKeys/pubsub"] : null + storage = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.storage}/keyRings/${var.log_locations.storage}/cryptoKeys/storage"] : null + } : {} log_keys = { for service, key in local._log_keys : service => key if key != null @@ -37,7 +38,7 @@ locals { module "log-export-project" { count = var.enable_features.log_sink ? 1 : 0 source = "../../../modules/project" - name = "audit-logs" + name = var.projects_create != null ? "audit-logs" : var.projects_id["audit-logs"] parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) project_create = var.projects_create != null @@ -51,7 +52,7 @@ module "log-export-project" { "storage.googleapis.com", "stackdriver.googleapis.com" ] - service_encryption_key_ids = var.enable_features.kms ? local.log_keys : null + service_encryption_key_ids = var.enable_features.kms ? local.log_keys : {} depends_on = [ module.log-kms diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index fe53e008..17bdc05c 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -22,6 +22,12 @@ locals { file("${var.data_dir}/vpc-sc/restricted-services.yaml") ) + access_policy_create = var.access_policy == null ? { + parent = "organizations/${var.organization.id}" + title = "shielded-folder" + scopes = [module.folder.id] + } : null + groups = { for k, v in var.groups : k => "${v}@${var.organization.domain}" } @@ -51,15 +57,11 @@ locals { } module "folder" { - source = "../../../modules/folder" - folder_create = var.folder_create != null - parent = try(var.folder_create.parent, null) - name = try(var.folder_create.display_name, null) - id = var.folder_id - iam = { - "roles/owner" = ["serviceAccount:${var.bootstrap_service_account}"] - "roles/resourcemanager.projectCreator" = ["serviceAccount:${var.bootstrap_service_account}"] - } + source = "../../../modules/folder" + folder_create = var.folder_create != null + parent = try(var.folder_create.parent, null) + name = try(var.folder_create.display_name, null) + id = var.folder_create != null ? null : var.folder_id group_iam = local.group_iam org_policies_data_path = "${var.data_dir}/org-policies" firewall_policy_factory = { @@ -77,6 +79,13 @@ module "folder" { } : null } +module "folder-workload" { + source = "../../../modules/folder" + parent = module.folder.id + name = "${var.prefix}-workload" +} + + #TODO VPCSC: Access levels data "google_projects" "folder-projects" { filter = "parent.id:${split("/", module.folder.id)[1]}" @@ -85,15 +94,19 @@ data "google_projects" "folder-projects" { module "vpc-sc" { source = "../../../modules/vpc-sc" access_policy = var.access_policy - access_policy_create = var.access_policy_create + access_policy_create = local.access_policy_create access_levels = var.vpc_sc_access_levels egress_policies = var.vpc_sc_egress_policies ingress_policies = var.vpc_sc_ingress_policies service_perimeters_regular = { shielded = { - status = { + # Move `spec` definition to `status` and comment `use_explicit_dry_run_spec` variable to enforce VPC-SC configuration + # Before enforing configuration check logs and create Access Level, Ingress/Egress policy as needed + + status = null + spec = { access_levels = keys(var.vpc_sc_access_levels) - resources = null #TODO local.vpc_sc_resources + resources = local.vpc_sc_resources restricted_services = local._vpc_sc_restricted_services egress_policies = keys(var.vpc_sc_egress_policies) ingress_policies = keys(var.vpc_sc_ingress_policies) @@ -102,6 +115,8 @@ module "vpc-sc" { enable_restriction = true } } + use_explicit_dry_run_spec = true + } } } diff --git a/blueprints/data-solutions/shielded-folder/output.tf b/blueprints/data-solutions/shielded-folder/output.tf new file mode 100644 index 00000000..0110b627 --- /dev/null +++ b/blueprints/data-solutions/shielded-folder/output.tf @@ -0,0 +1,22 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +output "folders" { + description = "Folders id." + value = { + shielded-folder = module.folder.id + workload-folder = module.folder-workload.id + } +} + diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index a770df6b..666094e2 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -12,12 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -# tfdoc:file:description Folder resources. +# tfdoc:file:description Variables definition. variable "access_policy" { description = "Access Policy name, set to null if creating one." type = string - + default = null } variable "access_policy_create" { @@ -30,11 +30,6 @@ variable "access_policy_create" { default = null } -variable "bootstrap_service_account" { - description = "Folder bootstrap service account: owner of the folder." - type = string -} - variable "data_dir" { description = "Relative path for the folder storing configuration data." type = string @@ -134,6 +129,7 @@ variable "organization" { description = "Organization details." type = object({ domain = string + id = string }) } @@ -156,9 +152,12 @@ variable "projects_create" { } variable "projects_id" { - description = "Project id, references existing project if `project_create` is null. Projects will be moved into the shielded folder." - type = map(string) - default = null + description = "Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder." + type = object({ + sec-core = string + audit-logs = string + }) + default = null } variable "vpc_sc_access_levels" { From 66a10d76c398860d8ff6f57ec5eb1c7ad6950b96 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Mon, 30 Jan 2023 23:47:33 +0100 Subject: [PATCH 09/58] Add test --- .../data-solutions/shielded-folder/README.md | 1 + .../data-solutions/shielded-folder/main.tf | 14 ++++---- .../shielded-folder/variables.tf | 2 +- .../shielded-folder/__init__.py | 13 ++++++++ .../shielded-folder/fixture/main.tf | 32 +++++++++++++++++++ .../shielded-folder/test_plan.py | 19 +++++++++++ 6 files changed, 73 insertions(+), 8 deletions(-) create mode 100644 tests/blueprints/data_solutions/shielded-folder/__init__.py create mode 100644 tests/blueprints/data_solutions/shielded-folder/fixture/main.tf create mode 100644 tests/blueprints/data_solutions/shielded-folder/test_plan.py diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index e20c54c7..9eeec907 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -65,6 +65,7 @@ The shielded Folfer blueprint assumes [groups described](#groups) are created in There are three sets of variables you will need to fill in: ``` organization = { + id = "12345678" domain = "example.com" } prefix = "prefix" diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 17bdc05c..fd4e5284 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -15,12 +15,12 @@ # tfdoc:file:description Folder resources. locals { - _vpc_sc_vpc_accessible_services = yamldecode( + _vpc_sc_vpc_accessible_services = var.data_dir != null ? yamldecode( file("${var.data_dir}/vpc-sc/restricted-services.yaml") - ) - _vpc_sc_restricted_services = yamldecode( + ) : null + _vpc_sc_restricted_services = var.data_dir != null ? yamldecode( file("${var.data_dir}/vpc-sc/restricted-services.yaml") - ) + ) : null access_policy_create = var.access_policy == null ? { parent = "organizations/${var.organization.id}" @@ -63,12 +63,12 @@ module "folder" { name = try(var.folder_create.display_name, null) id = var.folder_create != null ? null : var.folder_id group_iam = local.group_iam - org_policies_data_path = "${var.data_dir}/org-policies" - firewall_policy_factory = { + org_policies_data_path = var.data_dir != null ? "${var.data_dir}/org-policies" : null + firewall_policy_factory = var.data_dir != null ? { cidr_file = "${var.data_dir}/firewall-policies/cidrs.yaml" policy_name = "${var.prefix}-fw-policy" rules_file = "${var.data_dir}/firewall-policies/hierarchical-policy-rules.yaml" - } + } : null logging_sinks = var.enable_features.log_sink ? { for name, attrs in var.log_sinks : name => { bq_partitioned_table = attrs.type == "bigquery" diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 666094e2..a48a8849 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -43,7 +43,7 @@ variable "enable_features" { log_sink = bool }) default = { - kms = true + kms = false log_sink = true } } diff --git a/tests/blueprints/data_solutions/shielded-folder/__init__.py b/tests/blueprints/data_solutions/shielded-folder/__init__.py new file mode 100644 index 00000000..6d6d1266 --- /dev/null +++ b/tests/blueprints/data_solutions/shielded-folder/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/blueprints/data_solutions/shielded-folder/fixture/main.tf b/tests/blueprints/data_solutions/shielded-folder/fixture/main.tf new file mode 100644 index 00000000..f4080c67 --- /dev/null +++ b/tests/blueprints/data_solutions/shielded-folder/fixture/main.tf @@ -0,0 +1,32 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "test" { + source = "../../../../../blueprints/data-solutions/shielded-folder/" + data_dir = null + folder_create = { + display_name = "ShieldedMVP" + parent = "organizations/1054601055974" + } + organization = { + domain = "example.com" + id = "1122334455" + } + prefix = "prefix" + projects_create = { + billing_account_id = "123456-123456-123456" + } +} diff --git a/tests/blueprints/data_solutions/shielded-folder/test_plan.py b/tests/blueprints/data_solutions/shielded-folder/test_plan.py new file mode 100644 index 00000000..1519e710 --- /dev/null +++ b/tests/blueprints/data_solutions/shielded-folder/test_plan.py @@ -0,0 +1,19 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +def test_resources(e2e_plan_runner): + "Test that plan works and the numbers of resources is as expected." + modules, resources = e2e_plan_runner() + assert len(modules) == 5 + assert len(resources) == 18 From 6a39d80487e2d8f10d802187c3e3d5cd1ba6ac6d Mon Sep 17 00:00:00 2001 From: lcaggio Date: Mon, 30 Jan 2023 23:49:47 +0100 Subject: [PATCH 10/58] Fix README --- blueprints/data-solutions/shielded-folder/README.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 9eeec907..b4a48d92 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -104,14 +104,3 @@ terraform apply | [vpc_sc_perimeters](variables.tf#L233) | VPC SC regular perimeter definitions for shielded folder. All projects in the perimeter will be added. | object({…}) | | {} | -#TODO Proper README (after deciding if this is a blueprint or a FAST stage) - -# Implemented -- Use of Scoped Policies (create or inherit) -- VPC SC adding all Folder's project into the perimeter -- Org policies -- Hierarchical firewall rules - -# TODO -- Log sync -- KMS \ No newline at end of file From 0e5f2f71a23e9ef1dc6fbff89c488c42b758792e Mon Sep 17 00:00:00 2001 From: lcaggio Date: Mon, 30 Jan 2023 23:57:20 +0100 Subject: [PATCH 11/58] Fix Linting --- .../shielded-folder/data/vpc-sc/accessible-services.yaml | 2 ++ .../shielded-folder/data/vpc-sc/restricted-services.yaml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml b/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml index 85e8835a..2107d2ff 100644 --- a/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml +++ b/blueprints/data-solutions/shielded-folder/data/vpc-sc/accessible-services.yaml @@ -1,3 +1,5 @@ +# skip boilerplate check + - accessapproval.googleapis.com - adsdatahub.googleapis.com - aiplatform.googleapis.com diff --git a/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml b/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml index 85e8835a..2107d2ff 100644 --- a/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml +++ b/blueprints/data-solutions/shielded-folder/data/vpc-sc/restricted-services.yaml @@ -1,3 +1,5 @@ +# skip boilerplate check + - accessapproval.googleapis.com - adsdatahub.googleapis.com - aiplatform.googleapis.com From 2584eb149c3e4a84c71c442130692cc1201cc874 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Tue, 31 Jan 2023 00:02:30 +0100 Subject: [PATCH 12/58] Fix test --- .../data_solutions/shielded-folder/test_plan.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/blueprints/data_solutions/shielded-folder/test_plan.py b/tests/blueprints/data_solutions/shielded-folder/test_plan.py index 1519e710..02921184 100644 --- a/tests/blueprints/data_solutions/shielded-folder/test_plan.py +++ b/tests/blueprints/data_solutions/shielded-folder/test_plan.py @@ -12,8 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os +import pytest + +FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') + + def test_resources(e2e_plan_runner): "Test that plan works and the numbers of resources is as expected." - modules, resources = e2e_plan_runner() + modules, resources = e2e_plan_runner(FIXTURES_DIR) assert len(modules) == 5 assert len(resources) == 18 From fb04e7882955971e3140a2c770fbbf7d096b74a8 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Tue, 31 Jan 2023 22:35:48 +0100 Subject: [PATCH 13/58] Fix variables --- .../data-solutions/shielded-folder/README.md | 16 ++++++++-------- .../data-solutions/shielded-folder/main.tf | 1 - .../data_solutions/shielded-folder/test_plan.py | 1 - 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index b4a48d92..527fb317 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -17,7 +17,7 @@ The following diagram is a high-level reference of the resources created and man ![Shielded architecture overview](./images/overview_diagram.png "Shielded architecture overview") -# Design overview and choices +## Design overview and choices Despite its simplicity, this blueprint implements the basics of a design that we've seen working well for various customers. @@ -28,26 +28,26 @@ The approach adapts to different high-level requirements: - VPC Service Control - Cloud KMS -# Project structure +## Project structure The Shielded Folder blueprint is designed to rely on several projects: - `audit-log`: to host Audit logging buckets and Audit log sync to GCS, BigQuery or PubSub - `sec-core`: to host security related resources such as Cloud KMS and Cloud Secrets Manager This separation into projects allows adhering to the least-privilege principle by using project-level roles. -# User groups +## User groups User groups provide a stable frame of reference that allows decoupling the final set of permissions from the stage where entities and resources are created, and their IAM bindings defined. We use three groups to control access to resources: - `data-engineers`: They handle and run workloads on the `wokload` subfolder. They have owner access to all resources in the `workload` folder in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. - `data-security`: They handle security configurations for the shielded folder. They have owner access to the `audit-log` and `sec-core` projects. -# Encryption +## Encryption The blueprint support the configuration of an instance of Cloud KMS to handle encryption on the resources. The encryption is disabled by default, but you can enble it configuring the `enable_features.kms` variable. The script will create keys to encrypt log sink bucket/dataset/topic in the specified regions. Configuring the `kms_keys` variable, you can create additional KMS keys needed by your workload. -# How to run this script +## How to run this script To deploy this blueprint on your GCP organization, you will need - a folder or organization where resources will be created - a billing account that will be associated with the new projects @@ -61,7 +61,7 @@ The Shielded Folder blueprint is meant to be executed by a Service Account (or a The shielded Folfer blueprint assumes [groups described](#groups) are created in your GCP organization. -## Variable configuration +### Variable configuration There are three sets of variables you will need to fill in: ``` organization = { @@ -71,7 +71,7 @@ organization = { prefix = "prefix" ``` -## Deploying the blueprint +### Deploying the blueprint Once the configuration is complete, run the project factory by running ```bash @@ -89,7 +89,7 @@ terraform apply | [access_policy](variables.tf#L17) | Access Policy name, set to null if creating one. | string | | null | | [access_policy_create](variables.tf#L23) | Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format. | object({…}) | | null | | [data_dir](variables.tf#L33) | Relative path for the folder storing configuration data. | string | | "data" | -| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | +| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | | [folder_create](variables.tf#L50) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | | [folder_id](variables.tf#L59) | Folder ID in case you use folder_create=null. | string | | null | | [groups](variables.tf#L65) | User groups. | map(string) | | {…} | diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index fd4e5284..ca93cbf4 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -116,7 +116,6 @@ module "vpc-sc" { } } use_explicit_dry_run_spec = true - } } } diff --git a/tests/blueprints/data_solutions/shielded-folder/test_plan.py b/tests/blueprints/data_solutions/shielded-folder/test_plan.py index 02921184..30dcedf5 100644 --- a/tests/blueprints/data_solutions/shielded-folder/test_plan.py +++ b/tests/blueprints/data_solutions/shielded-folder/test_plan.py @@ -17,7 +17,6 @@ import pytest FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') - def test_resources(e2e_plan_runner): "Test that plan works and the numbers of resources is as expected." modules, resources = e2e_plan_runner(FIXTURES_DIR) From f36b00466473c69c3b418fa4ac3d24a2e2af4760 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 00:26:57 +0100 Subject: [PATCH 14/58] Make VPCSC optional; ingress policy --- .../data-solutions/shielded-folder/README.md | 62 ++++++++++++++----- .../data-solutions/shielded-folder/main.tf | 18 +++++- .../data-solutions/shielded-folder/output.tf | 8 +++ .../shielded-folder/variables.tf | 13 +--- .../shielded-folder/test_plan.py | 9 +-- 5 files changed, 78 insertions(+), 32 deletions(-) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 527fb317..f809a4cf 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -47,6 +47,39 @@ The blueprint support the configuration of an instance of Cloud KMS to handle en The script will create keys to encrypt log sink bucket/dataset/topic in the specified regions. Configuring the `kms_keys` variable, you can create additional KMS keys needed by your workload. +## Customizations + +### VPC Service Control +VPC Service Control is configured to have a Perimeter containing all projects within the folder. Additional projects you may add to the folder won't be automatically added to perimeter, a new Terraform apply is needed to add the project to the perimeter. + +The VPC SC configuration is set to dry-run mode, but switching to enforced mode is a simple operation involving modifying a few lines of code highlighted by ad-hoc comments. + +Access level rules are not defined, before moving the configuration to enforced mode, be sure to configure an access policy to be able to continue to access resources from outside of the perimeter. + +An access level based on the network range you are using to reach the console (eg. Proxy IP, Internet connection, ...) is suggested. Example: + +``` +vpc_sc_access_levels = { + users = { + conditions = [ + { members = ["user:user1@example.com"] } + ] + } +} +``` + +Alternatevelly you can configure an access level based on the identity that need to reach resources from outside the perimeter. + +``` +vpc_sc_access_levels = { + users = { + conditions = [ + { ip_subnetworks = ["101.101.101.0/24"] } + ] + } +} +``` + ## How to run this script To deploy this blueprint on your GCP organization, you will need - a folder or organization where resources will be created @@ -84,23 +117,22 @@ terraform apply | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [organization](variables.tf#L128) | Organization details. | object({…}) | ✓ | | -| [prefix](variables.tf#L136) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | +| [organization](variables.tf#L130) | Organization details. | object({…}) | ✓ | | +| [prefix](variables.tf#L138) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | | [access_policy](variables.tf#L17) | Access Policy name, set to null if creating one. | string | | null | | [access_policy_create](variables.tf#L23) | Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format. | object({…}) | | null | | [data_dir](variables.tf#L33) | Relative path for the folder storing configuration data. | string | | "data" | -| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | -| [folder_create](variables.tf#L50) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | -| [folder_id](variables.tf#L59) | Folder ID in case you use folder_create=null. | string | | null | -| [groups](variables.tf#L65) | User groups. | map(string) | | {…} | -| [kms_keys](variables.tf#L75) | KMS keys to create, keyed by name. | map(object({…})) | | {} | -| [log_locations](variables.tf#L86) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | -| [log_sinks](variables.tf#L103) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | -| [projects_create](variables.tf#L146) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | -| [projects_id](variables.tf#L154) | Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | -| [vpc_sc_access_levels](variables.tf#L163) | VPC SC access level definitions. | map(object({…})) | | {} | -| [vpc_sc_egress_policies](variables.tf#L192) | VPC SC egress policy defnitions. | map(object({…})) | | {} | -| [vpc_sc_ingress_policies](variables.tf#L212) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | -| [vpc_sc_perimeters](variables.tf#L233) | VPC SC regular perimeter definitions for shielded folder. All projects in the perimeter will be added. | object({…}) | | {} | +| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | +| [folder_create](variables.tf#L52) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | +| [folder_id](variables.tf#L61) | Folder ID in case you use folder_create=null. | string | | null | +| [groups](variables.tf#L67) | User groups. | map(string) | | {…} | +| [kms_keys](variables.tf#L77) | KMS keys to create, keyed by name. | map(object({…})) | | {} | +| [log_locations](variables.tf#L88) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | +| [log_sinks](variables.tf#L105) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | +| [projects_create](variables.tf#L148) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | +| [projects_id](variables.tf#L156) | Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | +| [vpc_sc_access_levels](variables.tf#L165) | VPC SC access level definitions. | map(object({…})) | | {} | +| [vpc_sc_egress_policies](variables.tf#L194) | VPC SC egress policy defnitions. | map(object({…})) | | {} | +| [vpc_sc_ingress_policies](variables.tf#L214) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index ca93cbf4..4105e7bc 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -15,6 +15,19 @@ # tfdoc:file:description Folder resources. locals { + # Create Log sink ingress policies + _sink_ingress_policies = var.enable_features.log_sink ? { + log_sink = { + from = { + access_levels = ["*"] + identities = values(module.folder.sink_writer_identities) + } + to = { + resources = ["projects/${module.log-export-project.0.number}"] + operations = [{ service_name = "*" }] + } } + } : null + _vpc_sc_vpc_accessible_services = var.data_dir != null ? yamldecode( file("${var.data_dir}/vpc-sc/restricted-services.yaml") ) : null @@ -92,12 +105,13 @@ data "google_projects" "folder-projects" { } module "vpc-sc" { + count = var.enable_features.vpc_sc ? 1 : 0 source = "../../../modules/vpc-sc" access_policy = var.access_policy access_policy_create = local.access_policy_create access_levels = var.vpc_sc_access_levels egress_policies = var.vpc_sc_egress_policies - ingress_policies = var.vpc_sc_ingress_policies + ingress_policies = merge(var.vpc_sc_ingress_policies, local._sink_ingress_policies) service_perimeters_regular = { shielded = { # Move `spec` definition to `status` and comment `use_explicit_dry_run_spec` variable to enforce VPC-SC configuration @@ -109,7 +123,7 @@ module "vpc-sc" { resources = local.vpc_sc_resources restricted_services = local._vpc_sc_restricted_services egress_policies = keys(var.vpc_sc_egress_policies) - ingress_policies = keys(var.vpc_sc_ingress_policies) + ingress_policies = keys(merge(var.vpc_sc_ingress_policies, local._sink_ingress_policies)) vpc_accessible_services = { allowed_services = local._vpc_sc_vpc_accessible_services enable_restriction = true diff --git a/blueprints/data-solutions/shielded-folder/output.tf b/blueprints/data-solutions/shielded-folder/output.tf index 0110b627..67f4213c 100644 --- a/blueprints/data-solutions/shielded-folder/output.tf +++ b/blueprints/data-solutions/shielded-folder/output.tf @@ -20,3 +20,11 @@ output "folders" { } } +output "folders_sink_writer_identities" { + description = "Folders id." + value = { + shielded-folder = module.folder.sink_writer_identities + workload-folder = module.folder-workload.sink_writer_identities + } +} + diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index a48a8849..711e9387 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -41,10 +41,12 @@ variable "enable_features" { type = object({ kms = bool log_sink = bool + vpc_sc = bool }) default = { kms = false log_sink = true + vpc_sc = true } } variable "folder_create" { @@ -229,14 +231,3 @@ variable "vpc_sc_ingress_policies" { default = {} nullable = false } - -variable "vpc_sc_perimeters" { - description = "VPC SC regular perimeter definitions for shielded folder. All projects in the perimeter will be added." - type = object({ - access_levels = optional(list(string), []) - egress_policies = optional(list(string), []) - ingress_policies = optional(list(string), []) - }) - default = {} - nullable = false -} diff --git a/tests/blueprints/data_solutions/shielded-folder/test_plan.py b/tests/blueprints/data_solutions/shielded-folder/test_plan.py index 30dcedf5..66b3d79b 100644 --- a/tests/blueprints/data_solutions/shielded-folder/test_plan.py +++ b/tests/blueprints/data_solutions/shielded-folder/test_plan.py @@ -17,8 +17,9 @@ import pytest FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') + def test_resources(e2e_plan_runner): - "Test that plan works and the numbers of resources is as expected." - modules, resources = e2e_plan_runner(FIXTURES_DIR) - assert len(modules) == 5 - assert len(resources) == 18 + "Test that plan works and the numbers of resources is as expected." + modules, resources = e2e_plan_runner(FIXTURES_DIR) + assert len(modules) == 5 + assert len(resources) == 18 From 053d4151dec60831d869a26c2058c50ae2f7118a Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 00:50:22 +0100 Subject: [PATCH 15/58] Chane feature name, improve README --- .../data-solutions/shielded-folder/README.md | 35 +++++++++++------- .../images/overview_diagram.png | Bin 83444 -> 78451 bytes .../data-solutions/shielded-folder/kms.tf | 8 ++-- .../shielded-folder/log-export.tf | 10 ++--- .../shielded-folder/{output.tf => outputs.tf} | 0 .../shielded-folder/variables.tf | 14 +++---- 6 files changed, 37 insertions(+), 30 deletions(-) rename blueprints/data-solutions/shielded-folder/{output.tf => outputs.tf} (100%) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index f809a4cf..ea53b996 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -1,6 +1,6 @@ # Shielded folder -This blueprint implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads hineriting contrains from the folder they belong to. +This blueprint implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads inheriting constraints from the folder they belong to. In this blueprint, a folder will be created implementing the following features: - Organizational policies @@ -8,7 +8,7 @@ In this blueprint, a folder will be created implementing the following features: - Cloud KMS - VPC-SC -Within the folder the following projects will be created: +Within the folder, the following projects will be created: - 'audit-logs' where Audit Logs sink will be created - 'sec-core' where Cloud KMS and Cloud Secret manager will be configured @@ -31,32 +31,32 @@ The approach adapts to different high-level requirements: ## Project structure The Shielded Folder blueprint is designed to rely on several projects: - `audit-log`: to host Audit logging buckets and Audit log sync to GCS, BigQuery or PubSub -- `sec-core`: to host security related resources such as Cloud KMS and Cloud Secrets Manager +- `sec-core`: to host security-related resources such as Cloud KMS and Cloud Secrets Manager This separation into projects allows adhering to the least-privilege principle by using project-level roles. ## User groups -User groups provide a stable frame of reference that allows decoupling the final set of permissions from the stage where entities and resources are created, and their IAM bindings defined. +User groups provide a stable frame of reference that allows decoupling the final set of permissions from the stage where entities and resources are created, and their IAM bindings are defined. We use three groups to control access to resources: -- `data-engineers`: They handle and run workloads on the `wokload` subfolder. They have owner access to all resources in the `workload` folder in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. +- `data-engineers`: They handle and run workloads on the `workload` subfolder. They have owner access to all resources in the `workload` folder in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. - `data-security`: They handle security configurations for the shielded folder. They have owner access to the `audit-log` and `sec-core` projects. ## Encryption -The blueprint support the configuration of an instance of Cloud KMS to handle encryption on the resources. The encryption is disabled by default, but you can enble it configuring the `enable_features.kms` variable. +The blueprint supports the configuration of an instance of Cloud KMS to handle encryption on the resources. The encryption is disabled by default, but you can enable it by configuring the `enable_features.encryption` variable. -The script will create keys to encrypt log sink bucket/dataset/topic in the specified regions. Configuring the `kms_keys` variable, you can create additional KMS keys needed by your workload. +The script will create keys to encrypt log sink buckets/datasets/topics in the specified regions. Configuring the `kms_keys` variable, you can create additional KMS keys needed by your workload. ## Customizations ### VPC Service Control -VPC Service Control is configured to have a Perimeter containing all projects within the folder. Additional projects you may add to the folder won't be automatically added to perimeter, a new Terraform apply is needed to add the project to the perimeter. +VPC Service Control is configured to have a Perimeter containing all projects within the folder. Additional projects you may add to the folder won't be automatically added to the perimeter, and a new `terraform apply` is needed to add the project to the perimeter. The VPC SC configuration is set to dry-run mode, but switching to enforced mode is a simple operation involving modifying a few lines of code highlighted by ad-hoc comments. -Access level rules are not defined, before moving the configuration to enforced mode, be sure to configure an access policy to be able to continue to access resources from outside of the perimeter. +Access level rules are not defined. Before moving the configuration to enforced mode, configure access policies to continue accessing resources from outside of the perimeter. -An access level based on the network range you are using to reach the console (eg. Proxy IP, Internet connection, ...) is suggested. Example: +An access level based on the network range you are using to reach the console (e.g. Proxy IP, Internet connection, ...) is suggested. Example: ``` vpc_sc_access_levels = { @@ -68,7 +68,7 @@ vpc_sc_access_levels = { } ``` -Alternatevelly you can configure an access level based on the identity that need to reach resources from outside the perimeter. +Alternatively, you can configure an access level based on the identity that needs to reach resources from outside the perimeter. ``` vpc_sc_access_levels = { @@ -81,7 +81,7 @@ vpc_sc_access_levels = { ``` ## How to run this script -To deploy this blueprint on your GCP organization, you will need +To deploy this blueprint in your GCP organization, you will need - a folder or organization where resources will be created - a billing account that will be associated with the new projects @@ -122,7 +122,7 @@ terraform apply | [access_policy](variables.tf#L17) | Access Policy name, set to null if creating one. | string | | null | | [access_policy_create](variables.tf#L23) | Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format. | object({…}) | | null | | [data_dir](variables.tf#L33) | Relative path for the folder storing configuration data. | string | | "data" | -| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | +| [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | | [folder_create](variables.tf#L52) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | | [folder_id](variables.tf#L61) | Folder ID in case you use folder_create=null. | string | | null | | [groups](variables.tf#L67) | User groups. | map(string) | | {…} | @@ -130,9 +130,16 @@ terraform apply | [log_locations](variables.tf#L88) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | | [log_sinks](variables.tf#L105) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | | [projects_create](variables.tf#L148) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | -| [projects_id](variables.tf#L156) | Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | +| [projects_id](variables.tf#L156) | Project id, references existing projects if `projects_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | | [vpc_sc_access_levels](variables.tf#L165) | VPC SC access level definitions. | map(object({…})) | | {} | | [vpc_sc_egress_policies](variables.tf#L194) | VPC SC egress policy defnitions. | map(object({…})) | | {} | | [vpc_sc_ingress_policies](variables.tf#L214) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| [folders](outputs.tf#L15) | Folders id. | | +| [folders_sink_writer_identities](outputs.tf#L23) | Folders id. | | + diff --git a/blueprints/data-solutions/shielded-folder/images/overview_diagram.png b/blueprints/data-solutions/shielded-folder/images/overview_diagram.png index dcc3bccd8c1027906475a54339b68721529efec2..034ff3da0f9479c4343105ef92283ef1f97a39eb 100644 GIT binary patch literal 78451 zcmd?RWmr{T_clr?B}zz1x3qM(f`D{ONq2Xr(p}O>Zb=F0l#oWcLpr6q&fNa;|Gv-j zvC@?TEXp*mAD#F0P(}B+$q=%rS(on+} z2Ii4~nV6Woq?j0~yuFRFnWYg7%A<;P-Dztsg(uXCer^|l#pd)fhl8HQ1X2m zkBc=v%vh8|=dzYEyf43kA0-o|FAFtQf`~f`dKQ}LI|Nb(w@ZE1H*XMpIbH7>ni?KA zebTmzHoL97Z%LunjUIxB3Gw4j&m8Ita20}a<&a~bh4Fp9GEnd|*a(j^i_s5Rv{Cp2 z8+Ps652M(wHFGp%k!W@VFor5jYO%<^GgRGdC~nE}VkJ-XX)tu3!wILumfPqoPzrXK zq0b7Fuyn9`8DBl&P4*dmLo%{z&ldDWpUIvA5#_kEZqDr9gy*hiZA}W%K)o$Lg$g+$ zZUBE`&v-D`7GL#!ty(-WHd;AO2T7o3olwVf4(VqpkOK)cw@XWPwk*_gtV{yD$K_-l zZP{}WB&y5|vPbK}kJONORn%K0ebt{VKk&cFa?KkO@5$vhVyI#f`({jgS*aDmU&=7y zWhP55{rR3(x>aG@!2Fd4au2!^S@rX$)UQN}AC?<<%X-$1m^don@R|RRAdiS!vw^is z6Ml-B_2WAV8)ciF)O|(cP1~hDL1kdtbE*Z+=mhja$die#mEPkZhc+hUm&F|-L?U+| zgWKv39{7ob))@>TWOumc4Iml3 z$|M+7AM>f(@~i2&FLm#0|0Xat=CQaT|xgkfwBg7c8 zLujAwnSKB>eg5k3${maT-kP+2Z?VqJ2WH8^^4+_oA1+M0crYIPODjGHd?xLInUAqy z28mZCsotYJP9j1&VEptrlilmxqkccMv?w-P#D!K81iu&PXqdt%A7Lto{CBkA@_q5& zF+G2<_KsE^dBPv<9oy7nXTPQ_WWt9ut!B2cT5yxCM78eqZKyvG7yO2h{G-vIiAtPc zV0B=YOQc~?FNYzJVZ0`c_0J_s4n~S0XNz`w&7C$Gxlk!di@3)V5uYUs zImUxhga`5m^Gfq4l;jll6&E28$j8sFg&l=RD(jG9)#(y@)iu9f2^B^aK9%ZiZk5m5 z`r}rG-&JfrH-8#7Rb}^iOIPAs{ZUn#PqIPoI!j#5L3ssoIBr~|@|mMhTh-&UtU`^l z$!9rvX2mk)#R6}ICbfWUy}Y)GCG-9f$Ot#YPAo?^u9QcL?Jb*}L(KZ)0f&^Ks@HE- z--^8TEWs=pcuVt@c$lT0CtYS^cw@Nchum<(*N~Zs8NxlwJ^MZF8KN04-nYD^ypp_1 zPKAz%z$nG85`B8E-O zO`n<5am*Xe=v__s&oB%ZPZhWAX7G%snPuoTe`_3X9QxKlKBE8OReGnDbSTv*YoC3> z8h+oo>V#^K>TyX*afZf@hC^{!@lNsn%n!>OOX}INDXp(mGptq)mXp&u6=HjHyA`{I zyG%1VXTQ!wubs})DUc}mC4$Ar!fStKZMWJ#cZ4{&EyP&`z3#jixKS&G{yd9c7MxIx{_(yrH$`IsSefbC-2CZ+b1EsHv#cscA=st6npA z*0V;nrtBB-FU)iIbK)ncQS4FXQ3P+Sj2}5*92e8Hv9&r>Z|Dt0>HN}ppySbWcjSC9 zc)0NM*0So5=cp&wmGfotmEEoR4e?d#_3>@Zm5|YNMTG{R z1~Ysb93?Cw+(Kp36x;N7`1021){53h(vqx>tgj;H0R#SQ0XzQJqI078L4;4J0zU*X zp*FR#EFW-xO>2G;^(9%)>Sy84!=D!IB;r%AUX#BiAMXCry%yt=!;te*L1vgV1*?hw zN+;Z@fAynSdB@bpslq85yPRd?j`Wa%?{eXb823zMq&G}E_;bswqCoyk4# z@$13v(KZl|Oy*e^4HXG}k;jt|pAuis@zuxj$5etr!}q!fdLkFE#?y<>D?>6bK1TEX z?0$I~G8b|^f@IcX#y8Szn^VUzcjqYU?&MAqHK5t)(RRL3wsel!TjX%Wd z#hPStW_W3&Vtk4+{q5^FwdqgO1Qm-LFE=dv@VjLOt-2{T^45r+nuXZEw2BL-kx3t; zt;S6XZJ_p$(c!6+!(^IHiCT>svSIr1LFi~tkzk8?1o3_IdzJSj`IIu#Tq+KQrsmh| z4Q8kX0*ok3S5~}&>0C`tAGX5l*ogZL2jD= zmP40oj$=2z#^WXQ)4H8VcQZTXndilh5F9sc*r@w5qcd%)Z&uh2e6umSsW@JfT}xQg z#W}=DzjqodEAk;yPb;rA2)T|ul@5`9C0)jRtXbV8TA2-59zN<`i=fA&?^SKo=CNC= zlbY;BD}of|7S*dt6kF>UlpAlQFk4hk=oFzq%psh`I_kIHL_YItr*}I$TzFQ`7Z1#G zY*z+k$WotK6r0m=VR7MFdsk4I^(8NUY#F!an0niMy2CkKUAkvCJ8LdrZsCIWOI(_?I$eGq6L3520iG%K~ci-(e;wED6vzRWk z2rn588SMeufpo<7$JN!YHH6%&uBNkkqwOjZj*$#JQUY)79hcOH%kNf}SDI*8<@n9h zr`$JIKgOxe>d*4ZzR%?K;JrBMVJl|)K6sTT;5oQ6*LK{0EQ348%wFB_mE>Z6?;M`! z7f}SR028O~QRCPMPyO+xQA;09DS{4V@rKadi1tz7S?uYx{H}~fI1f!F;Qb*=Xr`cRrHq}i| zUb8bKqdxcA3k^g2eS(`lQ+F|!hy4Ysa&kg)m!ek{S4Df1i8enMe?4ABdlX!US$d-e z6M#0*4YPF031dnN^W*1TIIn8?eH=mdRAn#5g`9f1M0_eA%;~|sKsD~&{2a`?bDY{+ z|Euj4nBY&a(M!nkxJjQlYt`cR>5aq#uYDs}bVrXz+FDpTGme8AeFWi?3+XQ|ZQiSAr6ChBGgD-(pW|Y21FPzNH7Sn&tM*aJ6P}$geCa&SvD^d}m8pl$xR!pDAqK?J{Hf{$w!++Vff>9XMezJCLr!H6h{NlJpNl7YREk+p-V zjpM1lfFPL7C3!;#c zlJeUd8uKc?6#uh1_)UP^)X~wFmzmkc#f8a*jmgH|gqekhhllwED>ExABdEdX;AZWp z=gMg9K=DT>fA#ay$icwg%+}G&#+nq`ub#e*lcNARIdq`EfBu-Kk*nE1BUwBAxh$|i zX6O@U7N!@>fAi zJ73!en7;y7g<9IsrgyDl=lgfHGWWua+4z8&Y0L~+?PD8aqgCmWb|v$LfkPtw>x&8V zH5sH9!UaM3S0U0zI0S4a1O#+p7}!6*Y|~*xI-Rsd-~X#j*f;AN$6p=&?y?k%6jEC% z4MG2RXXwhc5C7e&)d}=I>4c0e`giYO9DkI_f6oi4R@OIbxt{5h=s$BsA{CbZ`Rt!L zfxAg$bY-ncDrKa<<_Ud@M5hJ+?^a8^u>PSt^?@k=W9cIAE&e?|f)r+&iV4sLjW9TOIz7>5+1&M4((jSdj?2^RwY|MR9&wv!bj zR*F^j5hvR&w*FLOKI*UB-ZNafC!cJpkjkWRe!hpv+!v8QbVD5FN8qOxmOoSvQqV>~ zw+#Y{d*}V}^r+#e^S(Kr-lksJezwZ|1o?cIHfg_EgBHlHSS z)oRr055FMxD?%M+poOQzxpznx(%`P_E|&v|G@26V)9sJ-;NHToBRkQ=iD{O{U6_|c zx+F<`rA@*!E|w;VpDF01BQO#I@Dx}CkmwS%%%A$hz~KOGW$@3%LqJDL^tJJqO6a~? zj)+Z6q_&z_`{1;^(BzR2xyb{CYqJO{Y&@$qA0>-V$vW}UmcPE#pI@mS1endm}ouU z(ECwZBILt|vUP7po92_qo13$p{vqOvJ)vypt@mn?2{(goiWf(GM{66plJyvgy%907 zgcRIqZi8kcd73nC*I&<#2ERMBN46|~2&0-u(t9F!5Uj<2r?q7o|EcUly(617+4V^P zk1^zPabf%lA_>L!3{S%;p2jmYkxmN%aW9O68i2*cTj?Ei;Z|zcGQ@n z^~NsS2hejU@YpiFRirqrV%pke*#mmN?|W0b7bQF-A+pk_Hmz%9Upd_#5);WYvPQ-C zYC|$J2(M+h+a_SE(mIG^S?`t^$jY9FYxV+AL>2LxryX|y!wzX zFovXWmOrkh>&ZB|$hvSNs4Q3JMFnv!`3_-*y91W(qQS?E2o7nAa_Kbds9PvsvaJoV zTe5(dg!<&D(k6I8(CL>^&VX*SkoUQd{T_2^^t#YobzaMq+*P~Js()shL12jN_;+jd z8U^CZ4R*GVo550>c@DzPzouxXyG$cK;G^N0=yHpSiWrT#wHHa)p5Ud6Dcag{vHci( zO!tZPbjQQSoANkfI4-PAQ10zob@62kzM$jN0!NEve)F*{MFZK;g$x|4$leLYJUtOA z;-noK9ivF5t)3cu`goc8doqJS)4-EWZFE%vmhG_vw!n$XriU z41c7^`LqMGl2~!&9|{uP?{M3<3Ny8hGx$z??rYC=yGnE=dVWffJeygqD?`8@a>By+0&oY8Q7>MUZ@xKFs*AaCmK^?Eq0H+VZgHjFIPIu%z{z0qN_9xr@B z{dMvY-Q@kY6h$jLDmKOGgM@4qi`6ZOJ9@Dp{#REd!!=j654x<>%9`Y#w+{)9Yqd#B zC?_&%=tVBGvqLrm?_X+Hks~B*|5`!=9PC{PP&iC+6cHG|EM!+6h^ejs@0O$kyXZ#r zn5UWiRHa1}zP@9m)LvFLz1QvS0^)$=fq=V9nV{oZ==f1M25D8}FM%iVKDU<&mErJD zc(dF|wC$wT9!P_stlrAu8J!3e*QD8BA&;+Zr>cc(PBgoR(yeMEaIRtu;M-ST(*ok~0$2fTFX!&Cp+@63fyl*nUYLcrcL(}8k8 zD1Y5yphbp7fP*S{~3Y~kFZ0r3&iQEA4d6Krvr^DSu zYCVxx=aOUZv$EYAp|l&ySSK_TG2xI9Ubj9Gp&HZHl$II@IpiSe#=ByeP$NozEhCvg z#OM6c;f-jG{8szZBAQx)V^v4VpW*rVBNZxP>aR5FwQXcZ>#NKrc`YBy48(1Erf4@f zOR82Dr=(IW&@5vr1b^pzk-T6)B<_T9PzOM_LG79jxMEXSz#1#q9xPp=teKqT7V6v;7 zAk#}bg=;8LR-3QarOQg^%JCY*;C$Xc0fr{1_9bW<8=3VC;2i}78|Yxweh3Kugv#;K znUY5X+1Op9o6`NW#UPiy$6F;M94j_Q3AnzJjXW*_pqGCzd}Jg90SKjV7a1`qa?Of^ zki)@Zl0pz5m1cBsNa`RsC?AZCoudE^<#gq-5YW-dAhy`h*Z>)@R!rd)^hs0@i!8oU zM)wm2JO^%ko*f5Z9rU42CCOtAuC<@JAgFMl_V0KIOc99=Im<41=K%;Q_Q~mjg|k43 z-?sI$Fc>&h&_!`|(-Ej&Hqg*hsUy{m$5@9E<2%ua= zpbJ$=#mH1}wcbYC2CVDP=!6s&kaRdx!ew`8G}I7`LXQ3%lw{SXb^+S10;&~J(tei# zSFY2CP9lFtWYNAbB2=*KkL{Ykww`Lge1L%z4@%_cWehNcTj~5r5fef~o9y@Z;)=6@ zF_`^zXV!H6C4d8TWI;#^=KVj^-5*7yGb)K6d^Jg>q92rkJ{!Cw20%|DAOsZYZ0j4U zR>D%Y%*lI)fc_dpn6WU=f}m0cxzbP)9~2}y?_HIdKwlRiw1quBa}ZNJ2AhsV_gKff zIz1&zpMdcJh3{W7LI7bIDdgqDgvzc*3HdUqf!c(roblbWHlBplGA);f585d?I5;e? z>p2Kk18Rg&XY&_dBn$d?RHGqa&zjQW!6IOS_LRO|WYBn0go+h1=Q*1YJI=tiyL{n2 z&gK-H#NW#iq5hu-W-Dk?Jx6)i2T-t45OE`v?W zq1_bc?Rqx7xP)b;e*0KZM%42UJtrl(+Opn(s02_uM*|Qq3vrM|KtE{wA6r#y)1v!T zmN=c2!ZOv{VMlvX(%js9>TFF~tyd|k84m!VZtqv7IJ95wnmd7PJb**08CbZ-N69V4>#A!LP;zQ{~{5eFY@ zwcw7%e&mYThQy{{0Xg$ci~h8EGRtYgmzC4hkd`K1ea%po7AgS&MtzUVjH6(y&t{)v z6LIR89hAu-fmxVl-*5mfpc#}j0TXc;*e76b$pfTV8!F}QiS5ta3MA54-(KLofRsHV z5vUcpW=+oMIl;h10fKC00p`KrBn@D{kwI9V4B~ou6`|rHuB_klg$NcQ4d?^+r$HXD zsN>&@+F)LOjs|p0L=Wq~$xBu~gsR;cOh^<=D3EvKB@FD)Z?I*w1n02(W??>fF9SsQ z5kQf}T{avBP6tqAptND7c#I%04RqSMa!Osz+c17_HEP4u;#{1Y8(4OgCs*#Xl6Ovi z*0fyjKv8XEWF%EI!AM?R#`u<`yhOt}vC1+5t6X5F!-IO1Em?3`RPTS^P$2d7+0yu8 z<7B=0!k;U{v~1t1x43E+oYKqr?fx@H;6uA zHG;}*goKamp1@>12Jj#h-iQZl^ZE^sYc)GVRIu07mcYDj0K5)PI~W7Jet{8rpSAq6 zkIQ%*nU2Nm0&pZksGNNVX@Q)tfpzcBV!i7^rD6l{*eKPk)X8wWS%VrLG%TjL__q$q zs@~U4jR*ay7}pCIMSVaThPe`H(k^uL^Tc&FSO$yz2ku+4{R$yjnEq0^$eLiAdB8S1 zoTcHzBJhK44tYe^vpXnw>(M>Ekxp#aYx>imHLID`^JMAaUSFYZ@fEh+r!TPo4bvts zsS+Q}f~g{dPO-Mrut29E7y#J0Baa+`@t1n~l#|TY*8oWC`z8+yke0@8X&s#s6#YU- zP-nH2_+RxG$m24MTM8bDPC|+CIEFz%%hvQV2-ZxlT`L8d={KCIu6r z3zLQbbW-X&&;b}n{f2R7k(-Y+65TbUYtVmf?Jw2zau@U{33{Z&NL2#h@B!+8fPJqu zaIGmSKW)>-2keCouos>r^6;SVEaB*YP-it2l>|hO5;7IpnE3b)yBkAZNOX6*YH#2B zssVZE?D1?z0H~kk?D$N3;UmlU@k0JaQWda-Xo3-758voJ#E|UrtRLl7ONA_WhcA)^)@m(iR z2FX`gqyFd=^ZtdRXxVl#>g~OTt8mL0vA$+53`!8vl`!5q4~h zRRcKxCn{G8D+EZ}%~VkpGVDIMYn*i%BLvn3Yzuer(C7a*Y}{160~?Yg`qUTi9831Q z6Tw_H%)u^NsxQI($zM-_0e{cn_m?bG*MGqdM*X`G11LBWCMR@if7SFI1q&(g@I9vZSD|nq zn4y0l+V4u%7$AxEYX7ja9*Z-0l@}3QYe_l za{(DXsGyzzZ1GQ-DFZKu{^d2$PYlY=-wRO(?x}ns9ur!r3`nAJL}?6ot>0S)zWiX2 zr!bXKHu~c=GKa!@xxG6OXuJ2Z&!z*I7ij1wn2=|2uGX6mp9C$a`lMeht&Q(nw1k-4 z`$q~G-DqI7hpLwwm-AnYkbJ9t-;8hH@fx4k)^Jnv*rM@z*2*Bkh@HU7mf_kI`b&*b zadn|sbSWF3k8zGRmq^3l?oD#Uxyg%#+m&1Va2FpwtF*?!>|1U9nuzqoLmjTeUnFHR zpdT}Xb0^~(qef0pu(LmH>ccfQKH+*^vuyI?^Uj+xTCSVNtlJl1s~?*KzVcQ#TcXmv zchCubdsr0l4xJIgzy&8-HAzzHO{sqzNV`H_{hqU<(#M73#Vb@grSPSvdmN5S5Qqp> z#_j31>QV7~3cdGW)*K;5BvwARQK9La&YE53MZ5@Gyp_i$oHI^XRXhEInbWR54_D@e z7BbtwL`J)Mb{J+Bshnr0%<%V}u=ei`XF3{MKvP{4(AokNl;34UoVkc;TSd6|(0e~j zuOB=~vA=SOen7w8{a&mrChUVw(Rlf(k+gjI*RH3~V>K^~X?yh|%5Abhe~L zuw9sP(440P3=i$UDj}&eXHn=4i{}*!#RacX&?%wP^i+N8S-*9-ZFo|VGZ-HN?Ghaw zR`nL;wZ!Nfu>Yh`_@JPq{zk$al%q=s$)iF6_Yb#07tRs^O7W1T98g};C23$~nHv(s zp{I*?K#?zUNX#C92hqWxD-4cEsMA4z4eghsgk zs*$A8mVnt*bn=jZd-)pQf+QLyCJl^!Yf&chNs6DvA z3@xUyK~LxYDis!h%Xkd1W87OjWYT+qftB0(QGN*Zk9l+euOHSk?KGVUSqUIV_CC2wN zo$hxN0|co1nZ1w8(`^%`9z{Gu$@&S}{*@)6{>$GXeT44FV|CqOEnsCJU^}yj_K%IR zlsy;P*q^|n0^5W`s)ztq^sWFbLRP!iSqgajc>ax7t$bj)`zP2OuVDOqfk}d!ITW}1o(staQo2w3$Z4M-)29^0nNDt+qjzQ zAPzeA1EV9Rzs4d5U0_gJg1!8UNc_i9cdbH+=wxu?X}_cgylfK;m8A=NXDKAonRzQ!g#JYl2r-Y^2&#jez@A$Q=e_<8 zrWol0i!I#xccu)+FAFTy-}}KudjP^=A^6N4~;d8al&LzL_qoLV=}!0OSu4kEva~3!DLs(KIXlPgtX1ZT?Z}RhaV?&q91vp9hVTGR|F^gMBTZ)uO~}YJiD(0h!v;_@ zu@3a!rVJBpAolyEClelJ++jWvV5IC(NgXEy5@ zb<$H5y)Hwbq3&7mcy$3}37z>O#9P0DUM8KjMxx;r+HAa#Gy^pFpYzQB<=MpXkFC+UqH2iOn}4p+b~h7qU*UF#n4=;uBn z;%1%so@iak4|zJ6ObdKebkR`C^9Pqr3?&Tjq1$Nn_0f~Hmlv_ z5T6poq@<9Gd03J`c1>#5h(tPZR8d~FszG5gr6wR^0CnSd&`G^$2d?8xC=)#ka(etX7PPO!xBDA#Imy!=j4TncZN&_~*R$Ddz1i}{3fd%qKjJy@F zF5P9i?jnR5!-y5KZ6dg9yFNTMP`!;o+>O6c^`II+VvO)I$_+7mzfstQvlX_2OxL_A z{>;y}1k6X%jTX>ibW@PfGHUrbC_u})f9-f#_}uHhi+8b;M7gTAx0lW=Nr`N$%jzAP z$15SZ(A?KW#t9>AWl}RWrs|R+(_vYd@frE)NR$A+l5>$1z)t(+0u4E1*)NewAQG2P zzV}LD$<}|Q^s#Ic_Gi$O_GWg^p)c*2*ZEyNh2iIQT~>ze*J@Hq2Bfdmu%#1vJ9u1x zq3%p3VYy`ROtR5ra&CmaOfkhIlwD?)zD}lE+Ii-eYuMrV9XMojqKOaz*`-8gxi|8M zHyk4Hz~REei9DfOOE6=#kv5sG&`hE%WlcC2YqiQPc1r3L+GG2{W$l+y0GCOxes+8v`V|!_aaeU{z>=RZ&W+0I;Zm^Ls*vy`@-NUj(hZ zF3VH8@>cgN?LrrL6$abD2f?4_#bH~YQ8xyK(PnE*HP^yXmLj)F{?kD>ky1g6?5C^e z6-}^dP={zM3dCzvfT6r_QCf+0Qk`BYGr`33X_R-i_gu6MWGYWEonE$Tz{)Yp?J^LV zKqG=!;7lar)YKfM9y`Ylj&NGkq>bfqOPV-rm?6>q+Ql`0@B6P~1EiNg@p3^d!z&(h z_$%Lez`3tSo6EHZ7H2H&4~Mnn0Ib^(-^XPu^{Ip8Hbx#C09}3RA7j*5i~r61)5h9+yZzHxL=FF65h*2rp0*o?-Lop&M6lx6ptr`w)!``3&V%(a~TMDjC|FEm`*NQL%xgh%JOK zHvO03$F?|(QO;lZLLN}6LjGH$(lU1;<^s_V=QG9DSWnfYV&-TH%foP z=N*(Uz`YCwJON?%DUdoXoAvG0WRT1rrL6mOx&!^%T>ClYZKE|W*`LnQ7D} zR^HsN6){1ZmUS(FdYstXb+i+SZUc?sTucem8f0trcptwceF2?2Z?bn=C=aXQ(rfBb zkBiun;^#?YCy$=g_!d&UgJSa)b<;-Ky|`mfNi1q4B_!9-x%@mRXawl(C>&OPI2-Q3 zGxM8LoAa=>kUgAIg}dGKm!-775ZNGQTXu1Vw|v%f$t$ zWBI6YT@^ICBtj*P`$)lsfUM<}!8|i0S8zTQ+aY@_C9e?MwB|v{NO5;PgiI&dn8lrt z1Ds4u3r;@w45DggqXj{XbW}-2y}De2g#4khi-HD%C*Y5g`ncb*l%1{S$%}-pgq@QT zr6yP8;&IY*7TL5^G-!94)982By~y^i&*BIr^Dq=j`w}Rf6~z2QA4YNcxaBaU-NkFLrT=Jl8M5BuUP9vW*mmr(OwiO`iM2`U zJ8>9{wc44GayQOb-kmY(f3n4R%T)Vvq3#yvvgf;Q;QOc_etewP(YR%e%AtbS$|>wN zOly43ucgdW2)TZ$@*LF@49wrzzmwoOiM6xuO?OFMw1C-i-#uLC!4bGG&gC#OpD5C3 zaJC0-@k$2@O>|^soF{Hw&C6 zxsPY3F4j=PSFE~aN}qv-kaI-8zikI_T3T8a;-Or)lIJ%%vFQm|jSEFNo#1U4M*5b7 zphy8x+1fQ{o};VOZ&GwAw?c02V=o*yO2h^m^Q$vD*hVl``TA^p)-}MF1Od>D>iyDKnuS>=>B(OS zC{bmbMJwIY$+Y%bLyz#iT@y)|h5~1S(fSw(kAV~p+(d!4wywO!)zKR_vm5TZlaeO` zOY(6dG}HH$HZEHNSA>_t^FHx4*0*_Xn&V$ln?Kj3Ufz}H%0;_H-4zUGVe-E28=viU zRLe$w^|n+{1cR?iB_fIM}C#(8z>-l2y^r zC^ccpl(avgh9}Z_9k*SXnlCk3Z8lQJNI}P+ys&fclzoRZ1DLw1beygrgO{KNf1_v4@uYD$ zOR?Fjq1^MJ6XUCZ?SZ_5*-vH?A9dsTBh)RgGrTRnGq@i1^%#cC(|pgX$?E}M`>sV2 zcABQ0)$^p%<~c35onZR17^W^lEbUU)Ut;&HsyB4FXbk1lqdQ06Q8PS6BWt(c9`nCV zp1!{+;t|D4Nz2>}?)8bpCndTfdMm*EYUeV(9H})wFKlf@gG4HfNt*yU`MhajHAv+u7|`mH{APX>xVITGvBup zOf5`=b`Tp})g0jy0L3B!k|l0>dX~5!^F1iTl<9%zX6H)otYm=Ec{Qs+WN$!)_fI&U z>yWLH%S{7;8Q#JO-|Gi+&y-KB2aUQgH~Q2{C!~x=sYgB= zq;6Y%UG%ImZ;DS+dmZ(w>$w%YPA5Ti_e9C;+EM^-=UjunO`d0yYr<2Ts@`p9=RShkr)j&i{+Y$J`J4u4c40zUz@7B&2UaDQwVDIr;OsuWv@=Q>9)+u zGqEbiTz^>gB~Fign!gKLnqc@IwvSAwv&*p^?&|~m5%Digue+YvF2#<%1yZ?V$&-$;yOm{$1`1oY}qJmSCWpJg>!VBNArh)Hia>+TxJJ6gf` z-Ww&$KW2HHN!>(Bbo{pO(j*gabm{zDi17;bzNtp{nL}m@N#jkI$b-{5Bo}@LE^Prt_X!MB(d)_6)2)rgq->7V)%6{5iQVdcB-$r8$CnUTgBzpv z)#wGpmxM|l0S}{vt4UbzrR|H&Z@9Kb)U|mpnHHupkQYpKO8+?@yZ#}uzV#Y zzlE8E%Lm@U`hvjU#BXQU^Ne;ui*o+hL(*AQ_KSPu1i7#9JA^qr<-6-68djG!`^zQ_ zDN*JoY|GiR^l=J!j)2~E##zI@39FH>4%c5Wf{#L*)q@vqhJ$BwEKt&;|*>V5bm zi|nM8i?g!VY?x@-BwS7=%1kNf61v1p)Jhjf>q=5mMd+0GQ*=+K5{km88Z`1(zYZmQ z2#1W}Dv#xv?ukpv$+7hnyEUteypn*Z;#$41KJDcYm1hg#%vMzMV86+GhMEJJ-_DNc z$_`Vp7fw3kklVZP5LYJLhob|31q99fX_ZMofM&f>p^I7XzZNG>dHdWzf{2-hXjV>9 zNs0Vzp-7(CwW^|iU~uQ6Cv!rV(i&U1?nD_e*Bf_|#(mup5|1lJ+SzKQ()*s|^}}bJ z#GboO$4MuS22QPGW6JpUM|$?_pRcW1N{Ey>t(f9^q8iN+{A7&Lf3!M8+Feg$jV>ZL zobG(p$dvxs;E?wXNgTV2Es59JlyOqa`$Lu0e0Kdp+0#Lm^J$A;O0-_?&IuFZ5RIDV z+(FHjZ4^2Z&kA`Rc5Ag+y}5;ay-x`&N36!HcC1-GF2{{u141X{v^RWiOQxOCD8%H5 zNp+busBW(ui<(c1n$I9!8#kQU4!+IWDhyU{H@dZJ#0Axg>JJ|`lKt`4$^rCcp6ti7 z8dYy61ck)xqxidSlq#oUhXgThN9|7VdbXbm_BX9xZdLTTzSD0z6)JNJzVz-Cx}!`^ z=as(OEZ57Vaxaw^$WE8u`BXNuF=C}UNs(+-eWgWqZR!iG?6AQD+>O4XhLmM7r`LZv_t5JX(j)>S&Deg+EgyYAd@ z?!8!^&mz20jUDl=js%1C?X*BZ{=8PogmVh&%cT0$O?hzfDS=5Y=2|~P|xTY+DXRR_m z8B1B0C?ZpBU|`nr2c4|PNVOoHudi^w$xM)`YafZvjZ)geQ#^)!@7j7}bRYaZGXjYv zQ`a*xzW?s!2L>h-KJk|1@uIlZ$GqZ^uFKP3hA;)xAjHFid8a?r_8hi2i*{oAIW@gX zqrIw{JJiY&Z_8emrgmLW?`(8$ThKYqzih}C-FU`-?F2ue4c<&1y(&B1Cumvqxm&Y$ z809e`qM>=_C#rkZXKyzBxX$3)gYh99G#TOhy$;lV>|*nW*hG2BoGaRO8(c|J`Q@SN zo2RiXAmBstU zzZ~@~3X-od3us?Gqqp7?om+U=JBnD zlSy>oA5s%IoY> z(SUthz-{SV?PDK75Euvj{9uf0P43<$&n-*~!hd_UbMNtuFah6F^xl1zZLU^EcF!qy zXSuv!jG;>fINs9j$8-U{zfVy9JZArWg5}5ZDFYXJ03-p+1?IUYMPoUsvnM4%dU8gm zov-erQ3_m&wun(zf7I%H6b{}eQhwLKt18W;$4BNrcemFy;knXmUcA6Q@B8rT=x zd89MlYUz5M;MAI)>7hBaaUo#iI>M<4x30l~V`s^Gf02=vhTEubfQ%;TK2m-Hi!evK z)Rkp_o>@Tf#LbdUsKM9}Z)WfOOJE{;xLte3QFzA+zv}id&2(1qDS7E~au`4H(ADctkcq$Mx$eJx zl0VMF+1ISC)WmSKe|Hhj@V_oem=>_mA%m{`u zJS@T+@JH7*iysgWHy+*I-d~h$mZ;)x-F217>N4G^ zW?b!Gi=$5|5rI_2CFb$Zcp+lDG`H(9=M}$bn`Sn(b+50Y)^%p#Jjl8dJdSx^90qwO zrV5gHf>x(-g<`3?%#G&jCj^oOXM#hWkDE;f8qJs}v%=6e#aI{bmZaS#krXEhC>Rl4 z_MdV}ydt@P)T9jPUZjUNybE?Cm?_-n`WOapIbW|W%R$|_15ZLQl3{v=tmR%!EGl1~ zkn|0lP|AY*XWF}6=sOD#s3az&C4?PM8N4tXn@`+Go;`esPcO4YKf~PT^Z;8xoW@tk zuz&QTOZ~F2uy6!PIN5&nrvP~IH~py&8)WnDsxbi|E`QTXsS94CAG?)_dxJ9hsM}&3 z{H4bz@_pGe>8DAFR$R@}EH=n|`@2|c!W4mlIyO!Bd5w2xxE1rRIN_1Co88fa7QFzRU>29SP>Beu5zkJ{Ke|^_=F3vf_%)@^6v)0;c-Rr*B;6Ud`amT>}hjvVf+I=vjOe2qqoQrI5I*EJ7qBnmaFD7%UNu*facB!)8TQBV4 zeV+=Wl0-q=JP+4|LpqLame~xh9qwdI?-E`S!R2wj#K!f7v zdX|y+H9ZxOw#OTs@s~=FzxYqnzdN9-4bdfH2ZccI__|InP-{@jrW}(43LT<>qU(wf z8lZCOfNu0V#R}Qa(V9_H7;TnfGmNG!cbexB0Nw$Pvt2h7A~&A zwn&hP!3QnFUvyJqJq4$R`0bCQ?*t-OeMknndfvk@&inUM5$WlFhgCof zNd3Ic;%h!)rFnhhy!Fbn#KdJ=<$TZ^Fg#JeBO3enodXMylBs*ON6u@nK06jJ2x*eZ|cmAQ}&52zUKM_RYjizukKnfrMRifP{%C=_~hQ3t)9 z5(1zc$Fc~2Umnoc)_cMc-g{!4B)61Q{1LEB$N`D`f8T9BzCwa8%7Z+>I^oWg{yrrV zxCXOr_kDH$|1Q@6hG22jiFLq5e>@Uo;eK&39rj32OH76hmHc-AAh61Q`416N3*1_5 zMqCiWfI$1SGA#~C7f=KoMCg=IkafT-4jzw`1%ToIPu`^gg2eK-J9HnJ2|RWU1(^>l zptf(w!YxEXVgau-v;-8s0FPElUkRZFZuMdW!e^Be0aoNR94Tq(XpsG{47HWJOax@9 zBw}QO{u&wpWDuZ6lg*6J3YkJ*m8pv^yJ;9f->BDqRDgY>s-x$5sr6ey(9%a<#wlbh zw0JpFU7(XI{ixS!gsaSPh6tz@U2QJpQaF2GzL70)0*sHpgnm(^*OmX^mHHBZ%WO*ZosshAv6q(C?7yqXB(g{iM&>S0XVfIZH`5qVPOxD0m*K>( z11nTTYQumiWIO7C?ohk1u1Fr-sN7~oix&U0Ep_`2#a(w+U0(b{#=yg)KD*(;ZB0(W*p$*H76>@yt=$f#9Xua30P_2I5Z(Yj; zc3sC5b3oh}E3HAkuMdpOd!dyR1GJlf6He2}Ho5|UWH%;H2ic$Ie|BK!|9?8Lz-ED* z!3Kbgd2F7~!3ro4(c-z)N0PP#?=zUUZ!fRo_mv@;{pjw7Y?*ODaPkHb;ZR!gVIdK6 z{5=`?skYZ}Gzh*k(Ie+RbFnojs;V=N})rC)mGJftRE8<6iGM<_VxS0D|apMq3sw zItUG%KVYqZSR#P1EB-L`{@INJ+3pcznqpPL^Fmdi!28|u9#fWXJXB zXzW zJy5LqtETk+7Dz`!mA2W}wB_aHjkbEZF|e{GqC6px$`tgW=HRGq zdowW9ezncGHC<^uzhSHNOL`iX6@zS|@Im+0Uss@zfGzL9Mrf-K5dcX2zbQ_5)&9r*ew_GfTv3s4_^!D^bwY0p} zthYO83;lWx-^`O;n*4xTi9P8_H-&4lpoH#t=SH13gTq?;y@eV6p(tu7pV0(JI zlxp9`aJ(^;sDHCeXeQ;c45M4^7P_l^?lP`?N($k3-HlqhJF90m=(xxG=jM24VJQOa z=lnF|I3RvM1~JY3Qz|inMSS>Vnh2U=67qCEli`6EceGym*uY%tcJZ(LQ5ns)GSNkj z4CgmeWS;AJ^DmX?-g1{#${fv-=;RYzMqoEi_iNCx&! zCwLZzxC+y}_8ZNVhK*gEO}fH~s$6!|M}|c2=a)HJg9=i41Um){p5S?rRV{M7s~ za&=s-z{FQVNjjf9%4H{(oTt%F29*s8}wYF6wsI1v< zjRRy14YR#(4!hZXZ`_X)Pn8<8%R4(e*-iWKc-NDRSI1Qqxp;O^!y{WPdPcN6wd!m% z1+J9U)M&)T#m%IK=ei+`jCpXlXbLBrI$Fq45h>I;@pNaZ|Mq-|m1n^@c6H-`+lhj@fwRZtaj_DV&2vD!1}&ISIVeC}}c(B{HZ zt?|ZJ>vPhy!#+yFS#>So~fxbkfoxcLJ2OTcv{)?Ett%gzS?X62VH}> z%z1Tnw|Xeyg@9*L_s$*hcLl*qljG~oFv5PnKiB%zwoTcZ)n@EwKb|?oNwhCDIOM#( zyI6sX&*S%Sq z^7gx?%{@J#>zSb+BUvdTrhBusM?-#hstT`uA@d%7#~p~yQQ|LaJ=5A6{~W7HMk?L3 zo?`t2JEhTSBgMA$=BR%_2^V)X9}^YA{Y8Zd={_zv78n3uc_%^$h15$1fV~|}k?R22 zP(t2Cg|rK{2R_}jlT)hPt*Uo~TTHKOLs;1XDAZAH8tT z0)`52QqaI`b*2`V6fJAoE*hpiE{=T7q~G@1Oey)Lp?_oMqF_F&ZYv`lUH4N(zR!OY z{jOq9wkKo%IDQ@8_)oC1y$^ z(Ri(=a&ub8TpmXzyg%PR_~E%};zO!7;&Y5;kb zC*1U;%De|H$3L(`huMfxF$7MOh}cb}EMhO!>@mmY%0%lU0(~sJb40}He(zjzacJq)XBdvJH)?gp zXCcKOxuoWk6btAJB-FEb7(2|?S{o9NfbPJP?j*ED|7Yx|1qL+L9hs z#%X;^C7+{~h+?}tZmwSNZvDCTqz>nKN2jkjqIX(DYFrf`0F{T+6y|Ocix6MQ=hd}*>DY&h6uHqRij6&0wfIMq^9xmm))%;B zrKk|F*C;z6Y;e)Rte=gHAh){6*ni+#je6ruc#IFO6U>K`O~rVn_6-)PvH2VW9fz-- zX12Hu8{jT)Cq^f}Ip4uD^fxLuk9xG)+CX3As&SDv|9bNc^=Y1n&G!)O(Nb-mXirkOEyeoZ zP6*UI1cbf{d$CRy?cx9#`02RxT9Zk|!BYOG7#4~};b!AOH9qV`S z`*2#;=2Ey%Ga5Rw3Z-t31LWL+nx|`14?J!2Z9)4M5An1nz=~s1A_< zy8xtQyW-r>Kw8IIh$wK{l{w9|xWo;+xYmt6N^Vw%Wg9M~r_x$3*O@tPa1qD2K zQG{6#CYD4m4~UNnv?l_ht;VnDcSQeHl1e{|egKe{B2e5xo{;?aM*Q5$TBa~BLZC?0 z2ud#?-H?Kc`W5n!CHC)RP??*P$~b|F%MVf3gE1jhjV8s=+&V;Ie_4K5(-VutNYKjK z$UK_s;mRQ`D;qHz6c;`j6Ej1zZEgbs0Wy&Ne02f4gW8~z)t05ARVN=hS(3P`{-|ev zVNFF-bL)tpvD(vg&Q)fnjx=VhCHau9KRw>rqm(mlceYLQsc7%cutW-&4PXTk>0Dco zIK_I0Kxb-o-*h6Vqds6=_~4`mO>MK2vBJ_iZ!>dnZ!A~SOr|CH zk?$Y8044ze-Ktbm={fGwTycduPRkeyhAWXcLaKj?)D8b1QmKR0Vt5U-FM%m8EyIVV zRs0EE@z+K`DK$s@W!s{~yIQZI7si~XpDx=%<6?&KD{R&XH0vCTpU<=h)Y!!*D-nqZ zNl7Y#p?Eaambe_b--+dw>HKAe%L!&b3E%#ww{V?xdx?WeAv95>RAA*Ce~~rGo1QaG7a`ySFxBchd3;=d~f*U~0Jc~HHYDxOf5$>%9jIEe@hb1^mrT)`ICeFVhzJDVp2wai6VCONU z*8w9Ph|gnwGX57T2w)xnGs+w_*(?OH+g;1x@QBbz52rl@gDsde*d%8+*1=@JPYbO6 zp$lK*Kq}A%^q?12+7FiK{bhc#-oJ-c`1Zf8d_g1S6@UK>?9(;v*w9Pbu}_BVKCOwQ z{J@c314nYNnVw<cdZ%k7T=^V|_9bM9F^k9DyVr-Orf!p{13{n8H zZGg-?{_2oa4E|lV{{j;Ho)I`YflI(;M|Wq}12V6}4#_YnL=^G`{``*N--;hp4FvgX zGIkVEO7??KC&WrHE4{siELO;4?8SC}yebr(w4*N6*pasUk4^~e1tZuC$0ksR#jZT( zdm=(Z{pBqHT4;bXBE$keuDtWZ$=F2D!XKahodAWLallQ9dTY8a1#bD|rlg3_N zEm(%uef>xARpL)fw*=gJzSPe%@U~tz)!`OC1IXrkVdoD-9A-UrwsW~)f|ldSh@|8a ztQ7nL@pS%i*z4<6bAl*`1cos^Rx%%hB02~O01lEVtvg~yT;nfw{Kd}8A^@$SY5;h> z5-S#t*ev7{eD}TDDU*dJ7sqjBNofF;lrX3L-ACkQf`5z2eC8dWBVxzj9SbdQitPf| z#6-|iDlu;?5pAmX?`6TWV%b71LMV@K0J!^01#$hqe+2OZF<_Qy8%O=N3N_|$$^Xw^ zy+k}>-G~1bB>#ci0dWo5k97X2G&v!Fc>wi<>~tk_BlF)axQ{oSg{aqv zxNV+^(7eA@j0GXV2N6C%vk=Cj?YeXk99w0ReBJbk7;$uep4X! z!y57ELPu2?{)1_FFGM2%QLO)r9RQyRdVIlGSn=B78w=7I;_~xA&hB76q=e98claVM zk}h6sx_3O5x3XCoGx0g>HYE+A;}q^txt}3t&p`KA!WBV~1Vqy8t0B<$Gzx>|q@{bLH@-z)t6fdsJD$N!Y|{_Bw<-d9;ze)+!9sXf*^psnZ}XnnJQxC<}v(9W(@`2JcD6)?Jpjuj=u{;q%k^~sHV z0wL_VVS4GbE;rNSQGK$%pdBfAWg)~94={PK?r|L8YYf^oN(qZj!Oy+>(__Y(?Mw5I z|KVSA;42&UxDdb}0ED*aJdg=E_>n2U0R?2jU!AP_+Yv2Rv`xo?E7qD3y$27U0*JAt z;#1nZ-*kncq05N<31PiPx%=6atCg2^+qn1~$sYay?c!}|P59(wQ{SgLKc;>QZY!Lj zJB3-Xonm*}<%K1dRDcr+tCwn->J>A-EepS_=C_+~2#!eUJRPw`pi$4QlXVo3te!v_4p*Q`9 zcVPXld4CrGMyihKPH*<%LW$+2?*EM`e}DX=e|DCB>e94n<(ev0)FT~#KhkK7kbABU4x^gRQJ0Zh# zr!c4oF+Oy`J?=pM{_T|JEv9V^epSm1rB%fHc3|yy`}$hJz;eHXJQ9q`YPJWjwe4vU zud4#2O_4vr3}M%&h-CTxvhg28KVhn%re_JbgWox8DWb+Q0xyE*)iYT!1p{|^b&xyd6XOT_rIn}zn8K|k=RKc@`LM`iEtNc$k(i+e(hR{L97Mkw#q zOeR$vK$i25QOIB^y|_QgFk;O2CONRdNs;`&;vwkahEJhrXpQU$NZlfK6m~fdGh?|JCwA`X6)2|2ZpNdX#Z>3xFhBge6H-ZyrXPu=|X%k}CY2 z8i4TfX~cNKp-Dy>#U%DY9Zu`Q!{)XHR&bzeCmsF$qr@~FkT(&_D+b6+Akot3lQuj> z1(6*Zmmo6}6BsjAU7lNSp^S+__DI}df4&ipyB&;9LJ&tgrhxpKxr0?AV_y&g@+y$z z{{+Rv(f7ytgl&RRYcLtTJ4WUTkw=71Vsh{Xqkp5JqwlRLUN!^8``85MI30Lj zrZe>b;&zu2IRI?Tf8oKuqVy7?eLWV>2{y!={J+?$_+&aSIVl7|%HyrK8}UCzk6fet zABO4Ro%$ih{X}rBzl@X*4}td(qjuV%Qi}-x!5HZ8kG=okA@whtw676})7B0-PXTot zIQsbbPXR=XMKtQc^CY%gn-X{oAvoO~gilnRT@sD{B`uD3{Qzr5 z$EOfSxDOqD|7Udm`#iG}Kz2(Yb+4VK5V>N^lKmf-2Pc6mFyuL}p1UiL|3$KAzitlT zK&;^({tQ^$fjb6Y;~WsJos}V}IW|ygx*8$c@Tla&&+hxOSt0lUpxrF=Y0^_gYXKZ0 zO+FXn!AMRUgYhn49zuoTH}7e_l#lQKAYXL$`1#0$0bBbJ1a^lQ9{17b3<{HuVQS|D<1>&jb2}BcNaGlk|7s&$;c-F!oQ`x{2$8?x8xG zvt2ArX%$Ba(r?zV|oCVC$VMOtCwc2mYQmHi$fbQuT(>ySx_=)yme0Px& z%v-%Ovie1x48{cPll-YTIS}k=^2ep`mF>sHh2m@)U>t(!Go82#Vl>!=V0au<_4mX3 z-6(*U>pW6&)_5tc$=N?e1&P$xbpQn=LQC)YZ;}R>uoHIg{y8cjKD&E*ECa=9uu} ze^0dfx2Ca!^6wxoxa?<#PO$GlD!LCo)=+O>NCb57sE`rpbkKW*)Zagpt4H4fD3 z!|zgi@SCo4$jyH&TmOZI?CK-9c0PCrj+(T`)5jpP zugmjJW3BNG%SPX;#?W`FBA7P}SeLBVyVgB;(5=GdYQw#sggXgg5Y8QhyQVIAd9 z@bJLEx9={54hsG<$d5_>*(M(i?*Lo%8Y7*Zth(}Dg! zGxxq@y)#xq*vsFs5dg|^tr5 z;yg-^5zHCxEEQ@bZV<0*zUNth010F{mww<|L;n1sFKPMoudfQ()qUiR*E#3Q+8QiO zPLUnNqLPaS$-+U-l~wI%50R-fx-X8REVOHs7ZPtJf{jg*W$>oxWRc=AMO4(sld}O1 zhgexh(*y9&KB=$Cxod$ShZE0Gi>WgWCDx+?s;F3fvF;&r-qsg7_a!c#+oRNm+I$J!Lc9E%*&v((9;uJ4NZm4~X~U6m70NOAGCMKoKzlM11jLb0E#%cG{sgrwb$u(mL6 zWt$kc#QZZ8kx^8oSBeXBrL7@$Q|X23alJMdc`m3gl`AoL6czGhr70IO23B3XGt=th zsJI=R^`JP!3N)pBO42zA(0RQdGaXopLA`di=5Qk(3tnT14kP5G!f6e7mEEWJ)2I23yx!z1N(C3X1*->oy_1npl-G<{c{=zsYt4$bTb9nM>fi8t?I zGN-?t&c~a=q*sq;q41V8E3R7VIyQVk!M9R+&J%sXxVUV}zmz*rEgs!x#=)0_uS|;N zy`&0Y$J{FzPAKiAWBL)@pru2AiyuZ&9Mj=-n7Ud!#{O6)UJfFJwQYbhu> zGJY@9D6}+M5#5?VJ31v+BNXf$NwKe`G~8&*;GLN_Eo9=&lG`?xrJG8tPIv)}`z<3S znJrN@QF&?I;!EWbbw3L@_oc@wziqB=vC8jBtLF8C!DJ3)hucLIwi#dUBo>{=xh<5( zk=RVXSQeXb(4Np|B}5bXSG?4$Jhw1}e--OoG?r7llY>IPK)GTb5WJSj4pbZ}h?zZ` z>W20?B{JgTyKPC&)x2>#OM(v7$lK*RF(h3x7yBm%_59SPg*-HL_#FIMbFt=B=anhp z#dO}HQbjn%K%N~s$8L;}xfa3{Xd!DkUtn%>(2{%l?)xz@c#JVxv8(B3P8OS_rSyDX zZ}#K3E}N~1X(9Ww)d}^oZZ>3>E$20Bk4xnaorB9Q)?W!78CBzlVVQvLu}(_3x8T@Y zDX1s|zy4)wm6(~zEVU|w0U80mmXyHCM?!fFS8?GmF_gMZ+hso9?*t2_w$NQZN1HTW zT>Sp~r|EpqLN8v4-Il6FpA-9Z!KxUJZlK=j_TM*x8{OBid#;w4AtPAb#a|NWRHi4U z>5DyD=bMmJ{d}CNLrh#iT`S@-ylM@KWg3r-KR1adM#EPUWoMIOITy}b4?(qvF8s|4 zQETdLdX)U=d@MTAO!>ILOx2=za?*4;3n~Y`By-k$-F?(FS1X~XZ<@pkGfRJGNiBg` zf4Jp0L%_FPbX@#uEDtf{CCP{UCF$ilr-G))ahYLwcv(4?RC_r{D-{yF738!K4CFZl zaT>FW;dR^(o;dM+D9JI2&`8EJP3R03Qy_T(z z3P)D;gqWxf^xK@J_Aoxy3HVeA=Y`1{>533`Q$>bZ2M}I zy5GDzAL*yUZDKzqH~Z~jsB(aVl$uT*7A=Hj&czg8QSLlj=+osBIHl|4i9f~H?DJXp zTu&6`_6%n*5_v_5M!5JTy>x5mi3!(0(J&j(L%~&Qn`^H>(m){B`6;dpowj9pa9=m9 z%d43BS5HTG3Wg#Gbc6*@bRMl76nr|%78Y7#oV4J6@y8z)YL0oI)$sKJ^B{K>H{JqY zf(+lhFb(g_YPIX*EsTB6l!*xab-b6X* z598HAHYWAUqqFR<-HTZ@lqYrP^V)H z#K*-~-E27LPmj{NV)9URp$eOG&4D*(LP^Q6v(*!lNW_k{!c@1^kX?feUr^IR*4ajl z!f%Yo`k0<(%~O)e^q;}MZM4#t-{YDveo$A|fL<-3KJtrZoWAO#|BVd&H2)`mpQ9e_ zjb{bCbwOR~mxvQX`PT!oQj!#~F)QmF=Z{Cz1&svZAnbDDpP}=g6V=F>ud<_XScqgVr5d212g^+pok}GBYAN5K&raPVw7w7PQP^m-!gFGM%E>o@mNd|JdXkpk-m1U` zJ$+8(y+XI@b+-vLTHaVU9V8Vdb#>b=p}Bo;yV?&4gh)yeX8XNh&LxjF8bm8oieX*f zL4m(+SC3mf1{ufUV3DZI08~l39i&Vq3- z93GjDV{MdbV4JbBDABwu*O!#Uy=uC{NWjPXEb~=N9AD0kuy-P)a z++((KM*Uq6kMqbE!@upEQ&|3WnzKxE31| z-Hut=Ay3eBf_0^JP1ilyXegZLg~(beWA-h5?U@h6I8j2osVyp!CS}Qk^j#^Ti`Ag# zK~RS&+z1u_+?T-D@^N5+pX#0j?WA8Onh*2X2VVs#(TR`Uk{3!+SzIJ!R*r6aujHUQ z)ql?PLUUD#_Qj!15}5^ja?tNVn7H_<12WwC^%yd=kRXTSp&3bK=^bnnG7hAe0E-wK!kckJEByr-C-)*TBsdc4$@8vz{}mG%4aR z7x~KTyYrmxze-x>N3Y`_=1wdunQKd#wEdGni=Lw3z{b3{c+ZUiWJVJiCk#^Xq-xco zw!-yTMnfM4E=Tyb&iMW?<+qE-MQ2@WMrU2V`qtrNYB=d#U6p zuA=f~5bQ!G)YOJZw)Jy24O|s}h>1_Ub7++cBqECQa2E=!vyc}woSmFAfvY%pccwLF zdZXbo3f9cfk;b!lj+&>WOBtJC&T4MNdrhxfp>1EWNErL7pV7Vz4x!NZX_k=N$&Z3b{S`7f<0(hck3O6WNyM1VvGz6p*^ zU_#a`MP7nX7=esO`QBsM|r}2vMLSsI<%0onff`LZ(9~t zQGY$v-X>1Q<;_ue%V~JGR*kaZ1S?5IYud-^xSDO*B7SFTlrF9P#3hLdrFe8%XrE!I zfWU{AFqM9?>EDAYG5&B?)41X0B`pbPROE#8dnDX=6}T4t>t%F;^Fp*1=2vc(?WYKVa_5q zpNi-F{U0p!7xo9eRO=0e$uLki#fTR9If~(XhYNIMM>c*SWngR|xx`N+Xl^3uDW?Bs zaKaJMR?*j~ZzniXz8rTYKo|P>-0EBIeL*~3)pUi{+1I*kFJz%Ql~dzWGeYO&;xvOw z=~>hKaaE#rx!&!s(0(k^-r3XWN~;Zd((nm6B!nhatAF&N3$q;hjKk+zHcg5Da#4pK zB^4HmAE59+x-RWW-Z#R9u)>o_Trrv-{$zUSCjq6!9XR+rg1<*513ELn*~TEwLv8$E zqNPw_fJ(q9?v;nHbG+RlgIsMKHAd}Aul)Cg-!WE&QP*e^Oi2T7 z@1eF4%+8dH=aWMqv}FVk>jFLt<eA70@e453n$^h3y?7>g|D?^_41F(UCy|uE+MtUb6fAmM zFqk-8(4OQL`UNDAp-o?kS~dJKp2BZ?eP@d`xU9z8O$jE-!S84w6VJrrW38l5!xnJg z?vw8MslS0jSv_~>b-2V#O<2jAitgja6Mxw+P>79*mh4Rwm?M#QpC!c0IBV=pRwvDI zk0sJRR2fK1=N(LJdF|C#HO0!`%efK{xQi@t&Sx<7Xw%*3CURh z12Rn512XNS51-Cbgt-Um8={EQ*bfe68O7ED^8%Mkf*b>U-e^2+m`vs4svp9r%s#5Q z2&aK)?c&dkGc14gMr%C^>-~XtL#(9IS})(_FfI!g8&siu=p>|Pi~Zdu2T`EGTDIKp z?a4ZVB~-X@bA^B?$OQ|P&CIFVxZwWP@vQqp&Mz{IQz-XJO1)(3)NF?5NMjCT-_f-V%Te(Cx>+XSaM=AroQgKB z^OA5{0zA@2Hu%JO`-?+dvCh_(`lptuk`Y$y%7(B|b@TK`6JanJOY>q1h-GvvJ;yFV zL1g4}!<65BgzJO?n3$*8AxcB)?&k32@ocN9uRdro^y|BL)uw6I4N32Yb2z>=k&2&8 z`5tFnB^3f6S$|ckFhhcIJ-Uw!&W>-hkKro)H!Y4XYp^PWNLf0|8O~4_6e)J>YdaFmay6{r9nxRI`nqzxhIZRMSj#^K{A^HHuFz$MN6J4vCiFhu3M;9A!x)&B-7C> z<33#swmy1=-pPkv6gz6oL6Q4pt9tySllKP2I*G^AGR+o5$YwpdTA>k=u1vXI(M*5O zsKN5p8nGtwyY2~FkuM(x@lUJ0j7VHd0;-M%gx*8?zRtwEW zv2q_vJ#kfrwPd!o)o-c^3%HCAzIK)g9h~Qrn$OElxI1r9hK6yrvuzsbnku{07G81L zesSO8WNaHV2%9yMH>n2)0kLped=L#}t*3Y)`xdg0IcYuxQMCA?`{l5nDa2M6s(uaW zjDUr@taPiXc;K5WgVSD3?fh_+FHX}Y{k#802_(c82L_JD4`Z?&Otd zWTgU*qDg8<np1J4jN4F9R-2WPX z8=Ip!McVpBOnf29c};^HLe7-`wK(zXmb-7oXL{PD8Lz>`@x@fn8W+}DqS*H-?jW&7 zensqix}ryFE0p&OO-s3!zbQcpcgJtLlwR3O8sS3JGXMVjP~`47=$b`Fq@H4_Hrt25 z%-z;a59bEVK$OO*!Gu7pL~(Pt%EQ39MR!8ItZ5G1h&p>^EmYefbdD>%fhS%=nhEa{ z&OsjG$fUEiA1oj?r`V(tF)-yK$72M?nU`_uI$8G`bY%mWBu2m0+IO)$O79PvbA_%) zX`z^%1+syBDbXqdG5&IUjhnF0;gQu3lb`FMmK7wg4dBZU(+lB`**0EKXWlre8I=v3 zwe9>#-^8JA*k;J(*?}I~fm&V;=la-zB1j;2*wQQluIG z`Mm;dU@l`tJd8#1t-IOYBd>v(hc3>}Zu*NF!v}=4kSmLZ!Q1mc1Y?u9%fX`&UmJE> z3pL}+?J0rZ8^gcu!*u`56*>P>6}{L_k24{OL4xkqZYKW?_1FBheOX{BC^+Xn8O0p_@+;<6w3QUDt3<@5I}Y@$Q~UCvK%zElGnItS1yK&3|n`cA;cZ zS?bSoMtBU)+^sqv?mbZ5cAfvuTXzwd>jlURi7YgYw@|my1|%B`USa2L(&ijL$dE1h z5|8TZbWS?HO`RyWPu!wxIC3Onbg4$@V?gtnf4(wMS`Ija-Y%=bR87$(-^hxeuc=d>XJ3xMWIFF@Pi7 z-Z)P3URg}_i=vlY!ELpfJ+Isj^I4b$yz0AkhS-$Zf}^h6meMLBeFaWS<%uoAc*6#e zUo{m{DP(OJJO{-~SLMi2>WZ|7^STj5o(bL)xXSI4w0Yfxn`yzbvE@b+=Wd!9vA=;2WD6f8aA*V~|aQCW->@;l^8i>4p*A4@ST_zoMKzguhotGzY@fCox#( zQwmq9)ADlF^i>wJsTf|?wUPd;)=iLu+62>V!Ppa>vo{5ha$-iYEW!Rc$uyR%7FRmIK=*`cqru!@s zo3Oe!(06z*8WyVd28PRqq=2~0Se9F}|EEkD_&q9Z-sx?j>=GzB^(y`^aI}U6RY}AfC32@UvbmaE{C52Y)iW5 zSfj0n(_%f8r-^n!uq60PXp)!x%jkGaA^lT+8fraw_dc1GDaN357a|FDlF-XjNiKvU zeg8mq3JZ-Zq(+6w6sy2wX7lj0ntrMg`wT&gNKF@2pW((Ak#>vaL1=G2Vh^(;$w6!8 z`ODOJoW#D*gYm5iu+Y8Xk7Ff#*lZXMDQlD5kh&e5>y1@3F&cd-!mPp7Jzd`m6$b}w zd;)@)PoK&g2zrVW-(KDi5nm=IYEVR~Ty2hV@6?oHny`LGqDq@1mjo1ii}j}Hs3uyua+trUX#6IA*))f6D|zDw z&Vq)9q)_DiHqRu}{DP6SnlLYnm&Za2()k;aqqCw=R(t78r*wGWzsN-G(YFy0hjAYj> zqzPD=iR*w1pqJdzlo;>O!N2}=SYAqUlX%Jn^bE^5*S zj3#B-0Bqh}B0@n4JlZr8S~_A2sZ38~^;K+bEvzU^y7_2td%HB||CJI#Fx2YP(s^JT zt@Ig^8CK|^r}rVG9JgI{%|qQzTF>{x4XGrNjIf@#kggP1BViUO?9ii4wzQ6HN%#_dnnRPF;3|9n%iIXC~J)TnZ2w0|^ z@k#+yh=YT7It?(FX;d7okhox$4BpcudQr)rV+ZsI%}kWmf8FBE!nrO#2F@_)dzk=J zTB|2(Pq0#|U%KA(`rJc6;(vWg^? zHCqa6>H%&&!||r8aeI}wfpyhU^||Fuz)(n_VgvOHp>iz=y2$5I`raCNE}N68b&uEH zobLS0*sD40wzoJs;XUcT;;OOkKQO)gW%lDcU7?vtXJ?r2$38I>{mGt#;WkpE52}^Bc>U1Yb$ zG#H3{b zkc!$-q!(GN(~ozbjqbDdgf|{G%ZHz)r}Fgis!$WK*IG%AypLXCD3KVbvT?J&j;*_^ zRKP*L#1@e6Be*=n1^y(Y;iFRado{|~n9 z73|2-X;qZ*6=%5Tcg%cR=D8l7`kTA3o3=t#9`%}Q`^(+3M`j@d!7r~&PaXLveC?f$ zvO_veR?JEZ4=O70xfR2q@=l+U3#Z#<>kjy2GRvlg$H<5kPK{-G(%Y^r8EvnuSp~RU zkeM%5B}0pJ1NK{w2{e;`F!FLoHv-g#LW4|XMP~NQ7Cggnby!H5t z8|T`-_SUvKdIa~+R?K!fKaqF)q;FGLDVJxWjUS)P?l!OSzn-gFdFgXEaBxJ_(|uIV zGcrjkxe7Zc=RP%}+{$q9F(Jh!`w^VcFlAw5HDE5GvJzxJs}pcklCn4VckPcGhFEnhbTF zXJ5q#4G+bClA~3{+!a+S2ld5YeXt5Y7-qwpt6(rS&6j=3k|rccb$6bnGoP;biutkr zH49IO=R7@)Tt)1q`O1*d+ev+#_<-hm;1E7kqp!*5p7izy)#@t`X$N7=!q-5jmA}>4 z4kI-+r@cgvBF{I6?zQM=!q}~T#YJo<)+dM| zBMZ^+ig@e4rtIZCnyzroqo!q^bUj|0owo;+_(qMIAoV<+pL*ef9 zO=?`y$tK4~B&2}V=XZO-<(+Q*j}I3d={|fHHa+PsPeiT4m#+_LJg@?N6JyU^+)8qx z)F{f3UMU$Fg}k?mcPX^tumX&|6s6@$sOMH`xy5dX-nbgmHlgnouC7dfmZkr+F!9k; z!h@5wdcVBdz@#WFgu_!qv5}#G)j=A^*7x>S%~?M674dX^an#3) zvBiJ_8V6YWAu;iAL3LWM?Yy|60J~^Ro4nrv?&)>F{Tt3odDUO{Z>@CXyWw|A zkgb!HwctXG_24>FHx57ZM_MJUCl(cx3+J^8aDor1NzggNWbES-dWEPOD4FAx5(MU) zuojq%k@P-~3d(D#5$aDl)>RWkz8|BpTdN%S34_VV{vDBJh*$P^FSw23m`hPXSqu4~ChqWPSCFApzK|m_&pRNI1Uo=TB34l`A#uLE`YP(6)Ea$u!$~Li+DHtTxI&Db!i@ zKgirs=x1j6+byY~fLcBEk)5H0+c4#EtlIhHgS||j#~Svj3VNxpj_HQ~FpyV8IxG?6 zudt~n>g6bmtpy&@sn=$FUlRAzgYc*!f~0RkG!ZEbf}-co*?&M9%Xp*0;I^N~$IIbS zNqeN|Z+irE8|Wmnwf3Mj7SJ}GzHlLCiI$SoEU99t+e2d}a&qydCy}%tybJ1H|E8Og z&HtMp=-tVu6GKIU`cpml*1NsS@K%l%E$x0}x+?ys!+vIR79j>&6!|`d?$X$0&s~*; zKl_eZ2p0B2!b{$=xRf3vW!{_F^KWX622aj#cBq(O_32@`@xcgI&l!1%(>N%6ilKoY z&Q{K7D8Qq+_0DPY$6S|JfO^*H3A%ekE>0|zEH?FLzND9_nhup-{-W1=W3_D97vkNj zg)smryggO&lYWR?ad7nlhLID|{wCV~a&~iWlgPYW^2%XeCl#`8am{a-{dM$>gOwN} zgv;I?kJ4^Sp0evnOA8d!FTgKTxBF`$EzhDA>}d;$^C0Kgqt3HXT?YHG!EG6Nv6h?m zFucQ6b)U66nmONN9}Zm*a=FNEzjoUp3%vjcs-I13t@#vzeD)u@!FYo4J3# zz3Xg!cm~BU{w(yXJ%zQMLVO#e-*s$nH|rp)ga59#o3z)zb2o zdb-!7gQIRoSSy47>(J2YV8lSA5=-tM8ZlP&iHf<0?Q~e!cm%Mrp*cl0BRM!-(IvlD zfly8^&R$CJ#m^I5&m%nyP57yN!*O9;d}eREhkzjyOeZDu0jBq#5|5Ie093Tolr?|z zeP17IZI)0_7I(l@fsS)_An+^WMD1xOefalUJtn^RJE! z!pvwb6C$`+Mkwus!8n-)H7UYap7iM!F)zGf?_#@vygIYKOji@0agA$s7B}W6pB!w| zZbU$;TUm%AFoQDSWHli8{1n~(4L(f=c7FwZ%iYcExg|_pUDUb3N3_x$-pS_#WEu6i zdS83Ffi zC)KyN4}Ii5OQ{>Fi+yPK6OVpMs@tBwxNK47EkbtzO1BeSgMB`RZAI4i@Sc54SilRbvigXychA0kE!!!*9gT_6hZj(V zlLTqpQ3nyzl5De_d9Z19ye?va&0@7tgh0Z-G_Dn3NDex` z@*;5L&3sLenZBh;*%{NC+@{IXQsNC!D23~QyCyZ@$ZVbh@= z=tm=pMeA&tp*@#oJL}3kjjoNwWVYm9%#6B6My7)kwolFitCt-m#W^ogxKY6Va%;*v zKWq6A|4=4%`#!;0G+q}`Jq}JL{?i(Zu~J-bk?DpVYgg8wo!2tDVSRU)t{+QHV%9m6 zyffQ=C%3>6!OeS%X3OQ*x8todz2vqW7He)4_f#R|$~T`}5QTEhtgy=WA2E!AA9x0WiswN*!DOe!&5BBKS zpAdwnD_Czbli$RDn_Fy!dKfk)mUOO}WS|Lzzf4oxX@&b~3;@o-ehByWpOjGR_}1tgF5E#y8nIVVW6{ z=xgH{_wv#W97SjIcpnx|e8HbR&dl4E&PQbk9nm6AW8IciTWpcKTZXDHN8`g5cIATX zy1PuNE&<~!wfQ!FVD-zeS7nQq#^33y{Et=d+820bUad*(Mq9U`>V}cm*(R(NfBw}u zwt81)ZFiLIYN&R`yIb@0gq3+ITCxc=_Oezc#Q6EsM4uyJv|68MYuq) z)%zu9#JYR<u?>RP-Ke8uq3DKECTU4&zx#5Q91XI!AZV3O$pD=>0%{_EJkXZ5E%}mFBcAJ zXHTWK>RB8VFL3Y?Pb}H#1vS>qdE$8W>4y&CnPyIJANl2Ca|~2N3o)EshFJ0u=-m5a zL;OaxQdEH#mf4>S$kzJz6aMtk-BYSK6E?H$*4q636Hrd`SJ8HM^6~~Mzdw%?`{-G+ z;ub2Qui_7Td$FO#DE!Mpd8nyta7OaQS3nx1wGIwe7d@qud+^1ZXzj2ua{5YTQ`xcT z-FSbOq`ze=9KZYE+im}1cT?)}Gfjgx`XBJ8pKrp^UaS~}5{J2FO=f%bRNuM96BPa> zilk!w`FP_cL7EZ5P2QmC_3v9ub?2A$AxjUwZMqy42!nxxeYb-Iy7I4dc9hJHR>OVW z9PzvaBflKvm$srX(%atxKG9zv!nuw$<2Gae*Z|Kl0#0Gyqa@z)Idqu$@BXvT{fFh{ zxpSTKE1$ zxInXugOxbG{8r-hyjYO+o?UPhAufkyu96STF8l}&?6V9B)wzR`^Q2l0;-@^-!9*hr zLy^tDf1mnOlE2x4N=@N|%Pmo>FKMPKa1mEYB?hwrOs^_O$>#FJk4{U`1O0-=Wf)Em z>(*s!-3~u1v9fP+v%bBG-^Zhs4{NB9oHqVNV#omFYn&iZSucwW>uL;$TUEK{7)U+E z*+jt_Mi^l+^iq(`K=TFfg@+CKUKdaI(|x77q?7o{z$JRtqg7)*8l!UCJBufk$hd(+ zhYs30i~r)rK~1ZITelP$Ux~3=@1mC=7=407u^LO;*fI7l47fS!H~N-%pDSil`_FR9 zR~BcxsDVhWk9a0at4B?t%+)Z$CsWb36m=BqC(6b=V(zT|k;b#FD1c{Fm!hZga64IQ zqIsY$4Db;Q_wN=~Pi6YcU)hsd$zw7_w1i6aRd7q;+lzz3_oKs{+<~0d*I5tvBvfBS zkr3Ag91`poj#0`4_*_3270Z9tThY=GdKjMcZ1`}EHZSVeg8wEZuRhhx)(Vp^`dqe6 z{|Wgw^hw^nT0s#t7Xl(O;le|P%}^XGM5IEIw4B&>s56Dr9?6*jqPcI!V|YhsI)i8r zYujJGkdK})k&tw8(fQh))M|jm!k2YWoP6?FebtL*P-?!FZV8@sF+Q0k^Z(YM zi~a=xQV${BqCU;oF$VQzpa7 z>|xwe?47RA{x+kH-zuk8f-dHq|phZ;1Ckv4(#Mkp;%0E z5D)i9k7dMI$D^GT&tL?Q(U@Xm6R@yf?K|;lyw8W>1(MilJ})Td0QkLb>c;Ebql5tp zG}H*KN#TzuY9eo6rKHww)DPz>IO{QTWCmcQX$OXET(fGTiV)~U<$2Svz5YgEqIv9X z14vxSN?*Lj`VWotJaSL-A=Sy!Xr@p*s5+J@4K-9}C(SDki*@lW1(boKJ|S$dTBYrW zGX;n9F_es&)%?$p38!X)VJjQ#XQ5GoV)73-W!S8O7ldv~PK{*X;-MAJy@EisQieTu z;I4-<15$n*!~y8&Xwdw-h$AV$aEeDn?gKIhZBA|Rm95#hSf)7o2B&kgj>*7gnvVQH z?ay|7RZbN|GcF1H3obnLk2_`a=Kw8O7BuBm>E#2!!TqoO+LS1E48_W&s8vtAn5=2G zgvQ^p!X_znK4$^A*?4<}nf4D(GTkC8EqbxCZvTK$`Zq&E@slA^6Tn^~4M_U&a};?= z+iTxj9C4AI8QI?2`T1FDqt)1RES0Pf%&g9^IpYtGZ)L!VKQo)sn;@Z)$7&ujiJ?yk z01`}*-%g?;hYK#o>CIIIhG()q^3DwSH`x!u0AhB&tLhTq9dnjnA}wejnY zO0^XwcL^or$_nQxm}Jr)R}EQ>Dk&#)_j@%$kcSFm`rd~nhNLVe59DfEqklx6H7O3- z$u1&#eJRas8G`Jkp?}H~Mp(~^{DU~Q??YHX&m2%>AHr)yg=q3}Sz*aTd73Y1z^`dy zgtG^+7E!^kTjXAzSfV>cfNP^B&h+|XID19=+J39oo`n7WzBmxdiHn!W7t8vAJmJ|@ zqT|mcEFD-j1Xy<}zNx*(2HSVrGOCRM$6WX!SleKS zMAe%97MavNK!R#CaRkJm@c&KsUaU4U z@DbD3J#8%q$is`W!H#ME3t|q?e(F+?MF=QDJ8PRA{HO-tM?F&F;C?JIMav%_*; zOIc_o5d?q7Lg%wPvd{v@$6!q!z!Jki9yEA%`BTotsE|l-{HlC?JAe18@yWBu^$pnjZ2a4?;1d6jNm@}#(>-i*H|9U?ot7s-TfOsIB5X?wnU67#VL zPEqni1AtQU+gyO&INyJ_p*#EeAOkF$rxFVvCmb9lJ)oF z7bJp(%kFcJdj+$rO%F2UA(@f)Oiz`2}vtr|Ib;LwPh)KV1O;wm6 z8=t0_VGNe++J)t_RoeP;a`%9AsV*Fzu@e!aF9reUcobHEV~buB1&*lEOl4zb4O+-h zpVjRG5HO1SyCW}n7QSS*x9k1SuAJvJqymL{)9Ti?S~>7i?Fci2{{ESs zsnE1P-X5K+w^9_xzP&!tzS@kTe-0$nNa*MePUBvtr76^P|DlpT9$_XSej1XAUM0HN z4+T$=fG>Fx>p8OL?IB!pcQ+0U@VCnb?SqPtG?FXM8I#9RgTuXyrXWe3v8uK->Y)ociB;+|?f zfA^P%Ph4UjBi+CgCEJBsvv+})9#lfl3A_&1R(Hd~s70KLwemy=W6|b@EC)Om%zO+O zm{SMeSoE0F#J*zxI#*+m0JMqO3|f-uWgp>?^OO@Zt9+_4cx@w7rjk^eOe>jI-L>%M ziDJn0k!sZ5(Z$yk{Q?OunAFKOfN-VS&)a|1#v>QXX_SxtVR8f~Ad7VlIJ}_#$F6t$ zTAwMGpXKDKtU&fO-t*RWg3<~I!5S>p%;uQ`nxfE|4CgN` zqhdZQ?wDp?^9E_Lp-wC;ENWidYGN&}>yLomM|p{2j9v^LZTZ`AZP^>8zvqWl)%sO4 z%I@YQu}~KNShUgD>}+yc3C|ImwR-Kamv?qWK`Kb)*oQIx{s94ouEm|Y4!}*#y;>nj zkq13=73=RrgxG=wl9Gz7&x7m5bsGYb9&pIfUHGceTrAE=1D4?VAepC(YO^GG0a6JF z4zzusr25Y97R!j$X%mYYFBTbQ97H}?qD2o8Y0xm^u>g*t^3^egb2*mjj{{SjtIztN3fn# zfrTdmrmA?lI<|Q@m6dKzZq`sLA=fn#sV$$4ot>tlznU%(&sCeAo<3c9F*UjXsJA+$ zqmC*n7^{IN6P~MH3+gi-KwVW`PmggXgq~!+4#+X3rs0nXWQ&dfa*$$dmMkDyB}3Nv zQES7&W(I5_3cwZ;n#MK7#`$+)v9hzPQnklKMHx_l%<8HJeu7H)O4yO?45-X#Jc20^ z(Wm0s)rGo&3y_|ntMH%+d>lIl9?-75}DAm;^=pAzbI7H;JC56wdEZhV%OV3Ixu88Hf51Zuu} z;bWhNlc=%n>HT*Z!{^X2RcehI6qXSTylR>oDEBdinID;E7|Up|nCJJWr*)waVsD2tw3W)`vWFRHq~yClJ6~9qT1%E5 zFONN3_TcClbMv#*!8&vJVX@Pmi&>S1vv;JtXHdFEO0R_0VchEbK^*q`I;u&Zpm-9p z7x#Wz^8T+)6){0U{o$~MT1Lfac&c0P$pUZBwZh(B#o24aI=ViN9^En(41*pUm93QA zu2z>-*h#e6{jOO1oq$L75rTD~QV}PUJ%MEu1FS~8*MkP0%!%$``#5B#G7zzaRCU5R z{o>L&;f9VWV~}Xm@F^^tJ^+#$<9G7Sz|8=v4cG|_RYzYxWbgHVDZK{z=p#+c8^-g? zskyl@{JMw)!?ze9#AJt^pW%}cWq4QXnwVmWIppUt*`qEGl-CB%(wiq)t8xdXQ60H7pu8+Qdo4 z;$hA#!4|_2*C$i5Gi5X2tLtlrB`NxUE_VK9an6qoh-2NStB}{)@Q;}Ths_CKOZ@tS zyO2o87yZw+93GBVEOLB_uv8Tg7k?$ZB!l~(S^(D8*5x%hjB;*Qr@(@4Pdccn#Y!nt zDUK~Hv~o+xeC-uQC|Uurivl&wGePwHrclMD-}HKTU8?>WML9Vf*oj+}@3{5d%PO5% z-!qnm``q3Bt&<8o09wAOF=LzMP8msP-!eiaHhc6ecEro&7nh=z<5N;nj&tr4lI~=< zY?u6XO`!Ru@>gyqG>Hfbg_f_~;mcmjF~DLi+MQTyk#8MI2)uS*%0kBF9v{UZ%o|Ss z*Z}uG6d5~?aR|9PnludVg9ghF1by<(V$Q}PeTlQ>cNbsrFX?bDfl&1*B*4X`R%!(o zH{xb=!6M{=I;PA34|{VnVOj=#$UK{dOn*^Wk>h5)%0;`|yR~DH6 z@?L9|hK_y<5xL=0rJe6ZAz5C5KN~*S&~BoV*6IT#Zu2Y}uc0S|Ab`o9Dh|Lev!)5e z^nftApUoT2B6Q1G%roPlPT?}wzZI8UcK0J<`*JAKSjva&XhKDSM0gy17gyLKCs6O9 zOMOQM@`xgYRHs-;b(xRZh%CA!K&U%{zg|8 z@w)G9AGlGrQ8Lqa`^1?|c2hH@$_d-{tMyM%_%Fetw#^0O00{3Vm4vr=?&)zpL7|Kc zf_8Ck-hEAx<(ZwUHS6?9&%b>Y7k?8w)+ZP>$2XRD5cnYTSu%Fn@}@Zn)wVJtiiAY2 zks2<#xSwyIZLWk+M)*+EZ_6VY9aZ);Xmz2lsFe%V1O+ME%q|Dhpyn_jfSz)GJq2N! zyFa-bgaRdj@Dr2ntM|WM_E+8cK<|ZsCGO3}xXnN0|Kd02)TWJ^U{(I0l*X(Ghrv@$O*AX0eLZX!`^zy8?=;?=K^=ce= zH$$^Eb*8{`p@8%>EBexz<_dc0j^6@iW87pjBBfN}k*1>$DyO@{pR2XXKTNQA$*l>@6YPDnwSH5F%k<`L0~DJj*QIy+bu{tGze`0AUd!Kx z*K=4MT{&GH6w#FY+0m+dh>(}LvyTR341(hoz&e}y72wkT16cr~6qp}~t;nnw%hYI(%PVLs_=>Sd#73cFv68lNkr$nF1KM@i<~8&arAQ;F!r zoXMSNKb3WVrV$vUr-}=zN|ISL27;i_qmVmph33pLxHDRr(I3nR4w^R2zA zqFT2WtgaAwg>Z;Z1P1Odh}<)9{sL+6%rG>`%xsI`Co*88OhA9aGn6HmtlRorSUEXI zVWr`-mGc>9kE`!oKnXS|vjwCZ8qIGGRyz$-QNtF)eC5W<5W^EW{AH*z47|TrASP+{ zvz4QIjA8xags$CZS)L^KV(z)Y@6ALtnOKsSp<80c#e0aYB9n$0>ikAr>`XGWFNj6e zGaRDK(>K=sH$S*e`wOhna=6KfNDyvT9Hs;|Haql7Ldpc0K~>P*wt7uUZg@Wd9@dwv z_49AjgL-wcem%VoRo`Tq{=(nzAfr~BO{xE0v;^fazaql zCjw#Oc?D)&p>%)-{u7Wt}hNX6dW-!QA;HHsFp)o4bsYTowkGg=4~0CZc8|%JOp6!RG5BWIYOJL5oC#Jp-{dcT-;2DH_IE zFF_>48S@FXly7}T@NU43f?tmH@A7ER6shA_7AByqUuxFroms$$_He^ii&0lCMhr}! zLCEd@Hst~wH9JDmM2nAQ#l;K`bBLFHR#*lafv&x`8Wuq_mNvn=ZXhTTqw(NLB}9mT zOu^|PJgYWOb^P;0l_6X3L+3otT5n804UA+Km;?V%DH;p99$ISR7|QT>-{74w()Qlr ze!6nBwOSH1e^xvxpx^Q~eG#F+Z5$(coIQvOoQCR2?m;=?) zQ@^}z|E+CS{To4(K+l_A#hmLuPx!peZ2G}L9CRe)^y8%ABP^vaHX>|svLZ0?XV{AZ znN|rE72I||F>?CdW9-}egO%DQCk#z{DHC*+1MAde^L*}Ex_HoyJQ-hF^f^hC3e(f(g8T{Yu+jy{x^I!B>eklO*WozEt&nGi*$ z6EG!4J;I-WTur{12XfxY$F?B5vzC@y!}%rcTCDaT0VrwR>J{RYSTx!?S7$Ix!|#1+ z;YEEug2T@+8_|10#}bB=o=>aj>fc1qx8De?0K;VfvZjMMbdDD6!VnhOQBK4l9H~S! z^VrE|qjz?9_j$E-}_zMfpM zQ_~iBF<7L**sE>0xss_-mlOT;5mxZs#_hP1@z%fvdF3Z z4!UO@I&t53K`~T|91Bf^A(>7ZCMqPy4F>FJJ}}9mqjKWG-$qLbbc+r<#6TxtN@Wup z(4p}OefZ!>qf#2>92z=$9+w+5Jk-Ao4>1LN;e#S+FkI=_(&(~p=nlkQM|j)&0W4s% zfWlPUOsuzZ>6XTYhnaH>KW|jI-pIc zUW&RmSXC4ZqkZoA+vT^siV5nj`{8P#B-Nv6E}u64 zT!WCmirTeHmxzD>mu5HqDik5dbOJo2?nJJz{YWa~%mAYr_DaL~;krdlV;G`W9&07C z%-N0RUKRDQ(}+__W6%rGuVN7>?xWI62TB8=;F98Q>s|=zqS1-OVwAxC6>7rqXv7#+ zU&?|+PEP_FAVgymf0F$Nlsr`6r!gEXv^oRf%j9afSP;|l2t;q$Vp)oeF&S+dr7s;i zC+ZWO@CGRc^{^VU*rZ^iF5d=Edc4wbDMEa&IUn?U9;n*3Vu#r0pghNrpN<~BIfF{)OHJcJKJZdL2WIC^ z)F6ssh3QQA-(G&-d7|kyf$IfBZ)05t6R;qqsCsDRJ35`=HKe9)17zq#Stc&+%0#4# z=^HC-tQ?ph!@GLThfL|j5?g@bv|Yo<1Z!dX>g-2_62z;wT}_NjL$-GkZ-$Jf7Mg}? zxGg3)N(&lDe100Zq<13IxnUwwA9}t&4)nyN0gU69%gEj+@borS9zXcf>iUGP z?ebUadN~a6d>lW&d8q`6siA__7ok=2dnTusT-079#>I2}p;}m)1@OSuuu{cb&MlYK zL)q}8J?Wsz7k{1qDNVD%zE2jE`K$*SE_=(J;pk!c9?r1CK%Q9P`u(QXi(2fATq3GGrF{6E3$u55Ems|QR9W?JL9x4-of&qTSh|3n4K-B=*$%L2;}1LssBM8QU{z z!~VCRl-I8WDMz2VPf-+ej8I5LHu_E9hgl-u?dh?6eAh~V(@T|xJ&g4G(cj z%7-~nu3&$C!=|QbIVkJCH3(Ji_obUE@xbsB*2Z=!+v1d-_~prt^n8^MD0mB=4J9m_IOwZqAa1z&LLX1jK?10<#bwC);| zhC22DiY2ikmU;5e%NX)2t8*B=;QWFN7uL2YOd`5TZVZLr_~)c&K{o{rg}5o%ViMa0oW%G3!cwc(nQjE4!`m zY5iMFv~`F3VZ?Ssd#6!caOTp={HEcW59U3Ij001YC?Am41$2`)YJL>**v<#I|&(Htcp%NB*)*v8|3?^e#M8jW|KqE(bG~w_(1!cqxU4>R6F{(eM<~g zMs|Uo{4!^qm_xL;~wcK2QQqvcx|v;f`_r- za`&ilF1{ZgYRfY+hL=aC7qy8B+kq~~&{SDI)JMvoKlRQ-!s{L^Dvuc!8&eA-ODNb% zvo`=SV6j@bc|(2&V6v9)$w*1{!s>VWNQ*9ieC8aOFT*jIj5{K- z`zS}W|Klr{2vwJsHCV?iQrBsOZXCezUu4ggpiLTCImE^{yt~dvc2pK>z%yhxdB|q8 z<@LmnmvJvG^X@k9H6}6X3#=mmqPzd&b+_84pOpgHwSO`B&?+P-FIC&6icH3tI}51a z>i$zCoF4pS^Dj`ah%_wT_cEJo(0|5)eI*$_{zMR!?4RUa2{L>dpzTxzIH$zav#;rs z{=a*5k=ilodvAY$Zr0D6!`1JQq06sx!i7}APsl2-3{~J1mKZsbd!Wh$?)>HRJdT98 zcx<{eQIt)V^wcbbH*&NA`w(s$cH7IXCEdXEI++n}K$CUpD4GP}Xhn($9%jpK`})ofQ2Pr0nZUhA{L=p;4THhGXzndHC3YFkYH zBNfGHp(+g@pbP5K7+GIP&~OupzzT19UV3YaJtZ$!_~KUuF=om>hh&`*9bFX-%nl0z zgfn8AsrsXf_)(LUdgr9(>%eOW61pfPbmKuaW`Vio8n81BGd^lsR2gdjTKC2iVC*r& zJ3HU>PW(4X=!lH6k^y*b$Eafje<+!pU)38bm(Fe$AfVg#ExdKn^plk)N&u7_+v~I2 z*@{QhDX~1e2ssowWORDW#>>l_?h9JgvGIFs&}ooJ;eU%`$qpSD{jZ)$^}etYZ`aUH z63b)+3E=oX^OrE2=SXu+Nk{K7?Xpv%1pLmr;WIgZ{%`_*VoJkKQvH3KUxaYam03wZ>aZ@yTyNmEICyoWIYy zn&9jHLOcgTV5$Ea#0v9=B^L*VhW_L9lqlaB+}IdjC9_xLWrhPKvPXAr)rp~u|Lg&N zAs(9Bhq$`!EM(Hoc}m2@q%l7DNz|Ar3i>p#Lx?%Cae56MIc_N zx)vn()6xSw{D3a;524~>*KLCusj-=t(1;B-GALZzFu1efAt^Wm#oxjyQ1Xx@oM9!~ z)j#v^fg{pD@@=9TJ(1aKKVfi z{V08mz9wR9x}CSU7er-g+jWw=zNoVZ6zKK}8vZ}NFh#Qk1H}hy!Hqt93eZyj7wo8M zH6ZLct)}WG3*|wx#saqBP*>Lv-f^LkQ(gJFiC8x}YW4XPk{KUSMG zDzX|O;$EXKEk?ZQ3emRLCNvLtR(}{_ zCp}Z8xSbwa@~+d8YSLBr@0U=2X@KS^_qJQvfY4*HdWA)$7aMtE)ZIy*8FM98fsYAt z5~r-pnO|}Zbre*Ipw;ym5hDv{%-z)nK?Iq4Wq|~lXm-bYb5Ze1tj61`Rf<4JVXWA{ z*X|!2&5oCBdJfVei_fIs#1Z&g4Si{0C>ry=Ke;OtFrtTYwKB}bNbLD}IWx@@+yKJN zoZK}%+0`#!E{Is!>vFscIEt_PJ<804m3EZ$2{dUMmO=Y;Vcpvx*l&9q1 z8aJ2L*Ym-ZqxGvE=>lSnvZ^Xq%1`eHFjy%lXy}7Ux}0K*zx#Or9*E>`TwY$z70aW= zCnPkP1ij1U2MIV)<}cNgy&YZw123P%RNv$SLbd8wL+_5KXgbpL-;Y{yqb;UCAkxcZ z2$@~S9G(GjE7IfrIA?4PCH#a6*37$4IC!-Y-Ldh_6TRZx%>&(#QO*gJ8VmBlB~Hq_ zf`Y~!9T~Ha9F@KIXwMv;O6#_J?hyqY4UwZW5s{E6dF{`YfFbr{V`HUY(5?9v}0~tnwXK<%8Wi`+d!b$e8ZWxL|(qCU=eg zK#Voh&2v!Qy)q^s8;bt8nA6$ul2=-^B@nIGNGkZC5V`iIf_EMRN{5jWQH>$Uw& z^1P7yhERNh{oeDRrY%x$2}xhb9f%prkq^1>B>n>AP6kfoUt5&K`!e-(HeE1`N>~wemKKKG`t7gx$e#UN((m{D_L1^Q&llGoGa@pnz|AOfgkhbz z=K!u~PQ;AuI-ncU>R$diq%pp7Z0T!YsEm}t*~v;qA>m@-lyy?CqHlfnsXYUg@@`+n zx~w=r%*&qg;a_d?ndP_Qk(c%ymR~nBv4s)3aLy7D64i+&pefPc7Q-UM%bVh`P^$%i zDK-m>^~P;XJep$vvwefq#H{XjM_MY;y088g#=X(~hNmA`=oa(kf=fzD#vCV1Um>1X zawaqu^}6jOI|ju} za_$lK2M@H;m=M8~=?EGL&sdq;i>JB#Pov?w`p4ZKJJ6`e$W%R$=gL2cFNYkx@bJK@ zdCJev55zgDY#8gF3z7vO(8$a;H#gx;&$KQNwuTZKlYOJ37?*X$EgQVR^)z-hgeoju z?UW^Jtc{E>179ej#Hy?Yqt6X#kH2EQs(688kt@IePmY-nshHLNBEZ45P(Q~iGLwDf zgIl#ms}S|BDRS*XqF~bOO%2gw_LYQh(iB$Ct;A&K7C~pER+E-a*7C_miI<{Ii+m1W zTHdZW<;Vm{BvA@R18SL_*AoX~0F-2BaX(S0>pIrR^h2@#)#Z1x`^v7cS}qq!WHWAh zhP&$ifwnPOL+WD>KxjX2_{;#X_4(!Tjz{fOzPSEl{B>FSpi@GtuaG=gPSr&)wWte? zu>FjZGcgTON?g36nV)8+=?9oH=Vw zlJNTU=ZrGJr2TV)o~=i=I~SR<>}+f^fSIFA%=WOD?13>n*lg#8ZE5)G%9QM#DGyW* z{dW%%ldrRoedP^y|2y9!YkvUL!?A`5`?t*Mw~oX81LIQ)tL zcFMQnj~rS^WmK%;epa85czudCH?JeA_Ow2yKO8GTg8SJgZ|)2^qu-PXo!|;G!E|nX z^Al#Dr*D(d7Yry-}33a;#$dHntD)eqZD5vN5t zU|Z7A32m_UJ$+Wa3@IsR>RQ_afIDG?9R~SCi5!dyVx5b*=QzYvuATNu+6`TBq!3Xa zC`x~cj(w2?6p};gMqVF_uzX4&d+028SgTP&`ysZgYrKL+BVRQ-^3$1NwhJo9)SM|8 zf2Re8pq2q!p&u9+NcjYl@fLss&+l$;PIt>v#x4<{$zuNDNBuyHQ=&9&P#qHZPhQ!J z8`+CnIVq=54kd^~@nUa|lwV_hN{%7d<2S__86^JOFI8&@*l(_Bf~G)-7yH65@gB2| z8E`{za(U{CIv(8yU16H6i9f%-*zb&G>Lt}Q!uxbsK}F8nwLuZunF=cZYG25>N$SOV zOVMyRz;;YaLYB-9l9Q=~HF!GeKVhPbO-u+ol!bSMoJ@$O35BXzPFGS~KJCL0I04mI zeLy{|*eCbSm#6zSRm4mFfCHyROee4JfIF5Li<*VSXayw&S$1r}k3=I%vk18{NaIq| zdsHOz;0qNswWiOSUsWVd0#B-JD!E#AC}Av)w@A)ms3wC z%F{3lv2l5M@_i?;m*x|`&g=ewpfmn1!}7!{B7LbCX9_ixa*9O;9WGt@j`Q`9qT2Rv zR2{!szNBW}hwAPvHk9SdA|Z%l4fBTTqvLU2eLz^;jt*6T|E5Llm-W~lX}q|&?ai-S z$!f%U)B(5*EF0}cDqx@nlJoai(e6uRp$fddDP{E*>dPFu@=DysBCcx>0RUF~@#8~K za7};*=#uGQ)mX&hZ=vgdhOrCG5lSvT z=PK+53^fncR>1G5csXRjJz|L_^!yWpIvhDO&SCw1H;ab`3jr6RJ?uB)r4#3#n{BC{ zG$5NCB{Fb|4U8D^DZwRL@0U{gD9y$$v8xj$+fmJyx7+OoI<%X`1LM3FJ)+U`2*tD2 z&Cp3M;*+Hp!;VR(_uHBY2*AouZjfZ1niOArdxl{)5gG!^^vaKpH&7{nK?qq7VyP4S zrpY79X=QlCps6D}@T?DTVxB)f!`YMPu5aKAzP^C&mjYy! zGBh23g-Z#NM^;}Q0d-_%Zh254E_Mfmv%a6BEQBHx3uG2#>$~*8+Y2;MLAdB5!mm9^ zNEqHc`$aJm$r$wPQFU#gXQb$So%1XATBf6Wy1Gx^tUBHenimCJtEXhq;b1Ca!a8#U_@ka~X!x*<^GdMKF~#a%4n})4mUnw@?upDRAbjTTc;q(Ego;Up}}^HT19D z&Arly4n-ncbLS4Nq7*kVQv3q=7ZlI{YXBs{9rn%oI1_970VqdQnz1o;V3 z9!l0AhA8XQGZ@L?LKhi1!l8)BH4_eXwRP9RFzExH>~S-X?3DxQue{qXKF_?r$p*L= z1&k{xeXZaj;HX=Ht5z|Iruh9$`WfhEhuk+^2D9H+qQ)9+$34Aev51WrkJ>MfKF~uf zjO6$j_*ThFP#Gh7AeBET4}5GkBiwrJ222vies2!!03O2J6A0t)mtbC5jsgVLW-NnK z;+HRQHnb;w>si2mI=0rmdnXj5BX3Hv^?4&Xo)^j|VpO0oksBVTgAl6|vq-;(osoUd zdRns5vo^!X6PkHks~7sk0FDSm=%w>qvRkCov=iYvQ~hP9xh|OGeGRplXFJoXzk1we zacZnL5e=J)ra}{{&#C*aVcz4Da%a>0_Y@!i~@^r)@;xWAve-%i}RS_92GCtN}h~g zJNU*|PDzEaEpbyG>xkpz`&2fPjni4$Yxb+aXKh+x=yDSa-=%(|7oYxs8#&mXOs|le z{lc4?=lLxOG&3GM6Te56MUdQY^3=9=KyK%1zQiwbMLM|2PwkG*!%CV~tf&n2hec7h zeijEg@Au;tj~l8g)1H--&IHnOn97*71@z7RHf@ITaoB;vPDQqP8X)EE`Eq@4aa)MA zwb}htB7;qe3EB?1;h!*N9Al@#Du_ohe(&Izaw|^sE0kt*w$Mp`x zoD3&lRFZ!t(^h~iM0b+EFHok^Z(>-(cz^z_b;4~(!4&Ha3x{v4yqr{R)KAN2^4!?N zao)bE$1HG_B&v!B+|Nqyy@N>VBYL;2J6!u_Y{+7%rA%}2ZQJnZ$Ovs*$)t3`D@I48 z4#r*oc{%jAW9f!6qsQ?bhOI_>Ar5cu2R;jm^XFY%fxo}}6&l!Z5jrkzq#+Z?txQ+Y zXz(m$l1Ok&FVt$W3l^6nJuYZNjSW_O_ot*<(xHqoMaGl z@@tbx)(>)YZQzGAjPwab|MX$f`;r1g%DUnA6VrOjuob{!l4u#sPiWGS?;?A{b0Hbl zLmnFv|Bt=5jH+tu{(uodN?Jl`;Sh%g zL0UQ$4h@nLBHf*b5Rqe=~MdF024^qlq44G7>51_2qcgz}=v?uy(d_p0V7>!Q^QwHSHD$EF77wx8kUW zY?|Y7B6@mX8T(So3XvB5(9DI3JARVka-x?>A@QjMFOjL#>9>9Tpq;-UvWIUn``8#93%W&M6W@iwg+H9Q9u48g(9`i3&$?OK|r zB3kjX0J?5ZZK>NU#}-~nD;P;qJGDQxB8R3f;e}cI%l-DJzLn0R($P zvOmtfQ2{-E#iNgBtK=J~^KwQG4b4L?AI?-y5z1tN;_u>BCqWQ zBaBV7E1!k^o0~=E_Rhr6lco>yuZJiIkQYMHMx;LJ=bO@N+a|i$$9tWKO@}UB^Lwnbw|1Ze`*W zCWQXU=>DV8_etmNmNHRMCjxVB+GsO=M}u$K?eCZuhKZUkBtqr80x>^dwbY2FdHnqD z{WC&Pqbs@D(?G9&>7#SRoz5R`d-`_YFR%EQRIhXdB|!q^f2!jA%yC%L(sboqYuT+& zJCuCApUGvgT#5NCa)?lbY*0h?LAP-D=)?*6(wqzNS3J_P>BTfBwv(+z#~b(oo`lC7 zlHuzg&@HKEc|O&#zOvQQqvjYGx_2fabg!j&hh8n^Sh+osf|O7NPonM}kh@pjD0A;{ zS{CXM8HhZoL6{{Ou|XaI zOQs4tjrhGWb+Rk>)A0wTpQFO8gH*mBblGrM-*h>D{>5VL^qsirYPXkm>%JXCHUEK% z|FvBAmJJJ3O|ok!k6akQb4=Mqtl!fO*{m>H>_g{qY}l>R#~4S9`2aAUXEV?#ugnY~oVuT6aBVxK{~WU?OKW=~Gf6^NH#4j5j?;S?!yO zZJ(+8rZMgwbXW2kpe@L9^dr8HPyRgigtFOo^P0D#~MU5?j+|(0?oh4 z8BjG(`j9{|1DrHX!BXhn&t^$!uf8o{A(#1WCVGArnO0NJ1WhdWn%FQVLxHYr9v{h@ zLQ%+npe&wMy(boVkfnyRO4M(A7d567B~;rBA8J`kBp1+t?_iVHhEB9UeevTFJcN+J zg61U>sB=mHRTnCcI@>4aE?!PwrzzNqWfG8PR!G(Re9h5qGps&PGcuOU#V%!-5Uv#i zy?x&HxgCT*8GRm!c4%|>yz$CxRQV(8M(@Ix%`ss^O6SYe4Bo($D;V=cfKOA$m4q8! z@JX8lKPE~A6J^xdM65I3xJWj`OTTV+bem3vBn{PrfMB0jBnQEs#Kff86y5rwcsCgD z-n~1`ie(_0L8;5|?9lJ~j!b?AyB3s2vP=#Vh^qS`>aahIHh{7H&4SOZW41f4nf^of zj5HRcG0FpDQc{Y)Dm*K{ogu)`tPZco8A8+M_=o{#BfDoU{Z}~5GOmTFsbQk zR_@I&X5!C_bXbg5m@1^YqifthnV>!4BMlOVaEPN?a(jzKcG7GaIgJcMI?|6Q(aY*&$Pr62zUmAiEX`F!{F3dx}N0#E0yC2qr236?jd zWG}O@SweDhAi?njx)~}W-+npxdNVj<-1%3bNc7IXVw$fE8qL%?k6`@9GnlU{ve#Hyzo(1BDYp>!f^6m<@86 z*}QMcl49Fz6ET?Oc7GgVu3W8Fa*<1Y8|`o%FE`9p(9m@71?SX8Dk0Q#^mIHF#&nT8 zJ0VU$IABYaGPLK+hnE4v2v+|_F4v}y0!U>d{GMLzO3NUhg+&T^g6pZ8_zHdD$}?C# zibj6hTZhfb$5YMoq1saK?JwWD?=7ew#ydlvHVR$tm?b+)#e_?e`iI3$cXSru|48S$>@pyGU(cFoZX>5>Lee|Py*UJRvtE09cUa1pJLH~d|W z1lBxnIM!0sq%(vN++Pf9-@9zChf#WX`X(`Jze$H+*uU%>HIsE=^336LRiWh-pS$}- zrR*oZ!U+Mmf4+KcK(4Lu*IHJgP_-0QtPUx<$?_cZl7|65%bDngvnm2fZeYf@VG()d zrlr}#5=>VT-MPhz?~qV^LjLx?J$`L8o_R>_KqF}FgCA0mJShuTo-A^_s9|R(&G2$| z%W$RRe1-w*f;hx_om@^wK*wf-TU;e(2GtwcrCwAj=(Qf79pyL;*iW}i|FPiey@UyF z?*@D?eCF^C>3)=IRpHjhI~WD;nU(V=J>2>E3GyHOvbxRVtXya?iIQ1gkUkC;hwzD` z)+%bRzfQF+t?2BN(0rI+^TU$w;o>F-1Pq;vHDn$u>W2X~hBTk3;T^2}1Jpij5G>oD zL2VE7w);l&%?gWH_7Xj)2ISGqJ2I{G?GT5Kpv?Nb;Qi*#iFgS=@f-)feJGuwD>%Vi z44&cczk}@}1qF-01#8|3#3XLf>MAOpQ={g$h>Wkmv><)CIS0kIl#%O~hWhehVUU9r ze$auV$Wr5hw<3#uG4h7xYgx7P>1M((N??nu(#UXnFw+-VTahRqV*PT0`XUD2SEycQ zKd@omwZ~Yj_g{U(6C}@{Q7#t`b`B`)VX`Qa<7A+(=X)ppP-NR~-cZ1bH#c84@tAhI zD{NJfU9-LP%tL4;1l+;^6(a5fF9tk&dbKhs4@O}67$_s_ha#RV+BQO{njdG|?u`%i zbp4qS@jjNW;6{LPzf975WH~=^pogN43C}S_02?fDewpW85PGP+-~_GGh5F4gTE)%m9YSZKay z$fX(%7_x71pePCn10@0wazRTYKd&NC{@F7)`E09!%l0gr_W7}#jZH+~p6b>lMTs)dX99?TK<+5z2lf1wwbj1uRKb;t5fuf~4njIu63V#k z9NT6MRg^%8bFFVXn%{15a)QNU7!04a7~qs|9u`tvGZa~zs-eo~bq_GQPpM!sV^-Y>oHR1b2zlEo|>VbFvmO2&m!m zVB1wbwkb5~YKx=(cpdsWyDT4uId)U2ydt+ON>m;HRX%YhrPF-~l&f#^CT=%LiFi(a z8O$M0bgGqI)uEy?N7mZ~8#BJJ!L;M7VeJ0>IM3%{pou_C;8W*pffij@k32JYS@fbk z0rd^MGNvgO8f+2J{Ih!7$!)QNtaa6rUv0z+55pmP%3<5taEpvOOK@uEI za1b(e%K7NG)cAdX_K72_iy@_t$eJF8MMNYpnqnV5f6{)!s8(nc@AibC3ESEum4g>wuS741OLGtfa6tSC$4oy6rC1&eRLHCew^z+qL!wN6`2cWOls+X+1d2S+r%dobG_dC>=-~X` z>YarOjw#76*AP%8E<9juIgkd=l2N2pasd~Exsee7 zH-%C1YOCnD?s|_u(~lL04A>%(DW!{db%*vBOvM0UV@-^Yy?;Z2U_k^*Q(<)n{J;ZQ z2MFau&Ll_&&p;?%sJ@FLGTj0ic-13A)JkZOJjZ&)&q6xD3-Jf;)&x80V4&-PNq?X* z_z-%kW9+9sliG!J_bphM4?W#9kHLEaNrEM4Z{UK*g+v!=09TshgYzws`%6!&C9h56ONg#ZrLgPdB^1#E6=L zNfcNu(bx%N#^Y(B;LtE4mhB&(8YB7{41$8qDoB4r2W(<_7uVTC41>Ve&q$5#kc3{b zzVszAv?f63fWNZ9S78;uR4e*cZH7ry>gE=MB92fiy{s5$lE^etZNuWI?FYWadQf43 zV^fZ1s#YEhI71*5EYqrzH@$;T_QPEKK( z;(mqWFwB$?jXKCcxl4rUu{i*FP6#j+W{ON=kov7RU|1xIjMj z(SAucUc|u3Ii?^bmZ<{0m$nlv+L)#!KcUEKx`7qoWz}v0xCLA;fEftx7ilHHJ`N4V zHaEH|SR_ji1Bc{Q*xL?tGh}!9e3r)stcPUu=9wx_i!p=b`Q{-hf*3$kgDVbjr~K&@ zYE=%<|3lk)G1CpvbUgWFpDio7f!c#NU3h7inN&ZJwUEqIq4cwoK)e!hEyM%1))b0& zjSt`0v0G27!qYdJd_bKkGE_3_ zzLdq-tEg-N{Nb!;+0$}DDir%I52ef8%dS5otjROWPW+f(i;EJ?K-l*v_oV9%NFHa# zyho8cd+T*-uAW9dz?q$|WldgiWccL~CI=nHQTHp@qiFez2l+%ac@!kf6grY}R<}_V z>ShD324ls$42+5m^pOY7)b$;#WDo>^BVOf}OEYiG5s1mc=xfUsSL)LrZ|xa+G2Ku3 zA;fybNUx$%+W{S>r(pA4ZfYIzofAOJN*EA+xGg z5v|U9X`cjFWRXK%Zc`!CDQe5@5K^c=(NT_rOYLD{fBeWzSGrJE-DMSpM?yp591*{) zngx*_Go!f?3wA@!zx5AQsl9-l1r9wGe11J+6U=HoLwe z;(=|(5^O_8?#I0`Cl*Y}zN;;xsXDS<=Aa7g%elO{4xZZ(`i8eDuHwZh(`?d(MH4J^ zNI)wz;r`xWS?UXf@-6O_CCO&p{8De5lg(P${{x>f6M3^Y>yZP*I*EWu-Y-K^Rt|u{Yf7#5khu5DOww^VUf)w;?5~ zm?oqz3%Orj8`a2cqQ&TRyHr=Zrl###yg5uzg-sZu7-7C7wH`OdKQ!|a5Y9RwhL8pb zCPFr&fZ`^&-%o&^iEPhhub*J04Buyb#l&B49hNe}q(QLc1!J^fS-{~n+od^mlz{i$ z$*u60dX-)CD*Ec{a<;Vd^||9_nk}m$P=`xcFESU|wOhm@Yb^7KiSO|Q%l}#tOc~IT z2tt~11jmEUmkuP>uLoB(5}Qcsn4X^eT<6JFY*HazWjU{SZQ4Zes1cVOr#DzV*L8w# zeH7Y|B3zNA2ex<86e8hE3B0+#_+69(pdfkKJT*V}w;v z(dvgbtW7+o)PMVvik|6>4iRWt-%!#1$}$!1y3eA3i^chdgMA`jX*pZk*&?SWLi0~} zyxglOwEF+DnD=!YHx+m1bA*>HE^@1C6vriwefAnxTN{j z7yW1l(nZ;f^@|rLDwR&{sg^GbZ4(5~=wv&l(^%PqEFLA8JrZC{>TB>H&b5!zb#O>| zP*PM=RVu0tiU}1qK~|2OgF}S_r=UOtXe}crCI$!n8S6$551(jgBv{SXDc69m51<9g zFeo-RAI=Wx=kfXxdZ-JOOWodr;IFN`L4b~iEcG=DBiyU@wKba^~LthF8+@ zCJlvTB?b>^#8Jm4qK-a6 ziPaFrm77*5~_GAo|uu%sP~J$n{F z?Ts?(YD1_>gM%wN zlt3od)$vuchtYr-E?!DN&}vEJc9vE_8>Y%H)9a5i^^-y{4nc-+P;ano_7V3cw? zS=QS$_L}o3a)pkQLC{v1Nq?Gn{Bx}X`bfK}J~_)v^O#U{2TBQj{WK9OA|eP#P8+fQOvz@(_ncVEXu;+AktL;!9(pPWkH}dS z7mZy~tM(NY+ zPs2&2dLL)a+dkSzq5C|R<8evcW|%Cj5-)FmnRqFh#AW(=YqnlB z6jSKpcymH2S1FzC`h5PnDs%$WCcV>ZvS~il=yCgMupofP4Z0KsN9eept|sPy;wcA^ z*CkMBGg&4Es_U2$;eTRsJgT3q*DV)^69!LbMZKy3QeVfAPca5`zIWY^7EyjqSgv(&}%8;zFQrV9KwA+0*0#E zt@uz8l=&}MZ=jsXb)G1(w+uB^R^HvlgVr7vGCkR#!f_c=5nrvn4N-G=ol_t%UZ5T( zlQ}GkkxX$ON+&ZG85ths0VRfP$TnSc>veH`8=)m8GF7QB_QYDx6tkq+k zPM4s$QF?Y>p2G3=*Bp?G(2xK^Ma6w@IE}MG9r$poukWQD?nBO3!Lzfv!7%r;^}K4q zq{{DhR17Q-JNAIy_37%OllyAV2j0+Zj=zru&#e1h0J?pwG9RfjT`eps8BU-=Cwi3! zx}z8ffT~?qrjU>jE{}s3>z^|NbiH=FA~GMR@F|CKqEj#v1OK7qEl{fk=z8ON9eA*K_eePZ|CnX}^m46#{p7*98#G43u7!QN5nkG+kR45x|lh3d` zU5c>UsymqXa=(^MD06czZY6*ceN{jeNA0?85j^QvG!d_7Yd@ss{ zjwX%SN(|B8%2;8sK<#=wcG}TahZWf4+4LGRzz2o7hlFU$+(hrhL(~@D9)gN(3(azn zuOWD*TlqY^1}U7JUnLSlJO?C3J(cB$7Lbq{KYjXE5fe$1T`N%EZ4nhdmM0ZTJgCmP z|5m(5MG#)njMWy@HCu zElmx=tzd^?Un7$?bMWyV4aK=s&HSb8bL zh*roOpS(^v%lO>7`(3JGn6rh3Iivzk`HFH|ENUXBD}->OG%7Zhg1kmi=vUya|$WiiTVtqez9s~i#;8NXYXrdXT@a*#}ZGw?KLLR)`LjDvm8sDo&vSV5_&UoO+62C1HG;! zwUPVAhq=gy3;It~6fkmwVW*bHaCuu6j}F-b<$R~1t#ozi@>blRnf}IWE`@An&S6Ab z6DrY5a{1JTm#1s#6E->^P+AfSI|Y)q+I&1mh?34gNB+bcbd53Szc}5eASTk{(+AP< zA0oFlU)C#O&Gz9f`%}AVsVy9h+{I=|FU?FVn zXsM!nSo?!LqBdvj?K%-&^pDBU69SFcPz9 zWmLLk;uPP@bw)YFXTgpBQe&;toY)^s<&z(9K*P8(T0mPiy5NEL=#}bJi+5wq=Zw;1 z+ZJuC`yd!Q8bJND+$bmoB)JX0lffmgu*!s$Zw=co{BhR|F@TXqQ}GxWoYQBSOKN55 zn6F=7Cum^5%hpWP`q3Sv_5qqL9-8oo_YR|GxfL98t7{fCJ;#mStDRoi4L#7EO3==p zX@BdW(X-((;mJ+*#zuG0ms-v6D+ksQomdK5g)A}iJ{g|50 zj+I-Ov-|ZGwME%AMllVZ_GA^oWxT0!dk`_Ze(}SU2P5p8p*jatm_(s$DX781Cv&bj z3KovJ3^fbW_PvND!|)L%b|y(%4OlTLjtW*}YBFRdzD`ukP?*b257?X84_*)7NA01p zz;i^-G|JbzPiP^@r(17l)pdq^x>2h;<-JfQE0&BBUvcu*(NdOqOi7&x9S0rd)g3LZ zvgHeq{8m^Ar(sTH(1cdOUx-l)@fviV2Vs%)fi5Q7W%-68c=tSyx5w_Ia5AKwi3_6> z9|T*OZj&i5HP!m_k)U(EA}b=nBq}P+aPA%gr;9doL>xF>u26FG!V@EyQtv*tz0MI4 z=n%yqI(W5kjA3B%Q6&Dx0L!G#YMcwFgNuc8{6~cl0*K+k^YD#_!yfH1D%n0q1p|gy zYK6{Ed*=mX79pKa!#43qs8{i~F zffiOep=fmmK@MW_MxBGyBP1+h8tiwV8U|t!>3=->3kJjWgU&0ZL{?GiC~?%R<#g7d zy{Q-pe=EaWPm&VCykYEX8PfxQXH>xn8RjnkgRUg)u9)&>*mxly33nsO#=BBvh}O~8 zLplR(Lp;&>)i)bl3j=)3nRG0?@!E)9d!fXv!;K$lrAM9p5j8^<@0 zA)?ZGvcZ^GMr4UaxB2R8XZw|13j_k`k2nC*}0Y5{2oGqVB~vB{#p zf@Xf=!GV*oz6pAz1dyW+r~}R)Ia;6sK;5<5RF+Fd5N1Z(J>-XFM4Nl2tGVJ+6^$^= zNRNQ{K2{CXPY*3KTykwG-v{iHyzd6!wDaM+C9SCG$$IJt z(=-BRs_O-)2JGjy0^y1YQT`ACB6#+}vbo5i24Ew<@J?VY+CdD>Gr3r;Q>d+{zCVj) z22cRAz-CL)?aZYRoRoU6@Zceh`)mC<^?T6-%(-NwM(W$&byTC&!yruv++xB*bJeOo zQeJ&{tr{`kw)nQ!VNP;|GmJ|p5s`^&V~`=tVTHSnQrsOA1)Mo%_nH0L#mUn0Yw!vu6d0*47|E+VkEz~KeJ?Imug z2Hl^(5`Yf?V8%O$Vo4KX#v8&+)7ufK!sCXmnWVOuRkDMblGLYsRNpLr%?u8u<}g~q zTenv+Sf8r5{ai|Eml;#z6p_seswEEZ(lCAe;V*KdQ5OITY|M8>_Q8wOt4lVLxPz7zilY{*4sS3{;KSil_(8lmo;=~1cS_o@n+QV^l>yQu*6`?>vfxco^B-B>AE9A}v-!A>wzVBd#>)*PP>x{#0pwy{F@L8OT){gly= z$fG>V@xRVf0(1n7LDRs|POhOXo|8dsz;(PGJ#8@*6Zbsa#P*vA=cq3W9c&7vuz*!O z_TG5nVX|v)&47eTt-d!17U`qtNB-gb!dC$BA%d6o^&>(zm{<_z&5W(NYKbGW?Ra42 zbKV9q5#36=78j?-VWTCnjKJK937iIBODS{;#bAXldga+||CUb|TEOSEM2F8rOflj? zB?nx66{Z-m!W6BdruJQ;v{)P&4l#Va{Hj+rm>HLR&5Ks1|x86W?INiREtE9mvjy9RNw zNF#)agyhKx*IpD49e`ws*$q$Vm^k^-n;Tv3?i_U9ftL7rd#{DUcB|RPY2mQ@fI;Mo zo_#9k5H9DL2!97+Db(=Sz+@?4Y)7ijgJIywx)3^m%@wziV|hsZRE?$9gq#C0U6epT zJy8ygCcta2xlM30L8K4zU?S+<{omXOhasTK`^=Ky2UhztloW7#TXe;5EE+Ha)-SOb z_;+;U&%;pKe=uhcINJYTne(H29S{q9h7ZSow56dQBEoB>x1}!V0QPWos0a)YfF~stpUb)l>j1bQJk>o~1 z+@N3nj1w0TZz(U#0UATgqMlFdkCg8q;zrDro@v>z^0fvBjoGBM?UA9fD6wM;RTHhcYi#n+U4??G?BCZ3Tb<>HA4~f+Ixa` z)=WB+VA~aG?Uw|C2UcnEer@ck4m!y0wKp#MA2^!vmkA1Tbbe_KWPlMu7Gyh0I@*t0 znDtbWL7*Y{>#*YoFxE4~-z0625JoyW4($R$T}M3F63B*OG(y$_5o%HNmkJ_-|2tCj zXY#}dUNK1m@CJb0!~768^QpM}rQg)0+lIAUHB7SmUstaWSMEb%;@;?*;=Oly25ge| zq&=I=;G8p%E2sP;5P>3ynDpl!vbVH>u#bbRw?DN{S*i73P1E&X%`!^da;lvg5O)+% zj>cDE5D|EQ)}#Cf)k4BJK}3ewb&DS(U*U@yZpW-{nmSL@Uh$Y%|JgEdVxT($CVb{| z)9$PtQf6{`%Nq_fB+9Y)Rw{^^QKL*BdZ{$HSTLy?klu;9n#A}uDbZ7a_Qj=B=={c~ zCc}Wt%~*-?Q-EO=2+OKqQ_=P6E`{lF-PRBhw)SDH_I8kijX>J|y2v3MULTwV%r%Av zy(9kvE4wKCu`d2FG0X?dZPlzN;m^N+(^nK(3?Z^~Wm~*X7)`v+(b=Vwy=}9f_3lT6 z{ZVTGCl3@4dMGxDZ|Jd9rsJSExrFkjU}y=ecM&lWQGUey|0oG03=l%kWhfyZY{EoL zFz_Cb1(*(gMDVY{+JcZ~c^V76)#{F;v4~p`U^N^{gRsY#xrR-+ zy_$i0Bj_&bMhJ+pqwhPI2If$OemmVRRq^eZs_-USBZshk8Ahe=??Vw2f8k{$B2bB# zo}o5)ae|%zPRc(Pu?3PBx>_vzlm5eNh*$WT0=jCstn=;c5oD0bxqmFD`0tjhQ3AU5 z8Gm99LI>o=K^)$H!Wn)jEHZx!SrPSrr6jkL!r&M)m%^wJ#!zFs;Z^?`Qq4a?sLAG{ zAC8!a5J8!f#}Y-7j%m*v>##t5YG)6`ErlBQFTk`Eg=kn78Yu4Z0q5IqaAqe=_?awFiL_L71p13C$m7`@e4wWQMPsFXtG`o81}--o$QmM@ww8R3(u+dmYYo7$nx- zjOY26{RNmL8AP}}jFR7@<{3*MKUT8pkXntidg7OKX4Tx3LJs(#3vo0c5_5iY)B-{b z7s^eCe$AI1%-1)hT;$h${j4$C^eT1o5{9c)v1SIN34gJC5#p%nlebU#GwI)Jz>@}4 z`0%2fU;Wpxf5}D}=D(>PGdl?%#s=kuGKP|OpSCCU0&6AAe66gtV`+6$_&FWd&{vU@0Rl}4U&fr&{kX;6 zt)ZFv;j^M*%OqnKYx1=2i1KK5Msl_}QV&7RdlCmvr}--%DQz01F}#CH?E0SFa+69>u-h;2^$z^ zK}>4?5pPHUyZ`O-1W7R-MxHD;%*6ijEZqVk8kdSb|1bTo#t)PM)BqU==)=EXZK)tA zD2U(kH)cb;Cf@-_qy~1F7abi;1zh$AunXB0fFv3Rf#Nx@{gHX(FGpvDi3-cNs>vPm zVD=dcSbx|l$}f*07q+M;h1|}7q|n!P-AvoBX&b#JeV~qeO(C!AG_KjYxgYt}K3bAd z-4HWAH+-XaoZ@_SX5CemHZRzuG9cvVHFarAGpsSnnU8)-D&LKO`nll#L&}=3o0mru z^z}zAuGLX*_hzX>LLwd%1+V^${Kgs^Y;dOA;D(E_41hfl+E#oDb33B{AtOrJLU zF?x98H#n6e3eRyVV?NCs%gt!W#UvYK%#M!tAL*g3)LlOqABV_D<&k(Euf1^PMTd_l zTCg4xEK``Jp3lT5gvR^=z+DaOoOuplYRM@h+N--E0L7O$Ird4ikeOqa)v9+^*-I*c5Ect zr|8QXQ#>TO3%=YD=&T)Iu9xtBmc_blx$Zfe5iXmrZ|O{Cj}|Sjbi(`T;-0TU{K|vh zhr1WA)<{td{^$fhRK!7O7|kb1V8>v$&T8A&a+81WN0s2LQvBK69VqR~!#IQMS;iu6 z7uo6289m)H5aQG?QBH`or$y`Sk0p`qr*~$iQ^PRa1YhtV(GiwERLwv4JvhQzt-w7mK{Os4G1;roi^oIjf0tS;l?+y{+j-hGTw$`xmD}ymyaw&MO$WXTC7h2{~<^ z?#s9YKRAco9KR`bXLVg~Ogy@37|+2a zk}ygUSulME6J9)O@M*H2F{a`he8hdl{PnqWw@b&R3M~~i4oH7h%a=T%T;_J6Y zh$Z=2b8{Ohd&@KbO#iF!`KwuzJ47U8N#~AX_!cE^Dhae2PPeL78|D?8(>UXLIpSV$ zjN8mw-}c@S_V!w*3f|1*ny&eIn$790*Z{xUeWzP`P%dL|I-Ao<=<&!h%==i-`0|_Z z%ZgXu9Z3c23P{N==Pr84JAl`Am`NF+&n=+K(Z{!0$a$*-_a#})7N?Dm$xHh!ccpvt zR~NMcGdI*f zzHSNa4-{#!8L_$a8IC?4jHj{l(S5r(Jg;ip>Qs_tz^v9SCDDCXbB@1jb(Y9gk@swl z?~DCyaa4bl2`4r@<>p{Tj$5;wQ}!nv^{wmnV!eDMu9*(=_>1U(C(C>!q#uu1zFN+O zwZGxeuQXX(xtr=CY(2Zv=CqIJ`^Q)j4f^FI?K+<=UQ=o2(^B0-)6F+rI1XnUmhtvi)yB?P02>~^T}h_J86kYl zbkkUr6BW+SP?>gaTlol`Ldo>oTI+^=`xzXWCdl6BVwFqA89mWEOY?cG`9M{xji;~KFf145u3sp(c>l~SwTL-M!E7VE_G+M^^s#ov*L-SB#SQN1 zHqSNWOout1w65jY(jjiet^MK%9WgS4K+FyE@{^MHY3hxeDz@=P!8h z7tQz{3?9fzgymHpB^o5%p3MD2&%bc0z zSWv4!e(6XdsdmI_K30{c;9;~izt>8$#<%f?eMxO&rs&*h+*a87nXeQ&WFO=b^%nyzgJaQ(=! zTzR8`?M${c<1oF--XB8o_Twr^YW^@U!^S6$uOoy%1?^;S&Fx3z512Wu@tA!KvAB-o zA#)8O@Qf+9uYG)1SXN~Q5}K5Df**ftN*B%1PD0IN)w}Srcvs?+#099D|K%I3(%UWW zL^wDPC7T)!>GXXKF2%mdrsiT|6Q8=lkYleC5~;A`Opbs+U^vK=f-8pwp(ZZVn9B3B zf*x(%0h&i5axX8A@3c$%Gkz0+4vM4p#AC%8K0IU3n}xEDwlF;h2@`WyZsqRNtFFxg zyL-#QuA9a=7(^+ZxnX?-)YzL0y*rD)u%--GQbTs{DDUq$(NZ;`O z6gN;l@8}8GJmWci#z~1=sQz1vGi*_V6v@fzhqkK?5IkkWy;lOh)dZSAFA>oQsau8R zci!+YNI*wj;e*Hq7hT#lkgtQpVN}-n-)0y}^#6twFz(a4075Q2Mj}Hl`Pw8CvoRJ& zFXznCO2%I-%sgS0NH4E8Dtx~tWlbk-Vp2}u^j2)#^TYlTT^qLrVg7s+^uX7ia2Ws5 zqi~Y}+Qg7O`q(jxE$j`5Y(N9g*CK(rcXK7e+QYE10P1}WYWZ?O;bPrti*ApiKF2?9 zoFNwSjoN(RhA*`&&;gm6MK9KGlu*-+ayj(}6{R4PXM64BFMTH4<_jF)D{f=pHNZLO zGLGDow>8ODX3Sk>)zl;r2?mg;oxglzHAGA&Xs4VLKvsNsla=f`Y>kJkcb()&D2|uS z2Q_E;rO^5#n~DrQ# z41t{`bDaMRhS>RUrPyC?H9{LwPXcGj|H+%ne}Ei*Ptd8&H99&$Y3p05OrzN3mm_}z zOu#-G68M^g@p5dHX`}1{nGT%+K*Wr0XZe>$DB7zrapKN@G{4bLZk6U(YeKJG> z7GPhlhtAIL9@P3!Pr04>%4KMIoSomXIo9UTKJ%PE(MdnPyRCt5>${nk6F%b0e(R`d z)ozvgifo6JXsz66O&(>|4f-zl3EOVj&-YhNYgde4uB{;`~C!r z-WTck`t)etLusfcSm)N!d32KFH)JnuRY<#kS8tJ0!NI%;fAE3iTj-P0Fsh?q8Q zoAZV~FDAe*ALfIKLJ3pbe+ZT+@*<+JNmt|T{(pkxzZmhq1x9}Z`{?ixQHT$wIs8ih z5Zf|5ASqa^#DDVW|9ay8ANv0TK|s%&F6nZsxf-!0BTL!K&X+2n6X>2x&W!b3i`d3^ z0XvV;viHWC;n9t$X4kw2Hj|P@MLnmZxfM`&IO$7CNlA@yh&v+I1}-W9Fq|NTsQ=PK zq$n?EeG5Qu<-So8k;6%EAF-B$)>W2uy8(>70dHf|ivyCCckFrm8yc||!wsjL!;tF6 z+uIKx8yOV}4koetoLOf!owgV44Nb?##3sMTohXi`PE7NS*PXd0E>JBh(XJktcgyfS z{E=rmc!6tj-TwH}aGq_I&;6w4%P?DxM97ggKicY{t4x1nD_hiiL0%?S!|wvA)6NMr ziSzV%t|GOPWc#8=nJnv$%jVy7F3FZf7AM&pmbTw)Gu2JX;6u)xtoz z=*=&z=f8C(_+}AiJd&sh34*m@l*qONZc_A3$5{hjhnA;G{YQ|7lcP0vho9UJ`&3;c zqeBN9)bzb9vzxBhb+~q7G8@<^D<-V8Sl5|-VibP}_A}!uMW5W`IplwpV#XjuS2^-r zw&=Nawocy2YUgr;+%x4&mdj;^(~FtNY_Vo(uI-TZ;bQxKf{7!ig^v@#{R{@JrBaH= zghL6bp0)i4{I-21&4MdmNgl=WvQG2AWxZTBb6;5%TooPnS)biiThH=&`oJ8L90&Op zTRImT7Jl9P`G#xXC(ZfI7t0s-1sN0+TeF%|>~uBP^8@c;1`ZANx2Ps0QS6Nhm&y-q zlL$U!ny};`cT-{)9_%BA3cA?FHm0}e+tghs@}IBl_w)Gh{z^E|A%yv6YyY;-3;o)< z-*1KydOYOOPZyY89{cI;k^kkg)jB*yV(RPy%U0x>Q+>8+NW=Wa1I=UZ<$b0I$I|Bg zVv(bPz~C^DztLmA-&M%N9Hv7>_F_vg%A9iV>>Oqj@#Vd*<#N(4Zo}wIrETKw{LCN^ z$E`}xQfj%lNPu(=M`-TE_0nR$Y}r-WK6-a$llHc0l0CVjZ*;sjEYd(bKv(e@dBD#f z#wp&;g+1=|YDc@+-Kttz3&ua%)Mu)!o70wyOXsk3^R_||uAG&mA2E?mKS(42r|c-k z?UveF#&YWPmfe7U82-o?#~loZxpi-o6+QM%$Flr^3$NEKrzWWidQI!D`$>I9U!H2K z)Aw(LJ&KFZsMU38A9J{V@=kt~bqIc_!?iM;JTy#s!#fepY!<10&Feyz$G!>{GlVOo zt1-mNtRKGE%nW|&J7kq~O?wqvO6ZY(O209fNGN$jR^4`mX+xQDJF6S+;W6slCrOpgEU~Ixa zp#||U8NIa^6t+LUMDO!`U0bQc`-L|81tDUuZo7O=Kr3t#x?NX(+`Gu`F_~5{=qS-FVb>F+h!_K{XxQpXLS24%oXt(F=6s|zo!*k$J57G1;Lwp9A;P?e zyvszQJ0pdOiM7&&#;|VbzJZIp9L5|OA3D_XIIV6IqNMI6@a;)HBUYdgk4vBzmrpc- z8IwO>%6WRDRO3q;ZNG{JS&7y0qwaj%YMYKf0I7g*s*|b*Q ztl6^@(W%&ah38?XeK~BiKj>SIVZ%KCkqKYi!RsAz}T}9ke%Y7VQiqzPQw04hOH};CA z4qSR3l=t+^8mG**hTDIO@40Kh^2RiO!AC;d;GkZIvT>T!uE+h1=SobkZW6u-xEdRx z66PNIeAB&sb?XDo*D&?FzNGS1cL5xjW3Q6_?Ii(m#F4zoMuTyluvr_AqPAyPx{r=Y z3U^toeNV5Yv#@Cw=eO&Vpb|7!0bMj>@!cHZ4fkZi!AgYJmRlSxk!8|I^Nuf3ubTVT!hjQmxV@ zQ>|^pPCIG|wREPY8edDJY6%sL7Eya9L`#QOo6=HAi=dQfDv5nfEVUGa3aTTdl?-Z0 ztg$b1nQ70=|M0!%J@==3-t)Qdx$paVp3mpG&&I?WK0(Nl3?(7D>BB*P{1%&%Hef$E zJkfaCb+mH(q!!>T7MJ7iq~)%2XFUmBkZ*U)s79e-Ui%7mWC3Z~H&A%Bq&?{P;;ddUL%da&|2e z=g{U{j!ZFm3r%hfh&EeWtaNccHTHX^s+NhiRhP-=9$W{yn3%oAq?l zAVJJv#!RgmC^X7n^5M_E!9gJ{yNSu&1K==6-HZI?cRLW_W6pXYgja_e%4L{Hz;^w#`rVfW2!-S83h zRZPokY2S2+=rhzqlP5DiFd?=4$UI8>xi-F3dFwqU-a^;k>iC!gXzHjEg44*Cx`>I= zx@Czdb8_WEB<&~BnC6U!6#yUj^*+jMx&vp=2z?W`P{nXlTNaQ(K5=A+AP^~*1(}Qk z!p-u}qy)S^REijOQrcHuX$Vt~q*UO|o9(q}f2iEBt%kE;br2F0HRgf)bZPz3k#`Y9 zc&XwQdPe!ss4*)-8cdi3%W7zxrDs;Pze;q>Ggbm~UK|CRs&B%0awu#c?CzY(NoM~m z!s^~V|=cg7eBFhG3W-u?bYNzFZyd$^qLa)cJ@WYvA8Y+%FPj2JVbprJ zbKkSRn-o%Y2rOh-)R3z9KLjlt94X8pVh#8N1N@1Ego_O8;pK$6GFpX!foA*HJruH8 zTnc#<3y^QBnBcS=MIBtc?Vgv;T6HIBs0FABxP1J}HZZEj9l7Y)4 zElD}OT=GOY=O4$6(TnU}FjLkA$kADK>To_Oy=T-#Cd=f42+uJ&@#^c(Gri*-G<{=b zM}Ad94`PH(3H^NDr4{PPFVc%DY0(H3-xpS~&80L4wLkEgT&xEWIf(naEWHwwO_o;F zMOc~&)-m^D-><*k;Lil1mXk%nuD4TbH;4RWx*3%WmpX0bTo8TpK?7qBe;5&1=V3_L zyIugaz`Q1iOA)|p7#$3+Ce6?<9XvUtVzF;X=|R~P7zT+9uo=*L?+p-rsvf|%j3}Dp zK!wI#b&m~6?tWt5*2$ds#9ke7UhMKuM7;kY;`WDql(x9STOMWu@d{_ojMnyQrk?0) z!FDyQd8aWj3VL#E9qk|Y3#AN#g$6=#!>>=h8)lx)+FrFvBt=1w?!OoBM6Kxfd>NU# zH4ayj(j_EN%tibUrI6o<6`KRK*4rM@$xv?1yZatChGXO0Y?CA%@R*A{%Pno~4eO3{ zYZ9n%-O8uK0!;nngx}m?o^eI;2Teii)md~cF0E5EiuzA30ia2ghyiAYv&`NV2s40} zc$77@_V=Yq_!(Yf#dL~oJJs2FH6=WO-5f`ai(ezG-MbKj{~ynrk!u^ADYOCMk8aVG;7{?lNG>!T+t)?6^>UlWTot&Wi3TK(YwCex>WHZ^Pen`~5%Yf7jN4mEMxP Wgs~S>!ki8e04}SGP)oA8d(2;arakEZ literal 83444 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

_u4aR(!=6+WfEL#{4A1$|AnE4o7Zz*zD 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 yLu>MqcqrCzXkgZ~e_Bu8@q diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index 4ac6ab79..180e2bfa 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -56,12 +56,12 @@ locals { } module "sec-project" { - count = var.enable_features.kms ? 1 : 0 + count = var.enable_features.encryption ? 1 : 0 source = "../../../modules/project" name = var.projects_create != null ? "sec-core" : var.projects_id["sec-core"] parent = module.folder.id billing_account = try(var.projects_create.billing_account_id, null) - project_create = var.projects_create != null && var.enable_features.kms + project_create = var.projects_create != null && var.enable_features.encryption prefix = var.projects_create == null ? null : var.prefix group_iam = { (local.groups.data-engineers) = [ @@ -77,7 +77,7 @@ module "sec-project" { } module "sec-kms" { - for_each = var.enable_features.kms ? toset(local.kms_locations) : toset([]) + for_each = var.enable_features.encryption ? toset(local.kms_locations) : toset([]) source = "../../../modules/kms" project_id = module.sec-project[0].project_id keyring = { @@ -92,7 +92,7 @@ module "sec-kms" { } module "log-kms" { - for_each = var.enable_features.kms ? toset(local.kms_log_locations) : toset([]) + for_each = var.enable_features.encryption ? toset(local.kms_log_locations) : toset([]) source = "../../../modules/kms" project_id = module.sec-project[0].project_id keyring = { diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index daa657bd..c2139bc3 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -24,7 +24,7 @@ locals { ) log_types = toset([for k, v in var.log_sinks : v.type]) - _log_keys = var.enable_features.kms ? { + _log_keys = var.enable_features.encryption ? { bq = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.bq}/keyRings/${var.log_locations.bq}/cryptoKeys/bq"] : null pubsub = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.pubsub}/keyRings/${var.log_locations.pubsub}/cryptoKeys/pubsub"] : null storage = var.enable_features.log_sink ? ["projects/${module.sec-project.0.project_id}/locations/${var.log_locations.storage}/keyRings/${var.log_locations.storage}/cryptoKeys/storage"] : null @@ -52,7 +52,7 @@ module "log-export-project" { "storage.googleapis.com", "stackdriver.googleapis.com" ] - service_encryption_key_ids = var.enable_features.kms ? local.log_keys : {} + service_encryption_key_ids = var.enable_features.encryption ? local.log_keys : {} depends_on = [ module.log-kms @@ -68,7 +68,7 @@ module "log-export-dataset" { id = "${var.prefix}_audit_export" friendly_name = "Audit logs export." location = replace(var.log_locations.bq, "europe", "EU") - encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.bq].keys["bq"].id : false + encryption_key = var.enable_features.encryption ? module.log-kms[var.log_locations.bq].keys["bq"].id : false } module "log-export-gcs" { @@ -79,7 +79,7 @@ module "log-export-gcs" { prefix = var.prefix location = replace(var.log_locations.storage, "europe", "EU") storage_class = local.gcs_storage_class - encryption_key = var.enable_features.kms ? module.log-kms[var.log_locations.storage].keys["storage"].id : null + encryption_key = var.enable_features.encryption ? module.log-kms[var.log_locations.storage].keys["storage"].id : null } module "log-export-logbucket" { @@ -98,5 +98,5 @@ module "log-export-pubsub" { project_id = module.log-export-project[0].project_id name = "audit-logs-${each.key}" regions = [var.log_locations.pubsub] - kms_key = var.enable_features.kms ? module.log-kms[var.log_locations.pubsub].keys["pubsub"].id : null + kms_key = var.enable_features.encryption ? module.log-kms[var.log_locations.pubsub].keys["pubsub"].id : null } diff --git a/blueprints/data-solutions/shielded-folder/output.tf b/blueprints/data-solutions/shielded-folder/outputs.tf similarity index 100% rename from blueprints/data-solutions/shielded-folder/output.tf rename to blueprints/data-solutions/shielded-folder/outputs.tf diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 711e9387..0e8414d0 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -39,14 +39,14 @@ variable "data_dir" { variable "enable_features" { description = "Flag to enable features on the solution." type = object({ - kms = bool - log_sink = bool - vpc_sc = bool + encryption = bool + log_sink = bool + vpc_sc = bool }) default = { - kms = false - log_sink = true - vpc_sc = true + encryption = false + log_sink = true + vpc_sc = true } } variable "folder_create" { @@ -154,7 +154,7 @@ variable "projects_create" { } variable "projects_id" { - description = "Project id, references existing projects if `project_create` is null. Projects will be moved into the shielded folder." + description = "Project id, references existing projects if `projects_create` is null. Projects will be moved into the shielded folder." type = object({ sec-core = string audit-logs = string From 840fc86b3e7a0b9f0734d7cb41abca813b84ab40 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 08:55:33 +0100 Subject: [PATCH 16/58] Fix groups. Fix tests. --- .../data-solutions/shielded-folder/README.md | 24 +++++++++---------- .../data-solutions/shielded-folder/kms.tf | 5 ++-- .../shielded-folder/log-export.tf | 5 ++++ .../data-solutions/shielded-folder/main.tf | 3 ++- .../shielded-folder/variables.tf | 5 ++-- .../__init__.py | 0 .../fixture/main.tf | 0 .../test_plan.py | 0 8 files changed, 23 insertions(+), 19 deletions(-) rename tests/blueprints/data_solutions/{shielded-folder => shielded_folder}/__init__.py (100%) rename tests/blueprints/data_solutions/{shielded-folder => shielded_folder}/fixture/main.tf (100%) rename tests/blueprints/data_solutions/{shielded-folder => shielded_folder}/test_plan.py (100%) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index ea53b996..651c1a55 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -39,7 +39,7 @@ This separation into projects allows adhering to the least-privilege principle b User groups provide a stable frame of reference that allows decoupling the final set of permissions from the stage where entities and resources are created, and their IAM bindings are defined. We use three groups to control access to resources: -- `data-engineers`: They handle and run workloads on the `workload` subfolder. They have owner access to all resources in the `workload` folder in order to troubleshoot possible issues with pipelines. This team can also impersonate any service account. +- `data-engineers`: They handle and run workloads on the `workload` subfolder. They have editor access to all resources in the `workload` folder in order to troubleshoot possible issues within the workload. This team can also impersonate any service account in the workload folder. - `data-security`: They handle security configurations for the shielded folder. They have owner access to the `audit-log` and `sec-core` projects. ## Encryption @@ -117,23 +117,23 @@ terraform apply | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [organization](variables.tf#L130) | Organization details. | object({…}) | ✓ | | -| [prefix](variables.tf#L138) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | +| [organization](variables.tf#L129) | Organization details. | object({…}) | ✓ | | +| [prefix](variables.tf#L137) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | | [access_policy](variables.tf#L17) | Access Policy name, set to null if creating one. | string | | null | | [access_policy_create](variables.tf#L23) | Access Policy configuration, fill in to create. Parent is in 'organizations/123456' format. | object({…}) | | null | | [data_dir](variables.tf#L33) | Relative path for the folder storing configuration data. | string | | "data" | | [enable_features](variables.tf#L39) | Flag to enable features on the solution. | object({…}) | | {…} | | [folder_create](variables.tf#L52) | Provide values if folder creation is needed, uses existing folder if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | | [folder_id](variables.tf#L61) | Folder ID in case you use folder_create=null. | string | | null | -| [groups](variables.tf#L67) | User groups. | map(string) | | {…} | -| [kms_keys](variables.tf#L77) | KMS keys to create, keyed by name. | map(object({…})) | | {} | -| [log_locations](variables.tf#L88) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | -| [log_sinks](variables.tf#L105) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | -| [projects_create](variables.tf#L148) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | -| [projects_id](variables.tf#L156) | Project id, references existing projects if `projects_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | -| [vpc_sc_access_levels](variables.tf#L165) | VPC SC access level definitions. | map(object({…})) | | {} | -| [vpc_sc_egress_policies](variables.tf#L194) | VPC SC egress policy defnitions. | map(object({…})) | | {} | -| [vpc_sc_ingress_policies](variables.tf#L214) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | +| [groups](variables.tf#L67) | User groups. | map(string) | | {…} | +| [kms_keys](variables.tf#L76) | KMS keys to create, keyed by name. | map(object({…})) | | {} | +| [log_locations](variables.tf#L87) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | +| [log_sinks](variables.tf#L104) | Org-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | +| [projects_create](variables.tf#L147) | Provide values if projects creation is needed, uses existing project if null. Projects will be created in the shielded folder. | object({…}) | | null | +| [projects_id](variables.tf#L155) | Project id, references existing projects if `projects_create` is null. Projects will be moved into the shielded folder. | object({…}) | | null | +| [vpc_sc_access_levels](variables.tf#L164) | VPC SC access level definitions. | map(object({…})) | | {} | +| [vpc_sc_egress_policies](variables.tf#L193) | VPC SC egress policy defnitions. | map(object({…})) | | {} | +| [vpc_sc_ingress_policies](variables.tf#L213) | VPC SC ingress policy defnitions. | map(object({…})) | | {} | ## Outputs diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index 180e2bfa..af3a5521 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -64,9 +64,8 @@ module "sec-project" { project_create = var.projects_create != null && var.enable_features.encryption prefix = var.projects_create == null ? null : var.prefix group_iam = { - (local.groups.data-engineers) = [ - "roles/cloudkms.admin", - "roles/viewer", + (local.groups.workload-security) = [ + "roles/editor" ] } services = [ diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index c2139bc3..5baeecaf 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -43,6 +43,11 @@ module "log-export-project" { billing_account = try(var.projects_create.billing_account_id, null) project_create = var.projects_create != null prefix = var.projects_create == null ? null : var.prefix + group_iam = { + (local.groups.workload-security) = [ + "roles/editor" + ] + } iam = { # "roles/owner" = [module.automation-tf-bootstrap-sa.iam_email] } diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 4105e7bc..7aab5757 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -48,8 +48,9 @@ locals { for k, v in local.groups : k => "group:${v}" } group_iam = { - (local.groups.data-engineers) = [ + (local.groups.workload-engineers) = [ "roles/editor", + "roles/iam.serviceAccountTokenCreator" ] } diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index 0e8414d0..fb58e2cf 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -68,9 +68,8 @@ variable "groups" { description = "User groups." type = map(string) default = { - #TODO data-analysts = "gcp-data-analysts" - data-engineers = "gcp-data-engineers" - data-security = "gcp-data-security" + workload-engineers = "gcp-data-engineers" + workload-security = "gcp-data-security" } } diff --git a/tests/blueprints/data_solutions/shielded-folder/__init__.py b/tests/blueprints/data_solutions/shielded_folder/__init__.py similarity index 100% rename from tests/blueprints/data_solutions/shielded-folder/__init__.py rename to tests/blueprints/data_solutions/shielded_folder/__init__.py diff --git a/tests/blueprints/data_solutions/shielded-folder/fixture/main.tf b/tests/blueprints/data_solutions/shielded_folder/fixture/main.tf similarity index 100% rename from tests/blueprints/data_solutions/shielded-folder/fixture/main.tf rename to tests/blueprints/data_solutions/shielded_folder/fixture/main.tf diff --git a/tests/blueprints/data_solutions/shielded-folder/test_plan.py b/tests/blueprints/data_solutions/shielded_folder/test_plan.py similarity index 100% rename from tests/blueprints/data_solutions/shielded-folder/test_plan.py rename to tests/blueprints/data_solutions/shielded_folder/test_plan.py From 351698873b7f37517646009921a4cc30d30b98cf Mon Sep 17 00:00:00 2001 From: Julio Castillo Date: Wed, 1 Feb 2023 09:03:53 +0100 Subject: [PATCH 17/58] Fix test names and update to yaml-based tests --- .../__init__.py | 0 .../__init__.py | 0 .../fixture/main.tf | 0 .../fixture/variables.tf | 0 .../test_plan.py | 0 .../shielded_folder/fixture/main.tf | 32 ---- .../shielded_folder/simple.tfvars | 13 ++ .../shielded_folder/simple.yaml | 151 ++++++++++++++++++ .../{test_plan.py => tftest.yaml} | 15 +- 9 files changed, 168 insertions(+), 43 deletions(-) rename tests/blueprints/cloud_operations/{terraform-enterprise-wif/gcp-workload-identity-provider => terraform_enterprise_wif}/__init__.py (100%) rename tests/blueprints/{data_solutions/shielded_folder => cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider}/__init__.py (100%) rename tests/blueprints/cloud_operations/{terraform-enterprise-wif/gcp-workload-identity-provider => terraform_enterprise_wif/gcp_workload_identity_provider}/fixture/main.tf (100%) rename tests/blueprints/cloud_operations/{terraform-enterprise-wif/gcp-workload-identity-provider => terraform_enterprise_wif/gcp_workload_identity_provider}/fixture/variables.tf (100%) rename tests/blueprints/cloud_operations/{terraform-enterprise-wif/gcp-workload-identity-provider => terraform_enterprise_wif/gcp_workload_identity_provider}/test_plan.py (100%) delete mode 100644 tests/blueprints/data_solutions/shielded_folder/fixture/main.tf create mode 100644 tests/blueprints/data_solutions/shielded_folder/simple.tfvars create mode 100644 tests/blueprints/data_solutions/shielded_folder/simple.yaml rename tests/blueprints/data_solutions/shielded_folder/{test_plan.py => tftest.yaml} (61%) diff --git a/tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/__init__.py b/tests/blueprints/cloud_operations/terraform_enterprise_wif/__init__.py similarity index 100% rename from tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/__init__.py rename to tests/blueprints/cloud_operations/terraform_enterprise_wif/__init__.py diff --git a/tests/blueprints/data_solutions/shielded_folder/__init__.py b/tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/__init__.py similarity index 100% rename from tests/blueprints/data_solutions/shielded_folder/__init__.py rename to tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/__init__.py diff --git a/tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/fixture/main.tf b/tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/fixture/main.tf similarity index 100% rename from tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/fixture/main.tf rename to tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/fixture/main.tf diff --git a/tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/fixture/variables.tf b/tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/fixture/variables.tf similarity index 100% rename from tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/fixture/variables.tf rename to tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/fixture/variables.tf diff --git a/tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/test_plan.py b/tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/test_plan.py similarity index 100% rename from tests/blueprints/cloud_operations/terraform-enterprise-wif/gcp-workload-identity-provider/test_plan.py rename to tests/blueprints/cloud_operations/terraform_enterprise_wif/gcp_workload_identity_provider/test_plan.py diff --git a/tests/blueprints/data_solutions/shielded_folder/fixture/main.tf b/tests/blueprints/data_solutions/shielded_folder/fixture/main.tf deleted file mode 100644 index f4080c67..00000000 --- a/tests/blueprints/data_solutions/shielded_folder/fixture/main.tf +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright 2022 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module "test" { - source = "../../../../../blueprints/data-solutions/shielded-folder/" - data_dir = null - folder_create = { - display_name = "ShieldedMVP" - parent = "organizations/1054601055974" - } - organization = { - domain = "example.com" - id = "1122334455" - } - prefix = "prefix" - projects_create = { - billing_account_id = "123456-123456-123456" - } -} diff --git a/tests/blueprints/data_solutions/shielded_folder/simple.tfvars b/tests/blueprints/data_solutions/shielded_folder/simple.tfvars new file mode 100644 index 00000000..2c77276b --- /dev/null +++ b/tests/blueprints/data_solutions/shielded_folder/simple.tfvars @@ -0,0 +1,13 @@ +data_dir = null +folder_create = { + display_name = "ShieldedMVP" + parent = "organizations/1054601055974" +} +organization = { + domain = "example.com" + id = "1122334455" +} +prefix = "prefix" +projects_create = { + billing_account_id = "123456-123456-123456" +} diff --git a/tests/blueprints/data_solutions/shielded_folder/simple.yaml b/tests/blueprints/data_solutions/shielded_folder/simple.yaml new file mode 100644 index 00000000..bcae4119 --- /dev/null +++ b/tests/blueprints/data_solutions/shielded_folder/simple.yaml @@ -0,0 +1,151 @@ +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# 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. + +# values: +# module.folder-workload.google_folder.folder[0]: +# display_name: prefix-workload +# timeouts: null +# module.folder.google_bigquery_dataset_iam_member.bq-sinks-binding["audit-logs"]: +# condition: [] +# role: roles/bigquery.dataEditor +# module.folder.google_bigquery_dataset_iam_member.bq-sinks-binding["vpc-sc"]: +# condition: [] +# role: roles/bigquery.dataEditor +# module.folder.google_folder.folder[0]: +# display_name: ShieldedMVP +# parent: organizations/1054601055974 +# timeouts: null +# module.folder.google_folder_iam_binding.authoritative["roles/editor"]: +# condition: [] +# members: +# - group:gcp-data-engineers@example.com +# role: roles/editor +# module.folder.google_logging_folder_sink.sink["audit-logs"]: +# description: audit-logs (Terraform-managed). +# disabled: false +# exclusions: [] +# filter: logName:"/logs/cloudaudit.googleapis.com%2Factivity" OR logName:"/logs/cloudaudit.googleapis.com%2Fsystem_event" +# include_children: true +# name: audit-logs +# module.folder.google_logging_folder_sink.sink["vpc-sc"]: +# description: vpc-sc (Terraform-managed). +# disabled: false +# exclusions: [] +# filter: protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" +# include_children: true +# name: vpc-sc +# module.log-export-dataset[0].google_bigquery_dataset.default: +# dataset_id: prefix_audit_export +# default_encryption_configuration: +# - kms_key_name: 'false' +# default_partition_expiration_ms: null +# default_table_expiration_ms: null +# delete_contents_on_destroy: false +# description: Terraform managed. +# friendly_name: Audit logs export. +# location: EU +# max_time_travel_hours: null +# project: prefix-audit-logs +# timeouts: null +# module.log-export-project[0].data.google_bigquery_default_service_account.bq_sa[0]: +# project: prefix-audit-logs +# module.log-export-project[0].data.google_storage_project_service_account.gcs_sa[0]: +# project: prefix-audit-logs +# user_project: null +# module.log-export-project[0].google_project.project[0]: +# auto_create_network: false +# billing_account: 123456-123456-123456 +# labels: null +# name: prefix-audit-logs +# project_id: prefix-audit-logs +# skip_delete: false +# timeouts: null +# module.log-export-project[0].google_project_service.project_services["bigquery.googleapis.com"]: +# disable_dependent_services: false +# disable_on_destroy: false +# project: prefix-audit-logs +# service: bigquery.googleapis.com +# timeouts: null +# module.log-export-project[0].google_project_service.project_services["pubsub.googleapis.com"]: +# disable_dependent_services: false +# disable_on_destroy: false +# project: prefix-audit-logs +# service: pubsub.googleapis.com +# timeouts: null +# module.log-export-project[0].google_project_service.project_services["stackdriver.googleapis.com"]: +# disable_dependent_services: false +# disable_on_destroy: false +# project: prefix-audit-logs +# service: stackdriver.googleapis.com +# timeouts: null +# module.log-export-project[0].google_project_service.project_services["storage.googleapis.com"]: +# disable_dependent_services: false +# disable_on_destroy: false +# project: prefix-audit-logs +# service: storage.googleapis.com +# timeouts: null +# module.log-export-project[0].google_project_service_identity.jit_si["pubsub.googleapis.com"]: +# project: prefix-audit-logs +# service: pubsub.googleapis.com +# timeouts: null +# module.vpc-sc[0].google_access_context_manager_access_policy.default[0]: +# parent: organizations/1122334455 +# timeouts: null +# title: shielded-folder +# module.vpc-sc[0].google_access_context_manager_service_perimeter.regular["shielded"]: +# description: null +# perimeter_type: PERIMETER_TYPE_REGULAR +# spec: +# - access_levels: [] +# egress_policies: [] +# ingress_policies: +# - ingress_from: +# - identity_type: null +# sources: +# - access_level: '*' +# resource: null +# ingress_to: +# - operations: +# - method_selectors: [] +# service_name: '*' +# restricted_services: null +# vpc_accessible_services: +# - allowed_services: null +# enable_restriction: true +# status: [] +# timeouts: null +# title: shielded +# use_explicit_dry_run_spec: true + +counts: + google_access_context_manager_access_policy: 1 + google_access_context_manager_service_perimeter: 1 + google_bigquery_dataset: 1 + google_bigquery_dataset_iam_member: 2 + google_bigquery_default_service_account: 1 + google_folder: 2 + google_folder_iam_binding: 2 + google_logging_folder_sink: 2 + google_project: 1 + google_project_iam_binding: 1 + google_project_service: 4 + google_project_service_identity: 1 + google_projects: 1 + google_storage_project_service_account: 1 + modules: 5 + resources: 21 + +outputs: + folders: __missing__ + folders_sink_writer_identities: __missing__ diff --git a/tests/blueprints/data_solutions/shielded_folder/test_plan.py b/tests/blueprints/data_solutions/shielded_folder/tftest.yaml similarity index 61% rename from tests/blueprints/data_solutions/shielded_folder/test_plan.py rename to tests/blueprints/data_solutions/shielded_folder/tftest.yaml index 66b3d79b..3c0bcb8c 100644 --- a/tests/blueprints/data_solutions/shielded_folder/test_plan.py +++ b/tests/blueprints/data_solutions/shielded_folder/tftest.yaml @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,14 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os -import pytest +module: blueprints/data-solutions/shielded-folder -FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') - - -def test_resources(e2e_plan_runner): - "Test that plan works and the numbers of resources is as expected." - modules, resources = e2e_plan_runner(FIXTURES_DIR) - assert len(modules) == 5 - assert len(resources) == 18 +tests: + simple: From f9e3eb7d5a193ad3e825d149a203db75c276f139 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 09:30:28 +0100 Subject: [PATCH 18/58] Update copyright --- blueprints/data-solutions/shielded-folder/kms.tf | 2 +- blueprints/data-solutions/shielded-folder/log-export.tf | 2 +- blueprints/data-solutions/shielded-folder/main.tf | 2 +- blueprints/data-solutions/shielded-folder/outputs.tf | 2 +- blueprints/data-solutions/shielded-folder/variables.tf | 2 +- .../{shielded_folder => shielded-folder}/simple.tfvars | 0 .../{shielded_folder => shielded-folder}/simple.yaml | 0 .../{shielded_folder => shielded-folder}/tftest.yaml | 0 8 files changed, 5 insertions(+), 5 deletions(-) rename tests/blueprints/data_solutions/{shielded_folder => shielded-folder}/simple.tfvars (100%) rename tests/blueprints/data_solutions/{shielded_folder => shielded-folder}/simple.yaml (100%) rename tests/blueprints/data_solutions/{shielded_folder => shielded-folder}/tftest.yaml (100%) diff --git a/blueprints/data-solutions/shielded-folder/kms.tf b/blueprints/data-solutions/shielded-folder/kms.tf index af3a5521..f3da9511 100644 --- a/blueprints/data-solutions/shielded-folder/kms.tf +++ b/blueprints/data-solutions/shielded-folder/kms.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/blueprints/data-solutions/shielded-folder/log-export.tf b/blueprints/data-solutions/shielded-folder/log-export.tf index 5baeecaf..247ec7aa 100644 --- a/blueprints/data-solutions/shielded-folder/log-export.tf +++ b/blueprints/data-solutions/shielded-folder/log-export.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/blueprints/data-solutions/shielded-folder/main.tf b/blueprints/data-solutions/shielded-folder/main.tf index 7aab5757..d049a531 100644 --- a/blueprints/data-solutions/shielded-folder/main.tf +++ b/blueprints/data-solutions/shielded-folder/main.tf @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/blueprints/data-solutions/shielded-folder/outputs.tf b/blueprints/data-solutions/shielded-folder/outputs.tf index 67f4213c..e1107fc6 100644 --- a/blueprints/data-solutions/shielded-folder/outputs.tf +++ b/blueprints/data-solutions/shielded-folder/outputs.tf @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/blueprints/data-solutions/shielded-folder/variables.tf b/blueprints/data-solutions/shielded-folder/variables.tf index fb58e2cf..165f127c 100644 --- a/blueprints/data-solutions/shielded-folder/variables.tf +++ b/blueprints/data-solutions/shielded-folder/variables.tf @@ -1,4 +1,4 @@ -# Copyright 2022 Google LLC +# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/tests/blueprints/data_solutions/shielded_folder/simple.tfvars b/tests/blueprints/data_solutions/shielded-folder/simple.tfvars similarity index 100% rename from tests/blueprints/data_solutions/shielded_folder/simple.tfvars rename to tests/blueprints/data_solutions/shielded-folder/simple.tfvars diff --git a/tests/blueprints/data_solutions/shielded_folder/simple.yaml b/tests/blueprints/data_solutions/shielded-folder/simple.yaml similarity index 100% rename from tests/blueprints/data_solutions/shielded_folder/simple.yaml rename to tests/blueprints/data_solutions/shielded-folder/simple.yaml diff --git a/tests/blueprints/data_solutions/shielded_folder/tftest.yaml b/tests/blueprints/data_solutions/shielded-folder/tftest.yaml similarity index 100% rename from tests/blueprints/data_solutions/shielded_folder/tftest.yaml rename to tests/blueprints/data_solutions/shielded-folder/tftest.yaml From e3daaf2503a253534bbd64c3e303cd030fdd8fb9 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 13:02:07 +0100 Subject: [PATCH 19/58] Update READMEs --- blueprints/README.md | 2 +- blueprints/data-solutions/README.md | 7 +++++++ .../images/overview_diagram.png | Bin 78451 -> 52543 bytes 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/blueprints/README.md b/blueprints/README.md index 83588bfe..ce1b30d0 100644 --- a/blueprints/README.md +++ b/blueprints/README.md @@ -6,7 +6,7 @@ Currently available blueprints: - **apigee** - [Apigee Hybrid on GKE](./apigee/hybrid-gke/), [Apigee X analytics in BigQuery](./apigee/bigquery-analytics), [Apigee network patterns](./apigee/network-patterns/) - **cloud operations** - [Active Directory Federation Services](./cloud-operations/adfs), [Cloud Asset Inventory feeds for resource change tracking and remediation](./cloud-operations/asset-inventory-feed-remediation), [Fine-grained Cloud DNS IAM via Service Directory](./cloud-operations/dns-fine-grained-iam), [Cloud DNS & Shared VPC design](./cloud-operations/dns-shared-vpc), [Delegated Role Grants](./cloud-operations/iam-delegated-role-grants), [Networking Dashboard](./cloud-operations/network-dashboard), [Managing on-prem service account keys by uploading public keys](./cloud-operations/onprem-sa-key-management), [Compute Image builder with Hashicorp Packer](./cloud-operations/packer-image-builder), [Packer example](./cloud-operations/packer-image-builder/packer), [Compute Engine quota monitoring](./cloud-operations/quota-monitoring), [Scheduled Cloud Asset Inventory Export to Bigquery](./cloud-operations/scheduled-asset-inventory-export-bq), [Configuring workload identity federation for Terraform Cloud/Enterprise workflow](./cloud-operations/terraform-enterprise-wif), [TCP healthcheck and restart for unmanaged GCE instances](./cloud-operations/unmanaged-instances-healthcheck), [Migrate for Compute Engine (v5) blueprints](./cloud-operations/vm-migration), [Configuring workload identity federation to access Google Cloud resources from apps running on Azure](./cloud-operations/workload-identity-federation) -- **data solutions** - [GCE and GCS CMEK via centralized Cloud KMS](./data-solutions/cmek-via-centralized-kms), [Cloud Composer version 2 private instance, supporting Shared VPC and external CMEK key](./data-solutions/composer-2), [Cloud SQL instance with multi-region read replicas](./data-solutions/cloudsql-multiregion), [Data Platform](./data-solutions/data-platform-foundations), [Spinning up a foundation data pipeline on Google Cloud using Cloud Storage, Dataflow and BigQuery](./data-solutions/gcs-to-bq-with-least-privileges), [#SQL Server Always On Groups blueprint](./data-solutions/sqlserver-alwayson), [Data Playground](./data-solutions/data-playground) +- **data solutions** - [GCE and GCS CMEK via centralized Cloud KMS](./data-solutions/cmek-via-centralized-kms), [Cloud Composer version 2 private instance, supporting Shared VPC and external CMEK key](./data-solutions/composer-2), [Cloud SQL instance with multi-region read replicas](./data-solutions/cloudsql-multiregion), [Data Platform](./data-solutions/data-platform-foundations), [Spinning up a foundation data pipeline on Google Cloud using Cloud Storage, Dataflow and BigQuery](./data-solutions/gcs-to-bq-with-least-privileges), [#SQL Server Always On Groups blueprint](./data-solutions/sqlserver-alwayson), [Data Playground](./data-solutions/data-playground), [Shielded Folder](./data-solutions/shielded-folder) - **factories** - [The why and the how of Resource Factories](./factories), [Google Cloud Identity Group Factory](./factories/cloud-identity-group-factory), [Google Cloud BQ Factory](./factories/bigquery-factory), [Google Cloud VPC Firewall Factory](./factories/net-vpc-firewall-yaml), [Minimal Project Factory](./factories/project-factory) - **GKE** - [Binary Authorization Pipeline Blueprint](./gke/binauthz), [Storage API](./gke/binauthz/image), [Multi-cluster mesh on GKE (fleet API)](./gke/multi-cluster-mesh-gke-fleet-api), [GKE Multitenant Blueprint](./gke/multitenant-fleet), [Shared VPC with GKE support](./networking/shared-vpc-gke/) - **networking** - [Decentralized firewall management](./networking/decentralized-firewall), [Decentralized firewall validator](./networking/decentralized-firewall/validator), [Network filtering with Squid](./networking/filtering-proxy), [Network filtering with Squid with isolated VPCs using Private Service Connect](./networking/filtering-proxy-psc), [HTTP Load Balancer with Cloud Armor](./networking/glb-and-armor), [Hub and Spoke via VPN](./networking/hub-and-spoke-vpn), [Hub and Spoke via VPC Peering](./networking/hub-and-spoke-peering), [Internal Load Balancer as Next Hop](./networking/ilb-next-hop), On-prem DNS and Google Private Access, [Calling a private Cloud Function from On-premises](./networking/private-cloud-function-from-onprem), [Hybrid connectivity to on-premise services through PSC](./networking/psc-hybrid), [PSC Producer](./networking/psc-hybrid/psc-producer), [PSC Consumer](./networking/psc-hybrid/psc-consumer), [Shared VPC with optional GKE cluster](./networking/shared-vpc-gke) diff --git a/blueprints/data-solutions/README.md b/blueprints/data-solutions/README.md index 4919f29a..e6becf5f 100644 --- a/blueprints/data-solutions/README.md +++ b/blueprints/data-solutions/README.md @@ -55,3 +55,10 @@ running on a VPC with a private IP and a dedicated Service Account. A GCS bucket This [blueprint](./data-platform-foundations/) implements SQL Server Always On Availability Groups using Fabric modules. It builds a two node cluster with a fileshare witness instance in an existing VPC and adds the necessary firewalling. The actual setup process (apart from Active Directory operations) has been scripted, so that least amount of manual works needs to performed.
+ +### Shielded Folder + + +This [blueprint](./shielded-folder/) implements an opinionated Folder configuration to implement GCP best practices. Configurations implemented on the folder would be beneficial to host Workloads inheriting constraints from the folder they belong to. + +
\ No newline at end of file diff --git a/blueprints/data-solutions/shielded-folder/images/overview_diagram.png b/blueprints/data-solutions/shielded-folder/images/overview_diagram.png index 034ff3da0f9479c4343105ef92283ef1f97a39eb..abc8d56e78ec2b7518584890f6099f7489253c6b 100644 GIT binary patch delta 49254 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 literal 78451 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 Wgs~S>!ki8e04}SGP)oA8d(2;arakEZ From 30f2b49c9cb45bb7a4ed34ed7d9112c997da8428 Mon Sep 17 00:00:00 2001 From: lcaggio Date: Wed, 1 Feb 2023 17:34:31 +0100 Subject: [PATCH 20/58] README Typos --- blueprints/data-solutions/shielded-folder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 651c1a55..9ec01785 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -4,7 +4,7 @@ This blueprint implements an opinionated Folder configuration to implement GCP b In this blueprint, a folder will be created implementing the following features: - Organizational policies -- Hirarckical firewall rules +- Hierarchical firewall rules - Cloud KMS - VPC-SC From 6298ee5cdb604672155ebb840bcfa34a695da8e8 Mon Sep 17 00:00:00 2001 From: apichick Date: Wed, 1 Feb 2023 18:54:23 +0100 Subject: [PATCH 21/58] Removed unused file package-lock.json (#1124) --- .../bigquery-analytics/package-lock.json | 251 ------------------ 1 file changed, 251 deletions(-) delete mode 100644 blueprints/apigee/bigquery-analytics/package-lock.json diff --git a/blueprints/apigee/bigquery-analytics/package-lock.json b/blueprints/apigee/bigquery-analytics/package-lock.json deleted file mode 100644 index 97ea7994..00000000 --- a/blueprints/apigee/bigquery-analytics/package-lock.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "name": "apigee", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "superagent-debugger": "^1.2.9" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "dependencies": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/superagent-debugger": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/superagent-debugger/-/superagent-debugger-1.2.9.tgz", - "integrity": "sha512-iH4NvJl1utorgRbrsYoOM8yoeTbS7YWLoDkAwRy2rgB6aP5Lr36XxmpE8GbgvmUY6R4QmYr+4R4IdAGMPmwR9g==", - "dependencies": { - "chalk": "^1.1.3", - "debug": "^2.6.0", - "lodash": "^4.17.4", - "moment": "^2.17.1", - "query-string": "^4.3.1" - } - }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "engines": { - "node": ">=0.8.0" - } - } - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "query-string": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", - "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", - "requires": { - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "superagent-debugger": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/superagent-debugger/-/superagent-debugger-1.2.9.tgz", - "integrity": "sha512-iH4NvJl1utorgRbrsYoOM8yoeTbS7YWLoDkAwRy2rgB6aP5Lr36XxmpE8GbgvmUY6R4QmYr+4R4IdAGMPmwR9g==", - "requires": { - "chalk": "^1.1.3", - "debug": "^2.6.0", - "lodash": "^4.17.4", - "moment": "^2.17.1", - "query-string": "^4.3.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==" - } - } -} From 0da76cdbdb3ab60a0e07c23ac127372201011b2e Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Wed, 1 Feb 2023 18:56:34 +0100 Subject: [PATCH 22/58] Delete package-lock.json flagged by dependabot as containing a security vulnerability (taffydb) --- .../functions/gcs2bq/package-lock.json | 5675 ----------------- 1 file changed, 5675 deletions(-) delete mode 100644 blueprints/apigee/bigquery-analytics/functions/gcs2bq/package-lock.json diff --git a/blueprints/apigee/bigquery-analytics/functions/gcs2bq/package-lock.json b/blueprints/apigee/bigquery-analytics/functions/gcs2bq/package-lock.json deleted file mode 100644 index c5a7620b..00000000 --- a/blueprints/apigee/bigquery-analytics/functions/gcs2bq/package-lock.json +++ /dev/null @@ -1,5675 +0,0 @@ -{ - "name": "gcs2bq", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "gcs2bq", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@google-cloud/bigquery": "^6.0.3", - "@google-cloud/functions-framework": "^3.1.2", - "@google-cloud/logging-bunyan": "^4.2.0", - "@google-cloud/storage": "^6.7.0", - "bunyan": "^1.8.15" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@google-cloud/bigquery": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-6.0.3.tgz", - "integrity": "sha512-BP464228S9dqDCb4dR99h9D8+N498YZi/AZvoOJUaieg2H6qbiYBE1xlYuaMvyV1WEQT/2/yZTCJnCo5WiaY0Q==", - "dependencies": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "big.js": "^6.0.0", - "duplexify": "^4.0.0", - "extend": "^3.0.2", - "is": "^3.3.0", - "p-event": "^4.1.0", - "readable-stream": "^4.0.0", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/bigquery/node_modules/@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/bigquery/node_modules/readable-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", - "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "dependencies": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/functions-framework": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/functions-framework/-/functions-framework-3.1.2.tgz", - "integrity": "sha512-pYvEH65/Rqh1JNPdcBmorcV7Xoom2/iOSmbtYza8msro7Inl+qOYxbyMiQfySD2gwAyn38WyWPRqsDRcf/BFLg==", - "dependencies": { - "@types/express": "4.17.13", - "body-parser": "^1.18.3", - "cloudevents": "^6.0.0", - "express": "^4.16.4", - "minimist": "^1.2.5", - "on-finished": "^2.3.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.5" - }, - "bin": { - "functions-framework": "build/src/main.js", - "functions-framework-nodejs": "build/src/main.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@google-cloud/logging": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.0.tgz", - "integrity": "sha512-3QNSMci/8mmvLs4Iyb6Z/pFT/lJCDPWGWSRx08+Yi254xpva32pOU0grzgbPYls8SFhDWUQgYr9DGZg+IH0kEQ==", - "dependencies": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/logging-bunyan": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.0.tgz", - "integrity": "sha512-BbzbJguK0sIZedO/0p27N5FDRUkdH2KsiejkoXOTNItU2GI8LweM7dtxihV9m7TcYOXVIxPhirnn8Tu3miq/VA==", - "dependencies": { - "@google-cloud/logging": "^10.2.2", - "google-auth-library": "^8.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "bunyan": "*" - } - }, - "node_modules/@google-cloud/logging/node_modules/@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/logging/node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/logging/node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/logging/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/storage": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", - "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", - "dependencies": { - "@google-cloud/paginator": "^3.0.7", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "compressible": "^2.0.12", - "duplexify": "^4.0.0", - "ent": "^2.2.0", - "extend": "^3.0.2", - "gaxios": "^5.0.0", - "google-auth-library": "^8.0.1", - "mime": "^3.0.0", - "mime-types": "^2.0.8", - "p-limit": "^3.0.1", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==", - "engines": { - "node": "*" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/bigjs" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cloudevents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cloudevents/-/cloudevents-6.0.3.tgz", - "integrity": "sha512-ADEHAv2KShH/cDIy2GP+npFz3R6Fu/UCsUO/j4kYA9VqN4yhGdF+Zg6wmjeq6qlUvlaKdrVBwgZuH/w57IsyGQ==", - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "util": "^0.12.4", - "uuid": "^8.3.2" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "dependencies": { - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/google-auth-library": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.6.0.tgz", - "integrity": "sha512-y6bw1yTWMVgs1vGJwBZ3uu+uIClfgxQfsEVcTNKjQeNQOVwox69+ZUgTeTAzrh+74hBqrk1gWyb9RsQVDI7seg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", - "dependencies": { - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "engines": { - "node": "*" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "dependencies": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", - "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", - "dependencies": { - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "dependencies": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, - "node_modules/teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/teeny-request/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==" - }, - "@google-cloud/bigquery": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/bigquery/-/bigquery-6.0.3.tgz", - "integrity": "sha512-BP464228S9dqDCb4dR99h9D8+N498YZi/AZvoOJUaieg2H6qbiYBE1xlYuaMvyV1WEQT/2/yZTCJnCo5WiaY0Q==", - "requires": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "big.js": "^6.0.0", - "duplexify": "^4.0.0", - "extend": "^3.0.2", - "is": "^3.3.0", - "p-event": "^4.1.0", - "readable-stream": "^4.0.0", - "stream-events": "^1.0.5", - "uuid": "^8.0.0" - }, - "dependencies": { - "@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "readable-stream": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.2.0.tgz", - "integrity": "sha512-gJrBHsaI3lgBoGMW/jHZsQ/o/TIWiu5ENCJG1BB7fuCKzpFM8GaS2UoBVt9NO+oI+3FcrBNbUkl3ilDe09aY4A==", - "requires": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10" - } - } - } - }, - "@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "requires": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - } - }, - "@google-cloud/functions-framework": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/functions-framework/-/functions-framework-3.1.2.tgz", - "integrity": "sha512-pYvEH65/Rqh1JNPdcBmorcV7Xoom2/iOSmbtYza8msro7Inl+qOYxbyMiQfySD2gwAyn38WyWPRqsDRcf/BFLg==", - "requires": { - "@types/express": "4.17.13", - "body-parser": "^1.18.3", - "cloudevents": "^6.0.0", - "express": "^4.16.4", - "minimist": "^1.2.5", - "on-finished": "^2.3.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.5" - } - }, - "@google-cloud/logging": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.0.tgz", - "integrity": "sha512-3QNSMci/8mmvLs4Iyb6Z/pFT/lJCDPWGWSRx08+Yi254xpva32pOU0grzgbPYls8SFhDWUQgYr9DGZg+IH0kEQ==", - "requires": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "dependencies": { - "@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } - } - }, - "@google-cloud/logging-bunyan": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.0.tgz", - "integrity": "sha512-BbzbJguK0sIZedO/0p27N5FDRUkdH2KsiejkoXOTNItU2GI8LweM7dtxihV9m7TcYOXVIxPhirnn8Tu3miq/VA==", - "requires": { - "@google-cloud/logging": "^10.2.2", - "google-auth-library": "^8.0.2" - } - }, - "@google-cloud/paginator": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", - "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==" - }, - "@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==" - }, - "@google-cloud/storage": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.7.0.tgz", - "integrity": "sha512-iEit3dvUhGQV3pPC8aci/Y+F6K2QJ/UvcXhymj8gnO8IYQfZSZvFf361yX4BWNUlbHzanUQVQdF9RvgEM8fwpw==", - "requires": { - "@google-cloud/paginator": "^3.0.7", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "abort-controller": "^3.0.0", - "async-retry": "^1.3.3", - "compressible": "^2.0.12", - "duplexify": "^4.0.0", - "ent": "^2.2.0", - "extend": "^3.0.2", - "gaxios": "^5.0.0", - "google-auth-library": "^8.0.1", - "mime": "^3.0.0", - "mime-types": "^2.0.8", - "p-limit": "^3.0.1", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0", - "uuid": "^8.0.0" - } - }, - "@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - } - }, - "@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "async-retry": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", - "requires": { - "retry": "0.13.1" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "big.js": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-6.2.1.tgz", - "integrity": "sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==" - }, - "bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "cloudevents": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cloudevents/-/cloudevents-6.0.3.tgz", - "integrity": "sha512-ADEHAv2KShH/cDIy2GP+npFz3R6Fu/UCsUO/j4kYA9VqN4yhGdF+Zg6wmjeq6qlUvlaKdrVBwgZuH/w57IsyGQ==", - "requires": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "util": "^0.12.4", - "uuid": "^8.3.2" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "requires": { - "uuid": "^8.0.0" - } - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", - "requires": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "google-auth-library": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.6.0.tgz", - "integrity": "sha512-y6bw1yTWMVgs1vGJwBZ3uu+uIClfgxQfsEVcTNKjQeNQOVwox69+ZUgTeTAzrh+74hBqrk1gWyb9RsQVDI7seg==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", - "requires": { - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", - "retry-request": "^5.0.0" - } - }, - "google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "requires": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==" - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "requires": { - "xmlcreate": "^2.0.4" - } - }, - "jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "requires": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", - "requires": {} - }, - "marked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", - "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", - "requires": { - "protobufjs": "^7.0.0" - } - }, - "protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" - } - } - }, - "protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", - "requires": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "requires": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "requires": { - "lodash": "^4.17.14" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "requires": { - "stubs": "^3.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, - "teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "dependencies": { - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - } - } -} From a046f280a42211415258ab12ede151271145f95d Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Wed, 1 Feb 2023 18:57:10 +0100 Subject: [PATCH 23/58] Delete package-lock.json flagged by dependabot as containing a security vulnerability (taffydb) --- .../functions/export/package-lock.json | 5548 ----------------- 1 file changed, 5548 deletions(-) delete mode 100644 blueprints/apigee/bigquery-analytics/functions/export/package-lock.json diff --git a/blueprints/apigee/bigquery-analytics/functions/export/package-lock.json b/blueprints/apigee/bigquery-analytics/functions/export/package-lock.json deleted file mode 100644 index 9ccbef77..00000000 --- a/blueprints/apigee/bigquery-analytics/functions/export/package-lock.json +++ /dev/null @@ -1,5548 +0,0 @@ -{ - "name": "export", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "export", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@google-cloud/functions-framework": "^3.1.2", - "@google-cloud/logging-bunyan": "^4.2.0", - "bunyan": "^1.8.15", - "express": "^4.18.2", - "google-auth-library": "^8.6.0", - "superagent": "^8.0.3" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "dependencies": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/functions-framework": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/functions-framework/-/functions-framework-3.1.2.tgz", - "integrity": "sha512-pYvEH65/Rqh1JNPdcBmorcV7Xoom2/iOSmbtYza8msro7Inl+qOYxbyMiQfySD2gwAyn38WyWPRqsDRcf/BFLg==", - "dependencies": { - "@types/express": "4.17.13", - "body-parser": "^1.18.3", - "cloudevents": "^6.0.0", - "express": "^4.16.4", - "minimist": "^1.2.5", - "on-finished": "^2.3.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.5" - }, - "bin": { - "functions-framework": "build/src/main.js", - "functions-framework-nodejs": "build/src/main.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@google-cloud/logging": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.0.tgz", - "integrity": "sha512-3QNSMci/8mmvLs4Iyb6Z/pFT/lJCDPWGWSRx08+Yi254xpva32pOU0grzgbPYls8SFhDWUQgYr9DGZg+IH0kEQ==", - "dependencies": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/logging-bunyan": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.0.tgz", - "integrity": "sha512-BbzbJguK0sIZedO/0p27N5FDRUkdH2KsiejkoXOTNItU2GI8LweM7dtxihV9m7TcYOXVIxPhirnn8Tu3miq/VA==", - "dependencies": { - "@google-cloud/logging": "^10.2.2", - "google-auth-library": "^8.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "bunyan": "*" - } - }, - "node_modules/@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "dependencies": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - }, - "engines": { - "node": "^8.13.0 || >=10.10.0" - } - }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", - "dependencies": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "node_modules/@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==", - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "engines": [ - "node >=0.10.0" - ], - "bin": { - "bunyan": "bin/bunyan" - }, - "optionalDependencies": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "dependencies": { - "lodash": "^4.17.15" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cloudevents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/cloudevents/-/cloudevents-6.0.2.tgz", - "integrity": "sha512-mn/4EZnAbhfb/TghubK2jPnxYM15JRjf8LnWJtXidiVKi5ZCkd+p9jyBZbL57w7nRm6oFAzJhjxRLsXd/DNaBQ==", - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "util": "^0.12.4", - "uuid": "^8.3.2" - } - }, - "node_modules/cloudevents/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "hasInstallScript": true, - "optional": true, - "dependencies": { - "nan": "^2.14.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, - "node_modules/entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=4.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "dependencies": { - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eventid/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "node_modules/fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", - "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "dependencies": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "dependencies": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/google-auth-library": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.6.0.tgz", - "integrity": "sha512-y6bw1yTWMVgs1vGJwBZ3uu+uIClfgxQfsEVcTNKjQeNQOVwox69+ZUgTeTAzrh+74hBqrk1gWyb9RsQVDI7seg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-auth-library/node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-auth-library/node_modules/gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", - "dependencies": { - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", - "retry-request": "^5.0.0" - }, - "bin": { - "compileProtos": "build/tools/compileProtos.js", - "minifyProtoJson": "build/tools/minify.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/gtoken/node_modules/gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "dependencies": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/http-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "dependencies": { - "xmlcreate": "^2.0.4" - } - }, - "node_modules/jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "dependencies": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "bin": { - "jsdoc": "jsdoc.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsdoc/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "dependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "node_modules/markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", - "peerDependencies": { - "@types/markdown-it": "*", - "markdown-it": "*" - } - }, - "node_modules/marked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", - "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "dependencies": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", - "dependencies": { - "protobufjs": "^7.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", - "dependencies": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "bin": { - "pbjs": "bin/pbjs", - "pbts": "bin/pbts" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "protobufjs": "^7.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/protobufjs-cli/node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/protobufjs-cli/node_modules/minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/protobufjs/node_modules/long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "dependencies": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/retry-request/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/retry-request/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "dependencies": { - "glob": "^6.0.1" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "dependencies": { - "stubs": "^3.0.0" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, - "node_modules/superagent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.3.tgz", - "integrity": "sha512-oBC+aNsCjzzjmO5AOPBPFS+Z7HPzlx+DQr/aHwM08kI+R24gsDmAS1LMfza1fK+P+SKlTAoNZpOvooE/pRO1HA==", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.3", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.0.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, - "node_modules/teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/tmp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.2.tgz", - "integrity": "sha512-afk318kh2uKbo7BEj2QtEi8HVCGrwHUffrYDy7dgVcSa2j9lY3LDjPzcyGdpX7xgm35aWqvciZJ4WKmdF/SxYg==" - }, - "@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "requires": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - } - }, - "@google-cloud/functions-framework": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/functions-framework/-/functions-framework-3.1.2.tgz", - "integrity": "sha512-pYvEH65/Rqh1JNPdcBmorcV7Xoom2/iOSmbtYza8msro7Inl+qOYxbyMiQfySD2gwAyn38WyWPRqsDRcf/BFLg==", - "requires": { - "@types/express": "4.17.13", - "body-parser": "^1.18.3", - "cloudevents": "^6.0.0", - "express": "^4.16.4", - "minimist": "^1.2.5", - "on-finished": "^2.3.0", - "read-pkg-up": "^7.0.1", - "semver": "^7.3.5" - } - }, - "@google-cloud/logging": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-10.3.0.tgz", - "integrity": "sha512-3QNSMci/8mmvLs4Iyb6Z/pFT/lJCDPWGWSRx08+Yi254xpva32pOU0grzgbPYls8SFhDWUQgYr9DGZg+IH0kEQ==", - "requires": { - "@google-cloud/common": "^4.0.0", - "@google-cloud/paginator": "^4.0.0", - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^4.0.0", - "google-auth-library": "^8.0.2", - "google-gax": "^3.5.2", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - } - }, - "@google-cloud/logging-bunyan": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-bunyan/-/logging-bunyan-4.2.0.tgz", - "integrity": "sha512-BbzbJguK0sIZedO/0p27N5FDRUkdH2KsiejkoXOTNItU2GI8LweM7dtxihV9m7TcYOXVIxPhirnn8Tu3miq/VA==", - "requires": { - "@google-cloud/logging": "^10.2.2", - "google-auth-library": "^8.0.2" - } - }, - "@google-cloud/paginator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-4.0.1.tgz", - "integrity": "sha512-6G1ui6bWhNyHjmbYwavdN7mpVPRBtyDg/bfqBTAlwr413On2TnFNfDxc9UhTJctkgoCDgQXEKiRPLPR9USlkbQ==", - "requires": { - "arrify": "^2.0.0", - "extend": "^3.0.2" - } - }, - "@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==" - }, - "@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==" - }, - "@grpc/grpc-js": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", - "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", - "requires": { - "@grpc/proto-loader": "^0.7.0", - "@types/node": ">=12.12.47" - } - }, - "@grpc/proto-loader": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.3.tgz", - "integrity": "sha512-5dAvoZwna2Py3Ef96Ux9jIkp3iZ62TUsV00p3wVBPNX5K178UbNi8Q7gQVqwXT1Yq9RejIGG9G2IPEo93T6RcA==", - "requires": { - "@types/long": "^4.0.1", - "lodash.camelcase": "^4.3.0", - "long": "^4.0.0", - "protobufjs": "^7.0.0", - "yargs": "^16.2.0" - } - }, - "@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" - }, - "@types/long": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" - }, - "@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "requires": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bignumber.js": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.0.tgz", - "integrity": "sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "bunyan": { - "version": "1.8.15", - "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", - "integrity": "sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==", - "requires": { - "dtrace-provider": "~0.8", - "moment": "^2.19.3", - "mv": "~2", - "safe-json-stringify": "~1" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "catharsis": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", - "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "cloudevents": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/cloudevents/-/cloudevents-6.0.2.tgz", - "integrity": "sha512-mn/4EZnAbhfb/TghubK2jPnxYM15JRjf8LnWJtXidiVKi5ZCkd+p9jyBZbL57w7nRm6oFAzJhjxRLsXd/DNaBQ==", - "requires": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "util": "^0.12.4", - "uuid": "^8.3.2" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "dot-prop": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "dtrace-provider": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.8.tgz", - "integrity": "sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==", - "optional": true, - "requires": { - "nan": "^2.14.0" - } - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" - }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" - }, - "escodegen": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", - "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, - "eventid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eventid/-/eventid-2.0.1.tgz", - "integrity": "sha512-sPNTqiMokAvV048P2c9+foqVJzk49o6d4e0D/sq5jog3pw+4kBgyR0gaM1FM7Mx6Kzd9dztesh9oYz1LWWOpzw==", - "requires": { - "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" - }, - "fast-text-encoding": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", - "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.1.tgz", - "integrity": "sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==", - "requires": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gaxios": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-4.3.3.tgz", - "integrity": "sha512-gSaYYIO1Y3wUtdfHmjDUZ8LWaxJQpiavzbF5Kq53akSzvmVg0RfyOcFDbO1KJ/KCGRFz2qG+lS81F0nkr7cRJA==", - "requires": { - "abort-controller": "^3.0.0", - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-4.3.1.tgz", - "integrity": "sha512-x850LS5N7V1F3UcV7PoupzGsyD6iVwTVvsh3tbXfkctZnBnjW5yu5z1/3k3SehF7TyoTIe78rJs02GMMy+LF+A==", - "requires": { - "gaxios": "^4.0.0", - "json-bigint": "^1.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "google-auth-library": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.6.0.tgz", - "integrity": "sha512-y6bw1yTWMVgs1vGJwBZ3uu+uIClfgxQfsEVcTNKjQeNQOVwox69+ZUgTeTAzrh+74hBqrk1gWyb9RsQVDI7seg==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.0.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "dependencies": { - "gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - }, - "gcp-metadata": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.0.1.tgz", - "integrity": "sha512-jiRJ+Fk7e8FH68Z6TLaqwea307OktJpDjmYnU7/li6ziwvVvU2RlrCyQo5vkdeP94chm0kcSCOOszvmuaioq3g==", - "requires": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - } - } - } - }, - "google-gax": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", - "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", - "requires": { - "@grpc/grpc-js": "~1.7.0", - "@grpc/proto-loader": "^0.7.0", - "@types/long": "^4.0.0", - "abort-controller": "^3.0.0", - "duplexify": "^4.0.0", - "fast-text-encoding": "^1.0.3", - "google-auth-library": "^8.0.2", - "is-stream-ended": "^0.1.4", - "node-fetch": "^2.6.1", - "object-hash": "^3.0.0", - "proto3-json-serializer": "^1.0.0", - "protobufjs": "7.1.2", - "protobufjs-cli": "1.0.2", - "retry-request": "^5.0.0" - } - }, - "google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "requires": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "dependencies": { - "gaxios": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", - "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", - "requires": { - "extend": "^3.0.2", - "https-proxy-agent": "^5.0.0", - "is-stream": "^2.0.0", - "node-fetch": "^2.6.7" - } - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-stream-ended": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", - "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==" - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js2xmlparser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", - "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", - "requires": { - "xmlcreate": "^2.0.4" - } - }, - "jsdoc": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", - "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", - "requires": { - "@babel/parser": "^7.9.4", - "@types/markdown-it": "^12.2.3", - "bluebird": "^3.7.2", - "catharsis": "^0.9.0", - "escape-string-regexp": "^2.0.0", - "js2xmlparser": "^4.0.2", - "klaw": "^3.0.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "marked": "^4.0.10", - "mkdirp": "^1.0.4", - "requizzle": "^0.2.3", - "strip-json-comments": "^3.1.0", - "taffydb": "2.6.2", - "underscore": "~1.13.2" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "requires": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "klaw": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", - "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", - "requires": { - "uc.micro": "^1.0.1" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" - }, - "long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "markdown-it": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", - "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", - "requires": { - "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } - }, - "markdown-it-anchor": { - "version": "8.6.5", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.5.tgz", - "integrity": "sha512-PI1qEHHkTNWT+X6Ip9w+paonfIQ+QZP9sCeMYi47oqhH+EsW8CrJ8J7CzV19QVOj6il8ATGbK2nTECj22ZHGvQ==", - "requires": {} - }, - "marked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.2.tgz", - "integrity": "sha512-JjBTFTAvuTgANXx82a5vzK9JLSMoV6V3LBVn4Uhdso6t7vXrGx7g1Cd2r6NYSsxrYbQGFCMqBDhFHyK5q2UvcQ==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "optional": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "optional": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", - "optional": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "optional": true - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - }, - "proto3-json-serializer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", - "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", - "requires": { - "protobufjs": "^7.0.0" - } - }, - "protobufjs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", - "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "dependencies": { - "long": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", - "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" - } - } - }, - "protobufjs-cli": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", - "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", - "requires": { - "chalk": "^4.0.0", - "escodegen": "^1.13.0", - "espree": "^9.0.0", - "estraverse": "^5.1.0", - "glob": "^8.0.0", - "jsdoc": "^3.6.3", - "minimist": "^1.2.0", - "semver": "^7.1.2", - "tmp": "^0.2.1", - "uglify-js": "^3.7.7" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-2.0.1.tgz", - "integrity": "sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==", - "requires": { - "duplexify": "^4.1.1", - "inherits": "^2.0.3", - "pump": "^3.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "requizzle": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", - "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", - "requires": { - "lodash": "^4.17.14" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", - "optional": true, - "requires": { - "glob": "^6.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safe-json-stringify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz", - "integrity": "sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", - "requires": { - "stubs": "^3.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" - }, - "superagent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.3.tgz", - "integrity": "sha512-oBC+aNsCjzzjmO5AOPBPFS+Z7HPzlx+DQr/aHwM08kI+R24gsDmAS1LMfza1fK+P+SKlTAoNZpOvooE/pRO1HA==", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.3", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.0.1", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "taffydb": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", - "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==" - }, - "teeny-request": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", - "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - } - }, - "tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "requires": { - "rimraf": "^3.0.0" - }, - "dependencies": { - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==" - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "xmlcreate": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", - "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" - } - } -} From 824f873327cae717ed9fba02f78762c1bd0d34b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Taneli=20Lepp=C3=A4?= Date: Thu, 2 Feb 2023 10:49:31 +0100 Subject: [PATCH 24/58] Added mesh_certificates setting in GKE cluster. --- modules/gke-cluster/README.md | 32 ++++++++++++++++---------------- modules/gke-cluster/main.tf | 7 +++++++ modules/gke-cluster/variables.tf | 3 ++- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index dabead4f..df7f14ca 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -103,25 +103,25 @@ module "cluster-autopilot" { | name | description | type | required | default | |---|---|:---:|:---:|:---:| -| [location](variables.tf#L118) | Cluster zone or region. | string | ✓ | | -| [name](variables.tf#L175) | Cluster name. | string | ✓ | | -| [project_id](variables.tf#L201) | Cluster project id. | string | ✓ | | -| [vpc_config](variables.tf#L218) | VPC-level configuration. | object({…}) | ✓ | | +| [location](variables.tf#L119) | Cluster zone or region. | string | ✓ | | +| [name](variables.tf#L176) | Cluster name. | string | ✓ | | +| [project_id](variables.tf#L202) | Cluster project id. | string | ✓ | | +| [vpc_config](variables.tf#L219) | VPC-level configuration. | object({…}) | ✓ | | | [cluster_autoscaling](variables.tf#L17) | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({…}) | | null | | [description](variables.tf#L38) | Cluster description. | string | | null | | [enable_addons](variables.tf#L44) | Addons enabled in the cluster (true means enabled). | object({…}) | | {…} | -| [enable_features](variables.tf#L68) | Enable cluster-level features. Certain features allow configuration. | object({…}) | | {…} | -| [issue_client_certificate](variables.tf#L106) | Enable issuing client certificate. | bool | | false | -| [labels](variables.tf#L112) | Cluster resource labels. | map(string) | | null | -| [logging_config](variables.tf#L123) | Logging configuration. | list(string) | | ["SYSTEM_COMPONENTS"] | -| [maintenance_config](variables.tf#L129) | Maintenance window configuration. | object({…}) | | {…} | -| [max_pods_per_node](variables.tf#L152) | Maximum number of pods per node in this cluster. | number | | 110 | -| [min_master_version](variables.tf#L158) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | -| [monitoring_config](variables.tf#L164) | Monitoring components. | object({…}) | | {…} | -| [node_locations](variables.tf#L180) | Zones in which the cluster's nodes are located. | list(string) | | [] | -| [private_cluster_config](variables.tf#L187) | Private cluster configuration. | object({…}) | | null | -| [release_channel](variables.tf#L206) | Release channel for GKE upgrades. | string | | null | -| [tags](variables.tf#L212) | Network tags applied to nodes. | list(string) | | null | +| [enable_features](variables.tf#L68) | Enable cluster-level features. Certain features allow configuration. | object({…}) | | {…} | +| [issue_client_certificate](variables.tf#L107) | Enable issuing client certificate. | bool | | false | +| [labels](variables.tf#L113) | Cluster resource labels. | map(string) | | null | +| [logging_config](variables.tf#L124) | Logging configuration. | list(string) | | ["SYSTEM_COMPONENTS"] | +| [maintenance_config](variables.tf#L130) | Maintenance window configuration. | object({…}) | | {…} | +| [max_pods_per_node](variables.tf#L153) | Maximum number of pods per node in this cluster. | number | | 110 | +| [min_master_version](variables.tf#L159) | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | +| [monitoring_config](variables.tf#L165) | Monitoring components. | object({…}) | | {…} | +| [node_locations](variables.tf#L181) | Zones in which the cluster's nodes are located. | list(string) | | [] | +| [private_cluster_config](variables.tf#L188) | Private cluster configuration. | object({…}) | | null | +| [release_channel](variables.tf#L207) | Release channel for GKE upgrades. | string | | null | +| [tags](variables.tf#L213) | Network tags applied to nodes. | list(string) | | null | ## Outputs diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index f55f46e8..e9c36ed1 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -262,6 +262,13 @@ resource "google_container_cluster" "cluster" { } } + dynamic "mesh_certificates" { + for_each = var.enable_features.mesh_certificates != null ? [""] : [] + content { + enable_certificates = var.enable_features.mesh_certificates + } + } + dynamic "monitoring_config" { for_each = var.monitoring_config != null && !var.enable_features.autopilot ? [""] : [] content { diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index f02ed504..ecfa11c9 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -84,6 +84,7 @@ variable "enable_features" { groups_for_rbac = optional(string) intranode_visibility = optional(bool, false) l4_ilb_subsetting = optional(bool, false) + mesh_certificates = optional(bool) pod_security_policy = optional(bool, false) resource_usage_export = optional(object({ dataset = string @@ -232,4 +233,4 @@ variable "vpc_config" { master_authorized_ranges = optional(map(string)) }) nullable = false -} \ No newline at end of file +} From 46ba8f5691b4869dbe5271b400a8206dfb69b5c1 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 2 Feb 2023 16:13:56 +0100 Subject: [PATCH 25/58] Skip node config for autopilot (#1127) --- CHANGELOG.md | 7 +++++++ modules/gke-cluster/main.tf | 17 ++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 59e4d371..4477f3f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ All notable changes to this project will be documented in this file. ### BLUEPRINTS +- [[#1124](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1124)] Removed unused file package-lock.json ([apichick](https://github.com/apichick)) +- [[#1119](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1119)] **incompatible change:** Multi-Cluster Ingress gateway api config ([wiktorn](https://github.com/wiktorn)) +- [[#1111](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1111)] **incompatible change:** In the apigee module now both the /22 and /28 peering IP ranges are p… ([apichick](https://github.com/apichick)) - [[#1106](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1106)] Network Dashboard: PSA support for Filestore and Memorystore ([aurelienlegrand](https://github.com/aurelienlegrand)) - [[#1110](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1110)] Bump cookiejar from 2.1.3 to 2.1.4 in /blueprints/apigee/bigquery-analytics/functions/export ([dependabot[bot]](https://github.com/dependabot[bot])) - [[#1097](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1097)] Use terraform resource to activate Anthos Service Mesh ([wiktorn](https://github.com/wiktorn)) @@ -49,6 +52,10 @@ All notable changes to this project will be documented in this file. ### MODULES +- [[#1125](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1125)] Added mesh_certificates setting in GKE cluster ([rosmo](https://github.com/rosmo)) +- [[#1094](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1094)] Added GLB example with MIG as backend ([eliamaldini](https://github.com/eliamaldini)) +- [[#1119](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1119)] **incompatible change:** Multi-Cluster Ingress gateway api config ([wiktorn](https://github.com/wiktorn)) +- [[#1111](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1111)] **incompatible change:** In the apigee module now both the /22 and /28 peering IP ranges are p… ([apichick](https://github.com/apichick)) - [[#1116](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1116)] Include cloudbuild API in project module ([aymanfarhat](https://github.com/aymanfarhat)) - [[#1115](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1115)] add new parameters support in apigee module ([blackillzone](https://github.com/blackillzone)) - [[#1112](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1112)] Add HTTPS frontend with SNEG example ([juliodiez](https://github.com/juliodiez)) diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index e9c36ed1..83604c00 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -55,15 +55,18 @@ resource "google_container_cluster" "cluster" { # the default nodepool is deleted here, use the gke-nodepool module instead # default nodepool configuration based on a shielded_nodes variable - node_config { - dynamic "shielded_instance_config" { - for_each = var.enable_features.shielded_nodes ? [""] : [] - content { - enable_secure_boot = true - enable_integrity_monitoring = true + dynamic "node_config" { + for_each = var.enable_features.autopilot ? [] : [""] + content { + dynamic "shielded_instance_config" { + for_each = var.enable_features.shielded_nodes ? [""] : [] + content { + enable_secure_boot = true + enable_integrity_monitoring = true + } } + tags = var.tags } - tags = var.tags } From ce1f86d20b6f90a5d688e24813fd9552af67ddd6 Mon Sep 17 00:00:00 2001 From: javiergp Date: Thu, 2 Feb 2023 19:13:13 +0100 Subject: [PATCH 26/58] Vertex Pipelines MLOps framework blueprint (#1038) * First release of the MLOps blueprint --- blueprints/README.md | 2 +- .../cloud-operations/apigee/bundle-export.zip | Bin 0 -> 68946 bytes .../cloud-operations/apigee/bundle-gcs2bq.zip | Bin 0 -> 71026 bytes blueprints/data-solutions/README.md | 9 +- .../data-solutions/vertex-mlops/README.md | 79 +++++ .../data-solutions/vertex-mlops/ci-cd.tf | 74 +++++ .../vertex-mlops/images/mlops_projects.png | Bin 0 -> 32248 bytes .../data-solutions/vertex-mlops/main.tf | 278 ++++++++++++++++++ .../data-solutions/vertex-mlops/notebooks.tf | 60 ++++ .../data-solutions/vertex-mlops/outputs.tf | 52 ++++ .../vertex-mlops/terraform.tfvars.sample | 20 ++ .../data-solutions/vertex-mlops/variables.tf | 152 ++++++++++ .../data_solutions/vertex_mlops/__init__.py | 13 + .../vertex_mlops/fixture/main.tf | 39 +++ .../data_solutions/vertex_mlops/test_plan.py | 23 ++ 15 files changed, 799 insertions(+), 2 deletions(-) create mode 100644 blueprints/cloud-operations/apigee/bundle-export.zip create mode 100644 blueprints/cloud-operations/apigee/bundle-gcs2bq.zip create mode 100644 blueprints/data-solutions/vertex-mlops/README.md create mode 100644 blueprints/data-solutions/vertex-mlops/ci-cd.tf create mode 100644 blueprints/data-solutions/vertex-mlops/images/mlops_projects.png create mode 100644 blueprints/data-solutions/vertex-mlops/main.tf create mode 100644 blueprints/data-solutions/vertex-mlops/notebooks.tf create mode 100644 blueprints/data-solutions/vertex-mlops/outputs.tf create mode 100644 blueprints/data-solutions/vertex-mlops/terraform.tfvars.sample create mode 100644 blueprints/data-solutions/vertex-mlops/variables.tf create mode 100644 tests/blueprints/data_solutions/vertex_mlops/__init__.py create mode 100644 tests/blueprints/data_solutions/vertex_mlops/fixture/main.tf create mode 100644 tests/blueprints/data_solutions/vertex_mlops/test_plan.py diff --git a/blueprints/README.md b/blueprints/README.md index 83588bfe..295a37c3 100644 --- a/blueprints/README.md +++ b/blueprints/README.md @@ -6,7 +6,7 @@ Currently available blueprints: - **apigee** - [Apigee Hybrid on GKE](./apigee/hybrid-gke/), [Apigee X analytics in BigQuery](./apigee/bigquery-analytics), [Apigee network patterns](./apigee/network-patterns/) - **cloud operations** - [Active Directory Federation Services](./cloud-operations/adfs), [Cloud Asset Inventory feeds for resource change tracking and remediation](./cloud-operations/asset-inventory-feed-remediation), [Fine-grained Cloud DNS IAM via Service Directory](./cloud-operations/dns-fine-grained-iam), [Cloud DNS & Shared VPC design](./cloud-operations/dns-shared-vpc), [Delegated Role Grants](./cloud-operations/iam-delegated-role-grants), [Networking Dashboard](./cloud-operations/network-dashboard), [Managing on-prem service account keys by uploading public keys](./cloud-operations/onprem-sa-key-management), [Compute Image builder with Hashicorp Packer](./cloud-operations/packer-image-builder), [Packer example](./cloud-operations/packer-image-builder/packer), [Compute Engine quota monitoring](./cloud-operations/quota-monitoring), [Scheduled Cloud Asset Inventory Export to Bigquery](./cloud-operations/scheduled-asset-inventory-export-bq), [Configuring workload identity federation for Terraform Cloud/Enterprise workflow](./cloud-operations/terraform-enterprise-wif), [TCP healthcheck and restart for unmanaged GCE instances](./cloud-operations/unmanaged-instances-healthcheck), [Migrate for Compute Engine (v5) blueprints](./cloud-operations/vm-migration), [Configuring workload identity federation to access Google Cloud resources from apps running on Azure](./cloud-operations/workload-identity-federation) -- **data solutions** - [GCE and GCS CMEK via centralized Cloud KMS](./data-solutions/cmek-via-centralized-kms), [Cloud Composer version 2 private instance, supporting Shared VPC and external CMEK key](./data-solutions/composer-2), [Cloud SQL instance with multi-region read replicas](./data-solutions/cloudsql-multiregion), [Data Platform](./data-solutions/data-platform-foundations), [Spinning up a foundation data pipeline on Google Cloud using Cloud Storage, Dataflow and BigQuery](./data-solutions/gcs-to-bq-with-least-privileges), [#SQL Server Always On Groups blueprint](./data-solutions/sqlserver-alwayson), [Data Playground](./data-solutions/data-playground) +- **data solutions** - [GCE and GCS CMEK via centralized Cloud KMS](./data-solutions/cmek-via-centralized-kms), [Cloud Composer version 2 private instance, supporting Shared VPC and external CMEK key](./data-solutions/composer-2), [Cloud SQL instance with multi-region read replicas](./data-solutions/cloudsql-multiregion), [Data Platform](./data-solutions/data-platform-foundations), [Spinning up a foundation data pipeline on Google Cloud using Cloud Storage, Dataflow and BigQuery](./data-solutions/gcs-to-bq-with-least-privileges), [#SQL Server Always On Groups blueprint](./data-solutions/sqlserver-alwayson), [Data Playground](./data-solutions/data-playground), [MLOps with Vertex AI](./data-solutions/vertex-mlops) - **factories** - [The why and the how of Resource Factories](./factories), [Google Cloud Identity Group Factory](./factories/cloud-identity-group-factory), [Google Cloud BQ Factory](./factories/bigquery-factory), [Google Cloud VPC Firewall Factory](./factories/net-vpc-firewall-yaml), [Minimal Project Factory](./factories/project-factory) - **GKE** - [Binary Authorization Pipeline Blueprint](./gke/binauthz), [Storage API](./gke/binauthz/image), [Multi-cluster mesh on GKE (fleet API)](./gke/multi-cluster-mesh-gke-fleet-api), [GKE Multitenant Blueprint](./gke/multitenant-fleet), [Shared VPC with GKE support](./networking/shared-vpc-gke/) - **networking** - [Decentralized firewall management](./networking/decentralized-firewall), [Decentralized firewall validator](./networking/decentralized-firewall/validator), [Network filtering with Squid](./networking/filtering-proxy), [Network filtering with Squid with isolated VPCs using Private Service Connect](./networking/filtering-proxy-psc), [HTTP Load Balancer with Cloud Armor](./networking/glb-and-armor), [Hub and Spoke via VPN](./networking/hub-and-spoke-vpn), [Hub and Spoke via VPC Peering](./networking/hub-and-spoke-peering), [Internal Load Balancer as Next Hop](./networking/ilb-next-hop), On-prem DNS and Google Private Access, [Calling a private Cloud Function from On-premises](./networking/private-cloud-function-from-onprem), [Hybrid connectivity to on-premise services through PSC](./networking/psc-hybrid), [PSC Producer](./networking/psc-hybrid/psc-producer), [PSC Consumer](./networking/psc-hybrid/psc-consumer), [Shared VPC with optional GKE cluster](./networking/shared-vpc-gke) diff --git a/blueprints/cloud-operations/apigee/bundle-export.zip b/blueprints/cloud-operations/apigee/bundle-export.zip new file mode 100644 index 0000000000000000000000000000000000000000..8b090adfc03af60f1f337664fa94bda6c0cae1f2 GIT binary patch literal 68946 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ΠQ&QtG|zuzo^W9F2deO1u_ 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ℜs(gyre+5Hc6Z~b&TyNuQWi>2Oz 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 literal 0 HcmV?d00001 diff --git a/blueprints/cloud-operations/apigee/bundle-gcs2bq.zip b/blueprints/cloud-operations/apigee/bundle-gcs2bq.zip new file mode 100644 index 0000000000000000000000000000000000000000..19a037898bf5b9800d0d2a95955086a96f39f98a GIT binary patch literal 71026 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%0DgB0}~E^ek$dmFiX- zkBXPey_kwFu982hz&yD%(CrPMljc6d^5>rJ-(;Uryf2bBYTx6x+i;_(Q4}Q}XTxGS z637aq9B?qKWwBZhjGhBAdOA5Lzc|4FOw~di*IZTNiLkv?L!}8B8J2lUuU$@* zY$vBcobTY;bE^$mtx6~l1a-ETH+8>Zt?YuFR(lLASs^=_DAKP3LkB5qpJ&zA^(Nm~ z=028=My{7$AtWLo^3t`~g6W<*Eqc~j(aRr&1%SV>sn9h!a@Qtnw+e5b_(Nx}$t4`$JnbXC;14bj&t#u@ zaU0C>Y0JanEGlAbkdB)mv)vLJdcgarcZ)}{=0kSy63)w&d9$khask`J5 zXv(It;)Baqr^6Yi@@S9h8fOw`sPZ(dU&1rq zdNp2u)iP@rTYUe$>tV*fb?JYug8RuAZ(asB4WA36{S$hh5C8hx&yjH7eJ#n&=XiMV z^B);zWgAxR_w=4>+QAYEBjSOKggr{Bc`aZ?tfr~8F0J)|GfUJdG%TIKr-hihT5+qIltVa zrcRExHuOI;%|5mXK5{I4M;n;GzcaOShLNq4P&52V#iU+oNpJ3dQPB*2sB_}$ie~7vUWp7Z z9~k$rYWgKx4N(*a=S$145pGQEozh25D3M#fDxyPi4c;B+v%@C*m__V`>|ObK8r(LI3C5o!k?Q?URyV4sEEbVd zsepjsWs-$n*lfhvxv$dnZ09mR?D(!ZUy4BkGZ?Toz+us>SF1DNbCh#daeiN!IS5#({me4=ScvnL;FTS1T1*XU-u35U zRvyNBNAZq!FqrYD+D$X>P9i7HZx z^Frj}(fLxPZDVFhEJKbNL5_@#*xIj?Q7}?lrV2J8FMCAews^vz($2MG01JE?qZf8X zdmyAXQhKO4uXmNzL~xz9NZiXEihB`J=(D~0wi>_D_n##5x#7qZ*t5aDPk@hceR~%ciMpQJz2JMvK!jvd% zw7}lv#$(LJi;1dc9XjsZ4$Lfbf0rTrpcB`(j-kIXOlETMe`RLAJO8q874(ow@tQC& ze>1#Q>X;z;+sdymv%D(v!Ozlwws><(VKz))+-$3?BqP62H0B@L;wYpk!yWTs^ccjp zSDjmu>#DB+c(_RDT5|wKNl?=ldif{5x`{cdmD$g&-1&T^MjyiOPV|P|{qmOlHUYP? zoxBv9583J_T9!@jqiCR=Dq7w?xR zJPt?+HvAZ9?20tPi5iJDG`CytD(d{>{;sdWFaF5o5A8hb=1F+36%GDc{DR*c$=a+4 z3-_;=2;iU2uZdv*m1{clBK}Ih{`qqDO!Ugkr^~5U}z*xK^mm@TyWeAz(e89R>^OW{>A8tX<^hCtoPd)^0eY^7uR5e?792IN9vA~RnM zu%D!XUboxDTP}Y2UG(jD-$Xt=n{Z!!e#`5GucBPg% z>y)CLa!d~q>e#d(EQEYnCjFU0)SZIN&S47COTJv#>nw~9K|=16pKOm)=hm&k>X+S; zk%!QGNBe1xy}EO2^Ed&?wH9s%e8;=WxX2G#Z11>PqRBg~D?-{eFu*}_dAl4*9ak?R zoM(0r&pL%!Lkr~6($Q8%99QvUJ~xaZHOe6kS!bgC_v_Qkz31Zp<+#@q!*74!TlYf~ zCUeIvD)*()0`!ngYEn|}tw&dDDtE)HIBJJkoQ^XlBtGeu+Lt&IVT zBg{=)VH?)!mypV1l>N@W4!Wv19FyA-!*B ztAen?P_@z`DKVJ`)E0KyWWE>>VNmR3dUMb%Q8yk9UA534VYQf|9C z{tKFtTJ{9W=jX$R4v6=!-2l8@&F_T1$1htKZF_1@XhhdZ2yko-<%!c{o*{5qF-vwnim|=btfymBEkF?(A z_2~0No|8p?Vyhs?g(X;c<-%5D72U*f)_a0SH}0`d&L}3H1m-l*y7LpY=pWOj)b*XN zOULIrCHml6|BCVpdQan9%cu$Kd+)JG5#toK1QU`qimD9oAzdul?aArW)oP?<$5NLP zk>EvkBx7Pn1%)Lj2R<4xdUf2Tz&b(G*@6aF>x&Sd)Ha&h@6~aw*8l56Q?Gkz+@}Wo z$PJu7;(Q2@W18~aW*@*1PzAb4Un3bX+dSBK2 zo4}rzs2l8KCG*cE>ZM4d6=u`Qs=n=3`I#N&=PSx9y1@MPXsXw)l((49 zHxCy{<|^D`G+B#LnV?FDo)v|4%yDpba?Q;p?$M32Jcx%Gv%#z=JEgGJiY;lRMSJQ} z()gs@%m42M!rx#%ovyFH=)PLNnjO;?bkD8w`h^Ft828Cz3bU!)Jp1xFec%6j`rhqf zKYfOsXLXx2*Vq2)F?X_eM&7s3SC4qQ`u~3;RQJf?o38u0Zw-3L$oB#LXCZrg_h$c| za4hw=OE-YCbL)tbfGI;Gbk-$ngVS2*HtY3HN8x5fOUyu*31>S%6Q?D8oS|pJbmXPU zHR@3|bS2OS;KDUrA6}@c`>IUq*Vt8G&&bD0^}Z(jgx2$LYWd#NIY;;k!zmQ+cp9Ar(7}|}>_b-1~Lw3XL&??zhBG=FxjnzhFkcMQxYl#D)vE&Nd z$~2cR_avh!dmZz=BD8xxO?kjsMT$_BEt+5m#|gzou2x};tADQKD=G?fHIrBS-@0nDV`q&DQObcx(Mzp&)2=#tvdP*)y{aO~N zLY~n*)gUWaLpr{-l(JQjF5M|oLHm27SgsOUr&|#!d6PQ}jaX>LL_6+_HUs4J5TAQfBox^XmYo<&BC1rP5S!_Zwy*)b3fqx3%Z$w zUwz_L?)_j2{z8A|IZ9u8jbraVsGk?6H^1R+!LxVO&90L0)+c%|T=cd#d1E$h?Y{h+ z2W)Lq6P0fA_U6trM?YSKUo&~COy4L1^ZWm|nzzLFLT!;al~fLAa+zqY#2G~8&8aKT zwS~BLg7zV{_CjpUDXM+Q`vSAOy70ls7_+0oZ=w{S@Rj4!Yt3DW+WuhkOugMtTzS%0 zg77ee?;;)RFD!09UnYK+pq~`Gq!a}PiWsYM8>JOW06i~lr;bOijl90}1SPI|wvTZ3 z$jU_)bD4t41Gf-KF=O^Q9g&3N1ZINr8hdJ14S|Oj5dAuu?oU*{=$iyRWT1cDHwl_% ziobwbwyXB1es9zcB<|Q|uUwc4H)t%x0#Tqi$LG`P8B?Kmdm5sD9=W6L;u;cT0U$ z@ZtI?^3H?wWH5PBcYZ3}KiH?5Te$M|OqYLVJbCb7^@j9~#jkHnJx)>RZe!qjRV-0H zOi(L0cMB|9MuKbQe2H@V^t4BOjd7Um@w38Bx-UZiYt|7;s8<^5Zdl`3&i_(GTZlV?4Hj`v- zg-@ouKXNmCx0#38^|)Mz_RCk^%!)s117E*Gd?eui<(BU{Z!6oKr{?Fi39v_ORWD?( z41O8hq5~#as?^9gi#F90YahgGe^l^OY@;VbRTdZxhJ3q}8KVR(yBASs1OiY@BFxRW zG8&91G^^JIeLv6$y}&2+c=@|LcXi=h=5}6HpBH~d9&$3jCVa*A)$mr| za00rvaI#gs56E^)8sUOC2K12}IEqI?F@nzFNNfr%)R4wH3%#*f5YosVkbNQSxWgrY z%f5sYjys$DUh9eS5H2Ex1Sd|O+wXNRMdj949A0^vkoObm_SL6~@bl2A|N2QF^wV=} z_r~YX^_54;;Ju^$%!S`~CYQx)l_vv{*v9ZsuOO#WMlZ zK>U&z{RtBT$&p~zb@U5x<|l_p{~=2EmI!~du)h7{Px|V<0Sqt!1d;ipDQGvd)Q3+tL_`M%!5lTp%=pqbwY3pSLb5NNg)mFB5sE){AhF zG+V|f6&KgGc5>2(ZzT4&x#F`E?gK*lMD&Wq)8*7;l4E~Z5oZ7wD;~tE(~ceKePYtH z1V_TY80+%L(!RCdS&F^eV76f9OIR^=*Aoq?Tf?3}E>=-{lBvv*@dJ=5q!s_DF5kph z;HN0ETSf&3wT(%VWAQO-s+i1dVAl}ZY}RI79ER zSO=l^c`t{@1o1cF-%#F$ldFP-VV%>Z1a=ljW}D@YG~ zjAt!tk;f{wFB5DnM6Zs_%iE;a# zzxjy%7ejw@T-$k?ez5~ScnJHG{tGkS+?{$P!#vTR9T#EHmm+omOtynP$lq_5iJ&#Q zw9QL$G4NO}Z!|5p+jLcXWEsUqR)(j2knVdKNU80vz%@5W8l+6HgbIHW_w}DkS$N)z zKht<0*+N?D&X3lrrzT*F&bGmWt;+G2P9c4ZHwY5a0Iw13h?D$rxjy#?Pebj+8gp!> zObRzqERGyHyH1%df0qIB_4*4(6};@f!E&y>A?gDW3D>ouD`{>Idv zA9(}nnIRLN@5DZ9yP}I7w}%+gSIb%2iY8{uk$Xh6B@g2zv0g)!LLo<}09-($zreR0 zI6~)PWiM+?>$>HJ9dr*{Li<$%{v^WvA0H+WKf0n!wq`b_=MBzhwS(Ya*aJa6Pc(t~ z^VQAAJmIW7Ae`wQ~NA=QizZ$xmkK7gS%hBi_ZL*-(D`zn$a1Ve~&!8m#vslxWS5yS1twAmQLbiB1TN-NUHnrbE*K!3+T zzq6N271rgw&HN;oCs%^QA36%Zt^|iqJNjny5gd1g3ZF>xcvovhkz1If2U=sh zUfI>G2SclNo9yd&1qFfP#Is#;;u;}2HAIIwT|I8#HFGT2yICml#6;--dn&;p?^6}t zRf2o<$p@wKAM3^PKmI=TU~;jzKg8?HWC`SbfTc;DqE@PxnAboOWhmtDN4KR*1yTg%uqVgB5n- zvHT?|0>6dt{K1#$NfG~ztjt5l&6>~)zpy_(VqSSo__{>D8csFH=4dU8JQe%EhLsNK zc7bRh(7M&GDn`w9Vl`Mc%%L+~qwtEhk9aprq(E2_-v0~v&>*dJ&o5)bQ>Ls%8QD+~>qQE31|-Zm>?#__AKPu*|Yet!J& z$OH5KH`(WM2)DufM(ukb&SWZZPABM_^@&TyRZhp`OafM|dqxEjuiP>- z#|nvNO{?(HAtXNBoaxo63d8{BR1dGtN4DJ_`DSXRln)!F{xPM$Kk-eAwfepo#qyD9 z`$;j1<&+7#aIBFX%PwmCaF13!6r&ZjZPu#;pE|7*FvFTMqXP(e)DV~}HmGy{Fkk~d zV-EzvdIjC|Cn79EJl@PMJs(K*f&0mXonolCy;b3AQj}P7nnT5PJBkvSCA6q7;(?H6 z;cAwe#F|M#%#hZ@a-zVdt`nN`>o2aJC+r_F^|z1j0)0!x`FTyVi3PM;`&Sy;RsO{; zg#DN=&qS{$s;A4_?t^{LnB@sai%vPkJ5GlKUD_I#ygd3EURuO@MszgQgwB39!{dCb z(q@rq-0FT>El3&Jh}1cS|9qt6wyLOcQx7Ylf?IkebN@DPX$AS2S6 z3E@ND^zv}l(ePyW(Pk!Cgvj}@3X&YkC6$ z2^v>ePfv8{6tw-cZdK<^sw3zIj-4T1K%cP zI#Oo*IrCFkP0iA8k}v8{^yVABo4Tc0XXVsuQoFw5_dVlCSY6I?XKI$EIb6SU6BXA5 zp&i`)+890Qw<}k4RI-i%@bZ$fGDlHISH1Wl8 zmf18Ha_w`)%MSF(#sF6riokn zKOyqO9`Ql<3di+otazRCN44c56>=sjyKEO?kvXCr_n^FwB0t1cCo@TZPI}&wri(L` zpC$FUrw7ZbR;!Fz0Oy*oqZZIJLp25^&{7f#{)Aiq3%n$b95JsRE7{4Xgv`%Mc5<9x zIT4HsmR){7OqP3AWD=@RQ+zdFj{O(n81QUW;12lMQU`=Ss^?i zfS1p4(^JSrU;+M_*b)CBC3|beq4TmR(mZ+3zS4m9=ZZJJ5WHYt4r2>8&V;44-+B({ zYLaOM(LvJ_@I*FEyJH45z_NB{0?v?iz^tIH<9e7+Fi)FsXIVTa^yX|7#*XHcY!^6k ziMZSmkPgM4IL(Y?v^v)cop@?z=@q5Na?&#!>UZ+M^v=z(uJ-VnPLVT7@9^@pA(e#8 z%H13c0LzYnMX@F7o#ZT!Cf0R0ZTM|PBaBEWNuM(+H&&)(}=5WUK;AiC4AM*{{2tz zmbJP&nZ~c%dyLYfMf~Tn_}{2sfWNtSS>7XJ^gGH%`>4kgDRjD=fJo4ejJ?MvZJ(dw zW5YF$P%k`G0BV)iW~9Eh4lq_6GrB74Wn&2GvO{tcqz}He-0Wr~z}RD5c+J)f<4ZEu zPe1&FmHlGL{~izc#nk3y<&7ZS#%l3wUqsOV;lZo2H>Jxf2|j$yQPO4i~E9DVz14(p4!q*p6EzHkwal z7_zam)EuEao(NvAJH1ppt2PmIQN|C7u|#RD9%_IMi3Nm@G?rg}XH^gJtKRo}J;xgd z`#ZV8?>LA5`BJ*K`u=bsU5ZkEp#Ohg7uNqZru5Fsf8~$&^=G8mSCZHHkPl;}))-ZC zV6m&*tfaav&a^r_Q5!kM5r>bY(-Ek0>Ja&X%2+zJi6sT+n3YCtw&G3UgAGvjz@FJ8AR$TpwHjqhrj|I_KvU zUjsy@Kd@4NZYO#n2uv>@7xrm{fe6e!_U!uZV!vLkIXY3dI|*KNtCPcG6>-X_x;fX5 z+|vOk%$-)5AnB453dsRMIuDBV4gj|SEocf3ObBIeQKTVye6~Tg9ESpvW*~_kwv2+Qxv1=Dq&pqxnA`I~lfco=ZUGchQrJyo z&>3ubk2c4{);)Eb*2kHuwVYVrPFRDnYvO0M`Cyj*Lz^Q0l<)b4`l6R|BWzKHBC>Xp(@g+>4$$YgK{SmgfEh!=0jQ{JuYGt>Lc?dlTTN<&ulm zY_LMPqa+7ARNdq@naoCV+jbl_uNyvbFM&yHI&Z@9jh~e7*3%dE&n>53_?}VuhCjTQ zbpBP6PT~=g|N`>5_?6PM^$GN`ej0CEjsgw!HXZIWgF}}-T$X^4TuI`B= zGEmI^5H#9s4l60 z%(rg8MR}KIb0J2V>$2UlMgdrl_&Jyjdfa?Ryh&06?8 zIq5?I>papBkR=W~a=r@#d+zg^ku8K_doVL(LV#Ze>$-Q{jMnw%2caK)IG}6g-o!)0I}@7_#)2Of{Ko zW4hhr-DF`)r5J|_f7s7A8AcKFZi~^j2XuQ!h&-V77@0wmQ{*lnL)4F=rURJ+eY4Bl z!TaAo8Q-bDK=alfJrx_Gsx7fGPNw9Z=gsy6Q-QFDS{&tJ-hqoIXEqY#t!!fNh%~bB zw*f*_O{kPd!yp1vn-Ss6m5-DJHQ|m$Fv`ggfBaPZab~?w&QC|?N7?^xDLGHow9XkYdoh`93gpSknD z9*)`N$!i$ms}}Q42CTo{w~)U+qyA~!9^nfALcefu<8ghJxu>t6mn8S_I4t=(oOo26 zuLZkf(R#0wfLN+(%|iY$oOmQ#!~^YQO=-q9yJzJ+3r_@pzEXlyG`A)kJKGkN)f_tp z>g`C@(A-rTc|4Z4dXMi@>mw82mCL*YVdsC}(`R13{Vg>0h3P~_jnB=%J{qT&;YOYt zr_XP=9Gsu7rx&{8#!dEUt#&3Y>(DhT+jDY0AB-CEjD4>Zbhv?SWr3d;Gg3h8ykcf_ zyX$l6EG~U~2`H=8+MrdE1k5wQHH#&^tpwd#`s2s#^@peCTLR!u&i8-)2H*56OY+w@ zaG`$*-1LnldAqpi>_@^%z@Fl!0pG!^Bd_W!cTQ8Ad6F}nb>4?^brL4Cl|8c*sx6_U zt|#sKBso#V%>*sk(0fv4wS~0aV2Y+8a==gmb6C8eiMMz>nAeYyxt;A}k-7IGV0!oV zog6q1(Q2(-R?aY1llN_GLbyimfWkLfZZP3udF~dakj#&bu_-M_(fB3KLC5)0-nm}1 z(}PBgxTT)D#7su8h2mvU(XI>De}vYjpz6m5)7Rs0JVI~8Ul@pM^G@{rLnNxr+Jh#x zE6++);iFbgXA5Cbd#HNI^*~>mwcCI-1(8;afNW|paDukN_At@+F5u*+*qW>we`%ce zL?a(o6uFWZrVAQK7ZcuuRp2`h+ptCn&~g3f$6m|eWmt$w$=0^1R|pVZZ=j%%$O4_*Gx#R z^!c*vR+{IP#$q5GU$+$#K2foOY!@f#Y!6E(KM=j2Aegx?T01-*38iL;T2w3p)q5iJ~kSYZwDRPGqMW6z;IOO>vW!B`_ME-$&_C@ zU}s5k^#}ZB#rgWp-1Nirh2a7_6H@6tGEZ?5Nx8_(Y^nbm2c3-VRpPt>; z_`iAlt?<*QXW<*mb{l8;8a)2@T`Sf1x}^7wU87^r$v>5G9*@DJZ4|u$^x3KX{;tbn zzqT(5_K}hgzJ!_(xAuWBtWJq#bY|-aM3U>$ZdMNqAF#Y)rqXd&q7Wjcu$r=hx9Dw3 z3)Hn;M}9V6`0|0-gga>~?I=x&BkNDN^{ByPF=(yL{QhCbVwy#iSli6|V?~ko|m?_I#2rCww^jI>|!{4gU{BR6hf1BCV!88u7 z(!5%U$lEX8mR`J9dHyB|%;$I4*wcbamncrR&Uxg`0H7JQ#a@z@GZyjsl@-~3&icb|EPWS58@Z{3mY?`;>`CS z*Mo+@r&5I8eFZRmYfWFt{(ib3vY_yG2#`tAZYz`)Wde6Lm(Kq|+t8Pkk{dQ^OO_D$C|DW*L4{|;Im(TwH z1)uGkeVF}Z(?M^%d>{N*b768`BG=aX9;mX&9Uc8Azwqj<-rq3++g5_h!GA^U!S1 z7K?2P3^60++$OpY?z};?*@Y!Sn>DbRFL&%2E|!y6At4q_qmr<9>;DKd{ljv$daLNI$pAKEL2)ygyxDMt$V!>PZaTDwsg%5Q}KG zPDojkpO@9Jz(c)L^|lI-+B$fVT_4j~dfH<{gPkD&i4esNSVA2#m2(NQTvs5xhEje`^J2Ee#wGsh5lO_X6Of<;rE^L5$x2{y6K0Qiiv-cK+3#8SQ9xFh4=*CASGYwb51u;PxcBLZL!69UFAc3R}D;7t{} zrzks!s=(D6yyVDj=kkP8_hFz@38C7Cc+k0C3c@l?NwqgL3aMzO|ze|KfPuKZGxoe?JPRwb0ZNXqKEDB)O)^YiZ4tRdy;e5Q`F3)JryW3xxEcG0mCl9OT^_%rm;B_~8qiw%5DdwQ^iz@K4B0y>$CmXF92ySjY%gfBwK|)rChM}pQoGh? zc+%_gKUb4|5h9V>WDEaEA#x0(__tXNsXe`@xvq@EO~jm?C9iSI)+dK+=*!;zJA2Gi z8oCdL=bOgur?cdXtoT-~^?SF!rmVX3iTwOLpT=PleuQ&>A^R^V1wVb|fi>u6v6ZgDn_Q`aAJZmupyC!aX?; zVB@IuW)Ms&h=o_jNk`kRCTyd2z|Whxr0*haGCA($(&;PBl@E#SqfPcLR`2uAwam)J z(f=44ujGO0wJ{b4`WV?XjkT!&w5YTwHUq!I;+_bObuBIYdEAl+0{|>91Up#e?X4Dg zJ8ia_CrS)vA$8{c#iH10>qzNEq)SL_a@cJ9w?aXm~_mNolT)^TT`qvNx-%ZB` zE*b-ChEc&|)e1a^>~St2{bEj>-K9AL9FWs2YEG+-zuH?4#O~N`-_>aBprXM``vx78D~mI&vyvfxHa{)6)^(RH=730+AQZnPpq-PHOX0M{ zl$|@1fFBpjn=GbQ(S>wV>NTeJl>l0Reng~&OZe1v@YXj8qWKKOF#e)?*d zUWmPaam1GG#hLk2xxasHgSt?E0sZB3Y)JLOu_lpzh!0gwIg=eFc`DZj5aS4upY2?% z77ut0LLL+wd$C=oinN%;OBjXZ?b#kACll1linp56oR$iM?#`upT>d!oK5+Zb%)Kjp zVEWb?JO3g_aXnjd%4Qw1yslU&2|_j6vKwME12Er#J)dHIeuUzhhW|fvUcC^%sCnvO>{*4cMSG2@2}nBPing2` zvMgI^GH99?otBs@RV%|j^X#@jjtL*p3yQQCzOBL`4aI9p&^y*a>lF|xO6H=dv5(@K z`7U68{*hVsxEB1sIul-qzaWrh@z^;4M$Fb+D%@hWX>DIY&(Y}&Nv`9Vb$K%Egx`xX z-Oy4;ySA;B(#p|_3|Qmaa7b1wCS0qSP_mGwcfA3j-ozWwz5G4?>eG*GYLEPnA@D-{ zk`&J)$0DG&DRMrRfqaaj8AEQBW{<_B#S~mepn)r)KQ}*Xj_DxRoa$xTOwEFCQ01WdsI? zd9z_9Oj0n+PkFsToO&QPl38yHEgOKNabBG1c{b59#GG02H)tvFs~n1(^tB`hlAc4S?c0>g3C#F z%xK>ogs8G@m6B00y zpv9aTBMZNFz|PY2ntASjemRW4iopN#!TEbj@&vCXPlz;`?fGDeLzukAr@{BvWUkcsSAO0vc}<^G6<2D_Wb&=lJ`4VKEUpd zLKAF&xZ|+sW+$Cu$FMwq0^Ns~(0wz}SI?wB#O_M`g>QasO|Jxh4<2qQM^!Raj-K}^ zO2!zd>?UUKmqmgX2bSwghu)Y=Tr$@YGC4O|iD1Dj_En-4leOI>6Ol2w*|uKkKoMsQ z&2p+cURQAAe|2wazIEwZd9OC>(4JniYhOIBh|f9pKmM<%9#Q;EY4ph5egDI;M4r&` z|K@d{M)%vZ>Gh?*AMZua2gXF8E4AZ!b~RJ$H7n#;5w13CLUjuuHFuC;xWYqEemvsnIQz)Caq-7nMRrvZz@Gzz_88b02r zo{|!7sRPqb7h_8bt&Xx$SRt$L8}B^t+`eoBoI({bOvp3rO!{? zR-X?mBSh?#!x0i6E2Mi`!BxDY#kGvUreHlf6|b7K`?K_4!63W3_ND&C`DjGH`9fVX z8D^cZ8o~$-_h?`iE{0TyQqYJ}-3d@~&P$Q1F2BIE8XA2vE1-0)@u@myU;tJJzOapa<5#^flddAnVhGBsjPrWIBqTtb&@I;VrQXfHi*Fs^My;%+@C5 z^@Yr}5f?k?vdR{sJ-6DksL|F|s+7&fpEQs9eci(EjyU-XdL~2ZC(6L|@-e-V`hDN$ zyZit{K(utuCoyNMqY~NWfnRd7J--yV)!{JHS!Ffx{m83(e{wJ+7*rX>3MOZ^Wlsnr zi!o*m5x7!!Da38@z$(7$L*IU3nV4~ScHc8l-?*fG6}z6P*6`z-F6i8QaLJ4?Vx}xl zgv}A>2}SZS39Cht!yAm@sw`_X=4{Q@fh?aF402MqU4)mEU!B2B%c6qQc4!0b5Qkr7 zV7^%KL?wu;A!y`l)qcgLFtMaawNm&B*-L_T!q1ovzS9S$UoJ0+R7cnk7$&H;)dJV51rH5uK(_-pKb5%NB{{z@*xB5o zI*{n}#%GC+NMd09Ov8h%tYcKjET(k3vMpqoaXK*eG4gTQinK?l{ zYIB&d0(jh3Cf`AOVF@$pmd1q%V9*nLyk!37e(;1?e#d#^(Q)+W2;UM1rr&Ojb;JtD zSSD-JJ{su`X$4vJL+doD#l?!lfJqGEbOTFv8MeSOacj^uPpI1MS1448RF|$6pAUr`3c^>%WbCmgg=yPvUO)DsK%U6bd8PRR-)n1n zq4RsxB!jL4)r1pR-}FtZERcmX2bRM`n^YnVZRtiOlPK9WZ8s6OTW5(< z6k@!v&0a^e#!Wi2izdWGS#L+UCfzC2hJ1->N?kvz!#8&&@E886KIsjdS^3C>N_l&bC4Fsri=_nJF(D;gRHXy>VwZL4`j?nXoQ`0zF09CqfDd; zp>DVd({4p-uk<bt6Xv%>}aoQM6YNog{r@k6wS$sp=ne7<;O?$UD{dPM@lNij6BX zQWjJ-Sqp&&a`WI+FAjYiuL&Q8vSWlP@uAMa?W!AS%yv&*O0=6~lcTv*hPc7FQVUBO zj#YH!`qrW5!Zca1i-Z4A%D5SO|7Go2=0n#C{3-F^gX{|+?-!Ru3L_BN9feM?W0sik z3P4&5p8(CoM_^}gkIQ2pE*d#G_M0so%cl}KEr)GCK{ru^k(x*>VA=6mPM&9NqclfG zNnL!m#1A9nF2}W+i&G2wV5OYehwB7-#)xH}+82OM?evwv@1bE(%S$$NunZNo<-IM$ z55r)ajWw|~MuP#a&4>69X$>)7&7#=}@_;aM&eno3WSre-R@g6k*Jx)zZ=hZ~l-VMd zM{LrbS=Cd=b@QoPH0DL-{GQYG61h;>ft#4qx-?(#c{3W{_yApBGWE(Vxh4Sm`^|ap zi|^ojrM1_jt`EGPUl8tr zHbQaxI#Yl2N4%syyChwDxD`GlAAgX2%dmI3xTL-w0a($j3Q9tv478ou3|S!}*yT>RI}bbR3>=SZKIZo=LKLECQMt2@d5zhy-z?Mj z^9+8~ygd_M`#8TKIxepEY|W^0zNS^Ev`(SEu;8HBuq(mX_I@3ag0}0A2zTrj2#X7K zZyk>EJWZ7l+D83^TV#PF#cU44aHrE-E^v=)Sz$&j@9#MUUxPL8&z#bKt9o>QsXaAs zu0&sOyEZR2%n@^joKXA1wJi3WA1HA**_*fsQ)b0wzPsbk_Ohlq!O8j6YM^}x^gzs1 zSbb*MOtJI;>Ci#Ui9SvW7_gX`k1X1z+#uiQ%%uQ}7n^nc(BlkxZkPE?`O^PS*B4{< z2oR*XPRmudcasL!oW5GH>;ahgx@#00I&+W(qUi|*omSnD`ir*SlC|Y^JvBOcV1b*TiQy@2{jUF1(*_ zjMdR2nc`|9sPZ~a1Oh}S)}h*pI)IxglEW*rzBCf&i|;$HkiI0W{@hVoAJ!-4q{41tZ=R_IM`8u2P6YgExK zaWx+%7B<;z{C0=7Wwjt%t1YciUgs6zZ5C>DiWcR7pF*(I)~7iboh`wYw%xfe$Z*Ir z6e`^PH!1WzBienD3x1~87m}}8>wcZ8DgG^?@!kGf^LoX1TWaerxa`cPlS~K#HY+BB zjLZZlt+ooSX#Lg>MGI>EHeXeo2ssragiGGHEL4dkOfAp*^Df*vPD+}AE`B>Zt0Q*e%weRnjQ)-+S7`p9N8#MJ6VrkCibyZI~anG%+25N(rmew26C)1ti zpkZSplER$!p$8P56$Rv}o3GFKu$Z;AhHj)GWmLcP0%AbEk9gd;R#-X@m4C!Di~UOU zrRUe?^g`+Py*}i^312Scv*Yb2CA?2lq7N0?AyghYouhtvm@Um+!!n9P&=**Ki z)cd(?BZS_>$v)hfF18!g+?)>!Tfu;scj`_#W3iYo7@Vle4psL(2PsR&nVEXzw zz0mnG|NeTs`4UWAI%{*CN)|0mASSDgwm4Q6;@UCRh4{=1@!49{Y$5A%+-|Gf2TzA{ zx>GlcQvxsq?fC3WcWFuI1$(osR{S4iqDVfC`==-O^GhVR1a4V>@G0<;mwh{_?)adA8?gYeBWXKTbY3?nuPZ!JjmnPeP6W5(lst{rsfsJZ8kOc!y5uwV zG^ZRVFk@_^b4E?q6cP3yM*lvugjJfhJ9Yc~MX=9)lmVaE(Y_LY+10+@c@+dl>}=t@ zkyZ=VFINX*1-A?bV10fDiL@BXmyRxY|2a_ zt1qjD^IYibE<7Gr%+azfm9vj0W~X!Wlo|>kU$BuHQy4(^=LM9SGrJZDL&V84(9Gf3m2UO^bt-k3W=xHCE41PE|rlT5h_TCTo3x`DOuC$DpmD^ zATN>DYxhDE9=WJ%s7<+XXeeB7yvkGcp23ChJlan=VxV8-FX+$Z)c15S*EBG%WPaac zux93aB?$0N8!ErC*Y=Fg4A=LN^*TH5L#ua+Kurj7CAlgJ7tSdc)@L+klY~1~NsTx&Lj@a!*YG%@&zj6=XF?y=hh7AlcKC*v7#qI~D zx3SQ(gk|ZW(^=%KCyAN~w&*SAllg9udmBK*NYvwfggmb1CKGQ)49M4lRsVcB*&aBV z+^te|D_}mcb^K7BYQ!euh{FV-n>}K}onReTT*Du8)%H)zW~%|sYzs7&ePk)|U@bDz z^H7l-^cK=6)4*ijzNjOygc}HC4b|wL~LgrZve)s(1Nvp&s)Xlq~2l7xA^b zn9rOXg7LXuQ5D}8%E>o|-3Xri;_ByEe_xUx{RRC(kze3n|L0#17vLum`##_E-0FKH z`x^Xty_kaI)*YafE$UR=APX}u3zqqr%5cL%mS;pMwM8*oVWrvx%N=0`b!-`%RPQ_3 znzQ^aKAAMZ99HJxNOslA$sD$|qF|GJH&4H*P@S;Kvns3~YiYn=*i(z>8~s-_ZtqSn z^nVWv+qy?pXqFv_+I>uid+QwHXO-Rpao`5#-coBnZq@+`Fch{Z_)bj%6WJUE$fWl) zX|r6gI`c=Z-MVemVY?!l)XIqM=pvGRROrASD-dq9(vM`6=dpYt{0YR1{udg@*#w+~ zFpN}@^^BrbXgd+KqV7aGuh1ldkC{bM{QkhNPOH67C1K10Cp4?lRNfwD^BFsffV$zL|jywU@2`(b6Hi(8C>`aO#yw$uhljij$5^+XbX4dXyDnDqhn?nwKgEmlk%HY z_WGNu&`-^}`5}D?_(a9rTjC!Wyx+Qv{)oD{GQBv*=E^2RTPHc9waoQl-DM87+8a69 z%nJ|dO;q%R22zQ&-pgF6`QpA_Il`ir!l6r8D^ws@KV>y{*p?d}$;xl0%UiR-t&`ZF zPyDauf(wn`cUIc%*;S)xh`XrewbZ79L9Fe_t)UZGV`3v#>{*h|l^ZQE_!yIg=CPc_ zgjIJaxOTN)>MPMdOo%1W&IKWGgRb|Y5gWyui2!=U?_GRCe~_`C;Z?3QFBn}~mlEtF zP|7&z994*ZQC4;*Lipbib!ijWClkn#qx%xxeg7igi(*BvPr z?Ec^pc0>Cqv+8Gg=bE}Lx$PW|kxhOw<~1*>M zL5^UYYKA!1#`&<~+@ZAzVG`_+EF@UY@&JK5=@Jzrbd3!B;atif0RvusT5fxI*$e%$ z*J4a35S}TFbC`*IrUy%Yjg3hY8CKKGI{p2Byr-hRzxuzai|_9OEv+%8%67!;7S^qDqySMk|Fa4WDJb)PZ7%mfU- zDe{>T)6yoTcl$t(gC?Exo!5Wi+q3+I>ASea*Jb1W2HNyuWVndl=tE#X<>CGJY2)6h zzJU4G9;=n}&WL!jh50JkNf6Ahvm-D0aZe^_S+WvYW^EdwtxB@h#LUuTHt&``1UgD3 zSDpkgIP4y6N#zw@!f_J!8cL3fdW6S>n>y3X`&_gFy7e>&)4(mmca6r^YIApMK7NZ` zxYnYng3!BDcH!&bxVBT7FAU37lk!u_MerG8@SPU`(|dPc4QL~_k<|2KWM`C?(BhFC zxoa-3abbNN$hzCk0JyEs_#jY6wB2o10t(2-HOE**7SLP8?>0^vRgHl}80|PY7W-tS zXSzLtf4C7e{((I<`MU1Z3(M+p*1%_ctKW#ez;|tq^{C$ST|#Yxot91Znz<7u?XF?e zVo6e*f6N125h926T??-ifI-D_!3ji-l5^Val-0q;=Va`93v#pZN~|?-$SUPH`*y^- zNp|`<4ugD(r}#worSBhCQ*s=K!7C@@Z0`k;2HlQccC+G) zqo_X5fSu&0B?K&&^(3^BaIKzYl4%gt;UQEpyHwYbC4+wxuH4kl9QWUyp5mSAOV{7p zW9?t6v_2H%x?oM+NZ|QCk=j&(xgkT33Qqv?##WMs-!4SU%U75e5<6{~I6$c`yh+*A zKxKxDP-a|R6?{5bGY&2G;P-LA+12iM9({s){zCZzz^Ci!h34-;m^2*}rrb)GJqHj5_BLCtwQxc#tp$%!lWIvn&g2@ zuNrK`esN8Z_qxYF+J4i=isffGQa8P94{1Gx$8n;|Rml(fQQo&I=Pc?xWDd^in6mQb z?1~^|<|lG)#c00S4`>LAd1)6A(Nx}|#!L}Ms?Gz~qRa13dzk^YXJ6Sh`|s5m+_Vns z@S!Oje#&9?jp%EKFU?CV+lXEV^B&5gfs)vAjYCl4fuT3s&USk;)--(=vsr9m{(k3i z%+|DKv6WN(u`P?^_DEL~p=VRelQVbekli90{F6^;B=&t>lx0>)v+a9M?^;p42Dmtj_J(iAzu`Dx-gRFrVIob5Xl02bRxXfrd<1~sBs z&%>%H)oP=jI@A-`0nYc7SSa;^L`Nun!|FA3A-vjc!N)2(x3bOHe3lP}isB`nYNWY6fe) zRhdkb#7suHKBttp_ks^VzT6(Gw9xXiy`3MjSlin|gRN?v zUm4C}eWJ@##Zq(76w;zO8V1_z0lfi}aKMag-?Vk@)JTbtI>eAfg#Zx^b)6b*QC z51Aj+!b2}&*HiQ2JsbRcd-_W3_gybo`v4x+k>gLK8PcDQ$0g8hltzW5RNnU(F;R8p z#PJEYb>LwR;IqMCVyRoFRlKO0eWTDhN_XpJlb9t^ySNjm``4o}MW{60c;5a@_5w810N5s|luBpRYH`lMG&HoL$NQns z(jlW$c^LM&s5(c+4d-@1&Snh;VKv(2)G_gOPY+UxnSG>b`s=Spe#mYWhiN@+!z!$^ zavHf0W9yKoqL}Z{zhLz3?i3jp)ttzaswp;WeQ=v@X{>1H#Iwa|K6o)X**a<83^@`z zAwOd`Q9IP-K|AivP?|GlOBRdOrXEn#T1*NZ;v`g^bd&zD`_3;_dFehn1gWRee7%yq zbpE9=rN-s&I&^mJB&vujTsuEI6bXUDAe^~UEDOQVsZAE1dvp#YyTGHG0?g21mCYFq zzzHxHdvOc!N@==L-754cB&g^>f%*uZ;VqNP-~S+gkvDE1pYoo(Na4uW#e9ECy;bIa zFbm&ymizjtXY{03npeQX#Jp2A_b%e@vSHbd&~nF|_-HQ8*k=0^O(1#?>)Vfg6sbLeri?U zQhzHQ^ZDM`1R)^+AFNb415Ll1YxqQP^tHd)FH|0di3wjARwSPn2n;QnxxCg2u~~08 z8svC*vWNTHSUDRpIik)E_n5wNQ01_l?7x}#K5DN&n(a@*a4DsGZH@I=t0X}!LOzS= zRtHg1f^BNzWre;zM<|uy4(fsnpenFa<|BDGL8F;J>_Fe-A(kij9^afD$~o6=6;PRR zhPL~?n4d@Rj$^9Y{pfW0B>VB^Z+UgK9L;2O6WEJni{74PLI-&R zK%EJiHoN)3FIHSIcuTx1V*|ufOPq*ZQouc>Tf`d)4*ad3kapQ+Z)(#(|kS@jGx| zU+tCdtG?)^vtQmC{3h5paZBHwI&Ni`VP0Rq1>H)FiCYJm^EU1`0nERP2fhsW2P`+m zNiWrV>g+?6ad95`QepL4-`;Uv-u1f z0RG>A>92kNZ@~1Q228&f1-{Q5JZ0Itki49fFO9JU9lTS~%rVMd5c6S=H>Ggcfb6XC zqNAOK%OweRY9lqL14e=N3{&ekg+T_^W~c(}>78B#2hTgk@K*4Zi7z`6$At;-jg9`E zB=M0x{?BEl8`{A1_Rd8+KSFl$kV2+1d7w@(9n4%{Md@=2>bA*dHlJ&NzYx=nKpRUe zs5+6DZ8s;7TG`mj5YCjn#{sXIFT;qhX&`ops=HgP>&k}S@k(G;6)x7n6f@5<(^-Z8=KiF;$bg4 ze4tUB4@gFN9y*|jsguYJ0Vtq6SX*-}$Q++^zNw@yzpi%sdV1jv!iNPvo^z`GPW}y% zFE__J*6P6_mi-eIW`}vPtm*|qFu-c&7R*uy3UL8MiKQ>e0P8n1qvfG367Qg6ieeaM z%j7aLthGs+YbDILQtB{Jgr7I?cTB$WGWXGV#+>_^@Cy!~F2}kWV$H$UbgzzOo=x|2 zs%U_!jrJ|FR2^9Iv|s}u(l#;#+9g=4So1Z4LD?Da(I(jQ`C%h8L#Jw0UIuM4xh!xYB&xJYHHC z7s(O(hLnpP?Z|);A7r>aktPz5T$nE!V;3Tw?dr0;H1@r~3ASCJAf0x^EUuWtoVRM| zSWm<)jk5(+HC)c^7ob?BoDz@F)Wn%>)-MvyHPRNlmF_OWmD`8a)khM2tkLnZa_X87 z(-MMD<-2?%`U2^-IR(dMx;zzzx6O$pqgrl|J#vWla7)k=SU}~IJ9jy3vN%(R(hNl? z^ivY*PT`7REvi+-eJguHohT-{f_Is$mgOOA9qpKmz%;C;wi#biN&fwojNm~AeJ?9J zvvk}?tSnovyebMe#8PyG@6`%RDNMmQJr>QNp5l#^x)HttFrt#eg;Z5Cezth+g{QZUEONU=R zFL6;Lxcl=OPGp0J$dX~j#&LCYsRZhhlZl;mrituqX%q(>W_dzHh0hP2pA0eI9ajBu zokV(OM5#$RaIPQpgX9>hM7byOJ4;*rDqS=Fv6AsKjuxNjzI6QK>cX#$7;8}k^A#L# za1#uUDeagI#?|MQ#NoLXw;XZe^|aUIUEQHs$HHAi#-d_c^>Q&+C3NYRKFnLobT3i| zas$=q#9Q)8 zT2gTOOW@VO(Zh58&vjJ|Eu8h-yu5#cvE0}NgVfIM- zi#;XLzLEr{*T%&TGGflFr&@>UwRp^Ux!4)mfVn(r&*jWFI`h02jIB(-@(heR6K_|m zvN57%5(GmTpRL3fRvX9>(nf;!%8G=V(mM|VERJAN-(~v0|AE|cp_g7xuUb0)ElJR~ z!zipid*Xl7L|!V3y%p_$d5-@g?(e(4olg_DHh(DZ^_<1(GvSw!`E)tfPIU@*>j@hX zF3GNN@`$Tjv*=tC0SPgx*ZJa<7^y}8afqM8uGL!&-o@p7kTa}}99N=HJ4nFDR_3Bu zo!g`_!>m9?jL-WFy#xFu2a^^0Vfxz;2j8tP$DdnHz3|6i{6Ei$bwm3F;IDTseCLQH zS&M;{kQomk#!8jNxwZv5P&}@7V4QE(nUtc!95&V(7*3Xc7B6tO)D9LTL zC3b4lnyQuPAdnjfb$U4tqje+IXtSV#6}>ubhwUuf?yxhnb>o?{pk!f3ACBj0-Gh5` zv86@?h>b|s6qwcfJVS0COsgTWviS2C?oY%xvmStsKNWZWLhuFaII}J>cq5$Q`OVSY z34?K@bzNUV+0osa`_P4&&RwBkLea;L>-s^mRONsMt5P?V^VSD<8Fs{W#Nq#8?$4SP zb+&#{_^VX>Z+$H~0f~6`jzRQkK@2BjfdIur@yfmB&Iv`-$wNI z?)XIi=K=09vx9nBTdQ6LwG7wI4@lFD8kUS*@3?gnIY z8%lqKPyBgNMv$lVCb6rw>Vn0qXG))amQ%R14c_K|ymm6)J%e^07UQy@kREFe>~$j zMxN6Cx=u4#rO*8(5zUzmOD#vi zL}4OX(SS-_URT8rkzJC%@x3&W!g|j{gF0 z-m5QbP~RD%JJk!%lHb)^m&aA_5cvZOUM)fQ7mjlP%GFZ#DMF5&^sINE@>N|ggm(nV ztBH}Bp<~r!|06ZtO|MSyA@8XxoiaF8bS>}Cp3}Q#ZI)urV8rwNfm@HlrKg=@VQgn3Q+Yht|Lcs3+c6Qj+fXX*h&wF64|b$r|`G|?v~ z92-~|Gj+tE?i8(`#3Nl)_l`9(zz~$H2`(;b4JCSH*UfyzCIFu}955t5V!J0oQ_iEF zz5B!86X!m_@L?VY=tbmCc^uyUdp5JJjiKfyW)1t;<|Z(M4O6w_f-h7QL&9d49w4ob zunMZ!-L%kp?6Ie}3KYkh1zpf%ARA1* zoq2GCN>?Gm-5a~mn@g2nO(VSr(*#Qa5SR`t_-wztansaILOq}H-P3jR!V>f;nm^^vO1o=Vq9j~{`(=z|W z1f=?ilYuS7hq7kXdG4_@&y@tQ=GEq)gub^fAv`MNCRxYW%xw{hm10N1i-R&``hu2c zOL;*~HbTY#hogc}ZM+t5Y_Hb} zYc$`9Cgn}AvW}Bf5@W^mlKFHcuqDr#`#n9E%v3Zu=eXwUKoq8a;_SlR0L%91X8n2l zusS=Rx%*R4`m1AqLHiwsi#yMnp(8r9q>Z1(j0#14#zeTF^ODgmQBE*{)u32tN6bOk z7i0mnU3wRq%Prq}kd0X`vNRnfsTD#sO%*AI11vi}foo4JP4|om50X{+Syems*bCk^ zKR0`5)tX*7ou9_>n)Vxx*LTJzx=aK*1G3 zq7_?pJi-miN}8Bm1kr71&%JiPo0x+J`1{Lm|T_JdJk27G=27#V&TG~=e_yFbc+}1s_4_joCFJ;Lj zhRj*6`$dl+qlMO^T1{x#NLF^Wuzw~c;=^#>D|^a!W6OUW+?fTolh%P7d_?p<%#U)y z^4hrm$m0Ftuw4-U7`uyGC(HK}1DL}8e!91_9R&q=iLJqoSg;++c!v$hz^FJKR^)Cw zEknJQ6{M{;^qd7+jRzFgp)e0!E6RWwZ8sD3WQEZ^u>c70iEZ?M>MW~`I8Ke)0X~db zR~pt;wd;TGhj~B9%6reX@!#_|+)#gqzq-Ny8I^*zW??RGX)jx?2NG60Wkdp`DdEj- z1;$!(T(ELdBse+3X;83}5UYq7Gvb4V&8U^`m#OEiVbakgeaQ&64)5z{REqxq-K$Dd z_h9{2eCkTIxWuwd;Ix1ueT33qvMV*m*bwo+*V;8Lm@a#H0W3|MlyXg7Me? z|JMT*?W-KjeaYaJl7jCv-=I5Rox%wYjH^i`-RCJoD+q5ulgrW;8_#F$@jEo{58pWQQ zuCG}=Kp%DpFkwA6UVHpXs9JGRG9>o|vplxjccqc%r%!yarCe-nk0gK>Cfz&H6NKl> z)87BYe2ajVG4u(rj}1f{`Zd|gTS4DD?6NHczD|p|-3;a8)YKM4cq=hDN5)!@ycxZp!(MDkL&S?*3TUWc^1Gx z{FogjIa}gPxPfR_GFO=bj?7vPtgzZj+BWt9|IkO9DW4~67jO2Rs3E(N5go7{&_UBf ztV_%JUJv$)C?GeU%!g@OUpuIG%Fr4-eLyeO;K_ELi5AT;OO8>x)XiCZZ=s}JXdAog zm)mMkDPVweeyI;WP9IQ4^SMImjV;lwqitHr$5Aw6r{*#y^-0a!=AAx{jnZq9KO9SZ zElTB*@VVcg&1Yj&rdynv?ZSad`Md^1a)CRL>@7k(Qb>s()|y*=k9;BPP;DtbN8V+ z3C>m8mw+5B>JD?#eCmv*!U9xE9?a;~P)p%v@GX9ZXp4qB9%rIHh>ckDQAq6xMad{F z)`6+(@lFFv(}3XQ+g-OBTUqIhlgw`Z5ElZy5_fw|`yGX^8{;$CpOM(@!eiX77SRIQ zbKSx$v-xsuj;tnX%4nf&`sEQ{AlYV)9*NRKGtY{uHHmgh(y%Q(%P`ziOJIaBbT9b` zgiMA2E1%FnuHzjZO&+(2<5N+bv6b1*IM0HI+63~FF8AO!&UoH?aymuz1g=A$BkH6+a{Mx3;NNB-{bT3EUq+% zpD2!pQ7Wcy?@chzNuAQDvvT}l8~uZj_k!Qy?oXWYxxIgOqHI-t{@CAoMwty!`3)DHc|k}&~#wct-zpM zO`lla|9<^GXLkPY8GX(q&j4m-_^heNE{g?&Sf(``j}*7d1lC zhICg=M@cjHy{%QIW|e10R7YK*1DEMKHQmL~rqr6Miv`6|+4RQJbs28>sLL=OBBpNf6MyVfvp!soE>Y_;L6=(v#s`yRQ2?h+U*%~Hn>4*&#aUW*-hF}l(#xg z*g_q)_jsW0bH_f*6n~NnUt<0X+Giv#Zk&a~CuW1l6&|$=v_rej4f=pIvNesC;(9Wg z%ocLINP}j(!Yu_*7Bg@g<1`NTjJwQz#9D2fkww&*5qRxrK@T#=`xZ>r0`|o6VYEhY z7Bnut`fDRYFGa;4B*}}jBmevh{CIUm*x94_UF0|RN}l!;$rE07W{uB8enx7lkP0a89d^GU zcxN?G)~tbx=>|xSgn;D!jENCAO_nhQu5yE0;ZU-U#ECuHQs|($n;HcR-&xke0W7kk zT2?wLD^Ell{*P&xP7HkI!T1;co49soyoZA&Mj6>zmyUz?7*qH+d_9-VxN*#&JkMw3 zH-5biT$WyaTL_46v5WU}m);42{KoL-_<^gRiejVt=Wg`YolbnqdUx^0*hnq^J(cD3 z`{CHP_s+a<&Y^kzGm#yX`R9^#1?OoThT;7L8TcKP=1h=RM5_@^^VYK0EMr?^ejZ?AG)1<4hVDzhB&`>-Fo=Bx%(` zJ#2dy(N;%T@@=r-h-1?h-mK@v)hsAjnW_s7%vdEHGDLL5g^jry5zqqyIxfDiav%$| z!t|@bVKfbvF=luox#sm5iAOreE4#}l-P3~c*?QK!E(Kx>Ox66*XlA>T*0sD)ratAC z2h9VLC6KCsImtkBZ%W4oQrNAyvO8WN*?zUvM=C1{Xj`syB$yU;LHE8bO3E{SQ8Vz; zCNZ6NgXus2BL1{7XX!c5&e&<4bZk1OA{9TlnUNR7??3+12f&Y>k59k(Gvvpf?s~t> z0FKIBjPV^f7~qYiXCYk0*{0G;K(DCXf(NodBwb_U$EdJz^HI39XNTQ(3$mQH8J5Jr z9%wuc2q^Mz6Cs?#OD*3?jPVcoCI17~`}PAL5PiG-EHiG_Q$QqAL=SbJJ)}^)@*~=q zk+PudwtA@f>SR6xcB#-#kF8hKMLyFBR+uEa?NK^HyEvQF#o!bsSP6027($QO&5Z&R zc8`vAy{4vyo$=Q1&UjWq4a)<(JrWQ`%|>oPSk%lRcY-F$F4+YTt1b%}u8q7YR+OqP zczQu?=nl$Oqjgux?Gj5W{#e=2US6mj*6@^7l`HBAnda>Id(Z1)WocC#X+5rkwySSYLzTOi^l!*WzM z*v{Ll2Vac(pa%$8=;9ifD%56VOk{lr(Oai>*_@-Mv)pcN^(a3fC7qe>jx6#Q;Jpha z|2>o58$n=v`tMm|9Y|+r7L+4_2vfa5DaYNLDnCk=>$yXzR1aH;Rqr4H+EAoLM&hn? zIKGsyZ4HD7Pr@WLnJ(On2#}mi$aQ5GObI@L-*vF?xrjP(AEwx89~t(*mpoE$1cCAC zzf*dFXJ8V9Ne>6YGC0B-)`To+@~lB^^_Jc)8wW#Mg+X!?rIaigM3w*t!mnnKS_yz{ zvTRPG2sibPYhpVQ{0t0Bat-uPO!2&Q;>LEy=b*KJ-z3vJWqq@J$BOLsA@z51I`3>Q} z;lGz}&qPmvyHLgV3r7peLGjqJu zj#jkHEY+hLTDn+4_{ujAD&yEQuAS-!sBS})Zl&8PcKWK{mXSEIWjvHuC$FvI--v&r z@OA4>nTES)$X!FFWO_6$q@1*fvTlkvObGRd+-=-=5L-8@F$kK&TVP&A&^~3JSXhnHJ89twju2+6Z{ViCu@|ym+>-w`eCL~|qw7!P zzz|uepq9%>-e~ej$Jm_cM!AutF1sCV4K&UznA@T~BcBdXG-WXVlAoE%h$*s4N^ z1@UwyGbRtGGDU_kd{{E=L$Tr(sfT{W$#3{Yu0FXF&ljh2fKRY87tUo`p0$na%{KaR z3L9uU@C3J#)|rZ_$ZD>p6UDcy46E^0FPS6mL8J|r*k&(P$8v9O8Jb)d^My|@dmb%d zrL}I{FCWbH$Tai!+x&^*TW{@;0+ml}@j%7LTaKLX)jdI#72y{HpEZ*urlN{w0c(_y zm$2PN^=LW?YBw$Lh8EVVTnGed(uD0&oH%uyLQ^+kk27?Kx^WENZ1IU>2gb=I__(a| zE4%vz-M5Z^wVu`3>|#_n@s=>6Wo`*E;3?`(KB}w`%{ZvrA=_DNPIi?VO4Cfu=y1Wv z7KRfYw@;KLN);MicI%bknW!)_5dP?DMt*zZ>|Q?f|KhlRr+$Ls+r4M`!6F09Lx4jG z1;sYNddaMuHKey$W)Ra2*db6jDEm?ub@*5aWzYoJJhhX1no;rWJIyuXqnD2oV&z8=n*d*9=pzHJiIwNQW_X=yb z!zMEtUYTg~8KSmJpcU!Bq4C1q#hr3cMvECC5~irL5&<^xF;g;f2_uzyYne^X2Dks7 z8Rw1QTW5pBdDe^*N~D4V>KuwQR+}FjXkt+Nr2>o~Wlb$JL%@q8DX5sbIQVRfeE z`Eg@~%IHWKaD*@tJJ&b-QQy+Vu5Ax^TOv1d-RX<$M~QZz-{>m|4Bv@XF@-B zx)PO1qvG~HZflJ@cHMEg0L3Qo)lER*az8V-sH7bio` z^k|=x0`}tz~F)(CBtjjYje&vOLw0K@S^Ec5uT^*5NiB`f53chGV0x zP|zO?M-QF|U;JW%j}d==_HEa{NF#KAYP_@*d{8}M_I`cJY5v4=z~MQD_`6^hcF<-) zbsePP0fLX_JzENzfa=@rY&amQV68xL)0( zqRi^NxGke~<6pj(A3sJqpQ!xYUs@dH)7^Y3XgQ7S4|B2tx)`6y{EQ*GA_+-2hLQy@X{;4svTx+YCTJ-;8(_BWIgSZ2 zeY)U4hwj~KpulZF*`q*D=B*+k+VUuc^b%;ypk@(Y6{lcR2ndkbc zWu{^x@iE&cufRFneVka zSxIZq92vGEQ>|G+B4sS^NFD7T`uKvV*}nC$J@xSkVbZ99LuyMsa-ifT( zBcI_l|9+e0R~mh4ogdt|>dGJ~4fp-o!#eV*@yPoG|Az1v1fJALf$`hF<1>Mu(S{GQ zSI1z=RRYLw$&kvA7F(i=(Y__XJeGs{P!rtT-L@*XkkHCm#|SO7m5+=FGTUpq3qUa{ z7>8k?v2>A4EW3Gno-PPIur{NV;*ORTYNfO#!Xy^XA7H5i zd`Jw`H8^vDY&pjUFIAx+DkOIojbx#51Dr6Hds0I-fuJWPG#AlSGlwi(8GlNwc-?)+ z%j)30g7N*$346g$^hNd!jL*jSMD1rxMwC(&jJT@SqYxNu(m#Y%s-uuM(aR+*uzKgF zq$)D;HUc8l3yjF(tL8`w=6u&+3n?M8yaNQRiZzq7J%78Nn72N%tK4Y!IRJY>82KXm z*7wiGss6$f0?8pHJua8DyBKOE7D#-qh>Y!)Fl1j`9cn?gRt2Yzwb9H%{X zf5^Lbm0j$<5cf(r(-+xK z+};{v=(#{8Tcm2iS+_KyuC2WaK$}9;obewLFT+>W_MXS#-cOt` zx%Xgv`jwyY0Z?+iL1b_@(dBTmuo%NRW}`AYNVY_405}r_c_)a>}7<0!v zZ5Xqw(P2SNszc0`D7BdEHLx#|h#xsm_y}(E&HVE(_G@^7hYFTz+fBfo;^zIL(t!gyO(*(swgEa^?8_{Ore3p`X9|b?>`37{A($pC9Bi zX<+<*F+Nec8pL0Z2C_05W8nhg!B)L;C2#i2U7hO&6zl@tG8{ADx6quk^KGmx;h1cl zE-=1qJ!>A?Nhv{N zQ!!i;%c73!N=l183F&&KImA3{&=CwFJ7Q{Wn7TGRq9FR2AP=@#6)kJv#wI~E*PS2e zT-%qhp_Ngr&2B`}_YVuwDtD~M>MQh$#s8Z27Ygq;#%HoWBQcCD@u-1YM#;g%Dy+)e z_A7O_$aH#Z>Owa+ik`+*)?+8Kw%JyTWjW84Z58hl)}3X0&E5|cro=o~&taX*Wn&}d zH)i4MI!gB!zE>*EU(kJn;Hx!;pQ|~asqqkb2(_8{WCRa(i?dv316yS=8Q|S<*X5DL z?5BA}susCFY>G*@PgQNUTCPWCSvOqhh+43x0WwaSML8vXbQC?|%yXQv8xaNKaXM)4F~b zvdunPw0)I|Tf7(wby(H-bWWB{S{FNC+nP^onx~S6@AXc>tGxR6>k6LrzpH#h?}3Hq zu(_-4^rf)7i|1Wd+T*tY{pX{O?1O{e`6=%F(ONlqsUpxjO5|B>#an1BdN&YY_wetfmq_sp6i8!Q%@0$ z&z6+BhLTPwpOCBbQ_OPKd^qbL#!%(sQ<=WFf4D}xvb%m#Jt6jf{cMQ)iX}}rC&)QY zOC!+PL0O@tOFswcIAm4_QkzqR5gb9KcL;5|lDA^FmiH>7Z8f$dcJ?+{c$1Nn>sw*b zv3stTIODd0Qa+A@FQ)gf1=CsUNF)%(lOnJsSX?1QsuokE4v9g zIi`Au7KuhfCY8;s$;eWGEXEnt$1~e$!yKYFOS@TG2!B{xwA~yPRJX8(dnRRbpILP_ zE*hu#I4Jc8M)?fNyFag91nflgjMzCs@yUvBJDfNi0I-`Kd8R?K{W>0|VGl&6Uu{YW zm-quN9;xNrv&5fdRY)?9+>gfEX%`?G$OTF zEgexnND^BIC3GN&qdeMSNO(BTWHhD^D+3Nv3H3(@31-?IK>+mp36bz}G5_N^?hm-{ zi_tIQRi0P-y6ngBb2#lLsW?;RnF7v<1%d)hgfyHB;QHR&T7BkAyxq=@>`vNvJ{?aS z9P-tSN#~pGKv#T=k>9Yy1CC#|_`6 zF>(_>cyn0d?6ZB~d%Gx%`^en)_mcSs(T^cJ2Y)?P4wDReM>x_lz#aMxnt%f#x_UQ} z$T^2ey*EIMJO;ZWjQs`0Fmn-N(n?XO6_{g)pD~bYg^0WCQ#~Lydts7l!fI69Vb;rf zq4#&%mn5<;x~IN>ww?`hHX>r%qgy=Oo3PedPLI-g>%n|Bvw#EZucVbA&68cydt$|O zk*e09doaMFtk=UR!D>#PE#1R*N~g(uvSubLt;c~|sqD7k(Ict!?^XTp#6N(zxb{!8%V%bP+FnmlK**NJuV$9z=C9 zQ=D?)Qqgp}78B9I74kMA)9LFzB6c6)@b|ugFR~v9oTu`M+RuGoEx18cDT)$zqkb|S z2xJCQHrVUtG@s3TM$3Q*-S6$am+xT!rYfO|Dy}T>SXds*zEp)2azX~nX8F|cTY=p! zrqz8;sI#vm1^3l+=+*vzlK#Np^TsKG&J#GG3p#4DB5t8(zvYkpG)w5Y!--qV&L|M) zTexzaazU1}0?K?r8Lg#7)h$>vJtF(r8UqVfNcRScbaP+VK+0TaX?eRKTU z|Gvn+_5ZW+Y#1OV(J-P;B%Z-yRbmd_ev_M3V9X-hFtLLt932$S@ev=`h=w$XdE8A@ z*9I~evXc!SN;SxK-eJ5aSRVfCX&!~YTncYfjw$(;u$ws-;`DbzbfbAWcXVJaZuIN9vb z(Fj*CJngDJ@$jO`#Ja7?z%$Y?c%`VO%fY{VBx zlh_*X;|mLCG=R)E(L~Y_pGT*GNNNt*`>MPs&1mEB<$iO(sVrQh+QOhTdG&<;|34Ss zZB%)gB|-I7boA26Dao6th z&#``NfB1G@?$@tdMd&rp;^nzH^d@QSuSa~(@Y05HHnX~$vSlBJk$*Tg{2bwi*jmY5 zSO;5j$+yMUsizQ2Adz0h{$g7;3=3>4+ZLusVlCusuJ$-nFcL8AU10XJSMjDO+#})Y zKUoRhNMEl8Rves!tS43kYaqme$bmzJXOV>&?GgqxeB1P)Y{eZXdWFtFP`ELg*p-mf zRD+6LOiOZK=To|)Z_o46 zInN{F_HQo|th_PqH?Ds#HhV5Oc=hBXdDuVyLau^>?nQAv@ZbOIrYK;YobyJ3-x&U% z#)|{D|ET@>HuLbmnP0bI$&c-P;EPl3+iw8l?|1Ix!u<7!&GdA}w%e(*9z`T(D61pZ zHQS(5t8}OW!bY^?pdxgx$;=EQXbgs;&Ni!=Mf1AHE6amc^`m5u1uLjp%14c&$-Z99 zp11p%Mr@>(V~;<}<6fJseq9>?Z#m`>zSD0NE}zHuvP|*xCd0t5M@TktJVDXTQd+XW z9-<4zF!r>uVxrA@&6!5KE-8lA89-!859{%&skNoDECj^ZmHJ;p5 zBi85bVEa6hZuPr#jQC=c0>2rOPapn=`o-^W+^=E$>(}=>#y92YPOp5ciSXkv-aFIq z>(}>f33|~ce*bI(dLzvKdNitpEY2Cmh$iXMWe$}%&-{d#X&$!8WPB@=jxQl|mYdD1 zxIdV~(N*#3b`9^bQGib%K|HXAOV5lTpw>Pr^lZtAUhO?Us`t)0z?Tt4zn-y>pG(=; z_9Gnve$9;VN%p+Uy*EzF&lBo%9B-@jN>UbzC{HG#T`GWp;6>+#J{7r{K>@73C;_lgNKJ>nKZSL#*qZsMhMvwHehqFiU&bY zEQ!k5m^`i#m0RL5gKk%j6#rQRl+igP3i)3y$ES&Z zB>=rM;YSM22Pmh#bygz(L#M&-ob`R?gn)#f#ASz?QaVxRSiP1)y=cU>@t*sw=GYw&@oeGo<-k4B|N9sNH zT7iV(O|LJiG4^C3gmoKcYm)0Iqm)c#AECl1O)_banp&#lj-H}}wG_96P{wq25cX_n z6!RI!7OWoTb-zGc**`J`3hNE9Hn?FIvC-rSg}w@GXKeXKnmX~tCV!VRN+b20@gH*< zzgE8Lk}xp7YCc=YYFT>Kag>!s)_ZB<()Q#^n_`uBN;F>9kNaLM?vx`p5Ax64i4T^j(lP9D z9zDwB^O}41gXr5Zyk9=+npHfENH#+5w)|pd!Q1I#m#@Qcu_QVpCa(wj}rLcZ|v`EOP7ECNRmGj{r_D)eR4QIsRQG$>(j}eCnfn}w4P7X z{SM+6tI{hc4B9)1Tjy&M2ezw1P3?I?QFbvTn-H}vS`a2eHZ9`rKq1OXMn;Dqf#@k; zOsshtL>oUQ*Rl7rsp*sXnn&^?{*t6~LHClyn|zEvC-DqCD9>@-#<-kZCGje0+@g;d zY6Qr!;D`&X;K_KS;r?>L(>}oA0Pc|*v%|xT+EN;1@&#fby>gHQQ^>Rxy`5zK6I|{F zseK0HBe~lJ4_+(KN__%GlwR~v7y7IgxHSk zMSP~~eWDkA60r6Y5o~{!DbKm#{~z0V6Y9Q<@z++eI*7-%lb6nCn!Z2eH+=t!u^p6- zRcC()JbFbGy`g>@kZ<>%6;55|NU`{+s~F-~wsu&Rak7G8VJ*wSa@Wn)WfoA*+AF5s zkgZ5S+?M#R+ASn`rFejOm>p_*B&%$+v@l?@WBIZPMmH|qkI!?NxzEp_AVJ$>MN&i;E~TxaqBD=^-uen9YceJX7C zM9k0LNVA>``$#-8%OC*Vg9tW?Na=Z7xbwwPQ}GI8_*oDLRZ#dk)-E@_hHM8rDRLkv z0P1M^24kvaIG>aarAq4w^Mn}xnc4ERMB=}pMatMQr8&v2#l zylM8$9u4U#4gij=pe(jK%oVoeJjgP?&<-8|`+*_!rY^YkB+k-yiZ%;@*KK!N`aKV! zgmqLWSoO6zZ}cpNafD2KsisMcAnZk)8uejz7Y@Fa(j6ne1q- z$*RHQi7X@YZqJs!p9xbicZ-RoL<+iyqO@}bm#&>%7avee+zZUUr#1Ulb2@#~+h{ls zv#OvkE?yUuKYRb)K4q?bV!`TM7Re)=qNZR>vU*+?KHevjDZAX;T{4>ulw_OAbW6l| zp6FpasuW) z8-3(YxW5}rUPya*Ci#Zs>Ed*(?TK7S9C}QTa$guh2Vz{fcIyIP5m_^vOr~}RP`J%| zek2lF&TpD7ne8?kZ^T4Xph3&tBsRc4gGU3hCcCDfd045_+2Y7pTXV_at<~?A z5onoRVQtGmsc%;Co1^B}YAN!2`uBbRcEtQd<>&rx=8#o0E3}N4rO4IvLS@xK?zers zUNyvqP+4+@EhU=ErfZT><+X-+ZXQ@2pCmkB&q7%!iw2D`gyV#KA(gYBLY~ltF4HQX zmzD?ndv#vCA8hZ_S7wuw+9#aSQ_05ZGZUsLw4o6~i58kd3~6Vw5vujdaOG^f?dFm| z<P>Z>$KcTaK?rZRG>^E__ zt=Z1GwBU_p&~~c2%=+8a=Hx(nQ!d|=e*F6;I_teknO`SgFI?%U&U>lCe?un|z{L}{ zbk1@!_#6E@OJ?#};|2Tnp!!$|uD;>=Jo>l8=f7^O>*ph@*EL~kqi!na^KB zJhHTXAE@W~@F~aRgCWy>E*{Wg?Chqg{Z_-2j_& zvSMwrF2}64$~`dDhjb_Ni!cEwd}e#}Ty4D7{||9kc44-x$$ zaeePrA^#p#@jSF&Sjv#s!CHL#sWfZ~VSdFW!tiOJJ z7b;#g?p|hRg`PL*9zivoRyjNB8V(XL3HMUd*m_g(=ubAArHS(ryGbaG4@7FRWJ5R)>iG_n9Oqq^M@2axujIDER(*3>;Jf3dQi{VC>ned(rHNxn4XiRx^ zU=R*AfQ?GdVu$j>p+K{vx9km4A^N@ETC1wfRAb2%K!qN476Wu$#OeXx5yzQOFH=bX zYQ3frZ70W1L`}Y{#kElfkIH#MzoA#M4_#6|?TKH_@tNe$d!x=YyTvBdl_0E?71+jD zDlKrUQ+CZjd0uP^2HhOigoi}kLKieuwjwZG4WT$Ni;-*$nrUW-eS^XP0qCNwc&S4? zu{Zvwo7u%Vx3{O?O836Y9Unr*gK?=(L8f(|JJ}=U@kNpUiu7q{E^j<5=u_xwq2pSa zPf!%9{5jH&hqd^Sw2qTguLYYxFr0B%SH2)dEyCVEMadcTIZ9^lGK9< zvGeI2*>e<+1Y!ssf`M4%YM>&uc@R2%F(I}CyFu2uu;MmHA1=BAjydjN@N2aricK&H zWfFXXFHhg<9P`qt-Y~eZ%-)m}KE3*$Qf(aA)jvN(JiU{)oYRmz3Iu{*s-f_W_6O)+ zckU!zxQjbb%jI4maZzNURGE24Wa2A%p*KCpj27~elT%h%F_Uu9d%@(`0JZBS1>`^$ zyX$sCckr^wX4OlROqf=RqR8`XJoi9v;rKu~y zjK+@|GS7%b)6f`+hRaa_93eD>!!+nEk2jABNGwZGD`IJ-RFhy5*Gon(WCvH5R=n5x zTb}$fx(=O6BmI5X zFDRe-f6+dPCr?=WDTq;qx#YE0J>@DBX<;2g^KjTe_1-aSb7ic(kuw(*VRrP)RVJA- zypagViYzqd77*{QLe?III=AyOut-&O_#2{Wnv4edp8Q4(OU%h_bL*D;Wb zM->~3o8{7Gq%H%YS!?o&q~7D6>!6JL7`(KjU6DScaB<_59pj1p%#U{ZRDraRqwVRc zT5xc`1v*VT8d*+Nv$+E4ZnU1xMj<$wqTGzh^BTge64HDR<5|<3WRZfcix`^=;izeH zpyQuO^!lwf@W0XD56fq~$2@d_{jkvHlbq zs+0~kQ-y0ztBf4YcALOo`VGe5oGJiB$j&jPciPpc)*GQHQ*Rmq){&RBUQ@bOlFJ}C z48Rlf&q=Z{IOjb$&BB}GcR@9Fn>apq<`n0hXXgt2_awEt4Dzv&R>40%dFn3Tyf+fq zs}uU2?E5&J8>fnfPfX@LGF3%sX%!J&k~y7jiMEmSq-dHJ&2)j!8ArwprYw;RVJu=6 zs|Lo+T}2Ye)I2iGfgS;1ma#Zrij5)-wPGvi6HI*i#;-y6Lw)OWpHAL3D@&3;Y$h*i z6u0z0k-WP5tbT#HqBYu00>3LnYy%i<3%iiFUQS~{t+nkkE67RDW0|y2)y!&=S>=*N z80l#d?ALy>?j#_gma80B9Y3y-BF17WxOHT`ZzGQct5=rA#yoeuF{@_}f%T7Oarldc$;n=r*p3T9Y|uTTBt>PAr=oK@j1bIl$pQ5NDmGqqc}; z^G=QDv0@%?%^V+*DpnRhOk9e;X70Hn{nq`f8)N)Ab5C`hWl$W-vVa%Y;4JPAAp{NX z5FCPs1Y0yXEbfaFJP-l_f&>Tw!lFxX3GTW$1Yg`OEO0sZ)w%DyTlKnYru$F-n6Bz? zevEWVYK=DqslgKVAbhoq%)A&_@A!r+0vBF+ZApXIZa+=O3ql9F)$cC!cRKHJVL$C6 z8^N@!>P}pK7Cn(C)B8vA1OGjm%FzRyt>^0T`Jl6{VYo@D zdc@vbO0P*G!lG%DJ*;-lGfk)f@>&RvJq(XG?; zXc2Xx5tPOQIdjL>0iuRA6Bd{1v;A2EB@1Zw)X{hN5w-8Re)^$21(lNz)OC{IiDxUn zz*RpG-O;Ynn*0RHso-q$dZ-Q(4@9D4_p$oOS_upl4vZ7Bx=MJo)8oeGYI6C#lh^Ns zN0UT!%@Hsefq>$I%c-3mb1J0hFPi~uNKMkKINc4d$!IJ{Ngsz|bgII|-R!sR<~Z~h z(YRVI4>xsXrIfB}FD{pi{C`LXO{KK>7QG9rNlCrF`}CTB`QbFhbvr;He7pB5;rVmv zyBF+-e~^cX2$Oo&IWE)j3?U^MmAZyOYpAjpTrLq|kD7#AVj?6}tuPaZ{VOe}#RLxv zOIVRE8FtC(a4E=8=uF&);X9zbVCMZrv{Xk%ass!NOvE5ps}`;rj9VWhZ`{tWdg53= z+u@XvnCR|QRf28Pl2SZ4?6J&OoQFxCigU=N@_`heNlnbkQMCkna7i9NJ>VCJF4QA-REz<(dYMEfU9Agdk@C^KBTdns(6x@`1aVYSp zZhY@U1MYjLKIMqPMNQDF7zos%lh8%J8+J1JH4c8^+L-J!VLXrscnScENplKs#*1P? z$6BPbT&w2RpSfr8euXf_KS|t0jT*KEr!V)^N$k?yYj)|O2g(KfvR>g-}e|Od3 zmeiswjjJJeS5=+OS~v~z%WTZygXmECNjXQa*|yf>)N~m&RLHY%pUCx@7Gn&}n)&fa znX%urt*jVvpN6E|iPHHxWbc~DFv-#NDgNF!90Q(7Q4rR|C-#j4X*1QdaY)E!%m{u^ zVJI$w`s1Ah8F$5gv`b{oo_4Isj$Rh={dxZFr?1~^)v!nJ%xLyi^Ba=Yd)fvt?35a| z!$Z2!kvXsP)37+cB>_w@gNL|PTL(1oU4-0Vn9-$Qs94FF-?ZOSGt31hHdqsfvdvZK<6emBsVOcftJdld_~pb;~Yc!d>bF$t=zfh zY*3pdZ0*KHsPJF^leb z98`J1P1cSML|eQ0xr@4TozvPdNjG-KpqN4JJ?&^o5{Oqexi%PSy^L%UD7rDHM%mAlu4KRZ|Ow z;LB|?>kA~9;kZ8)WtEB1^^F6GhZw&O5xF0^w&fcdd5P&S^fVz55uI44)?598n_}ho zP^Lg~^@>AUsDB14#gl0}7y(vP(i!?<88M zDH@fP#8bD5jJY`2_fl~q0i1?=h4lcpeM&uTPQy_cP#6|1Bu&dPmm ze*USPX*qelv_d3epNm9XF#MZYPBw8DR&@pa!=L8B+?6zbRRIqrl{BfOayM)0xvfo^ zM(B>^ zH;R$b;}QwdkyZH2bM-WuUMuS(y^)?oU*eLdE?YR{F5-Qs5NIGRDXg+#O0{ zb*xI59!`2JguDuMnr>XSyLQOTO$-@`jV!1BD3=;s0~>Prg55mC!{_w_$qwEnoL|Z< zk1rjBZ)lZQ*G47TxfJX)J@@F0PLfKAIZVuxd9xD2rx_f5FPxYA!fg1r>fjXeaUZdq zKErtZo@%F^Dl4bBqeq?#oGF1$;T~iAofUGRLJ#+IaK_l^>&E&%@gz6QR2?Aq>MMD3 zl4z5)b2VM%tN<4d>;v$i6i%X)agj~0x z1kCziFdm`G;uTexXhIw)O&F|=4>PTD($f2F4Bh*Q;nR>$6;8cNMG$?pf7i5g*ra+% zXRzjzN_YSH4?smZl5^Q#1~3#{mp`eLYs0Coi;-qA@S$@8ok2-z6Vk1psm`M^K-W0b zXdFk_^pT9NIL|z}WV1|^eBR{mLeGPa{dtwnnO5bVHXka7%>50h(pT;{AD2n# z9DAP)-&g+^whWq?iYWndkuD8O1(wo)^g5z+ufTP$(vNh4BTw|2tO8m`YTOVdjd zl)G_j%!p%DL@whR(LJ8hv8wKbcqE>Z9 z;jX1y_0O@UTYZ1jHugi~#O)CIvw|K6 zV-z^I_5^h$&m0j5KB`6nL)d-l-E4yvzka7}Fokr8Zgll5n}2gQrzNdfr8X+%3So!T zDI?Sadl#^*g9X3^+>XWkh4DMZkr>3$?Y0pIBv|jZKOS?G)fH@f2td>)1+OtS$>1LI zj;xFh#@YqVPUSCvIpxd(?+&vZpVgMC=9q_n*>#N-2o6BR;$zFu+^oD0lBPfLS*w+P zHOg{V79`er8U{(D>!?j@EJ=qk_3bLQVERytu2i)X>2TKl(p7jK`*|tNJ95u>Vt{-8 zmU0+xk9=z162d_m)6FQF@mWI;<(8fwuhZ-|Yfs{8 zqKZ>dLFok@x4{;_`DN?80hN$wg;CK+Ie-k^d+Y0BhFc2Y!^+X3S%oP~vuH_Kj!7u7+ zOh)$ebT)p}B~*i7jQ$aFS37FhifCpN4=xBxg_HnU* z3yVi~%4H(MG>g{*Cm%n-q!v?DxVY)(y|I5Q4j^NTQezPIn#%9+oPcrm{P_(5GiToV z`{e$#4L#Y94*GMH&~GQ}=5cdW{i4l6DGE14*dOxpz%P9}MxV4^K;CPA+;o^{KZ9@A zw%oLcLtcw{$q=KM>X$0VTqI)wwl)$N(UqL+NsfV{!FGV*;)Il#wy*ra>c7kH3w^(c zwbjrz123CiFU}cMtPsoIIwk3}!%8vSHmQ15-&HF?9}}?v{l%`d_G2*9=tg(BzOW zXlVF$_&N5A1dMgx=bkw@aj=F8JP~G_0Rqe8mnoxg8hMFCf6KXiJKzV4KSkUzIi0h` zmRN3~O`%j*&x3Ib^lXqL_h&6(XQWnJ5@+{#R~n(vGIg(JigekAxH8xP>%?Y-#R@FPBfAz%3f*a(tnwSx>T+LHSi`wNHc~WG!adKcql)HDQgNv-$!l z(4hU?v$hB1SsMTVczDoJ$HJy~%PkJVMFH^pq5*W&(a^~N*pCVTFui}A{v-I0o|~nW zqotkAGY7D%i<6F~HYz_+%Mmo=yj_(WqfNempPybbfQ_|?ZU7;G=4`|i_24q!EgRO` z>SrD#^CT41q%4d<{+5~#wp(gpPDzSGF^fo{zbNV5V0Jz|nFx1OzfjtD|0biG#Eb>f zaKL5zS{MW6(oWi{5ElVNs~t#2w`MvrTUW z{)ebR`mvA3M}D|0+b!qw3r@sO zF*EvsH8tM~7=MziWAmtUD~XK&gRVNgvvEEE4p=<{XlBEcWVkYsMMzjlsSJgIfx#fV ziOKz2-Wl`UFZ9yVKhha`wo$TH{Whq>Zy{@-jOBjmCr7Q#t&$Zoyc7l(GtnX1g=6B0 z`T30EvKr6a_bJ7(BHC-?mjq|1eul z8sdu5NX96#et!3`muHFzN-U2MTz*AlA+TXm-C_YGn$ZC|P57nF^lndonu*>vKT1&O z7$H(hb|mQwDrpc9OW=0|)eB3u2wa~v zK&ozM1}$qMjIxNU@x&cVLkuWF(Q+ZOaV=$EomXkJ>1<_4BHBP?;b3YAR%fYUxN2|` zshBL}4hfI`usffMrmw!fp?Qwp`kGX#=?u~;hb)@&t=zK5xy5%U3 zp3m)F9)7YvtG~>4fQd0%Gm$My-h=5UAva(mahXMA4MplX7-x52U(j<4OTzK3tXJ;X(f?T`m-2JN2Zz`MAmD|q`MJ$V{lq^>O;o! z`MFnq>tPYp*J?awAwgy>lJ^CWs15#-C73tjvL3E)&L(#)gIq)9B!#-;)R#@o?sK=Qu7gf|9*gOJ$c0rl;-iQL04Ov3ReUI@ zWN81(t^|<}EbHh1fEO;{-!%IhWH88I-a8j-8{fxT{O_oLvXJ=ikVgxHP+|Osf4okv zR*wHJ -This [blueprint](./data-platform-foundations/) implements SQL Server Always On Availability Groups using Fabric modules. It builds a two node cluster with a fileshare witness instance in an existing VPC and adds the necessary firewalling. The actual setup process (apart from Active Directory operations) has been scripted, so that least amount of manual works needs to performed. +This [blueprint](./sqlserver-alwayson/) implements SQL Server Always On Availability Groups using Fabric modules. It builds a two node cluster with a fileshare witness instance in an existing VPC and adds the necessary firewalling. The actual setup process (apart from Active Directory operations) has been scripted, so that least amount of manual works needs to performed. + +
+ +### MLOps with Vertex AI + + +This [blueprint](./vertex-mlops/) implements the infrastructure required to have a fully functional MLOPs environment using Vertex AI: required GCP services activation, Vertex Workbench, GCS buckets to host Vertex AI and Cloud Build artifacts, Artifact Registry docker repository to host custom images, required service accounts, networking and Workload Identity Federation Provider for Github integration (optional).
diff --git a/blueprints/data-solutions/vertex-mlops/README.md b/blueprints/data-solutions/vertex-mlops/README.md new file mode 100644 index 00000000..d9f85fd8 --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/README.md @@ -0,0 +1,79 @@ +# MLOps with Vertex AI + +## Introduction +This example implements the infrastructure required to deploy an end-to-end [MLOps process](https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf) using [Vertex AI](https://cloud.google.com/vertex-ai) platform. + +## GCP resources +The blueprint will deploy all the required resources to have a fully functional MLOPs environment containing: +- Vertex Workbench (for the experimentation environment) +- GCP Project (optional) to host all the resources +- Isolated VPC network and a subnet to be used by Vertex and Dataflow. Alternatively, an external Shared VPC can be configured using the `network_config`variable. +- Firewall rule to allow the internal subnet communication required by Dataflow +- Cloud NAT required to reach the internet from the different computing resources (Vertex and Dataflow) +- GCS buckets to host Vertex AI and Cloud Build Artifacts. By default the buckets will be regional and should match the Vertex AI region for the different resources (i.e. Vertex Managed Dataset) and processes (i.e. Vertex trainining) +- BigQuery Dataset where the training data will be stored. This is optional, since the training data could be already hosted in an existing BigQuery dataset. +- Artifact Registry Docker repository to host the custom images. +- Service account (`mlops-[env]@`) with the minimum permissions required by Vertex AI and Dataflow (if this service is used inside of the Vertex AI Pipeline). +- Service account (`github@`) to be used by Workload Identity Federation, to federate Github identity (Optional). +- Secret to store the Github SSH key to get access the CICD code repo. + +![MLOps project description](./images/mlops_projects.png "MLOps project description") + +## Pre-requirements + +### User groups + +Assign roles relying on User groups is a way to decouple the final set of permissions from the stage where entities and resources are created, and their IAM bindings defined. You can configure the group names through the `groups` variable. These groups should be created before launching Terraform. + +We use the following groups to control access to resources: + +- *Data Scientits* (gcp-ml-ds@). They manage notebooks and create ML pipelines. +- *ML Engineers* (gcp-ml-eng@). They manage the different Vertex resources. +- *ML Viewer* (gcp-ml-eng@). Group with wiewer permission for the different resources. + +Please note that these groups are not suitable for production grade environments. Roles can be customized in the `main.tf`file. + +## Instructions +### Deploy the experimentation environment + +- Create a `terraform.tfvars` file and specify the variables to match your desired configuration. You can use the provided `terraform.tfvars.sample` as reference. +- Run `terraform init` and `terraform apply` + +## What's next? + +This blueprint can be used as a building block for setting up an end2end ML Ops solution. As next step, you can follow this [guide](https://cloud.google.com/architecture/architecture-for-mlops-using-tfx-kubeflow-pipelines-and-cloud-build) to setup a Vertex AI pipeline and run it on the deployed infraestructure. + + +## Variables + +| name | description | type | required | default | +|---|---|:---:|:---:|:---:| +| [project_id](variables.tf#L101) | Project id, references existing project if `project_create` is null. | string | ✓ | | +| [bucket_name](variables.tf#L18) | GCS bucket name to store the Vertex AI artifacts. | string | | null | +| [dataset_name](variables.tf#L24) | BigQuery Dataset to store the training data. | string | | null | +| [groups](variables.tf#L30) | Name of the groups (name@domain.org) to apply opinionated IAM permissions. | object({…}) | | {…} | +| [identity_pool_claims](variables.tf#L45) | Claims to be used by Workload Identity Federation (i.e.: attribute.repository/ORGANIZATION/REPO). If a not null value is provided, then google_iam_workload_identity_pool resource will be created. | string | | null | +| [labels](variables.tf#L51) | Labels to be assigned at project level. | map(string) | | {} | +| [location](variables.tf#L57) | Location used for multi-regional resources. | string | | "eu" | +| [network_config](variables.tf#L63) | Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values. | object({…}) | | null | +| [notebooks](variables.tf#L73) | Vertex AI workbenchs to be deployed. | map(object({…})) | | {} | +| [prefix](variables.tf#L86) | Prefix used for the project id. | string | | null | +| [project_create](variables.tf#L92) | Provide values if project creation is needed, uses existing project if null. Parent is in 'folders/nnn' or 'organizations/nnn' format. | object({…}) | | null | +| [project_services](variables.tf#L106) | List of core services enabled on all projects. | list(string) | | […] | +| [region](variables.tf#L126) | Region used for regional resources. | string | | "europe-west4" | +| [repo_name](variables.tf#L132) | Cloud Source Repository name. null to avoid to create it. | string | | null | +| [sa_mlops_name](variables.tf#L138) | Name for the MLOPs Service Account. | string | | "sa-mlops" | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| [github](outputs.tf#L33) | Github Configuration. | | +| [notebook](outputs.tf#L39) | Vertex AI managed notebook details. | | +| [project](outputs.tf#L44) | The project resource as return by the `project` module. | | +| [project_id](outputs.tf#L49) | Project ID. | | + + +# TODO +- Add support for User Managed Notebooks, SA permission option and non default SA for Single User mode. +- Improve default naming for local VPC and Cloud NAT \ No newline at end of file diff --git a/blueprints/data-solutions/vertex-mlops/ci-cd.tf b/blueprints/data-solutions/vertex-mlops/ci-cd.tf new file mode 100644 index 00000000..d73eacc8 --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/ci-cd.tf @@ -0,0 +1,74 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +resource "google_iam_workload_identity_pool" "github_pool" { + count = var.identity_pool_claims == null ? 0 : 1 + project = module.project.project_id + workload_identity_pool_id = "gh-pool" + display_name = "Github Actions Identity Pool" + description = "Identity pool for Github Actions" +} + +resource "google_iam_workload_identity_pool_provider" "github_provider" { + count = var.identity_pool_claims == null ? 0 : 1 + project = module.project.project_id + workload_identity_pool_id = google_iam_workload_identity_pool.github_pool[0].workload_identity_pool_id + workload_identity_pool_provider_id = "gh-provider" + display_name = "Github Actions provider" + description = "OIDC provider for Github Actions" + attribute_mapping = { + "google.subject" = "assertion.sub" + "attribute.repository" = "assertion.repository" + } + oidc { + issuer_uri = "https://token.actions.githubusercontent.com" + } +} + +module "artifact_registry" { + source = "../../../modules/artifact-registry" + id = "docker-repo" + project_id = module.project.project_id + location = var.region + format = "DOCKER" + # iam = { + # "roles/artifactregistry.admin" = ["group:cicd@example.com"] + # } +} + +module "service-account-github" { + source = "../../../modules/iam-service-account" + name = "sa-github" + project_id = module.project.project_id + iam = var.identity_pool_claims == null ? {} : { "roles/iam.workloadIdentityUser" = ["principalSet://iam.googleapis.com/${google_iam_workload_identity_pool.github_pool[0].name}/${var.identity_pool_claims}"] } +} + +# NOTE: Secret manager module at the moment does not support CMEK +module "secret-manager" { + project_id = module.project.project_id + source = "../../../modules/secret-manager" + secrets = { + github-key = [var.region] + } + iam = { + github-key = { + "roles/secretmanager.secretAccessor" = [ + "serviceAccount:${module.project.service_accounts.robots.cloudbuild}", + module.service-account-mlops.iam_email + ] + } + } +} \ No newline at end of file diff --git a/blueprints/data-solutions/vertex-mlops/images/mlops_projects.png b/blueprints/data-solutions/vertex-mlops/images/mlops_projects.png new file mode 100644 index 0000000000000000000000000000000000000000..24017bc9d6b219b8cbd55cf13b43d1acea366342 GIT binary patch literal 32248 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%0Dd(wQE&7S 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 B&Lsc< literal 0 HcmV?d00001 diff --git a/blueprints/data-solutions/vertex-mlops/main.tf b/blueprints/data-solutions/vertex-mlops/main.tf new file mode 100644 index 00000000..5f7fbc0c --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/main.tf @@ -0,0 +1,278 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +locals { + group_iam = merge( + var.groups.gcp-ml-viewer == null ? {} : { + (var.groups.gcp-ml-viewer) = [ + "roles/aiplatform.viewer", + "roles/artifactregistry.reader", + "roles/dataflow.viewer", + "roles/logging.viewer", + "roles/storage.objectViewer" + ] + }, + var.groups.gcp-ml-ds == null ? {} : { + (var.groups.gcp-ml-ds) = [ + "roles/aiplatform.admin", + "roles/artifactregistry.admin", + "roles/bigquery.dataEditor", + "roles/bigquery.jobUser", + "roles/bigquery.user", + "roles/cloudbuild.builds.editor", + "roles/cloudfunctions.developer", + "roles/dataflow.developer", + "roles/dataflow.worker", + "roles/iam.serviceAccountUser", + "roles/logging.logWriter", + "roles/logging.viewer", + "roles/notebooks.admin", + "roles/pubsub.editor", + "roles/serviceusage.serviceUsageConsumer", + "roles/storage.admin" + ] + }, + var.groups.gcp-ml-eng == null ? {} : { + (var.groups.gcp-ml-eng) = [ + "roles/aiplatform.admin", + "roles/artifactregistry.admin", + "roles/bigquery.dataEditor", + "roles/bigquery.jobUser", + "roles/bigquery.user", + "roles/dataflow.developer", + "roles/dataflow.worker", + "roles/iam.serviceAccountUser", + "roles/logging.logWriter", + "roles/logging.viewer", + "roles/serviceusage.serviceUsageConsumer", + "roles/storage.admin" + ] + } + ) + + service_encryption_keys = var.service_encryption_keys + shared_vpc_project = try(var.network_config.host_project, null) + + subnet = ( + local.use_shared_vpc + ? var.network_config.subnet_self_link + : values(module.vpc-local.0.subnet_self_links)[0] + ) + vpc = ( + local.use_shared_vpc + ? var.network_config.network_self_link + : module.vpc-local.0.self_link + ) + use_shared_vpc = var.network_config != null + + shared_vpc_bindings = { + "roles/compute.networkUser" = [ + "robot-df", "notebooks" + ] + } + + shared_vpc_role_members = { + robot-df = "serviceAccount:${module.project.service_accounts.robots.dataflow}" + notebooks = "serviceAccount:${module.project.service_accounts.robots.notebooks}" + } + + # reassemble in a format suitable for for_each + shared_vpc_bindings_map = { + for binding in flatten([ + for role, members in local.shared_vpc_bindings : [ + for member in members : { role = role, member = member } + ] + ]) : "${binding.role}-${binding.member}" => binding + } +} + +module "gcs-bucket" { + count = var.bucket_name == null ? 0 : 1 + source = "../../../modules/gcs" + project_id = module.project.project_id + name = var.bucket_name + prefix = var.prefix + location = var.region + storage_class = "REGIONAL" + versioning = false + encryption_key = try(local.service_encryption_keys.storage, null) +} + +# Default bucket for Cloud Build to prevent error: "'us' violates constraint ‘constraints/gcp.resourceLocations’" +# https://stackoverflow.com/questions/53206667/cloud-build-fails-with-resource-location-constraint +module "gcs-bucket-cloudbuild" { + source = "../../../modules/gcs" + project_id = module.project.project_id + name = "${var.project_id}_cloudbuild" + prefix = var.prefix + location = var.region + storage_class = "REGIONAL" + versioning = false + encryption_key = try(local.service_encryption_keys.storage, null) +} + +module "bq-dataset" { + count = var.dataset_name == null ? 0 : 1 + source = "../../../modules/bigquery-dataset" + project_id = module.project.project_id + id = var.dataset_name + location = var.region + encryption_key = try(local.service_encryption_keys.bq, null) +} + +module "vpc-local" { + count = local.use_shared_vpc ? 0 : 1 + source = "../../../modules/net-vpc" + project_id = module.project.project_id + name = "default" + subnets = [ + { + "name" : "default", + "region" : "${var.region}", + "ip_cidr_range" : "10.4.0.0/24", + "secondary_ip_range" : null + } + ] + psa_config = { + ranges = { + "vertex" : "10.13.0.0/18" + } + routes = null + } +} + +module "firewall" { + count = local.use_shared_vpc ? 0 : 1 + source = "../../../modules/net-vpc-firewall" + project_id = module.project.project_id + network = module.vpc-local[0].name + default_rules_config = { + disabled = true + } + ingress_rules = { + dataflow-ingress = { + description = "Dataflow service." + direction = "INGRESS" + action = "allow" + sources = ["dataflow"] + targets = ["dataflow"] + ranges = [] + use_service_accounts = false + rules = [{ protocol = "tcp", ports = ["12345-12346"] }] + extra_attributes = {} + } + } + +} + +module "cloudnat" { + count = local.use_shared_vpc ? 0 : 1 + source = "../../../modules/net-cloudnat" + project_id = module.project.project_id + region = var.region + name = "default" + router_network = module.vpc-local[0].self_link +} + +module "project" { + source = "../../../modules/project" + name = var.project_id + parent = try(var.project_create.parent, null) + billing_account = try(var.project_create.billing_account_id, null) + project_create = var.project_create != null + prefix = var.prefix + group_iam = local.group_iam + iam = { + "roles/aiplatform.user" = [module.service-account-mlops.iam_email] + "roles/artifactregistry.reader" = [module.service-account-mlops.iam_email] + "roles/artifactregistry.writer" = [module.service-account-github.iam_email] + "roles/bigquery.dataEditor" = [module.service-account-mlops.iam_email] + "roles/bigquery.jobUser" = [module.service-account-mlops.iam_email] + "roles/bigquery.user" = [module.service-account-mlops.iam_email] + "roles/cloudbuild.builds.editor" = [ + module.service-account-mlops.iam_email, + module.service-account-github.iam_email + ] + + "roles/cloudfunctions.invoker" = [module.service-account-mlops.iam_email] + "roles/dataflow.developer" = [module.service-account-mlops.iam_email] + "roles/dataflow.worker" = [module.service-account-mlops.iam_email] + "roles/iam.serviceAccountUser" = [ + module.service-account-mlops.iam_email, + "serviceAccount:${module.project.service_accounts.robots.cloudbuild}" + ] + "roles/monitoring.metricWriter" = [module.service-account-mlops.iam_email] + "roles/run.invoker" = [module.service-account-mlops.iam_email] + "roles/serviceusage.serviceUsageConsumer" = [ + module.service-account-mlops.iam_email, + module.service-account-github.iam_email + ] + "roles/storage.admin" = [ + module.service-account-mlops.iam_email, + module.service-account-github.iam_email + ] + } + labels = var.labels + + org_policies = { + # Example of applying a project wide policy + # "constraints/compute.requireOsLogin" = { + # enforce = false + # } + } + + service_encryption_key_ids = { + bq = [try(local.service_encryption_keys.bq, null)] + compute = [try(local.service_encryption_keys.compute, null)] + cloudbuild = [try(local.service_encryption_keys.storage, null)] + notebooks = [try(local.service_encryption_keys.compute, null)] + storage = [try(local.service_encryption_keys.storage, null)] + } + services = var.project_services + + + shared_vpc_service_config = local.shared_vpc_project == null ? null : { + attach = true + host_project = local.shared_vpc_project + } + +} + +module "service-account-mlops" { + source = "../../../modules/iam-service-account" + name = var.sa_mlops_name + project_id = module.project.project_id + iam = { + "roles/iam.serviceAccountUser" = [module.service-account-github.iam_email] + } +} + +resource "google_project_iam_member" "shared_vpc" { + count = local.use_shared_vpc ? 1 : 0 + project = var.network_config.host_project + role = "roles/compute.networkUser" + member = "serviceAccount:${module.project.service_accounts.robots.notebooks}" +} + + +resource "google_sourcerepo_repository" "code-repo" { + count = var.repo_name == null ? 0 : 1 + name = var.repo_name + project = module.project.project_id +} + + diff --git a/blueprints/data-solutions/vertex-mlops/notebooks.tf b/blueprints/data-solutions/vertex-mlops/notebooks.tf new file mode 100644 index 00000000..09d3e5a8 --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/notebooks.tf @@ -0,0 +1,60 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +resource "google_notebooks_runtime" "runtime" { + for_each = var.notebooks + name = each.key + + project = module.project.project_id + location = var.notebooks[each.key].region + access_config { + access_type = "SINGLE_USER" + runtime_owner = var.notebooks[each.key].owner + } + software_config { + enable_health_monitoring = true + idle_shutdown = var.notebooks[each.key].idle_shutdown + idle_shutdown_timeout = 1800 + } + virtual_machine { + virtual_machine_config { + machine_type = "n1-standard-4" + network = local.vpc + subnet = local.subnet + internal_ip_only = var.notebooks[each.key].internal_ip_only + dynamic "encryption_config" { + for_each = try(local.service_encryption_keys.compute, null) == null ? [] : [1] + content { + kms_key = local.service_encryption_keys.compute + } + } + metadata = { + notebook-disable-nbconvert = "false" + notebook-disable-downloads = "false" + notebook-disable-terminal = "false" + #notebook-disable-root = "true" + #notebook-upgrade-schedule = "48 4 * * MON" + } + data_disk { + initialize_params { + disk_size_gb = "100" + disk_type = "PD_STANDARD" + } + } + } + } +} + diff --git a/blueprints/data-solutions/vertex-mlops/outputs.tf b/blueprints/data-solutions/vertex-mlops/outputs.tf new file mode 100644 index 00000000..9cb390d6 --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/outputs.tf @@ -0,0 +1,52 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +# TODO(): proper outputs + + +locals { + docker_split = try(split("/", module.artifact_registry.id), null) + docker_repo = try("${local.docker_split[3]}-docker.pkg.dev/${local.docker_split[1]}/${local.docker_split[5]}", null) + gh_config = { + WORKLOAD_ID_PROVIDER = try(google_iam_workload_identity_pool_provider.github_provider[0].name, null) + SERVICE_ACCOUNT = try(module.service-account-github.email, null) + PROJECT_ID = module.project.project_id + DOCKER_REPO = local.docker_repo + SA_MLOPS = module.service-account-mlops.email + SUBNETWORK = local.subnet + } +} + +output "github" { + + description = "Github Configuration." + value = local.gh_config +} + +output "notebook" { + description = "Vertex AI managed notebook details." + value = { for k, v in resource.google_notebooks_runtime.runtime : k => v.id } +} + +output "project" { + description = "The project resource as return by the `project` module." + value = module.project +} + +output "project_id" { + description = "Project ID." + value = module.project.project_id +} diff --git a/blueprints/data-solutions/vertex-mlops/terraform.tfvars.sample b/blueprints/data-solutions/vertex-mlops/terraform.tfvars.sample new file mode 100644 index 00000000..097bac3a --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/terraform.tfvars.sample @@ -0,0 +1,20 @@ +bucket_name = "creditcards-dev" +dataset_name = "creditcards" +identity_pool_claims = "attribute.repository/ORGANIZATION/REPO" +labels = { + "env" : "dev", + "team" : "ml" +} +notebooks = { + "myworkbench" : { + "owner" : "user@example.com", + "region" : "europe-west4", + "subnet" : "default", + } +} +prefix = "pref" +project_id = "creditcards-dev" +project_create = { + billing_account_id = "000000-123456-123456" + parent = "folders/111111111111" +} diff --git a/blueprints/data-solutions/vertex-mlops/variables.tf b/blueprints/data-solutions/vertex-mlops/variables.tf new file mode 100644 index 00000000..f3f6efad --- /dev/null +++ b/blueprints/data-solutions/vertex-mlops/variables.tf @@ -0,0 +1,152 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +variable "bucket_name" { + description = "GCS bucket name to store the Vertex AI artifacts." + type = string + default = null +} + +variable "dataset_name" { + description = "BigQuery Dataset to store the training data." + type = string + default = null +} + +variable "groups" { + description = "Name of the groups (name@domain.org) to apply opinionated IAM permissions." + type = object({ + gcp-ml-ds = string + gcp-ml-eng = string + gcp-ml-viewer = string + }) + default = { + gcp-ml-ds = null + gcp-ml-eng = null + gcp-ml-viewer = null + } + nullable = false +} + +variable "identity_pool_claims" { + description = "Claims to be used by Workload Identity Federation (i.e.: attribute.repository/ORGANIZATION/REPO). If a not null value is provided, then google_iam_workload_identity_pool resource will be created." + type = string + default = null +} + +variable "labels" { + description = "Labels to be assigned at project level." + type = map(string) + default = {} +} + +variable "location" { + description = "Location used for multi-regional resources." + type = string + default = "eu" +} + +variable "network_config" { + description = "Shared VPC network configurations to use. If null networks will be created in projects with preconfigured values." + type = object({ + host_project = string + network_self_link = string + subnet_self_link = string + }) + default = null +} + +variable "notebooks" { + description = "Vertex AI workbenchs to be deployed." + type = map(object({ + owner = string + region = string + subnet = string + internal_ip_only = optional(bool, false) + idle_shutdown = optional(bool) + })) + default = {} + nullable = false +} + +variable "prefix" { + description = "Prefix used for the project id." + type = string + default = null +} + +variable "project_create" { + description = "Provide values if project creation is needed, uses existing project if null. Parent is in 'folders/nnn' or 'organizations/nnn' format." + type = object({ + billing_account_id = string + parent = string + }) + default = null +} + +variable "project_id" { + description = "Project id, references existing project if `project_create` is null." + type = string +} + +variable "project_services" { + description = "List of core services enabled on all projects." + type = list(string) + default = [ + "aiplatform.googleapis.com", + "artifactregistry.googleapis.com", + "bigquery.googleapis.com", + "cloudbuild.googleapis.com", + "compute.googleapis.com", + "datacatalog.googleapis.com", + "dataflow.googleapis.com", + "iam.googleapis.com", + "monitoring.googleapis.com", + "notebooks.googleapis.com", + "secretmanager.googleapis.com", + "servicenetworking.googleapis.com", + "serviceusage.googleapis.com" + ] +} + +variable "region" { + description = "Region used for regional resources." + type = string + default = "europe-west4" +} + +variable "repo_name" { + description = "Cloud Source Repository name. null to avoid to create it." + type = string + default = null +} + +variable "sa_mlops_name" { + description = "Name for the MLOPs Service Account." + type = string + default = "sa-mlops" +} + +variable "service_encryption_keys" { # service encription key + description = "Cloud KMS to use to encrypt different services. Key location should match service region." + type = object({ + bq = string + compute = string + storage = string + }) + default = null +} \ No newline at end of file diff --git a/tests/blueprints/data_solutions/vertex_mlops/__init__.py b/tests/blueprints/data_solutions/vertex_mlops/__init__.py new file mode 100644 index 00000000..6d6d1266 --- /dev/null +++ b/tests/blueprints/data_solutions/vertex_mlops/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/blueprints/data_solutions/vertex_mlops/fixture/main.tf b/tests/blueprints/data_solutions/vertex_mlops/fixture/main.tf new file mode 100644 index 00000000..0b671f33 --- /dev/null +++ b/tests/blueprints/data_solutions/vertex_mlops/fixture/main.tf @@ -0,0 +1,39 @@ +/** + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "projects" { + source = "../../../../../blueprints/data-solutions/vertex-mlops/" + labels = { + "env" : "dev", + "team" : "ml" + } + bucket_name = "test-dev" + dataset_name = "test" + identity_pool_claims = "attribute.repository/ORGANIZATION/REPO" + notebooks = { + "myworkbench" : { + "owner" : "user@example.com", + "region" : "europe-west4", + "subnet" : "default", + } + } + prefix = "pref" + project_id = "test-dev" + project_create = { + billing_account_id = "000000-123456-123456" + parent = "folders/111111111111" + } +} diff --git a/tests/blueprints/data_solutions/vertex_mlops/test_plan.py b/tests/blueprints/data_solutions/vertex_mlops/test_plan.py new file mode 100644 index 00000000..eac30ad5 --- /dev/null +++ b/tests/blueprints/data_solutions/vertex_mlops/test_plan.py @@ -0,0 +1,23 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import os +import pytest + +FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') + +def test_resources(e2e_plan_runner): + "Test that plan works and the numbers of resources is as expected." + modules, resources = e2e_plan_runner(FIXTURES_DIR) + # TODO: to re-enable per-module resource count check print _, then test + assert len(modules) > 0 and len(resources) > 0 \ No newline at end of file From 2958063625951ca4eb926da748e726b5eda3cc81 Mon Sep 17 00:00:00 2001 From: Natalia Strelkova Date: Fri, 3 Feb 2023 15:39:00 +0100 Subject: [PATCH 27/58] Remove info about non-existing vpc-peering-*.tf files --- fast/stages/02-networking-nva/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/fast/stages/02-networking-nva/README.md b/fast/stages/02-networking-nva/README.md index 79c27e8d..29cb41af 100644 --- a/fast/stages/02-networking-nva/README.md +++ b/fast/stages/02-networking-nva/README.md @@ -339,9 +339,6 @@ The new VPC requires a set of dedicated CIDRs, one per region, added to variable > Variables managing L7 Internal Load Balancers (`l7ilb_subnets`) and Private Service Access (`psa_ranges`) should also be adapted, and subnets and firewall rules for the new spoke should be added, as described above. -VPC network peering connectivity to the `trusted landing VPC` is managed by the `vpc-peering-*.tf` files. -Copy `vpc-peering-prod.tf` to `vpc-peering-staging.tf` and replace "prod" with "staging", where relevant. - Configure the NVAs deployed or update the sample [NVA config file](data/nva-startup-script.tftpl) making sure they support the new subnets. DNS configurations are centralised in the `dns-*.tf` files. Spokes delegate DNS resolution to Landing through DNS peering, and optionally define a private zone (e.g. `dev.gcp.example.com`) which the landing peers to. To configure DNS for a new environment, copy one of the other environments DNS files [e.g. (dns-dev.tf)](dns-dev.tf) into a new `dns-*.tf` file suffixed with the environment name (e.g. `dns-staging.tf`), and update its content accordingly. Don't forget to add a peering zone from the landing to the newly created environment private zone. From 45a74f37f91207c0b0b8a2f33fa198716e7d335b Mon Sep 17 00:00:00 2001 From: lcaggio Date: Sat, 4 Feb 2023 06:24:35 +0100 Subject: [PATCH 28/58] Mention policies in the costomization section. --- blueprints/data-solutions/shielded-folder/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/blueprints/data-solutions/shielded-folder/README.md b/blueprints/data-solutions/shielded-folder/README.md index 9ec01785..9ed7c5a9 100644 --- a/blueprints/data-solutions/shielded-folder/README.md +++ b/blueprints/data-solutions/shielded-folder/README.md @@ -49,6 +49,13 @@ The script will create keys to encrypt log sink buckets/datasets/topics in the s ## Customizations +### Organization policy +You can configure the Organization policy enforced on the folder editing yaml files in the [org-policies](./data/org-policies/) folder. An opinionated list of policies that we suggest enforcing is listed. + +Some additional Organization policy constraints you may want to evaluate adding: +* 'constraints/gcp.resourceLocations': to define the locations where location-based GCP resources can be created. +* 'constraints/gcp.restrictCmekCryptoKeyProjects': to define which projects may be used to supply Customer-Managed Encryption Keys (CMEK) when creating resources. + ### VPC Service Control VPC Service Control is configured to have a Perimeter containing all projects within the folder. Additional projects you may add to the folder won't be automatically added to the perimeter, and a new `terraform apply` is needed to add the project to the perimeter. From 04dc78232ec97179a3c87eb3c22f26a0edb67ab0 Mon Sep 17 00:00:00 2001 From: Ludo Date: Sat, 4 Feb 2023 14:40:53 +0100 Subject: [PATCH 29/58] update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4477f3f4..4cdf4372 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. ### BLUEPRINTS +- [[#1038](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1038)] Vertex Pipelines MLOps framework blueprint ([javiergp](https://github.com/javiergp)) - [[#1124](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1124)] Removed unused file package-lock.json ([apichick](https://github.com/apichick)) - [[#1119](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1119)] **incompatible change:** Multi-Cluster Ingress gateway api config ([wiktorn](https://github.com/wiktorn)) - [[#1111](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1111)] **incompatible change:** In the apigee module now both the /22 and /28 peering IP ranges are p… ([apichick](https://github.com/apichick)) @@ -52,6 +53,7 @@ All notable changes to this project will be documented in this file. ### MODULES +- [[#1127](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1127)] Skip node config for autopilot ([ludoo](https://github.com/ludoo)) - [[#1125](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1125)] Added mesh_certificates setting in GKE cluster ([rosmo](https://github.com/rosmo)) - [[#1094](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1094)] Added GLB example with MIG as backend ([eliamaldini](https://github.com/eliamaldini)) - [[#1119](https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/pull/1119)] **incompatible change:** Multi-Cluster Ingress gateway api config ([wiktorn](https://github.com/wiktorn)) From ea09a0df68f7af18405101f81299d48560c018e0 Mon Sep 17 00:00:00 2001 From: Ludo Date: Sat, 4 Feb 2023 14:43:37 +0100 Subject: [PATCH 30/58] update for v20.0.0 --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cdf4372..cedd3a40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - + +## [20.0.0] - 2023-02-04 ### BLUEPRINTS @@ -934,7 +935,8 @@ All notable changes to this project will be documented in this file. - merge development branch with suite of new modules and end-to-end examples -[Unreleased]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v19.0.0...HEAD +[Unreleased]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v20.0.0...HEAD +[20.0.0]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v19.0.0...v20.0.0 [19.0.0]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v18.0.0...v19.0.0 [18.0.0]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v16.0.0...v18.0.0 [16.0.0]: https://github.com/GoogleCloudPlatform/cloud-foundation-fabric/compare/v15.0.0...v16.0.0 From 5453c585e0086227b9eda70f62cc11cf989bf14f Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 4 Feb 2023 15:00:45 +0100 Subject: [PATCH 31/58] FAST multitenant bootstrap and resource management, rename org-level FAST stages (#1052) * rename stages * remove support for external org billing, rename output files * resman: make groups optional, align on new billing account variable * bootstrap: multitenant outputs * tenant bootstrap stage, untested * fix folder name * fix stage 0 output names * optional creation for tag keys in organization module * single tenant bootstrap minus tag * rename output files, add tenant tag key * fix organization module tag values output * test skipping creation for tags in organization module * single tenant bootstrap plan working * multitenant bootstrap * tfdoc * fix check links error messages * fix links * tfdoc * fix links * rename fast tests, fix bootstrap tests * multitenant stages have their own folder, simplify stage numbering * stage renumbering * wip * rename tests * exclude fast providers in fixture * stage 0 tests * stage 1 tests * network stages tests * stage tests * tfdoc * fix links * tfdoc * multitenant tests * remove local files * stage links command * fix links script, TODO * wip * wip single tenant bootstrap * working tenant bootstrap * update gitignore * remove local files * tfdoc * remove local files * allow tests for tenant bootstrap stage * tenant bootstrap proxies stage 1 tfvars * stage 2 and 3 service accounts and IAM in tenant bootstrap * wip * wip * wip * drop multitenant bootstrap * tfdoc * add missing stage 2 SAs, fix org-level IAM condition * wip * wip * optional tag value creation in organization module * stage 1 working * linting * linting * READMEs * wip * Make stage-links script work in old macos bash * stage links command help * fix output file names * diagrams * fix svg * stage 0 skeleton and diagram * test svg * test svg * test diagram * diagram * readme * fix stage links script * stage 0 readme * README changes * stage readmes * fix outputs order * fix link * fix tests * stage 1 test * skip stage example * boilerplate * fix tftest skip * default bootstrap stage log sinks to log buckets * add logging to tenant bootstrap * move iam variables out of tenant config * fix cicd, reintroduce missing variable * use optional in stage 1 cicd variable * rename extras stage * rename and move identity providers local, use optional for cicd variable * tfdoc * add support for wif pool and providers, ci/cd * tfdoc * fix links * better handling of modules repository * add missing role on logging project * fix cicd pools in locals, test cicd * fix workflow extension * fix module source replacement * allow tenant bootstrap cicd sa to impersonate resman sa * tenant workflow templates fix for no providers file * fix output files, push github workflow template to new repository * remove try from outpout files * align stage 1 cicd internals to stage 0 * tfdoc * tests * fix tests * tests * improve variable descriptions * use optional in fast features * actually create tenant log sinks, and allow the resman sa to do it * test * tests * aaaand tests again * fast features tenant override * fast features tenant override * fix wording * add missing comment * configure pf service accounts * add missing comment * tfdoc * tests * IAM docs * update copyright --------- Co-authored-by: Julio Castillo --- .gitignore | 12 +- CHANGELOG.md | 6 +- .../data-platform-foundations/README.md | 2 +- blueprints/gke/multitenant-fleet/README.md | 2 +- .../networking/hub-and-spoke-vpn/README.md | 2 +- diagram.svg | 293 +++ fast/README.md | 24 +- fast/extras/0-cicd-github/README.md | 139 ++ .../cicd-versions.tf | 2 +- .../github_token.png | Bin .../{00-cicd-github => 0-cicd-github}/main.tf | 66 +- .../outputs.tf | 2 +- .../providers.tf | 2 +- .../variables.tf | 27 +- fast/extras/00-cicd-github/README.md | 105 - fast/extras/README.md | 2 +- fast/stage-links.sh | 114 + .../0-bootstrap-tenant/IAM.md | 49 + .../0-bootstrap-tenant/README.md | 210 ++ .../0-bootstrap-tenant/automation-sas.tf | 127 ++ .../0-bootstrap-tenant/automation.tf | 141 ++ .../0-bootstrap-tenant/billing.tf | 39 + .../0-bootstrap-tenant/cicd.tf | 223 ++ .../0-bootstrap-tenant/diagram.svg | 597 +++++ .../0-bootstrap-tenant/identity-providers.tf | 96 + .../0-bootstrap-tenant/log-export.tf | 94 + .../0-bootstrap-tenant/main.tf | 100 + .../0-bootstrap-tenant/organization.tf | 84 + .../0-bootstrap-tenant/outputs-files.tf | 46 + .../0-bootstrap-tenant/outputs-gcs.tf | 41 + .../0-bootstrap-tenant/outputs.tf | 140 ++ .../templates/providers.tf.tpl | 30 + .../templates/workflow-github.yaml | 190 ++ .../templates/workflow-gitlab.yaml | 124 ++ .../templates/workflow-sourcerepo.yaml | 100 + .../0-bootstrap-tenant/variables.tf | 305 +++ .../stages-multitenant/1-resman-tenant/IAM.md | 60 + .../1-resman-tenant/README.md | 184 ++ .../1-resman-tenant/branch-data-platform.tf | 133 ++ .../1-resman-tenant/branch-gke.tf | 133 ++ .../1-resman-tenant/branch-networking.tf | 107 + .../1-resman-tenant/branch-project-factory.tf | 79 + .../1-resman-tenant/branch-sandbox.tf | 51 + .../1-resman-tenant/branch-security.tf | 76 + .../1-resman-tenant/branch-teams.tf | 163 ++ .../1-resman-tenant/cicd-data-platform.tf | 173 ++ .../1-resman-tenant/cicd-gke.tf | 175 ++ .../1-resman-tenant/cicd-networking.tf | 94 + .../1-resman-tenant/cicd-project-factory.tf | 191 ++ .../1-resman-tenant/cicd-security.tf | 94 + .../data/org-policies/compute.yaml | 0 .../data/org-policies/iam.yaml | 0 .../data/org-policies/serverless.yaml | 0 .../data/org-policies/sql.yaml | 0 .../data/org-policies/storage.yaml | 0 .../1-resman-tenant}/diagram.png | Bin .../1-resman-tenant}/diagram.svg | 0 .../1-resman-tenant/main.tf | 79 + .../1-resman-tenant/outputs-files.tf | 46 + .../1-resman-tenant/outputs-gcs.tf | 37 + .../1-resman-tenant/outputs.tf | 311 +++ .../1-resman-tenant/root_node.tf | 41 + .../templates/providers.tf.tpl | 33 + .../templates/workflow-github.yaml | 186 ++ .../templates/workflow-gitlab.yaml | 120 + .../templates/workflow-sourcerepo.yaml | 98 + .../1-resman-tenant/variables.tf | 281 +++ fast/stages-multitenant/MULTITENANT-TODO.md | 8 + fast/stages-multitenant/README.md | 27 + fast/stages-multitenant/diagram.png | Bin 0 -> 200274 bytes fast/stages-multitenant/stages.png | Bin 0 -> 219942 bytes fast/stages-multitenant/stages.svg | 1278 +++++++++++ fast/stages.png | Bin 258759 -> 144883 bytes fast/stages.svg | 1948 ++++++++--------- .../{00-bootstrap => 0-bootstrap}/IAM.md | 0 .../{00-bootstrap => 0-bootstrap}/README.md | 60 +- .../automation.tf | 36 +- .../{00-bootstrap => 0-bootstrap}/billing.tf | 46 +- .../{00-bootstrap => 0-bootstrap}/cicd.tf | 23 +- .../{00-bootstrap => 0-bootstrap}/diagram.png | Bin .../{00-bootstrap => 0-bootstrap}/diagram.svg | 0 .../{00-bootstrap => 0-bootstrap}/groups.gif | Bin .../identity-providers.tf | 0 .../log-export.tf | 10 + .../{00-bootstrap => 0-bootstrap}/main.tf | 4 - .../organization.tf | 33 +- .../outputs-files.tf | 2 +- .../outputs-gcs.tf | 2 +- .../{00-bootstrap => 0-bootstrap}/outputs.tf | 46 +- .../0-bootstrap/templates/providers.tf.tpl | 33 + .../templates/workflow-github.yaml | 186 ++ .../templates/workflow-gitlab.yaml | 120 + .../templates/workflow-sourcerepo.yaml | 98 + .../terraform.tfvars.sample | 0 .../variables.tf | 46 +- fast/stages/00-bootstrap/templates | 1 - fast/stages/01-resman/templates | 1 - fast/stages/{01-resman => 1-resman}/IAM.md | 0 fast/stages/{01-resman => 1-resman}/README.md | 82 +- .../stages/{01-resman => 1-resman}/billing.tf | 16 +- .../branch-data-platform.tf | 19 + .../{01-resman => 1-resman}/branch-gke.tf | 12 +- .../branch-networking.tf | 2 +- .../branch-project-factory.tf | 19 + .../{01-resman => 1-resman}/branch-sandbox.tf | 0 .../branch-security.tf | 4 +- .../{01-resman => 1-resman}/branch-teams.tf | 0 .../cicd-data-platform.tf | 4 +- .../{01-resman => 1-resman}/cicd-gke.tf | 4 +- .../cicd-networking.tf | 2 +- .../cicd-project-factory.tf | 4 +- .../{01-resman => 1-resman}/cicd-security.tf | 2 +- .../1-resman/data/org-policies/compute.yaml | 73 + .../1-resman/data/org-policies/iam.yaml | 12 + .../data/org-policies/serverless.yaml | 26 + .../1-resman/data/org-policies/sql.yaml | 9 + .../1-resman/data/org-policies/storage.yaml | 6 + fast/stages/1-resman/diagram.png | Bin 0 -> 233671 bytes fast/stages/1-resman/diagram.svg | 1340 ++++++++++++ fast/stages/{01-resman => 1-resman}/main.tf | 29 +- .../{01-resman => 1-resman}/organization.tf | 49 +- .../{01-resman => 1-resman}/outputs-files.tf | 2 +- .../{01-resman => 1-resman}/outputs-gcs.tf | 2 +- .../stages/{01-resman => 1-resman}/outputs.tf | 117 +- .../1-resman/templates/providers.tf.tpl | 33 + .../1-resman/templates/workflow-github.yaml | 186 ++ .../1-resman/templates/workflow-gitlab.yaml | 120 + .../templates/workflow-sourcerepo.yaml | 98 + .../{01-resman => 1-resman}/variables.tf | 98 +- .../.gitignore | 0 .../IAM.md | 0 .../README.md | 42 +- .../data/cidrs.yaml | 0 .../data/dashboards/firewall_insights.json | 0 .../data/dashboards/vpn.json | 0 .../data/firewall-rules/dev/rules.yaml | 0 .../data/firewall-rules/landing/rules.yaml | 0 .../data/hierarchical-policy-rules.yaml | 0 .../subnets/dev/dev-dataplatform-ew1.yaml | 0 .../data/subnets/dev/dev-default-ew1.yaml | 0 .../data/subnets/dev/dev-gke-nodes-ew1.yaml | 0 .../subnets/landing/landing-default-ew1.yaml | 0 .../data/subnets/prod/prod-default-ew1.yaml | 0 .../diagram.png | Bin .../diagram.svg | 0 .../dns-dev.tf | 0 .../dns-landing.tf | 0 .../dns-prod.tf | 0 .../landing.tf | 0 .../main.tf | 0 .../monitoring.tf | 0 .../outputs.tf | 4 +- .../peerings.tf | 0 .../spoke-dev.tf | 0 .../spoke-prod.tf | 0 .../test-resources.tf | 0 .../variables-peerings.tf | 0 .../variables.tf | 24 +- .../vpn-onprem.tf | 0 .../.gitignore | 0 .../IAM.md | 0 .../README.md | 42 +- .../data/cidrs.yaml | 0 .../data/dashboards/firewall_insights.json | 0 .../data/dashboards/vpn.json | 0 .../data/firewall-rules/dev/rules.yaml | 0 .../data/firewall-rules/landing/rules.yaml | 0 .../data/hierarchical-policy-rules.yaml | 0 .../subnets/dev/dev-dataplatform-ew1.yaml | 0 .../data/subnets/dev/dev-default-ew1.yaml | 0 .../data/subnets/dev/dev-gke-nodes-ew1.yaml | 0 .../subnets/landing/landing-default-ew1.yaml | 0 .../data/subnets/prod/prod-default-ew1.yaml | 0 .../diagram.png | Bin .../diagram.svg | 0 .../dns-dev.tf | 0 .../dns-landing.tf | 0 .../dns-prod.tf | 0 .../landing.tf | 0 .../main.tf | 0 .../monitoring.tf | 0 .../outputs.tf | 4 +- .../spoke-dev.tf | 0 .../spoke-prod.tf | 0 .../test-resources.tf | 0 .../variables-vpn.tf | 0 .../variables.tf | 24 +- .../vpn-onprem.tf | 0 .../vpn-spoke-dev.tf | 0 .../vpn-spoke-prod-ew1.tf | 0 .../vpn-spoke-prod-ew4.tf | 0 .../README.md | 44 +- .../data/cidrs.yaml | 0 .../data/dashboards/firewall_insights.json | 0 .../data/dashboards/vpn.json | 0 .../data/firewall-rules/dev/rules.yaml | 0 .../firewall-rules/landing-trusted/rules.yaml | 0 .../landing-untrusted/rules.yaml | 0 .../data/hierarchical-policy-rules.yaml | 0 .../data/nva-startup-script.tftpl | 0 .../subnets/dev/dev-dataplatform-ew1.yaml | 0 .../data/subnets/dev/dev-default-ew1.yaml | 0 .../data/subnets/dev/dev-default-ew4.yaml | 0 .../landing-trusted-default-ew1.yaml | 0 .../landing-trusted-default-ew4.yaml | 0 .../landing-untrusted-default-ew1.yaml | 0 .../landing-untrusted-default-ew4.yaml | 0 .../data/subnets/prod/prod-default-ew1.yaml | 0 .../data/subnets/prod/prod-default-ew4.yaml | 0 .../diagram.png | Bin .../diagram.svg | 0 .../dns-dev.tf | 0 .../dns-landing.tf | 0 .../dns-prod.tf | 0 .../landing.tf | 0 .../main.tf | 0 .../monitoring.tf | 0 .../nva.tf | 0 .../outputs.tf | 4 +- .../spoke-dev.tf | 0 .../spoke-prod.tf | 0 .../test-resources.tf | 0 .../variables.tf | 24 +- .../vpn-onprem.tf | 0 .../.gitignore | 0 .../IAM.md | 0 .../README.md | 38 +- .../data/cidrs.yaml | 0 .../data/dashboards/firewall_insights.json | 0 .../data/dashboards/vpn.json | 0 .../data/firewall-rules/dev/rules.yaml | 0 .../data/hierarchical-policy-rules.yaml | 0 .../subnets/dev/dev-dataplatform-ew1.yaml | 0 .../data/subnets/dev/dev-default-ew1.yaml | 0 .../data/subnets/prod/prod-default-ew1.yaml | 0 .../diagram.png | Bin .../diagram.svg | 0 .../dns-dev.tf | 0 .../dns-prod.tf | 0 .../main.tf | 0 .../monitoring.tf | 0 .../outputs.tf | 4 +- .../spoke-dev.tf | 0 .../spoke-prod.tf | 0 .../test-resources.tf | 0 .../variables.tf | 24 +- .../vpn-onprem-dev.tf | 0 .../vpn-onprem-prod.tf | 0 .../stages/{02-security => 2-security}/IAM.md | 0 .../{02-security => 2-security}/README.md | 34 +- .../{02-security => 2-security}/core-dev.tf | 0 .../{02-security => 2-security}/core-prod.tf | 0 .../{02-security => 2-security}/diagram.png | Bin .../{02-security => 2-security}/diagram.svg | 0 .../{02-security => 2-security}/main.tf | 0 .../{02-security => 2-security}/outputs.tf | 4 +- .../{02-security => 2-security}/variables.tf | 24 +- .../vpc-sc-restricted-services.yaml | 0 .../{02-security => 2-security}/vpc-sc.tf | 0 .../README.md | 0 .../dev/IAM.md | 0 .../dev/README.md | 63 +- .../dev/demo | 0 .../dev/diagram.png | Bin .../dev/diagram_vpcsc.png | Bin .../dev/main.tf | 0 .../dev/outputs.tf | 4 +- .../dev/variables.tf | 22 +- .../README.md | 2 +- .../dev/README.md | 36 +- .../dev/diagram.png | Bin .../dev/main.tf | 0 .../dev/outputs.tf | 4 +- .../dev/variables.tf | 20 +- .../README.md | 0 .../dev/README.md | 16 +- .../dev/data/defaults.yaml | 0 .../dev/data/projects/project.yaml.sample | 0 .../dev/diagram.png | Bin .../dev/diagram.svg | 0 .../dev/main.tf | 0 .../dev/outputs.tf | 0 .../dev/variables.tf | 20 +- fast/stages/CLEANUP.md | 11 +- fast/stages/COMPANION.md | 82 +- fast/stages/README.md | 30 +- modules/organization/README.md | 14 +- modules/organization/outputs.tf | 14 +- modules/organization/tags.tf | 39 +- modules/organization/variables.tf | 8 +- .../stages/s03_data_platform/test_plan.py | 21 - .../stages/s03_gke_multitenant/test_plan.py | 21 - .../stages/s03_project_factory/common.tfvars | 11 - .../stages/s03_project_factory/test_plan.py | 21 - .../__init__.py | 0 .../simple.tfvars | 3 +- .../simple.yaml | 16 +- .../simple_projects.yaml | 0 .../simple_sas.yaml | 4 - .../tftest.yaml | 2 +- .../{s01_resman => s1_resman}/__init__.py | 0 .../{s01_resman => s1_resman}/common.tfvars | 3 +- .../{s01_resman => s1_resman}/test_plan.py | 2 +- .../__init__.py | 0 .../common.tfvars | 5 +- .../test_plan.py | 12 +- .../__init__.py | 0 .../common.tfvars | 5 +- .../fixture/main.tf | 0 .../test_plan.py | 2 +- .../__init__.py | 0 .../common.tfvars | 5 +- .../test_plan.py | 2 +- .../__init__.py | 0 .../common.tfvars | 5 +- .../test_plan.py | 2 +- .../{s02_security => s2_security}/__init__.py | 0 .../common.tfvars | 9 +- .../test_plan.py | 2 +- .../__init__.py | 0 .../common.tfvars | 7 +- .../fast/stages/s3_data_platform/test_plan.py | 21 + .../__init__.py | 0 .../common.tfvars | 3 +- .../stages/s3_gke_multitenant/test_plan.py | 21 + .../__init__.py | 0 .../stages/s3_project_factory/common.tfvars | 10 + .../data/defaults.yaml | 0 .../data/projects/project.yaml | 0 .../stages/s3_project_factory/test_plan.py | 21 + tests/fast/stages_multitenant/__init__.py | 13 + .../s0_bootstrap_tenant/__init__.py | 13 + .../s0_bootstrap_tenant/simple.tfvars | 60 + .../s0_bootstrap_tenant/simple.yaml | 33 + .../s0_bootstrap_tenant/tftest.yaml | 10 + .../s1_resman_tenant/__init__.py | 13 + .../s1_resman_tenant/simple.tfvars | 70 + .../s1_resman_tenant/simple.yaml | 28 + .../s1_resman_tenant/tftest.yaml | 10 + tests/fixtures.py | 13 +- tests/modules/organization/tags.tfvars | 59 + tests/modules/organization/tags.yaml | 76 + tests/modules/organization/tftest.yaml | 1 + tools/check_links.py | 2 +- tools/plan_summary.py | 11 +- 345 files changed, 12155 insertions(+), 2077 deletions(-) create mode 100644 diagram.svg create mode 100644 fast/extras/0-cicd-github/README.md rename fast/extras/{00-cicd-github => 0-cicd-github}/cicd-versions.tf (96%) rename fast/extras/{00-cicd-github => 0-cicd-github}/github_token.png (100%) rename fast/extras/{00-cicd-github => 0-cicd-github}/main.tf (72%) rename fast/extras/{00-cicd-github => 0-cicd-github}/outputs.tf (96%) rename fast/extras/{00-cicd-github => 0-cicd-github}/providers.tf (95%) rename fast/extras/{00-cicd-github => 0-cicd-github}/variables.tf (75%) delete mode 100644 fast/extras/00-cicd-github/README.md create mode 100755 fast/stage-links.sh create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/IAM.md create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/README.md create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/automation-sas.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/automation.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/billing.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/cicd.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/diagram.svg create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/identity-providers.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/log-export.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/main.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/organization.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/outputs-files.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/outputs-gcs.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/outputs.tf create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/templates/providers.tf.tpl create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-github.yaml create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-gitlab.yaml create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-sourcerepo.yaml create mode 100644 fast/stages-multitenant/0-bootstrap-tenant/variables.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/IAM.md create mode 100644 fast/stages-multitenant/1-resman-tenant/README.md create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-data-platform.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-gke.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-networking.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-project-factory.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-sandbox.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-security.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/branch-teams.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/cicd-data-platform.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/cicd-gke.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/cicd-networking.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/cicd-project-factory.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/cicd-security.tf rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/data/org-policies/compute.yaml (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/data/org-policies/iam.yaml (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/data/org-policies/serverless.yaml (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/data/org-policies/sql.yaml (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/data/org-policies/storage.yaml (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/diagram.png (100%) rename fast/{stages/01-resman => stages-multitenant/1-resman-tenant}/diagram.svg (100%) create mode 100644 fast/stages-multitenant/1-resman-tenant/main.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/outputs-files.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/outputs-gcs.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/outputs.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/root_node.tf create mode 100644 fast/stages-multitenant/1-resman-tenant/templates/providers.tf.tpl create mode 100644 fast/stages-multitenant/1-resman-tenant/templates/workflow-github.yaml create mode 100644 fast/stages-multitenant/1-resman-tenant/templates/workflow-gitlab.yaml create mode 100644 fast/stages-multitenant/1-resman-tenant/templates/workflow-sourcerepo.yaml create mode 100644 fast/stages-multitenant/1-resman-tenant/variables.tf create mode 100644 fast/stages-multitenant/MULTITENANT-TODO.md create mode 100644 fast/stages-multitenant/README.md create mode 100644 fast/stages-multitenant/diagram.png create mode 100644 fast/stages-multitenant/stages.png create mode 100644 fast/stages-multitenant/stages.svg rename fast/stages/{00-bootstrap => 0-bootstrap}/IAM.md (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/README.md (88%) rename fast/stages/{00-bootstrap => 0-bootstrap}/automation.tf (82%) rename fast/stages/{00-bootstrap => 0-bootstrap}/billing.tf (60%) rename fast/stages/{00-bootstrap => 0-bootstrap}/cicd.tf (86%) rename fast/stages/{00-bootstrap => 0-bootstrap}/diagram.png (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/diagram.svg (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/groups.gif (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/identity-providers.tf (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/log-export.tf (82%) rename fast/stages/{00-bootstrap => 0-bootstrap}/main.tf (78%) rename fast/stages/{00-bootstrap => 0-bootstrap}/organization.tf (89%) rename fast/stages/{00-bootstrap => 0-bootstrap}/outputs-files.tf (97%) rename fast/stages/{00-bootstrap => 0-bootstrap}/outputs-gcs.tf (96%) rename fast/stages/{00-bootstrap => 0-bootstrap}/outputs.tf (77%) create mode 100644 fast/stages/0-bootstrap/templates/providers.tf.tpl create mode 100644 fast/stages/0-bootstrap/templates/workflow-github.yaml create mode 100644 fast/stages/0-bootstrap/templates/workflow-gitlab.yaml create mode 100644 fast/stages/0-bootstrap/templates/workflow-sourcerepo.yaml rename fast/stages/{00-bootstrap => 0-bootstrap}/terraform.tfvars.sample (100%) rename fast/stages/{00-bootstrap => 0-bootstrap}/variables.tf (90%) delete mode 120000 fast/stages/00-bootstrap/templates delete mode 120000 fast/stages/01-resman/templates rename fast/stages/{01-resman => 1-resman}/IAM.md (100%) rename fast/stages/{01-resman => 1-resman}/README.md (68%) rename fast/stages/{01-resman => 1-resman}/billing.tf (77%) rename fast/stages/{01-resman => 1-resman}/branch-data-platform.tf (86%) rename fast/stages/{01-resman => 1-resman}/branch-gke.tf (94%) rename fast/stages/{01-resman => 1-resman}/branch-networking.tf (98%) rename fast/stages/{01-resman => 1-resman}/branch-project-factory.tf (78%) rename fast/stages/{01-resman => 1-resman}/branch-sandbox.tf (100%) rename fast/stages/{01-resman => 1-resman}/branch-security.tf (96%) rename fast/stages/{01-resman => 1-resman}/branch-teams.tf (100%) rename fast/stages/{01-resman => 1-resman}/cicd-data-platform.tf (99%) rename fast/stages/{01-resman => 1-resman}/cicd-gke.tf (99%) rename fast/stages/{01-resman => 1-resman}/cicd-networking.tf (99%) rename fast/stages/{01-resman => 1-resman}/cicd-project-factory.tf (99%) rename fast/stages/{01-resman => 1-resman}/cicd-security.tf (99%) create mode 100644 fast/stages/1-resman/data/org-policies/compute.yaml create mode 100644 fast/stages/1-resman/data/org-policies/iam.yaml create mode 100644 fast/stages/1-resman/data/org-policies/serverless.yaml create mode 100644 fast/stages/1-resman/data/org-policies/sql.yaml create mode 100644 fast/stages/1-resman/data/org-policies/storage.yaml create mode 100644 fast/stages/1-resman/diagram.png create mode 100644 fast/stages/1-resman/diagram.svg rename fast/stages/{01-resman => 1-resman}/main.tf (78%) rename fast/stages/{01-resman => 1-resman}/organization.tf (66%) rename fast/stages/{01-resman => 1-resman}/outputs-files.tf (94%) rename fast/stages/{01-resman => 1-resman}/outputs-gcs.tf (96%) rename fast/stages/{01-resman => 1-resman}/outputs.tf (72%) create mode 100644 fast/stages/1-resman/templates/providers.tf.tpl create mode 100644 fast/stages/1-resman/templates/workflow-github.yaml create mode 100644 fast/stages/1-resman/templates/workflow-gitlab.yaml create mode 100644 fast/stages/1-resman/templates/workflow-sourcerepo.yaml rename fast/stages/{01-resman => 1-resman}/variables.tf (79%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/.gitignore (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/IAM.md (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/README.md (93%) rename fast/stages/{02-networking-nva => 2-networking-a-peering}/data/cidrs.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/dashboards/firewall_insights.json (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/dashboards/vpn.json (100%) rename fast/stages/{02-networking-nva => 2-networking-a-peering}/data/firewall-rules/dev/rules.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/firewall-rules/landing/rules.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-a-peering}/data/hierarchical-policy-rules.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/subnets/dev/dev-dataplatform-ew1.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/subnets/dev/dev-default-ew1.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/subnets/dev/dev-gke-nodes-ew1.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/subnets/landing/landing-default-ew1.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/data/subnets/prod/prod-default-ew1.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/diagram.png (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/diagram.svg (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/dns-dev.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/dns-landing.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/dns-prod.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/landing.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/main.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-a-peering}/monitoring.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-a-peering}/outputs.tf (96%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/peerings.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/spoke-dev.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/spoke-prod.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/test-resources.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/variables-peerings.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-a-peering}/variables.tf (91%) rename fast/stages/{02-networking-peering => 2-networking-a-peering}/vpn-onprem.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/.gitignore (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/IAM.md (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/README.md (94%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/data/cidrs.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/data/dashboards/firewall_insights.json (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/data/dashboards/vpn.json (100%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/data/firewall-rules/dev/rules.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/data/firewall-rules/landing/rules.yaml (100%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/data/hierarchical-policy-rules.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/data/subnets/dev/dev-dataplatform-ew1.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/data/subnets/dev/dev-default-ew1.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/data/subnets/dev/dev-gke-nodes-ew1.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/data/subnets/landing/landing-default-ew1.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-b-vpn}/data/subnets/prod/prod-default-ew1.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/diagram.png (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/diagram.svg (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/dns-dev.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/dns-landing.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/dns-prod.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/landing.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/main.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/monitoring.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/outputs.tf (96%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/spoke-dev.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/spoke-prod.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/test-resources.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/variables-vpn.tf (100%) rename fast/stages/{02-networking-peering => 2-networking-b-vpn}/variables.tf (91%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/vpn-onprem.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/vpn-spoke-dev.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/vpn-spoke-prod-ew1.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-b-vpn}/vpn-spoke-prod-ew4.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/README.md (94%) rename fast/stages/{02-networking-separate-envs => 2-networking-c-nva}/data/cidrs.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/dashboards/firewall_insights.json (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/dashboards/vpn.json (100%) rename fast/stages/{02-networking-vpn => 2-networking-c-nva}/data/firewall-rules/dev/rules.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/firewall-rules/landing-trusted/rules.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/firewall-rules/landing-untrusted/rules.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-c-nva}/data/hierarchical-policy-rules.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/nva-startup-script.tftpl (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/dev/dev-dataplatform-ew1.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/dev/dev-default-ew1.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/dev/dev-default-ew4.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/landing-trusted/landing-trusted-default-ew1.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/landing-trusted/landing-trusted-default-ew4.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/landing-untrusted/landing-untrusted-default-ew1.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/landing-untrusted/landing-untrusted-default-ew4.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/prod/prod-default-ew1.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/data/subnets/prod/prod-default-ew4.yaml (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/diagram.png (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/diagram.svg (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/dns-dev.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/dns-landing.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/dns-prod.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/landing.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/main.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-c-nva}/monitoring.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/nva.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/outputs.tf (96%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/spoke-dev.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/spoke-prod.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/test-resources.tf (100%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/variables.tf (93%) rename fast/stages/{02-networking-nva => 2-networking-c-nva}/vpn-onprem.tf (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/.gitignore (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/IAM.md (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/README.md (92%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/cidrs.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/dashboards/firewall_insights.json (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/dashboards/vpn.json (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/data/firewall-rules/dev/rules.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/hierarchical-policy-rules.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/subnets/dev/dev-dataplatform-ew1.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/subnets/dev/dev-default-ew1.yaml (100%) rename fast/stages/{02-networking-vpn => 2-networking-d-separate-envs}/data/subnets/prod/prod-default-ew1.yaml (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/diagram.png (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/diagram.svg (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/dns-dev.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/dns-prod.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/main.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/monitoring.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/outputs.tf (97%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/spoke-dev.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/spoke-prod.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/test-resources.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/variables.tf (92%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/vpn-onprem-dev.tf (100%) rename fast/stages/{02-networking-separate-envs => 2-networking-d-separate-envs}/vpn-onprem-prod.tf (100%) rename fast/stages/{02-security => 2-security}/IAM.md (100%) rename fast/stages/{02-security => 2-security}/README.md (92%) rename fast/stages/{02-security => 2-security}/core-dev.tf (100%) rename fast/stages/{02-security => 2-security}/core-prod.tf (100%) rename fast/stages/{02-security => 2-security}/diagram.png (100%) rename fast/stages/{02-security => 2-security}/diagram.svg (100%) rename fast/stages/{02-security => 2-security}/main.tf (100%) rename fast/stages/{02-security => 2-security}/outputs.tf (96%) rename fast/stages/{02-security => 2-security}/variables.tf (91%) rename fast/stages/{02-security => 2-security}/vpc-sc-restricted-services.yaml (100%) rename fast/stages/{02-security => 2-security}/vpc-sc.tf (100%) rename fast/stages/{03-data-platform => 3-data-platform}/README.md (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/IAM.md (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/README.md (82%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/demo (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/diagram.png (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/diagram_vpcsc.png (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/main.tf (100%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/outputs.tf (95%) rename fast/stages/{03-data-platform => 3-data-platform}/dev/variables.tf (90%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/README.md (71%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/dev/README.md (90%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/dev/diagram.png (100%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/dev/main.tf (100%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/dev/outputs.tf (96%) rename fast/stages/{03-gke-multitenant => 3-gke-multitenant}/dev/variables.tf (92%) rename fast/stages/{03-project-factory => 3-project-factory}/README.md (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/README.md (85%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/data/defaults.yaml (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/data/projects/project.yaml.sample (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/diagram.png (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/diagram.svg (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/main.tf (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/outputs.tf (100%) rename fast/stages/{03-project-factory => 3-project-factory}/dev/variables.tf (76%) delete mode 100644 tests/fast/stages/s03_data_platform/test_plan.py delete mode 100644 tests/fast/stages/s03_gke_multitenant/test_plan.py delete mode 100644 tests/fast/stages/s03_project_factory/common.tfvars delete mode 100644 tests/fast/stages/s03_project_factory/test_plan.py rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/__init__.py (100%) rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/simple.tfvars (71%) rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/simple.yaml (81%) rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/simple_projects.yaml (100%) rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/simple_sas.yaml (82%) rename tests/fast/stages/{s00_bootstrap => s0_bootstrap}/tftest.yaml (83%) rename tests/fast/stages/{s01_resman => s1_resman}/__init__.py (100%) rename tests/fast/stages/{s01_resman => s1_resman}/common.tfvars (91%) rename tests/fast/stages/{s01_resman => s1_resman}/test_plan.py (93%) rename tests/fast/stages/{s02_networking_nva => s2_networking_a_peering}/__init__.py (100%) rename tests/fast/stages/{s02_networking_peering => s2_networking_a_peering}/common.tfvars (83%) rename tests/fast/stages/{s02_networking_peering => s2_networking_a_peering}/test_plan.py (87%) rename tests/fast/stages/{s02_networking_peering => s2_networking_b_vpn}/__init__.py (100%) rename tests/fast/stages/{s02_networking_vpn => s2_networking_b_vpn}/common.tfvars (83%) rename tests/fast/stages/{s02_networking_vpn => s2_networking_b_vpn}/fixture/main.tf (100%) rename tests/fast/stages/{s02_networking_nva => s2_networking_b_vpn}/test_plan.py (92%) rename tests/fast/stages/{s02_networking_separate_envs => s2_networking_c_nva}/__init__.py (100%) rename tests/fast/stages/{s02_networking_nva => s2_networking_c_nva}/common.tfvars (81%) rename tests/fast/stages/{s02_networking_vpn => s2_networking_c_nva}/test_plan.py (92%) rename tests/fast/stages/{s02_networking_vpn => s2_networking_d_separate_envs}/__init__.py (100%) rename tests/fast/stages/{s02_networking_separate_envs => s2_networking_d_separate_envs}/common.tfvars (78%) rename tests/fast/stages/{s02_networking_separate_envs => s2_networking_d_separate_envs}/test_plan.py (91%) rename tests/fast/stages/{s02_security => s2_security}/__init__.py (100%) rename tests/fast/stages/{s02_security => s2_security}/common.tfvars (91%) rename tests/fast/stages/{s02_security => s2_security}/test_plan.py (93%) rename tests/fast/stages/{s03_data_platform => s3_data_platform}/__init__.py (100%) rename tests/fast/stages/{s03_data_platform => s3_data_platform}/common.tfvars (85%) create mode 100644 tests/fast/stages/s3_data_platform/test_plan.py rename tests/fast/stages/{s03_gke_multitenant => s3_gke_multitenant}/__init__.py (100%) rename tests/fast/stages/{s03_gke_multitenant => s3_gke_multitenant}/common.tfvars (92%) create mode 100644 tests/fast/stages/s3_gke_multitenant/test_plan.py rename tests/fast/stages/{s03_project_factory => s3_project_factory}/__init__.py (100%) create mode 100644 tests/fast/stages/s3_project_factory/common.tfvars rename tests/fast/stages/{s03_project_factory => s3_project_factory}/data/defaults.yaml (100%) rename tests/fast/stages/{s03_project_factory => s3_project_factory}/data/projects/project.yaml (100%) create mode 100644 tests/fast/stages/s3_project_factory/test_plan.py create mode 100644 tests/fast/stages_multitenant/__init__.py create mode 100644 tests/fast/stages_multitenant/s0_bootstrap_tenant/__init__.py create mode 100644 tests/fast/stages_multitenant/s0_bootstrap_tenant/simple.tfvars create mode 100644 tests/fast/stages_multitenant/s0_bootstrap_tenant/simple.yaml create mode 100644 tests/fast/stages_multitenant/s0_bootstrap_tenant/tftest.yaml create mode 100644 tests/fast/stages_multitenant/s1_resman_tenant/__init__.py create mode 100644 tests/fast/stages_multitenant/s1_resman_tenant/simple.tfvars create mode 100644 tests/fast/stages_multitenant/s1_resman_tenant/simple.yaml create mode 100644 tests/fast/stages_multitenant/s1_resman_tenant/tftest.yaml create mode 100644 tests/modules/organization/tags.tfvars create mode 100644 tests/modules/organization/tags.yaml diff --git a/.gitignore b/.gitignore index 79fa83df..91778178 100644 --- a/.gitignore +++ b/.gitignore @@ -21,13 +21,13 @@ bundle.zip **/*.pkrvars.hcl fixture_* fast/configs -fast/stages/**/[0-9]*providers.tf -fast/stages/**/terraform.tfvars -fast/stages/**/terraform.tfvars.json -fast/stages/**/terraform-*.auto.tfvars.json -fast/stages/**/0*.auto.tfvars* +fast/**/[0-9]*providers.tf +fast/**/terraform.tfvars +fast/**/terraform.tfvars.json +fast/**/terraform-*.auto.tfvars.json +fast/**/[0-9]*.auto.tfvars* **/node_modules -fast/stages/**/globals.auto.tfvars.json +fast/**/globals.auto.tfvars.json cloud_sql_proxy examples/cloud-operations/binauthz/tenant-setup.yaml examples/cloud-operations/binauthz/app/app.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index cedd3a40..c3657494 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -480,7 +480,7 @@ All notable changes to this project will be documented in this file. - fix `tag` output on `data-catalog-policy-tag` module - add shared-vpc support on `gcs-to-bq-with-least-privileges` - new `net-ilb-l7` module -- new [02-networking-peering](fast/stages/02-networking-peering) networking stage +- new `02-networking-peering` networking stage - **incompatible change** the variable for PSA ranges in networking stages have changed ## [14.0.0] - 2022-02-25 @@ -499,8 +499,8 @@ All notable changes to this project will be documented in this file. - **incompatible change** removed `ingress_settings` configuration option in the `cloud-functions` module. - new [m4ce VM example](blueprints/cloud-operations/vm-migration/) - Support for resource management tags in the `organization`, `folder`, `project`, `compute-vm`, and `kms` modules -- new [data platform](fast/stages/03-data-platform) stage 3 -- new [02-networking-nva](fast/stages/02-networking-nva) networking stage +- new `data platform` stage 3 +- new `02-networking-nva` networking stage - allow customizing the names of custom roles - added `environment` and `context` resource management tags - use resource management tags to restrict scope of roles/orgpolicy.policyAdmin diff --git a/blueprints/data-solutions/data-platform-foundations/README.md b/blueprints/data-solutions/data-platform-foundations/README.md index b038cfe4..a05bbae7 100644 --- a/blueprints/data-solutions/data-platform-foundations/README.md +++ b/blueprints/data-solutions/data-platform-foundations/README.md @@ -21,7 +21,7 @@ The approach adapts to different high-level requirements: - least privilege principle - rely on service account impersonation -The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast) and this blueprint deployed on top of them as one of the [stages](../../../fast/stages/03-data-platform/dev/README.md). +The code in this blueprint doesn't address Organization-level configurations (Organization policy, VPC-SC, centralized logs). We expect those elements to be managed by automation stages external to this script like those in [FAST](../../../fast) and this blueprint deployed on top of them as one of the [stages](../../../fast/stages/3-data-platform/dev/README.md). ### Project structure diff --git a/blueprints/gke/multitenant-fleet/README.md b/blueprints/gke/multitenant-fleet/README.md index 1e09afaa..cadcf410 100644 --- a/blueprints/gke/multitenant-fleet/README.md +++ b/blueprints/gke/multitenant-fleet/README.md @@ -4,7 +4,7 @@ This blueprint presents an opinionated architecture to handle multiple homogeneo The pattern used in this design is useful, for blueprint, in cases where multiple clusters host/support the same workloads, such as in the case of a multi-regional deployment. Furthermore, combined with Anthos Config Sync and proper RBAC, this architecture can be used to host multiple tenants (e.g. teams, applications) sharing the clusters. -This blueprint is used as part of the [FAST GKE stage](../../../fast/stages/03-gke-multitenant/) but it can also be used independently if desired. +This blueprint is used as part of the [FAST GKE stage](../../../fast/stages/3-gke-multitenant/) but it can also be used independently if desired.

GKE multitenant diff --git a/blueprints/networking/hub-and-spoke-vpn/README.md b/blueprints/networking/hub-and-spoke-vpn/README.md index 5f596142..bdf877c7 100644 --- a/blueprints/networking/hub-and-spoke-vpn/README.md +++ b/blueprints/networking/hub-and-spoke-vpn/README.md @@ -7,7 +7,7 @@ A few additional features are also shown: - [custom BGP advertisements](https://cloud.google.com/router/docs/how-to/advertising-overview) to implement transitivity between spokes - [VPC Global Routing](https://cloud.google.com/network-connectivity/docs/router/how-to/configuring-routing-mode) to leverage a regional set of VPN gateways in different regions as next hops (used here for illustrative/study purpose, not usually done in real life) -The blueprint has been purposefully kept simple to show how to use and wire the VPC and VPN-HA modules together, and so that it can be used as a basis for experimentation. For a more complex scenario that better reflects real-life usage, including [Shared VPC](https://cloud.google.com/vpc/docs/shared-vpc) and [DNS cross-project binding](https://cloud.google.com/dns/docs/zones/cross-project-binding) please refer to the [FAST network stage](../../../fast/stages/02-networking-vpn/). +The blueprint has been purposefully kept simple to show how to use and wire the VPC and VPN-HA modules together, and so that it can be used as a basis for experimentation. For a more complex scenario that better reflects real-life usage, including [Shared VPC](https://cloud.google.com/vpc/docs/shared-vpc) and [DNS cross-project binding](https://cloud.google.com/dns/docs/zones/cross-project-binding) please refer to the [FAST network stage](../../../fast/stages/2-networking-b-vpn/). This is the high level diagram of this blueprint: diff --git a/diagram.svg b/diagram.svg new file mode 100644 index 00000000..689adf24 --- /dev/null +++ b/diagram.svg @@ -0,0 +1,293 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+ +
+
+
+
+ + + +
+ +
+
+
+
+ + + +
+ +
+
+
+
+
+ + + + + + + +
+ +
+
+ +
+ Organization +
+
+ +
+ tag value [tenant] +
+
+ +
+ IAM bindings() +
+
+ +
+ organization policies() +
+
+
+
+ + + + + + +
+ «folder» +
+
+ +
+ Tenant0 +
+
+ +
+ IAM bindings() +
+
+ +
+ organization policies() +
+
+ +
+ tag bindings() +
+
+
+
+ + + + + + +
+ «folder» +
+
+ +
+ Tenant1 +
+
+ +
+ IAM bindings() +
+
+ +
+ organization policies() +
+
+ +
+ tag bindings() +
+
+
+
+ + + + + + +
+ «project» +
+
+ +
+ Tenant0_IaC +
+
+ +
+ service accounts [all stages] +
+
+ +
+ storage buckets [stage 0+1] +
+
+ +
+ optional CI/CD [stage 0+1] +
+
+ +
+ IAM bindings() +
+
+
+
+ + + + + + +
+ «project» +
+
+ +
+ Tenant1_IaC +
+
+ +
+ service accounts [all stages] +
+
+ +
+ storage buckets [stage 0+1] +
+
+ +
+ optional CI/CD [stage 0+1] +
+
+ +
+ IAM bindings() +
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/fast/README.md b/fast/README.md index e35a4837..7459c870 100644 --- a/fast/README.md +++ b/fast/README.md @@ -12,7 +12,7 @@ Fabric FAST was initially conceived to help enterprises quickly set up a GCP org ### Contracts and stages -FAST uses the concept of stages, which individually perform precise tasks but, taken together, build a functional, ready-to-use GCP organization. More importantly, stages are modeled around the security boundaries that typically appear in mature organizations. This arrangement allows delegating ownership of each stage to the team responsible for the types of resources it manages. For example, as its name suggests, the networking stage sets up all the networking elements and is usually the responsibility of a dedicated networking team within the organization. +FAST uses the concept of stages, which individually perform precise tasks but taken together build a functional, ready-to-use GCP organization. More importantly, stages are modeled around the security boundaries that typically appear in mature organizations. This arrangement allows delegating ownership of each stage to the team responsible for the types of resources it manages. For example, as its name suggests, the networking stage sets up all the networking elements and is usually the responsibility of a dedicated networking team within the organization. From the perspective of FAST's overall design, stages also work as contacts or interfaces, defining a set of pre-requisites and inputs required to perform their designed task and generating outputs needed by other stages lower in the chain. The diagram below shows the relationships between stages. @@ -20,7 +20,7 @@ From the perspective of FAST's overall design, stages also work as contacts or i Stages diagram

-Please refer to the [stages](./stages/) section for further details on each stage. +Please refer to the [stages](./stages/) section for further details on each stage. For details on tenant-level stages which introduce a deeper level of autonomy via nested FAST setups rooted in a top-level folder, refer to the [multitenant stages](#multitenant-organizations) section below. ### Security-first design @@ -32,11 +32,21 @@ FAST also aims to minimize the number of permissions granted to principals accor A resource factory consumes a simple representation of a resource (e.g., in YAML) and deploys it (e.g., using Terraform). Used correctly, factories can help decrease the management overhead of large-scale infrastructure deployments. See "[Resource Factories: A descriptive approach to Terraform](https://medium.com/google-cloud/resource-factories-a-descriptive-approach-to-terraform-581b3ebb59c)" for more details and the rationale behind factories. -FAST uses YAML-based factories to deploy subnets and firewall rules and, as its name suggests, in the [project factory](./stages/03-project-factory/) stage. +FAST uses YAML-based factories to deploy subnets and firewall rules and, as its name suggests, in the [project factory](./stages/3-project-factory/) stage. ### CI/CD -One of our objectives with FAST is to provide a lightweight reference design for the IaC repositories, and a built-in implementation for running our code in automated pipelines. Our CI/CD approach leverages [Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation), and provides sample workflow configurations for several major providers. Refer to the [CI/CD section in the bootstrap stage](stages/00-bootstrap/README.md#cicd) for more details. We also provide separate [optional small stages](./extras/) to help you configure your CI/CD provider. +One of our objectives with FAST is to provide a lightweight reference design for the IaC repositories, and a built-in implementation for running our code in automated pipelines. Our CI/CD approach leverages [Workload Identity Federation](https://cloud.google.com/iam/docs/workload-identity-federation), and provides sample workflow configurations for several major providers. Refer to the [CI/CD section in the bootstrap stage](./stages/0-bootstrap/README.md#cicd) for more details. We also provide separate [optional small stages](./extras/) to help you configure your CI/CD provider. + +### Multitenant organizations + +FAST has built-in support for complex multitenant organizations, where each tenant has complete control over a separate hierarchy rooted in a top-level folder. This approach is particularly suited for large enterprises or governments, where country-level subsidiaries or government agencies have a wide degree of autonomy within a shared GCP organization managed by a central entity. + +FAST implements multitenancy via [dedicated stages](stages-multitenant) for tenant-level bootstrap and resource management, which configure separate hierarchies within the organization rooted in top-level folders, so that subsequent FAST stages (networking, security, data, etc.) can be used directly for each tenant. The diagram below shows the relationships between organization-level and tenant-level stages. + +

+ Stages diagram +

## Implementation @@ -57,9 +67,9 @@ Those familiar with Python will note that FAST follows many of the maxims in the ## Roadmap -Besides the features already described, FAST roadmap includes: +Besides the features already described, FAST also includes: - Stage to deploy environment-specific multitenant GKE clusters following Google's best practices - Stage to deploy a fully featured data platform -- Reference implementation to use FAST in CI/CD pipelines (in progress) -- Static policy enforcement +- Reference implementation to use FAST in CI/CD pipelines +- Static policy enforcement (planned) diff --git a/fast/extras/0-cicd-github/README.md b/fast/extras/0-cicd-github/README.md new file mode 100644 index 00000000..58407b5e --- /dev/null +++ b/fast/extras/0-cicd-github/README.md @@ -0,0 +1,139 @@ +# FAST GitHub repository management + +This small extra stage allows creating and populating GitHub repositories used to host FAST stage code, including rewriting of module sources and secrets used for private modules repository access. + +It is designed for use in a GitHub organization, and is only meant as a one-shot solution with perishable state especially when used for initial population, as you don't want Terraform to keep overwriting your changes with initial versions of files. + +Initial population is only meant to be used with actual stage, while populating the modules repository should be done by hand to avoid hitting the GitHub hourly limit for their API. + +Once initial population is done, you need to manually push to the repository + +- the `.tfvars` file with custom variable values for your stages +- the workflow configuration file generated by FAST stages + +## GitHub provider credentials + +A [GitHub token](https://github.com/settings/tokens) is needed to authenticate against their API. The token needs organization-level permissions, like shown in this screenshot: + +

+ GitHub token scopes. +

+ +Once a token is available set it in the `GITHUB_TOKEN` environment variable before running Terraform. + +## Variable configuration + +The `organization` required variable sets the GitHub organization where repositories will be created, and is used to configure the Terraform provider. + +### Modules repository and sources + +The `modules_config` variable controls creation and management of the key and secret used to access the private modules repository, and indirectly control population of initial files: if the `modules_config` variable is not specified no module repository is know to the code, so module source paths cannot be replaced, and initial population of files cannot happen. If the variable is specified, an optional `source_ref` attribute can be set to the reference used to pin modules versions. + +This is an example that configures the modules repository name and an optional reference, enabling initial population of repositories where the feature has been turned on: + +```hcl +modules_config = { + repository_name = "GoogleCloudPlatform/cloud-foundation-fabric" + source_ref = "v19.0.0" +} +# tftest skip +``` + +In the above example, no key options are set so it's assumed modules will be fetched from a public repository. If modules repository authentication is needed the `key_config` attribute also needs to be set. + +If no keypair path is specified an internally generated key will be stored as an access key in the modules repository, and as secrets in the stage repositories: + +```hcl +modules_config = { + repository_name = "GoogleCloudPlatform/cloud-foundation-fabric" + key_config = { + create_key = true + create_secrets = true + } +} +# tftest skip +``` + +To use an existing keypair pass the path to the private key, the public key name is assumed to have the same name ending with the `.pub` suffix. This is useful in cases where the access key has already been set in the modules repository, and new repositories need to be created and their corresponding secret set: + +```hcl +modules_config = { + repository_name = "GoogleCloudPlatform/cloud-foundation-fabric" + key_config = { + create_secrets = true + keypair_path = "~/modules-repository-key" + } +} +# tftest skip +``` + +### Repositories + +The `repositories` variable is where you configure which repositories to create and whether initial population of files is desired. + +This is an example that creates repositories for stages 00 and 01, and populates initial files for stages 00, 01, and 02: + +```tfvars +repositories = { + fast_00_bootstrap = { + create_options = { + description = "FAST bootstrap." + features = { + issues = true + } + } + populate_from = "../../stages/0-bootstrap" + } + fast_01_resman = { + create_options = { + description = "FAST resource management." + features = { + issues = true + } + } + populate_from = "../../stages/1-resman" + } + fast_02_networking = { + populate_from = "../../stages/2-networking-peering" + } +} +# tftest skip +``` + +The `create_options` repository attribute controls creation: if the attribute is not present, the repository is assumed to be already existing. + +Initial population depends on a modules repository being configured in the `modules_config` variable described in the preceding section and on the`populate_from` attributes in each repository where population is required, which point to the folder holding the files to be committed. + +### Commit configuration + +Finally, a `commit_config` variable is optional: it can be used to configure author, email and message used in commits for initial population of files, its defaults are probably fine for most use cases. + + + + +## Files + +| name | description | resources | +|---|---|---| +| [cicd-versions.tf](./cicd-versions.tf) | Provider version. | | +| [main.tf](./main.tf) | Module-level locals and resources. | github_actions_secret · github_repository · github_repository_deploy_key · github_repository_file · tls_private_key | +| [outputs.tf](./outputs.tf) | Module outputs. | | +| [providers.tf](./providers.tf) | Provider configuration. | | +| [variables.tf](./variables.tf) | Module variables. | | + +## Variables + +| name | description | type | required | default | +|---|---|:---:|:---:|:---:| +| [organization](variables.tf#L50) | GitHub organization. | string | ✓ | | +| [commmit_config](variables.tf#L17) | Configure commit metadata. | object({…}) | | {} | +| [modules_config](variables.tf#L28) | Configure access to repository module via key, and replacement for modules sources in stage repositories. | object({…}) | | null | +| [repositories](variables.tf#L55) | Repositories to create. | map(object({…})) | | {} | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| [clone](outputs.tf#L17) | Clone repository commands. | | + + diff --git a/fast/extras/00-cicd-github/cicd-versions.tf b/fast/extras/0-cicd-github/cicd-versions.tf similarity index 96% rename from fast/extras/00-cicd-github/cicd-versions.tf rename to fast/extras/0-cicd-github/cicd-versions.tf index 09f544cb..830f1e48 100644 --- a/fast/extras/00-cicd-github/cicd-versions.tf +++ b/fast/extras/0-cicd-github/cicd-versions.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/fast/extras/00-cicd-github/github_token.png b/fast/extras/0-cicd-github/github_token.png similarity index 100% rename from fast/extras/00-cicd-github/github_token.png rename to fast/extras/0-cicd-github/github_token.png diff --git a/fast/extras/00-cicd-github/main.tf b/fast/extras/0-cicd-github/main.tf similarity index 72% rename from fast/extras/00-cicd-github/main.tf rename to fast/extras/0-cicd-github/main.tf index ac6028c1..d91ab970 100644 --- a/fast/extras/00-cicd-github/main.tf +++ b/fast/extras/0-cicd-github/main.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,9 +15,6 @@ */ locals { - _modules_repository = [ - for k, v in var.repositories : local.repositories[k] if v.has_modules - ] _repository_files = flatten([ for k, v in var.repositories : [ for f in concat( @@ -30,12 +27,12 @@ locals { } ] if v.populate_from != null ]) - modules_ref = var.modules_ref == null ? "" : "?ref=${var.modules_ref}" - modules_repository = ( - length(local._modules_repository) > 0 - ? local._modules_repository.0 - : null + modules_ref = ( + try(var.modules_config.source_ref, null) == null + ? "" + : "?ref=${var.modules_config.source_ref}" ) + modules_repo = try(var.modules_config.repository_name, null) repositories = { for k, v in var.repositories : k => v.create_options == null ? k : github_repository.default[k].name @@ -56,6 +53,15 @@ locals { name = "templates/providers.tf.tpl" } if v.populate_from != null + }, + { + for k, v in var.repositories : + "${k}/templates/workflow-github.yaml" => { + repository = k + file = "../../assets/templates/workflow-github.yaml" + name = "templates/workflow-github.yaml" + } + if v.populate_from != null } ) } @@ -96,41 +102,49 @@ resource "github_repository" "default" { } resource "tls_private_key" "default" { - count = local.modules_repository != null ? 1 : 0 algorithm = "ED25519" } resource "github_repository_deploy_key" "default" { - count = local.modules_repository == null ? 0 : 1 + count = ( + try(var.modules_config.key_config.create_key, null) == true ? 1 : 0 + ) title = "Modules repository access" - repository = local.modules_repository - key = tls_private_key.default.0.public_key_openssh - read_only = true + repository = local.modules_repo + key = ( + try(var.modules_config.key_config.keypair_path, null) == null + ? tls_private_key.default.public_key_openssh + : file(pathexpand("${var.modules_config.key_config.keypair_path}.pub")) + ) + read_only = true } resource "github_actions_secret" "default" { - for_each = local.modules_repository == null ? {} : { - for k, v in local.repositories : - k => v if k != local.modules_repository - } - repository = each.key - secret_name = "CICD_MODULES_KEY" - plaintext_value = tls_private_key.default.0.private_key_openssh + for_each = ( + try(var.modules_config.key_config.create_secrets, null) == true + ? local.repositories + : {} + ) + repository = each.key + secret_name = "CICD_MODULES_KEY" + plaintext_value = ( + try(var.modules_config.key_config.keypair_path, null) == null + ? tls_private_key.default.private_key_openssh + : file(pathexpand("${var.modules_config.key_config.keypair_path}")) + ) } resource "github_repository_file" "default" { - for_each = ( - local.modules_repository == null ? {} : local.repository_files - ) + for_each = local.modules_repo == null ? {} : local.repository_files repository = local.repositories[each.value.repository] branch = "main" file = each.value.name content = ( - endswith(each.value.name, ".tf") && local.modules_repository != null + endswith(each.value.name, ".tf") && local.modules_repo != null ? replace( file(each.value.file), "/source\\s*=\\s*\"../../../modules/([^/\"]+)\"/", - "source = \"git@github.com:${var.organization}/${local.modules_repository}.git//$1${local.modules_ref}\"" # " + "source = \"git@github.com:${local.modules_repo}.git//$1${local.modules_ref}\"" # " ) : file(each.value.file) ) diff --git a/fast/extras/00-cicd-github/outputs.tf b/fast/extras/0-cicd-github/outputs.tf similarity index 96% rename from fast/extras/00-cicd-github/outputs.tf rename to fast/extras/0-cicd-github/outputs.tf index cb580e1f..61b5ffbc 100644 --- a/fast/extras/00-cicd-github/outputs.tf +++ b/fast/extras/0-cicd-github/outputs.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/fast/extras/00-cicd-github/providers.tf b/fast/extras/0-cicd-github/providers.tf similarity index 95% rename from fast/extras/00-cicd-github/providers.tf rename to fast/extras/0-cicd-github/providers.tf index 29be30ae..a7ccb32d 100644 --- a/fast/extras/00-cicd-github/providers.tf +++ b/fast/extras/0-cicd-github/providers.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/fast/extras/00-cicd-github/variables.tf b/fast/extras/0-cicd-github/variables.tf similarity index 75% rename from fast/extras/00-cicd-github/variables.tf rename to fast/extras/0-cicd-github/variables.tf index 0d9cb7fd..8e5d0832 100644 --- a/fast/extras/00-cicd-github/variables.tf +++ b/fast/extras/0-cicd-github/variables.tf @@ -1,5 +1,5 @@ /** - * Copyright 2022 Google LLC + * Copyright 2023 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,10 +25,26 @@ variable "commmit_config" { nullable = false } -variable "modules_ref" { - description = "Optional git ref used in module sources." - type = string - default = null +variable "modules_config" { + description = "Configure access to repository module via key, and replacement for modules sources in stage repositories." + type = object({ + repository_name = string + source_ref = optional(string) + key_config = optional(object({ + create_key = optional(bool, false) + create_secrets = optional(bool, false) + keypair_path = optional(string) + }), {}) + }) + default = null + validation { + condition = ( + var.modules_config == null + || + try(var.modules_config.repository_name, null) != null + ) + error_message = "Modules configuration requires a modules repository name." + } } variable "organization" { @@ -63,7 +79,6 @@ variable "repositories" { }), {}) visibility = optional(string, "private") })) - has_modules = optional(bool, false) populate_from = optional(string) })) default = {} diff --git a/fast/extras/00-cicd-github/README.md b/fast/extras/00-cicd-github/README.md deleted file mode 100644 index acf249bc..00000000 --- a/fast/extras/00-cicd-github/README.md +++ /dev/null @@ -1,105 +0,0 @@ -# FAST GitHub repository management - -This small extra stage allows creation and management of GitHub repositories used to host FAST stage code, including initial population of files and rewriting of module sources. - -This stage is designed for quick repository creation in a GitHub organization, and is not suited for medium or long-term repository management especially if you enable initial population of files. - -## Initial population caveats - -Initial file population of repositories is controlled via the `populate_from` attribute, and needs a bit of care: - -- never run this stage with the same variables used for population once the repository starts being used, as **Terraform will manage file state and revert any changes at each apply**, which is probably not what you want. -- initial population of the modules repository is discouraged, as the number of resulting files Terraform needs to manage is very close to the GitHub hourly limit for their API, it's much easier to populate modules via regular git commands - -The scenario for which this stage has been designed is one-shot creation and/or population of stage repositories, running it multiple times with different variables and Terraform states if incremental creation is needed for subsequent FAST stages (e.g. GKE, data platform, etc.). - -Once initial population is done, you need to manually push to the repository - -- the `.tfvars` file with custom variable values for your stages -- the workflow configuration file generated by FAST stages - -## GitHub provider credentials - -A [GitHub token](https://github.com/settings/tokens) is needed to authenticate against their API. The token needs organization-level permissions, like shown in this screenshot: - -

- GitHub token scopes. -

- -## Variable configuration - -The `organization` required variable sets the GitHub organization where repositories will be created, and is used to configure the Terraform provider. - -The `repositories` variable is where you configure which repositories to create, whether initial population of files is desired, and which repository is used to host modules. - -This is an example that creates repositories for stages 00 and 01, defines an existing repositories as the source for modules, and populates initial files for stages 00, 01, and 02: - -```tfvars -organization = "ludomagno" -repositories = { - fast_00_bootstrap = { - create_options = { - description = "FAST bootstrap." - features = { - issues = true - } - } - populate_from = "../../stages/00-bootstrap" - } - fast_01_resman = { - create_options = { - description = "FAST resource management." - features = { - issues = true - } - } - populate_from = "../../stages/01-resman" - } - fast_02_networking = { - populate_from = "../../stages/02-networking-peering" - } - fast_modules = { - has_modules = true - } -} -``` - -The `create_options` repository attribute controls creation: if the attribute is not present, the repository is assumed to be already existing. - -Initial population depends on a modules repository being configured, identified by the `has_modules` attribute, and on `populate_from` attributes in each repository where population is required, pointing to the folder holding the files to be committed. - -Finally, a `commit_config` variable is optional: it can be used to configure author, email and message used in commits for initial population of files, its defaults are probably fine for most use cases. - -## Modules secret - -When initial population is configured for a repository, this stage also adds a secret with the private key used to authenticate against the modules repository. This matches the configuration of the GitHub workflow files created for each FAST stage when CI/CD is enabled. - - - - -## Files - -| name | description | resources | -|---|---|---| -| [cicd-versions.tf](./cicd-versions.tf) | Provider version. | | -| [main.tf](./main.tf) | Module-level locals and resources. | github_actions_secret · github_repository · github_repository_deploy_key · github_repository_file · tls_private_key | -| [outputs.tf](./outputs.tf) | Module outputs. | | -| [providers.tf](./providers.tf) | Provider configuration. | | -| [variables.tf](./variables.tf) | Module variables. | | - -## Variables - -| name | description | type | required | default | -|---|---|:---:|:---:|:---:| -| [organization](variables.tf#L34) | GitHub organization. | string | ✓ | | -| [commmit_config](variables.tf#L17) | Configure commit metadata. | object({…}) | | {} | -| [modules_ref](variables.tf#L28) | Optional git ref used in module sources. | string | | null | -| [repositories](variables.tf#L39) | Repositories to create. | map(object({…})) | | {} | - -## Outputs - -| name | description | sensitive | -|---|---|:---:| -| [clone](outputs.tf#L17) | Clone repository commands. | | - - diff --git a/fast/extras/README.md b/fast/extras/README.md index 121fa4b0..9213224c 100644 --- a/fast/extras/README.md +++ b/fast/extras/README.md @@ -2,4 +2,4 @@ This folder contains additional helper stages for FAST, which can be used to simplify specific operational tasks: -- [GitHub repository management](./00-cicd-github/) +- [GitHub repository management](./0-cicd-github/) diff --git a/fast/stage-links.sh b/fast/stage-links.sh new file mode 100755 index 00000000..cfa7919d --- /dev/null +++ b/fast/stage-links.sh @@ -0,0 +1,114 @@ +#!/bin/bash +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# 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. + +if [ $# -eq 0 ]; then + echo "Error: no folder or GCS bucket specified. Use -h or --help for usage." + exit 1 +fi + +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + cat < $MESSAGE <---" +fi diff --git a/fast/stages-multitenant/0-bootstrap-tenant/IAM.md b/fast/stages-multitenant/0-bootstrap-tenant/IAM.md new file mode 100644 index 00000000..543a82ab --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/IAM.md @@ -0,0 +1,49 @@ +# IAM bindings reference + +Legend: + additive, conditional. + +## Organization [org_id #0] + +| members | roles | +|---|---| +|tn0-admins
group|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +
[roles/resourcemanager.organizationViewer](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.organizationViewer) +| +|tn0-gke-dev-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-gke-prod-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-networking-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-pf-dev-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-pf-prod-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-resman-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-sandbox-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-security-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| +|tn0-teams-0
serviceAccount|[roles/orgpolicy.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#orgpolicy.policyAdmin) +| + +## Folder test tenant 0 [#1] + +| members | roles | +|---|---| +|tn0-admins
group|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | +|tn0-networking-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin) | +|tn0-resman-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Project prod-iac-core-0 + +| members | roles | +|---|---| +|tn0-bootstrap-1
serviceAccount|[roles/logging.logWriter](https://cloud.google.com/iam/docs/understanding-roles#logging.logWriter) +| + +## Project tn0-audit-logs-0 + +| members | roles | +|---|---| +|f260055713332-284719
serviceAccount|[roles/logging.bucketWriter](https://cloud.google.com/iam/docs/understanding-roles#logging.bucketWriter) +| +|prod-resman-0
serviceAccount|[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner) | +|tn0-resman-0
serviceAccount|[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner) | + +## Project tn0-iac-core-0 + +| members | roles | +|---|---| +|tn0-admins
group|[roles/iam.serviceAccountTokenCreator](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountTokenCreator)
[roles/iam.workloadIdentityPoolAdmin](https://cloud.google.com/iam/docs/understanding-roles#iam.workloadIdentityPoolAdmin) | +|SERVICE_IDENTITY_service-networking
serviceAccount|[roles/servicenetworking.serviceAgent](https://cloud.google.com/iam/docs/understanding-roles#servicenetworking.serviceAgent) +| +|prod-resman-0
serviceAccount|[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner) | +|tn0-resman-0
serviceAccount|[roles/cloudbuild.builds.editor](https://cloud.google.com/iam/docs/understanding-roles#cloudbuild.builds.editor)
[roles/iam.serviceAccountAdmin](https://cloud.google.com/iam/docs/understanding-roles#iam.serviceAccountAdmin)
[roles/iam.workloadIdentityPoolAdmin](https://cloud.google.com/iam/docs/understanding-roles#iam.workloadIdentityPoolAdmin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/source.admin](https://cloud.google.com/iam/docs/understanding-roles#source.admin)
[roles/storage.admin](https://cloud.google.com/iam/docs/understanding-roles#storage.admin) | diff --git a/fast/stages-multitenant/0-bootstrap-tenant/README.md b/fast/stages-multitenant/0-bootstrap-tenant/README.md new file mode 100644 index 00000000..c1fc9530 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/README.md @@ -0,0 +1,210 @@ +# Tenant bootstrap + +The primary purpose of this stage is to decouple a single tenant from centrally managed resources in the organization, so that subsequent management of the tenant's own hierarchy and resources can be implemented with a high degree of autonomy. + +It is logically equivalent to organization-level bootstrap as it's concerned with setting up IAM bindings on a root node and creating supporting projects attached to it, but it depends on the organization-level resource management stage and uses the same service account and permissions since it operates at the hierarchy level (folders, tags, organization policies). + +The resources and policies managed here are: + +- the tag value in the `tenant` key used in IAM conditions +- the billing IAM bindings for the tenant-specific automation service accounts +- the organization-level IAM binding that allows conditional managing of org policies on the tenant folder +- the top-level tenant folder which acts as the root of the tenant's hierarchy +- any organization policy that needs to be set for the tenant on its root folder +- the tenant automation and logging projects +- service accounts for all tenant stages +- GCS buckets for bootstrap and resource management state +- optional CI/CD setup for this and the resource management tenant stages +- tenant-specific Workload Identity Federation pool and providers (planned) + +One notable difference compared to organization-level bootstrap is the creation of service accounts for all tenant stages: this is done here so that Billing and Organization Policy Admin bindings can be set, leveraging permissions of the org-level resman service account which is used to run this stage. Doing this here avoids the need to grant broad scoped permissions on the organization to tenant-level service accounts, and effectively decouples the tenant from the organization. + +The following diagram is a high level reference of what this stage manages, showing one hypothetical tenant (additional tenants require additional instances of this stage being deployed): + +```mermaid +%%{init: {'theme':'base'}}%% +classDiagram + Organization~🏢~ -- Tenant 0~📁~ + Tenant 0~📁~ -- tn0_automation + Tenant 0~📁~ -- tn0_logging + class Organization~🏢~ { + - tag value + - IAM bindings() + - org policies() + } + class Tenant 0~📁~ { + - log sinks + - IAM bindings() + - tag bindings() + } + class tn0_automation { + - GCS buckets + - service accounts + - optional CI/CD + - IAM bindings() + } + class tn0_logging { + - log sink destinations + } +``` + +As most of the features of this stage follow the same design and configurations of the [organization-level bootstrap stage](../../stages/0-bootstrap/), we will only focus on the tenant-specific configuration in this document. + +## Naming + +This stage sets the prefix used to name tenant resources, and passes it downstream to the other tenant stages together with the other globals needed by the tenant. The default is to append the tenant short name (a 3 or 4 letter acronym or abbreviation) to the organization-level prefix, if that is not desired this can be changed by editing local definitions in the `main.tf` file. Just be aware that some resources have name length constraints. + +## How to run this stage + +The tenant bootstrap stage is the effective boundary between organization and tenant-level resources: it uses the same inputs as the organization-level resource management stage, and produces outputs which provide the needed context to all other tenant stages. + +### Output files and cross-stage variables + +As mentioned above, the organization-level set of output files are used here with one exception: the provider file is different since state is specific to this stage. The `stage-links.sh` script can be used to get the commands needed for the provider and output files, just pass a single argument with your FAST output files folder path, or GCS bucket URI: + +```bash +../../stage-links.sh ~/fast-config +``` + +The script output can be copy/pasted to a terminal: + +```bash +# copy and paste the following commands for '0-bootstrap-tenant' + +cp ~/fast-config/providers/0-bootstrap-tenant-providers.tf ./ +ln -s ~/fast-config/tfvars/globals.auto.tfvars.json ./ +ln -s ~/fast-config/tfvars/0-bootstrap.auto.tfvars.json ./ +ln -s ~/fast-config/tfvars/1-resman.auto.tfvars.json ./ + +# ---> remember to set the prefix in the provider file <--- +``` + +As shown in the script output above, the provider file is a template used as a source for potentially multiple tenant installations, so it needs to be specifically configured for this tenant by setting the backend `prefix` to a unique string so that the Terraform state file will not overlap with other tenants. Open it in an editor and perform the change before proceeding. + +### Global overrides + +The globals variable file linekd above contains definition which were set for the organization, for example the locations used for log sink destinations. These might not be correct for each tenant, so this stage allows overriding them via the tenant configuration variable described in the next section. + +### Tenant-level configuration + +The tenant configuration resides in the `tenant_config` variable, this is an example configuration for a tenant with comments explaining the different choices that need to be made: + +```hcl +tenant_config = { + # used for the top-level folder name + descriptive_name = "My First Tenant" + # tenant-specific groups, only the admin group is required + # the organization domain is automatically added after the group name + groups = { + gcp-admins = "tn01-admins" + # gcp-devops = "tn01-devops" + # gcp-network-admins = "tn01-networking" + # gcp-security-admins = "tn01-security" + } + # the 3 or 4 letter acronym or abbreviation used in resource names + short_name = "tn01" + # optional CI/CD configuration, refer to the org-level stages for information + # cicd = { + # branch = null + # identity_provider = "foo-provider" + # name = "myorg/tn01-bootstrap" + # type = "github" + # } + # optional group-level IAM bindings to add to the top-level folder + # group_iam = { + # tn01-support = ["roles/viewer"] + # } + # optional IAM bindings to add to the top-level folder + # iam = { + # "roles/logging.admin" = [ + # "serviceAccount:foo@myprj.iam.gserviceaccount.com" + # ] + # } + # optional location overrides to global locations + # locations = { + # bq = null + # gcs = null + # logging = null + # pubsub = null + # } + # optional folder ids for automation and logging project folders, typically + # added in later stages and entered here once created + # project_parent_ids = { + # automation = "folders/012345678" + # logging = "folders/0123456789" + # } +} +# tftest skip +``` + +Configure the tenant variable in a tfvars file for this stage. A few minor points worth noting: + +- the administrator group is the only one required here, specifying other groups only has the effect of populating the output file with group names for reuse in later stages +- the `iam` variable is merged with the IAM bindings for service accounts in the `main.tf` file, which take precedence; if a role specified in the variable is ignored, that's probably the case +- locations can be overridden at the attribute level, there's no need to specify those that are equal to the ones in the organization globals file + +### Running the stage + +Once the configuration is done just go through the usual `init/apply` cycle. On successful apply, a tfvars file specific for this tenant and a set of provider files will be created. + +### TODO + +- [ ] tenant-level Workload Identity Federation pool and providers configuration +- [ ] tenant-level logging project and sinks + + + + +## Files + +| name | description | modules | resources | +|---|---|---|---| +| [automation-sas.tf](./automation-sas.tf) | Tenant automation stage 2 and 3 service accounts. | iam-service-account | google_organization_iam_member | +| [automation.tf](./automation.tf) | Tenant automation project and resources. | gcs · iam-service-account · project | | +| [billing.tf](./billing.tf) | Billing roles for standalone billing accounts. | | google_billing_account_iam_member | +| [cicd.tf](./cicd.tf) | Workload Identity Federation configurations for CI/CD. | iam-service-account · source-repository | | +| [identity-providers.tf](./identity-providers.tf) | Workload Identity Federation provider definitions. | | google_iam_workload_identity_pool · google_iam_workload_identity_pool_provider | +| [log-export.tf](./log-export.tf) | Audit log project and sink. | bigquery-dataset · gcs · logging-bucket · project · pubsub | | +| [main.tf](./main.tf) | Module-level locals and resources. | folder | | +| [organization.tf](./organization.tf) | Organization tag and conditional IAM grant. | organization | google_organization_iam_member · google_tags_tag_value_iam_member | +| [outputs-files.tf](./outputs-files.tf) | Output files persistence to local filesystem. | | local_file | +| [outputs-gcs.tf](./outputs-gcs.tf) | Output files persistence to automation GCS bucket. | | google_storage_bucket_object | +| [outputs.tf](./outputs.tf) | Module outputs. | | | +| [variables.tf](./variables.tf) | Module variables. | | | + +## Variables + +| name | description | type | required | default | producer | +|---|---|:---:|:---:|:---:|:---:| +| [automation](variables.tf#L20) | Automation resources created by the organization-level bootstrap stage. | object({…}) | ✓ | | 0-bootstrap | +| [billing_account](variables.tf#L38) | Billing account id. If billing account is not part of the same org set `is_org_level` to false. | object({…}) | ✓ | | 0-bootstrap | +| [organization](variables.tf#L193) | Organization details. | object({…}) | ✓ | | 0-bootstrap | +| [prefix](variables.tf#L209) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | 0-bootstrap | +| [tag_keys](variables.tf#L232) | Organization tag keys. | object({…}) | ✓ | | 1-resman | +| [tag_names](variables.tf#L243) | Customized names for resource management tags. | object({…}) | ✓ | | 1-resman | +| [tag_values](variables.tf#L254) | Organization resource management tag values. | map(string) | ✓ | | 1-resman | +| [tenant_config](variables.tf#L261) | Tenant configuration. Short name must be 4 characters or less. | object({…}) | ✓ | | | +| [cicd_repositories](variables.tf#L51) | CI/CD repository configuration. Identity providers reference keys in the `federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed. | object({…}) | | null | | +| [custom_roles](variables.tf#L97) | Custom roles defined at the organization level, in key => id format. | object({…}) | | null | 0-bootstrap | +| [fast_features](variables.tf#L106) | Selective control for top-level FAST features. | object({…}) | | {} | 0-bootstrap | +| [federated_identity_providers](variables.tf#L120) | Workload Identity Federation pools. The `cicd_repositories` variable references keys here. | map(object({…})) | | {} | | +| [group_iam](variables.tf#L134) | Tenant-level custom group IAM settings in group => [roles] format. | map(list(string)) | | {} | | +| [iam](variables.tf#L140) | Tenant-level custom IAM settings in role => [principal] format. | map(list(string)) | | {} | | +| [iam_additive](variables.tf#L146) | Tenant-level custom IAM settings in role => [principal] format for non-authoritative bindings. | map(list(string)) | | {} | | +| [locations](variables.tf#L152) | Optional locations for GCS, BigQuery, and logging buckets created here. These are the defaults set at the organization level, and can be overridden via the tenant config variable. | object({…}) | | {…} | 0-bootstrap | +| [log_sinks](variables.tf#L172) | Tenant-level log sinks, in name => {type, filter} format. | map(object({…})) | | {…} | | +| [outputs_location](variables.tf#L203) | Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable. | string | | null | | +| [project_parent_ids](variables.tf#L219) | Optional parents for projects created here in folders/nnnnnnn format. Null values will use the tenant folder as parent. | object({…}) | | {…} | | +| [test_principal](variables.tf#L301) | Used when testing to bypass the data source returning the current identity. | string | | null | | + +## Outputs + +| name | description | sensitive | consumers | +|---|---|:---:|---| +| [cicd_workflows](outputs.tf#L102) | CI/CD workflows for tenant bootstrap and resource management stages. | ✓ | | +| [federated_identity](outputs.tf#L108) | Workload Identity Federation pool and providers. | | | +| [provider](outputs.tf#L118) | Terraform provider file for tenant resource management stage. | ✓ | stage-01 | +| [tenant_resources](outputs.tf#L125) | Tenant-level resources. | | | +| [tfvars](outputs.tf#L136) | Terraform variable files for the following tenant stages. | ✓ | | + + diff --git a/fast/stages-multitenant/0-bootstrap-tenant/automation-sas.tf b/fast/stages-multitenant/0-bootstrap-tenant/automation-sas.tf new file mode 100644 index 00000000..c548f8d5 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/automation-sas.tf @@ -0,0 +1,127 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Tenant automation stage 2 and 3 service accounts. + +locals { + branch_sas = { + dp-dev = { + condition = join(" && ", [ + "resource.matchTag('${local.tag_keys.context}', 'data')", + "resource.matchTag('${local.tag_keys.environment}', 'development')" + ]) + description = "data platform dev" + flag = "data_platform" + } + dp-prod = { + condition = join(" && ", [ + "resource.matchTag('${local.tag_keys.context}', 'data')", + "resource.matchTag('${local.tag_keys.environment}', 'production')" + ]) + description = "data platform prod" + flag = "data_platform" + } + gke-dev = { + condition = join(" && ", [ + "resource.matchTag('${local.tag_keys.context}', 'gke')", + "resource.matchTag('${local.tag_keys.environment}', 'development')" + ]) + description = "GKE dev" + flag = "gke" + } + gke-prod = { + condition = join(" && ", [ + "resource.matchTag('${local.tag_keys.context}', 'gke')", + "resource.matchTag('${local.tag_keys.environment}', 'production')" + ]) + description = "GKE prod" + flag = "gke" + } + networking = { + condition = "resource.matchTag('${local.tag_keys.context}', 'networking')" + description = "networking" + flag = "-" + } + pf-dev = { + condition = "resource.matchTag('${local.tag_keys.environment}', 'development')" + description = "project factory dev" + flag = "project_factory" + } + pf-prod = { + condition = "resource.matchTag('${local.tag_keys.environment}', 'production')" + description = "project factory prod" + flag = "project_factory" + } + sandbox = { + condition = "resource.matchTag('${local.tag_keys.context}', 'sandbox')" + description = "sandbox" + flag = "sandbox" + } + security = { + condition = "resource.matchTag('${local.tag_keys.context}', 'security')" + description = "security" + flag = "-" + } + teams = { + condition = "resource.matchTag('${local.tag_keys.context}', 'teams')" + description = "teams" + flag = "teams" + } + } +} + +module "automation-tf-resman-sa-stage2-3" { + source = "../../../modules/iam-service-account" + for_each = { + for k, v in local.branch_sas : + k => v if lookup(local.fast_features, v.flag, true) + } + project_id = module.automation-project.project_id + name = "${each.key}-0" + display_name = "Terraform ${each.value.description} service account." + prefix = local.prefix + iam_billing_roles = !var.billing_account.is_org_level ? { + (var.billing_account.id) = [ + "roles/billing.user", "roles/billing.costsManager" + ] + } : {} + iam_organization_roles = var.billing_account.is_org_level ? { + (var.organization.id) = [ + "roles/billing.user", "roles/billing.costsManager" + ] + } : {} +} + +# assign org policy admin with a tag-based condition to stage 2 and 3 SAs + +resource "google_organization_iam_member" "org_policy_admin_stage2_3" { + for_each = { + for k, v in module.automation-tf-resman-sa-stage2-3 : k => v.iam_email + } + org_id = var.organization.id + role = "roles/orgpolicy.policyAdmin" + member = each.value + condition { + title = "org_policy_tag_${var.tenant_config.short_name}_${each.key}_scoped" + description = join("", [ + "Org policy tag scoped grant for tenant ${var.tenant_config.short_name} ", + local.branch_sas[each.key].description + ]) + expression = join(" && ", [ + local.iam_tenant_condition, local.branch_sas[each.key].condition + ]) + } +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/automation.tf b/fast/stages-multitenant/0-bootstrap-tenant/automation.tf new file mode 100644 index 00000000..9684e7ca --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/automation.tf @@ -0,0 +1,141 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Tenant automation project and resources. + +module "automation-project" { + source = "../../../modules/project" + billing_account = var.billing_account.id + name = "iac-core-0" + parent = coalesce( + var.project_parent_ids.automation, + module.tenant-folder.id + ) + prefix = local.prefix + # human (groups) IAM bindings + group_iam = { + (local.groups.gcp-admins) = [ + "roles/iam.serviceAccountAdmin", + "roles/iam.serviceAccountTokenCreator", + ] + (local.groups.gcp-admins) = [ + "roles/iam.serviceAccountTokenCreator", + "roles/iam.workloadIdentityPoolAdmin" + ] + } + # machine (service accounts) IAM bindings + iam = { + "roles/owner" = [ + module.automation-tf-resman-sa.iam_email, + "serviceAccount:${local.resman_sa}" + ] + "roles/cloudbuild.builds.editor" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/iam.serviceAccountAdmin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/iam.workloadIdentityPoolAdmin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/source.admin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/storage.admin" = [ + module.automation-tf-resman-sa.iam_email + ] + } + services = [ + "accesscontextmanager.googleapis.com", + "bigquery.googleapis.com", + "bigqueryreservation.googleapis.com", + "bigquerystorage.googleapis.com", + "billingbudgets.googleapis.com", + "cloudbilling.googleapis.com", + "cloudbuild.googleapis.com", + "cloudkms.googleapis.com", + "cloudresourcemanager.googleapis.com", + "container.googleapis.com", + "compute.googleapis.com", + "container.googleapis.com", + "essentialcontacts.googleapis.com", + "iam.googleapis.com", + "iamcredentials.googleapis.com", + "orgpolicy.googleapis.com", + "pubsub.googleapis.com", + "servicenetworking.googleapis.com", + "serviceusage.googleapis.com", + "sourcerepo.googleapis.com", + "stackdriver.googleapis.com", + "storage-component.googleapis.com", + "storage.googleapis.com", + "sts.googleapis.com" + ] +} + +# output files bucket + +module "automation-tf-output-gcs" { + source = "../../../modules/gcs" + project_id = module.automation-project.project_id + name = "iac-core-outputs-0" + prefix = local.prefix + location = local.locations.gcs + storage_class = local.gcs_storage_class + versioning = true +} + +# resource management stage bucket and service account + +module "automation-tf-resman-gcs" { + source = "../../../modules/gcs" + project_id = module.automation-project.project_id + name = "iac-core-resman-0" + prefix = local.prefix + location = local.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [module.automation-tf-resman-sa.iam_email] + } +} + +module "automation-tf-resman-sa" { + source = "../../../modules/iam-service-account" + project_id = module.automation-project.project_id + name = "resman-0" + display_name = "Terraform stage 1 resman service account." + prefix = local.prefix + # allow SA used by CI/CD workflow to impersonate this SA + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.automation-tf-cicd-sa-resman["0"].iam_email, null) + ]) + } + iam_billing_roles = !var.billing_account.is_org_level ? { + (var.billing_account.id) = [ + "roles/billing.admin", "roles/billing.costsManager" + ] + } : {} + iam_organization_roles = var.billing_account.is_org_level ? { + (var.organization.id) = [ + "roles/billing.admin", "roles/billing.costsManager" + ] + } : {} + iam_storage_roles = { + (module.automation-tf-output-gcs.name) = ["roles/storage.admin"] + } +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/billing.tf b/fast/stages-multitenant/0-bootstrap-tenant/billing.tf new file mode 100644 index 00000000..77c26b91 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/billing.tf @@ -0,0 +1,39 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Billing roles for standalone billing accounts. + +# service account billing roles are in the SA module in automation.tf + +resource "google_billing_account_iam_member" "billing_ext_admin" { + for_each = toset(var.billing_account.is_org_level ? [] : [ + "group:${local.groups.gcp-admins}", + module.automation-tf-resman-sa.iam_email + ]) + billing_account_id = var.billing_account.id + role = "roles/billing.admin" + member = each.key +} + +resource "google_billing_account_iam_member" "billing_ext_cost_manager" { + for_each = toset(var.billing_account.is_org_level ? [] : [ + "group:${local.groups.gcp-admins}", + module.automation-tf-resman-sa.iam_email + ]) + billing_account_id = var.billing_account.id + role = "roles/billing.costsManager" + member = each.key +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/cicd.tf b/fast/stages-multitenant/0-bootstrap-tenant/cicd.tf new file mode 100644 index 00000000..a25215af --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/cicd.tf @@ -0,0 +1,223 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Workload Identity Federation configurations for CI/CD. + +locals { + _file_prefix = "tenants/${var.tenant_config.short_name}" + # derive identity pool names from identity providers for easy reference + cicd_identity_pools = { + for k, v in local.cicd_identity_providers : + k => split("/providers/", v.name)[0] + } + # merge org-level and tenant-level identity providers + cicd_identity_providers = merge( + var.automation.federated_identity_providers, + { + for k, v in google_iam_workload_identity_pool_provider.default : + k => { + issuer = local.identity_providers[k].issuer + issuer_uri = local.identity_providers[k].issuer_uri + name = v.name + principal_tpl = local.identity_providers[k].principal_tpl + principalset_tpl = local.identity_providers[k].principalset_tpl + } + }) + # filter CI/CD repositories to only keep valid ones + cicd_repositories = { + for k, v in coalesce(var.cicd_repositories, {}) : k => v + if( + v != null + && + ( + try(v.type, null) == "sourcerepo" + || + contains( + keys(local.cicd_identity_providers), + coalesce(try(v.identity_provider, null), ":") + ) + ) + && + fileexists( + format("${path.module}/templates/workflow-%s.yaml", try(v.type, "")) + ) + ) + } +} + +# tenant bootstrap runs in the org scope and uses top-level automation project + +module "automation-tf-cicd-repo-bootstrap" { + source = "../../../modules/source-repository" + for_each = { + for k, v in local.cicd_repositories : 0 => v + if k == "bootstrap" && try(v.type, null) == "sourcerepo" + } + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = [ + local.resman_sa + ] + "roles/source.reader" = [ + module.automation-tf-cicd-sa-bootstrap["0"].iam_email + ] + } + triggers = { + "fast-${var.tenant_config.short_name}-0-bootstrap" = { + filename = ".cloudbuild/workflow.yaml" + included_files = ["**/*tf", ".cloudbuild/workflow.yaml"] + service_account = module.automation-tf-cicd-sa-bootstrap["0"].id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } +} + +module "automation-tf-cicd-sa-bootstrap" { + source = "../../../modules/iam-service-account" + for_each = { + for k, v in local.cicd_repositories : 0 => v + if k == "bootstrap" && try(v.type, null) != null + } + project_id = var.automation.project_id + name = "bootstrap-1" + display_name = "Terraform CI/CD ${var.tenant_config.short_name} bootstrap." + prefix = local.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? {} + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} + +module "automation-tf-org-resman-sa" { + source = "../../../modules/iam-service-account" + for_each = { + for k, v in local.cicd_repositories : 0 => v + if k == "bootstrap" && try(v.type, null) != null + } + project_id = var.automation.project_id + name = local.resman_sa + service_account_create = false + iam_additive = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.automation-tf-cicd-sa-bootstrap["0"].iam_email, null) + ]) + } +} + +# tenant resman runs in the tenant scope and uses its own automation project + +module "automation-tf-cicd-repo-resman" { + source = "../../../modules/source-repository" + for_each = { + for k, v in local.cicd_repositories : 0 => v + if k == "resman" && try(v.type, null) == "sourcerepo" + } + project_id = module.automation-project.project_id + name = each.value.name + iam = { + "roles/source.admin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/source.reader" = [ + module.automation-tf-cicd-sa-resman["0"].iam_email + ] + } + triggers = { + fast-1-resman = { + filename = ".cloudbuild/workflow.yaml" + included_files = ["**/*tf", ".cloudbuild/workflow.yaml"] + service_account = module.automation-tf-cicd-sa-resman["0"].id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } +} + +module "automation-tf-cicd-sa-resman" { + source = "../../../modules/iam-service-account" + for_each = { + for k, v in local.cicd_repositories : 0 => v + if k == "resman" && try(v.type, null) != null + } + project_id = module.automation-project.project_id + name = "resman-1" + display_name = "Terraform CI/CD resman." + prefix = local.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? {} + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (module.automation-project.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (module.automation-tf-output-gcs.name) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/diagram.svg b/fast/stages-multitenant/0-bootstrap-tenant/diagram.svg new file mode 100644 index 00000000..4090c7b0 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/diagram.svg @@ -0,0 +1,597 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fast/stages-multitenant/0-bootstrap-tenant/identity-providers.tf b/fast/stages-multitenant/0-bootstrap-tenant/identity-providers.tf new file mode 100644 index 00000000..3f8499b7 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/identity-providers.tf @@ -0,0 +1,96 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Workload Identity Federation provider definitions. + +locals { + identity_providers = { + for k, v in var.federated_identity_providers : k => merge( + v, + lookup(local.identity_providers_defs, v.issuer, {}) + ) + } + identity_providers_defs = { + # https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/about-security-hardening-with-openid-connect + github = { + attribute_mapping = { + "google.subject" = "assertion.sub" + "attribute.sub" = "assertion.sub" + "attribute.actor" = "assertion.actor" + "attribute.repository" = "assertion.repository" + "attribute.repository_owner" = "assertion.repository_owner" + "attribute.ref" = "assertion.ref" + } + issuer_uri = "https://token.actions.githubusercontent.com" + principal_tpl = "principal://iam.googleapis.com/%s/subject/repo:%s:ref:refs/heads/%s" + principalset_tpl = "principalSet://iam.googleapis.com/%s/attribute.repository/%s" + } + # https://docs.gitlab.com/ee/ci/cloud_services/index.html#how-it-works + gitlab = { + attribute_mapping = { + "google.subject" = "assertion.sub" + "attribute.sub" = "assertion.sub" + "attribute.environment" = "assertion.environment" + "attribute.environment_protected" = "assertion.environment_protected" + "attribute.namespace_id" = "assertion.namespace_id" + "attribute.namespace_path" = "assertion.namespace_path" + "attribute.pipeline_id" = "assertion.pipeline_id" + "attribute.pipeline_source" = "assertion.pipeline_source" + "attribute.project_id" = "assertion.project_id" + "attribute.project_path" = "assertion.project_path" + "attribute.repository" = "assertion.project_path" + "attribute.ref" = "assertion.ref" + "attribute.ref_protected" = "assertion.ref_protected" + "attribute.ref_type" = "assertion.ref_type" + } + allowed_audiences = ["https://gitlab.com"] + issuer_uri = "https://gitlab.com" + principal_tpl = "principalSet://iam.googleapis.com/%s/attribute.sub/project_path:%s:ref_type:branch:ref:%s" + principalset_tpl = "principalSet://iam.googleapis.com/%s/attribute.repository/%s" + } + } +} + +resource "google_iam_workload_identity_pool" "default" { + provider = google-beta + count = length(local.identity_providers) > 0 ? 1 : 0 + project = module.automation-project.project_id + workload_identity_pool_id = "${var.prefix}-bootstrap" +} + +resource "google_iam_workload_identity_pool_provider" "default" { + provider = google-beta + for_each = local.identity_providers + project = module.automation-project.project_id + workload_identity_pool_id = ( + google_iam_workload_identity_pool.default.0.workload_identity_pool_id + ) + workload_identity_pool_provider_id = "${var.prefix}-bootstrap-${each.key}" + attribute_condition = each.value.attribute_condition + attribute_mapping = each.value.attribute_mapping + oidc { + allowed_audiences = ( + try(each.value.custom_settings.allowed_audiences, null) != null + ? each.value.custom_settings.allowed_audiences + : try(each.value.allowed_audiences, null) + ) + issuer_uri = ( + try(each.value.custom_settings.issuer_uri, null) != null + ? each.value.custom_settings.issuer_uri + : try(each.value.issuer_uri, null) + ) + } +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/log-export.tf b/fast/stages-multitenant/0-bootstrap-tenant/log-export.tf new file mode 100644 index 00000000..b0bf115a --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/log-export.tf @@ -0,0 +1,94 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Audit log project and sink. + +locals { + log_sink_destinations = merge( + # use the same dataset for all sinks with `bigquery` as destination + { for k, v in var.log_sinks : k => module.log-export-dataset.0 if v.type == "bigquery" }, + # use the same gcs bucket for all sinks with `storage` as destination + { for k, v in var.log_sinks : k => module.log-export-gcs.0 if v.type == "storage" }, + # use separate pubsub topics and logging buckets for sinks with + # destination `pubsub` and `logging` + module.log-export-pubsub, + module.log-export-logbucket + ) + log_types = toset([for k, v in var.log_sinks : v.type]) +} + +module "log-export-project" { + source = "../../../modules/project" + billing_account = var.billing_account.id + name = "audit-logs-0" + parent = coalesce( + var.project_parent_ids.logging, + module.tenant-folder.id + ) + prefix = local.prefix + iam = { + "roles/owner" = [ + module.automation-tf-resman-sa.iam_email, + "serviceAccount:${local.resman_sa}" + ] + } + services = [ + # "cloudresourcemanager.googleapis.com", + # "iam.googleapis.com", + # "serviceusage.googleapis.com", + "bigquery.googleapis.com", + "storage.googleapis.com", + "stackdriver.googleapis.com" + ] +} + +# one log export per type, with conditionals to skip those not needed + +module "log-export-dataset" { + source = "../../../modules/bigquery-dataset" + count = contains(local.log_types, "bigquery") ? 1 : 0 + project_id = module.log-export-project.project_id + id = "audit_export" + friendly_name = "Audit logs export." + location = var.locations.bq +} + +module "log-export-gcs" { + source = "../../../modules/gcs" + count = contains(local.log_types, "storage") ? 1 : 0 + project_id = module.log-export-project.project_id + name = "audit-logs-0" + prefix = local.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class +} + +module "log-export-logbucket" { + source = "../../../modules/logging-bucket" + for_each = toset([for k, v in var.log_sinks : k if v.type == "logging"]) + parent_type = "project" + parent = module.log-export-project.project_id + id = "audit-logs-${each.key}" + location = var.locations.logging +} + +module "log-export-pubsub" { + source = "../../../modules/pubsub" + for_each = toset([for k, v in var.log_sinks : k if v.type == "pubsub"]) + project_id = module.log-export-project.project_id + name = "audit-logs-${each.key}" + regions = var.locations.pubsub +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/main.tf b/fast/stages-multitenant/0-bootstrap-tenant/main.tf new file mode 100644 index 00000000..3a150594 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/main.tf @@ -0,0 +1,100 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + gcs_storage_class = ( + length(split("-", local.locations.gcs)) < 2 + ? "MULTI_REGIONAL" + : "REGIONAL" + ) + groups = { + for k, v in var.tenant_config.groups : + k => v == null ? null : "${v}@${var.organization.domain}" + } + fast_features = { + for k, v in var.tenant_config.fast_features : + k => v == null ? var.fast_features[k] : v + } + locations = { + for k, v in var.tenant_config.locations : + k => v == null || v == [] ? var.locations[k] : v + } + prefix = join("-", compact([var.prefix, var.tenant_config.short_name])) + resman_sa = ( + var.test_principal == null + ? data.google_client_openid_userinfo.resman-sa.0.email + : var.test_principal + ) +} + +data "google_client_openid_userinfo" "resman-sa" { + count = var.test_principal == null ? 1 : 0 +} + +module "tenant-folder" { + source = "../../../modules/folder" + parent = "organizations/${var.organization.id}" + name = var.tenant_config.descriptive_name + logging_sinks = { + for name, attrs in var.log_sinks : name => { + bq_partitioned_table = attrs.type == "bigquery" + destination = local.log_sink_destinations[name].id + filter = attrs.filter + type = attrs.type + } + } + tag_bindings = { + tenant = try( + module.organization.tag_values["${var.tag_names.tenant}/${var.tenant_config.short_name}"].id, + null + ) + } +} + +module "tenant-folder-iam" { + source = "../../../modules/folder" + id = module.tenant-folder.id + folder_create = false + group_iam = merge(var.group_iam, { + (local.groups.gcp-admins) = [ + "roles/logging.admin", + "roles/owner", + "roles/resourcemanager.folderAdmin", + "roles/resourcemanager.projectCreator", + "roles/compute.xpnAdmin" + ] + }) + iam = merge(var.iam, { + "roles/compute.xpnAdmin" = [ + module.automation-tf-resman-sa.iam_email, + module.automation-tf-resman-sa-stage2-3["networking"].iam_email + ] + "roles/logging.admin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/resourcemanager.folderAdmin" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/resourcemanager.projectCreator" = [ + module.automation-tf-resman-sa.iam_email + ] + "roles/owner" = [ + module.automation-tf-resman-sa.iam_email + ] + }) + iam_additive = var.iam_additive + depends_on = [module.automation-project] +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/organization.tf b/fast/stages-multitenant/0-bootstrap-tenant/organization.tf new file mode 100644 index 00000000..46f8c0d4 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/organization.tf @@ -0,0 +1,84 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Organization tag and conditional IAM grant. + +locals { + iam_tenant_condition = "resource.matchTag('${local.tag_keys.tenant}', '${var.tenant_config.short_name}')" + tag_keys = { + for k, v in var.tag_names : k => "${var.organization.id}/${v}" + } +} + +module "organization" { + source = "../../../modules/organization" + organization_id = "organizations/${var.organization.id}" + iam_additive = merge( + { + "roles/resourcemanager.organizationViewer" = [ + "group:${local.groups.gcp-admins}" + ] + }, + var.billing_account.is_org_level ? { + "roles/billing.admin" = [ + "group:${local.groups.gcp-admins}", + module.automation-tf-resman-sa.iam_email + ] + "roles/billing.costsManager" = ["group:${local.groups.gcp-admins}"] + } : {} + ) + tags = { + tenant = { + id = var.tag_keys.tenant + values = { + (var.tenant_config.short_name) = {} + } + } + } +} + +resource "google_tags_tag_value_iam_member" "resman_tag_user" { + for_each = var.tag_values + tag_value = each.value + role = "roles/resourcemanager.tagUser" + member = module.automation-tf-resman-sa.iam_email +} + +resource "google_tags_tag_value_iam_member" "admins_tag_viewer" { + for_each = var.tag_values + tag_value = each.value + role = "roles/resourcemanager.tagViewer" + member = "group:${local.groups.gcp-admins}" +} + +# assign org policy admin with a tag-based condition to admin group and stage 1 SA + +resource "google_organization_iam_member" "org_policy_admin_stage0" { + for_each = toset([ + "group:${local.groups.gcp-admins}", + module.automation-tf-resman-sa.iam_email + ]) + org_id = var.organization.id + role = "roles/orgpolicy.policyAdmin" + member = each.key + condition { + title = "org_policy_tag_${var.tenant_config.short_name}_scoped" + description = "Org policy tag scoped grant for tenant ${var.tenant_config.short_name}." + expression = local.iam_tenant_condition + } +} + +# tag-based condition for service accounts is in the automation-sa file diff --git a/fast/stages-multitenant/0-bootstrap-tenant/outputs-files.tf b/fast/stages-multitenant/0-bootstrap-tenant/outputs-files.tf new file mode 100644 index 00000000..28bec327 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/outputs-files.tf @@ -0,0 +1,46 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Output files persistence to local filesystem. + +locals { + outputs_root = join("/", [ + try(pathexpand(var.outputs_location), ""), + "tenants", + var.tenant_config.short_name + ]) +} + +resource "local_file" "providers" { + count = var.outputs_location == null ? 0 : 1 + file_permission = "0644" + filename = "${local.outputs_root}/providers/1-resman-tenant-providers.tf" + content = try(local.provider, null) +} + +resource "local_file" "tfvars" { + count = var.outputs_location == null ? 0 : 1 + file_permission = "0644" + filename = "${local.outputs_root}/tfvars/0-bootstrap-tenant.auto.tfvars.json" + content = jsonencode(local.tfvars) +} + +resource "local_file" "workflows" { + for_each = var.outputs_location == null ? {} : local.cicd_workflows + file_permission = "0644" + filename = "${local.outputs_root}/workflows/${each.key}-${local.cicd_repositories[each.key].type}.yaml" + content = each.value +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/outputs-gcs.tf b/fast/stages-multitenant/0-bootstrap-tenant/outputs-gcs.tf new file mode 100644 index 00000000..7c0c7efc --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/outputs-gcs.tf @@ -0,0 +1,41 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Output files persistence to automation GCS bucket. + +resource "google_storage_bucket_object" "providers" { + bucket = module.automation-tf-output-gcs.name + # provider suffix allows excluding via .gitignore when linked from stages + name = "tenants/${var.tenant_config.short_name}/providers/1-resman-tenant-providers.tf" + content = local.provider +} + +resource "google_storage_bucket_object" "tfvars" { + bucket = module.automation-tf-output-gcs.name + name = "tenants/${var.tenant_config.short_name}/tfvars/0-bootstrap-tenant.auto.tfvars.json" + content = jsonencode(local.tfvars) +} + +resource "google_storage_bucket_object" "workflows" { + for_each = local.cicd_workflows + bucket = ( + each.key == "bootstrap" + ? var.automation.outputs_bucket + : module.automation-tf-output-gcs.name + ) + name = "tenants/${var.tenant_config.short_name}/workflows/${each.key}-${local.cicd_repositories[each.key].type}.yaml" + content = each.value +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/outputs.tf b/fast/stages-multitenant/0-bootstrap-tenant/outputs.tf new file mode 100644 index 00000000..4f22ff63 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/outputs.tf @@ -0,0 +1,140 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + cicd_workflows = { + for k, v in local.cicd_repositories : k => templatefile( + "${path.module}/templates/workflow-${v.type}.yaml", ( + k == "bootstrap" + ? { + identity_provider = try( + local.cicd_identity_providers[v["identity_provider"]].name, "" + ) + outputs_bucket = var.automation.outputs_bucket + service_account = try( + module.automation-tf-cicd-sa-bootstrap["0"].email, "" + ) + stage_name = k + tf_providers_file = "" + tf_var_files = [ + "0-bootstrap.auto.tfvars.json", + "1-resman.auto.tfvars.json", + "globals.auto.tfvars.json" + ] + } + : { + identity_provider = try( + local.cicd_identity_providers[v["identity_provider"]].name, "" + ) + outputs_bucket = module.automation-tf-output-gcs.name + service_account = try( + module.automation-tf-cicd-sa-resman["0"].email, "" + ) + stage_name = k + tf_providers_file = ( + "${local._file_prefix}/providers/1-resman-tenant-providers.tf" + ) + tf_var_files = [ + "${local._file_prefix}/tfvars/0-bootstrap-tenant.auto.tfvars.json" + ] + } + ) + ) + } + provider = templatefile( + "${path.module}/templates/providers.tf.tpl", { + bucket = module.automation-tf-resman-gcs.name + name = "resman" + sa = module.automation-tf-resman-sa.email + } + ) + tfvars = { + automation = { + outputs_bucket = module.automation-tf-output-gcs.name + project_id = module.automation-project.project_id + project_number = module.automation-project.number + federated_identity_pools = compact([ + try(google_iam_workload_identity_pool.default.0.name, null), + var.automation.federated_identity_pool, + ]) + federated_identity_providers = local.cicd_identity_providers + service_accounts = merge( + { resman = module.automation-tf-resman-sa.email }, + { + for k, v in local.branch_sas : k => try( + module.automation-tf-resman-sa-stage2-3[k].email, null + ) + } + ) + } + billing_account = var.billing_account + custom_roles = var.custom_roles + fast_features = local.fast_features + groups = var.tenant_config.groups + locations = local.locations + organization = var.organization + prefix = local.prefix + root_node = module.tenant-folder.id + short_name = var.tenant_config.short_name + tags = { + keys = var.tag_keys + names = var.tag_names + values = merge(var.tag_values, { + for k, v in module.organization.tag_values : k => v.id + }) + } + } +} + +output "cicd_workflows" { + description = "CI/CD workflows for tenant bootstrap and resource management stages." + sensitive = true + value = local.cicd_workflows +} + +output "federated_identity" { + description = "Workload Identity Federation pool and providers." + value = { + pool = try( + google_iam_workload_identity_pool.default.0.name, null + ) + providers = local.cicd_identity_providers + } +} + +output "provider" { + # tfdoc:output:consumers stage-01 + description = "Terraform provider file for tenant resource management stage." + sensitive = true + value = local.provider +} + +output "tenant_resources" { + description = "Tenant-level resources." + value = { + bucket = module.automation-tf-resman-gcs.name + folder = module.tenant-folder.id + project_id = module.automation-project.project_id + project_number = module.automation-project.number + service_account = module.automation-tf-resman-sa.email + } +} + +output "tfvars" { + description = "Terraform variable files for the following tenant stages." + sensitive = true + value = local.tfvars +} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/templates/providers.tf.tpl b/fast/stages-multitenant/0-bootstrap-tenant/templates/providers.tf.tpl new file mode 100644 index 00000000..e11a51b8 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/templates/providers.tf.tpl @@ -0,0 +1,30 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +terraform { + backend "gcs" { + bucket = "${bucket}" + impersonate_service_account = "${sa}" + } +} +provider "google" { + impersonate_service_account = "${sa}" +} +provider "google-beta" { + impersonate_service_account = "${sa}" +} + +# end provider.tf for ${name} diff --git a/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-github.yaml b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-github.yaml new file mode 100644 index 00000000..52325868 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-github.yaml @@ -0,0 +1,190 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: "FAST ${stage_name} stage" + +on: + pull_request: + branches: + - main + types: + - closed + - opened + - synchronize + +env: + FAST_OUTPUTS_BUCKET: ${outputs_bucket} + FAST_SERVICE_ACCOUNT: ${service_account} + FAST_WIF_PROVIDER: ${identity_provider} + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + %{~ if tf_providers_file != "" ~} + TF_PROVIDERS_FILE: ${tf_providers_file} + %{~ endif ~} + TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + TF_VERSION: 1.3.2 + +jobs: + fast-pr: + permissions: + contents: read + id-token: write + issues: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - id: checkout + name: Checkout repository + uses: actions/checkout@v3 + + # set up SSH key authentication to the modules repository + - id: ssh-config + name: Configure SSH authentication + run: | + ssh-agent -a "$SSH_AUTH_SOCK" > /dev/null + ssh-add - <<< "$${{ secrets.CICD_MODULES_KEY }}" + + # set up authentication via Workload identity Federation + - id: gcp-auth + name: Authenticate to Google Cloud + uses: google-github-actions/auth@v0 + with: + workload_identity_provider: $${{ env.FAST_WIF_PROVIDER }} + service_account: $${{ env.FAST_SERVICE_ACCOUNT }} + access_token_lifetime: 3600s + + - id: gcp-sdk + name: Set up Cloud SDK + uses: google-github-actions/setup-gcloud@v0 + with: + install_components: alpha + + # copy provider and tfvars files + - id: tf-config + name: Copy Terraform output files + run: | + %{~ if tf_providers_file != "" ~} + gcloud alpha storage cp -r \ + "gs://$${{env.FAST_OUTPUTS_BUCKET}}/providers/$${{env.TF_PROVIDERS_FILE}}" ./ + %{~ endif ~} + gcloud alpha storage cp -r \ + "gs://$${{env.FAST_OUTPUTS_BUCKET}}/tfvars" ./ + for f in $${{env.TF_VAR_FILES}}; do + ln -s "tfvars/$f" ./ + done + + - id: tf-setup + name: Set up Terraform + uses: hashicorp/setup-terraform@v2.0.3 + with: + terraform_version: $${{ env.TF_VERSION }} + + # run Terraform init/validate/plan + - id: tf-init + name: Terraform init + run: | + terraform init -no-color + + - id: tf-validate + name: Terraform validate + run: terraform validate -no-color + + - id: tf-plan + name: Terraform plan + continue-on-error: true + run: | + terraform plan -input=false -out ../plan.out -no-color + + - id: tf-apply + if: github.event.pull_request.merged == true && success() + name: Terraform apply + continue-on-error: true + run: | + terraform apply -input=false -auto-approve -no-color ../plan.out + + - id: pr-comment + name: Post comment to Pull Request + continue-on-error: true + uses: actions/github-script@v6 + if: github.event_name == 'pull_request' + env: + PLAN: $${{ steps.tf-plan.outputs.stdout }}\n$${{ steps.tf-plan.outputs.stderr }} + with: + script: | + const output = `### Terraform Initialization \`$${{ steps.tf-init.outcome }}\` + + ### Terraform Validation \`$${{ steps.tf-validate.outcome }}\` + +
Validation Output + + \`\`\`\n + $${{ steps.tf-validate.outputs.stdout }} + \`\`\` + +
+ + ### Terraform Plan \`$${{ steps.tf-plan.outcome }}\` + +
Show Plan + + \`\`\`\n + $${process.env.PLAN.split('\n').filter(l => l.match(/^([A-Z\s].*|)$$/)).join('\n')} + \`\`\` + +
+ + ### Terraform Apply \`$${{ steps.tf-apply.outcome }}\` + + *Pusher: @$${{ github.actor }}, Action: \`$${{ github.event_name }}\`, Working Directory: \`$${{ env.tf_actions_working_dir }}\`, Workflow: \`$${{ github.workflow }}\`*`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) + + - id: pr-short-comment + name: Post comment to Pull Request + uses: actions/github-script@v6 + if: github.event_name == 'pull_request' && steps.pr-comment.outcome != 'success' + with: + script: | + const output = `### Terraform Initialization \`$${{ steps.tf-init.outcome }}\` + + ### Terraform Validation \`$${{ steps.tf-validate.outcome }}\` + + ### Terraform Plan \`$${{ steps.tf-plan.outcome }}\` + + Plan output is in the action log. + + ### Terraform Apply \`$${{ steps.tf-apply.outcome }}\` + + *Pusher: @$${{ github.actor }}, Action: \`$${{ github.event_name }}\`, Working Directory: \`$${{ env.tf_actions_working_dir }}\`, Workflow: \`$${{ github.workflow }}\`*`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) + + - id: check-plan + name: Check plan failure + if: steps.tf-plan.outcome != 'success' + run: exit 1 + + - id: check-apply + name: Check apply failure + if: github.event.pull_request.merged == true && steps.tf-apply.outcome != 'success' + run: exit 1 diff --git a/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-gitlab.yaml b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-gitlab.yaml new file mode 100644 index 00000000..739e7485 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-gitlab.yaml @@ -0,0 +1,124 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +default: + before_script: + - echo "$${CI_JOB_JWT_V2}" > token.txt + image: + name: hashicorp/terraform + entrypoint: + - "/usr/bin/env" + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +variables: + GOOGLE_CREDENTIALS: cicd-sa-credentials.json + FAST_OUTPUTS_BUCKET: ${outputs_bucket} + FAST_SERVICE_ACCOUNT: ${service_account} + FAST_WIF_PROVIDER: ${identity_provider} + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + %{~ if tf_providers_file != "" ~} + TF_PROVIDERS_FILE: ${tf_providers_file} + %{~ endif ~} + TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + +stages: + - gcp-auth + - tf-files + - tf-plan + - tf-apply + +cache: + key: gcp-auth + paths: + - cicd-sa-credentials.json + - .tf-setup + +gcp-auth: + image: + name: google/cloud-sdk:slim + stage: gcp-auth + script: + - | + gcloud iam workload-identity-pools create-cred-config \ + $${FAST_WIF_PROVIDER} \ + --service-account=$${FAST_SERVICE_ACCOUNT} \ + --service-account-token-lifetime-seconds=3600 \ + --output-file=$${GOOGLE_CREDENTIALS} \ + --credential-source-file=token.txt +tf-files: + dependencies: + - gcp-auth + image: + name: google/cloud-sdk:slim + stage: tf-files + script: + # - gcloud components install -q alpha + - gcloud config set auth/credential_file_override $${GOOGLE_CREDENTIALS} + - mkdir -p .tf-setup + %{~ if tf_providers_file != "" ~} + - | + gcloud alpha storage cp -r \ + "gs://$${FAST_OUTPUTS_BUCKET}/providers/$${TF_PROVIDERS_FILE}" .tf-setup/ + %{~ endif ~} + - | + gcloud alpha storage cp -r \ + "gs://$${FAST_OUTPUTS_BUCKET}/tfvars" .tf-setup/ + +tf-plan: + # uncomment the following lines and set the SSH key secret for private modules repo + # before_script: + # - | + # ssh-agent -a $SSH_AUTH_SOCK > /dev/null + # echo "$CICD_MODULES_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null + # mkdir -p ~/.ssh + # ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts + # ssh-keyscan gitlab.com | sort -u - ~/.ssh/known_hosts -o ~/.ssh/known_hosts + stage: tf-plan + script: + - cp .tf-setup/$${TF_PROVIDERS_FILE} ./ + - | + for f in $${TF_VAR_FILES}; do + ln -s ".tf-setup/tfvars/$f" ./ + done + - terraform init + - terraform validate + - terraform plan + dependencies: + - tf-files + +tf-apply: + # uncomment the following lines and set the SSH key secret for private modules repo + # before_script: + # - | + # ssh-agent -a $SSH_AUTH_SOCK > /dev/null + # echo "$CICD_MODULES_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null + # mkdir -p ~/.ssh + # ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts + # ssh-keyscan gitlab.com | sort -u - ~/.ssh/known_hosts -o ~/.ssh/known_hosts + stage: tf-apply + script: + - cp .tf-setup/$${TF_PROVIDERS_FILE} ./ + - | + for f in $${TF_VAR_FILES}; do + ln -s ".tf-setup/tfvars/$f" ./ + done + - terraform init + - terraform validate + - terraform apply -input=false -auto-approve + dependencies: + - tf-files + when: manual + only: + variables: + - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH diff --git a/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-sourcerepo.yaml b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-sourcerepo.yaml new file mode 100644 index 00000000..e171c45e --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/templates/workflow-sourcerepo.yaml @@ -0,0 +1,100 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +steps: + - name: alpine:3 + id: tf-download + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + mkdir -p /builder/home/.local/bin + wget https://releases.hashicorp.com/terraform/$${_TF_VERSION}/terraform_$${_TF_VERSION}_linux_amd64.zip + unzip terraform_$${_TF_VERSION}_linux_amd64.zip -d /builder/home/.local/bin + rm terraform_$${_TF_VERSION}_linux_amd64.zip + chmod 755 /builder/home/.local/bin/terraform + - name: alpine:3 + id: tf-check-format + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform fmt -recursive -check /workspace/ + - name: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine + id: tf-files + entrypoint: bash + args: + - -eEuo + - pipefail + - -c + - |- + %{~ if tf_providers_file != "" ~} + /google-cloud-sdk/bin/gsutil cp \ + gs://$${_FAST_OUTPUTS_BUCKET}/providers/$${_TF_PROVIDERS_FILE} ./ + %{~ endif ~} + /google-cloud-sdk/bin/gsutil cp -r \ + gs://$${_FAST_OUTPUTS_BUCKET}/tfvars ./ + for f in $${_TF_VAR_FILES}; do + ln -s tfvars/$f ./ + done + - name: alpine:3 + id: tf-init + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform init -no-color + - name: alpine:3 + id: tf-check-validate + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform validate -no-color + - name: alpine:3 + id: tf-plan + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform plan -no-color -input=false -out plan.out + # store artifact and ask for approval here if needed + - name: alpine:3 + id: tf-apply + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform apply -no-color -input=false -auto-approve plan.out +options: + env: + - PATH=/usr/local/bin:/usr/bin:/bin:/builder/home/.local/bin + logging: CLOUD_LOGGING_ONLY +substitutions: + _FAST_OUTPUTS_BUCKET: ${outputs_bucket} + _TF_PROVIDERS_FILE: ${tf_providers_file} + _TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + _TF_VERSION: 1.3.2 diff --git a/fast/stages-multitenant/0-bootstrap-tenant/variables.tf b/fast/stages-multitenant/0-bootstrap-tenant/variables.tf new file mode 100644 index 00000000..1a0134b0 --- /dev/null +++ b/fast/stages-multitenant/0-bootstrap-tenant/variables.tf @@ -0,0 +1,305 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# defaults for variables marked with global tfdoc annotations, can be set via +# the tfvars file generated in stage 00 and stored in its outputs + +variable "automation" { + # tfdoc:variable:source 0-bootstrap + description = "Automation resources created by the organization-level bootstrap stage." + type = object({ + outputs_bucket = string + project_id = string + project_number = string + federated_identity_pool = string + federated_identity_providers = map(object({ + issuer = string + issuer_uri = string + name = string + principal_tpl = string + principalset_tpl = string + })) + }) +} + +variable "billing_account" { + # tfdoc:variable:source 0-bootstrap + description = "Billing account id. If billing account is not part of the same org set `is_org_level` to false." + type = object({ + id = string + is_org_level = optional(bool, true) + }) + validation { + condition = var.billing_account.is_org_level != null + error_message = "Invalid `null` value for `billing_account.is_org_level`." + } +} + +variable "cicd_repositories" { + description = "CI/CD repository configuration. Identity providers reference keys in the `federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed." + type = object({ + bootstrap = optional(object({ + branch = optional(string) + identity_provider = string + name = string + type = string + })) + resman = optional(object({ + branch = optional(string) + identity_provider = string + name = string + type = string + })) + }) + default = null + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || try(v.name, null) != null + ]) + error_message = "Non-null repositories need a non-null name." + } + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || ( + try(v.identity_provider, null) != null + || + try(v.type, null) == "sourcerepo" + ) + ]) + error_message = "Non-null repositories need a non-null provider unless type is 'sourcerepo'." + } + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || ( + contains(["github", "gitlab", "sourcerepo"], coalesce(try(v.type, null), "null")) + ) + ]) + error_message = "Invalid repository type, supported types: 'github' 'gitlab' or 'sourcerepo'." + } +} + +variable "custom_roles" { + # tfdoc:variable:source 0-bootstrap + description = "Custom roles defined at the organization level, in key => id format." + type = object({ + service_project_network_admin = string + }) + default = null +} + +variable "fast_features" { + # tfdoc:variable:source 0-bootstrap + description = "Selective control for top-level FAST features." + type = object({ + data_platform = optional(bool, true) + gke = optional(bool, true) + project_factory = optional(bool, true) + sandbox = optional(bool, true) + teams = optional(bool, true) + }) + default = {} + nullable = false +} + +variable "federated_identity_providers" { + description = "Workload Identity Federation pools. The `cicd_repositories` variable references keys here." + type = map(object({ + attribute_condition = string + issuer = string + custom_settings = object({ + issuer_uri = string + allowed_audiences = list(string) + }) + })) + default = {} + nullable = false +} + +variable "group_iam" { + description = "Tenant-level custom group IAM settings in group => [roles] format." + type = map(list(string)) + default = {} +} + +variable "iam" { + description = "Tenant-level custom IAM settings in role => [principal] format." + type = map(list(string)) + default = {} +} + +variable "iam_additive" { + description = "Tenant-level custom IAM settings in role => [principal] format for non-authoritative bindings." + type = map(list(string)) + default = {} +} + +variable "locations" { + # tfdoc:variable:source 0-bootstrap + description = "Optional locations for GCS, BigQuery, and logging buckets created here. These are the defaults set at the organization level, and can be overridden via the tenant config variable." + type = object({ + bq = string + gcs = string + logging = string + pubsub = list(string) + }) + default = { + bq = "EU" + gcs = "EU" + logging = "global" + pubsub = [] + } + nullable = false +} + +# See https://cloud.google.com/architecture/exporting-stackdriver-logging-for-security-and-access-analytics +# for additional logging filter examples +variable "log_sinks" { + description = "Tenant-level log sinks, in name => {type, filter} format." + type = map(object({ + filter = string + type = string + })) + default = { + audit-logs = { + filter = "logName:\"/logs/cloudaudit.googleapis.com%2Factivity\" OR logName:\"/logs/cloudaudit.googleapis.com%2Fsystem_event\"" + type = "logging" + } + } + validation { + condition = alltrue([ + for k, v in var.log_sinks : + contains(["bigquery", "logging", "pubsub", "storage"], v.type) + ]) + error_message = "Type must be one of 'bigquery', 'logging', 'pubsub', 'storage'." + } +} + +variable "organization" { + # tfdoc:variable:source 0-bootstrap + description = "Organization details." + type = object({ + domain = string + id = number + customer_id = string + }) +} + +variable "outputs_location" { + description = "Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable." + type = string + default = null +} + +variable "prefix" { + # tfdoc:variable:source 0-bootstrap + description = "Prefix used for resources that need unique names. Use 9 characters or less." + type = string + validation { + condition = try(length(var.prefix), 0) < 10 + error_message = "Use a maximum of 9 characters for prefix." + } +} + +variable "project_parent_ids" { + description = "Optional parents for projects created here in folders/nnnnnnn format. Null values will use the tenant folder as parent." + type = object({ + automation = string + logging = string + }) + default = { + automation = null + logging = null + } + nullable = false +} + +variable "tag_keys" { + # tfdoc:variable:source 1-resman + description = "Organization tag keys." + type = object({ + context = string + environment = string + tenant = string + }) + nullable = false +} + +variable "tag_names" { + # tfdoc:variable:source 1-resman + description = "Customized names for resource management tags." + type = object({ + context = string + environment = string + tenant = string + }) + nullable = false +} + +variable "tag_values" { + # tfdoc:variable:source 1-resman + description = "Organization resource management tag values." + type = map(string) + nullable = false +} + +variable "tenant_config" { + description = "Tenant configuration. Short name must be 4 characters or less." + type = object({ + descriptive_name = string + groups = object({ + gcp-admins = string + gcp-devops = optional(string) + gcp-network-admins = optional(string) + gcp-security-admins = optional(string) + }) + short_name = string + fast_features = optional(object({ + data_platform = optional(bool) + gke = optional(bool) + project_factory = optional(bool) + sandbox = optional(bool) + teams = optional(bool) + }), {}) + locations = optional(object({ + bq = optional(string) + gcs = optional(string) + logging = optional(string) + pubsub = optional(list(string)) + }), {}) + }) + nullable = false + validation { + condition = alltrue([ + for a in ["descriptive_name", "groups", "short_name"] : + var.tenant_config[a] != null + ]) + error_message = "Non-optional members must not be null." + } + validation { + condition = length(var.tenant_config.short_name) < 5 + error_message = "Short name must be a string of 4 characters or less." + } +} + + +variable "test_principal" { + description = "Used when testing to bypass the data source returning the current identity." + type = string + default = null +} diff --git a/fast/stages-multitenant/1-resman-tenant/IAM.md b/fast/stages-multitenant/1-resman-tenant/IAM.md new file mode 100644 index 00000000..16db4a6c --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/IAM.md @@ -0,0 +1,60 @@ +# IAM bindings reference + +Legend: + additive, conditional. + +## Folder development [#0] + +| members | roles | +|---|---| +|tn0-gke-dev-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder development [#1] + +| members | roles | +|---|---| +|tn0-gke-dev-0
serviceAccount|organizations/[org_id #0]/roles/serviceProjectNetworkAdmin | +|tn0-pf-dev-0
serviceAccount|organizations/[org_id #0]/roles/serviceProjectNetworkAdmin | + +## Folder networking + +| members | roles | +|---|---| +|tn0-networking-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder production [#0] + +| members | roles | +|---|---| +|tn0-gke-prod-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder production [#1] + +| members | roles | +|---|---| +|tn0-gke-prod-0
serviceAccount|organizations/[org_id #0]/roles/serviceProjectNetworkAdmin | +|tn0-pf-prod-0
serviceAccount|organizations/[org_id #0]/roles/serviceProjectNetworkAdmin | + +## Folder sandbox + +| members | roles | +|---|---| +|tn0-sandbox-0
serviceAccount|[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder security + +| members | roles | +|---|---| +|tn0-security-0
serviceAccount|[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder teams + +| members | roles | +|---|---| +|tn0-teams-0
serviceAccount|[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin)
[roles/logging.admin](https://cloud.google.com/iam/docs/understanding-roles#logging.admin)
[roles/owner](https://cloud.google.com/iam/docs/understanding-roles#owner)
[roles/resourcemanager.folderAdmin](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.folderAdmin)
[roles/resourcemanager.projectCreator](https://cloud.google.com/iam/docs/understanding-roles#resourcemanager.projectCreator) | + +## Folder test tenant 0 + +| members | roles | +|---|---| +|tn0-networking-0
serviceAccount|[roles/compute.orgFirewallPolicyAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.orgFirewallPolicyAdmin) +
[roles/compute.xpnAdmin](https://cloud.google.com/iam/docs/understanding-roles#compute.xpnAdmin) +| +|tn0-security-0
serviceAccount|[roles/accesscontextmanager.policyAdmin](https://cloud.google.com/iam/docs/understanding-roles#accesscontextmanager.policyAdmin) +| diff --git a/fast/stages-multitenant/1-resman-tenant/README.md b/fast/stages-multitenant/1-resman-tenant/README.md new file mode 100644 index 00000000..ae42fc30 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/README.md @@ -0,0 +1,184 @@ +# Tenant resource management + +This stage is run for a specific tenant after [tenant bootstrap](../0-bootstrap-tenant/) has successfully created initial resources for the tenant, which is then decoupled from the organization. + +It is logically equivalent and almost identical in code to the corresponding [organization resource management stage](../../stages/1-resman/), with a few notable differences: + +- the hierarchy is rooted in the tenant top-level folder instead of the organization +- there's no management of tag values and keys since they organization-level resources (it could be implemented for tenant-specific tags if the need arises) +- automation service accounts for subsequent stages are configured but not created here (tenant-level bootstrap creates them and assigns organization-level permissions) + +The stage runs with a dedicated service account for the tenant, which has no permissions at the organization level except for billing and organization policies, constrained by a condition on the tenant tag. + +The following diagram is a high level reference of what this stage manages, showing one hypothetical tenant (additional tenants require additional instances of this stage being deployed): + +```mermaid +%%{init: {'theme':'base'}}%% +classDiagram + Tenant_root~📁~ -- tn0_automation + Tenant_root~📁~ -- Networking~📁~ + Tenant_root~📁~ -- Security~📁~ + Tenant_root~📁~ -- Data_Platform~📁~ + Data_Platform~📁~ -- DP_Dev~📁~ + Data_Platform~📁~ -- DP_Prod~📁~ + Tenant_root~📁~ -- GKE~📁~ + GKE~📁~ -- GKE_Dev~📁~ + GKE~📁~ -- GKE_Prod~📁~ + Tenant_root~📁~ -- Teams~📁~ + Teams~📁~ -- Team_0~📁~ + Team_0~📁~ -- Team_0_Dev~📁~ + Team_0~📁~ -- Team_0_Prod~📁~ + Tenant_root~📁~ -- Sandbox~📁~ + class Tenant_root~📁~ { + - IAM bindings() + - org policies() + } + class tn0_automation { + - GCS buckets + - IAM bindings() + } + class Data_Platform~📁~ { + - IAM bindings() + - tag bindings() + } + class DP_Dev~📁~ { + - IAM bindings() + - tag bindings() + } + class DP_Prod~📁~ { + - IAM bindings() + - tag bindings() + } + class GKE~📁~ { + - IAM bindings() + - tag bindings() + } + class GKE_Dev~📁~ { + - IAM bindings() + - tag bindings() + } + class GKE_Prod~📁~ { + - IAM bindings() + - tag bindings() + } + class Networking~📁~ { + - IAM bindings() + - tag bindings() + } + class Security~📁~ { + - IAM bindings() + - tag bindings() + } + class Sandbox~📁~ { + - IAM bindings() + - tag bindings() + } + class Teams~📁~ { + - IAM bindings() + - tag bindings() + } + class Team_0~📁~ { + - IAM bindings() + - tag bindings() + } + class Team_0_Dev~📁~ { + - IAM bindings() + - tag bindings() + } + class Team_0_Prod~📁~ { + - IAM bindings() + - tag bindings() + } +``` + +As most of the features of this stage follow the same design and configurations of the [organization-level resource management stage](../../stages/1-resman/), we will only focus on the tenant-specific configuration in this document. + +## How to run this stage + +As mentioned above this stage is decoupled from organization-level stages: it uses a service account and state bucket from the tenant-specific automation project, and its tfvars and provider files are also tenant-specific. + +The `stage-links.sh` script can be used to get the commands needed for the provider and output files, just set the variable for the tenant shortname (the same one specified in the tenant bootstrap stage) and pass a single argument with your FAST output files folder path, or GCS bucket URI: + +```bash +TENANT=tn0 ../../stage-links.sh ~/fast-config +``` + +The script output can be copy/pasted to a terminal: + +```bash +# copy and paste the following commands for '1-resman-tenant' + +ln -s ~/fast-config/tenants/tn0/providers/1-resman-tenant-providers.tf ./ +ln -s ~/fast-config/tenants/tn0/tfvars/0-bootstrap-tenant.auto.tfvars.json ./ +``` + +Once that is done, stage-level configuration variables are the same as the corresponding organization-level stage. + +### Running the stage + +Once the configuration is done just go through the usual `init/apply` cycle. On successful apply, a tfvars file specific for this tenant and a set of provider files will be created. + + + + +## Files + +| name | description | modules | resources | +|---|---|---|---| +| [branch-data-platform.tf](./branch-data-platform.tf) | Data Platform stages resources. | folder · gcs · iam-service-account | | +| [branch-gke.tf](./branch-gke.tf) | GKE multitenant stage resources. | folder · gcs · iam-service-account | | +| [branch-networking.tf](./branch-networking.tf) | Networking stage resources. | folder · gcs · iam-service-account | | +| [branch-project-factory.tf](./branch-project-factory.tf) | Project factory stage resources. | gcs · iam-service-account | | +| [branch-sandbox.tf](./branch-sandbox.tf) | Sandbox stage resources. | folder · gcs | | +| [branch-security.tf](./branch-security.tf) | Security stage resources. | folder · gcs · iam-service-account | | +| [branch-teams.tf](./branch-teams.tf) | Team stage resources. | folder · gcs · iam-service-account | | +| [cicd-data-platform.tf](./cicd-data-platform.tf) | CI/CD resources for the data platform branch. | iam-service-account · source-repository | | +| [cicd-gke.tf](./cicd-gke.tf) | CI/CD resources for the data platform branch. | iam-service-account · source-repository | | +| [cicd-networking.tf](./cicd-networking.tf) | CI/CD resources for the networking branch. | iam-service-account · source-repository | | +| [cicd-project-factory.tf](./cicd-project-factory.tf) | CI/CD resources for the teams branch. | iam-service-account · source-repository | | +| [cicd-security.tf](./cicd-security.tf) | CI/CD resources for the security branch. | iam-service-account · source-repository | | +| [main.tf](./main.tf) | Module-level locals and resources. | | | +| [outputs-files.tf](./outputs-files.tf) | Output files persistence to local filesystem. | | local_file | +| [outputs-gcs.tf](./outputs-gcs.tf) | Output files persistence to automation GCS bucket. | | google_storage_bucket_object | +| [outputs.tf](./outputs.tf) | Module outputs. | | | +| [root_node.tf](./root_node.tf) | Tenant root folder configuration. | folder | | +| [variables.tf](./variables.tf) | Module variables. | | | + +## Variables + +| name | description | type | required | default | producer | +|---|---|:---:|:---:|:---:|:---:| +| [automation](variables.tf#L20) | Automation resources created by the bootstrap stage. | object({…}) | ✓ | | 0-bootstrap | +| [billing_account](variables.tf#L51) | Billing account id. If billing account is not part of the same org set `is_org_level` to false. | object({…}) | ✓ | | 0-bootstrap | +| [organization](variables.tf#L206) | Organization details. | object({…}) | ✓ | | 0-bootstrap | +| [prefix](variables.tf#L228) | Prefix used for resources that need unique names. Use 9 characters or less. | string | ✓ | | 0-bootstrap | +| [root_node](variables.tf#L239) | Root folder node for the tenant, in folders/nnnnnn format. | string | ✓ | | | +| [short_name](variables.tf#L244) | Short name used to identify the tenant. | string | ✓ | | | +| [tags](variables.tf#L249) | Resource management tags. | object({…}) | ✓ | | | +| [cicd_repositories](variables.tf#L64) | CI/CD repository configuration. Identity providers reference keys in the `automation.federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed. | object({…}) | | null | | +| [custom_roles](variables.tf#L146) | Custom roles defined at the org level, in key => id format. | object({…}) | | null | 0-bootstrap | +| [data_dir](variables.tf#L155) | Relative path for the folder storing configuration data. | string | | "data" | | +| [fast_features](variables.tf#L161) | Selective control for top-level FAST features. | object({…}) | | {} | 0-0-bootstrap | +| [groups](variables.tf#L175) | Group names to grant organization-level permissions. | object({…}) | | {} | 0-bootstrap | +| [locations](variables.tf#L188) | Optional locations for GCS, BigQuery, and logging buckets created here. | object({…}) | | {…} | 0-bootstrap | +| [organization_policy_data_path](variables.tf#L216) | Path for the data folder used by the organization policies factory. | string | | null | | +| [outputs_location](variables.tf#L222) | Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable. | string | | null | | +| [team_folders](variables.tf#L267) | Team folders to be created. Format is described in a code comment. | map(object({…})) | | null | | +| [test_skip_data_sources](variables.tf#L277) | Used when testing to bypass data sources. | bool | | false | | + +## Outputs + +| name | description | sensitive | consumers | +|---|---|:---:|---| +| [cicd_repositories](outputs.tf#L189) | WIF configuration for CI/CD repositories. | | | +| [dataplatform](outputs.tf#L203) | Data for the Data Platform stage. | | | +| [gke_multitenant](outputs.tf#L219) | Data for the GKE multitenant stage. | | 03-gke-multitenant | +| [networking](outputs.tf#L240) | Data for the networking stage. | | | +| [project_factories](outputs.tf#L249) | Data for the project factories stage. | | | +| [providers](outputs.tf#L264) | Terraform provider files for this stage and dependent stages. | ✓ | 02-networking · 02-security · 03-dataplatform · xx-sandbox · xx-teams | +| [sandbox](outputs.tf#L271) | Data for the sandbox stage. | | xx-sandbox | +| [security](outputs.tf#L285) | Data for the networking stage. | | 02-security | +| [teams](outputs.tf#L295) | Data for the teams stage. | | | +| [tfvars](outputs.tf#L307) | Terraform variable files for the following stages. | ✓ | | + + diff --git a/fast/stages-multitenant/1-resman-tenant/branch-data-platform.tf b/fast/stages-multitenant/1-resman-tenant/branch-data-platform.tf new file mode 100644 index 00000000..3916d635 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-data-platform.tf @@ -0,0 +1,133 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Data Platform stages resources. + +module "branch-dp-folder" { + source = "../../../modules/folder" + count = var.fast_features.data_platform ? 1 : 0 + parent = module.root-folder.id + name = "Data Platform" + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/data"] + } +} + +module "branch-dp-dev-folder" { + source = "../../../modules/folder" + count = var.fast_features.data_platform ? 1 : 0 + parent = module.branch-dp-folder.0.id + name = "Development" + group_iam = {} + iam = { + (local.custom_roles.service_project_network_admin) = [ + local.automation_sas_iam.dp-dev + ] + # remove owner here and at project level if SA does not manage project resources + "roles/owner" = [local.automation_sas_iam.dp-dev] + "roles/logging.admin" = [local.automation_sas_iam.dp-dev] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.dp-dev] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.dp-dev] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.environment}/development"] + } +} + +module "branch-dp-prod-folder" { + source = "../../../modules/folder" + count = var.fast_features.data_platform ? 1 : 0 + parent = module.branch-dp-folder.0.id + name = "Production" + group_iam = {} + iam = { + (local.custom_roles.service_project_network_admin) = [ + local.automation_sas_iam.dp-prod + ] + # remove owner here and at project level if SA does not manage project resources + "roles/owner" = [local.automation_sas_iam.dp-prod] + "roles/logging.admin" = [local.automation_sas_iam.dp-prod] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.dp-prod] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.dp-prod] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.environment}/production"] + } +} + +# automation service accounts and buckets + +module "branch-dp-dev-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.data_platform ? 1 : 0 + project_id = var.automation.project_id + name = "dp-dev-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-dp-dev-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-dp-prod-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.data_platform ? 1 : 0 + project_id = var.automation.project_id + name = "dp-prod-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-dp-prod-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-dp-dev-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.data_platform ? 1 : 0 + project_id = var.automation.project_id + name = "dev-resman-dp-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.dp-dev] + } +} + +module "branch-dp-prod-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.data_platform ? 1 : 0 + project_id = var.automation.project_id + name = "prod-resman-dp-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.dp-prod] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-gke.tf b/fast/stages-multitenant/1-resman-tenant/branch-gke.tf new file mode 100644 index 00000000..9ece810b --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-gke.tf @@ -0,0 +1,133 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description GKE multitenant stage resources. + +module "branch-gke-folder" { + source = "../../../modules/folder" + count = var.fast_features.gke ? 1 : 0 + parent = module.root-folder.id + name = "GKE" + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/gke"] + } +} + +module "branch-gke-dev-folder" { + source = "../../../modules/folder" + count = var.fast_features.gke ? 1 : 0 + parent = module.branch-gke-folder.0.id + name = "Development" + iam = { + "roles/owner" = [local.automation_sas_iam.gke-dev] + "roles/logging.admin" = [local.automation_sas_iam.gke-dev] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.gke-dev] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.gke-dev] + "roles/compute.xpnAdmin" = [local.automation_sas_iam.gke-dev] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.environment}/development"] + } +} + +module "branch-gke-prod-folder" { + source = "../../../modules/folder" + count = var.fast_features.gke ? 1 : 0 + parent = module.branch-gke-folder.0.id + name = "Production" + iam = { + "roles/owner" = [local.automation_sas_iam.gke-prod] + "roles/logging.admin" = [local.automation_sas_iam.gke-prod] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.gke-prod] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.gke-prod] + "roles/compute.xpnAdmin" = [local.automation_sas_iam.gke-prod] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.environment}/production"] + } +} + +module "branch-gke-dev-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.gke ? 1 : 0 + project_id = var.automation.project_id + name = "gke-dev-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = concat( + ( + local.groups.gcp-devops == null + ? [] + : ["group:${local.groups.gcp-devops}"] + ), + compact([ + try(module.branch-gke-dev-sa-cicd.0.iam_email, null) + ]) + ) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-gke-prod-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.gke ? 1 : 0 + project_id = var.automation.project_id + name = "gke-prod-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = concat( + ( + local.groups.gcp-devops == null + ? [] + : ["group:${local.groups.gcp-devops}"] + ), + compact([ + try(module.branch-gke-prod-sa-cicd.0.iam_email, null) + ]) + ) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-gke-dev-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.gke ? 1 : 0 + project_id = var.automation.project_id + name = "dev-resman-gke-0" + prefix = var.prefix + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.gke-dev] + } +} + +module "branch-gke-prod-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.gke ? 1 : 0 + project_id = var.automation.project_id + name = "prod-resman-gke-0" + prefix = var.prefix + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.gke-prod] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-networking.tf b/fast/stages-multitenant/1-resman-tenant/branch-networking.tf new file mode 100644 index 00000000..85490baf --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-networking.tf @@ -0,0 +1,107 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Networking stage resources. + +module "branch-network-folder" { + source = "../../../modules/folder" + parent = module.root-folder.id + name = "Networking" + group_iam = local.groups.gcp-network-admins == null ? {} : { + (local.groups.gcp-network-admins) = [ + # add any needed roles for resources/services not managed via Terraform, + # or replace editor with ~viewer if no broad resource management needed + # e.g. + # "roles/compute.networkAdmin", + # "roles/dns.admin", + # "roles/compute.securityAdmin", + "roles/editor", + ] + } + iam = { + "roles/logging.admin" = [local.automation_sas_iam.networking] + "roles/owner" = [local.automation_sas_iam.networking] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.networking] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.networking] + "roles/compute.xpnAdmin" = [local.automation_sas_iam.networking] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/networking"] + } +} + +module "branch-network-prod-folder" { + source = "../../../modules/folder" + parent = module.branch-network-folder.id + name = "Production" + iam = { + (local.custom_roles.service_project_network_admin) = concat( + local.branch_optional_sa_lists.dp-prod, + local.branch_optional_sa_lists.gke-prod, + local.branch_optional_sa_lists.pf-prod, + ) + } + tag_bindings = { + environment = var.tags.values["${var.tags.names.environment}/production"] + } +} + +module "branch-network-dev-folder" { + source = "../../../modules/folder" + parent = module.branch-network-folder.id + name = "Development" + iam = { + (local.custom_roles.service_project_network_admin) = concat( + local.branch_optional_sa_lists.dp-dev, + local.branch_optional_sa_lists.gke-dev, + local.branch_optional_sa_lists.pf-dev, + ) + } + tag_bindings = { + environment = var.tags.values["${var.tags.names.environment}/development"] + } +} + +# automation service account and bucket + +module "branch-network-sa" { + source = "../../../modules/iam-service-account" + project_id = var.automation.project_id + name = "networking-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-network-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-network-gcs" { + source = "../../../modules/gcs" + project_id = var.automation.project_id + name = "prod-resman-net-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.networking] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-project-factory.tf b/fast/stages-multitenant/1-resman-tenant/branch-project-factory.tf new file mode 100644 index 00000000..2fa64bbc --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-project-factory.tf @@ -0,0 +1,79 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Project factory stage resources. + +module "branch-pf-dev-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.project_factory ? 1 : 0 + project_id = var.automation.project_id + name = "pf-dev-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-pf-dev-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-pf-prod-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.project_factory ? 1 : 0 + project_id = var.automation.project_id + name = "pf-prod-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-pf-prod-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-pf-dev-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.project_factory ? 1 : 0 + project_id = var.automation.project_id + name = "dev-resman-pf-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.pf-dev] + } +} + +module "branch-pf-prod-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.project_factory ? 1 : 0 + project_id = var.automation.project_id + name = "prod-resman-pf-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.pf-prod] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-sandbox.tf b/fast/stages-multitenant/1-resman-tenant/branch-sandbox.tf new file mode 100644 index 00000000..6f3d526c --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-sandbox.tf @@ -0,0 +1,51 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Sandbox stage resources. + +module "branch-sandbox-folder" { + source = "../../../modules/folder" + count = var.fast_features.sandbox ? 1 : 0 + parent = module.root-folder.id + name = "Sandbox" + iam = { + "roles/logging.admin" = [local.automation_sas_iam.sandbox] + "roles/owner" = [local.automation_sas_iam.sandbox] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.sandbox] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.sandbox] + } + org_policies = { + "constraints/sql.restrictPublicIp" = { enforce = false } + "constraints/compute.vmExternalIpAccess" = { allow = { all = true } } + } + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/sandbox"] + } +} + +module "branch-sandbox-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.sandbox ? 1 : 0 + project_id = var.automation.project_id + name = "dev-resman-sbox-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.sandbox] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-security.tf b/fast/stages-multitenant/1-resman-tenant/branch-security.tf new file mode 100644 index 00000000..d7253cce --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-security.tf @@ -0,0 +1,76 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Security stage resources. + +module "branch-security-folder" { + source = "../../../modules/folder" + parent = module.root-folder.id + name = "Security" + group_iam = local.groups.gcp-security-admins == null ? {} : { + (local.groups.gcp-security-admins) = [ + # add any needed roles for resources/services not managed via Terraform, + # e.g. + # "roles/bigquery.admin", + # "roles/cloudasset.owner", + # "roles/cloudkms.admin", + # "roles/logging.admin", + # "roles/secretmanager.admin", + # "roles/storage.admin", + "roles/viewer" + ] + } + iam = { + "roles/logging.admin" = [local.automation_sas_iam.security] + "roles/owner" = [local.automation_sas_iam.security] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.security] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.security] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/security"] + } +} + +# automation service account and bucket + +module "branch-security-sa" { + source = "../../../modules/iam-service-account" + project_id = var.automation.project_id + name = "security-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam = { + "roles/iam.serviceAccountTokenCreator" = compact([ + try(module.branch-security-sa-cicd.0.iam_email, null) + ]) + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-security-gcs" { + source = "../../../modules/gcs" + project_id = var.automation.project_id + name = "prod-resman-sec-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [local.automation_sas_iam.security] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/branch-teams.tf b/fast/stages-multitenant/1-resman-tenant/branch-teams.tf new file mode 100644 index 00000000..57f22110 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/branch-teams.tf @@ -0,0 +1,163 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Team stage resources. + +# TODO(ludo): add support for CI/CD + +############### top-level Teams branch and automation resources ############### + +module "branch-teams-folder" { + source = "../../../modules/folder" + count = var.fast_features.teams ? 1 : 0 + parent = module.root-folder.id + name = "Teams" + iam = { + "roles/logging.admin" = [local.automation_sas_iam.teams] + "roles/owner" = [local.automation_sas_iam.teams] + "roles/resourcemanager.folderAdmin" = [local.automation_sas_iam.teams] + "roles/resourcemanager.projectCreator" = [local.automation_sas_iam.teams] + "roles/compute.xpnAdmin" = [local.automation_sas_iam.teams] + } + tag_bindings = { + context = var.tags.values["${var.tags.names.context}/teams"] + } +} + +module "branch-teams-sa" { + source = "../../../modules/iam-service-account" + count = var.fast_features.teams ? 1 : 0 + project_id = var.automation.project_id + name = "teams-0" + prefix = var.prefix + service_account_create = var.test_skip_data_sources + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.admin"] + } +} + +module "branch-teams-gcs" { + source = "../../../modules/gcs" + count = var.fast_features.teams ? 1 : 0 + project_id = var.automation.project_id + name = "prod-resman-teams-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [module.branch-teams-sa.0.iam_email] + } +} + +################## per-team folders and automation resources ################## + +module "branch-teams-team-folder" { + source = "../../../modules/folder" + for_each = var.fast_features.teams ? coalesce(var.team_folders, {}) : {} + parent = module.branch-teams-folder.0.id + name = each.value.descriptive_name + iam = { + "roles/logging.admin" = [module.branch-teams-team-sa[each.key].iam_email] + "roles/owner" = [module.branch-teams-team-sa[each.key].iam_email] + "roles/resourcemanager.folderAdmin" = [module.branch-teams-team-sa[each.key].iam_email] + "roles/resourcemanager.projectCreator" = [module.branch-teams-team-sa[each.key].iam_email] + "roles/compute.xpnAdmin" = [module.branch-teams-team-sa[each.key].iam_email] + } + group_iam = each.value.group_iam == null ? {} : each.value.group_iam +} + +module "branch-teams-team-sa" { + source = "../../../modules/iam-service-account" + for_each = var.fast_features.teams ? coalesce(var.team_folders, {}) : {} + project_id = var.automation.project_id + name = "prod-teams-${each.key}-0" + display_name = "Terraform team ${each.key} service account." + prefix = var.prefix + iam = { + "roles/iam.serviceAccountTokenCreator" = ( + each.value.impersonation_groups == null + ? [] + : [for g in each.value.impersonation_groups : "group:${g}"] + ) + } +} + +module "branch-teams-team-gcs" { + source = "../../../modules/gcs" + for_each = var.fast_features.teams ? coalesce(var.team_folders, {}) : {} + project_id = var.automation.project_id + name = "prod-teams-${each.key}-0" + prefix = var.prefix + location = var.locations.gcs + storage_class = local.gcs_storage_class + versioning = true + iam = { + "roles/storage.objectAdmin" = [module.branch-teams-team-sa[each.key].iam_email] + } +} + +# per-team environment folders where project factory SAs can create projects + +module "branch-teams-team-dev-folder" { + source = "../../../modules/folder" + for_each = var.fast_features.teams ? coalesce(var.team_folders, {}) : {} + parent = module.branch-teams-team-folder[each.key].id + # naming: environment descriptive name + name = "Development" + # environment-wide human permissions on the whole teams environment + group_iam = {} + iam = { + (local.custom_roles.service_project_network_admin) = ( + local.branch_optional_sa_lists.pf-dev + ) + # remove owner here and at project level if SA does not manage project resources + "roles/owner" = local.branch_optional_sa_lists.pf-dev + "roles/logging.admin" = local.branch_optional_sa_lists.pf-dev + "roles/resourcemanager.folderAdmin" = local.branch_optional_sa_lists.pf-dev + "roles/resourcemanager.projectCreator" = local.branch_optional_sa_lists.pf-dev + } + tag_bindings = { + environment = try( + var.tags.values["${var.tags.names.environment}/development"], null + ) + } +} + +module "branch-teams-team-prod-folder" { + source = "../../../modules/folder" + for_each = var.fast_features.teams ? coalesce(var.team_folders, {}) : {} + parent = module.branch-teams-team-folder[each.key].id + # naming: environment descriptive name + name = "Production" + # environment-wide human permissions on the whole teams environment + group_iam = {} + iam = { + (local.custom_roles.service_project_network_admin) = ( + local.branch_optional_sa_lists.pf-prod + ) + # remove owner here and at project level if SA does not manage project resources + "roles/owner" = local.branch_optional_sa_lists.pf-prod + "roles/logging.admin" = local.branch_optional_sa_lists.pf-prod + "roles/resourcemanager.folderAdmin" = local.branch_optional_sa_lists.pf-prod + "roles/resourcemanager.projectCreator" = local.branch_optional_sa_lists.pf-prod + } + tag_bindings = { + environment = try( + var.tags.values["${var.tags.names.environment}/production"], null + ) + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/cicd-data-platform.tf b/fast/stages-multitenant/1-resman-tenant/cicd-data-platform.tf new file mode 100644 index 00000000..704f45d7 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/cicd-data-platform.tf @@ -0,0 +1,173 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description CI/CD resources for the data platform branch. + +# source repositories + +module "branch-dp-dev-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.data_platform_dev.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.data_platform_dev } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = local.branch_optional_sa_lists.dp-dev + "roles/source.reader" = compact([ + try(module.branch-dp-dev-sa-cicd.0.iam_email, "") + ]) + } + triggers = { + fast-03-dp-dev = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-dp-dev-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-dp-dev-sa-cicd] +} + +module "branch-dp-prod-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.data_platform_prod.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.data_platform_prod } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = local.branch_optional_sa_lists.dp-prod + "roles/source.reader" = [module.branch-dp-prod-sa-cicd.0.iam_email] + } + triggers = { + fast-03-dp-prod = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-dp-prod-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-dp-prod-sa-cicd] +} + +# SAs used by CI/CD workflows to impersonate automation SAs + +module "branch-dp-dev-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.data_platform_dev.name, null) != null + ? { 0 = local.cicd_repositories.data_platform_dev } + : {} + ) + project_id = var.automation.project_id + name = "dev-resman-dp-1" + display_name = "Terraform CI/CD data platform development service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} + +module "branch-dp-prod-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.data_platform_prod.name, null) != null + ? { 0 = local.cicd_repositories.data_platform_prod } + : {} + ) + project_id = var.automation.project_id + name = "prod-resman-dp-1" + display_name = "Terraform CI/CD data platform production service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/cicd-gke.tf b/fast/stages-multitenant/1-resman-tenant/cicd-gke.tf new file mode 100644 index 00000000..dfd035a5 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/cicd-gke.tf @@ -0,0 +1,175 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description CI/CD resources for the data platform branch. + +# source repositories + +module "branch-gke-dev-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.gke_dev.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.gke_dev } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = compact([ + try(module.branch-gke-dev-sa.0.iam_email, "") + ]) + "roles/source.reader" = compact([ + try(module.branch-gke-dev-sa-cicd.0.iam_email, "") + ]) + } + triggers = { + fast-03-gke-dev = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-gke-dev-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-gke-dev-sa-cicd] +} + +module "branch-gke-prod-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.gke_prod.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.gke_prod } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = [module.branch-gke-prod-sa.0.iam_email] + "roles/source.reader" = [module.branch-gke-prod-sa-cicd.0.iam_email] + } + triggers = { + fast-03-gke-prod = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-gke-prod-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-gke-prod-sa-cicd] +} + +# SAs used by CI/CD workflows to impersonate automation SAs + +module "branch-gke-dev-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.gke_dev.name, null) != null + ? { 0 = local.cicd_repositories.gke_dev } + : {} + ) + project_id = var.automation.project_id + name = "dev-resman-gke-1" + display_name = "Terraform CI/CD GKE development service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} + +module "branch-gke-prod-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.gke_prod.name, null) != null + ? { 0 = local.cicd_repositories.gke_prod } + : {} + ) + project_id = var.automation.project_id + name = "prod-resman-gke-1" + display_name = "Terraform CI/CD GKE production service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/cicd-networking.tf b/fast/stages-multitenant/1-resman-tenant/cicd-networking.tf new file mode 100644 index 00000000..dbaf587d --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/cicd-networking.tf @@ -0,0 +1,94 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description CI/CD resources for the networking branch. + +# source repository + +module "branch-network-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.networking.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.networking } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = [module.branch-network-sa.iam_email] + "roles/source.reader" = [module.branch-network-sa-cicd.0.iam_email] + } + triggers = { + fast-02-networking = { + filename = ".cloudbuild/workflow.yaml" + included_files = ["**/*tf", ".cloudbuild/workflow.yaml"] + service_account = module.branch-network-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-network-sa-cicd] +} + +# SA used by CI/CD workflows to impersonate automation SAs + +module "branch-network-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.networking.name, null) != null + ? { 0 = local.cicd_repositories.networking } + : {} + ) + project_id = var.automation.project_id + name = "prod-resman-net-1" + display_name = "Terraform CI/CD stage 2 networking service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/cicd-project-factory.tf b/fast/stages-multitenant/1-resman-tenant/cicd-project-factory.tf new file mode 100644 index 00000000..4c46d858 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/cicd-project-factory.tf @@ -0,0 +1,191 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description CI/CD resources for the teams branch. + +# source repositories + +moved { + from = module.branch-teams-dev-pf-cicd-repo + to = module.branch-pf-dev-cicd-repo +} + +module "branch-pf-dev-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.project_factory_dev.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.project_factory_dev } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = local.branch_optional_sa_lists.pf-dev + "roles/source.reader" = [module.branch-pf-dev-sa-cicd.0.iam_email] + } + triggers = { + fast-03-pf-dev = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-pf-dev-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-pf-dev-sa-cicd] +} + +moved { + from = module.branch-teams-prod-pf-cicd-repo + to = module.branch-pf-prod-cicd-repo +} + +module "branch-pf-prod-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.project_factory_prod.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.project_factory_prod } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = local.branch_optional_sa_lists.pf-prod + "roles/source.reader" = [module.branch-pf-prod-sa-cicd.0.iam_email] + } + triggers = { + fast-03-pf-prod = { + filename = ".cloudbuild/workflow.yaml" + included_files = [ + "**/*json", "**/*tf", "**/*yaml", ".cloudbuild/workflow.yaml" + ] + service_account = module.branch-pf-prod-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-pf-prod-sa-cicd] +} + +# SAs used by CI/CD workflows to impersonate automation SAs + +moved { + from = module.branch-teams-dev-pf-sa-cicd + to = module.branch-pf-dev-sa-cicd +} + +module "branch-pf-dev-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.project_factory_dev.name, null) != null + ? { 0 = local.cicd_repositories.project_factory_dev } + : {} + ) + project_id = var.automation.project_id + name = "dev-pf-resman-pf-1" + display_name = "Terraform CI/CD project factory development service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} + +moved { + from = module.branch-teams-prod-pf-sa-cicd + to = module.branch-pf-prod-sa-cicd +} + +module "branch-pf-prod-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.project_factory_prod.name, null) != null + ? { 0 = local.cicd_repositories.project_factory_prod } + : {} + ) + project_id = var.automation.project_id + name = "prod-pf-resman-pf-1" + display_name = "Terraform CI/CD project factory production service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + var.automation.federated_identity_pool, + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + var.automation.federated_identity_pool, + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/cicd-security.tf b/fast/stages-multitenant/1-resman-tenant/cicd-security.tf new file mode 100644 index 00000000..5cb1581c --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/cicd-security.tf @@ -0,0 +1,94 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description CI/CD resources for the security branch. + +# source repository + +module "branch-security-cicd-repo" { + source = "../../../modules/source-repository" + for_each = ( + try(local.cicd_repositories.security.type, null) == "sourcerepo" + ? { 0 = local.cicd_repositories.security } + : {} + ) + project_id = var.automation.project_id + name = each.value.name + iam = { + "roles/source.admin" = [module.branch-security-sa.iam_email] + "roles/source.reader" = [module.branch-security-sa-cicd.0.iam_email] + } + triggers = { + fast-02-security = { + filename = ".cloudbuild/workflow.yaml" + included_files = ["**/*tf", ".cloudbuild/workflow.yaml"] + service_account = module.branch-security-sa-cicd.0.id + substitutions = {} + template = { + project_id = null + branch_name = each.value.branch + repo_name = each.value.name + tag_name = null + } + } + } + depends_on = [module.branch-security-sa-cicd] +} + +# SA used by CI/CD workflows to impersonate automation SAs + +module "branch-security-sa-cicd" { + source = "../../../modules/iam-service-account" + for_each = ( + try(local.cicd_repositories.security.name, null) != null + ? { 0 = local.cicd_repositories.security } + : {} + ) + project_id = var.automation.project_id + name = "prod-resman-sec-1" + display_name = "Terraform CI/CD stage 2 security service account." + prefix = var.prefix + iam = ( + each.value.type == "sourcerepo" + # used directly from the cloud build trigger for source repos + ? { + "roles/iam.serviceAccountUser" = local.automation_resman_sa_iam + } + # impersonated via workload identity federation for external repos + : { + "roles/iam.workloadIdentityUser" = [ + each.value.branch == null + ? format( + local.cicd_identity_providers[each.value.identity_provider].principalset_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name + ) + : format( + local.cicd_identity_providers[each.value.identity_provider].principal_tpl, + local.cicd_identity_pools[each.value.identity_provider], + each.value.name, + each.value.branch + ) + ] + } + ) + iam_project_roles = { + (var.automation.project_id) = ["roles/logging.logWriter"] + } + iam_storage_roles = { + (var.automation.outputs_bucket) = ["roles/storage.objectViewer"] + } +} diff --git a/fast/stages/01-resman/data/org-policies/compute.yaml b/fast/stages-multitenant/1-resman-tenant/data/org-policies/compute.yaml similarity index 100% rename from fast/stages/01-resman/data/org-policies/compute.yaml rename to fast/stages-multitenant/1-resman-tenant/data/org-policies/compute.yaml diff --git a/fast/stages/01-resman/data/org-policies/iam.yaml b/fast/stages-multitenant/1-resman-tenant/data/org-policies/iam.yaml similarity index 100% rename from fast/stages/01-resman/data/org-policies/iam.yaml rename to fast/stages-multitenant/1-resman-tenant/data/org-policies/iam.yaml diff --git a/fast/stages/01-resman/data/org-policies/serverless.yaml b/fast/stages-multitenant/1-resman-tenant/data/org-policies/serverless.yaml similarity index 100% rename from fast/stages/01-resman/data/org-policies/serverless.yaml rename to fast/stages-multitenant/1-resman-tenant/data/org-policies/serverless.yaml diff --git a/fast/stages/01-resman/data/org-policies/sql.yaml b/fast/stages-multitenant/1-resman-tenant/data/org-policies/sql.yaml similarity index 100% rename from fast/stages/01-resman/data/org-policies/sql.yaml rename to fast/stages-multitenant/1-resman-tenant/data/org-policies/sql.yaml diff --git a/fast/stages/01-resman/data/org-policies/storage.yaml b/fast/stages-multitenant/1-resman-tenant/data/org-policies/storage.yaml similarity index 100% rename from fast/stages/01-resman/data/org-policies/storage.yaml rename to fast/stages-multitenant/1-resman-tenant/data/org-policies/storage.yaml diff --git a/fast/stages/01-resman/diagram.png b/fast/stages-multitenant/1-resman-tenant/diagram.png similarity index 100% rename from fast/stages/01-resman/diagram.png rename to fast/stages-multitenant/1-resman-tenant/diagram.png diff --git a/fast/stages/01-resman/diagram.svg b/fast/stages-multitenant/1-resman-tenant/diagram.svg similarity index 100% rename from fast/stages/01-resman/diagram.svg rename to fast/stages-multitenant/1-resman-tenant/diagram.svg diff --git a/fast/stages-multitenant/1-resman-tenant/main.tf b/fast/stages-multitenant/1-resman-tenant/main.tf new file mode 100644 index 00000000..76c04639 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/main.tf @@ -0,0 +1,79 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + automation_resman_sa_iam = [ + "serviceAccount:${var.automation.service_accounts.resman}" + ] + automation_sas_iam = { + for k, v in var.automation.service_accounts : + k => v == null ? null : "serviceAccount:${v}" + } + branch_optional_sa_lists = { + dp-dev = compact([local.automation_sas_iam.dp-dev]) + dp-prod = compact([local.automation_sas_iam.dp-prod]) + gke-dev = compact([local.automation_sas_iam.gke-dev]) + gke-prod = compact([local.automation_sas_iam.gke-prod]) + pf-dev = compact([local.automation_sas_iam.pf-dev]) + pf-prod = compact([local.automation_sas_iam.pf-prod]) + } + # derive identity pool names from identity providers for easy reference + cicd_identity_pools = { + for k, v in local.cicd_identity_providers : + k => split("/providers/", v.name)[0] + } + cicd_identity_providers = coalesce( + try(var.automation.federated_identity_providers, null), {} + ) + cicd_repositories = { + for k, v in coalesce(var.cicd_repositories, {}) : k => v + if( + v != null && + ( + try(v.type, null) == "sourcerepo" + || + contains( + keys(local.cicd_identity_providers), + coalesce(try(v.identity_provider, null), ":") + ) + ) && + fileexists("${path.module}/templates/workflow-${try(v.type, "")}.yaml") + ) + } + cicd_workflow_var_files = { + stage_2 = [ + "0-bootstrap-tenant.auto.tfvars.json", + ] + stage_3 = [ + "0-bootstrap-tenant.auto.tfvars.json", + "2-networking.auto.tfvars.json", + "2-security.auto.tfvars.json" + ] + } + custom_roles = coalesce(var.custom_roles, {}) + gcs_storage_class = ( + length(split("-", var.locations.gcs)) < 2 + ? "MULTI_REGIONAL" + : "REGIONAL" + ) + groups = { + for k, v in var.groups : + k => v == null ? null : "${v}@${var.organization.domain}" + } + groups_iam = { + for k, v in local.groups : k => v != null ? "group:${v}" : null + } +} diff --git a/fast/stages-multitenant/1-resman-tenant/outputs-files.tf b/fast/stages-multitenant/1-resman-tenant/outputs-files.tf new file mode 100644 index 00000000..29d5ed46 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/outputs-files.tf @@ -0,0 +1,46 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Output files persistence to local filesystem. + +locals { + outputs_root = join("/", [ + try(pathexpand(var.outputs_location), ""), + "tenants", + var.short_name + ]) +} + +resource "local_file" "providers" { + for_each = var.outputs_location == null ? {} : local.providers + file_permission = "0644" + filename = "${local.outputs_root}/providers/${each.key}-providers.tf" + content = try(each.value, null) +} + +resource "local_file" "tfvars" { + count = var.outputs_location == null ? 0 : 1 + file_permission = "0644" + filename = "${local.outputs_root}/tfvars/1-resman.auto.tfvars.json" + content = jsonencode(local.tfvars) +} + +resource "local_file" "workflows" { + for_each = var.outputs_location == null ? {} : local.cicd_workflows + file_permission = "0644" + filename = "${local.outputs_root}/workflows/${replace(each.key, "_", "-")}-workflow.yaml" + content = try(each.value, null) +} diff --git a/fast/stages-multitenant/1-resman-tenant/outputs-gcs.tf b/fast/stages-multitenant/1-resman-tenant/outputs-gcs.tf new file mode 100644 index 00000000..6b0fc89c --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/outputs-gcs.tf @@ -0,0 +1,37 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Output files persistence to automation GCS bucket. + +resource "google_storage_bucket_object" "providers" { + for_each = local.providers + bucket = var.automation.outputs_bucket + name = "providers/${each.key}-providers.tf" + content = each.value +} + +resource "google_storage_bucket_object" "tfvars" { + bucket = var.automation.outputs_bucket + name = "tfvars/1-resman.auto.tfvars.json" + content = jsonencode(local.tfvars) +} + +resource "google_storage_bucket_object" "workflows" { + for_each = local.cicd_workflows + bucket = var.automation.outputs_bucket + name = "workflows/${replace(each.key, "_", "-")}-workflow.yaml" + content = each.value +} diff --git a/fast/stages-multitenant/1-resman-tenant/outputs.tf b/fast/stages-multitenant/1-resman-tenant/outputs.tf new file mode 100644 index 00000000..ad2d8dcf --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/outputs.tf @@ -0,0 +1,311 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +locals { + _tpl_providers = "${path.module}/templates/providers.tf.tpl" + cicd_workflow_attrs = { + data_platform_dev = { + service_account = try(module.branch-dp-dev-sa-cicd.0.email, null) + tf_providers_file = "3-data-platform-dev-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + data_platform_prod = { + service_account = try(module.branch-dp-prod-sa-cicd.0.email, null) + tf_providers_file = "3-data-platform-prod-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + gke_dev = { + service_account = try(module.branch-gke-dev-sa-cicd.0.email, null) + tf_providers_file = "3-gke-dev-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + gke_prod = { + service_account = try(module.branch-gke-prod-sa-cicd.0.email, null) + tf_providers_file = "3-gke-prod-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + networking = { + service_account = try(module.branch-network-sa-cicd.0.email, null) + tf_providers_file = "2-networking-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_2 + } + project_factory_dev = { + service_account = try(module.branch-pf-dev-sa-cicd.0.email, null) + tf_providers_file = "3-project-factory-dev-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + project_factory_prod = { + service_account = try(module.branch-pf-prod-sa-cicd.0.email, null) + tf_providers_file = "3-project-factory-prod-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_3 + } + security = { + service_account = try(module.branch-security-sa-cicd.0.email, null) + tf_providers_file = "2-security-providers.tf" + tf_var_files = local.cicd_workflow_var_files.stage_2 + } + } + cicd_workflows = { + for k, v in local.cicd_repositories : k => templatefile( + "${path.module}/templates/workflow-${v.type}.yaml", + merge(local.cicd_workflow_attrs[k], { + identity_provider = try( + local.cicd_identity_providers[v.identity_provider].name, null + ) + outputs_bucket = var.automation.outputs_bucket + stage_name = k + }) + ) + } + folder_ids = merge( + { + data-platform-dev = try(module.branch-dp-dev-folder.0.id, null) + data-platform-prod = try(module.branch-dp-prod-folder.0.id, null) + gke-dev = try(module.branch-gke-dev-folder.0.id, null) + gke-prod = try(module.branch-gke-prod-folder.0.id, null) + networking = module.branch-network-folder.id + networking-dev = module.branch-network-dev-folder.id + networking-prod = module.branch-network-prod-folder.id + sandbox = try(module.branch-sandbox-folder.0.id, null) + security = module.branch-security-folder.id + teams = try(module.branch-teams-folder.0.id, null) + }, + { + for k, v in module.branch-teams-team-folder : + "team-${k}" => v.id + }, + { + for k, v in module.branch-teams-team-dev-folder : + "team-${k}-dev" => v.id + }, + { + for k, v in module.branch-teams-team-prod-folder : + "team-${k}-prod" => v.id + } + ) + providers = merge( + { + "2-0-networking" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-network-gcs.name + name = "networking" + sa = module.branch-network-sa.email + }) + "2-0-security" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-security-gcs.name + name = "security" + sa = module.branch-security-sa.email + }) + }, + !var.fast_features.data_platform ? {} : { + "3-0-data-platform-dev" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-dp-dev-gcs.0.name + name = "dp-dev" + sa = module.branch-dp-dev-sa.0.email + }) + "3-0-data-platform-prod" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-dp-prod-gcs.0.name + name = "dp-prod" + sa = module.branch-dp-prod-sa.0.email + }) + }, + !var.fast_features.gke ? {} : { + "3-0-gke-dev" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-gke-dev-gcs.0.name + name = "gke-dev" + sa = module.branch-gke-dev-sa.0.email + }) + "3-0-gke-prod" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-gke-prod-gcs.0.name + name = "gke-prod" + sa = module.branch-gke-prod-sa.0.email + }) + }, + !var.fast_features.project_factory ? {} : { + "3-0-project-factory-dev" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-pf-dev-gcs.0.name + name = "team-dev" + sa = var.automation.service_accounts.pf-dev + }) + "3-0-project-factory-prod" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-pf-prod-gcs.0.name + name = "team-prod" + sa = var.automation.service_accounts.pf-prod + }) + }, + !var.fast_features.sandbox ? {} : { + "9-0-sandbox" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-sandbox-gcs.0.name + name = "sandbox" + sa = var.automation.service_accounts.sandbox + }) + }, + !var.fast_features.teams ? {} : merge( + { + "3-teams" = templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-teams-gcs.0.name + name = "teams" + sa = module.branch-teams-sa.0.email + }) + }, + { + for k, v in module.branch-teams-team-sa : + "3-teams-${k}" => templatefile(local._tpl_providers, { + backend_extra = null + bucket = module.branch-teams-team-gcs[k].name + name = "teams" + sa = v.email + }) + } + ) + ) + tfvars = { + folder_ids = local.folder_ids + } +} + +output "cicd_repositories" { + description = "WIF configuration for CI/CD repositories." + value = { + for k, v in local.cicd_repositories : k => { + branch = v.branch + name = v.name + provider = try( + local.cicd_identity_providers[v.identity_provider].name, null + ) + service_account = local.cicd_workflow_attrs[k].service_account + } if v != null + } +} + +output "dataplatform" { + description = "Data for the Data Platform stage." + value = !var.fast_features.data_platform ? {} : { + dev = { + folder = module.branch-dp-dev-folder.0.id + gcs_bucket = module.branch-dp-dev-gcs.0.name + service_account = module.branch-dp-dev-sa.0.email + } + prod = { + folder = module.branch-dp-prod-folder.0.id + gcs_bucket = module.branch-dp-prod-gcs.0.name + service_account = module.branch-dp-prod-sa.0.email + } + } +} + +output "gke_multitenant" { + # tfdoc:output:consumers 03-gke-multitenant + description = "Data for the GKE multitenant stage." + value = ( + var.fast_features.gke + ? { + "dev" = { + folder = module.branch-gke-dev-folder.0.id + gcs_bucket = module.branch-gke-dev-gcs.0.name + service_account = module.branch-gke-dev-sa.0.email + } + "prod" = { + folder = module.branch-gke-prod-folder.0.id + gcs_bucket = module.branch-gke-prod-gcs.0.name + service_account = module.branch-gke-prod-sa.0.email + } + } + : {} + ) +} + +output "networking" { + description = "Data for the networking stage." + value = { + folder = module.branch-network-folder.id + gcs_bucket = module.branch-network-gcs.name + service_account = module.branch-network-sa.iam_email + } +} + +output "project_factories" { + description = "Data for the project factories stage." + value = !var.fast_features.project_factory ? {} : { + dev = { + bucket = module.branch-pf-dev-gcs.0.name + sa = var.automation.service_accounts.pf-dev + } + prod = { + bucket = module.branch-pf-prod-gcs.0.name + sa = var.automation.service_accounts.pf-prod + } + } +} + +# ready to use provider configurations for subsequent stages +output "providers" { + # tfdoc:output:consumers 02-networking 02-security 03-dataplatform xx-sandbox xx-teams + description = "Terraform provider files for this stage and dependent stages." + sensitive = true + value = local.providers +} + +output "sandbox" { + # tfdoc:output:consumers xx-sandbox + description = "Data for the sandbox stage." + value = ( + var.fast_features.sandbox + ? { + folder = module.branch-sandbox-folder.0.id + gcs_bucket = module.branch-sandbox-gcs.0.name + service_account = var.automation.service_accounts.sandbox + } + : null + ) +} + +output "security" { + # tfdoc:output:consumers 02-security + description = "Data for the networking stage." + value = { + folder = module.branch-security-folder.id + gcs_bucket = module.branch-security-gcs.name + service_account = module.branch-security-sa.iam_email + } +} + +output "teams" { + description = "Data for the teams stage." + value = { + for k, v in module.branch-teams-team-folder : k => { + folder = v.id + gcs_bucket = module.branch-teams-team-gcs[k].name + service_account = module.branch-teams-team-sa[k].email + } + } +} + +# ready to use variable values for subsequent stages +output "tfvars" { + description = "Terraform variable files for the following stages." + sensitive = true + value = local.tfvars +} diff --git a/fast/stages-multitenant/1-resman-tenant/root_node.tf b/fast/stages-multitenant/1-resman-tenant/root_node.tf new file mode 100644 index 00000000..5b83d2dd --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/root_node.tf @@ -0,0 +1,41 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# tfdoc:file:description Tenant root folder configuration. + +module "root-folder" { + source = "../../../modules/folder" + id = var.root_node + folder_create = var.test_skip_data_sources + # start test attributes + parent = ( + var.test_skip_data_sources ? "organizations/${var.organization.id}" : null + ) + name = var.test_skip_data_sources ? "Test" : null + # end test attributes + iam_additive = { + "roles/accesscontextmanager.policyAdmin" = [ + local.automation_sas_iam.security + ] + "roles/compute.orgFirewallPolicyAdmin" = [ + local.automation_sas_iam.networking + ] + "roles/compute.xpnAdmin" = [ + local.automation_sas_iam.networking + ] + } + org_policies_data_path = var.organization_policy_data_path +} diff --git a/fast/stages-multitenant/1-resman-tenant/templates/providers.tf.tpl b/fast/stages-multitenant/1-resman-tenant/templates/providers.tf.tpl new file mode 100644 index 00000000..993c78ca --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/templates/providers.tf.tpl @@ -0,0 +1,33 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +terraform { + backend "gcs" { + bucket = "${bucket}" + impersonate_service_account = "${sa}" + %{~ if backend_extra != null ~} + ${indent(4, backend_extra)} + %{~ endif ~} + } +} +provider "google" { + impersonate_service_account = "${sa}" +} +provider "google-beta" { + impersonate_service_account = "${sa}" +} + +# end provider.tf for ${name} diff --git a/fast/stages-multitenant/1-resman-tenant/templates/workflow-github.yaml b/fast/stages-multitenant/1-resman-tenant/templates/workflow-github.yaml new file mode 100644 index 00000000..8a946d84 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/templates/workflow-github.yaml @@ -0,0 +1,186 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: "FAST ${stage_name} stage" + +on: + pull_request: + branches: + - main + types: + - closed + - opened + - synchronize + +env: + FAST_OUTPUTS_BUCKET: ${outputs_bucket} + FAST_SERVICE_ACCOUNT: ${service_account} + FAST_WIF_PROVIDER: ${identity_provider} + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + TF_PROVIDERS_FILE: ${tf_providers_file} + TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + TF_VERSION: 1.3.2 + +jobs: + fast-pr: + permissions: + contents: read + id-token: write + issues: write + pull-requests: write + runs-on: ubuntu-latest + steps: + - id: checkout + name: Checkout repository + uses: actions/checkout@v3 + + # set up SSH key authentication to the modules repository + - id: ssh-config + name: Configure SSH authentication + run: | + ssh-agent -a "$SSH_AUTH_SOCK" > /dev/null + ssh-add - <<< "$${{ secrets.CICD_MODULES_KEY }}" + + # set up authentication via Workload identity Federation + - id: gcp-auth + name: Authenticate to Google Cloud + uses: google-github-actions/auth@v0 + with: + workload_identity_provider: $${{ env.FAST_WIF_PROVIDER }} + service_account: $${{ env.FAST_SERVICE_ACCOUNT }} + access_token_lifetime: 3600s + + - id: gcp-sdk + name: Set up Cloud SDK + uses: google-github-actions/setup-gcloud@v0 + with: + install_components: alpha + + # copy provider and tfvars files + - id: tf-config + name: Copy Terraform output files + run: | + gcloud alpha storage cp -r \ + "gs://$${{env.FAST_OUTPUTS_BUCKET}}/providers/$${{env.TF_PROVIDERS_FILE}}" ./ + gcloud alpha storage cp -r \ + "gs://$${{env.FAST_OUTPUTS_BUCKET}}/tfvars" ./ + for f in $${{env.TF_VAR_FILES}}; do + ln -s "tfvars/$f" ./ + done + + - id: tf-setup + name: Set up Terraform + uses: hashicorp/setup-terraform@v2.0.3 + with: + terraform_version: $${{ env.TF_VERSION }} + + # run Terraform init/validate/plan + - id: tf-init + name: Terraform init + run: | + terraform init -no-color + + - id: tf-validate + name: Terraform validate + run: terraform validate -no-color + + - id: tf-plan + name: Terraform plan + continue-on-error: true + run: | + terraform plan -input=false -out ../plan.out -no-color + + - id: tf-apply + if: github.event.pull_request.merged == true && success() + name: Terraform apply + continue-on-error: true + run: | + terraform apply -input=false -auto-approve -no-color ../plan.out + + - id: pr-comment + name: Post comment to Pull Request + continue-on-error: true + uses: actions/github-script@v6 + if: github.event_name == 'pull_request' + env: + PLAN: $${{ steps.tf-plan.outputs.stdout }}\n$${{ steps.tf-plan.outputs.stderr }} + with: + script: | + const output = `### Terraform Initialization \`$${{ steps.tf-init.outcome }}\` + + ### Terraform Validation \`$${{ steps.tf-validate.outcome }}\` + +
Validation Output + + \`\`\`\n + $${{ steps.tf-validate.outputs.stdout }} + \`\`\` + +
+ + ### Terraform Plan \`$${{ steps.tf-plan.outcome }}\` + +
Show Plan + + \`\`\`\n + $${process.env.PLAN.split('\n').filter(l => l.match(/^([A-Z\s].*|)$$/)).join('\n')} + \`\`\` + +
+ + ### Terraform Apply \`$${{ steps.tf-apply.outcome }}\` + + *Pusher: @$${{ github.actor }}, Action: \`$${{ github.event_name }}\`, Working Directory: \`$${{ env.tf_actions_working_dir }}\`, Workflow: \`$${{ github.workflow }}\`*`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) + + - id: pr-short-comment + name: Post comment to Pull Request + uses: actions/github-script@v6 + if: github.event_name == 'pull_request' && steps.pr-comment.outcome != 'success' + with: + script: | + const output = `### Terraform Initialization \`$${{ steps.tf-init.outcome }}\` + + ### Terraform Validation \`$${{ steps.tf-validate.outcome }}\` + + ### Terraform Plan \`$${{ steps.tf-plan.outcome }}\` + + Plan output is in the action log. + + ### Terraform Apply \`$${{ steps.tf-apply.outcome }}\` + + *Pusher: @$${{ github.actor }}, Action: \`$${{ github.event_name }}\`, Working Directory: \`$${{ env.tf_actions_working_dir }}\`, Workflow: \`$${{ github.workflow }}\`*`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) + + - id: check-plan + name: Check plan failure + if: steps.tf-plan.outcome != 'success' + run: exit 1 + + - id: check-apply + name: Check apply failure + if: github.event.pull_request.merged == true && steps.tf-apply.outcome != 'success' + run: exit 1 diff --git a/fast/stages-multitenant/1-resman-tenant/templates/workflow-gitlab.yaml b/fast/stages-multitenant/1-resman-tenant/templates/workflow-gitlab.yaml new file mode 100644 index 00000000..8981e70b --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/templates/workflow-gitlab.yaml @@ -0,0 +1,120 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +default: + before_script: + - echo "$${CI_JOB_JWT_V2}" > token.txt + image: + name: hashicorp/terraform + entrypoint: + - "/usr/bin/env" + - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + +variables: + GOOGLE_CREDENTIALS: cicd-sa-credentials.json + FAST_OUTPUTS_BUCKET: ${outputs_bucket} + FAST_SERVICE_ACCOUNT: ${service_account} + FAST_WIF_PROVIDER: ${identity_provider} + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + TF_PROVIDERS_FILE: ${tf_providers_file} + TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + +stages: + - gcp-auth + - tf-files + - tf-plan + - tf-apply + +cache: + key: gcp-auth + paths: + - cicd-sa-credentials.json + - .tf-setup + +gcp-auth: + image: + name: google/cloud-sdk:slim + stage: gcp-auth + script: + - | + gcloud iam workload-identity-pools create-cred-config \ + $${FAST_WIF_PROVIDER} \ + --service-account=$${FAST_SERVICE_ACCOUNT} \ + --service-account-token-lifetime-seconds=3600 \ + --output-file=$${GOOGLE_CREDENTIALS} \ + --credential-source-file=token.txt +tf-files: + dependencies: + - gcp-auth + image: + name: google/cloud-sdk:slim + stage: tf-files + script: + # - gcloud components install -q alpha + - gcloud config set auth/credential_file_override $${GOOGLE_CREDENTIALS} + - mkdir -p .tf-setup + - | + gcloud alpha storage cp -r \ + "gs://$${FAST_OUTPUTS_BUCKET}/providers/$${TF_PROVIDERS_FILE}" .tf-setup/ + - | + gcloud alpha storage cp -r \ + "gs://$${FAST_OUTPUTS_BUCKET}/tfvars" .tf-setup/ + +tf-plan: + # uncomment the following lines and set the SSH key secret for private modules repo + # before_script: + # - | + # ssh-agent -a $SSH_AUTH_SOCK > /dev/null + # echo "$CICD_MODULES_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null + # mkdir -p ~/.ssh + # ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts + # ssh-keyscan gitlab.com | sort -u - ~/.ssh/known_hosts -o ~/.ssh/known_hosts + stage: tf-plan + script: + - cp .tf-setup/$${TF_PROVIDERS_FILE} ./ + - | + for f in $${TF_VAR_FILES}; do + ln -s ".tf-setup/tfvars/$f" ./ + done + - terraform init + - terraform validate + - terraform plan + dependencies: + - tf-files + +tf-apply: + # uncomment the following lines and set the SSH key secret for private modules repo + # before_script: + # - | + # ssh-agent -a $SSH_AUTH_SOCK > /dev/null + # echo "$CICD_MODULES_KEY" | base64 -d | tr -d '\r' | ssh-add - > /dev/null + # mkdir -p ~/.ssh + # ssh-keyscan -H 'gitlab.com' >> ~/.ssh/known_hosts + # ssh-keyscan gitlab.com | sort -u - ~/.ssh/known_hosts -o ~/.ssh/known_hosts + stage: tf-apply + script: + - cp .tf-setup/$${TF_PROVIDERS_FILE} ./ + - | + for f in $${TF_VAR_FILES}; do + ln -s ".tf-setup/tfvars/$f" ./ + done + - terraform init + - terraform validate + - terraform apply -input=false -auto-approve + dependencies: + - tf-files + when: manual + only: + variables: + - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH diff --git a/fast/stages-multitenant/1-resman-tenant/templates/workflow-sourcerepo.yaml b/fast/stages-multitenant/1-resman-tenant/templates/workflow-sourcerepo.yaml new file mode 100644 index 00000000..446c9c96 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/templates/workflow-sourcerepo.yaml @@ -0,0 +1,98 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +steps: + - name: alpine:3 + id: tf-download + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + mkdir -p /builder/home/.local/bin + wget https://releases.hashicorp.com/terraform/$${_TF_VERSION}/terraform_$${_TF_VERSION}_linux_amd64.zip + unzip terraform_$${_TF_VERSION}_linux_amd64.zip -d /builder/home/.local/bin + rm terraform_$${_TF_VERSION}_linux_amd64.zip + chmod 755 /builder/home/.local/bin/terraform + - name: alpine:3 + id: tf-check-format + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform fmt -recursive -check /workspace/ + - name: gcr.io/google.com/cloudsdktool/cloud-sdk:alpine + id: tf-files + entrypoint: bash + args: + - -eEuo + - pipefail + - -c + - |- + /google-cloud-sdk/bin/gsutil cp \ + gs://$${_FAST_OUTPUTS_BUCKET}/providers/$${_TF_PROVIDERS_FILE} ./ + /google-cloud-sdk/bin/gsutil cp -r \ + gs://$${_FAST_OUTPUTS_BUCKET}/tfvars ./ + for f in $${_TF_VAR_FILES}; do + ln -s tfvars/$f ./ + done + - name: alpine:3 + id: tf-init + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform init -no-color + - name: alpine:3 + id: tf-check-validate + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform validate -no-color + - name: alpine:3 + id: tf-plan + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform plan -no-color -input=false -out plan.out + # store artifact and ask for approval here if needed + - name: alpine:3 + id: tf-apply + entrypoint: sh + args: + - -eEuo + - pipefail + - -c + - |- + terraform apply -no-color -input=false -auto-approve plan.out +options: + env: + - PATH=/usr/local/bin:/usr/bin:/bin:/builder/home/.local/bin + logging: CLOUD_LOGGING_ONLY +substitutions: + _FAST_OUTPUTS_BUCKET: ${outputs_bucket} + _TF_PROVIDERS_FILE: ${tf_providers_file} + _TF_VAR_FILES: ${tf_var_files == [] ? "''" : join("\n ", tf_var_files)} + _TF_VERSION: 1.3.2 diff --git a/fast/stages-multitenant/1-resman-tenant/variables.tf b/fast/stages-multitenant/1-resman-tenant/variables.tf new file mode 100644 index 00000000..0229dd78 --- /dev/null +++ b/fast/stages-multitenant/1-resman-tenant/variables.tf @@ -0,0 +1,281 @@ +/** + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * 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. + */ + +# defaults for variables marked with global tfdoc annotations, can be set via +# the tfvars file generated in stage 00 and stored in its outputs + +variable "automation" { + # tfdoc:variable:source 0-bootstrap + description = "Automation resources created by the bootstrap stage." + type = object({ + outputs_bucket = string + project_id = string + project_number = string + federated_identity_pools = list(string) + federated_identity_providers = map(object({ + issuer = string + issuer_uri = string + name = string + principal_tpl = string + principalset_tpl = string + })) + service_accounts = object({ + networking = string + resman = string + security = string + dp-dev = optional(string) + dp-prod = optional(string) + gke-dev = optional(string) + gke-prod = optional(string) + pf-dev = optional(string) + pf-prod = optional(string) + sandbox = optional(string) + teams = optional(string) + }) + }) +} + +variable "billing_account" { + # tfdoc:variable:source 0-bootstrap + description = "Billing account id. If billing account is not part of the same org set `is_org_level` to false." + type = object({ + id = string + is_org_level = optional(bool, true) + }) + validation { + condition = var.billing_account.is_org_level != null + error_message = "Invalid `null` value for `billing_account.is_org_level`." + } +} + +variable "cicd_repositories" { + description = "CI/CD repository configuration. Identity providers reference keys in the `automation.federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed." + type = object({ + data_platform_dev = object({ + branch = string + identity_provider = string + name = string + type = string + }) + data_platform_prod = object({ + branch = string + identity_provider = string + name = string + type = string + }) + gke_dev = object({ + branch = string + identity_provider = string + name = string + type = string + }) + gke_prod = object({ + branch = string + identity_provider = string + name = string + type = string + }) + networking = object({ + branch = string + identity_provider = string + name = string + type = string + }) + project_factory_dev = object({ + branch = string + identity_provider = string + name = string + type = string + }) + project_factory_prod = object({ + branch = string + identity_provider = string + name = string + type = string + }) + security = object({ + branch = string + identity_provider = string + name = string + type = string + }) + }) + default = null + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || try(v.name, null) != null + ]) + error_message = "Non-null repositories need a non-null name." + } + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || ( + try(v.identity_provider, null) != null + || + try(v.type, null) == "sourcerepo" + ) + ]) + error_message = "Non-null repositories need a non-null provider unless type is 'sourcerepo'." + } + validation { + condition = alltrue([ + for k, v in coalesce(var.cicd_repositories, {}) : + v == null || ( + contains(["github", "gitlab", "sourcerepo"], coalesce(try(v.type, null), "null")) + ) + ]) + error_message = "Invalid repository type, supported types: 'github' 'gitlab' or 'sourcerepo'." + } +} + +variable "custom_roles" { + # tfdoc:variable:source 0-bootstrap + description = "Custom roles defined at the org level, in key => id format." + type = object({ + service_project_network_admin = string + }) + default = null +} + +variable "data_dir" { + description = "Relative path for the folder storing configuration data." + type = string + default = "data" +} + +variable "fast_features" { + # tfdoc:variable:source 0-0-bootstrap + description = "Selective control for top-level FAST features." + type = object({ + data_platform = optional(bool, false) + gke = optional(bool, false) + project_factory = optional(bool, false) + sandbox = optional(bool, false) + teams = optional(bool, false) + }) + default = {} + nullable = false +} + +variable "groups" { + # tfdoc:variable:source 0-bootstrap + # https://cloud.google.com/docs/enterprise/setup-checklist + description = "Group names to grant organization-level permissions." + type = object({ + gcp-devops = optional(string) + gcp-network-admins = optional(string) + gcp-security-admins = optional(string) + }) + default = {} + nullable = false +} + +variable "locations" { + # tfdoc:variable:source 0-bootstrap + description = "Optional locations for GCS, BigQuery, and logging buckets created here." + type = object({ + bq = string + gcs = string + logging = string + pubsub = list(string) + }) + default = { + bq = "EU" + gcs = "EU" + logging = "global" + pubsub = [] + } + nullable = false +} + +variable "organization" { + # tfdoc:variable:source 0-bootstrap + description = "Organization details." + type = object({ + domain = string + id = number + customer_id = string + }) +} + +variable "organization_policy_data_path" { + description = "Path for the data folder used by the organization policies factory." + type = string + default = null +} + +variable "outputs_location" { + description = "Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable." + type = string + default = null +} + +variable "prefix" { + # tfdoc:variable:source 0-bootstrap + description = "Prefix used for resources that need unique names. Use 9 characters or less." + type = string + + validation { + condition = try(length(var.prefix), 0) < 10 + error_message = "Use a maximum of 9 characters for prefix." + } +} + +variable "root_node" { + description = "Root folder node for the tenant, in folders/nnnnnn format." + type = string +} + +variable "short_name" { + description = "Short name used to identify the tenant." + type = string +} + +variable "tags" { + description = "Resource management tags." + type = object({ + keys = object({ + context = string + environment = string + tenant = string + }) + names = object({ + context = string + environment = string + tenant = string + }) + values = map(string) + }) + nullable = false +} + +variable "team_folders" { + description = "Team folders to be created. Format is described in a code comment." + type = map(object({ + descriptive_name = string + group_iam = map(list(string)) + impersonation_groups = list(string) + })) + default = null +} + +variable "test_skip_data_sources" { + description = "Used when testing to bypass data sources." + type = bool + default = false +} diff --git a/fast/stages-multitenant/MULTITENANT-TODO.md b/fast/stages-multitenant/MULTITENANT-TODO.md new file mode 100644 index 00000000..a14d64ab --- /dev/null +++ b/fast/stages-multitenant/MULTITENANT-TODO.md @@ -0,0 +1,8 @@ +# Things to add before sending the PR + +- [x] multitenant resman stage +- [ ] identity providers for tenant bootstrap stages +- [ ] edit FAST top-level and stages READMEs for multitenant +- [ ] multitenant stages READMEs +- [ ] add test to ensure templates folder is the same in every stage +- [ ] add test to ensure identity providers code is the same in bootstrap and mt bootstrap diff --git a/fast/stages-multitenant/README.md b/fast/stages-multitenant/README.md new file mode 100644 index 00000000..27ce17dd --- /dev/null +++ b/fast/stages-multitenant/README.md @@ -0,0 +1,27 @@ +# FAST multitenant stages + +The stages in this folder set up separate resource hierarchies inside the same organization that are fully FAST-compliant, and allow each tenant to run and manage their own networking, security, or application-level stages. They are designed to be used where a high degree of autonomy is needed for each tenant, for example individual subsidiaries of a large corporation all sharing the same GCP organization. + +The multitenant stages have the following characteristics: + +- they support one tenant at a time, so one copy of both stages is needed for each tenant +- they have the organization-level bootstrap and resource management stages as prerequisite +- they are logically equivalent to the respective organization-level stages but behave slightly differently, as they actively minimize access and changes to organization or shared resources + +Once both tenant-level stages are run, a hierarchy and a set of resources is available for the new tenant, including a separate automation project, service accounts for subsequent stages, etc. + +The tenant-level stages require that organization-level stage 0 (bootstrap) and 1 (resource management) have been applied. Their position and role in the FAST stage flow is shown in the following diagram: + +

+ Stages diagram +

+ +## Tenant bootstrap (0) + +This stage creates the top-level root folder and tag for the tenant, and the tenant-level automation project and automation service accounts. It also sets up billing and organization-level roles for the tenant administrators group and the automation service accounts. As in the organizational-level stages, it can optionally set up CI/CD for itself and the tenant resource management stage. + +This stage is run with the organization-level resource management service account as it leverages its permissions, and is the bridge between the organization-level stages and the tenant stages which are effectively decoupled from the rest of the organization. + +## Tenant resource management (1) + +This stage populates the resource hierarchy rooted in the top-level tenant folder, assigns roles to the tenant automation service accounts, and optionally sets up CI/CD for the following stages. It is functionally equivalent to the organization-level resource management stage, but runs with a tenant-specific service account and has no control over resources outside of the tenant context. diff --git a/fast/stages-multitenant/diagram.png b/fast/stages-multitenant/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..940fa3c36ecb78e6b02ad976a95283b46519c57f GIT binary patch literal 200274 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 literal 0 HcmV?d00001 diff --git a/fast/stages-multitenant/stages.png b/fast/stages-multitenant/stages.png new file mode 100644 index 0000000000000000000000000000000000000000..dc2acc0a2821c37d4370fe47527e87e8ab2a4740 GIT binary patch literal 219942 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

aA?+4&xJ<}DTUs8KN^SSw4V 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%0D@9jTO1Hr-YghWu9LpXealH?q(`@?Lj4 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 literal 0 HcmV?d00001 diff --git a/fast/stages-multitenant/stages.svg b/fast/stages-multitenant/stages.svg new file mode 100644 index 00000000..157453f0 --- /dev/null +++ b/fast/stages-multitenant/stages.svg @@ -0,0 +1,1278 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fast/stages.png b/fast/stages.png index 238ad5a0483485a533fe77e53ac7ebdda135ab16..d6c3e386a55e0f40c7454bfa56f7fad5e1e6bf2a 100644 GIT binary patch literal 144883 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 z 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