@aws-solutions-constructs/core 2.39.0 → 2.40.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": "^4.1.2"
14
14
  },
15
15
  "dependencies": {
16
- "aws-cdk-lib": "^2.76.0",
16
+ "aws-cdk-lib": "^2.82.0",
17
17
  "constructs": "^10.0.0"
18
18
  },
19
19
  "dependencyClosure": {
@@ -448,6 +448,19 @@
448
448
  }
449
449
  }
450
450
  },
451
+ "aws-cdk-lib.aws_backupgateway": {
452
+ "targets": {
453
+ "dotnet": {
454
+ "package": "Amazon.CDK.AWS.BackupGateway"
455
+ },
456
+ "java": {
457
+ "package": "services.backupgateway"
458
+ },
459
+ "python": {
460
+ "module": "aws_cdk.aws_backupgateway"
461
+ }
462
+ }
463
+ },
451
464
  "aws-cdk-lib.aws_batch": {
452
465
  "targets": {
453
466
  "dotnet": {
@@ -2373,6 +2386,19 @@
2373
2386
  }
2374
2387
  }
2375
2388
  },
2389
+ "aws-cdk-lib.aws_osis": {
2390
+ "targets": {
2391
+ "dotnet": {
2392
+ "package": "Amazon.CDK.AWS.OSIS"
2393
+ },
2394
+ "java": {
2395
+ "package": "services.osis"
2396
+ },
2397
+ "python": {
2398
+ "module": "aws_cdk.aws_osis"
2399
+ }
2400
+ }
2401
+ },
2376
2402
  "aws-cdk-lib.aws_panorama": {
2377
2403
  "targets": {
2378
2404
  "dotnet": {
@@ -2438,6 +2464,19 @@
2438
2464
  }
2439
2465
  }
2440
2466
  },
2467
+ "aws-cdk-lib.aws_proton": {
2468
+ "targets": {
2469
+ "dotnet": {
2470
+ "package": "Amazon.CDK.AWS.Proton"
2471
+ },
2472
+ "java": {
2473
+ "package": "services.proton"
2474
+ },
2475
+ "python": {
2476
+ "module": "aws_cdk.aws_proton"
2477
+ }
2478
+ }
2479
+ },
2441
2480
  "aws-cdk-lib.aws_qldb": {
2442
2481
  "targets": {
2443
2482
  "dotnet": {
@@ -2919,6 +2958,19 @@
2919
2958
  }
2920
2959
  }
2921
2960
  },
