terraconstructs 0.0.10 → 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 +8 -6
- 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,397 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b, _c;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TunnelStartupAction = exports.Phase2DhGroupNumber = exports.Phase1DhGroupNumber = exports.IntegrityAlgorithm = exports.EncryptionAlgorithm = exports.IkeVersion = exports.DpdTimeoutAction = exports.RESERVED_TUNNEL_INSIDE_CIDR = exports.VpnConnection = exports.VpnConnectionBase = exports.VpnGateway = exports.VpnConnectionType = 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/vpn.ts
|
|
7
|
+
const net = require("node:net");
|
|
8
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
9
|
+
const cdktf_1 = require("cdktf");
|
|
10
|
+
const duration_1 = require("../../duration");
|
|
11
|
+
const aws_construct_1 = require("../aws-construct");
|
|
12
|
+
const cloudwatch = require("../cloudwatch");
|
|
13
|
+
/**
|
|
14
|
+
* The VPN connection type.
|
|
15
|
+
*/
|
|
16
|
+
var VpnConnectionType;
|
|
17
|
+
(function (VpnConnectionType) {
|
|
18
|
+
// NOTE: Terraform Provider AWS does not have a VpnConnection.Type field ...
|
|
19
|
+
// But the Customer Gateway Does
|
|
20
|
+
// @see https://registry.terraform.io/providers/hashicorp/aws/5.68.0/docs/resources/customer_gateway#type-1
|
|
21
|
+
/**
|
|
22
|
+
* The IPsec 1 VPN connection type.
|
|
23
|
+
*/
|
|
24
|
+
VpnConnectionType["IPSEC_1"] = "ipsec.1";
|
|
25
|
+
/**
|
|
26
|
+
* Dummy member
|
|
27
|
+
* TODO: remove once https://github.com/aws/jsii/issues/231 is fixed
|
|
28
|
+
*/
|
|
29
|
+
VpnConnectionType["DUMMY"] = "dummy";
|
|
30
|
+
})(VpnConnectionType || (exports.VpnConnectionType = VpnConnectionType = {}));
|
|
31
|
+
/**
|
|
32
|
+
* The VPN Gateway that shall be added to the VPC
|
|
33
|
+
*
|
|
34
|
+
* @resource aws_vpn_gateway
|
|
35
|
+
*/
|
|
36
|
+
class VpnGateway extends aws_construct_1.AwsConstructBase {
|
|
37
|
+
get vpnGatewayOutputs() {
|
|
38
|
+
return {
|
|
39
|
+
gatewayId: this.gatewayId,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
get outputs() {
|
|
43
|
+
return this.vpnGatewayOutputs;
|
|
44
|
+
}
|
|
45
|
+
constructor(scope, id, props) {
|
|
46
|
+
super(scope, id);
|
|
47
|
+
// This is 'Default' instead of 'Resource', because using 'Default' will generate
|
|
48
|
+
// a logical ID for a VpnGateway which is exactly the same as the logical ID that used
|
|
49
|
+
// to be created for the CfnVPNGateway (and 'Resource' would not do that).
|
|
50
|
+
const vpnGW = new provider_aws_1.vpnGateway.VpnGateway(this, "Default", {
|
|
51
|
+
amazonSideAsn: props.amazonSideAsn !== undefined
|
|
52
|
+
? props.amazonSideAsn.toString()
|
|
53
|
+
: undefined,
|
|
54
|
+
});
|
|
55
|
+
this.gatewayId = vpnGW.id;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.VpnGateway = VpnGateway;
|
|
59
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
60
|
+
VpnGateway[_a] = { fqn: "terraconstructs.aws.compute.VpnGateway", version: "0.0.12" };
|
|
61
|
+
/**
|
|
62
|
+
* Base class for Vpn connections.
|
|
63
|
+
*/
|
|
64
|
+
class VpnConnectionBase extends aws_construct_1.AwsConstructBase {
|
|
65
|
+
get vpnConnectionOutputs() {
|
|
66
|
+
return {
|
|
67
|
+
vpnId: this.vpnId,
|
|
68
|
+
customerGatewayId: this.customerGatewayId,
|
|
69
|
+
customerGatewayIp: this.customerGatewayIp,
|
|
70
|
+
customerGatewayAsn: this.customerGatewayAsn,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
get outputs() {
|
|
74
|
+
return this.vpnConnectionOutputs;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.VpnConnectionBase = VpnConnectionBase;
|
|
78
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
79
|
+
VpnConnectionBase[_b] = { fqn: "terraconstructs.aws.compute.VpnConnectionBase", version: "0.0.12" };
|
|
80
|
+
/**
|
|
81
|
+
* Define a VPN Connection
|
|
82
|
+
*
|
|
83
|
+
* @resource AWS::EC2::VPNConnection
|
|
84
|
+
*/
|
|
85
|
+
class VpnConnection extends VpnConnectionBase {
|
|
86
|
+
/**
|
|
87
|
+
* Import a VPN connection by supplying all attributes directly
|
|
88
|
+
*/
|
|
89
|
+
static fromVpnConnectionAttributes(scope, id, attrs) {
|
|
90
|
+
class Import extends VpnConnectionBase {
|
|
91
|
+
constructor() {
|
|
92
|
+
super(...arguments);
|
|
93
|
+
this.vpnId = attrs.vpnId;
|
|
94
|
+
this.customerGatewayId = attrs.customerGatewayId;
|
|
95
|
+
this.customerGatewayIp = attrs.customerGatewayIp;
|
|
96
|
+
this.customerGatewayAsn = attrs.customerGatewayAsn;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return new Import(scope, id);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Return the given named metric for all VPN connections in the account/region.
|
|
103
|
+
*/
|
|
104
|
+
static metricAll(metricName, props) {
|
|
105
|
+
return new cloudwatch.Metric({
|
|
106
|
+
namespace: "AWS/VPN",
|
|
107
|
+
metricName,
|
|
108
|
+
...props,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Metric for the tunnel state of all VPN connections in the account/region.
|
|
113
|
+
*
|
|
114
|
+
* @default average over 5 minutes
|
|
115
|
+
*/
|
|
116
|
+
static metricAllTunnelState(props) {
|
|
117
|
+
return this.metricAll("TunnelState", { statistic: "avg", ...props });
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Metric for the tunnel data in of all VPN connections in the account/region.
|
|
121
|
+
*
|
|
122
|
+
* @default sum over 5 minutes
|
|
123
|
+
*/
|
|
124
|
+
static metricAllTunnelDataIn(props) {
|
|
125
|
+
return this.metricAll("TunnelDataIn", { statistic: "sum", ...props });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Metric for the tunnel data out of all VPN connections.
|
|
129
|
+
*
|
|
130
|
+
* @default sum over 5 minutes
|
|
131
|
+
*/
|
|
132
|
+
static metricAllTunnelDataOut(props) {
|
|
133
|
+
return this.metricAll("TunnelDataOut", { statistic: "sum", ...props });
|
|
134
|
+
}
|
|
135
|
+
constructor(scope, id, props) {
|
|
136
|
+
super(scope, id);
|
|
137
|
+
if (!props.vpc.vpnGatewayId) {
|
|
138
|
+
props.vpc.enableVpnGateway({
|
|
139
|
+
type: "ipsec.1",
|
|
140
|
+
amazonSideAsn: props.asn,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
if (!cdktf_1.Token.isUnresolved(props.ip) && !net.isIPv4(props.ip)) {
|
|
144
|
+
throw new Error(`The \`ip\` ${props.ip} is not a valid IPv4 address.`);
|
|
145
|
+
}
|
|
146
|
+
const type = VpnConnectionType.IPSEC_1;
|
|
147
|
+
const bgpAsn = props.asn || 65000;
|
|
148
|
+
const customerGw = new provider_aws_1.customerGateway.CustomerGateway(this, "CustomerGateway", {
|
|
149
|
+
bgpAsn: bgpAsn.toString(),
|
|
150
|
+
ipAddress: props.ip,
|
|
151
|
+
type,
|
|
152
|
+
});
|
|
153
|
+
this.customerGatewayId = customerGw.id;
|
|
154
|
+
this.customerGatewayAsn = bgpAsn;
|
|
155
|
+
this.customerGatewayIp = props.ip;
|
|
156
|
+
const vpnTunnelOptionsSpecifications = {};
|
|
157
|
+
// Validate tunnel options
|
|
158
|
+
if (props.tunnelOptions) {
|
|
159
|
+
if (props.tunnelOptions.length > 2) {
|
|
160
|
+
throw new Error("Cannot specify more than two `tunnelOptions`");
|
|
161
|
+
}
|
|
162
|
+
if (props.tunnelOptions.length === 2 &&
|
|
163
|
+
props.tunnelOptions[0].tunnelInsideCidr ===
|
|
164
|
+
props.tunnelOptions[1].tunnelInsideCidr &&
|
|
165
|
+
props.tunnelOptions[0].tunnelInsideCidr !== undefined) {
|
|
166
|
+
throw new Error(`Same ${props.tunnelOptions[0].tunnelInsideCidr} \`tunnelInsideCidr\` cannot be used for both tunnels.`);
|
|
167
|
+
}
|
|
168
|
+
props.tunnelOptions.forEach((options, index) => {
|
|
169
|
+
// if (options.preSharedKey && options.preSharedKeySecret) {
|
|
170
|
+
// throw new Error(
|
|
171
|
+
// "Specify at most one of 'preSharedKey' and 'preSharedKeySecret'.",
|
|
172
|
+
// );
|
|
173
|
+
// }
|
|
174
|
+
if (options.preSharedKey &&
|
|
175
|
+
!cdktf_1.Token.isUnresolved(options.preSharedKey) &&
|
|
176
|
+
!/^[a-zA-Z1-9._][a-zA-Z\d._]{7,63}$/.test(options.preSharedKey)) {
|
|
177
|
+
/* eslint-disable max-len */
|
|
178
|
+
throw new Error(`The \`preSharedKey\` ${options.preSharedKey} for tunnel ${index + 1} is invalid. Allowed characters are alphanumeric characters and ._. Must be between 8 and 64 characters in length and cannot start with zero (0).`);
|
|
179
|
+
/* eslint-enable max-len */
|
|
180
|
+
}
|
|
181
|
+
if (options.tunnelInsideCidr) {
|
|
182
|
+
if (exports.RESERVED_TUNNEL_INSIDE_CIDR.includes(options.tunnelInsideCidr)) {
|
|
183
|
+
throw new Error(`The \`tunnelInsideCidr\` ${options.tunnelInsideCidr} for tunnel ${index + 1} is a reserved inside CIDR.`);
|
|
184
|
+
}
|
|
185
|
+
if (!/^169\.254\.\d{1,3}\.\d{1,3}\/30$/.test(options.tunnelInsideCidr)) {
|
|
186
|
+
/* eslint-disable-next-line max-len */
|
|
187
|
+
throw new Error(`The \`tunnelInsideCidr\` ${options.tunnelInsideCidr} for tunnel ${index + 1} is not a size /30 CIDR block from the 169.254.0.0/16 range.`);
|
|
188
|
+
}
|
|
189
|
+
// Validate rekeyFuzzPercentage
|
|
190
|
+
if (options.rekeyFuzzPercentage !== undefined) {
|
|
191
|
+
if (options.rekeyFuzzPercentage < 0 ||
|
|
192
|
+
options.rekeyFuzzPercentage > 100) {
|
|
193
|
+
throw new Error(`rekeyFuzzPercentage for tunnel ${index + 1} must be between 0 and 100`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Validate rekeyMarginTimeSeconds
|
|
197
|
+
if (options.rekeyMarginTime !== undefined) {
|
|
198
|
+
if (options.rekeyMarginTime.toSeconds() < 60) {
|
|
199
|
+
throw new Error(`rekeyMarginTime for tunnel ${index + 1} must be at least 60 seconds`);
|
|
200
|
+
}
|
|
201
|
+
// Check if it's less than half of phase2LifetimeSeconds
|
|
202
|
+
const phase2Lifetime = options.phase2Lifetime || duration_1.Duration.hours(1);
|
|
203
|
+
if (options.rekeyMarginTime.toSeconds() >
|
|
204
|
+
phase2Lifetime.toSeconds() / 2) {
|
|
205
|
+
throw new Error(`rekeyMarginTime for tunnel ${index + 1} must be less than half of phase2Lifetime (${phase2Lifetime.toSeconds() / 2})`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Validate replayWindowSize
|
|
209
|
+
if (options.replayWindowSize !== undefined) {
|
|
210
|
+
if (options.replayWindowSize < 64 ||
|
|
211
|
+
options.replayWindowSize > 2048) {
|
|
212
|
+
throw new Error(`replayWindowSize for tunnel ${index + 1} must be between 64 and 2048`);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Map tunnel options to AWS provider format
|
|
217
|
+
const tunnelPrefix = `tunnel${index + 1}`;
|
|
218
|
+
Object.assign(vpnTunnelOptionsSpecifications, {
|
|
219
|
+
[`${tunnelPrefix}PresharedKey`]: options.preSharedKey,
|
|
220
|
+
[`${tunnelPrefix}InsideCidr`]: options.tunnelInsideCidr,
|
|
221
|
+
[`${tunnelPrefix}DpdTimeoutAction`]: options.dpdTimeoutAction,
|
|
222
|
+
[`${tunnelPrefix}DpdTimeoutSeconds`]: options.dpdTimeout?.toSeconds(),
|
|
223
|
+
[`${tunnelPrefix}EnableTunnelLifecycleControl`]: options.enableTunnelLifecycleControl,
|
|
224
|
+
[`${tunnelPrefix}IkeVersions`]: options.ikeVersions,
|
|
225
|
+
[`${tunnelPrefix}Phase1DhGroupNumbers`]: options.phase1DhGroupNumbers,
|
|
226
|
+
[`${tunnelPrefix}Phase1EncryptionAlgorithms`]: options.phase1EncryptionAlgorithms,
|
|
227
|
+
[`${tunnelPrefix}Phase1IntegrityAlgorithms`]: options.phase1IntegrityAlgorithms,
|
|
228
|
+
[`${tunnelPrefix}Phase1LifetimeSeconds`]: options.phase1Lifetime?.toSeconds(),
|
|
229
|
+
[`${tunnelPrefix}Phase2DhGroupNumbers`]: options.phase2DhGroupNumbers,
|
|
230
|
+
[`${tunnelPrefix}Phase2EncryptionAlgorithms`]: options.phase2EncryptionAlgorithms,
|
|
231
|
+
[`${tunnelPrefix}Phase2IntegrityAlgorithms`]: options.phase2IntegrityAlgorithms,
|
|
232
|
+
[`${tunnelPrefix}Phase2LifetimeSeconds`]: options.phase2Lifetime?.toSeconds(),
|
|
233
|
+
[`${tunnelPrefix}StartupAction`]: options.startupAction,
|
|
234
|
+
[`${tunnelPrefix}RekeyFuzzPercentage`]: options.rekeyFuzzPercentage,
|
|
235
|
+
[`${tunnelPrefix}RekeyMarginTimeSeconds`]: options.rekeyMarginTime?.toSeconds(),
|
|
236
|
+
[`${tunnelPrefix}ReplayWindowSize`]: options.replayWindowSize,
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
const resource = new provider_aws_1.vpnConnection.VpnConnection(this, "Resource", {
|
|
241
|
+
type,
|
|
242
|
+
customerGatewayId: customerGw.id,
|
|
243
|
+
staticRoutesOnly: props.staticRoutes ? true : false,
|
|
244
|
+
vpnGatewayId: props.vpc.vpnGatewayId,
|
|
245
|
+
...vpnTunnelOptionsSpecifications,
|
|
246
|
+
});
|
|
247
|
+
this.vpnId = resource.id;
|
|
248
|
+
if (props.staticRoutes) {
|
|
249
|
+
props.staticRoutes.forEach((route) => {
|
|
250
|
+
new provider_aws_1.vpnConnectionRoute.VpnConnectionRoute(this, `Route${route.replace(/[^\d]/g, "")}`, {
|
|
251
|
+
destinationCidrBlock: route,
|
|
252
|
+
vpnConnectionId: this.vpnId,
|
|
253
|
+
});
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.VpnConnection = VpnConnection;
|
|
259
|
+
_c = JSII_RTTI_SYMBOL_1;
|
|
260
|
+
VpnConnection[_c] = { fqn: "terraconstructs.aws.compute.VpnConnection", version: "0.0.12" };
|
|
261
|
+
exports.RESERVED_TUNNEL_INSIDE_CIDR = [
|
|
262
|
+
"169.254.0.0/30",
|
|
263
|
+
"169.254.1.0/30",
|
|
264
|
+
"169.254.2.0/30",
|
|
265
|
+
"169.254.3.0/30",
|
|
266
|
+
"169.254.4.0/30",
|
|
267
|
+
"169.254.5.0/30",
|
|
268
|
+
"169.254.169.252/30",
|
|
269
|
+
];
|
|
270
|
+
/**
|
|
271
|
+
* Action to take after DPD timeout occurs
|
|
272
|
+
*/
|
|
273
|
+
var DpdTimeoutAction;
|
|
274
|
+
(function (DpdTimeoutAction) {
|
|
275
|
+
/**
|
|
276
|
+
* End the IKE session
|
|
277
|
+
*/
|
|
278
|
+
DpdTimeoutAction["CLEAR"] = "clear";
|
|
279
|
+
/**
|
|
280
|
+
* Take no action
|
|
281
|
+
*/
|
|
282
|
+
DpdTimeoutAction["NONE"] = "none";
|
|
283
|
+
/**
|
|
284
|
+
* Restart the IKE initiation
|
|
285
|
+
*/
|
|
286
|
+
DpdTimeoutAction["RESTART"] = "restart";
|
|
287
|
+
})(DpdTimeoutAction || (exports.DpdTimeoutAction = DpdTimeoutAction = {}));
|
|
288
|
+
/**
|
|
289
|
+
* IKE versions permitted for VPN tunnels
|
|
290
|
+
*/
|
|
291
|
+
var IkeVersion;
|
|
292
|
+
(function (IkeVersion) {
|
|
293
|
+
/**
|
|
294
|
+
* IKE version 1
|
|
295
|
+
*/
|
|
296
|
+
IkeVersion["IKEV1"] = "ikev1";
|
|
297
|
+
/**
|
|
298
|
+
* IKE version 2
|
|
299
|
+
*/
|
|
300
|
+
IkeVersion["IKEV2"] = "ikev2";
|
|
301
|
+
})(IkeVersion || (exports.IkeVersion = IkeVersion = {}));
|
|
302
|
+
/**
|
|
303
|
+
* Phase 1 and 2 encryption algorithms
|
|
304
|
+
*/
|
|
305
|
+
var EncryptionAlgorithm;
|
|
306
|
+
(function (EncryptionAlgorithm) {
|
|
307
|
+
/**
|
|
308
|
+
* AES with 128-bit key
|
|
309
|
+
*/
|
|
310
|
+
EncryptionAlgorithm["AES128"] = "AES128";
|
|
311
|
+
/**
|
|
312
|
+
* AES with 256-bit key
|
|
313
|
+
*/
|
|
314
|
+
EncryptionAlgorithm["AES256"] = "AES256";
|
|
315
|
+
/**
|
|
316
|
+
* AES-GCM with 128-bit key and 16 byte integrity check
|
|
317
|
+
*/
|
|
318
|
+
EncryptionAlgorithm["AES128_GCM_16"] = "AES128-GCM-16";
|
|
319
|
+
/**
|
|
320
|
+
* AES-GCM with 256-bit key and 16 byte integrity check
|
|
321
|
+
*/
|
|
322
|
+
EncryptionAlgorithm["AES256_GCM_16"] = "AES256-GCM-16";
|
|
323
|
+
})(EncryptionAlgorithm || (exports.EncryptionAlgorithm = EncryptionAlgorithm = {}));
|
|
324
|
+
/**
|
|
325
|
+
* Phase 1 and 2 integrity algorithms
|
|
326
|
+
*/
|
|
327
|
+
var IntegrityAlgorithm;
|
|
328
|
+
(function (IntegrityAlgorithm) {
|
|
329
|
+
/**
|
|
330
|
+
* SHA-1 hash algorithm
|
|
331
|
+
*/
|
|
332
|
+
IntegrityAlgorithm["SHA1"] = "SHA1";
|
|
333
|
+
/**
|
|
334
|
+
* SHA-2 with 256-bit digest
|
|
335
|
+
*/
|
|
336
|
+
IntegrityAlgorithm["SHA2_256"] = "SHA2-256";
|
|
337
|
+
/**
|
|
338
|
+
* SHA-2 with 384-bit digest
|
|
339
|
+
*/
|
|
340
|
+
IntegrityAlgorithm["SHA2_384"] = "SHA2-384";
|
|
341
|
+
/**
|
|
342
|
+
* SHA-2 with 512-bit digest
|
|
343
|
+
*/
|
|
344
|
+
IntegrityAlgorithm["SHA2_512"] = "SHA2-512";
|
|
345
|
+
})(IntegrityAlgorithm || (exports.IntegrityAlgorithm = IntegrityAlgorithm = {}));
|
|
346
|
+
/**
|
|
347
|
+
* Phase 1 Diffie-Hellman group numbers
|
|
348
|
+
*/
|
|
349
|
+
var Phase1DhGroupNumber;
|
|
350
|
+
(function (Phase1DhGroupNumber) {
|
|
351
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_2"] = 2] = "GROUP_2";
|
|
352
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_14"] = 14] = "GROUP_14";
|
|
353
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_15"] = 15] = "GROUP_15";
|
|
354
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_16"] = 16] = "GROUP_16";
|
|
355
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_17"] = 17] = "GROUP_17";
|
|
356
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_18"] = 18] = "GROUP_18";
|
|
357
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_19"] = 19] = "GROUP_19";
|
|
358
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_20"] = 20] = "GROUP_20";
|
|
359
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_21"] = 21] = "GROUP_21";
|
|
360
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_22"] = 22] = "GROUP_22";
|
|
361
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_23"] = 23] = "GROUP_23";
|
|
362
|
+
Phase1DhGroupNumber[Phase1DhGroupNumber["GROUP_24"] = 24] = "GROUP_24";
|
|
363
|
+
})(Phase1DhGroupNumber || (exports.Phase1DhGroupNumber = Phase1DhGroupNumber = {}));
|
|
364
|
+
/**
|
|
365
|
+
* Phase 2 Diffie-Hellman group numbers
|
|
366
|
+
*/
|
|
367
|
+
var Phase2DhGroupNumber;
|
|
368
|
+
(function (Phase2DhGroupNumber) {
|
|
369
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_2"] = 2] = "GROUP_2";
|
|
370
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_5"] = 5] = "GROUP_5";
|
|
371
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_14"] = 14] = "GROUP_14";
|
|
372
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_15"] = 15] = "GROUP_15";
|
|
373
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_16"] = 16] = "GROUP_16";
|
|
374
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_17"] = 17] = "GROUP_17";
|
|
375
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_18"] = 18] = "GROUP_18";
|
|
376
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_19"] = 19] = "GROUP_19";
|
|
377
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_20"] = 20] = "GROUP_20";
|
|
378
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_21"] = 21] = "GROUP_21";
|
|
379
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_22"] = 22] = "GROUP_22";
|
|
380
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_23"] = 23] = "GROUP_23";
|
|
381
|
+
Phase2DhGroupNumber[Phase2DhGroupNumber["GROUP_24"] = 24] = "GROUP_24";
|
|
382
|
+
})(Phase2DhGroupNumber || (exports.Phase2DhGroupNumber = Phase2DhGroupNumber = {}));
|
|
383
|
+
/**
|
|
384
|
+
* Tunnel startup action
|
|
385
|
+
*/
|
|
386
|
+
var TunnelStartupAction;
|
|
387
|
+
(function (TunnelStartupAction) {
|
|
388
|
+
/**
|
|
389
|
+
* Customer gateway must initiate IKE negotiation
|
|
390
|
+
*/
|
|
391
|
+
TunnelStartupAction["ADD"] = "add";
|
|
392
|
+
/**
|
|
393
|
+
* AWS will initiate IKE negotiation
|
|
394
|
+
*/
|
|
395
|
+
TunnelStartupAction["START"] = "start";
|
|
396
|
+
})(TunnelStartupAction || (exports.TunnelStartupAction = TunnelStartupAction = {}));
|
|
397
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3Zwbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVGQUF1RjtBQUV2RixnQ0FBZ0M7QUFDaEMsc0RBSzZCO0FBQzdCLGlDQUdlO0FBR2YsNkNBQTBDO0FBQzFDLG9EQUFtRTtBQUNuRSw0Q0FBNEM7QUE2UTVDOztHQUVHO0FBQ0gsSUFBWSxpQkFjWDtBQWRELFdBQVksaUJBQWlCO0lBQzNCLDRFQUE0RTtJQUM1RSxnQ0FBZ0M7SUFDaEMsMkdBQTJHO0lBQzNHOztPQUVHO0lBQ0gsd0NBQW1CLENBQUE7SUFFbkI7OztPQUdHO0lBQ0gsb0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBZFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFjNUI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsZ0NBQWdCO0lBSzlDLElBQVcsaUJBQWlCO1FBQzFCLE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7UUFDOUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixpRkFBaUY7UUFDakYsc0ZBQXNGO1FBQ3RGLDBFQUEwRTtRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLHlCQUFVLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDdkQsYUFBYSxFQUNYLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUztnQkFDL0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsU0FBUztTQUNoQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FB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RUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQWJXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBYTlCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG1CQWNYO0FBZEQsV0FBWSxtQkFBbUI7SUFDN0IsbUVBQVcsQ0FBQTtJQUNYLG1FQUFXLENBQUE7SUFDWCxzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtJQUNiLHNFQUFhLENBQUE7SUFDYixzRUFBYSxDQUFBO0lBQ2Isc0VBQWEsQ0FBQTtBQUNmLENBQUMsRUFkVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQWM5QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQkFVWDtBQVZELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsa0NBQVcsQ0FBQTtJQUVYOztPQUVHO0lBQ0gsc0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFVOUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWMyL2xpYi92cG4udHNcblxuaW1wb3J0ICogYXMgbmV0IGZyb20gXCJub2RlOm5ldFwiO1xuaW1wb3J0IHtcbiAgY3VzdG9tZXJHYXRld2F5LFxuICB2cG5Db25uZWN0aW9uLFxuICB2cG5Db25uZWN0aW9uUm91dGUsXG4gIHZwbkdhdGV3YXksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9kdXJhdGlvblwiO1xuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCwgQXdzQ29uc3RydWN0QmFzZSB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIFZQTiBjb25uZWN0aW9uLlxuICAgKiBAYXR0cmlidXRlIFZwbkNvbm5lY3Rpb25JZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21lckdhdGV3YXlJcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5QXNuOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkNvbm5lY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuQ29ubmVjdGlvbk91dHB1dHM6IFZwbkNvbm5lY3Rpb25PdXRwdXRzO1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICogQGF0dHJpYnV0ZSBWcG5Db25uZWN0aW9uSWRcbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dHMgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIG91dHB1dCB2aWEgdGhlIEdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuR2F0ZXdheU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqIEBhdHRyaWJ1dGUgVnBuR2F0ZXdheUlkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwbkdhdGV3YXkgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHMgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheU91dHB1dHM6IFZwbkdhdGV3YXlPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICByZWFkb25seSBnYXRld2F5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWcG5UdW5uZWxPcHRpb24ge1xuICAvKipcbiAgICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlU2hhcmVkS2V5Pzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEFkb3B0IFNlY3JldFZhbHVlIHBhdHRlcm4gZnJvbSBBV1NDREtcblxuICAvLyAvKipcbiAgLy8gICogVGhlIHByZS1zaGFyZWQga2V5IChQU0spIHRvIGVzdGFibGlzaCBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGJldHdlZW4gdGhlXG4gIC8vICAqIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IGFuZCBjdXN0b21lciBnYXRld2F5LiBBbGxvd2VkIGNoYXJhY3RlcnMgYXJlXG4gIC8vICAqIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIHBlcmlvZCBgLmAgYW5kIHVuZGVyc2NvcmVzIGBfYC4gTXVzdCBiZSBiZXR3ZWVuIDhcbiAgLy8gICogYW5kIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoIGFuZCBjYW5ub3Qgc3RhcnQgd2l0aCB6ZXJvICgwKS5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgYW4gQW1hem9uIGdlbmVyYXRlZCBwcmUtc2hhcmVkIGtleVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcHJlU2hhcmVkS2V5U2VjcmV0PzogU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSByYW5nZSBvZiBpbnNpZGUgSVAgYWRkcmVzc2VzIGZvciB0aGUgdHVubmVsLiBBbnkgc3BlY2lmaWVkIENJRFIgYmxvY2tzIG11c3QgYmVcbiAgICogdW5pcXVlIGFjcm9zcyBhbGwgVlBOIGNvbm5lY3Rpb25zIHRoYXQgdXNlIHRoZSBzYW1lIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5LlxuICAgKiBBIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IGFuIEFtYXpvbiBnZW5lcmF0ZWQgaW5zaWRlIElQIENJRFJcbiAgICovXG4gIHJlYWRvbmx5IHR1bm5lbEluc2lkZUNpZHI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJS0UgdmVyc2lvbnMgZm9yIHRoZSB0dW5uZWxcbiAgICovXG4gIHJlYWRvbmx5IGlrZVZlcnNpb25zPzogSWtlVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgRFBEIHRpbWVvdXQgYWN0aW9uIGZvciB0aGUgdHVubmVsXG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0QWN0aW9uPzogRHBkVGltZW91dEFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIERQRCB0aW1lb3V0XG4gICAqL1xuICByZWFkb25seSBkcGRUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0dW5uZWwgbGlmZWN5Y2xlIGNvbnRyb2xcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2w/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMSBESCBncm91cCBudW1iZXJzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFEaEdyb3VwTnVtYmVycz86IFBoYXNlMURoR3JvdXBOdW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gICAqL1xuICByZWFkb25seSBwaGFzZTFFbmNyeXB0aW9uQWxnb3JpdGhtcz86IEVuY3J5cHRpb25BbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgaW50ZWdyaXR5IGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUludGVncml0eUFsZ29yaXRobXM/OiBJbnRlZ3JpdHlBbGdvcml0aG1bXTtcblxuICAvKipcbiAgICogVGhlIHBoYXNlIDEgbGlmZXRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMUxpZmV0aW1lPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSAyIERIIGdyb3VwIG51bWJlcnNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkRoR3JvdXBOdW1iZXJzPzogUGhhc2UyRGhHcm91cE51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBlbmNyeXB0aW9uIGFsZ29yaXRobXNcbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zPzogRW5jcnlwdGlvbkFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBpbnRlZ3JpdHkgYWxnb3JpdGhtc1xuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtcz86IEludGVncml0eUFsZ29yaXRobVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGhhc2UgMiBsaWZldGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBwaGFzZTJMaWZldGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVyY2VudGFnZSBvZiB0aGUgcmVrZXkgd2luZG93IGR1cmluZyB3aGljaCB0aGUgcmVrZXkgdGltZSBpcyByYW5kb21seSBzZWxlY3RlZFxuICAgKiBAZGVmYXVsdCAxMDBcbiAgICogQG1pbmltdW0gMFxuICAgKiBAbWF4aW11bSAxMDBcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5RnV6elBlcmNlbnRhZ2U/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXJnaW4gdGltZSBiZWZvcmUgcGhhc2UgMiBsaWZldGltZSBleHBpcmVzIGZvciBJS0UgcmVrZXlcbiAgICogQGRlZmF1bHQgNTQwXG4gICAqIEBtaW5pbXVtIDYwXG4gICAqIEByZW1hcmtzIE11c3QgYmUgYmV0d2VlbiA2MCBhbmQgaGFsZiBvZiBwaGFzZTJMaWZldGltZVNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IHJla2V5TWFyZ2luVGltZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBhY2tldHMgaW4gYW4gSUtFIHJlcGxheSB3aW5kb3dcbiAgICogQGRlZmF1bHQgMTAyNFxuICAgKiBAbWluaW11bSA2NFxuICAgKiBAbWF4aW11bSAyMDQ4XG4gICAqL1xuICByZWFkb25seSByZXBsYXlXaW5kb3dTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHRha2Ugd2hlbiB0aGUgZXN0YWJsaXNoaW5nIHRoZSB0dW5uZWwgZm9yIHRoZSBzZWNvbmQgVlBOIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHlvdXIgY3VzdG9tZXIgZ2F0ZXdheSBkZXZpY2UgbXVzdCBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uIGFuZCBicmluZyB1cCB0aGUgdHVubmVsLlxuICAgKiBTcGVjaWZ5IGBzdGFydGAgZm9yIEFXUyB0byBpbml0aWF0ZSB0aGUgSUtFIG5lZ290aWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnR1cEFjdGlvbj86IFR1bm5lbFN0YXJ0dXBBY3Rpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGlwIGFkZHJlc3Mgb2YgdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSBpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVNOIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2NTAwMFxuICAgKi9cbiAgcmVhZG9ubHkgYXNuPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhdGljIHJvdXRlcyB0byBiZSByb3V0ZWQgZnJvbSB0aGUgVlBOIGdhdGV3YXkgdG8gdGhlIGN1c3RvbWVyIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IER5bmFtaWMgcm91dGluZyAoQkdQKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljUm91dGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB0dW5uZWwgb3B0aW9ucyBmb3IgdGhlIFZQTiBjb25uZWN0aW9uLiBBdCBtb3N0IHR3byBlbGVtZW50cyAob25lIHBlciB0dW5uZWwpLlxuICAgKiBEdXBsaWNhdGVzIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBbWF6b24gZ2VuZXJhdGVkIHR1bm5lbCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSB0dW5uZWxPcHRpb25zPzogVnBuVHVubmVsT3B0aW9uW107XG59XG5cbi8qKlxuICogVGhlIFZwbkdhdGV3YXkgUHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZwbkdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHR5cGUgaXBzZWMuMVxuICAgKlxuICAgKiBUaGlzIGlzIGlnbm9yZWQgYnkgVGVycmFmb3JtIFByb3ZpZGVyIEFXU1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9pbnRlcm5ldF9nYXRld2F5X2F0dGFjaG1lbnQjYXJndW1lbnQtcmVmZXJlbmNlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi12cG5nYXRld2F5Lmh0bWwjY2ZuLWVjMi12cG5nYXRld2F5LXR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZ5IGFuIEFzbiBvciBsZXQgYXdzIHBpY2sgYW4gQXNuIGZvciB5b3UuXG4gICAqIEBkZWZhdWx0IDY1MDAwXG4gICAqL1xuICByZWFkb25seSBhbWF6b25TaWRlQXNuPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBWcGMuZW5hYmxlVnBuR2F0ZXdheSgpIG1ldGhvZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zIGV4dGVuZHMgVnBuR2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFByb3ZpZGUgYW4gYXJyYXkgb2Ygc3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKiBAZGVmYXVsdCBub1Byb3BhZ2F0aW9uXG4gICAqL1xuICByZWFkb25seSB2cG5Sb3V0ZVByb3BhZ2F0aW9uPzogU3VibmV0U2VsZWN0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVnBuQ29ubmVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFZQQyB0byBjb25uZWN0IHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG4vKipcbiAqIFRoZSBWUE4gY29ubmVjdGlvbiB0eXBlLlxuICovXG5leHBvcnQgZW51bSBWcG5Db25uZWN0aW9uVHlwZSB7XG4gIC8vIE5PVEU6IFRlcnJhZm9ybSBQcm92aWRlciBBV1MgZG9lcyBub3QgaGF2ZSBhIFZwbkNvbm5lY3Rpb24uVHlwZSBmaWVsZCAuLi5cbiAgLy8gQnV0IHRoZSBDdXN0b21lciBHYXRld2F5IERvZXNcbiAgLy8gQHNlZSBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvY3VzdG9tZXJfZ2F0ZXdheSN0eXBlLTFcbiAgLyoqXG4gICAqIFRoZSBJUHNlYyAxIFZQTiBjb25uZWN0aW9uIHR5cGUuXG4gICAqL1xuICBJUFNFQ18xID0gXCJpcHNlYy4xXCIsXG5cbiAgLyoqXG4gICAqIER1bW15IG1lbWJlclxuICAgKiBUT0RPOiByZW1vdmUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2pzaWkvaXNzdWVzLzIzMSBpcyBmaXhlZFxuICAgKi9cbiAgRFVNTVkgPSBcImR1bW15XCIsXG59XG5cbi8qKlxuICogVGhlIFZQTiBHYXRld2F5IHRoYXQgc2hhbGwgYmUgYWRkZWQgdG8gdGhlIFZQQ1xuICpcbiAqIEByZXNvdXJjZSBhd3NfdnBuX2dhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZwbkdhdGV3YXkgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZwbkdhdGV3YXkge1xuICAvKipcbiAgICogVGhlIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5IElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ2F0ZXdheUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheU91dHB1dHMoKTogVnBuR2F0ZXdheU91dHB1dHMge1xuICAgIHJldHVybiB7XG4gICAgICBnYXRld2F5SWQ6IHRoaXMuZ2F0ZXdheUlkLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnZwbkdhdGV3YXlPdXRwdXRzO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZwbkdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICAvLyBUaGlzIGlzICdEZWZhdWx0JyBpbnN0ZWFkIG9mICdSZXNvdXJjZScsIGJlY2F1c2UgdXNpbmcgJ0RlZmF1bHQnIHdpbGwgZ2VuZXJhdGVcbiAgICAvLyBhIGxvZ2ljYWwgSUQgZm9yIGEgVnBuR2F0ZXdheSB3aGljaCBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZSBsb2dpY2FsIElEIHRoYXQgdXNlZFxuICAgIC8vIHRvIGJlIGNyZWF0ZWQgZm9yIHRoZSBDZm5WUE5HYXRld2F5IChhbmQgJ1Jlc291cmNlJyB3b3VsZCBub3QgZG8gdGhhdCkuXG4gICAgY29uc3QgdnBuR1cgPSBuZXcgdnBuR2F0ZXdheS5WcG5HYXRld2F5KHRoaXMsIFwiRGVmYXVsdFwiLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOlxuICAgICAgICBwcm9wcy5hbWF6b25TaWRlQXNuICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHByb3BzLmFtYXpvblNpZGVBc24udG9TdHJpbmcoKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICAgIHRoaXMuZ2F0ZXdheUlkID0gdnBuR1cuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIG9mIGFuIGltcG9ydGVkIFZwbkNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBWUE4gY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpcCBhZGRyZXNzIG9mIHRoZSBjdXN0b21lciBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFTTiBvZiB0aGUgY3VzdG9tZXIgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIFZwbiBjb25uZWN0aW9ucy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwbkNvbm5lY3Rpb25CYXNlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElWcG5Db25uZWN0aW9uXG57XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cG5JZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlcjtcbiAgcHVibGljIGdldCB2cG5Db25uZWN0aW9uT3V0cHV0cygpOiBWcG5Db25uZWN0aW9uT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZwbklkOiB0aGlzLnZwbklkLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IHRoaXMuY3VzdG9tZXJHYXRld2F5SWQsXG4gICAgICBjdXN0b21lckdhdGV3YXlJcDogdGhpcy5jdXN0b21lckdhdGV3YXlJcCxcbiAgICAgIGN1c3RvbWVyR2F0ZXdheUFzbjogdGhpcy5jdXN0b21lckdhdGV3YXlBc24sXG4gICAgfTtcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMudnBuQ29ubmVjdGlvbk91dHB1dHM7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBWUE4gQ29ubmVjdGlvblxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVnBuQ29ubmVjdGlvbiBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgLyoqXG4gICAqIEltcG9ydCBhIFZQTiBjb25uZWN0aW9uIGJ5IHN1cHBseWluZyBhbGwgYXR0cmlidXRlcyBkaXJlY3RseVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBuQ29ubmVjdGlvbkF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBWcG5Db25uZWN0aW9uQXR0cmlidXRlcyxcbiAgKTogSVZwbkNvbm5lY3Rpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFZwbkNvbm5lY3Rpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cG5JZDogc3RyaW5nID0gYXR0cnMudnBuSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SWQ6IHN0cmluZyA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUlkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUlwOiBzdHJpbmcgPSBhdHRycy5jdXN0b21lckdhdGV3YXlJcDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlBc246IG51bWJlciA9IGF0dHJzLmN1c3RvbWVyR2F0ZXdheUFzbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZ2l2ZW4gbmFtZWQgbWV0cmljIGZvciBhbGwgVlBOIGNvbm5lY3Rpb25zIGluIHRoZSBhY2NvdW50L3JlZ2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9WUE5cIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB0dW5uZWwgc3RhdGUgb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGF2ZXJhZ2Ugb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsU3RhdGUoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxTdGF0ZVwiLCB7IHN0YXRpc3RpYzogXCJhdmdcIiwgLi4ucHJvcHMgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgdHVubmVsIGRhdGEgaW4gb2YgYWxsIFZQTiBjb25uZWN0aW9ucyBpbiB0aGUgYWNjb3VudC9yZWdpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtZXRyaWNBbGxUdW5uZWxEYXRhSW4oXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWNBbGwoXCJUdW5uZWxEYXRhSW5cIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHR1bm5lbCBkYXRhIG91dCBvZiBhbGwgVlBOIGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBzdW0gb3ZlciA1IG1pbnV0ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbWV0cmljQWxsVHVubmVsRGF0YU91dChcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpY0FsbChcIlR1bm5lbERhdGFPdXRcIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHZwbklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjdXN0b21lckdhdGV3YXlJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY3VzdG9tZXJHYXRld2F5SXA6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGN1c3RvbWVyR2F0ZXdheUFzbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcG5Db25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy52cGMudnBuR2F0ZXdheUlkKSB7XG4gICAgICBwcm9wcy52cGMuZW5hYmxlVnBuR2F0ZXdheSh7XG4gICAgICAgIHR5cGU6IFwiaXBzZWMuMVwiLFxuICAgICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hc24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5pcCkgJiYgIW5ldC5pc0lQdjQocHJvcHMuaXApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBcXGBpcFxcYCAke3Byb3BzLmlwfSBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IFZwbkNvbm5lY3Rpb25UeXBlLklQU0VDXzE7XG4gICAgY29uc3QgYmdwQXNuID0gcHJvcHMuYXNuIHx8IDY1MDAwO1xuXG4gICAgY29uc3QgY3VzdG9tZXJHdyA9IG5ldyBjdXN0b21lckdhdGV3YXkuQ3VzdG9tZXJHYXRld2F5KFxuICAgICAgdGhpcyxcbiAgICAgIFwiQ3VzdG9tZXJHYXRld2F5XCIsXG4gICAgICB7XG4gICAgICAgIGJncEFzbjogYmdwQXNuLnRvU3RyaW5nKCksXG4gICAgICAgIGlwQWRkcmVzczogcHJvcHMuaXAsXG4gICAgICAgIHR5cGUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlkID0gY3VzdG9tZXJHdy5pZDtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUFzbiA9IGJncEFzbjtcbiAgICB0aGlzLmN1c3RvbWVyR2F0ZXdheUlwID0gcHJvcHMuaXA7XG5cbiAgICBjb25zdCB2cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICAvLyBWYWxpZGF0ZSB0dW5uZWwgb3B0aW9uc1xuICAgIGlmIChwcm9wcy50dW5uZWxPcHRpb25zKSB7XG4gICAgICBpZiAocHJvcHMudHVubmVsT3B0aW9ucy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiB0d28gYHR1bm5lbE9wdGlvbnNgXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnMubGVuZ3RoID09PSAyICYmXG4gICAgICAgIHByb3BzLnR1bm5lbE9wdGlvbnNbMF0udHVubmVsSW5zaWRlQ2lkciA9PT1cbiAgICAgICAgICBwcm9wcy50dW5uZWxPcHRpb25zWzFdLnR1bm5lbEluc2lkZUNpZHIgJiZcbiAgICAgICAgcHJvcHMudHVubmVsT3B0aW9uc1swXS50dW5uZWxJbnNpZGVDaWRyICE9PSB1bmRlZmluZWRcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFNhbWUgJHtwcm9wcy50dW5uZWxPcHRpb25zWzBdLnR1bm5lbEluc2lkZUNpZHJ9IFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgY2Fubm90IGJlIHVzZWQgZm9yIGJvdGggdHVubmVscy5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy50dW5uZWxPcHRpb25zLmZvckVhY2goKG9wdGlvbnMsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIGlmIChvcHRpb25zLnByZVNoYXJlZEtleSAmJiBvcHRpb25zLnByZVNoYXJlZEtleVNlY3JldCkge1xuICAgICAgICAvLyAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgLy8gICAgIFwiU3BlY2lmeSBhdCBtb3N0IG9uZSBvZiAncHJlU2hhcmVkS2V5JyBhbmQgJ3ByZVNoYXJlZEtleVNlY3JldCcuXCIsXG4gICAgICAgIC8vICAgKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLnByZVNoYXJlZEtleSAmJlxuICAgICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQob3B0aW9ucy5wcmVTaGFyZWRLZXkpICYmXG4gICAgICAgICAgIS9eW2EtekEtWjEtOS5fXVthLXpBLVpcXGQuX117Nyw2M30kLy50ZXN0KG9wdGlvbnMucHJlU2hhcmVkS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRoZSBcXGBwcmVTaGFyZWRLZXlcXGAgJHtvcHRpb25zLnByZVNoYXJlZEtleX0gZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gaXMgaW52YWxpZC4gQWxsb3dlZCBjaGFyYWN0ZXJzIGFyZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgLl8uIE11c3QgYmUgYmV0d2VlbiA4IGFuZCA2NCBjaGFyYWN0ZXJzIGluIGxlbmd0aCBhbmQgY2Fubm90IHN0YXJ0IHdpdGggemVybyAoMCkuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcikge1xuICAgICAgICAgIGlmIChSRVNFUlZFRF9UVU5ORUxfSU5TSURFX0NJRFIuaW5jbHVkZXMob3B0aW9ucy50dW5uZWxJbnNpZGVDaWRyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGhlIFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgJHtvcHRpb25zLnR1bm5lbEluc2lkZUNpZHJ9IGZvciB0dW5uZWwgJHtpbmRleCArIDF9IGlzIGEgcmVzZXJ2ZWQgaW5zaWRlIENJRFIuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIS9eMTY5XFwuMjU0XFwuXFxkezEsM31cXC5cXGR7MSwzfVxcLzMwJC8udGVzdChvcHRpb25zLnR1bm5lbEluc2lkZUNpZHIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlbiAqL1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgVGhlIFxcYHR1bm5lbEluc2lkZUNpZHJcXGAgJHtvcHRpb25zLnR1bm5lbEluc2lkZUNpZHJ9IGZvciB0dW5uZWwgJHtpbmRleCArIDF9IGlzIG5vdCBhIHNpemUgLzMwIENJRFIgYmxvY2sgZnJvbSB0aGUgMTY5LjI1NC4wLjAvMTYgcmFuZ2UuYCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVrZXlGdXp6UGVyY2VudGFnZVxuICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UgPCAwIHx8XG4gICAgICAgICAgICAgIG9wdGlvbnMucmVrZXlGdXp6UGVyY2VudGFnZSA+IDEwMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlGdXp6UGVyY2VudGFnZSBmb3IgdHVubmVsICR7aW5kZXggKyAxfSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMTAwYCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBWYWxpZGF0ZSByZWtleU1hcmdpblRpbWVTZWNvbmRzXG4gICAgICAgICAgaWYgKG9wdGlvbnMucmVrZXlNYXJnaW5UaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnJla2V5TWFyZ2luVGltZS50b1NlY29uZHMoKSA8IDYwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgcmVrZXlNYXJnaW5UaW1lIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgYXQgbGVhc3QgNjAgc2Vjb25kc2AsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgbGVzcyB0aGFuIGhhbGYgb2YgcGhhc2UyTGlmZXRpbWVTZWNvbmRzXG4gICAgICAgICAgICBjb25zdCBwaGFzZTJMaWZldGltZSA9IG9wdGlvbnMucGhhc2UyTGlmZXRpbWUgfHwgRHVyYXRpb24uaG91cnMoMSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIG9wdGlvbnMucmVrZXlNYXJnaW5UaW1lLnRvU2Vjb25kcygpID5cbiAgICAgICAgICAgICAgcGhhc2UyTGlmZXRpbWUudG9TZWNvbmRzKCkgLyAyXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGByZWtleU1hcmdpblRpbWUgZm9yIHR1bm5lbCAke2luZGV4ICsgMX0gbXVzdCBiZSBsZXNzIHRoYW4gaGFsZiBvZiBwaGFzZTJMaWZldGltZSAoJHtwaGFzZTJMaWZldGltZS50b1NlY29uZHMoKSAvIDJ9KWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVmFsaWRhdGUgcmVwbGF5V2luZG93U2l6ZVxuICAgICAgICAgIGlmIChvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgPCA2NCB8fFxuICAgICAgICAgICAgICBvcHRpb25zLnJlcGxheVdpbmRvd1NpemUgPiAyMDQ4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGByZXBsYXlXaW5kb3dTaXplIGZvciB0dW5uZWwgJHtpbmRleCArIDF9IG11c3QgYmUgYmV0d2VlbiA2NCBhbmQgMjA0OGAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTWFwIHR1bm5lbCBvcHRpb25zIHRvIEFXUyBwcm92aWRlciBmb3JtYXRcbiAgICAgICAgY29uc3QgdHVubmVsUHJlZml4ID0gYHR1bm5lbCR7aW5kZXggKyAxfWA7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odnBuVHVubmVsT3B0aW9uc1NwZWNpZmljYXRpb25zLCB7XG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QcmVzaGFyZWRLZXlgXTogb3B0aW9ucy5wcmVTaGFyZWRLZXksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1JbnNpZGVDaWRyYF06IG9wdGlvbnMudHVubmVsSW5zaWRlQ2lkcixcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fURwZFRpbWVvdXRBY3Rpb25gXTogb3B0aW9ucy5kcGRUaW1lb3V0QWN0aW9uLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9RHBkVGltZW91dFNlY29uZHNgXTogb3B0aW9ucy5kcGRUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fUVuYWJsZVR1bm5lbExpZmVjeWNsZUNvbnRyb2xgXTpcbiAgICAgICAgICAgIG9wdGlvbnMuZW5hYmxlVHVubmVsTGlmZWN5Y2xlQ29udHJvbCxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fUlrZVZlcnNpb25zYF06IG9wdGlvbnMuaWtlVmVyc2lvbnMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFEaEdyb3VwTnVtYmVyc2BdOiBvcHRpb25zLnBoYXNlMURoR3JvdXBOdW1iZXJzLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UxRW5jcnlwdGlvbkFsZ29yaXRobXMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFJbnRlZ3JpdHlBbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMUludGVncml0eUFsZ29yaXRobXMsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1QaGFzZTFMaWZldGltZVNlY29uZHNgXTpcbiAgICAgICAgICAgIG9wdGlvbnMucGhhc2UxTGlmZXRpbWU/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UyRGhHcm91cE51bWJlcnNgXTogb3B0aW9ucy5waGFzZTJEaEdyb3VwTnVtYmVycyxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMkVuY3J5cHRpb25BbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UySW50ZWdyaXR5QWxnb3JpdGhtc2BdOlxuICAgICAgICAgICAgb3B0aW9ucy5waGFzZTJJbnRlZ3JpdHlBbGdvcml0aG1zLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UGhhc2UyTGlmZXRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnBoYXNlMkxpZmV0aW1lPy50b1NlY29uZHMoKSxcbiAgICAgICAgICBbYCR7dHVubmVsUHJlZml4fVN0YXJ0dXBBY3Rpb25gXTogb3B0aW9ucy5zdGFydHVwQWN0aW9uLFxuICAgICAgICAgIFtgJHt0dW5uZWxQcmVmaXh9UmVrZXlGdXp6UGVyY2VudGFnZWBdOiBvcHRpb25zLnJla2V5RnV6elBlcmNlbnRhZ2UsXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1SZWtleU1hcmdpblRpbWVTZWNvbmRzYF06XG4gICAgICAgICAgICBvcHRpb25zLnJla2V5TWFyZ2luVGltZT8udG9TZWNvbmRzKCksXG4gICAgICAgICAgW2Ake3R1bm5lbFByZWZpeH1SZXBsYXlXaW5kb3dTaXplYF06IG9wdGlvbnMucmVwbGF5V2luZG93U2l6ZSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyB2cG5Db25uZWN0aW9uLlZwbkNvbm5lY3Rpb24odGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICB0eXBlLFxuICAgICAgY3VzdG9tZXJHYXRld2F5SWQ6IGN1c3RvbWVyR3cuaWQsXG4gICAgICBzdGF0aWNSb3V0ZXNPbmx5OiBwcm9wcy5zdGF0aWNSb3V0ZXMgPyB0cnVlIDogZmFsc2UsXG4gICAgICB2cG5HYXRld2F5SWQ6IHByb3BzLnZwYy52cG5HYXRld2F5SWQsXG4gICAgICAuLi52cG5UdW5uZWxPcHRpb25zU3BlY2lmaWNhdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZwbklkID0gcmVzb3VyY2UuaWQ7XG5cbiAgICBpZiAocHJvcHMuc3RhdGljUm91dGVzKSB7XG4gICAgICBwcm9wcy5zdGF0aWNSb3V0ZXMuZm9yRWFjaCgocm91dGUpID0+IHtcbiAgICAgICAgbmV3IHZwbkNvbm5lY3Rpb25Sb3V0ZS5WcG5Db25uZWN0aW9uUm91dGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgUm91dGUke3JvdXRlLnJlcGxhY2UoL1teXFxkXS9nLCBcIlwiKX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiByb3V0ZSxcbiAgICAgICAgICAgIHZwbkNvbm5lY3Rpb25JZDogdGhpcy52cG5JZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9UVU5ORUxfSU5TSURFX0NJRFIgPSBbXG4gIFwiMTY5LjI1NC4wLjAvMzBcIixcbiAgXCIxNjkuMjU0LjEuMC8zMFwiLFxuICBcIjE2OS4yNTQuMi4wLzMwXCIsXG4gIFwiMTY5LjI1NC4zLjAvMzBcIixcbiAgXCIxNjkuMjU0LjQuMC8zMFwiLFxuICBcIjE2OS4yNTQuNS4wLzMwXCIsXG4gIFwiMTY5LjI1NC4xNjkuMjUyLzMwXCIsXG5dO1xuXG4vKipcbiAqIEFjdGlvbiB0byB0YWtlIGFmdGVyIERQRCB0aW1lb3V0IG9jY3Vyc1xuICovXG5leHBvcnQgZW51bSBEcGRUaW1lb3V0QWN0aW9uIHtcbiAgLyoqXG4gICAqIEVuZCB0aGUgSUtFIHNlc3Npb25cbiAgICovXG4gIENMRUFSID0gXCJjbGVhclwiLFxuXG4gIC8qKlxuICAgKiBUYWtlIG5vIGFjdGlvblxuICAgKi9cbiAgTk9ORSA9IFwibm9uZVwiLFxuXG4gIC8qKlxuICAgKiBSZXN0YXJ0IHRoZSBJS0UgaW5pdGlhdGlvblxuICAgKi9cbiAgUkVTVEFSVCA9IFwicmVzdGFydFwiLFxufVxuXG4vKipcbiAqIElLRSB2ZXJzaW9ucyBwZXJtaXR0ZWQgZm9yIFZQTiB0dW5uZWxzXG4gKi9cbmV4cG9ydCBlbnVtIElrZVZlcnNpb24ge1xuICAvKipcbiAgICogSUtFIHZlcnNpb24gMVxuICAgKi9cbiAgSUtFVjEgPSBcImlrZXYxXCIsXG5cbiAgLyoqXG4gICAqIElLRSB2ZXJzaW9uIDJcbiAgICovXG4gIElLRVYyID0gXCJpa2V2MlwiLFxufVxuXG4vKipcbiAqIFBoYXNlIDEgYW5kIDIgZW5jcnlwdGlvbiBhbGdvcml0aG1zXG4gKi9cbmV4cG9ydCBlbnVtIEVuY3J5cHRpb25BbGdvcml0aG0ge1xuICAvKipcbiAgICogQUVTIHdpdGggMTI4LWJpdCBrZXlcbiAgICovXG4gIEFFUzEyOCA9IFwiQUVTMTI4XCIsXG5cbiAgLyoqXG4gICAqIEFFUyB3aXRoIDI1Ni1iaXQga2V5XG4gICAqL1xuICBBRVMyNTYgPSBcIkFFUzI1NlwiLFxuXG4gIC8qKlxuICAgKiBBRVMtR0NNIHdpdGggMTI4LWJpdCBrZXkgYW5kIDE2IGJ5dGUgaW50ZWdyaXR5IGNoZWNrXG4gICAqL1xuICBBRVMxMjhfR0NNXzE2ID0gXCJBRVMxMjgtR0NNLTE2XCIsXG5cbiAgLyoqXG4gICAqIEFFUy1HQ00gd2l0aCAyNTYtYml0IGtleSBhbmQgMTYgYnl0ZSBpbnRlZ3JpdHkgY2hlY2tcbiAgICovXG4gIEFFUzI1Nl9HQ01fMTYgPSBcIkFFUzI1Ni1HQ00tMTZcIixcbn1cblxuLyoqXG4gKiBQaGFzZSAxIGFuZCAyIGludGVncml0eSBhbGdvcml0aG1zXG4gKi9cbmV4cG9ydCBlbnVtIEludGVncml0eUFsZ29yaXRobSB7XG4gIC8qKlxuICAgKiBTSEEtMSBoYXNoIGFsZ29yaXRobVxuICAgKi9cbiAgU0hBMSA9IFwiU0hBMVwiLFxuXG4gIC8qKlxuICAgKiBTSEEtMiB3aXRoIDI1Ni1iaXQgZGlnZXN0XG4gICAqL1xuICBTSEEyXzI1NiA9IFwiU0hBMi0yNTZcIixcblxuICAvKipcbiAgICogU0hBLTIgd2l0aCAzODQtYml0IGRpZ2VzdFxuICAgKi9cbiAgU0hBMl8zODQgPSBcIlNIQTItMzg0XCIsXG5cbiAgLyoqXG4gICAqIFNIQS0yIHdpdGggNTEyLWJpdCBkaWdlc3RcbiAgICovXG4gIFNIQTJfNTEyID0gXCJTSEEyLTUxMlwiLFxufVxuXG4vKipcbiAqIFBoYXNlIDEgRGlmZmllLUhlbGxtYW4gZ3JvdXAgbnVtYmVyc1xuICovXG5leHBvcnQgZW51bSBQaGFzZTFEaEdyb3VwTnVtYmVyIHtcbiAgR1JPVVBfMiA9IDIsXG4gIEdST1VQXzE0ID0gMTQsXG4gIEdST1VQXzE1ID0gMTUsXG4gIEdST1VQXzE2ID0gMTYsXG4gIEdST1VQXzE3ID0gMTcsXG4gIEdST1VQXzE4ID0gMTgsXG4gIEdST1VQXzE5ID0gMTksXG4gIEdST1VQXzIwID0gMjAsXG4gIEdST1VQXzIxID0gMjEsXG4gIEdST1VQXzIyID0gMjIsXG4gIEdST1VQXzIzID0gMjMsXG4gIEdST1VQXzI0ID0gMjQsXG59XG5cbi8qKlxuICogUGhhc2UgMiBEaWZmaWUtSGVsbG1hbiBncm91cCBudW1iZXJzXG4gKi9cbmV4cG9ydCBlbnVtIFBoYXNlMkRoR3JvdXBOdW1iZXIge1xuICBHUk9VUF8yID0gMixcbiAgR1JPVVBfNSA9IDUsXG4gIEdST1VQXzE0ID0gMTQsXG4gIEdST1VQXzE1ID0gMTUsXG4gIEdST1VQXzE2ID0gMTYsXG4gIEdST1VQXzE3ID0gMTcsXG4gIEdST1VQXzE4ID0gMTgsXG4gIEdST1VQXzE5ID0gMTksXG4gIEdST1VQXzIwID0gMjAsXG4gIEdST1VQXzIxID0gMjEsXG4gIEdST1VQXzIyID0gMjIsXG4gIEdST1VQXzIzID0gMjMsXG4gIEdST1VQXzI0ID0gMjQsXG59XG5cbi8qKlxuICogVHVubmVsIHN0YXJ0dXAgYWN0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIFR1bm5lbFN0YXJ0dXBBY3Rpb24ge1xuICAvKipcbiAgICogQ3VzdG9tZXIgZ2F0ZXdheSBtdXN0IGluaXRpYXRlIElLRSBuZWdvdGlhdGlvblxuICAgKi9cbiAgQUREID0gXCJhZGRcIixcblxuICAvKipcbiAgICogQVdTIHdpbGwgaW5pdGlhdGUgSUtFIG5lZ290aWF0aW9uXG4gICAqL1xuICBTVEFSVCA9IFwic3RhcnRcIixcbn1cbiJdfQ==
|