terraconstructs 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +104486 -34582
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.d.ts +1 -1
- package/lib/aws/aws-construct.js +28 -2
- package/lib/aws/aws-stack.d.ts +2 -4
- package/lib/aws/aws-stack.js +21 -8
- package/lib/aws/aws-tags.d.ts +58 -0
- package/lib/aws/aws-tags.js +77 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +4 -4
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
- package/lib/aws/cloudwatch/private/metric-util.js +4 -5
- package/lib/aws/cloudwatch/private/object.js +2 -3
- package/lib/aws/cloudwatch/private/rendering.js +3 -3
- package/lib/aws/cloudwatch/private/statistic.js +6 -7
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +4 -4
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.d.ts +1 -1
- package/lib/aws/cloudwatch/widget.js +4 -4
- package/lib/aws/compute/activity.js +3 -2
- package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
- package/lib/aws/compute/alb/application-listener-action.js +281 -0
- package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
- package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
- package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
- package/lib/aws/compute/alb/application-listener-rule.js +220 -0
- package/lib/aws/compute/alb/application-listener.d.ts +574 -0
- package/lib/aws/compute/alb/application-listener.js +538 -0
- package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
- package/lib/aws/compute/alb/application-load-balancer.js +780 -0
- package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
- package/lib/aws/compute/alb/application-target-group.js +427 -0
- package/lib/aws/compute/alb/conditions.d.ts +61 -0
- package/lib/aws/compute/alb/conditions.js +164 -0
- package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
- package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
- package/lib/aws/compute/alb/trust-store.d.ts +86 -0
- package/lib/aws/compute/alb/trust-store.js +79 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
- package/lib/aws/compute/bastion-host.d.ts +172 -0
- package/lib/aws/compute/bastion-host.js +114 -0
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/cidr-splits.d.ts +49 -0
- package/lib/aws/compute/cidr-splits.js +59 -0
- package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
- package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
- package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
- package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
- package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
- package/lib/aws/compute/client-vpn-endpoint.js +259 -0
- package/lib/aws/compute/client-vpn-route.d.ts +67 -0
- package/lib/aws/compute/client-vpn-route.js +57 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.d.ts +137 -0
- package/lib/aws/compute/connections.js +208 -0
- package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
- package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
- package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
- package/lib/aws/compute/ec2-util-v2.js +286 -0
- package/lib/aws/compute/ec2-util.d.ts +52 -0
- package/lib/aws/compute/ec2-util.js +138 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +1 -1
- package/lib/aws/compute/function.js +5 -5
- package/lib/aws/compute/index-alpha.d.ts +5 -0
- package/lib/aws/compute/index-alpha.js +22 -0
- package/lib/aws/compute/index.d.ts +60 -0
- package/lib/aws/compute/index.js +70 -2
- package/lib/aws/compute/instance-types.d.ts +1354 -0
- package/lib/aws/compute/instance-types.js +1683 -0
- package/lib/aws/compute/instance.d.ts +436 -0
- package/lib/aws/compute/instance.js +262 -0
- package/lib/aws/compute/ip-addresses.d.ts +249 -0
- package/lib/aws/compute/ip-addresses.js +248 -0
- package/lib/aws/compute/ipam.d.ts +309 -0
- package/lib/aws/compute/ipam.js +306 -0
- package/lib/aws/compute/key-pair.d.ts +178 -0
- package/lib/aws/compute/key-pair.js +194 -0
- package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
- package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/launch-template.d.ts +540 -0
- package/lib/aws/compute/launch-template.js +468 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
- package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
- package/lib/aws/compute/lb-shared/base-listener.js +181 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
- package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
- package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
- package/lib/aws/compute/lb-shared/enums.js +301 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
- package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
- package/lib/aws/compute/lb-shared/imported.js +27 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
- package/lib/aws/compute/lb-shared/listener-action.js +4 -0
- package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
- package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
- package/lib/aws/compute/lb-shared/util.d.ts +113 -0
- package/lib/aws/compute/lb-shared/util.js +264 -0
- package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
- package/lib/aws/compute/lb-targets/alb-target.js +100 -0
- package/lib/aws/compute/lb-targets/index.d.ts +4 -0
- package/lib/aws/compute/lb-targets/index.js +22 -0
- package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
- package/lib/aws/compute/lb-targets/instance-target.js +67 -0
- package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
- package/lib/aws/compute/lb-targets/ip-target.js +79 -0
- package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
- package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
- package/lib/aws/compute/load-balancer.d.ts +336 -0
- package/lib/aws/compute/load-balancer.js +287 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
- package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
- package/lib/aws/compute/machine-image/common.d.ts +181 -0
- package/lib/aws/compute/machine-image/common.js +122 -0
- package/lib/aws/compute/machine-image/index.d.ts +5 -0
- package/lib/aws/compute/machine-image/index.js +22 -0
- package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
- package/lib/aws/compute/machine-image/machine-image.js +566 -0
- package/lib/aws/compute/machine-image/utils.d.ts +2 -0
- package/lib/aws/compute/machine-image/utils.js +17 -0
- package/lib/aws/compute/nat.d.ts +325 -0
- package/lib/aws/compute/nat.js +455 -0
- package/lib/aws/compute/network-acl-types.d.ts +152 -0
- package/lib/aws/compute/network-acl-types.js +156 -0
- package/lib/aws/compute/network-acl.d.ts +285 -0
- package/lib/aws/compute/network-acl.js +207 -0
- package/lib/aws/compute/network-util.d.ts +116 -0
- package/lib/aws/compute/network-util.js +241 -0
- package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
- package/lib/aws/compute/nlb/network-listener-action.js +146 -0
- package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
- package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
- package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
- package/lib/aws/compute/nlb/network-listener.js +217 -0
- package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
- package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
- package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
- package/lib/aws/compute/nlb/network-target-group.js +223 -0
- package/lib/aws/compute/peer.d.ts +64 -0
- package/lib/aws/compute/peer.js +235 -0
- package/lib/aws/compute/placement-group.d.ts +161 -0
- package/lib/aws/compute/placement-group.js +133 -0
- package/lib/aws/compute/port.d.ts +287 -0
- package/lib/aws/compute/port.js +390 -0
- package/lib/aws/compute/prefix-list.d.ts +131 -0
- package/lib/aws/compute/prefix-list.js +114 -0
- package/lib/aws/compute/private/context-stub.d.ts +7 -0
- package/lib/aws/compute/private/context-stub.js +43 -0
- package/lib/aws/compute/private/ebs-util.d.ts +14 -0
- package/lib/aws/compute/private/ebs-util.js +145 -0
- package/lib/aws/compute/private/intrinstics.js +2 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/private/util.js +2 -3
- package/lib/aws/compute/route.d.ts +547 -0
- package/lib/aws/compute/route.js +469 -0
- package/lib/aws/compute/security-group.d.ts +414 -0
- package/lib/aws/compute/security-group.js +538 -0
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +14 -12
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +5 -5
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
- package/lib/aws/compute/subnet-v2.d.ts +213 -0
- package/lib/aws/compute/subnet-v2.js +405 -0
- package/lib/aws/compute/subnet.d.ts +37 -0
- package/lib/aws/compute/subnet.js +181 -0
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/private/task-utils.js +3 -4
- package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +2 -2
- package/lib/aws/compute/user-data.d.ts +270 -0
- package/lib/aws/compute/user-data.js +487 -0
- package/lib/aws/compute/util.d.ts +1 -1
- package/lib/aws/compute/util.js +4 -5
- package/lib/aws/compute/volume.d.ts +480 -0
- package/lib/aws/compute/volume.js +426 -0
- package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
- package/lib/aws/compute/vpc-endpoint-service.js +90 -0
- package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
- package/lib/aws/compute/vpc-endpoint.js +811 -0
- package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
- package/lib/aws/compute/vpc-flow-logs.js +693 -0
- package/lib/aws/compute/vpc-lookup.d.ts +73 -0
- package/lib/aws/compute/vpc-lookup.js +3 -0
- package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
- package/lib/aws/compute/vpc-v2-base.js +493 -0
- package/lib/aws/compute/vpc-v2.d.ts +385 -0
- package/lib/aws/compute/vpc-v2.js +408 -0
- package/lib/aws/compute/vpc.d.ts +1448 -0
- package/lib/aws/compute/vpc.js +1495 -0
- package/lib/aws/compute/vpn.d.ts +443 -0
- package/lib/aws/compute/vpn.js +397 -0
- package/lib/aws/compute/windows-versions.d.ts +418 -0
- package/lib/aws/compute/windows-versions.js +426 -0
- package/lib/aws/edge/certificate-base.d.ts +20 -0
- package/lib/aws/edge/certificate-base.js +28 -0
- package/lib/aws/edge/certificate.d.ts +23 -2
- package/lib/aws/edge/certificate.js +54 -4
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +2 -2
- package/lib/aws/edge/dns-record.js +16 -16
- package/lib/aws/edge/dns-zone.d.ts +20 -2
- package/lib/aws/edge/dns-zone.js +25 -10
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/index.d.ts +1 -0
- package/lib/aws/edge/index.js +2 -1
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +7 -5
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/index.d.ts +1 -0
- package/lib/aws/iam/index.js +2 -1
- package/lib/aws/iam/instance-profile.d.ts +155 -0
- package/lib/aws/iam/instance-profile.js +124 -0
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.js +9 -9
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +26 -26
- package/lib/aws/iam/private/assume-role-policy.js +2 -3
- package/lib/aws/iam/private/comparable-principal.js +2 -3
- package/lib/aws/iam/private/immutable-role.d.ts +2 -1
- package/lib/aws/iam/private/immutable-role.js +3 -3
- package/lib/aws/iam/private/imported-role.d.ts +1 -1
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/merge-statements.js +2 -3
- package/lib/aws/iam/private/util.js +4 -4
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/utils.js +2 -3
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +5 -5
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +7 -7
- package/lib/aws/notify/archive.js +3 -2
- package/lib/aws/notify/connection.js +5 -4
- package/lib/aws/notify/event-bus.js +5 -4
- package/lib/aws/notify/event-pattern.js +3 -3
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +4 -3
- package/lib/aws/notify/kinesis-stream.js +3 -2
- package/lib/aws/notify/on-event-options.js +2 -1
- package/lib/aws/notify/queue-config.generated.d.ts +18 -11
- package/lib/aws/notify/queue-config.generated.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +3 -2
- package/lib/aws/notify/schedule.js +2 -2
- package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
- package/lib/aws/notify/target.js +2 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.d.ts +1 -1
- package/lib/aws/notify/targets/util.js +10 -11
- package/lib/aws/notify/util.js +4 -4
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +1 -1
- package/lib/aws/storage/bucket.d.ts +298 -65
- package/lib/aws/storage/bucket.js +548 -225
- package/lib/aws/storage/cors-config.generated.d.ts +3 -3
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/index.d.ts +1 -0
- package/lib/aws/storage/index.js +2 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +6 -6
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.d.ts +1 -1
- package/lib/aws/storage/origin-access-identity.js +5 -4
- package/lib/aws/storage/parameter-util.d.ts +12 -0
- package/lib/aws/storage/parameter-util.js +65 -0
- package/lib/aws/storage/parameter.d.ts +526 -0
- package/lib/aws/storage/parameter.js +606 -0
- package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
- package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
- package/lib/aws/storage/util.d.ts +25 -3
- package/lib/aws/storage/util.js +84 -17
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/aws/util.js +2 -3
- package/lib/construct-base.d.ts +10 -1
- package/lib/construct-base.js +9 -6
- package/lib/duration.js +1 -1
- package/lib/expiration.d.ts +48 -0
- package/lib/expiration.js +68 -0
- package/lib/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +7 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/private/md5.d.ts +4 -0
- package/lib/private/md5.js +14 -0
- package/lib/private/unique-resource-name.js +3 -4
- package/lib/size.js +2 -2
- package/lib/stack-base.d.ts +4 -23
- package/lib/stack-base.js +9 -30
- package/lib/terra-func.d.ts +103 -0
- package/lib/terra-func.js +170 -0
- package/lib/token.js +5 -5
- package/package.json +15 -8
- package/bun.lockb +0 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Instance = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/instance.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
// TODO: Use TagManager and tag-aspect instead
|
|
11
|
+
const aws_tags_1 = require("../aws-tags");
|
|
12
|
+
// import { Tags } from "../tag-aspect";
|
|
13
|
+
const require_imdsv2_aspect_1 = require("./aspects/require-imdsv2-aspect");
|
|
14
|
+
// import { CloudFormationInit } from "./cfn-init";
|
|
15
|
+
const connections_1 = require("./connections");
|
|
16
|
+
const ebs_util_1 = require("./private/ebs-util");
|
|
17
|
+
const security_group_1 = require("./security-group");
|
|
18
|
+
const vpc_1 = require("./vpc");
|
|
19
|
+
// import { md5hash } from "../../helpers-internal";
|
|
20
|
+
const iam = require("../iam");
|
|
21
|
+
/**
|
|
22
|
+
* Name tag constant
|
|
23
|
+
*/
|
|
24
|
+
const NAME_TAG = "Name";
|
|
25
|
+
/**
|
|
26
|
+
* This represents a single EC2 instance
|
|
27
|
+
*/
|
|
28
|
+
class Instance extends aws_construct_1.AwsConstructBase {
|
|
29
|
+
get instanceOutputs() {
|
|
30
|
+
return {
|
|
31
|
+
instanceId: this.instanceId,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
get outputs() {
|
|
35
|
+
return this.instanceOutputs;
|
|
36
|
+
}
|
|
37
|
+
constructor(scope, id, props) {
|
|
38
|
+
super(scope, id);
|
|
39
|
+
this.securityGroups = [];
|
|
40
|
+
// if (props.initOptions && !props.init) {
|
|
41
|
+
// throw new Error("Setting 'initOptions' requires that 'init' is also set");
|
|
42
|
+
// }
|
|
43
|
+
if (props.keyName && props.keyPair) {
|
|
44
|
+
throw new Error("Cannot specify both of 'keyName' and 'keyPair'; prefer 'keyPair'");
|
|
45
|
+
}
|
|
46
|
+
// if credit specification is set, then the instance type must be burstable
|
|
47
|
+
if (props.creditSpecification && !props.instanceType.isBurstable()) {
|
|
48
|
+
throw new Error(`creditSpecification is supported only for T4g, T3a, T3, T2 instance type, got: ${props.instanceType.toString()}`);
|
|
49
|
+
}
|
|
50
|
+
if (props.securityGroup) {
|
|
51
|
+
this.securityGroup = props.securityGroup;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.securityGroup = new security_group_1.SecurityGroup(this, "InstanceSecurityGroup", {
|
|
55
|
+
vpc: props.vpc,
|
|
56
|
+
allowAllOutbound: props.allowAllOutbound !== false,
|
|
57
|
+
allowAllIpv6Outbound: props.allowAllIpv6Outbound,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
this.connections = new connections_1.Connections({
|
|
61
|
+
securityGroups: [this.securityGroup],
|
|
62
|
+
});
|
|
63
|
+
this.securityGroups.push(this.securityGroup);
|
|
64
|
+
aws_tags_1.Tags.of(this).add(NAME_TAG, props.instanceName || this.node.path);
|
|
65
|
+
if (props.instanceProfile && props.role) {
|
|
66
|
+
throw new Error("You cannot provide both instanceProfile and role");
|
|
67
|
+
}
|
|
68
|
+
let iamInstanceProfile = undefined;
|
|
69
|
+
if (props.instanceProfile?.role) {
|
|
70
|
+
this.role = props.instanceProfile.role;
|
|
71
|
+
iamInstanceProfile = props.instanceProfile.instanceProfileName;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.role =
|
|
75
|
+
props.role ||
|
|
76
|
+
new iam.Role(this, "InstanceRole", {
|
|
77
|
+
assumedBy: new iam.ServicePrincipal("ec2.amazonaws.com"),
|
|
78
|
+
});
|
|
79
|
+
const iamProfile = new provider_aws_1.iamInstanceProfile.IamInstanceProfile(this, "InstanceProfile", {
|
|
80
|
+
role: this.role.roleName,
|
|
81
|
+
});
|
|
82
|
+
iamInstanceProfile = iamProfile.id;
|
|
83
|
+
}
|
|
84
|
+
this.grantPrincipal = this.role;
|
|
85
|
+
if (props.ssmSessionPermissions) {
|
|
86
|
+
this.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName(this, "AmazonSSMManagedInstanceCore", "AmazonSSMManagedInstanceCore"));
|
|
87
|
+
}
|
|
88
|
+
// use delayed evaluation
|
|
89
|
+
const imageConfig = props.machineImage.getImage(this);
|
|
90
|
+
this.userData = props.userData ?? imageConfig.userData;
|
|
91
|
+
const securityGroupsToken = cdktf_1.Lazy.listValue({
|
|
92
|
+
produce: () => this.securityGroups.map((sg) => sg.securityGroupId),
|
|
93
|
+
});
|
|
94
|
+
const { subnets, hasPublic } = props.vpc.selectSubnets(props.vpcSubnets);
|
|
95
|
+
let subnet;
|
|
96
|
+
if (props.availabilityZone) {
|
|
97
|
+
const selected = subnets.filter((sn) => sn.availabilityZone === props.availabilityZone);
|
|
98
|
+
if (selected.length === 1) {
|
|
99
|
+
subnet = selected[0];
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
cdktf_1.Annotations.of(this).addError(`Need exactly 1 subnet to match AZ '${props.availabilityZone}', found ${selected.length}. Use a different availabilityZone.`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
if (subnets.length > 0) {
|
|
107
|
+
subnet = subnets[0];
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
cdktf_1.Annotations.of(this).addError(`Did not find any subnets matching '${JSON.stringify(props.vpcSubnets)}', please use a different selection.`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (!subnet) {
|
|
114
|
+
// We got here and we don't have a subnet because of validation errors.
|
|
115
|
+
// Invent one on the spot so the code below doesn't fail.
|
|
116
|
+
subnet = vpc_1.Subnet.fromSubnetAttributes(this, "DummySubnet", {
|
|
117
|
+
subnetId: "s-notfound",
|
|
118
|
+
availabilityZone: "az-notfound",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// network interfaces array is set to configure the primary network interface if associatePublicIpAddress is true or false
|
|
122
|
+
let networkInterfaces = undefined;
|
|
123
|
+
if (props.associatePublicIpAddress !== undefined) {
|
|
124
|
+
this.primaryNetworkInterface = new provider_aws_1.networkInterface.NetworkInterface(this, "NetworkInterface", {
|
|
125
|
+
subnetId: subnet.subnetId,
|
|
126
|
+
securityGroups: securityGroupsToken,
|
|
127
|
+
privateIps: props.privateIpAddress
|
|
128
|
+
? [props.privateIpAddress]
|
|
129
|
+
: undefined,
|
|
130
|
+
});
|
|
131
|
+
// TODO: Use networkInterfaceAttachment instead?
|
|
132
|
+
// ref: https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#network-interfaces
|
|
133
|
+
networkInterfaces = [
|
|
134
|
+
{
|
|
135
|
+
deviceIndex: 0,
|
|
136
|
+
networkInterfaceId: this.primaryNetworkInterface.id,
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
if (props.keyPair && !props.keyPair._isOsCompatible(imageConfig.osType)) {
|
|
141
|
+
throw new Error(`${props.keyPair.type} keys are not compatible with the chosen AMI`);
|
|
142
|
+
}
|
|
143
|
+
if (props.enclaveEnabled && props.hibernationEnabled) {
|
|
144
|
+
throw new Error("You can't set both `enclaveEnabled` and `hibernationEnabled` to true on the same instance");
|
|
145
|
+
}
|
|
146
|
+
if (props.ipv6AddressCount !== undefined &&
|
|
147
|
+
!cdktf_1.Token.isUnresolved(props.ipv6AddressCount) &&
|
|
148
|
+
(props.ipv6AddressCount < 0 || !Number.isInteger(props.ipv6AddressCount))) {
|
|
149
|
+
throw new Error(`\'ipv6AddressCount\' must be a non-negative integer, got: ${props.ipv6AddressCount}`);
|
|
150
|
+
}
|
|
151
|
+
if (props.ipv6AddressCount !== undefined &&
|
|
152
|
+
props.associatePublicIpAddress !== undefined) {
|
|
153
|
+
throw new Error("You can't set both 'ipv6AddressCount' and 'associatePublicIpAddress'");
|
|
154
|
+
}
|
|
155
|
+
// https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#tag-guide
|
|
156
|
+
const volumeTags = props.propagateTagsToVolumeOnCreation
|
|
157
|
+
? { [NAME_TAG]: props.instanceName || this.node.path }
|
|
158
|
+
: undefined;
|
|
159
|
+
// if network interfaces array is configured then subnetId, securityGroupIds,
|
|
160
|
+
// and privateIpAddress are configured on the network interface level and
|
|
161
|
+
// there is no need to configure them on the instance level
|
|
162
|
+
this.instance = new provider_aws_1.instance.Instance(this, "Resource", {
|
|
163
|
+
ami: imageConfig.imageId,
|
|
164
|
+
keyName: props.keyPair?.keyPairName ?? props?.keyName,
|
|
165
|
+
instanceType: props.instanceType.toString(),
|
|
166
|
+
subnetId: networkInterfaces ? undefined : subnet.subnetId,
|
|
167
|
+
securityGroups: networkInterfaces ? undefined : securityGroupsToken,
|
|
168
|
+
associatePublicIpAddress: props.associatePublicIpAddress,
|
|
169
|
+
networkInterface: networkInterfaces,
|
|
170
|
+
iamInstanceProfile,
|
|
171
|
+
userDataBase64: this.userData.render(this),
|
|
172
|
+
// unlike https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/instance.ts#L652
|
|
173
|
+
userDataReplaceOnChange: props.userDataCausesReplacement ?? true,
|
|
174
|
+
availabilityZone: subnet.availabilityZone,
|
|
175
|
+
sourceDestCheck: props.sourceDestCheck,
|
|
176
|
+
ebsBlockDevice: props.blockDevices !== undefined
|
|
177
|
+
? (0, ebs_util_1.instanceEbsBlockDeviceMappings)(this, props.blockDevices)
|
|
178
|
+
: undefined,
|
|
179
|
+
rootBlockDevice: props.blockDevices !== undefined
|
|
180
|
+
? (0, ebs_util_1.instanceRootBlockDeviceMapping)(this, props.blockDevices)
|
|
181
|
+
: undefined,
|
|
182
|
+
ephemeralBlockDevice: props.blockDevices !== undefined
|
|
183
|
+
? (0, ebs_util_1.instanceEphemeralBlockDeviceMappings)(props.blockDevices)
|
|
184
|
+
: undefined,
|
|
185
|
+
privateIp: networkInterfaces ? undefined : props.privateIpAddress,
|
|
186
|
+
volumeTags,
|
|
187
|
+
monitoring: props.detailedMonitoring,
|
|
188
|
+
creditSpecification: props.creditSpecification
|
|
189
|
+
? { cpuCredits: props.creditSpecification }
|
|
190
|
+
: undefined,
|
|
191
|
+
ebsOptimized: props.ebsOptimized,
|
|
192
|
+
disableApiTermination: props.disableApiTermination,
|
|
193
|
+
instanceInitiatedShutdownBehavior: props.instanceInitiatedShutdownBehavior,
|
|
194
|
+
placementGroup: props.placementGroup?.placementGroupName,
|
|
195
|
+
enclaveOptions: props.enclaveEnabled !== undefined
|
|
196
|
+
? { enabled: props.enclaveEnabled }
|
|
197
|
+
: undefined,
|
|
198
|
+
hibernation: props.hibernationEnabled,
|
|
199
|
+
ipv6AddressCount: props.ipv6AddressCount,
|
|
200
|
+
});
|
|
201
|
+
this.instance.node.addDependency(this.role);
|
|
202
|
+
// if associatePublicIpAddress is true, then there must be a dependency on internet connectivity
|
|
203
|
+
if (props.associatePublicIpAddress !== undefined &&
|
|
204
|
+
props.associatePublicIpAddress) {
|
|
205
|
+
const internetConnected = props.vpc.selectSubnets(props.vpcSubnets).internetConnectivityEstablished;
|
|
206
|
+
this.instance.node.addDependency(internetConnected);
|
|
207
|
+
}
|
|
208
|
+
if (!hasPublic && props.associatePublicIpAddress) {
|
|
209
|
+
throw new Error("To set 'associatePublicIpAddress: true' you must select Public subnets (vpcSubnets: { subnetType: SubnetType.PUBLIC })");
|
|
210
|
+
}
|
|
211
|
+
this.osType = imageConfig.osType;
|
|
212
|
+
this.node.defaultChild = this.instance;
|
|
213
|
+
this.instanceId = this.instance.id;
|
|
214
|
+
this.instanceAvailabilityZone = this.instance.availabilityZone;
|
|
215
|
+
this.instancePrivateDnsName = this.instance.privateDns;
|
|
216
|
+
this.instancePrivateIp = this.instance.privateIp;
|
|
217
|
+
this.instancePublicDnsName = this.instance.publicDns;
|
|
218
|
+
this.instancePublicIp = this.instance.publicIp;
|
|
219
|
+
this.primaryNetworkInterfaceId = this.primaryNetworkInterface
|
|
220
|
+
? this.primaryNetworkInterface.id
|
|
221
|
+
: this.instance.primaryNetworkInterfaceId;
|
|
222
|
+
// TODO: Add support for Cfn Signals
|
|
223
|
+
// // if both the resourceSignalTimeout and initOptions.timeout are set,
|
|
224
|
+
// // the timeout is summed together. This logic is done in applyCloudFormationInit.
|
|
225
|
+
// // This is because applyUpdatePolicies overwrites the timeout when both timeout fields are specified.
|
|
226
|
+
// this.applyUpdatePolicies(props);
|
|
227
|
+
// if (props.init) {
|
|
228
|
+
// this.applyCloudFormationInit(props.init, props.initOptions);
|
|
229
|
+
// }
|
|
230
|
+
if (props.requireImdsv2) {
|
|
231
|
+
cdktf_1.Aspects.of(this).add(new require_imdsv2_aspect_1.InstanceRequireImdsv2Aspect());
|
|
232
|
+
// , {
|
|
233
|
+
// priority: AspectPriority.MUTATING,
|
|
234
|
+
// });
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Add the security group to the instance.
|
|
239
|
+
*
|
|
240
|
+
* @param securityGroup: The security group to add
|
|
241
|
+
*/
|
|
242
|
+
addSecurityGroup(securityGroup) {
|
|
243
|
+
this.securityGroups.push(securityGroup);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Add command to the startup script of the instance.
|
|
247
|
+
* The command must be in the scripting language supported by the instance's OS (i.e. Linux/Windows).
|
|
248
|
+
*/
|
|
249
|
+
addUserData(...commands) {
|
|
250
|
+
this.userData.addCommands(...commands);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Adds a statement to the IAM role assumed by the instance.
|
|
254
|
+
*/
|
|
255
|
+
addToRolePolicy(statement) {
|
|
256
|
+
this.role.addToPrincipalPolicy(statement);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
exports.Instance = Instance;
|
|
260
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
261
|
+
Instance[_a] = { fqn: "terraconstructs.aws.compute.Instance", version: "0.0.12" };
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0RkFBNEY7QUFFNUYsc0RBSTZCO0FBQzdCLGlDQU1lO0FBR2Ysb0RBQW1FO0FBQ25FLDhDQUE4QztBQUM5QywwQ0FBbUM7QUFDbkMsd0NBQXdDO0FBQ3hDLDJFQUE4RTtBQUM5RSxtREFBbUQ7QUFDbkQsK0NBQTBEO0FBUzFELGlEQUk0QjtBQUM1QixxREFBaUU7QUFHakUsK0JBQXNEO0FBQ3RELG9EQUFvRDtBQUNwRCw4QkFBOEI7QUFFOUI7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFnWmhDOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsZ0NBQWdCO0lBQzVDLElBQVcsZUFBZTtRQUN4QixPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQzVCLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBc0VELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhGLG1CQUFjLEdBQXFCLEVBQUUsQ0FBQztRQUtyRCwwQ0FBMEM7UUFDMUMsK0VBQStFO1FBQy9FLElBQUk7UUFFSixJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFLENBQ25FLENBQUM7UUFDSixDQUFDO1FBRUQsMkVBQTJFO1FBQzNFLElBQUksS0FBSyxDQUFDLG1CQUFtQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE1BQU0sSUFBSSxLQUFL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O09BRUc7SUFDSSxlQUFlLENBQUMsU0FBOEI7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1QyxDQUFDOztBQWhYSCw0QkFzYkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9pbnN0YW5jZS50c1xuXG5pbXBvcnQge1xuICBpbnN0YW5jZSxcbiAgaWFtSW5zdGFuY2VQcm9maWxlIGFzIHRmSW5zdGFuY2VQcm9maWxlLFxuICBuZXR3b3JrSW50ZXJmYWNlIGFzIHRmTmV0d29ya0ludGVyZmFjZSxcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBBc3BlY3RzLFxuICAvLyBBc3BlY3RQcmlvcml0eSxcbiAgTGF6eSxcbiAgVG9rZW4sXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBJQXdzQ29uc3RydWN0LCBBd3NDb25zdHJ1Y3RCYXNlIH0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIFRPRE86IFVzZSBUYWdNYW5hZ2VyIGFuZCB0YWctYXNwZWN0IGluc3RlYWRcbmltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vYXdzLXRhZ3NcIjtcbi8vIGltcG9ydCB7IFRhZ3MgfSBmcm9tIFwiLi4vdGFnLWFzcGVjdFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VSZXF1aXJlSW1kc3YyQXNwZWN0IH0gZnJvbSBcIi4vYXNwZWN0cy9yZXF1aXJlLWltZHN2Mi1hc3BlY3RcIjtcbi8vIGltcG9ydCB7IENsb3VkRm9ybWF0aW9uSW5pdCB9IGZyb20gXCIuL2Nmbi1pbml0XCI7XG5pbXBvcnQgeyBDb25uZWN0aW9ucywgSUNvbm5lY3RhYmxlIH0gZnJvbSBcIi4vY29ubmVjdGlvbnNcIjtcbmltcG9ydCB7IEluc3RhbmNlVHlwZSB9IGZyb20gXCIuL2luc3RhbmNlLXR5cGVzXCI7XG5pbXBvcnQgeyBJS2V5UGFpciB9IGZyb20gXCIuL2tleS1wYWlyXCI7XG5pbXBvcnQge1xuICBDcHVDcmVkaXRzLFxuICBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG59IGZyb20gXCIuL2xhdW5jaC10ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgSU1hY2hpbmVJbWFnZSwgT3BlcmF0aW5nU3lzdGVtVHlwZSB9IGZyb20gXCIuL21hY2hpbmUtaW1hZ2VcIjtcbmltcG9ydCB7IElQbGFjZW1lbnRHcm91cCB9IGZyb20gXCIuL3BsYWNlbWVudC1ncm91cFwiO1xuaW1wb3J0IHtcbiAgaW5zdGFuY2VFYnNCbG9ja0RldmljZU1hcHBpbmdzLFxuICBpbnN0YW5jZUVwaGVtZXJhbEJsb2NrRGV2aWNlTWFwcGluZ3MsXG4gIGluc3RhbmNlUm9vdEJsb2NrRGV2aWNlTWFwcGluZyxcbn0gZnJvbSBcIi4vcHJpdmF0ZS9lYnMtdXRpbFwiO1xuaW1wb3J0IHsgSVNlY3VyaXR5R3JvdXAsIFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cFwiO1xuaW1wb3J0IHsgVXNlckRhdGEgfSBmcm9tIFwiLi91c2VyLWRhdGFcIjtcbmltcG9ydCB7IEJsb2NrRGV2aWNlIH0gZnJvbSBcIi4vdm9sdW1lXCI7XG5pbXBvcnQgeyBJVnBjLCBTdWJuZXQsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gXCIuL3ZwY1wiO1xuLy8gaW1wb3J0IHsgbWQ1aGFzaCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLWludGVybmFsXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbmNlT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUluc3RhbmNlIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCwgSUNvbm5lY3RhYmxlLCBpYW0uSUdyYW50YWJsZSB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGluc3RhbmNlT3V0cHV0czogSW5zdGFuY2VPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBJRFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhdmFpbGFiaWxpdHkgem9uZSB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIGluXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcml2YXRlIEROUyBuYW1lIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlUHJpdmF0ZURuc05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogUHJpdmF0ZSBJUCBmb3IgdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByaXZhdGVJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWNseS1yb3V0YWJsZSBETlMgbmFtZSBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogKE1heSBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgbmFtZSkuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlUHVibGljRG5zTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWNseS1yb3V0YWJsZSBJUCAgYWRkcmVzcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogKE1heSBiZSBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgSVApLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVB1YmxpY0lwOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQzIgSW5zdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgU1NIIGtleXBhaXIgdG8gZ3JhbnQgYWNjZXNzIHRvIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU1NIIGFjY2VzcyB3aWxsIGJlIHBvc3NpYmxlLlxuICAgKiBAZGVwcmVjYXRlZCAtIFVzZSBga2V5UGFpcmAgaW5zdGVhZCAtIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YyL2RvY3MvYXdzLWNkay1saWIuYXdzX2VjMi1yZWFkbWUuaHRtbCN1c2luZy1hbi1leGlzdGluZy1lYzIta2V5LXBhaXJcbiAgICovXG4gIHJlYWRvbmx5IGtleU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0gga2V5cGFpciB0byBncmFudCBhY2Nlc3MgdG8gdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNTSCBhY2Nlc3Mgd2lsbCBiZSBwb3NzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGtleVBhaXI/OiBJS2V5UGFpcjtcblxuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIGluc3RhbmNlIHdpdGhpbiB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUHJpdmF0ZSBzdWJuZXRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogSW4gd2hpY2ggQVogdG8gcGxhY2UgdGhlIGluc3RhbmNlIHdpdGhpbiB0aGUgVlBDXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmFuZG9tIHpvbmUuXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBjb3VsZCBpbml0aWF0ZSBjb25uZWN0aW9ucyB0byBhbnl3aGVyZSBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0FsbE91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgaW5zdGFuY2UgY291bGQgaW5pdGlhdGUgSVB2NiBjb25uZWN0aW9ucyB0byBhbnl3aGVyZSBieSBkZWZhdWx0LlxuICAgKiBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIHlvdSBkbyBub3QgcHJvdmlkZSBhIHNlY3VyaXR5IGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dBbGxJcHY2T3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRpbWUgdG8gd2FpdCBmb3IgdGhlIHJlc291cmNlU2lnbmFsQ291bnRcbiAgICpcbiAgICogVGhlIG1heGltdW0gdmFsdWUgaXMgNDMyMDAgKDEyIGhvdXJzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VTaWduYWxUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFZQQyB0byBsYXVuY2ggdGhlIGluc3RhbmNlIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBHcm91cCB0byBhc3NpZ24gdG8gdGhpcyBpbnN0YW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZSBuZXcgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBJU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogVHlwZSBvZiBpbnN0YW5jZSB0byBsYXVuY2hcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuXG4gIC8qKlxuICAgKiBBTUkgdG8gbGF1bmNoXG4gICAqL1xuICByZWFkb25seSBtYWNoaW5lSW1hZ2U6IElNYWNoaW5lSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmljIFVzZXJEYXRhIHRvIHVzZVxuICAgKlxuICAgKiBUaGUgVXNlckRhdGEgbWF5IHN0aWxsIGJlIG11dGF0ZWQgYWZ0ZXIgY3JlYXRpb24uXG4gICAqXG4gICAqIFVwZGF0ZXMgdG8gdGhpcyBmaWVsZCB3aWxsIHRyaWdnZXIgYSBzdG9wL3N0YXJ0IG9mIHRoZSBFQzIgaW5zdGFuY2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogSWYgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudCBpcyBzZXQgdGhlbiB1cGRhdGVzIHRvIHRoaXMgZmllbGQgd2lsbCB0cmlnZ2VyXG4gICAqIGEgZGVzdHJveSBhbmQgcmVjcmVhdGUgb2YgdGhlIEVDMiBpbnN0YW5jZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIFVzZXJEYXRhIG9iamVjdCBhcHByb3ByaWF0ZSBmb3IgdGhlIE1hY2hpbmVJbWFnZSdzXG4gICAqIE9wZXJhdGluZyBTeXN0ZW0gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJEYXRhPzogVXNlckRhdGE7XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdG8gdGhlIFVzZXJEYXRhIGZvcmNlIHJlcGxhY2VtZW50XG4gICAqXG4gICAqIERlcGVuZGluZyB0aGUgRUMyIGluc3RhbmNlIHR5cGUsIGNoYW5naW5nIFVzZXJEYXRhIGVpdGhlclxuICAgKiByZXN0YXJ0cyB0aGUgaW5zdGFuY2Ugb3IgcmVwbGFjZXMgdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiAtIEluc3RhbmNlIHN0b3JlLWJhY2tlZCBpbnN0YW5jZXMgYXJlIHJlcGxhY2VkLlxuICAgKiAtIEVCUy1iYWNrZWQgaW5zdGFuY2VzIGFyZSByZXN0YXJ0ZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHJlc3RhcnRpbmcgZG9lcyBub3QgZXhlY3V0ZSB0aGUgbmV3IFVzZXJEYXRhIHNvIHlvdVxuICAgKiB3aWxsIG5lZWQgYSBkaWZmZXJlbnQgbWVjaGFuaXNtIHRvIGVuc3VyZSB0aGUgaW5zdGFuY2UgaXMgcmVzdGFydGVkLlxuICAgKlxuICAgKiBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudD86IGJvb2xlYW47XG4gIC8vIEBkZWZhdWx0IC0gdHJ1ZSBpZiBgaW5pdE9wdGlvbnNgIGlzIHNwZWNpZmllZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG4gIC8qKlxuICAgKiBBbiBJQU0gcm9sZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgaW5zdGFuY2UgcHJvZmlsZSBhc3NpZ25lZCB0byB0aGlzIEF1dG8gU2NhbGluZyBHcm91cC5cbiAgICpcbiAgICogVGhlIHJvbGUgbXVzdCBiZSBhc3N1bWFibGUgYnkgdGhlIHNlcnZpY2UgcHJpbmNpcGFsIGBlYzIuYW1hem9uYXdzLmNvbWA6XG4gICAqIE5vdGU6IFlvdSBjYW4gcHJvdmlkZSBhbiBpbnN0YW5jZVByb2ZpbGUgb3IgYSByb2xlLCBidXQgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ015Um9sZScsIHtcbiAgICogICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKVxuICAgKiB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBBIHJvbGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQsIGl0IGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIGByb2xlYCBwcm9wZXJ0eVxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGluc3RhbmNlIHByb2ZpbGUgdXNlZCB0byBwYXNzIHJvbGUgaW5mb3JtYXRpb24gdG8gRUMyIGluc3RhbmNlcy5cbiAgICpcbiAgICogTm90ZTogWW91IGNhbiBwcm92aWRlIGFuIGluc3RhbmNlUHJvZmlsZSBvciBhIHJvbGUsIGJ1dCBub3QgYm90aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBpbnN0YW5jZSBwcm9maWxlXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZVByb2ZpbGU/OiBpYW0uSUluc3RhbmNlUHJvZmlsZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ0RLIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSBhbiBpbnN0YW5jZSBsYXVuY2hlZCBpbiBhIFZQQyB0byBwZXJmb3JtIE5BVC5cbiAgICogVGhpcyBjb250cm9scyB3aGV0aGVyIHNvdXJjZS9kZXN0aW5hdGlvbiBjaGVja2luZyBpcyBlbmFibGVkIG9uIHRoZSBpbnN0YW5jZS5cbiAgICogQSB2YWx1ZSBvZiB0cnVlIG1lYW5zIHRoYXQgY2hlY2tpbmcgaXMgZW5hYmxlZCwgYW5kIGZhbHNlIG1lYW5zIHRoYXQgY2hlY2tpbmcgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSB2YWx1ZSBtdXN0IGJlIGZhbHNlIGZvciB0aGUgaW5zdGFuY2UgdG8gcGVyZm9ybSBOQVQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZURlc3RDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBob3cgYmxvY2sgZGV2aWNlcyBhcmUgZXhwb3NlZCB0byB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gc3BlY2lmeSB2aXJ0dWFsIGRldmljZXMgYW5kIEVCUyB2b2x1bWVzLlxuICAgKlxuICAgKiBFYWNoIGluc3RhbmNlIHRoYXQgaXMgbGF1bmNoZWQgaGFzIGFuIGFzc29jaWF0ZWQgcm9vdCBkZXZpY2Ugdm9sdW1lLFxuICAgKiBlaXRoZXIgYW4gQW1hem9uIEVCUyB2b2x1bWUgb3IgYW4gaW5zdGFuY2Ugc3RvcmUgdm9sdW1lLlxuICAgKiBZb3UgY2FuIHVzZSBibG9jayBkZXZpY2UgbWFwcGluZ3MgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIEVCUyB2b2x1bWVzIG9yXG4gICAqIGluc3RhbmNlIHN0b3JlIHZvbHVtZXMgdG8gYXR0YWNoIHRvIGFuIGluc3RhbmNlIHdoZW4gaXQgaXMgbGF1bmNoZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Jsb2NrLWRldmljZS1tYXBwaW5nLWNvbmNlcHRzLmh0bWxcbiAgICogQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjZWJzLWVwaGVtZXJhbC1hbmQtcm9vdC1ibG9jay1kZXZpY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVXNlcyB0aGUgYmxvY2sgZGV2aWNlIG1hcHBpbmcgb2YgdGhlIEFNSVxuICAgKi9cbiAgcmVhZG9ubHkgYmxvY2tEZXZpY2VzPzogQmxvY2tEZXZpY2VbXTtcblxuICAvKipcbiAgICogRGVmaW5lcyBhIHByaXZhdGUgSVAgYWRkcmVzcyB0byBhc3NvY2lhdGUgd2l0aCBhbiBpbnN0YW5jZS5cbiAgICpcbiAgICogUHJpdmF0ZSBJUCBzaG91bGQgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGUgVlBDIHRoYXQgdGhlIGluc3RhbmNlIGlzIGJ1aWxkIHdpdGhpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhc3NvY2lhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwQWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogUHJvcGFnYXRlIHRoZSBFQzIgaW5zdGFuY2UgdGFncyB0byB0aGUgRUJTIHZvbHVtZXMuXG4gICAqXG4gICAqIERvIG5vdCBwcm9wYWdhdGUgdGFncyBpZiB5b3UgcGxhbiB0byBtYW5hZ2UgYmxvY2sgZGV2aWNlIHRhZ3Mgb3V0c2lkZVxuICAgKiB0aGUgYGF3c19pbnN0YW5jZWAgY29uZmlndXJhdGlvbiwgc3VjaCBhcyB1c2luZyBgdGFnc2AgaW4gYW4gYGF3c19lYnNfdm9sdW1lYFxuICAgKiByZXNvdXJjZSBhdHRhY2hlZCB2aWEgYGF3c192b2x1bWVfYXR0YWNobWVudGAuXG4gICAqXG4gICAqIERvaW5nIHNvIHdpbGwgcmVzdWx0IGluIHJlc291cmNlIGN5Y2xpbmcgYW5kIGluY29uc2lzdGVudCBiZWhhdmlvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGFnYXRlVGFnc1RvVm9sdW1lT25DcmVhdGlvbj86IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogSW1wbGVtZW50IEdyaWQgSW5pdFxuICAvLyAvKipcbiAgLy8gICogQXBwbHkgdGhlIGdpdmVuIENsb3VkRm9ybWF0aW9uIEluaXQgY29uZmlndXJhdGlvbiB0byB0aGUgaW5zdGFuY2UgYXQgc3RhcnR1cFxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCAtIG5vIENsb3VkRm9ybWF0aW9uIGluaXRcbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGluaXQ/OiBDbG91ZEZvcm1hdGlvbkluaXQ7XG4gIC8vXG4gIC8vIC8qKlxuICAvLyAgKiBVc2UgdGhlIGdpdmVuIG9wdGlvbnMgZm9yIGFwcGx5aW5nIENsb3VkRm9ybWF0aW9uIEluaXRcbiAgLy8gICpcbiAgLy8gICogRGVzY3JpYmVzIHRoZSBjb25maWdzZXRzIHRvIHVzZSBhbmQgdGhlIHRpbWVvdXQgdG8gd2FpdFxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgaW5pdE9wdGlvbnM/OiBBcHBseUNsb3VkRm9ybWF0aW9uSW5pdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgSU1EU3YyIHNob3VsZCBiZSByZXF1aXJlZCBvbiB0aGlzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlSW1kc3YyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBcIkRldGFpbGVkIE1vbml0b3JpbmdcIiBpcyBlbmFibGVkIGZvciB0aGlzIGluc3RhbmNlXG4gICAqIEtlZXAgaW4gbWluZCB0aGF0IERldGFpbGVkIE1vbml0b3JpbmcgcmVzdWx0cyBpbiBleHRyYSBjaGFyZ2VzXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2F3cy5hbWF6b24uY29tL2Nsb3Vkd2F0Y2gvcHJpY2luZy9cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGV0YWlsZWRNb25pdG9yaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWRkIFNTTSBzZXNzaW9uIHBlcm1pc3Npb25zIHRvIHRoZSBpbnN0YW5jZSByb2xlXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0byBgdHJ1ZWAgYWRkcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIHRvIGNvbm5lY3RcbiAgICogdG8gdGhlIGluc3RhbmNlIHVzaW5nIFNTTSBTZXNzaW9uIE1hbmFnZXIuIFlvdSBjYW4gZG8gdGhpc1xuICAgKiBmcm9tIHRoZSBBV1MgQ29uc29sZS5cbiAgICpcbiAgICogTk9URTogU2V0dGluZyB0aGlzIGZsYWcgdG8gYHRydWVgIG1heSBub3QgYmUgZW5vdWdoIGJ5IGl0c2VsZi5cbiAgICogWW91IG11c3QgYWxzbyB1c2UgYW4gQU1JIHRoYXQgY29tZXMgd2l0aCB0aGUgU1NNIEFnZW50LCBvciBpbnN0YWxsXG4gICAqIHRoZSBTU00gQWdlbnQgeW91cnNlbGYuIFNlZVxuICAgKiBbV29ya2luZyB3aXRoIFNTTSBBZ2VudF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvdXNlcmd1aWRlL3NzbS1hZ2VudC5odG1sKVxuICAgKiBpbiB0aGUgU1NNIERldmVsb3BlciBHdWlkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNzbVNlc3Npb25QZXJtaXNzaW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXNzb2NpYXRlIGEgcHVibGljIElQIGFkZHJlc3MgdG8gdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgYXR0YWNoZWQgdG8gdGhpcyBpbnN0YW5jZS5cbiAgICpcbiAgICogWW91IGNhbm5vdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgYW5kIGBpcHY2QWRkcmVzc0NvdW50YCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHB1YmxpYyBJUCBhZGRyZXNzIGlzIGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYmFzZWQgb24gZGVmYXVsdCBiZWhhdmlvclxuICAgKi9cbiAgcmVhZG9ubHkgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeWluZyB0aGUgQ1BVIGNyZWRpdCB0eXBlIGZvciBidXJzdGFibGUgRUMyIGluc3RhbmNlIHR5cGVzIChUMiwgVDMsIFQzYSwgZXRjKS5cbiAgICogVGhlIHVubGltaXRlZCBDUFUgY3JlZGl0IG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBUMyBpbnN0YW5jZXMgd2l0aCBhIGRlZGljYXRlZCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFQyIGluc3RhbmNlcyBhcmUgc3RhbmRhcmQsIHdoaWxlIFQzLCBUNGcsIGFuZCBUM2EgaW5zdGFuY2VzIGFyZSB1bmxpbWl0ZWQuXG4gICAqL1xuICByZWFkb25seSBjcmVkaXRTcGVjaWZpY2F0aW9uPzogQ3B1Q3JlZGl0cztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIG9wdGltaXplZCBmb3IgQW1hem9uIEVCUyBJL08uXG4gICAqXG4gICAqIFRoaXMgb3B0aW1pemF0aW9uIHByb3ZpZGVzIGRlZGljYXRlZCB0aHJvdWdocHV0IHRvIEFtYXpvbiBFQlMgYW5kIGFuIG9wdGltaXplZCBjb25maWd1cmF0aW9uIHN0YWNrIHRvIHByb3ZpZGUgb3B0aW1hbCBBbWF6b24gRUJTIEkvTyBwZXJmb3JtYW5jZS5cbiAgICogVGhpcyBvcHRpbWl6YXRpb24gaXNuJ3QgYXZhaWxhYmxlIHdpdGggYWxsIGluc3RhbmNlIHR5cGVzLlxuICAgKiBBZGRpdGlvbmFsIHVzYWdlIGNoYXJnZXMgYXBwbHkgd2hlbiB1c2luZyBhbiBFQlMtb3B0aW1pemVkIGluc3RhbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZWJzT3B0aW1pemVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIGluc3RhbmNlIHdpbGwgbm90IGJlIGFibGUgdG8gYmUgdGVybWluYXRlZCB1c2luZyB0aGUgQW1hem9uIEVDMiBjb25zb2xlLCBDTEksIG9yIEFQSS5cbiAgICpcbiAgICogVG8gY2hhbmdlIHRoaXMgYXR0cmlidXRlIGFmdGVyIGxhdW5jaCwgdXNlIFtNb2RpZnlJbnN0YW5jZUF0dHJpYnV0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Nb2RpZnlJbnN0YW5jZUF0dHJpYnV0ZS5odG1sKS5cbiAgICogQWx0ZXJuYXRpdmVseSwgaWYgeW91IHNldCBJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IgdG8gdGVybWluYXRlLCB5b3UgY2FuIHRlcm1pbmF0ZSB0aGUgaW5zdGFuY2VcbiAgICogYnkgcnVubmluZyB0aGUgc2h1dGRvd24gY29tbWFuZCBmcm9tIHRoZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaW5zdGFuY2UuaHRtbCNjZm4tZWMyLWluc3RhbmNlLWRpc2FibGVhcGl0ZXJtaW5hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzYWJsZUFwaVRlcm1pbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYW4gaW5zdGFuY2Ugc3RvcHMgb3IgdGVybWluYXRlcyB3aGVuIHlvdSBpbml0aWF0ZSBzaHV0ZG93biBmcm9tIHRoZSBpbnN0YW5jZVxuICAgKiAodXNpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZCBmb3Igc3lzdGVtIHNodXRkb3duKS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvdGVybWluYXRpbmctaW5zdGFuY2VzLmh0bWwjVXNpbmdfQ2hhbmdpbmdJbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3JcbiAgICpcbiAgICogQGRlZmF1bHQgSW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yLlNUT1BcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcj86IEluc3RhbmNlSW5pdGlhdGVkU2h1dGRvd25CZWhhdmlvcjtcblxuICAvKipcbiAgICogVGhlIHBsYWNlbWVudCBncm91cCB0aGF0IHlvdSB3YW50IHRvIGxhdW5jaCB0aGUgaW5zdGFuY2UgaW50by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwbGFjZW1lbnQgZ3JvdXAgd2lsbCBiZSB1c2VkIGZvciB0aGlzIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhY2VtZW50R3JvdXA/OiBJUGxhY2VtZW50R3JvdXA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGluc3RhbmNlIGlzIGVuYWJsZWQgZm9yIEFXUyBOaXRybyBFbmNsYXZlcy5cbiAgICpcbiAgICogTml0cm8gRW5jbGF2ZXMgcmVxdWlyZXMgYSBOaXRyby1iYXNlZCB2aXJ0dWFsaXplZCBwYXJlbnQgaW5zdGFuY2Ugd2l0aCBzcGVjaWZpYyBJbnRlbC9BTUQgd2l0aCBhdCBsZWFzdCA0IHZDUFVzXG4gICAqIG9yIEdyYXZpdG9uIHdpdGggYXQgbGVhc3QgMiB2Q1BVcyBpbnN0YW5jZSB0eXBlcyBhbmQgTGludXgvV2luZG93cyBob3N0IE9TLFxuICAgKiB3aGlsZSB0aGUgZW5jbGF2ZSBpdHNlbGYgc3VwcG9ydHMgb25seSBMaW51eCBPUy5cbiAgICpcbiAgICogWW91IGNhbid0IHNldCBib3RoIGBlbmNsYXZlRW5hYmxlZGAgYW5kIGBoaWJlcm5hdGlvbkVuYWJsZWRgIHRvIHRydWUgb24gdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VuY2xhdmVzL2xhdGVzdC91c2VyL25pdHJvLWVuY2xhdmUuaHRtbCNuaXRyby1lbmNsYXZlLXJlcXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jbGF2ZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBlbmFibGVkIGZvciBoaWJlcm5hdGlvbi5cbiAgICpcbiAgICogWW91IGNhbid0IHNldCBib3RoIGBlbmNsYXZlRW5hYmxlZGAgYW5kIGBoaWJlcm5hdGlvbkVuYWJsZWRgIHRvIHRydWUgb24gdGhlIHNhbWUgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZWMyLWluc3RhbmNlLWhpYmVybmF0aW9ub3B0aW9ucy5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGhpYmVybmF0aW9uRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgSVB2NiBhZGRyZXNzZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UuXG4gICAqXG4gICAqIEFtYXpvbiBFQzIgY2hvb3NlcyB0aGUgSVB2NiBhZGRyZXNzZXMgZnJvbSB0aGUgcmFuZ2Ugb2YgeW91ciBzdWJuZXQuXG4gICAqXG4gICAqIFlvdSBjYW5ub3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5IGFuZCBgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzYCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZvciBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIGFuIElQdjYgc3VibmV0LCB1c2UgMTsgb3RoZXJ3aXNlLCB1c2UgMC5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjZBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyByZXByZXNlbnRzIGEgc2luZ2xlIEVDMiBpbnN0YW5jZVxuICovXG5leHBvcnQgY2xhc3MgSW5zdGFuY2UgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSUluc3RhbmNlIHtcbiAgcHVibGljIGdldCBpbnN0YW5jZU91dHB1dHMoKTogSW5zdGFuY2VPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0YW5jZUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlT3V0cHV0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBPUyB0aGUgaW5zdGFuY2UgaXMgcnVubmluZy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvc1R5cGU6IE9wZXJhdGluZ1N5c3RlbVR5cGU7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5IHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzdW1lZCBieSB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBVc2VyRGF0YSBmb3IgdGhlIGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXNlckRhdGE6IFVzZXJEYXRhO1xuXG4gIC8qKlxuICAgKiB0aGUgdW5kZXJseWluZyBpbnN0YW5jZSByZXNvdXJjZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlOiBpbnN0YW5jZS5JbnN0YW5jZTtcblxuICAvKipcbiAgICogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlZmFjZSAoaWYgYXBwbGljYWJsZSlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJpbWFyeU5ldHdvcmtJbnRlcmZhY2U/OiB0Zk5ldHdvcmtJbnRlcmZhY2UuTmV0d29ya0ludGVyZmFjZTtcblxuICAvKipcbiAgICogdGhlIHByaW1hcnkgbmV0d29yayBpbnRlcmZhY2UgaWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFuY2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlQXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHJpdmF0ZURuc05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnN0YW5jZVByaXZhdGVJcDogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHVibGljRG5zTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbmNlUHVibGljSXA6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA6IElTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzOiBJU2VjdXJpdHlHcm91cFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEluc3RhbmNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gaWYgKHByb3BzLmluaXRPcHRpb25zICYmICFwcm9wcy5pbml0KSB7XG4gICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoXCJTZXR0aW5nICdpbml0T3B0aW9ucycgcmVxdWlyZXMgdGhhdCAnaW5pdCcgaXMgYWxzbyBzZXRcIik7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLmtleU5hbWUgJiYgcHJvcHMua2V5UGFpcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGJvdGggb2YgJ2tleU5hbWUnIGFuZCAna2V5UGFpcic7IHByZWZlciAna2V5UGFpcidcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaWYgY3JlZGl0IHNwZWNpZmljYXRpb24gaXMgc2V0LCB0aGVuIHRoZSBpbnN0YW5jZSB0eXBlIG11c3QgYmUgYnVyc3RhYmxlXG4gICAgaWYgKHByb3BzLmNyZWRpdFNwZWNpZmljYXRpb24gJiYgIXByb3BzLmluc3RhbmNlVHlwZS5pc0J1cnN0YWJsZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjcmVkaXRTcGVjaWZpY2F0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBUNGcsIFQzYSwgVDMsIFQyIGluc3RhbmNlIHR5cGUsIGdvdDogJHtwcm9wcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuc2VjdXJpdHlHcm91cCkge1xuICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gcHJvcHMuc2VjdXJpdHlHcm91cDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAodGhpcywgXCJJbnN0YW5jZVNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgYWxsb3dBbGxPdXRib3VuZDogcHJvcHMuYWxsb3dBbGxPdXRib3VuZCAhPT0gZmFsc2UsXG4gICAgICAgIGFsbG93QWxsSXB2Nk91dGJvdW5kOiBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5zZWN1cml0eUdyb3VwXSxcbiAgICB9KTtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2godGhpcy5zZWN1cml0eUdyb3VwKTtcbiAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW5zdGFuY2VOYW1lIHx8IHRoaXMubm9kZS5wYXRoKTtcblxuICAgIGlmIChwcm9wcy5pbnN0YW5jZVByb2ZpbGUgJiYgcHJvcHMucm9sZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBwcm92aWRlIGJvdGggaW5zdGFuY2VQcm9maWxlIGFuZCByb2xlXCIpO1xuICAgIH1cblxuICAgIGxldCBpYW1JbnN0YW5jZVByb2ZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvcHMuaW5zdGFuY2VQcm9maWxlPy5yb2xlKSB7XG4gICAgICB0aGlzLnJvbGUgPSBwcm9wcy5pbnN0YW5jZVByb2ZpbGUucm9sZTtcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSA9IHByb3BzLmluc3RhbmNlUHJvZmlsZS5pbnN0YW5jZVByb2ZpbGVOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvbGUgPVxuICAgICAgICBwcm9wcy5yb2xlIHx8XG4gICAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLCBcIkluc3RhbmNlUm9sZVwiLCB7XG4gICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGlhbVByb2ZpbGUgPSBuZXcgdGZJbnN0YW5jZVByb2ZpbGUuSWFtSW5zdGFuY2VQcm9maWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkluc3RhbmNlUHJvZmlsZVwiLFxuICAgICAgICB7XG4gICAgICAgICAgcm9sZTogdGhpcy5yb2xlLnJvbGVOYW1lLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSA9IGlhbVByb2ZpbGUuaWQ7XG4gICAgfVxuXG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcblxuICAgIGlmIChwcm9wcy5zc21TZXNzaW9uUGVybWlzc2lvbnMpIHtcbiAgICAgIHRoaXMucm9sZS5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIixcbiAgICAgICAgICBcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gdXNlIGRlbGF5ZWQgZXZhbHVhdGlvblxuICAgIGNvbnN0IGltYWdlQ29uZmlnID0gcHJvcHMubWFjaGluZUltYWdlLmdldEltYWdlKHRoaXMpO1xuICAgIHRoaXMudXNlckRhdGEgPSBwcm9wcy51c2VyRGF0YSA/PyBpbWFnZUNvbmZpZy51c2VyRGF0YTtcbiAgICBjb25zdCBzZWN1cml0eUdyb3Vwc1Rva2VuID0gTGF6eS5saXN0VmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5zZWN1cml0eUdyb3Vwcy5tYXAoKHNnKSA9PiBzZy5zZWN1cml0eUdyb3VwSWQpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBzdWJuZXRzLCBoYXNQdWJsaWMgfSA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHByb3BzLnZwY1N1Ym5ldHMpO1xuICAgIGxldCBzdWJuZXQ7XG4gICAgaWYgKHByb3BzLmF2YWlsYWJpbGl0eVpvbmUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gc3VibmV0cy5maWx0ZXIoXG4gICAgICAgIChzbikgPT4gc24uYXZhaWxhYmlsaXR5Wm9uZSA9PT0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHN1Ym5ldCA9IHNlbGVjdGVkWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgICAgYE5lZWQgZXhhY3RseSAxIHN1Ym5ldCB0byBtYXRjaCBBWiAnJHtwcm9wcy5hdmFpbGFiaWxpdHlab25lfScsIGZvdW5kICR7c2VsZWN0ZWQubGVuZ3RofS4gVXNlIGEgZGlmZmVyZW50IGF2YWlsYWJpbGl0eVpvbmUuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN1Ym5ldHMubGVuZ3RoID4gMCkge1xuICAgICAgICBzdWJuZXQgPSBzdWJuZXRzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgICAgYERpZCBub3QgZmluZCBhbnkgc3VibmV0cyBtYXRjaGluZyAnJHtKU09OLnN0cmluZ2lmeShwcm9wcy52cGNTdWJuZXRzKX0nLCBwbGVhc2UgdXNlIGEgZGlmZmVyZW50IHNlbGVjdGlvbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXN1Ym5ldCkge1xuICAgICAgLy8gV2UgZ290IGhlcmUgYW5kIHdlIGRvbid0IGhhdmUgYSBzdWJuZXQgYmVjYXVzZSBvZiB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIEludmVudCBvbmUgb24gdGhlIHNwb3Qgc28gdGhlIGNvZGUgYmVsb3cgZG9lc24ndCBmYWlsLlxuICAgICAgc3VibmV0ID0gU3VibmV0LmZyb21TdWJuZXRBdHRyaWJ1dGVzKHRoaXMsIFwiRHVtbXlTdWJuZXRcIiwge1xuICAgICAgICBzdWJuZXRJZDogXCJzLW5vdGZvdW5kXCIsXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IFwiYXotbm90Zm91bmRcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIG5ldHdvcmsgaW50ZXJmYWNlcyBhcnJheSBpcyBzZXQgdG8gY29uZmlndXJlIHRoZSBwcmltYXJ5IG5ldHdvcmsgaW50ZXJmYWNlIGlmIGFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyBpcyB0cnVlIG9yIGZhbHNlXG4gICAgbGV0IG5ldHdvcmtJbnRlcmZhY2VzOiBpbnN0YW5jZS5JbnN0YW5jZU5ldHdvcmtJbnRlcmZhY2VbXSB8IHVuZGVmaW5lZCA9XG4gICAgICB1bmRlZmluZWQ7XG4gICAgaWYgKHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnByaW1hcnlOZXR3b3JrSW50ZXJmYWNlID0gbmV3IHRmTmV0d29ya0ludGVyZmFjZS5OZXR3b3JrSW50ZXJmYWNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIk5ldHdvcmtJbnRlcmZhY2VcIixcbiAgICAgICAge1xuICAgICAgICAgIHN1Ym5ldElkOiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cHM6IHNlY3VyaXR5R3JvdXBzVG9rZW4sXG4gICAgICAgICAgcHJpdmF0ZUlwczogcHJvcHMucHJpdmF0ZUlwQWRkcmVzc1xuICAgICAgICAgICAgPyBbcHJvcHMucHJpdmF0ZUlwQWRkcmVzc11cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIFRPRE86IFVzZSBuZXR3b3JrSW50ZXJmYWNlQXR0YWNobWVudCBpbnN0ZWFkP1xuICAgICAgLy8gcmVmOiBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjbmV0d29yay1pbnRlcmZhY2VzXG4gICAgICBuZXR3b3JrSW50ZXJmYWNlcyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZUluZGV4OiAwLFxuICAgICAgICAgIG5ldHdvcmtJbnRlcmZhY2VJZDogdGhpcy5wcmltYXJ5TmV0d29ya0ludGVyZmFjZS5pZCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmtleVBhaXIgJiYgIXByb3BzLmtleVBhaXIuX2lzT3NDb21wYXRpYmxlKGltYWdlQ29uZmlnLm9zVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7cHJvcHMua2V5UGFpci50eXBlfSBrZXlzIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBjaG9zZW4gQU1JYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmVuY2xhdmVFbmFibGVkICYmIHByb3BzLmhpYmVybmF0aW9uRW5hYmxlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIllvdSBjYW4ndCBzZXQgYm90aCBgZW5jbGF2ZUVuYWJsZWRgIGFuZCBgaGliZXJuYXRpb25FbmFibGVkYCB0byB0cnVlIG9uIHRoZSBzYW1lIGluc3RhbmNlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmlwdjZBZGRyZXNzQ291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcHY2QWRkcmVzc0NvdW50KSAmJlxuICAgICAgKHByb3BzLmlwdjZBZGRyZXNzQ291bnQgPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLmlwdjZBZGRyZXNzQ291bnQpKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXFwnaXB2NkFkZHJlc3NDb3VudFxcJyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIGdvdDogJHtwcm9wcy5pcHY2QWRkcmVzc0NvdW50fWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmlwdjZBZGRyZXNzQ291bnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJZb3UgY2FuJ3Qgc2V0IGJvdGggJ2lwdjZBZGRyZXNzQ291bnQnIGFuZCAnYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvaW5zdGFuY2UjdGFnLWd1aWRlXG4gICAgY29uc3Qgdm9sdW1lVGFncyA9IHByb3BzLnByb3BhZ2F0ZVRhZ3NUb1ZvbHVtZU9uQ3JlYXRpb25cbiAgICAgID8geyBbTkFNRV9UQUddOiBwcm9wcy5pbnN0YW5jZU5hbWUgfHwgdGhpcy5ub2RlLnBhdGggfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBpZiBuZXR3b3JrIGludGVyZmFjZXMgYXJyYXkgaXMgY29uZmlndXJlZCB0aGVuIHN1Ym5ldElkLCBzZWN1cml0eUdyb3VwSWRzLFxuICAgIC8vIGFuZCBwcml2YXRlSXBBZGRyZXNzIGFyZSBjb25maWd1cmVkIG9uIHRoZSBuZXR3b3JrIGludGVyZmFjZSBsZXZlbCBhbmRcbiAgICAvLyB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbmZpZ3VyZSB0aGVtIG9uIHRoZSBpbnN0YW5jZSBsZXZlbFxuICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgaW5zdGFuY2UuSW5zdGFuY2UodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhbWk6IGltYWdlQ29uZmlnLmltYWdlSWQsXG4gICAgICBrZXlOYW1lOiBwcm9wcy5rZXlQYWlyPy5rZXlQYWlyTmFtZSA/PyBwcm9wcz8ua2V5TmFtZSxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCksXG4gICAgICBzdWJuZXRJZDogbmV0d29ya0ludGVyZmFjZXMgPyB1bmRlZmluZWQgOiBzdWJuZXQuc3VibmV0SWQsXG4gICAgICBzZWN1cml0eUdyb3VwczogbmV0d29ya0ludGVyZmFjZXMgPyB1bmRlZmluZWQgOiBzZWN1cml0eUdyb3Vwc1Rva2VuLFxuICAgICAgYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MsXG4gICAgICBuZXR3b3JrSW50ZXJmYWNlOiBuZXR3b3JrSW50ZXJmYWNlcyxcbiAgICAgIGlhbUluc3RhbmNlUHJvZmlsZSxcbiAgICAgIHVzZXJEYXRhQmFzZTY0OiB0aGlzLnVzZXJEYXRhLnJlbmRlcih0aGlzKSxcbiAgICAgIC8vIHVubGlrZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi9pbnN0YW5jZS50cyNMNjUyXG4gICAgICB1c2VyRGF0YVJlcGxhY2VPbkNoYW5nZTogcHJvcHMudXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudCA/PyB0cnVlLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogc3VibmV0LmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBzb3VyY2VEZXN0Q2hlY2s6IHByb3BzLnNvdXJjZURlc3RDaGVjayxcbiAgICAgIGVic0Jsb2NrRGV2aWNlOlxuICAgICAgICBwcm9wcy5ibG9ja0RldmljZXMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gaW5zdGFuY2VFYnNCbG9ja0RldmljZU1hcHBpbmdzKHRoaXMsIHByb3BzLmJsb2NrRGV2aWNlcylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHJvb3RCbG9ja0RldmljZTpcbiAgICAgICAgcHJvcHMuYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGluc3RhbmNlUm9vdEJsb2NrRGV2aWNlTWFwcGluZyh0aGlzLCBwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlcGhlbWVyYWxCbG9ja0RldmljZTpcbiAgICAgICAgcHJvcHMuYmxvY2tEZXZpY2VzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGluc3RhbmNlRXBoZW1lcmFsQmxvY2tEZXZpY2VNYXBwaW5ncyhwcm9wcy5ibG9ja0RldmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBwcml2YXRlSXA6IG5ldHdvcmtJbnRlcmZhY2VzID8gdW5kZWZpbmVkIDogcHJvcHMucHJpdmF0ZUlwQWRkcmVzcyxcbiAgICAgIHZvbHVtZVRhZ3MsXG4gICAgICBtb25pdG9yaW5nOiBwcm9wcy5kZXRhaWxlZE1vbml0b3JpbmcsXG4gICAgICBjcmVkaXRTcGVjaWZpY2F0aW9uOiBwcm9wcy5jcmVkaXRTcGVjaWZpY2F0aW9uXG4gICAgICAgID8geyBjcHVDcmVkaXRzOiBwcm9wcy5jcmVkaXRTcGVjaWZpY2F0aW9uIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBlYnNPcHRpbWl6ZWQ6IHByb3BzLmVic09wdGltaXplZCxcbiAgICAgIGRpc2FibGVBcGlUZXJtaW5hdGlvbjogcHJvcHMuZGlzYWJsZUFwaVRlcm1pbmF0aW9uLFxuICAgICAgaW5zdGFuY2VJbml0aWF0ZWRTaHV0ZG93bkJlaGF2aW9yOlxuICAgICAgICBwcm9wcy5pbnN0YW5jZUluaXRpYXRlZFNodXRkb3duQmVoYXZpb3IsXG4gICAgICBwbGFjZW1lbnRHcm91cDogcHJvcHMucGxhY2VtZW50R3JvdXA/LnBsYWNlbWVudEdyb3VwTmFtZSxcbiAgICAgIGVuY2xhdmVPcHRpb25zOlxuICAgICAgICBwcm9wcy5lbmNsYXZlRW5hYmxlZCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGVuYWJsZWQ6IHByb3BzLmVuY2xhdmVFbmFibGVkIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGhpYmVybmF0aW9uOiBwcm9wcy5oaWJlcm5hdGlvbkVuYWJsZWQsXG4gICAgICBpcHY2QWRkcmVzc0NvdW50OiBwcm9wcy5pcHY2QWRkcmVzc0NvdW50LFxuICAgIH0pO1xuICAgIHRoaXMuaW5zdGFuY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICAvLyBpZiBhc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgaXMgdHJ1ZSwgdGhlbiB0aGVyZSBtdXN0IGJlIGEgZGVwZW5kZW5jeSBvbiBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICBpZiAoXG4gICAgICBwcm9wcy5hc3NvY2lhdGVQdWJsaWNJcEFkZHJlc3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMuYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzXG4gICAgKSB7XG4gICAgICBjb25zdCBpbnRlcm5ldENvbm5lY3RlZCA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKFxuICAgICAgICBwcm9wcy52cGNTdWJuZXRzLFxuICAgICAgKS5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkO1xuICAgICAgdGhpcy5pbnN0YW5jZS5ub2RlLmFkZERlcGVuZGVuY3koaW50ZXJuZXRDb25uZWN0ZWQpO1xuICAgIH1cblxuICAgIGlmICghaGFzUHVibGljICYmIHByb3BzLmFzc29jaWF0ZVB1YmxpY0lwQWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRvIHNldCAnYXNzb2NpYXRlUHVibGljSXBBZGRyZXNzOiB0cnVlJyB5b3UgbXVzdCBzZWxlY3QgUHVibGljIHN1Ym5ldHMgKHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUMgfSlcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vc1R5cGUgPSBpbWFnZUNvbmZpZy5vc1R5cGU7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuaW5zdGFuY2U7XG5cbiAgICB0aGlzLmluc3RhbmNlSWQgPSB0aGlzLmluc3RhbmNlLmlkO1xuICAgIHRoaXMuaW5zdGFuY2VBdmFpbGFiaWxpdHlab25lID0gdGhpcy5pbnN0YW5jZS5hdmFpbGFiaWxpdHlab25lO1xuICAgIHRoaXMuaW5zdGFuY2VQcml2YXRlRG5zTmFtZSA9IHRoaXMuaW5zdGFuY2UucHJpdmF0ZURucztcbiAgICB0aGlzLmluc3RhbmNlUHJpdmF0ZUlwID0gdGhpcy5pbnN0YW5jZS5wcml2YXRlSXA7XG4gICAgdGhpcy5pbnN0YW5jZVB1YmxpY0Ruc05hbWUgPSB0aGlzLmluc3RhbmNlLnB1YmxpY0RucztcbiAgICB0aGlzLmluc3RhbmNlUHVibGljSXAgPSB0aGlzLmluc3RhbmNlLnB1YmxpY0lwO1xuICAgIHRoaXMucHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VJZCA9IHRoaXMucHJpbWFyeU5ldHdvcmtJbnRlcmZhY2VcbiAgICAgID8gdGhpcy5wcmltYXJ5TmV0d29ya0ludGVyZmFjZS5pZFxuICAgICAgOiB0aGlzLmluc3RhbmNlLnByaW1hcnlOZXR3b3JrSW50ZXJmYWNlSWQ7XG5cbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgQ2ZuIFNpZ25hbHNcbiAgICAvLyAvLyBpZiBib3RoIHRoZSByZXNvdXJjZVNpZ25hbFRpbWVvdXQgYW5kIGluaXRPcHRpb25zLnRpbWVvdXQgYXJlIHNldCxcbiAgICAvLyAvLyB0aGUgdGltZW91dCBpcyBzdW1tZWQgdG9nZXRoZXIuIFRoaXMgbG9naWMgaXMgZG9uZSBpbiBhcHBseUNsb3VkRm9ybWF0aW9uSW5pdC5cbiAgICAvLyAvLyBUaGlzIGlzIGJlY2F1c2UgYXBwbHlVcGRhdGVQb2xpY2llcyBvdmVyd3JpdGVzIHRoZSB0aW1lb3V0IHdoZW4gYm90aCB0aW1lb3V0IGZpZWxkcyBhcmUgc3BlY2lmaWVkLlxuICAgIC8vIHRoaXMuYXBwbHlVcGRhdGVQb2xpY2llcyhwcm9wcyk7XG5cbiAgICAvLyBpZiAocHJvcHMuaW5pdCkge1xuICAgIC8vICAgdGhpcy5hcHBseUNsb3VkRm9ybWF0aW9uSW5pdChwcm9wcy5pbml0LCBwcm9wcy5pbml0T3B0aW9ucyk7XG4gICAgLy8gfVxuXG4gICAgaWYgKHByb3BzLnJlcXVpcmVJbWRzdjIpIHtcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBJbnN0YW5jZVJlcXVpcmVJbWRzdjJBc3BlY3QoKSk7XG4gICAgICAvLyAsIHtcbiAgICAgIC8vICAgcHJpb3JpdHk6IEFzcGVjdFByaW9yaXR5Lk1VVEFUSU5HLFxuICAgICAgLy8gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgc2VjdXJpdHkgZ3JvdXAgdG8gdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc2VjdXJpdHlHcm91cDogVGhlIHNlY3VyaXR5IGdyb3VwIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFNlY3VyaXR5R3JvdXAoc2VjdXJpdHlHcm91cDogSVNlY3VyaXR5R3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBzLnB1c2goc2VjdXJpdHlHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGNvbW1hbmQgdG8gdGhlIHN0YXJ0dXAgc2NyaXB0IG9mIHRoZSBpbnN0YW5jZS5cbiAgICogVGhlIGNvbW1hbmQgbXVzdCBiZSBpbiB0aGUgc2NyaXB0aW5nIGxhbmd1YWdlIHN1cHBvcnRlZCBieSB0aGUgaW5zdGFuY2UncyBPUyAoaS5lLiBMaW51eC9XaW5kb3dzKS5cbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyRGF0YSguLi5jb21tYW5kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnVzZXJEYXRhLmFkZENvbW1hbmRzKC4uLmNvbW1hbmRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSBJQU0gcm9sZSBhc3N1bWVkIGJ5IHRoZSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRUb1JvbGVQb2xpY3koc3RhdGVtZW50OiBpYW0uUG9saWN5U3RhdGVtZW50KSB7XG4gICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICogVXNlIGEgQ2xvdWRGb3JtYXRpb24gSW5pdCBjb25maWd1cmF0aW9uIGF0IGluc3RhbmNlIHN0YXJ0dXBcbiAgLy8gICpcbiAgLy8gICogVGhpcyBkb2VzIHRoZSBmb2xsb3dpbmc6XG4gIC8vICAqXG4gIC8vICAqIC0gQXR0YWNoZXMgdGhlIENsb3VkRm9ybWF0aW9uIEluaXQgbWV0YWRhdGEgdG8gdGhlIEluc3RhbmNlIHJlc291cmNlLlxuICAvLyAgKiAtIEFkZCBjb21tYW5kcyB0byB0aGUgaW5zdGFuY2UgVXNlckRhdGEgdG8gcnVuIGBjZm4taW5pdGAgYW5kIGBjZm4tc2lnbmFsYC5cbiAgLy8gICogLSBVcGRhdGUgdGhlIGluc3RhbmNlJ3MgQ3JlYXRpb25Qb2xpY3kgdG8gd2FpdCBmb3IgdGhlIGBjZm4tc2lnbmFsYCBjb21tYW5kcy5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBhcHBseUNsb3VkRm9ybWF0aW9uSW5pdChcbiAgLy8gICBpbml0OiBDbG91ZEZvcm1hdGlvbkluaXQsXG4gIC8vICAgb3B0aW9uczogQXBwbHlDbG91ZEZvcm1hdGlvbkluaXRPcHRpb25zID0ge30sXG4gIC8vICkge1xuICAvLyAgIGluaXQuYXR0YWNoKHRoaXMuaW5zdGFuY2UsIHtcbiAgLy8gICAgIHBsYXRmb3JtOiB0aGlzLm9zVHlwZSxcbiAgLy8gICAgIGluc3RhbmNlUm9sZTogdGhpcy5yb2xlLFxuICAvLyAgICAgdXNlckRhdGE6IHRoaXMudXNlckRhdGEsXG4gIC8vICAgICBjb25maWdTZXRzOiBvcHRpb25zLmNvbmZpZ1NldHMsXG4gIC8vICAgICBlbWJlZEZpbmdlcnByaW50OiBvcHRpb25zLmVtYmVkRmluZ2VycHJpbnQsXG4gIC8vICAgICBwcmludExvZzogb3B0aW9ucy5wcmludExvZyxcbiAgLy8gICAgIGlnbm9yZUZhaWx1cmVzOiBvcHRpb25zLmlnbm9yZUZhaWx1cmVzLFxuICAvLyAgICAgaW5jbHVkZVJvbGU6IG9wdGlvbnMuaW5jbHVkZVJvbGUsXG4gIC8vICAgICBpbmNsdWRlVXJsOiBvcHRpb25zLmluY2x1ZGVVcmwsXG4gIC8vICAgfSk7XG4gIC8vICAgdGhpcy53YWl0Rm9yUmVzb3VyY2VTaWduYWwob3B0aW9ucy50aW1lb3V0ID8/IER1cmF0aW9uLm1pbnV0ZXMoNSkpO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIFdhaXQgZm9yIGEgc2luZ2xlIGFkZGl0aW9uYWwgcmVzb3VyY2Ugc2lnbmFsXG4gIC8vICAqXG4gIC8vICAqIEFkZCAxIHRvIHRoZSBjdXJyZW50IFJlc291cmNlU2lnbmFsIENvdW50IGFuZCBhZGQgdGhlIGdpdmVuIHRpbWVvdXQgdG8gdGhlIGN1cnJlbnQgdGltZW91dC5cbiAgLy8gICpcbiAgLy8gICogVXNlIHRoaXMgdG8gcGF1c2UgdGhlIENsb3VkRm9ybWF0aW9uIGRlcGxveW1lbnQgdG8gd2FpdCBmb3IgdGhlIGluc3RhbmNlc1xuICAvLyAgKiBpbiB0aGUgQXV0b1NjYWxpbmdHcm91cCB0byByZXBvcnQgc3VjY2Vzc2Z1bCBzdGFydHVwIGR1cmluZ1xuICAvLyAgKiBjcmVhdGlvbiBhbmQgdXBkYXRlcy4gVGhlIFVzZXJEYXRhIHNjcmlwdCBuZWVkcyB0byBpbnZva2UgYGNmbi1zaWduYWxgXG4gIC8vICAqIHdpdGggYSBzdWNjZXNzIG9yIGZhaWx1cmUgY29kZSBhZnRlciBpdCBpcyBkb25lIHNldHRpbmcgdXAgdGhlIGluc3RhbmNlLlxuICAvLyAgKi9cbiAgLy8gcHJpdmF0ZSB3YWl0Rm9yUmVzb3VyY2VTaWduYWwodGltZW91dDogRHVyYXRpb24pIHtcbiAgLy8gICBjb25zdCBvbGRSZXNvdXJjZVNpZ25hbCA9XG4gIC8vICAgICB0aGlzLmluc3RhbmNlLmNmbk9wdGlvbnMuY3JlYXRpb25Qb2xpY3k/LnJlc291cmNlU2lnbmFsO1xuICAvLyAgIHRoaXMuaW5zdGFuY2UuY2ZuT3B0aW9ucy5jcmVhdGlvblBvbGljeSA9IHtcbiAgLy8gICAgIC4uLnRoaXMuaW5zdGFuY2UuY2ZuT3B0aW9ucy5jcmVhdGlvblBvbGljeSxcbiAgLy8gICAgIHJlc291cmNlU2lnbmFsOiB7XG4gIC8vICAgICAgIGNvdW50OiAob2xkUmVzb3VyY2VTaWduYWw/LmNvdW50ID8/IDApICsgMSxcbiAgLy8gICAgICAgdGltZW91dDogKG9sZFJlc291cmNlU2lnbmFsPy50aW1lb3V0XG4gIC8vICAgICAgICAgPyBEdXJhdGlvbi5wYXJzZShvbGRSZXNvdXJjZVNpZ25hbD8udGltZW91dCkucGx1cyh0aW1lb3V0KVxuICAvLyAgICAgICAgIDogdGltZW91dFxuICAvLyAgICAgICApLnRvSXNvU3RyaW5nKCksXG4gIC8vICAgICB9LFxuICAvLyAgIH07XG4gIC8vIH1cblxuICAvLyAvKipcbiAgLy8gICogQXBwbHkgQ2xvdWRGb3JtYXRpb24gdXBkYXRlIHBvbGljaWVzIGZvciB0aGUgaW5zdGFuY2VcbiAgLy8gICovXG4gIC8vIHByaXZhdGUgYXBwbHlVcGRhdGVQb2xpY2llcyhwcm9wczogSW5zdGFuY2VQcm9wcykge1xuICAvLyAgIGlmIChwcm9wcy5yZXNvdXJjZVNpZ25hbFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAvLyAgICAgdGhpcy5pbnN0YW5jZS5jZm5PcHRpb25zLmNyZWF0aW9uUG9saWN5ID0ge1xuICAvLyAgICAgICAuLi50aGlzLmluc3RhbmNlLmNmbk9wdGlvbnMuY3JlYXRpb25Qb2xpY3ksXG4gIC8vICAgICAgIHJlc291cmNlU2lnbmFsOiB7XG4gIC8vICAgICAgICAgLi4udGhpcy5pbnN0YW5jZS5jZm5PcHRpb25zLmNyZWF0aW9uUG9saWN5Py5yZXNvdXJjZVNpZ25hbCxcbiAgLy8gICAgICAgICB0aW1lb3V0OlxuICAvLyAgICAgICAgICAgcHJvcHMucmVzb3VyY2VTaWduYWxUaW1lb3V0ICYmXG4gIC8vICAgICAgICAgICBwcm9wcy5yZXNvdXJjZVNpZ25hbFRpbWVvdXQudG9Jc29TdHJpbmcoKSxcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgIH07XG4gIC8vICAgfVxuICAvLyB9XG59XG5cbi8vIC8qKlxuLy8gICogT3B0aW9ucyBmb3IgYXBwbHlpbmcgQ2xvdWRGb3JtYXRpb24gaW5pdCB0byBhbiBpbnN0YW5jZSBvciBpbnN0YW5jZSBncm91cFxuLy8gICovXG4vLyBleHBvcnQgaW50ZXJmYWNlIEFwcGx5Q2xvdWRGb3JtYXRpb25Jbml0T3B0aW9ucyB7XG4vLyAgIC8qKlxuLy8gICAgKiBDb25maWdTZXQgdG8gYWN0aXZhdGVcbi8vICAgICpcbi8vICAgICogQGRlZmF1bHQgWydkZWZhdWx0J11cbi8vICAgICovXG4vLyAgIHJlYWRvbmx5IGNvbmZpZ1NldHM/OiBzdHJpbmdbXTtcblxuLy8gICAvKipcbi8vICAgICogVGltZW91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJhdGlvbiB0byBiZSBhcHBsaWVkXG4vLyAgICAqXG4vLyAgICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoNSlcbi8vICAgICovXG4vLyAgIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuLy8gICAvKipcbi8vICAgICogRm9yY2UgaW5zdGFuY2UgcmVwbGFjZW1lbnQgYnkgZW1iZWRkaW5nIGEgY29uZmlnIGZpbmdlcnByaW50XG4vLyAgICAqXG4vLyAgICAqIElmIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhIGhhc2ggb2YgdGhlIGNvbmZpZyB3aWxsIGJlIGVtYmVkZGVkIGludG8gdGhlXG4vLyAgICAqIFVzZXJEYXRhLCBzbyB0aGF0IGlmIHRoZSBjb25maWcgY2hhbmdlcywgdGhlIFVzZXJEYXRhIGNoYW5nZXMuXG4vLyAgICAqXG4vLyAgICAqIC0gSWYgdGhlIEVDMiBpbnN0YW5jZSBpcyBpbnN0YW5jZS1zdG9yZSBiYWNrZWQgb3Jcbi8vICAgICogICBgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudGAgaXMgc2V0LCB0aGlzIHdpbGwgY2F1c2UgdGhlIGluc3RhbmNlIHRvIGJlXG4vLyAgICAqICAgcmVwbGFjZWQgYW5kIHRoZSBuZXcgY29uZmlndXJhdGlvbiB0byBiZSBhcHBsaWVkLlxuLy8gICAgKiAtIElmIHRoZSBpbnN0YW5jZSBpcyBFQlMtYmFja2VkIGFuZCBgdXNlckRhdGFDYXVzZXNSZXBsYWNlbWVudGAgaXMgbm90XG4vLyAgICAqICAgc2V0LCB0aGUgY2hhbmdlIG9mIFVzZXJEYXRhIHdpbGwgbWFrZSB0aGUgaW5zdGFuY2UgcmVzdGFydCBidXQgbm90IGJlXG4vLyAgICAqICAgcmVwbGFjZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiB3aWxsIG5vdCBiZSBhcHBsaWVkIGF1dG9tYXRpY2FsbHkuXG4vLyAgICAqXG4vLyAgICAqIElmIGBmYWxzZWAsIG5vIGhhc2ggd2lsbCBiZSBlbWJlZGRlZCwgYW5kIGlmIHRoZSBDbG91ZEZvcm1hdGlvbiBJbml0XG4vLyAgICAqIGNvbmZpZyBjaGFuZ2VzIG5vdGhpbmcgd2lsbCBoYXBwZW4gdG8gdGhlIHJ1bm5pbmcgaW5zdGFuY2UuIElmIGFcbi8vICAgICogY29uZmlnIHVwZGF0ZSBpbnRyb2R1Y2VzIGVycm9ycywgeW91IHdpbGwgbm90IG5vdGljZSB1bnRpbCBhZnRlciB0aGVcbi8vICAgICogQ2xvdWRGb3JtYXRpb24gZGVwbG95bWVudCBzdWNjZXNzZnVsbHkgZmluaXNoZXMgYW5kIHRoZSBuZXh0IGluc3RhbmNlXG4vLyAgICAqIGZhaWxzIHRvIGxhdW5jaC5cbi8vICAgICpcbi8vICAgICogQGRlZmF1bHQgdHJ1ZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgZW1iZWRGaW5nZXJwcmludD86IGJvb2xlYW47XG5cbi8vICAgLyoqXG4vLyAgICAqIFByaW50IHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgY2ZuLWluaXQgdG8gdGhlIEluc3RhbmNlIFN5c3RlbSBMb2dcbi8vICAgICpcbi8vICAgICogQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBvZiBydW5uaW5nIGNmbi1pbml0IGlzIHdyaXR0ZW4gdG8gYSBsb2cgZmlsZVxuLy8gICAgKiBvbiB0aGUgaW5zdGFuY2UuIFNldCB0aGlzIHRvIGB0cnVlYCB0byBwcmludCBpdCB0byB0aGUgU3lzdGVtIExvZ1xuLy8gICAgKiAodmlzaWJsZSBmcm9tIHRoZSBFQzIgQ29uc29sZSksIGBmYWxzZWAgdG8gbm90IHByaW50IGl0LlxuLy8gICAgKlxuLy8gICAgKiAoQmUgYXdhcmUgdGhhdCB0aGUgc3lzdGVtIGxvZyBpcyByZWZyZXNoZWQgYXQgY2VydGFpbiBwb2ludHMgaW5cbi8vICAgICogdGltZSBvZiB0aGUgaW5zdGFuY2UgbGlmZSBjeWNsZSwgYW5kIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIG1heVxuLy8gICAgKiBub3QgYWx3YXlzIHNob3cgdXApLlxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCB0cnVlXG4vLyAgICAqL1xuLy8gICByZWFkb25seSBwcmludExvZz86IGJvb2xlYW47XG5cbi8vICAgLyoqXG4vLyAgICAqIERvbid0IGZhaWwgdGhlIGluc3RhbmNlIGNyZWF0aW9uIHdoZW4gY2ZuLWluaXQgZmFpbHNcbi8vICAgICpcbi8vICAgICogWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50IENsb3VkRm9ybWF0aW9uIGZyb20gcm9sbGluZyBiYWNrIHdoZW5cbi8vICAgICogaW5zdGFuY2VzIGZhaWwgdG8gc3RhcnQgdXAsIHRvIGhlbHAgaW4gZGVidWdnaW5nLlxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCBmYWxzZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgaWdub3JlRmFpbHVyZXM/OiBib29sZWFuO1xuXG4vLyAgIC8qKlxuLy8gICAgKiBJbmNsdWRlIC0tdXJsIGFyZ3VtZW50IHdoZW4gcnVubmluZyBjZm4taW5pdCBhbmQgY2ZuLXNpZ25hbCBjb21tYW5kc1xuLy8gICAgKlxuLy8gICAgKiBUaGlzIHdpbGwgYmUgdGhlIGNsb3VkZm9ybWF0aW9uIGVuZHBvaW50IGluIHRoZSBkZXBsb3llZCByZWdpb25cbi8vICAgICogZS5nLiBodHRwczovL2Nsb3VkZm9ybWF0aW9uLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXG4vLyAgICAqXG4vLyAgICAqIEBkZWZhdWx0IGZhbHNlXG4vLyAgICAqL1xuLy8gICByZWFkb25seSBpbmNsdWRlVXJsPzogYm9vbGVhbjtcblxuLy8gICAvKipcbi8vICAgICogSW5jbHVkZSAtLXJvbGUgYXJndW1lbnQgd2hlbiBydW5uaW5nIGNmbi1pbml0IGFuZCBjZm4tc2lnbmFsIGNvbW1hbmRzXG4vLyAgICAqXG4vLyAgICAqIFRoaXMgd2lsbCBiZSB0aGUgSUFNIGluc3RhbmNlIHByb2ZpbGUgYXR0YWNoZWQgdG8gdGhlIEVDMiBpbnN0YW5jZVxuLy8gICAgKlxuLy8gICAgKiBAZGVmYXVsdCBmYWxzZVxuLy8gICAgKi9cbi8vICAgcmVhZG9ubHkgaW5jbHVkZVJvbGU/OiBib29sZWFuO1xuLy8gfVxuIl19
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { vpcIpv6CidrBlockAssociation } from "@cdktf/provider-aws";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { SubnetConfiguration } from "./vpc";
|
|
4
|
+
/**
|
|
5
|
+
* An abstract Provider of IpAddresses
|
|
6
|
+
*
|
|
7
|
+
* Note this is specific to the IPv4 CIDR.
|
|
8
|
+
*/
|
|
9
|
+
export declare class IpAddresses {
|
|
10
|
+
/**
|
|
11
|
+
* Used to provide local Ip Address Management services for your VPC
|
|
12
|
+
*
|
|
13
|
+
* VPC CIDR is supplied at creation and subnets are calculated locally
|
|
14
|
+
*
|
|
15
|
+
* Note this is specific to the IPv4 CIDR.
|
|
16
|
+
*
|
|
17
|
+
*/
|
|
18
|
+
static cidr(cidrBlock: string): IIpAddresses;
|
|
19
|
+
/**
|
|
20
|
+
* Used to provide centralized Ip Address Management services for your VPC
|
|
21
|
+
*
|
|
22
|
+
* Uses VPC CIDR allocations from AWS IPAM
|
|
23
|
+
*
|
|
24
|
+
* Note this is specific to the IPv4 CIDR.
|
|
25
|
+
*
|
|
26
|
+
* @see https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html
|
|
27
|
+
*/
|
|
28
|
+
static awsIpamAllocation(props: AwsIpamProps): IIpAddresses;
|
|
29
|
+
private constructor();
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Implementations for ip address management.
|
|
33
|
+
*
|
|
34
|
+
* Note this is specific to the IPv4 CIDR.
|
|
35
|
+
*/
|
|
36
|
+
export interface IIpAddresses {
|
|
37
|
+
/**
|
|
38
|
+
* Called by the VPC to retrieve VPC options from the Ipam
|
|
39
|
+
*
|
|
40
|
+
* Don't call this directly, the VPC will call it automatically.
|
|
41
|
+
*/
|
|
42
|
+
allocateVpcCidr(): VpcIpamOptions;
|
|
43
|
+
/**
|
|
44
|
+
* Called by the VPC to retrieve Subnet options from the Ipam
|
|
45
|
+
*
|
|
46
|
+
* Don't call this directly, the VPC will call it automatically.
|
|
47
|
+
*/
|
|
48
|
+
allocateSubnetsCidr(input: AllocateCidrRequest): SubnetIpamOptions;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* CIDR Allocated Vpc
|
|
52
|
+
*/
|
|
53
|
+
export interface VpcIpamOptions {
|
|
54
|
+
/**
|
|
55
|
+
* CIDR Block for Vpc
|
|
56
|
+
*
|
|
57
|
+
* @default - Only required when Ipam has concrete allocation available for static Vpc
|
|
58
|
+
*/
|
|
59
|
+
readonly cidrBlock?: string;
|
|
60
|
+
/**
|
|
61
|
+
* CIDR Mask for Vpc
|
|
62
|
+
*
|
|
63
|
+
* @default - Only required when using AWS Ipam
|
|
64
|
+
*/
|
|
65
|
+
readonly ipv4NetmaskLength?: number;
|
|
66
|
+
/**
|
|
67
|
+
* ipv4 IPAM Pool Id
|
|
68
|
+
*
|
|
69
|
+
* @default - Only required when using AWS Ipam
|
|
70
|
+
*/
|
|
71
|
+
readonly ipv4IpamPoolId?: string;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Subnet requested for allocation
|
|
75
|
+
*/
|
|
76
|
+
export interface RequestedSubnet {
|
|
77
|
+
/**
|
|
78
|
+
* The availability zone for the subnet
|
|
79
|
+
*/
|
|
80
|
+
readonly availabilityZone: string;
|
|
81
|
+
/**
|
|
82
|
+
* Specify configuration parameters for a single subnet group in a VPC
|
|
83
|
+
*/
|
|
84
|
+
readonly configuration: SubnetConfiguration;
|
|
85
|
+
/**
|
|
86
|
+
* Id for the Subnet construct
|
|
87
|
+
*/
|
|
88
|
+
readonly subnetConstructId: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Request for subnets CIDR to be allocated for a Vpc
|
|
92
|
+
*/
|
|
93
|
+
export interface AllocateCidrRequest {
|
|
94
|
+
/**
|
|
95
|
+
* The IPv4 CIDR block for this Vpc
|
|
96
|
+
*/
|
|
97
|
+
readonly vpcCidr: string;
|
|
98
|
+
/**
|
|
99
|
+
* The Subnets to be allocated
|
|
100
|
+
*/
|
|
101
|
+
readonly requestedSubnets: RequestedSubnet[];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Request for allocation of the VPC IPv6 CIDR.
|
|
105
|
+
*/
|
|
106
|
+
export interface AllocateVpcIpv6CidrRequest {
|
|
107
|
+
/**
|
|
108
|
+
* The VPC construct to attach to.
|
|
109
|
+
*/
|
|
110
|
+
readonly scope: Construct;
|
|
111
|
+
/**
|
|
112
|
+
* The id of the VPC.
|
|
113
|
+
*/
|
|
114
|
+
readonly vpcId: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Request for IPv6 CIDR block to be split up.
|
|
118
|
+
*/
|
|
119
|
+
export interface CreateIpv6CidrBlocksRequest {
|
|
120
|
+
/**
|
|
121
|
+
* The IPv6 CIDR block string representation.
|
|
122
|
+
*/
|
|
123
|
+
readonly ipv6SelectedCidr: string;
|
|
124
|
+
/**
|
|
125
|
+
* The number of subnets to assign CIDRs to.
|
|
126
|
+
*/
|
|
127
|
+
readonly subnetCount: number;
|
|
128
|
+
/**
|
|
129
|
+
* Size of the covered bits in the CIDR.
|
|
130
|
+
* @default - 128 - 64 = /64 CIDR.
|
|
131
|
+
*/
|
|
132
|
+
readonly sizeMask?: string;
|
|
133
|
+
/**
|
|
134
|
+
* The parent mask of the CIDR.
|
|
135
|
+
*
|
|
136
|
+
* Valid values are from 44 to 60 in increments of 4.
|
|
137
|
+
*
|
|
138
|
+
* @default - 56
|
|
139
|
+
*/
|
|
140
|
+
readonly parentMask?: number;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Request for subnet IPv6 CIDRs to be allocated for a VPC.
|
|
144
|
+
*/
|
|
145
|
+
export interface AllocateIpv6CidrRequest {
|
|
146
|
+
/**
|
|
147
|
+
* List of subnets allocated with IPv4 CIDRs
|
|
148
|
+
*/
|
|
149
|
+
readonly allocatedSubnets: AllocatedSubnet[];
|
|
150
|
+
/**
|
|
151
|
+
* The IPv6 CIDRs to be allocated to the subnets
|
|
152
|
+
*/
|
|
153
|
+
readonly ipv6Cidrs: string[];
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* CIDR Allocated Subnets
|
|
157
|
+
*/
|
|
158
|
+
export interface SubnetIpamOptions {
|
|
159
|
+
/**
|
|
160
|
+
* CIDR Allocations for Subnets
|
|
161
|
+
*/
|
|
162
|
+
readonly allocatedSubnets: AllocatedSubnet[];
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* CIDR Allocated Subnet
|
|
166
|
+
*/
|
|
167
|
+
export interface AllocatedSubnet {
|
|
168
|
+
/**
|
|
169
|
+
* IPv4 CIDR Allocations for a Subnet.
|
|
170
|
+
*
|
|
171
|
+
* Note this is specific to the IPv4 CIDR.
|
|
172
|
+
*/
|
|
173
|
+
readonly cidr: string;
|
|
174
|
+
/**
|
|
175
|
+
* IPv6 CIDR Allocations for a Subnet.
|
|
176
|
+
*
|
|
177
|
+
* Note this is specific to the IPv6 CIDR.
|
|
178
|
+
*
|
|
179
|
+
* @default - no IPV6 CIDR
|
|
180
|
+
*/
|
|
181
|
+
readonly ipv6Cidr?: string;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Configuration for AwsIpam
|
|
185
|
+
*/
|
|
186
|
+
export interface AwsIpamProps {
|
|
187
|
+
/**
|
|
188
|
+
* Netmask length for Vpc
|
|
189
|
+
*/
|
|
190
|
+
readonly ipv4NetmaskLength: number;
|
|
191
|
+
/**
|
|
192
|
+
* Ipam Pool Id for ipv4 allocation
|
|
193
|
+
*/
|
|
194
|
+
readonly ipv4IpamPoolId: string;
|
|
195
|
+
/**
|
|
196
|
+
* Default length for Subnet ipv4 Network mask
|
|
197
|
+
*
|
|
198
|
+
* Specify this option only if you do not specify all Subnets using SubnetConfiguration with a cidrMask
|
|
199
|
+
*
|
|
200
|
+
* @default - Default ipv4 Subnet Mask for subnets in Vpc
|
|
201
|
+
*
|
|
202
|
+
*/
|
|
203
|
+
readonly defaultSubnetIpv4NetmaskLength?: number;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* An abstract Provider of Ipv6Addresses.
|
|
207
|
+
*
|
|
208
|
+
* Note this is specific to the IPv6 CIDR.
|
|
209
|
+
*/
|
|
210
|
+
export declare class Ipv6Addresses {
|
|
211
|
+
/**
|
|
212
|
+
* Used for IPv6 address management with Amazon provided CIDRs.
|
|
213
|
+
*
|
|
214
|
+
* Note this is specific to the IPv6 CIDR.
|
|
215
|
+
*/
|
|
216
|
+
static amazonProvided(): IIpv6Addresses;
|
|
217
|
+
private constructor();
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Implementations for IPv6 address management.
|
|
221
|
+
*
|
|
222
|
+
* Note this is specific to the IPv6 CIDR.
|
|
223
|
+
*/
|
|
224
|
+
export interface IIpv6Addresses {
|
|
225
|
+
/**
|
|
226
|
+
* Whether the IPv6 CIDR is Amazon provided or not.
|
|
227
|
+
*
|
|
228
|
+
* Note this is specific to the IPv6 CIDR.
|
|
229
|
+
*/
|
|
230
|
+
amazonProvided: boolean;
|
|
231
|
+
/**
|
|
232
|
+
* Called by VPC to allocate IPv6 CIDR.
|
|
233
|
+
*
|
|
234
|
+
* Note this is specific to the IPv6 CIDR.
|
|
235
|
+
*/
|
|
236
|
+
allocateVpcIpv6Cidr(input: AllocateVpcIpv6CidrRequest): vpcIpv6CidrBlockAssociation.VpcIpv6CidrBlockAssociation;
|
|
237
|
+
/**
|
|
238
|
+
* Split IPv6 CIDR block up for subnets.
|
|
239
|
+
*
|
|
240
|
+
* Note this is specific to the IPv6 CIDR.
|
|
241
|
+
*/
|
|
242
|
+
createIpv6CidrBlocks(input: CreateIpv6CidrBlocksRequest): string[];
|
|
243
|
+
/**
|
|
244
|
+
* Allocates Subnets IPv6 CIDRs. Called by VPC when creating subnets with IPv6 enabled.
|
|
245
|
+
*
|
|
246
|
+
* Note this is specific to the IPv6 CIDR.
|
|
247
|
+
*/
|
|
248
|
+
allocateSubnetsIpv6Cidr(input: AllocateIpv6CidrRequest): SubnetIpamOptions;
|
|
249
|
+
}
|