2961
+ "aws-cdk-lib.aws_shield": {
2962
+ "targets": {
2963
+ "dotnet": {
2964
+ "package": "Amazon.CDK.AWS.Shield"
2965
+ },
2966
+ "java": {
2967
+ "package": "services.shield"
2968
+ },
2969
+ "python": {
2970
+ "module": "aws_cdk.aws_shield"
2971
+ }
2972
+ }
2973
+ },
2922
2974
  "aws-cdk-lib.aws_signer": {
2923
2975
  "targets": {
2924
2976
  "dotnet": {
@@ -3416,7 +3468,7 @@
3416
3468
  },
3417
3469
  "description": "Core CDK Construct for patterns library",
3418
3470
  "homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
3419
- "jsiiVersion": "1.80.0 (build bce6a1d)",
3471
+ "jsiiVersion": "1.82.0 (build 2d2ddd7)",
3420
3472
  "license": "Apache-2.0",
3421
3473
  "metadata": {
3422
3474
  "jsii": {
@@ -4420,7 +4472,7 @@
4420
4472
  "kind": "interface",
4421
4473
  "locationInModule": {
4422
4474
  "filename": "lib/lambda-helper.ts",
4423
- "line": 30
4475
+ "line": 29
4424
4476
  },
4425
4477
  "name": "BuildLambdaFunctionProps",
4426
4478
  "properties": [
@@ -4433,7 +4485,7 @@
4433
4485
  "immutable": true,
4434
4486
  "locationInModule": {
4435
4487
  "filename": "lib/lambda-helper.ts",
4436
- "line": 36
4488
+ "line": 35
4437
4489
  },
4438
4490
  "name": "existingLambdaObj",
4439
4491
  "optional": true,
@@ -4450,7 +4502,7 @@
4450
4502
  "immutable": true,
4451
4503
  "locationInModule": {
4452
4504
  "filename": "lib/lambda-helper.ts",
4453
- "line": 42
4505
+ "line": 41
4454
4506
  },
4455
4507
  "name": "lambdaFunctionProps",
4456
4508
  "optional": true,
@@ -4467,7 +4519,7 @@
4467
4519
  "immutable": true,
4468
4520
  "locationInModule": {
4469
4521
  "filename": "lib/lambda-helper.ts",
4470
- "line": 48
4522
+ "line": 47
4471
4523
  },
4472
4524
  "name": "vpc",
4473
4525
  "optional": true,
@@ -4864,7 +4916,7 @@
4864
4916
  "kind": "interface",
4865
4917
  "locationInModule": {
4866
4918
  "filename": "lib/s3-bucket-helper.ts",
4867
- "line": 107
4919
+ "line": 112
4868
4920
  },
4869
4921
  "name": "BuildS3BucketResponse",
4870
4922
  "properties": [
@@ -4873,7 +4925,7 @@
4873
4925
  "immutable": true,
4874
4926
  "locationInModule": {
4875
4927
  "filename": "lib/s3-bucket-helper.ts",
4876
- "line": 108
4928
+ "line": 113
4877
4929
  },
4878
4930
  "name": "bucket",
4879
4931
  "type": {
@@ -4885,7 +4937,7 @@
4885
4937
  "immutable": true,
4886
4938
  "locationInModule": {
4887
4939
  "filename": "lib/s3-bucket-helper.ts",
4888
- "line": 109
4940
+ "line": 114
4889
4941
  },
4890
4942
  "name": "loggingBucket",
4891
4943
  "optional": true,
@@ -5512,7 +5564,7 @@
5512
5564
  "kind": "interface",
5513
5565
  "locationInModule": {
5514
5566
  "filename": "lib/utils.ts",
5515
- "line": 194
5567
+ "line": 185
5516
5568
  },
5517
5569
  "name": "CfnNagSuppressRule",
5518
5570
  "properties": [
@@ -5521,7 +5573,7 @@
5521
5573
  "immutable": true,
5522
5574
  "locationInModule": {
5523
5575
  "filename": "lib/utils.ts",
5524
- "line": 195
5576
+ "line": 186
5525
5577
  },
5526
5578
  "name": "id",
5527
5579
  "type": {
@@ -5533,7 +5585,7 @@
5533
5585
  "immutable": true,
5534
5586
  "locationInModule": {
5535
5587
  "filename": "lib/utils.ts",
5536
- "line": 196
5588
+ "line": 187
5537
5589
  },
5538
5590
  "name": "reason",
5539
5591
  "type": {
@@ -5550,7 +5602,7 @@
5550
5602
  "kind": "interface",
5551
5603
  "locationInModule": {
5552
5604
  "filename": "lib/cloudfront-distribution-helper.ts",
5553
- "line": 70
5605
+ "line": 69
5554
5606
  },
5555
5607
  "name": "CloudFrontDistributionForApiGatewayResponse",
5556
5608
  "properties": [
@@ -5559,7 +5611,7 @@
5559
5611
  "immutable": true,
5560
5612
  "locationInModule": {
5561
5613
  "filename": "lib/cloudfront-distribution-helper.ts",
5562
- "line": 71
5614
+ "line": 70
5563
5615
  },
5564
5616
  "name": "distribution",
5565
5617
  "type": {
@@ -5571,7 +5623,7 @@
5571
5623
  "immutable": true,
5572
5624
  "locationInModule": {
5573
5625
  "filename": "lib/cloudfront-distribution-helper.ts",
5574
- "line": 72
5626
+ "line": 71
5575
5627
  },
5576
5628
  "name": "cloudfrontFunction",
5577
5629
  "optional": true,
@@ -5584,7 +5636,7 @@
5584
5636
  "immutable": true,
5585
5637
  "locationInModule": {
5586
5638
  "filename": "lib/cloudfront-distribution-helper.ts",
5587
- "line": 73
5639
+ "line": 72
5588
5640
  },
5589
5641
  "name": "loggingBucket",
5590
5642
  "optional": true,
@@ -5602,7 +5654,7 @@
5602
5654
  "kind": "interface",
5603
5655
  "locationInModule": {
5604
5656
  "filename": "lib/cloudfront-distribution-helper.ts",
5605
- "line": 155
5657
+ "line": 154
5606
5658
  },
5607
5659
  "name": "CloudFrontDistributionForMediaStoreResponse",
5608
5660
  "properties": [
@@ -5611,7 +5663,7 @@
5611
5663
  "immutable": true,
5612
5664
  "locationInModule": {
5613
5665
  "filename": "lib/cloudfront-distribution-helper.ts",
5614
- "line": 156
5666
+ "line": 155
5615
5667
  },
5616
5668
  "name": "distribution",
5617
5669
  "type": {
@@ -5623,7 +5675,7 @@
5623
5675
  "immutable": true,
5624
5676
  "locationInModule": {
5625
5677
  "filename": "lib/cloudfront-distribution-helper.ts",
5626
- "line": 158
5678
+ "line": 157
5627
5679
  },
5628
5680
  "name": "requestPolicy",
5629
5681
  "type": {
@@ -5635,7 +5687,7 @@
5635
5687
  "immutable": true,
5636
5688
  "locationInModule": {
5637
5689
  "filename": "lib/cloudfront-distribution-helper.ts",
5638
- "line": 159
5690
+ "line": 158
5639
5691
  },
5640
5692
  "name": "cloudfrontFunction",
5641
5693
  "optional": true,
@@ -5648,7 +5700,7 @@
5648
5700
  "immutable": true,
5649
5701
  "locationInModule": {
5650
5702
  "filename": "lib/cloudfront-distribution-helper.ts",
5651
- "line": 157
5703
+ "line": 156
5652
5704
  },
5653
5705
  "name": "loggingBucket",
5654
5706
  "optional": true,
@@ -5666,7 +5718,7 @@
5666
5718
  "kind": "interface",
5667
5719
  "locationInModule": {
5668
5720
  "filename": "lib/cloudfront-distribution-helper.ts",
5669
- "line": 106
5721
+ "line": 105
5670
5722
  },
5671
5723
  "name": "CloudFrontDistributionForS3Response",
5672
5724
  "properties": [
@@ -5675,7 +5727,7 @@
5675
5727
  "immutable": true,
5676
5728
  "locationInModule": {
5677
5729
  "filename": "lib/cloudfront-distribution-helper.ts",
5678
- "line": 107
5730
+ "line": 106
5679
5731
  },
5680
5732
  "name": "distribution",
5681
5733
  "type": {
@@ -5687,7 +5739,7 @@
5687
5739
  "immutable": true,
5688
5740
  "locationInModule": {
5689
5741
  "filename": "lib/cloudfront-distribution-helper.ts",
5690
- "line": 109
5742
+ "line": 108
5691
5743
  },
5692
5744
  "name": "cloudfrontFunction",
5693
5745
  "optional": true,
@@ -5700,7 +5752,7 @@
5700
5752
  "immutable": true,
5701
5753
  "locationInModule": {
5702
5754
  "filename": "lib/cloudfront-distribution-helper.ts",
5703
- "line": 108
5755
+ "line": 107
5704
5756
  },
5705
5757
  "name": "loggingBucket",
5706
5758
  "optional": true,
@@ -5761,6 +5813,110 @@
5761
5813
  ],
5762
5814
  "symbolId": "lib/cognito-helper:CognitoOptions"
5763
5815
  },
5816
+ "@aws-solutions-constructs/core.CreateFargateServiceProps": {
5817
+ "assembly": "@aws-solutions-constructs/core",
5818
+ "datatype": true,
5819
+ "fqn": "@aws-solutions-constructs/core.CreateFargateServiceProps",
5820
+ "kind": "interface",
5821
+ "locationInModule": {
5822
+ "filename": "lib/fargate-helper.ts",
5823
+ "line": 31
5824
+ },
5825
+ "name": "CreateFargateServiceProps",
5826
+ "properties": [
5827
+ {
5828
+ "abstract": true,
5829
+ "immutable": true,
5830
+ "locationInModule": {
5831
+ "filename": "lib/fargate-helper.ts",
5832
+ "line": 32
5833
+ },
5834
+ "name": "constructVpc",
5835
+ "type": {
5836
+ "fqn": "aws-cdk-lib.aws_ec2.IVpc"
5837
+ }
5838
+ },
5839
+ {
5840
+ "abstract": true,
5841
+ "immutable": true,
5842
+ "locationInModule": {
5843
+ "filename": "lib/fargate-helper.ts",
5844
+ "line": 33
5845
+ },
5846
+ "name": "clientClusterProps",
5847
+ "optional": true,
5848
+ "type": {
5849
+ "fqn": "aws-cdk-lib.aws_ecs.ClusterProps"
5850
+ }
5851
+ },
5852
+ {
5853
+ "abstract": true,
5854
+ "immutable": true,
5855
+ "locationInModule": {
5856
+ "filename": "lib/fargate-helper.ts",
5857
+ "line": 37
5858
+ },
5859
+ "name": "clientContainerDefinitionProps",
5860
+ "optional": true,
5861
+ "type": {
5862
+ "primitive": "any"
5863
+ }
5864
+ },
5865
+ {
5866
+ "abstract": true,
5867
+ "immutable": true,
5868
+ "locationInModule": {
5869
+ "filename": "lib/fargate-helper.ts",
5870
+ "line": 38
5871
+ },
5872
+ "name": "clientFargateServiceProps",
5873
+ "optional": true,
5874
+ "type": {
5875
+ "primitive": "any"
5876
+ }
5877
+ },
5878
+ {
5879
+ "abstract": true,
5880
+ "immutable": true,
5881
+ "locationInModule": {
5882
+ "filename": "lib/fargate-helper.ts",
5883
+ "line": 36
5884
+ },
5885
+ "name": "clientFargateTaskDefinitionProps",
5886
+ "optional": true,
5887
+ "type": {
5888
+ "primitive": "any"
5889
+ }
5890
+ },
5891
+ {
5892
+ "abstract": true,
5893
+ "immutable": true,
5894
+ "locationInModule": {
5895
+ "filename": "lib/fargate-helper.ts",
5896
+ "line": 35
5897
+ },
5898
+ "name": "ecrImageVersion",
5899
+ "optional": true,
5900
+ "type": {
5901
+ "primitive": "string"
5902
+ }
5903
+ },
5904
+ {
5905
+ "abstract": true,
5906
+ "immutable": true,
5907
+ "locationInModule": {
5908
+ "filename": "lib/fargate-helper.ts",
5909
+ "line": 34
5910
+ },
5911
+ "name": "ecrRepositoryArn",
5912
+ "optional": true,
5913
+ "type": {
5914
+ "primitive": "string"
5915
+ }
5916
+ }
5917
+ ],
5918
+ "symbolId": "lib/fargate-helper:CreateFargateServiceProps"
5919
+ },
5764
5920
  "@aws-solutions-constructs/core.CreateFargateServiceResponse": {
5765
5921
  "assembly": "@aws-solutions-constructs/core",
5766
5922
  "datatype": true,
@@ -6070,6 +6226,96 @@
6070
6226
  ],
6071
6227
  "symbolId": "lib/apigateway-helper:GlobalRestApiResponse"
6072
6228
  },
6229
+ "@aws-solutions-constructs/core.ObtainAlbProps": {
6230
+ "assembly": "@aws-solutions-constructs/core",
6231
+ "datatype": true,
6232
+ "fqn": "@aws-solutions-constructs/core.ObtainAlbProps",
6233
+ "kind": "interface",
6234
+ "locationInModule": {
6235
+ "filename": "lib/alb-helper.ts",
6236
+ "line": 32
6237
+ },
6238
+ "name": "ObtainAlbProps",
6239
+ "properties": [
6240
+ {
6241
+ "abstract": true,
6242
+ "immutable": true,
6243
+ "locationInModule": {
6244
+ "filename": "lib/alb-helper.ts",
6245
+ "line": 34
6246
+ },
6247
+ "name": "publicApi",
6248
+ "type": {
6249
+ "primitive": "boolean"
6250
+ }
6251
+ },
6252
+ {
6253
+ "abstract": true,
6254
+ "immutable": true,
6255
+ "locationInModule": {
6256
+ "filename": "lib/alb-helper.ts",
6257
+ "line": 33
6258
+ },
6259
+ "name": "vpc",
6260
+ "type": {
6261
+ "fqn": "aws-cdk-lib.aws_ec2.IVpc"
6262
+ }
6263
+ },
6264
+ {
6265
+ "abstract": true,
6266
+ "immutable": true,
6267
+ "locationInModule": {
6268
+ "filename": "lib/alb-helper.ts",
6269
+ "line": 35
6270
+ },
6271
+ "name": "existingLoadBalancerObj",
6272
+ "optional": true,
6273
+ "type": {
6274
+ "fqn": "aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer"
6275
+ }
6276
+ },
6277
+ {
6278
+ "abstract": true,
6279
+ "immutable": true,
6280
+ "locationInModule": {
6281
+ "filename": "lib/alb-helper.ts",
6282
+ "line": 36
6283
+ },
6284
+ "name": "loadBalancerProps",
6285
+ "optional": true,
6286
+ "type": {
6287
+ "primitive": "any"
6288
+ }
6289
+ },
6290
+ {
6291
+ "abstract": true,
6292
+ "immutable": true,
6293
+ "locationInModule": {
6294
+ "filename": "lib/alb-helper.ts",
6295
+ "line": 37
6296
+ },
6297
+ "name": "logAccessLogs",
6298
+ "optional": true,
6299
+ "type": {
6300
+ "primitive": "boolean"
6301
+ }
6302
+ },
6303
+ {
6304
+ "abstract": true,
6305
+ "immutable": true,
6306
+ "locationInModule": {
6307
+ "filename": "lib/alb-helper.ts",
6308
+ "line": 38
6309
+ },
6310
+ "name": "loggingBucketProps",
6311
+ "optional": true,
6312
+ "type": {
6313
+ "fqn": "aws-cdk-lib.aws_s3.BucketProps"
6314
+ }
6315
+ }
6316
+ ],
6317
+ "symbolId": "lib/alb-helper:ObtainAlbProps"
6318
+ },
6073
6319
  "@aws-solutions-constructs/core.ObtainMemcachedClusterProps": {
6074
6320
  "assembly": "@aws-solutions-constructs/core",
6075
6321
  "datatype": true,
@@ -6974,6 +7220,6 @@
6974
7220
  "symbolId": "lib/input-validation:VerifiedProps"
6975
7221
  }
6976
7222
  },
6977
- "version": "2.39.0",
6978
- "fingerprint": "hzvvUeuHVNDv3PZ9SvBuV7I6O/yuhMAESZhi1msTps4="
7223
+ "version": "2.40.0",
7224
+ "fingerprint": "pM71t4nA9bHBzsj1myUlAY0Vl3JSVlRUr30EHCZaGTI="
6979
7225
  }
@@ -16,13 +16,21 @@ import * as ec2 from "aws-cdk-lib/aws-ec2";
16
16
  import * as s3 from "aws-cdk-lib/aws-s3";
17
17
  import * as ecs from "aws-cdk-lib/aws-ecs";
18
18
  import * as lambda from "aws-cdk-lib/aws-lambda";
19
+ export interface ObtainAlbProps {
20
+ readonly vpc: ec2.IVpc;
21
+ readonly publicApi: boolean;
22
+ readonly existingLoadBalancerObj?: elb.ApplicationLoadBalancer;
23
+ readonly loadBalancerProps?: elb.ApplicationLoadBalancerProps | any;
24
+ readonly logAccessLogs?: boolean;
25
+ readonly loggingBucketProps?: s3.BucketProps;
26
+ }
19
27
  /**
20
28
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
21
29
  *
22
30
  * Returns the correct ALB Load Balancer to use in this construct, either an existing
23
31
  * one provided as an argument or create new one otherwise.
24
32
  */
25
- export declare function ObtainAlb(scope: Construct, id: string, vpc: ec2.IVpc, publicApi: boolean, existingLoadBalancerObj?: elb.ApplicationLoadBalancer, loadBalancerProps?: elb.ApplicationLoadBalancerProps | any, logAccessLogs?: boolean, loggingBucketProps?: s3.BucketProps): elb.ApplicationLoadBalancer;
33
+ export declare function ObtainAlb(scope: Construct, id: string, props: ObtainAlbProps): elb.ApplicationLoadBalancer;
26
34
  /**
27
35
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
28
36
  */
package/lib/alb-helper.js CHANGED
@@ -30,16 +30,16 @@ const s3_bucket_defaults_1 = require("./s3-bucket-defaults");
30
30
  * Returns the correct ALB Load Balancer to use in this construct, either an existing
31
31
  * one provided as an argument or create new one otherwise.
32
32
  */
33
- function ObtainAlb(scope, id, vpc, publicApi, existingLoadBalancerObj, loadBalancerProps, logAccessLogs, loggingBucketProps) {
33
+ function ObtainAlb(scope, id, props) {
34
34
  let loadBalancer;
35
- if (existingLoadBalancerObj) {
36
- loadBalancer = existingLoadBalancerObj;
35
+ if (props.existingLoadBalancerObj) {
36
+ loadBalancer = props.existingLoadBalancerObj;
37
37
  }
38
38
  else {
39
- const consolidatedProps = utils_1.consolidateProps({}, loadBalancerProps, { vpc, internetFacing: publicApi });
39
+ const consolidatedProps = utils_1.consolidateProps({}, props.loadBalancerProps, { vpc: props.vpc, internetFacing: props.publicApi });
40
40
  loadBalancer = new elb.ApplicationLoadBalancer(scope, `${id}-alb`, consolidatedProps);
41
- if (logAccessLogs === undefined || logAccessLogs === true) {
42
- const consolidatedLoggingBucketProps = utils_1.consolidateProps(s3_bucket_defaults_1.DefaultLoggingBucketProps(), loggingBucketProps);
41
+ if (props.logAccessLogs === undefined || props.logAccessLogs === true) {
42
+ const consolidatedLoggingBucketProps = utils_1.consolidateProps(s3_bucket_defaults_1.DefaultS3Props(), props.loggingBucketProps);
43
43
  const loggingBucket = s3_bucket_helper_1.createAlbLoggingBucket(scope, id, consolidatedLoggingBucketProps);
44
44
  loadBalancer.logAccessLogs(loggingBucket);
45
45
  }
@@ -190,4 +190,4 @@ function CheckAlbProps(props) {
190
190
  }
191
191
  }
192
192
  exports.CheckAlbProps = CheckAlbProps;
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFsYi1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCw4REFBOEQ7QUFNOUQsdUZBQThGO0FBQzlGLHVFQUF1RTtBQUN2RSxtQ0FBeUQ7QUFDekQsaURBQXNEO0FBQ3RELHlEQUE0RDtBQUM1RCw2REFBaUU7QUFFakU7Ozs7O0dBS0c7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixHQUFhLEVBQ2IsU0FBa0IsRUFDbEIsdUJBQXFELEVBQ3JELGlCQUEwRCxFQUMxRCxhQUF1QixFQUN2QixrQkFBbUM7SUFFbkMsSUFBSSxZQUF5QyxDQUFDO0lBRTlDLElBQUksdUJBQXVCLEVBQUU7UUFDM0IsWUFBWSxHQUFHLHVCQUF1QixDQUFDO0tBQ3hDO1NBQU07UUFDTCxNQUFNLGlCQUFpQixHQUFHLHdCQUFnQixDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN0RyxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQzVDLEtBQUssRUFDTCxHQUFHLEVBQUUsTUFBTSxFQUNYLGlCQUFpQixDQUNsQixDQUFDO1FBQ0YsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDekQsTUFBTSw4QkFBOEIsR0FBRyx3QkFBZ0IsQ0FBQyw4Q0FBeUIsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDekcsTUFBTSxhQUFhLEdBQUcseUNBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ3hGLFlBQVksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDM0M7S0FDRjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENB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QUFDO1FBQ2xELENBQUMsS0FBSyxDQUFDLFNBQVMsRUFDaEI7UUFDQSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQWEsSUFBSSxxRkFBcUYsQ0FBQztLQUN4RztJQUVELDBDQUEwQztJQUMxQyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUU7UUFDdkQsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFhLElBQUksNkhBQTZILENBQUM7S0FDaEo7SUFFRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDaEMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFhLElBQUksa0ZBQWtGLENBQUM7S0FDckc7SUFFRCxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsRUFBRTtRQUNqQyxvQkFBWSxDQUNWLGlHQUFpRyxDQUNsRyxDQUFDO0tBQ0g7SUFFRCxJQUFJLFVBQVUsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDaEM7QUFDSCxDQUFDO0FBekRELHNDQXlEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0ICogYXMgZWxiIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWNzXCI7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEFwcGxpY2F0aW9uUHJvdG9jb2wsIExpc3RlbmVyQWN0aW9uLCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0ICogYXMgZWxidCBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItdGFyZ2V0c1wiO1xuaW1wb3J0IHsgcHJpbnRXYXJuaW5nLCBjb25zb2xpZGF0ZVByb3BzIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERlZmF1bHRMaXN0ZW5lclByb3BzIH0gZnJvbSBcIi4vYWxiLWRlZmF1bHRzXCI7XG5pbXBvcnQgeyBjcmVhdGVBbGJMb2dnaW5nQnVja2V0IH0gZnJvbSBcIi4vczMtYnVja2V0LWhlbHBlclwiO1xuaW1wb3J0IHsgRGVmYXVsdExvZ2dpbmdCdWNrZXRQcm9wcyB9IGZyb20gXCIuL3MzLWJ1Y2tldC1kZWZhdWx0c1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogUmV0dXJucyB0aGUgY29ycmVjdCBBTEIgTG9hZCBCYWxhbmNlciB0byB1c2UgaW4gdGhpcyBjb25zdHJ1Y3QsIGVpdGhlciBhbiBleGlzdGluZ1xuICogb25lIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IG9yIGNyZWF0ZSAgbmV3IG9uZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBPYnRhaW5BbGIoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIHZwYzogZWMyLklWcGMsXG4gIHB1YmxpY0FwaTogYm9vbGVhbixcbiAgZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmo/OiBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIsXG4gIGxvYWRCYWxhbmNlclByb3BzPzogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyUHJvcHMgfCBhbnksXG4gIGxvZ0FjY2Vzc0xvZ3M/OiBib29sZWFuLFxuICBsb2dnaW5nQnVja2V0UHJvcHM/OiBzMy5CdWNrZXRQcm9wc1xuKTogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIHtcbiAgbGV0IGxvYWRCYWxhbmNlcjogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuXG4gIGlmIChleGlzdGluZ0xvYWRCYWxhbmNlck9iaikge1xuICAgIGxvYWRCYWxhbmNlciA9IGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnNvbGlkYXRlZFByb3BzID0gY29uc29saWRhdGVQcm9wcyh7fSwgbG9hZEJhbGFuY2VyUHJvcHMsIHsgdnBjLCBpbnRlcm5ldEZhY2luZzogcHVibGljQXBpIH0pO1xuICAgIGxvYWRCYWxhbmNlciA9IG5ldyBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkfS1hbGJgLFxuICAgICAgY29uc29saWRhdGVkUHJvcHNcbiAgICApO1xuICAgIGlmIChsb2dBY2Nlc3NMb2dzID09PSB1bmRlZmluZWQgfHwgbG9nQWNjZXNzTG9ncyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29uc29saWRhdGVkTG9nZ2luZ0J1Y2tldFByb3BzID0gY29uc29saWRhdGVQcm9wcyhEZWZhdWx0TG9nZ2luZ0J1Y2tldFByb3BzKCksIGxvZ2dpbmdCdWNrZXRQcm9wcyk7XG4gICAgICBjb25zdCBsb2dnaW5nQnVja2V0ID0gY3JlYXRlQWxiTG9nZ2luZ0J1Y2tldChzY29wZSwgaWQsIGNvbnNvbGlkYXRlZExvZ2dpbmdCdWNrZXRQcm9wcyk7XG4gICAgICBsb2FkQmFsYW5jZXIubG9nQWNjZXNzTG9ncyhsb2dnaW5nQnVja2V0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxvYWRCYWxhbmNlcjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQWRkTGlzdGVuZXIoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGxvYWRCYWxhbmNlcjogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICBsaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzIHwgYW55XG4pOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lciB7XG4gIGxldCBjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lclByb3BzO1xuXG4gIGNvbnNvbGlkYXRlZExpc3RlbmVyUHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKERlZmF1bHRMaXN0ZW5lclByb3BzKGxvYWRCYWxhbmNlciksIGxpc3RlbmVyUHJvcHMpO1xuXG4gIC8vICBjcmVhdGUgdGhlIGxpc3RlbmVyXG4gIGNvbnN0IGxpc3RlbmVyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKFxuICAgIHNjb3BlLFxuICAgIGAke2lkfS1saXN0ZW5lcmAsXG4gICAgY29uc29saWRhdGVkTGlzdGVuZXJQcm9wc1xuICApO1xuICBsb2FkQmFsYW5jZXIubGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gIGlmIChjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzLnByb3RvY29sID09PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQKSB7XG4gICAgLy8gVGhpcyB3aWxsIHVzZSBjb3JlLnByaW50V2FybmluZyBpbiB0aGUgYWN0dWFsIGNvbnN0cnVjdFxuICAgIHByaW50V2FybmluZyhcbiAgICAgIFwiQVdTIHJlY29tbWVuZHMgZW5jcnlwdGluZyB0cmFmZmljIHRvIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIgdXNpbmcgSFRUUFMuXCJcbiAgICApO1xuICAgIGlmIChsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSFRUUCBsaXN0ZW5lcnMgY2Fubm90IHVzZSBhIGNlcnRpZmljYXRlXCIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoIWxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzIHx8IGxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBsaXN0ZW5lciB1c2luZyBIVFRQUyBwcm90b2NvbCByZXF1aXJlcyBhIGNlcnRpZmljYXRlXCIpO1xuICAgIH1cblxuICAgIGxpc3RlbmVyLmFkZENlcnRpZmljYXRlcyhgJHtpZH0tY2VydGAsIGxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzKTtcbiAgfVxuXG4gIGlmIChjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzLnByb3RvY29sID09PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUykge1xuICAgIGNvbnN0IG9wdDogZWxiLlJlZGlyZWN0T3B0aW9ucyA9IHtcbiAgICAgIHBvcnQ6IFwiNDQzXCIsXG4gICAgICBwcm90b2NvbDogXCJIVFRQU1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBodHRwTGlzdGVuZXIgPSBuZXcgZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkfS1yZWRpcmVjdGAsXG4gICAgICB7XG4gICAgICAgIGxvYWRCYWxhbmNlcixcbiAgICAgICAgcHJvdG9jb2w6IEFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCxcbiAgICAgICAgZGVmYXVsdEFjdGlvbjogTGlzdGVuZXJBY3Rpb24ucmVkaXJlY3Qob3B0KSxcbiAgICAgIH1cbiAgICApO1xuICAgIGxvYWRCYWxhbmNlci5saXN0ZW5lcnMucHVzaChodHRwTGlzdGVuZXIpO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQ3JlYXRlcyBhIFRhcmdldCBHcm91cCBmb3IgTGFtYmRhIGZ1bmN0aW9ucyBhbmQgYWRkcyB0aGVcbiAqIHByb3ZpZGVkIGZ1bmN0aW9ucyBhcyBhIHRhcmdldCB0byB0aGF0IGdyb3VwLiBUaGVuIGFkZHNcbiAqIHRoZSBuZXcgVGFyZ2V0IEdyb3VwIHRvIHRoZSBwcm92aWRlZCBMaXN0ZW5lci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFkZExhbWJkYVRhcmdldChcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgY3VycmVudExpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgbGFtYmRhRnVuY3Rpb246IGxhbWJkYS5JRnVuY3Rpb24sXG4gIHJ1bGVQcm9wcz86IGVsYi5BZGRSdWxlUHJvcHMsXG4gIHRhcmdldFByb3BzPzogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyxcbik6IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwICB7XG5cbiAgLy8gIENyZWF0ZSB0aGUgdGFyZ2V0IGFuZCBhc3NpZ24gaXQgdG8gYSBuZXcgdGFyZ2V0IGdyb3VwXG4gIGNvbnN0IGxhbWJkYVRhcmdldCA9IG5ldyBlbGJ0LkxhbWJkYVRhcmdldChsYW1iZGFGdW5jdGlvbik7XG4gIGNvbnN0IG5ld1RhcmdldEdyb3VwID0gbmV3IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHNjb3BlLCBgJHtpZH0tdGdgLCB7XG4gICAgdGFyZ2V0czogW2xhbWJkYVRhcmdldF0sXG4gICAgdGFyZ2V0R3JvdXBOYW1lOiB0YXJnZXRQcm9wcyA/IHRhcmdldFByb3BzLnRhcmdldEdyb3VwTmFtZSA6IHVuZGVmaW5lZCxcbiAgICBoZWFsdGhDaGVjazogdGFyZ2V0UHJvcHMgPyB0YXJnZXRQcm9wcy5oZWFsdGhDaGVjayA6IHVuZGVmaW5lZFxuICB9KTtcblxuICAvLyBUaGUgaW50ZXJmYWNlIEFkZFJ1bGVQcm9wcyBpbmNsdWRlcyBjb25kaXRpb25zIGFuZCBwcmlvcml0eSwgY29tYmluZSB0aGF0XG4gIC8vIHdpdGggdGFyZ2V0R3JvdXBzIGFuZCB3ZSBjYW4gYXNzZW1ibGUgQWRkQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzXG4gIGNvbnN0IGNvbnNvbGlkYXRlZFRhcmdldFByb3BzID0gY29uc29saWRhdGVQcm9wcyh7fSwgcnVsZVByb3BzLCB7IHRhcmdldEdyb3VwczogW25ld1RhcmdldEdyb3VwXSB9KTtcbiAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtzY29wZS5ub2RlLmlkfS10YXJnZXRzYCwgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMpO1xuXG4gIG5ld1RhcmdldEdyb3VwLnNldEF0dHJpYnV0ZSgnc3RpY2tpbmVzcy5lbmFibGVkJywgdW5kZWZpbmVkKTtcbiAgcmV0dXJuIG5ld1RhcmdldEdyb3VwO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBZGRGYXJnYXRlVGFyZ2V0KFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBjdXJyZW50TGlzdGVuZXI6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyLFxuICBmYXJnYXRlU2VydmljZTogZWNzLkZhcmdhdGVTZXJ2aWNlLFxuICBydWxlUHJvcHM/OiBlbGIuQWRkUnVsZVByb3BzLFxuICB0YXJnZXRQcm9wcz86IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHMsXG4pOiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cCAge1xuXG4gIGlmICh0YXJnZXRQcm9wcz8ucHJvdG9jb2wgIT09IGVsYi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTKSB7XG4gICAgcHJpbnRXYXJuaW5nKCdBV1MgcmVjb21tZW5kcyB1c2luZyBIVFRQUyBwcm90b2NvbCBmb3IgVGFyZ2V0IEdyb3VwcyBpbiBwcm9kdWN0aW9uIGFwcGxpY2F0aW9ucycpO1xuICB9XG5cbiAgY29uc3QgbmV3VGFyZ2V0R3JvdXAgPSBuZXcgZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAoc2NvcGUsIGAke2lkfS10Z2AsIHRhcmdldFByb3BzKTtcblxuICAvLyBUaGUgaW50ZXJmYWNlIEFkZFJ1bGVQcm9wcyBpbmNsdWRlcyBjb25kaXRpb25zIGFuZCBwcmlvcml0eSwgY29tYmluZSB0aGF0XG4gIC8vIHdpdGggdGFyZ2V0R3JvdXBzIGFuZCB3ZSBjYW4gYXNzZW1ibGUgYW4gQWRkQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzIG9iamVjdFxuICBjb25zdCBjb25zb2xpZGF0ZWRUYXJnZXRQcm9wcyA9IGNvbnNvbGlkYXRlUHJvcHMoeyB0YXJnZXRHcm91cHM6IFtuZXdUYXJnZXRHcm91cF0gfSwgcnVsZVByb3BzKTtcblxuICBjdXJyZW50TGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGAke3Njb3BlLm5vZGUuaWR9LXRhcmdldHNgLCBjb25zb2xpZGF0ZWRUYXJnZXRQcm9wcyk7XG4gIG5ld1RhcmdldEdyb3VwLmFkZFRhcmdldChmYXJnYXRlU2VydmljZSk7XG5cbiAgcmV0dXJuIG5ld1RhcmdldEdyb3VwO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogTG9va3MgZm9yIHRoZSBsaXN0ZW5lciBhc3NvY2lhdGVkIHdpdGggVGFyZ2V0IEdyb3Vwc1xuICogSWYgdGhlcmUgaXMgYSBzaW5nbGUgbGlzdGVuZXIsIHRoaXMgcmV0dXJucyBpdCB3aGV0aGVyIGl0IGlzIEhUVFAgb3IgSFRUUFNcbiAqIElmIHRoZXJlIGFyZSAyIGxpc3RlbmVycywgaXQgZmluZHMgdGhlIEhUVFBTIGxpc3RlbmVyICh3ZSBhc3N1bWUgdGhlIEhUVFAgbGlzdGVuZXIgcmVkaXJlY3RzIHRvIEhUVFBTKVxuICovXG5leHBvcnQgZnVuY3Rpb24gR2V0QWN0aXZlTGlzdGVuZXIobGlzdGVuZXJzOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcltdKTogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIge1xuICBsZXQgbGlzdGVuZXI6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAwICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIGxpc3RlbmVycyBpbiB0aGUgQUxCYCk7XG4gIH1cbiAgaWYgKGxpc3RlbmVycy5sZW5ndGggPT09IDEgKSB7XG4gICAgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbMF07XG4gIH0gZWxzZSB7XG4gICAgbGlzdGVuZXIgPSBsaXN0ZW5lcnMuZmluZChpID0+IChpLm5vZGUuY2hpbGRyZW5bMF0gYXMgZWxiLkNmbkxpc3RlbmVyKS5wcm90b2NvbCA9PT0gXCJIVFRQU1wiKSBhcyBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcjtcbiAgfVxuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIENoZWNrQWxiUHJvcHMocHJvcHM6IGFueSkge1xuICBsZXQgZXJyb3JNZXNzYWdlcyA9ICcnO1xuICBsZXQgZXJyb3JGb3VuZCA9IGZhbHNlO1xuXG4gIGlmIChwcm9wcy5saXN0ZW5lclByb3BzPy5jZXJ0aWZpY2F0ZUFybnMpIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9IFwiY2VydGlmaWNhdGVBcm5zIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBzdXBwbHkgY2VydGlmaWNhdGVzIHVzaW5nIHByb3BzLmxpc3RlbmVyUHJvcHMuY2VydGlmaWNhdGVzXFxuXCI7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgKChwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaiAmJlxuICAgICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmoubGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAgICFwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaikgJiZcbiAgICAhcHJvcHMubGlzdGVuZXJQcm9wc1xuICApIHtcbiAgICBlcnJvck1lc3NhZ2VzICs9IFwiV2hlbiBhZGRpbmcgdGhlIGZpcnN0IGxpc3RlbmVyIGFuZCB0YXJnZXQgdG8gYSBsb2FkIGJhbGFuY2VyLCBsaXN0ZW5lclByb3BzIG11c3QgYmUgc3BlY2lmaWVkIGFuZCBpbmNsdWRlIGF0IGxlYXN0IGEgY2VydGlmaWNhdGUgb3IgcHJvdG9jb2w6IEhUVFBcXG5cIjtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaiAmJlxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqLmxpc3RlbmVycy5sZW5ndGggPiAwICYmXG4gICAgcHJvcHMubGlzdGVuZXJQcm9wc1xuICApIHtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICBlcnJvck1lc3NhZ2VzICs9IFwiVGhpcyBsb2FkIGJhbGFuY2VyIGFscmVhZHkgaGFzIGEgbGlzdGVuZXIsIGxpc3RlbmVyUHJvcHMgbWF5IG5vdCBiZSBzcGVjaWZpZWRcXG5cIjtcbiAgfVxuXG4gIGlmIChcbiAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaiAmJlxuICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqLmxpc3RlbmVycy5sZW5ndGggPiAwICYmXG4gICAgIXByb3BzLnJ1bGVQcm9wc1xuICApIHtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICBlcnJvck1lc3NhZ2VzICs9IFwiV2hlbiBhZGRpbmcgYSBzZWNvbmQgdGFyZ2V0IHRvIGFuIGV4aXN0aW5nIGxpc3RlbmVyLCB0aGVyZSBtdXN0IGJlIHJ1bGVzIHByb3ZpZGVkXFxuXCI7XG4gIH1cblxuICAvLyBDaGVjayBjb25zdHJ1Y3Qgc3BlY2lmaWMgaW52YWxpZCBpbnB1dHNcbiAgaWYgKHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqICYmICFwcm9wcy5leGlzdGluZ1ZwYykge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gXCJBbiBleGlzdGluZyBBTEIgaXMgYWxyZWFkeSBpbiBhIFZQQywgdGhhdCBWUEMgbXVzdCBiZSBwcm92aWRlZCBpbiBwcm9wcy5leGlzdGluZ1ZwYyBmb3IgdGhlIHJlc3Qgb2YgdGhlIGNvbnN0cnVjdCB0byB1c2UuXFxuXCI7XG4gIH1cblxuICBpZiAocHJvcHMubG9hZEJhbGFuY2VyUHJvcHM/LnZwYykge1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICAgIGVycm9yTWVzc2FnZXMgKz0gJ1NwZWNpZnkgYW55IGV4aXN0aW5nIFZQQyBhdCB0aGUgY29uc3RydWN0IGxldmVsLCBub3Qgd2l0aGluIGxvYWRCYWxhbmNlclByb3BzLlxcbic7XG4gIH1cblxuICBpZiAocHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmopIHtcbiAgICBwcmludFdhcm5pbmcoXG4gICAgICBcIlRoZSBwdWJsaWMvcHJpdmF0ZSBwcm9wZXJ0eSBvZiBhbiBleGlzdGluZyBBTEIgbXVzdCBtYXRjaCB0aGUgcHJvcHMucHVibGljQXBpIHNldHRpbmcgcHJvdmlkZWQuXCJcbiAgICApO1xuICB9XG5cbiAgaWYgKGVycm9yRm91bmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gIH1cbn0iXX0=
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxiLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFsYi1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCw4REFBOEQ7QUFNOUQsdUZBQThGO0FBQzlGLHVFQUF1RTtBQUN2RSxtQ0FBeUQ7QUFDekQsaURBQXNEO0FBQ3RELHlEQUE0RDtBQUM1RCw2REFBc0Q7QUFXdEQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixTQUFTLENBQ3ZCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFxQjtJQUVyQixJQUFJLFlBQXlDLENBQUM7SUFFOUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUU7UUFDakMsWUFBWSxHQUFHLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztLQUM5QztTQUFNO1FBQ0wsTUFBTSxpQkFBaUIsR0FBRyx3QkFBZ0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQzdILFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FDNUMsS0FBSyxFQUNMLEdBQUcsRUFBRSxNQUFNLEVBQ1gsaUJBQWlCLENBQ2xCLENBQUM7UUFDRixJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQ3JFLE1BQU0sOEJBQThCLEdBQUcsd0JBQWdCLENBQUMsbUNBQWMsRUFBRSxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3BHLE1BQU0sYUFBYSxHQUFHLHlDQUFzQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsOEJBQThCLENBQUMsQ0FBQztZQUN4RixZQUFZLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzNDO0tBQ0Y7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QixDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNsRCxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQ2hCO1FBQ0EsVUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFhLElBQUkscUZBQXFGLENBQUM7S0FDeEc7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO1FBQ3ZELFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxJQUFJLDZIQUE2SCxDQUFDO0tBQ2hKO0lBRUQsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO1FBQ2hDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxJQUFJLGtGQUFrRixDQUFDO0tBQ3JHO0lBRUQsSUFBSSxLQUFLLENBQUMsdUJBQXVCLEVBQUU7UUFDakMsb0JBQVksQ0FDVixpR0FBaUcsQ0FDbEcsQ0FBQztLQUNIO0lBRUQsSUFBSSxVQUFVLEVBQUU7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQ2hDO0FBQ0gsQ0FBQztBQXpERCxzQ0F5REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCAqIGFzIGVsYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCAqIGFzIGVjcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblByb3RvY29sLCBMaXN0ZW5lckFjdGlvbiwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIjtcbmltcG9ydCAqIGFzIGVsYnQgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldHNcIjtcbmltcG9ydCB7IHByaW50V2FybmluZywgY29uc29saWRhdGVQcm9wcyB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBEZWZhdWx0TGlzdGVuZXJQcm9wcyB9IGZyb20gXCIuL2FsYi1kZWZhdWx0c1wiO1xuaW1wb3J0IHsgY3JlYXRlQWxiTG9nZ2luZ0J1Y2tldCB9IGZyb20gXCIuL3MzLWJ1Y2tldC1oZWxwZXJcIjtcbmltcG9ydCB7IERlZmF1bHRTM1Byb3BzIH0gZnJvbSBcIi4vczMtYnVja2V0LWRlZmF1bHRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2J0YWluQWxiUHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjLFxuICByZWFkb25seSBwdWJsaWNBcGk6IGJvb2xlYW4sXG4gIHJlYWRvbmx5IGV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqPzogZWxiLkFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyLFxuICByZWFkb25seSBsb2FkQmFsYW5jZXJQcm9wcz86IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlclByb3BzIHwgYW55LFxuICByZWFkb25seSBsb2dBY2Nlc3NMb2dzPzogYm9vbGVhbixcbiAgcmVhZG9ubHkgbG9nZ2luZ0J1Y2tldFByb3BzPzogczMuQnVja2V0UHJvcHNcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIFJldHVybnMgdGhlIGNvcnJlY3QgQUxCIExvYWQgQmFsYW5jZXIgdG8gdXNlIGluIHRoaXMgY29uc3RydWN0LCBlaXRoZXIgYW4gZXhpc3RpbmdcbiAqIG9uZSBwcm92aWRlZCBhcyBhbiBhcmd1bWVudCBvciBjcmVhdGUgIG5ldyBvbmUgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gT2J0YWluQWxiKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBwcm9wczogT2J0YWluQWxiUHJvcHNcbik6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB7XG4gIGxldCBsb2FkQmFsYW5jZXI6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcblxuICBpZiAocHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmopIHtcbiAgICBsb2FkQmFsYW5jZXIgPSBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iajtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBjb25zb2xpZGF0ZWRQcm9wcyA9IGNvbnNvbGlkYXRlUHJvcHMoe30sIHByb3BzLmxvYWRCYWxhbmNlclByb3BzLCB7IHZwYzogcHJvcHMudnBjLCBpbnRlcm5ldEZhY2luZzogcHJvcHMucHVibGljQXBpIH0pO1xuICAgIGxvYWRCYWxhbmNlciA9IG5ldyBlbGIuQXBwbGljYXRpb25Mb2FkQmFsYW5jZXIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkfS1hbGJgLFxuICAgICAgY29uc29saWRhdGVkUHJvcHNcbiAgICApO1xuICAgIGlmIChwcm9wcy5sb2dBY2Nlc3NMb2dzID09PSB1bmRlZmluZWQgfHwgcHJvcHMubG9nQWNjZXNzTG9ncyA9PT0gdHJ1ZSkge1xuICAgICAgY29uc3QgY29uc29saWRhdGVkTG9nZ2luZ0J1Y2tldFByb3BzID0gY29uc29saWRhdGVQcm9wcyhEZWZhdWx0UzNQcm9wcygpLCBwcm9wcy5sb2dnaW5nQnVja2V0UHJvcHMpO1xuICAgICAgY29uc3QgbG9nZ2luZ0J1Y2tldCA9IGNyZWF0ZUFsYkxvZ2dpbmdCdWNrZXQoc2NvcGUsIGlkLCBjb25zb2xpZGF0ZWRMb2dnaW5nQnVja2V0UHJvcHMpO1xuICAgICAgbG9hZEJhbGFuY2VyLmxvZ0FjY2Vzc0xvZ3MobG9nZ2luZ0J1Y2tldCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsb2FkQmFsYW5jZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFkZExpc3RlbmVyKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBsb2FkQmFsYW5jZXI6IGVsYi5BcHBsaWNhdGlvbkxvYWRCYWxhbmNlcixcbiAgbGlzdGVuZXJQcm9wczogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcyB8IGFueVxuKTogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIge1xuICBsZXQgY29uc29saWRhdGVkTGlzdGVuZXJQcm9wczogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJQcm9wcztcblxuICBjb25zb2xpZGF0ZWRMaXN0ZW5lclByb3BzID0gY29uc29saWRhdGVQcm9wcyhEZWZhdWx0TGlzdGVuZXJQcm9wcyhsb2FkQmFsYW5jZXIpLCBsaXN0ZW5lclByb3BzKTtcblxuICAvLyAgY3JlYXRlIHRoZSBsaXN0ZW5lclxuICBjb25zdCBsaXN0ZW5lciA9IG5ldyBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcihcbiAgICBzY29wZSxcbiAgICBgJHtpZH0tbGlzdGVuZXJgLFxuICAgIGNvbnNvbGlkYXRlZExpc3RlbmVyUHJvcHNcbiAgKTtcbiAgbG9hZEJhbGFuY2VyLmxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcblxuICBpZiAoY29uc29saWRhdGVkTGlzdGVuZXJQcm9wcy5wcm90b2NvbCA9PT0gZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUCkge1xuICAgIC8vIFRoaXMgd2lsbCB1c2UgY29yZS5wcmludFdhcm5pbmcgaW4gdGhlIGFjdHVhbCBjb25zdHJ1Y3RcbiAgICBwcmludFdhcm5pbmcoXG4gICAgICBcIkFXUyByZWNvbW1lbmRzIGVuY3J5cHRpbmcgdHJhZmZpYyB0byBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyIHVzaW5nIEhUVFBTLlwiXG4gICAgKTtcbiAgICBpZiAobGlzdGVuZXJQcm9wcy5jZXJ0aWZpY2F0ZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgbGlzdGVuZXJzIGNhbm5vdCB1c2UgYSBjZXJ0aWZpY2F0ZVwiKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCFsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcyB8fCBsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkEgbGlzdGVuZXIgdXNpbmcgSFRUUFMgcHJvdG9jb2wgcmVxdWlyZXMgYSBjZXJ0aWZpY2F0ZVwiKTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lci5hZGRDZXJ0aWZpY2F0ZXMoYCR7aWR9LWNlcnRgLCBsaXN0ZW5lclByb3BzLmNlcnRpZmljYXRlcyk7XG4gIH1cblxuICBpZiAoY29uc29saWRhdGVkTGlzdGVuZXJQcm9wcy5wcm90b2NvbCA9PT0gZWxiLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMpIHtcbiAgICBjb25zdCBvcHQ6IGVsYi5SZWRpcmVjdE9wdGlvbnMgPSB7XG4gICAgICBwb3J0OiBcIjQ0M1wiLFxuICAgICAgcHJvdG9jb2w6IFwiSFRUUFNcIixcbiAgICB9O1xuXG4gICAgY29uc3QgaHR0cExpc3RlbmVyID0gbmV3IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0tcmVkaXJlY3RgLFxuICAgICAge1xuICAgICAgICBsb2FkQmFsYW5jZXIsXG4gICAgICAgIHByb3RvY29sOiBBcHBsaWNhdGlvblByb3RvY29sLkhUVFAsXG4gICAgICAgIGRlZmF1bHRBY3Rpb246IExpc3RlbmVyQWN0aW9uLnJlZGlyZWN0KG9wdCksXG4gICAgICB9XG4gICAgKTtcbiAgICBsb2FkQmFsYW5jZXIubGlzdGVuZXJzLnB1c2goaHR0cExpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIENyZWF0ZXMgYSBUYXJnZXQgR3JvdXAgZm9yIExhbWJkYSBmdW5jdGlvbnMgYW5kIGFkZHMgdGhlXG4gKiBwcm92aWRlZCBmdW5jdGlvbnMgYXMgYSB0YXJnZXQgdG8gdGhhdCBncm91cC4gVGhlbiBhZGRzXG4gKiB0aGUgbmV3IFRhcmdldCBHcm91cCB0byB0aGUgcHJvdmlkZWQgTGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBBZGRMYW1iZGFUYXJnZXQoXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIGN1cnJlbnRMaXN0ZW5lcjogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gIGxhbWJkYUZ1bmN0aW9uOiBsYW1iZGEuSUZ1bmN0aW9uLFxuICBydWxlUHJvcHM/OiBlbGIuQWRkUnVsZVByb3BzLFxuICB0YXJnZXRQcm9wcz86IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwUHJvcHMsXG4pOiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cCAge1xuXG4gIC8vICBDcmVhdGUgdGhlIHRhcmdldCBhbmQgYXNzaWduIGl0IHRvIGEgbmV3IHRhcmdldCBncm91cFxuICBjb25zdCBsYW1iZGFUYXJnZXQgPSBuZXcgZWxidC5MYW1iZGFUYXJnZXQobGFtYmRhRnVuY3Rpb24pO1xuICBjb25zdCBuZXdUYXJnZXRHcm91cCA9IG5ldyBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cChzY29wZSwgYCR7aWR9LXRnYCwge1xuICAgIHRhcmdldHM6IFtsYW1iZGFUYXJnZXRdLFxuICAgIHRhcmdldEdyb3VwTmFtZTogdGFyZ2V0UHJvcHMgPyB0YXJnZXRQcm9wcy50YXJnZXRHcm91cE5hbWUgOiB1bmRlZmluZWQsXG4gICAgaGVhbHRoQ2hlY2s6IHRhcmdldFByb3BzID8gdGFyZ2V0UHJvcHMuaGVhbHRoQ2hlY2sgOiB1bmRlZmluZWRcbiAgfSk7XG5cbiAgLy8gVGhlIGludGVyZmFjZSBBZGRSdWxlUHJvcHMgaW5jbHVkZXMgY29uZGl0aW9ucyBhbmQgcHJpb3JpdHksIGNvbWJpbmUgdGhhdFxuICAvLyB3aXRoIHRhcmdldEdyb3VwcyBhbmQgd2UgY2FuIGFzc2VtYmxlIEFkZEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wc1xuICBjb25zdCBjb25zb2xpZGF0ZWRUYXJnZXRQcm9wcyA9IGNvbnNvbGlkYXRlUHJvcHMoe30sIHJ1bGVQcm9wcywgeyB0YXJnZXRHcm91cHM6IFtuZXdUYXJnZXRHcm91cF0gfSk7XG4gIGN1cnJlbnRMaXN0ZW5lci5hZGRUYXJnZXRHcm91cHMoYCR7c2NvcGUubm9kZS5pZH0tdGFyZ2V0c2AsIGNvbnNvbGlkYXRlZFRhcmdldFByb3BzKTtcblxuICBuZXdUYXJnZXRHcm91cC5zZXRBdHRyaWJ1dGUoJ3N0aWNraW5lc3MuZW5hYmxlZCcsIHVuZGVmaW5lZCk7XG4gIHJldHVybiBuZXdUYXJnZXRHcm91cDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQWRkRmFyZ2F0ZVRhcmdldChcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAgY3VycmVudExpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgZmFyZ2F0ZVNlcnZpY2U6IGVjcy5GYXJnYXRlU2VydmljZSxcbiAgcnVsZVByb3BzPzogZWxiLkFkZFJ1bGVQcm9wcyxcbiAgdGFyZ2V0UHJvcHM/OiBlbGIuQXBwbGljYXRpb25UYXJnZXRHcm91cFByb3BzLFxuKTogZWxiLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgIHtcblxuICBpZiAodGFyZ2V0UHJvcHM/LnByb3RvY29sICE9PSBlbGIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUykge1xuICAgIHByaW50V2FybmluZygnQVdTIHJlY29tbWVuZHMgdXNpbmcgSFRUUFMgcHJvdG9jb2wgZm9yIFRhcmdldCBHcm91cHMgaW4gcHJvZHVjdGlvbiBhcHBsaWNhdGlvbnMnKTtcbiAgfVxuXG4gIGNvbnN0IG5ld1RhcmdldEdyb3VwID0gbmV3IGVsYi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHNjb3BlLCBgJHtpZH0tdGdgLCB0YXJnZXRQcm9wcyk7XG5cbiAgLy8gVGhlIGludGVyZmFjZSBBZGRSdWxlUHJvcHMgaW5jbHVkZXMgY29uZGl0aW9ucyBhbmQgcHJpb3JpdHksIGNvbWJpbmUgdGhhdFxuICAvLyB3aXRoIHRhcmdldEdyb3VwcyBhbmQgd2UgY2FuIGFzc2VtYmxlIGFuIEFkZEFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBQcm9wcyBvYmplY3RcbiAgY29uc3QgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKHsgdGFyZ2V0R3JvdXBzOiBbbmV3VGFyZ2V0R3JvdXBdIH0sIHJ1bGVQcm9wcyk7XG5cbiAgY3VycmVudExpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgJHtzY29wZS5ub2RlLmlkfS10YXJnZXRzYCwgY29uc29saWRhdGVkVGFyZ2V0UHJvcHMpO1xuICBuZXdUYXJnZXRHcm91cC5hZGRUYXJnZXQoZmFyZ2F0ZVNlcnZpY2UpO1xuXG4gIHJldHVybiBuZXdUYXJnZXRHcm91cDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIExvb2tzIGZvciB0aGUgbGlzdGVuZXIgYXNzb2NpYXRlZCB3aXRoIFRhcmdldCBHcm91cHNcbiAqIElmIHRoZXJlIGlzIGEgc2luZ2xlIGxpc3RlbmVyLCB0aGlzIHJldHVybnMgaXQgd2hldGhlciBpdCBpcyBIVFRQIG9yIEhUVFBTXG4gKiBJZiB0aGVyZSBhcmUgMiBsaXN0ZW5lcnMsIGl0IGZpbmRzIHRoZSBIVFRQUyBsaXN0ZW5lciAod2UgYXNzdW1lIHRoZSBIVFRQIGxpc3RlbmVyIHJlZGlyZWN0cyB0byBIVFRQUylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEdldEFjdGl2ZUxpc3RlbmVyKGxpc3RlbmVyczogZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXJbXSk6IGVsYi5BcHBsaWNhdGlvbkxpc3RlbmVyIHtcbiAgbGV0IGxpc3RlbmVyOiBlbGIuQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA9PT0gMCApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyBsaXN0ZW5lcnMgaW4gdGhlIEFMQmApO1xuICB9XG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID09PSAxICkge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzWzBdO1xuICB9IGVsc2Uge1xuICAgIGxpc3RlbmVyID0gbGlzdGVuZXJzLmZpbmQoaSA9PiAoaS5ub2RlLmNoaWxkcmVuWzBdIGFzIGVsYi5DZm5MaXN0ZW5lcikucHJvdG9jb2wgPT09IFwiSFRUUFNcIikgYXMgZWxiLkFwcGxpY2F0aW9uTGlzdGVuZXI7XG4gIH1cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBDaGVja0FsYlByb3BzKHByb3BzOiBhbnkpIHtcbiAgbGV0IGVycm9yTWVzc2FnZXMgPSAnJztcbiAgbGV0IGVycm9yRm91bmQgPSBmYWxzZTtcblxuICBpZiAocHJvcHMubGlzdGVuZXJQcm9wcz8uY2VydGlmaWNhdGVBcm5zKSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcImNlcnRpZmljYXRlQXJucyBpcyBkZXByZWNhdGVkLiBQbGVhc2Ugc3VwcGx5IGNlcnRpZmljYXRlcyB1c2luZyBwcm9wcy5saXN0ZW5lclByb3BzLmNlcnRpZmljYXRlc1xcblwiO1xuICAgIGVycm9yRm91bmQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgICgocHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmogJiZcbiAgICAgIHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqLmxpc3RlbmVycy5sZW5ndGggPT09IDApIHx8XG4gICAgICAhcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmopICYmXG4gICAgIXByb3BzLmxpc3RlbmVyUHJvcHNcbiAgKSB7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcIldoZW4gYWRkaW5nIHRoZSBmaXJzdCBsaXN0ZW5lciBhbmQgdGFyZ2V0IHRvIGEgbG9hZCBiYWxhbmNlciwgbGlzdGVuZXJQcm9wcyBtdXN0IGJlIHNwZWNpZmllZCBhbmQgaW5jbHVkZSBhdCBsZWFzdCBhIGNlcnRpZmljYXRlIG9yIHByb3RvY29sOiBIVFRQXFxuXCI7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gIH1cblxuICBpZiAoXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmogJiZcbiAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iai5saXN0ZW5lcnMubGVuZ3RoID4gMCAmJlxuICAgIHByb3BzLmxpc3RlbmVyUHJvcHNcbiAgKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcIlRoaXMgbG9hZCBiYWxhbmNlciBhbHJlYWR5IGhhcyBhIGxpc3RlbmVyLCBsaXN0ZW5lclByb3BzIG1heSBub3QgYmUgc3BlY2lmaWVkXFxuXCI7XG4gIH1cblxuICBpZiAoXG4gICAgcHJvcHMuZXhpc3RpbmdMb2FkQmFsYW5jZXJPYmogJiZcbiAgICBwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iai5saXN0ZW5lcnMubGVuZ3RoID4gMCAmJlxuICAgICFwcm9wcy5ydWxlUHJvcHNcbiAgKSB7XG4gICAgZXJyb3JGb3VuZCA9IHRydWU7XG4gICAgZXJyb3JNZXNzYWdlcyArPSBcIldoZW4gYWRkaW5nIGEgc2Vjb25kIHRhcmdldCB0byBhbiBleGlzdGluZyBsaXN0ZW5lciwgdGhlcmUgbXVzdCBiZSBydWxlcyBwcm92aWRlZFxcblwiO1xuICB9XG5cbiAgLy8gQ2hlY2sgY29uc3RydWN0IHNwZWNpZmljIGludmFsaWQgaW5wdXRzXG4gIGlmIChwcm9wcy5leGlzdGluZ0xvYWRCYWxhbmNlck9iaiAmJiAhcHJvcHMuZXhpc3RpbmdWcGMpIHtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICBlcnJvck1lc3NhZ2VzICs9IFwiQW4gZXhpc3RpbmcgQUxCIGlzIGFscmVhZHkgaW4gYSBWUEMsIHRoYXQgVlBDIG11c3QgYmUgcHJvdmlkZWQgaW4gcHJvcHMuZXhpc3RpbmdWcGMgZm9yIHRoZSByZXN0IG9mIHRoZSBjb25zdHJ1Y3QgdG8gdXNlLlxcblwiO1xuICB9XG5cbiAgaWYgKHByb3BzLmxvYWRCYWxhbmNlclByb3BzPy52cGMpIHtcbiAgICBlcnJvckZvdW5kID0gdHJ1ZTtcbiAgICBlcnJvck1lc3NhZ2VzICs9ICdTcGVjaWZ5IGFueSBleGlzdGluZyBWUEMgYXQgdGhlIGNvbnN0cnVjdCBsZXZlbCwgbm90IHdpdGhpbiBsb2FkQmFsYW5jZXJQcm9wcy5cXG4nO1xuICB9XG5cbiAgaWYgKHByb3BzLmV4aXN0aW5nTG9hZEJhbGFuY2VyT2JqKSB7XG4gICAgcHJpbnRXYXJuaW5nKFxuICAgICAgXCJUaGUgcHVibGljL3ByaXZhdGUgcHJvcGVydHkgb2YgYW4gZXhpc3RpbmcgQUxCIG11c3QgbWF0Y2ggdGhlIHByb3BzLnB1YmxpY0FwaSBzZXR0aW5nIHByb3ZpZGVkLlwiXG4gICAgKTtcbiAgfVxuXG4gIGlmIChlcnJvckZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZXMpO1xuICB9XG59Il19