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
|
@@ -11,7 +11,7 @@ const __1 = require("..");
|
|
|
11
11
|
const architecture_1 = require("./architecture");
|
|
12
12
|
const function_base_1 = require("./function-base");
|
|
13
13
|
const util_1 = require("./util");
|
|
14
|
-
const
|
|
14
|
+
const duration_1 = require("../../duration");
|
|
15
15
|
const iam = require("../iam");
|
|
16
16
|
const notify_1 = require("../notify");
|
|
17
17
|
// re-add ec2.IConnectable?
|
|
@@ -247,7 +247,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
247
247
|
*/
|
|
248
248
|
this.environment = {};
|
|
249
249
|
this._eventSources = {};
|
|
250
|
-
const { description, environment: variables, logRetentionInDays = __1.RetentionDays.ONE_WEEK, memorySize = 128, timeout =
|
|
250
|
+
const { description, environment: variables, logRetentionInDays = __1.RetentionDays.ONE_WEEK, memorySize = 128, timeout = duration_1.Duration.seconds(3), layers, reservedConcurrentExecutions, } = props;
|
|
251
251
|
/**
|
|
252
252
|
* The name or ARN of the Lambda function.
|
|
253
253
|
* is limited to 64 characters in length.
|
|
@@ -543,7 +543,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
543
543
|
deadLetterQueue =
|
|
544
544
|
props.deadLetterQueue ||
|
|
545
545
|
new notify_1.Queue(this, "DeadLetterQueue", {
|
|
546
|
-
messageRetentionSeconds:
|
|
546
|
+
messageRetentionSeconds: duration_1.Duration.days(14).toSeconds(),
|
|
547
547
|
});
|
|
548
548
|
this.addToRolePolicy(new iam.PolicyStatement({
|
|
549
549
|
actions: ["sqs:SendMessage"],
|
|
@@ -582,7 +582,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
582
582
|
}
|
|
583
583
|
exports.LambdaFunction = LambdaFunction;
|
|
584
584
|
_a = JSII_RTTI_SYMBOL_1;
|
|
585
|
-
LambdaFunction[_a] = { fqn: "terraconstructs.aws.compute.LambdaFunction", version: "0.0.
|
|
585
|
+
LambdaFunction[_a] = { fqn: "terraconstructs.aws.compute.LambdaFunction", version: "0.0.12" };
|
|
586
586
|
/**
|
|
587
587
|
* Given an opaque (token) ARN, returns a TF expression that extracts the function
|
|
588
588
|
* name from the ARN.
|
|
@@ -689,4 +689,4 @@ var LoggingFormat;
|
|
|
689
689
|
*/
|
|
690
690
|
LoggingFormat["JSON"] = "JSON";
|
|
691
691
|
})(LoggingFormat || (exports.LoggingFormat = LoggingFormat = {}));
|
|
692
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2SkFBNko7QUFDN0osMkhBQTJIO0FBQzNILHNEQU02QjtBQUM3QixpQ0FBc0U7QUFFdEUsMEJBQXdEO0FBQ3hELGlEQUE4QztBQUk5QyxtREFLeUI7QUFHekIsaUNBQWtDO0FBQ2xDLDhCQUFrQztBQUNsQyw4QkFBOEI7QUFDOUIsc0NBQTBDO0FBK08xQywyQkFBMkI7QUFFM0IsTUFBTTtBQUNOLHdCQUF3QjtBQUN4QixNQUFNO0FBQ04scUVBQXFFO0FBRXJFLFFBQVE7QUFDUixxREFBcUQ7QUFDckQsUUFBUTtBQUNSLDJEQUEyRDtBQUMzRCxJQUFJO0FBRUo7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsa0NBQWtCO0lBQ3BELDZEQUE2RDtJQUU3RDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQiwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3RELFdBQVcsRUFBRSxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsU0FBUyxFQUFFLGFBQVMsQ0FBQyxtQkFBbUI7YUFDekMsQ0FBQztZQUNGLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1B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LENBQUE7QUFDakIsQ0FBQyxFQXpCVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQXlCOUI7QUFFRDs7Ozs7O0dBTUc7QUFDSCxJQUFZLGFBU1g7QUFURCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0lBQ2I7O09BRUc7SUFDSCw4QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLGFBQWEsNkJBQWIsYUFBYSxRQVN4QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2Nka3RmLXBsdXMvY2RrdGYtcGx1cy9ibG9iLzU4NmFhYmFkM2FiMmZiMmEyZTkzZTA1ZWQzM2Y5NDQ3NGViZTkzOTcvcGFja2FnZXMvJTQwY2RrdGYtcGx1cy9hd3MvbGliL2F3cy1sYW1iZGEtZnVuY3Rpb24vaW5kZXgudHNcbi8vIHVwZGF0ZSB0byBhbGlnbiBjbG9zZXIgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50c1xuaW1wb3J0IHtcbiAgbGFtYmRhRnVuY3Rpb24sXG4gIGNsb3Vkd2F0Y2hMb2dHcm91cCxcbiAgc2VjdXJpdHlHcm91cCxcbiAgbGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nLFxuICBkYXRhQXdzTGFtYmRhRnVuY3Rpb24sXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2ZUNvbnRleHQsIExhenksIElSZXNvbHZhYmxlLCBUb2tlbiwgRm4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzLCBBd3NTdGFjaywgQXJuRm9ybWF0IH0gZnJvbSBcIi4uXCI7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tIFwiLi9hcmNoaXRlY3R1cmVcIjtcbmltcG9ydCB7IEV2ZW50SW52b2tlQ29uZmlnT3B0aW9ucyB9IGZyb20gXCIuL2V2ZW50LWludm9rZS1jb25maWdcIjtcbmltcG9ydCB7IElFdmVudFNvdXJjZU1hcHBpbmcgfSBmcm9tIFwiLi9ldmVudC1zb3VyY2UtbWFwcGluZ1wiO1xuaW1wb3J0IHsgQWxpYXNPcHRpb25zLCBBbGlhcyB9IGZyb20gXCIuL2Z1bmN0aW9uLWFsaWFzXCI7XG5pbXBvcnQge1xuICBMYW1iZGFGdW5jdGlvbkJhc2UsXG4gIElGdW5jdGlvbixcbiAgRnVuY3Rpb25BdHRyaWJ1dGVzLFxuICBJRXZlbnRTb3VyY2UsXG59IGZyb20gXCIuL2Z1bmN0aW9uLWJhc2VcIjtcbmltcG9ydCB7IEZ1bmN0aW9uVXJsLCBGdW5jdGlvblVybE9wdGlvbnMgfSBmcm9tIFwiLi9mdW5jdGlvbi11cmxcIjtcbmltcG9ydCB7IFZwY0NvbmZpZyB9IGZyb20gXCIuL2Z1bmN0aW9uLXZwYy1jb25maWcuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBhZGRBbGlhcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL1wiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IElRdWV1ZSwgUXVldWUgfSBmcm9tIFwiLi4vbm90aWZ5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25PdXRwdXRzIHtcbiAgLyoqXG4gICAqIEFXUyBMYW1iZGEgZnVuY3Rpb24gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgTGFtYmRhIGFybiBvZiB0aGUgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIFJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBMYW1iZGEgZnVuY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogRnVuY3Rpb24gVVJMIGlmIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZyB8IElSZXNvbHZhYmxlO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBncm91cCBvZiB0aGUgZnVuY3Rpb24gaWYgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFNlY3VyaXR5R3JvdXA/OiBzdHJpbmcgfCBJUmVzb2x2YWJsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblByb3BzIGV4dGVuZHMgRXZlbnRJbnZva2VDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZvcmNlIGZ1bmN0aW9uIG5hbWUgKGZvciBhZG9wdGlvbiBvZiBleGlzdGluZyByZXNvdXJjZXMpLlxuICAgKlxuICAgKiBQcmVmZXIgdG8gdXNlIGZ1bmN0aW9uTmFtZVByZWZpeC5cbiAgICpcbiAgICogVXNlIFtUZXJyYWZvcm0gUmVzb3VyY2UgTWV0YSBBcmd1bWVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL3Jlc291cmNlcy9zeW50YXgjbWV0YS1hcmd1bWVudHMpXG4gICAqIHRvIGNvbnRyb2wgbGlmZWN5Y2xlIHdoZW4gcmVwbGFjaW5nIHRoZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBvbWl0dGVkLCBSZWZlciB0byBgZnVuY3Rpb25OYW1lUHJlZml4YC5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIHByZWZpeCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdyaWQgZ2VuZXJhdGVzIGEgdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXRcbiAgICogSUQgZm9yIHRoZSBmdW5jdGlvbidzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEtleS12YWx1ZSBwYWlycyB0aGF0IExhbWJkYSBjYWNoZXMgYW5kIG1ha2VzIGF2YWlsYWJsZSBmb3IgeW91ciBMYW1iZGFcbiAgICogZnVuY3Rpb25zLiBVc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGFwcGx5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgc3VjaFxuICAgKiBhcyB0ZXN0IGFuZCBwcm9kdWN0aW9uIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLCB3aXRob3V0IGNoYW5naW5nIHlvdXJcbiAgICogTGFtYmRhIGZ1bmN0aW9uIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHlvdXIgTGFtYmRhIEZ1bmN0aW9uIGRvZXMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGlzIGxhbWJkYSBmdW5jdGlvbi5cbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhY2luZyBtb2RlIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIHdyaXRlIHRvIEFXUyBYLVJheS5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhY2luZy5BQ1RJVkVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmc/OiBUcmFjaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHJldGVudGlvbiBwZXJpb2QgaW4gZGF5cy4gRGVmYXVsdHMgdG8gNy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbkluRGF5cz86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW1vcnkgbGltaXQgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEyOC5cbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBleGVjdXRpb24gdGltZSAoaW4gc2Vjb25kcykgYWZ0ZXIgd2hpY2ggTGFtYmRhIHRlcm1pbmF0ZXNcbiAgICogdGhlIGZ1bmN0aW9uLiBCZWNhdXNlIHRoZSBleGVjdXRpb24gdGltZSBhZmZlY3RzIGNvc3QsIHNldCB0aGlzIHZhbHVlXG4gICAqIGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzIGV4cGVjdGVkIGV4ZWN1dGlvbiB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIExheWVycyBmb3IgdGhlIExhbWJkYS5cbiAgICovXG4gIHJlYWRvbmx5IGxheWVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHBvbGljeSBzdGF0ZW1lbnRzIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgUm9sZS5cbiAgICpcbiAgICogWW91IGNhbiBjYWxsIGBhZGRUb1JvbGVQb2xpY3lgIHRvIHRoZSBjcmVhdGVkIGxhbWJkYSB0byBhZGQgc3RhdGVtZW50cyBwb3N0IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHBvbGljeSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxQb2xpY3k/OiBpYW0uUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIExhbWJkYSBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgYXNzdW1lZCBieSB0aGUgZnVuY3Rpb24gdXBvbiBleGVjdXRpb24uXG4gICAqIEl0IGNvbnRyb2xzIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUuIFRoZSBSb2xlIG11c3RcbiAgICogYmUgYXNzdW1hYmxlIGJ5IHRoZSAnbGFtYmRhLmFtYXpvbmF3cy5jb20nIHNlcnZpY2UgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBSb2xlIGF1dG9tYXRpY2FsbHkgaGFzIHBlcm1pc3Npb25zIGdyYW50ZWQgZm9yIExhbWJkYSBleGVjdXRpb24uIElmIHlvdVxuICAgKiBwcm92aWRlIGEgUm9sZSwgeW91IG11c3QgYWRkIHRoZSByZWxldmFudCBBV1MgbWFuYWdlZCBwb2xpY2llcyB5b3Vyc2VsZi5cbiAgICpcbiAgICogVGhlIHJlbGV2YW50IG1hbmFnZWQgcG9saWNpZXMgYXJlIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiIGFuZFxuICAgKiBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSB1bmlxdWUgcm9sZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEJvdGggc3VwcGxpZWQgYW5kIGdlbmVyYXRlZCByb2xlcyBjYW4gYWx3YXlzIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBgYWRkVG9Sb2xlUG9saWN5YC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIENvbmZpZyBmb3IgbmV0d29yayBjb25uZWN0aXZpdHkgdG8gQVdTIHJlc291cmNlcyBpbiBhIFZQQywgc3BlY2lmeSBhIGxpc3RcbiAgICogb2Ygc3VibmV0LCBhbmQgb3B0aW9uYWxseSBzZWN1cml0eSBncm91cHMsIGluIHRoZSBWUEMuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gaWFtIHJvbGUgd2lsbCByZWNlaXZlIHBlcm1pc3Npb24gdG9cbiAgICogbWFuYWdlIEVOSXMgd2l0aGluIHRoZSBwcm92aWRlZCBuZXR3b3JrLlxuICAgKlxuICAgKiBXaGVuIHlvdSBjb25uZWN0IGEgZnVuY3Rpb24gdG8gYSBWUEMsIGl0IGNhbiBvbmx5IGFjY2VzcyByZXNvdXJjZXMgYW5kIHRoZSBpbnRlcm5ldCB0aHJvdWdoIHRoYXQgVlBDLlxuICAgKlxuICAgKiBTZWUgW1ZQQyBTZXR0aW5nc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvY29uZmlndXJhdGlvbi12cGMuaHRtbCkuXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrQ29uZmlnPzogVnBjQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgU1FTIERMUS5cbiAgICpcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiBpYW0gcm9sZSB3aWxsIHJlY2VpdmUgcGVybWlzc2lvbiB0b1xuICAgKiBzZW5kIG1lc3NhZ2VzIG9uIHRoaXMgcXVldWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVhZGxldHRlciBxdWV1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlPzogSVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVkIERMUS4gSWYgYGRlYWRMZXR0ZXJRdWV1ZWAgaXMgdW5kZWZpbmVkLFxuICAgKiBhbiBTUVMgcXVldWUgd2l0aCBkZWZhdWx0IG9wdGlvbnMgd2lsbCBiZSBkZWZpbmVkIGZvciB5b3VyIEZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlIHVubGVzcyBgZGVhZExldHRlclF1ZXVlYCBpcyBzZXQsIHdoaWNoIGltcGxpZXMgRExRIGlzIGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWVFbmFibGVkPzogYm9vbGVhbjtcblxuICAvLyBUT0RPOiByZS1hZGQgU05TIGRlYWRMZXR0ZXJUb3BpY1xuXG4gIC8qKlxuICAgKiBFdmVudCBzb3VyY2VzIGZvciB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gYWRkIGV2ZW50IHNvdXJjZXMgdXNpbmcgYGFkZEV2ZW50U291cmNlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBldmVudCBzb3VyY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZlbnRzPzogSUV2ZW50U291cmNlW107XG5cbiAgLyoqXG4gICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42MC4wL2RvY3MvcmVzb3VyY2VzL2xhbWJkYV9mdW5jdGlvbiNyZXNlcnZlZF9jb25jdXJyZW50X2V4ZWN1dGlvbnMgTGFtYmRhRnVuY3Rpb24jcmVzZXJ2ZWRfY29uY3VycmVudF9leGVjdXRpb25zfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGFncyB0byBhcHBseSB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFNldHRpbmcgdGhpcyBwcm9wZXJ0eSBpbmZvcm1zIHRoZSBDREsgdGhhdCB0aGUgaW1wb3J0ZWQgZnVuY3Rpb24gQUxSRUFEWSBIQVMgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9uc1xuICAgKiBmb3Igd2hhdCB5b3UgYXJlIHRyeWluZyB0byBkby4gV2hlbiBub3QgY29uZmlndXJlZCwgdGhlIENESyBhdHRlbXB0cyB0byBhdXRvLWRldGVybWluZSB3aGV0aGVyIG9yIG5vdFxuICAgKiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGFyZSBuZWNlc3Nhcnkgb24gdGhlIGZ1bmN0aW9uIHdoZW4gZ3JhbnQgQVBJcyBhcmUgdXNlZC4gSWYgdGhlIENESyB0cmllZCB0byBhZGRcbiAgICogcGVybWlzc2lvbnMgb24gYW4gaW1wb3J0ZWQgbGFtYmRhLCBpdCB3aWxsIGZhaWwuXG4gICAqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5ICpPTkxZIElGKiB5b3UgYXJlIGNvbW1pdHRpbmcgdG8gbWFuYWdlIHRoZSBpbXBvcnRlZCBmdW5jdGlvbidzIHBlcm1pc3Npb25zIG91dHNpZGUgb2ZcbiAgICogQ0RLLiBZb3UgYXJlIGFja25vd2xlZGdpbmcgdGhhdCB5b3VyIENESyBjb2RlIGFsb25lIHdpbGwgaGF2ZSBpbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gYWNjZXNzIHRoZVxuICAgKiBpbXBvcnRlZCBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBQZXJtaXNzaW9ucz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGxvZ2dpbmdGb3JtYXQgZm9yIHRoZSBmdW5jdGlvbi5cbiAgICogQGRlZmF1bHQgTG9nZ2luZ0Zvcm1hdC5URVhUXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nRm9ybWF0PzogTG9nZ2luZ0Zvcm1hdDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgYXBwbGljYXRpb24gbG9nIGxldmVsIGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IEFwcGxpY2F0aW9uTG9nTGV2ZWwuSU5GT1xuICAgKi9cbiAgcmVhZG9ubHkgYXBwbGljYXRpb25Mb2dMZXZlbD86IEFwcGxpY2F0aW9uTG9nTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN5c3RlbSBsb2cgbGV2ZWwgZm9yIHRoZSBmdW5jdGlvbi5cbiAgICogQGRlZmF1bHQgU3lzdGVtTG9nTGV2ZWwuSU5GT1xuICAgKi9cbiAgcmVhZG9ubHkgc3lzdGVtTG9nTGV2ZWw/OiBTeXN0ZW1Mb2dMZXZlbDtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcHVibGlzaCBjcmVhdGlvbi9jaGFuZ2UgYXMgbmV3IExhbWJkYSBGdW5jdGlvbiBWZXJzaW9uLlxuICAgKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzL2xhdGVzdC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcHVibGlzaCBMYW1iZGFGdW5jdGlvbiNwdWJsaXNofVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaD86IGJvb2xlYW4gfCBJUmVzb2x2YWJsZTtcblxuICAvLyAvLyBUaGlzIHdpbGwgYmUgZGVmaW5lZCBieSBleHRlbmRpbmcgY2xhc3Nlc1xuICAvLyAvLyByZWY6IGh0dHBzOi8vYXdzLmdpdGh1Yi5pby9qc2lpL3VzZXItZ3VpZGVzL2xpYi1hdXRob3IvdHlwZXNjcmlwdC1yZXN0cmljdGlvbnMvI2NvdmFyaWFudC1vdmVycmlkZXMtcGFyYW1ldGVyLWxpc3QtY2hhbmdlc1xuICAvLyAvLyBpbXBsZW1lbnQgUnVudGltZSBhcyBhIGNsYXNzP1xuICAvLyAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9ydW50aW1lLnRzXG4gIC8vIC8qKlxuICAvLyAgKiBJZGVudGlmaWVyIG9mIHRoZSBmdW5jdGlvbidzIHJ1bnRpbWUuXG4gIC8vICAqXG4gIC8vICAqIERvY3M6XG4gIC8vICAqIC0gYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvbGF0ZXN0L2RvY3MvcmVzb3VyY2VzL2xhbWJkYV9mdW5jdGlvbiNydW50aW1lIExhbWJkYUZ1bmN0aW9uI3J1bnRpbWV9XG4gIC8vICAqIC0gQVdTIExhbWJkYSBDcmVhdEZ1bmN0aW9uIGRvY3M6IHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZUZ1bmN0aW9uLmh0bWwjbGFtYmRhLUNyZWF0ZUZ1bmN0aW9uLXJlcXVlc3QtUnVudGltZSBDcmVhdGVGdW5jdGlvbiNybnRpbWV9XG4gIC8vICAqL1xuICAvLyByZWFkb25seSBydW50aW1lPzogc3RyaW5nO1xufVxuXG4vLyByZS1hZGQgZWMyLklDb25uZWN0YWJsZT9cblxuLy8gLyoqXG4vLyAgKiBBIExhbWJkYSBmdW5jdGlvbi5cbi8vICAqL1xuLy8gZXhwb3J0IGludGVyZmFjZSBJRnVuY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0LCBpYW0uSUdyYW50YWJsZSB7XG5cbi8vICAgLyoqXG4vLyAgICAqIEFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIGZ1bmN0aW9uLlxuLy8gICAgKi9cbi8vICAgYWRkRW52aXJvbm1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJRnVuY3Rpb247XG4vLyB9XG5cbi8qKlxuICogUHJvdmlkZXMgYSBMYW1iZGEgRnVuY3Rpb24gcmVzb3VyY2UuIExhbWJkYSBhbGxvd3MgeW91IHRvIHRyaWdnZXIgZXhlY3V0aW9uXG4gKiBvZiBjb2RlIGluIHJlc3BvbnNlIHRvIGV2ZW50cyBpbiBBV1MsIGVuYWJsaW5nIHNlcnZlcmxlc3MgYmFja2VuZCBzb2x1dGlvbnMuXG4gKlxuICogVGhlIExhbWJkYSBGdW5jdGlvbiBpdHNlbGYgaW5jbHVkZXMgc291cmNlIGNvZGUgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGlzIENvbnN0cnVjdCBtYW5hZ2VzIHBlcm1pc3Npb25zIGFzIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIFByaW5jaXBhbCBpYW0gcG9saWN5LlxuICogVGhpcyB3b3JrcyBmb3Igc2FtZSBhY2NvdW50IHJlc291cmNlcywgYnV0IGZvciBjcm9zcy1hY2NvdW50IHJlc291cmNlcyxcbiAqIHlvdSBtYXkgbmVlZCB0byBtYW5hZ2UgYWNjZXNzIGFzIHBhcnQgb2YgdGhlIFJlc291cmNlIGlhbSBwb2xpY3kuXG4gKlxuICogQHJlc291cmNlIGF3c19sYW1iZGFfZnVuY3Rpb25cbiAqIEBiZWFjb24tY2xhc3MgY29tcHV0ZS5JRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgTGFtYmRhRnVuY3Rpb25CYXNlIGltcGxlbWVudHMgSUZ1bmN0aW9uIHtcbiAgLy8gVE9ETzogVGVycmFmb3JtIGF3c19sYW1iZGFfZnVuY3Rpb24gPT0gQ0RLIEZ1bmN0aW9uVmVyc2lvblxuXG4gIC8qKlxuICAgKiBMYXRlc3QgcHVibGlzaGVkIHZlcnNpb24gb2YgeW91ciBMYW1iZGEgRnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlzIHRoaXMgaWYgcHVibGlzaCBpcyBmYWxzZT8/XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UudmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgbmFtZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRnVuY3Rpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gTGFtYmRhRnVuY3Rpb24uZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGZ1bmN0aW9uQXJuOiBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogXCJsYW1iZGFcIixcbiAgICAgICAgcmVzb3VyY2U6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICB9KSxcbiAgICAgIHNhbWVFbnZpcm9ubWVudDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgQVJOLlxuICAgKlxuICAgKiBGb3IgYEZ1bmN0aW9uLmFkZFBlcm1pc3Npb25zKClgIHRvIHdvcmsgb24gdGhpcyBpbXBvcnRlZCBsYW1iZGEsIG1ha2Ugc3VyZSB0aGF0IGlzXG4gICAqIGluIHRoZSBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBhcyB0aGUgc3RhY2sgeW91IGFyZSBpbXBvcnRpbmcgaXQgaW50by5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbkFybjogc3RyaW5nLFxuICApOiBJRnVuY3Rpb24ge1xuICAgIHJldHVybiBMYW1iZGFGdW5jdGlvbi5mcm9tRnVuY3Rpb25BdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmdW5jdGlvbkFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGFtYmRhIGZ1bmN0aW9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEgZnVuY3Rpb24gbm90IGRlZmluZWRcbiAgICogd2l0aGluIHRoaXMgc3RhY2suXG4gICAqXG4gICAqIEZvciBgRnVuY3Rpb24uYWRkUGVybWlzc2lvbnMoKWAgdG8gd29yayBvbiB0aGlzIGltcG9ydGVkIGxhbWJkYSwgc2V0IHRoZSBzYW1lRW52aXJvbm1lbnQgcHJvcGVydHkgdG8gdHJ1ZVxuICAgKiBpZiB0aGlzIGltcG9ydGVkIGxhbWJkYSBpcyBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIHN0YWNrIHlvdSBhcmUgaW1wb3J0aW5nIGl0IGludG8uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIG5hbWUgb2YgdGhlIGxhbWJkYSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBmdW5jdGlvbiB0byBpbXBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEZ1bmN0aW9uQXR0cmlidXRlcyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvbkFybiA9IGF0dHJzLmZ1bmN0aW9uQXJuO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGV4dHJhY3ROYW1lRnJvbUFybihhdHRycy5mdW5jdGlvbkFybik7XG4gICAgY29uc3Qgcm9sZSA9IGF0dHJzLnJvbGU7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBMYW1iZGFGdW5jdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbkFybiA9IGZ1bmN0aW9uQXJuO1xuICAgICAgLy8gVE9ETzogUmVzb2x2ZSByb2xlIGFuZCBwcmluY2lwYWwgcmVzb2x2ZSBmcm9tIFRGIGRhdGEgc291cmNlP1xuICAgICAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcbiAgICAgIHB1YmxpYyByZWFkb25seSByb2xlID0gcm9sZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwZXJtaXNzaW9uc05vZGUgPSB0aGlzLm5vZGU7XG4gICAgICAvKipcbiAgICAgICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24gcmV0dXJuZWQuXG4gICAgICAgKlxuICAgICAgICogSWYgcXVhbGlmaWVyIGlzIG5vdCBzZXQsIHRoaXMgd2lsbCByZXNvbHZlIHRvIHRoZSBtb3N0IHJlY2VudCBwdWJsaXNoZWQgdmVyc2lvbi5cbiAgICAgICAqIElmIG5vIHB1Ymxpc2hlZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBleGlzdHMsIHZlcnNpb24gd2lsbCByZXNvbHZlIHRvIGAkTEFURVNUYC5cbiAgICAgICAqL1xuICAgICAgcHVibGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlLnZlcnNpb247XG4gICAgICB9XG4gICAgICAvLyBGb3JjZSB1c2VyIHRvIHByb3ZpZGUgYXJjaCBvciBhc3N1bWUgWDg2XzY0XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlID0gYXR0cnMuYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5YODZfNjQ7XG4gICAgICAvLyBwdWJsaWMgZ2V0IGFyY2hpdGVjdHVyZSgpOiBzdHJpbmcge1xuICAgICAgLy8gICByZXR1cm4gRm4uZWxlbWVudCh0aGlzLnJlc291cmNlLmFyY2hpdGVjdHVyZXMsIDApIGFzIHN0cmluZztcbiAgICAgIC8vIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZUFybnNGb3JHcmFudEludm9rZSA9IFtcbiAgICAgICAgdGhpcy5mdW5jdGlvbkFybixcbiAgICAgICAgYCR7dGhpcy5mdW5jdGlvbkFybn06KmAsXG4gICAgICBdO1xuICAgICAgcHVibGljIGdldCBmdW5jdGlvbk91dHB1dHMoKTogRnVuY3Rpb25PdXRwdXRzIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBhcm46IHRoaXMuZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgcm9sZUFybjogdGhpcy5yb2xlPy5yb2xlQXJuID8/IFwiXCIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IG91dHB1dHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmN0aW9uT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHByb3RlY3RlZCByZWFkb25seSBjYW5DcmVhdGVQZXJtaXNzaW9ucyA9XG4gICAgICAgIGF0dHJzLnNhbWVFbnZpcm9ubWVudCA/PyB0aGlzLl9pc1N0YWNrQWNjb3VudCgpO1xuICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9za2lwUGVybWlzc2lvbnMgPSBhdHRycy5za2lwUGVybWlzc2lvbnMgPz8gZmFsc2U7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGksIHtcbiAgICAgICAgICBlbnZpcm9ubWVudEZyb21Bcm46IGZ1bmN0aW9uQXJuLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID1cbiAgICAgICAgICByb2xlIHx8IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgICB0aGlzLnJlc291cmNlID0gbmV3IGRhdGFBd3NMYW1iZGFGdW5jdGlvbi5EYXRhQXdzTGFtYmRhRnVuY3Rpb24oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIlJlc291cmNlXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIC8vIFRPRE86IHJlLWFkZCBzdXBwb3J0IGZvciBFQzIgY29ubmVjdGlvbnNcbiAgICAgICAgLy8gaWYgKGF0dHJzLnNlY3VyaXR5R3JvdXApIHtcbiAgICAgICAgLy8gICB0aGlzLl9jb25uZWN0aW9ucyA9IG5ldyBlYzIuQ29ubmVjdGlvbnMoe1xuICAgICAgICAvLyAgICAgc2VjdXJpdHlHcm91cHM6IFthdHRycy5zZWN1cml0eUdyb3VwXSxcbiAgICAgICAgLy8gICB9KTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVzb3VyY2U6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IEZ1bmN0aW9uT3V0cHV0cztcblxuICAvKiogU3Ryb25nbHkgVHlwZWQgRnVuY3Rpb24gT3V0cHV0cyAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uT3V0cHV0cygpOiBGdW5jdGlvbk91dHB1dHMge1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRzO1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAobm90IGEgVE9LRU4pXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gZm8gdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvbkFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLmFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIGZvIHRoZSBmdW5jdGlvbi5cbiAgICogKGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZCB2aWEgcHVibGlzaCA9IHRydWUpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uUXVhbGlmaWVkQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UucXVhbGlmaWVkQXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gZm8gdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvblF1YWxpZmllZEludm9rZUFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLnF1YWxpZmllZEludm9rZUFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgTGFtYmRhIEZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRoaXMgTGFtYmRhIEZ1bmN0aW9uIGlzIHJ1bm5pbmcgYXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gcm9sZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVW5kZWZpbmVkIGlmIHRoZSBmdW5jdGlvbiB3YXMgaW1wb3J0ZWQgd2l0aG91dCBhIHJvbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIERMUSAoYXMgcXVldWUpIGFzc29jaWF0ZWQgd2l0aCB0aGlzIExhbWJkYSBGdW5jdGlvbiAodGhpcyBpcyBhbiBvcHRpb25hbCBhdHRyaWJ1dGUpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IElRdWV1ZTtcblxuICAvKipcbiAgICogVGhlIHRpbWVvdXQgY29uZmlndXJlZCBmb3IgdGhpcyBsYW1iZGEuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uc3RydWN0IG5vZGUgd2hlcmUgcGVybWlzc2lvbnMgYXJlIGF0dGFjaGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBlcm1pc3Npb25zTm9kZSA9IHRoaXMubm9kZTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuQ3JlYXRlUGVybWlzc2lvbnMgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIG9mIGludm9jYXRpb24gcHJpbmNpcGFscyB0byBncmFudHMuIFVzZWQgdG8gZGUtZHVwZSBgZ3JhbnRJbnZva2UoKWAgY2FsbHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9pbnZvY2F0aW9uR3JhbnRzOiBSZWNvcmQ8c3RyaW5nLCBpYW0uR3JhbnQ+ID0ge307XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgb2YgZnVjbnRpb24gVVJMIGludm9jYXRpb24gcHJpbmNpcGFscyB0byBncmFudHMuIFVzZWQgdG8gZGUtZHVwZSBgZ3JhbnRJbnZva2VVcmwoKWAgY2FsbHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIF9mdW5jdGlvblVybEludm9jYXRpb25HcmFudHM6IFJlY29yZDxzdHJpbmcsIGlhbS5HcmFudD4gPSB7fTtcblxuICAvLyAvLyBUZXJhZm9ybSBwcm92aWRlciBmb3IgQVdTIEF1dG9tYXRpY2FsbHkgbWFuYWdlcyBGdW5jdGlvbiBWZXJzaW9uaW5nIHRocm91Z2ggY29kZSBoYXNoLi5cbiAgLy8gLy8gbmVlZCB0byBkcm9wIG1vc3Qgb2YgdGhpcyB2ZXJzaW9uIGxvZ2ljLi5cblxuICAvLyBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uT3B0aW9ucz86IFZlcnNpb25PcHRpb25zO1xuICAvLyBwcml2YXRlIF9jdXJyZW50VmVyc2lvbj86IFZlcnNpb247XG4gIC8vIC8qKlxuICAvLyAgKiBSZXR1cm5zIGEgYGxhbWJkYS5WZXJzaW9uYCB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhpc1xuICAvLyAgKiBMYW1iZGEgZnVuY3Rpb24uIEEgbmV3IHZlcnNpb24gd2lsbCBiZSBjcmVhdGVkIGV2ZXJ5IHRpbWUgdGhlIGZ1bmN0aW9uJ3NcbiAgLy8gICogY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuICAvLyAgKlxuICAvLyAgKiBZb3UgY2FuIHNwZWNpZnkgb3B0aW9ucyBmb3IgdGhpcyB2ZXJzaW9uIHVzaW5nIHRoZSBgY3VycmVudFZlcnNpb25PcHRpb25zYFxuICAvLyAgKiBwcm9wIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBgbGFtYmRhLkZ1bmN0aW9uYC5cbiAgLy8gICovXG4gIC8vIHB1YmxpYyBnZXQgY3VycmVudFZlcnNpb24oKTogVmVyc2lvbiB7XG4gIC8vICAgaWYgKHRoaXMuX2N1cnJlbnRWZXJzaW9uKSB7XG4gIC8vICAgICByZXR1cm4gdGhpcy5fY3VycmVudFZlcnNpb247XG4gIC8vICAgfVxuXG4gIC8vICAgLy8gaWYgKHRoaXMuX3dhcm5JZkN1cnJlbnRWZXJzaW9uQ2FsbGVkKSB7XG4gIC8vICAgLy8gICB0aGlzLndhcm5JbnZva2VGdW5jdGlvblBlcm1pc3Npb25zKHRoaXMpO1xuICAvLyAgIC8vIH1cblxuICAvLyAgIHRoaXMuX2N1cnJlbnRWZXJzaW9uID0gbmV3IFZlcnNpb24odGhpcywgXCJDdXJyZW50VmVyc2lvblwiLCB7XG4gIC8vICAgICBsYW1iZGE6IHRoaXMsXG4gIC8vICAgICAuLi50aGlzLmN1cnJlbnRWZXJzaW9uT3B0aW9ucyxcbiAgLy8gICB9KTtcblxuICAvLyAgIC8vIG92ZXJyaWRlIHRoZSB2ZXJzaW9uJ3MgbG9naWNhbCBJRCB3aXRoIGEgbGF6eSBzdHJpbmcgd2hpY2ggaW5jbHVkZXMgdGhlXG4gIC8vICAgLy8gaGFzaCBvZiB0aGUgZnVuY3Rpb24gaXRzZWxmLCBzbyBhIG5ldyB2ZXJzaW9uIHJlc291cmNlIGlzIGNyZWF0ZWQgd2hlblxuICAvLyAgIC8vIHRoZSBmdW5jdGlvbiBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4gIC8vICAgY29uc3QgY2ZuID0gdGhpcy5fY3VycmVudFZlcnNpb24ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgVGVycmFmb3JtUmVzb3VyY2U7XG4gIC8vICAgY29uc3Qgb3JpZ2luYWxMb2dpY2FsSWQgPSB0aGlzLnN0YWNrLnJlc29sdmUoY2ZuLmxvZ2ljYWxJZCkgYXMgc3RyaW5nO1xuXG4gIC8vICAgY2ZuLm92ZXJyaWRlTG9naWNhbElkKFxuICAvLyAgICAgTGF6eS5zdHJpbmdWYWx1ZSh7XG4gIC8vICAgICAgIHByb2R1Y2U6ICgpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBoYXNoID0gY2FsY3VsYXRlRnVuY3Rpb25IYXNoKHRoaXMsIHRoaXMuaGFzaE1peGlucy5qb2luKFwiXCIpKTtcbiAgLy8gICAgICAgICBjb25zdCBsb2dpY2FsSWQgPSB0cmltRnJvbVN0YXJ0KG9yaWdpbmFsTG9naWNhbElkLCAyNTUgLSAzMik7XG4gIC8vICAgICAgICAgcmV0dXJuIGAke2xvZ2ljYWxJZH0ke2hhc2h9YDtcbiAgLy8gICAgICAgfSxcbiAgLy8gICAgIH0pLFxuICAvLyAgICk7XG5cbiAgLy8gICByZXR1cm4gdGhpcy5fY3VycmVudFZlcnNpb247XG4gIC8vIH1cblxuICAvKipcbiAgICogVGhlIEFSTihzKSB0byBwdXQgaW50byB0aGUgcmVzb3VyY2UgZmllbGQgb2YgdGhlIGdlbmVyYXRlZCBJQU0gcG9saWN5IGZvciBncmFudEludm9rZSgpXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlQXJuc0ZvckdyYW50SW52b2tlKCkge1xuICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIGJlIHF1YWxpZmllZEFybiBvciBxdWFsaWZpZWRJbnZva2VBcm4/XG4gICAgLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL2xhbWJkYV9mdW5jdGlvbiNxdWFsaWZpZWRfYXJuXG4gICAgcmV0dXJuIFt0aGlzLmZ1bmN0aW9uQXJuLCB0aGlzLmZ1bmN0aW9uUXVhbGlmaWVkSW52b2tlQXJuXTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9sb2dHcm91cDogY2xvdWR3YXRjaExvZ0dyb3VwLkNsb3Vkd2F0Y2hMb2dHcm91cDtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGlzIGZ1bmN0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICBwcml2YXRlIF91cmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIVFRQIEVuZHBvaW50IGZvciB0aGlzIGZ1bmN0aW9uIGlmIGRlZmluZWQuXG4gICAqXG4gICAqIHVzZSBgYWRkRnVuY3Rpb25VcmxgIHRvIGVuYWJsZSBFbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHByaXZhdGUgX2V2ZW50U291cmNlczoge1xuICAgIFtpZDogc3RyaW5nXTogbGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nLkxhbWJkYUV2ZW50U291cmNlTWFwcGluZztcbiAgfSA9IHt9O1xuICBwdWJsaWMgZ2V0IGV2ZW50U291cmNlcygpOiBsYW1iZGFFdmVudFNvdXJjZU1hcHBpbmcuTGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2V2ZW50U291cmNlcyk7XG4gIH1cblxuICBwcml2YXRlIF9zZWN1cml0eUdyb3VwPzogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwO1xuICBwdWJsaWMgZ2V0IHNlY3VyaXR5R3JvdXAoKTogc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IEZ1bmN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgbmFtZSwgcHJvcHMpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBlbnZpcm9ubWVudDogdmFyaWFibGVzLFxuICAgICAgbG9nUmV0ZW50aW9uSW5EYXlzID0gUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIG1lbW9yeVNpemUgPSAxMjgsXG4gICAgICB0aW1lb3V0ID0gRHVyYXRpb24uc2Vjb25kcygzKSxcbiAgICAgIGxheWVycyxcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hbWUgb3IgQVJOIG9mIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAgICogaXMgbGltaXRlZCB0byA2NCBjaGFyYWN0ZXJzIGluIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEFSTiBQYXR0ZXJuOiAoW2EtekEtWjAtOS1fXSspKDooXFwkTEFURVNUfFthLXpBLVowLTktX10rKSk/XG4gICAgICovXG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID1cbiAgICAgIHByb3BzLmZ1bmN0aW9uTmFtZSA/P1xuICAgICAgdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWVQcmVmaXgodGhpcywge1xuICAgICAgICBwcmVmaXg6IHByb3BzLmZ1bmN0aW9uTmFtZVByZWZpeCA/PyB0aGlzLmdyaWRVVUlEICsgXCItXCIsXG4gICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCIrXCIsXG4gICAgICAgIG1heExlbmd0aDogNjQsXG4gICAgICB9KTtcblxuICAgIGlmIChmdW5jdGlvbk5hbWUgJiYgIVRva2VuLmlzVW5yZXNvbHZlZChmdW5jdGlvbk5hbWUpKSB7XG4gICAgICBpZiAoZnVuY3Rpb25OYW1lLmxlbmd0aCA+IDY0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRnVuY3Rpb24gbmFtZSBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMgYnV0IGhhcyAke2Z1bmN0aW9uTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICghL15bYS16QS1aMC05LV9dKyQvLnRlc3QoZnVuY3Rpb25OYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZ1bmN0aW9uIG5hbWUgJHtmdW5jdGlvbk5hbWV9IGNhbiBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgb3IgdW5kZXJzY29yZXMgd2l0aCBubyBzcGFjZXMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVzY3JpcHRpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChkZXNjcmlwdGlvbikpIHtcbiAgICAgIGlmIChkZXNjcmlwdGlvbi5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGdW5jdGlvbiBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGJ1dCBoYXMgJHtkZXNjcmlwdGlvbi5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYW5hZ2VkUG9saWNpZXMgPSBuZXcgQXJyYXk8aWFtLklNYW5hZ2VkUG9saWN5PigpO1xuICAgIC8vIHRoZSBhcm4gaXMgaW4gdGhlIGZvcm0gb2YgLSBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXG4gICAgbWFuYWdlZFBvbGljaWVzLnB1c2goXG4gICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCIsXG4gICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChwcm9wcy5uZXR3b3JrQ29uZmlnKSB7XG4gICAgICAvLyBQb2xpY3kgdGhhdCB3aWxsIGhhdmUgRU5JIGNyZWF0aW9uIHBlcm1pc3Npb25zXG4gICAgICAvLyBub3Qgc3VyZSBpZiB0aW1lLnNsZWVwIGlzIG5lY2Vzc2FyeT9cbiAgICAgIC8vIHJlZjpcbiAgICAgIC8vICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9wdWx1bWkvcHVsdW1pLWF3cy9pc3N1ZXMvMjI2MCNpc3N1ZWNvbW1lbnQtMTk3NzYwNjUwOVxuICAgICAgLy8gIC0gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy8yOTgyOCNpc3N1ZWNvbW1lbnQtMTY5MzMwNzUwMFxuICAgICAgbWFuYWdlZFBvbGljaWVzLnB1c2goXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQW55IGNvbmNlcm4gbm90IHNjb3BpbmcgdGhlIGxvZ0dyb3VwIElBTSBQZXJtaXNzaW9ucz9cbiAgICAvLyAuYWxsb3coKVxuICAgIC8vIC50b0NyZWF0ZUxvZ1N0cmVhbSgpXG4gICAgLy8gLnRvUHV0TG9nRXZlbnRzKClcbiAgICAvLyAub24obG9nR3JvdXAuYXJuLCBgJHtsb2dHcm91cC5hcm59OmxvZy1zdHJlYW06KmApLFxuXG4gICAgdGhpcy5yb2xlID1cbiAgICAgIHByb3BzLnJvbGUgfHxcbiAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLCBcIlNlcnZpY2VSb2xlXCIsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzLFxuICAgICAgfSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAvLyBUT0RPOiBSZS1hZGQgZmlsZXN5c3RlbSAvIGxvY2FsTW91bnRQYXRoIHN1cHBvcnRcbiAgICAvLyByZWY6IGZpbGVzeXN0ZW0uY29uZmlnLnBvbGljaWVzIHRvIGJlIGFkZGVkIHRvIHByaW5jaXBhbFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE2MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEvbGliL2Z1bmN0aW9uLnRzI0w5NDktTDk2NVxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgcHJvcHMuaW5pdGlhbFBvbGljeSB8fCBbXSkge1xuICAgICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIHN1cHBvcnQgZm9yIEFXU19DT0RFR1VSVSBQcm9maWxlIGVudiB2YXJpYWJsZXMuLi5cbiAgICBjb25zdCBlbnYgPSB2YXJpYWJsZXMgfHwge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52KSkge1xuICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBETFEgY2FuIGJlIGVpdGhlciBzbnMuSVRvcGljIG9yIHNxcy5JUXVldWVcbiAgICBjb25zdCBkbHFUb3BpY09yUXVldWUgPSB0aGlzLmJ1aWxkRGVhZExldHRlclF1ZXVlKHByb3BzKTtcbiAgICBpZiAoZGxxVG9waWNPclF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmlzUXVldWUoZGxxVG9waWNPclF1ZXVlKSkge1xuICAgICAgICB0aGlzLmRlYWRMZXR0ZXJRdWV1ZSA9IGRscVRvcGljT3JRdWV1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlYWRMZXR0ZXJUb3BpYyBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTtcbiAgICAgICAgLy8gdGhpcy5kZWFkTGV0dGVyVG9waWMgPSBkbHFUb3BpY09yUXVldWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgY2xvdWR3YXRjaExvZ0dyb3VwLkNsb3Vkd2F0Y2hMb2dHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBcIkxvZ0dyb3VwXCIsXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gLFxuICAgICAgICByZXRlbnRpb25JbkRheXM6IGxvZ1JldGVudGlvbkluRGF5cyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLl9sb2dHcm91cCA9IGxvZ0dyb3VwO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcm9sZTogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICBhcmNoaXRlY3R1cmVzOiBbXG4gICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXksIGJ1dCBtYXhpbXVtIGxlbmd0aCBpcyAxIVxuICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWwjY2ZuLWxhbWJkYS1mdW5jdGlvbi1hcmNoaXRlY3R1cmVzXG4gICAgICAgIHByb3BzLmFyY2hpdGVjdHVyZT8udG9TdHJpbmcoKSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0LnRvU3RyaW5nKCksXG4gICAgICBdLFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQ6IHRpbWVvdXQudG9TZWNvbmRzKCksXG4gICAgICBsYXllcnMsIC8vIFRPRE86IFN1cHBvcnQgSUxheWVyIHdpdGggTGF6eSBsaXN0IG9mIGFybnNcbiAgICAgIHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnMsXG4gICAgICAvLyBUT0RPOiBDREsgU29ydHMgZW52aXJvbm1lbnQgdG8gbWF0Y2ggTGFtYmRhIEhhc2ggYmVoYXZpb3VyXG4gICAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEvbGliL2Z1bmN0aW9uLnRzI0wxNDY3XG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICB2YXJpYWJsZXM6IExhenkuYW55VmFsdWUoe1xuICAgICAgICAgIHByb2R1Y2U6IChfY29udGV4dDogSVJlc29sdmVDb250ZXh0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSBhcyBhbnksXG4gICAgICB9LFxuICAgICAgdnBjQ29uZmlnOiB0aGlzLnBhcnNlVnBjQ29uZmlnKHByb3BzLm5ldHdvcmtDb25maWcpLFxuICAgICAgbG9nZ2luZ0NvbmZpZzogdGhpcy5nZXRMb2dnaW5nQ29uZmlnKHRoaXMuX2xvZ0dyb3VwLm5hbWUsIHByb3BzKSxcbiAgICAgIHRyYWNpbmdDb25maWc6IHRoaXMucGFyc2VUcmFjaW5nQ29uZmlnKHByb3BzLnRyYWNpbmcgPz8gVHJhY2luZy5BQ1RJVkUpLFxuICAgICAgZGVhZExldHRlckNvbmZpZzogdGhpcy5wYXJzZURlYWRMZXR0ZXJDb25maWcoZGxxVG9waWNPclF1ZXVlKSxcbiAgICAgIHB1Ymxpc2g6IHByb3BzLnB1Ymxpc2gsXG4gICAgICAvLyBUT0RPOiB1c2UgbG9nR3JvdXAubm9kZS5hZGREZXBlbmRlbmN5IHdoZW4gbG9nR3JvdXAgaXMgaW1wbGVtZW50ZWRcbiAgICAgIGRlcGVuZHNPbjogW2xvZ0dyb3VwXSxcbiAgICB9KTtcbiAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMucmVzb3VyY2UuZnVuY3Rpb25OYW1lO1xuXG4gICAgLy8gbWFrZSBzdXJlIGFueSByb2xlIGF0dGFjaG1lbnRzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgbGFtYmRhXG4gICAgLy8gdGhpcyBhY2hpZXZlZCBieSB0aGUgQ0RLVEYgQXNwZWN0IG9uIHRoZSBwYXJlbnQgU3RhY2tCYXNlXG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMudGltZW91dCA9IHByb3BzLnRpbWVvdXQ7XG4gICAgdGhpcy5hcmNoaXRlY3R1cmUgPSBwcm9wcy5hcmNoaXRlY3R1cmUgPz8gQXJjaGl0ZWN0dXJlLlg4Nl82NDtcblxuICAgIC8vIFRPRE86IEFkZCBhd3NfbGFtYmRhX3Byb3Zpc2lvbmVkX2NvbmN1cnJlbmN5X2NvbmZpZ1xuXG4gICAgZm9yIChjb25zdCBldmVudCBvZiBwcm9wcy5ldmVudHMgfHwgW10pIHtcbiAgICAgIHRoaXMuYWRkRXZlbnRTb3VyY2UoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEV2ZW50IEludm9rZSBDb25maWdcbiAgICBpZiAoXG4gICAgICBwcm9wcy5vbkZhaWx1cmUgfHxcbiAgICAgIHByb3BzLm9uU3VjY2VzcyB8fFxuICAgICAgcHJvcHMubWF4RXZlbnRBZ2UgfHxcbiAgICAgIHByb3BzLnJldHJ5QXR0ZW1wdHMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5jb25maWd1cmVBc3luY0ludm9rZSh7XG4gICAgICAgIG9uRmFpbHVyZTogcHJvcHMub25GYWlsdXJlLFxuICAgICAgICBvblN1Y2Nlc3M6IHByb3BzLm9uU3VjY2VzcyxcbiAgICAgICAgbWF4RXZlbnRBZ2U6IHByb3BzLm1heEV2ZW50QWdlLFxuICAgICAgICByZXRyeUF0dGVtcHRzOiBwcm9wcy5yZXRyeUF0dGVtcHRzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZnVuY3Rpb25OYW1lLFxuICAgICAgYXJuOiB0aGlzLnJlc291cmNlLmFybixcbiAgICAgIHJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgLy8gb25seSBrbm93biBhdCBzeW50aCB0aW1lXG4gICAgICAvLyBleHBsaWNpdCBgbnVsbGAgcmVxdWlyZWQgdG8gYXZvaWQgc3ludGF4IGVycm9ycyB3aGVuIHVzaW5nIHN0cmluZ1ZhbHVlICYmIFwidW5kZWZpbmVkXCJcbiAgICAgIHVybDogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuX3VybCA/PyBudWxsLFxuICAgICAgfSksXG4gICAgICBkZWZhdWx0U2VjdXJpdHlHcm91cDogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IHRoaXMuX3NlY3VyaXR5R3JvdXA/LmlkID8/IG51bGwsXG4gICAgICB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhpcyBMYW1iZGEgZnVuY3Rpb24uXG4gICAqIElmIHRoaXMgaXMgYSByZWYgdG8gYSBMYW1iZGEgZnVuY3Rpb24sIHRoaXMgb3BlcmF0aW9uIHJlc3VsdHMgaW4gYSBuby1vcC5cbiAgICogQHBhcmFtIGtleSBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUga2V5LlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlJ3MgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgYWRkRW52aXJvbm1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJRnVuY3Rpb24ge1xuICAgIC8vIFJlc2VydmVkIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGZhaWwgZHVyaW5nIGNsb3VkZm9ybWF0aW9uIGRlcGxveSBpZiB0aGV5J3JlIHNldC5cbiAgICAvLyBUaGlzIGNoZWNrIGlzIGp1c3QgdG8gYWxsb3cgQ0RLIHRvIGZhaWwgZmFzdGVyIHdoZW4gdGhlc2UgYXJlIHNwZWNpZmllZC5cbiAgICBjb25zdCByZXNlcnZlZEVudmlyb25tZW50VmFyaWFibGVzID0gW1xuICAgICAgXCJfSEFORExFUlwiLFxuICAgICAgXCJfWF9BTVpOX1RSQUNFX0lEXCIsXG4gICAgICBcIkFXU19ERUZBVUxUX1JFR0lPTlwiLFxuICAgICAgXCJBV1NfUkVHSU9OXCIsXG4gICAgICBcIkFXU19FWEVDVVRJT05fRU5WXCIsXG4gICAgICBcIkFXU19MQU1CREFfRlVOQ1RJT05fTkFNRVwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0ZVTkNUSU9OX01FTU9SWV9TSVpFXCIsXG4gICAgICBcIkFXU19MQU1CREFfRlVOQ1RJT05fVkVSU0lPTlwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0lOSVRJQUxJWkFUSU9OX1RZUEVcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9MT0dfR1JPVVBfTkFNRVwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0xPR19TVFJFQU1fTkFNRVwiLFxuICAgICAgXCJBV1NfQUNDRVNTX0tFWVwiLFxuICAgICAgXCJBV1NfQUNDRVNTX0tFWV9JRFwiLFxuICAgICAgXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVlcIixcbiAgICAgIFwiQVdTX1NFU1NJT05fVE9LRU5cIixcbiAgICAgIFwiQVdTX0xBTUJEQV9SVU5USU1FX0FQSVwiLFxuICAgICAgXCJMQU1CREFfVEFTS19ST09UXCIsXG4gICAgICBcIkxBTUJEQV9SVU5USU1FX0RJUlwiLFxuICAgIF07XG4gICAgaWYgKHJlc2VydmVkRW52aXJvbm1lbnRWYXJpYWJsZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtrZXl9IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlc2VydmVkIGJ5IHRoZSBsYW1iZGEgcnVudGltZSBhbmQgY2FuIG5vdCBiZSBzZXQgbWFudWFsbHkuIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLWVudnZhcnMuaHRtbGAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRGdW5jdGlvblVybChvcHRpb25zPzogRnVuY3Rpb25VcmxPcHRpb25zKTogRnVuY3Rpb25Vcmwge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gc3VwZXIuYWRkRnVuY3Rpb25Vcmwob3B0aW9ucyk7XG4gICAgdGhpcy5fdXJsID0gZW5kcG9pbnQudXJsO1xuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgTG9nZ2luZyBDb25maWcgcHJvcGV0eSBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmdW5jdGlvbiBMb2dnaW5nQ29uZmlnIFByb3BlcnR5IGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlXG4gICAqIGZ1bmN0aW9uIGFuZCB1bmRlZmluZWQgaWYgbm90LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMb2dnaW5nQ29uZmlnKFxuICAgIGxvZ0dyb3VwTmFtZTogc3RyaW5nLFxuICAgIHByb3BzOiBGdW5jdGlvblByb3BzLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkxvZ2dpbmdDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5hcHBsaWNhdGlvbkxvZ0xldmVsIHx8IHByb3BzLnN5c3RlbUxvZ0xldmVsKSB7XG4gICAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCAhPT0gTG9nZ2luZ0Zvcm1hdC5KU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVG8gdXNlIEFwcGxpY2F0aW9uTG9nTGV2ZWwgYW5kL29yIFN5c3RlbUxvZ0xldmVsIHlvdSBtdXN0IHNldCBMb2dnaW5nRm9ybWF0IHRvICcke0xvZ2dpbmdGb3JtYXQuSlNPTn0nLCBnb3QgJyR7cHJvcHMubG9nZ2luZ0Zvcm1hdH0nLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvZ2dpbmdDb25maWc6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uTG9nZ2luZ0NvbmZpZztcbiAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCkge1xuICAgICAgbG9nZ2luZ0NvbmZpZyA9IHtcbiAgICAgICAgbG9nRm9ybWF0OiBwcm9wcy5sb2dnaW5nRm9ybWF0LFxuICAgICAgICBzeXN0ZW1Mb2dMZXZlbDogcHJvcHMuc3lzdGVtTG9nTGV2ZWwsXG4gICAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWw6IHByb3BzLmFwcGxpY2F0aW9uTG9nTGV2ZWwsXG4gICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cE5hbWUsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxvZ2dpbmdDb25maWc7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhbGlhcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGFsaWFzIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuICAgKiB0aGUgZnVuY3Rpb24gYXMgaXQgaXMgYmVpbmcgdXBkYXRlZCBkdXJpbmcgYSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBkZWNsYXJlIGNvbnN0IGZuOiBjb21wdXRlLkxhbWJkYUZ1bmN0aW9uO1xuICAgKlxuICAgKiBmbi5hZGRBbGlhcygnTGl2ZScpO1xuICAgKlxuICAgKiAvLyBJcyBlcXVpdmFsZW50IHRvXG4gICAqXG4gICAqIG5ldyBjb21wdXRlLkFsaWFzKHRoaXMsICdBbGlhc0xpdmUnLCB7XG4gICAqICAgYWxpYXNOYW1lOiAnTGl2ZScsXG4gICAqICAgdmVyc2lvbjogZm4udmVyc2lvbixcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYWxpYXNOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBBbGlhcyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQWxpYXMoYWxpYXNOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBBbGlhc09wdGlvbnMpOiBBbGlhcyB7XG4gICAgcmV0dXJuIGFkZEFsaWFzKHRoaXMsIHRoaXMsIHRoaXMudmVyc2lvbiwgYWxpYXNOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGNyZWF0ZSBMYW1iZGFGdW5jdGlvblZwY0NvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZwY0NvbmZpZyhcbiAgICBjb25maWc/OiBWcGNDb25maWcsXG4gICk6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uVnBjQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHNlY3VyaXR5R3JvdXBJZHMgPSBjb25maWcuc2VjdXJpdHlHcm91cElkcztcbiAgICBpZiAoIXNlY3VyaXR5R3JvdXBJZHMpIHtcbiAgICAgIHRoaXMuX3NlY3VyaXR5R3JvdXAgPSBuZXcgc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICB2cGNJZDogY29uZmlnLnZwY0lkLFxuXG4gICAgICAgICAgZWdyZXNzOiBjb25maWcuZWdyZXNzID8/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZnJvbVBvcnQ6IDAsXG4gICAgICAgICAgICAgIHRvUG9ydDogMCxcbiAgICAgICAgICAgICAgcHJvdG9jb2w6IFwiLTFcIixcbiAgICAgICAgICAgICAgY2lkckJsb2NrczogW1wiMC4wLjAuMC8wXCJdLFxuICAgICAgICAgICAgICBpcHY2Q2lkckJsb2NrczogW1wiOjovMFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBzZWN1cml0eUdyb3VwSWRzID0gW3RoaXMuX3NlY3VyaXR5R3JvdXAuaWRdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWRzOiBjb25maWcuc3VibmV0SWRzLFxuICAgICAgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s6IGNvbmZpZy5pcHY2QWxsb3dlZEZvckR1YWxTdGFjayxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXNRdWV1ZShkZWFkTGV0dGVyUXVldWU6IElRdWV1ZSk6IGRlYWRMZXR0ZXJRdWV1ZSBpcyBJUXVldWUge1xuICAgIHJldHVybiAoPElRdWV1ZT5kZWFkTGV0dGVyUXVldWUpLnF1ZXVlQXJuICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVhZExldHRlclF1ZXVlKHByb3BzOiBGdW5jdGlvblByb3BzKTogSVF1ZXVlIHwgdW5kZWZpbmVkIHtcbiAgICAvLyB8IHNucy5JVG9waWNcbiAgICBpZiAoXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlICYmXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlRW5hYmxlZFxuICAgICAgLy8gJiYgIXByb3BzLmRlYWRMZXR0ZXJUb3BpY1xuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSAmJiBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiZGVhZExldHRlclF1ZXVlIGRlZmluZWQgYnV0IGRlYWRMZXR0ZXJRdWV1ZUVuYWJsZWQgZXhwbGljaXRseSBzZXQgdG8gZmFsc2VcIixcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGlmIChcbiAgICAvLyAgIHByb3BzLmRlYWRMZXR0ZXJUb3BpYyAmJlxuICAgIC8vICAgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fCBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkICE9PSB1bmRlZmluZWQpXG4gICAgLy8gKSB7XG4gICAgLy8gICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgLy8gICAgIFwiZGVhZExldHRlclF1ZXVlIGFuZCBkZWFkTGV0dGVyVG9waWMgY2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciBhdCB0aGUgc2FtZSB0aW1lXCIsXG4gICAgLy8gICApO1xuICAgIC8vIH1cblxuICAgIGxldCBkZWFkTGV0dGVyUXVldWU6IElRdWV1ZTsgLy8gfCBJVG9waWM7XG4gICAgLy8gaWYgKHByb3BzLmRlYWRMZXR0ZXJUb3BpYykge1xuICAgIC8vICAgZGVhZExldHRlclF1ZXVlID0gcHJvcHMuZGVhZExldHRlclRvcGljO1xuICAgIC8vICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgLy8gICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAvLyAgICAgICBhY3Rpb25zOiBbXCJzbnM6UHVibGlzaFwiXSxcbiAgICAvLyAgICAgICByZXNvdXJjZXM6IFtkZWFkTGV0dGVyUXVldWUudG9waWNBcm5dLFxuICAgIC8vICAgICB9KSxcbiAgICAvLyAgICk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICBkZWFkTGV0dGVyUXVldWUgPVxuICAgICAgcHJvcHMuZGVhZExldHRlclF1ZXVlIHx8XG4gICAgICBuZXcgUXVldWUodGhpcywgXCJEZWFkTGV0dGVyUXVldWVcIiwge1xuICAgICAgICBtZXNzYWdlUmV0ZW50aW9uU2Vjb25kczogRHVyYXRpb24uZGF5cygxNCkudG9TZWNvbmRzKCksXG4gICAgICB9KTtcbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wic3FzOlNlbmRNZXNzYWdlXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtkZWFkTGV0dGVyUXVldWUucXVldWVBcm5dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICAvLyB9XG5cbiAgICByZXR1cm4gZGVhZExldHRlclF1ZXVlO1xuICB9XG5cbiAgLy8gVE9ETzogU3VwcG9ydCBzbnMuSVRvcGljICsgc25zOlB1Ymxpc2ggdG9waWNBcm5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgY3JlYXRlIExhbWJkYUZ1bmN0aW9uRGVhZExldHRlckNvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZURlYWRMZXR0ZXJDb25maWcoXG4gICAgZGVhZExldHRlclF1ZXVlPzogSVF1ZXVlLCAvLyB8IHNucy5JVG9waWNcbiAgKTogbGFtYmRhRnVuY3Rpb24uTGFtYmRhRnVuY3Rpb25EZWFkTGV0dGVyQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZGVhZExldHRlclF1ZXVlKSB7XG4gICAgICAvLyB0aGlzLmlzUXVldWUoZGVhZExldHRlclF1ZXVlKSA/IGRlYWRMZXR0ZXJRdWV1ZS5xdWV1ZUFybiA6IC4uLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGFyZ2V0QXJuOiBkZWFkTGV0dGVyUXVldWUucXVldWVBcm4sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUcmFjaW5nQ29uZmlnKFxuICAgIHRyYWNpbmc6IFRyYWNpbmcsXG4gICk6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uVHJhY2luZ0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRyYWNpbmcgPT09IHVuZGVmaW5lZCB8fCB0cmFjaW5nID09PSBUcmFjaW5nLkRJU0FCTEVEKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJ4cmF5OlB1dFRyYWNlU2VnbWVudHNcIiwgXCJ4cmF5OlB1dFRlbGVtZXRyeVJlY29yZHNcIl0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogdHJhY2luZyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYW4gb3BhcXVlICh0b2tlbikgQVJOLCByZXR1cm5zIGEgVEYgZXhwcmVzc2lvbiB0aGF0IGV4dHJhY3RzIHRoZSBmdW5jdGlvblxuICogbmFtZSBmcm9tIHRoZSBBUk4uXG4gKlxuICogRnVuY3Rpb24gQVJOcyBsb29rIGxpa2UgdGhpczpcbiAqXG4gKiAgIGFybjphd3M6bGFtYmRhOnJlZ2lvbjphY2NvdW50LWlkOmZ1bmN0aW9uOmZ1bmN0aW9uLW5hbWVcbiAqXG4gKiAuLndoaWNoIG1lYW5zIHRoYXQgaW4gb3JkZXIgdG8gZXh0cmFjdCB0aGUgYGZ1bmN0aW9uLW5hbWVgIGNvbXBvbmVudCBmcm9tIHRoZSBBUk4sIHdlIGNhblxuICogc3BsaXQgdGhlIEFSTiB1c2luZyBcIjpcIiBhbmQgc2VsZWN0IHRoZSBjb21wb25lbnQgaW4gaW5kZXggNi5cbiAqXG4gKiBAcmV0dXJucyBgZWxlbWVudChzcGxpdCgnOicsIGFybiksIDYpYFxuICovXG5mdW5jdGlvbiBleHRyYWN0TmFtZUZyb21Bcm4oYXJuOiBzdHJpbmcpIHtcbiAgcmV0dXJuIEZuLmVsZW1lbnQoRm4uc3BsaXQoXCI6XCIsIGFybiksIDYpO1xufVxuXG4vKipcbiAqIFgtUmF5IFRyYWNpbmcgTW9kZXMgKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL0FQSV9UcmFjaW5nQ29uZmlnLmh0bWwpXG4gKi9cbmV4cG9ydCBlbnVtIFRyYWNpbmcge1xuICAvKipcbiAgICogTGFtYmRhIHdpbGwgcmVzcGVjdCBhbnkgdHJhY2luZyBoZWFkZXIgaXQgcmVjZWl2ZXMgZnJvbSBhbiB1cHN0cmVhbSBzZXJ2aWNlLlxuICAgKiBJZiBubyB0cmFjaW5nIGhlYWRlciBpcyByZWNlaXZlZCwgTGFtYmRhIHdpbGwgc2FtcGxlIHRoZSByZXF1ZXN0IGJhc2VkIG9uIGEgZml4ZWQgcmF0ZS4gUGxlYXNlIHNlZSB0aGUgW1VzaW5nIEFXUyBMYW1iZGEgd2l0aCBBV1MgWC1SYXldKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL3NlcnZpY2VzLXhyYXkuaHRtbCkgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvbiB0aGlzIHNhbXBsaW5nIGJlaGF2aW9yLlxuICAgKi9cbiAgQUNUSVZFID0gXCJBY3RpdmVcIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIG9ubHkgdHJhY2UgdGhlIHJlcXVlc3QgZnJvbSBhbiB1cHN0cmVhbSBzZXJ2aWNlXG4gICAqIGlmIGl0IGNvbnRhaW5zIGEgdHJhY2luZyBoZWFkZXIgd2l0aCBcInNhbXBsZWQ9MVwiXG4gICAqL1xuICBQQVNTX1RIUk9VR0ggPSBcIlBhc3NUaHJvdWdoXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBub3QgdHJhY2UgYW55IHJlcXVlc3QuXG4gICAqL1xuICBESVNBQkxFRCA9IFwiRGlzYWJsZWRcIixcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VydmljZSB3aWxsIGF1dG9tYXRpY2FsbHkgY2FwdHVyZXMgc3lzdGVtIGxvZ3MgYWJvdXQgZnVuY3Rpb24gaW52b2NhdGlvblxuICogZ2VuZXJhdGVkIGJ5IHRoZSBMYW1iZGEgc2VydmljZSAoa25vd24gYXMgc3lzdGVtIGxvZ3MpIGFuZCBzZW5kcyB0aGVzZSBsb2dzIHRvIGFcbiAqIGRlZmF1bHQgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgbmFtZWQgYWZ0ZXIgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGVudW0gU3lzdGVtTG9nTGV2ZWwge1xuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgaW5mbyBsZXZlbC5cbiAgICovXG4gIElORk8gPSBcIklORk9cIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGRlYnVnIGxldmVsLlxuICAgKi9cbiAgREVCVUcgPSBcIkRFQlVHXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCB3YXJuIGxldmVsLlxuICAgKi9cbiAgV0FSTiA9IFwiV0FSTlwiLFxufVxuXG4vKipcbiAqIExhbWJkYSBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgY2FwdHVyZXMgbG9ncyBnZW5lcmF0ZWQgYnkgdGhlIGZ1bmN0aW9uIGNvZGVcbiAqIChrbm93biBhcyBhcHBsaWNhdGlvbiBsb2dzKSBhbmQgc2VuZHMgdGhlc2UgbG9ncyB0byBhIGRlZmF1bHQgQ2xvdWRXYXRjaFxuICogbG9nIGdyb3VwIG5hbWVkIGFmdGVyIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIEFwcGxpY2F0aW9uTG9nTGV2ZWwge1xuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgaW5mbyBsZXZlbC5cbiAgICovXG4gIElORk8gPSBcIklORk9cIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGRlYnVnIGxldmVsLlxuICAgKi9cbiAgREVCVUcgPSBcIkRFQlVHXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCB3YXJuIGxldmVsLlxuICAgKi9cbiAgV0FSTiA9IFwiV0FSTlwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgdHJhY2UgbGV2ZWwuXG4gICAqL1xuICBUUkFDRSA9IFwiVFJBQ0VcIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGVycm9yIGxldmVsLlxuICAgKi9cbiAgRVJST1IgPSBcIkVSUk9SXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBmYXRhbCBsZXZlbC5cbiAgICovXG4gIEZBVEFMID0gXCJGQVRBTFwiLFxufVxuXG4vKipcbiAqIFRoaXMgZmllbGQgdGFrZXMgaW4gMiB2YWx1ZXMgZWl0aGVyIFRleHQgb3IgSlNPTi4gQnkgc2V0dGluZyB0aGlzIHZhbHVlIHRvIFRleHQsXG4gKiB3aWxsIHJlc3VsdCBpbiB0aGUgY3VycmVudCBzdHJ1Y3R1cmUgb2YgbG9ncyBmb3JtYXQsIHdoZXJlYXMsIGJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBKU09OLFxuICogTGFtYmRhIHdpbGwgcHJpbnQgdGhlIGxvZ3MgYXMgU3RydWN0dXJlZCBKU09OIExvZ3MsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgdGltZXN0YW1wIGFuZCBsb2cgbGV2ZWxcbiAqIG9mIGVhY2ggZXZlbnQuIFNlbGVjdGluZyDigJhKU09O4oCZIGZvcm1hdCB3aWxsIG9ubHkgYWxsb3cgY3VzdG9tZXLigJlzIHRvIGhhdmUgZGlmZmVyZW50IGxvZyBsZXZlbFxuICogQXBwbGljYXRpb24gbG9nIGxldmVsIGFuZCB0aGUgU3lzdGVtIGxvZyBsZXZlbC5cbiAqL1xuZXhwb3J0IGVudW0gTG9nZ2luZ0Zvcm1hdCB7XG4gIC8qKlxuICAgKiBMYW1iZGEgTG9ncyB0ZXh0IGZvcm1hdC5cbiAgICovXG4gIFRFWFQgPSBcIlRleHRcIixcbiAgLyoqXG4gICAqIExhbWJkYSBzdHJ1Y3R1cmVkIGxvZ2dpbmcgaW4gSnNvbiBmb3JtYXQuXG4gICAqL1xuICBKU09OID0gXCJKU09OXCIsXG59XG5cbi8qKlxuICogQSBkZXN0aW5hdGlvbiBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGxxRGVzdGluYXRpb25Db25maWcge1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBkZXN0aW5hdGlvbiByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIERMUSBmb3IgYW4gZXZlbnQgc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUV2ZW50U291cmNlRGxxIHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIERMUSBkZXN0aW5hdGlvbiBjb25maWcgb2YgdGhlIERMUVxuICAgKi9cbiAgYmluZChcbiAgICB0YXJnZXQ6IElFdmVudFNvdXJjZU1hcHBpbmcsXG4gICAgdGFyZ2V0SGFuZGxlcjogSUZ1bmN0aW9uLFxuICApOiBEbHFEZXN0aW5hdGlvbkNvbmZpZztcbn1cbiJdfQ==
|
|
692
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2SkFBNko7QUFDN0osMkhBQTJIO0FBQzNILHNEQU02QjtBQUM3QixpQ0FBc0U7QUFFdEUsMEJBQXdEO0FBQ3hELGlEQUE4QztBQUk5QyxtREFLeUI7QUFHekIsaUNBQWtDO0FBQ2xDLDZDQUEwQztBQUMxQyw4QkFBOEI7QUFDOUIsc0NBQTBDO0FBK08xQywyQkFBMkI7QUFFM0IsTUFBTTtBQUNOLHdCQUF3QjtBQUN4QixNQUFNO0FBQ04scUVBQXFFO0FBRXJFLFFBQVE7QUFDUixxREFBcUQ7QUFDckQsUUFBUTtBQUNSLDJEQUEyRDtBQUMzRCxJQUFJO0FBRUo7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsa0NBQWtCO0lBQ3BELDZEQUE2RDtJQUU3RDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQiwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3RELFdBQVcsRUFBRSxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDcEQsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsU0FBUyxFQUFFLGFBQVMsQ0FBQyxtQkFBbUI7YUFDekMsQ0FBQztZQUNGLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1B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QWUsQ0FBQTtBQUNqQixDQUFDLEVBekJXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBeUI5QjtBQUVEOzs7Ozs7R0FNRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILDhCQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILDhCQUFhLENBQUE7QUFDZixDQUFDLEVBVFcsYUFBYSw2QkFBYixhQUFhLFFBU3hCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vY2RrdGYtcGx1cy9jZGt0Zi1wbHVzL2Jsb2IvNTg2YWFiYWQzYWIyZmIyYTJlOTNlMDVlZDMzZjk0NDc0ZWJlOTM5Ny9wYWNrYWdlcy8lNDBjZGt0Zi1wbHVzL2F3cy9saWIvYXdzLWxhbWJkYS1mdW5jdGlvbi9pbmRleC50c1xuLy8gdXBkYXRlIHRvIGFsaWduIGNsb3NlciB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEvbGliL2Z1bmN0aW9uLnRzXG5pbXBvcnQge1xuICBsYW1iZGFGdW5jdGlvbixcbiAgY2xvdWR3YXRjaExvZ0dyb3VwLFxuICBzZWN1cml0eUdyb3VwLFxuICBsYW1iZGFFdmVudFNvdXJjZU1hcHBpbmcsXG4gIGRhdGFBd3NMYW1iZGFGdW5jdGlvbixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IElSZXNvbHZlQ29udGV4dCwgTGF6eSwgSVJlc29sdmFibGUsIFRva2VuLCBGbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFJldGVudGlvbkRheXMsIEF3c1N0YWNrLCBBcm5Gb3JtYXQgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSB9IGZyb20gXCIuL2FyY2hpdGVjdHVyZVwiO1xuaW1wb3J0IHsgRXZlbnRJbnZva2VDb25maWdPcHRpb25zIH0gZnJvbSBcIi4vZXZlbnQtaW52b2tlLWNvbmZpZ1wiO1xuaW1wb3J0IHsgSUV2ZW50U291cmNlTWFwcGluZyB9IGZyb20gXCIuL2V2ZW50LXNvdXJjZS1tYXBwaW5nXCI7XG5pbXBvcnQgeyBBbGlhc09wdGlvbnMsIEFsaWFzIH0gZnJvbSBcIi4vZnVuY3Rpb24tYWxpYXNcIjtcbmltcG9ydCB7XG4gIExhbWJkYUZ1bmN0aW9uQmFzZSxcbiAgSUZ1bmN0aW9uLFxuICBGdW5jdGlvbkF0dHJpYnV0ZXMsXG4gIElFdmVudFNvdXJjZSxcbn0gZnJvbSBcIi4vZnVuY3Rpb24tYmFzZVwiO1xuaW1wb3J0IHsgRnVuY3Rpb25VcmwsIEZ1bmN0aW9uVXJsT3B0aW9ucyB9IGZyb20gXCIuL2Z1bmN0aW9uLXVybFwiO1xuaW1wb3J0IHsgVnBjQ29uZmlnIH0gZnJvbSBcIi4vZnVuY3Rpb24tdnBjLWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGFkZEFsaWFzIH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBJUXVldWUsIFF1ZXVlIH0gZnJvbSBcIi4uL25vdGlmeVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIExhbWJkYSBhcm4gb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBSb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmcgfCBJUmVzb2x2YWJsZTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgb2YgdGhlIGZ1bmN0aW9uIGlmIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTZWN1cml0eUdyb3VwPzogc3RyaW5nIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25Qcm9wcyBleHRlbmRzIEV2ZW50SW52b2tlQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGb3JjZSBmdW5jdGlvbiBuYW1lIChmb3IgYWRvcHRpb24gb2YgZXhpc3RpbmcgcmVzb3VyY2VzKS5cbiAgICpcbiAgICogUHJlZmVyIHRvIHVzZSBmdW5jdGlvbk5hbWVQcmVmaXguXG4gICAqXG4gICAqIFVzZSBbVGVycmFmb3JtIFJlc291cmNlIE1ldGEgQXJndW1lbnRzXShodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9yZXNvdXJjZXMvc3ludGF4I21ldGEtYXJndW1lbnRzKVxuICAgKiB0byBjb250cm9sIGxpZmVjeWNsZSB3aGVuIHJlcGxhY2luZyB0aGUgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgb21pdHRlZCwgUmVmZXIgdG8gYGZ1bmN0aW9uTmFtZVByZWZpeGAuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbmFtZSBwcmVmaXggZm9yIHRoZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBHcmlkIGdlbmVyYXRlcyBhIHVuaXF1ZSBwaHlzaWNhbCBJRCBhbmQgdXNlcyB0aGF0XG4gICAqIElEIGZvciB0aGUgZnVuY3Rpb24ncyBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25OYW1lUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGJlIHBhc3NlZCB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBLZXktdmFsdWUgcGFpcnMgdGhhdCBMYW1iZGEgY2FjaGVzIGFuZCBtYWtlcyBhdmFpbGFibGUgZm9yIHlvdXIgTGFtYmRhXG4gICAqIGZ1bmN0aW9ucy4gVXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBhcHBseSBjb25maWd1cmF0aW9uIGNoYW5nZXMsIHN1Y2hcbiAgICogYXMgdGVzdCBhbmQgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucywgd2l0aG91dCBjaGFuZ2luZyB5b3VyXG4gICAqIExhbWJkYSBmdW5jdGlvbiBzb3VyY2UgY29kZS5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogRGVzY3JpcHRpb24gb2Ygd2hhdCB5b3VyIExhbWJkYSBGdW5jdGlvbiBkb2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gYXJjaGl0ZWN0dXJlcyBjb21wYXRpYmxlIHdpdGggdGhpcyBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IEFyY2hpdGVjdHVyZS5YODZfNjRcbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdGVjdHVyZT86IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogVGhlIHRyYWNpbmcgbW9kZSBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiBpYW0gcm9sZSB3aWxsIHJlY2VpdmUgcGVybWlzc2lvbiB0b1xuICAgKiB3cml0ZSB0byBBV1MgWC1SYXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRyYWNpbmcuQUNUSVZFXG4gICAqL1xuICByZWFkb25seSB0cmFjaW5nPzogVHJhY2luZztcblxuICAvKipcbiAgICogVGhlIGxvZyByZXRlbnRpb24gcGVyaW9kIGluIGRheXMuIERlZmF1bHRzIHRvIDcuXG4gICAqL1xuICByZWFkb25seSBsb2dSZXRlbnRpb25JbkRheXM/OiBSZXRlbnRpb25EYXlzO1xuXG4gIC8qKlxuICAgKiBUaGUgbWVtb3J5IGxpbWl0IGluIE1CLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMjguXG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gZXhlY3V0aW9uIHRpbWUgKGluIHNlY29uZHMpIGFmdGVyIHdoaWNoIExhbWJkYSB0ZXJtaW5hdGVzXG4gICAqIHRoZSBmdW5jdGlvbi4gQmVjYXVzZSB0aGUgZXhlY3V0aW9uIHRpbWUgYWZmZWN0cyBjb3N0LCBzZXQgdGhpcyB2YWx1ZVxuICAgKiBiYXNlZCBvbiB0aGUgZnVuY3Rpb24ncyBleHBlY3RlZCBleGVjdXRpb24gdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzKVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBMYXllcnMgZm9yIHRoZSBMYW1iZGEuXG4gICAqL1xuICByZWFkb25seSBsYXllcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5pdGlhbCBwb2xpY3kgc3RhdGVtZW50cyB0byBhZGQgdG8gdGhlIGNyZWF0ZWQgTGFtYmRhIFJvbGUuXG4gICAqXG4gICAqIFlvdSBjYW4gY2FsbCBgYWRkVG9Sb2xlUG9saWN5YCB0byB0aGUgY3JlYXRlZCBsYW1iZGEgdG8gYWRkIHN0YXRlbWVudHMgcG9zdCBjcmVhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwb2xpY3kgc3RhdGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGNyZWF0ZWQgTGFtYmRhIHJvbGUuXG4gICAqL1xuICByZWFkb25seSBpbml0aWFsUG9saWN5PzogaWFtLlBvbGljeVN0YXRlbWVudFtdO1xuXG4gIC8qKlxuICAgKiBMYW1iZGEgZXhlY3V0aW9uIHJvbGUuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIHJvbGUgdGhhdCB3aWxsIGJlIGFzc3VtZWQgYnkgdGhlIGZ1bmN0aW9uIHVwb24gZXhlY3V0aW9uLlxuICAgKiBJdCBjb250cm9scyB0aGUgcGVybWlzc2lvbnMgdGhhdCB0aGUgZnVuY3Rpb24gd2lsbCBoYXZlLiBUaGUgUm9sZSBtdXN0XG4gICAqIGJlIGFzc3VtYWJsZSBieSB0aGUgJ2xhbWJkYS5hbWF6b25hd3MuY29tJyBzZXJ2aWNlIHByaW5jaXBhbC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgUm9sZSBhdXRvbWF0aWNhbGx5IGhhcyBwZXJtaXNzaW9ucyBncmFudGVkIGZvciBMYW1iZGEgZXhlY3V0aW9uLiBJZiB5b3VcbiAgICogcHJvdmlkZSBhIFJvbGUsIHlvdSBtdXN0IGFkZCB0aGUgcmVsZXZhbnQgQVdTIG1hbmFnZWQgcG9saWNpZXMgeW91cnNlbGYuXG4gICAqXG4gICAqIFRoZSByZWxldmFudCBtYW5hZ2VkIHBvbGljaWVzIGFyZSBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIiBhbmRcbiAgICogXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEEgdW5pcXVlIHJvbGUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoaXMgbGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBCb3RoIHN1cHBsaWVkIGFuZCBnZW5lcmF0ZWQgcm9sZXMgY2FuIGFsd2F5cyBiZSBjaGFuZ2VkIGJ5IGNhbGxpbmcgYGFkZFRvUm9sZVBvbGljeWAuXG4gICAqL1xuICByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBDb25maWcgZm9yIG5ldHdvcmsgY29ubmVjdGl2aXR5IHRvIEFXUyByZXNvdXJjZXMgaW4gYSBWUEMsIHNwZWNpZnkgYSBsaXN0XG4gICAqIG9mIHN1Ym5ldCwgYW5kIG9wdGlvbmFsbHkgc2VjdXJpdHkgZ3JvdXBzLCBpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIG1hbmFnZSBFTklzIHdpdGhpbiB0aGUgcHJvdmlkZWQgbmV0d29yay5cbiAgICpcbiAgICogV2hlbiB5b3UgY29ubmVjdCBhIGZ1bmN0aW9uIHRvIGEgVlBDLCBpdCBjYW4gb25seSBhY2Nlc3MgcmVzb3VyY2VzIGFuZCB0aGUgaW50ZXJuZXQgdGhyb3VnaCB0aGF0IFZQQy5cbiAgICpcbiAgICogU2VlIFtWUEMgU2V0dGluZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2NvbmZpZ3VyYXRpb24tdnBjLmh0bWwpLlxuICAgKi9cbiAgcmVhZG9ubHkgbmV0d29ya0NvbmZpZz86IFZwY0NvbmZpZztcblxuICAvKipcbiAgICogVGhlIFNRUyBETFEuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gaWFtIHJvbGUgd2lsbCByZWNlaXZlIHBlcm1pc3Npb24gdG9cbiAgICogc2VuZCBtZXNzYWdlcyBvbiB0aGlzIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlYWRsZXR0ZXIgcXVldWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IElRdWV1ZTtcblxuICAvKipcbiAgICogRW5hYmxlZCBETFEuIElmIGBkZWFkTGV0dGVyUXVldWVgIGlzIHVuZGVmaW5lZCxcbiAgICogYW4gU1FTIHF1ZXVlIHdpdGggZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgZGVmaW5lZCBmb3IgeW91ciBGdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSB1bmxlc3MgYGRlYWRMZXR0ZXJRdWV1ZWAgaXMgc2V0LCB3aGljaCBpbXBsaWVzIERMUSBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogcmUtYWRkIFNOUyBkZWFkTGV0dGVyVG9waWNcblxuICAvKipcbiAgICogRXZlbnQgc291cmNlcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIGFkZCBldmVudCBzb3VyY2VzIHVzaW5nIGBhZGRFdmVudFNvdXJjZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXZlbnQgc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50cz86IElFdmVudFNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcmVzZXJ2ZWRfY29uY3VycmVudF9leGVjdXRpb25zIExhbWJkYUZ1bmN0aW9uI3Jlc2VydmVkX2NvbmN1cnJlbnRfZXhlY3V0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gYXBwbHkgdG8gdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgaW5mb3JtcyB0aGUgQ0RLIHRoYXQgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIEFMUkVBRFkgSEFTIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICogZm9yIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gZG8uIFdoZW4gbm90IGNvbmZpZ3VyZWQsIHRoZSBDREsgYXR0ZW1wdHMgdG8gYXV0by1kZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcmUgbmVjZXNzYXJ5IG9uIHRoZSBmdW5jdGlvbiB3aGVuIGdyYW50IEFQSXMgYXJlIHVzZWQuIElmIHRoZSBDREsgdHJpZWQgdG8gYWRkXG4gICAqIHBlcm1pc3Npb25zIG9uIGFuIGltcG9ydGVkIGxhbWJkYSwgaXQgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSAqT05MWSBJRiogeW91IGFyZSBjb21taXR0aW5nIHRvIG1hbmFnZSB0aGUgaW1wb3J0ZWQgZnVuY3Rpb24ncyBwZXJtaXNzaW9ucyBvdXRzaWRlIG9mXG4gICAqIENESy4gWW91IGFyZSBhY2tub3dsZWRnaW5nIHRoYXQgeW91ciBDREsgY29kZSBhbG9uZSB3aWxsIGhhdmUgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGVcbiAgICogaW1wb3J0ZWQgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwUGVybWlzc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsb2dnaW5nRm9ybWF0IGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IExvZ2dpbmdGb3JtYXQuVEVYVFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ0Zvcm1hdD86IExvZ2dpbmdGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFwcGxpY2F0aW9uIGxvZyBsZXZlbCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBAZGVmYXVsdCBBcHBsaWNhdGlvbkxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IGFwcGxpY2F0aW9uTG9nTGV2ZWw/OiBBcHBsaWNhdGlvbkxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzeXN0ZW0gbG9nIGxldmVsIGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IFN5c3RlbUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbUxvZ0xldmVsPzogU3lzdGVtTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHB1Ymxpc2ggY3JlYXRpb24vY2hhbmdlIGFzIG5ldyBMYW1iZGEgRnVuY3Rpb24gVmVyc2lvbi5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvbGFtYmRhX2Z1bmN0aW9uI3B1Ymxpc2ggTGFtYmRhRnVuY3Rpb24jcHVibGlzaH1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2g/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG5cbiAgLy8gLy8gVGhpcyB3aWxsIGJlIGRlZmluZWQgYnkgZXh0ZW5kaW5nIGNsYXNzZXNcbiAgLy8gLy8gcmVmOiBodHRwczovL2F3cy5naXRodWIuaW8vanNpaS91c2VyLWd1aWRlcy9saWItYXV0aG9yL3R5cGVzY3JpcHQtcmVzdHJpY3Rpb25zLyNjb3ZhcmlhbnQtb3ZlcnJpZGVzLXBhcmFtZXRlci1saXN0LWNoYW5nZXNcbiAgLy8gLy8gaW1wbGVtZW50IFJ1bnRpbWUgYXMgYSBjbGFzcz9cbiAgLy8gLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS9saWIvcnVudGltZS50c1xuICAvLyAvKipcbiAgLy8gICogSWRlbnRpZmllciBvZiB0aGUgZnVuY3Rpb24ncyBydW50aW1lLlxuICAvLyAgKlxuICAvLyAgKiBEb2NzOlxuICAvLyAgKiAtIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzL2xhdGVzdC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcnVudGltZSBMYW1iZGFGdW5jdGlvbiNydW50aW1lfVxuICAvLyAgKiAtIEFXUyBMYW1iZGEgQ3JlYXRGdW5jdGlvbiBkb2NzOiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvYXBpL0FQSV9DcmVhdGVGdW5jdGlvbi5odG1sI2xhbWJkYS1DcmVhdGVGdW5jdGlvbi1yZXF1ZXN0LVJ1bnRpbWUgQ3JlYXRlRnVuY3Rpb24jcm50aW1lfVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgcnVudGltZT86IHN0cmluZztcbn1cblxuLy8gcmUtYWRkIGVjMi5JQ29ubmVjdGFibGU/XG5cbi8vIC8qKlxuLy8gICogQSBMYW1iZGEgZnVuY3Rpb24uXG4vLyAgKi9cbi8vIGV4cG9ydCBpbnRlcmZhY2UgSUZ1bmN0aW9uIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCwgaWFtLklHcmFudGFibGUge1xuXG4vLyAgIC8qKlxuLy8gICAgKiBBZGQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhpcyBmdW5jdGlvbi5cbi8vICAgICovXG4vLyAgIGFkZEVudmlyb25tZW50KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSUZ1bmN0aW9uO1xuLy8gfVxuXG4vKipcbiAqIFByb3ZpZGVzIGEgTGFtYmRhIEZ1bmN0aW9uIHJlc291cmNlLiBMYW1iZGEgYWxsb3dzIHlvdSB0byB0cmlnZ2VyIGV4ZWN1dGlvblxuICogb2YgY29kZSBpbiByZXNwb25zZSB0byBldmVudHMgaW4gQVdTLCBlbmFibGluZyBzZXJ2ZXJsZXNzIGJhY2tlbmQgc29sdXRpb25zLlxuICpcbiAqIFRoZSBMYW1iZGEgRnVuY3Rpb24gaXRzZWxmIGluY2x1ZGVzIHNvdXJjZSBjb2RlIGFuZCBydW50aW1lIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogVGhpcyBDb25zdHJ1Y3QgbWFuYWdlcyBwZXJtaXNzaW9ucyBhcyBwYXJ0IG9mIHRoZSBmdW5jdGlvbiBQcmluY2lwYWwgaWFtIHBvbGljeS5cbiAqIFRoaXMgd29ya3MgZm9yIHNhbWUgYWNjb3VudCByZXNvdXJjZXMsIGJ1dCBmb3IgY3Jvc3MtYWNjb3VudCByZXNvdXJjZXMsXG4gKiB5b3UgbWF5IG5lZWQgdG8gbWFuYWdlIGFjY2VzcyBhcyBwYXJ0IG9mIHRoZSBSZXNvdXJjZSBpYW0gcG9saWN5LlxuICpcbiAqIEByZXNvdXJjZSBhd3NfbGFtYmRhX2Z1bmN0aW9uXG4gKiBAYmVhY29uLWNsYXNzIGNvbXB1dGUuSUZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBMYW1iZGFGdW5jdGlvbiBleHRlbmRzIExhbWJkYUZ1bmN0aW9uQmFzZSBpbXBsZW1lbnRzIElGdW5jdGlvbiB7XG4gIC8vIFRPRE86IFRlcnJhZm9ybSBhd3NfbGFtYmRhX2Z1bmN0aW9uID09IENESyBGdW5jdGlvblZlcnNpb25cblxuICAvKipcbiAgICogTGF0ZXN0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9mIHlvdXIgTGFtYmRhIEZ1bmN0aW9uLlxuICAgKi9cbiAgcHVibGljIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgLy8gVE9ETzogV2hhdCBpcyB0aGlzIGlmIHB1Ymxpc2ggaXMgZmFsc2U/P1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLnZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgbGFtYmRhIGZ1bmN0aW9uIGludG8gdGhlIFRlcnJhQ29uc3RydWN0IHNwZWMgdXNpbmcgaXRzIG5hbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uTmFtZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25OYW1lOiBzdHJpbmcsXG4gICk6IElGdW5jdGlvbiB7XG4gICAgcmV0dXJuIExhbWJkYUZ1bmN0aW9uLmZyb21GdW5jdGlvbkF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBmdW5jdGlvbkFybjogQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3Qoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6IFwibGFtYmRhXCIsXG4gICAgICAgIHJlc291cmNlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIHJlc291cmNlTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgfSksXG4gICAgICBzYW1lRW52aXJvbm1lbnQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgbGFtYmRhIGZ1bmN0aW9uIGludG8gdGhlIFRlcnJhQ29uc3RydWN0IHNwZWMgdXNpbmcgaXRzIEFSTi5cbiAgICpcbiAgICogRm9yIGBGdW5jdGlvbi5hZGRQZXJtaXNzaW9ucygpYCB0byB3b3JrIG9uIHRoaXMgaW1wb3J0ZWQgbGFtYmRhLCBtYWtlIHN1cmUgdGhhdCBpc1xuICAgKiBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIHN0YWNrIHlvdSBhcmUgaW1wb3J0aW5nIGl0IGludG8uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21GdW5jdGlvbkFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZnVuY3Rpb25Bcm46IHN0cmluZyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gTGFtYmRhRnVuY3Rpb24uZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgZnVuY3Rpb25Bcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIExhbWJkYSBmdW5jdGlvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyBhIGZ1bmN0aW9uIG5vdCBkZWZpbmVkXG4gICAqIHdpdGhpbiB0aGlzIHN0YWNrLlxuICAgKlxuICAgKiBGb3IgYEZ1bmN0aW9uLmFkZFBlcm1pc3Npb25zKClgIHRvIHdvcmsgb24gdGhpcyBpbXBvcnRlZCBsYW1iZGEsIHNldCB0aGUgc2FtZUVudmlyb25tZW50IHByb3BlcnR5IHRvIHRydWVcbiAgICogaWYgdGhpcyBpbXBvcnRlZCBsYW1iZGEgaXMgaW4gdGhlIHNhbWUgYWNjb3VudCBhbmQgcmVnaW9uIGFzIHRoZSBzdGFjayB5b3UgYXJlIGltcG9ydGluZyBpdCBpbnRvLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBuYW1lIG9mIHRoZSBsYW1iZGEgY29uc3RydWN0XG4gICAqIEBwYXJhbSBhdHRycyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZnVuY3Rpb24gdG8gaW1wb3J0XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21GdW5jdGlvbkF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBGdW5jdGlvbkF0dHJpYnV0ZXMsXG4gICk6IElGdW5jdGlvbiB7XG4gICAgY29uc3QgZnVuY3Rpb25Bcm4gPSBhdHRycy5mdW5jdGlvbkFybjtcbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPSBleHRyYWN0TmFtZUZyb21Bcm4oYXR0cnMuZnVuY3Rpb25Bcm4pO1xuICAgIGNvbnN0IHJvbGUgPSBhdHRycy5yb2xlO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgTGFtYmRhRnVuY3Rpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogZGF0YUF3c0xhbWJkYUZ1bmN0aW9uLkRhdGFBd3NMYW1iZGFGdW5jdGlvbjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbk5hbWUgPSBmdW5jdGlvbk5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZnVuY3Rpb25Bcm4gPSBmdW5jdGlvbkFybjtcbiAgICAgIC8vIFRPRE86IFJlc29sdmUgcm9sZSBhbmQgcHJpbmNpcGFsIHJlc29sdmUgZnJvbSBURiBkYXRhIHNvdXJjZT9cbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZSA9IHJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnNOb2RlID0gdGhpcy5ub2RlO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIHJldHVybmVkLlxuICAgICAgICpcbiAgICAgICAqIElmIHF1YWxpZmllciBpcyBub3Qgc2V0LCB0aGlzIHdpbGwgcmVzb2x2ZSB0byB0aGUgbW9zdCByZWNlbnQgcHVibGlzaGVkIHZlcnNpb24uXG4gICAgICAgKiBJZiBubyBwdWJsaXNoZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gZXhpc3RzLCB2ZXJzaW9uIHdpbGwgcmVzb2x2ZSB0byBgJExBVEVTVGAuXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS52ZXJzaW9uO1xuICAgICAgfVxuICAgICAgLy8gRm9yY2UgdXNlciB0byBwcm92aWRlIGFyY2ggb3IgYXNzdW1lIFg4Nl82NFxuICAgICAgcHVibGljIHJlYWRvbmx5IGFyY2hpdGVjdHVyZSA9IGF0dHJzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuICAgICAgLy8gcHVibGljIGdldCBhcmNoaXRlY3R1cmUoKTogc3RyaW5nIHtcbiAgICAgIC8vICAgcmV0dXJuIEZuLmVsZW1lbnQodGhpcy5yZXNvdXJjZS5hcmNoaXRlY3R1cmVzLCAwKSBhcyBzdHJpbmc7XG4gICAgICAvLyB9XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VBcm5zRm9yR3JhbnRJbnZva2UgPSBbXG4gICAgICAgIHRoaXMuZnVuY3Rpb25Bcm4sXG4gICAgICAgIGAke3RoaXMuZnVuY3Rpb25Bcm59OipgLFxuICAgICAgXTtcbiAgICAgIHB1YmxpYyBnZXQgZnVuY3Rpb25PdXRwdXRzKCk6IEZ1bmN0aW9uT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgYXJuOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybiA/PyBcIlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk91dHB1dHM7XG4gICAgICB9XG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuQ3JlYXRlUGVybWlzc2lvbnMgPVxuICAgICAgICBhdHRycy5zYW1lRW52aXJvbm1lbnQgPz8gdGhpcy5faXNTdGFja0FjY291bnQoKTtcbiAgICAgIHByb3RlY3RlZCByZWFkb25seSBfc2tpcFBlcm1pc3Npb25zID0gYXR0cnMuc2tpcFBlcm1pc3Npb25zID8/IGZhbHNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBmdW5jdGlvbkFybixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9XG4gICAgICAgICAgcm9sZSB8fCBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAvLyBUT0RPOiByZS1hZGQgc3VwcG9ydCBmb3IgRUMyIGNvbm5lY3Rpb25zXG4gICAgICAgIC8vIGlmIChhdHRycy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgIC8vICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgLy8gICAgIHNlY3VyaXR5R3JvdXBzOiBbYXR0cnMuc2VjdXJpdHlHcm91cF0sXG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBGdW5jdGlvbk91dHB1dHM7XG5cbiAgLyoqIFN0cm9uZ2x5IFR5cGVkIEZ1bmN0aW9uIE91dHB1dHMgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvbk91dHB1dHMoKTogRnVuY3Rpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25PdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi5cbiAgICpcbiAgICogKG5vdCBhIFRPS0VOKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIGZvIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25Bcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5hcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBmbyB0aGUgZnVuY3Rpb24uXG4gICAqIChpZiB2ZXJzaW9uaW5nIGlzIGVuYWJsZWQgdmlhIHB1Ymxpc2ggPSB0cnVlKVxuICAgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvblF1YWxpZmllZEFybigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLnF1YWxpZmllZEFybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIGZvIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25RdWFsaWZpZWRJbnZva2VBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5xdWFsaWZpZWRJbnZva2VBcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIGFyY2hpdGVjdHVyZSBvZiB0aGlzIExhbWJkYSBGdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIExhbWJkYSBGdW5jdGlvbiBpcyBydW5uaW5nIGFzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIFVuZGVmaW5lZCBpZiB0aGUgZnVuY3Rpb24gd2FzIGltcG9ydGVkIHdpdGhvdXQgYSByb2xlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBETFEgKGFzIHF1ZXVlKSBhc3NvY2lhdGVkIHdpdGggdGhpcyBMYW1iZGEgRnVuY3Rpb24gKHRoaXMgaXMgYW4gb3B0aW9uYWwgYXR0cmlidXRlKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWFkTGV0dGVyUXVldWU/OiBJUXVldWU7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IGNvbmZpZ3VyZWQgZm9yIHRoaXMgbGFtYmRhLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGNvbnN0cnVjdCBub2RlIHdoZXJlIHBlcm1pc3Npb25zIGFyZSBhdHRhY2hlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwZXJtaXNzaW9uc05vZGUgPSB0aGlzLm5vZGU7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkNyZWF0ZVBlcm1pc3Npb25zID0gdHJ1ZTtcblxuICAvKipcbiAgICogTWFwcGluZyBvZiBpbnZvY2F0aW9uIHByaW5jaXBhbHMgdG8gZ3JhbnRzLiBVc2VkIHRvIGRlLWR1cGUgYGdyYW50SW52b2tlKClgIGNhbGxzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfaW52b2NhdGlvbkdyYW50czogUmVjb3JkPHN0cmluZywgaWFtLkdyYW50PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBNYXBwaW5nIG9mIGZ1Y250aW9uIFVSTCBpbnZvY2F0aW9uIHByaW5jaXBhbHMgdG8gZ3JhbnRzLiBVc2VkIHRvIGRlLWR1cGUgYGdyYW50SW52b2tlVXJsKClgIGNhbGxzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfZnVuY3Rpb25VcmxJbnZvY2F0aW9uR3JhbnRzOiBSZWNvcmQ8c3RyaW5nLCBpYW0uR3JhbnQ+ID0ge307XG5cbiAgLy8gLy8gVGVyYWZvcm0gcHJvdmlkZXIgZm9yIEFXUyBBdXRvbWF0aWNhbGx5IG1hbmFnZXMgRnVuY3Rpb24gVmVyc2lvbmluZyB0aHJvdWdoIGNvZGUgaGFzaC4uXG4gIC8vIC8vIG5lZWQgdG8gZHJvcCBtb3N0IG9mIHRoaXMgdmVyc2lvbiBsb2dpYy4uXG5cbiAgLy8gcHJpdmF0ZSByZWFkb25seSBjdXJyZW50VmVyc2lvbk9wdGlvbnM/OiBWZXJzaW9uT3B0aW9ucztcbiAgLy8gcHJpdmF0ZSBfY3VycmVudFZlcnNpb24/OiBWZXJzaW9uO1xuICAvLyAvKipcbiAgLy8gICogUmV0dXJucyBhIGBsYW1iZGEuVmVyc2lvbmAgd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXNcbiAgLy8gICogTGFtYmRhIGZ1bmN0aW9uLiBBIG5ldyB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZCBldmVyeSB0aW1lIHRoZSBmdW5jdGlvbidzXG4gIC8vICAqIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cbiAgLy8gICpcbiAgLy8gICogWW91IGNhbiBzcGVjaWZ5IG9wdGlvbnMgZm9yIHRoaXMgdmVyc2lvbiB1c2luZyB0aGUgYGN1cnJlbnRWZXJzaW9uT3B0aW9uc2BcbiAgLy8gICogcHJvcCB3aGVuIGluaXRpYWxpemluZyB0aGUgYGxhbWJkYS5GdW5jdGlvbmAuXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgZ2V0IGN1cnJlbnRWZXJzaW9uKCk6IFZlcnNpb24ge1xuICAvLyAgIGlmICh0aGlzLl9jdXJyZW50VmVyc2lvbikge1xuICAvLyAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWZXJzaW9uO1xuICAvLyAgIH1cblxuICAvLyAgIC8vIGlmICh0aGlzLl93YXJuSWZDdXJyZW50VmVyc2lvbkNhbGxlZCkge1xuICAvLyAgIC8vICAgdGhpcy53YXJuSW52b2tlRnVuY3Rpb25QZXJtaXNzaW9ucyh0aGlzKTtcbiAgLy8gICAvLyB9XG5cbiAgLy8gICB0aGlzLl9jdXJyZW50VmVyc2lvbiA9IG5ldyBWZXJzaW9uKHRoaXMsIFwiQ3VycmVudFZlcnNpb25cIiwge1xuICAvLyAgICAgbGFtYmRhOiB0aGlzLFxuICAvLyAgICAgLi4udGhpcy5jdXJyZW50VmVyc2lvbk9wdGlvbnMsXG4gIC8vICAgfSk7XG5cbiAgLy8gICAvLyBvdmVycmlkZSB0aGUgdmVyc2lvbidzIGxvZ2ljYWwgSUQgd2l0aCBhIGxhenkgc3RyaW5nIHdoaWNoIGluY2x1ZGVzIHRoZVxuICAvLyAgIC8vIGhhc2ggb2YgdGhlIGZ1bmN0aW9uIGl0c2VsZiwgc28gYSBuZXcgdmVyc2lvbiByZXNvdXJjZSBpcyBjcmVhdGVkIHdoZW5cbiAgLy8gICAvLyB0aGUgZnVuY3Rpb24gY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuICAvLyAgIGNvbnN0IGNmbiA9IHRoaXMuX2N1cnJlbnRWZXJzaW9uLm5vZGUuZGVmYXVsdENoaWxkIGFzIFRlcnJhZm9ybVJlc291cmNlO1xuICAvLyAgIGNvbnN0IG9yaWdpbmFsTG9naWNhbElkID0gdGhpcy5zdGFjay5yZXNvbHZlKGNmbi5sb2dpY2FsSWQpIGFzIHN0cmluZztcblxuICAvLyAgIGNmbi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgLy8gICAgIExhenkuc3RyaW5nVmFsdWUoe1xuICAvLyAgICAgICBwcm9kdWNlOiAoKSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZUZ1bmN0aW9uSGFzaCh0aGlzLCB0aGlzLmhhc2hNaXhpbnMuam9pbihcIlwiKSk7XG4gIC8vICAgICAgICAgY29uc3QgbG9naWNhbElkID0gdHJpbUZyb21TdGFydChvcmlnaW5hbExvZ2ljYWxJZCwgMjU1IC0gMzIpO1xuICAvLyAgICAgICAgIHJldHVybiBgJHtsb2dpY2FsSWR9JHtoYXNofWA7XG4gIC8vICAgICAgIH0sXG4gIC8vICAgICB9KSxcbiAgLy8gICApO1xuXG4gIC8vICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRWZXJzaW9uO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4ocykgdG8gcHV0IGludG8gdGhlIHJlc291cmNlIGZpZWxkIG9mIHRoZSBnZW5lcmF0ZWQgSUFNIHBvbGljeSBmb3IgZ3JhbnRJbnZva2UoKVxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZUFybnNGb3JHcmFudEludm9rZSgpIHtcbiAgICAvLyBUT0RPOiBzaG91bGQgdGhpcyBiZSBxdWFsaWZpZWRBcm4gb3IgcXVhbGlmaWVkSW52b2tlQXJuP1xuICAgIC8vIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcXVhbGlmaWVkX2FyblxuICAgIHJldHVybiBbdGhpcy5mdW5jdGlvbkFybiwgdGhpcy5mdW5jdGlvblF1YWxpZmllZEludm9rZUFybl07XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbG9nR3JvdXA6IGNsb3Vkd2F0Y2hMb2dHcm91cC5DbG91ZHdhdGNoTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhpcyBmdW5jdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVudmlyb25tZW50OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgcHJpdmF0ZSBfdXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogSFRUUCBFbmRwb2ludCBmb3IgdGhpcyBmdW5jdGlvbiBpZiBkZWZpbmVkLlxuICAgKlxuICAgKiB1c2UgYGFkZEZ1bmN0aW9uVXJsYCB0byBlbmFibGUgRW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVybCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl91cmw7XG4gIH1cblxuICBwcml2YXRlIF9ldmVudFNvdXJjZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IGxhbWJkYUV2ZW50U291cmNlTWFwcGluZy5MYW1iZGFFdmVudFNvdXJjZU1hcHBpbmc7XG4gIH0gPSB7fTtcbiAgcHVibGljIGdldCBldmVudFNvdXJjZXMoKTogbGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nLkxhbWJkYUV2ZW50U291cmNlTWFwcGluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9ldmVudFNvdXJjZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VjdXJpdHlHcm91cD86IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIGdldCBzZWN1cml0eUdyb3VwKCk6IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlY3VyaXR5R3JvdXA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBuYW1lOiBzdHJpbmcsIHByb3BzOiBGdW5jdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIG5hbWUsIHByb3BzKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHZhcmlhYmxlcyxcbiAgICAgIGxvZ1JldGVudGlvbkluRGF5cyA9IFJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICBtZW1vcnlTaXplID0gMTI4LFxuICAgICAgdGltZW91dCA9IER1cmF0aW9uLnNlY29uZHMoMyksXG4gICAgICBsYXllcnMsXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgIH0gPSBwcm9wcztcblxuICAgIC8qKlxuICAgICAqIFRoZSBuYW1lIG9yIEFSTiBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgICAqIGlzIGxpbWl0ZWQgdG8gNjQgY2hhcmFjdGVycyBpbiBsZW5ndGguXG4gICAgICpcbiAgICAgKiBBUk4gUGF0dGVybjogKFthLXpBLVowLTktX10rKSg6KFxcJExBVEVTVHxbYS16QS1aMC05LV9dKykpP1xuICAgICAqL1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9XG4gICAgICBwcm9wcy5mdW5jdGlvbk5hbWUgPz9cbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lUHJlZml4KHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiBwcm9wcy5mdW5jdGlvbk5hbWVQcmVmaXggPz8gdGhpcy5ncmlkVVVJRCArIFwiLVwiLFxuICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6IFwiK1wiLFxuICAgICAgICBtYXhMZW5ndGg6IDY0LFxuICAgICAgfSk7XG5cbiAgICBpZiAoZnVuY3Rpb25OYW1lICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoZnVuY3Rpb25OYW1lKSkge1xuICAgICAgaWYgKGZ1bmN0aW9uTmFtZS5sZW5ndGggPiA2NCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEZ1bmN0aW9uIG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiA2NCBjaGFyYWN0ZXJzIGJ1dCBoYXMgJHtmdW5jdGlvbk5hbWUubGVuZ3RofSBjaGFyYWN0ZXJzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoIS9eW2EtekEtWjAtOS1fXSskLy50ZXN0KGZ1bmN0aW9uTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGdW5jdGlvbiBuYW1lICR7ZnVuY3Rpb25OYW1lfSBjYW4gY29udGFpbiBvbmx5IGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIG9yIHVuZGVyc2NvcmVzIHdpdGggbm8gc3BhY2VzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlc2NyaXB0aW9uICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoZGVzY3JpcHRpb24pKSB7XG4gICAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRnVuY3Rpb24gZGVzY3JpcHRpb24gY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAyNTYgY2hhcmFjdGVycyBidXQgaGFzICR7ZGVzY3JpcHRpb24ubGVuZ3RofSBjaGFyYWN0ZXJzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFuYWdlZFBvbGljaWVzID0gbmV3IEFycmF5PGlhbS5JTWFuYWdlZFBvbGljeT4oKTtcbiAgICAvLyB0aGUgYXJuIGlzIGluIHRoZSBmb3JtIG9mIC0gYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVxuICAgIG1hbmFnZWRQb2xpY2llcy5wdXNoKFxuICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIkFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAocHJvcHMubmV0d29ya0NvbmZpZykge1xuICAgICAgLy8gUG9saWN5IHRoYXQgd2lsbCBoYXZlIEVOSSBjcmVhdGlvbiBwZXJtaXNzaW9uc1xuICAgICAgLy8gbm90IHN1cmUgaWYgdGltZS5zbGVlcCBpcyBuZWNlc3Nhcnk/XG4gICAgICAvLyByZWY6XG4gICAgICAvLyAgLSBodHRwczovL2dpdGh1Yi5jb20vcHVsdW1pL3B1bHVtaS1hd3MvaXNzdWVzLzIyNjAjaXNzdWVjb21tZW50LTE5Nzc2MDY1MDlcbiAgICAgIC8vICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9pc3N1ZXMvMjk4MjgjaXNzdWVjb21tZW50LTE2OTMzMDc1MDBcbiAgICAgIG1hbmFnZWRQb2xpY2llcy5wdXNoKFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIkFXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCIsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEFueSBjb25jZXJuIG5vdCBzY29waW5nIHRoZSBsb2dHcm91cCBJQU0gUGVybWlzc2lvbnM/XG4gICAgLy8gLmFsbG93KClcbiAgICAvLyAudG9DcmVhdGVMb2dTdHJlYW0oKVxuICAgIC8vIC50b1B1dExvZ0V2ZW50cygpXG4gICAgLy8gLm9uKGxvZ0dyb3VwLmFybiwgYCR7bG9nR3JvdXAuYXJufTpsb2ctc3RyZWFtOipgKSxcblxuICAgIHRoaXMucm9sZSA9XG4gICAgICBwcm9wcy5yb2xlIHx8XG4gICAgICBuZXcgaWFtLlJvbGUodGhpcywgXCJTZXJ2aWNlUm9sZVwiLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG1hbmFnZWRQb2xpY2llcyxcbiAgICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG4gICAgLy8gVE9ETzogUmUtYWRkIGZpbGVzeXN0ZW0gLyBsb2NhbE1vdW50UGF0aCBzdXBwb3J0XG4gICAgLy8gcmVmOiBmaWxlc3lzdGVtLmNvbmZpZy5wb2xpY2llcyB0byBiZSBhZGRlZCB0byBwcmluY2lwYWxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNjAuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50cyNMOTQ5LUw5NjVcblxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHByb3BzLmluaXRpYWxQb2xpY3kgfHwgW10pIHtcbiAgICAgIHRoaXMucm9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIGFkZCBzdXBwb3J0IGZvciBBV1NfQ09ERUdVUlUgUHJvZmlsZSBlbnYgdmFyaWFibGVzLi4uXG4gICAgY29uc3QgZW52ID0gdmFyaWFibGVzIHx8IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudikpIHtcbiAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gRExRIGNhbiBiZSBlaXRoZXIgc25zLklUb3BpYyBvciBzcXMuSVF1ZXVlXG4gICAgY29uc3QgZGxxVG9waWNPclF1ZXVlID0gdGhpcy5idWlsZERlYWRMZXR0ZXJRdWV1ZShwcm9wcyk7XG4gICAgaWYgKGRscVRvcGljT3JRdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5pc1F1ZXVlKGRscVRvcGljT3JRdWV1ZSkpIHtcbiAgICAgICAgdGhpcy5kZWFkTGV0dGVyUXVldWUgPSBkbHFUb3BpY09yUXVldWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWFkTGV0dGVyVG9waWMgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7XG4gICAgICAgIC8vIHRoaXMuZGVhZExldHRlclRvcGljID0gZGxxVG9waWNPclF1ZXVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvZ0dyb3VwID0gbmV3IGNsb3Vkd2F0Y2hMb2dHcm91cC5DbG91ZHdhdGNoTG9nR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgXCJMb2dHcm91cFwiLFxuICAgICAge1xuICAgICAgICBuYW1lOiBgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCxcbiAgICAgICAgcmV0ZW50aW9uSW5EYXlzOiBsb2dSZXRlbnRpb25JbkRheXMsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5fbG9nR3JvdXAgPSBsb2dHcm91cDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgbGFtYmRhRnVuY3Rpb24uTGFtYmRhRnVuY3Rpb24odGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHJvbGU6IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgYXJjaGl0ZWN0dXJlczogW1xuICAgICAgICAvLyBUaGlzIGlzIGFuIGFycmF5LCBidXQgbWF4aW11bSBsZW5ndGggaXMgMSFcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWxhbWJkYS1mdW5jdGlvbi5odG1sI2Nmbi1sYW1iZGEtZnVuY3Rpb24tYXJjaGl0ZWN0dXJlc1xuICAgICAgICBwcm9wcy5hcmNoaXRlY3R1cmU/LnRvU3RyaW5nKCkgPz8gQXJjaGl0ZWN0dXJlLlg4Nl82NC50b1N0cmluZygpLFxuICAgICAgXSxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0LnRvU2Vjb25kcygpLFxuICAgICAgbGF5ZXJzLCAvLyBUT0RPOiBTdXBwb3J0IElMYXllciB3aXRoIExhenkgbGlzdCBvZiBhcm5zXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgLy8gVE9ETzogQ0RLIFNvcnRzIGVudmlyb25tZW50IHRvIG1hdGNoIExhbWJkYSBIYXNoIGJlaGF2aW91clxuICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50cyNMMTQ2N1xuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgdmFyaWFibGVzOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICBwcm9kdWNlOiAoX2NvbnRleHQ6IElSZXNvbHZlQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSkgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIHZwY0NvbmZpZzogdGhpcy5wYXJzZVZwY0NvbmZpZyhwcm9wcy5uZXR3b3JrQ29uZmlnKSxcbiAgICAgIGxvZ2dpbmdDb25maWc6IHRoaXMuZ2V0TG9nZ2luZ0NvbmZpZyh0aGlzLl9sb2dHcm91cC5uYW1lLCBwcm9wcyksXG4gICAgICB0cmFjaW5nQ29uZmlnOiB0aGlzLnBhcnNlVHJhY2luZ0NvbmZpZyhwcm9wcy50cmFjaW5nID8/IFRyYWNpbmcuQUNUSVZFKSxcbiAgICAgIGRlYWRMZXR0ZXJDb25maWc6IHRoaXMucGFyc2VEZWFkTGV0dGVyQ29uZmlnKGRscVRvcGljT3JRdWV1ZSksXG4gICAgICBwdWJsaXNoOiBwcm9wcy5wdWJsaXNoLFxuICAgICAgLy8gVE9ETzogdXNlIGxvZ0dyb3VwLm5vZGUuYWRkRGVwZW5kZW5jeSB3aGVuIGxvZ0dyb3VwIGlzIGltcGxlbWVudGVkXG4gICAgICBkZXBlbmRzT246IFtsb2dHcm91cF0sXG4gICAgfSk7XG4gICAgdGhpcy5mdW5jdGlvbk5hbWUgPSB0aGlzLnJlc291cmNlLmZ1bmN0aW9uTmFtZTtcblxuICAgIC8vIG1ha2Ugc3VyZSBhbnkgcm9sZSBhdHRhY2htZW50cyBhcmUgYWRkZWQgYXMgZGVwZW5kZW5jaWVzIGZvciB0aGlzIGxhbWJkYVxuICAgIC8vIHRoaXMgYWNoaWV2ZWQgYnkgdGhlIENES1RGIEFzcGVjdCBvbiB0aGUgcGFyZW50IFN0YWNrQmFzZVxuICAgIHRoaXMucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucm9sZSk7XG5cbiAgICB0aGlzLnRpbWVvdXQgPSBwcm9wcy50aW1lb3V0O1xuICAgIHRoaXMuYXJjaGl0ZWN0dXJlID0gcHJvcHMuYXJjaGl0ZWN0dXJlID8/IEFyY2hpdGVjdHVyZS5YODZfNjQ7XG5cbiAgICAvLyBUT0RPOiBBZGQgYXdzX2xhbWJkYV9wcm92aXNpb25lZF9jb25jdXJyZW5jeV9jb25maWdcblxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgcHJvcHMuZXZlbnRzIHx8IFtdKSB7XG4gICAgICB0aGlzLmFkZEV2ZW50U291cmNlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBFdmVudCBJbnZva2UgQ29uZmlnXG4gICAgaWYgKFxuICAgICAgcHJvcHMub25GYWlsdXJlIHx8XG4gICAgICBwcm9wcy5vblN1Y2Nlc3MgfHxcbiAgICAgIHByb3BzLm1heEV2ZW50QWdlIHx8XG4gICAgICBwcm9wcy5yZXRyeUF0dGVtcHRzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuY29uZmlndXJlQXN5bmNJbnZva2Uoe1xuICAgICAgICBvbkZhaWx1cmU6IHByb3BzLm9uRmFpbHVyZSxcbiAgICAgICAgb25TdWNjZXNzOiBwcm9wcy5vblN1Y2Nlc3MsXG4gICAgICAgIG1heEV2ZW50QWdlOiBwcm9wcy5tYXhFdmVudEFnZSxcbiAgICAgICAgcmV0cnlBdHRlbXB0czogcHJvcHMucmV0cnlBdHRlbXB0cyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX291dHB1dHMgPSB7XG4gICAgICBuYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIGFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICByb2xlQXJuOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIC8vIG9ubHkga25vd24gYXQgc3ludGggdGltZVxuICAgICAgLy8gZXhwbGljaXQgYG51bGxgIHJlcXVpcmVkIHRvIGF2b2lkIHN5bnRheCBlcnJvcnMgd2hlbiB1c2luZyBzdHJpbmdWYWx1ZSAmJiBcInVuZGVmaW5lZFwiXG4gICAgICB1cmw6IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLl91cmwgPz8gbnVsbCxcbiAgICAgIH0pLFxuICAgICAgZGVmYXVsdFNlY3VyaXR5R3JvdXA6IExhenkuYW55VmFsdWUoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiB0aGlzLl9zZWN1cml0eUdyb3VwPy5pZCA/PyBudWxsLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHRoaXMgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKiBJZiB0aGlzIGlzIGEgcmVmIHRvIGEgTGFtYmRhIGZ1bmN0aW9uLCB0aGlzIG9wZXJhdGlvbiByZXN1bHRzIGluIGEgbm8tb3AuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSdzIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGFkZEVudmlyb25tZW50KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgICAvLyBSZXNlcnZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2lsbCBmYWlsIGR1cmluZyBjbG91ZGZvcm1hdGlvbiBkZXBsb3kgaWYgdGhleSdyZSBzZXQuXG4gICAgLy8gVGhpcyBjaGVjayBpcyBqdXN0IHRvIGFsbG93IENESyB0byBmYWlsIGZhc3RlciB3aGVuIHRoZXNlIGFyZSBzcGVjaWZpZWQuXG4gICAgY29uc3QgcmVzZXJ2ZWRFbnZpcm9ubWVudFZhcmlhYmxlcyA9IFtcbiAgICAgIFwiX0hBTkRMRVJcIixcbiAgICAgIFwiX1hfQU1aTl9UUkFDRV9JRFwiLFxuICAgICAgXCJBV1NfREVGQVVMVF9SRUdJT05cIixcbiAgICAgIFwiQVdTX1JFR0lPTlwiLFxuICAgICAgXCJBV1NfRVhFQ1VUSU9OX0VOVlwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUVcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9GVU5DVElPTl9NRU1PUllfU0laRVwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0ZVTkNUSU9OX1ZFUlNJT05cIixcbiAgICAgIFwiQVdTX0xBTUJEQV9JTklUSUFMSVpBVElPTl9UWVBFXCIsXG4gICAgICBcIkFXU19MQU1CREFfTE9HX0dST1VQX05BTUVcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9MT0dfU1RSRUFNX05BTUVcIixcbiAgICAgIFwiQVdTX0FDQ0VTU19LRVlcIixcbiAgICAgIFwiQVdTX0FDQ0VTU19LRVlfSURcIixcbiAgICAgIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXCIsXG4gICAgICBcIkFXU19TRVNTSU9OX1RPS0VOXCIsXG4gICAgICBcIkFXU19MQU1CREFfUlVOVElNRV9BUElcIixcbiAgICAgIFwiTEFNQkRBX1RBU0tfUk9PVFwiLFxuICAgICAgXCJMQU1CREFfUlVOVElNRV9ESVJcIixcbiAgICBdO1xuICAgIGlmIChyZXNlcnZlZEVudmlyb25tZW50VmFyaWFibGVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7a2V5fSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXNlcnZlZCBieSB0aGUgbGFtYmRhIHJ1bnRpbWUgYW5kIGNhbiBub3QgYmUgc2V0IG1hbnVhbGx5LiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvY29uZmlndXJhdGlvbi1lbnZ2YXJzLmh0bWxgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYWRkRnVuY3Rpb25Vcmwob3B0aW9ucz86IEZ1bmN0aW9uVXJsT3B0aW9ucyk6IEZ1bmN0aW9uVXJsIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHN1cGVyLmFkZEZ1bmN0aW9uVXJsKG9wdGlvbnMpO1xuICAgIHRoaXMuX3VybCA9IGVuZHBvaW50LnVybDtcbiAgICByZXR1cm4gZW5kcG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IExvZ2dpbmcgQ29uZmlnIHByb3BldHkgZm9yIHRoZSBmdW5jdGlvbi5cbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZnVuY3Rpb24gTG9nZ2luZ0NvbmZpZyBQcm9wZXJ0eSBpZiB0aGUgcHJvcGVydHkgaXMgc2V0IG9uIHRoZVxuICAgKiBmdW5jdGlvbiBhbmQgdW5kZWZpbmVkIGlmIG5vdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0TG9nZ2luZ0NvbmZpZyhcbiAgICBsb2dHcm91cE5hbWU6IHN0cmluZyxcbiAgICBwcm9wczogRnVuY3Rpb25Qcm9wcyxcbiAgKTogbGFtYmRhRnVuY3Rpb24uTGFtYmRhRnVuY3Rpb25Mb2dnaW5nQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocHJvcHMuYXBwbGljYXRpb25Mb2dMZXZlbCB8fCBwcm9wcy5zeXN0ZW1Mb2dMZXZlbCkge1xuICAgICAgaWYgKHByb3BzLmxvZ2dpbmdGb3JtYXQgIT09IExvZ2dpbmdGb3JtYXQuSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRvIHVzZSBBcHBsaWNhdGlvbkxvZ0xldmVsIGFuZC9vciBTeXN0ZW1Mb2dMZXZlbCB5b3UgbXVzdCBzZXQgTG9nZ2luZ0Zvcm1hdCB0byAnJHtMb2dnaW5nRm9ybWF0LkpTT059JywgZ290ICcke3Byb3BzLmxvZ2dpbmdGb3JtYXR9Jy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2dnaW5nQ29uZmlnOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkxvZ2dpbmdDb25maWc7XG4gICAgaWYgKHByb3BzLmxvZ2dpbmdGb3JtYXQpIHtcbiAgICAgIGxvZ2dpbmdDb25maWcgPSB7XG4gICAgICAgIGxvZ0Zvcm1hdDogcHJvcHMubG9nZ2luZ0Zvcm1hdCxcbiAgICAgICAgc3lzdGVtTG9nTGV2ZWw6IHByb3BzLnN5c3RlbUxvZ0xldmVsLFxuICAgICAgICBhcHBsaWNhdGlvbkxvZ0xldmVsOiBwcm9wcy5hcHBsaWNhdGlvbkxvZ0xldmVsLFxuICAgICAgICBsb2dHcm91cDogbG9nR3JvdXBOYW1lLFxuICAgICAgfTtcbiAgICAgIHJldHVybiBsb2dnaW5nQ29uZmlnO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYW4gYWxpYXMgZm9yIHRoaXMgZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoZSBhbGlhcyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2ZcbiAgICogdGhlIGZ1bmN0aW9uIGFzIGl0IGlzIGJlaW5nIHVwZGF0ZWQgZHVyaW5nIGEgZGVwbG95bWVudC5cbiAgICpcbiAgICogYGBgdHNcbiAgICogZGVjbGFyZSBjb25zdCBmbjogY29tcHV0ZS5MYW1iZGFGdW5jdGlvbjtcbiAgICpcbiAgICogZm4uYWRkQWxpYXMoJ0xpdmUnKTtcbiAgICpcbiAgICogLy8gSXMgZXF1aXZhbGVudCB0b1xuICAgKlxuICAgKiBuZXcgY29tcHV0ZS5BbGlhcyh0aGlzLCAnQWxpYXNMaXZlJywge1xuICAgKiAgIGFsaWFzTmFtZTogJ0xpdmUnLFxuICAgKiAgIHZlcnNpb246IGZuLnZlcnNpb24sXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGFsaWFzTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWxpYXNcbiAgICogQHBhcmFtIG9wdGlvbnMgQWxpYXMgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIGFkZEFsaWFzKGFsaWFzTmFtZTogc3RyaW5nLCBvcHRpb25zPzogQWxpYXNPcHRpb25zKTogQWxpYXMge1xuICAgIHJldHVybiBhZGRBbGlhcyh0aGlzLCB0aGlzLCB0aGlzLnZlcnNpb24sIGFsaWFzTmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT3B0aW9uYWxseSBjcmVhdGUgTGFtYmRhRnVuY3Rpb25WcGNDb25maWdcbiAgICovXG4gIHByaXZhdGUgcGFyc2VWcGNDb25maWcoXG4gICAgY29uZmlnPzogVnBjQ29uZmlnLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvblZwY0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBzZWN1cml0eUdyb3VwSWRzID0gY29uZmlnLnNlY3VyaXR5R3JvdXBJZHM7XG4gICAgaWYgKCFzZWN1cml0eUdyb3VwSWRzKSB7XG4gICAgICB0aGlzLl9zZWN1cml0eUdyb3VwID0gbmV3IHNlY3VyaXR5R3JvdXAuU2VjdXJpdHlHcm91cChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJTZWN1cml0eUdyb3VwXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgdnBjSWQ6IGNvbmZpZy52cGNJZCxcblxuICAgICAgICAgIGVncmVzczogY29uZmlnLmVncmVzcyA/PyBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZyb21Qb3J0OiAwLFxuICAgICAgICAgICAgICB0b1BvcnQ6IDAsXG4gICAgICAgICAgICAgIHByb3RvY29sOiBcIi0xXCIsXG4gICAgICAgICAgICAgIGNpZHJCbG9ja3M6IFtcIjAuMC4wLjAvMFwiXSxcbiAgICAgICAgICAgICAgaXB2NkNpZHJCbG9ja3M6IFtcIjo6LzBcIl0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgc2VjdXJpdHlHcm91cElkcyA9IFt0aGlzLl9zZWN1cml0eUdyb3VwLmlkXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Ym5ldElkczogY29uZmlnLnN1Ym5ldElkcyxcbiAgICAgIGlwdjZBbGxvd2VkRm9yRHVhbFN0YWNrOiBjb25maWcuaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2ssXG4gICAgICBzZWN1cml0eUdyb3VwSWRzLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGlzUXVldWUoZGVhZExldHRlclF1ZXVlOiBJUXVldWUpOiBkZWFkTGV0dGVyUXVldWUgaXMgSVF1ZXVlIHtcbiAgICByZXR1cm4gKDxJUXVldWU+ZGVhZExldHRlclF1ZXVlKS5xdWV1ZUFybiAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERlYWRMZXR0ZXJRdWV1ZShwcm9wczogRnVuY3Rpb25Qcm9wcyk6IElRdWV1ZSB8IHVuZGVmaW5lZCB7XG4gICAgLy8gfCBzbnMuSVRvcGljXG4gICAgaWYgKFxuICAgICAgIXByb3BzLmRlYWRMZXR0ZXJRdWV1ZSAmJlxuICAgICAgIXByb3BzLmRlYWRMZXR0ZXJRdWV1ZUVuYWJsZWRcbiAgICAgIC8vICYmICFwcm9wcy5kZWFkTGV0dGVyVG9waWNcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChwcm9wcy5kZWFkTGV0dGVyUXVldWUgJiYgcHJvcHMuZGVhZExldHRlclF1ZXVlRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICBcImRlYWRMZXR0ZXJRdWV1ZSBkZWZpbmVkIGJ1dCBkZWFkTGV0dGVyUXVldWVFbmFibGVkIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBpZiAoXG4gICAgLy8gICBwcm9wcy5kZWFkTGV0dGVyVG9waWMgJiZcbiAgICAvLyAgIChwcm9wcy5kZWFkTGV0dGVyUXVldWUgfHwgcHJvcHMuZGVhZExldHRlclF1ZXVlRW5hYmxlZCAhPT0gdW5kZWZpbmVkKVxuICAgIC8vICkge1xuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKFxuICAgIC8vICAgICBcImRlYWRMZXR0ZXJRdWV1ZSBhbmQgZGVhZExldHRlclRvcGljIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgYXQgdGhlIHNhbWUgdGltZVwiLFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICBsZXQgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7IC8vIHwgSVRvcGljO1xuICAgIC8vIGlmIChwcm9wcy5kZWFkTGV0dGVyVG9waWMpIHtcbiAgICAvLyAgIGRlYWRMZXR0ZXJRdWV1ZSA9IHByb3BzLmRlYWRMZXR0ZXJUb3BpYztcbiAgICAvLyAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgIC8vICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgLy8gICAgICAgYWN0aW9uczogW1wic25zOlB1Ymxpc2hcIl0sXG4gICAgLy8gICAgICAgcmVzb3VyY2VzOiBbZGVhZExldHRlclF1ZXVlLnRvcGljQXJuXSxcbiAgICAvLyAgICAgfSksXG4gICAgLy8gICApO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgZGVhZExldHRlclF1ZXVlID1cbiAgICAgIHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fFxuICAgICAgbmV3IFF1ZXVlKHRoaXMsIFwiRGVhZExldHRlclF1ZXVlXCIsIHtcbiAgICAgICAgbWVzc2FnZVJldGVudGlvblNlY29uZHM6IER1cmF0aW9uLmRheXMoMTQpLnRvU2Vjb25kcygpLFxuICAgICAgfSk7XG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNxczpTZW5kTWVzc2FnZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbZGVhZExldHRlclF1ZXVlLnF1ZXVlQXJuXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIGRlYWRMZXR0ZXJRdWV1ZTtcbiAgfVxuXG4gIC8vIFRPRE86IFN1cHBvcnQgc25zLklUb3BpYyArIHNuczpQdWJsaXNoIHRvcGljQXJuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGNyZWF0ZSBMYW1iZGFGdW5jdGlvbkRlYWRMZXR0ZXJDb25maWdcbiAgICovXG4gIHByaXZhdGUgcGFyc2VEZWFkTGV0dGVyQ29uZmlnKFxuICAgIGRlYWRMZXR0ZXJRdWV1ZT86IElRdWV1ZSwgLy8gfCBzbnMuSVRvcGljXG4gICk6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uRGVhZExldHRlckNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgLy8gdGhpcy5pc1F1ZXVlKGRlYWRMZXR0ZXJRdWV1ZSkgPyBkZWFkTGV0dGVyUXVldWUucXVldWVBcm4gOiAuLi5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhcmdldEFybjogZGVhZExldHRlclF1ZXVlLnF1ZXVlQXJuLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVHJhY2luZ0NvbmZpZyhcbiAgICB0cmFjaW5nOiBUcmFjaW5nLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvblRyYWNpbmdDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0cmFjaW5nID09PSB1bmRlZmluZWQgfHwgdHJhY2luZyA9PT0gVHJhY2luZy5ESVNBQkxFRCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wieHJheTpQdXRUcmFjZVNlZ21lbnRzXCIsIFwieHJheTpQdXRUZWxlbWV0cnlSZWNvcmRzXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGU6IHRyYWNpbmcsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFuIG9wYXF1ZSAodG9rZW4pIEFSTiwgcmV0dXJucyBhIFRGIGV4cHJlc3Npb24gdGhhdCBleHRyYWN0cyB0aGUgZnVuY3Rpb25cbiAqIG5hbWUgZnJvbSB0aGUgQVJOLlxuICpcbiAqIEZ1bmN0aW9uIEFSTnMgbG9vayBsaWtlIHRoaXM6XG4gKlxuICogICBhcm46YXdzOmxhbWJkYTpyZWdpb246YWNjb3VudC1pZDpmdW5jdGlvbjpmdW5jdGlvbi1uYW1lXG4gKlxuICogLi53aGljaCBtZWFucyB0aGF0IGluIG9yZGVyIHRvIGV4dHJhY3QgdGhlIGBmdW5jdGlvbi1uYW1lYCBjb21wb25lbnQgZnJvbSB0aGUgQVJOLCB3ZSBjYW5cbiAqIHNwbGl0IHRoZSBBUk4gdXNpbmcgXCI6XCIgYW5kIHNlbGVjdCB0aGUgY29tcG9uZW50IGluIGluZGV4IDYuXG4gKlxuICogQHJldHVybnMgYGVsZW1lbnQoc3BsaXQoJzonLCBhcm4pLCA2KWBcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE5hbWVGcm9tQXJuKGFybjogc3RyaW5nKSB7XG4gIHJldHVybiBGbi5lbGVtZW50KEZuLnNwbGl0KFwiOlwiLCBhcm4pLCA2KTtcbn1cblxuLyoqXG4gKiBYLVJheSBUcmFjaW5nIE1vZGVzIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9BUElfVHJhY2luZ0NvbmZpZy5odG1sKVxuICovXG5leHBvcnQgZW51bSBUcmFjaW5nIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIHJlc3BlY3QgYW55IHRyYWNpbmcgaGVhZGVyIGl0IHJlY2VpdmVzIGZyb20gYW4gdXBzdHJlYW0gc2VydmljZS5cbiAgICogSWYgbm8gdHJhY2luZyBoZWFkZXIgaXMgcmVjZWl2ZWQsIExhbWJkYSB3aWxsIHNhbXBsZSB0aGUgcmVxdWVzdCBiYXNlZCBvbiBhIGZpeGVkIHJhdGUuIFBsZWFzZSBzZWUgdGhlIFtVc2luZyBBV1MgTGFtYmRhIHdpdGggQVdTIFgtUmF5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9zZXJ2aWNlcy14cmF5Lmh0bWwpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb24gdGhpcyBzYW1wbGluZyBiZWhhdmlvci5cbiAgICovXG4gIEFDVElWRSA9IFwiQWN0aXZlXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBvbmx5IHRyYWNlIHRoZSByZXF1ZXN0IGZyb20gYW4gdXBzdHJlYW0gc2VydmljZVxuICAgKiBpZiBpdCBjb250YWlucyBhIHRyYWNpbmcgaGVhZGVyIHdpdGggXCJzYW1wbGVkPTFcIlxuICAgKi9cbiAgUEFTU19USFJPVUdIID0gXCJQYXNzVGhyb3VnaFwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgbm90IHRyYWNlIGFueSByZXF1ZXN0LlxuICAgKi9cbiAgRElTQUJMRUQgPSBcIkRpc2FibGVkXCIsXG59XG5cbi8qKlxuICogTGFtYmRhIHNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIHN5c3RlbSBsb2dzIGFib3V0IGZ1bmN0aW9uIGludm9jYXRpb25cbiAqIGdlbmVyYXRlZCBieSB0aGUgTGFtYmRhIHNlcnZpY2UgKGtub3duIGFzIHN5c3RlbSBsb2dzKSBhbmQgc2VuZHMgdGhlc2UgbG9ncyB0byBhXG4gKiBkZWZhdWx0IENsb3VkV2F0Y2ggbG9nIGdyb3VwIG5hbWVkIGFmdGVyIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbUxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VydmljZSBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIGxvZ3MgZ2VuZXJhdGVkIGJ5IHRoZSBmdW5jdGlvbiBjb2RlXG4gKiAoa25vd24gYXMgYXBwbGljYXRpb24gbG9ncykgYW5kIHNlbmRzIHRoZXNlIGxvZ3MgdG8gYSBkZWZhdWx0IENsb3VkV2F0Y2hcbiAqIGxvZyBncm91cCBuYW1lZCBhZnRlciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbkxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IHRyYWNlIGxldmVsLlxuICAgKi9cbiAgVFJBQ0UgPSBcIlRSQUNFXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBlcnJvciBsZXZlbC5cbiAgICovXG4gIEVSUk9SID0gXCJFUlJPUlwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgZmF0YWwgbGV2ZWwuXG4gICAqL1xuICBGQVRBTCA9IFwiRkFUQUxcIixcbn1cblxuLyoqXG4gKiBUaGlzIGZpZWxkIHRha2VzIGluIDIgdmFsdWVzIGVpdGhlciBUZXh0IG9yIEpTT04uIEJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBUZXh0LFxuICogd2lsbCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIGxvZ3MgZm9ybWF0LCB3aGVyZWFzLCBieSBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gSlNPTixcbiAqIExhbWJkYSB3aWxsIHByaW50IHRoZSBsb2dzIGFzIFN0cnVjdHVyZWQgSlNPTiBMb2dzLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBhbmQgbG9nIGxldmVsXG4gKiBvZiBlYWNoIGV2ZW50LiBTZWxlY3Rpbmcg4oCYSlNPTuKAmSBmb3JtYXQgd2lsbCBvbmx5IGFsbG93IGN1c3RvbWVy4oCZcyB0byBoYXZlIGRpZmZlcmVudCBsb2cgbGV2ZWxcbiAqIEFwcGxpY2F0aW9uIGxvZyBsZXZlbCBhbmQgdGhlIFN5c3RlbSBsb2cgbGV2ZWwuXG4gKi9cbmV4cG9ydCBlbnVtIExvZ2dpbmdGb3JtYXQge1xuICAvKipcbiAgICogTGFtYmRhIExvZ3MgdGV4dCBmb3JtYXQuXG4gICAqL1xuICBURVhUID0gXCJUZXh0XCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgc3RydWN0dXJlZCBsb2dnaW5nIGluIEpzb24gZm9ybWF0LlxuICAgKi9cbiAgSlNPTiA9IFwiSlNPTlwiLFxufVxuXG4vKipcbiAqIEEgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERscURlc3RpbmF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZGVzdGluYXRpb24gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBETFEgZm9yIGFuIGV2ZW50IHNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudFNvdXJjZURscSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBETFEgZGVzdGluYXRpb24gY29uZmlnIG9mIHRoZSBETFFcbiAgICovXG4gIGJpbmQoXG4gICAgdGFyZ2V0OiBJRXZlbnRTb3VyY2VNYXBwaW5nLFxuICAgIHRhcmdldEhhbmRsZXI6IElGdW5jdGlvbixcbiAgKTogRGxxRGVzdGluYXRpb25Db25maWc7XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./vpc-v2"), exports);
|
|
18
|
+
__exportStar(require("./ipam"), exports);
|
|
19
|
+
__exportStar(require("./vpc-v2-base"), exports);
|
|
20
|
+
__exportStar(require("./subnet-v2"), exports);
|
|
21
|
+
__exportStar(require("./route"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtYWxwaGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvaW5kZXgtYWxwaGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QjtBQUN6Qix5Q0FBdUI7QUFDdkIsZ0RBQThCO0FBQzlCLDhDQUE0QjtBQUM1QiwwQ0FBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi92cGMtdjJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2lwYW1cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZwYy12Mi1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JvdXRlXCI7XG4iXX0=
|
|
@@ -36,7 +36,67 @@ export * from "./states/custom-state";
|
|
|
36
36
|
export * from "./states/map-base";
|
|
37
37
|
export * from "./states/task-base";
|
|
38
38
|
export * from "./task-credentials";
|
|
39
|
+
export * from "./aspects/require-imdsv2-aspect";
|
|
40
|
+
export * from "./bastion-host";
|
|
41
|
+
export * from "./connections";
|
|
42
|
+
export * from "./instance-types";
|
|
43
|
+
export * from "./instance";
|
|
44
|
+
export * from "./launch-template";
|
|
45
|
+
export * from "./machine-image";
|
|
46
|
+
export * from "./nat";
|
|
47
|
+
export * from "./network-acl";
|
|
48
|
+
export * from "./network-acl-types";
|
|
49
|
+
export * from "./port";
|
|
50
|
+
export * from "./prefix-list";
|
|
51
|
+
export * from "./security-group";
|
|
52
|
+
export * from "./subnet";
|
|
53
|
+
export * from "./peer";
|
|
54
|
+
export * from "./volume";
|
|
55
|
+
export * from "./vpc";
|
|
56
|
+
export * from "./vpc-lookup";
|
|
57
|
+
export * from "./vpn";
|
|
58
|
+
export * from "./vpc-endpoint";
|
|
59
|
+
export * from "./vpc-endpoint-service";
|
|
60
|
+
export * from "./user-data";
|
|
61
|
+
export * from "./windows-versions";
|
|
62
|
+
export * from "./vpc-flow-logs";
|
|
63
|
+
export * from "./client-vpn-endpoint-types";
|
|
64
|
+
export * from "./client-vpn-endpoint";
|
|
65
|
+
export * from "./client-vpn-authorization-rule";
|
|
66
|
+
export * from "./client-vpn-route";
|
|
67
|
+
export * from "./ip-addresses";
|
|
68
|
+
export * from "./machine-image";
|
|
69
|
+
export * from "./placement-group";
|
|
70
|
+
export * from "./key-pair";
|
|
71
|
+
export * as alpha from "./index-alpha";
|
|
72
|
+
export * from "./load-balancer";
|
|
73
|
+
export * from "./alb/application-listener";
|
|
74
|
+
export * from "./alb/application-listener-certificate";
|
|
75
|
+
export * from "./alb/application-listener-rule";
|
|
76
|
+
export * from "./alb/application-load-balancer";
|
|
77
|
+
export * from "./alb/application-target-group";
|
|
78
|
+
export * from "./alb/application-listener-action";
|
|
79
|
+
export * from "./alb/conditions";
|
|
80
|
+
export * from "./alb/trust-store";
|
|
81
|
+
export * from "./alb/trust-store-revocation";
|
|
82
|
+
export * from "./nlb/network-listener";
|
|
83
|
+
export * from "./nlb/network-load-balancer";
|
|
84
|
+
export * from "./nlb/network-target-group";
|
|
85
|
+
export * from "./nlb/network-listener-action";
|
|
86
|
+
export * as lbtargets from "./lb-targets";
|
|
87
|
+
export * from "./lb-shared/grid-lookup-types";
|
|
88
|
+
export * from "./lb-shared/base-listener";
|
|
89
|
+
export * from "./lb-shared/base-load-balancer";
|
|
90
|
+
export * from "./lb-shared/base-target-group";
|
|
91
|
+
export * from "./lb-shared/enums";
|
|
92
|
+
export * from "./lb-shared/load-balancer-targets";
|
|
93
|
+
export * from "./lb-shared/listener-certificate";
|
|
94
|
+
export * from "./lb-shared/listener-action";
|
|
95
|
+
export * from "./lb-shared/lb-listener-config.generated";
|
|
96
|
+
export * from "./lb-shared/lb-target-group-attachment-config.generated";
|
|
39
97
|
export * as sources from "./event-sources";
|
|
40
98
|
export * as destinations from "./function-destinations";
|
|
41
99
|
export * as tasks from "./tasks";
|
|
42
100
|
export * from "./function-vpc-config.generated";
|
|
101
|
+
import "./ec2-augmentations.generated";
|
|
102
|
+
import "./lambda-augmentations.generated";
|
package/lib/aws/compute/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.tasks = exports.destinations = exports.sources = void 0;
|
|
17
|
+
exports.tasks = exports.destinations = exports.sources = exports.lbtargets = exports.alpha = void 0;
|
|
18
18
|
__exportStar(require("./event-source-filter"), exports);
|
|
19
19
|
__exportStar(require("./event-source-mapping"), exports);
|
|
20
20
|
__exportStar(require("./event-invoke-config"), exports);
|
|
@@ -56,9 +56,77 @@ __exportStar(require("./states/custom-state"), exports);
|
|
|
56
56
|
__exportStar(require("./states/map-base"), exports);
|
|
57
57
|
__exportStar(require("./states/task-base"), exports);
|
|
58
58
|
__exportStar(require("./task-credentials"), exports);
|
|
59
|
+
// ec2
|
|
60
|
+
__exportStar(require("./aspects/require-imdsv2-aspect"), exports);
|
|
61
|
+
__exportStar(require("./bastion-host"), exports);
|
|
62
|
+
__exportStar(require("./connections"), exports);
|
|
63
|
+
// export * from "./cfn-init";
|
|
64
|
+
// export * from "./cfn-init-elements";
|
|
65
|
+
__exportStar(require("./instance-types"), exports);
|
|
66
|
+
__exportStar(require("./instance"), exports);
|
|
67
|
+
__exportStar(require("./launch-template"), exports);
|
|
68
|
+
__exportStar(require("./machine-image"), exports);
|
|
69
|
+
__exportStar(require("./nat"), exports);
|
|
70
|
+
__exportStar(require("./network-acl"), exports);
|
|
71
|
+
__exportStar(require("./network-acl-types"), exports);
|
|
72
|
+
__exportStar(require("./port"), exports);
|
|
73
|
+
__exportStar(require("./prefix-list"), exports);
|
|
74
|
+
__exportStar(require("./security-group"), exports);
|
|
75
|
+
__exportStar(require("./subnet"), exports);
|
|
76
|
+
__exportStar(require("./peer"), exports);
|
|
77
|
+
__exportStar(require("./volume"), exports);
|
|
78
|
+
__exportStar(require("./vpc"), exports);
|
|
79
|
+
__exportStar(require("./vpc-lookup"), exports);
|
|
80
|
+
__exportStar(require("./vpn"), exports);
|
|
81
|
+
__exportStar(require("./vpc-endpoint"), exports);
|
|
82
|
+
__exportStar(require("./vpc-endpoint-service"), exports);
|
|
83
|
+
__exportStar(require("./user-data"), exports);
|
|
84
|
+
__exportStar(require("./windows-versions"), exports);
|
|
85
|
+
__exportStar(require("./vpc-flow-logs"), exports);
|
|
86
|
+
__exportStar(require("./client-vpn-endpoint-types"), exports);
|
|
87
|
+
__exportStar(require("./client-vpn-endpoint"), exports);
|
|
88
|
+
__exportStar(require("./client-vpn-authorization-rule"), exports);
|
|
89
|
+
__exportStar(require("./client-vpn-route"), exports);
|
|
90
|
+
__exportStar(require("./ip-addresses"), exports);
|
|
91
|
+
__exportStar(require("./machine-image"), exports);
|
|
92
|
+
__exportStar(require("./placement-group"), exports);
|
|
93
|
+
__exportStar(require("./key-pair"), exports);
|
|
94
|
+
// ec2-alpha
|
|
95
|
+
exports.alpha = require("./index-alpha");
|
|
96
|
+
// elasticloadbalancing
|
|
97
|
+
__exportStar(require("./load-balancer"), exports);
|
|
98
|
+
// elasticloadbalancingv2
|
|
99
|
+
__exportStar(require("./alb/application-listener"), exports);
|
|
100
|
+
__exportStar(require("./alb/application-listener-certificate"), exports);
|
|
101
|
+
__exportStar(require("./alb/application-listener-rule"), exports);
|
|
102
|
+
__exportStar(require("./alb/application-load-balancer"), exports);
|
|
103
|
+
__exportStar(require("./alb/application-target-group"), exports);
|
|
104
|
+
__exportStar(require("./alb/application-listener-action"), exports);
|
|
105
|
+
__exportStar(require("./alb/conditions"), exports);
|
|
106
|
+
__exportStar(require("./alb/trust-store"), exports);
|
|
107
|
+
__exportStar(require("./alb/trust-store-revocation"), exports);
|
|
108
|
+
__exportStar(require("./nlb/network-listener"), exports);
|
|
109
|
+
__exportStar(require("./nlb/network-load-balancer"), exports);
|
|
110
|
+
__exportStar(require("./nlb/network-target-group"), exports);
|
|
111
|
+
__exportStar(require("./nlb/network-listener-action"), exports);
|
|
112
|
+
// elasticloadbalancingv2-targets
|
|
113
|
+
exports.lbtargets = require("./lb-targets");
|
|
114
|
+
// temp export, required by base types
|
|
115
|
+
__exportStar(require("./lb-shared/grid-lookup-types"), exports);
|
|
116
|
+
__exportStar(require("./lb-shared/base-listener"), exports);
|
|
117
|
+
__exportStar(require("./lb-shared/base-load-balancer"), exports);
|
|
118
|
+
__exportStar(require("./lb-shared/base-target-group"), exports);
|
|
119
|
+
__exportStar(require("./lb-shared/enums"), exports);
|
|
120
|
+
__exportStar(require("./lb-shared/load-balancer-targets"), exports);
|
|
121
|
+
__exportStar(require("./lb-shared/listener-certificate"), exports);
|
|
122
|
+
__exportStar(require("./lb-shared/listener-action"), exports);
|
|
123
|
+
__exportStar(require("./lb-shared/lb-listener-config.generated"), exports);
|
|
124
|
+
__exportStar(require("./lb-shared/lb-target-group-attachment-config.generated"), exports);
|
|
59
125
|
exports.sources = require("./event-sources");
|
|
60
126
|
exports.destinations = require("./function-destinations");
|
|
61
127
|
exports.tasks = require("./tasks"); // State Machine Tasks
|
|
62
128
|
// generated by JSII Struct builder to please JSII pacman
|
|
63
129
|
__exportStar(require("./function-vpc-config.generated"), exports);
|
|
64
|
-
|
|
130
|
+
require("./ec2-augmentations.generated");
|
|
131
|
+
require("./lambda-augmentations.generated");
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0M7QUFDdEMseURBQXVDO0FBQ3ZDLHdEQUFzQztBQUN0QyxrREFBZ0M7QUFDaEMsNkNBQTJCO0FBQzNCLG1EQUFpQztBQUNqQyx5REFBdUM7QUFDdkMsb0RBQWtDO0FBQ2xDLHdEQUFzQztBQUN0QyxpREFBK0I7QUFDL0IsaURBQStCO0FBQy9CLGdCQUFnQjtBQUNoQiwyQ0FBeUI7QUFDekIsNkNBQTJCO0FBQzNCLCtDQUE2QjtBQUM3QiwwQ0FBd0I7QUFDeEIsOENBQTRCO0FBQzVCLGtEQUFnQztBQUNoQywyREFBeUM7QUFDekMsb0ZBQW9GO0FBQ3BGLDhDQUE4QztBQUM5QywwQ0FBd0I7QUFDeEIsZ0RBQThCO0FBQzlCLHdEQUFzQztBQUV0QyxrREFBZ0M7QUFDaEMsZ0RBQThCO0FBQzlCLG9EQUFrQztBQUNsQyxnREFBOEI7QUFDOUIsaURBQStCO0FBQy9CLG1EQUFpQztBQUNqQyxnREFBOEI7QUFDOUIsZ0RBQThCO0FBQzlCLCtDQUE2QjtBQUM3QiwyREFBeUM7QUFDekMsd0VBQXNEO0FBQ3RELHVFQUFxRDtBQUNyRCx5RUFBdUQ7QUFDdkQsd0RBQXNDO0FBRXRDLG9EQUFrQztBQUNsQyxxREFBbUM7QUFDbkMscURBQW1DO0FBRW5DLE1BQU07QUFDTixrRUFBZ0Q7QUFDaEQsaURBQStCO0FBQy9CLGdEQUE4QjtBQUM5Qiw4QkFBOEI7QUFDOUIsdUNBQXVDO0FBQ3ZDLG1EQUFpQztBQUNqQyw2Q0FBMkI7QUFDM0Isb0RBQWtDO0FBQ2xDLGtEQUFnQztBQUNoQyx3Q0FBc0I7QUFDdEIsZ0RBQThCO0FBQzlCLHNEQUFvQztBQUNwQyx5Q0FBdUI7QUFDdkIsZ0RBQThCO0FBQzlCLG1EQUFpQztBQUNqQywyQ0FBeUI7QUFDekIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6Qix3Q0FBc0I7QUFDdEIsK0NBQTZCO0FBQzdCLHdDQUFzQjtBQUN0QixpREFBK0I7QUFDL0IseURBQXVDO0FBQ3ZDLDhDQUE0QjtBQUM1QixxREFBbUM7QUFDbkMsa0RBQWdDO0FBQ2hDLDhEQUE0QztBQUM1Qyx3REFBc0M7QUFDdEMsa0VBQWdEO0FBQ2hELHFEQUFtQztBQUNuQyxpREFBK0I7QUFDL0Isa0RBQWdDO0FBQ2hDLG9EQUFrQztBQUNsQyw2Q0FBMkI7QUFDM0IsWUFBWTtBQUNaLHlDQUF1QztBQUV2Qyx1QkFBdUI7QUFDdkIsa0RBQWdDO0FBQ2hDLHlCQUF5QjtBQUN6Qiw2REFBMkM7QUFDM0MseUVBQXVEO0FBQ3ZELGtFQUFnRDtBQUNoRCxrRUFBZ0Q7QUFDaEQsaUVBQStDO0FBQy9DLG9FQUFrRDtBQUNsRCxtREFBaUM7QUFDakMsb0RBQWtDO0FBQ2xDLCtEQUE2QztBQUU3Qyx5REFBdUM7QUFDdkMsOERBQTRDO0FBQzVDLDZEQUEyQztBQUMzQyxnRUFBOEM7QUFFOUMsaUNBQWlDO0FBQ2pDLDRDQUEwQztBQUUxQyxzQ0FBc0M7QUFDdEMsZ0VBQThDO0FBQzlDLDREQUEwQztBQUMxQyxpRUFBK0M7QUFDL0MsZ0VBQThDO0FBQzlDLG9EQUFrQztBQUNsQyxvRUFBa0Q7QUFDbEQsbUVBQWlEO0FBQ2pELDhEQUE0QztBQUM1QywyRUFBeUQ7QUFDekQsMEZBQXdFO0FBRXhFLDZDQUEyQztBQUMzQywwREFBd0Q7QUFDeEQsbUNBQWlDLENBQUMsc0JBQXNCO0FBRXhELHlEQUF5RDtBQUN6RCxrRUFBZ0Q7QUFFaEQseUNBQXVDO0FBQ3ZDLDRDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2V2ZW50LXNvdXJjZS1maWx0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V2ZW50LXNvdXJjZS1tYXBwaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ldmVudC1pbnZva2UtY29uZmlnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mdW5jdGlvbi1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mdW5jdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb24tYWxpYXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uLWRlc3RpbmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mdW5jdGlvbi1ub2RlanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uLXBlcm1pc3Npb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uLXVybFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYXJjaGl0ZWN0dXJlXCI7XG4vLyBzdGVwZnVuY3Rpb25zXG5leHBvcnQgKiBmcm9tIFwiLi9maWVsZHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FjdGl2aXR5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YXNrLWlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uZGl0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZS1tYWNoaW5lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZS1tYWNoaW5lLWZyYWdtZW50XCI7XG4vLyBUT0RPOiBXaGVuIHJlLWFkZGluZywgbWFrZSBzdXJlIHRvIGFsc28gYWRkIHRlc3Qvc3RhdGUtdHJhbnNpdGlvbi1tZXRyaWNzLnRlc3QudHNcbi8vIGV4cG9ydCAqIGZyb20gXCIuL3N0YXRlLXRyYW5zaXRpb24tbWV0cmljc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2hhaW5cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlLWdyYXBoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGVwLWZ1bmN0aW9ucy10YXNrXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9jaG9pY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9mYWlsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvcGFyYWxsZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9wYXNzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvc3RhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9zdWNjZWVkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvdGFza1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGVzL3dhaXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9tYXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9kaXN0cmlidXRlZC1tYXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9kaXN0cmlidXRlZC1tYXAvaXRlbS1iYXRjaGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvZGlzdHJpYnV0ZWQtbWFwL2l0ZW0tcmVhZGVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvZGlzdHJpYnV0ZWQtbWFwL3Jlc3VsdC13cml0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N0YXRlcy9jdXN0b20tc3RhdGVcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vc3RhdGVzL21hcC1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zdGF0ZXMvdGFzay1iYXNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YXNrLWNyZWRlbnRpYWxzXCI7XG5cbi8vIGVjMlxuZXhwb3J0ICogZnJvbSBcIi4vYXNwZWN0cy9yZXF1aXJlLWltZHN2Mi1hc3BlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Jhc3Rpb24taG9zdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29ubmVjdGlvbnNcIjtcbi8vIGV4cG9ydCAqIGZyb20gXCIuL2Nmbi1pbml0XCI7XG4vLyBleHBvcnQgKiBmcm9tIFwiLi9jZm4taW5pdC1lbGVtZW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW5zdGFuY2UtdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luc3RhbmNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYXVuY2gtdGVtcGxhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21hY2hpbmUtaW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25hdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmV0d29yay1hY2xcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25ldHdvcmstYWNsLXR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wb3J0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcmVmaXgtbGlzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3N1Ym5ldFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcGVlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdm9sdW1lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92cGNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZwYy1sb29rdXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZwblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdnBjLWVuZHBvaW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi92cGMtZW5kcG9pbnQtc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdXNlci1kYXRhXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93aW5kb3dzLXZlcnNpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92cGMtZmxvdy1sb2dzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50LXR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jbGllbnQtdnBuLWF1dGhvcml6YXRpb24tcnVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2xpZW50LXZwbi1yb3V0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaXAtYWRkcmVzc2VzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYWNoaW5lLWltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wbGFjZW1lbnQtZ3JvdXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2tleS1wYWlyXCI7XG4vLyBlYzItYWxwaGFcbmV4cG9ydCAqIGFzIGFscGhhIGZyb20gXCIuL2luZGV4LWFscGhhXCI7XG5cbi8vIGVsYXN0aWNsb2FkYmFsYW5jaW5nXG5leHBvcnQgKiBmcm9tIFwiLi9sb2FkLWJhbGFuY2VyXCI7XG4vLyBlbGFzdGljbG9hZGJhbGFuY2luZ3YyXG5leHBvcnQgKiBmcm9tIFwiLi9hbGIvYXBwbGljYXRpb24tbGlzdGVuZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FsYi9hcHBsaWNhdGlvbi1saXN0ZW5lci1jZXJ0aWZpY2F0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWxiL2FwcGxpY2F0aW9uLWxpc3RlbmVyLXJ1bGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2FsYi9hcHBsaWNhdGlvbi1sb2FkLWJhbGFuY2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hbGIvYXBwbGljYXRpb24tdGFyZ2V0LWdyb3VwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hbGIvYXBwbGljYXRpb24tbGlzdGVuZXItYWN0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hbGIvY29uZGl0aW9uc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vYWxiL3RydXN0LXN0b3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hbGIvdHJ1c3Qtc3RvcmUtcmV2b2NhdGlvblwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9ubGIvbmV0d29yay1saXN0ZW5lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmxiL25ldHdvcmstbG9hZC1iYWxhbmNlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbmxiL25ldHdvcmstdGFyZ2V0LWdyb3VwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9ubGIvbmV0d29yay1saXN0ZW5lci1hY3Rpb25cIjtcblxuLy8gZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRzXG5leHBvcnQgKiBhcyBsYnRhcmdldHMgZnJvbSBcIi4vbGItdGFyZ2V0c1wiO1xuXG4vLyB0ZW1wIGV4cG9ydCwgcmVxdWlyZWQgYnkgYmFzZSB0eXBlc1xuZXhwb3J0ICogZnJvbSBcIi4vbGItc2hhcmVkL2dyaWQtbG9va3VwLXR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYi1zaGFyZWQvYmFzZS1saXN0ZW5lclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGItc2hhcmVkL2Jhc2UtbG9hZC1iYWxhbmNlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGItc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sYi1zaGFyZWQvZW51bXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xiLXNoYXJlZC9sb2FkLWJhbGFuY2VyLXRhcmdldHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xiLXNoYXJlZC9saXN0ZW5lci1jZXJ0aWZpY2F0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGItc2hhcmVkL2xpc3RlbmVyLWFjdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbGItc2hhcmVkL2xiLWxpc3RlbmVyLWNvbmZpZy5nZW5lcmF0ZWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xiLXNoYXJlZC9sYi10YXJnZXQtZ3JvdXAtYXR0YWNobWVudC1jb25maWcuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCAqIGFzIHNvdXJjZXMgZnJvbSBcIi4vZXZlbnQtc291cmNlc1wiO1xuZXhwb3J0ICogYXMgZGVzdGluYXRpb25zIGZyb20gXCIuL2Z1bmN0aW9uLWRlc3RpbmF0aW9uc1wiO1xuZXhwb3J0ICogYXMgdGFza3MgZnJvbSBcIi4vdGFza3NcIjsgLy8gU3RhdGUgTWFjaGluZSBUYXNrc1xuXG4vLyBnZW5lcmF0ZWQgYnkgSlNJSSBTdHJ1Y3QgYnVpbGRlciB0byBwbGVhc2UgSlNJSSBwYWNtYW5cbmV4cG9ydCAqIGZyb20gXCIuL2Z1bmN0aW9uLXZwYy1jb25maWcuZ2VuZXJhdGVkXCI7XG5cbmltcG9ydCBcIi4vZWMyLWF1Z21lbnRhdGlvbnMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgXCIuL2xhbWJkYS1hdWdtZW50YXRpb25zLmdlbmVyYXRlZFwiO1xuIl19
|