@aws-solutions-constructs/core 2.83.0 → 2.84.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 CHANGED
@@ -13,7 +13,7 @@
13
13
  "npmlog": "^7.0.0"
14
14
  },
15
15
  "dependencies": {
16
- "aws-cdk-lib": "^2.187.0",
16
+ "aws-cdk-lib": "^2.190.0",
17
17
  "constructs": "^10.0.0"
18
18
  },
19
19
  "dependencyClosure": {
@@ -1246,6 +1246,19 @@
1246
1246
  }
1247
1247
  }
1248
1248
  },
1249
+ "aws-cdk-lib.aws_dsql": {
1250
+ "targets": {
1251
+ "dotnet": {
1252
+ "package": "Amazon.CDK.AWS.DSQL"
1253
+ },
1254
+ "java": {
1255
+ "package": "software.amazon.awscdk.services.dsql"
1256
+ },
1257
+ "python": {
1258
+ "module": "aws_cdk.aws_dsql"
1259
+ }
1260
+ }
1261
+ },
1249
1262
  "aws-cdk-lib.aws_dynamodb": {
1250
1263
  "targets": {
1251
1264
  "dotnet": {
@@ -4198,6 +4211,58 @@
4198
4211
  ],
4199
4212
  "symbolId": "lib/apigateway-helper:ApiProps"
4200
4213
  },
4214
+ "@aws-solutions-constructs/core.BedrockInferenceProps": {
4215
+ "assembly": "@aws-solutions-constructs/core",
4216
+ "datatype": true,
4217
+ "fqn": "@aws-solutions-constructs/core.BedrockInferenceProps",
4218
+ "kind": "interface",
4219
+ "locationInModule": {
4220
+ "filename": "lib/bedrock-inference-helper.ts",
4221
+ "line": 122
4222
+ },
4223
+ "name": "BedrockInferenceProps",
4224
+ "properties": [
4225
+ {
4226
+ "abstract": true,
4227
+ "immutable": true,
4228
+ "locationInModule": {
4229
+ "filename": "lib/bedrock-inference-helper.ts",
4230
+ "line": 123
4231
+ },
4232
+ "name": "bedrockModelId",
4233
+ "type": {
4234
+ "primitive": "string"
4235
+ }
4236
+ },
4237
+ {
4238
+ "abstract": true,
4239
+ "immutable": true,
4240
+ "locationInModule": {
4241
+ "filename": "lib/bedrock-inference-helper.ts",
4242
+ "line": 125
4243
+ },
4244
+ "name": "deployCrossRegionProfile",
4245
+ "optional": true,
4246
+ "type": {
4247
+ "primitive": "boolean"
4248
+ }
4249
+ },
4250
+ {
4251
+ "abstract": true,
4252
+ "immutable": true,
4253
+ "locationInModule": {
4254
+ "filename": "lib/bedrock-inference-helper.ts",
4255
+ "line": 124
4256
+ },
4257
+ "name": "inferenceProfileProps",
4258
+ "optional": true,
4259
+ "type": {
4260
+ "fqn": "aws-cdk-lib.aws_bedrock.CfnApplicationInferenceProfileProps"
4261
+ }
4262
+ }
4263
+ ],
4264
+ "symbolId": "lib/bedrock-inference-helper:BedrockInferenceProps"
4265
+ },
4201
4266
  "@aws-solutions-constructs/core.BuildDeadLetterQueueProps": {
4202
4267
  "assembly": "@aws-solutions-constructs/core",
4203
4268
  "datatype": true,
@@ -4869,6 +4934,97 @@
4869
4934
  ],
4870
4935
  "symbolId": "lib/glue-job-helper:BuildGlueJobResponse"
4871
4936
  },
