@aws-cdk/aws-msk-alpha 2.41.0-alpha.0 → 2.42.0-alpha.0
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 +112 -24
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +13 -1
- package/README.md +31 -2
- package/lib/cluster-version.js +1 -1
- package/lib/cluster.d.ts +9 -0
- package/lib/cluster.js +26 -3
- package/package.json +8 -8
package/.jsii
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"url": "https://aws.amazon.com"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"aws-cdk-lib": "^2.
|
|
11
|
+
"aws-cdk-lib": "^2.42.0",
|
|
12
12
|
"constructs": "^10.0.0"
|
|
13
13
|
},
|
|
14
14
|
"dependencyClosure": {
|
|
@@ -730,6 +730,19 @@
|
|
|
730
730
|
}
|
|
731
731
|
}
|
|
732
732
|
},
|
|
733
|
+
"aws-cdk-lib.aws_controltower": {
|
|
734
|
+
"targets": {
|
|
735
|
+
"dotnet": {
|
|
736
|
+
"namespace": "Amazon.CDK.AWS.ControlTower"
|
|
737
|
+
},
|
|
738
|
+
"java": {
|
|
739
|
+
"package": "software.amazon.awscdk.services.controltower"
|
|
740
|
+
},
|
|
741
|
+
"python": {
|
|
742
|
+
"module": "aws_cdk.aws_controltower"
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
},
|
|
733
746
|
"aws-cdk-lib.aws_cur": {
|
|
734
747
|
"targets": {
|
|
735
748
|
"dotnet": {
|
|
@@ -1848,6 +1861,19 @@
|
|
|
1848
1861
|
}
|
|
1849
1862
|
}
|
|
1850
1863
|
},
|
|
1864
|
+
"aws-cdk-lib.aws_m2": {
|
|
1865
|
+
"targets": {
|
|
1866
|
+
"dotnet": {
|
|
1867
|
+
"namespace": "Amazon.CDK.AWS.M2"
|
|
1868
|
+
},
|
|
1869
|
+
"java": {
|
|
1870
|
+
"package": "software.amazon.awscdk.services.m2"
|
|
1871
|
+
},
|
|
1872
|
+
"python": {
|
|
1873
|
+
"module": "aws_cdk.aws_m2"
|
|
1874
|
+
}
|
|
1875
|
+
}
|
|
1876
|
+
},
|
|
1851
1877
|
"aws-cdk-lib.aws_macie": {
|
|
1852
1878
|
"targets": {
|
|
1853
1879
|
"dotnet": {
|
|
@@ -2706,6 +2732,19 @@
|
|
|
2706
2732
|
}
|
|
2707
2733
|
}
|
|
2708
2734
|
},
|
|
2735
|
+
"aws-cdk-lib.aws_supportapp": {
|
|
2736
|
+
"targets": {
|
|
2737
|
+
"dotnet": {
|
|
2738
|
+
"namespace": "Amazon.CDK.AWS.SupportApp"
|
|
2739
|
+
},
|
|
2740
|
+
"java": {
|
|
2741
|
+
"package": "software.amazon.awscdk.services.supportapp"
|
|
2742
|
+
},
|
|
2743
|
+
"python": {
|
|
2744
|
+
"module": "aws_cdk.aws_supportapp"
|
|
2745
|
+
}
|
|
2746
|
+
}
|
|
2747
|
+
},
|
|
2709
2748
|
"aws-cdk-lib.aws_synthetics": {
|
|
2710
2749
|
"targets": {
|
|
2711
2750
|
"dotnet": {
|
|
@@ -3046,7 +3085,7 @@
|
|
|
3046
3085
|
},
|
|
3047
3086
|
"name": "@aws-cdk/aws-msk-alpha",
|
|
3048
3087
|
"readme": {
|
|
3049
|
-
"markdown": "# Amazon Managed Streaming for Apache Kafka Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\n[Amazon MSK](https://aws.amazon.com/msk/) is a fully managed service that makes it easy for you to build and run applications that use Apache Kafka to process streaming data.\n\nThe following example creates an MSK Cluster.\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n});\n```\n\n## Allowing Connections\n\nTo control who can access the Cluster, use the `.connections` attribute. For a list of ports used by MSK, refer to the [MSK documentation](https://docs.aws.amazon.com/msk/latest/developerguide/client-access.html#port-info).\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n});\n\ncluster.connections.allowFrom(\n ec2.Peer.ipv4('1.2.3.4/8'),\n ec2.Port.tcp(2181),\n);\ncluster.connections.allowFrom(\n ec2.Peer.ipv4('1.2.3.4/8'),\n ec2.Port.tcp(9094),\n);\n```\n\n## Cluster Endpoints\n\nYou can use the following attributes to get a list of the Kafka broker or ZooKeeper node endpoints\n\n```ts\ndeclare const cluster: msk.Cluster;\nnew CfnOutput(this, 'BootstrapBrokers', { value: cluster.bootstrapBrokers });\nnew CfnOutput(this, 'BootstrapBrokersTls', { value: cluster.bootstrapBrokersTls });\nnew CfnOutput(this, 'BootstrapBrokersSaslScram', { value: cluster.bootstrapBrokersSaslScram });\nnew CfnOutput(this, 'BootstrapBrokerStringSaslIam', { value: cluster.bootstrapBrokersSaslIam });\nnew CfnOutput(this, 'ZookeeperConnection', { value: cluster.zookeeperConnectionString });\nnew CfnOutput(this, 'ZookeeperConnectionTls', { value: cluster.zookeeperConnectionStringTls });\n```\n\n## Importing an existing Cluster\n\nTo import an existing MSK cluster into your CDK app use the `.fromClusterArn()` method.\n\n```ts\nconst cluster = msk.Cluster.fromClusterArn(this, 'Cluster',\n 'arn:aws:kafka:us-west-2:1234567890:cluster/a-cluster/11111111-1111-1111-1111-111111111111-1',\n);\n```\n\n## Client Authentication\n\n[MSK supports](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) the following authentication mechanisms.\n\n
|
|
3088
|
+
"markdown": "# Amazon Managed Streaming for Apache Kafka Construct Library\n<!--BEGIN STABILITY BANNER-->\n\n---\n\n\n\n> The APIs of higher level constructs in this module are experimental and under active development.\n> They are subject to non-backward compatible changes or removal in any future version. These are\n> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be\n> announced in the release notes. This means that while you may use them, you may need to update\n> your source code when upgrading to a newer version of this package.\n\n---\n\n<!--END STABILITY BANNER-->\n\n[Amazon MSK](https://aws.amazon.com/msk/) is a fully managed service that makes it easy for you to build and run applications that use Apache Kafka to process streaming data.\n\nThe following example creates an MSK Cluster.\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n});\n```\n\n## Allowing Connections\n\nTo control who can access the Cluster, use the `.connections` attribute. For a list of ports used by MSK, refer to the [MSK documentation](https://docs.aws.amazon.com/msk/latest/developerguide/client-access.html#port-info).\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n});\n\ncluster.connections.allowFrom(\n ec2.Peer.ipv4('1.2.3.4/8'),\n ec2.Port.tcp(2181),\n);\ncluster.connections.allowFrom(\n ec2.Peer.ipv4('1.2.3.4/8'),\n ec2.Port.tcp(9094),\n);\n```\n\n## Cluster Endpoints\n\nYou can use the following attributes to get a list of the Kafka broker or ZooKeeper node endpoints\n\n```ts\ndeclare const cluster: msk.Cluster;\nnew CfnOutput(this, 'BootstrapBrokers', { value: cluster.bootstrapBrokers });\nnew CfnOutput(this, 'BootstrapBrokersTls', { value: cluster.bootstrapBrokersTls });\nnew CfnOutput(this, 'BootstrapBrokersSaslScram', { value: cluster.bootstrapBrokersSaslScram });\nnew CfnOutput(this, 'BootstrapBrokerStringSaslIam', { value: cluster.bootstrapBrokersSaslIam });\nnew CfnOutput(this, 'ZookeeperConnection', { value: cluster.zookeeperConnectionString });\nnew CfnOutput(this, 'ZookeeperConnectionTls', { value: cluster.zookeeperConnectionStringTls });\n```\n\n## Importing an existing Cluster\n\nTo import an existing MSK cluster into your CDK app use the `.fromClusterArn()` method.\n\n```ts\nconst cluster = msk.Cluster.fromClusterArn(this, 'Cluster',\n 'arn:aws:kafka:us-west-2:1234567890:cluster/a-cluster/11111111-1111-1111-1111-111111111111-1',\n);\n```\n\n## Client Authentication\n\n[MSK supports](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) the following authentication mechanisms.\n\n### TLS\n\nTo enable client authentication with TLS set the `certificateAuthorityArns` property to reference your ACM Private CA. [More info on Private CAs.](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)\n\n```ts\nimport * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.tls({\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});\n```\n\n### SASL/SCRAM\n\nEnable client authentication with [SASL/SCRAM](https://docs.aws.amazon.com/msk/latest/developerguide/msk-password.html):\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.sasl({\n scram: true,\n }),\n});\n```\n\n### SASL/IAM\n\nEnable client authentication with [IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html):\n\n```ts\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.sasl({\n iam: true,\n }),\n});\n```\n\n\n### SASL/IAM + TLS\n\nEnable client authentication with [IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html)\nas well as enable client authentication with TLS by setting the `certificateAuthorityArns` property to reference your ACM Private CA. [More info on Private CAs.](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)\n\n```ts\nimport * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.saslTls({\n iam: true,\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});\n```\n\n\n## Logging\n\nYou can deliver Apache Kafka broker logs to one or more of the following destination types:\nAmazon CloudWatch Logs, Amazon S3, Amazon Kinesis Data Firehose.\n\nTo configure logs to be sent to an S3 bucket, provide a bucket in the `logging` config.\n\n```ts\ndeclare const vpc: ec2.Vpc;\ndeclare const bucket: s3.IBucket;\nconst cluster = new msk.Cluster(this, 'cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n logging: {\n s3: {\n bucket,\n },\n },\n});\n```\n\nWhen the S3 destination is configured, AWS will automatically create an S3 bucket policy\nthat allows the service to write logs to the bucket. This makes it impossible to later update\nthat bucket policy. To have CDK create the bucket policy so that future updates can be made,\nthe `@aws-cdk/aws-s3:createDefaultLoggingPolicy` [feature flag](https://docs.aws.amazon.com/cdk/v2/guide/featureflags.html) can be used. This can be set\nin the `cdk.json` file.\n\n```json\n{\n \"context\": {\n \"@aws-cdk/aws-s3:createDefaultLoggingPolicy\": true\n }\n}\n```\n\n"
|
|
3050
3089
|
},
|
|
3051
3090
|
"repository": {
|
|
3052
3091
|
"directory": "packages/individual-packages/aws-msk",
|
|
@@ -3165,7 +3204,7 @@
|
|
|
3165
3204
|
"docs": {
|
|
3166
3205
|
"stability": "experimental",
|
|
3167
3206
|
"summary": "Configuration properties for client authentication.",
|
|
3168
|
-
"example": "
|
|
3207
|
+
"example": "import * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.tls({\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});",
|
|
3169
3208
|
"custom": {
|
|
3170
3209
|
"exampleMetadata": "infused"
|
|
3171
3210
|
}
|
|
@@ -3174,7 +3213,7 @@
|
|
|
3174
3213
|
"kind": "class",
|
|
3175
3214
|
"locationInModule": {
|
|
3176
3215
|
"filename": "lib/cluster.ts",
|
|
3177
|
-
"line":
|
|
3216
|
+
"line": 354
|
|
3178
3217
|
},
|
|
3179
3218
|
"methods": [
|
|
3180
3219
|
{
|
|
@@ -3184,7 +3223,7 @@
|
|
|
3184
3223
|
},
|
|
3185
3224
|
"locationInModule": {
|
|
3186
3225
|
"filename": "lib/cluster.ts",
|
|
3187
|
-
"line":
|
|
3226
|
+
"line": 358
|
|
3188
3227
|
},
|
|
3189
3228
|
"name": "sasl",
|
|
3190
3229
|
"parameters": [
|
|
@@ -3202,6 +3241,31 @@
|
|
|
3202
3241
|
},
|
|
3203
3242
|
"static": true
|
|
3204
3243
|
},
|
|
3244
|
+
{
|
|
3245
|
+
"docs": {
|
|
3246
|
+
"stability": "experimental",
|
|
3247
|
+
"summary": "SASL + TLS authentication."
|
|
3248
|
+
},
|
|
3249
|
+
"locationInModule": {
|
|
3250
|
+
"filename": "lib/cluster.ts",
|
|
3251
|
+
"line": 372
|
|
3252
|
+
},
|
|
3253
|
+
"name": "saslTls",
|
|
3254
|
+
"parameters": [
|
|
3255
|
+
{
|
|
3256
|
+
"name": "saslTlsProps",
|
|
3257
|
+
"type": {
|
|
3258
|
+
"fqn": "@aws-cdk/aws-msk-alpha.SaslTlsAuthProps"
|
|
3259
|
+
}
|
|
3260
|
+
}
|
|
3261
|
+
],
|
|
3262
|
+
"returns": {
|
|
3263
|
+
"type": {
|
|
3264
|
+
"fqn": "@aws-cdk/aws-msk-alpha.ClientAuthentication"
|
|
3265
|
+
}
|
|
3266
|
+
},
|
|
3267
|
+
"static": true
|
|
3268
|
+
},
|
|
3205
3269
|
{
|
|
3206
3270
|
"docs": {
|
|
3207
3271
|
"stability": "experimental",
|
|
@@ -3209,7 +3273,7 @@
|
|
|
3209
3273
|
},
|
|
3210
3274
|
"locationInModule": {
|
|
3211
3275
|
"filename": "lib/cluster.ts",
|
|
3212
|
-
"line":
|
|
3276
|
+
"line": 365
|
|
3213
3277
|
},
|
|
3214
3278
|
"name": "tls",
|
|
3215
3279
|
"parameters": [
|
|
@@ -3238,7 +3302,7 @@
|
|
|
3238
3302
|
"immutable": true,
|
|
3239
3303
|
"locationInModule": {
|
|
3240
3304
|
"filename": "lib/cluster.ts",
|
|
3241
|
-
"line":
|
|
3305
|
+
"line": 381
|
|
3242
3306
|
},
|
|
3243
3307
|
"name": "saslProps",
|
|
3244
3308
|
"optional": true,
|
|
@@ -3254,7 +3318,7 @@
|
|
|
3254
3318
|
"immutable": true,
|
|
3255
3319
|
"locationInModule": {
|
|
3256
3320
|
"filename": "lib/cluster.ts",
|
|
3257
|
-
"line":
|
|
3321
|
+
"line": 382
|
|
3258
3322
|
},
|
|
3259
3323
|
"name": "tlsProps",
|
|
3260
3324
|
"optional": true,
|
|
@@ -3270,7 +3334,7 @@
|
|
|
3270
3334
|
"docs": {
|
|
3271
3335
|
"stability": "experimental",
|
|
3272
3336
|
"summary": "Indicates the encryption setting for data in transit between clients and brokers.",
|
|
3273
|
-
"example": "
|
|
3337
|
+
"example": "import * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.tls({\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});",
|
|
3274
3338
|
"custom": {
|
|
3275
3339
|
"exampleMetadata": "infused"
|
|
3276
3340
|
}
|
|
@@ -3326,7 +3390,7 @@
|
|
|
3326
3390
|
},
|
|
3327
3391
|
"locationInModule": {
|
|
3328
3392
|
"filename": "lib/cluster.ts",
|
|
3329
|
-
"line":
|
|
3393
|
+
"line": 415
|
|
3330
3394
|
},
|
|
3331
3395
|
"parameters": [
|
|
3332
3396
|
{
|
|
@@ -3355,7 +3419,7 @@
|
|
|
3355
3419
|
"kind": "class",
|
|
3356
3420
|
"locationInModule": {
|
|
3357
3421
|
"filename": "lib/cluster.ts",
|
|
3358
|
-
"line":
|
|
3422
|
+
"line": 391
|
|
3359
3423
|
},
|
|
3360
3424
|
"methods": [
|
|
3361
3425
|
{
|
|
@@ -3365,7 +3429,7 @@
|
|
|
3365
3429
|
},
|
|
3366
3430
|
"locationInModule": {
|
|
3367
3431
|
"filename": "lib/cluster.ts",
|
|
3368
|
-
"line":
|
|
3432
|
+
"line": 395
|
|
3369
3433
|
},
|
|
3370
3434
|
"name": "fromClusterArn",
|
|
3371
3435
|
"parameters": [
|
|
@@ -3403,7 +3467,7 @@
|
|
|
3403
3467
|
},
|
|
3404
3468
|
"locationInModule": {
|
|
3405
3469
|
"filename": "lib/cluster.ts",
|
|
3406
|
-
"line":
|
|
3470
|
+
"line": 834
|
|
3407
3471
|
},
|
|
3408
3472
|
"name": "addUser",
|
|
3409
3473
|
"parameters": [
|
|
@@ -3433,7 +3497,7 @@
|
|
|
3433
3497
|
"immutable": true,
|
|
3434
3498
|
"locationInModule": {
|
|
3435
3499
|
"filename": "lib/cluster.ts",
|
|
3436
|
-
"line":
|
|
3500
|
+
"line": 789
|
|
3437
3501
|
},
|
|
3438
3502
|
"name": "bootstrapBrokers",
|
|
3439
3503
|
"type": {
|
|
@@ -3450,7 +3514,7 @@
|
|
|
3450
3514
|
"immutable": true,
|
|
3451
3515
|
"locationInModule": {
|
|
3452
3516
|
"filename": "lib/cluster.ts",
|
|
3453
|
-
"line":
|
|
3517
|
+
"line": 822
|
|
3454
3518
|
},
|
|
3455
3519
|
"name": "bootstrapBrokersSaslIam",
|
|
3456
3520
|
"type": {
|
|
@@ -3467,7 +3531,7 @@
|
|
|
3467
3531
|
"immutable": true,
|
|
3468
3532
|
"locationInModule": {
|
|
3469
3533
|
"filename": "lib/cluster.ts",
|
|
3470
|
-
"line":
|
|
3534
|
+
"line": 811
|
|
3471
3535
|
},
|
|
3472
3536
|
"name": "bootstrapBrokersSaslScram",
|
|
3473
3537
|
"type": {
|
|
@@ -3484,7 +3548,7 @@
|
|
|
3484
3548
|
"immutable": true,
|
|
3485
3549
|
"locationInModule": {
|
|
3486
3550
|
"filename": "lib/cluster.ts",
|
|
3487
|
-
"line":
|
|
3551
|
+
"line": 800
|
|
3488
3552
|
},
|
|
3489
3553
|
"name": "bootstrapBrokersTls",
|
|
3490
3554
|
"type": {
|
|
@@ -3499,7 +3563,7 @@
|
|
|
3499
3563
|
"immutable": true,
|
|
3500
3564
|
"locationInModule": {
|
|
3501
3565
|
"filename": "lib/cluster.ts",
|
|
3502
|
-
"line":
|
|
3566
|
+
"line": 408
|
|
3503
3567
|
},
|
|
3504
3568
|
"name": "clusterArn",
|
|
3505
3569
|
"overrides": "@aws-cdk/aws-msk-alpha.ICluster",
|
|
@@ -3515,7 +3579,7 @@
|
|
|
3515
3579
|
"immutable": true,
|
|
3516
3580
|
"locationInModule": {
|
|
3517
3581
|
"filename": "lib/cluster.ts",
|
|
3518
|
-
"line":
|
|
3582
|
+
"line": 409
|
|
3519
3583
|
},
|
|
3520
3584
|
"name": "clusterName",
|
|
3521
3585
|
"overrides": "@aws-cdk/aws-msk-alpha.ICluster",
|
|
@@ -3549,7 +3613,7 @@
|
|
|
3549
3613
|
"immutable": true,
|
|
3550
3614
|
"locationInModule": {
|
|
3551
3615
|
"filename": "lib/cluster.ts",
|
|
3552
|
-
"line":
|
|
3616
|
+
"line": 740
|
|
3553
3617
|
},
|
|
3554
3618
|
"name": "zookeeperConnectionString",
|
|
3555
3619
|
"type": {
|
|
@@ -3566,7 +3630,7 @@
|
|
|
3566
3630
|
"immutable": true,
|
|
3567
3631
|
"locationInModule": {
|
|
3568
3632
|
"filename": "lib/cluster.ts",
|
|
3569
|
-
"line":
|
|
3633
|
+
"line": 751
|
|
3570
3634
|
},
|
|
3571
3635
|
"name": "zookeeperConnectionStringTls",
|
|
3572
3636
|
"type": {
|
|
@@ -3581,7 +3645,7 @@
|
|
|
3581
3645
|
"immutable": true,
|
|
3582
3646
|
"locationInModule": {
|
|
3583
3647
|
"filename": "lib/cluster.ts",
|
|
3584
|
-
"line":
|
|
3648
|
+
"line": 411
|
|
3585
3649
|
},
|
|
3586
3650
|
"name": "saslScramAuthenticationKey",
|
|
3587
3651
|
"optional": true,
|
|
@@ -4036,7 +4100,7 @@
|
|
|
4036
4100
|
"see": "https://docs.aws.amazon.com/msk/latest/developerguide/msk-encryption.html#msk-encryption-in-transit",
|
|
4037
4101
|
"stability": "experimental",
|
|
4038
4102
|
"summary": "The settings for encrypting data in transit.",
|
|
4039
|
-
"example": "
|
|
4103
|
+
"example": "import * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.tls({\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});",
|
|
4040
4104
|
"custom": {
|
|
4041
4105
|
"exampleMetadata": "infused"
|
|
4042
4106
|
}
|
|
@@ -4661,6 +4725,30 @@
|
|
|
4661
4725
|
],
|
|
4662
4726
|
"symbolId": "lib/cluster:SaslAuthProps"
|
|
4663
4727
|
},
|
|
4728
|
+
"@aws-cdk/aws-msk-alpha.SaslTlsAuthProps": {
|
|
4729
|
+
"assembly": "@aws-cdk/aws-msk-alpha",
|
|
4730
|
+
"datatype": true,
|
|
4731
|
+
"docs": {
|
|
4732
|
+
"stability": "experimental",
|
|
4733
|
+
"summary": "SASL + TLS authentication properties.",
|
|
4734
|
+
"example": "import * as acmpca from 'aws-cdk-lib/aws-acmpca';\n\ndeclare const vpc: ec2.Vpc;\nconst cluster = new msk.Cluster(this, 'Cluster', {\n clusterName: 'myCluster',\n kafkaVersion: msk.KafkaVersion.V2_8_1,\n vpc,\n encryptionInTransit: {\n clientBroker: msk.ClientBrokerEncryption.TLS,\n },\n clientAuthentication: msk.ClientAuthentication.saslTls({\n iam: true,\n certificateAuthorities: [\n acmpca.CertificateAuthority.fromCertificateAuthorityArn(\n this,\n 'CertificateAuthority',\n 'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',\n ),\n ],\n }),\n});",
|
|
4735
|
+
"custom": {
|
|
4736
|
+
"exampleMetadata": "infused"
|
|
4737
|
+
}
|
|
4738
|
+
},
|
|
4739
|
+
"fqn": "@aws-cdk/aws-msk-alpha.SaslTlsAuthProps",
|
|
4740
|
+
"interfaces": [
|
|
4741
|
+
"@aws-cdk/aws-msk-alpha.SaslAuthProps",
|
|
4742
|
+
"@aws-cdk/aws-msk-alpha.TlsAuthProps"
|
|
4743
|
+
],
|
|
4744
|
+
"kind": "interface",
|
|
4745
|
+
"locationInModule": {
|
|
4746
|
+
"filename": "lib/cluster.ts",
|
|
4747
|
+
"line": 349
|
|
4748
|
+
},
|
|
4749
|
+
"name": "SaslTlsAuthProps",
|
|
4750
|
+
"symbolId": "lib/cluster:SaslTlsAuthProps"
|
|
4751
|
+
},
|
|
4664
4752
|
"@aws-cdk/aws-msk-alpha.TlsAuthProps": {
|
|
4665
4753
|
"assembly": "@aws-cdk/aws-msk-alpha",
|
|
4666
4754
|
"datatype": true,
|
|
@@ -4707,6 +4795,6 @@
|
|
|
4707
4795
|
"symbolId": "lib/cluster:TlsAuthProps"
|
|
4708
4796
|
}
|
|
4709
4797
|
},
|
|
4710
|
-
"version": "2.
|
|
4798
|
+
"version": "2.42.0-alpha.0",
|
|
4711
4799
|
"fingerprint": "**********"
|
|
4712
4800
|
}
|
package/.jsii.tabl.json.gz
CHANGED
|
Binary file
|
package/.warnings.jsii.js
CHANGED
|
@@ -86,6 +86,18 @@ function _aws_cdk_aws_msk_alpha_TlsAuthProps(p) {
|
|
|
86
86
|
visitedObjects.delete(p);
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
+
function _aws_cdk_aws_msk_alpha_SaslTlsAuthProps(p) {
|
|
90
|
+
if (p == null)
|
|
91
|
+
return;
|
|
92
|
+
visitedObjects.add(p);
|
|
93
|
+
try {
|
|
94
|
+
if (!visitedObjects.has(p.certificateAuthorities))
|
|
95
|
+
require("aws-cdk-lib/.warnings.jsii.js").aws_cdk_lib_aws_acmpca_ICertificateAuthority(p.certificateAuthorities);
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
visitedObjects.delete(p);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
89
101
|
function _aws_cdk_aws_msk_alpha_ClientAuthentication(p) {
|
|
90
102
|
}
|
|
91
103
|
function _aws_cdk_aws_msk_alpha_Cluster(p) {
|
|
@@ -128,4 +140,4 @@ class DeprecationError extends Error {
|
|
|
128
140
|
});
|
|
129
141
|
}
|
|
130
142
|
}
|
|
131
|
-
module.exports = { print, getPropertyDescriptor, DeprecationError, _aws_cdk_aws_msk_alpha_ICluster, _aws_cdk_aws_msk_alpha_ClusterProps, _aws_cdk_aws_msk_alpha_EbsStorageInfo, _aws_cdk_aws_msk_alpha_ClusterConfigurationInfo, _aws_cdk_aws_msk_alpha_ClusterMonitoringLevel, _aws_cdk_aws_msk_alpha_MonitoringConfiguration, _aws_cdk_aws_msk_alpha_BrokerLogging, _aws_cdk_aws_msk_alpha_S3LoggingConfiguration, _aws_cdk_aws_msk_alpha_ClientBrokerEncryption, _aws_cdk_aws_msk_alpha_EncryptionInTransitConfig, _aws_cdk_aws_msk_alpha_SaslAuthProps, _aws_cdk_aws_msk_alpha_TlsAuthProps, _aws_cdk_aws_msk_alpha_ClientAuthentication, _aws_cdk_aws_msk_alpha_Cluster, _aws_cdk_aws_msk_alpha_KafkaVersion };
|
|
143
|
+
module.exports = { print, getPropertyDescriptor, DeprecationError, _aws_cdk_aws_msk_alpha_ICluster, _aws_cdk_aws_msk_alpha_ClusterProps, _aws_cdk_aws_msk_alpha_EbsStorageInfo, _aws_cdk_aws_msk_alpha_ClusterConfigurationInfo, _aws_cdk_aws_msk_alpha_ClusterMonitoringLevel, _aws_cdk_aws_msk_alpha_MonitoringConfiguration, _aws_cdk_aws_msk_alpha_BrokerLogging, _aws_cdk_aws_msk_alpha_S3LoggingConfiguration, _aws_cdk_aws_msk_alpha_ClientBrokerEncryption, _aws_cdk_aws_msk_alpha_EncryptionInTransitConfig, _aws_cdk_aws_msk_alpha_SaslAuthProps, _aws_cdk_aws_msk_alpha_TlsAuthProps, _aws_cdk_aws_msk_alpha_SaslTlsAuthProps, _aws_cdk_aws_msk_alpha_ClientAuthentication, _aws_cdk_aws_msk_alpha_Cluster, _aws_cdk_aws_msk_alpha_KafkaVersion };
|
package/README.md
CHANGED
|
@@ -78,8 +78,6 @@ const cluster = msk.Cluster.fromClusterArn(this, 'Cluster',
|
|
|
78
78
|
|
|
79
79
|
[MSK supports](https://docs.aws.amazon.com/msk/latest/developerguide/kafka_apis_iam.html) the following authentication mechanisms.
|
|
80
80
|
|
|
81
|
-
> Only one authentication method can be enabled.
|
|
82
|
-
|
|
83
81
|
### TLS
|
|
84
82
|
|
|
85
83
|
To enable client authentication with TLS set the `certificateAuthorityArns` property to reference your ACM Private CA. [More info on Private CAs.](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)
|
|
@@ -145,6 +143,37 @@ const cluster = new msk.Cluster(this, 'cluster', {
|
|
|
145
143
|
});
|
|
146
144
|
```
|
|
147
145
|
|
|
146
|
+
|
|
147
|
+
### SASL/IAM + TLS
|
|
148
|
+
|
|
149
|
+
Enable client authentication with [IAM](https://docs.aws.amazon.com/msk/latest/developerguide/iam-access-control.html)
|
|
150
|
+
as well as enable client authentication with TLS by setting the `certificateAuthorityArns` property to reference your ACM Private CA. [More info on Private CAs.](https://docs.aws.amazon.com/msk/latest/developerguide/msk-authentication.html)
|
|
151
|
+
|
|
152
|
+
```ts
|
|
153
|
+
import * as acmpca from 'aws-cdk-lib/aws-acmpca';
|
|
154
|
+
|
|
155
|
+
declare const vpc: ec2.Vpc;
|
|
156
|
+
const cluster = new msk.Cluster(this, 'Cluster', {
|
|
157
|
+
clusterName: 'myCluster',
|
|
158
|
+
kafkaVersion: msk.KafkaVersion.V2_8_1,
|
|
159
|
+
vpc,
|
|
160
|
+
encryptionInTransit: {
|
|
161
|
+
clientBroker: msk.ClientBrokerEncryption.TLS,
|
|
162
|
+
},
|
|
163
|
+
clientAuthentication: msk.ClientAuthentication.saslTls({
|
|
164
|
+
iam: true,
|
|
165
|
+
certificateAuthorities: [
|
|
166
|
+
acmpca.CertificateAuthority.fromCertificateAuthorityArn(
|
|
167
|
+
this,
|
|
168
|
+
'CertificateAuthority',
|
|
169
|
+
'arn:aws:acm-pca:us-west-2:1234567890:certificate-authority/11111111-1111-1111-1111-111111111111',
|
|
170
|
+
),
|
|
171
|
+
],
|
|
172
|
+
}),
|
|
173
|
+
});
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
|
|
148
177
|
## Logging
|
|
149
178
|
|
|
150
179
|
You can deliver Apache Kafka broker logs to one or more of the following destination types:
|
package/lib/cluster-version.js
CHANGED
|
@@ -24,7 +24,7 @@ class KafkaVersion {
|
|
|
24
24
|
}
|
|
25
25
|
exports.KafkaVersion = KafkaVersion;
|
|
26
26
|
_a = JSII_RTTI_SYMBOL_1;
|
|
27
|
-
KafkaVersion[_a] = { fqn: "@aws-cdk/aws-msk-alpha.KafkaVersion", version: "2.
|
|
27
|
+
KafkaVersion[_a] = { fqn: "@aws-cdk/aws-msk-alpha.KafkaVersion", version: "2.42.0-alpha.0" };
|
|
28
28
|
/**
|
|
29
29
|
* Kafka version 1.1.1
|
|
30
30
|
*/
|
package/lib/cluster.d.ts
CHANGED
|
@@ -315,6 +315,11 @@ export interface TlsAuthProps {
|
|
|
315
315
|
*/
|
|
316
316
|
readonly certificateAuthorities?: acmpca.ICertificateAuthority[];
|
|
317
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* SASL + TLS authentication properties
|
|
320
|
+
*/
|
|
321
|
+
export interface SaslTlsAuthProps extends SaslAuthProps, TlsAuthProps {
|
|
322
|
+
}
|
|
318
323
|
/**
|
|
319
324
|
* Configuration properties for client authentication.
|
|
320
325
|
*/
|
|
@@ -329,6 +334,10 @@ export declare class ClientAuthentication {
|
|
|
329
334
|
* TLS authentication
|
|
330
335
|
*/
|
|
331
336
|
static tls(props: TlsAuthProps): ClientAuthentication;
|
|
337
|
+
/**
|
|
338
|
+
* SASL + TLS authentication
|
|
339
|
+
*/
|
|
340
|
+
static saslTls(saslTlsProps: SaslTlsAuthProps): ClientAuthentication;
|
|
332
341
|
/**
|
|
333
342
|
* @param saslProps - properties for SASL authentication
|
|
334
343
|
* @param tlsProps - properties for TLS authentication
|
package/lib/cluster.js
CHANGED
|
@@ -110,10 +110,25 @@ class ClientAuthentication {
|
|
|
110
110
|
}
|
|
111
111
|
return new ClientAuthentication(undefined, props);
|
|
112
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* SASL + TLS authentication
|
|
115
|
+
*/
|
|
116
|
+
static saslTls(saslTlsProps) {
|
|
117
|
+
try {
|
|
118
|
+
jsiiDeprecationWarnings._aws_cdk_aws_msk_alpha_SaslTlsAuthProps(saslTlsProps);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
122
|
+
Error.captureStackTrace(error, this.saslTls);
|
|
123
|
+
}
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
return new ClientAuthentication(saslTlsProps, saslTlsProps);
|
|
127
|
+
}
|
|
113
128
|
}
|
|
114
129
|
exports.ClientAuthentication = ClientAuthentication;
|
|
115
130
|
_a = JSII_RTTI_SYMBOL_1;
|
|
116
|
-
ClientAuthentication[_a] = { fqn: "@aws-cdk/aws-msk-alpha.ClientAuthentication", version: "2.
|
|
131
|
+
ClientAuthentication[_a] = { fqn: "@aws-cdk/aws-msk-alpha.ClientAuthentication", version: "2.42.0-alpha.0" };
|
|
117
132
|
/**
|
|
118
133
|
* Create a MSK Cluster.
|
|
119
134
|
*
|
|
@@ -296,6 +311,14 @@ class Cluster extends ClusterBase {
|
|
|
296
311
|
clientAuthentication = {
|
|
297
312
|
sasl: { iam: { enabled: props.clientAuthentication.saslProps.iam } },
|
|
298
313
|
};
|
|
314
|
+
if (props.clientAuthentication?.tlsProps) {
|
|
315
|
+
clientAuthentication = {
|
|
316
|
+
sasl: { iam: { enabled: props.clientAuthentication.saslProps.iam } },
|
|
317
|
+
tls: {
|
|
318
|
+
certificateAuthorityArnList: props.clientAuthentication?.tlsProps?.certificateAuthorities?.map((ca) => ca.certificateAuthorityArn),
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
}
|
|
299
322
|
}
|
|
300
323
|
else if (props.clientAuthentication?.saslProps?.scram) {
|
|
301
324
|
clientAuthentication = {
|
|
@@ -520,5 +543,5 @@ class Cluster extends ClusterBase {
|
|
|
520
543
|
}
|
|
521
544
|
exports.Cluster = Cluster;
|
|
522
545
|
_b = JSII_RTTI_SYMBOL_1;
|
|
523
|
-
Cluster[_b] = { fqn: "@aws-cdk/aws-msk-alpha.Cluster", version: "2.
|
|
524
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsdXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFHM0MsaUVBQWlFO0FBQ2pFLG9DQUFvQztBQUNwQyw2Q0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELCtDQUFzRTtBQUV0RSw4REFBNEQ7QUFFNUQsaURBQWlEO0FBcUJqRDs7R0FFRztBQUNILE1BQWUsV0FBWSxTQUFRLElBQUksQ0FBQyxRQUFRO0lBTTlDLDBDQUEwQztJQUMxQyxJQUFXLFdBQVc7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzFCO0NBQ0Y7QUErSEQ7Ozs7R0FJRztBQUNILElBQVksc0JBaUJYO0FBakJELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gsNkNBQW1CLENBQUE7SUFDbkI7O09BRUc7SUFDSCxtREFBeUIsQ0FBQTtJQUN6Qjs7T0FFRztJQUNILHVFQUE2QyxDQUFBO0lBQzdDOztPQUVHO0lBQ0gsNkVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQWpCVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQWlCakM7QUFvRUQ7O0dBRUc7QUFDSCxJQUFZLHNCQWFYO0FBYkQsV0FBWSxzQkFBc0I7SUFDaEM7O09BRUc7SUFDSCxxQ0FBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILGlEQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFiVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQWFqQztBQTZERDs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBZS9COzs7T0FHRztJQUNILFlBQ2tCLFNBQXlC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SSxDQUFDLFVBQVUsQ0FBQztxQkFDN0IsQ0FBQztpQkFDSCxDQUFDO2FBQ0gsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLE1BQU0sS0FBSyxDQUNULGlGQUFpRixDQUNsRixDQUFDO1NBQ0g7S0FDRjs7QUExZEgsMEJBMmRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYWNtcGNhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1hY21wY2EnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY3IgZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBTM19DUkVBVEVfREVGQVVMVF9MT0dHSU5HX1BPTElDWSB9IGZyb20gJ2F3cy1jZGstbGliL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgYWRkcmVzc09mIH0gZnJvbSAnY29uc3RydWN0cy9saWIvcHJpdmF0ZS91bmlxdWVpZCc7XG5pbXBvcnQgeyBLYWZrYVZlcnNpb24gfSBmcm9tICcuLyc7XG5pbXBvcnQgeyBDZm5DbHVzdGVyIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1zayc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1TSyBDbHVzdGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNsdXN0ZXIgZXh0ZW5kcyBjb3JlLklSZXNvdXJjZSwgZWMyLklDb25uZWN0YWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBoeXNpY2FsIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgTVNLIENsdXN0ZXIuXG4gKi9cbmFic3RyYWN0IGNsYXNzIENsdXN0ZXJCYXNlIGV4dGVuZHMgY29yZS5SZXNvdXJjZSBpbXBsZW1lbnRzIElDbHVzdGVyIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNsdXN0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIF9jb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBNYW5hZ2VzIGNvbm5lY3Rpb25zIGZvciB0aGUgY2x1c3RlciAqL1xuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25zKCk6IGVjMi5Db25uZWN0aW9ucyB7XG4gICAgaWYgKCF0aGlzLl9jb25uZWN0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBpbXBvcnRlZCBDbHVzdGVyIGNhbm5vdCBtYW5hZ2UgaXRzIHNlY3VyaXR5IGdyb3VwcycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvbnM7XG4gIH1cbn1cblxuLyoqXG4gKiAgUHJvcGVydGllcyBmb3IgYSBNU0sgQ2x1c3RlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGh5c2ljYWwgbmFtZSBvZiB0aGUgY2x1c3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiBBcGFjaGUgS2Fma2EuXG4gICAqL1xuICByZWFkb25seSBrYWZrYVZlcnNpb246IEthZmthVmVyc2lvbjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBBcGFjaGUgS2Fma2EgYnJva2VycyBkZXBsb3llZCBpbiBlYWNoIEF2YWlsYWJpbGl0eSBab25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSBudW1iZXJPZkJyb2tlck5vZGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogRGVmaW5lcyB0aGUgdmlydHVhbCBuZXR3b3JraW5nIGVudmlyb25tZW50IGZvciB0aGlzIGNsdXN0ZXIuXG4gICAqIE11c3QgaGF2ZSBhdCBsZWFzdCAyIHN1Ym5ldHMgaW4gdHdvIGRpZmZlcmVudCBBWnMuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICAvKipcbiAgICogV2hlcmUgdG8gcGxhY2UgdGhlIG5vZGVzIHdpdGhpbiB0aGUgVlBDLlxuICAgKiBBbWF6b24gTVNLIGRpc3RyaWJ1dGVzIHRoZSBicm9rZXIgbm9kZXMgZXZlbmx5IGFjcm9zcyB0aGUgc3VibmV0cyB0aGF0IHlvdSBzcGVjaWZ5LlxuICAgKiBUaGUgc3VibmV0cyB0aGF0IHlvdSBzcGVjaWZ5IG11c3QgYmUgaW4gZGlzdGluY3QgQXZhaWxhYmlsaXR5IFpvbmVzLlxuICAgKiBDbGllbnQgc3VibmV0cyBjYW4ndCBiZSBpbiBBdmFpbGFiaWxpdHkgWm9uZSB1cy1lYXN0LTFlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBWcGMgZGVmYXVsdCBzdHJhdGVneSBpZiBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG4gIC8qKlxuICAgKiBUaGUgRUMyIGluc3RhbmNlIHR5cGUgdGhhdCB5b3Ugd2FudCBBbWF6b24gTVNLIHRvIHVzZSB3aGVuIGl0IGNyZWF0ZXMgeW91ciBicm9rZXJzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tc2svbGF0ZXN0L2RldmVsb3Blcmd1aWRlL21zay1jcmVhdGUtY2x1c3Rlci5odG1sI2Jyb2tlci1pbnN0YW5jZS10eXBlc1xuICAgKiBAZGVmYXVsdCBrYWZrYS5tNS5sYXJnZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VUeXBlPzogZWMyLkluc3RhbmNlVHlwZTtcbiAgLyoqXG4gICAqIFRoZSBBV1Mgc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBlbGFzdGljIG5ldHdvcmsgaW50ZXJmYWNlcyBpbiBvcmRlciB0byBzcGVjaWZ5IHdobyBjYW5cbiAgICogY29ubmVjdCB0byBhbmQgY29tbXVuaWNhdGUgd2l0aCB0aGUgQW1hem9uIE1TSyBjbHVzdGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZSBuZXcgc2VjdXJpdHkgZ3JvdXBcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogZWMyLklTZWN1cml0eUdyb3VwW107XG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCBzdG9yYWdlIHZvbHVtZXMgYXR0YWNoZWQgdG8gTVNLIGJyb2tlciBub2Rlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAxMDAwIEdpQiBFQlMgdm9sdW1lXG4gICAqL1xuICByZWFkb25seSBlYnNTdG9yYWdlSW5mbz86IEVic1N0b3JhZ2VJbmZvO1xuICAvKipcbiAgICogVGhlIEFtYXpvbiBNU0sgY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25JbmZvPzogQ2x1c3RlckNvbmZpZ3VyYXRpb25JbmZvO1xuICAvKipcbiAgICogQ2x1c3RlciBtb25pdG9yaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gREVGQVVMVCBtb25pdG9yaW5nIGxldmVsXG4gICAqL1xuICByZWFkb25seSBtb25pdG9yaW5nPzogTW9uaXRvcmluZ0NvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBDb25maWd1cmUgeW91ciBNU0sgY2x1c3RlciB0byBzZW5kIGJyb2tlciBsb2dzIHRvIGRpZmZlcmVudCBkZXN0aW5hdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZz86IEJyb2tlckxvZ2dpbmc7XG4gIC8qKlxuICAgKiBDb25maWcgZGV0YWlscyBmb3IgZW5jcnlwdGlvbiBpbiB0cmFuc2l0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGVuYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25JblRyYW5zaXQ/OiBFbmNyeXB0aW9uSW5UcmFuc2l0Q29uZmlnO1xuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBjbGllbnQgYXV0aGVudGljYXRpb24uXG4gICAqIE1TSyBzdXBwb3J0cyB1c2luZyBwcml2YXRlIFRMUyBjZXJ0aWZpY2F0ZXMgb3IgU0FTTC9TQ1JBTSB0byBhdXRoZW50aWNhdGUgdGhlIGlkZW50aXR5IG9mIGNsaWVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudEF1dGhlbnRpY2F0aW9uPzogQ2xpZW50QXV0aGVudGljYXRpb247XG4gIC8qKlxuICAgKiBXaGF0IHRvIGRvIHdoZW4gdGhpcyByZXNvdXJjZSBpcyBkZWxldGVkIGZyb20gYSBzdGFjay5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5SRVRBSU5cbiAgICovXG4gIHJlYWRvbmx5IHJlbW92YWxQb2xpY3k/OiBjb3JlLlJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogRUJTIHZvbHVtZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFYnNTdG9yYWdlSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBpbiBHaUIgb2YgdGhlIEVCUyB2b2x1bWUgZm9yIHRoZSBkYXRhIGRyaXZlIG9uIGVhY2ggYnJva2VyIG5vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwMDBcbiAgICovXG4gIHJlYWRvbmx5IHZvbHVtZVNpemU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgQVdTIEtNUyBrZXkgZm9yIGVuY3J5cHRpbmcgZGF0YSBhdCByZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBVc2VzIEFXUyBtYW5hZ2VkIENNSyAoYXdzL2thZmthKVxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xufVxuXG4vKipcbiAqIFRoZSBBbWF6b24gTVNLIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciB0aGUgY2x1c3Rlci5cbiAqIE5vdGU6IFRoZXJlIGlzIGN1cnJlbnRseSBubyBDbG91ZGZvcm1hdGlvbiBSZXNvdXJjZSB0byBjcmVhdGUgYSBDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2x1c3RlckNvbmZpZ3VyYXRpb25JbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgTVNLIGNvbmZpZ3VyYXRpb24gdG8gdXNlLlxuICAgKiBGb3IgZXhhbXBsZSwgYXJuOmF3czprYWZrYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmNvbmZpZ3VyYXRpb24vZXhhbXBsZS1jb25maWd1cmF0aW9uLW5hbWUvYWJjZGFiY2QtMTIzNC1hYmNkLTEyMzQtYWJjZDEyM2U4ZThlLTEuXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSByZXZpc2lvbiBvZiB0aGUgQW1hem9uIE1TSyBjb25maWd1cmF0aW9uIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIGxldmVsIG9mIG1vbml0b3JpbmcgZm9yIHRoZSBNU0sgY2x1c3RlclxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21zay9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvbW9uaXRvcmluZy5odG1sI21ldHJpY3MtZGV0YWlsc1xuICovXG5leHBvcnQgZW51bSBDbHVzdGVyTW9uaXRvcmluZ0xldmVsIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgbWV0cmljcyBhcmUgdGhlIGVzc2VudGlhbCBtZXRyaWNzIHRvIG1vbml0b3IuXG4gICAqL1xuICBERUZBVUxUID0gJ0RFRkFVTFQnLFxuICAvKipcbiAgICogUGVyIEJyb2tlciBtZXRyaWNzIGdpdmUgeW91IG1ldHJpY3MgYXQgdGhlIGJyb2tlciBsZXZlbC5cbiAgICovXG4gIFBFUl9CUk9LRVIgPSAnUEVSX0JST0tFUicsXG4gIC8qKlxuICAgKiBQZXIgVG9waWMgUGVyIEJyb2tlciBtZXRyaWNzIGhlbHAgeW91IHVuZGVyc3RhbmQgdm9sdW1lIGF0IHRoZSB0b3BpYyBsZXZlbC5cbiAgICovXG4gIFBFUl9UT1BJQ19QRVJfQlJPS0VSID0gJ1BFUl9UT1BJQ19QRVJfQlJPS0VSJyxcbiAgLyoqXG4gICAqIFBlciBUb3BpYyBQZXIgUGFydGl0aW9uIG1ldHJpY3MgaGVscCB5b3UgdW5kZXJzdGFuZCBjb25zdW1lciBncm91cCBsYWcgYXQgdGhlIHRvcGljIHBhcnRpdGlvbiBsZXZlbC5cbiAgICovXG4gIFBFUl9UT1BJQ19QRVJfUEFSVElUSU9OID0gJ1BFUl9UT1BJQ19QRVJfUEFSVElUSU9OJyxcbn1cblxuLyoqXG4gKiBNb25pdG9yaW5nIENvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yaW5nQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGxldmVsIG9mIG1vbml0b3JpbmcgZm9yIHRoZSBNU0sgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlck1vbml0b3JpbmdMZXZlbD86IENsdXN0ZXJNb25pdG9yaW5nTGV2ZWw7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgSk1YIEV4cG9ydGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUHJvbWV0aGV1c0pteEV4cG9ydGVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHlvdSB3YW50IHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBQcm9tZXRoZXVzIE5vZGUgRXhwb3J0ZXIuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoZSBQcm9tZXRoZXVzIE5vZGUgRXhwb3J0ZXIgdG8gZ2V0IENQVSBhbmQgZGlzayBtZXRyaWNzIGZvciB0aGUgYnJva2VyIG5vZGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUHJvbWV0aGV1c05vZGVFeHBvcnRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBkZXRhaWxzIHJlbGF0ZWQgdG8gYnJva2VyIGxvZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJva2VyTG9nZ2luZyB7XG4gIC8qKlxuICAgKiBUaGUgS2luZXNpcyBEYXRhIEZpcmVob3NlIGRlbGl2ZXJ5IHN0cmVhbSB0aGF0IGlzIHRoZSBkZXN0aW5hdGlvbiBmb3IgYnJva2VyIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGZpcmVob3NlRGVsaXZlcnlTdHJlYW1OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIENsb3VkV2F0Y2ggTG9ncyBncm91cCB0aGF0IGlzIHRoZSBkZXN0aW5hdGlvbiBmb3IgYnJva2VyIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGNsb3Vkd2F0Y2hMb2dHcm91cD86IGxvZ3MuSUxvZ0dyb3VwO1xuICAvKipcbiAgICogRGV0YWlscyBvZiB0aGUgQW1hem9uIFMzIGRlc3RpbmF0aW9uIGZvciBicm9rZXIgbG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgczM/OiBTM0xvZ2dpbmdDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIERldGFpbHMgb2YgdGhlIEFtYXpvbiBTMyBkZXN0aW5hdGlvbiBmb3IgYnJva2VyIGxvZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNMb2dnaW5nQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHRoYXQgaXMgdGhlIGRlc3RpbmF0aW9uIGZvciBicm9rZXIgbG9ncy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgLyoqXG4gICAqIFRoZSBTMyBwcmVmaXggdGhhdCBpcyB0aGUgZGVzdGluYXRpb24gZm9yIGJyb2tlciBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluZGljYXRlcyB0aGUgZW5jcnlwdGlvbiBzZXR0aW5nIGZvciBkYXRhIGluIHRyYW5zaXQgYmV0d2VlbiBjbGllbnRzIGFuZCBicm9rZXJzLlxuICovXG5leHBvcnQgZW51bSBDbGllbnRCcm9rZXJFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIFRMUyBtZWFucyB0aGF0IGNsaWVudC1icm9rZXIgY29tbXVuaWNhdGlvbiBpcyBlbmFibGVkIHdpdGggVExTIG9ubHkuXG4gICAqL1xuICBUTFMgPSAnVExTJyxcbiAgLyoqXG4gICAqIFRMU19QTEFJTlRFWFQgbWVhbnMgdGhhdCBjbGllbnQtYnJva2VyIGNvbW11bmljYXRpb24gaXMgZW5hYmxlZCBmb3IgYm90aCBUTFMtZW5jcnlwdGVkLCBhcyB3ZWxsIGFzIHBsYWludGV4dCBkYXRhLlxuICAgKi9cbiAgVExTX1BMQUlOVEVYVCA9ICdUTFNfUExBSU5URVhUJyxcbiAgLyoqXG4gICAqIFBMQUlOVEVYVCBtZWFucyB0aGF0IGNsaWVudC1icm9rZXIgY29tbXVuaWNhdGlvbiBpcyBlbmFibGVkIGluIHBsYWludGV4dCBvbmx5LlxuICAgKi9cbiAgUExBSU5URVhUID0gJ1BMQUlOVEVYVCcsXG59XG5cbi8qKlxuICogVGhlIHNldHRpbmdzIGZvciBlbmNyeXB0aW5nIGRhdGEgaW4gdHJhbnNpdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tc2svbGF0ZXN0L2RldmVsb3Blcmd1aWRlL21zay1lbmNyeXB0aW9uLmh0bWwjbXNrLWVuY3J5cHRpb24taW4tdHJhbnNpdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuY3J5cHRpb25JblRyYW5zaXRDb25maWcge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBlbmNyeXB0aW9uIHNldHRpbmcgZm9yIGRhdGEgaW4gdHJhbnNpdCBiZXR3ZWVuIGNsaWVudHMgYW5kIGJyb2tlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVExTXG4gICAqL1xuICByZWFkb25seSBjbGllbnRCcm9rZXI/OiBDbGllbnRCcm9rZXJFbmNyeXB0aW9uO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgZGF0YSBjb21tdW5pY2F0aW9uIGFtb25nIHRoZSBicm9rZXIgbm9kZXMgb2YgdGhlIGNsdXN0ZXIgaXMgZW5jcnlwdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVJbkNsdXN0ZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNBU0wgYXV0aGVudGljYXRpb24gcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhc2xBdXRoUHJvcHMge1xuICAvKipcbiAgICogRW5hYmxlIFNBU0wvU0NSQU0gYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzY3JhbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmFibGUgSUFNIGFjY2VzcyBjb250cm9sLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaWFtPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEtNUyBLZXkgdG8gZW5jcnlwdCBTQVNML1NDUkFNIHNlY3JldHMuXG4gICAqXG4gICAqIFlvdSBtdXN0IHVzZSBhIGN1c3RvbWVyIG1hc3RlciBrZXkgKENNSykgd2hlbiBjcmVhdGluZyB1c2VycyBpbiBzZWNyZXRzIG1hbmFnZXIuXG4gICAqIFlvdSBjYW5ub3QgdXNlIGEgU2VjcmV0IHdpdGggQW1hem9uIE1TSyB0aGF0IHVzZXMgdGhlIGRlZmF1bHQgU2VjcmV0cyBNYW5hZ2VyIGVuY3J5cHRpb24ga2V5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIENNSyB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhbGlhcyBtc2sve2NsdXN0ZXJOYW1lfS9zYXNsL3NjcmFtXG4gICAqL1xuICByZWFkb25seSBrZXk/OiBrbXMuSUtleTtcbn1cblxuLyoqXG4gKiBUTFMgYXV0aGVudGljYXRpb24gcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRsc0F1dGhQcm9wcyB7XG4gIC8qKlxuICAgKiBMaXN0IG9mIEFDTSBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyB0byBlbmFibGUgVExTIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlQXV0aG9yaXRpZXM/OiBhY21wY2EuSUNlcnRpZmljYXRlQXV0aG9yaXR5W107XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBjbGllbnQgYXV0aGVudGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gIC8qKlxuICAgKiBTQVNMIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNhc2wocHJvcHM6IFNhc2xBdXRoUHJvcHMpOiBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoZW50aWNhdGlvbihwcm9wcywgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUTFMgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdGxzKHByb3BzOiBUbHNBdXRoUHJvcHMpOiBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoZW50aWNhdGlvbih1bmRlZmluZWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc2FzbFByb3BzIC0gcHJvcGVydGllcyBmb3IgU0FTTCBhdXRoZW50aWNhdGlvblxuICAgKiBAcGFyYW0gdGxzUHJvcHMgLSBwcm9wZXJ0aWVzIGZvciBUTFMgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHNhc2xQcm9wcz86IFNhc2xBdXRoUHJvcHMsXG4gICAgcHVibGljIHJlYWRvbmx5IHRsc1Byb3BzPzogVGxzQXV0aFByb3BzLFxuICApIHt9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgTVNLIENsdXN0ZXIuXG4gKlxuICogQHJlc291cmNlIEFXUzo6TVNLOjpDbHVzdGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBDbHVzdGVyIGV4dGVuZHMgQ2x1c3RlckJhc2Uge1xuICAvKipcbiAgICogUmVmZXJlbmNlIGFuIGV4aXN0aW5nIGNsdXN0ZXIsIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgQ0RLIGNvZGUsIGJ5IG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DbHVzdGVyQXJuKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGNsdXN0ZXJBcm46IHN0cmluZyxcbiAgKTogSUNsdXN0ZXIge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIENsdXN0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjbHVzdGVyQXJuID0gY2x1c3RlckFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjbHVzdGVyTmFtZSA9IGNvcmUuRm4uc2VsZWN0KDEsIGNvcmUuRm4uc3BsaXQoJy8nLCBjbHVzdGVyQXJuKSk7IC8vIFsnYXJuOnBhcnRpdGlvbjprYWZrYTpyZWdpb246YWNjb3VudC1pZCcsIGNsdXN0ZXJOYW1lLCBjbHVzdGVySWRdXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBjbHVzdGVyQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICAvKiogS2V5IHVzZWQgdG8gZW5jcnlwdCBTQVNML1NDUkFNIHVzZXJzICovXG4gIHB1YmxpYyByZWFkb25seSBzYXNsU2NyYW1BdXRoZW50aWNhdGlvbktleT86IGttcy5JS2V5O1xuICBwcml2YXRlIF9jbHVzdGVyRGVzY3JpcHRpb24/OiBjci5Bd3NDdXN0b21SZXNvdXJjZTtcbiAgcHJpdmF0ZSBfY2x1c3RlckJvb3RzdHJhcEJyb2tlcnM/OiBjci5Bd3NDdXN0b21SZXNvdXJjZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbHVzdGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWJuZXRTZWxlY3Rpb24gPSBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyhwcm9wcy52cGNTdWJuZXRzKTtcblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IGVjMi5Db25uZWN0aW9ucyh7XG4gICAgICBzZWN1cml0eUdyb3VwczogcHJvcHMuc2VjdXJpdHlHcm91cHMgPz8gW1xuICAgICAgICBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdNU0sgc2VjdXJpdHkgZ3JvdXAnLFxuICAgICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICB9KSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBpZiAoc3VibmV0U2VsZWN0aW9uLnN1Ym5ldHMubGVuZ3RoIDwgMikge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIGBDbHVzdGVyIHJlcXVpcmVzIGF0IGxlYXN0IDIgc3VibmV0cywgZ290ICR7c3VibmV0U2VsZWN0aW9uLnN1Ym5ldHMubGVuZ3RofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFjb3JlLlRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5jbHVzdGVyTmFtZSkgJiZcbiAgICAgICEvXlthLXpBLVowLTldKyQvLnRlc3QocHJvcHMuY2x1c3Rlck5hbWUpICYmXG4gICAgICBwcm9wcy5jbHVzdGVyTmFtZS5sZW5ndGggPiA2NFxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdUaGUgY2x1c3RlciBuYW1lIG11c3Qgb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBoYXZlIGEgbWF4aW11bSBsZW5ndGggb2YgNjQgY2hhcmFjdGVycy4nICtcbiAgICAgICAgICBgZ290OiAnJHtwcm9wcy5jbHVzdGVyTmFtZX0uIGxlbmd0aDogJHtwcm9wcy5jbHVzdGVyTmFtZS5sZW5ndGh9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy5zYXNsUHJvcHM/LmlhbSAmJlxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnNhc2xQcm9wcz8uc2NyYW1cbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKCdPbmx5IG9uZSBjbGllbnQgYXV0aGVudGljYXRpb24gbWV0aG9kIGNhbiBiZSBlbmFibGVkLicpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmVuY3J5cHRpb25JblRyYW5zaXQ/LmNsaWVudEJyb2tlciA9PT1cbiAgICAgICAgQ2xpZW50QnJva2VyRW5jcnlwdGlvbi5QTEFJTlRFWFQgJiZcbiAgICAgIHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uXG4gICAgKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RvIGVuYWJsZSBjbGllbnQgYXV0aGVudGljYXRpb24sIHlvdSBtdXN0IGVuYWJsZWQgVExTLWVuY3J5cHRlZCB0cmFmZmljIGJldHdlZW4gY2xpZW50cyBhbmQgYnJva2Vycy4nLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcHJvcHMuZW5jcnlwdGlvbkluVHJhbnNpdD8uY2xpZW50QnJva2VyID09PVxuICAgICAgICBDbGllbnRCcm9rZXJFbmNyeXB0aW9uLlRMU19QTEFJTlRFWFQgJiZcbiAgICAgIChwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5zY3JhbSB8fFxuICAgICAgICBwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5pYW0pXG4gICAgKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RvIGVuYWJsZSBTQVNML1NDUkFNIG9yIElBTSBhdXRoZW50aWNhdGlvbiwgeW91IG11c3Qgb25seSBhbGxvdyBUTFMtZW5jcnlwdGVkIHRyYWZmaWMgYmV0d2VlbiBjbGllbnRzIGFuZCBicm9rZXJzLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHZvbHVtZVNpemUgPVxuICAgICAgcHJvcHMuZWJzU3RvcmFnZUluZm8/LnZvbHVtZVNpemUgPz8gMTAwMDtcbiAgICAvLyBNaW5pbXVtOiAxIEdpQiwgbWF4aW11bTogMTYzODQgR2lCXG4gICAgaWYgKHZvbHVtZVNpemUgPCAxIHx8IHZvbHVtZVNpemUgPiAxNjM4NCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdFQlMgdm9sdW1lIHNpemUgc2hvdWxkIGJlIGluIHRoZSByYW5nZSAxLTE2Mzg0JyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VUeXBlID0gcHJvcHMuaW5zdGFuY2VUeXBlXG4gICAgICA/IHRoaXMubXNrSW5zdGFuY2VUeXBlKHByb3BzLmluc3RhbmNlVHlwZSlcbiAgICAgIDogdGhpcy5tc2tJbnN0YW5jZVR5cGUoXG4gICAgICAgIGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuTTUsIGVjMi5JbnN0YW5jZVNpemUuTEFSR0UpLFxuICAgICAgKTtcblxuICAgIGNvbnN0IGVuY3J5cHRpb25BdFJlc3QgPSBwcm9wcy5lYnNTdG9yYWdlSW5mbz8uZW5jcnlwdGlvbktleVxuICAgICAgPyB7XG4gICAgICAgIGRhdGFWb2x1bWVLbXNLZXlJZDpcbiAgICAgICAgICAgIHByb3BzLmVic1N0b3JhZ2VJbmZvLmVuY3J5cHRpb25LZXkua2V5SWQsXG4gICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDsgLy8gTVNLIHdpbGwgY3JlYXRlIHRoZSBtYW5hZ2VkIGtleVxuXG4gICAgY29uc3QgZW5jcnlwdGlvbkluVHJhbnNpdCA9IHtcbiAgICAgIGNsaWVudEJyb2tlcjpcbiAgICAgICAgcHJvcHMuZW5jcnlwdGlvbkluVHJhbnNpdD8uY2xpZW50QnJva2VyID8/XG4gICAgICAgIENsaWVudEJyb2tlckVuY3J5cHRpb24uVExTLFxuICAgICAgaW5DbHVzdGVyOiBwcm9wcy5lbmNyeXB0aW9uSW5UcmFuc2l0Py5lbmFibGVJbkNsdXN0ZXIgPz8gdHJ1ZSxcbiAgICB9O1xuXG4gICAgY29uc3Qgb3Blbk1vbml0b3JpbmcgPVxuICAgICAgcHJvcHMubW9uaXRvcmluZz8uZW5hYmxlUHJvbWV0aGV1c0pteEV4cG9ydGVyIHx8XG4gICAgICBwcm9wcy5tb25pdG9yaW5nPy5lbmFibGVQcm9tZXRoZXVzTm9kZUV4cG9ydGVyXG4gICAgICAgID8ge1xuICAgICAgICAgIHByb21ldGhldXM6IHtcbiAgICAgICAgICAgIGpteEV4cG9ydGVyOiBwcm9wcy5tb25pdG9yaW5nPy5lbmFibGVQcm9tZXRoZXVzSm14RXhwb3J0ZXJcbiAgICAgICAgICAgICAgPyB7IGVuYWJsZWRJbkJyb2tlcjogdHJ1ZSB9XG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbm9kZUV4cG9ydGVyOiBwcm9wcy5tb25pdG9yaW5nXG4gICAgICAgICAgICAgID8uZW5hYmxlUHJvbWV0aGV1c05vZGVFeHBvcnRlclxuICAgICAgICAgICAgICA/IHsgZW5hYmxlZEluQnJva2VyOiB0cnVlIH1cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGxvZ2dpbmdCdWNrZXQgPSBwcm9wcy5sb2dnaW5nPy5zMz8uYnVja2V0O1xuICAgIGlmIChsb2dnaW5nQnVja2V0ICYmIEZlYXR1cmVGbGFncy5vZih0aGlzKS5pc0VuYWJsZWQoUzNfQ1JFQVRFX0RFRkFVTFRfTE9HR0lOR19QT0xJQ1kpKSB7XG4gICAgICBjb25zdCBzdGFjayA9IGNvcmUuU3RhY2sub2YodGhpcyk7XG4gICAgICBsb2dnaW5nQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2RlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBsb2dnaW5nQnVja2V0LmFybkZvck9iamVjdHMoYEFXU0xvZ3MvJHtzdGFjay5hY2NvdW50fS8qYCksXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFsnczM6UHV0T2JqZWN0J10sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdzMzp4LWFtei1hY2wnOiAnYnVja2V0LW93bmVyLWZ1bGwtY29udHJvbCcsXG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnKicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSkpO1xuXG4gICAgICBsb2dnaW5nQnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIHByaW5jaXBhbHM6IFtcbiAgICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2RlbGl2ZXJ5LmxvZ3MuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtsb2dnaW5nQnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAnczM6R2V0QnVja2V0QWNsJyxcbiAgICAgICAgICAnczM6TGlzdEJ1Y2tldCcsXG4gICAgICAgIF0sXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFybic6IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGNvbnN0IGxvZ2dpbmdJbmZvID0ge1xuICAgICAgYnJva2VyTG9nczoge1xuICAgICAgICBjbG91ZFdhdGNoTG9nczoge1xuICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICBwcm9wcy5sb2dnaW5nPy5jbG91ZHdhdGNoTG9nR3JvdXAgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBsb2dHcm91cDpcbiAgICAgICAgICAgIHByb3BzLmxvZ2dpbmc/LmNsb3Vkd2F0Y2hMb2dHcm91cD8ubG9nR3JvdXBOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBmaXJlaG9zZToge1xuICAgICAgICAgIGVuYWJsZWQ6XG4gICAgICAgICAgICBwcm9wcy5sb2dnaW5nPy5maXJlaG9zZURlbGl2ZXJ5U3RyZWFtTmFtZSAhPT1cbiAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBkZWxpdmVyeVN0cmVhbTpcbiAgICAgICAgICAgIHByb3BzLmxvZ2dpbmc/LmZpcmVob3NlRGVsaXZlcnlTdHJlYW1OYW1lLFxuICAgICAgICB9LFxuICAgICAgICBzMzoge1xuICAgICAgICAgIGVuYWJsZWQ6IGxvZ2dpbmdCdWNrZXQgIT09IHVuZGVmaW5lZCxcbiAgICAgICAgICBidWNrZXQ6IGxvZ2dpbmdCdWNrZXQ/LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgcHJlZml4OiBwcm9wcy5sb2dnaW5nPy5zMz8ucHJlZml4LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnNhc2xQcm9wcz8uc2NyYW0gJiZcbiAgICAgIHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy5zYXNsUHJvcHM/LmtleSA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLnNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5ID0gbmV3IGttcy5LZXkodGhpcywgJ1NBU0xLZXknLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICdVc2VkIGZvciBlbmNyeXB0aW5nIE1TSyBzZWNyZXRzIGZvciBTQVNML1NDUkFNIGF1dGhlbnRpY2F0aW9uLicsXG4gICAgICAgIGFsaWFzOiBgbXNrLyR7cHJvcHMuY2x1c3Rlck5hbWV9L3Nhc2wvc2NyYW1gLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9rbXMvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlcnZpY2VzLXNlY3JldHMtbWFuYWdlci5odG1sI2FzbS1wb2xpY2llc1xuICAgICAgdGhpcy5zYXNsU2NyYW1BdXRoZW50aWNhdGlvbktleS5hZGRUb1Jlc291cmNlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgc2lkOlxuICAgICAgICAgICAgJ0FsbG93IGFjY2VzcyB0aHJvdWdoIEFXUyBTZWNyZXRzIE1hbmFnZXIgZm9yIGFsbCBwcmluY2lwYWxzIGluIHRoZSBhY2NvdW50IHRoYXQgYXJlIGF1dGhvcml6ZWQgdG8gdXNlIEFXUyBTZWNyZXRzIE1hbmFnZXInLFxuICAgICAgICAgIHByaW5jaXBhbHM6IFtuZXcgaWFtLkFueVByaW5jaXBhbCgpXSxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAna21zOkVuY3J5cHQnLFxuICAgICAgICAgICAgJ2ttczpEZWNyeXB0JyxcbiAgICAgICAgICAgICdrbXM6UmVFbmNyeXB0KicsXG4gICAgICAgICAgICAna21zOkdlbmVyYXRlRGF0YUtleSonLFxuICAgICAgICAgICAgJ2ttczpDcmVhdGVHcmFudCcsXG4gICAgICAgICAgICAna21zOkRlc2NyaWJlS2V5JyxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAgICdrbXM6VmlhU2VydmljZSc6IGBzZWNyZXRzbWFuYWdlci4ke2NvcmUuU3RhY2sub2YodGhpcykucmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgICAgICAgJ2ttczpDYWxsZXJBY2NvdW50JzogY29yZS5TdGFjay5vZih0aGlzKS5hY2NvdW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGNsaWVudEF1dGhlbnRpY2F0aW9uO1xuICAgIGlmIChwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5pYW0pIHtcbiAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICBzYXNsOiB7IGlhbTogeyBlbmFibGVkOiBwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbi5zYXNsUHJvcHMuaWFtIH0gfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5zY3JhbSkge1xuICAgICAgY2xpZW50QXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgIHNhc2w6IHtcbiAgICAgICAgICBzY3JhbToge1xuICAgICAgICAgICAgZW5hYmxlZDogcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24uc2FzbFByb3BzLnNjcmFtLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8udGxzUHJvcHM/LmNlcnRpZmljYXRlQXV0aG9yaXRpZXMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY2xpZW50QXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgIHRsczoge1xuICAgICAgICAgIGNlcnRpZmljYXRlQXV0aG9yaXR5QXJuTGlzdDogcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnRsc1Byb3BzPy5jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzLm1hcChcbiAgICAgICAgICAgIChjYSkgPT4gY2EuY2VydGlmaWNhdGVBdXRob3JpdHlBcm4sXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgQ2ZuQ2x1c3Rlcih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjbHVzdGVyTmFtZTogcHJvcHMuY2x1c3Rlck5hbWUsXG4gICAgICBrYWZrYVZlcnNpb246IHByb3BzLmthZmthVmVyc2lvbi52ZXJzaW9uLFxuICAgICAgbnVtYmVyT2ZCcm9rZXJOb2RlczpcbiAgICAgICAgcHJvcHMubnVtYmVyT2ZCcm9rZXJOb2RlcyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICBzdWJuZXRTZWxlY3Rpb24uYXZhaWxhYmlsaXR5Wm9uZXMubGVuZ3RoICogcHJvcHMubnVtYmVyT2ZCcm9rZXJOb2RlcyA6IHN1Ym5ldFNlbGVjdGlvbi5hdmFpbGFiaWxpdHlab25lcy5sZW5ndGgsXG4gICAgICBicm9rZXJOb2RlR3JvdXBJbmZvOiB7XG4gICAgICAgIGluc3RhbmNlVHlwZSxcbiAgICAgICAgY2xpZW50U3VibmV0czogc3VibmV0U2VsZWN0aW9uLnN1Ym5ldElkcyxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IHRoaXMuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHMubWFwKFxuICAgICAgICAgIChncm91cCkgPT4gZ3JvdXAuc2VjdXJpdHlHcm91cElkLFxuICAgICAgICApLFxuICAgICAgICBzdG9yYWdlSW5mbzoge1xuICAgICAgICAgIGVic1N0b3JhZ2VJbmZvOiB7XG4gICAgICAgICAgICB2b2x1bWVTaXplOiB2b2x1bWVTaXplLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbkluZm86IHtcbiAgICAgICAgZW5jcnlwdGlvbkF0UmVzdCxcbiAgICAgICAgZW5jcnlwdGlvbkluVHJhbnNpdCxcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uSW5mbzogcHJvcHMuY29uZmlndXJhdGlvbkluZm8sXG4gICAgICBlbmhhbmNlZE1vbml0b3Jpbmc6IHByb3BzLm1vbml0b3Jpbmc/LmNsdXN0ZXJNb25pdG9yaW5nTGV2ZWwsXG4gICAgICBvcGVuTW9uaXRvcmluZzogb3Blbk1vbml0b3JpbmcsXG4gICAgICBsb2dnaW5nSW5mbzogbG9nZ2luZ0luZm8sXG4gICAgICBjbGllbnRBdXRoZW50aWNhdGlvbjogY2xpZW50QXV0aGVudGljYXRpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNsdXN0ZXJOYW1lID0gdGhpcy5nZXRSZXNvdXJjZU5hbWVBdHRyaWJ1dGUoXG4gICAgICBjb3JlLkZuLnNlbGVjdCgxLCBjb3JlLkZuLnNwbGl0KCcvJywgcmVzb3VyY2UucmVmKSksXG4gICAgKTtcbiAgICB0aGlzLmNsdXN0ZXJBcm4gPSByZXNvdXJjZS5yZWY7XG5cbiAgICByZXNvdXJjZS5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSwge1xuICAgICAgZGVmYXVsdDogY29yZS5SZW1vdmFsUG9saWN5LlJFVEFJTixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbXNrSW5zdGFuY2VUeXBlKGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBrYWZrYS4ke2luc3RhbmNlVHlwZS50b1N0cmluZygpfWA7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBab29LZWVwZXIgQ29ubmVjdGlvbiBzdHJpbmdcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBkZXNjcmliZUNsdXN0ZXJgIHVzaW5nIHRoZSBKYXZhc2NyaXB0IFNES1xuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VGaWVsZCBGaWVsZCB0byByZXR1cm4gZnJvbSBBUEkgY2FsbC4gZWcuIFpvb2tlZXBlckNvbm5lY3RTdHJpbmcsIFpvb2tlZXBlckNvbm5lY3RTdHJpbmdUbHNcbiAgICogQHJldHVybnMgLSBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIEFwYWNoZSBab29LZWVwZXIgY2x1c3Rlci5cbiAgICovXG4gIHByaXZhdGUgX3pvb2tlZXBlckNvbm5lY3Rpb25TdHJpbmcocmVzcG9uc2VGaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2NsdXN0ZXJEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fY2x1c3RlckRlc2NyaXB0aW9uID0gbmV3IGNyLkF3c0N1c3RvbVJlc291cmNlKHRoaXMsICdab29rZWVwZXJDb25uZWN0Jywge1xuICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6ICdLYWZrYScsXG4gICAgICAgICAgYWN0aW9uOiAnZGVzY3JpYmVDbHVzdGVyJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBDbHVzdGVyQXJuOiB0aGlzLmNsdXN0ZXJBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICAgICdab29LZWVwZXJDb25uZWN0aW9uU3RyaW5nJyxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5jbHVzdGVyQXJuXSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsdXN0ZXJEZXNjcmlwdGlvbi5nZXRSZXNwb25zZUZpZWxkKGBDbHVzdGVySW5mby4ke3Jlc3BvbnNlRmllbGR9YCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBab29LZWVwZXIgQ29ubmVjdGlvbiBzdHJpbmdcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBkZXNjcmliZUNsdXN0ZXJgIHVzaW5nIHRoZSBKYXZhc2NyaXB0IFNES1xuICAgKlxuICAgKiBAcmV0dXJucyAtIFRoZSBjb25uZWN0aW9uIHN0cmluZyB0byB1c2UgdG8gY29ubmVjdCB0byB0aGUgQXBhY2hlIFpvb0tlZXBlciBjbHVzdGVyLlxuICAgKi9cbiAgcHVibGljIGdldCB6b29rZWVwZXJDb25uZWN0aW9uU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3pvb2tlZXBlckNvbm5lY3Rpb25TdHJpbmcoJ1pvb2tlZXBlckNvbm5lY3RTdHJpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIFpvb0tlZXBlciBDb25uZWN0aW9uIHN0cmluZyBmb3IgYSBUTFMgZW5hYmxlZCBjbHVzdGVyXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZGVzY3JpYmVDbHVzdGVyYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHJldHVybnMgLSBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdXNlIHRvIGNvbm5lY3QgdG8gem9va2VlcGVyIGNsdXN0ZXIgb24gVExTIHBvcnQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHpvb2tlZXBlckNvbm5lY3Rpb25TdHJpbmdUbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fem9va2VlcGVyQ29ubmVjdGlvblN0cmluZygnWm9va2VlcGVyQ29ubmVjdFN0cmluZ1RscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBicm9rZXJzIHRoYXQgYSBjbGllbnQgYXBwbGljYXRpb24gY2FuIHVzZSB0byBib290c3RyYXBcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBnZXRCb290c3RyYXBCcm9rZXJzYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlRmllbGQgRmllbGQgdG8gcmV0dXJuIGZyb20gQVBJIGNhbGwuIGVnLiBCb290c3RyYXBCcm9rZXJTdHJpbmdTYXNsU2NyYW0sIEJvb3RzdHJhcEJyb2tlclN0cmluZ1xuICAgKiBAcmV0dXJucyAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgaG9zdG5hbWU6cG9ydCBwYWlycy5cbiAgICovXG4gIHByaXZhdGUgX2Jvb3RzdHJhcEJyb2tlcnMocmVzcG9uc2VGaWVsZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2NsdXN0ZXJCb290c3RyYXBCcm9rZXJzKSB7XG4gICAgICB0aGlzLl9jbHVzdGVyQm9vdHN0cmFwQnJva2VycyA9IG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgQm9vdHN0cmFwQnJva2VycyR7cmVzcG9uc2VGaWVsZH1gLCB7XG4gICAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogJ0thZmthJyxcbiAgICAgICAgICBhY3Rpb246ICdnZXRCb290c3RyYXBCcm9rZXJzJyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBDbHVzdGVyQXJuOiB0aGlzLmNsdXN0ZXJBcm4sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZignQm9vdHN0cmFwQnJva2VycycpLFxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5jbHVzdGVyQXJuXSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2NsdXN0ZXJCb290c3RyYXBCcm9rZXJzLmdldFJlc3BvbnNlRmllbGQocmVzcG9uc2VGaWVsZCk7XG5cbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGJyb2tlcnMgdGhhdCBhIGNsaWVudCBhcHBsaWNhdGlvbiBjYW4gdXNlIHRvIGJvb3RzdHJhcFxuICAgKlxuICAgKiBVc2VzIGEgQ3VzdG9tIFJlc291cmNlIHRvIG1ha2UgYW4gQVBJIGNhbGwgdG8gYGdldEJvb3RzdHJhcEJyb2tlcnNgIHVzaW5nIHRoZSBKYXZhc2NyaXB0IFNES1xuICAgKlxuICAgKiBAcmV0dXJucyAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgaG9zdG5hbWU6cG9ydCBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYm9vdHN0cmFwQnJva2VycygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ib290c3RyYXBCcm9rZXJzKCdCb290c3RyYXBCcm9rZXJTdHJpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgYnJva2VycyB0aGF0IGEgVExTIGF1dGhlbnRpY2F0ZWQgY2xpZW50IGFwcGxpY2F0aW9uIGNhbiB1c2UgdG8gYm9vdHN0cmFwXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZ2V0Qm9vdHN0cmFwQnJva2Vyc2AgdXNpbmcgdGhlIEphdmFzY3JpcHQgU0RLXG4gICAqXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBETlMgbmFtZXMgKG9yIElQKSBhbmQgVExTIHBvcnQgcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJvb3RzdHJhcEJyb2tlcnNUbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYm9vdHN0cmFwQnJva2VycygnQm9vdHN0cmFwQnJva2VyU3RyaW5nVGxzJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGJyb2tlcnMgdGhhdCBhIFNBU0wvU0NSQU0gYXV0aGVudGljYXRlZCBjbGllbnQgYXBwbGljYXRpb24gY2FuIHVzZSB0byBib290c3RyYXBcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBnZXRCb290c3RyYXBCcm9rZXJzYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHJldHVybnMgLSBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGRucyBuYW1lIChvciBJUCkgYW5kIFNBU0wgU0NSQU0gcG9ydCBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYm9vdHN0cmFwQnJva2Vyc1Nhc2xTY3JhbSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9ib290c3RyYXBCcm9rZXJzKCdCb290c3RyYXBCcm9rZXJTdHJpbmdTYXNsU2NyYW0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgYnJva2VycyB0aGF0IGEgU0FTTC9JQU0gYXV0aGVudGljYXRlZCBjbGllbnQgYXBwbGljYXRpb24gY2FuIHVzZSB0byBib290c3RyYXBcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBnZXRCb290c3RyYXBCcm9rZXJzYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHJldHVybnMgLSBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIEROUyBuYW1lcyAob3IgSVApIGFuZCBUTFMgcG9ydCBwYWlycy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYm9vdHN0cmFwQnJva2Vyc1Nhc2xJYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Jvb3RzdHJhcEJyb2tlcnMoJ0Jvb3RzdHJhcEJyb2tlclN0cmluZ1Nhc2xJYW0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdXNlcnNuYW1lcyB0byByZWdpc3RlciB3aXRoIHRoZSBjbHVzdGVyLiBUaGUgcGFzc3dvcmQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGdlbmVyYXRlZCB1c2luZyBTZWNyZXRzXG4gICAqIE1hbmFnZXIgYW5kIHRoZSB7IHVzZXJuYW1lLCBwYXNzd29yZCB9IEpTT04gb2JqZWN0IHN0b3JlZCBpbiBTZWNyZXRzIE1hbmFnZXIgYXMgYEFtYXpvbk1TS191c2VybmFtZWAuXG4gICAqXG4gICAqIE11c3QgYmUgdXNpbmcgdGhlIFNBU0wvU0NSQU0gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtLlxuICAgKlxuICAgKiBAcGFyYW0gdXNlcm5hbWVzIC0gdXNlcm5hbWUocykgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgY2x1c3RlclxuICAgKi9cbiAgcHVibGljIGFkZFVzZXIoLi4udXNlcm5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5KSB7XG4gICAgICBjb25zdCBNU0tfU0VDUkVUX1BSRUZJWCA9ICdBbWF6b25NU0tfJzsgLy8gUmVxdWlyZWRcbiAgICAgIGNvbnN0IHNlY3JldHMgPSB1c2VybmFtZXMubWFwKFxuICAgICAgICAodXNlcm5hbWUpID0+XG4gICAgICAgICAgbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCBgS2Fma2FVc2VyJHt1c2VybmFtZX1gLCB7XG4gICAgICAgICAgICBzZWNyZXROYW1lOiBgJHtNU0tfU0VDUkVUX1BSRUZJWH0ke3RoaXMuY2x1c3Rlck5hbWV9XyR7dXNlcm5hbWV9YCxcbiAgICAgICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7IHVzZXJuYW1lIH0pLFxuICAgICAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLnNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5LFxuICAgICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgICAgbmV3IGNyLkF3c0N1c3RvbVJlc291cmNlKHRoaXMsIGBCYXRjaEFzc29jaWF0ZVNjcmFtU2VjcmV0cyR7YWRkcmVzc09mKHVzZXJuYW1lcyl9YCwge1xuICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6ICdLYWZrYScsXG4gICAgICAgICAgYWN0aW9uOiAnYmF0Y2hBc3NvY2lhdGVTY3JhbVNlY3JldCcsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQ2x1c3RlckFybjogdGhpcy5jbHVzdGVyQXJuLFxuICAgICAgICAgICAgU2VjcmV0QXJuTGlzdDogc2VjcmV0cy5tYXAoKHNlY3JldCkgPT4gc2VjcmV0LnNlY3JldEFybiksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGNyLlBoeXNpY2FsUmVzb3VyY2VJZC5vZignQ3JlYXRlVXNlcnMnKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU3RhdGVtZW50cyhbXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogWydrbXM6Q3JlYXRlR3JhbnQnXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW3RoaXMuc2FzbFNjcmFtQXV0aGVudGljYXRpb25LZXk/LmtleUFybl0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogWydrYWZrYTpCYXRjaEFzc29jaWF0ZVNjcmFtU2VjcmV0J10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFt0aGlzLmNsdXN0ZXJBcm5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdKSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjcmVhdGUgdXNlcnMgaWYgYW4gYXV0aGVudGljYXRpb24gS01TIGtleSBoYXMgbm90IGJlZW4gY3JlYXRlZC9wcm92aWRlZC4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
546
|
+
Cluster[_b] = { fqn: "@aws-cdk/aws-msk-alpha.Cluster", version: "2.42.0-alpha.0" };
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsdXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFHM0MsaUVBQWlFO0FBQ2pFLG9DQUFvQztBQUNwQyw2Q0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELCtDQUFzRTtBQUV0RSw4REFBNEQ7QUFFNUQsaURBQWlEO0FBcUJqRDs7R0FFRztBQUNILE1BQWUsV0FBWSxTQUFRLElBQUksQ0FBQyxRQUFRO0lBTTlDLDBDQUEwQztJQUMxQyxJQUFXLFdBQVc7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQzFFO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzFCO0NBQ0Y7QUErSEQ7Ozs7R0FJRztBQUNILElBQVksc0JBaUJYO0FBakJELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gsNkNBQW1CLENBQUE7SUFDbkI7O09BRUc7SUFDSCxtREFBeUIsQ0FBQTtJQUN6Qjs7T0FFRztJQUNILHVFQUE2QyxDQUFBO0lBQzdDOztPQUVHO0lBQ0gsNkVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQWpCVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQWlCakM7QUFvRUQ7O0dBRUc7QUFDSCxJQUFZLHNCQWFYO0FBYkQsV0FBWSxzQkFBc0I7SUFDaEM7O09BRUc7SUFDSCxxQ0FBVyxDQUFBO0lBQ1g7O09BRUc7SUFDSCx5REFBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILGlEQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFiVyxzQkFBc0IsR0FBdEIsOEJBQXNCLEtBQXRCLDhCQUFzQixRQWFqQztBQWtFRDs7R0FFRztBQUNILE1BQWEsb0JBQW9CO0lBc0IvQjs7O09BR0c7SUFDSCxZQUNrQixTQUF5QixFQUN6QixRQUF1QjtRQUR2QixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFlO0tBQ3JDO0lBNUJKOztPQUVHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFvQjs7Ozs7Ozs7OztRQUNyQyxPQUFPLElBQUksb0JBQW9CLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ25EO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQW1COzs7Ozs7Ozs7O1FBQ25DLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbkQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBOEI7Ozs7Ozs7Ozs7UUFDbEQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztLQUM3RDs7QUFwQkgsb0RBOEJDOzs7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxPQUFRLFNBQVEsV0FBVztJQXdCdEMsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztTQUNoQyxDQUFDLENBQUM7Ozs7OzsrQ0EzQk0sT0FBTzs7OztRQTZCaEIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDO1lBQ3RDLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJO2dCQUN0QyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtvQkFDM0MsV0FBVyxFQUFFLG9CQUFvQjtvQkFDakMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2lCQUNmLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxDQUNULDRDQUE0QyxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUM3RSxDQUFDO1NBQ0g7UUFFRCxJQUNFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUMzQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFDN0I7WUFDQSxNQUFNLEtBQUssQ0FDVCx3R0FBd0c7Z0JBQ3RHLFNBQVMsS0FBSyxDQUFDLFdBQVcsYUFBYSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUNyRSxDQUFDO1NBQ0g7UUFFRCxJQUNFLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsR0FBRztZQUMxQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDNUM7WUFDQSxNQUFNLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1NBQ3RFO1FBRUQsSUFDRSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsWUFBWTtZQUNyQyxzQkFBc0IsQ0FBQyxTQUFTO1lBQ2xDLEtBQUssQ0FBQyxvQkFBb0IsRUFDMUI7WUFDQSxNQUFNLEtBQUssQ0FDVCxzR0FBc0csQ0FDdkcsQ0FBQztTQUNIO2FBQU0sSUFDTCxLQUFLLENBQUMsbUJBQW1CLEVBQUUsWUFBWTtZQUNyQyxzQkFBc0IsQ0FBQyxhQUFhO1lBQ3RDLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxLQUFLO2dCQUMzQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUM3QztZQUNBLE1BQU0sS0FBSyxDQUNULG9IQUFvSCxDQUNySCxDQUFDO1NBQ0g7UUFFRCxNQUFNLFVBQVUsR0FDZCxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUM7UUFDM0MscUNBQXFDO1FBQ3JDLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsS0FBSyxFQUFFO1lBQ3hDLE1BQU0sS0FBSyxDQUNULGdEQUFnRCxDQUNqRCxDQUFDO1NBQ0g7UUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWTtZQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNwQixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUNsRSxDQUFDO1FBRUosTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLGFBQWE7WUFDMUQsQ0FBQyxDQUFDO2dCQUNBLGtCQUFrQixFQUNkLEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUs7YUFDN0M7WUFDRCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsa0NBQWtDO1FBRWpELE1BQU0sbUJBQW1CLEdBQUc7WUFDMUIsWUFBWSxFQUNWLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxZQUFZO2dCQUN2QyxzQkFBc0IsQ0FBQyxHQUFHO1lBQzVCLFNBQVMsRUFBRSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsZUFBZSxJQUFJLElBQUk7U0FDOUQsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUNsQixLQUFLLENBQUMsVUFBVSxFQUFFLDJCQUEyQjtZQUM3QyxLQUFLLENBQUMsVUFBVSxFQUFFLDRCQUE0QjtZQUM1QyxDQUFDLENBQUM7Z0JBQ0EsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLDJCQUEyQjt3QkFDeEQsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTt3QkFDM0IsQ0FBQyxDQUFDLFNBQVM7b0JBQ2IsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVO3dCQUM1QixFQUFFLDRCQUE0Qjt3QkFDOUIsQ0FBQyxDQUFDLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRTt3QkFDM0IsQ0FBQyxDQUFDLFNBQVM7aUJBQ2Q7YUFDRjtZQUNELENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFaEIsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ2hELElBQUksYUFBYSxJQUFJLDBCQUFZLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyx5Q0FBZ0MsQ0FBQyxFQUFFO1lBQ3RGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3hELE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQ3hCLFVBQVUsRUFBRTtvQkFDVixJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDeEQ7Z0JBQ0QsU0FBUyxFQUFFO29CQUNULGFBQWEsQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUM7aUJBQzFEO2dCQUNELE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDekIsVUFBVSxFQUFFO29CQUNWLFlBQVksRUFBRTt3QkFDWixjQUFjLEVBQUUsMkJBQTJCO3dCQUMzQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsT0FBTztxQkFDbkM7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDOzRCQUMvQixPQUFPLEVBQUUsTUFBTTs0QkFDZixRQUFRLEVBQUUsR0FBRzt5QkFDZCxDQUFDO3FCQUNIO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDLENBQUM7WUFFSixhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN4RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUN4QixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUM7aUJBQ3hEO2dCQUNELFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLE9BQU8sRUFBRTtvQkFDUCxpQkFBaUI7b0JBQ2pCLGVBQWU7aUJBQ2hCO2dCQUNELFVBQVUsRUFBRTtvQkFDVixZQUFZLEVBQUU7d0JBQ1osbUJBQW1CLEVBQUUsS0FBSyxDQUFDLE9BQU87cUJBQ25DO29CQUNELE9BQU8sRUFBRTt3QkFDUCxlQUFlLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQzs0QkFDL0IsT0FBTyxFQUFFLE1BQU07NEJBQ2YsUUFBUSxFQUFFLEdBQUc7eUJBQ2QsQ0FBQztxQkFDSDtpQkFDRjthQUNGLENBQUMsQ0FBQyxDQUFDO1NBQ0w7UUFDRCxNQUFNLFdBQVcsR0FBRztZQUNsQixVQUFVLEVBQUU7Z0JBQ1YsY0FBYyxFQUFFO29CQUNkLE9BQU8sRUFDTCxLQUFLLENBQUMsT0FBTyxFQUFFLGtCQUFrQixLQUFLLFNBQVM7b0JBQ2pELFFBQVEsRUFDTixLQUFLLENBQUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVk7aUJBQ2xEO2dCQUNELFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQ0wsS0FBSyxDQUFDLE9BQU8sRUFBRSwwQkFBMEI7d0JBQ3pDLFNBQVM7b0JBQ1gsY0FBYyxFQUNaLEtBQUssQ0FBQyxPQUFPLEVBQUUsMEJBQTBCO2lCQUM1QztnQkFDRCxFQUFFLEVBQUU7b0JBQ0YsT0FBTyxFQUFFLGFBQWEsS0FBSyxTQUFTO29CQUNwQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVU7b0JBQ2pDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNO2lCQUNsQzthQUNGO1NBQ0YsQ0FBQztRQUVGLElBQ0UsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxLQUFLO1lBQzVDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLFNBQVMsRUFDeEQ7WUFDQSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQzdELFdBQVcsRUFDVCxnRUFBZ0U7Z0JBQ2xFLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQyxXQUFXLGFBQWE7YUFDN0MsQ0FBQyxDQUFDO1lBRUgsbUdBQW1HO1lBQ25HLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxtQkFBbUIsQ0FDakQsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO2dCQUN0QixHQUFHLEVBQ0QsMkhBQTJIO2dCQUM3SCxVQUFVLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxFQUFFO29CQUNQLGFBQWE7b0JBQ2IsYUFBYTtvQkFDYixnQkFBZ0I7b0JBQ2hCLHNCQUFzQjtvQkFDdEIsaUJBQWlCO29CQUNqQixpQkFBaUI7aUJBQ2xCO2dCQUNELFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztnQkFDaEIsVUFBVSxFQUFFO29CQUNWLFlBQVksRUFBRTt3QkFDWixnQkFBZ0IsRUFBRSxrQkFBa0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0I7d0JBQzlFLG1CQUFtQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU87cUJBQ2pEO2lCQUNGO2FBQ0YsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksb0JBQW9CLENBQUM7UUFDekIsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxvQkFBb0IsR0FBRztnQkFDckIsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUU7YUFDckUsQ0FBQztZQUNGLElBQUksS0FBSyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRTtnQkFDeEMsb0JBQW9CLEdBQUc7b0JBQ3JCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNwRSxHQUFHLEVBQUU7d0JBQ0gsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxHQUFHLENBQzVGLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQ25DO3FCQUNGO2lCQUNGLENBQUM7YUFDSDtTQUNGO2FBQU0sSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtZQUN2RCxvQkFBb0IsR0FBRztnQkFDckIsSUFBSSxFQUFFO29CQUNKLEtBQUssRUFBRTt3QkFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxLQUFLO3FCQUNwRDtpQkFDRjthQUNGLENBQUM7U0FDSDthQUFNLElBQ0wsS0FBSyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxzQkFBc0IsS0FBSyxTQUFTLEVBQzFFO1lBQ0Esb0JBQW9CLEdBQUc7Z0JBQ3JCLEdBQUcsRUFBRTtvQkFDSCwyQkFBMkIsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixDQUFDLEdBQUcsQ0FDM0YsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FDbkM7aUJBQ0Y7YUFDRixDQUFDO1NBQ0g7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLG9CQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTztZQUN4QyxtQkFBbUIsRUFDakIsS0FBSyxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxlQUFlLENBQUMsaUJBQWlCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLE1BQU07WUFDbkgsbUJBQW1CLEVBQUU7Z0JBQ25CLFlBQVk7Z0JBQ1osYUFBYSxFQUFFLGVBQWUsQ0FBQyxTQUFTO2dCQUN4QyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNqRCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FDakM7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLGNBQWMsRUFBRTt3QkFDZCxVQUFVLEVBQUUsVUFBVTtxQkFDdkI7aUJBQ0Y7YUFDRjtZQUNELGNBQWMsRUFBRTtnQkFDZCxnQkFBZ0I7Z0JBQ2hCLG1CQUFtQjthQUNwQjtZQUNELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7WUFDMUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxzQkFBc0I7WUFDNUQsY0FBYyxFQUFFLGNBQWM7WUFDOUIsV0FBVyxFQUFFLFdBQVc7WUFDeEIsb0JBQW9CLEVBQUUsb0JBQW9CO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUM5QyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBRS9CLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQy9DLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07U0FDbkMsQ0FBQyxDQUFDO0tBQ0o7SUFsVEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUMxQixLQUEyQixFQUMzQixFQUFVLEVBQ1YsVUFBa0I7UUFFbEIsTUFBTSxNQUFPLFNBQVEsV0FBVztZQUFoQzs7Z0JBQ2tCLGVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQ3hCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsb0VBQW9FO1lBQ3ZKLENBQUM7U0FBQTtRQUVELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzlCO0lBc1NPLGVBQWUsQ0FBQyxZQUE4QjtRQUNwRCxPQUFPLFNBQVMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7S0FDM0M7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssMEJBQTBCLENBQUMsYUFBcUI7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO2dCQUM1RSxRQUFRLEVBQUU7b0JBQ1IsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE1BQU0sRUFBRSxpQkFBaUI7b0JBQ3pCLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7cUJBQzVCO29CQUNELGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQzFDLDJCQUEyQixDQUM1QjtpQkFDRjtnQkFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDN0IsQ0FBQzthQUNILENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0tBQ2xGO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyx5QkFBeUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUNsRTtJQUVEOzs7Ozs7T0FNRztJQUNILElBQVcsNEJBQTRCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLDJCQUEyQixDQUFDLENBQUM7S0FDckU7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssaUJBQWlCLENBQUMsYUFBcUI7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNsQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLG1CQUFtQixhQUFhLEVBQUUsRUFBRTtnQkFDakcsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxPQUFPO29CQUNoQixNQUFNLEVBQUUscUJBQXFCO29CQUM3QixVQUFVLEVBQUU7d0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO3FCQUM1QjtvQkFDRCxrQkFBa0IsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDO2lCQUNqRTtnQkFDRCxNQUFNLEVBQUUsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQztvQkFDOUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztpQkFDN0IsQ0FBQzthQUNILENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7S0FFdEU7SUFDRDs7Ozs7O09BTUc7SUFDSCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBVyxtQkFBbUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztLQUMzRDtJQUVEOzs7Ozs7T0FNRztJQUNILElBQVcseUJBQXlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGdDQUFnQyxDQUFDLENBQUM7S0FDakU7SUFFRDs7Ozs7O09BTUc7SUFDSCxJQUFXLHVCQUF1QjtRQUNoQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0tBQy9EO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE9BQU8sQ0FBQyxHQUFHLFNBQW1CO1FBQ25DLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ25DLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLENBQUMsV0FBVztZQUNuRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUMzQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ1gsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxZQUFZLFFBQVEsRUFBRSxFQUFFO2dCQUN0RCxVQUFVLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsRUFBRTtnQkFDakUsb0JBQW9CLEVBQUU7b0JBQ3BCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztvQkFDbEQsaUJBQWlCLEVBQUUsVUFBVTtpQkFDOUI7Z0JBQ0QsYUFBYSxFQUFFLElBQUksQ0FBQywwQkFBMEI7YUFDL0MsQ0FBQyxDQUNMLENBQUM7WUFFRixJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLG9CQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRTtnQkFDbEYsUUFBUSxFQUFFO29CQUNSLE9BQU8sRUFBRSxPQUFPO29CQUNoQixNQUFNLEVBQUUsMkJBQTJCO29CQUNuQyxVQUFVLEVBQUU7d0JBQ1YsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUMzQixhQUFhLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztxQkFDekQ7b0JBQ0Qsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQzVEO2dCQUNELE1BQU0sRUFBRSxFQUFFLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDO29CQUNoRCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7d0JBQ3RCLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO3dCQUM1QixTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsTUFBTSxDQUFDO3FCQUNyRCxDQUFDO29CQUNGLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQzt3QkFDdEIsT0FBTyxFQUFFLENBQUMsaUNBQWlDLENBQUM7d0JBQzVDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7cUJBQzdCLENBQUM7aUJBQ0gsQ0FBQzthQUNILENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLEtBQUssQ0FDVCxpRkFBaUYsQ0FDbEYsQ0FBQztTQUNIO0tBQ0Y7O0FBcGVILDBCQXFlQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFjbXBjYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYWNtcGNhJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBjb3JlIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IEZlYXR1cmVGbGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNyIGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgUzNfQ1JFQVRFX0RFRkFVTFRfTE9HR0lOR19QT0xJQ1kgfSBmcm9tICdhd3MtY2RrLWxpYi9jeC1hcGknO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IGFkZHJlc3NPZiB9IGZyb20gJ2NvbnN0cnVjdHMvbGliL3ByaXZhdGUvdW5pcXVlaWQnO1xuaW1wb3J0IHsgS2Fma2FWZXJzaW9uIH0gZnJvbSAnLi8nO1xuaW1wb3J0IHsgQ2ZuQ2x1c3RlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tc2snO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBNU0sgQ2x1c3RlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDbHVzdGVyIGV4dGVuZHMgY29yZS5JUmVzb3VyY2UsIGVjMi5JQ29ubmVjdGFibGUge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiBjbHVzdGVyLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSBjbHVzdGVyLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIE1TSyBDbHVzdGVyLlxuICovXG5hYnN0cmFjdCBjbGFzcyBDbHVzdGVyQmFzZSBleHRlbmRzIGNvcmUuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ2x1c3RlciB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjbHVzdGVyQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHByb3RlY3RlZCBfY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucyB8IHVuZGVmaW5lZDtcblxuICAvKiogTWFuYWdlcyBjb25uZWN0aW9ucyBmb3IgdGhlIGNsdXN0ZXIgKi9cbiAgcHVibGljIGdldCBjb25uZWN0aW9ucygpOiBlYzIuQ29ubmVjdGlvbnMge1xuICAgIGlmICghdGhpcy5fY29ubmVjdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gaW1wb3J0ZWQgQ2x1c3RlciBjYW5ub3QgbWFuYWdlIGl0cyBzZWN1cml0eSBncm91cHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rpb25zO1xuICB9XG59XG5cbi8qKlxuICogIFByb3BlcnRpZXMgZm9yIGEgTVNLIENsdXN0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBoeXNpY2FsIG5hbWUgb2YgdGhlIGNsdXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgQXBhY2hlIEthZmthLlxuICAgKi9cbiAgcmVhZG9ubHkga2Fma2FWZXJzaW9uOiBLYWZrYVZlcnNpb247XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgQXBhY2hlIEthZmthIGJyb2tlcnMgZGVwbG95ZWQgaW4gZWFjaCBBdmFpbGFiaWxpdHkgWm9uZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgbnVtYmVyT2ZCcm9rZXJOb2Rlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHZpcnR1YWwgbmV0d29ya2luZyBlbnZpcm9ubWVudCBmb3IgdGhpcyBjbHVzdGVyLlxuICAgKiBNdXN0IGhhdmUgYXQgbGVhc3QgMiBzdWJuZXRzIGluIHR3byBkaWZmZXJlbnQgQVpzLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFdoZXJlIHRvIHBsYWNlIHRoZSBub2RlcyB3aXRoaW4gdGhlIFZQQy5cbiAgICogQW1hem9uIE1TSyBkaXN0cmlidXRlcyB0aGUgYnJva2VyIG5vZGVzIGV2ZW5seSBhY3Jvc3MgdGhlIHN1Ym5ldHMgdGhhdCB5b3Ugc3BlY2lmeS5cbiAgICogVGhlIHN1Ym5ldHMgdGhhdCB5b3Ugc3BlY2lmeSBtdXN0IGJlIGluIGRpc3RpbmN0IEF2YWlsYWJpbGl0eSBab25lcy5cbiAgICogQ2xpZW50IHN1Ym5ldHMgY2FuJ3QgYmUgaW4gQXZhaWxhYmlsaXR5IFpvbmUgdXMtZWFzdC0xZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZC5cbiAgICovXG4gIHJlYWRvbmx5IHZwY1N1Ym5ldHM/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuICAvKipcbiAgICogVGhlIEVDMiBpbnN0YW5jZSB0eXBlIHRoYXQgeW91IHdhbnQgQW1hem9uIE1TSyB0byB1c2Ugd2hlbiBpdCBjcmVhdGVzIHlvdXIgYnJva2Vycy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbXNrL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9tc2stY3JlYXRlLWNsdXN0ZXIuaHRtbCNicm9rZXItaW5zdGFuY2UtdHlwZXNcbiAgICogQGRlZmF1bHQga2Fma2EubTUubGFyZ2VcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgQVdTIHNlY3VyaXR5IGdyb3VwcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZWxhc3RpYyBuZXR3b3JrIGludGVyZmFjZXMgaW4gb3JkZXIgdG8gc3BlY2lmeSB3aG8gY2FuXG4gICAqIGNvbm5lY3QgdG8gYW5kIGNvbW11bmljYXRlIHdpdGggdGhlIEFtYXpvbiBNU0sgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjcmVhdGUgbmV3IHNlY3VyaXR5IGdyb3VwXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IGVjMi5JU2VjdXJpdHlHcm91cFtdO1xuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgc3RvcmFnZSB2b2x1bWVzIGF0dGFjaGVkIHRvIE1TSyBicm9rZXIgbm9kZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMTAwMCBHaUIgRUJTIHZvbHVtZVxuICAgKi9cbiAgcmVhZG9ubHkgZWJzU3RvcmFnZUluZm8/OiBFYnNTdG9yYWdlSW5mbztcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gTVNLIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciB0aGUgY2x1c3Rlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uSW5mbz86IENsdXN0ZXJDb25maWd1cmF0aW9uSW5mbztcbiAgLyoqXG4gICAqIENsdXN0ZXIgbW9uaXRvcmluZyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERFRkFVTFQgbW9uaXRvcmluZyBsZXZlbFxuICAgKi9cbiAgcmVhZG9ubHkgbW9uaXRvcmluZz86IE1vbml0b3JpbmdDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogQ29uZmlndXJlIHlvdXIgTVNLIGNsdXN0ZXIgdG8gc2VuZCBicm9rZXIgbG9ncyB0byBkaWZmZXJlbnQgZGVzdGluYXRpb24gdHlwZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmc/OiBCcm9rZXJMb2dnaW5nO1xuICAvKipcbiAgICogQ29uZmlnIGRldGFpbHMgZm9yIGVuY3J5cHRpb24gaW4gdHJhbnNpdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uSW5UcmFuc2l0PzogRW5jcnlwdGlvbkluVHJhbnNpdENvbmZpZztcbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgY2xpZW50IGF1dGhlbnRpY2F0aW9uLlxuICAgKiBNU0sgc3VwcG9ydHMgdXNpbmcgcHJpdmF0ZSBUTFMgY2VydGlmaWNhdGVzIG9yIFNBU0wvU0NSQU0gdG8gYXV0aGVudGljYXRlIHRoZSBpZGVudGl0eSBvZiBjbGllbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBjbGllbnRBdXRoZW50aWNhdGlvbj86IENsaWVudEF1dGhlbnRpY2F0aW9uO1xuICAvKipcbiAgICogV2hhdCB0byBkbyB3aGVuIHRoaXMgcmVzb3VyY2UgaXMgZGVsZXRlZCBmcm9tIGEgc3RhY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuUkVUQUlOXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogY29yZS5SZW1vdmFsUG9saWN5O1xufVxuXG4vKipcbiAqIEVCUyB2b2x1bWUgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWJzU3RvcmFnZUluZm8ge1xuICAvKipcbiAgICogVGhlIHNpemUgaW4gR2lCIG9mIHRoZSBFQlMgdm9sdW1lIGZvciB0aGUgZGF0YSBkcml2ZSBvbiBlYWNoIGJyb2tlciBub2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMDAwXG4gICAqL1xuICByZWFkb25seSB2b2x1bWVTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEFXUyBLTVMga2V5IGZvciBlbmNyeXB0aW5nIGRhdGEgYXQgcmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgVXNlcyBBV1MgbWFuYWdlZCBDTUsgKGF3cy9rYWZrYSlcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcbn1cblxuLyoqXG4gKiBUaGUgQW1hem9uIE1TSyBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgdGhlIGNsdXN0ZXIuXG4gKiBOb3RlOiBUaGVyZSBpcyBjdXJyZW50bHkgbm8gQ2xvdWRmb3JtYXRpb24gUmVzb3VyY2UgdG8gY3JlYXRlIGEgQ29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJDb25maWd1cmF0aW9uSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIE1TSyBjb25maWd1cmF0aW9uIHRvIHVzZS5cbiAgICogRm9yIGV4YW1wbGUsIGFybjphd3M6a2Fma2E6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpjb25maWd1cmF0aW9uL2V4YW1wbGUtY29uZmlndXJhdGlvbi1uYW1lL2FiY2RhYmNkLTEyMzQtYWJjZC0xMjM0LWFiY2QxMjNlOGU4ZS0xLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcmV2aXNpb24gb2YgdGhlIEFtYXpvbiBNU0sgY29uZmlndXJhdGlvbiB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBsZXZlbCBvZiBtb25pdG9yaW5nIGZvciB0aGUgTVNLIGNsdXN0ZXJcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tc2svbGF0ZXN0L2RldmVsb3Blcmd1aWRlL21vbml0b3JpbmcuaHRtbCNtZXRyaWNzLWRldGFpbHNcbiAqL1xuZXhwb3J0IGVudW0gQ2x1c3Rlck1vbml0b3JpbmdMZXZlbCB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IG1ldHJpY3MgYXJlIHRoZSBlc3NlbnRpYWwgbWV0cmljcyB0byBtb25pdG9yLlxuICAgKi9cbiAgREVGQVVMVCA9ICdERUZBVUxUJyxcbiAgLyoqXG4gICAqIFBlciBCcm9rZXIgbWV0cmljcyBnaXZlIHlvdSBtZXRyaWNzIGF0IHRoZSBicm9rZXIgbGV2ZWwuXG4gICAqL1xuICBQRVJfQlJPS0VSID0gJ1BFUl9CUk9LRVInLFxuICAvKipcbiAgICogUGVyIFRvcGljIFBlciBCcm9rZXIgbWV0cmljcyBoZWxwIHlvdSB1bmRlcnN0YW5kIHZvbHVtZSBhdCB0aGUgdG9waWMgbGV2ZWwuXG4gICAqL1xuICBQRVJfVE9QSUNfUEVSX0JST0tFUiA9ICdQRVJfVE9QSUNfUEVSX0JST0tFUicsXG4gIC8qKlxuICAgKiBQZXIgVG9waWMgUGVyIFBhcnRpdGlvbiBtZXRyaWNzIGhlbHAgeW91IHVuZGVyc3RhbmQgY29uc3VtZXIgZ3JvdXAgbGFnIGF0IHRoZSB0b3BpYyBwYXJ0aXRpb24gbGV2ZWwuXG4gICAqL1xuICBQRVJfVE9QSUNfUEVSX1BBUlRJVElPTiA9ICdQRVJfVE9QSUNfUEVSX1BBUlRJVElPTicsXG59XG5cbi8qKlxuICogTW9uaXRvcmluZyBDb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9uaXRvcmluZ0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBsZXZlbCBvZiBtb25pdG9yaW5nIGZvciB0aGUgTVNLIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IERFRkFVTFRcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXJNb25pdG9yaW5nTGV2ZWw/OiBDbHVzdGVyTW9uaXRvcmluZ0xldmVsO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgeW91IHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIEpNWCBFeHBvcnRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVByb21ldGhldXNKbXhFeHBvcnRlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB5b3Ugd2FudCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgUHJvbWV0aGV1cyBOb2RlIEV4cG9ydGVyLlxuICAgKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgUHJvbWV0aGV1cyBOb2RlIEV4cG9ydGVyIHRvIGdldCBDUFUgYW5kIGRpc2sgbWV0cmljcyBmb3IgdGhlIGJyb2tlciBub2Rlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVByb21ldGhldXNOb2RlRXhwb3J0ZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZGV0YWlscyByZWxhdGVkIHRvIGJyb2tlciBsb2dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyb2tlckxvZ2dpbmcge1xuICAvKipcbiAgICogVGhlIEtpbmVzaXMgRGF0YSBGaXJlaG9zZSBkZWxpdmVyeSBzdHJlYW0gdGhhdCBpcyB0aGUgZGVzdGluYXRpb24gZm9yIGJyb2tlciBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBmaXJlaG9zZURlbGl2ZXJ5U3RyZWFtTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDbG91ZFdhdGNoIExvZ3MgZ3JvdXAgdGhhdCBpcyB0aGUgZGVzdGluYXRpb24gZm9yIGJyb2tlciBsb2dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBjbG91ZHdhdGNoTG9nR3JvdXA/OiBsb2dzLklMb2dHcm91cDtcbiAgLyoqXG4gICAqIERldGFpbHMgb2YgdGhlIEFtYXpvbiBTMyBkZXN0aW5hdGlvbiBmb3IgYnJva2VyIGxvZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IHMzPzogUzNMb2dnaW5nQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBEZXRhaWxzIG9mIHRoZSBBbWF6b24gUzMgZGVzdGluYXRpb24gZm9yIGJyb2tlciBsb2dzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFMzTG9nZ2luZ0NvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIFMzIGJ1Y2tldCB0aGF0IGlzIHRoZSBkZXN0aW5hdGlvbiBmb3IgYnJva2VyIGxvZ3MuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIC8qKlxuICAgKiBUaGUgUzMgcHJlZml4IHRoYXQgaXMgdGhlIGRlc3RpbmF0aW9uIGZvciBicm9rZXIgbG9ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhlIGVuY3J5cHRpb24gc2V0dGluZyBmb3IgZGF0YSBpbiB0cmFuc2l0IGJldHdlZW4gY2xpZW50cyBhbmQgYnJva2Vycy5cbiAqL1xuZXhwb3J0IGVudW0gQ2xpZW50QnJva2VyRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBUTFMgbWVhbnMgdGhhdCBjbGllbnQtYnJva2VyIGNvbW11bmljYXRpb24gaXMgZW5hYmxlZCB3aXRoIFRMUyBvbmx5LlxuICAgKi9cbiAgVExTID0gJ1RMUycsXG4gIC8qKlxuICAgKiBUTFNfUExBSU5URVhUIG1lYW5zIHRoYXQgY2xpZW50LWJyb2tlciBjb21tdW5pY2F0aW9uIGlzIGVuYWJsZWQgZm9yIGJvdGggVExTLWVuY3J5cHRlZCwgYXMgd2VsbCBhcyBwbGFpbnRleHQgZGF0YS5cbiAgICovXG4gIFRMU19QTEFJTlRFWFQgPSAnVExTX1BMQUlOVEVYVCcsXG4gIC8qKlxuICAgKiBQTEFJTlRFWFQgbWVhbnMgdGhhdCBjbGllbnQtYnJva2VyIGNvbW11bmljYXRpb24gaXMgZW5hYmxlZCBpbiBwbGFpbnRleHQgb25seS5cbiAgICovXG4gIFBMQUlOVEVYVCA9ICdQTEFJTlRFWFQnLFxufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyBmb3IgZW5jcnlwdGluZyBkYXRhIGluIHRyYW5zaXQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbXNrL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9tc2stZW5jcnlwdGlvbi5odG1sI21zay1lbmNyeXB0aW9uLWluLXRyYW5zaXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmNyeXB0aW9uSW5UcmFuc2l0Q29uZmlnIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgZW5jcnlwdGlvbiBzZXR0aW5nIGZvciBkYXRhIGluIHRyYW5zaXQgYmV0d2VlbiBjbGllbnRzIGFuZCBicm9rZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFRMU1xuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50QnJva2VyPzogQ2xpZW50QnJva2VyRW5jcnlwdGlvbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IGRhdGEgY29tbXVuaWNhdGlvbiBhbW9uZyB0aGUgYnJva2VyIG5vZGVzIG9mIHRoZSBjbHVzdGVyIGlzIGVuY3J5cHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlSW5DbHVzdGVyPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTQVNMIGF1dGhlbnRpY2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTYXNsQXV0aFByb3BzIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBTQVNML1NDUkFNIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2NyYW0/OiBib29sZWFuO1xuICAvKipcbiAgICogRW5hYmxlIElBTSBhY2Nlc3MgY29udHJvbC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlhbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBLTVMgS2V5IHRvIGVuY3J5cHQgU0FTTC9TQ1JBTSBzZWNyZXRzLlxuICAgKlxuICAgKiBZb3UgbXVzdCB1c2UgYSBjdXN0b21lciBtYXN0ZXIga2V5IChDTUspIHdoZW4gY3JlYXRpbmcgdXNlcnMgaW4gc2VjcmV0cyBtYW5hZ2VyLlxuICAgKiBZb3UgY2Fubm90IHVzZSBhIFNlY3JldCB3aXRoIEFtYXpvbiBNU0sgdGhhdCB1c2VzIHRoZSBkZWZhdWx0IFNlY3JldHMgTWFuYWdlciBlbmNyeXB0aW9uIGtleS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBDTUsgd2lsbCBiZSBjcmVhdGVkIHdpdGggYWxpYXMgbXNrL3tjbHVzdGVyTmFtZX0vc2FzbC9zY3JhbVxuICAgKi9cbiAgcmVhZG9ubHkga2V5Pzoga21zLklLZXk7XG59XG5cbi8qKlxuICogVExTIGF1dGhlbnRpY2F0aW9uIHByb3BlcnRpZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUbHNBdXRoUHJvcHMge1xuICAvKipcbiAgICogTGlzdCBvZiBBQ00gQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMgdG8gZW5hYmxlIFRMUyBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZUF1dGhvcml0aWVzPzogYWNtcGNhLklDZXJ0aWZpY2F0ZUF1dGhvcml0eVtdO1xufVxuXG4vKipcbiAqIFNBU0wgKyBUTFMgYXV0aGVudGljYXRpb24gcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhc2xUbHNBdXRoUHJvcHMgZXh0ZW5kcyBTYXNsQXV0aFByb3BzLCBUbHNBdXRoUHJvcHMgeyB9XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciBjbGllbnQgYXV0aGVudGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gIC8qKlxuICAgKiBTQVNMIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNhc2wocHJvcHM6IFNhc2xBdXRoUHJvcHMpOiBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoZW50aWNhdGlvbihwcm9wcywgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUTFMgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdGxzKHByb3BzOiBUbHNBdXRoUHJvcHMpOiBDbGllbnRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRBdXRoZW50aWNhdGlvbih1bmRlZmluZWQsIHByb3BzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTQVNMICsgVExTIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNhc2xUbHMoc2FzbFRsc1Byb3BzOiBTYXNsVGxzQXV0aFByb3BzKTogQ2xpZW50QXV0aGVudGljYXRpb24ge1xuICAgIHJldHVybiBuZXcgQ2xpZW50QXV0aGVudGljYXRpb24oc2FzbFRsc1Byb3BzLCBzYXNsVGxzUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBzYXNsUHJvcHMgLSBwcm9wZXJ0aWVzIGZvciBTQVNMIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBwYXJhbSB0bHNQcm9wcyAtIHByb3BlcnRpZXMgZm9yIFRMUyBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2FzbFByb3BzPzogU2FzbEF1dGhQcm9wcyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGxzUHJvcHM/OiBUbHNBdXRoUHJvcHMsXG4gICkge31cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBNU0sgQ2x1c3Rlci5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpNU0s6OkNsdXN0ZXJcbiAqL1xuZXhwb3J0IGNsYXNzIENsdXN0ZXIgZXh0ZW5kcyBDbHVzdGVyQmFzZSB7XG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgYW4gZXhpc3RpbmcgY2x1c3RlciwgZGVmaW5lZCBvdXRzaWRlIG9mIHRoZSBDREsgY29kZSwgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNsdXN0ZXJBcm4oXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY2x1c3RlckFybjogc3RyaW5nLFxuICApOiBJQ2x1c3RlciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ2x1c3RlckJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJBcm4gPSBjbHVzdGVyQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJOYW1lID0gY29yZS5Gbi5zZWxlY3QoMSwgY29yZS5Gbi5zcGxpdCgnLycsIGNsdXN0ZXJBcm4pKTsgLy8gWydhcm46cGFydGl0aW9uOmthZmthOnJlZ2lvbjphY2NvdW50LWlkJywgY2x1c3Rlck5hbWUsIGNsdXN0ZXJJZF1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNsdXN0ZXJOYW1lOiBzdHJpbmc7XG4gIC8qKiBLZXkgdXNlZCB0byBlbmNyeXB0IFNBU0wvU0NSQU0gdXNlcnMgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5Pzoga21zLklLZXk7XG4gIHByaXZhdGUgX2NsdXN0ZXJEZXNjcmlwdGlvbj86IGNyLkF3c0N1c3RvbVJlc291cmNlO1xuICBwcml2YXRlIF9jbHVzdGVyQm9vdHN0cmFwQnJva2Vycz86IGNyLkF3c0N1c3RvbVJlc291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENsdXN0ZXJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5jbHVzdGVyTmFtZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Ym5ldFNlbGVjdGlvbiA9IHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHByb3BzLnZwY1N1Ym5ldHMpO1xuXG4gICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBwcm9wcy5zZWN1cml0eUdyb3VwcyA/PyBbXG4gICAgICAgIG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ01TSyBzZWN1cml0eSBncm91cCcsXG4gICAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGlmIChzdWJuZXRTZWxlY3Rpb24uc3VibmV0cy5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYENsdXN0ZXIgcmVxdWlyZXMgYXQgbGVhc3QgMiBzdWJuZXRzLCBnb3QgJHtzdWJuZXRTZWxlY3Rpb24uc3VibmV0cy5sZW5ndGh9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWNvcmUuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmNsdXN0ZXJOYW1lKSAmJlxuICAgICAgIS9eW2EtekEtWjAtOV0rJC8udGVzdChwcm9wcy5jbHVzdGVyTmFtZSkgJiZcbiAgICAgIHByb3BzLmNsdXN0ZXJOYW1lLmxlbmd0aCA+IDY0XG4gICAgKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ1RoZSBjbHVzdGVyIG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGhhdmUgYSBtYXhpbXVtIGxlbmd0aCBvZiA2NCBjaGFyYWN0ZXJzLicgK1xuICAgICAgICAgIGBnb3Q6ICcke3Byb3BzLmNsdXN0ZXJOYW1lfS4gbGVuZ3RoOiAke3Byb3BzLmNsdXN0ZXJOYW1lLmxlbmd0aH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnNhc2xQcm9wcz8uaWFtICYmXG4gICAgICBwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5zY3JhbVxuICAgICkge1xuICAgICAgdGhyb3cgRXJyb3IoJ09ubHkgb25lIGNsaWVudCBhdXRoZW50aWNhdGlvbiBtZXRob2QgY2FuIGJlIGVuYWJsZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMuZW5jcnlwdGlvbkluVHJhbnNpdD8uY2xpZW50QnJva2VyID09PVxuICAgICAgICBDbGllbnRCcm9rZXJFbmNyeXB0aW9uLlBMQUlOVEVYVCAmJlxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb25cbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnVG8gZW5hYmxlIGNsaWVudCBhdXRoZW50aWNhdGlvbiwgeW91IG11c3QgZW5hYmxlZCBUTFMtZW5jcnlwdGVkIHRyYWZmaWMgYmV0d2VlbiBjbGllbnRzIGFuZCBicm9rZXJzLicsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwcm9wcy5lbmNyeXB0aW9uSW5UcmFuc2l0Py5jbGllbnRCcm9rZXIgPT09XG4gICAgICAgIENsaWVudEJyb2tlckVuY3J5cHRpb24uVExTX1BMQUlOVEVYVCAmJlxuICAgICAgKHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy5zYXNsUHJvcHM/LnNjcmFtIHx8XG4gICAgICAgIHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy5zYXNsUHJvcHM/LmlhbSlcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnVG8gZW5hYmxlIFNBU0wvU0NSQU0gb3IgSUFNIGF1dGhlbnRpY2F0aW9uLCB5b3UgbXVzdCBvbmx5IGFsbG93IFRMUy1lbmNyeXB0ZWQgdHJhZmZpYyBiZXR3ZWVuIGNsaWVudHMgYW5kIGJyb2tlcnMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgdm9sdW1lU2l6ZSA9XG4gICAgICBwcm9wcy5lYnNTdG9yYWdlSW5mbz8udm9sdW1lU2l6ZSA/PyAxMDAwO1xuICAgIC8vIE1pbmltdW06IDEgR2lCLCBtYXhpbXVtOiAxNjM4NCBHaUJcbiAgICBpZiAodm9sdW1lU2l6ZSA8IDEgfHwgdm9sdW1lU2l6ZSA+IDE2Mzg0KSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0VCUyB2b2x1bWUgc2l6ZSBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDEtMTYzODQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZVR5cGUgPSBwcm9wcy5pbnN0YW5jZVR5cGVcbiAgICAgID8gdGhpcy5tc2tJbnN0YW5jZVR5cGUocHJvcHMuaW5zdGFuY2VUeXBlKVxuICAgICAgOiB0aGlzLm1za0luc3RhbmNlVHlwZShcbiAgICAgICAgZWMyLkluc3RhbmNlVHlwZS5vZihlYzIuSW5zdGFuY2VDbGFzcy5NNSwgZWMyLkluc3RhbmNlU2l6ZS5MQVJHRSksXG4gICAgICApO1xuXG4gICAgY29uc3QgZW5jcnlwdGlvbkF0UmVzdCA9IHByb3BzLmVic1N0b3JhZ2VJbmZvPy5lbmNyeXB0aW9uS2V5XG4gICAgICA/IHtcbiAgICAgICAgZGF0YVZvbHVtZUttc0tleUlkOlxuICAgICAgICAgICAgcHJvcHMuZWJzU3RvcmFnZUluZm8uZW5jcnlwdGlvbktleS5rZXlJZCxcbiAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkOyAvLyBNU0sgd2lsbCBjcmVhdGUgdGhlIG1hbmFnZWQga2V5XG5cbiAgICBjb25zdCBlbmNyeXB0aW9uSW5UcmFuc2l0ID0ge1xuICAgICAgY2xpZW50QnJva2VyOlxuICAgICAgICBwcm9wcy5lbmNyeXB0aW9uSW5UcmFuc2l0Py5jbGllbnRCcm9rZXIgPz9cbiAgICAgICAgQ2xpZW50QnJva2VyRW5jcnlwdGlvbi5UTFMsXG4gICAgICBpbkNsdXN0ZXI6IHByb3BzLmVuY3J5cHRpb25JblRyYW5zaXQ/LmVuYWJsZUluQ2x1c3RlciA/PyB0cnVlLFxuICAgIH07XG5cbiAgICBjb25zdCBvcGVuTW9uaXRvcmluZyA9XG4gICAgICBwcm9wcy5tb25pdG9yaW5nPy5lbmFibGVQcm9tZXRoZXVzSm14RXhwb3J0ZXIgfHxcbiAgICAgIHByb3BzLm1vbml0b3Jpbmc/LmVuYWJsZVByb21ldGhldXNOb2RlRXhwb3J0ZXJcbiAgICAgICAgPyB7XG4gICAgICAgICAgcHJvbWV0aGV1czoge1xuICAgICAgICAgICAgam14RXhwb3J0ZXI6IHByb3BzLm1vbml0b3Jpbmc/LmVuYWJsZVByb21ldGhldXNKbXhFeHBvcnRlclxuICAgICAgICAgICAgICA/IHsgZW5hYmxlZEluQnJva2VyOiB0cnVlIH1cbiAgICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub2RlRXhwb3J0ZXI6IHByb3BzLm1vbml0b3JpbmdcbiAgICAgICAgICAgICAgPy5lbmFibGVQcm9tZXRoZXVzTm9kZUV4cG9ydGVyXG4gICAgICAgICAgICAgID8geyBlbmFibGVkSW5Ccm9rZXI6IHRydWUgfVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgbG9nZ2luZ0J1Y2tldCA9IHByb3BzLmxvZ2dpbmc/LnMzPy5idWNrZXQ7XG4gICAgaWYgKGxvZ2dpbmdCdWNrZXQgJiYgRmVhdHVyZUZsYWdzLm9mKHRoaXMpLmlzRW5hYmxlZChTM19DUkVBVEVfREVGQVVMVF9MT0dHSU5HX1BPTElDWSkpIHtcbiAgICAgIGNvbnN0IHN0YWNrID0gY29yZS5TdGFjay5vZih0aGlzKTtcbiAgICAgIGxvZ2dpbmdCdWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZGVsaXZlcnkubG9ncy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGxvZ2dpbmdCdWNrZXQuYXJuRm9yT2JqZWN0cyhgQVdTTG9ncy8ke3N0YWNrLmFjY291bnR9LypgKSxcbiAgICAgICAgXSxcbiAgICAgICAgYWN0aW9uczogWydzMzpQdXRPYmplY3QnXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ3MzOngtYW16LWFjbCc6ICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJyxcbiAgICAgICAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFybic6IHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICcqJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG5cbiAgICAgIGxvZ2dpbmdCdWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW1xuICAgICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZGVsaXZlcnkubG9ncy5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW2xvZ2dpbmdCdWNrZXQuYnVja2V0QXJuXSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdzMzpHZXRCdWNrZXRBY2wnLFxuICAgICAgICAgICdzMzpMaXN0QnVja2V0JyxcbiAgICAgICAgXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIFN0cmluZ0VxdWFsczoge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBY2NvdW50Jzogc3RhY2suYWNjb3VudCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEFybkxpa2U6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQXJuJzogc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJyonLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgY29uc3QgbG9nZ2luZ0luZm8gPSB7XG4gICAgICBicm9rZXJMb2dzOiB7XG4gICAgICAgIGNsb3VkV2F0Y2hMb2dzOiB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIHByb3BzLmxvZ2dpbmc/LmNsb3Vkd2F0Y2hMb2dHcm91cCAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgIGxvZ0dyb3VwOlxuICAgICAgICAgICAgcHJvcHMubG9nZ2luZz8uY2xvdWR3YXRjaExvZ0dyb3VwPy5sb2dHcm91cE5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGZpcmVob3NlOiB7XG4gICAgICAgICAgZW5hYmxlZDpcbiAgICAgICAgICAgIHByb3BzLmxvZ2dpbmc/LmZpcmVob3NlRGVsaXZlcnlTdHJlYW1OYW1lICE9PVxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIGRlbGl2ZXJ5U3RyZWFtOlxuICAgICAgICAgICAgcHJvcHMubG9nZ2luZz8uZmlyZWhvc2VEZWxpdmVyeVN0cmVhbU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHMzOiB7XG4gICAgICAgICAgZW5hYmxlZDogbG9nZ2luZ0J1Y2tldCAhPT0gdW5kZWZpbmVkLFxuICAgICAgICAgIGJ1Y2tldDogbG9nZ2luZ0J1Y2tldD8uYnVja2V0TmFtZSxcbiAgICAgICAgICBwcmVmaXg6IHByb3BzLmxvZ2dpbmc/LnMzPy5wcmVmaXgsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8uc2FzbFByb3BzPy5zY3JhbSAmJlxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnNhc2xQcm9wcz8ua2V5ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuc2FzbFNjcmFtQXV0aGVudGljYXRpb25LZXkgPSBuZXcga21zLktleSh0aGlzLCAnU0FTTEtleScsIHtcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgJ1VzZWQgZm9yIGVuY3J5cHRpbmcgTVNLIHNlY3JldHMgZm9yIFNBU0wvU0NSQU0gYXV0aGVudGljYXRpb24uJyxcbiAgICAgICAgYWxpYXM6IGBtc2svJHtwcm9wcy5jbHVzdGVyTmFtZX0vc2FzbC9zY3JhbWAsXG4gICAgICB9KTtcblxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ttcy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvc2VydmljZXMtc2VjcmV0cy1tYW5hZ2VyLmh0bWwjYXNtLXBvbGljaWVzXG4gICAgICB0aGlzLnNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6XG4gICAgICAgICAgICAnQWxsb3cgYWNjZXNzIHRocm91Z2ggQVdTIFNlY3JldHMgTWFuYWdlciBmb3IgYWxsIHByaW5jaXBhbHMgaW4gdGhlIGFjY291bnQgdGhhdCBhcmUgYXV0aG9yaXplZCB0byB1c2UgQVdTIFNlY3JldHMgTWFuYWdlcicsXG4gICAgICAgICAgcHJpbmNpcGFsczogW25ldyBpYW0uQW55UHJpbmNpcGFsKCldLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdrbXM6RW5jcnlwdCcsXG4gICAgICAgICAgICAna21zOkRlY3J5cHQnLFxuICAgICAgICAgICAgJ2ttczpSZUVuY3J5cHQqJyxcbiAgICAgICAgICAgICdrbXM6R2VuZXJhdGVEYXRhS2V5KicsXG4gICAgICAgICAgICAna21zOkNyZWF0ZUdyYW50JyxcbiAgICAgICAgICAgICdrbXM6RGVzY3JpYmVLZXknLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICAgJ2ttczpWaWFTZXJ2aWNlJzogYHNlY3JldHNtYW5hZ2VyLiR7Y29yZS5TdGFjay5vZih0aGlzKS5yZWdpb259LmFtYXpvbmF3cy5jb21gLFxuICAgICAgICAgICAgICAna21zOkNhbGxlckFjY291bnQnOiBjb3JlLlN0YWNrLm9mKHRoaXMpLmFjY291bnQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgY2xpZW50QXV0aGVudGljYXRpb247XG4gICAgaWYgKHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy5zYXNsUHJvcHM/LmlhbSkge1xuICAgICAgY2xpZW50QXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgIHNhc2w6IHsgaWFtOiB7IGVuYWJsZWQ6IHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uLnNhc2xQcm9wcy5pYW0gfSB9LFxuICAgICAgfTtcbiAgICAgIGlmIChwcm9wcy5jbGllbnRBdXRoZW50aWNhdGlvbj8udGxzUHJvcHMpIHtcbiAgICAgICAgY2xpZW50QXV0aGVudGljYXRpb24gPSB7XG4gICAgICAgICAgc2FzbDogeyBpYW06IHsgZW5hYmxlZDogcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24uc2FzbFByb3BzLmlhbSB9IH0sXG4gICAgICAgICAgdGxzOiB7XG4gICAgICAgICAgICBjZXJ0aWZpY2F0ZUF1dGhvcml0eUFybkxpc3Q6IHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy50bHNQcm9wcz8uY2VydGlmaWNhdGVBdXRob3JpdGllcz8ubWFwKFxuICAgICAgICAgICAgICAoY2EpID0+IGNhLmNlcnRpZmljYXRlQXV0aG9yaXR5QXJuLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnNhc2xQcm9wcz8uc2NyYW0pIHtcbiAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICBzYXNsOiB7XG4gICAgICAgICAgc2NyYW06IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uLnNhc2xQcm9wcy5zY3JhbSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcHJvcHMuY2xpZW50QXV0aGVudGljYXRpb24/LnRsc1Byb3BzPy5jZXJ0aWZpY2F0ZUF1dGhvcml0aWVzICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNsaWVudEF1dGhlbnRpY2F0aW9uID0ge1xuICAgICAgICB0bHM6IHtcbiAgICAgICAgICBjZXJ0aWZpY2F0ZUF1dGhvcml0eUFybkxpc3Q6IHByb3BzLmNsaWVudEF1dGhlbnRpY2F0aW9uPy50bHNQcm9wcz8uY2VydGlmaWNhdGVBdXRob3JpdGllcy5tYXAoXG4gICAgICAgICAgICAoY2EpID0+IGNhLmNlcnRpZmljYXRlQXV0aG9yaXR5QXJuLFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IENmbkNsdXN0ZXIodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgY2x1c3Rlck5hbWU6IHByb3BzLmNsdXN0ZXJOYW1lLFxuICAgICAga2Fma2FWZXJzaW9uOiBwcm9wcy5rYWZrYVZlcnNpb24udmVyc2lvbixcbiAgICAgIG51bWJlck9mQnJva2VyTm9kZXM6XG4gICAgICAgIHByb3BzLm51bWJlck9mQnJva2VyTm9kZXMgIT09IHVuZGVmaW5lZCA/XG4gICAgICAgICAgc3VibmV0U2VsZWN0aW9uLmF2YWlsYWJpbGl0eVpvbmVzLmxlbmd0aCAqIHByb3BzLm51bWJlck9mQnJva2VyTm9kZXMgOiBzdWJuZXRTZWxlY3Rpb24uYXZhaWxhYmlsaXR5Wm9uZXMubGVuZ3RoLFxuICAgICAgYnJva2VyTm9kZUdyb3VwSW5mbzoge1xuICAgICAgICBpbnN0YW5jZVR5cGUsXG4gICAgICAgIGNsaWVudFN1Ym5ldHM6IHN1Ym5ldFNlbGVjdGlvbi5zdWJuZXRJZHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiB0aGlzLmNvbm5lY3Rpb25zLnNlY3VyaXR5R3JvdXBzLm1hcChcbiAgICAgICAgICAoZ3JvdXApID0+IGdyb3VwLnNlY3VyaXR5R3JvdXBJZCxcbiAgICAgICAgKSxcbiAgICAgICAgc3RvcmFnZUluZm86IHtcbiAgICAgICAgICBlYnNTdG9yYWdlSW5mbzoge1xuICAgICAgICAgICAgdm9sdW1lU2l6ZTogdm9sdW1lU2l6ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb25JbmZvOiB7XG4gICAgICAgIGVuY3J5cHRpb25BdFJlc3QsXG4gICAgICAgIGVuY3J5cHRpb25JblRyYW5zaXQsXG4gICAgICB9LFxuICAgICAgY29uZmlndXJhdGlvbkluZm86IHByb3BzLmNvbmZpZ3VyYXRpb25JbmZvLFxuICAgICAgZW5oYW5jZWRNb25pdG9yaW5nOiBwcm9wcy5tb25pdG9yaW5nPy5jbHVzdGVyTW9uaXRvcmluZ0xldmVsLFxuICAgICAgb3Blbk1vbml0b3Jpbmc6IG9wZW5Nb25pdG9yaW5nLFxuICAgICAgbG9nZ2luZ0luZm86IGxvZ2dpbmdJbmZvLFxuICAgICAgY2xpZW50QXV0aGVudGljYXRpb246IGNsaWVudEF1dGhlbnRpY2F0aW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jbHVzdGVyTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKFxuICAgICAgY29yZS5Gbi5zZWxlY3QoMSwgY29yZS5Gbi5zcGxpdCgnLycsIHJlc291cmNlLnJlZikpLFxuICAgICk7XG4gICAgdGhpcy5jbHVzdGVyQXJuID0gcmVzb3VyY2UucmVmO1xuXG4gICAgcmVzb3VyY2UuYXBwbHlSZW1vdmFsUG9saWN5KHByb3BzLnJlbW92YWxQb2xpY3ksIHtcbiAgICAgIGRlZmF1bHQ6IGNvcmUuUmVtb3ZhbFBvbGljeS5SRVRBSU4sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1za0luc3RhbmNlVHlwZShpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBga2Fma2EuJHtpbnN0YW5jZVR5cGUudG9TdHJpbmcoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgWm9vS2VlcGVyIENvbm5lY3Rpb24gc3RyaW5nXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZGVzY3JpYmVDbHVzdGVyYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlRmllbGQgRmllbGQgdG8gcmV0dXJuIGZyb20gQVBJIGNhbGwuIGVnLiBab29rZWVwZXJDb25uZWN0U3RyaW5nLCBab29rZWVwZXJDb25uZWN0U3RyaW5nVGxzXG4gICAqIEByZXR1cm5zIC0gVGhlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHVzZSB0byBjb25uZWN0IHRvIHRoZSBBcGFjaGUgWm9vS2VlcGVyIGNsdXN0ZXIuXG4gICAqL1xuICBwcml2YXRlIF96b29rZWVwZXJDb25uZWN0aW9uU3RyaW5nKHJlc3BvbnNlRmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9jbHVzdGVyRGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2NsdXN0ZXJEZXNjcmlwdGlvbiA9IG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCAnWm9va2VlcGVyQ29ubmVjdCcsIHtcbiAgICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnS2Fma2EnLFxuICAgICAgICAgIGFjdGlvbjogJ2Rlc2NyaWJlQ2x1c3RlcicsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQ2x1c3RlckFybjogdGhpcy5jbHVzdGVyQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgICAnWm9vS2VlcGVyQ29ubmVjdGlvblN0cmluZycsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICAgIHJlc291cmNlczogW3RoaXMuY2x1c3RlckFybl0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbHVzdGVyRGVzY3JpcHRpb24uZ2V0UmVzcG9uc2VGaWVsZChgQ2x1c3RlckluZm8uJHtyZXNwb25zZUZpZWxkfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgWm9vS2VlcGVyIENvbm5lY3Rpb24gc3RyaW5nXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZGVzY3JpYmVDbHVzdGVyYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHJldHVybnMgLSBUaGUgY29ubmVjdGlvbiBzdHJpbmcgdG8gdXNlIHRvIGNvbm5lY3QgdG8gdGhlIEFwYWNoZSBab29LZWVwZXIgY2x1c3Rlci5cbiAgICovXG4gIHB1YmxpYyBnZXQgem9va2VlcGVyQ29ubmVjdGlvblN0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl96b29rZWVwZXJDb25uZWN0aW9uU3RyaW5nKCdab29rZWVwZXJDb25uZWN0U3RyaW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBab29LZWVwZXIgQ29ubmVjdGlvbiBzdHJpbmcgZm9yIGEgVExTIGVuYWJsZWQgY2x1c3RlclxuICAgKlxuICAgKiBVc2VzIGEgQ3VzdG9tIFJlc291cmNlIHRvIG1ha2UgYW4gQVBJIGNhbGwgdG8gYGRlc2NyaWJlQ2x1c3RlcmAgdXNpbmcgdGhlIEphdmFzY3JpcHQgU0RLXG4gICAqXG4gICAqIEByZXR1cm5zIC0gVGhlIGNvbm5lY3Rpb24gc3RyaW5nIHRvIHVzZSB0byBjb25uZWN0IHRvIHpvb2tlZXBlciBjbHVzdGVyIG9uIFRMUyBwb3J0LlxuICAgKi9cbiAgcHVibGljIGdldCB6b29rZWVwZXJDb25uZWN0aW9uU3RyaW5nVGxzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3pvb2tlZXBlckNvbm5lY3Rpb25TdHJpbmcoJ1pvb2tlZXBlckNvbm5lY3RTdHJpbmdUbHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgYnJva2VycyB0aGF0IGEgY2xpZW50IGFwcGxpY2F0aW9uIGNhbiB1c2UgdG8gYm9vdHN0cmFwXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZ2V0Qm9vdHN0cmFwQnJva2Vyc2AgdXNpbmcgdGhlIEphdmFzY3JpcHQgU0RLXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZUZpZWxkIEZpZWxkIHRvIHJldHVybiBmcm9tIEFQSSBjYWxsLiBlZy4gQm9vdHN0cmFwQnJva2VyU3RyaW5nU2FzbFNjcmFtLCBCb290c3RyYXBCcm9rZXJTdHJpbmdcbiAgICogQHJldHVybnMgLSBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGhvc3RuYW1lOnBvcnQgcGFpcnMuXG4gICAqL1xuICBwcml2YXRlIF9ib290c3RyYXBCcm9rZXJzKHJlc3BvbnNlRmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl9jbHVzdGVyQm9vdHN0cmFwQnJva2Vycykge1xuICAgICAgdGhpcy5fY2x1c3RlckJvb3RzdHJhcEJyb2tlcnMgPSBuZXcgY3IuQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgYEJvb3RzdHJhcEJyb2tlcnMke3Jlc3BvbnNlRmllbGR9YCwge1xuICAgICAgICBvblVwZGF0ZToge1xuICAgICAgICAgIHNlcnZpY2U6ICdLYWZrYScsXG4gICAgICAgICAgYWN0aW9uOiAnZ2V0Qm9vdHN0cmFwQnJva2VycycsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgQ2x1c3RlckFybjogdGhpcy5jbHVzdGVyQXJuLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YoJ0Jvb3RzdHJhcEJyb2tlcnMnKSxcbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5OiBjci5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICAgIHJlc291cmNlczogW3RoaXMuY2x1c3RlckFybl0sXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbHVzdGVyQm9vdHN0cmFwQnJva2Vycy5nZXRSZXNwb25zZUZpZWxkKHJlc3BvbnNlRmllbGQpO1xuXG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBicm9rZXJzIHRoYXQgYSBjbGllbnQgYXBwbGljYXRpb24gY2FuIHVzZSB0byBib290c3RyYXBcbiAgICpcbiAgICogVXNlcyBhIEN1c3RvbSBSZXNvdXJjZSB0byBtYWtlIGFuIEFQSSBjYWxsIHRvIGBnZXRCb290c3RyYXBCcm9rZXJzYCB1c2luZyB0aGUgSmF2YXNjcmlwdCBTREtcbiAgICpcbiAgICogQHJldHVybnMgLSBBIHN0cmluZyBjb250YWluaW5nIG9uZSBvciBtb3JlIGhvc3RuYW1lOnBvcnQgcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJvb3RzdHJhcEJyb2tlcnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYm9vdHN0cmFwQnJva2VycygnQm9vdHN0cmFwQnJva2VyU3RyaW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGJyb2tlcnMgdGhhdCBhIFRMUyBhdXRoZW50aWNhdGVkIGNsaWVudCBhcHBsaWNhdGlvbiBjYW4gdXNlIHRvIGJvb3RzdHJhcFxuICAgKlxuICAgKiBVc2VzIGEgQ3VzdG9tIFJlc291cmNlIHRvIG1ha2UgYW4gQVBJIGNhbGwgdG8gYGdldEJvb3RzdHJhcEJyb2tlcnNgIHVzaW5nIHRoZSBKYXZhc2NyaXB0IFNES1xuICAgKlxuICAgKiBAcmV0dXJucyAtIEEgc3RyaW5nIGNvbnRhaW5pbmcgb25lIG9yIG1vcmUgRE5TIG5hbWVzIChvciBJUCkgYW5kIFRMUyBwb3J0IHBhaXJzLlxuICAgKi9cbiAgcHVibGljIGdldCBib290c3RyYXBCcm9rZXJzVGxzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jvb3RzdHJhcEJyb2tlcnMoJ0Jvb3RzdHJhcEJyb2tlclN0cmluZ1RscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBicm9rZXJzIHRoYXQgYSBTQVNML1NDUkFNIGF1dGhlbnRpY2F0ZWQgY2xpZW50IGFwcGxpY2F0aW9uIGNhbiB1c2UgdG8gYm9vdHN0cmFwXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZ2V0Qm9vdHN0cmFwQnJva2Vyc2AgdXNpbmcgdGhlIEphdmFzY3JpcHQgU0RLXG4gICAqXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBkbnMgbmFtZSAob3IgSVApIGFuZCBTQVNMIFNDUkFNIHBvcnQgcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJvb3RzdHJhcEJyb2tlcnNTYXNsU2NyYW0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYm9vdHN0cmFwQnJva2VycygnQm9vdHN0cmFwQnJva2VyU3RyaW5nU2FzbFNjcmFtJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsaXN0IG9mIGJyb2tlcnMgdGhhdCBhIFNBU0wvSUFNIGF1dGhlbnRpY2F0ZWQgY2xpZW50IGFwcGxpY2F0aW9uIGNhbiB1c2UgdG8gYm9vdHN0cmFwXG4gICAqXG4gICAqIFVzZXMgYSBDdXN0b20gUmVzb3VyY2UgdG8gbWFrZSBhbiBBUEkgY2FsbCB0byBgZ2V0Qm9vdHN0cmFwQnJva2Vyc2AgdXNpbmcgdGhlIEphdmFzY3JpcHQgU0RLXG4gICAqXG4gICAqIEByZXR1cm5zIC0gQSBzdHJpbmcgY29udGFpbmluZyBvbmUgb3IgbW9yZSBETlMgbmFtZXMgKG9yIElQKSBhbmQgVExTIHBvcnQgcGFpcnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJvb3RzdHJhcEJyb2tlcnNTYXNsSWFtKCkge1xuICAgIHJldHVybiB0aGlzLl9ib290c3RyYXBCcm9rZXJzKCdCb290c3RyYXBCcm9rZXJTdHJpbmdTYXNsSWFtJyk7XG4gIH1cblxuICAvKipcbiAgICogQSBsaXN0IG9mIHVzZXJzbmFtZXMgdG8gcmVnaXN0ZXIgd2l0aCB0aGUgY2x1c3Rlci4gVGhlIHBhc3N3b3JkIHdpbGwgYXV0b21hdGljYWxseSBiZSBnZW5lcmF0ZWQgdXNpbmcgU2VjcmV0c1xuICAgKiBNYW5hZ2VyIGFuZCB0aGUgeyB1c2VybmFtZSwgcGFzc3dvcmQgfSBKU09OIG9iamVjdCBzdG9yZWQgaW4gU2VjcmV0cyBNYW5hZ2VyIGFzIGBBbWF6b25NU0tfdXNlcm5hbWVgLlxuICAgKlxuICAgKiBNdXN0IGJlIHVzaW5nIHRoZSBTQVNML1NDUkFNIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbS5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJuYW1lcyAtIHVzZXJuYW1lKHMpIHRvIHJlZ2lzdGVyIHdpdGggdGhlIGNsdXN0ZXJcbiAgICovXG4gIHB1YmxpYyBhZGRVc2VyKC4uLnVzZXJuYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zYXNsU2NyYW1BdXRoZW50aWNhdGlvbktleSkge1xuICAgICAgY29uc3QgTVNLX1NFQ1JFVF9QUkVGSVggPSAnQW1hem9uTVNLXyc7IC8vIFJlcXVpcmVkXG4gICAgICBjb25zdCBzZWNyZXRzID0gdXNlcm5hbWVzLm1hcChcbiAgICAgICAgKHVzZXJuYW1lKSA9PlxuICAgICAgICAgIG5ldyBzZWNyZXRzbWFuYWdlci5TZWNyZXQodGhpcywgYEthZmthVXNlciR7dXNlcm5hbWV9YCwge1xuICAgICAgICAgICAgc2VjcmV0TmFtZTogYCR7TVNLX1NFQ1JFVF9QUkVGSVh9JHt0aGlzLmNsdXN0ZXJOYW1lfV8ke3VzZXJuYW1lfWAsXG4gICAgICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoeyB1c2VybmFtZSB9KSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5zYXNsU2NyYW1BdXRoZW50aWNhdGlvbktleSxcbiAgICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgQmF0Y2hBc3NvY2lhdGVTY3JhbVNlY3JldHMke2FkZHJlc3NPZih1c2VybmFtZXMpfWAsIHtcbiAgICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnS2Fma2EnLFxuICAgICAgICAgIGFjdGlvbjogJ2JhdGNoQXNzb2NpYXRlU2NyYW1TZWNyZXQnLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIENsdXN0ZXJBcm46IHRoaXMuY2x1c3RlckFybixcbiAgICAgICAgICAgIFNlY3JldEFybkxpc3Q6IHNlY3JldHMubWFwKChzZWNyZXQpID0+IHNlY3JldC5zZWNyZXRBcm4pLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBjci5QaHlzaWNhbFJlc291cmNlSWQub2YoJ0NyZWF0ZVVzZXJzJyksXG4gICAgICAgIH0sXG4gICAgICAgIHBvbGljeTogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVN0YXRlbWVudHMoW1xuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsna21zOkNyZWF0ZUdyYW50J10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFt0aGlzLnNhc2xTY3JhbUF1dGhlbnRpY2F0aW9uS2V5Py5rZXlBcm5dLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsna2Fma2E6QmF0Y2hBc3NvY2lhdGVTY3JhbVNlY3JldCddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5jbHVzdGVyQXJuXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY3JlYXRlIHVzZXJzIGlmIGFuIGF1dGhlbnRpY2F0aW9uIEtNUyBrZXkgaGFzIG5vdCBiZWVuIGNyZWF0ZWQvcHJvdmlkZWQuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-msk-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.42.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for AWS::MSK",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -83,19 +83,19 @@
|
|
|
83
83
|
},
|
|
84
84
|
"license": "Apache-2.0",
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
87
|
-
"@aws-cdk/integ-runner": "2.
|
|
88
|
-
"@aws-cdk/cfn2ts": "2.
|
|
89
|
-
"@aws-cdk/pkglint": "2.
|
|
86
|
+
"@aws-cdk/cdk-build-tools": "2.42.0",
|
|
87
|
+
"@aws-cdk/integ-runner": "2.42.0",
|
|
88
|
+
"@aws-cdk/cfn2ts": "2.42.0",
|
|
89
|
+
"@aws-cdk/pkglint": "2.42.0",
|
|
90
90
|
"@types/jest": "^27.5.2",
|
|
91
91
|
"jest": "^27.5.1",
|
|
92
|
-
"aws-cdk-lib": "2.
|
|
92
|
+
"aws-cdk-lib": "2.42.0",
|
|
93
93
|
"constructs": "^10.0.0",
|
|
94
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
94
|
+
"@aws-cdk/integ-tests-alpha": "2.42.0-alpha.0"
|
|
95
95
|
},
|
|
96
96
|
"dependencies": {},
|
|
97
97
|
"peerDependencies": {
|
|
98
|
-
"aws-cdk-lib": "^2.
|
|
98
|
+
"aws-cdk-lib": "^2.42.0",
|
|
99
99
|
"constructs": "^10.0.0"
|
|
100
100
|
},
|
|
101
101
|
"engines": {
|