4937
+ "@aws-solutions-constructs/core.BuildInferenceProfileProps": {
4938
+ "assembly": "@aws-solutions-constructs/core",
4939
+ "datatype": true,
4940
+ "fqn": "@aws-solutions-constructs/core.BuildInferenceProfileProps",
4941
+ "kind": "interface",
4942
+ "locationInModule": {
4943
+ "filename": "lib/bedrock-inference-helper.ts",
4944
+ "line": 21
4945
+ },
4946
+ "name": "BuildInferenceProfileProps",
4947
+ "properties": [
4948
+ {
4949
+ "abstract": true,
4950
+ "immutable": true,
4951
+ "locationInModule": {
4952
+ "filename": "lib/bedrock-inference-helper.ts",
4953
+ "line": 22
4954
+ },
4955
+ "name": "bedrockModelId",
4956
+ "type": {
4957
+ "primitive": "string"
4958
+ }
4959
+ },
4960
+ {
4961
+ "abstract": true,
4962
+ "immutable": true,
4963
+ "locationInModule": {
4964
+ "filename": "lib/bedrock-inference-helper.ts",
4965
+ "line": 24
4966
+ },
4967
+ "name": "deployCrossRegionProfile",
4968
+ "optional": true,
4969
+ "type": {
4970
+ "primitive": "boolean"
4971
+ }
4972
+ },
4973
+ {
4974
+ "abstract": true,
4975
+ "immutable": true,
4976
+ "locationInModule": {
4977
+ "filename": "lib/bedrock-inference-helper.ts",
4978
+ "line": 23
4979
+ },
4980
+ "name": "inferenceProfileProps",
4981
+ "optional": true,
4982
+ "type": {
4983
+ "fqn": "aws-cdk-lib.aws_bedrock.CfnApplicationInferenceProfileProps"
4984
+ }
4985
+ }
4986
+ ],
4987
+ "symbolId": "lib/bedrock-inference-helper:BuildInferenceProfileProps"
4988
+ },
4989
+ "@aws-solutions-constructs/core.BuildInferenceProfileReponse": {
4990
+ "assembly": "@aws-solutions-constructs/core",
4991
+ "datatype": true,
4992
+ "fqn": "@aws-solutions-constructs/core.BuildInferenceProfileReponse",
4993
+ "kind": "interface",
4994
+ "locationInModule": {
4995
+ "filename": "lib/bedrock-inference-helper.ts",
4996
+ "line": 27
4997
+ },
4998
+ "name": "BuildInferenceProfileReponse",
4999
+ "properties": [
5000
+ {
5001
+ "abstract": true,
5002
+ "immutable": true,
5003
+ "locationInModule": {
5004
+ "filename": "lib/bedrock-inference-helper.ts",
5005
+ "line": 29
5006
+ },
5007
+ "name": "inferenceProfile",
5008
+ "type": {
5009
+ "fqn": "aws-cdk-lib.aws_bedrock.CfnApplicationInferenceProfile"
5010
+ }
5011
+ },
5012
+ {
5013
+ "abstract": true,
5014
+ "immutable": true,
5015
+ "locationInModule": {
5016
+ "filename": "lib/bedrock-inference-helper.ts",
5017
+ "line": 28
5018
+ },
5019
+ "name": "crossRegion",
5020
+ "optional": true,
5021
+ "type": {
5022
+ "primitive": "boolean"
5023
+ }
5024
+ }
5025
+ ],
5026
+ "symbolId": "lib/bedrock-inference-helper:BuildInferenceProfileReponse"
5027
+ },
4872
5028
  "@aws-solutions-constructs/core.BuildKendraIndexProps": {
4873
5029
  "assembly": "@aws-solutions-constructs/core",
4874
5030
  "datatype": true,
@@ -6642,7 +6798,7 @@
6642
6798
  "kind": "interface",
6643
6799
  "locationInModule": {
6644
6800
  "filename": "lib/utils.ts",
6645
- "line": 225
6801
+ "line": 232
6646
6802
  },
6647
6803
  "name": "CfnNagSuppressRule",
6648
6804
  "properties": [
@@ -6651,7 +6807,7 @@
6651
6807
  "immutable": true,
6652
6808
  "locationInModule": {
6653
6809
  "filename": "lib/utils.ts",
6654
- "line": 226
6810
+ "line": 233
6655
6811
  },
6656
6812
  "name": "id",
6657
6813
  "type": {
@@ -6663,7 +6819,7 @@
6663
6819
  "immutable": true,
6664
6820
  "locationInModule": {
6665
6821
  "filename": "lib/utils.ts",
6666
- "line": 227
6822
+ "line": 234
6667
6823
  },
6668
6824
  "name": "reason",
6669
6825
  "type": {
@@ -8285,6 +8441,44 @@
8285
8441
  ],
8286
8442
  "symbolId": "lib/lambda-helper:LambdaProps"
8287
8443
  },
8444
+ "@aws-solutions-constructs/core.MappingResponse": {
8445
+ "assembly": "@aws-solutions-constructs/core",
8446
+ "datatype": true,
8447
+ "fqn": "@aws-solutions-constructs/core.MappingResponse",
8448
+ "kind": "interface",
8449
+ "locationInModule": {
8450
+ "filename": "lib/bedrock-inference-helper.ts",
8451
+ "line": 56
8452
+ },
8453
+ "name": "MappingResponse",
8454
+ "properties": [
8455
+ {
8456
+ "abstract": true,
8457
+ "immutable": true,
8458
+ "locationInModule": {
8459
+ "filename": "lib/bedrock-inference-helper.ts",
8460
+ "line": 58
8461
+ },
8462
+ "name": "mapping",
8463
+ "type": {
8464
+ "fqn": "aws-cdk-lib.CfnMapping"
8465
+ }
8466
+ },
8467
+ {
8468
+ "abstract": true,
8469
+ "immutable": true,
8470
+ "locationInModule": {
8471
+ "filename": "lib/bedrock-inference-helper.ts",
8472
+ "line": 57
8473
+ },
8474
+ "name": "mappingName",
8475
+ "type": {
8476
+ "primitive": "string"
8477
+ }
8478
+ }
8479
+ ],
8480
+ "symbolId": "lib/bedrock-inference-helper:MappingResponse"
8481
+ },
8288
8482
  "@aws-solutions-constructs/core.MediaStoreProps": {
8289
8483
  "assembly": "@aws-solutions-constructs/core",
8290
8484
  "datatype": true,
@@ -9063,6 +9257,12 @@
9063
9257
  {
9064
9258
  "name": "KINESIS_STREAMS"
9065
9259
  },
9260
+ {
9261
+ "name": "BEDROCK"
9262
+ },
9263
+ {
9264
+ "name": "BEDROCK_RUNTIME"
9265
+ },
9066
9266
  {
9067
9267
  "name": "KENDRA"
9068
9268
  }
@@ -9420,7 +9620,7 @@
9420
9620
  "kind": "interface",
9421
9621
  "locationInModule": {
9422
9622
  "filename": "lib/vpc-helper.ts",
9423
- "line": 274
9623
+ "line": 286
9424
9624
  },
9425
9625
  "name": "VpcPropsSet",
9426
9626
  "properties": [
@@ -9429,7 +9629,7 @@
9429
9629
  "immutable": true,
9430
9630
  "locationInModule": {
9431
9631
  "filename": "lib/vpc-helper.ts",
9432
- "line": 277
9632
+ "line": 289
9433
9633
  },
9434
9634
  "name": "deployVpc",
9435
9635
  "optional": true,
@@ -9442,7 +9642,7 @@
9442
9642
  "immutable": true,
9443
9643
  "locationInModule": {
9444
9644
  "filename": "lib/vpc-helper.ts",
9445
- "line": 275
9645
+ "line": 287
9446
9646
  },
9447
9647
  "name": "existingVpc",
9448
9648
  "optional": true,
@@ -9455,7 +9655,7 @@
9455
9655
  "immutable": true,
9456
9656
  "locationInModule": {
9457
9657
  "filename": "lib/vpc-helper.ts",
9458
- "line": 276
9658
+ "line": 288
9459
9659
  },
9460
9660
  "name": "vpcProps",
9461
9661
  "optional": true,
@@ -9505,6 +9705,6 @@
9505
9705
  "symbolId": "lib/waf-helper:WafWebAclProps"
9506
9706
  }
9507
9707
  },
9508
- "version": "2.83.0",
9509
- "fingerprint": "dfRyQU/6+xN/8OIkiTIQucll3pEffwYtVJDKI8sLMfY="
9708
+ "version": "2.84.0",
9709
+ "fingerprint": "fTeIm+Nao9Zn1McBlMDbvIpIrElAygg497jmLl4zhYM="
9510
9710
  }
package/index.d.ts CHANGED
@@ -76,3 +76,4 @@ export * from './lib/websocket-api-defaults';
76
76
  export * from './lib/websocket-api-helper';
77
77
  export * from './lib/pipes-defaults';
78
78
  export * from './lib/pipes-helper';
79
+ export * from './lib/bedrock-inference-helper';
package/index.js CHANGED
@@ -92,4 +92,5 @@ __exportStar(require("./lib/websocket-api-defaults"), exports);
92
92
  __exportStar(require("./lib/websocket-api-helper"), exports);
93
93
  __exportStar(require("./lib/pipes-defaults"), exports);
94
94
  __exportStar(require("./lib/pipes-helper"), exports);
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsZ0VBQThDO0FBQzlDLDZEQUEyQztBQUMzQywyREFBeUM7QUFDekMseURBQXVDO0FBQ3ZDLHVEQUFxQztBQUNyQyxnRUFBOEM7QUFDOUMsbUVBQWlEO0FBQ2pELGlFQUErQztBQUMvQyxpRUFBK0M7QUFDL0MsK0RBQTZDO0FBQzdDLHFFQUFtRDtBQUNuRCw2RUFBMkQ7QUFDM0QscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQyx3REFBc0M7QUFDdEMsc0RBQW9DO0FBQ3BDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsMkRBQXlDO0FBQ3pDLHlEQUF1QztBQUN2QyxnRUFBOEM7QUFDOUMsOERBQTRDO0FBQzVDLDhEQUE0QztBQUM1QyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLHVFQUFxRDtBQUNyRCx5RUFBdUQ7QUFDdkQsOENBQTRCO0FBQzVCLDZEQUEyQztBQUMzQyx5REFBdUM7QUFDdkMsdURBQXFDO0FBQ3JDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsK0RBQTZDO0FBQzdDLDZEQUEyQztBQUMzQyw4REFBNEM7QUFDNUMscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQywyREFBeUM7QUFDekMseURBQXVDO0FBQ3ZDLG9FQUFrRDtBQUNsRCwwREFBd0M7QUFDeEMsd0RBQXNDO0FBQ3RDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsK0RBQTZDO0FBQzdDLDZEQUEyQztBQUMzQyxxREFBbUM7QUFDbkMsb0VBQWtEO0FBQ2xELDJEQUF5QztBQUN6QyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsc0RBQW9DO0FBQ3BDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsdURBQXFDO0FBQ3JDLHFEQUFtQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsYi1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGItaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaWdhdGV3YXktZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpZ2F0ZXdheS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1vZGItdGFibGUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxhc3RpY2FjaGUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxhc3RpY2FjaGUtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZhcmdhdGUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmFyZ2F0ZS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaW90LXRvcGljLXJ1bGUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2luZXNpcy1hbmFseXRpY3MtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2luZXNpcy1hbmFseXRpY3MtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tpbmVzaXMtc3RyZWFtcy1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9raW5lc2lzLXN0cmVhbXMtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tpbmVzaXMtZmlyZWhvc2UtczMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGFtYmRhLWV2ZW50LXNvdXJjZS1tYXBwaW5nLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ttcy1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9rbXMtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xhbWJkYS1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYW1iZGEtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lZGlhc3RvcmUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVkaWFzdG9yZS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvczMtYnVja2V0LWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3MzLWJ1Y2tldC1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjcmV0c21hbmFnZXItZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VjcmV0c21hbmFnZXItaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyaXR5LWdyb3VwLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbnMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc25zLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zMy1vYWMtb3JpZ2luJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nxcy1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zcXMtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3VkZnJvbnQtZGlzdHJpYnV0aW9uLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ldmVudHMtcnVsZS1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2duaXRvLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvZ25pdG8taGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsYXN0aWNzZWFyY2gtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZWxhc3RpY3NlYXJjaC1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RlcC1mdW5jdGlvbi1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdGVwLWZ1bmN0aW9uLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9keW5hbW9kYi10YWJsZS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdnBjLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZwYy1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2FnZW1ha2VyLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NhZ2VtYWtlci1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2xvdWR3YXRjaC1sb2ctZ3JvdXAtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdWUtam9iLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdWUtam9iLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nbHVlLXRhYmxlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdWUtdGFibGUtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdWUtZGF0YWJhc2UtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ2x1ZS1kYXRhYmFzZS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0L3Rlc3QtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NzbS1zdHJpbmctcGFyYW1ldGVyLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ldmVudGJyaWRnZS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvd2FmLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dhZi1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3BlbnNlYXJjaC1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9vcGVuc2VhcmNoLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9rZW5kcmEtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dlYnNvY2tldC1hcGktZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvd2Vic29ja2V0LWFwaS1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZXMtaGVscGVyJztcbiJdfQ==
95
+ __exportStar(require("./lib/bedrock-inference-helper"), exports);
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsZ0VBQThDO0FBQzlDLDZEQUEyQztBQUMzQywyREFBeUM7QUFDekMseURBQXVDO0FBQ3ZDLHVEQUFxQztBQUNyQyxnRUFBOEM7QUFDOUMsbUVBQWlEO0FBQ2pELGlFQUErQztBQUMvQyxpRUFBK0M7QUFDL0MsK0RBQTZDO0FBQzdDLHFFQUFtRDtBQUNuRCw2RUFBMkQ7QUFDM0QscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQyx3REFBc0M7QUFDdEMsc0RBQW9DO0FBQ3BDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsMkRBQXlDO0FBQ3pDLHlEQUF1QztBQUN2QyxnRUFBOEM7QUFDOUMsOERBQTRDO0FBQzVDLDhEQUE0QztBQUM1QyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLHNEQUFvQztBQUNwQyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLHVFQUFxRDtBQUNyRCx5RUFBdUQ7QUFDdkQsOENBQTRCO0FBQzVCLDZEQUEyQztBQUMzQyx5REFBdUM7QUFDdkMsdURBQXFDO0FBQ3JDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsK0RBQTZDO0FBQzdDLDZEQUEyQztBQUMzQyw4REFBNEM7QUFDNUMscURBQW1DO0FBQ25DLG1EQUFpQztBQUNqQywyREFBeUM7QUFDekMseURBQXVDO0FBQ3ZDLG9FQUFrRDtBQUNsRCwwREFBd0M7QUFDeEMsd0RBQXNDO0FBQ3RDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsK0RBQTZDO0FBQzdDLDZEQUEyQztBQUMzQyxxREFBbUM7QUFDbkMsb0VBQWtEO0FBQ2xELDJEQUF5QztBQUN6QyxxREFBbUM7QUFDbkMsbURBQWlDO0FBQ2pDLDREQUEwQztBQUMxQywwREFBd0M7QUFDeEMsc0RBQW9DO0FBQ3BDLCtEQUE2QztBQUM3Qyw2REFBMkM7QUFDM0MsdURBQXFDO0FBQ3JDLHFEQUFtQztBQUNuQyxpRUFBK0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGItZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxiLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hcGlnYXRld2F5LWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaWdhdGV3YXktaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2R5bmFtb2RiLXRhYmxlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsYXN0aWNhY2hlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsYXN0aWNhY2hlLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mYXJnYXRlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZhcmdhdGUtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2lvdC10b3BpYy1ydWxlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tpbmVzaXMtYW5hbHl0aWNzLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tpbmVzaXMtYW5hbHl0aWNzLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9raW5lc2lzLXN0cmVhbXMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2luZXNpcy1zdHJlYW1zLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9raW5lc2lzLWZpcmVob3NlLXMzLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xhbWJkYS1ldmVudC1zb3VyY2UtbWFwcGluZy1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9rbXMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva21zLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9sYW1iZGEtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGFtYmRhLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZWRpYXN0b3JlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lZGlhc3RvcmUtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3MzLWJ1Y2tldC1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zMy1idWNrZXQtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3JldHNtYW5hZ2VyLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3JldHNtYW5hZ2VyLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZWN1cml0eS1ncm91cC1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc25zLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Nucy1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvczMtb2FjLW9yaWdpbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zcXMtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3FzLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jbG91ZGZyb250LWRpc3RyaWJ1dGlvbi1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2xvdWRmcm9udC1kaXN0cmlidXRpb24tZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZXZlbnRzLXJ1bGUtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29nbml0by1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb2duaXRvLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbGFzdGljc2VhcmNoLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VsYXN0aWNzZWFyY2gtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N0ZXAtZnVuY3Rpb24tZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RlcC1mdW5jdGlvbi1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHluYW1vZGItdGFibGUtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ZwYy1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi92cGMtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NhZ2VtYWtlci1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zYWdlbWFrZXItaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nsb3Vkd2F0Y2gtbG9nLWdyb3VwLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nbHVlLWpvYi1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nbHVlLWpvYi1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZ2x1ZS10YWJsZS1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nbHVlLXRhYmxlLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nbHVlLWRhdGFiYXNlLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dsdWUtZGF0YWJhc2UtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdC90ZXN0LWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zc20tc3RyaW5nLXBhcmFtZXRlci1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZXZlbnRicmlkZ2UtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dhZi1kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93YWYtaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29wZW5zZWFyY2gtZGVmYXVsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvb3BlbnNlYXJjaC1oZWxwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIva2VuZHJhLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93ZWJzb2NrZXQtYXBpLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3dlYnNvY2tldC1hcGktaGVscGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzLWRlZmF1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzLWhlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iZWRyb2NrLWluZmVyZW5jZS1oZWxwZXInOyJdfQ==
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ import * as cdk from 'aws-cdk-lib';
14
+ import * as bedrock from 'aws-cdk-lib/aws-bedrock';
15
+ import { Construct } from 'constructs';
16
+ export interface BuildInferenceProfileProps {
17
+ readonly bedrockModelId: string;
18
+ readonly inferenceProfileProps?: bedrock.CfnApplicationInferenceProfileProps;
19
+ readonly deployCrossRegionProfile?: boolean;
20
+ }
21
+ export interface BuildInferenceProfileReponse {
22
+ readonly crossRegion?: boolean;
23
+ readonly inferenceProfile: bedrock.CfnApplicationInferenceProfile;
24
+ }
25
+ export declare function buildInferenceProfile(scope: Construct, id: string, props: BuildInferenceProfileProps): BuildInferenceProfileReponse;
26
+ export interface MappingResponse {
27
+ readonly mappingName: string;
28
+ readonly mapping: cdk.CfnMapping;
29
+ }
30
+ export declare function createAreaPrefixMapping(scope: Construct, id: string): MappingResponse;
31
+ export declare function createAreaRegionMapping(scope: Construct, id: string, model: string): MappingResponse;
32
+ export declare function IsCrossRegionProfile(deployCrossRegionProfile?: boolean): boolean;
33
+ export interface BedrockInferenceProps {
34
+ readonly bedrockModelId: string;
35
+ readonly inferenceProfileProps?: bedrock.CfnApplicationInferenceProfileProps;
36
+ readonly deployCrossRegionProfile?: boolean;
37
+ }
38
+ export declare function CheckBedrockInferenceProps(propsObject: BedrockInferenceProps): void;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.buildInferenceProfile = buildInferenceProfile;
16
+ exports.createAreaPrefixMapping = createAreaPrefixMapping;
17
+ exports.createAreaRegionMapping = createAreaRegionMapping;
18
+ exports.IsCrossRegionProfile = IsCrossRegionProfile;
19
+ exports.CheckBedrockInferenceProps = CheckBedrockInferenceProps;
20
+ // Imports
21
+ const cdk = require("aws-cdk-lib");
22
+ const bedrock = require("aws-cdk-lib/aws-bedrock");
23
+ const defaults = require("../index");
24
+ function buildInferenceProfile(scope, id, props) {
25
+ const areaMap = createAreaPrefixMapping(scope, id);
26
+ const regionPrefix = cdk.Fn.select(0, cdk.Fn.split('-', cdk.Aws.REGION));
27
+ const crossRegion = IsCrossRegionProfile(props.deployCrossRegionProfile);
28
+ const inferenceSourceArn = crossRegion ?
29
+ `arn:${cdk.Aws.PARTITION}:bedrock:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:inference-profile/${areaMap.mapping.findInMap(regionPrefix, "prefix")}.${props.bedrockModelId}` :
30
+ `arn:${cdk.Aws.PARTITION}:bedrock:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:foundation-model/${props.bedrockModelId}`;
31
+ const constructInferenceProps = {
32
+ modelSource: {
33
+ copyFrom: inferenceSourceArn
34
+ },
35
+ inferenceProfileName: defaults.generatePhysicalInferenceProfileName("", [id])
36
+ };
37
+ const finalProps = defaults.consolidateProps(constructInferenceProps, props.inferenceProfileProps);
38
+ const inferenceProfile = new bedrock.CfnApplicationInferenceProfile(scope, `${id}-inference`, finalProps);
39
+ return {
40
+ inferenceProfile,
41
+ crossRegion
42
+ };
43
+ }
44
+ function createAreaPrefixMapping(scope, id) {
45
+ const mappingName = defaults.removeNonAlphanumeric(`${id}-area-prefix-mapping`);
46
+ const newMapping = new cdk.CfnMapping(scope, `${id}-area-prefix-mapping`, {
47
+ mapping: {
48
+ 'us': {
49
+ prefix: 'us',
50
+ },
51
+ 'eu': {
52
+ prefix: 'eu',
53
+ },
54
+ 'ap': {
55
+ prefix: 'apac',
56
+ },
57
+ }
58
+ });
59
+ newMapping.overrideLogicalId(mappingName);
60
+ return {
61
+ mapping: newMapping,
62
+ mappingName
63
+ };
64
+ }
65
+ function createAreaRegionMapping(scope, id, model) {
66
+ const mappingName = defaults.removeNonAlphanumeric(`${id}-area-region-mapping`);
67
+ const newMapping = new cdk.CfnMapping(scope, `${id}-area-region-mapping`, {
68
+ mapping: {
69
+ 'eu': {
70
+ regionalModels: `arn:aws:bedrock:eu-north-1::foundation-model/${model},` +
71
+ `arn:aws:bedrock:eu-central-1::foundation-model/${model},` +
72
+ `arn:aws:bedrock:eu-west-1::foundation-model/${model},` +
73
+ `arn:aws:bedrock:eu-west-3::foundation-model/${model}`
74
+ },
75
+ 'us': {
76
+ regionalModels: `arn:aws:bedrock:us-east-1::foundation-model/${model},` +
77
+ `arn:aws:bedrock:us-east-2::foundation-model/${model},` +
78
+ `arn:aws:bedrock:us-west-2::foundation-model/${model}`
79
+ },
80
+ 'ap': {
81
+ regionalModels: `arn:aws:bedrock:ap-southeast-2::foundation-model/${model},` +
82
+ `arn:aws:bedrock:ap-northeast-1::foundation-model/${model},` +
83
+ `arn:aws:bedrock:ap-south-1::foundation-model/${model},` +
84
+ `arn:aws:bedrock:ap-northeast-2::foundation-model/${model},` +
85
+ `arn:aws:bedrock:ap-southeast-1::foundation-model/${model},` +
86
+ `arn:aws:bedrock:ap-northeast-3::foundation-model/${model}`
87
+ }
88
+ }
89
+ });
90
+ newMapping.overrideLogicalId(mappingName);
91
+ return {
92
+ mapping: newMapping,
93
+ mappingName
94
+ };
95
+ }
96
+ function IsCrossRegionProfile(deployCrossRegionProfile) {
97
+ return defaults.CheckBooleanWithDefault(deployCrossRegionProfile, true);
98
+ }
99
+ function CheckBedrockInferenceProps(propsObject) {
100
+ let errorMessages = '';
101
+ let errorFound = false;
102
+ if (propsObject.inferenceProfileProps?.modelSource) {
103
+ errorMessages += 'Error - The construct will create the modelSource value, it cannot be specified in the props.\n';
104
+ errorFound = true;
105
+ }
106
+ if (errorFound) {
107
+ throw new Error(errorMessages);
108
+ }
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1pbmZlcmVuY2UtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmVkcm9jay1pbmZlcmVuY2UtaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFvQkgsc0RBc0JDO0FBT0QsMERBb0JDO0FBRUQsMERBaUNDO0FBRUQsb0RBRUM7QUFRRCxnRUFZQztBQTlIRCxVQUFVO0FBQ1YsbUNBQW1DO0FBQ25DLG1EQUFtRDtBQUNuRCxxQ0FBcUM7QUFlckMsU0FBZ0IscUJBQXFCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7SUFDbkcsTUFBTSxPQUFPLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDdEMsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsc0JBQXNCLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUMzSyxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxxQkFBcUIs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Q0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNuRCxhQUFhLElBQUksaUdBQWlHLENBQUM7UUFDbkgsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDakMsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9jayBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9jayc7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuLi9pbmRleCc7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEluZmVyZW5jZVByb2ZpbGVQcm9wcyB7XG4gIHJlYWRvbmx5IGJlZHJvY2tNb2RlbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluZmVyZW5jZVByb2ZpbGVQcm9wcz86IGJlZHJvY2suQ2ZuQXBwbGljYXRpb25JbmZlcmVuY2VQcm9maWxlUHJvcHM7XG4gIHJlYWRvbmx5IGRlcGxveUNyb3NzUmVnaW9uUHJvZmlsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRJbmZlcmVuY2VQcm9maWxlUmVwb25zZSB7XG4gIHJlYWRvbmx5IGNyb3NzUmVnaW9uPzogYm9vbGVhbixcbiAgcmVhZG9ubHkgaW5mZXJlbmNlUHJvZmlsZTogYmVkcm9jay5DZm5BcHBsaWNhdGlvbkluZmVyZW5jZVByb2ZpbGUsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEluZmVyZW5jZVByb2ZpbGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxkSW5mZXJlbmNlUHJvZmlsZVByb3BzKTogQnVpbGRJbmZlcmVuY2VQcm9maWxlUmVwb25zZSB7XG4gIGNvbnN0IGFyZWFNYXAgPSBjcmVhdGVBcmVhUHJlZml4TWFwcGluZyhzY29wZSwgaWQpO1xuXG4gIGNvbnN0IHJlZ2lvblByZWZpeCA9IGNkay5Gbi5zZWxlY3QoMCwgY2RrLkZuLnNwbGl0KCctJywgY2RrLkF3cy5SRUdJT04pKTtcbiAgY29uc3QgY3Jvc3NSZWdpb24gPSBJc0Nyb3NzUmVnaW9uUHJvZmlsZShwcm9wcy5kZXBsb3lDcm9zc1JlZ2lvblByb2ZpbGUpO1xuICBjb25zdCBpbmZlcmVuY2VTb3VyY2VBcm4gPSBjcm9zc1JlZ2lvbiA/XG4gICAgYGFybjoke2Nkay5Bd3MuUEFSVElUSU9OfTpiZWRyb2NrOiR7Y2RrLkF3cy5SRUdJT059OiR7Y2RrLkF3cy5BQ0NPVU5UX0lEfTppbmZlcmVuY2UtcHJvZmlsZS8ke2FyZWFNYXAubWFwcGluZy5maW5kSW5NYXAocmVnaW9uUHJlZml4LCBcInByZWZpeFwiKX0uJHtwcm9wcy5iZWRyb2NrTW9kZWxJZH1gIDpcbiAgICBgYXJuOiR7Y2RrLkF3cy5QQVJUSVRJT059OmJlZHJvY2s6JHtjZGsuQXdzLlJFR0lPTn06JHtjZGsuQXdzLkFDQ09VTlRfSUR9OmZvdW5kYXRpb24tbW9kZWwvJHtwcm9wcy5iZWRyb2NrTW9kZWxJZH1gO1xuXG4gIGNvbnN0IGNvbnN0cnVjdEluZmVyZW5jZVByb3BzOiBiZWRyb2NrLkNmbkFwcGxpY2F0aW9uSW5mZXJlbmNlUHJvZmlsZVByb3BzID0ge1xuICAgIG1vZGVsU291cmNlOiB7XG4gICAgICBjb3B5RnJvbTogaW5mZXJlbmNlU291cmNlQXJuXG4gICAgfSxcbiAgICBpbmZlcmVuY2VQcm9maWxlTmFtZTogZGVmYXVsdHMuZ2VuZXJhdGVQaHlzaWNhbEluZmVyZW5jZVByb2ZpbGVOYW1lKFwiXCIsIFtpZF0pXG4gIH07XG4gIGNvbnN0IGZpbmFsUHJvcHMgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGNvbnN0cnVjdEluZmVyZW5jZVByb3BzLCBwcm9wcy5pbmZlcmVuY2VQcm9maWxlUHJvcHMpO1xuICBjb25zdCBpbmZlcmVuY2VQcm9maWxlID0gbmV3IGJlZHJvY2suQ2ZuQXBwbGljYXRpb25JbmZlcmVuY2VQcm9maWxlKHNjb3BlLCBgJHtpZH0taW5mZXJlbmNlYCwgZmluYWxQcm9wcyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbmZlcmVuY2VQcm9maWxlLFxuICAgIGNyb3NzUmVnaW9uXG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFwcGluZ1Jlc3BvbnNlIHtcbiAgcmVhZG9ubHkgbWFwcGluZ05hbWU6IHN0cmluZyxcbiAgcmVhZG9ubHkgbWFwcGluZzogY2RrLkNmbk1hcHBpbmcsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBcmVhUHJlZml4TWFwcGluZyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogTWFwcGluZ1Jlc3BvbnNlIHtcbiAgY29uc3QgbWFwcGluZ05hbWUgPSBkZWZhdWx0cy5yZW1vdmVOb25BbHBoYW51bWVyaWMoYCR7aWR9LWFyZWEtcHJlZml4LW1hcHBpbmdgKTtcbiAgY29uc3QgbmV3TWFwcGluZyA9IG5ldyBjZGsuQ2ZuTWFwcGluZyhzY29wZSwgYCR7aWR9LWFyZWEtcHJlZml4LW1hcHBpbmdgLCB7XG4gICAgbWFwcGluZzoge1xuICAgICAgJ3VzJzoge1xuICAgICAgICBwcmVmaXg6ICd1cycsXG4gICAgICB9LFxuICAgICAgJ2V1Jzoge1xuICAgICAgICBwcmVmaXg6ICdldScsXG4gICAgICB9LFxuICAgICAgJ2FwJzoge1xuICAgICAgICBwcmVmaXg6ICdhcGFjJyxcbiAgICAgIH0sXG4gICAgfVxuICB9KTtcbiAgbmV3TWFwcGluZy5vdmVycmlkZUxvZ2ljYWxJZChtYXBwaW5nTmFtZSk7XG4gIHJldHVybiB7XG4gICAgbWFwcGluZzogbmV3TWFwcGluZyxcbiAgICBtYXBwaW5nTmFtZVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXJlYVJlZ2lvbk1hcHBpbmcoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgbW9kZWw6IHN0cmluZyk6IE1hcHBpbmdSZXNwb25zZSB7XG4gIGNvbnN0IG1hcHBpbmdOYW1lID0gZGVmYXVsdHMucmVtb3ZlTm9uQWxwaGFudW1lcmljKGAke2lkfS1hcmVhLXJlZ2lvbi1tYXBwaW5nYCk7XG4gIGNvbnN0IG5ld01hcHBpbmcgPSBuZXcgY2RrLkNmbk1hcHBpbmcoc2NvcGUsIGAke2lkfS1hcmVhLXJlZ2lvbi1tYXBwaW5nYCwge1xuICAgIG1hcHBpbmc6IHtcbiAgICAgICdldSc6IHtcbiAgICAgICAgcmVnaW9uYWxNb2RlbHM6XG4gICAgICAgICAgYGFybjphd3M6YmVkcm9jazpldS1ub3J0aC0xOjpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWx9LGArXG4gICAgICAgICAgYGFybjphd3M6YmVkcm9jazpldS1jZW50cmFsLTE6OmZvdW5kYXRpb24tbW9kZWwvJHttb2RlbH0sYCtcbiAgICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmV1LXdlc3QtMTo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsfSxgK1xuICAgICAgICAgIGBhcm46YXdzOmJlZHJvY2s6ZXUtd2VzdC0zOjpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWx9YFxuICAgICAgfSxcbiAgICAgICd1cyc6IHtcbiAgICAgICAgcmVnaW9uYWxNb2RlbHM6XG4gICAgICAgICAgYGFybjphd3M6YmVkcm9jazp1cy1lYXN0LTE6OmZvdW5kYXRpb24tbW9kZWwvJHttb2RlbH0sYCtcbiAgICAgICAgICBgYXJuOmF3czpiZWRyb2NrOnVzLWVhc3QtMjo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsfSxgK1xuICAgICAgICAgIGBhcm46YXdzOmJlZHJvY2s6dXMtd2VzdC0yOjpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWx9YFxuICAgICAgICB9LFxuICAgICAgJ2FwJzoge1xuICAgICAgICByZWdpb25hbE1vZGVsczpcbiAgICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmFwLXNvdXRoZWFzdC0yOjpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWx9LGArXG4gICAgICAgICAgYGFybjphd3M6YmVkcm9jazphcC1ub3J0aGVhc3QtMTo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsfSxgK1xuICAgICAgICAgIGBhcm46YXdzOmJlZHJvY2s6YXAtc291dGgtMTo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsfSxgK1xuICAgICAgICAgIGBhcm46YXdzOmJlZHJvY2s6YXAtbm9ydGhlYXN0LTI6OmZvdW5kYXRpb24tbW9kZWwvJHttb2RlbH0sYCtcbiAgICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmFwLXNvdXRoZWFzdC0xOjpmb3VuZGF0aW9uLW1vZGVsLyR7bW9kZWx9LGArXG4gICAgICAgICAgYGFybjphd3M6YmVkcm9jazphcC1ub3J0aGVhc3QtMzo6Zm91bmRhdGlvbi1tb2RlbC8ke21vZGVsfWBcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBuZXdNYXBwaW5nLm92ZXJyaWRlTG9naWNhbElkKG1hcHBpbmdOYW1lKTtcbiAgcmV0dXJuIHtcbiAgICBtYXBwaW5nOiBuZXdNYXBwaW5nLFxuICAgIG1hcHBpbmdOYW1lXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJc0Nyb3NzUmVnaW9uUHJvZmlsZShkZXBsb3lDcm9zc1JlZ2lvblByb2ZpbGU/OiBib29sZWFuKSB7XG4gIHJldHVybiBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdChkZXBsb3lDcm9zc1JlZ2lvblByb2ZpbGUsIHRydWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJlZHJvY2tJbmZlcmVuY2VQcm9wcyB7XG4gIHJlYWRvbmx5IGJlZHJvY2tNb2RlbElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGluZmVyZW5jZVByb2ZpbGVQcm9wcz86IGJlZHJvY2suQ2ZuQXBwbGljYXRpb25JbmZlcmVuY2VQcm9maWxlUHJvcHM7XG4gIHJlYWRvbmx5IGRlcGxveUNyb3NzUmVnaW9uUHJvZmlsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0JlZHJvY2tJbmZlcmVuY2VQcm9wcyhwcm9wc09iamVjdDogQmVkcm9ja0luZmVyZW5jZVByb3BzKSB7XG4gIGxldCBlcnJvck1lc3NhZ2VzID0gJyc7XG4gIGxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgaWYgKHByb3BzT2JqZWN0LmluZmVyZW5jZVByb2ZpbGVQcm9wcz8ubW9kZWxTb3VyY2UpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdFcnJvciAtIFRoZSBjb25zdHJ1Y3Qgd2lsbCBjcmVhdGUgdGhlIG1vZGVsU291cmNlIHZhbHVlLCBpdCBjYW5ub3QgYmUgc3BlY2lmaWVkIGluIHRoZSBwcm9wcy5cXG4nO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yRm91bmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gIH1cbn0iXX0=
package/lib/utils.d.ts CHANGED
@@ -39,6 +39,7 @@ export declare function generatePhysicalLogGroupName(prefix: string, parts: stri
39
39
  export declare function generatePhysicalRestApiName(prefix: string, parts: string[]): string;
40
40
  export declare function generatePhysicalOacName(prefix: string, parts: string[]): string;
41
41
  export declare function generatePhysicalKendraIndexName(prefix: string, parts: string[]): string;
42
+ export declare function generatePhysicalInferenceProfileName(prefix: string, parts: string[]): string;
42
43
  /**
43
44
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
44
45
  *
package/lib/utils.js CHANGED
@@ -20,6 +20,7 @@ exports.generatePhysicalLogGroupName = generatePhysicalLogGroupName;
20
20
  exports.generatePhysicalRestApiName = generatePhysicalRestApiName;
21
21
  exports.generatePhysicalOacName = generatePhysicalOacName;
22
22
  exports.generatePhysicalKendraIndexName = generatePhysicalKendraIndexName;
23
+ exports.generatePhysicalInferenceProfileName = generatePhysicalInferenceProfileName;
23
24
  exports.generatePhysicalName = generatePhysicalName;
24
25
  exports.removeNonAlphanumeric = removeNonAlphanumeric;
25
26
  exports.addCfnSuppressRules = addCfnSuppressRules;
@@ -150,6 +151,9 @@ function generatePhysicalOacName(prefix, parts) {
150
151
  function generatePhysicalKendraIndexName(prefix, parts) {
151
152
  return generatePhysicalName(prefix, parts, 1000);
152
153
  }
154
+ function generatePhysicalInferenceProfileName(prefix, parts) {
155
+ return generatePhysicalName(prefix, parts, 64);
156
+ }
153
157
  /**
154
158
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
155
159
  *
@@ -308,4 +312,4 @@ function CheckStringWithDefault(value, defaultValue) {
308
312
  return value;
309
313
  }
310
314
  }
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQXVESCxzQ0EwQkM7QUFLRCxvQ0FPQztBQWNELG9EQXNCQztBQUVELG9FQUtDO0FBRUQsa0VBS0M7QUFFRCwwREFLQztBQUVELDBFQUtDO0FBWUQsb0RBK0JDO0FBS0Qsc0RBRUM7QUFrQkQsa0RBWUM7QUFTRCw0REFhQztBQUVELHdGQVFDO0FBZUQsNENBYUM7QUFnQkQsb0NBTUM7QUFLRCwwQ0FNQztBQUVELDBEQU1DO0FBRUQsd0RBTUM7QUF4VkQ7OztHQUdHO0FBRUgsdUNBQXVDO0FBQ3ZDLHlFQUFvRTtBQUNwRSxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLGlEQUFpRDtBQUdwQyxRQUFBLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ25FLFFBQUEsb0NBQW9DLEdBQUcsWUFBWSxDQUFDO0FBRWpFLFNBQVMsUUFBUSxDQUFDLEdBQVc7SUFDM0IsT0FBTyxHQUFHLEtBQUssSUFBSSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7V0FDekMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLGlCQUFpQixDQUFDO0FBQ2pFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxDQUFTO0lBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUMzQixJQUFJLE9BQU8s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SSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxrQkFBNEIsRUFBRSxlQUF5QixFQUFFLFNBQWlCO0lBQ3hHLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxLQUFLLENBQUMsV0FBVyxTQUFTLGdCQUFnQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxLQUEwQixFQUFFLFlBQXFCO0lBQ3ZGLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQWdCLHNCQUFzQixDQUFDLEtBQXlCLEVBQUUsWUFBb0I7SUFDcEYsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLypcbiAqICBUaGUgZnVuY3Rpb25zIGZvdW5kIGhlcmUgaW4gdGhlIGNvcmUgbGlicmFyeSBhcmUgZm9yIGludGVybmFsIHVzZSBhbmQgY2FuIGJlIGNoYW5nZWRcbiAqICBvciByZW1vdmVkIG91dHNpZGUgb2YgYSBtYWpvciByZWxlYXNlLiBXZSByZWNvbW1lbmQgYWdhaW5zdCBjYWxsaW5nIHRoZW0gZGlyZWN0bHkgZnJvbSBjbGllbnQgY29kZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBkZWVwbWVyZ2UgZnJvbSAnZGVlcG1lcmdlJztcbmltcG9ydCB7IGZsYWdPdmVycmlkZGVuRGVmYXVsdHMgfSBmcm9tICcuL292ZXJyaWRlLXdhcm5pbmctc2VydmljZSc7XG5pbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY29uc3QgQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSA9IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YO1xuZXhwb3J0IGNvbnN0IENPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1NUUklORyA9IFwibm9kZWpzMjAueFwiO1xuXG5mdW5jdGlvbiBpc09iamVjdCh2YWw6IG9iamVjdCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnXG4gICAgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KG86IG9iamVjdCkge1xuICBpZiAoQXJyYXkuaXNBcnJheShvKSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzT2JqZWN0KG8pID09PSBmYWxzZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBjb25zdHJ1Y3RvclxuICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgaWYgKHR5cGVvZiBjdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgaGFzIG1vZGlmaWVkIHByb3RvdHlwZVxuICBjb25zdCBwcm90ID0gY3Rvci5wcm90b3R5cGU7XG4gIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYXZlIGFuIE9iamVjdC1zcGVjaWZpYyBtZXRob2RcbiAgaWYgKHByb3QuaGFzT3duUHJvcGVydHkoJ2lzUHJvdG90eXBlT2YnKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBNb3N0IGxpa2VseSBhIHBsYWluIE9iamVjdFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb3ZlcnJpZGVQcm9wcyhkZWZhdWx0UHJvcHM6IG9iamVjdCwgdXNlclByb3BzOiBvYmplY3QsIGNvbmNhdEFycmF5OiBib29sZWFuID0gZmFsc2UsIHN1cHByZXNzV2FybmluZ3M/OiBib29sZWFuKTogYW55IHtcbiAgLy8gTm90aWZ5IHRoZSB1c2VyIHZpYSBjb25zb2xlIG91dHB1dCBpZiBkZWZhdWx0cyBhcmUgb3ZlcnJpZGRlblxuXG4gIGxldCBvdmVycmlkZVdhcm5pbmdzRW5hYmxlZDogYm9vbGVhbjtcbiAgaWYgKChwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9PT0gJ2ZhbHNlJykgfHwgKHN1cHByZXNzV2FybmluZ3MgPT09IHRydWUpKSB7XG4gICAgb3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICBvdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9IHRydWU7XG4gIH1cbiAgaWYgKG92ZXJyaWRlV2FybmluZ3NFbmFibGVkKSB7XG4gICAgZmxhZ092ZXJyaWRkZW5EZWZhdWx0cyhkZWZhdWx0UHJvcHMsIHVzZXJQcm9wcyk7XG4gIH1cbiAgLy8gT3ZlcnJpZGUgdGhlIHNlbnNpYmxlIGRlZmF1bHRzIHdpdGggdXNlciBwcm92aWRlZCBwcm9wc1xuICBpZiAoY29uY2F0QXJyYXkpIHtcbiAgICByZXR1cm4gZGVlcG1lcmdlKGRlZmF1bHRQcm9wcywgdXNlclByb3BzLCB7XG4gICAgICBhcnJheU1lcmdlOiAoZGVzdGluYXRpb25BcnJheSwgc291cmNlQXJyYXkpID0+IGRlc3RpbmF0aW9uQXJyYXkuY29uY2F0KHNvdXJjZUFycmF5KSxcbiAgICAgIGlzTWVyZ2VhYmxlT2JqZWN0OiBpc1BsYWluT2JqZWN0XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRlZXBtZXJnZShkZWZhdWx0UHJvcHMsIHVzZXJQcm9wcywge1xuICAgICAgLy8gSWdub3JpbmcgZXJyb3IgcG9pbnRpbmcgb3V0IHRoYXQgZGVzdGluYXRpb25BcnJheSBpcyBuZXZlciByZWFkXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBhcnJheU1lcmdlOiAoZGVzdGluYXRpb25BcnJheSwgc291cmNlQXJyYXkpID0+IHNvdXJjZUFycmF5LFxuICAgICAgaXNNZXJnZWFibGVPYmplY3Q6IGlzUGxhaW5PYmplY3RcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludFdhcm5pbmcobWVzc2FnZTogc3RyaW5nKSB7XG4gIC8vIFN0eWxlIHRoZSBsb2cgb3V0cHV0XG4gIGNvbnN0IFdBUk5JTkcgPSBcIlxcdTAwMWJbMTAzOzMwbVwiOyAgIC8vIEJsYWNrIG9uIHllbGxvd1xuICBjb25zdCBMQUJFTCA9IFwiXFx1MDAxYlszMTsxbVwiOyAgIC8vIEJvbGQgcmVkXG4gIGNvbnN0IFJFU0VUID0gXCJcXHUwMDFiWzIyOzQ5OzM5bVwiO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmxvZyhgJHtXQVJOSU5HfVdBUk4ke1JFU0VUfSR7TEFCRUx9IEFXU19TT0xVVElPTlNfQ09OU1RSVUNUU19XQVJOSU5HOiR7UkVTRVR9ICAke21lc3NhZ2V9YCk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgcmVzb3VyY2UgbmFtZSBpbiB0aGUgc3R5bGUgb2YgdGhlIENESyAoc3RyaW5nK2hhc2gpIC0gdGhpcyB2YWx1ZSBzaG91bGQgYmUgdXNlZCBmb3IgbG9naWNhbCBJRHMsIGJ1dFxuICogbm90IFBoeXNpY2FsIE5hbWVzLCBhcyBpdCB3aWxsIG5vdCBiZSBzdGF0aWMgd2l0aGluIGEgc2luZ2xlIHN0YWNrIGluc3RhbmNlIGxpZmV0aW1lLCBvciBpdCB3aWxsIG5vdCBiZSBkaWZmZXJlbnQgaW5cbiAqIGRpZmZlcmVudCBzdGFjayBpbnN0YW5jZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcnRzIC0gdGhlIHZhcmlvdXMgc3RyaW5nIGNvbXBvbmVudHMgb2YgdGhlIG5hbWUgKGVnIC0gc3RhY2tOYW1lLCBzb2x1dGlvbnMgY29uc3RydWN0IElELCBMMiBjb25zdHJ1Y3QgSUQpXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoIC0gdGhlIGxvbmdlc3Qgc3RyaW5nIHRoYXQgY2FuIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY29uY2F0ZW5hdGVkIHBhcnRzICh0cnVuY2F0ZWQgaWYgbmVjZXNzYXJ5KSArIGEgaGFzaCBvZiB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgcGFydHNcbiAqXG4gKiBUaGlzIGlzIGJhc2VkIHVwb24gdGhpcyBkaXNjdXNzaW9uIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNDI0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlc291cmNlTmFtZShcbiAgcGFydHM6IHN0cmluZ1tdLFxuICBtYXhMZW5ndGg6IG51bWJlcixcbiAgcmFuZG9taXplOiBib29sZWFuID0gZmFsc2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IGhhc2hMZW5ndGggPSAxMjtcbiAgY29uc3QgcmFuZG9taXpvcjogc3RyaW5nID0gcmFuZG9taXplID8gKG5ldyBEYXRlKCkpLmdldFRpbWUoKS50b1N0cmluZygpIDogXCJcIjtcblxuICBjb25zdCBtYXhQYXJ0TGVuZ3RoID0gTWF0aC5mbG9vcigobWF4TGVuZ3RoIC0gaGFzaExlbmd0aCAtIHJhbmRvbWl6b3IubGVuZ3RoKSAvIHBhcnRzLmxlbmd0aCk7XG5cbiAgY29uc3Qgc2hhMjU2ID0gY3J5cHRvLmNyZWF0ZUhhc2goXCJzaGEyNTZcIik7XG4gIGxldCBmaW5hbE5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICBzaGEyNTYudXBkYXRlKHBhcnQpO1xuICAgIGZpbmFsTmFtZSArPSByZW1vdmVOb25BbHBoYW51bWVyaWMocGFydC5zbGljZSgwLCBtYXhQYXJ0TGVuZ3RoKSk7XG4gIH0pO1xuXG4gIGNvbnN0IGhhc2ggPSBzaGEyNTYuZGlnZXN0KFwiaGV4XCIpLnNsaWNlKDAsIGhhc2hMZW5ndGgpO1xuICBmaW5hbE5hbWUgKz0gaGFzaDtcbiAgZmluYWxOYW1lICs9IHJhbmRvbWl6b3I7XG4gIHJldHVybiBmaW5hbE5hbWUudG9Mb3dlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGh5c2ljYWxMb2dHcm91cE5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIHBhcnRzLCAyNTUgLSBwcmVmaXgubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGh5c2ljYWxSZXN0QXBpTmFtZShcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHBhcnRzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdlbmVyYXRlUGh5c2ljYWxOYW1lKHByZWZpeCwgcGFydHMsIDI1NSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsT2FjTmFtZShcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHBhcnRzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdlbmVyYXRlUGh5c2ljYWxOYW1lKHByZWZpeCwgcGFydHMsIDY0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGh5c2ljYWxLZW5kcmFJbmRleE5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIHBhcnRzLCAxMDAwKTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBwaHlzaWNhbCByZXNvdXJjZSBuYW1lIGluIHRoZSBzdHlsZSBvZiB0aGUgQ0RLIChzdHJpbmcraGFzaCkgLSB0aGlzIHZhbHVlIGluY29ycG9yYXRlcyBTdGFjayBJRCxcbiAqIHNvIGl0IHdpbGwgcmVtYWluIHN0YXRpYyBpbiBtdWx0aXBsZSB1cGRhdGVzIG9mIGEgc2luZ2xlIHN0YWNrLCBidXQgd2lsbCBiZSBkaWZmZXJlbnQgaW4gYSBzZXBhcmF0ZSBzdGFjayBpbnN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcGFydHMgLSB0aGUgdmFyaW91cyBzdHJpbmcgY29tcG9uZW50cyBvZiB0aGUgbmFtZSAoZWcgLSBzdGFja05hbWUsIHNvbHV0aW9ucyBjb25zdHJ1Y3QgSUQsIEwyIGNvbnN0cnVjdCBJRClcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXhMZW5ndGggLSB0aGUgbG9uZ2VzdCBzdHJpbmcgdGhhdCBjYW4gYmUgcmV0dXJuZWRcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gYSBzdHJpbmcgd2l0aCBjb25jYXRlbmF0ZWQgcGFydHMgKHRydW5jYXRlZCBpZiBuZWNlc3NhcnkpICsgYSBoYXNoIG9mIHRoZSBmdWxsIGNvbmNhdGVuYXRlZCBwYXJ0c1xuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUGh5c2ljYWxOYW1lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgcGFydHM6IHN0cmluZ1tdLFxuICBtYXhMZW5ndGg6IG51bWJlcixcbik6IHN0cmluZyB7XG4gIC8vIFRoZSByZXN1bHQgd2lsbCBjb25zaXN0IG9mOlxuICAvLyAgICAtVGhlIHByZWZpeCAtIHVuYWx0ZXJlZFxuICAvLyAgICAtVGhlIHBhcnRzIGNvbmNhdGVuYXRlZCwgYnV0IHJlZHVjZWQgaW4gc2l6ZSB0byBtZWV0IHRoZSBtYXhMZW5ndGggbGltaXQgZm9yIHRoZSBvdmVyYWxsIG5hbWVcbiAgLy8gICAgLUEgaHlwaGVuIGRlbGltaXRlclxuICAvLyAgICAtVGhlIEdVSUQgcG9ydGlvbiBvZiB0aGUgc3RhY2sgYXJuXG5cbiAgY29uc3Qgc3RhY2tJZEd1aWRMZW5ndGggPSAzNjtcbiAgY29uc3QgcHJlZml4TGVuZ3RoID0gcHJlZml4Lmxlbmd0aDtcbiAgY29uc3QgbWF4UGFydHNMZW5ndGggPSBtYXhMZW5ndGggLSBwcmVmaXhMZW5ndGggLSAxIC0gc3RhY2tJZEd1aWRMZW5ndGg7IC8vIDEgaXMgdGhlIGh5cGhlblxuXG4gIC8vIEV4dHJhY3QgdGhlIFN0YWNrIElEIEd1aWRcbiAgY29uc3QgdW5pcXVlU3RhY2tJZFBhcnQgPSBjZGsuRm4uc2VsZWN0KDIsIGNkay5Gbi5zcGxpdCgnLycsIGAke2Nkay5Bd3MuU1RBQ0tfSUR9YCkpO1xuXG4gIGxldCBhbGxQYXJ0czogc3RyaW5nID0gJyc7XG5cbiAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgIGFsbFBhcnRzICs9IHBhcnQ7XG4gIH0pO1xuXG4gIGlmIChhbGxQYXJ0cy5sZW5ndGggPiBtYXhQYXJ0c0xlbmd0aCkge1xuICAgIGNvbnN0IHN1YlN0cmluZ0xlbmd0aCA9IG1heFBhcnRzTGVuZ3RoIC8gMjtcbiAgICBhbGxQYXJ0cyA9IGFsbFBhcnRzLnN1YnN0cmluZygwLCBzdWJTdHJpbmdMZW5ndGgpICsgYWxsUGFydHMuc3Vic3RyaW5nKGFsbFBhcnRzLmxlbmd0aCAtIHN1YlN0cmluZ0xlbmd0aCk7XG4gIH1cblxuICBjb25zdCBmaW5hbE5hbWUgPSBwcmVmaXgudG9Mb3dlckNhc2UoKSArIGFsbFBhcnRzICsgJy0nICsgdW5pcXVlU3RhY2tJZFBhcnQ7XG4gIHJldHVybiBmaW5hbE5hbWU7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTm9uQWxwaGFudW1lcmljKHM6IHN0cmluZykge1xuICByZXR1cm4gcy5yZXBsYWNlKC9bXkEtWmEtejAtOV0vZywgJycpO1xufVxuXG4vKipcbiAqIFRoZSBDRk4gTkFHIHN1cHByZXNzIHJ1bGUgaW50ZXJmYWNlXG4gKiBAaW50ZXJmYWNlIENmbk5hZ1N1cHByZXNzUnVsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbk5hZ1N1cHByZXNzUnVsZSB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlYXNvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQWRkcyBDRk4gTkFHIHN1cHByZXNzIHJ1bGVzIHRvIHRoZSBDREsgcmVzb3VyY2UuXG4gKiBAcGFyYW0gcmVzb3VyY2UgVGhlIENESyByZXNvdXJjZVxuICogQHBhcmFtIHJ1bGVzIFRoZSBDRk4gTkFHIHN1cHByZXNzIHJ1bGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDZm5TdXBwcmVzc1J1bGVzKHJlc291cmNlOiBjZGsuUmVzb3VyY2UgfCBjZGsuQ2ZuUmVzb3VyY2UsIHJ1bGVzOiBDZm5OYWdTdXBwcmVzc1J1bGVbXSkge1xuICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBjZGsuUmVzb3VyY2UpIHtcbiAgICByZXNvdXJjZSA9IHJlc291cmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNkay5DZm5SZXNvdXJjZTtcbiAgfVxuXG4gIGlmIChyZXNvdXJjZS5jZm5PcHRpb25zLm1ldGFkYXRhPy5jZm5fbmFnPy5ydWxlc190b19zdXBwcmVzcykge1xuICAgIHJlc291cmNlLmNmbk9wdGlvbnMubWV0YWRhdGE/LmNmbl9uYWcucnVsZXNfdG9fc3VwcHJlc3MucHVzaCguLi5ydWxlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzb3VyY2UuYWRkTWV0YWRhdGEoJ2Nmbl9uYWcnLCB7XG4gICAgICBydWxlc190b19zdXBwcmVzczogcnVsZXNcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQWRkcyBDZm5HdWFyZCBzdXBwcmVzcyBydWxlcyB0byB0aGUgQ0RLIHJlc291cmNlLlxuICogQHBhcmFtIHJlc291cmNlIFRoZSBDREsgcmVzb3VyY2VcbiAqIEBwYXJhbSBydWxlcyBUaGUgQ2ZuR2F1cmQgcnVsZXMgdG8gc3VwcHJlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZENmbkd1YXJkU3VwcHJlc3NSdWxlcyhyZXNvdXJjZTogYW55IC8qIGNkay5SZXNvdXJjZSB8IGNkay5DZm5SZXNvdXJjZSB8IElSb2xlICovLCBydWxlczogc3RyaW5nW10pIHtcblxuICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBjZGsuUmVzb3VyY2UpIHtcbiAgICByZXNvdXJjZSA9IHJlc291cmNlLm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIGNkay5DZm5SZXNvdXJjZTtcbiAgfVxuXG4gIGlmIChyZXNvdXJjZS5jZm5PcHRpb25zLm1ldGFkYXRhPy5ndWFyZD8uU3VwcHJlc3NlZFJ1bGVzKSB7XG4gICAgcmVzb3VyY2UuY2ZuT3B0aW9ucy5tZXRhZGF0YT8uZ3VhcmQuU3VwcHJlc3NlZFJ1bGVzLnB1c2goLi4ucnVsZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlc291cmNlLmFkZE1ldGFkYXRhKCdndWFyZCcsIHtcbiAgICAgIFN1cHByZXNzZWRSdWxlczogcnVsZXNcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcHJlc3NWcGNDdXN0b21lckhhbmRsZXJSb2xlV2FybmluZ3Moc3RhY2s6IGNkay5TdGFjaykge1xuICBzdGFjay5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgIGlmIChjaGlsZC5ub2RlLmlkID09PSBcIkN1c3RvbTo6VnBjUmVzdHJpY3REZWZhdWx0U0dDdXN0b21SZXNvdXJjZVByb3ZpZGVyXCIpIHtcbiAgICAgIGNvbnN0IHJvbGUgPSAoY2hpbGQgYXMgYW55KS5yb2xlO1xuICAgICAgLy8gVHVybiBvZmYgYWxsIHdhcm5pbmdzIGNvbWluZyBmcm9tIGN1c3RvbSByZXNvdXJjZVxuICAgICAgYWRkQ2ZuR3VhcmRTdXBwcmVzc1J1bGVzKHJvbGUsIFtdKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQ3JlYXRlcyB0aGUgcHJvcHMgdG8gYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBhIENESyBMMiBjb25zdHJ1Y3Qgd2l0aGluIGEgU29sdXRpb25zIENvbnN0cnVjdFxuICpcbiAqIEBwYXJhbSBkZWZhdWx0UHJvcHMgVGhlIGRlZmF1bHQgcHJvcHMgdG8gYmUgdXNlZCBieSB0aGUgY29uc3RydWN0XG4gKiBAcGFyYW0gY2xpZW50UHJvcHMgT3B0aW9uYWwgcHJvcGVydGllcyBwYXNzZWQgaW4gZnJvbSB0aGUgY2xpZW50IGluIHRoZSBwcm9wcyBvYmplY3RcbiAqIEBwYXJhbSBjb25zdHJ1Y3RQcm9wcyBPcHRpb25hbCBwcm9wZXJ0aWVzIHJlcXVpcmVkIGJ5IHRoZSBjb25zdHJ1Y3QgZm9yIHRoZSBjb25zdHJ1Y3QgdG8gd29yayAob3ZlcnJpZGUgYW55IG90aGVyIHZhbHVlcylcbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0aWVzIHRvIHVzZSAtIGFsbCB2YWx1ZXMgcHJpb3JpdGl6ZWQ6XG4gKiAgMSkgY29uc3RydWN0UHJvcHMgdmFsdWVcbiAqICAyKSBjbGllbnRQcm9wcyB2YWx1ZVxuICogIDMpIGRlZmF1bHRQcm9wcyB2YWx1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc29saWRhdGVQcm9wcyhkZWZhdWx0UHJvcHM6IG9iamVjdCwgY2xpZW50UHJvcHM/OiBvYmplY3QsIGNvbnN0cnVjdFByb3BzPzogb2JqZWN0LCBjb25jYXRBcnJheTogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcbiAgbGV0IHJlc3VsdDogb2JqZWN0ID0gZGVmYXVsdFByb3BzO1xuXG4gIGlmIChjbGllbnRQcm9wcykge1xuICAgIHJlc3VsdCA9IG92ZXJyaWRlUHJvcHMocmVzdWx0LCBjbGllbnRQcm9wcywgY29uY2F0QXJyYXkpO1xuICB9XG5cbiAgaWYgKGNvbnN0cnVjdFByb3BzKSB7XG4gICAgLy8gU3VwcHJlc3Mgd2FybmluZ3MgZm9yIGNvbnN0cnVjdCBwcm9wcyBvdmVycmlkaW5nIGV2ZXJ5dGhpbmcgZWxzZVxuICAgIHJlc3VsdCA9IG92ZXJyaWRlUHJvcHMocmVzdWx0LCBjb25zdHJ1Y3RQcm9wcywgY29uY2F0QXJyYXksIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEdlbmVyYXRlcyBhIG5hbWUgdW5pcXVlIHRvIHRoaXMgbG9jYXRpb24gaW4gdGhpcyBzdGFjayB3aXRoIHRoaXMgc3RhY2tuYW1lLiBUcnVuY2F0ZXMgdG8gdW5kZXIgNjQgY2hhcmFjdGVycyBpZiBuZWVkZWQuXG4gKiAod2lsbCBhbGxvdyAyIGNvcGllcyBvZiB0aGUgc3RhY2sgd2l0aCBkaWZmZXJlbnQgc3RhY2sgbmFtZXMsIGJ1dCB3aWxsIGNvbGxpZGUgaWYgYm90aCBzdGFja3MgaGF2ZSB0aGUgc2FtZSBuYW1lKVxuICpcbiAqIEBwYXJhbSBzY29wZSB0aGUgY29uc3RydWN0IHdpdGhpbiB0byBjcmVhdGUgdGhlIG5hbWVcbiAqIEBwYXJhbSByZXNvdXJjZUlkIGFuIGlkIGZvciB0aGUgY29uc3RydWN0IGFib3V0IHRvIGJlIGNyZWF0ZWQgdW5kZXIgc2NvcGUgKGVtcHR5IHN0cmluZyBpZiBuYW1lIGlzIGZvciBzY29lcClcbiAqIEByZXR1cm5zIGEgdW5pcXVlIG5hbWVcbiAqXG4gKiBOb3RlOiBUaGlzIGFwcGVhcnMgdG8gb3ZlcmxhcCB3aXRoIEdlbmVyYXRlUmVzb3VyY2VOYW1lIGFib3ZlIChJIHdyb3RlIGl0IGJlZm9yZSBub3RpY2luZyB0aGF0XG4gKiBmdW5jdGlvbikuIEFzIHRoaXMgb2ZmbG9hZHMgdGhlIGxvZ2ljIHRvIHRoZSBDREssIEknbSBsZWF2aW5nIHRoaXMgaGVyZSBidXQgc29tZW9uZSBtYXkgd2FudCB0b1xuICogYmxlbmQgdGhlc2Ugcm91dGluZXMgaW4gdGhlIGZ1dHVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTmFtZShzY29wZTogQ29uc3RydWN0LCByZXNvdXJjZUlkOiBzdHJpbmcgPSBcIlwiKTogc3RyaW5nIHtcbiAgY29uc3QgbmFtZSA9IHJlc291cmNlSWQgKyBjZGsuTmFtZXMudW5pcXVlSWQoc2NvcGUpO1xuICBpZiAobmFtZS5sZW5ndGggPiA2NCkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCAzMikgKyBuYW1lLnN1YnN0cmluZyhuYW1lLmxlbmd0aCAtIDMyKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tMaXN0VmFsdWVzKGFsbG93ZWRQZXJtaXNzaW9uczogc3RyaW5nW10sIHN1Ym1pdHRlZFZhbHVlczogc3RyaW5nW10sIHZhbHVlVHlwZTogc3RyaW5nKSB7XG4gIHN1Ym1pdHRlZFZhbHVlcy5mb3JFYWNoKChzdWJtaXR0ZWRWYWx1ZSkgPT4ge1xuICAgIGlmICghYWxsb3dlZFBlcm1pc3Npb25zLmluY2x1ZGVzKHN1Ym1pdHRlZFZhbHVlKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgJHt2YWx1ZVR5cGV9IHN1Ym1pdHRlZCAtICR7c3VibWl0dGVkVmFsdWV9YCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hlY2tTdHJpbmdXaXRoRGVmYXVsdCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iXX0=
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQXVESCxzQ0EwQkM7QUFLRCxvQ0FPQztBQWNELG9EQXNCQztBQUVELG9FQUtDO0FBRUQsa0VBS0M7QUFFRCwwREFLQztBQUVELDBFQUtDO0FBRUQsb0ZBS0M7QUFZRCxvREErQkM7QUFLRCxzREFFQztBQWtCRCxrREFZQztBQVNELDREQWFDO0FBRUQsd0ZBUUM7QUFlRCw0Q0FhQztBQWdCRCxvQ0FNQztBQUtELDBDQU1DO0FBRUQsMERBTUM7QUFFRCx3REFNQztBQS9WRDs7O0dBR0c7QUFFSCx1Q0FBdUM7QUFDdkMseUVBQW9FO0FBQ3BFLGlDQUFpQztBQUNqQyxtQ0FBbUM7QUFDbkMsaURBQWlEO0FBR3BDLFFBQUEscUNBQXFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbkUsUUFBQSxvQ0FBb0MsR0FBRyxZQUFZLENBQUM7QUFFakUsU0FBUyxRQUFRLENBQUMsR0FBVztJQUMzQixPQUFPLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtXQUN6QyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssaUJBQWlCLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLENBQVM7SUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQzNC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ZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0ICogYXMgZGVlcG1lcmdlIGZyb20gJ2RlZXBtZXJnZSc7XG5pbXBvcnQgeyBmbGFnT3ZlcnJpZGRlbkRlZmF1bHRzIH0gZnJvbSAnLi9vdmVycmlkZS13YXJuaW5nLXNlcnZpY2UnO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuZXhwb3J0IGNvbnN0IENPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUgPSBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWDtcbmV4cG9ydCBjb25zdCBDT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9TVFJJTkcgPSBcIm5vZGVqczIwLnhcIjtcblxuZnVuY3Rpb24gaXNPYmplY3QodmFsOiBvYmplY3QpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0J1xuICAgICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBPYmplY3RdJztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvOiBvYmplY3QpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobykgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc09iamVjdChvKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBoYXMgbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgY29uc3QgY3RvciA9IG8uY29uc3RydWN0b3I7XG4gIGlmICh0eXBlb2YgY3RvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIGhhcyBtb2RpZmllZCBwcm90b3R5cGVcbiAgY29uc3QgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICBpZiAoaXNPYmplY3QocHJvdCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gSWYgY29uc3RydWN0b3IgZG9lcyBub3QgaGF2ZSBhbiBPYmplY3Qtc3BlY2lmaWMgbWV0aG9kXG4gIGlmIChwcm90Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gTW9zdCBsaWtlbHkgYSBwbGFpbiBPYmplY3RcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJyaWRlUHJvcHMoZGVmYXVsdFByb3BzOiBvYmplY3QsIHVzZXJQcm9wczogb2JqZWN0LCBjb25jYXRBcnJheTogYm9vbGVhbiA9IGZhbHNlLCBzdXBwcmVzc1dhcm5pbmdzPzogYm9vbGVhbik6IGFueSB7XG4gIC8vIE5vdGlmeSB0aGUgdXNlciB2aWEgY29uc29sZSBvdXRwdXQgaWYgZGVmYXVsdHMgYXJlIG92ZXJyaWRkZW5cblxuICBsZXQgb3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQ6IGJvb2xlYW47XG4gIGlmICgocHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPT09ICdmYWxzZScpIHx8IChzdXBwcmVzc1dhcm5pbmdzID09PSB0cnVlKSkge1xuICAgIG92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgb3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSB0cnVlO1xuICB9XG4gIGlmIChvdmVycmlkZVdhcm5pbmdzRW5hYmxlZCkge1xuICAgIGZsYWdPdmVycmlkZGVuRGVmYXVsdHMoZGVmYXVsdFByb3BzLCB1c2VyUHJvcHMpO1xuICB9XG4gIC8vIE92ZXJyaWRlIHRoZSBzZW5zaWJsZSBkZWZhdWx0cyB3aXRoIHVzZXIgcHJvdmlkZWQgcHJvcHNcbiAgaWYgKGNvbmNhdEFycmF5KSB7XG4gICAgcmV0dXJuIGRlZXBtZXJnZShkZWZhdWx0UHJvcHMsIHVzZXJQcm9wcywge1xuICAgICAgYXJyYXlNZXJnZTogKGRlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSA9PiBkZXN0aW5hdGlvbkFycmF5LmNvbmNhdChzb3VyY2VBcnJheSksXG4gICAgICBpc01lcmdlYWJsZU9iamVjdDogaXNQbGFpbk9iamVjdFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkZWVwbWVyZ2UoZGVmYXVsdFByb3BzLCB1c2VyUHJvcHMsIHtcbiAgICAgIC8vIElnbm9yaW5nIGVycm9yIHBvaW50aW5nIG91dCB0aGF0IGRlc3RpbmF0aW9uQXJyYXkgaXMgbmV2ZXIgcmVhZFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgYXJyYXlNZXJnZTogKGRlc3RpbmF0aW9uQXJyYXksIHNvdXJjZUFycmF5KSA9PiBzb3VyY2VBcnJheSxcbiAgICAgIGlzTWVyZ2VhYmxlT2JqZWN0OiBpc1BsYWluT2JqZWN0XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRXYXJuaW5nKG1lc3NhZ2U6IHN0cmluZykge1xuICAvLyBTdHlsZSB0aGUgbG9nIG91dHB1dFxuICBjb25zdCBXQVJOSU5HID0gXCJcXHUwMDFiWzEwMzszMG1cIjsgICAvLyBCbGFjayBvbiB5ZWxsb3dcbiAgY29uc3QgTEFCRUwgPSBcIlxcdTAwMWJbMzE7MW1cIjsgICAvLyBCb2xkIHJlZFxuICBjb25zdCBSRVNFVCA9IFwiXFx1MDAxYlsyMjs0OTszOW1cIjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgY29uc29sZS5sb2coYCR7V0FSTklOR31XQVJOJHtSRVNFVH0ke0xBQkVMfSBBV1NfU09MVVRJT05TX0NPTlNUUlVDVFNfV0FSTklORzoke1JFU0VUfSAgJHttZXNzYWdlfWApO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHJlc291cmNlIG5hbWUgaW4gdGhlIHN0eWxlIG9mIHRoZSBDREsgKHN0cmluZytoYXNoKSAtIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVzZWQgZm9yIGxvZ2ljYWwgSURzLCBidXRcbiAqIG5vdCBQaHlzaWNhbCBOYW1lcywgYXMgaXQgd2lsbCBub3QgYmUgc3RhdGljIHdpdGhpbiBhIHNpbmdsZSBzdGFjayBpbnN0YW5jZSBsaWZldGltZSwgb3IgaXQgd2lsbCBub3QgYmUgZGlmZmVyZW50IGluXG4gKiBkaWZmZXJlbnQgc3RhY2sgaW5zdGFuY2VzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXJ0cyAtIHRoZSB2YXJpb3VzIHN0cmluZyBjb21wb25lbnRzIG9mIHRoZSBuYW1lIChlZyAtIHN0YWNrTmFtZSwgc29sdXRpb25zIGNvbnN0cnVjdCBJRCwgTDIgY29uc3RydWN0IElEKVxuICogQHBhcmFtIHtudW1iZXJ9IG1heExlbmd0aCAtIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0IGNhbiBiZSByZXR1cm5lZFxuICogQHJldHVybnMge3N0cmluZ30gLSBhIHN0cmluZyB3aXRoIGNvbmNhdGVuYXRlZCBwYXJ0cyAodHJ1bmNhdGVkIGlmIG5lY2Vzc2FyeSkgKyBhIGhhc2ggb2YgdGhlIGZ1bGwgY29uY2F0ZW5hdGVkIHBhcnRzXG4gKlxuICogVGhpcyBpcyBiYXNlZCB1cG9uIHRoaXMgZGlzY3Vzc2lvbiAtIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTQyNFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVSZXNvdXJjZU5hbWUoXG4gIHBhcnRzOiBzdHJpbmdbXSxcbiAgbWF4TGVuZ3RoOiBudW1iZXIsXG4gIHJhbmRvbWl6ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBzdHJpbmcge1xuICBjb25zdCBoYXNoTGVuZ3RoID0gMTI7XG4gIGNvbnN0IHJhbmRvbWl6b3I6IHN0cmluZyA9IHJhbmRvbWl6ZSA/IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCkudG9TdHJpbmcoKSA6IFwiXCI7XG5cbiAgY29uc3QgbWF4UGFydExlbmd0aCA9IE1hdGguZmxvb3IoKG1heExlbmd0aCAtIGhhc2hMZW5ndGggLSByYW5kb21pem9yLmxlbmd0aCkgLyBwYXJ0cy5sZW5ndGgpO1xuXG4gIGNvbnN0IHNoYTI1NiA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpO1xuICBsZXQgZmluYWxOYW1lOiBzdHJpbmcgPSAnJztcblxuICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgc2hhMjU2LnVwZGF0ZShwYXJ0KTtcbiAgICBmaW5hbE5hbWUgKz0gcmVtb3ZlTm9uQWxwaGFudW1lcmljKHBhcnQuc2xpY2UoMCwgbWF4UGFydExlbmd0aCkpO1xuICB9KTtcblxuICBjb25zdCBoYXNoID0gc2hhMjU2LmRpZ2VzdChcImhleFwiKS5zbGljZSgwLCBoYXNoTGVuZ3RoKTtcbiAgZmluYWxOYW1lICs9IGhhc2g7XG4gIGZpbmFsTmFtZSArPSByYW5kb21pem9yO1xuICByZXR1cm4gZmluYWxOYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsTG9nR3JvdXBOYW1lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgcGFydHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcge1xuICByZXR1cm4gZ2VuZXJhdGVQaHlzaWNhbE5hbWUocHJlZml4LCBwYXJ0cywgMjU1IC0gcHJlZml4Lmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsUmVzdEFwaU5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIHBhcnRzLCAyNTUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQaHlzaWNhbE9hY05hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIHBhcnRzLCA2NCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsS2VuZHJhSW5kZXhOYW1lKFxuICBwcmVmaXg6IHN0cmluZyxcbiAgcGFydHM6IHN0cmluZ1tdXG4pOiBzdHJpbmcge1xuICByZXR1cm4gZ2VuZXJhdGVQaHlzaWNhbE5hbWUocHJlZml4LCBwYXJ0cywgMTAwMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsSW5mZXJlbmNlUHJvZmlsZU5hbWUoXG4gIHByZWZpeDogc3RyaW5nLFxuICBwYXJ0czogc3RyaW5nW11cbik6IHN0cmluZyB7XG4gIHJldHVybiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShwcmVmaXgsIHBhcnRzLCA2NCk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgcGh5c2ljYWwgcmVzb3VyY2UgbmFtZSBpbiB0aGUgc3R5bGUgb2YgdGhlIENESyAoc3RyaW5nK2hhc2gpIC0gdGhpcyB2YWx1ZSBpbmNvcnBvcmF0ZXMgU3RhY2sgSUQsXG4gKiBzbyBpdCB3aWxsIHJlbWFpbiBzdGF0aWMgaW4gbXVsdGlwbGUgdXBkYXRlcyBvZiBhIHNpbmdsZSBzdGFjaywgYnV0IHdpbGwgYmUgZGlmZmVyZW50IGluIGEgc2VwYXJhdGUgc3RhY2sgaW5zdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcnRzIC0gdGhlIHZhcmlvdXMgc3RyaW5nIGNvbXBvbmVudHMgb2YgdGhlIG5hbWUgKGVnIC0gc3RhY2tOYW1lLCBzb2x1dGlvbnMgY29uc3RydWN0IElELCBMMiBjb25zdHJ1Y3QgSUQpXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4TGVuZ3RoIC0gdGhlIGxvbmdlc3Qgc3RyaW5nIHRoYXQgY2FuIGJlIHJldHVybmVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY29uY2F0ZW5hdGVkIHBhcnRzICh0cnVuY2F0ZWQgaWYgbmVjZXNzYXJ5KSArIGEgaGFzaCBvZiB0aGUgZnVsbCBjb25jYXRlbmF0ZWQgcGFydHNcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBoeXNpY2FsTmFtZShcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHBhcnRzOiBzdHJpbmdbXSxcbiAgbWF4TGVuZ3RoOiBudW1iZXIsXG4pOiBzdHJpbmcge1xuICAvLyBUaGUgcmVzdWx0IHdpbGwgY29uc2lzdCBvZjpcbiAgLy8gICAgLVRoZSBwcmVmaXggLSB1bmFsdGVyZWRcbiAgLy8gICAgLVRoZSBwYXJ0cyBjb25jYXRlbmF0ZWQsIGJ1dCByZWR1Y2VkIGluIHNpemUgdG8gbWVldCB0aGUgbWF4TGVuZ3RoIGxpbWl0IGZvciB0aGUgb3ZlcmFsbCBuYW1lXG4gIC8vICAgIC1BIGh5cGhlbiBkZWxpbWl0ZXJcbiAgLy8gICAgLVRoZSBHVUlEIHBvcnRpb24gb2YgdGhlIHN0YWNrIGFyblxuXG4gIGNvbnN0IHN0YWNrSWRHdWlkTGVuZ3RoID0gMzY7XG4gIGNvbnN0IHByZWZpeExlbmd0aCA9IHByZWZpeC5sZW5ndGg7XG4gIGNvbnN0IG1heFBhcnRzTGVuZ3RoID0gbWF4TGVuZ3RoIC0gcHJlZml4TGVuZ3RoIC0gMSAtIHN0YWNrSWRHdWlkTGVuZ3RoOyAvLyAxIGlzIHRoZSBoeXBoZW5cblxuICAvLyBFeHRyYWN0IHRoZSBTdGFjayBJRCBHdWlkXG4gIGNvbnN0IHVuaXF1ZVN0YWNrSWRQYXJ0ID0gY2RrLkZuLnNlbGVjdCgyLCBjZGsuRm4uc3BsaXQoJy8nLCBgJHtjZGsuQXdzLlNUQUNLX0lEfWApKTtcblxuICBsZXQgYWxsUGFydHM6IHN0cmluZyA9ICcnO1xuXG4gIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICBhbGxQYXJ0cyArPSBwYXJ0O1xuICB9KTtcblxuICBpZiAoYWxsUGFydHMubGVuZ3RoID4gbWF4UGFydHNMZW5ndGgpIHtcbiAgICBjb25zdCBzdWJTdHJpbmdMZW5ndGggPSBtYXhQYXJ0c0xlbmd0aCAvIDI7XG4gICAgYWxsUGFydHMgPSBhbGxQYXJ0cy5zdWJzdHJpbmcoMCwgc3ViU3RyaW5nTGVuZ3RoKSArIGFsbFBhcnRzLnN1YnN0cmluZyhhbGxQYXJ0cy5sZW5ndGggLSBzdWJTdHJpbmdMZW5ndGgpO1xuICB9XG5cbiAgY29uc3QgZmluYWxOYW1lID0gcHJlZml4LnRvTG93ZXJDYXNlKCkgKyBhbGxQYXJ0cyArICctJyArIHVuaXF1ZVN0YWNrSWRQYXJ0O1xuICByZXR1cm4gZmluYWxOYW1lO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZU5vbkFscGhhbnVtZXJpYyhzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvW15BLVphLXowLTldL2csICcnKTtcbn1cblxuLyoqXG4gKiBUaGUgQ0ZOIE5BRyBzdXBwcmVzcyBydWxlIGludGVyZmFjZVxuICogQGludGVyZmFjZSBDZm5OYWdTdXBwcmVzc1J1bGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZm5OYWdTdXBwcmVzc1J1bGUge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSByZWFzb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEFkZHMgQ0ZOIE5BRyBzdXBwcmVzcyBydWxlcyB0byB0aGUgQ0RLIHJlc291cmNlLlxuICogQHBhcmFtIHJlc291cmNlIFRoZSBDREsgcmVzb3VyY2VcbiAqIEBwYXJhbSBydWxlcyBUaGUgQ0ZOIE5BRyBzdXBwcmVzcyBydWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ2ZuU3VwcHJlc3NSdWxlcyhyZXNvdXJjZTogY2RrLlJlc291cmNlIHwgY2RrLkNmblJlc291cmNlLCBydWxlczogQ2ZuTmFnU3VwcHJlc3NSdWxlW10pIHtcbiAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgY2RrLlJlc291cmNlKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBjZGsuQ2ZuUmVzb3VyY2U7XG4gIH1cblxuICBpZiAocmVzb3VyY2UuY2ZuT3B0aW9ucy5tZXRhZGF0YT8uY2ZuX25hZz8ucnVsZXNfdG9fc3VwcHJlc3MpIHtcbiAgICByZXNvdXJjZS5jZm5PcHRpb25zLm1ldGFkYXRhPy5jZm5fbmFnLnJ1bGVzX3RvX3N1cHByZXNzLnB1c2goLi4ucnVsZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlc291cmNlLmFkZE1ldGFkYXRhKCdjZm5fbmFnJywge1xuICAgICAgcnVsZXNfdG9fc3VwcHJlc3M6IHJ1bGVzXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEFkZHMgQ2ZuR3VhcmQgc3VwcHJlc3MgcnVsZXMgdG8gdGhlIENESyByZXNvdXJjZS5cbiAqIEBwYXJhbSByZXNvdXJjZSBUaGUgQ0RLIHJlc291cmNlXG4gKiBAcGFyYW0gcnVsZXMgVGhlIENmbkdhdXJkIHJ1bGVzIHRvIHN1cHByZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDZm5HdWFyZFN1cHByZXNzUnVsZXMocmVzb3VyY2U6IGFueSAvKiBjZGsuUmVzb3VyY2UgfCBjZGsuQ2ZuUmVzb3VyY2UgfCBJUm9sZSAqLywgcnVsZXM6IHN0cmluZ1tdKSB7XG5cbiAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgY2RrLlJlc291cmNlKSB7XG4gICAgcmVzb3VyY2UgPSByZXNvdXJjZS5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBjZGsuQ2ZuUmVzb3VyY2U7XG4gIH1cblxuICBpZiAocmVzb3VyY2UuY2ZuT3B0aW9ucy5tZXRhZGF0YT8uZ3VhcmQ/LlN1cHByZXNzZWRSdWxlcykge1xuICAgIHJlc291cmNlLmNmbk9wdGlvbnMubWV0YWRhdGE/Lmd1YXJkLlN1cHByZXNzZWRSdWxlcy5wdXNoKC4uLnJ1bGVzKTtcbiAgfSBlbHNlIHtcbiAgICByZXNvdXJjZS5hZGRNZXRhZGF0YSgnZ3VhcmQnLCB7XG4gICAgICBTdXBwcmVzc2VkUnVsZXM6IHJ1bGVzXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzVnBjQ3VzdG9tZXJIYW5kbGVyUm9sZVdhcm5pbmdzKHN0YWNrOiBjZGsuU3RhY2spIHtcbiAgc3RhY2subm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICBpZiAoY2hpbGQubm9kZS5pZCA9PT0gXCJDdXN0b206OlZwY1Jlc3RyaWN0RGVmYXVsdFNHQ3VzdG9tUmVzb3VyY2VQcm92aWRlclwiKSB7XG4gICAgICBjb25zdCByb2xlID0gKGNoaWxkIGFzIGFueSkucm9sZTtcbiAgICAgIC8vIFR1cm4gb2ZmIGFsbCB3YXJuaW5ncyBjb21pbmcgZnJvbSBjdXN0b20gcmVzb3VyY2VcbiAgICAgIGFkZENmbkd1YXJkU3VwcHJlc3NSdWxlcyhyb2xlLCBbXSk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIENyZWF0ZXMgdGhlIHByb3BzIHRvIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgYSBDREsgTDIgY29uc3RydWN0IHdpdGhpbiBhIFNvbHV0aW9ucyBDb25zdHJ1Y3RcbiAqXG4gKiBAcGFyYW0gZGVmYXVsdFByb3BzIFRoZSBkZWZhdWx0IHByb3BzIHRvIGJlIHVzZWQgYnkgdGhlIGNvbnN0cnVjdFxuICogQHBhcmFtIGNsaWVudFByb3BzIE9wdGlvbmFsIHByb3BlcnRpZXMgcGFzc2VkIGluIGZyb20gdGhlIGNsaWVudCBpbiB0aGUgcHJvcHMgb2JqZWN0XG4gKiBAcGFyYW0gY29uc3RydWN0UHJvcHMgT3B0aW9uYWwgcHJvcGVydGllcyByZXF1aXJlZCBieSB0aGUgY29uc3RydWN0IGZvciB0aGUgY29uc3RydWN0IHRvIHdvcmsgKG92ZXJyaWRlIGFueSBvdGhlciB2YWx1ZXMpXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydGllcyB0byB1c2UgLSBhbGwgdmFsdWVzIHByaW9yaXRpemVkOlxuICogIDEpIGNvbnN0cnVjdFByb3BzIHZhbHVlXG4gKiAgMikgY2xpZW50UHJvcHMgdmFsdWVcbiAqICAzKSBkZWZhdWx0UHJvcHMgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnNvbGlkYXRlUHJvcHMoZGVmYXVsdFByb3BzOiBvYmplY3QsIGNsaWVudFByb3BzPzogb2JqZWN0LCBjb25zdHJ1Y3RQcm9wcz86IG9iamVjdCwgY29uY2F0QXJyYXk6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XG4gIGxldCByZXN1bHQ6IG9iamVjdCA9IGRlZmF1bHRQcm9wcztcblxuICBpZiAoY2xpZW50UHJvcHMpIHtcbiAgICByZXN1bHQgPSBvdmVycmlkZVByb3BzKHJlc3VsdCwgY2xpZW50UHJvcHMsIGNvbmNhdEFycmF5KTtcbiAgfVxuXG4gIGlmIChjb25zdHJ1Y3RQcm9wcykge1xuICAgIC8vIFN1cHByZXNzIHdhcm5pbmdzIGZvciBjb25zdHJ1Y3QgcHJvcHMgb3ZlcnJpZGluZyBldmVyeXRoaW5nIGVsc2VcbiAgICByZXN1bHQgPSBvdmVycmlkZVByb3BzKHJlc3VsdCwgY29uc3RydWN0UHJvcHMsIGNvbmNhdEFycmF5LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBHZW5lcmF0ZXMgYSBuYW1lIHVuaXF1ZSB0byB0aGlzIGxvY2F0aW9uIGluIHRoaXMgc3RhY2sgd2l0aCB0aGlzIHN0YWNrbmFtZS4gVHJ1bmNhdGVzIHRvIHVuZGVyIDY0IGNoYXJhY3RlcnMgaWYgbmVlZGVkLlxuICogKHdpbGwgYWxsb3cgMiBjb3BpZXMgb2YgdGhlIHN0YWNrIHdpdGggZGlmZmVyZW50IHN0YWNrIG5hbWVzLCBidXQgd2lsbCBjb2xsaWRlIGlmIGJvdGggc3RhY2tzIGhhdmUgdGhlIHNhbWUgbmFtZSlcbiAqXG4gKiBAcGFyYW0gc2NvcGUgdGhlIGNvbnN0cnVjdCB3aXRoaW4gdG8gY3JlYXRlIHRoZSBuYW1lXG4gKiBAcGFyYW0gcmVzb3VyY2VJZCBhbiBpZCBmb3IgdGhlIGNvbnN0cnVjdCBhYm91dCB0byBiZSBjcmVhdGVkIHVuZGVyIHNjb3BlIChlbXB0eSBzdHJpbmcgaWYgbmFtZSBpcyBmb3Igc2NvZXApXG4gKiBAcmV0dXJucyBhIHVuaXF1ZSBuYW1lXG4gKlxuICogTm90ZTogVGhpcyBhcHBlYXJzIHRvIG92ZXJsYXAgd2l0aCBHZW5lcmF0ZVJlc291cmNlTmFtZSBhYm92ZSAoSSB3cm90ZSBpdCBiZWZvcmUgbm90aWNpbmcgdGhhdFxuICogZnVuY3Rpb24pLiBBcyB0aGlzIG9mZmxvYWRzIHRoZSBsb2dpYyB0byB0aGUgQ0RLLCBJJ20gbGVhdmluZyB0aGlzIGhlcmUgYnV0IHNvbWVvbmUgbWF5IHdhbnQgdG9cbiAqIGJsZW5kIHRoZXNlIHJvdXRpbmVzIGluIHRoZSBmdXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgcmVzb3VyY2VJZDogc3RyaW5nID0gXCJcIik6IHN0cmluZyB7XG4gIGNvbnN0IG5hbWUgPSByZXNvdXJjZUlkICsgY2RrLk5hbWVzLnVuaXF1ZUlkKHNjb3BlKTtcbiAgaWYgKG5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgMzIpICsgbmFtZS5zdWJzdHJpbmcobmFtZS5sZW5ndGggLSAzMik7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENoZWNrTGlzdFZhbHVlcyhhbGxvd2VkUGVybWlzc2lvbnM6IHN0cmluZ1tdLCBzdWJtaXR0ZWRWYWx1ZXM6IHN0cmluZ1tdLCB2YWx1ZVR5cGU6IHN0cmluZykge1xuICBzdWJtaXR0ZWRWYWx1ZXMuZm9yRWFjaCgoc3VibWl0dGVkVmFsdWUpID0+IHtcbiAgICBpZiAoIWFsbG93ZWRQZXJtaXNzaW9ucy5pbmNsdWRlcyhzdWJtaXR0ZWRWYWx1ZSkpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkICR7dmFsdWVUeXBlfSBzdWJtaXR0ZWQgLSAke3N1Ym1pdHRlZFZhbHVlfWApO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrU3RyaW5nV2l0aERlZmF1bHQodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59Il19
@@ -49,6 +49,8 @@ export declare enum ServiceEndpointTypes {
49
49
  EVENTS = "CLOUDWATCH_EVENTS",
50
50
  KINESIS_FIREHOSE = "KINESIS_FIREHOSE",
51
51
  KINESIS_STREAMS = "KINESIS_STREAMS",
52
+ BEDROCK = "BEDROCK",
53
+ BEDROCK_RUNTIME = "BEDROCK_RUNTIME",
52
54
  KENDRA = "KENDRA"
53
55
  }
54
56
  /**
package/lib/vpc-helper.js CHANGED
@@ -57,6 +57,8 @@ var ServiceEndpointTypes;
57
57
  ServiceEndpointTypes["EVENTS"] = "CLOUDWATCH_EVENTS";
58
58
  ServiceEndpointTypes["KINESIS_FIREHOSE"] = "KINESIS_FIREHOSE";
59
59
  ServiceEndpointTypes["KINESIS_STREAMS"] = "KINESIS_STREAMS";
60
+ ServiceEndpointTypes["BEDROCK"] = "BEDROCK";
61
+ ServiceEndpointTypes["BEDROCK_RUNTIME"] = "BEDROCK_RUNTIME";
60
62
  ServiceEndpointTypes["KENDRA"] = "KENDRA";
61
63
  })(ServiceEndpointTypes || (exports.ServiceEndpointTypes = ServiceEndpointTypes = {}));
62
64
  var EndpointTypes;
@@ -134,6 +136,16 @@ const endpointSettings = [
134
136
  endpointName: ServiceEndpointTypes.KENDRA,
135
137
  endpointType: EndpointTypes.INTERFACE,
136
138
  endpointInterfaceService: ec2.InterfaceVpcEndpointAwsService.KENDRA
139
+ },
140
+ {
141
+ endpointName: ServiceEndpointTypes.BEDROCK,
142
+ endpointType: EndpointTypes.INTERFACE,
143
+ endpointInterfaceService: ec2.InterfaceVpcEndpointAwsService.BEDROCK
144
+ },
145
+ {
146
+ endpointName: ServiceEndpointTypes.BEDROCK_RUNTIME,
147
+ endpointType: EndpointTypes.INTERFACE,
148
+ endpointInterfaceService: ec2.InterfaceVpcEndpointAwsService.BEDROCK_RUNTIME
137
149
  }
138
150
  ];
139
151
  /**
@@ -225,4 +237,4 @@ function CheckVpcProps(propsObject) {
225
237
  throw new Error(errorMessages);
226
238
  }
227
239
  }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFxQ0gsNEJBbUJDO0FBMkdELHNEQXVCQztBQXlERCw0REFpQkM7QUFRRCxzQ0FZQztBQXRSRDs7O0dBR0c7QUFFSCwyQ0FBMkM7QUFHM0MsbUVBQTZEO0FBQzdELG1DQUF3RztBQUN4RyxtQ0FBbUM7QUFzQm5DOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEtBQWdCLEVBQUUsS0FBb0I7SUFDN0QsSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLGVBQWUsR0FBaUIsS0FBSyxFQUFFLGVBQWUsQ0FBQztJQUUzRCxlQUFlLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUVuRyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV2RCxnR0FBZ0c7SUFDaEcsTUFBTSxPQUFPLEdBQWdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkQsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsSUFBQSw4Q0FBc0MsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELElBQVksb0JBZVg7QUFmRCxXQUFZLG9CQUFvQjtJQUM5Qix3Q0FBZ0IsQ0FBQTtJQUNoQixtQ0FBVyxDQUFBO0lBQ1gsbUNBQVcs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VSxHQUFHLEtBQUssQ0FBQztJQUV2QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9FLGFBQWEsSUFBSSxzR0FBc0csQ0FBQztRQUN4SCxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBDZm5Mb2dHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGJ1aWxkU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwLWhlbHBlclwiO1xuaW1wb3J0IHsgY29uc29saWRhdGVQcm9wcywgYWRkQ2ZuU3VwcHJlc3NSdWxlcywgc3VwcHJlc3NWcGNDdXN0b21lckhhbmRsZXJSb2xlV2FybmluZ3MgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFZwY1Byb3BzIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIGEgVlBDLCBpZiB0aGlzIGlzIHNldCB0aGVuIHRoZSBhbGwgUHJvcHMgYXJlIGlnbm9yZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nVnBjPzogZWMyLklWcGM7XG4gIC8qKlxuICAgKiBPbmUgb2YgdGhlIGRlZmF1bHQgVlBDIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBpbiB2cGMtZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWcGNQcm9wczogZWMyLlZwY1Byb3BzO1xuICAvKipcbiAgICogVXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJWcGNQcm9wcz86IGVjMi5WcGNQcm9wcztcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBzcGVjaWZpZWQgcHJvcHMgdGhhdCBvdmVycmlkZSBib3RoIHRoZSBkZWZhdWx0IHByb3BzXG4gICAqIGFuZCB1c2VyIHByb3BzIGZvciB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0VnBjUHJvcHM/OiBlYzIuVnBjUHJvcHM7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVnBjKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBCdWlsZFZwY1Byb3BzKTogZWMyLklWcGMge1xuICBpZiAocHJvcHM/LmV4aXN0aW5nVnBjKSB7XG4gICAgcmV0dXJuIHByb3BzPy5leGlzdGluZ1ZwYztcbiAgfVxuXG4gIGxldCBjdW11bGF0aXZlUHJvcHM6IGVjMi5WcGNQcm9wcyA9IHByb3BzPy5kZWZhdWx0VnBjUHJvcHM7XG5cbiAgY3VtdWxhdGl2ZVByb3BzID0gY29uc29saWRhdGVQcm9wcyhjdW11bGF0aXZlUHJvcHMsIHByb3BzPy51c2VyVnBjUHJvcHMsIHByb3BzPy5jb25zdHJ1Y3RWcGNQcm9wcyk7XG5cbiAgY29uc3QgdnBjID0gbmV3IGVjMi5WcGMoc2NvcGUsIFwiVnBjXCIsIGN1bXVsYXRpdmVQcm9wcyk7XG5cbiAgLy8gQWRkIFZQQyBGbG93TG9ncyB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdHJhZmZpY1R5cGU6QUxMIGFuZCBkZXN0aW5hdGlvbjogQ2xvdWRXYXRjaCBMb2dzXG4gIGNvbnN0IGZsb3dMb2c6IGVjMi5GbG93TG9nID0gdnBjLmFkZEZsb3dMb2coXCJGbG93TG9nXCIpO1xuXG4gIFN1cHByZXNzTWFwUHVibGljSXBXYXJuaW5ncyh2cGMpO1xuICBTdXBwcmVzc0VuY3J5cHRlZExvZ1dhcm5pbmdzKGZsb3dMb2cpO1xuICBzdXBwcmVzc1ZwY0N1c3RvbWVySGFuZGxlclJvbGVXYXJuaW5ncyhjZGsuU3RhY2sub2Yoc2NvcGUpKTtcblxuICByZXR1cm4gdnBjO1xufVxuXG5leHBvcnQgZW51bSBTZXJ2aWNlRW5kcG9pbnRUeXBlcyB7XG4gIERZTkFNT0RCID0gXCJEREJcIixcbiAgU05TID0gXCJTTlNcIixcbiAgU1FTID0gXCJTUVNcIixcbiAgUzMgPSBcIlMzXCIsXG4gIFNURVBfRlVOQ1RJT05TID0gXCJTVEVQX0ZVTkNUSU9OU1wiLFxuICBTQUdFTUFLRVJfUlVOVElNRSA9IFwiU0FHRU1BS0VSX1JVTlRJTUVcIixcbiAgU0VDUkVUU19NQU5BR0VSID0gXCJTRUNSRVRTX01BTkFHRVJcIixcbiAgU1NNID0gXCJTU01cIixcbiAgRUNSX0FQSSA9IFwiRUNSX0FQSVwiLFxuICBFQ1JfREtSID0gXCJFQ1JfREtSXCIsXG4gIEVWRU5UUyA9IFwiQ0xPVURXQVRDSF9FVkVOVFNcIixcbiAgS0lORVNJU19GSVJFSE9TRSA9IFwiS0lORVNJU19GSVJFSE9TRVwiLFxuICBLSU5FU0lTX1NUUkVBTVMgPSBcIktJTkVTSVNfU1RSRUFNU1wiLFxuICBLRU5EUkEgPSBcIktFTkRSQVwiXG59XG5cbmVudW0gRW5kcG9pbnRUeXBlcyB7XG4gIEdBVEVXQVkgPSBcIkdhdGV3YXlcIixcbiAgSU5URVJGQUNFID0gXCJJbnRlcmZhY2VcIixcbn1cblxuaW50ZXJmYWNlIEVuZHBvaW50RGVmaW5pdGlvbiB7XG4gIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXM7XG4gIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcztcbiAgZW5kcG9pbnRHYXRld2F5U2VydmljZT86IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlO1xuICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U/OiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlO1xufVxuXG5jb25zdCBlbmRwb2ludFNldHRpbmdzOiBFbmRwb2ludERlZmluaXRpb25bXSA9IFtcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuRFlOQU1PREIsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLkdBVEVXQVksXG4gICAgZW5kcG9pbnRHYXRld2F5U2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREIsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlMzLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5HQVRFV0FZLFxuICAgIGVuZHBvaW50R2F0ZXdheVNlcnZpY2U6IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlMzLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TVEVQX0ZVTkNUSU9OUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TVEVQX0ZVTkNUSU9OUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU05TLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNOUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU1FTLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNRUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU0FHRU1BS0VSX1JVTlRJTUUsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU0FHRU1BS0VSX1JVTlRJTUUsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNFQ1JFVFNfTUFOQUdFUixcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TRUNSRVRTX01BTkFHRVIsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNTTSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU00sXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkVDUl9BUEksXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkVDUl9ES1IsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSX0RPQ0tFUlxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5FVkVOVFMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuQ0xPVURXQVRDSF9FVkVOVFNcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuS0lORVNJU19GSVJFSE9TRSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5LSU5FU0lTX0ZJUkVIT1NFXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLktJTkVTSVNfU1RSRUFNUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5LSU5FU0lTX1NUUkVBTVNcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuS0VORFJBLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLktFTkRSQVxuICB9XG5dO1xuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHZwYzogZWMyLklWcGMsXG4gIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXNcbikge1xuICBpZiAoQ2hlY2tJZkVuZHBvaW50QWxyZWFkeUV4aXN0cyh2cGMsIGludGVyZmFjZVRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzZXJ2aWNlID0gZW5kcG9pbnRTZXR0aW5ncy5maW5kKFxuICAgIChlbmRwb2ludCkgPT4gZW5kcG9pbnQuZW5kcG9pbnROYW1lID09PSBpbnRlcmZhY2VUYWdcbiAgKTtcblxuICBpZiAoIXNlcnZpY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBTZXJ2aWNlIHNlbnQgdG8gQWRkU2VydmljZUVuZHBvaW50XCIpO1xuICB9XG5cbiAgaWYgKHNlcnZpY2UuZW5kcG9pbnRUeXBlID09PSBFbmRwb2ludFR5cGVzLkdBVEVXQVkpIHtcbiAgICBBZGRHYXRld2F5RW5kcG9pbnQodnBjLCBzZXJ2aWNlLCBpbnRlcmZhY2VUYWcpO1xuICB9XG4gIGlmIChzZXJ2aWNlLmVuZHBvaW50VHlwZSA9PT0gRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UpIHtcbiAgICBBZGRJbnRlcmZhY2VFbmRwb2ludChzY29wZSwgdnBjLCBzZXJ2aWNlLCBpbnRlcmZhY2VUYWcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIENoZWNrSWZFbmRwb2ludEFscmVhZHlFeGlzdHModnBjOiBlYzIuSVZwYywgaW50ZXJmYWNlVGFnOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdnBjLm5vZGUuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLm5vZGUuaWQgPT09IGludGVyZmFjZVRhZyk7XG59XG5cbmZ1bmN0aW9uIFN1cHByZXNzTWFwUHVibGljSXBXYXJuaW5ncyh2cGM6IGVjMi5WcGMpIHtcbiAgLy8gQWRkIENmbiBOYWcgc3VwcHJlc3Npb24gZm9yIFBVQkxJQyBzdWJuZXRzIHRvIHN1cHByZXNzIFdBUk4gVzMzOiBFQzIgU3VibmV0IHNob3VsZCBub3QgaGF2ZSBNYXBQdWJsaWNJcE9uTGF1bmNoIHNldCB0byB0cnVlXG4gIHZwYy5wdWJsaWNTdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgIGNvbnN0IGNmblN1Ym5ldCA9IHN1Ym5ldC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBlYzIuQ2ZuU3VibmV0O1xuICAgIGFkZENmblN1cHByZXNzUnVsZXMoY2ZuU3VibmV0LCBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnVzMzJyxcbiAgICAgICAgcmVhc29uOiAnQWxsb3cgUHVibGljIFN1Ym5ldHMgdG8gaGF2ZSBNYXBQdWJsaWNJcE9uTGF1bmNoIHNldCB0byB0cnVlJ1xuICAgICAgfVxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gU3VwcHJlc3NFbmNyeXB0ZWRMb2dXYXJuaW5ncyhmbG93TG9nOiBlYzIuRmxvd0xvZykge1xuICAvLyBBZGQgQ2ZuIE5hZyBzdXBwcmVzc2lvbiBmb3IgQ2xvdWRXYXRjaExvZ3MgTG9nR3JvdXBzIGRhdGEgaXMgZW5jcnlwdGVkXG4gIGNvbnN0IGNmbkxvZ0dyb3VwOiBDZm5Mb2dHcm91cCA9IGZsb3dMb2cubG9nR3JvdXA/Lm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkxvZ0dyb3VwO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmbkxvZ0dyb3VwLCBbXG4gICAge1xuICAgICAgaWQ6ICdXODQnLFxuICAgICAgcmVhc29uOiAnQnkgZGVmYXVsdCBDbG91ZFdhdGNoTG9ncyBMb2dHcm91cHMgZGF0YSBpcyBlbmNyeXB0ZWQgdXNpbmcgdGhlIENsb3VkV2F0Y2ggc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBrZXlzIChBV1MgTWFuYWdlZCBLZXlzKSdcbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBBZGRJbnRlcmZhY2VFbmRwb2ludChzY29wZTogQ29uc3RydWN0LCB2cGM6IGVjMi5JVnBjLCBzZXJ2aWNlOiBFbmRwb2ludERlZmluaXRpb24sIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXMpIHtcbiAgY29uc3QgZW5kcG9pbnREZWZhdWx0U2VjdXJpdHlHcm91cCA9IGJ1aWxkU2VjdXJpdHlHcm91cChcbiAgICBzY29wZSxcbiAgICBgJHtzY29wZS5ub2RlLmlkfS0ke3NlcnZpY2UuZW5kcG9pbnROYW1lfWAsXG4gICAge1xuICAgICAgdnBjLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9LFxuICAgIFt7IHBlZXI6IGVjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNvbm5lY3Rpb246IGVjMi5Qb3J0LnRjcCg0NDMpIH1dLFxuICAgIFtdXG4gICk7XG5cbiAgdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KGludGVyZmFjZVRhZywge1xuICAgIHNlcnZpY2U6IHNlcnZpY2UuZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlIGFzIGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UsXG4gICAgc2VjdXJpdHlHcm91cHM6IFtlbmRwb2ludERlZmF1bHRTZWN1cml0eUdyb3VwXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEFkZEdhdGV3YXlFbmRwb2ludCh2cGM6IGVjMi5JVnBjLCBzZXJ2aWNlOiBFbmRwb2ludERlZmluaXRpb24sIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXMpIHtcbiAgdnBjLmFkZEdhdGV3YXlFbmRwb2ludChpbnRlcmZhY2VUYWcsIHtcbiAgICBzZXJ2aWNlOiBzZXJ2aWNlLmVuZHBvaW50R2F0ZXdheVNlcnZpY2UgYXMgZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZVByaXZhdGVTdWJuZXRJZHModnBjOiBlYzIuSVZwYykge1xuICBsZXQgdGFyZ2V0U3VibmV0VHlwZTtcblxuICBpZiAodnBjLmlzb2xhdGVkU3VibmV0cy5sZW5ndGgpIHtcbiAgICB0YXJnZXRTdWJuZXRUeXBlID0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRDtcbiAgfSBlbHNlIGlmICh2cGMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoKSB7XG4gICAgdGFyZ2V0U3VibmV0VHlwZSA9IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1M7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciAtIE5vIGlzb2xhdGVkIG9yIHByaXZhdGUgc3VibmV0cyBhdmFpbGFibGUgaW4gVlBDJyk7XG4gIH1cblxuICBjb25zdCBzdWJuZXRTZWxlY3RvciA9IHtcbiAgICBvbmVQZXJBejogdHJ1ZSxcbiAgICBzdWJuZXRUeXBlOiB0YXJnZXRTdWJuZXRUeXBlXG4gIH07XG5cbiAgcmV0dXJuIHZwYy5zZWxlY3RTdWJuZXRzKHN1Ym5ldFNlbGVjdG9yKS5zdWJuZXRJZHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnBjUHJvcHNTZXQge1xuICByZWFkb25seSBleGlzdGluZ1ZwYz86IGVjMi5JVnBjO1xuICByZWFkb25seSB2cGNQcm9wcz86IGVjMi5WcGNQcm9wcztcbiAgcmVhZG9ubHkgZGVwbG95VnBjPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrVnBjUHJvcHMocHJvcHNPYmplY3Q6IFZwY1Byb3BzU2V0IHwgYW55KSB7XG4gIGxldCBlcnJvck1lc3NhZ2VzID0gJyc7XG4gIGxldCBlcnJvckZvdW5kID0gZmFsc2U7XG5cbiAgaWYgKChwcm9wc09iamVjdC5kZXBsb3lWcGMgfHwgcHJvcHNPYmplY3QudnBjUHJvcHMpICYmIHByb3BzT2JqZWN0LmV4aXN0aW5nVnBjKSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSAnRXJyb3IgLSBFaXRoZXIgcHJvdmlkZSBhbiBleGlzdGluZ1ZwYyBvciBzb21lIGNvbWJpbmF0aW9uIG9mIGRlcGxveVZwYyBhbmQgdnBjUHJvcHMsIGJ1dCBub3QgYm90aC5cXG4nO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGVycm9yRm91bmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gIH1cbn1cbiJdfQ==
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFxQ0gsNEJBbUJDO0FBdUhELHNEQXVCQztBQXlERCw0REFpQkM7QUFRRCxzQ0FZQztBQWxTRDs7O0dBR0c7QUFFSCwyQ0FBMkM7QUFHM0MsbUVBQTZEO0FBQzdELG1DQUF3RztBQUN4RyxtQ0FBbUM7QUFzQm5DOztHQUVHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLEtBQWdCLEVBQUUsS0FBb0I7SUFDN0QsSUFBSSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkIsT0FBTyxLQUFLLEVBQUUsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLGVBQWUsR0FBaUIsS0FBSyxFQUFFLGVBQWUsQ0FBQztJQUUzRCxlQUFlLEdBQUcsSUFBQSx3QkFBZ0IsRUFBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUVuRyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV2RCxnR0FBZ0c7SUFDaEcsTUFBTSxPQUFPLEdBQWdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFdkQsMkJBQTJCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsSUFBQSw4Q0FBc0MsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBRTVELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELElBQVksb0JBaUJYO0FBakJELFdBQVksb0JBQW9CO0lBQzlCLHdDQUFnQixDQUFBO0lBQ2hCLG1DQUFXLENBQUE7SUFDWCxtQ0FB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QUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxNQUFNLGNBQWMsR0FBRztRQUNyQixRQUFRLEVBQUUsSUFBSTtRQUNkLFVBQVUsRUFBRSxnQkFBZ0I7S0FDN0IsQ0FBQztJQUVGLE9BQU8sR0FBRyxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDckQsQ0FBQztBQVFELFNBQWdCLGFBQWEsQ0FBQyxXQUE4QjtJQUMxRCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDdkIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRXZCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0UsYUFBYSxJQUFJLHNHQUFzRyxDQUFDO1FBQ3hILFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksVUFBVSxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLypcbiAqICBUaGUgZnVuY3Rpb25zIGZvdW5kIGhlcmUgaW4gdGhlIGNvcmUgbGlicmFyeSBhcmUgZm9yIGludGVybmFsIHVzZSBhbmQgY2FuIGJlIGNoYW5nZWRcbiAqICBvciByZW1vdmVkIG91dHNpZGUgb2YgYSBtYWpvciByZWxlYXNlLiBXZSByZWNvbW1lbmQgYWdhaW5zdCBjYWxsaW5nIHRoZW0gZGlyZWN0bHkgZnJvbSBjbGllbnQgY29kZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENmbkxvZ0dyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgYnVpbGRTZWN1cml0eUdyb3VwIH0gZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXAtaGVscGVyXCI7XG5pbXBvcnQgeyBjb25zb2xpZGF0ZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzLCBzdXBwcmVzc1ZwY0N1c3RvbWVySGFuZGxlclJvbGVXYXJuaW5ncyB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkVnBjUHJvcHMge1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgYSBWUEMsIGlmIHRoaXMgaXMgc2V0IHRoZW4gdGhlIGFsbCBQcm9wcyBhcmUgaWdub3JlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdWcGM/OiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIE9uZSBvZiB0aGUgZGVmYXVsdCBWUEMgY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIGluIHZwYy1kZWZhdWx0c1xuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdFZwY1Byb3BzOiBlYzIuVnBjUHJvcHM7XG4gIC8qKlxuICAgKiBVc2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgdXNlclZwY1Byb3BzPzogZWMyLlZwY1Byb3BzO1xuICAvKipcbiAgICogQ29uc3RydWN0IHNwZWNpZmllZCBwcm9wcyB0aGF0IG92ZXJyaWRlIGJvdGggdGhlIGRlZmF1bHQgcHJvcHNcbiAgICogYW5kIHVzZXIgcHJvcHMgZm9yIHRoZSBWUEMuXG4gICAqL1xuICByZWFkb25seSBjb25zdHJ1Y3RWcGNQcm9wcz86IGVjMi5WcGNQcm9wcztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRWcGMoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEJ1aWxkVnBjUHJvcHMpOiBlYzIuSVZwYyB7XG4gIGlmIChwcm9wcz8uZXhpc3RpbmdWcGMpIHtcbiAgICByZXR1cm4gcHJvcHM/LmV4aXN0aW5nVnBjO1xuICB9XG5cbiAgbGV0IGN1bXVsYXRpdmVQcm9wczogZWMyLlZwY1Byb3BzID0gcHJvcHM/LmRlZmF1bHRWcGNQcm9wcztcblxuICBjdW11bGF0aXZlUHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKGN1bXVsYXRpdmVQcm9wcywgcHJvcHM/LnVzZXJWcGNQcm9wcywgcHJvcHM/LmNvbnN0cnVjdFZwY1Byb3BzKTtcblxuICBjb25zdCB2cGMgPSBuZXcgZWMyLlZwYyhzY29wZSwgXCJWcGNcIiwgY3VtdWxhdGl2ZVByb3BzKTtcblxuICAvLyBBZGQgVlBDIEZsb3dMb2dzIHdpdGggdGhlIGRlZmF1bHQgc2V0dGluZyBvZiB0cmFmZmljVHlwZTpBTEwgYW5kIGRlc3RpbmF0aW9uOiBDbG91ZFdhdGNoIExvZ3NcbiAgY29uc3QgZmxvd0xvZzogZWMyLkZsb3dMb2cgPSB2cGMuYWRkRmxvd0xvZyhcIkZsb3dMb2dcIik7XG5cbiAgU3VwcHJlc3NNYXBQdWJsaWNJcFdhcm5pbmdzKHZwYyk7XG4gIFN1cHByZXNzRW5jcnlwdGVkTG9nV2FybmluZ3MoZmxvd0xvZyk7XG4gIHN1cHByZXNzVnBjQ3VzdG9tZXJIYW5kbGVyUm9sZVdhcm5pbmdzKGNkay5TdGFjay5vZihzY29wZSkpO1xuXG4gIHJldHVybiB2cGM7XG59XG5cbmV4cG9ydCBlbnVtIFNlcnZpY2VFbmRwb2ludFR5cGVzIHtcbiAgRFlOQU1PREIgPSBcIkREQlwiLFxuICBTTlMgPSBcIlNOU1wiLFxuICBTUVMgPSBcIlNRU1wiLFxuICBTMyA9IFwiUzNcIixcbiAgU1RFUF9GVU5DVElPTlMgPSBcIlNURVBfRlVOQ1RJT05TXCIsXG4gIFNBR0VNQUtFUl9SVU5USU1FID0gXCJTQUdFTUFLRVJfUlVOVElNRVwiLFxuICBTRUNSRVRTX01BTkFHRVIgPSBcIlNFQ1JFVFNfTUFOQUdFUlwiLFxuICBTU00gPSBcIlNTTVwiLFxuICBFQ1JfQVBJID0gXCJFQ1JfQVBJXCIsXG4gIEVDUl9ES1IgPSBcIkVDUl9ES1JcIixcbiAgRVZFTlRTID0gXCJDTE9VRFdBVENIX0VWRU5UU1wiLFxuICBLSU5FU0lTX0ZJUkVIT1NFID0gXCJLSU5FU0lTX0ZJUkVIT1NFXCIsXG4gIEtJTkVTSVNfU1RSRUFNUyA9IFwiS0lORVNJU19TVFJFQU1TXCIsXG4gIEJFRFJPQ0sgPSBcIkJFRFJPQ0tcIixcbiAgQkVEUk9DS19SVU5USU1FID0gXCJCRURST0NLX1JVTlRJTUVcIixcbiAgS0VORFJBID0gXCJLRU5EUkFcIlxufVxuXG5lbnVtIEVuZHBvaW50VHlwZXMge1xuICBHQVRFV0FZID0gXCJHYXRld2F5XCIsXG4gIElOVEVSRkFDRSA9IFwiSW50ZXJmYWNlXCIsXG59XG5cbmludGVyZmFjZSBFbmRwb2ludERlZmluaXRpb24ge1xuICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzO1xuICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXM7XG4gIGVuZHBvaW50R2F0ZXdheVNlcnZpY2U/OiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZTtcbiAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlPzogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZTtcbn1cblxuY29uc3QgZW5kcG9pbnRTZXR0aW5nczogRW5kcG9pbnREZWZpbml0aW9uW10gPSBbXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkRZTkFNT0RCLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5HQVRFV0FZLFxuICAgIGVuZHBvaW50R2F0ZXdheVNlcnZpY2U6IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkRZTkFNT0RCLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TMyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuR0FURVdBWSxcbiAgICBlbmRwb2ludEdhdGV3YXlTZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5TMyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU1RFUF9GVU5DVElPTlMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1RFUF9GVU5DVElPTlMsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNOUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TTlMsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNRUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TUVMsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNBR0VNQUtFUl9SVU5USU1FLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNBR0VNQUtFUl9SVU5USU1FLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TRUNSRVRTX01BTkFHRVIsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU0VDUkVUU19NQU5BR0VSLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TU00sXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1NNLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5FQ1JfQVBJLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkVDUlxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5FQ1JfREtSLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkVDUl9ET0NLRVJcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuRVZFTlRTLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfRVZFTlRTXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLktJTkVTSVNfRklSRUhPU0UsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuS0lORVNJU19GSVJFSE9TRVxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5LSU5FU0lTX1NUUkVBTVMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuS0lORVNJU19TVFJFQU1TXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLktFTkRSQSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5LRU5EUkFcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuQkVEUk9DSyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5CRURST0NLXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkJFRFJPQ0tfUlVOVElNRSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5CRURST0NLX1JVTlRJTUVcbiAgfVxuXTtcblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQWRkQXdzU2VydmljZUVuZHBvaW50KFxuICBzY29wZTogQ29uc3RydWN0LFxuICB2cGM6IGVjMi5JVnBjLFxuICBpbnRlcmZhY2VUYWc6IFNlcnZpY2VFbmRwb2ludFR5cGVzXG4pIHtcbiAgaWYgKENoZWNrSWZFbmRwb2ludEFscmVhZHlFeGlzdHModnBjLCBpbnRlcmZhY2VUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZSA9IGVuZHBvaW50U2V0dGluZ3MuZmluZChcbiAgICAoZW5kcG9pbnQpID0+IGVuZHBvaW50LmVuZHBvaW50TmFtZSA9PT0gaW50ZXJmYWNlVGFnXG4gICk7XG5cbiAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgU2VydmljZSBzZW50IHRvIEFkZFNlcnZpY2VFbmRwb2ludFwiKTtcbiAgfVxuXG4gIGlmIChzZXJ2aWNlLmVuZHBvaW50VHlwZSA9PT0gRW5kcG9pbnRUeXBlcy5HQVRFV0FZKSB7XG4gICAgQWRkR2F0ZXdheUVuZHBvaW50KHZwYywgc2VydmljZSwgaW50ZXJmYWNlVGFnKTtcbiAgfVxuICBpZiAoc2VydmljZS5lbmRwb2ludFR5cGUgPT09IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFKSB7XG4gICAgQWRkSW50ZXJmYWNlRW5kcG9pbnQoc2NvcGUsIHZwYywgc2VydmljZSwgaW50ZXJmYWNlVGFnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBDaGVja0lmRW5kcG9pbnRBbHJlYWR5RXhpc3RzKHZwYzogZWMyLklWcGMsIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIHZwYy5ub2RlLmNoaWxkcmVuLnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5ub2RlLmlkID09PSBpbnRlcmZhY2VUYWcpO1xufVxuXG5mdW5jdGlvbiBTdXBwcmVzc01hcFB1YmxpY0lwV2FybmluZ3ModnBjOiBlYzIuVnBjKSB7XG4gIC8vIEFkZCBDZm4gTmFnIHN1cHByZXNzaW9uIGZvciBQVUJMSUMgc3VibmV0cyB0byBzdXBwcmVzcyBXQVJOIFczMzogRUMyIFN1Ym5ldCBzaG91bGQgbm90IGhhdmUgTWFwUHVibGljSXBPbkxhdW5jaCBzZXQgdG8gdHJ1ZVxuICB2cGMucHVibGljU3VibmV0cy5mb3JFYWNoKChzdWJuZXQpID0+IHtcbiAgICBjb25zdCBjZm5TdWJuZXQgPSBzdWJuZXQubm9kZS5kZWZhdWx0Q2hpbGQgYXMgZWMyLkNmblN1Ym5ldDtcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmblN1Ym5ldCwgW1xuICAgICAge1xuICAgICAgICBpZDogJ1czMycsXG4gICAgICAgIHJlYXNvbjogJ0FsbG93IFB1YmxpYyBTdWJuZXRzIHRvIGhhdmUgTWFwUHVibGljSXBPbkxhdW5jaCBzZXQgdG8gdHJ1ZSdcbiAgICAgIH1cbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFN1cHByZXNzRW5jcnlwdGVkTG9nV2FybmluZ3MoZmxvd0xvZzogZWMyLkZsb3dMb2cpIHtcbiAgLy8gQWRkIENmbiBOYWcgc3VwcHJlc3Npb24gZm9yIENsb3VkV2F0Y2hMb2dzIExvZ0dyb3VwcyBkYXRhIGlzIGVuY3J5cHRlZFxuICBjb25zdCBjZm5Mb2dHcm91cDogQ2ZuTG9nR3JvdXAgPSBmbG93TG9nLmxvZ0dyb3VwPy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Mb2dHcm91cDtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhjZm5Mb2dHcm91cCwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzg0JyxcbiAgICAgIHJlYXNvbjogJ0J5IGRlZmF1bHQgQ2xvdWRXYXRjaExvZ3MgTG9nR3JvdXBzIGRhdGEgaXMgZW5jcnlwdGVkIHVzaW5nIHRoZSBDbG91ZFdhdGNoIHNlcnZlci1zaWRlIGVuY3J5cHRpb24ga2V5cyAoQVdTIE1hbmFnZWQgS2V5cyknXG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gQWRkSW50ZXJmYWNlRW5kcG9pbnQoc2NvcGU6IENvbnN0cnVjdCwgdnBjOiBlYzIuSVZwYywgc2VydmljZTogRW5kcG9pbnREZWZpbml0aW9uLCBpbnRlcmZhY2VUYWc6IFNlcnZpY2VFbmRwb2ludFR5cGVzKSB7XG4gIGNvbnN0IGVuZHBvaW50RGVmYXVsdFNlY3VyaXR5R3JvdXAgPSBidWlsZFNlY3VyaXR5R3JvdXAoXG4gICAgc2NvcGUsXG4gICAgYCR7c2NvcGUubm9kZS5pZH0tJHtzZXJ2aWNlLmVuZHBvaW50TmFtZX1gLFxuICAgIHtcbiAgICAgIHZwYyxcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSxcbiAgICBbeyBwZWVyOiBlYzIuUGVlci5pcHY0KHZwYy52cGNDaWRyQmxvY2spLCBjb25uZWN0aW9uOiBlYzIuUG9ydC50Y3AoNDQzKSB9XSxcbiAgICBbXVxuICApO1xuXG4gIHZwYy5hZGRJbnRlcmZhY2VFbmRwb2ludChpbnRlcmZhY2VUYWcsIHtcbiAgICBzZXJ2aWNlOiBzZXJ2aWNlLmVuZHBvaW50SW50ZXJmYWNlU2VydmljZSBhcyBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLFxuICAgIHNlY3VyaXR5R3JvdXBzOiBbZW5kcG9pbnREZWZhdWx0U2VjdXJpdHlHcm91cF0sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBBZGRHYXRld2F5RW5kcG9pbnQodnBjOiBlYzIuSVZwYywgc2VydmljZTogRW5kcG9pbnREZWZpbml0aW9uLCBpbnRlcmZhY2VUYWc6IFNlcnZpY2VFbmRwb2ludFR5cGVzKSB7XG4gIHZwYy5hZGRHYXRld2F5RW5kcG9pbnQoaW50ZXJmYWNlVGFnLCB7XG4gICAgc2VydmljZTogc2VydmljZS5lbmRwb2ludEdhdGV3YXlTZXJ2aWNlIGFzIGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmV0cmlldmVQcml2YXRlU3VibmV0SWRzKHZwYzogZWMyLklWcGMpIHtcbiAgbGV0IHRhcmdldFN1Ym5ldFR5cGU7XG5cbiAgaWYgKHZwYy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoKSB7XG4gICAgdGFyZ2V0U3VibmV0VHlwZSA9IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQ7XG4gIH0gZWxzZSBpZiAodnBjLnByaXZhdGVTdWJuZXRzLmxlbmd0aCkge1xuICAgIHRhcmdldFN1Ym5ldFR5cGUgPSBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBObyBpc29sYXRlZCBvciBwcml2YXRlIHN1Ym5ldHMgYXZhaWxhYmxlIGluIFZQQycpO1xuICB9XG5cbiAgY29uc3Qgc3VibmV0U2VsZWN0b3IgPSB7XG4gICAgb25lUGVyQXo6IHRydWUsXG4gICAgc3VibmV0VHlwZTogdGFyZ2V0U3VibmV0VHlwZVxuICB9O1xuXG4gIHJldHVybiB2cGMuc2VsZWN0U3VibmV0cyhzdWJuZXRTZWxlY3Rvcikuc3VibmV0SWRzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZwY1Byb3BzU2V0IHtcbiAgcmVhZG9ubHkgZXhpc3RpbmdWcGM/OiBlYzIuSVZwYztcbiAgcmVhZG9ubHkgdnBjUHJvcHM/OiBlYzIuVnBjUHJvcHM7XG4gIHJlYWRvbmx5IGRlcGxveVZwYz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDaGVja1ZwY1Byb3BzKHByb3BzT2JqZWN0OiBWcGNQcm9wc1NldCB8IGFueSkge1xuICBsZXQgZXJyb3JNZXNzYWdlcyA9ICcnO1xuICBsZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xuXG4gIGlmICgocHJvcHNPYmplY3QuZGVwbG95VnBjIHx8IHByb3BzT2JqZWN0LnZwY1Byb3BzKSAmJiBwcm9wc09iamVjdC5leGlzdGluZ1ZwYykge1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ0Vycm9yIC0gRWl0aGVyIHByb3ZpZGUgYW4gZXhpc3RpbmdWcGMgb3Igc29tZSBjb21iaW5hdGlvbiBvZiBkZXBsb3lWcGMgYW5kIHZwY1Byb3BzLCBidXQgbm90IGJvdGguXFxuJztcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChlcnJvckZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZXMpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/core",
3
- "version": "2.83.0",
3
+ "version": "2.84.0",
4
4
  "description": "Core CDK Construct for patterns library",
5
5
  "main": "index.js",
6
6
  "types": "index.ts",
@@ -66,7 +66,7 @@
66
66
  "@types/jest": "^27.4.0",
67
67
  "@types/node": "^10.3.0",
68
68
  "constructs": "^10.0.0",
69
- "aws-cdk-lib": "2.187.0"
69
+ "aws-cdk-lib": "2.190.0"
70
70
  },
71
71
  "jest": {
72
72
  "moduleFileExtensions": [
@@ -89,6 +89,6 @@
89
89
  ],
90
90
  "peerDependencies": {
91
91
  "constructs": "^10.0.0",
92
- "aws-cdk-lib": "^2.187.0"
92
+ "aws-cdk-lib": "^2.190.0"
93
93
  }
94
94
  }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ export {};
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const cdk = require("aws-cdk-lib");
16
+ const bedrock_inference_helper_1 = require("../lib/bedrock-inference-helper");
17
+ // import { Construct } from 'constructs';
18
+ const assertions_1 = require("aws-cdk-lib/assertions");
19
+ test('Create cross region Inference Profile by default', () => {
20
+ const stack = new cdk.Stack();
21
+ (0, bedrock_inference_helper_1.buildInferenceProfile)(stack, "test-profile", {
22
+ bedrockModelId: "amazon.nova-lite-v1:0",
23
+ });
24
+ const template = assertions_1.Template.fromStack(stack);
25
+ template.resourceCountIs("AWS::Bedrock::ApplicationInferenceProfile", 1);
26
+ template.hasResourceProperties("AWS::Bedrock::ApplicationInferenceProfile", {
27
+ InferenceProfileName: {
28
+ "Fn::Join": [
29
+ "",
30
+ [
31
+ "test-profile-",
32
+ {
33
+ "Fn::Select": [
34
+ 2,
35
+ {
36
+ "Fn::Split": [
37
+ "/",
38
+ {
39
+ "Ref": "AWS::StackId"
40
+ }
41
+ ]
42
+ }
43
+ ]
44
+ }
45
+ ]
46
+ ]
47
+ },
48
+ ModelSource: {
49
+ CopyFrom: {
50
+ "Fn::Join": [
51
+ "",
52
+ [
53
+ "arn:",
54
+ {
55
+ "Ref": "AWS::Partition"
56
+ },
57
+ ":bedrock:",
58
+ {
59
+ "Ref": "AWS::Region"
60
+ },
61
+ ":",
62
+ {
63
+ "Ref": "AWS::AccountId"
64
+ },
65
+ ":inference-profile/",
66
+ {
67
+ "Fn::FindInMap": [
68
+ "testprofileareaprefixmapping",
69
+ {
70
+ "Fn::Select": [
71
+ 0,
72
+ {
73
+ "Fn::Split": [
74
+ "-",
75
+ {
76
+ "Ref": "AWS::Region"
77
+ }
78
+ ]
79
+ }
80
+ ]
81
+ },
82
+ "prefix"
83
+ ]
84
+ },
85
+ ".amazon.nova-lite-v1:0"
86
+ ]
87
+ ]
88
+ }
89
+ },
90
+ });
91
+ });
92
+ test('Test adding Prefix Mapping to template', () => {
93
+ // Stack
94
+ const stack = new cdk.Stack();
95
+ const mapping = (0, bedrock_inference_helper_1.createAreaPrefixMapping)(stack, "test-stack");
96
+ expect(mapping.mapping).toBeDefined();
97
+ expect(mapping.mappingName).toEqual("teststackareaprefixmapping");
98
+ const template = assertions_1.Template.fromStack(stack);
99
+ template.hasMapping(mapping.mappingName, {
100
+ us: {
101
+ prefix: "us"
102
+ },
103
+ eu: {
104
+ prefix: "eu"
105
+ },
106
+ ap: {
107
+ prefix: "apac"
108
+ }
109
+ });
110
+ });
111
+ test('Test adding Region Mapping to template', () => {
112
+ // Stack
113
+ const stack = new cdk.Stack();
114
+ const mapping = (0, bedrock_inference_helper_1.createAreaRegionMapping)(stack, "test-stack", "model-name");
115
+ expect(mapping.mapping).toBeDefined();
116
+ expect(mapping.mappingName).toEqual("teststackarearegionmapping");
117
+ const template = assertions_1.Template.fromStack(stack);
118
+ template.hasMapping(mapping.mappingName, {
119
+ eu: {
120
+ regionalModels: `arn:aws:bedrock:eu-north-1::foundation-model/model-name,` +
121
+ `arn:aws:bedrock:eu-central-1::foundation-model/model-name,` +
122
+ `arn:aws:bedrock:eu-west-1::foundation-model/model-name,` +
123
+ `arn:aws:bedrock:eu-west-3::foundation-model/model-name`
124
+ },
125
+ us: {
126
+ regionalModels: `arn:aws:bedrock:us-east-1::foundation-model/model-name,` +
127
+ `arn:aws:bedrock:us-east-2::foundation-model/model-name,` +
128
+ `arn:aws:bedrock:us-west-2::foundation-model/model-name`
129
+ },
130
+ ap: {
131
+ regionalModels: `arn:aws:bedrock:ap-southeast-2::foundation-model/model-name,` +
132
+ `arn:aws:bedrock:ap-northeast-1::foundation-model/model-name,` +
133
+ `arn:aws:bedrock:ap-south-1::foundation-model/model-name,` +
134
+ `arn:aws:bedrock:ap-northeast-2::foundation-model/model-name,` +
135
+ `arn:aws:bedrock:ap-southeast-1::foundation-model/model-name,` +
136
+ `arn:aws:bedrock:ap-northeast-3::foundation-model/model-name`
137
+ }
138
+ });
139
+ });
140
+ test('Create single region Inference Profile', () => {
141
+ const stack = new cdk.Stack();
142
+ (0, bedrock_inference_helper_1.buildInferenceProfile)(stack, "test-profile", {
143
+ bedrockModelId: "amazon.nova-lite-v1:0",
144
+ deployCrossRegionProfile: false
145
+ });
146
+ const template = assertions_1.Template.fromStack(stack);
147
+ template.resourceCountIs("AWS::Bedrock::ApplicationInferenceProfile", 1);
148
+ template.hasResourceProperties("AWS::Bedrock::ApplicationInferenceProfile", {
149
+ ModelSource: {
150
+ CopyFrom: {
151
+ "Fn::Join": [
152
+ "",
153
+ [
154
+ "arn:",
155
+ {
156
+ "Ref": "AWS::Partition"
157
+ },
158
+ ":bedrock:",
159
+ {
160
+ "Ref": "AWS::Region"
161
+ },
162
+ ":",
163
+ {
164
+ "Ref": "AWS::AccountId"
165
+ },
166
+ ":foundation-model/amazon.nova-lite-v1:0"
167
+ ]
168
+ ]
169
+ }
170
+ },
171
+ });
172
+ });
173
+ test("Test for bad inference props", () => {
174
+ const app = () => {
175
+ (0, bedrock_inference_helper_1.CheckBedrockInferenceProps)({
176
+ bedrockModelId: "amazon.nova-lite-v1:0",
177
+ inferenceProfileProps: {
178
+ inferenceProfileName: "test",
179
+ modelSource: {
180
+ copyFrom: "test"
181
+ }
182
+ }
183
+ });
184
+ };
185
+ expect(app).toThrowError('Error - The construct will create the modelSource value, it cannot be specified in the props.\n');
186
+ });
187
+ test('Create cross region Inference Profile by default', () => {
188
+ const stack = new cdk.Stack();
189
+ const testName = "test-profile";
190
+ (0, bedrock_inference_helper_1.buildInferenceProfile)(stack, "test-profile", {
191
+ bedrockModelId: "amazon.nova-lite-v1:0",
192
+ inferenceProfileProps: {
193
+ inferenceProfileName: testName
194
+ }
195
+ });
196
+ const template = assertions_1.Template.fromStack(stack);
197
+ template.resourceCountIs("AWS::Bedrock::ApplicationInferenceProfile", 1);
198
+ template.hasResourceProperties("AWS::Bedrock::ApplicationInferenceProfile", {
199
+ InferenceProfileName: testName,
200
+ });
201
+ });
202
+ test('Test IsCrossRegionProfile', () => {
203
+ let crossRegion;
204
+ crossRegion = (0, bedrock_inference_helper_1.IsCrossRegionProfile)(true);
205
+ expect(crossRegion).toEqual(true);
206
+ crossRegion = (0, bedrock_inference_helper_1.IsCrossRegionProfile)(false);
207
+ expect(crossRegion).toEqual(false);
208
+ crossRegion = (0, bedrock_inference_helper_1.IsCrossRegionProfile)();
209
+ expect(crossRegion).toEqual(true);
210
+ });
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVkcm9jay1pbmZlcmVuY2UtaGVscGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJiZWRyb2NrLWluZmVyZW5jZS1oZWxwZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsbUNBQW1DO0FBQ25DLDhFQUE0SztBQUM1SywwQ0FBMEM7QUFDMUMsdURBQWtEO0FBRWxELElBQUksQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7SUFDNUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFOUIsSUFBQSxnREFBcUIsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO1FBQzNDLGNBQWMsRUFBRSx1QkFBdUI7S0FDeEMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQywyQ0FBMkMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxRQUFRLENBQUMscUJBQXFCLENBQUMsMkNBQTJDLEVBQUU7UUFDMUUsb0JBQW9CLEVBQUU7WUFDcEIsVUFBVSxFQUFFO2dCQUNWLEVBQUU7Z0JBQ0Y7b0JBQ0UsZUFBZTtvQkFDZjt3QkFDRSxZQUFZLEVBQUU7NEJBQ1osQ0FBQzs0QkFDRDtnQ0FDRSxXQUFXLEVBQUU7b0NBQ1gsR0FBRztvQ0FDSDt3Q0FDRSxLQUFLLEVBQUUsY0FBYztxQ0FDdEI7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsUUFBUSxFQUFFO2dCQUNSLFVBQVUsRUFBRTtvQkFDVixFQUFFO29CQUNGO3dCQUNFLE1BQU07d0JBQ047NEJBQ0UsS0FBSyxFQUFFLGdCQUFnQjt5QkFDeEI7d0JBQ0QsV0FBVzt3QkFDWDs0QkFDRSxLQUFLLEVBQUUsYUFBYTt5QkFDckI7d0JBQ0QsR0FB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QUUsUUFBUTtTQUMvQjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNDLFFBQVEsQ0FBQyxlQUFlLENBQUMsMkNBQTJDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsUUFBUSxDQUFDLHFCQUFxQixDQUFDLDJDQUEyQyxFQUFFO1FBQzFFLG9CQUFvQixFQUFFLFFBQVE7S0FDL0IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLElBQUksV0FBVyxDQUFDO0lBRWhCLFdBQVcsR0FBRSxJQUFBLCtDQUFvQixFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbEMsV0FBVyxHQUFFLElBQUEsK0NBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVuQyxXQUFXLEdBQUUsSUFBQSwrQ0FBb0IsR0FBRSxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgY3JlYXRlQXJlYVByZWZpeE1hcHBpbmcsIGNyZWF0ZUFyZWFSZWdpb25NYXBwaW5nLCBidWlsZEluZmVyZW5jZVByb2ZpbGUsIENoZWNrQmVkcm9ja0luZmVyZW5jZVByb3BzLCBJc0Nyb3NzUmVnaW9uUHJvZmlsZSB9IGZyb20gJy4uL2xpYi9iZWRyb2NrLWluZmVyZW5jZS1oZWxwZXInO1xuLy8gaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuXG50ZXN0KCdDcmVhdGUgY3Jvc3MgcmVnaW9uIEluZmVyZW5jZSBQcm9maWxlIGJ5IGRlZmF1bHQnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjaygpO1xuXG4gIGJ1aWxkSW5mZXJlbmNlUHJvZmlsZShzdGFjaywgXCJ0ZXN0LXByb2ZpbGVcIiwge1xuICAgIGJlZHJvY2tNb2RlbElkOiBcImFtYXpvbi5ub3ZhLWxpdGUtdjE6MFwiLFxuICB9KTtcbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QmVkcm9jazo6QXBwbGljYXRpb25JbmZlcmVuY2VQcm9maWxlXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkJlZHJvY2s6OkFwcGxpY2F0aW9uSW5mZXJlbmNlUHJvZmlsZVwiLCB7XG4gICAgSW5mZXJlbmNlUHJvZmlsZU5hbWU6IHtcbiAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICBcIlwiLFxuICAgICAgICBbXG4gICAgICAgICAgXCJ0ZXN0LXByb2ZpbGUtXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJGbjo6U2VsZWN0XCI6IFtcbiAgICAgICAgICAgICAgMixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiRm46OlNwbGl0XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwiL1wiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcIlJlZlwiOiBcIkFXUzo6U3RhY2tJZFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICBdXG4gICAgfSxcbiAgICBNb2RlbFNvdXJjZToge1xuICAgICAgQ29weUZyb206IHtcbiAgICAgICAgXCJGbjo6Sm9pblwiOiBbXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICBcImFybjpcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJSZWZcIjogXCJBV1M6OlBhcnRpdGlvblwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCI6YmVkcm9jazpcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCJSZWZcIjogXCJBV1M6OlJlZ2lvblwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCI6XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiUmVmXCI6IFwiQVdTOjpBY2NvdW50SWRcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiOmluZmVyZW5jZS1wcm9maWxlL1wiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIkZuOjpGaW5kSW5NYXBcIjogW1xuICAgICAgICAgICAgICAgIFwidGVzdHByb2ZpbGVhcmVhcHJlZml4bWFwcGluZ1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFwiRm46OlNlbGVjdFwiOiBbXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBcIkZuOjpTcGxpdFwiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWZcIjogXCJBV1M6OlJlZ2lvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcInByZWZpeFwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIi5hbWF6b24ubm92YS1saXRlLXYxOjBcIlxuICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIFByZWZpeCBNYXBwaW5nIHRvIHRlbXBsYXRlJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2soKTtcblxuICBjb25zdCBtYXBwaW5nID0gY3JlYXRlQXJlYVByZWZpeE1hcHBpbmcoc3RhY2ssIFwidGVzdC1zdGFja1wiKTtcbiAgZXhwZWN0KG1hcHBpbmcubWFwcGluZykudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KG1hcHBpbmcubWFwcGluZ05hbWUpLnRvRXF1YWwoXCJ0ZXN0c3RhY2thcmVhcHJlZml4bWFwcGluZ1wiKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG5cbiAgdGVtcGxhdGUuaGFzTWFwcGluZyhtYXBwaW5nLm1hcHBpbmdOYW1lLCB7XG4gICAgdXM6IHtcbiAgICAgIHByZWZpeDogXCJ1c1wiXG4gICAgfSxcbiAgICBldToge1xuICAgICAgcHJlZml4OiBcImV1XCJcbiAgICB9LFxuICAgIGFwOiB7XG4gICAgICBwcmVmaXg6IFwiYXBhY1wiXG4gICAgfVxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBSZWdpb24gTWFwcGluZyB0byB0ZW1wbGF0ZScsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgbWFwcGluZyA9IGNyZWF0ZUFyZWFSZWdpb25NYXBwaW5nKHN0YWNrLCBcInRlc3Qtc3RhY2tcIiwgXCJtb2RlbC1uYW1lXCIpO1xuICBleHBlY3QobWFwcGluZy5tYXBwaW5nKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QobWFwcGluZy5tYXBwaW5nTmFtZSkudG9FcXVhbChcInRlc3RzdGFja2FyZWFyZWdpb25tYXBwaW5nXCIpO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5oYXNNYXBwaW5nKG1hcHBpbmcubWFwcGluZ05hbWUsIHtcbiAgICBldToge1xuICAgICAgcmVnaW9uYWxNb2RlbHM6XG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6ZXUtbm9ydGgtMTo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmV1LWNlbnRyYWwtMTo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmV1LXdlc3QtMTo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmV1LXdlc3QtMzo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lYFxuICAgIH0sXG4gICAgdXM6IHtcbiAgICAgIHJlZ2lvbmFsTW9kZWxzOlxuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOnVzLWVhc3QtMTo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOnVzLWVhc3QtMjo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOnVzLXdlc3QtMjo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lYFxuICAgIH0sXG4gICAgYXA6IHtcbiAgICAgIHJlZ2lvbmFsTW9kZWxzOlxuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmFwLXNvdXRoZWFzdC0yOjpmb3VuZGF0aW9uLW1vZGVsL21vZGVsLW5hbWUsYCArXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6YXAtbm9ydGhlYXN0LTE6OmZvdW5kYXRpb24tbW9kZWwvbW9kZWwtbmFtZSxgICtcbiAgICAgICAgYGFybjphd3M6YmVkcm9jazphcC1zb3V0aC0xOjpmb3VuZGF0aW9uLW1vZGVsL21vZGVsLW5hbWUsYCArXG4gICAgICAgIGBhcm46YXdzOmJlZHJvY2s6YXAtbm9ydGhlYXN0LTI6OmZvdW5kYXRpb24tbW9kZWwvbW9kZWwtbmFtZSxgICtcbiAgICAgICAgYGFybjphd3M6YmVkcm9jazphcC1zb3V0aGVhc3QtMTo6Zm91bmRhdGlvbi1tb2RlbC9tb2RlbC1uYW1lLGAgK1xuICAgICAgICBgYXJuOmF3czpiZWRyb2NrOmFwLW5vcnRoZWFzdC0zOjpmb3VuZGF0aW9uLW1vZGVsL21vZGVsLW5hbWVgXG4gICAgfVxuICB9KTtcbn0pO1xuXG50ZXN0KCdDcmVhdGUgc2luZ2xlIHJlZ2lvbiBJbmZlcmVuY2UgUHJvZmlsZScsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgYnVpbGRJbmZlcmVuY2VQcm9maWxlKHN0YWNrLCBcInRlc3QtcHJvZmlsZVwiLCB7XG4gICAgYmVkcm9ja01vZGVsSWQ6IFwiYW1hem9uLm5vdmEtbGl0ZS12MTowXCIsXG4gICAgZGVwbG95Q3Jvc3NSZWdpb25Qcm9maWxlOiBmYWxzZVxuICB9KTtcbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6QmVkcm9jazo6QXBwbGljYXRpb25JbmZlcmVuY2VQcm9maWxlXCIsIDEpO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OkJlZHJvY2s6OkFwcGxpY2F0aW9uSW5mZXJlbmNlUHJvZmlsZVwiLCB7XG4gICAgTW9kZWxTb3VyY2U6IHtcbiAgICAgIENvcHlGcm9tOiB7XG4gICAgICAgIFwiRm46OkpvaW5cIjogW1xuICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJhcm46XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiUmVmXCI6IFwiQVdTOjpQYXJ0aXRpb25cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiOmJlZHJvY2s6XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiUmVmXCI6IFwiQVdTOjpSZWdpb25cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiOlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcIlJlZlwiOiBcIkFXUzo6QWNjb3VudElkXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIjpmb3VuZGF0aW9uLW1vZGVsL2FtYXpvbi5ub3ZhLWxpdGUtdjE6MFwiXG4gICAgICAgICAgXVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59KTtcblxudGVzdChcIlRlc3QgZm9yIGJhZCBpbmZlcmVuY2UgcHJvcHNcIiwgKCkgPT4ge1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBDaGVja0JlZHJvY2tJbmZlcmVuY2VQcm9wcyh7XG4gICAgICBiZWRyb2NrTW9kZWxJZDogXCJhbWF6b24ubm92YS1saXRlLXYxOjBcIixcbiAgICAgIGluZmVyZW5jZVByb2ZpbGVQcm9wczoge1xuICAgICAgICBpbmZlcmVuY2VQcm9maWxlTmFtZTogXCJ0ZXN0XCIsXG4gICAgICAgIG1vZGVsU291cmNlOiB7XG4gICAgICAgICAgY29weUZyb206IFwidGVzdFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0Vycm9yIC0gVGhlIGNvbnN0cnVjdCB3aWxsIGNyZWF0ZSB0aGUgbW9kZWxTb3VyY2UgdmFsdWUsIGl0IGNhbm5vdCBiZSBzcGVjaWZpZWQgaW4gdGhlIHByb3BzLlxcbicpO1xufSk7XG5cbnRlc3QoJ0NyZWF0ZSBjcm9zcyByZWdpb24gSW5mZXJlbmNlIFByb2ZpbGUgYnkgZGVmYXVsdCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKCk7XG5cbiAgY29uc3QgdGVzdE5hbWUgPSBcInRlc3QtcHJvZmlsZVwiO1xuICBidWlsZEluZmVyZW5jZVByb2ZpbGUoc3RhY2ssIFwidGVzdC1wcm9maWxlXCIsIHtcbiAgICBiZWRyb2NrTW9kZWxJZDogXCJhbWF6b24ubm92YS1saXRlLXYxOjBcIixcbiAgICBpbmZlcmVuY2VQcm9maWxlUHJvcHM6IHtcbiAgICAgIGluZmVyZW5jZVByb2ZpbGVOYW1lOiB0ZXN0TmFtZVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcblxuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OkJlZHJvY2s6OkFwcGxpY2F0aW9uSW5mZXJlbmNlUHJvZmlsZVwiLCAxKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpCZWRyb2NrOjpBcHBsaWNhdGlvbkluZmVyZW5jZVByb2ZpbGVcIiwge1xuICAgIEluZmVyZW5jZVByb2ZpbGVOYW1lOiB0ZXN0TmFtZSxcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCBJc0Nyb3NzUmVnaW9uUHJvZmlsZScsICgpID0+IHtcbiAgbGV0IGNyb3NzUmVnaW9uO1xuXG4gIGNyb3NzUmVnaW9uID1Jc0Nyb3NzUmVnaW9uUHJvZmlsZSh0cnVlKTtcbiAgZXhwZWN0KGNyb3NzUmVnaW9uKS50b0VxdWFsKHRydWUpO1xuXG4gIGNyb3NzUmVnaW9uID1Jc0Nyb3NzUmVnaW9uUHJvZmlsZShmYWxzZSk7XG4gIGV4cGVjdChjcm9zc1JlZ2lvbikudG9FcXVhbChmYWxzZSk7XG5cbiAgY3Jvc3NSZWdpb24gPUlzQ3Jvc3NSZWdpb25Qcm9maWxlKCk7XG4gIGV4cGVjdChjcm9zc1JlZ2lvbikudG9FcXVhbCh0cnVlKTtcbn0pOyJdfQ==