@paulo_raca/cdk-skylight 0.0.2 → 0.0.3

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
@@ -3129,7 +3129,7 @@
3129
3129
  },
3130
3130
  "locationInModule": {
3131
3131
  "filename": "src/skylight-authentication/ad-authentication.ts",
3132
- "line": 266
3132
+ "line": 277
3133
3133
  },
3134
3134
  "name": "createADGroup",
3135
3135
  "parameters": [
@@ -3153,7 +3153,7 @@
3153
3153
  },
3154
3154
  "locationInModule": {
3155
3155
  "filename": "src/skylight-authentication/ad-authentication.ts",
3156
- "line": 282
3156
+ "line": 287
3157
3157
  },
3158
3158
  "name": "createServiceAccount",
3159
3159
  "parameters": [
@@ -3183,26 +3183,31 @@
3183
3183
  },
3184
3184
  "locationInModule": {
3185
3185
  "filename": "src/skylight-authentication/ad-authentication.ts",
3186
- "line": 252
3186
+ "line": 267
3187
3187
  },
3188
- "name": "createWorker",
3188
+ "name": "runPSwithDomainAdmin",
3189
3189
  "parameters": [
3190
3190
  {
3191
- "name": "domainName",
3191
+ "name": "commands",
3192
3192
  "type": {
3193
- "primitive": "string"
3193
+ "collection": {
3194
+ "elementtype": {
3195
+ "primitive": "string"
3196
+ },
3197
+ "kind": "array"
3198
+ }
3194
3199
  }
3195
3200
  },
3196
3201
  {
3197
- "name": "domainPassword",
3202
+ "name": "id",
3198
3203
  "type": {
3199
- "fqn": "aws-cdk-lib.aws_secretsmanager.ISecret"
3204
+ "primitive": "string"
3200
3205
  }
3201
3206
  }
3202
3207
  ],
3203
3208
  "returns": {
3204
3209
  "type": {
3205
- "fqn": "cdk-skylight.compute.DomainWindowsNode"
3210
+ "primitive": "boolean"
3206
3211
  }
3207
3212
  }
3208
3213
  }
@@ -3299,7 +3304,7 @@
3299
3304
  },
3300
3305
  "locationInModule": {
3301
3306
  "filename": "src/skylight-authentication/ad-authentication.ts",
3302
- "line": 314
3307
+ "line": 315
3303
3308
  },
3304
3309
  "parameters": [
3305
3310
  {
@@ -3325,7 +3330,7 @@
3325
3330
  "kind": "class",
3326
3331
  "locationInModule": {
3327
3332
  "filename": "src/skylight-authentication/ad-authentication.ts",
3328
- "line": 313
3333
+ "line": 314
3329
3334
  },
3330
3335
  "name": "AwsManagedMicrosoftAdR53",
3331
3336
  "namespace": "authentication",
@@ -3607,7 +3612,7 @@
3607
3612
  },
3608
3613
  "locationInModule": {
3609
3614
  "filename": "src/skylight-compute/windows-node.ts",
3610
- "line": 99
3615
+ "line": 100
3611
3616
  },
3612
3617
  "parameters": [
3613
3618
  {
@@ -3633,7 +3638,7 @@
3633
3638
  "kind": "class",
3634
3639
  "locationInModule": {
3635
3640
  "filename": "src/skylight-compute/windows-node.ts",
3636
- "line": 93
3641
+ "line": 94
3637
3642
  },
3638
3643
  "methods": [
3639
3644
  {
@@ -3643,7 +3648,7 @@
3643
3648
  },
3644
3649
  "locationInModule": {
3645
3650
  "filename": "src/skylight-compute/windows-node.ts",
3646
- "line": 269
3651
+ "line": 270
3647
3652
  },
3648
3653
  "name": "openRDP",
3649
3654
  "parameters": [
@@ -3663,7 +3668,7 @@
3663
3668
  },
3664
3669
  "locationInModule": {
3665
3670
  "filename": "src/skylight-compute/windows-node.ts",
3666
- "line": 254
3671
+ "line": 255
3667
3672
  },
3668
3673
  "name": "runPsCommands",
3669
3674
  "parameters": [
@@ -3693,7 +3698,7 @@
3693
3698
  },
3694
3699
  "locationInModule": {
3695
3700
  "filename": "src/skylight-compute/windows-node.ts",
3696
- "line": 282
3701
+ "line": 283
3697
3702
  },
3698
3703
  "name": "runPSwithDomainAdmin",
3699
3704
  "parameters": [
@@ -3724,7 +3729,7 @@
3724
3729
  },
3725
3730
  "locationInModule": {
3726
3731
  "filename": "src/skylight-compute/windows-node.ts",
3727
- "line": 238
3732
+ "line": 239
3728
3733
  },
3729
3734
  "name": "runShellCommands",
3730
3735
  "parameters": [
@@ -3753,7 +3758,7 @@
3753
3758
  },
3754
3759
  "locationInModule": {
3755
3760
  "filename": "src/skylight-compute/windows-node.ts",
3756
- "line": 315
3761
+ "line": 317
3757
3762
  },
3758
3763
  "name": "startInstance"
3759
3764
  }
@@ -3768,7 +3773,7 @@
3768
3773
  "immutable": true,
3769
3774
  "locationInModule": {
3770
3775
  "filename": "src/skylight-compute/windows-node.ts",
3771
- "line": 94
3776
+ "line": 95
3772
3777
  },
3773
3778
  "name": "instance",
3774
3779
  "type": {
@@ -3782,7 +3787,7 @@
3782
3787
  "immutable": true,
3783
3788
  "locationInModule": {
3784
3789
  "filename": "src/skylight-compute/windows-node.ts",
3785
- "line": 95
3790
+ "line": 96
3786
3791
  },
3787
3792
  "name": "nodeRole",
3788
3793
  "type": {
@@ -3796,7 +3801,7 @@
3796
3801
  "immutable": true,
3797
3802
  "locationInModule": {
3798
3803
  "filename": "src/skylight-compute/windows-node.ts",
3799
- "line": 96
3804
+ "line": 97
3800
3805
  },
3801
3806
  "name": "vpc",
3802
3807
  "type": {
@@ -3810,7 +3815,7 @@
3810
3815
  "immutable": true,
3811
3816
  "locationInModule": {
3812
3817
  "filename": "src/skylight-compute/windows-node.ts",
3813
- "line": 97
3818
+ "line": 98
3814
3819
  },
3815
3820
  "name": "passwordObject",
3816
3821
  "optional": true,
@@ -3831,7 +3836,7 @@
3831
3836
  "kind": "interface",
3832
3837
  "locationInModule": {
3833
3838
  "filename": "src/skylight-compute/windows-node.ts",
3834
- "line": 35
3839
+ "line": 36
3835
3840
  },
3836
3841
  "name": "IDomainWindowsNodeProps",
3837
3842
  "namespace": "compute",
@@ -3844,7 +3849,7 @@
3844
3849
  },
3845
3850
  "locationInModule": {
3846
3851
  "filename": "src/skylight-compute/windows-node.ts",
3847
- "line": 79
3852
+ "line": 80
3848
3853
  },
3849
3854
  "name": "vpc",
3850
3855
  "type": {
@@ -3860,7 +3865,7 @@
3860
3865
  },
3861
3866
  "locationInModule": {
3862
3867
  "filename": "src/skylight-compute/windows-node.ts",
3863
- "line": 58
3868
+ "line": 59
3864
3869
  },
3865
3870
  "name": "amiName",
3866
3871
  "optional": true,
@@ -3875,7 +3880,7 @@
3875
3880
  },
3876
3881
  "locationInModule": {
3877
3882
  "filename": "src/skylight-compute/windows-node.ts",
3878
- "line": 68
3883
+ "line": 69
3879
3884
  },
3880
3885
  "name": "domainName",
3881
3886
  "optional": true,
@@ -3892,7 +3897,7 @@
3892
3897
  },
3893
3898
  "locationInModule": {
3894
3899
  "filename": "src/skylight-compute/windows-node.ts",
3895
- "line": 40
3900
+ "line": 41
3896
3901
  },
3897
3902
  "name": "iamManagedPoliciesList",
3898
3903
  "optional": true,
@@ -3914,7 +3919,7 @@
3914
3919
  },
3915
3920
  "locationInModule": {
3916
3921
  "filename": "src/skylight-compute/windows-node.ts",
3917
- "line": 46
3922
+ "line": 47
3918
3923
  },
3919
3924
  "name": "instanceType",
3920
3925
  "optional": true,
@@ -3929,7 +3934,7 @@
3929
3934
  },
3930
3935
  "locationInModule": {
3931
3936
  "filename": "src/skylight-compute/windows-node.ts",
3932
- "line": 69
3937
+ "line": 70
3933
3938
  },
3934
3939
  "name": "passwordObject",
3935
3940
  "optional": true,
@@ -3947,7 +3952,7 @@
3947
3952
  },
3948
3953
  "locationInModule": {
3949
3954
  "filename": "src/skylight-compute/windows-node.ts",
3950
- "line": 53
3955
+ "line": 54
3951
3956
  },
3952
3957
  "name": "usePrivateSubnet",
3953
3958
  "optional": true,
@@ -3965,7 +3970,7 @@
3965
3970
  },
3966
3971
  "locationInModule": {
3967
3972
  "filename": "src/skylight-compute/windows-node.ts",
3968
- "line": 66
3973
+ "line": 67
3969
3974
  },
3970
3975
  "name": "userData",
3971
3976
  "optional": true,
@@ -3981,7 +3986,7 @@
3981
3986
  },
3982
3987
  "locationInModule": {
3983
3988
  "filename": "src/skylight-compute/windows-node.ts",
3984
- "line": 74
3989
+ "line": 75
3985
3990
  },
3986
3991
  "name": "windowsMachine",
3987
3992
  "optional": true,
@@ -5008,5 +5013,5 @@
5008
5013
  }
5009
5014
  },
5010
5015
  "version": "0.0.0",
5011
- "fingerprint": "f4LTs7jCGOnMyGSweGIjs/ZdN9k4/MbiyBLV182OIuY="
5016
+ "fingerprint": "bQk1rm/XYaNzdF65d0MjXsSPXf+H2MfVb3VxUcErKnQ="
5012
5017
  }
package/.jsii.tabl.json CHANGED
@@ -1 +1 @@
1
- {"version":"2","toolVersion":"5.9.27","snippets":{"6e42f3413ef2effb382fac9a1dc9589bfea1143e899475ce59d918ac0b68d126":{"translations":{"python":{"source":"import cdk_skylight as skylight\n\n\nskylight.authentication.AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps)","version":"2"},"csharp":{"source":"using Cdk.Skylight;\n\n\nnew Authentication.AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps);","version":"1"},"java":{"source":"import cdk.skylight.authentication.*;\n\n\nnew AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps);","version":"1"},"go":{"source":"import \"github.com/aws-samples/dummy/cdkskylight/authentication\"\n\n\nauthentication.NewAwsManagedMicrosoftAdR53(*scope, constructs.Construct, *id, string, props, iAwsManagedMicrosoftAdProps)","version":"1"},"$":{"source":"import * as skylight from \"cdk-skylight\";\n\nnew skylight.authentication.AwsManagedMicrosoftAdR53(scope: Construct, id: string, props: IAwsManagedMicrosoftAdProps)","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":36}},"didCompile":false,"fqnsReferenced":["cdk-skylight.authentication","cdk-skylight.authentication.AwsManagedMicrosoftAdR53","cdk-skylight.authentication.IAwsManagedMicrosoftAdProps"],"fullSource":"// Hoisted imports begin after !show marker below\n/// !show\nimport * as skylight from \"cdk-skylight\";\n/// !hide\n// Hoisted imports ended before !hide marker above\n// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\n\n\nnew skylight.authentication.AwsManagedMicrosoftAdR53(scope: Construct, id: string, props: IAwsManagedMicrosoftAdProps)\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":1,"80":10,"212":2,"215":1,"245":1,"273":1,"274":1,"275":1,"308":1},"fqnsFingerprint":"5f7cdf3f412da9e4ef480845e77accbc0b6fd828552f022fe76981c170b7b25c"},"60642050031aee56cffbe4d5f3d7acb5c76aabd27adfe4a23b57ee7768e27e03":{"translations":{"python":{"source":"windows_node_object = skylight.compute.DomainWindowsNode(stack, \"WindowsNode\",\n vpc=vpc,\n mad_ssm_parameters={}\n)\n\n# Special Methods:\nwindows_node_object.run_ps_commands([\"echo hello-world\"], \"hello\")\nwindows_node_object.run_pSwith_domain_admin([\"Write-Host hello-world\"], \"hello-withPS\")\nwindows_node_object.open_rDP(\"1.1.1.1/32\")","version":"2"},"csharp":{"source":"var windowsNodeObject = new skylight.Compute.DomainWindowsNode(stack, \"WindowsNode\", new Struct {\n Vpc = vpc,\n MadSsmParameters = new Struct { }\n});\n\n// Special Methods:\nwindowsNodeObject.RunPsCommands(new [] { \"echo hello-world\" }, \"hello\");\nwindowsNodeObject.RunPSwithDomainAdmin(new [] { \"Write-Host hello-world\" }, \"hello-withPS\");\nwindowsNodeObject.OpenRDP(\"1.1.1.1/32\");","version":"1"},"java":{"source":"Object windowsNodeObject = DomainWindowsNode.Builder.create(stack, \"WindowsNode\")\n .vpc(vpc)\n .madSsmParameters(Map.of())\n .build();\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(List.of(\"echo hello-world\"), \"hello\");\nwindowsNodeObject.runPSwithDomainAdmin(List.of(\"Write-Host hello-world\"), \"hello-withPS\");\nwindowsNodeObject.openRDP(\"1.1.1.1/32\");","version":"1"},"go":{"source":"windowsNodeObject := #error#.NewDomainWindowsNode(stack, jsii.String(\"WindowsNode\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"madSsmParameters\": map[string]interface{}{\n\t},\n})\n\n// Special Methods:\nwindowsNodeObject.runPsCommands([]interface{}{\n\tjsii.String(\"echo hello-world\"),\n}, jsii.String(\"hello\"))\nwindowsNodeObject.runPSwithDomainAdmin([]interface{}{\n\tjsii.String(\"Write-Host hello-world\"),\n}, jsii.String(\"hello-withPS\"))\nwindowsNodeObject.openRDP(jsii.String(\"1.1.1.1/32\"))","version":"1"},"$":{"source":"const windowsNodeObject = new skylight.compute.DomainWindowsNode(\n stack,\n 'WindowsNode',\n {\n vpc: vpc,\n madSsmParameters: {}, //pointer to the Secret that holds the Domain Admin username and password\n }\n);\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(['echo hello-world'], 'hello');\nwindowsNodeObject.runPSwithDomainAdmin(\n ['Write-Host hello-world'],\n 'hello-withPS'\n);\nwindowsNodeObject.openRDP('1.1.1.1/32');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":60}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst windowsNodeObject = new skylight.compute.DomainWindowsNode(\n stack,\n 'WindowsNode',\n {\n vpc: vpc,\n madSsmParameters: {}, //pointer to the Secret that holds the Domain Admin username and password\n }\n);\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(['echo hello-world'], 'hello');\nwindowsNodeObject.runPSwithDomainAdmin(\n ['Write-Host hello-world'],\n 'hello-withPS'\n);\nwindowsNodeObject.openRDP('1.1.1.1/32');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":6,"80":14,"210":2,"211":2,"212":5,"214":3,"215":1,"244":1,"245":3,"261":1,"262":1,"304":2},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"ab0288379c126b4d72c0cd4673f48523e65b5586b97d40861d888d820e1d1de9":{"translations":{"python":{"source":"ad = skylight.authentication.AwsManagedMicrosoftAd(stack, \"AwsManagedMicrosoftAdR53\",\n vpc=vpc,\n edition=\"Enterprise\", # Optional\n secret=Secret(stack, \"test-secret\"), # Optional\n domain_name=\"test-domain\", # Optional\n secret_name=\"custom-secret-name\", # Optional\n create_worker=False\n)\nad.managed_active_directory.create_aDGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\")","version":"2"},"csharp":{"source":"var ad = new skylight.Authentication.AwsManagedMicrosoftAd(stack, \"AwsManagedMicrosoftAdR53\", new Struct {\n Vpc = vpc,\n Edition = \"Enterprise\", // Optional\n Secret = new Secret(stack, \"test-secret\"), // Optional\n DomainName = \"test-domain\", // Optional\n SecretName = \"custom-secret-name\", // Optional\n CreateWorker = false\n});\nad.ManagedActiveDirectory.CreateADGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\");","version":"1"},"java":{"source":"Object ad = AwsManagedMicrosoftAd.Builder.create(stack, \"AwsManagedMicrosoftAdR53\")\n .vpc(vpc)\n .edition(\"Enterprise\") // Optional\n .secret(new Secret(stack, \"test-secret\")) // Optional\n .domainName(\"test-domain\") // Optional\n .secretName(\"custom-secret-name\") // Optional\n .createWorker(false)\n .build();\nad.managedActiveDirectory.createADGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\");","version":"1"},"go":{"source":"ad := #error#.NewAwsManagedMicrosoftAd(stack, jsii.String(\"AwsManagedMicrosoftAdR53\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"edition\": jsii.String(\"Enterprise\"),\n\t // Optional\n\t\"secret\": NewSecret(stack, jsii.String(\"test-secret\")),\n\t // Optional\n\t\"domainName\": jsii.String(\"test-domain\"),\n\t // Optional\n\t\"secretName\": jsii.String(\"custom-secret-name\"),\n\t // Optional\n\t\"createWorker\": jsii.Boolean(false),\n})\nad.managedActiveDirectory.createADGroup(jsii.String(\"MyADGroup\"), jsii.String(\"My AD Group Created by CDK-Skylight!\"))","version":"1"},"$":{"source":"const ad = new skylight.authentication.AwsManagedMicrosoftAd(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n edition: 'Enterprise', // Optional\n secret: new Secret(stack, 'test-secret'), // Optional\n domainName: 'test-domain', // Optional\n secretName: 'custom-secret-name', // Optional\n createWorker: false, // Optional\n }\n);\nad.managedActiveDirectory.createADGroup(\n 'MyADGroup', // AD group name\n 'My AD Group Created by CDK-Skylight!' //AD Description\n);","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":96}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst ad = new skylight.authentication.AwsManagedMicrosoftAd(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n edition: 'Enterprise', // Optional\n secret: new Secret(stack, 'test-secret'), // Optional\n domainName: 'test-domain', // Optional\n secretName: 'custom-secret-name', // Optional\n createWorker: false, // Optional\n }\n);\nad.managedActiveDirectory.createADGroup(\n 'MyADGroup', // AD group name\n 'My AD Group Created by CDK-Skylight!' //AD Description\n);\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":7,"80":17,"97":1,"211":1,"212":4,"214":1,"215":2,"244":1,"245":1,"261":1,"262":1,"304":6},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"525e7934be057f783514e4f703ed721815680aaeff9bb1c2de653e1726e4590c":{"translations":{"python":{"source":"ad = skylight.authentication.AwsManagedMicrosoftAdR53(stack, \"AwsManagedMicrosoftAdR53\",\n vpc=vpc\n)","version":"2"},"csharp":{"source":"var ad = new skylight.Authentication.AwsManagedMicrosoftAdR53(stack, \"AwsManagedMicrosoftAdR53\", new Struct {\n Vpc = vpc\n});","version":"1"},"java":{"source":"Object ad = AwsManagedMicrosoftAdR53.Builder.create(stack, \"AwsManagedMicrosoftAdR53\")\n .vpc(vpc)\n .build();","version":"1"},"go":{"source":"ad := #error#.NewAwsManagedMicrosoftAdR53(stack, jsii.String(\"AwsManagedMicrosoftAdR53\"), map[string]interface{}{\n\t\"vpc\": vpc,\n})","version":"1"},"$":{"source":"const ad = new skylight.authentication.AwsManagedMicrosoftAdR53(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n }\n);","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":121}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst ad = new skylight.authentication.AwsManagedMicrosoftAdR53(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n }\n);\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":1,"80":7,"211":1,"212":2,"215":1,"244":1,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"3f35277eb29cbff61bef45cc6f29ee9610bfc0d4586e722b6328c1dc3d0eb88e":{"translations":{"python":{"source":"self.fsx_windows = skylight.storage.FSxWindows(self, \"FSx\",\n vpc=vpc,\n ad_parameters_store=ad_parameters_store\n)\nself.fsx_windows.create_folder(\"myFolderStorageOnFSx\")","version":"2"},"csharp":{"source":"FsxWindows = new skylight.Storage.FSxWindows(this, \"FSx\", new Struct {\n Vpc = vpc,\n AdParametersStore = adParametersStore\n});\nFsxWindows.CreateFolder(\"myFolderStorageOnFSx\");","version":"1"},"java":{"source":"this.fsxWindows = FSxWindows.Builder.create(this, \"FSx\")\n .vpc(vpc)\n .adParametersStore(adParametersStore)\n .build();\nthis.fsxWindows.createFolder(\"myFolderStorageOnFSx\");","version":"1"},"go":{"source":"this.fsxWindows = #error#.NewFSxWindows(this, jsii.String(\"FSx\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"adParametersStore\": adParametersStore,\n})\nthis.fsxWindows.createFolder(jsii.String(\"myFolderStorageOnFSx\"))","version":"1"},"$":{"source":"this.fsxWindows = new skylight.storage.FSxWindows(this, 'FSx', {\n vpc: vpc,\n adParametersStore: adParametersStore,\n});\nthis.fsxWindows.createFolder('myFolderStorageOnFSx');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":145}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nthis.fsxWindows = new skylight.storage.FSxWindows(this, 'FSx', {\n vpc: vpc,\n adParametersStore: adParametersStore,\n});\nthis.fsxWindows.createFolder('myFolderStorageOnFSx');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":2,"64":1,"80":10,"110":3,"211":1,"212":5,"214":1,"215":1,"227":1,"245":2,"304":2},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"fdbe21e61096946db9edf63a780257ab5ddcaaf88c23a60d4d64de1b016eca2f":{"translations":{"python":{"source":"cluster = WindowsEKSCluster(stack, \"ElasticCluster\",\n vpc=aws_ec2.Vpc(stack, \"MyVpc\")\n)","version":"2"},"csharp":{"source":"var cluster = new WindowsEKSCluster(stack, \"ElasticCluster\", new Struct {\n Vpc = new aws_ec2.Vpc(stack, \"MyVpc\", new Struct { })\n});","version":"1"},"java":{"source":"Object cluster = WindowsEKSCluster.Builder.create(stack, \"ElasticCluster\")\n .vpc(Vpc.Builder.create(stack, \"MyVpc\").build())\n .build();","version":"1"},"go":{"source":"cluster := NewWindowsEKSCluster(stack, jsii.String(\"ElasticCluster\"), map[string]interface{}{\n\t\"vpc\": aws_ec2.NewVpc(stack, jsii.String(\"MyVpc\"), map[string]interface{}{\n\t}),\n})","version":"1"},"$":{"source":"const cluster = new WindowsEKSCluster(stack, 'ElasticCluster', {\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n}); // Creates EKS Cluster with Windows support","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":161}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst cluster = new WindowsEKSCluster(stack, 'ElasticCluster', {\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":2,"80":7,"211":2,"212":1,"215":2,"244":1,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"fd61853ea4882919c96f9d218530f0b80819d72dd856a2c6271aa298448adf9b":{"translations":{"python":{"source":"my_nodes = WindowsEKSNodes(stack, \"WindowsEKSNodes\",\n # Creates AutoScaling group for Windows Support\n vpc=aws_ec2.Vpc(stack, \"MyVpc\")\n)\n\nmy_nodes.add_ad_dependency(secret_object)\nmy_nodes.add_storage_dependency(secret_object, storage_mount)\nmy_nodes.add_eKSDependency(eks_cluster.eks_cluster)\nmy_nodes.add_local_cred_file(secret_object, \"myEKSNodes\", \"myWebApp\")","version":"2"},"csharp":{"source":"var myNodes = new WindowsEKSNodes(stack, \"WindowsEKSNodes\", new Struct {\n // Creates AutoScaling group for Windows Support\n Vpc = new aws_ec2.Vpc(stack, \"MyVpc\", new Struct { })\n});\n\nmyNodes.AddAdDependency(secretObject);\nmyNodes.AddStorageDependency(secretObject, storageMount);\nmyNodes.AddEKSDependency(eks_cluster.EksCluster);\nmyNodes.AddLocalCredFile(secretObject, \"myEKSNodes\", \"myWebApp\");","version":"1"},"java":{"source":"Object myNodes = WindowsEKSNodes.Builder.create(stack, \"WindowsEKSNodes\")\n // Creates AutoScaling group for Windows Support\n .vpc(Vpc.Builder.create(stack, \"MyVpc\").build())\n .build();\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.getEksCluster());\nmyNodes.addLocalCredFile(secretObject, \"myEKSNodes\", \"myWebApp\");","version":"1"},"go":{"source":"myNodes := NewWindowsEKSNodes(stack, jsii.String(\"WindowsEKSNodes\"), map[string]interface{}{\n\t// Creates AutoScaling group for Windows Support\n\t\"vpc\": aws_ec2.NewVpc(stack, jsii.String(\"MyVpc\"), map[string]interface{}{\n\t}),\n})\n\nmyNodes.addAdDependency(secretObject)\nmyNodes.addStorageDependency(secretObject, storageMount)\nmyNodes.addEKSDependency(eks_cluster.eksCluster)\nmyNodes.addLocalCredFile(secretObject, jsii.String(\"myEKSNodes\"), jsii.String(\"myWebApp\"))","version":"1"},"$":{"source":"const myNodes = new WindowsEKSNodes(stack, 'WindowsEKSNodes', {\n // Creates AutoScaling group for Windows Support\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.eksCluster);\nmyNodes.addLocalCredFile(secretObject, 'myEKSNodes', 'myWebApp');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":171}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst myNodes = new WindowsEKSNodes(stack, 'WindowsEKSNodes', {\n // Creates AutoScaling group for Windows Support\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.eksCluster);\nmyNodes.addLocalCredFile(secretObject, 'myEKSNodes', 'myWebApp');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":4,"80":21,"211":2,"212":6,"214":4,"215":2,"244":1,"245":4,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}}}
1
+ {"version":"2","toolVersion":"5.9.27","snippets":{"6e42f3413ef2effb382fac9a1dc9589bfea1143e899475ce59d918ac0b68d126":{"translations":{"python":{"source":"import cdk_skylight as skylight\n\n\nskylight.authentication.AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps)","version":"2"},"csharp":{"source":"using Cdk.Skylight;\n\n\nnew Authentication.AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps);","version":"1"},"java":{"source":"import cdk.skylight.authentication.*;\n\n\nnew AwsManagedMicrosoftAdR53(scope, Construct, id, string, props, IAwsManagedMicrosoftAdProps);","version":"1"},"go":{"source":"import \"github.com/aws-samples/dummy/cdkskylight/authentication\"\n\n\nauthentication.NewAwsManagedMicrosoftAdR53(*scope, constructs.Construct, *id, string, props, iAwsManagedMicrosoftAdProps)","version":"1"},"$":{"source":"import * as skylight from \"cdk-skylight\";\n\nnew skylight.authentication.AwsManagedMicrosoftAdR53(scope: Construct, id: string, props: IAwsManagedMicrosoftAdProps)","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":36}},"didCompile":false,"fqnsReferenced":["cdk-skylight.authentication","cdk-skylight.authentication.AwsManagedMicrosoftAdR53","cdk-skylight.authentication.IAwsManagedMicrosoftAdProps"],"fullSource":"// Hoisted imports begin after !show marker below\n/// !show\nimport * as skylight from \"cdk-skylight\";\n/// !hide\n// Hoisted imports ended before !hide marker above\n// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\n\n\nnew skylight.authentication.AwsManagedMicrosoftAdR53(scope: Construct, id: string, props: IAwsManagedMicrosoftAdProps)\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":1,"80":10,"212":2,"215":1,"245":1,"273":1,"274":1,"275":1,"308":1},"fqnsFingerprint":"0efd7b91b4f2451bfd7ed78d943a4184b4f7b7027041a1f7d19a1a6c842f9c20"},"60642050031aee56cffbe4d5f3d7acb5c76aabd27adfe4a23b57ee7768e27e03":{"translations":{"python":{"source":"windows_node_object = skylight.compute.DomainWindowsNode(stack, \"WindowsNode\",\n vpc=vpc,\n mad_ssm_parameters={}\n)\n\n# Special Methods:\nwindows_node_object.run_ps_commands([\"echo hello-world\"], \"hello\")\nwindows_node_object.run_pSwith_domain_admin([\"Write-Host hello-world\"], \"hello-withPS\")\nwindows_node_object.open_rDP(\"1.1.1.1/32\")","version":"2"},"csharp":{"source":"var windowsNodeObject = new skylight.Compute.DomainWindowsNode(stack, \"WindowsNode\", new Struct {\n Vpc = vpc,\n MadSsmParameters = new Struct { }\n});\n\n// Special Methods:\nwindowsNodeObject.RunPsCommands(new [] { \"echo hello-world\" }, \"hello\");\nwindowsNodeObject.RunPSwithDomainAdmin(new [] { \"Write-Host hello-world\" }, \"hello-withPS\");\nwindowsNodeObject.OpenRDP(\"1.1.1.1/32\");","version":"1"},"java":{"source":"Object windowsNodeObject = DomainWindowsNode.Builder.create(stack, \"WindowsNode\")\n .vpc(vpc)\n .madSsmParameters(Map.of())\n .build();\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(List.of(\"echo hello-world\"), \"hello\");\nwindowsNodeObject.runPSwithDomainAdmin(List.of(\"Write-Host hello-world\"), \"hello-withPS\");\nwindowsNodeObject.openRDP(\"1.1.1.1/32\");","version":"1"},"go":{"source":"windowsNodeObject := #error#.NewDomainWindowsNode(stack, jsii.String(\"WindowsNode\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"madSsmParameters\": map[string]interface{}{\n\t},\n})\n\n// Special Methods:\nwindowsNodeObject.runPsCommands([]interface{}{\n\tjsii.String(\"echo hello-world\"),\n}, jsii.String(\"hello\"))\nwindowsNodeObject.runPSwithDomainAdmin([]interface{}{\n\tjsii.String(\"Write-Host hello-world\"),\n}, jsii.String(\"hello-withPS\"))\nwindowsNodeObject.openRDP(jsii.String(\"1.1.1.1/32\"))","version":"1"},"$":{"source":"const windowsNodeObject = new skylight.compute.DomainWindowsNode(\n stack,\n 'WindowsNode',\n {\n vpc: vpc,\n madSsmParameters: {}, //pointer to the Secret that holds the Domain Admin username and password\n }\n);\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(['echo hello-world'], 'hello');\nwindowsNodeObject.runPSwithDomainAdmin(\n ['Write-Host hello-world'],\n 'hello-withPS'\n);\nwindowsNodeObject.openRDP('1.1.1.1/32');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":60}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst windowsNodeObject = new skylight.compute.DomainWindowsNode(\n stack,\n 'WindowsNode',\n {\n vpc: vpc,\n madSsmParameters: {}, //pointer to the Secret that holds the Domain Admin username and password\n }\n);\n\n// Special Methods:\nwindowsNodeObject.runPsCommands(['echo hello-world'], 'hello');\nwindowsNodeObject.runPSwithDomainAdmin(\n ['Write-Host hello-world'],\n 'hello-withPS'\n);\nwindowsNodeObject.openRDP('1.1.1.1/32');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":6,"80":14,"210":2,"211":2,"212":5,"214":3,"215":1,"244":1,"245":3,"261":1,"262":1,"304":2},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"ab0288379c126b4d72c0cd4673f48523e65b5586b97d40861d888d820e1d1de9":{"translations":{"python":{"source":"ad = skylight.authentication.AwsManagedMicrosoftAd(stack, \"AwsManagedMicrosoftAdR53\",\n vpc=vpc,\n edition=\"Enterprise\", # Optional\n secret=Secret(stack, \"test-secret\"), # Optional\n domain_name=\"test-domain\", # Optional\n secret_name=\"custom-secret-name\", # Optional\n create_worker=False\n)\nad.managed_active_directory.create_aDGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\")","version":"2"},"csharp":{"source":"var ad = new skylight.Authentication.AwsManagedMicrosoftAd(stack, \"AwsManagedMicrosoftAdR53\", new Struct {\n Vpc = vpc,\n Edition = \"Enterprise\", // Optional\n Secret = new Secret(stack, \"test-secret\"), // Optional\n DomainName = \"test-domain\", // Optional\n SecretName = \"custom-secret-name\", // Optional\n CreateWorker = false\n});\nad.ManagedActiveDirectory.CreateADGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\");","version":"1"},"java":{"source":"Object ad = AwsManagedMicrosoftAd.Builder.create(stack, \"AwsManagedMicrosoftAdR53\")\n .vpc(vpc)\n .edition(\"Enterprise\") // Optional\n .secret(new Secret(stack, \"test-secret\")) // Optional\n .domainName(\"test-domain\") // Optional\n .secretName(\"custom-secret-name\") // Optional\n .createWorker(false)\n .build();\nad.managedActiveDirectory.createADGroup(\"MyADGroup\", \"My AD Group Created by CDK-Skylight!\");","version":"1"},"go":{"source":"ad := #error#.NewAwsManagedMicrosoftAd(stack, jsii.String(\"AwsManagedMicrosoftAdR53\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"edition\": jsii.String(\"Enterprise\"),\n\t // Optional\n\t\"secret\": NewSecret(stack, jsii.String(\"test-secret\")),\n\t // Optional\n\t\"domainName\": jsii.String(\"test-domain\"),\n\t // Optional\n\t\"secretName\": jsii.String(\"custom-secret-name\"),\n\t // Optional\n\t\"createWorker\": jsii.Boolean(false),\n})\nad.managedActiveDirectory.createADGroup(jsii.String(\"MyADGroup\"), jsii.String(\"My AD Group Created by CDK-Skylight!\"))","version":"1"},"$":{"source":"const ad = new skylight.authentication.AwsManagedMicrosoftAd(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n edition: 'Enterprise', // Optional\n secret: new Secret(stack, 'test-secret'), // Optional\n domainName: 'test-domain', // Optional\n secretName: 'custom-secret-name', // Optional\n createWorker: false, // Optional\n }\n);\nad.managedActiveDirectory.createADGroup(\n 'MyADGroup', // AD group name\n 'My AD Group Created by CDK-Skylight!' //AD Description\n);","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":96}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst ad = new skylight.authentication.AwsManagedMicrosoftAd(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n edition: 'Enterprise', // Optional\n secret: new Secret(stack, 'test-secret'), // Optional\n domainName: 'test-domain', // Optional\n secretName: 'custom-secret-name', // Optional\n createWorker: false, // Optional\n }\n);\nad.managedActiveDirectory.createADGroup(\n 'MyADGroup', // AD group name\n 'My AD Group Created by CDK-Skylight!' //AD Description\n);\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":7,"80":17,"97":1,"211":1,"212":4,"214":1,"215":2,"244":1,"245":1,"261":1,"262":1,"304":6},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"525e7934be057f783514e4f703ed721815680aaeff9bb1c2de653e1726e4590c":{"translations":{"python":{"source":"ad = skylight.authentication.AwsManagedMicrosoftAdR53(stack, \"AwsManagedMicrosoftAdR53\",\n vpc=vpc\n)","version":"2"},"csharp":{"source":"var ad = new skylight.Authentication.AwsManagedMicrosoftAdR53(stack, \"AwsManagedMicrosoftAdR53\", new Struct {\n Vpc = vpc\n});","version":"1"},"java":{"source":"Object ad = AwsManagedMicrosoftAdR53.Builder.create(stack, \"AwsManagedMicrosoftAdR53\")\n .vpc(vpc)\n .build();","version":"1"},"go":{"source":"ad := #error#.NewAwsManagedMicrosoftAdR53(stack, jsii.String(\"AwsManagedMicrosoftAdR53\"), map[string]interface{}{\n\t\"vpc\": vpc,\n})","version":"1"},"$":{"source":"const ad = new skylight.authentication.AwsManagedMicrosoftAdR53(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n }\n);","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":121}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst ad = new skylight.authentication.AwsManagedMicrosoftAdR53(\n stack,\n 'AwsManagedMicrosoftAdR53',\n {\n vpc: vpc,\n }\n);\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":1,"80":7,"211":1,"212":2,"215":1,"244":1,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"3f35277eb29cbff61bef45cc6f29ee9610bfc0d4586e722b6328c1dc3d0eb88e":{"translations":{"python":{"source":"self.fsx_windows = skylight.storage.FSxWindows(self, \"FSx\",\n vpc=vpc,\n ad_parameters_store=ad_parameters_store\n)\nself.fsx_windows.create_folder(\"myFolderStorageOnFSx\")","version":"2"},"csharp":{"source":"FsxWindows = new skylight.Storage.FSxWindows(this, \"FSx\", new Struct {\n Vpc = vpc,\n AdParametersStore = adParametersStore\n});\nFsxWindows.CreateFolder(\"myFolderStorageOnFSx\");","version":"1"},"java":{"source":"this.fsxWindows = FSxWindows.Builder.create(this, \"FSx\")\n .vpc(vpc)\n .adParametersStore(adParametersStore)\n .build();\nthis.fsxWindows.createFolder(\"myFolderStorageOnFSx\");","version":"1"},"go":{"source":"this.fsxWindows = #error#.NewFSxWindows(this, jsii.String(\"FSx\"), map[string]interface{}{\n\t\"vpc\": vpc,\n\t\"adParametersStore\": adParametersStore,\n})\nthis.fsxWindows.createFolder(jsii.String(\"myFolderStorageOnFSx\"))","version":"1"},"$":{"source":"this.fsxWindows = new skylight.storage.FSxWindows(this, 'FSx', {\n vpc: vpc,\n adParametersStore: adParametersStore,\n});\nthis.fsxWindows.createFolder('myFolderStorageOnFSx');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":145}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nthis.fsxWindows = new skylight.storage.FSxWindows(this, 'FSx', {\n vpc: vpc,\n adParametersStore: adParametersStore,\n});\nthis.fsxWindows.createFolder('myFolderStorageOnFSx');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":2,"64":1,"80":10,"110":3,"211":1,"212":5,"214":1,"215":1,"227":1,"245":2,"304":2},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"fdbe21e61096946db9edf63a780257ab5ddcaaf88c23a60d4d64de1b016eca2f":{"translations":{"python":{"source":"cluster = WindowsEKSCluster(stack, \"ElasticCluster\",\n vpc=aws_ec2.Vpc(stack, \"MyVpc\")\n)","version":"2"},"csharp":{"source":"var cluster = new WindowsEKSCluster(stack, \"ElasticCluster\", new Struct {\n Vpc = new aws_ec2.Vpc(stack, \"MyVpc\", new Struct { })\n});","version":"1"},"java":{"source":"Object cluster = WindowsEKSCluster.Builder.create(stack, \"ElasticCluster\")\n .vpc(Vpc.Builder.create(stack, \"MyVpc\").build())\n .build();","version":"1"},"go":{"source":"cluster := NewWindowsEKSCluster(stack, jsii.String(\"ElasticCluster\"), map[string]interface{}{\n\t\"vpc\": aws_ec2.NewVpc(stack, jsii.String(\"MyVpc\"), map[string]interface{}{\n\t}),\n})","version":"1"},"$":{"source":"const cluster = new WindowsEKSCluster(stack, 'ElasticCluster', {\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n}); // Creates EKS Cluster with Windows support","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":161}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst cluster = new WindowsEKSCluster(stack, 'ElasticCluster', {\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":2,"80":7,"211":2,"212":1,"215":2,"244":1,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"},"fd61853ea4882919c96f9d218530f0b80819d72dd856a2c6271aa298448adf9b":{"translations":{"python":{"source":"my_nodes = WindowsEKSNodes(stack, \"WindowsEKSNodes\",\n # Creates AutoScaling group for Windows Support\n vpc=aws_ec2.Vpc(stack, \"MyVpc\")\n)\n\nmy_nodes.add_ad_dependency(secret_object)\nmy_nodes.add_storage_dependency(secret_object, storage_mount)\nmy_nodes.add_eKSDependency(eks_cluster.eks_cluster)\nmy_nodes.add_local_cred_file(secret_object, \"myEKSNodes\", \"myWebApp\")","version":"2"},"csharp":{"source":"var myNodes = new WindowsEKSNodes(stack, \"WindowsEKSNodes\", new Struct {\n // Creates AutoScaling group for Windows Support\n Vpc = new aws_ec2.Vpc(stack, \"MyVpc\", new Struct { })\n});\n\nmyNodes.AddAdDependency(secretObject);\nmyNodes.AddStorageDependency(secretObject, storageMount);\nmyNodes.AddEKSDependency(eks_cluster.EksCluster);\nmyNodes.AddLocalCredFile(secretObject, \"myEKSNodes\", \"myWebApp\");","version":"1"},"java":{"source":"Object myNodes = WindowsEKSNodes.Builder.create(stack, \"WindowsEKSNodes\")\n // Creates AutoScaling group for Windows Support\n .vpc(Vpc.Builder.create(stack, \"MyVpc\").build())\n .build();\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.getEksCluster());\nmyNodes.addLocalCredFile(secretObject, \"myEKSNodes\", \"myWebApp\");","version":"1"},"go":{"source":"myNodes := NewWindowsEKSNodes(stack, jsii.String(\"WindowsEKSNodes\"), map[string]interface{}{\n\t// Creates AutoScaling group for Windows Support\n\t\"vpc\": aws_ec2.NewVpc(stack, jsii.String(\"MyVpc\"), map[string]interface{}{\n\t}),\n})\n\nmyNodes.addAdDependency(secretObject)\nmyNodes.addStorageDependency(secretObject, storageMount)\nmyNodes.addEKSDependency(eks_cluster.eksCluster)\nmyNodes.addLocalCredFile(secretObject, jsii.String(\"myEKSNodes\"), jsii.String(\"myWebApp\"))","version":"1"},"$":{"source":"const myNodes = new WindowsEKSNodes(stack, 'WindowsEKSNodes', {\n // Creates AutoScaling group for Windows Support\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.eksCluster);\nmyNodes.addLocalCredFile(secretObject, 'myEKSNodes', 'myWebApp');","version":"0"}},"location":{"api":{"api":"moduleReadme","moduleFqn":"cdk-skylight"},"field":{"field":"markdown","line":171}},"didCompile":false,"fqnsReferenced":[],"fullSource":"// Fixture with packages imported, but nothing else\nimport { Construct } from 'constructs';\nimport {\n Stack,\n} from 'aws-cdk-lib';\n\nclass Fixture extends Stack {\n constructor(scope: Construct, id: string) {\n super(scope, id);\n\n // Code snippet begins after !show marker below\n/// !show\nconst myNodes = new WindowsEKSNodes(stack, 'WindowsEKSNodes', {\n // Creates AutoScaling group for Windows Support\n vpc: new aws_ec2.Vpc(stack, 'MyVpc', {}),\n});\n\nmyNodes.addAdDependency(secretObject);\nmyNodes.addStorageDependency(secretObject, storageMount);\nmyNodes.addEKSDependency(eks_cluster.eksCluster);\nmyNodes.addLocalCredFile(secretObject, 'myEKSNodes', 'myWebApp');\n/// !hide\n// Code snippet ended before !hide marker above\n }\n}","syntaxKindCounter":{"11":4,"80":21,"211":2,"212":6,"214":4,"215":2,"244":1,"245":4,"261":1,"262":1,"304":1},"fqnsFingerprint":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}}}
package/API.md CHANGED
@@ -56,7 +56,7 @@ new authentication.AwsManagedMicrosoftAd(scope: Construct, id: string, props: IA
56
56
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAd.toString">toString</a></code> | Returns a string representation of this construct. |
57
57
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAd.createADGroup">createADGroup</a></code> | *No description.* |
58
58
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAd.createServiceAccount">createServiceAccount</a></code> | *No description.* |
59
- | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAd.createWorker">createWorker</a></code> | *No description.* |
59
+ | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAd.runPSwithDomainAdmin">runPSwithDomainAdmin</a></code> | *No description.* |
60
60
 
61
61
  ---
62
62
 
@@ -110,21 +110,21 @@ public createServiceAccount(adServiceAccountName: string, servicePrincipalNames:
110
110
 
111
111
  ---
112
112
 
113
- ##### `createWorker` <a name="createWorker" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.createWorker"></a>
113
+ ##### `runPSwithDomainAdmin` <a name="runPSwithDomainAdmin" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.runPSwithDomainAdmin"></a>
114
114
 
115
115
  ```typescript
116
- public createWorker(domainName: string, domainPassword: ISecret): DomainWindowsNode
116
+ public runPSwithDomainAdmin(commands: string[], id: string): boolean
117
117
  ```
118
118
 
119
- ###### `domainName`<sup>Required</sup> <a name="domainName" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.createWorker.parameter.domainName"></a>
119
+ ###### `commands`<sup>Required</sup> <a name="commands" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.runPSwithDomainAdmin.parameter.commands"></a>
120
120
 
121
- - *Type:* string
121
+ - *Type:* string[]
122
122
 
123
123
  ---
124
124
 
125
- ###### `domainPassword`<sup>Required</sup> <a name="domainPassword" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.createWorker.parameter.domainPassword"></a>
125
+ ###### `id`<sup>Required</sup> <a name="id" id="cdk-skylight.authentication.AwsManagedMicrosoftAd.runPSwithDomainAdmin.parameter.id"></a>
126
126
 
127
- - *Type:* aws-cdk-lib.aws_secretsmanager.ISecret
127
+ - *Type:* string
128
128
 
129
129
  ---
130
130
 
@@ -298,7 +298,7 @@ new authentication.AwsManagedMicrosoftAdR53(scope: Construct, id: string, props:
298
298
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAdR53.toString">toString</a></code> | Returns a string representation of this construct. |
299
299
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createADGroup">createADGroup</a></code> | *No description.* |
300
300
  | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createServiceAccount">createServiceAccount</a></code> | *No description.* |
301
- | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createWorker">createWorker</a></code> | *No description.* |
301
+ | <code><a href="#cdk-skylight.authentication.AwsManagedMicrosoftAdR53.runPSwithDomainAdmin">runPSwithDomainAdmin</a></code> | *No description.* |
302
302
 
303
303
  ---
304
304
 
@@ -352,21 +352,21 @@ public createServiceAccount(adServiceAccountName: string, servicePrincipalNames:
352
352
 
353
353
  ---
354
354
 
355
- ##### `createWorker` <a name="createWorker" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createWorker"></a>
355
+ ##### `runPSwithDomainAdmin` <a name="runPSwithDomainAdmin" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.runPSwithDomainAdmin"></a>
356
356
 
357
357
  ```typescript
358
- public createWorker(domainName: string, domainPassword: ISecret): DomainWindowsNode
358
+ public runPSwithDomainAdmin(commands: string[], id: string): boolean
359
359
  ```
360
360
 
361
- ###### `domainName`<sup>Required</sup> <a name="domainName" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createWorker.parameter.domainName"></a>
361
+ ###### `commands`<sup>Required</sup> <a name="commands" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.runPSwithDomainAdmin.parameter.commands"></a>
362
362
 
363
- - *Type:* string
363
+ - *Type:* string[]
364
364
 
365
365
  ---
366
366
 
367
- ###### `domainPassword`<sup>Required</sup> <a name="domainPassword" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.createWorker.parameter.domainPassword"></a>
367
+ ###### `id`<sup>Required</sup> <a name="id" id="cdk-skylight.authentication.AwsManagedMicrosoftAdR53.runPSwithDomainAdmin.parameter.id"></a>
368
368
 
369
- - *Type:* aws-cdk-lib.aws_secretsmanager.ISecret
369
+ - *Type:* string
370
370
 
371
371
  ---
372
372
 
@@ -110,7 +110,8 @@ export declare class AwsManagedMicrosoftAd extends Construct {
110
110
  readonly domainWindowsNode?: skylight.compute.DomainWindowsNode;
111
111
  readonly secret: ISecret;
112
112
  constructor(scope: Construct, id: string, props: IAwsManagedMicrosoftAdProps);
113
- createWorker(domainName: string, domainPassword: ISecret): skylight.compute.DomainWindowsNode;
113
+ private createWorker;
114
+ runPSwithDomainAdmin(commands: string[], id: string): boolean;
114
115
  createADGroup(groupName: string, groupDescription: string): void;
115
116
  createServiceAccount(adServiceAccountName: string, servicePrincipalNames: string, principalsAllowedToRetrieveManagedPassword: string): void;
116
117
  }
@@ -119,10 +119,9 @@ class AwsManagedMicrosoftAd extends constructs_1.Construct {
119
119
  });
120
120
  if (this.props.createWorker) {
121
121
  this.domainWindowsNode = this.createWorker(this.props.domainName, this.secret);
122
- this.domainWindowsNode.runPSwithDomainAdmin([
123
- 'Add-WindowsFeature RSAT-AD-PowerShell',
124
- 'Stop-Computer -ComputerName localhost',
125
- ], 'ad-powershell');
122
+ this.domainWindowsNode.startInstance();
123
+ this.domainWindowsNode.runPSwithDomainAdmin(['Add-WindowsFeature RSAT-AD-PowerShell'], 'powershell');
124
+ this.domainWindowsNode.runPSwithDomainAdmin(['Start-Sleep -Seconds 600', 'Stop-Computer -ComputerName localhost'], 'shutdown');
126
125
  this.domainWindowsNode.instance.node.addDependency(this.microsoftAD);
127
126
  }
128
127
  else {
@@ -139,29 +138,25 @@ class AwsManagedMicrosoftAd extends constructs_1.Construct {
139
138
  usePrivateSubnet: true,
140
139
  });
141
140
  }
142
- // The function creates a Lambda to Start the Windows Worker, then creates SSM Document and Desired state in State Manager to schedule this document on the Worker.
143
- createADGroup(groupName, groupDescription) {
144
- if (this.domainWindowsNode) {
145
- this.domainWindowsNode.startInstance();
146
- this.domainWindowsNode.runPSwithDomainAdmin([
147
- `New-ADGroup -Name "${groupDescription}" -SamAccountName "${groupName}" -GroupScope DomainLocal`,
148
- 'Stop-Computer -ComputerName localhost',
149
- ], 'createAdGroup');
150
- }
151
- else {
152
- console.log("Can't create AD group when no Worker is defined");
141
+ runPSwithDomainAdmin(commands, id) {
142
+ if (!this.domainWindowsNode) {
143
+ console.log(`Can't run ${id} when no Worker is defined`);
144
+ return false;
153
145
  }
146
+ this.domainWindowsNode.runPSwithDomainAdmin(commands, id);
147
+ return true;
148
+ }
149
+ // The function creates SSM Document and Desired state in State Manager to schedule this document on the Worker.
150
+ createADGroup(groupName, groupDescription) {
151
+ this.runPSwithDomainAdmin([
152
+ `New-ADGroup -Name "${groupDescription}" -SamAccountName "${groupName}" -GroupScope DomainLocal`,
153
+ ], `createAdGroup(${groupName})`);
154
154
  }
155
155
  // Experimental
156
156
  createServiceAccount(adServiceAccountName, servicePrincipalNames, principalsAllowedToRetrieveManagedPassword) {
157
- if (this.domainWindowsNode) {
158
- this.domainWindowsNode.runPSwithDomainAdmin([
159
- `New-ADServiceAccount -Name "${adServiceAccountName}" -DnsHostName "${adServiceAccountName}.${this.props.domainName}" -ServicePrincipalNames "${servicePrincipalNames}" -PrincipalsAllowedToRetrieveManagedPassword "${principalsAllowedToRetrieveManagedPassword}"`,
160
- ], 'createServiceAccount');
161
- }
162
- else {
163
- console.log("Can't createServiceAccount when no Worker is defined");
164
- }
157
+ this.runPSwithDomainAdmin([
158
+ `New-ADServiceAccount -Name "${adServiceAccountName}" -DnsHostName "${adServiceAccountName}.${this.props.domainName}" -ServicePrincipalNames "${servicePrincipalNames}" -PrincipalsAllowedToRetrieveManagedPassword "${principalsAllowedToRetrieveManagedPassword}"`,
159
+ ], `createServiceAccount(${adServiceAccountName})`);
165
160
  }
166
161
  }
167
162
  exports.AwsManagedMicrosoftAd = AwsManagedMicrosoftAd;
@@ -229,4 +224,4 @@ class AwsManagedMicrosoftAdR53 extends AwsManagedMicrosoftAd {
229
224
  exports.AwsManagedMicrosoftAdR53 = AwsManagedMicrosoftAdR53;
230
225
  _b = JSII_RTTI_SYMBOL_1;
231
226
  AwsManagedMicrosoftAdR53[_b] = { fqn: "cdk-skylight.authentication.AwsManagedMicrosoftAdR53", version: "0.0.0" };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWQtYXV0aGVudGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2t5bGlnaHQtYXV0aGVudGljYXRpb24vYWQtYXV0aGVudGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILFVBQVU7QUFDViw2Q0FTcUI7QUFJckIsMkNBQXVDO0FBQ3ZDLHFDQUFxQztBQWlEckMsSUFBWSx5Q0FFWDtBQUZELFdBQVkseUNBQXlDO0lBQ25ELHdGQUEyQyxDQUFBO0FBQzdDLENBQUMsRUFGVyx5Q0FBeUMseURBQXpDLHlDQUF5QyxRQUVwRDtBQStCRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBTWxELFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQWtDO1FBRWxDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUM7UUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLFNBQVMsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsSUFBSTtZQUM5QyxzQkFBc0IsRUFBRSx5Q0FBeUMsQ0FBQyxHQUFHO1NBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7WUFDN0Is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RSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO2FBQzFEO1NBQ0YsQ0FDRixDQUFDO1FBRUYsSUFBSSxpQ0FBVyxDQUFDLDBCQUEwQixDQUN4QyxJQUFJLEVBQ0osMEJBQTBCLEVBQzFCO1lBQ0UsY0FBYyxFQUFFLGFBQWEsQ0FBQyxrQkFBa0I7WUFDaEQsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztTQUN2QixDQUNGLENBQUM7SUFDSixDQUFDOztBQWxFSCw0REFtRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgMjAyMSBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7XG4gIGF3c19kaXJlY3RvcnlzZXJ2aWNlIGFzIG1hZCxcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19yb3V0ZTUzcmVzb2x2ZXIgYXMgcjUzcmVzb2x2ZXIsXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSxcbiAgQ2ZuT3V0cHV0LFxuICBGbixcbiAgU3RhY2ssXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENmbk1pY3Jvc29mdEFEIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWRpcmVjdG9yeXNlcnZpY2UnO1xuaW1wb3J0IHsgU2VsZWN0ZWRTdWJuZXRzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBJU2VjcmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgc2t5bGlnaHQgZnJvbSAnLi4vaW5kZXgnO1xuLyoqXG4gKiBUaGUgcHJvcGVydGllcyBmb3IgdGhlIEF3c01hbmFnZWRNaWNyb3NvZnRBZCBjbGFzcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXdzTWFuYWdlZE1pY3Jvc29mdEFkUHJvcHMge1xuICAvKipcbiAgICogVGhlIGRvbWFpbiBuYW1lIGZvciB0aGUgQWN0aXZlIERpcmVjdG9yeSBEb21haW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJ2RvbWFpbi5hd3MnLlxuICAgKi9cbiAgZG9tYWluTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBlZGl0aW9uIHRvIHVzZSBmb3IgdGhlIEFjdGl2ZSBEaXJlY3RvcnkgRG9tYWluLlxuICAgKiBBbGxvd2VkIHZhbHVlczogRW50ZXJwcmlzZSB8IFN0YW5kYXJkXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1kaXJlY3RvcnlzZXJ2aWNlLW1pY3Jvc29mdGFkLmh0bWwjY2ZuLWRpcmVjdG9yeXNlcnZpY2UtbWljcm9zb2Z0YWQtZWRpdGlvblxuICAgKiBAZGVmYXVsdCAtICdTdGFuZGFyZCcuXG4gICAqL1xuICBlZGl0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHNlY3JldHMgbWFuYWdlciBzZWNyZXQgdG8gdXNlIG11c3QgYmUgaW4gZm9ybWF0OlxuICAgKiAne0RvbWFpbjogPGRvbWFpbi5uYW1lPiwgVXNlcklEOiAnQWRtaW4nLCBQYXNzd29yZDogJzxwYXNzd29yZD4nfSdcbiAgICogQGRlZmF1bHQgLSAnUmFuZG9tbHkgZ2VuZXJhdGVkIGFuZCBzdG9yZWQgaW4gU2VjcmV0IE1hbmFnZXInLlxuICAgKi9cbiAgc2VjcmV0Pzogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcbiAgLyoqXG4gICAqIFRoZSBzZWNyZXQgbmFtZSB0byBzYXZlIHRoZSBEb21haW4gQWRtaW4gb2JqZWN0XG4gICAqIEBkZWZhdWx0IC0gJzxkb21haW4ubmFtZT4tc2VjcmV0Jy5cbiAgICovXG4gIHNlY3JldE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRvIHVzZSwgbXVzdCBoYXZlIHByaXZhdGUgc3VibmV0cy5cbiAgICovXG4gIHZwYzogZWMyLklWcGM7XG4gIC8qKlxuICAgKiBWUEMgc3VibmV0IHNlbGVjdGlvbiwgc3VibmV0cyBtdXN0IGJlIHByaXZhdGUgYW5kIGV4YWN0bHkgMlxuICAgKi9cbiAgdnBjU3VibmV0cz86IGVjMi5TZWxlY3RlZFN1Ym5ldHM7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBzdG9yZSB0byBzYXZlIHRoZSBkaXJlY3RvcnkgcGFyYW1ldGVycyAoQWZ0ZXIgZGVwbG95ZWQpXG4gICAqL1xuICBjb25maWd1cmF0aW9uU3RvcmU/OiBJQXdzTWFuYWdlZE1pY3Jvc29mdEFkUGFyYW1ldGVycztcblxuICAvKipcbiAgICogQ3JlYXRlIERvbWFpbiBqb2luZWQgbWFjaGluZSB0byBiZSB1c2VkIHRvIHJ1biBQb3dlcnNoZWxsIGNvbW1hbmRzIHRvIHRoYXQgZGlyZWN0b3J5LiAoaS5lIENyZWF0ZSBBZCBHcm91cClcbiAgICogQGRlZmF1bHQgLSAndHJ1ZScuXG4gICAqL1xuICBjcmVhdGVXb3JrZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBBd3NNYW5hZ2VkTWljcm9zb2Z0Q29uZmlndXJhdGlvblN0b3JlVHlwZSB7XG4gIFNTTSA9ICdBV1MgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZScsXG59XG5cbi8qKlxuICogVGhlIHByb3BlcnRpZXMgb2YgYW4gRG9tYWluV2luZG93c05vZGVQcm9wcywgcmVxdWlyZXMgQWN0aXZlIERpcmVjdG9yeSBwYXJhbWV0ZXIgdG8gcmVhZCB0aGUgU2VjcmV0IHRvIGpvaW4gdGhlIGRvbWFpblxuICogRGVmYXVsdCBzZXR0aW5nOiBEb21haW4gam9pbmVkLCBtNS4yeGxhcmdlLCBsYXRlc3Qgd2luZG93cywgTWFuYWdlZCBieSBTU00uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUF3c01hbmFnZWRNaWNyb3NvZnRBZFBhcmFtZXRlcnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIENvbmZpZ3VyYXRpb24gU3RvcmUgVHlwZSB0byB1c2VcbiAgICogQGRlZmF1bHQgLSAnQVdTIFN5c3RlbXMgTWFuYWdlciBQYXJhbWV0ZXIgU3RvcmUnLlxuICAgKi9cbiAgY29uZmlndXJhdGlvblN0b3JlVHlwZT86IEF3c01hbmFnZWRNaWNyb3NvZnRDb25maWd1cmF0aW9uU3RvcmVUeXBlO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNTTSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgc2VjcmV0IG5hbWUgaW4gU2VjcmV0cyBNYW5hZ2VyXG4gICAqIEBkZWZhdWx0IC0gJ2RvbWFpbi1zZWNyZXQnLlxuICAgKi9cbiAgc2VjcmV0UG9pbnRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNTTSBPYmplY3QgdGhhdCBjb250YWlucyB0aGUgRGlyZWN0b3J5IElEXG4gICAqIEBkZWZhdWx0IC0gJ2RpcmVjdG9yeUlEJy5cbiAgICovXG4gIGRpcmVjdG9yeUlEUG9pbnRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFNTTSBuYW1lc3BhY2UgdG8gcmVhZC93cml0ZSBwYXJhbWV0ZXJzIHRvXG4gICAqIEBkZWZhdWx0IC0gJ2Nkay1za3lsaWdodCcuXG4gICAqL1xuICBuYW1lc3BhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBBZCBBdXRoZW50aWNhdGlvbiByZXByZXNlbnRzIGFuIGludGVncmF0aW9uIHBhdHRlcm4gb2YgTWFuYWdlZCBBRCBhbmQgUm91dGUgNTMgUmVzb2x2ZXIgaW4gYSBzcGVjaWZpYyBWUENcbiAqXG4gKiBUaGUgQ29uc3RydWN0IGNyZWF0ZXMgTWFuYWdlZCBBRCB3aXRoIHRoZSBwcm92aWRlZCBTZWNyZXQgKFNlY3JldHMgTWFuYWdlcikgb3IgZ2VuZXJhdGVzIGEgbmV3IFNlY3JldC5cbiAqIFRoZSBzZWNyZXQgc2F2ZWQgdG8gU1NNIHBhcmFtZXRlciBzdG9yZSBzbyBvdGhlcnMgY2FuIHVzZSBpdCB3aXRoIG90aGVyIENvbnN0cnVjdHMgKFN1Y2ggYXMgV2luZG93cyBub2RlIG9yIEZTeClcbiAqIFRoZSBwcm92aWRlZCBWUEMgb3IgdGhlIG5ldyBjcmVhdGVkIFZQQyB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gZm9yd2FyZCBETlMgcmVxdWVzdHMgdG8gdGhlIE1hbmFnZWQgQUQgd2l0aCBSb3V0ZTUzIFJlc29sdmVyc1xuICogVGhlIGNvbnN0cnVjdCBhbHNvIGNyZWF0ZXMgKG9wdGlvbmFsbHkpIHQzLm5hbm8gbWFjaGluZSB0aGF0IGlzIHBhcnQgb2YgdGhlIGRvbWFpbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHJ1biBhZG1pbi10YXNrcyAoc3VjaCBhcyBjcmVhdGVBREdyb3VwKVxuICpcbiAqIFRoZSBjcmVhdGVBREdyb3VwKCkgbWV0aG9kIGNyZWF0ZXMgYW4gQWN0aXZlIERpcmVjdG9yeSBwZXJtaXNzaW9uIGdyb3VwIGluIHRoZSBkb21haW4sIHVzaW5nIHRoZSBkb21haW4gYWRtaW4gdXNlci5cbiAqIFBsZWFzZSBub3RlOiBXaGVuIGNhbGxpbmcgY3JlYXRlQURHcm91cCgpIEFQSSwgYSBMYW1iZGEgd2lsbCBiZSBjcmVhdGVkIHRvIHN0YXJ0IHRoZSB3b3JrZXIgbWFjaGluZSAoVXNpbmcgQVdTLVNESyksXG4gKiB0aGVuIGVhY2ggY29tbWFuZCB3aWxsIGJlIHNjaGVkdWxlZCB3aXRoIFN0YXRlIE1hbmFnZXIsIGFuZCB0aGUgaW5zdGFuY2Ugd2lsbCBiZSBzaHV0IGRvd24gYWZ0ZXIgY29tcGxldGUuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgQXdzTWFuYWdlZE1pY3Jvc29mdEFkIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgbWljcm9zb2Z0QUQ6IENmbk1pY3Jvc29mdEFEO1xuICByZWFkb25seSBhZFBhcmFtZXRlcnM6IElBd3NNYW5hZ2VkTWljcm9zb2Z0QWRQYXJhbWV0ZXJzO1xuICByZWFkb25seSBwcm9wczogSUF3c01hbmFnZWRNaWNyb3NvZnRBZFByb3BzO1xuICByZWFkb25seSBkb21haW5XaW5kb3dzTm9kZT86IHNreWxpZ2h0LmNvbXB1dGUuRG9tYWluV2luZG93c05vZGU7XG4gIHJlYWRvbmx5IHNlY3JldDogSVNlY3JldDtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBJQXdzTWFuYWdlZE1pY3Jvc29mdEFkUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMucHJvcHMuZG9tYWluTmFtZSA9IHByb3BzLmRvbWFpbk5hbWUgPz8gJ2RvbWFpbi5hd3MnO1xuICAgIHRoaXMucHJvcHMuZWRpdGlvbiA9IHByb3BzLmVkaXRpb24gPz8gJ1N0YW5kYXJkJztcbiAgICB0aGlzLnByb3BzLnNlY3JldE5hbWUgPSBwcm9wcy5zZWNyZXROYW1lID8/IGAke3Byb3BzLmRvbWFpbk5hbWV9LXNlY3JldGA7XG4gICAgdGhpcy5wcm9wcy5jcmVhdGVXb3JrZXIgPSBwcm9wcy5jcmVhdGVXb3JrZXIgPz8gdHJ1ZTtcblxuICAgIHRoaXMuYWRQYXJhbWV0ZXJzID0gcHJvcHMuY29uZmlndXJhdGlvblN0b3JlID8/IHtcbiAgICAgIGNvbmZpZ3VyYXRpb25TdG9yZVR5cGU6IEF3c01hbmFnZWRNaWNyb3NvZnRDb25maWd1cmF0aW9uU3RvcmVUeXBlLlNTTSxcbiAgICB9O1xuICAgIHRoaXMuYWRQYXJhbWV0ZXJzLnNlY3JldFBvaW50ZXIgPVxuICAgICAgdGhpcy5hZFBhcmFtZXRlcnMuc2VjcmV0UG9pbnRlciA/PyAnZG9tYWluLXNlY3JldCc7XG5cbiAgICB0aGlzLmFkUGFyYW1ldGVycy5kaXJlY3RvcnlJRFBvaW50ZXIgPVxuICAgICAgdGhpcy5hZFBhcmFtZXRlcnMuZGlyZWN0b3J5SURQb2ludGVyID8/ICdkaXJlY3RvcnlJRCc7XG5cbiAgICBpZiAodGhpcy5hZFBhcmFtZXRlcnMubmFtZXNwYWNlKSB7XG4gICAgICB0aGlzLmFkUGFyYW1ldGVycy5uYW1lc3BhY2UgPSBgJHt0aGlzLmFkUGFyYW1ldGVycy5uYW1lc3BhY2V9L2F1dGhlbnRpY2F0aW9uL21hZGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRQYXJhbWV0ZXJzLm5hbWVzcGFjZSA9ICdjZGstc2t5bGlnaHQvYXV0aGVudGljYXRpb24vbWFkJztcbiAgICB9XG5cbiAgICB0aGlzLnNlY3JldCA9XG4gICAgICB0aGlzLnByb3BzLnNlY3JldCA/P1xuICAgICAgbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCAnU2VjcmV0Jywge1xuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBEb21haW46IHByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICBVc2VySUQ6ICdBZG1pbicsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6ICdQYXNzd29yZCcsXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBzZWNyZXROYW1lOiBwcm9wcy5zZWNyZXROYW1lLFxuICAgICAgfSk7XG5cbiAgICBuZXcgYXdzX3NzbS5TdHJpbmdQYXJhbWV0ZXIodGhpcywgJ21hZC1zZWNyZXROYW1lLXBvaW50ZXInLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBgLyR7dGhpcy5hZFBhcmFtZXRlcnMubmFtZXNwYWNlfS8ke3RoaXMuYWRQYXJhbWV0ZXJzLnNlY3JldFBvaW50ZXJ9YCxcbiAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLnByb3BzLnNlY3JldE5hbWUsXG4gICAgfSk7XG5cbiAgICBsZXQgc3VibmV0czogU2VsZWN0ZWRTdWJuZXRzO1xuICAgIGlmIChwcm9wcy52cGNTdWJuZXRzKSB7XG4gICAgICBpZiAocHJvcHMudnBjU3VibmV0cy5oYXNQdWJsaWMgfHwgcHJvcHMudnBjU3VibmV0cy5zdWJuZXRzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0EgcHVibGljIHN1Ym5ldCBvciBub3QgZXhhY3RseSAyIHN1Ym5ldHMgd2hlcmUgcGFzc2VkIGluLCBwbGVhc2UgcGFzcyBpbiB0d28gcHJpdmF0ZSBzdWJuZXRzJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHN1Ym5ldHMgPSBwcm9wcy52cGNTdWJuZXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdWJuZXRzID1cbiAgICAgICAgcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVQsXG4gICAgICAgIH0pID8/XG4gICAgICAgIHByb3BzLnZwYy5zZWxlY3RTdWJuZXRzKHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdzZWNyZXQtdmFsdWUtaGludCcsIHtcbiAgICAgIHZhbHVlOiBgYXdzIHNlY3JldHNtYW5hZ2VyIGdldC1zZWNyZXQtdmFsdWUgLS1zZWNyZXQtaWQgJHtcbiAgICAgICAgdGhpcy5zZWNyZXQuc2VjcmV0QXJuXG4gICAgICB9IC0tcXVlcnkgU2VjcmV0U3RyaW5nIC0tb3V0cHV0IHRleHQgLS1yZWdpb24gJHtTdGFjay5vZihzY29wZSkucmVnaW9ufWAsXG4gICAgfSk7XG5cbiAgICB0aGlzLm1pY3Jvc29mdEFEID0gbmV3IG1hZC5DZm5NaWNyb3NvZnRBRChcbiAgICAgIHRoaXMsXG4gICAgICAnQVdTLU1hbmFnZWQtTWljcm9zb2Z0LUFEJyxcbiAgICAgIHtcbiAgICAgICAgcGFzc3dvcmQ6IHRoaXMuc2VjcmV0XG4gICAgICAgICAgLnNlY3JldFZhbHVlRnJvbUpzb24oJ1Bhc3N3b3JkJylcbiAgICAgICAgICAudW5zYWZlVW53cmFwKCkudG9TdHJpbmcoKSxcbiAgICAgICAgZWRpdGlvbjogcHJvcHMuZWRpdGlvbixcbiAgICAgICAgbmFtZTogdGhpcy5wcm9wcy5kb21haW5OYW1lLFxuICAgICAgICB2cGNTZXR0aW5nczoge1xuICAgICAgICAgIHN1Ym5ldElkczogW3N1Ym5ldHMuc3VibmV0SWRzWzBdLCBzdWJuZXRzLnN1Ym5ldElkc1sxXV0sXG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ21hZC1kbnMtaXBzJywge1xuICAgICAgdmFsdWU6IGAke0ZuLmpvaW4oJywnLCB0aGlzLm1pY3Jvc29mdEFELmF0dHJEbnNJcEFkZHJlc3Nlcyl9YCxcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ21hZC1kbnMtbmFtZScsIHtcbiAgICAgIHZhbHVlOiBgJHt0aGlzLnByb3BzLmRvbWFpbk5hbWV9YCxcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ21hZC1kaXJlY3RveUlEJywge1xuICAgICAgdmFsdWU6IGAke3RoaXMubWljcm9zb2Z0QUQucmVmfWAsXG4gICAgfSk7XG5cbiAgICBuZXcgYXdzX3NzbS5TdHJpbmdQYXJhbWV0ZXIodGhpcywgJ21hZC1kaXJlY3RvcnlJRC1wb2ludGVyJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogYC8ke3RoaXMuYWRQYXJhbWV0ZXJzLm5hbWVzcGFjZX0vJHt0aGlzLmFkUGFyYW1ldGVycy5kaXJlY3RvcnlJRFBvaW50ZXJ9YCxcbiAgICAgIHN0cmluZ1ZhbHVlOiB0aGlzLm1pY3Jvc29mdEFELnJlZixcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByb3BzLmNyZWF0ZVdvcmtlcikge1xuICAgICAgdGhpcy5kb21haW5XaW5kb3dzTm9kZSA9IHRoaXMuY3JlYXRlV29ya2VyKFxuICAgICAgICB0aGlzLnByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIHRoaXMuc2VjcmV0LFxuICAgICAgKTtcbiAgICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUucnVuUFN3aXRoRG9tYWluQWRtaW4oXG4gICAgICAgIFtcbiAgICAgICAgICAnQWRkLVdpbmRvd3NGZWF0dXJlIFJTQVQtQUQtUG93ZXJTaGVsbCcsXG4gICAgICAgICAgJ1N0b3AtQ29tcHV0ZXIgLUNvbXB1dGVyTmFtZSBsb2NhbGhvc3QnLFxuICAgICAgICBdLFxuICAgICAgICAnYWQtcG93ZXJzaGVsbCcsXG4gICAgICApO1xuICAgICAgdGhpcy5kb21haW5XaW5kb3dzTm9kZS5pbnN0YW5jZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5taWNyb3NvZnRBRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlcyBEb21haW5XaW5kb3dzTm9kZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBydW4gYWRtaW4tdGFza3MgdG8gdGhpcyBkaXJlY3RvcnlcbiAgY3JlYXRlV29ya2VyKFxuICAgIGRvbWFpbk5hbWU6IHN0cmluZyxcbiAgICBkb21haW5QYXNzd29yZDogSVNlY3JldCxcbiAgKTogc2t5bGlnaHQuY29tcHV0ZS5Eb21haW5XaW5kb3dzTm9kZSB7XG4gICAgcmV0dXJuIG5ldyBza3lsaWdodC5jb21wdXRlLkRvbWFpbldpbmRvd3NOb2RlKHRoaXMsICdtYWRXb3JrZXInLCB7XG4gICAgICBkb21haW5OYW1lOiBkb21haW5OYW1lLFxuICAgICAgcGFzc3dvcmRPYmplY3Q6IGRvbWFpblBhc3N3b3JkLFxuICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgIGluc3RhbmNlVHlwZTogJ3QzLnNtYWxsJyxcbiAgICAgIHVzZVByaXZhdGVTdWJuZXQ6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhIExhbWJkYSB0byBTdGFydCB0aGUgV2luZG93cyBXb3JrZXIsIHRoZW4gY3JlYXRlcyBTU00gRG9jdW1lbnQgYW5kIERlc2lyZWQgc3RhdGUgaW4gU3RhdGUgTWFuYWdlciB0byBzY2hlZHVsZSB0aGlzIGRvY3VtZW50IG9uIHRoZSBXb3JrZXIuXG4gIGNyZWF0ZUFER3JvdXAoZ3JvdXBOYW1lOiBzdHJpbmcsIGdyb3VwRGVzY3JpcHRpb246IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRvbWFpbldpbmRvd3NOb2RlKSB7XG4gICAgICB0aGlzLmRvbWFpbldpbmRvd3NOb2RlLnN0YXJ0SW5zdGFuY2UoKTtcbiAgICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUucnVuUFN3aXRoRG9tYWluQWRtaW4oXG4gICAgICAgIFtcbiAgICAgICAgICBgTmV3LUFER3JvdXAgLU5hbWUgXCIke2dyb3VwRGVzY3JpcHRpb259XCIgLVNhbUFjY291bnROYW1lIFwiJHtncm91cE5hbWV9XCIgLUdyb3VwU2NvcGUgRG9tYWluTG9jYWxgLFxuICAgICAgICAgICdTdG9wLUNvbXB1dGVyIC1Db21wdXRlck5hbWUgbG9jYWxob3N0JyxcbiAgICAgICAgXSxcbiAgICAgICAgJ2NyZWF0ZUFkR3JvdXAnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDYW4ndCBjcmVhdGUgQUQgZ3JvdXAgd2hlbiBubyBXb3JrZXIgaXMgZGVmaW5lZFwiKTtcbiAgICB9XG4gIH1cblxuICAvLyBFeHBlcmltZW50YWxcbiAgY3JlYXRlU2VydmljZUFjY291bnQoXG4gICAgYWRTZXJ2aWNlQWNjb3VudE5hbWU6IHN0cmluZyxcbiAgICBzZXJ2aWNlUHJpbmNpcGFsTmFtZXM6IHN0cmluZyxcbiAgICBwcmluY2lwYWxzQWxsb3dlZFRvUmV0cmlldmVNYW5hZ2VkUGFzc3dvcmQ6IHN0cmluZyxcbiAgKSB7XG4gICAgaWYgKHRoaXMuZG9tYWluV2luZG93c05vZGUpIHtcbiAgICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUucnVuUFN3aXRoRG9tYWluQWRtaW4oXG4gICAgICAgIFtcbiAgICAgICAgICBgTmV3LUFEU2VydmljZUFjY291bnQgLU5hbWUgXCIke2FkU2VydmljZUFjY291bnROYW1lfVwiIC1EbnNIb3N0TmFtZSBcIiR7YWRTZXJ2aWNlQWNjb3VudE5hbWV9LiR7dGhpcy5wcm9wcy5kb21haW5OYW1lfVwiIC1TZXJ2aWNlUHJpbmNpcGFsTmFtZXMgXCIke3NlcnZpY2VQcmluY2lwYWxOYW1lc31cIiAtUHJpbmNpcGFsc0FsbG93ZWRUb1JldHJpZXZlTWFuYWdlZFBhc3N3b3JkIFwiJHtwcmluY2lwYWxzQWxsb3dlZFRvUmV0cmlldmVNYW5hZ2VkUGFzc3dvcmR9XCJgLFxuICAgICAgICBdLFxuICAgICAgICAnY3JlYXRlU2VydmljZUFjY291bnQnLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXCJDYW4ndCBjcmVhdGVTZXJ2aWNlQWNjb3VudCB3aGVuIG5vIFdvcmtlciBpcyBkZWZpbmVkXCIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEEgQWQgQXV0aGVudGljYXRpb24gcmVwcmVzZW50cyBhbiBpbnRlZ3JhdGlvbiBwYXR0ZXJuIG9mIE1hbmFnZWQgQUQgYW5kIFJvdXRlIDUzIFJlc29sdmVyIGluIGEgc3BlY2lmaWMgVlBDXG4gKlxuICogVGhlIENvbnN0cnVjdCBjcmVhdGVzIE1hbmFnZWQgQUQgd2l0aCB0aGUgcHJvdmlkZWQgU2VjcmV0IChTZWNyZXRzIE1hbmFnZXIpIG9yIGdlbmVyYXRlcyBhIG5ldyBTZWNyZXQuXG4gKiBUaGUgc2VjcmV0IHNhdmVkIHRvIFNTTSBwYXJhbWV0ZXIgc3RvcmUgc28gb3RoZXJzIGNhbiB1c2UgaXQgd2l0aCBvdGhlciBDb25zdHJ1Y3RzIChTdWNoIGFzIFdpbmRvd3Mgbm9kZSBvciBGU3gpXG4gKiBUaGUgcHJvdmlkZWQgVlBDIG9yIHRoZSBuZXcgY3JlYXRlZCBWUEMgd2lsbCBiZSBjb25maWd1cmVkIHRvIGZvcndhcmQgRE5TIHJlcXVlc3RzIHRvIHRoZSBNYW5hZ2VkIEFEIHdpdGggUm91dGU1MyBSZXNvbHZlcnNcbiAqIFRoZSBjb25zdHJ1Y3QgYWxzbyBjcmVhdGVzIChvcHRpb25hbGx5KSB0My5uYW5vIG1hY2hpbmUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBkb21haW4gdGhhdCBjYW4gYmUgdXNlZCB0byBydW4gYWRtaW4tdGFza3MgKHN1Y2ggYXMgY3JlYXRlQURHcm91cClcbiAqXG4gKiBUaGUgY3JlYXRlQURHcm91cCgpIG1ldGhvZCBjcmVhdGVzIGFuIEFjdGl2ZSBEaXJlY3RvcnkgcGVybWlzc2lvbiBncm91cCBpbiB0aGUgZG9tYWluLCB1c2luZyB0aGUgZG9tYWluIGFkbWluIHVzZXIuXG4gKiBQbGVhc2Ugbm90ZTogV2hlbiBjYWxsaW5nIGNyZWF0ZUFER3JvdXAoKSBBUEksIGEgTGFtYmRhIHdpbGwgYmUgY3JlYXRlZCB0byBzdGFydCB0aGUgd29ya2VyIG1hY2hpbmUgKFVzaW5nIEFXUy1TREspLFxuICogdGhlbiBlYWNoIGNvbW1hbmQgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aCBTdGF0ZSBNYW5hZ2VyLCBhbmQgdGhlIGluc3RhbmNlIHdpbGwgYmUgc2h1dCBkb3duIGFmdGVyIGNvbXBsZXRlLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hbmFnZWRNaWNyb3NvZnRBZFI1MyBleHRlbmRzIEF3c01hbmFnZWRNaWNyb3NvZnRBZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUF3c01hbmFnZWRNaWNyb3NvZnRBZFByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGxldCBzdWJuZXRzOiBTZWxlY3RlZFN1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwY1N1Ym5ldHMpIHtcbiAgICAgIGlmIChwcm9wcy52cGNTdWJuZXRzLmhhc1B1YmxpYyB8fCBwcm9wcy52cGNTdWJuZXRzLnN1Ym5ldHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQSBwdWJsaWMgc3VibmV0IG9yIG5vdCBleGFjdGx5IDIgc3VibmV0cyB3aGVyZSBwYXNzZWQgaW4sIHBsZWFzZSBwYXNzIGluIHR3byBwcml2YXRlIHN1Ym5ldHMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3VibmV0cyA9IHByb3BzLnZwY1N1Ym5ldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym5ldHMgPVxuICAgICAgICBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCxcbiAgICAgICAgfSkgPz9cbiAgICAgICAgcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNnID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdyNTMtb3V0Ym91bmQtcmVzb2x2ZXItU0cnLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KTtcbiAgICBzZy5hZGRJbmdyZXNzUnVsZShlYzIuUGVlci5pcHY0KHByb3BzLnZwYy52cGNDaWRyQmxvY2spLCBlYzIuUG9ydC51ZHAoNTMpKTtcbiAgICBzZy5hZGRJbmdyZXNzUnVsZShlYzIuUGVlci5pcHY0KHByb3BzLnZwYy52cGNDaWRyQmxvY2spLCBlYzIuUG9ydC50Y3AoNTMpKTtcblxuICAgIGNvbnN0IG91dEJvdW5kUmVzb2x2ZXIgPSBuZXcgcjUzcmVzb2x2ZXIuQ2ZuUmVzb2x2ZXJFbmRwb2ludChcbiAgICAgIHRoaXMsXG4gICAgICAnUjUzLVJlc29sdmVyLUVuZHBvaW50JyxcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aW9uOiAnT1VUQk9VTkQnLFxuICAgICAgICBpcEFkZHJlc3Nlczogc3VibmV0cy5zdWJuZXRJZHMubWFwKChzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgc3VibmV0SWQ6IHMgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzZy5zZWN1cml0eUdyb3VwSWRdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJSdWxlcyA9IG5ldyByNTNyZXNvbHZlci5DZm5SZXNvbHZlclJ1bGUoXG4gICAgICB0aGlzLFxuICAgICAgJ1I1My1SZXNvbHZlLVJ1bGUnLFxuICAgICAge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUhLFxuICAgICAgICByZXNvbHZlckVuZHBvaW50SWQ6IG91dEJvdW5kUmVzb2x2ZXIucmVmLFxuICAgICAgICBydWxlVHlwZTogJ0ZPUldBUkQnLFxuICAgICAgICB0YXJnZXRJcHM6IFtcbiAgICAgICAgICB7IGlwOiBGbi5zZWxlY3QoMCwgdGhpcy5taWNyb3NvZnRBRC5hdHRyRG5zSXBBZGRyZXNzZXMpIH0sXG4gICAgICAgICAgeyBpcDogRm4uc2VsZWN0KDEsIHRoaXMubWljcm9zb2Z0QUQuYXR0ckRuc0lwQWRkcmVzc2VzKSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgbmV3IHI1M3Jlc29sdmVyLkNmblJlc29sdmVyUnVsZUFzc29jaWF0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdSNTMtUmVzb2x2ZXItQXNzb2NpYXRpb24nLFxuICAgICAge1xuICAgICAgICByZXNvbHZlclJ1bGVJZDogcmVzb2x2ZXJSdWxlcy5hdHRyUmVzb2x2ZXJSdWxlSWQsXG4gICAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWQtYXV0aGVudGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2t5bGlnaHQtYXV0aGVudGljYXRpb24vYWQtYXV0aGVudGljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILFVBQVU7QUFDViw2Q0FTcUI7QUFJckIsMkNBQXVDO0FBQ3ZDLHFDQUFxQztBQWlEckMsSUFBWSx5Q0FFWDtBQUZELFdBQVkseUNBQXlDO0lBQ25ELHdGQUEyQyxDQUFBO0FBQzdDLENBQUMsRUFGVyx5Q0FBeUMseURBQXpDLHlDQUF5QyxRQUVwRDtBQStCRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBTWxELFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQWtDO1FBRWxDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUM7UUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLFNBQVMsQ0FBQztRQUN6RSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsSUFBSTtZQUM5QyxzQkFBc0IsRUFBRSx5Q0FBeUMsQ0FBQyxHQUFHO1NBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWE7WUFDN0Is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QUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ3pELEVBQUUsRUFBRSxFQUFFLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7YUFDMUQ7U0FDRixDQUNGLENBQUM7UUFFRixJQUFJLGlDQUFXLENBQUMsMEJBQTBCLENBQ3hDLElBQUksRUFDSiwwQkFBMEIsRUFDMUI7WUFDRSxjQUFjLEVBQUUsYUFBYSxDQUFDLGtCQUFrQjtZQUNoRCxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1NBQ3ZCLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBbEVILDREQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIxIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHtcbiAgYXdzX2RpcmVjdG9yeXNlcnZpY2UgYXMgbWFkLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX3JvdXRlNTNyZXNvbHZlciBhcyByNTNyZXNvbHZlcixcbiAgYXdzX3NlY3JldHNtYW5hZ2VyIGFzIHNlY3JldHNtYW5hZ2VyLFxuICBhd3Nfc3NtLFxuICBDZm5PdXRwdXQsXG4gIEZuLFxuICBTdGFjayxcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuTWljcm9zb2Z0QUQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZGlyZWN0b3J5c2VydmljZSc7XG5pbXBvcnQgeyBTZWxlY3RlZFN1Ym5ldHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IElTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBza3lsaWdodCBmcm9tICcuLi9pbmRleCc7XG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgQXdzTWFuYWdlZE1pY3Jvc29mdEFkIGNsYXNzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElBd3NNYW5hZ2VkTWljcm9zb2Z0QWRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZG9tYWluIG5hbWUgZm9yIHRoZSBBY3RpdmUgRGlyZWN0b3J5IERvbWFpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSAnZG9tYWluLmF3cycuXG4gICAqL1xuICBkb21haW5OYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGVkaXRpb24gdG8gdXNlIGZvciB0aGUgQWN0aXZlIERpcmVjdG9yeSBEb21haW4uXG4gICAqIEFsbG93ZWQgdmFsdWVzOiBFbnRlcnByaXNlIHwgU3RhbmRhcmRcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWRpcmVjdG9yeXNlcnZpY2UtbWljcm9zb2Z0YWQuaHRtbCNjZm4tZGlyZWN0b3J5c2VydmljZS1taWNyb3NvZnRhZC1lZGl0aW9uXG4gICAqIEBkZWZhdWx0IC0gJ1N0YW5kYXJkJy5cbiAgICovXG4gIGVkaXRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2VjcmV0cyBtYW5hZ2VyIHNlY3JldCB0byB1c2UgbXVzdCBiZSBpbiBmb3JtYXQ6XG4gICAqICd7RG9tYWluOiA8ZG9tYWluLm5hbWU+LCBVc2VySUQ6ICdBZG1pbicsIFBhc3N3b3JkOiAnPHBhc3N3b3JkPid9J1xuICAgKiBAZGVmYXVsdCAtICdSYW5kb21seSBnZW5lcmF0ZWQgYW5kIHN0b3JlZCBpbiBTZWNyZXQgTWFuYWdlcicuXG4gICAqL1xuICBzZWNyZXQ/OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICAvKipcbiAgICogVGhlIHNlY3JldCBuYW1lIHRvIHNhdmUgdGhlIERvbWFpbiBBZG1pbiBvYmplY3RcbiAgICogQGRlZmF1bHQgLSAnPGRvbWFpbi5uYW1lPi1zZWNyZXQnLlxuICAgKi9cbiAgc2VjcmV0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gdXNlLCBtdXN0IGhhdmUgcHJpdmF0ZSBzdWJuZXRzLlxuICAgKi9cbiAgdnBjOiBlYzIuSVZwYztcbiAgLyoqXG4gICAqIFZQQyBzdWJuZXQgc2VsZWN0aW9uLCBzdWJuZXRzIG11c3QgYmUgcHJpdmF0ZSBhbmQgZXhhY3RseSAyXG4gICAqL1xuICB2cGNTdWJuZXRzPzogZWMyLlNlbGVjdGVkU3VibmV0cztcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHN0b3JlIHRvIHNhdmUgdGhlIGRpcmVjdG9yeSBwYXJhbWV0ZXJzIChBZnRlciBkZXBsb3llZClcbiAgICovXG4gIGNvbmZpZ3VyYXRpb25TdG9yZT86IElBd3NNYW5hZ2VkTWljcm9zb2Z0QWRQYXJhbWV0ZXJzO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgRG9tYWluIGpvaW5lZCBtYWNoaW5lIHRvIGJlIHVzZWQgdG8gcnVuIFBvd2Vyc2hlbGwgY29tbWFuZHMgdG8gdGhhdCBkaXJlY3RvcnkuIChpLmUgQ3JlYXRlIEFkIEdyb3VwKVxuICAgKiBAZGVmYXVsdCAtICd0cnVlJy5cbiAgICovXG4gIGNyZWF0ZVdvcmtlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEF3c01hbmFnZWRNaWNyb3NvZnRDb25maWd1cmF0aW9uU3RvcmVUeXBlIHtcbiAgU1NNID0gJ0FXUyBTeXN0ZW1zIE1hbmFnZXIgUGFyYW1ldGVyIFN0b3JlJyxcbn1cblxuLyoqXG4gKiBUaGUgcHJvcGVydGllcyBvZiBhbiBEb21haW5XaW5kb3dzTm9kZVByb3BzLCByZXF1aXJlcyBBY3RpdmUgRGlyZWN0b3J5IHBhcmFtZXRlciB0byByZWFkIHRoZSBTZWNyZXQgdG8gam9pbiB0aGUgZG9tYWluXG4gKiBEZWZhdWx0IHNldHRpbmc6IERvbWFpbiBqb2luZWQsIG01LjJ4bGFyZ2UsIGxhdGVzdCB3aW5kb3dzLCBNYW5hZ2VkIGJ5IFNTTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQXdzTWFuYWdlZE1pY3Jvc29mdEFkUGFyYW1ldGVycyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQ29uZmlndXJhdGlvbiBTdG9yZSBUeXBlIHRvIHVzZVxuICAgKiBAZGVmYXVsdCAtICdBV1MgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZScuXG4gICAqL1xuICBjb25maWd1cmF0aW9uU3RvcmVUeXBlPzogQXdzTWFuYWdlZE1pY3Jvc29mdENvbmZpZ3VyYXRpb25TdG9yZVR5cGU7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgU1NNIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBzZWNyZXQgbmFtZSBpbiBTZWNyZXRzIE1hbmFnZXJcbiAgICogQGRlZmF1bHQgLSAnZG9tYWluLXNlY3JldCcuXG4gICAqL1xuICBzZWNyZXRQb2ludGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgU1NNIE9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBEaXJlY3RvcnkgSURcbiAgICogQGRlZmF1bHQgLSAnZGlyZWN0b3J5SUQnLlxuICAgKi9cbiAgZGlyZWN0b3J5SURQb2ludGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NNIG5hbWVzcGFjZSB0byByZWFkL3dyaXRlIHBhcmFtZXRlcnMgdG9cbiAgICogQGRlZmF1bHQgLSAnY2RrLXNreWxpZ2h0Jy5cbiAgICovXG4gIG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIEFkIEF1dGhlbnRpY2F0aW9uIHJlcHJlc2VudHMgYW4gaW50ZWdyYXRpb24gcGF0dGVybiBvZiBNYW5hZ2VkIEFEIGFuZCBSb3V0ZSA1MyBSZXNvbHZlciBpbiBhIHNwZWNpZmljIFZQQ1xuICpcbiAqIFRoZSBDb25zdHJ1Y3QgY3JlYXRlcyBNYW5hZ2VkIEFEIHdpdGggdGhlIHByb3ZpZGVkIFNlY3JldCAoU2VjcmV0cyBNYW5hZ2VyKSBvciBnZW5lcmF0ZXMgYSBuZXcgU2VjcmV0LlxuICogVGhlIHNlY3JldCBzYXZlZCB0byBTU00gcGFyYW1ldGVyIHN0b3JlIHNvIG90aGVycyBjYW4gdXNlIGl0IHdpdGggb3RoZXIgQ29uc3RydWN0cyAoU3VjaCBhcyBXaW5kb3dzIG5vZGUgb3IgRlN4KVxuICogVGhlIHByb3ZpZGVkIFZQQyBvciB0aGUgbmV3IGNyZWF0ZWQgVlBDIHdpbGwgYmUgY29uZmlndXJlZCB0byBmb3J3YXJkIEROUyByZXF1ZXN0cyB0byB0aGUgTWFuYWdlZCBBRCB3aXRoIFJvdXRlNTMgUmVzb2x2ZXJzXG4gKiBUaGUgY29uc3RydWN0IGFsc28gY3JlYXRlcyAob3B0aW9uYWxseSkgdDMubmFubyBtYWNoaW5lIHRoYXQgaXMgcGFydCBvZiB0aGUgZG9tYWluIHRoYXQgY2FuIGJlIHVzZWQgdG8gcnVuIGFkbWluLXRhc2tzIChzdWNoIGFzIGNyZWF0ZUFER3JvdXApXG4gKlxuICogVGhlIGNyZWF0ZUFER3JvdXAoKSBtZXRob2QgY3JlYXRlcyBhbiBBY3RpdmUgRGlyZWN0b3J5IHBlcm1pc3Npb24gZ3JvdXAgaW4gdGhlIGRvbWFpbiwgdXNpbmcgdGhlIGRvbWFpbiBhZG1pbiB1c2VyLlxuICogUGxlYXNlIG5vdGU6IFdoZW4gY2FsbGluZyBjcmVhdGVBREdyb3VwKCkgQVBJLCBhIExhbWJkYSB3aWxsIGJlIGNyZWF0ZWQgdG8gc3RhcnQgdGhlIHdvcmtlciBtYWNoaW5lIChVc2luZyBBV1MtU0RLKSxcbiAqIHRoZW4gZWFjaCBjb21tYW5kIHdpbGwgYmUgc2NoZWR1bGVkIHdpdGggU3RhdGUgTWFuYWdlciwgYW5kIHRoZSBpbnN0YW5jZSB3aWxsIGJlIHNodXQgZG93biBhZnRlciBjb21wbGV0ZS5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NNYW5hZ2VkTWljcm9zb2Z0QWQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBtaWNyb3NvZnRBRDogQ2ZuTWljcm9zb2Z0QUQ7XG4gIHJlYWRvbmx5IGFkUGFyYW1ldGVyczogSUF3c01hbmFnZWRNaWNyb3NvZnRBZFBhcmFtZXRlcnM7XG4gIHJlYWRvbmx5IHByb3BzOiBJQXdzTWFuYWdlZE1pY3Jvc29mdEFkUHJvcHM7XG4gIHJlYWRvbmx5IGRvbWFpbldpbmRvd3NOb2RlPzogc2t5bGlnaHQuY29tcHV0ZS5Eb21haW5XaW5kb3dzTm9kZTtcbiAgcmVhZG9ubHkgc2VjcmV0OiBJU2VjcmV0O1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IElBd3NNYW5hZ2VkTWljcm9zb2Z0QWRQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5wcm9wcy5kb21haW5OYW1lID0gcHJvcHMuZG9tYWluTmFtZSA/PyAnZG9tYWluLmF3cyc7XG4gICAgdGhpcy5wcm9wcy5lZGl0aW9uID0gcHJvcHMuZWRpdGlvbiA/PyAnU3RhbmRhcmQnO1xuICAgIHRoaXMucHJvcHMuc2VjcmV0TmFtZSA9IHByb3BzLnNlY3JldE5hbWUgPz8gYCR7cHJvcHMuZG9tYWluTmFtZX0tc2VjcmV0YDtcbiAgICB0aGlzLnByb3BzLmNyZWF0ZVdvcmtlciA9IHByb3BzLmNyZWF0ZVdvcmtlciA/PyB0cnVlO1xuXG4gICAgdGhpcy5hZFBhcmFtZXRlcnMgPSBwcm9wcy5jb25maWd1cmF0aW9uU3RvcmUgPz8ge1xuICAgICAgY29uZmlndXJhdGlvblN0b3JlVHlwZTogQXdzTWFuYWdlZE1pY3Jvc29mdENvbmZpZ3VyYXRpb25TdG9yZVR5cGUuU1NNLFxuICAgIH07XG4gICAgdGhpcy5hZFBhcmFtZXRlcnMuc2VjcmV0UG9pbnRlciA9XG4gICAgICB0aGlzLmFkUGFyYW1ldGVycy5zZWNyZXRQb2ludGVyID8/ICdkb21haW4tc2VjcmV0JztcblxuICAgIHRoaXMuYWRQYXJhbWV0ZXJzLmRpcmVjdG9yeUlEUG9pbnRlciA9XG4gICAgICB0aGlzLmFkUGFyYW1ldGVycy5kaXJlY3RvcnlJRFBvaW50ZXIgPz8gJ2RpcmVjdG9yeUlEJztcblxuICAgIGlmICh0aGlzLmFkUGFyYW1ldGVycy5uYW1lc3BhY2UpIHtcbiAgICAgIHRoaXMuYWRQYXJhbWV0ZXJzLm5hbWVzcGFjZSA9IGAke3RoaXMuYWRQYXJhbWV0ZXJzLm5hbWVzcGFjZX0vYXV0aGVudGljYXRpb24vbWFkYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZFBhcmFtZXRlcnMubmFtZXNwYWNlID0gJ2Nkay1za3lsaWdodC9hdXRoZW50aWNhdGlvbi9tYWQnO1xuICAgIH1cblxuICAgIHRoaXMuc2VjcmV0ID1cbiAgICAgIHRoaXMucHJvcHMuc2VjcmV0ID8/XG4gICAgICBuZXcgc2VjcmV0c21hbmFnZXIuU2VjcmV0KHRoaXMsICdTZWNyZXQnLCB7XG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIERvbWFpbjogcHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgICAgIFVzZXJJRDogJ0FkbWluJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ1Bhc3N3b3JkJyxcbiAgICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHNlY3JldE5hbWU6IHByb3BzLnNlY3JldE5hbWUsXG4gICAgICB9KTtcblxuICAgIG5ldyBhd3Nfc3NtLlN0cmluZ1BhcmFtZXRlcih0aGlzLCAnbWFkLXNlY3JldE5hbWUtcG9pbnRlcicsIHtcbiAgICAgIHBhcmFtZXRlck5hbWU6IGAvJHt0aGlzLmFkUGFyYW1ldGVycy5uYW1lc3BhY2V9LyR7dGhpcy5hZFBhcmFtZXRlcnMuc2VjcmV0UG9pbnRlcn1gLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMucHJvcHMuc2VjcmV0TmFtZSxcbiAgICB9KTtcblxuICAgIGxldCBzdWJuZXRzOiBTZWxlY3RlZFN1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwY1N1Ym5ldHMpIHtcbiAgICAgIGlmIChwcm9wcy52cGNTdWJuZXRzLmhhc1B1YmxpYyB8fCBwcm9wcy52cGNTdWJuZXRzLnN1Ym5ldHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQSBwdWJsaWMgc3VibmV0IG9yIG5vdCBleGFjdGx5IDIgc3VibmV0cyB3aGVyZSBwYXNzZWQgaW4sIHBsZWFzZSBwYXNzIGluIHR3byBwcml2YXRlIHN1Ym5ldHMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3VibmV0cyA9IHByb3BzLnZwY1N1Ym5ldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym5ldHMgPVxuICAgICAgICBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCxcbiAgICAgICAgfSkgPz9cbiAgICAgICAgcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ3NlY3JldC12YWx1ZS1oaW50Jywge1xuICAgICAgdmFsdWU6IGBhd3Mgc2VjcmV0c21hbmFnZXIgZ2V0LXNlY3JldC12YWx1ZSAtLXNlY3JldC1pZCAke1xuICAgICAgICB0aGlzLnNlY3JldC5zZWNyZXRBcm5cbiAgICAgIH0gLS1xdWVyeSBTZWNyZXRTdHJpbmcgLS1vdXRwdXQgdGV4dCAtLXJlZ2lvbiAke1N0YWNrLm9mKHNjb3BlKS5yZWdpb259YCxcbiAgICB9KTtcblxuICAgIHRoaXMubWljcm9zb2Z0QUQgPSBuZXcgbWFkLkNmbk1pY3Jvc29mdEFEKFxuICAgICAgdGhpcyxcbiAgICAgICdBV1MtTWFuYWdlZC1NaWNyb3NvZnQtQUQnLFxuICAgICAge1xuICAgICAgICBwYXNzd29yZDogdGhpcy5zZWNyZXRcbiAgICAgICAgICAuc2VjcmV0VmFsdWVGcm9tSnNvbignUGFzc3dvcmQnKVxuICAgICAgICAgIC51bnNhZmVVbndyYXAoKS50b1N0cmluZygpLFxuICAgICAgICBlZGl0aW9uOiBwcm9wcy5lZGl0aW9uLFxuICAgICAgICBuYW1lOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUsXG4gICAgICAgIHZwY1NldHRpbmdzOiB7XG4gICAgICAgICAgc3VibmV0SWRzOiBbc3VibmV0cy5zdWJuZXRJZHNbMF0sIHN1Ym5ldHMuc3VibmV0SWRzWzFdXSxcbiAgICAgICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAnbWFkLWRucy1pcHMnLCB7XG4gICAgICB2YWx1ZTogYCR7Rm4uam9pbignLCcsIHRoaXMubWljcm9zb2Z0QUQuYXR0ckRuc0lwQWRkcmVzc2VzKX1gLFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAnbWFkLWRucy1uYW1lJywge1xuICAgICAgdmFsdWU6IGAke3RoaXMucHJvcHMuZG9tYWluTmFtZX1gLFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCAnbWFkLWRpcmVjdG95SUQnLCB7XG4gICAgICB2YWx1ZTogYCR7dGhpcy5taWNyb3NvZnRBRC5yZWZ9YCxcbiAgICB9KTtcblxuICAgIG5ldyBhd3Nfc3NtLlN0cmluZ1BhcmFtZXRlcih0aGlzLCAnbWFkLWRpcmVjdG9yeUlELXBvaW50ZXInLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBgLyR7dGhpcy5hZFBhcmFtZXRlcnMubmFtZXNwYWNlfS8ke3RoaXMuYWRQYXJhbWV0ZXJzLmRpcmVjdG9yeUlEUG9pbnRlcn1gLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMubWljcm9zb2Z0QUQucmVmLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuY3JlYXRlV29ya2VyKSB7XG4gICAgICB0aGlzLmRvbWFpbldpbmRvd3NOb2RlID0gdGhpcy5jcmVhdGVXb3JrZXIoXG4gICAgICAgIHRoaXMucHJvcHMuZG9tYWluTmFtZSxcbiAgICAgICAgdGhpcy5zZWNyZXQsXG4gICAgICApO1xuICAgICAgdGhpcy5kb21haW5XaW5kb3dzTm9kZS5zdGFydEluc3RhbmNlKCk7XG4gICAgICB0aGlzLmRvbWFpbldpbmRvd3NOb2RlLnJ1blBTd2l0aERvbWFpbkFkbWluKFxuICAgICAgICBbJ0FkZC1XaW5kb3dzRmVhdHVyZSBSU0FULUFELVBvd2VyU2hlbGwnXSxcbiAgICAgICAgJ3Bvd2Vyc2hlbGwnLFxuICAgICAgKTtcbiAgICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUucnVuUFN3aXRoRG9tYWluQWRtaW4oXG4gICAgICAgIFsnU3RhcnQtU2xlZXAgLVNlY29uZHMgNjAwJywgJ1N0b3AtQ29tcHV0ZXIgLUNvbXB1dGVyTmFtZSBsb2NhbGhvc3QnXSxcbiAgICAgICAgJ3NodXRkb3duJyxcbiAgICAgICk7XG4gICAgICB0aGlzLmRvbWFpbldpbmRvd3NOb2RlLmluc3RhbmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLm1pY3Jvc29mdEFEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb21haW5XaW5kb3dzTm9kZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGVzIERvbWFpbldpbmRvd3NOb2RlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJ1biBhZG1pbi10YXNrcyB0byB0aGlzIGRpcmVjdG9yeVxuICBwcml2YXRlIGNyZWF0ZVdvcmtlcihcbiAgICBkb21haW5OYW1lOiBzdHJpbmcsXG4gICAgZG9tYWluUGFzc3dvcmQ6IElTZWNyZXQsXG4gICk6IHNreWxpZ2h0LmNvbXB1dGUuRG9tYWluV2luZG93c05vZGUge1xuICAgIHJldHVybiBuZXcgc2t5bGlnaHQuY29tcHV0ZS5Eb21haW5XaW5kb3dzTm9kZSh0aGlzLCAnbWFkV29ya2VyJywge1xuICAgICAgZG9tYWluTmFtZTogZG9tYWluTmFtZSxcbiAgICAgIHBhc3N3b3JkT2JqZWN0OiBkb21haW5QYXNzd29yZCxcbiAgICAgIHZwYzogdGhpcy5wcm9wcy52cGMsXG4gICAgICBpbnN0YW5jZVR5cGU6ICd0My5zbWFsbCcsXG4gICAgICB1c2VQcml2YXRlU3VibmV0OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJ1blBTd2l0aERvbWFpbkFkbWluKGNvbW1hbmRzOiBzdHJpbmdbXSwgaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kb21haW5XaW5kb3dzTm9kZSkge1xuICAgICAgY29uc29sZS5sb2coYENhbid0IHJ1biAke2lkfSB3aGVuIG5vIFdvcmtlciBpcyBkZWZpbmVkYCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZG9tYWluV2luZG93c05vZGUucnVuUFN3aXRoRG9tYWluQWRtaW4oY29tbWFuZHMsIGlkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIFRoZSBmdW5jdGlvbiBjcmVhdGVzIFNTTSBEb2N1bWVudCBhbmQgRGVzaXJlZCBzdGF0ZSBpbiBTdGF0ZSBNYW5hZ2VyIHRvIHNjaGVkdWxlIHRoaXMgZG9jdW1lbnQgb24gdGhlIFdvcmtlci5cbiAgY3JlYXRlQURHcm91cChncm91cE5hbWU6IHN0cmluZywgZ3JvdXBEZXNjcmlwdGlvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5ydW5QU3dpdGhEb21haW5BZG1pbihcbiAgICAgIFtcbiAgICAgICAgYE5ldy1BREdyb3VwIC1OYW1lIFwiJHtncm91cERlc2NyaXB0aW9ufVwiIC1TYW1BY2NvdW50TmFtZSBcIiR7Z3JvdXBOYW1lfVwiIC1Hcm91cFNjb3BlIERvbWFpbkxvY2FsYCxcbiAgICAgIF0sXG4gICAgICBgY3JlYXRlQWRHcm91cCgke2dyb3VwTmFtZX0pYCxcbiAgICApO1xuICB9XG5cbiAgLy8gRXhwZXJpbWVudGFsXG4gIGNyZWF0ZVNlcnZpY2VBY2NvdW50KFxuICAgIGFkU2VydmljZUFjY291bnROYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZVByaW5jaXBhbE5hbWVzOiBzdHJpbmcsXG4gICAgcHJpbmNpcGFsc0FsbG93ZWRUb1JldHJpZXZlTWFuYWdlZFBhc3N3b3JkOiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMucnVuUFN3aXRoRG9tYWluQWRtaW4oXG4gICAgICBbXG4gICAgICAgIGBOZXctQURTZXJ2aWNlQWNjb3VudCAtTmFtZSBcIiR7YWRTZXJ2aWNlQWNjb3VudE5hbWV9XCIgLURuc0hvc3ROYW1lIFwiJHthZFNlcnZpY2VBY2NvdW50TmFtZX0uJHt0aGlzLnByb3BzLmRvbWFpbk5hbWV9XCIgLVNlcnZpY2VQcmluY2lwYWxOYW1lcyBcIiR7c2VydmljZVByaW5jaXBhbE5hbWVzfVwiIC1QcmluY2lwYWxzQWxsb3dlZFRvUmV0cmlldmVNYW5hZ2VkUGFzc3dvcmQgXCIke3ByaW5jaXBhbHNBbGxvd2VkVG9SZXRyaWV2ZU1hbmFnZWRQYXNzd29yZH1cImAsXG4gICAgICBdLFxuICAgICAgYGNyZWF0ZVNlcnZpY2VBY2NvdW50KCR7YWRTZXJ2aWNlQWNjb3VudE5hbWV9KWAsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgQWQgQXV0aGVudGljYXRpb24gcmVwcmVzZW50cyBhbiBpbnRlZ3JhdGlvbiBwYXR0ZXJuIG9mIE1hbmFnZWQgQUQgYW5kIFJvdXRlIDUzIFJlc29sdmVyIGluIGEgc3BlY2lmaWMgVlBDXG4gKlxuICogVGhlIENvbnN0cnVjdCBjcmVhdGVzIE1hbmFnZWQgQUQgd2l0aCB0aGUgcHJvdmlkZWQgU2VjcmV0IChTZWNyZXRzIE1hbmFnZXIpIG9yIGdlbmVyYXRlcyBhIG5ldyBTZWNyZXQuXG4gKiBUaGUgc2VjcmV0IHNhdmVkIHRvIFNTTSBwYXJhbWV0ZXIgc3RvcmUgc28gb3RoZXJzIGNhbiB1c2UgaXQgd2l0aCBvdGhlciBDb25zdHJ1Y3RzIChTdWNoIGFzIFdpbmRvd3Mgbm9kZSBvciBGU3gpXG4gKiBUaGUgcHJvdmlkZWQgVlBDIG9yIHRoZSBuZXcgY3JlYXRlZCBWUEMgd2lsbCBiZSBjb25maWd1cmVkIHRvIGZvcndhcmQgRE5TIHJlcXVlc3RzIHRvIHRoZSBNYW5hZ2VkIEFEIHdpdGggUm91dGU1MyBSZXNvbHZlcnNcbiAqIFRoZSBjb25zdHJ1Y3QgYWxzbyBjcmVhdGVzIChvcHRpb25hbGx5KSB0My5uYW5vIG1hY2hpbmUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBkb21haW4gdGhhdCBjYW4gYmUgdXNlZCB0byBydW4gYWRtaW4tdGFza3MgKHN1Y2ggYXMgY3JlYXRlQURHcm91cClcbiAqXG4gKiBUaGUgY3JlYXRlQURHcm91cCgpIG1ldGhvZCBjcmVhdGVzIGFuIEFjdGl2ZSBEaXJlY3RvcnkgcGVybWlzc2lvbiBncm91cCBpbiB0aGUgZG9tYWluLCB1c2luZyB0aGUgZG9tYWluIGFkbWluIHVzZXIuXG4gKiBQbGVhc2Ugbm90ZTogV2hlbiBjYWxsaW5nIGNyZWF0ZUFER3JvdXAoKSBBUEksIGEgTGFtYmRhIHdpbGwgYmUgY3JlYXRlZCB0byBzdGFydCB0aGUgd29ya2VyIG1hY2hpbmUgKFVzaW5nIEFXUy1TREspLFxuICogdGhlbiBlYWNoIGNvbW1hbmQgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aCBTdGF0ZSBNYW5hZ2VyLCBhbmQgdGhlIGluc3RhbmNlIHdpbGwgYmUgc2h1dCBkb3duIGFmdGVyIGNvbXBsZXRlLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hbmFnZWRNaWNyb3NvZnRBZFI1MyBleHRlbmRzIEF3c01hbmFnZWRNaWNyb3NvZnRBZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogSUF3c01hbmFnZWRNaWNyb3NvZnRBZFByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGxldCBzdWJuZXRzOiBTZWxlY3RlZFN1Ym5ldHM7XG4gICAgaWYgKHByb3BzLnZwY1N1Ym5ldHMpIHtcbiAgICAgIGlmIChwcm9wcy52cGNTdWJuZXRzLmhhc1B1YmxpYyB8fCBwcm9wcy52cGNTdWJuZXRzLnN1Ym5ldHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQSBwdWJsaWMgc3VibmV0IG9yIG5vdCBleGFjdGx5IDIgc3VibmV0cyB3aGVyZSBwYXNzZWQgaW4sIHBsZWFzZSBwYXNzIGluIHR3byBwcml2YXRlIHN1Ym5ldHMnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc3VibmV0cyA9IHByb3BzLnZwY1N1Ym5ldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1Ym5ldHMgPVxuICAgICAgICBwcm9wcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCxcbiAgICAgICAgfSkgPz9cbiAgICAgICAgcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURUQsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNnID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdyNTMtb3V0Ym91bmQtcmVzb2x2ZXItU0cnLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICB9KTtcbiAgICBzZy5hZGRJbmdyZXNzUnVsZShlYzIuUGVlci5pcHY0KHByb3BzLnZwYy52cGNDaWRyQmxvY2spLCBlYzIuUG9ydC51ZHAoNTMpKTtcbiAgICBzZy5hZGRJbmdyZXNzUnVsZShlYzIuUGVlci5pcHY0KHByb3BzLnZwYy52cGNDaWRyQmxvY2spLCBlYzIuUG9ydC50Y3AoNTMpKTtcblxuICAgIGNvbnN0IG91dEJvdW5kUmVzb2x2ZXIgPSBuZXcgcjUzcmVzb2x2ZXIuQ2ZuUmVzb2x2ZXJFbmRwb2ludChcbiAgICAgIHRoaXMsXG4gICAgICAnUjUzLVJlc29sdmVyLUVuZHBvaW50JyxcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aW9uOiAnT1VUQk9VTkQnLFxuICAgICAgICBpcEFkZHJlc3Nlczogc3VibmV0cy5zdWJuZXRJZHMubWFwKChzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHsgc3VibmV0SWQ6IHMgfTtcbiAgICAgICAgfSksXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzZy5zZWN1cml0eUdyb3VwSWRdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJSdWxlcyA9IG5ldyByNTNyZXNvbHZlci5DZm5SZXNvbHZlclJ1bGUoXG4gICAgICB0aGlzLFxuICAgICAgJ1I1My1SZXNvbHZlLVJ1bGUnLFxuICAgICAge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLnByb3BzLmRvbWFpbk5hbWUhLFxuICAgICAgICByZXNvbHZlckVuZHBvaW50SWQ6IG91dEJvdW5kUmVzb2x2ZXIucmVmLFxuICAgICAgICBydWxlVHlwZTogJ0ZPUldBUkQnLFxuICAgICAgICB0YXJnZXRJcHM6IFtcbiAgICAgICAgICB7IGlwOiBGbi5zZWxlY3QoMCwgdGhpcy5taWNyb3NvZnRBRC5hdHRyRG5zSXBBZGRyZXNzZXMpIH0sXG4gICAgICAgICAgeyBpcDogRm4uc2VsZWN0KDEsIHRoaXMubWljcm9zb2Z0QUQuYXR0ckRuc0lwQWRkcmVzc2VzKSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgbmV3IHI1M3Jlc29sdmVyLkNmblJlc29sdmVyUnVsZUFzc29jaWF0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgICdSNTMtUmVzb2x2ZXItQXNzb2NpYXRpb24nLFxuICAgICAge1xuICAgICAgICByZXNvbHZlclJ1bGVJZDogcmVzb2x2ZXJSdWxlcy5hdHRyUmVzb2x2ZXJSdWxlSWQsXG4gICAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -15,6 +15,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
15
15
  * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
16
16
  * and limitations under the License.
17
17
  */
18
+ const crypto_1 = require("crypto");
18
19
  const aws_cdk_lib_1 = require("aws-cdk-lib");
19
20
  const custom_resources_1 = require("aws-cdk-lib/custom-resources");
20
21
  const constructs_1 = require("constructs");
@@ -180,11 +181,27 @@ class DomainWindowsNode extends constructs_1.Construct {
180
181
  * The provided psCommands will be stored in C:\Scripts and will be run with scheduled task with Domain Admin rights
181
182
  */
182
183
  runPSwithDomainAdmin(psCommands, id) {
183
- var commands = ['$oneTimePS = {'];
184
- psCommands.forEach((command) => {
185
- commands.push(command);
186
- });
187
- commands.push('}', `[string]$SecretAD = '${this.passwordObject.secretName}'`, '$SecretObj = Get-SECSecretValue -SecretId $SecretAD', '[PSCustomObject]$Secret = ($SecretObj.SecretString | ConvertFrom-Json)', '$password = $Secret.Password | ConvertTo-SecureString -asPlainText -Force', "$username = 'Admin'", '$domain_admin_credential = New-Object System.Management.Automation.PSCredential($username,$password)', 'New-Item -ItemType Directory -Path c:\\Scripts', '$tempScriptPath = "C:\\Scripts\\$PID.ps1"', '$oneTimePS | set-content $tempScriptPath', '# Create a scheduled task on startup to execute the mapping', '$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument $tempScriptPath', '$trigger = New-ScheduledTaskTrigger -Once -At (get-date).AddSeconds(10); ', '$trigger.EndBoundary = (get-date).AddSeconds(60).ToString("s") ', 'Register-ScheduledTask -Force -Action $action -Trigger $trigger -TaskName "Task $PID to run with DomainAdmin" -Description "Workaround to run the code with domain admin" -RunLevel Highest -User $username -Password $Secret.Password');
184
+ // Join commands and encode as base64
185
+ const scriptContent = psCommands.join('\n');
186
+ const base64Script = Buffer.from(scriptContent, 'utf8').toString('base64');
187
+ const contentHash = (0, crypto_1.createHash)('sha256').update(scriptContent).digest('hex').slice(0, 6);
188
+ const commands = [
189
+ `[string]$SecretAD = '${this.passwordObject.secretName}'`,
190
+ '$SecretObj = Get-SECSecretValue -SecretId $SecretAD',
191
+ '[PSCustomObject]$Secret = ($SecretObj.SecretString | ConvertFrom-Json)',
192
+ '$password = $Secret.Password | ConvertTo-SecureString -asPlainText -Force',
193
+ "$username = 'Admin'",
194
+ '$domain_admin_credential = New-Object System.Management.Automation.PSCredential($username,$password)',
195
+ 'New-Item -ItemType Directory -Path c:\\Scripts -Force',
196
+ `$tempScriptPath = "C:\\Scripts\\${id}-${contentHash}.ps1"`,
197
+ // Decode base64 and write to file
198
+ `[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String('${base64Script}')) | Set-Content $tempScriptPath`,
199
+ '# Create a scheduled task on startup to execute the mapping',
200
+ '$action = New-ScheduledTaskAction -Execute "Powershell.exe" -Argument $tempScriptPath',
201
+ '$trigger = New-ScheduledTaskTrigger -Once -At (get-date).AddSeconds(10)',
202
+ '$trigger.EndBoundary = (get-date).AddSeconds(60).ToString("s")',
203
+ `Register-ScheduledTask -Force -Action $action -Trigger $trigger -TaskName "Task ${id} to run with DomainAdmin" -Description "Workaround to run the code with domain admin" -RunLevel Highest -User $username -Password $Secret.Password`,
204
+ ];
188
205
  new aws_cdk_lib_1.aws_ssm.CfnAssociation(this, id, {
189
206
  name: 'AWS-RunPowerShellScript',
190
207
  parameters: {
@@ -197,6 +214,7 @@ class DomainWindowsNode extends constructs_1.Construct {
197
214
  }
198
215
  startInstance() {
199
216
  new custom_resources_1.AwsCustomResource(this, 'StartInstance', {
217
+ installLatestAwsSdk: false,
200
218
  policy: custom_resources_1.AwsCustomResourcePolicy.fromSdkCalls({
201
219
  resources: custom_resources_1.AwsCustomResourcePolicy.ANY_RESOURCE,
202
220
  }),
@@ -216,4 +234,4 @@ class DomainWindowsNode extends constructs_1.Construct {
216
234
  exports.DomainWindowsNode = DomainWindowsNode;
217
235
  _a = JSII_RTTI_SYMBOL_1;
218
236
  DomainWindowsNode[_a] = { fqn: "cdk-skylight.compute.DomainWindowsNode", version: "0.0.0" };
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NreWxpZ2h0LWNvbXB1dGUvd2luZG93cy1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FTcUI7QUFFckIsbUVBR3NDO0FBQ3RDLDJDQUF1QztBQXFEdkM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsaUJBQWtCLFNBQVEsc0JBQVM7SUFNOUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsc0JBQXNCLElBQUk7WUFDN0QscUJBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLDhCQUE4QixDQUMvQjtZQUNELHFCQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLHlCQUF5QixDQUFDO1NBQ3RFLENBQUM7UUFFRixLQUFLLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLEtBQUssQ0FBQztRQUN6RCxLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUM7UUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQztRQUV4RCxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFckIsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBRyxDQUFDLGtCQUFrQixDQUFDO1lBQzNDLElBQUksRUFBRSxLQUFLLENBQUMsT0FBTyxJQUFJLHlDQUF5QztZQUNoRSxPQUFPLEVBQUUsS0FBSyxDQUFDLGNBQWM7U0FDOUIsQ0FBQyxDQUFD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SSxxQkFBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQy9CLElBQUksRUFBRSx5QkFBeUI7WUFDL0IsVUFBVSxFQUFFO2dCQUNWLFFBQVEsRUFBRSxRQUFRO2FBQ25CO1lBQ0QsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNyRSxTQUFTLEVBQUUsR0FBRztZQUNkLGNBQWMsRUFBRSxHQUFHO1NBQ3BCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxvQ0FBaUIsQ0FDbkIsSUFBSSxFQUNKLGVBQWUsRUFDZjtZQUNFLE1BQU0sRUFBRSwwQ0FBdUIsQ0FBQyxZQUFZLENBQUM7Z0JBQzNDLFNBQVMsRUFBRSwwQ0FBdUIsQ0FBQyxZQUFZO2FBQ2hELENBQUM7WUFDRixRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsTUFBTSxFQUFFLGdCQUFnQixFQUFFLDJGQUEyRjtnQkFDckgsVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2lCQUN4QztnQkFDRCxrQkFBa0IsRUFBRTtvQkFDbEIsRUFBRSxFQUFFLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtpQkFDaEQ7YUFDRjtTQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7O0FBbFBILDhDQW1QQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCAyMDIxIEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19lYzIgYXMgZWMyLFxuICBhd3Nfc3NtIGFzIHNzbSxcbiAgQ2ZuT3V0cHV0LFxuICBhd3NfZWMyLFxuICBTdGFjayxcbiAgRm4sXG4gIGF3c19zZWNyZXRzbWFuYWdlcixcbn0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQge1xuICBBd3NDdXN0b21SZXNvdXJjZSxcbiAgQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3ksXG59IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogVGhlIHByb3BlcnRpZXMgb2YgYW4gRG9tYWluV2luZG93c05vZGVQcm9wcywgcmVxdWlyZXMgQWN0aXZlIERpcmVjdG9yeSBwYXJhbWV0ZXIgdG8gcmVhZCB0aGUgU2VjcmV0IHRvIGpvaW4gdGhlIGRvbWFpblxuICogRGVmYXVsdCBzZXR0aW5nOiBEb21haW4gam9pbmVkLCBtNS4yeGxhcmdlLCBsYXRlc3Qgd2luZG93cywgTWFuYWdlZCBieSBTU00uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURvbWFpbldpbmRvd3NOb2RlUHJvcHMge1xuICAvKipcbiAgICogSUFNIEluc3RhbmNlIHJvbGUgcGVybWlzc2lvbnNcbiAgICogQGRlZmF1bHQgLSAnQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZSwgQW1hem9uU1NNRGlyZWN0b3J5U2VydmljZUFjY2VzcycuXG4gICAqL1xuICBpYW1NYW5hZ2VkUG9saWNpZXNMaXN0PzogaWFtLklNYW5hZ2VkUG9saWN5W107XG4gIC8qKlxuICAgKiBUaGUgRUMyIEluc3RhbmNlIHR5cGUgdG8gdXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJ201LjJ4bGFyZ2UnLlxuICAgKi9cbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2hvb3NlIGlmIHRvIGxhdW5jaCB0aGUgaW5zdGFuY2UgaW4gUHJpdmF0ZSBvciBpbiBQdWJsaWMgc3VibmV0XG4gICAqIFByaXZhdGUgPSBTdWJuZXQgdGhhdCByb3V0ZXMgdG8gdGhlIGludGVybmV0LCBidXQgbm90IHZpY2UgdmVyc2EuXG4gICAqIFB1YmxpYyA9IFN1Ym5ldCB0aGF0IHJvdXRlcyB0byB0aGUgaW50ZXJuZXQgYW5kIHZpY2UgdmVyc2EuXG4gICAqIEBkZWZhdWx0IC0gUHJpdmF0ZS5cbiAgICovXG4gIHVzZVByaXZhdGVTdWJuZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIEFNSSB0byBzZWFyY2ggaW4gU1NNIChlYzIuTG9va3VwTm9kZUltYWdlKSBzdXBwb3J0cyBSZWdleFxuICAgKiAgQGRlZmF1bHQgLSAnV2luZG93c19TZXJ2ZXItMjAyMi1FbmdsaXNoLUZ1bGwnXG4gICAqL1xuICBhbWlOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogU3BlY2lmaWMgVXNlckRhdGEgdG8gdXNlXG4gICAqXG4gICAqIFRoZSBVc2VyRGF0YSBtYXkgc3RpbGwgYmUgbXV0YXRlZCBhZnRlciBjcmVhdGlvbi5cbiAgICpcbiAgICogIEBkZWZhdWx0IC0gJ3VuZGVmaW5lZCdcbiAgICovXG4gIHVzZXJEYXRhPzogc3RyaW5nO1xuXG4gIGRvbWFpbk5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkT2JqZWN0PzogYXdzX3NlY3JldHNtYW5hZ2VyLklTZWNyZXQ7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gJ3RydWUnXG4gICAqL1xuICB3aW5kb3dzTWFjaGluZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdG8gdXNlXG4gICAqL1xuICB2cGM6IGVjMi5JVnBjO1xufVxuXG4vKipcbiAqIEEgRG9tYWluIFdpbmRvd3MgTm9kZSByZXByZXNlbnRzIG9uZSBXaW5kb3dzIEVDMiBpbnN0YW5jZSBjb25maWd1cmVkIHdpdGggQWN0aXZlIERpcmVjdG9yeS5cbiAqXG4gKiBUaGUgRG9tYWluV2luZG93c05vZGUgY2FuIGJlIGN1c3RvbWl6ZWQgdG8gZGlmZmVyZW50IGluc3RhbmNlIHNpemVzIGFuZCBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIHNldCBqdXN0IGxpa2UgYW55IG90aGVyIEVDMiBJbnN0YW5jZS5cbiAqIFlvdSBjYW4gdXNlIHRoaXMgY29uc3RydWN0IHRvIHJ1biBlbGV2YXRlZCBkb21haW4gdGFza3Mgd2l0aCBkb21haW4gcGVybWlzc2lvbnMgb3IgcnVuIHlvdXIgYXBwbGljYXRpb24gaW4gYSBzaW5nbGUgaW5zdGFuY2Ugc2V0dXAuXG4gKlxuICogVGhlIG1hY2hpbmUgd2lsbCBiZSBqb2luZWQgdG8gdGhlIHByb3ZpZGVkIEFjdGl2ZSBEaXJlY3RvcnkgZG9tYWluIHVzaW5nIGEgY3VzdG9tIENsb3VkRm9ybWF0aW9uIGJvb3RzdHJhcCB0aGF0IHdpbGwgd2FpdCB1bnRpbCB0aGUgcmVxdWlyZWQgcmVib290IHRvIGpvaW4gdGhlIGRvbWFpbi4gVGhlbiBpdCB3aWxsIHJlZ2lzdGVyIHRoZSBtYWNoaW5lIGluIFNTTSBhbmQgcHVsbCB0YXNrcyBmcm9tIHRoZSBTU00gU3RhdGUgbWFuYWdlci5cbiAqXG4gKiBZb3UgY2FuIHNlbmQgdGFza3MgdG8gdGhhdCBtYWNoaW5lIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRob2RzOiBydW5Qc0NvbW1hbmRzKCkgYW5kIHJ1blBTd2l0aERvbWFpbkFkbWluKClcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBEb21haW5XaW5kb3dzTm9kZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHJlYWRvbmx5IG5vZGVSb2xlOiBpYW0uUm9sZTtcbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcbiAgcmVhZG9ubHkgcGFzc3dvcmRPYmplY3Q/OiBJU2VjcmV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJRG9tYWluV2luZG93c05vZGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgcHJvcHMuaWFtTWFuYWdlZFBvbGljaWVzTGlzdCA9IHByb3BzLmlhbU1hbmFnZWRQb2xpY2llc0xpc3QgPz8gW1xuICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAnQW1hem9uU1NNTWFuYWdlZEluc3RhbmNlQ29yZScsXG4gICAgICApLFxuICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdTZWNyZXRzTWFuYWdlclJlYWRXcml0ZScpLFxuICAgIF07XG5cbiAgICBwcm9wcy51c2VQcml2YXRlU3VibmV0ID0gcHJvcHMudXNlUHJpdmF0ZVN1Ym5ldCA/PyBmYWxzZTtcbiAgICBwcm9wcy51c2VyRGF0YSA9IHByb3BzLnVzZXJEYXRhID8/ICcnO1xuICAgIHByb3BzLndpbmRvd3NNYWNoaW5lID0gcHJvcHMud2luZG93c01hY2hpbmUgPz8gdHJ1ZTtcbiAgICB0aGlzLnBhc3N3b3JkT2JqZWN0ID0gcHJvcHMucGFzc3dvcmRPYmplY3QgPz8gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy52cGMgPSBwcm9wcy52cGM7XG5cbiAgICBjb25zdCBub2RlSW1hZ2UgPSBuZXcgZWMyLkxvb2t1cE1hY2hpbmVJbWFnZSh7XG4gICAgICBuYW1lOiBwcm9wcy5hbWlOYW1lID8/ICcqV2luZG93c19TZXJ2ZXItMjAyMi1FbmdsaXNoLUZ1bGwtQmFzZSonLFxuICAgICAgd2luZG93czogcHJvcHMud2luZG93c01hY2hpbmUsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGVSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdpYW0tUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdlYzIuYW1hem9uYXdzLmNvbScpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBwcm9wcy5pYW1NYW5hZ2VkUG9saWNpZXNMaXN0LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCAnU2VjdXJpdHlHcm91cCcsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgfSk7XG5cbiAgICAvLyBTZXR0aW5nIHN0YXRpYyBsb2dpY2FsIElEIGZvciB0aGUgV29ya2VyLCB0byBhbGxvdyBmdXJ0aGVyIGN1c3RvbWl6YXRpb25cbiAgICBjb25zdCB3b3JrZXJOYW1lID0gJ0VDMk5vZGUnICsgaWQ7XG4gICAgd29ya2VyTmFtZS5yZXBsYWNlKC9bXjAtOWEtel0vZ2ksICcnKTsgLy9jb252ZXJ0IHN0cmluZyB0byBhbHBoYW51bWVyaWNcblxuICAgIGlmIChwcm9wcy5kb21haW5OYW1lICYmIHRoaXMucGFzc3dvcmRPYmplY3QpIHtcbiAgICAgIHRoaXMucGFzc3dvcmRPYmplY3QuZ3JhbnRSZWFkKHRoaXMubm9kZVJvbGUpO1xuXG4gICAgICAvLyBDcmVhdGUgQ2xvdWRGb3JtYXRpb24gQ29uZmlnIHNldCB0byBhbGxvdyB0aGUgRG9tYWluIGpvaW4gcmVwb3J0IGJhY2sgdG8gQ2xvdWRmb3JtYXRpb24gb25seSBhZnRlciByZWJvb3QuXG4gICAgICBjb25zdCBjb25maWcgPSBlYzIuQ2xvdWRGb3JtYXRpb25Jbml0LmZyb21Db25maWdTZXRzKHtcbiAgICAgICAgY29uZmlnU2V0czoge1xuICAgICAgICAgIGRvbWFpbkpvaW5SZXN0YXJ0OiBbJ2RvbWFpbkpvaW4nLCAnc2lnbmFsJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3M6IHtcbiAgICAgICAgICBkb21haW5Kb2luOiBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgICAgICAgZWMyLkluaXRDb21tYW5kLnNoZWxsQ29tbWFuZChcbiAgICAgICAgICAgICAgLy8gU3RlcDEgOiBEb21haW4gSm9pbiB1c2luZyB0aGUgU2VjcmV0IHByb3ZpZGVkXG4gICAgICAgICAgICAgIGBwb3dlcnNoZWxsLmV4ZSAtY29tbWFuZCAgXCJJbnZva2UtQ29tbWFuZCAtU2NyaXB0QmxvY2sge1tzdHJpbmddJFNlY3JldEFEICA9ICcke3RoaXMucGFzc3dvcmRPYmplY3Quc2VjcmV0TmFtZX0nIDskU2VjcmV0T2JqID0gR2V0LVNFQ1NlY3JldFZhbHVlIC1TZWNyZXRJZCAkU2VjcmV0QUQgO1tQU0N1c3RvbU9iamVjdF0kU2VjcmV0ID0gKCRTZWNyZXRPYmouU2VjcmV0U3RyaW5nICB8IENvbnZlcnRGcm9tLUpzb24pIDskcGFzc3dvcmQgICA9ICRTZWNyZXQuUGFzc3dvcmQgfCBDb252ZXJ0VG8tU2VjdXJlU3RyaW5nIC1hc1BsYWluVGV4dCAtRm9yY2UgOyR1c2VybmFtZSAgID0gJ0FkbWluQCcgKyAnJHtwcm9wcy5kb21haW5OYW1lfScgOyRjcmVkZW50aWFsID0gTmV3LU9iamVjdCBTeXN0ZW0uTWFuYWdlbWVudC5BdXRvbWF0aW9uLlBTQ3JlZGVudGlhbCgkdXNlcm5hbWUsJHBhc3N3b3JkKSA7QWRkLUNvbXB1dGVyIC1Eb21haW5OYW1lICR7cHJvcHMuZG9tYWluTmFtZX0gLUNyZWRlbnRpYWwgJGNyZWRlbnRpYWw7IFJlc3RhcnQtQ29tcHV0ZXIgLUZvcmNlfVwiYCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHdhaXRBZnRlckNvbXBsZXRpb246IGVjMi5Jbml0Q29tbWFuZFdhaXREdXJhdGlvbi5mb3JldmVyKCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIHNpZ25hbDogbmV3IGVjMi5Jbml0Q29uZmlnKFtcbiAgICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgICAgIC8vIFN0ZXAgMzogQ2xvdWRGb3JtYXRpb24gc2lnbmFsXG4gICAgICAgICAgICAgIGBjZm4tc2lnbmFsLmV4ZSAtLXN1Y2Nlc3M9dHJ1ZSAtLXJlc291cmNlPSR7d29ya2VyTmFtZX0gLS1zdGFjaz0ke1xuICAgICAgICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZVxuICAgICAgICAgICAgICB9IC0tcmVnaW9uPSR7U3RhY2sub2YodGhpcykucmVnaW9ufWAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3YWl0QWZ0ZXJDb21wbGV0aW9uOiBlYzIuSW5pdENvbW1hbmRXYWl0RHVyYXRpb24ubm9uZSgpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXR0YWNoSW5pdE9wdGlvbnM6IGVjMi5BdHRhY2hJbml0T3B0aW9ucyA9IHtcbiAgICAgICAgcGxhdGZvcm06IGVjMi5PcGVyYXRpbmdTeXN0ZW1UeXBlLldJTkRPV1MsXG4gICAgICAgIGNvbmZpZ1NldHM6IFsnZG9tYWluSm9pblJlc3RhcnQnXSxcbiAgICAgICAgaW5zdGFuY2VSb2xlOiB0aGlzLm5vZGVSb2xlLFxuICAgICAgICB1c2VyRGF0YTogYXdzX2VjMi5Vc2VyRGF0YS5jdXN0b20oJycpLFxuICAgICAgICBlbWJlZEZpbmdlcnByaW50OiBmYWxzZSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsICdEb21haW4tSW5zdGFuY2UnLCB7XG4gICAgICAgIGluc3RhbmNlVHlwZTogbmV3IGVjMi5JbnN0YW5jZVR5cGUocHJvcHMuaW5zdGFuY2VUeXBlID8/ICdtNS5sYXJnZScpLFxuICAgICAgICBtYWNoaW5lSW1hZ2U6IG5vZGVJbWFnZSxcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgcm9sZTogdGhpcy5ub2RlUm9sZSxcbiAgICAgICAgc2VjdXJpdHlHcm91cDogc2VjdXJpdHlHcm91cCxcbiAgICAgICAgdnBjU3VibmV0czogdGhpcy52cGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgICAgc3VibmV0VHlwZTogcHJvcHMudXNlUHJpdmF0ZVN1Ym5ldFxuICAgICAgICAgICAgPyBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXG4gICAgICAgICAgICA6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyxcbiAgICAgICAgICBvbmVQZXJBejogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgICAgIGluaXQ6IGNvbmZpZyxcbiAgICAgICAgaW5pdE9wdGlvbnM6IGF0dGFjaEluaXRPcHRpb25zLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIE92ZXJyaWRlIHRoZSBsb2dpY2FsIElEIG5hbWUgc28gaXQgY2FuIGJlIHJlZmVyZWVkIGJlZm9yZSBpbml0aWFsaXplZFxuICAgICAgY29uc3QgQ2ZuSW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGVjMi5DZm5JbnN0YW5jZTtcbiAgICAgIENmbkluc3RhbmNlLm92ZXJyaWRlTG9naWNhbElkKHdvcmtlck5hbWUpO1xuXG4gICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBVc2VyRGF0YSBzY3JpcHQgdG8gZXhlY3V0ZSBvbmx5IHRoZSBjZm4taW5pdCAod2l0aG91dCBjZm4tc2lnbmFsKSBhcyB3ZSB3YW50IGNmbi1zaWduYWwgdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgcmVib290LiBNb3JlIGRldGFpbHMgaGVyZTogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9wcmVtaXVtc3VwcG9ydC9rbm93bGVkZ2UtY2VudGVyL2NyZWF0ZS1jb21wbGV0ZS1ib290c3RyYXBwaW5nL1xuICAgICAgQ2ZuSW5zdGFuY2UudXNlckRhdGEgPSBGbi5iYXNlNjQoXG4gICAgICAgIGA8cG93ZXJzaGVsbD5jZm4taW5pdC5leGUgLXYgLXMgJHtcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWVcbiAgICAgICAgfSAtciAke3dvcmtlck5hbWV9IC0tY29uZmlnc2V0cz1kb21haW5Kb2luUmVzdGFydCAtLXJlZ2lvbiAke1xuICAgICAgICAgIFN0YWNrLm9mKHRoaXMpLnJlZ2lvblxuICAgICAgICB9PC9wb3dlcnNoZWxsPmAsXG4gICAgICApO1xuXG4gICAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCA1TSB0aW1lb3V0IHRvIHN1cHBvcnQgbG9uZ2VyIFdpbmRvd3MgYm9vdCB0aW1lXG4gICAgICBDZm5JbnN0YW5jZS5jZm5PcHRpb25zLmNyZWF0aW9uUG9saWN5ID0ge1xuICAgICAgICByZXNvdXJjZVNpZ25hbDoge1xuICAgICAgICAgIGNvdW50OiAxLFxuICAgICAgICAgIHRpbWVvdXQ6ICdQVDMwTScsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCAnTm9uRG9tYWluLUluc3RhbmNlJywge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG5ldyBlYzIuSW5zdGFuY2VUeXBlKHByb3BzLmluc3RhbmNlVHlwZSA/PyAnbTUubGFyZ2UnKSxcbiAgICAgICAgbWFjaGluZUltYWdlOiBub2RlSW1hZ2UsXG4gICAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICAgIHJvbGU6IHRoaXMubm9kZVJvbGUsXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY3VyaXR5R3JvdXAsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLnVzZVByaXZhdGVTdWJuZXRcbiAgICAgICAgICAgID8gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVFxuICAgICAgICAgICAgOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgb25lUGVyQXo6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQXBwZW5kIHRoZSB1c2VyIGRhdGFcbiAgICBpZiAocHJvcHMudXNlckRhdGEgIT0gJycpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuYWRkVXNlckRhdGEocHJvcHMudXNlckRhdGEpO1xuICAgIH1cblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgJ0luc3RhbmNlSWQnLCB7XG4gICAgICB2YWx1ZTogYEluc3RhbmNlSWQ6ICR7dGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkfTsgZG5zTmFtZTogJHt0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZX1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bm5pbmcgYmFzaCBzY3JpcHRzIG9uIHRoZSBOb2RlIHdpdGggU1NNIERvY3VtZW50LlxuICAgKiBpLmU6IHJ1blBzQ29tbWFuZHMoW1wiZWNobyAnaGVsbG8gd29ybGQnXCIsIFwiZWNobyAnU2Vjb25kIGNvbW1hbmQnXCJdLCBcIm15U2NyaXB0XCIpXG4gICAqL1xuICBydW5TaGVsbENvbW1hbmRzKFNoZWxsQ29tbWFuZHM6IHN0cmluZ1tdLCBpZDogc3RyaW5nKSB7XG4gICAgbmV3IHNzbS5DZm5Bc3NvY2lhdGlvbih0aGlzLCBpZCwge1xuICAgICAgbmFtZTogJ0FXUy1SdW5TaGVsbFNjcmlwdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGNvbW1hbmRzOiBTaGVsbENvbW1hbmRzLFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFt7IGtleTogJ0luc3RhbmNlSWRzJywgdmFsdWVzOiBbdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkXSB9XSxcbiAgICAgIG1heEVycm9yczogJzUnLFxuICAgICAgbWF4Q29uY3VycmVuY3k6ICcxJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5uaW5nIFBvd2VyU2hlbGwgc2NyaXB0cyBvbiB0aGUgTm9kZSB3aXRoIFNTTSBEb2N1bWVudC5cbiAgICogaS5lOiBydW5Qc0NvbW1hbmRzKFtcIldyaXRlLWhvc3QgJ0hlbGxvIHdvcmxkJ1wiLCBcIldyaXRlLWhvc3QgJ1NlY29uZCBjb21tYW5kJ1wiXSwgXCJteVNjcmlwdFwiKVxuICAgKi9cbiAgcnVuUHNDb21tYW5kcyhwc0NvbW1hbmRzOiBzdHJpbmdbXSwgaWQ6IHN0cmluZykge1xuICAgIG5ldyBzc20uQ2ZuQXNzb2NpYXRpb24odGhpcywgaWQsIHtcbiAgICAgIG5hbWU6ICdBV1MtUnVuUG93ZXJTaGVsbFNjcmlwdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGNvbW1hbmRzOiBwc0NvbW1hbmRzLFxuICAgICAgfSxcbiAgICAgIHRhcmdldHM6IFt7IGtleTogJ0luc3RhbmNlSWRzJywgdmFsdWVzOiBbdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkXSB9XSxcbiAgICAgIG1heEVycm9yczogJzUnLFxuICAgICAgbWF4Q29uY3VycmVuY3k6ICcxJyxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogT3BlbiB0aGUgc2VjdXJpdHkgZ3JvdXAgb2YgdGhlIE5vZGUgTm9kZSB0byBzcGVjaWZpYyBJUCBhZGRyZXNzIG9uIHBvcnQgMzM4OVxuICAgKiBpLmU6IG9wZW5SRFAoXCIxLjEuMS4xLzMyXCIpXG4gICAqL1xuICBvcGVuUkRQKGlwYWRkcmVzczogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd0Zyb20oXG4gICAgICBlYzIuUGVlci5pcHY0KGlwYWRkcmVzcyksXG4gICAgICBlYzIuUG9ydC50Y3AoMzM4OSksXG4gICAgICAnQWxsb3cgUkRQJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bm5pbmcgUG93ZXJTaGVsbCBzY3JpcHRzIG9uIHRoZSBOb2RlIHdpdGggU1NNIERvY3VtZW50IHdpdGggRG9tYWluIEFkbWluIChVc2luZyB0aGUgU2VjcmV0IHVzZWQgdG8gam9pbiB0aGUgbWFjaGluZSB0byB0aGUgZG9tYWluKVxuICAgKiBpLmU6IHJ1blBzQ29tbWFuZHMoW1wiV3JpdGUtaG9zdCAnSGVsbG8gd29ybGQnXCIsIFwiV3JpdGUtaG9zdCAnU2Vjb25kIGNvbW1hbmQnXCJdLCBcIm15U2NyaXB0XCIpXG4gICAqIFRoZSBwcm92aWRlZCBwc0NvbW1hbmRzIHdpbGwgYmUgc3RvcmVkIGluIEM6XFxTY3JpcHRzIGFuZCB3aWxsIGJlIHJ1biB3aXRoIHNjaGVkdWxlZCB0YXNrIHdpdGggRG9tYWluIEFkbWluIHJpZ2h0c1xuICAgKi9cbiAgcnVuUFN3aXRoRG9tYWluQWRtaW4ocHNDb21tYW5kczogc3RyaW5nW10sIGlkOiBzdHJpbmcpIHtcbiAgICB2YXIgY29tbWFuZHMgPSBbJyRvbmVUaW1lUFMgPSB7J107XG4gICAgcHNDb21tYW5kcy5mb3JFYWNoKChjb21tYW5kOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gICAgfSk7XG4gICAgY29tbWFuZHMucHVzaChcbiAgICAgICd9JyxcbiAgICAgIGBbc3RyaW5nXSRTZWNyZXRBRCAgPSAnJHt0aGlzLnBhc3N3b3JkT2JqZWN0IS5zZWNyZXROYW1lfSdgLFxuICAgICAgJyRTZWNyZXRPYmogPSBHZXQtU0VDU2VjcmV0VmFsdWUgLVNlY3JldElkICRTZWNyZXRBRCcsXG4gICAgICAnW1BTQ3VzdG9tT2JqZWN0XSRTZWNyZXQgPSAoJFNlY3JldE9iai5TZWNyZXRTdHJpbmcgIHwgQ29udmVydEZyb20tSnNvbiknLFxuICAgICAgJyRwYXNzd29yZCAgID0gJFNlY3JldC5QYXNzd29yZCB8IENvbnZlcnRUby1TZWN1cmVTdHJpbmcgLWFzUGxhaW5UZXh0IC1Gb3JjZScsXG4gICAgICBcIiR1c2VybmFtZSAgID0gJ0FkbWluJ1wiLFxuICAgICAgJyRkb21haW5fYWRtaW5fY3JlZGVudGlhbCA9IE5ldy1PYmplY3QgU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU0NyZWRlbnRpYWwoJHVzZXJuYW1lLCRwYXNzd29yZCknLFxuICAgICAgJ05ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggYzpcXFxcU2NyaXB0cycsXG4gICAgICAnJHRlbXBTY3JpcHRQYXRoID0gXCJDOlxcXFxTY3JpcHRzXFxcXCRQSUQucHMxXCInLFxuICAgICAgJyRvbmVUaW1lUFMgfCBzZXQtY29udGVudCAkdGVtcFNjcmlwdFBhdGgnLFxuICAgICAgJyMgQ3JlYXRlIGEgc2NoZWR1bGVkIHRhc2sgb24gc3RhcnR1cCB0byBleGVjdXRlIHRoZSBtYXBwaW5nJyxcbiAgICAgICckYWN0aW9uID0gTmV3LVNjaGVkdWxlZFRhc2tBY3Rpb24gLUV4ZWN1dGUgXCJQb3dlcnNoZWxsLmV4ZVwiIC1Bcmd1bWVudCAkdGVtcFNjcmlwdFBhdGgnLFxuICAgICAgJyR0cmlnZ2VyID0gIE5ldy1TY2hlZHVsZWRUYXNrVHJpZ2dlciAtT25jZSAtQXQgKGdldC1kYXRlKS5BZGRTZWNvbmRzKDEwKTsgJyxcbiAgICAgICckdHJpZ2dlci5FbmRCb3VuZGFyeSA9IChnZXQtZGF0ZSkuQWRkU2Vjb25kcyg2MCkuVG9TdHJpbmcoXCJzXCIpICcsXG4gICAgICAnUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtRm9yY2UgLUFjdGlvbiAkYWN0aW9uIC1UcmlnZ2VyICR0cmlnZ2VyIC1UYXNrTmFtZSBcIlRhc2sgJFBJRCB0byBydW4gd2l0aCBEb21haW5BZG1pblwiIC1EZXNjcmlwdGlvbiBcIldvcmthcm91bmQgdG8gcnVuIHRoZSBjb2RlIHdpdGggZG9tYWluIGFkbWluXCIgLVJ1bkxldmVsIEhpZ2hlc3QgLVVzZXIgJHVzZXJuYW1lIC1QYXNzd29yZCAkU2VjcmV0LlBhc3N3b3JkJyxcbiAgICApO1xuICAgIG5ldyBzc20uQ2ZuQXNzb2NpYXRpb24odGhpcywgaWQsIHtcbiAgICAgIG5hbWU6ICdBV1MtUnVuUG93ZXJTaGVsbFNjcmlwdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGNvbW1hbmRzOiBjb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbeyBrZXk6ICdJbnN0YW5jZUlkcycsIHZhbHVlczogW3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZF0gfV0sXG4gICAgICBtYXhFcnJvcnM6ICc1JyxcbiAgICAgIG1heENvbmN1cnJlbmN5OiAnMScsXG4gICAgfSk7XG4gIH1cblxuICBzdGFydEluc3RhbmNlKCkge1xuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICAnU3RhcnRJbnN0YW5jZScsXG4gICAgICB7XG4gICAgICAgIHBvbGljeTogQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuZnJvbVNka0NhbGxzKHtcbiAgICAgICAgICByZXNvdXJjZXM6IEF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRSxcbiAgICAgICAgfSksXG4gICAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgICAgc2VydmljZTogJ0VDMicsXG4gICAgICAgICAgYWN0aW9uOiAnc3RhcnRJbnN0YW5jZXMnLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL0VDMi5odG1sI3N0YXJ0SW5zdGFuY2VzLXByb3BlcnR5XG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgSW5zdGFuY2VJZHM6IFt0aGlzLmluc3RhbmNlLmluc3RhbmNlSWRdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiB7XG4gICAgICAgICAgICBpZDogJ3N0YXJ0SW5zdGFuY2UtJyArIHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuICB9XG59XG4iXX0=
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NreWxpZ2h0LWNvbXB1dGUvd2luZG93cy1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCxtQ0FBb0M7QUFDcEMsNkNBU3FCO0FBRXJCLG1FQUdzQztBQUN0QywyQ0FBdUM7QUFxRHZDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFhLGlCQUFrQixTQUFRLHNCQUFTO0lBTTlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBOEI7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixLQUFLLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixJQUFJO1lBQzdELHFCQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUN4Qyw4QkFBOEIsQ0FDL0I7WUFDRCxxQkFBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyx5QkFBeUIsQ0FBQztTQUN0RSxDQUFDO1FBRUYsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDekQsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUN0QyxLQUFLLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUM7UUFFeEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRXJCLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQUcsQ0FBQyxrQkFBa0IsQ0FBQztZQUMzQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE9BQU8sSUFBSSx5Q0FBeUM7WUFDaEUsT0FBTyxFQUFFLEtBQUssQ0FBQyxjQUFjO1NB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UEgsOENBcVBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IDIwMjEgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7XG4gIGF3c19pYW0gYXMgaWFtLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX3NzbSBhcyBzc20sXG4gIENmbk91dHB1dCxcbiAgYXdzX2VjMixcbiAgU3RhY2ssXG4gIEZuLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIsXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElTZWNyZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXInO1xuaW1wb3J0IHtcbiAgQXdzQ3VzdG9tUmVzb3VyY2UsXG4gIEF3c0N1c3RvbVJlc291cmNlUG9saWN5LFxufSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIG9mIGFuIERvbWFpbldpbmRvd3NOb2RlUHJvcHMsIHJlcXVpcmVzIEFjdGl2ZSBEaXJlY3RvcnkgcGFyYW1ldGVyIHRvIHJlYWQgdGhlIFNlY3JldCB0byBqb2luIHRoZSBkb21haW5cbiAqIERlZmF1bHQgc2V0dGluZzogRG9tYWluIGpvaW5lZCwgbTUuMnhsYXJnZSwgbGF0ZXN0IHdpbmRvd3MsIE1hbmFnZWQgYnkgU1NNLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEb21haW5XaW5kb3dzTm9kZVByb3BzIHtcbiAgLyoqXG4gICAqIElBTSBJbnN0YW5jZSByb2xlIHBlcm1pc3Npb25zXG4gICAqIEBkZWZhdWx0IC0gJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUsIEFtYXpvblNTTURpcmVjdG9yeVNlcnZpY2VBY2Nlc3MnLlxuICAgKi9cbiAgaWFtTWFuYWdlZFBvbGljaWVzTGlzdD86IGlhbS5JTWFuYWdlZFBvbGljeVtdO1xuICAvKipcbiAgICogVGhlIEVDMiBJbnN0YW5jZSB0eXBlIHRvIHVzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtICdtNS4yeGxhcmdlJy5cbiAgICovXG4gIGluc3RhbmNlVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIENob29zZSBpZiB0byBsYXVuY2ggdGhlIGluc3RhbmNlIGluIFByaXZhdGUgb3IgaW4gUHVibGljIHN1Ym5ldFxuICAgKiBQcml2YXRlID0gU3VibmV0IHRoYXQgcm91dGVzIHRvIHRoZSBpbnRlcm5ldCwgYnV0IG5vdCB2aWNlIHZlcnNhLlxuICAgKiBQdWJsaWMgPSBTdWJuZXQgdGhhdCByb3V0ZXMgdG8gdGhlIGludGVybmV0IGFuZCB2aWNlIHZlcnNhLlxuICAgKiBAZGVmYXVsdCAtIFByaXZhdGUuXG4gICAqL1xuICB1c2VQcml2YXRlU3VibmV0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBTUkgdG8gc2VhcmNoIGluIFNTTSAoZWMyLkxvb2t1cE5vZGVJbWFnZSkgc3VwcG9ydHMgUmVnZXhcbiAgICogIEBkZWZhdWx0IC0gJ1dpbmRvd3NfU2VydmVyLTIwMjItRW5nbGlzaC1GdWxsJ1xuICAgKi9cbiAgYW1pTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFNwZWNpZmljIFVzZXJEYXRhIHRvIHVzZVxuICAgKlxuICAgKiBUaGUgVXNlckRhdGEgbWF5IHN0aWxsIGJlIG11dGF0ZWQgYWZ0ZXIgY3JlYXRpb24uXG4gICAqXG4gICAqICBAZGVmYXVsdCAtICd1bmRlZmluZWQnXG4gICAqL1xuICB1c2VyRGF0YT86IHN0cmluZztcblxuICBkb21haW5OYW1lPzogc3RyaW5nO1xuICBwYXNzd29yZE9iamVjdD86IGF3c19zZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtICd0cnVlJ1xuICAgKi9cbiAgd2luZG93c01hY2hpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHRvIHVzZVxuICAgKi9cbiAgdnBjOiBlYzIuSVZwYztcbn1cblxuLyoqXG4gKiBBIERvbWFpbiBXaW5kb3dzIE5vZGUgcmVwcmVzZW50cyBvbmUgV2luZG93cyBFQzIgaW5zdGFuY2UgY29uZmlndXJlZCB3aXRoIEFjdGl2ZSBEaXJlY3RvcnkuXG4gKlxuICogVGhlIERvbWFpbldpbmRvd3NOb2RlIGNhbiBiZSBjdXN0b21pemVkIHRvIGRpZmZlcmVudCBpbnN0YW5jZSBzaXplcyBhbmQgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBzZXQganVzdCBsaWtlIGFueSBvdGhlciBFQzIgSW5zdGFuY2UuXG4gKiBZb3UgY2FuIHVzZSB0aGlzIGNvbnN0cnVjdCB0byBydW4gZWxldmF0ZWQgZG9tYWluIHRhc2tzIHdpdGggZG9tYWluIHBlcm1pc3Npb25zIG9yIHJ1biB5b3VyIGFwcGxpY2F0aW9uIGluIGEgc2luZ2xlIGluc3RhbmNlIHNldHVwLlxuICpcbiAqIFRoZSBtYWNoaW5lIHdpbGwgYmUgam9pbmVkIHRvIHRoZSBwcm92aWRlZCBBY3RpdmUgRGlyZWN0b3J5IGRvbWFpbiB1c2luZyBhIGN1c3RvbSBDbG91ZEZvcm1hdGlvbiBib290c3RyYXAgdGhhdCB3aWxsIHdhaXQgdW50aWwgdGhlIHJlcXVpcmVkIHJlYm9vdCB0byBqb2luIHRoZSBkb21haW4uIFRoZW4gaXQgd2lsbCByZWdpc3RlciB0aGUgbWFjaGluZSBpbiBTU00gYW5kIHB1bGwgdGFza3MgZnJvbSB0aGUgU1NNIFN0YXRlIG1hbmFnZXIuXG4gKlxuICogWW91IGNhbiBzZW5kIHRhc2tzIHRvIHRoYXQgbWFjaGluZSB1c2luZyB0aGUgcHJvdmlkZWQgbWV0aG9kczogcnVuUHNDb21tYW5kcygpIGFuZCBydW5QU3dpdGhEb21haW5BZG1pbigpXG4gKlxuICovXG5leHBvcnQgY2xhc3MgRG9tYWluV2luZG93c05vZGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBpbnN0YW5jZTogZWMyLkluc3RhbmNlO1xuICByZWFkb25seSBub2RlUm9sZTogaWFtLlJvbGU7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IHBhc3N3b3JkT2JqZWN0PzogSVNlY3JldDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSURvbWFpbldpbmRvd3NOb2RlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHByb3BzLmlhbU1hbmFnZWRQb2xpY2llc0xpc3QgPSBwcm9wcy5pYW1NYW5hZ2VkUG9saWNpZXNMaXN0ID8/IFtcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgJ0FtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmUnLFxuICAgICAgKSxcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnU2VjcmV0c01hbmFnZXJSZWFkV3JpdGUnKSxcbiAgICBdO1xuXG4gICAgcHJvcHMudXNlUHJpdmF0ZVN1Ym5ldCA9IHByb3BzLnVzZVByaXZhdGVTdWJuZXQgPz8gZmFsc2U7XG4gICAgcHJvcHMudXNlckRhdGEgPSBwcm9wcy51c2VyRGF0YSA/PyAnJztcbiAgICBwcm9wcy53aW5kb3dzTWFjaGluZSA9IHByb3BzLndpbmRvd3NNYWNoaW5lID8/IHRydWU7XG4gICAgdGhpcy5wYXNzd29yZE9iamVjdCA9IHByb3BzLnBhc3N3b3JkT2JqZWN0ID8/IHVuZGVmaW5lZDtcblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuXG4gICAgY29uc3Qgbm9kZUltYWdlID0gbmV3IGVjMi5Mb29rdXBNYWNoaW5lSW1hZ2Uoe1xuICAgICAgbmFtZTogcHJvcHMuYW1pTmFtZSA/PyAnKldpbmRvd3NfU2VydmVyLTIwMjItRW5nbGlzaC1GdWxsLUJhc2UqJyxcbiAgICAgIHdpbmRvd3M6IHByb3BzLndpbmRvd3NNYWNoaW5lLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub2RlUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnaWFtLVJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZWMyLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogcHJvcHMuaWFtTWFuYWdlZFBvbGljaWVzTGlzdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgIH0pO1xuXG4gICAgLy8gU2V0dGluZyBzdGF0aWMgbG9naWNhbCBJRCBmb3IgdGhlIFdvcmtlciwgdG8gYWxsb3cgZnVydGhlciBjdXN0b21pemF0aW9uXG4gICAgY29uc3Qgd29ya2VyTmFtZSA9ICdFQzJOb2RlJyArIGlkO1xuICAgIHdvcmtlck5hbWUucmVwbGFjZSgvW14wLTlhLXpdL2dpLCAnJyk7IC8vY29udmVydCBzdHJpbmcgdG8gYWxwaGFudW1lcmljXG5cbiAgICBpZiAocHJvcHMuZG9tYWluTmFtZSAmJiB0aGlzLnBhc3N3b3JkT2JqZWN0KSB7XG4gICAgICB0aGlzLnBhc3N3b3JkT2JqZWN0LmdyYW50UmVhZCh0aGlzLm5vZGVSb2xlKTtcblxuICAgICAgLy8gQ3JlYXRlIENsb3VkRm9ybWF0aW9uIENvbmZpZyBzZXQgdG8gYWxsb3cgdGhlIERvbWFpbiBqb2luIHJlcG9ydCBiYWNrIHRvIENsb3VkZm9ybWF0aW9uIG9ubHkgYWZ0ZXIgcmVib290LlxuICAgICAgY29uc3QgY29uZmlnID0gZWMyLkNsb3VkRm9ybWF0aW9uSW5pdC5mcm9tQ29uZmlnU2V0cyh7XG4gICAgICAgIGNvbmZpZ1NldHM6IHtcbiAgICAgICAgICBkb21haW5Kb2luUmVzdGFydDogWydkb21haW5Kb2luJywgJ3NpZ25hbCddLFxuICAgICAgICB9LFxuICAgICAgICBjb25maWdzOiB7XG4gICAgICAgICAgZG9tYWluSm9pbjogbmV3IGVjMi5Jbml0Q29uZmlnKFtcbiAgICAgICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgICAgIC8vIFN0ZXAxIDogRG9tYWluIEpvaW4gdXNpbmcgdGhlIFNlY3JldCBwcm92aWRlZFxuICAgICAgICAgICAgICBgcG93ZXJzaGVsbC5leGUgLWNvbW1hbmQgIFwiSW52b2tlLUNvbW1hbmQgLVNjcmlwdEJsb2NrIHtbc3RyaW5nXSRTZWNyZXRBRCAgPSAnJHt0aGlzLnBhc3N3b3JkT2JqZWN0LnNlY3JldE5hbWV9JyA7JFNlY3JldE9iaiA9IEdldC1TRUNTZWNyZXRWYWx1ZSAtU2VjcmV0SWQgJFNlY3JldEFEIDtbUFNDdXN0b21PYmplY3RdJFNlY3JldCA9ICgkU2VjcmV0T2JqLlNlY3JldFN0cmluZyAgfCBDb252ZXJ0RnJvbS1Kc29uKSA7JHBhc3N3b3JkICAgPSAkU2VjcmV0LlBhc3N3b3JkIHwgQ29udmVydFRvLVNlY3VyZVN0cmluZyAtYXNQbGFpblRleHQgLUZvcmNlIDskdXNlcm5hbWUgICA9ICdBZG1pbkAnICsgJyR7cHJvcHMuZG9tYWluTmFtZX0nIDskY3JlZGVudGlhbCA9IE5ldy1PYmplY3QgU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU0NyZWRlbnRpYWwoJHVzZXJuYW1lLCRwYXNzd29yZCkgO0FkZC1Db21wdXRlciAtRG9tYWluTmFtZSAke3Byb3BzLmRvbWFpbk5hbWV9IC1DcmVkZW50aWFsICRjcmVkZW50aWFsOyBSZXN0YXJ0LUNvbXB1dGVyIC1Gb3JjZX1cImAsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB3YWl0QWZ0ZXJDb21wbGV0aW9uOiBlYzIuSW5pdENvbW1hbmRXYWl0RHVyYXRpb24uZm9yZXZlcigpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBzaWduYWw6IG5ldyBlYzIuSW5pdENvbmZpZyhbXG4gICAgICAgICAgICBlYzIuSW5pdENvbW1hbmQuc2hlbGxDb21tYW5kKFxuICAgICAgICAgICAgICAvLyBTdGVwIDM6IENsb3VkRm9ybWF0aW9uIHNpZ25hbFxuICAgICAgICAgICAgICBgY2ZuLXNpZ25hbC5leGUgLS1zdWNjZXNzPXRydWUgLS1yZXNvdXJjZT0ke3dvcmtlck5hbWV9IC0tc3RhY2s9JHtcbiAgICAgICAgICAgICAgICBTdGFjay5vZih0aGlzKS5zdGFja05hbWVcbiAgICAgICAgICAgICAgfSAtLXJlZ2lvbj0ke1N0YWNrLm9mKHRoaXMpLnJlZ2lvbn1gLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2FpdEFmdGVyQ29tcGxldGlvbjogZWMyLkluaXRDb21tYW5kV2FpdER1cmF0aW9uLm5vbmUoKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGF0dGFjaEluaXRPcHRpb25zOiBlYzIuQXR0YWNoSW5pdE9wdGlvbnMgPSB7XG4gICAgICAgIHBsYXRmb3JtOiBlYzIuT3BlcmF0aW5nU3lzdGVtVHlwZS5XSU5ET1dTLFxuICAgICAgICBjb25maWdTZXRzOiBbJ2RvbWFpbkpvaW5SZXN0YXJ0J10sXG4gICAgICAgIGluc3RhbmNlUm9sZTogdGhpcy5ub2RlUm9sZSxcbiAgICAgICAgdXNlckRhdGE6IGF3c19lYzIuVXNlckRhdGEuY3VzdG9tKCcnKSxcbiAgICAgICAgZW1iZWRGaW5nZXJwcmludDogZmFsc2UsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCAnRG9tYWluLUluc3RhbmNlJywge1xuICAgICAgICBpbnN0YW5jZVR5cGU6IG5ldyBlYzIuSW5zdGFuY2VUeXBlKHByb3BzLmluc3RhbmNlVHlwZSA/PyAnbTUubGFyZ2UnKSxcbiAgICAgICAgbWFjaGluZUltYWdlOiBub2RlSW1hZ2UsXG4gICAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICAgIHJvbGU6IHRoaXMubm9kZVJvbGUsXG4gICAgICAgIHNlY3VyaXR5R3JvdXA6IHNlY3VyaXR5R3JvdXAsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHRoaXMudnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldFR5cGU6IHByb3BzLnVzZVByaXZhdGVTdWJuZXRcbiAgICAgICAgICAgID8gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVFxuICAgICAgICAgICAgOiBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgICAgb25lUGVyQXo6IHRydWUsXG4gICAgICAgIH0pLFxuICAgICAgICBpbml0OiBjb25maWcsXG4gICAgICAgIGluaXRPcHRpb25zOiBhdHRhY2hJbml0T3B0aW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBPdmVycmlkZSB0aGUgbG9naWNhbCBJRCBuYW1lIHNvIGl0IGNhbiBiZSByZWZlcmVlZCBiZWZvcmUgaW5pdGlhbGl6ZWRcbiAgICAgIGNvbnN0IENmbkluc3RhbmNlID0gdGhpcy5pbnN0YW5jZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBlYzIuQ2ZuSW5zdGFuY2U7XG4gICAgICBDZm5JbnN0YW5jZS5vdmVycmlkZUxvZ2ljYWxJZCh3b3JrZXJOYW1lKTtcblxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgVXNlckRhdGEgc2NyaXB0IHRvIGV4ZWN1dGUgb25seSB0aGUgY2ZuLWluaXQgKHdpdGhvdXQgY2ZuLXNpZ25hbCkgYXMgd2Ugd2FudCBjZm4tc2lnbmFsIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHJlYm9vdC4gTW9yZSBkZXRhaWxzIGhlcmU6IGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vcHJlbWl1bXN1cHBvcnQva25vd2xlZGdlLWNlbnRlci9jcmVhdGUtY29tcGxldGUtYm9vdHN0cmFwcGluZy9cbiAgICAgIENmbkluc3RhbmNlLnVzZXJEYXRhID0gRm4uYmFzZTY0KFxuICAgICAgICBgPHBvd2Vyc2hlbGw+Y2ZuLWluaXQuZXhlIC12IC1zICR7XG4gICAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lXG4gICAgICAgIH0gLXIgJHt3b3JrZXJOYW1lfSAtLWNvbmZpZ3NldHM9ZG9tYWluSm9pblJlc3RhcnQgLS1yZWdpb24gJHtcbiAgICAgICAgICBTdGFjay5vZih0aGlzKS5yZWdpb25cbiAgICAgICAgfTwvcG93ZXJzaGVsbD5gLFxuICAgICAgKTtcblxuICAgICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgNU0gdGltZW91dCB0byBzdXBwb3J0IGxvbmdlciBXaW5kb3dzIGJvb3QgdGltZVxuICAgICAgQ2ZuSW5zdGFuY2UuY2ZuT3B0aW9ucy5jcmVhdGlvblBvbGljeSA9IHtcbiAgICAgICAgcmVzb3VyY2VTaWduYWw6IHtcbiAgICAgICAgICBjb3VudDogMSxcbiAgICAgICAgICB0aW1lb3V0OiAnUFQzME0nLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnN0YW5jZSA9IG5ldyBlYzIuSW5zdGFuY2UodGhpcywgJ05vbkRvbWFpbi1JbnN0YW5jZScsIHtcbiAgICAgICAgaW5zdGFuY2VUeXBlOiBuZXcgZWMyLkluc3RhbmNlVHlwZShwcm9wcy5pbnN0YW5jZVR5cGUgPz8gJ201LmxhcmdlJyksXG4gICAgICAgIG1hY2hpbmVJbWFnZTogbm9kZUltYWdlLFxuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICByb2xlOiB0aGlzLm5vZGVSb2xlLFxuICAgICAgICBzZWN1cml0eUdyb3VwOiBzZWN1cml0eUdyb3VwLFxuICAgICAgICB2cGNTdWJuZXRzOiB0aGlzLnZwYy5zZWxlY3RTdWJuZXRzKHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBwcm9wcy51c2VQcml2YXRlU3VibmV0XG4gICAgICAgICAgICA/IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVRcbiAgICAgICAgICAgIDogZWMyLlN1Ym5ldFR5cGUuUFVCTElDLFxuICAgICAgICAgIG9uZVBlckF6OiB0cnVlLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFwcGVuZCB0aGUgdXNlciBkYXRhXG4gICAgaWYgKHByb3BzLnVzZXJEYXRhICE9ICcnKSB7XG4gICAgICB0aGlzLmluc3RhbmNlLmFkZFVzZXJEYXRhKHByb3BzLnVzZXJEYXRhKTtcbiAgICB9XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdJbnN0YW5jZUlkJywge1xuICAgICAgdmFsdWU6IGBJbnN0YW5jZUlkOiAke3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZH07IGRuc05hbWU6ICR7dGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0Ruc05hbWV9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5uaW5nIGJhc2ggc2NyaXB0cyBvbiB0aGUgTm9kZSB3aXRoIFNTTSBEb2N1bWVudC5cbiAgICogaS5lOiBydW5Qc0NvbW1hbmRzKFtcImVjaG8gJ2hlbGxvIHdvcmxkJ1wiLCBcImVjaG8gJ1NlY29uZCBjb21tYW5kJ1wiXSwgXCJteVNjcmlwdFwiKVxuICAgKi9cbiAgcnVuU2hlbGxDb21tYW5kcyhTaGVsbENvbW1hbmRzOiBzdHJpbmdbXSwgaWQ6IHN0cmluZykge1xuICAgIG5ldyBzc20uQ2ZuQXNzb2NpYXRpb24odGhpcywgaWQsIHtcbiAgICAgIG5hbWU6ICdBV1MtUnVuU2hlbGxTY3JpcHQnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBjb21tYW5kczogU2hlbGxDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbeyBrZXk6ICdJbnN0YW5jZUlkcycsIHZhbHVlczogW3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZF0gfV0sXG4gICAgICBtYXhFcnJvcnM6ICc1JyxcbiAgICAgIG1heENvbmN1cnJlbmN5OiAnMScsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVubmluZyBQb3dlclNoZWxsIHNjcmlwdHMgb24gdGhlIE5vZGUgd2l0aCBTU00gRG9jdW1lbnQuXG4gICAqIGkuZTogcnVuUHNDb21tYW5kcyhbXCJXcml0ZS1ob3N0ICdIZWxsbyB3b3JsZCdcIiwgXCJXcml0ZS1ob3N0ICdTZWNvbmQgY29tbWFuZCdcIl0sIFwibXlTY3JpcHRcIilcbiAgICovXG4gIHJ1blBzQ29tbWFuZHMocHNDb21tYW5kczogc3RyaW5nW10sIGlkOiBzdHJpbmcpIHtcbiAgICBuZXcgc3NtLkNmbkFzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBuYW1lOiAnQVdTLVJ1blBvd2VyU2hlbGxTY3JpcHQnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBjb21tYW5kczogcHNDb21tYW5kcyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbeyBrZXk6ICdJbnN0YW5jZUlkcycsIHZhbHVlczogW3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZF0gfV0sXG4gICAgICBtYXhFcnJvcnM6ICc1JyxcbiAgICAgIG1heENvbmN1cnJlbmN5OiAnMScsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHNlY3VyaXR5IGdyb3VwIG9mIHRoZSBOb2RlIE5vZGUgdG8gc3BlY2lmaWMgSVAgYWRkcmVzcyBvbiBwb3J0IDMzODlcbiAgICogaS5lOiBvcGVuUkRQKFwiMS4xLjEuMS8zMlwiKVxuICAgKi9cbiAgb3BlblJEUChpcGFkZHJlc3M6IHN0cmluZykge1xuICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgZWMyLlBlZXIuaXB2NChpcGFkZHJlc3MpLFxuICAgICAgZWMyLlBvcnQudGNwKDMzODkpLFxuICAgICAgJ0FsbG93IFJEUCcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5uaW5nIFBvd2VyU2hlbGwgc2NyaXB0cyBvbiB0aGUgTm9kZSB3aXRoIFNTTSBEb2N1bWVudCB3aXRoIERvbWFpbiBBZG1pbiAoVXNpbmcgdGhlIFNlY3JldCB1c2VkIHRvIGpvaW4gdGhlIG1hY2hpbmUgdG8gdGhlIGRvbWFpbilcbiAgICogaS5lOiBydW5Qc0NvbW1hbmRzKFtcIldyaXRlLWhvc3QgJ0hlbGxvIHdvcmxkJ1wiLCBcIldyaXRlLWhvc3QgJ1NlY29uZCBjb21tYW5kJ1wiXSwgXCJteVNjcmlwdFwiKVxuICAgKiBUaGUgcHJvdmlkZWQgcHNDb21tYW5kcyB3aWxsIGJlIHN0b3JlZCBpbiBDOlxcU2NyaXB0cyBhbmQgd2lsbCBiZSBydW4gd2l0aCBzY2hlZHVsZWQgdGFzayB3aXRoIERvbWFpbiBBZG1pbiByaWdodHNcbiAgICovXG4gIHJ1blBTd2l0aERvbWFpbkFkbWluKHBzQ29tbWFuZHM6IHN0cmluZ1tdLCBpZDogc3RyaW5nKSB7XG4gICAgLy8gSm9pbiBjb21tYW5kcyBhbmQgZW5jb2RlIGFzIGJhc2U2NFxuICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBwc0NvbW1hbmRzLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGJhc2U2NFNjcmlwdCA9IEJ1ZmZlci5mcm9tKHNjcmlwdENvbnRlbnQsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGNvbnRlbnRIYXNoID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHNjcmlwdENvbnRlbnQpLmRpZ2VzdCgnaGV4Jykuc2xpY2UoMCwgNik7XG5cbiAgICBjb25zdCBjb21tYW5kcyA9IFtcbiAgICAgIGBbc3RyaW5nXSRTZWNyZXRBRCAgPSAnJHt0aGlzLnBhc3N3b3JkT2JqZWN0IS5zZWNyZXROYW1lfSdgLFxuICAgICAgJyRTZWNyZXRPYmogPSBHZXQtU0VDU2VjcmV0VmFsdWUgLVNlY3JldElkICRTZWNyZXRBRCcsXG4gICAgICAnW1BTQ3VzdG9tT2JqZWN0XSRTZWNyZXQgPSAoJFNlY3JldE9iai5TZWNyZXRTdHJpbmcgIHwgQ29udmVydEZyb20tSnNvbiknLFxuICAgICAgJyRwYXNzd29yZCAgID0gJFNlY3JldC5QYXNzd29yZCB8IENvbnZlcnRUby1TZWN1cmVTdHJpbmcgLWFzUGxhaW5UZXh0IC1Gb3JjZScsXG4gICAgICBcIiR1c2VybmFtZSAgID0gJ0FkbWluJ1wiLFxuICAgICAgJyRkb21haW5fYWRtaW5fY3JlZGVudGlhbCA9IE5ldy1PYmplY3QgU3lzdGVtLk1hbmFnZW1lbnQuQXV0b21hdGlvbi5QU0NyZWRlbnRpYWwoJHVzZXJuYW1lLCRwYXNzd29yZCknLFxuICAgICAgJ05ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggYzpcXFxcU2NyaXB0cyAtRm9yY2UnLFxuICAgICAgYCR0ZW1wU2NyaXB0UGF0aCA9IFwiQzpcXFxcU2NyaXB0c1xcXFwke2lkfS0ke2NvbnRlbnRIYXNofS5wczFcImAsXG4gICAgICAvLyBEZWNvZGUgYmFzZTY0IGFuZCB3cml0ZSB0byBmaWxlXG4gICAgICBgW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRTdHJpbmcoW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygnJHtiYXNlNjRTY3JpcHR9JykpIHwgU2V0LUNvbnRlbnQgJHRlbXBTY3JpcHRQYXRoYCxcbiAgICAgICcjIENyZWF0ZSBhIHNjaGVkdWxlZCB0YXNrIG9uIHN0YXJ0dXAgdG8gZXhlY3V0ZSB0aGUgbWFwcGluZycsXG4gICAgICAnJGFjdGlvbiA9IE5ldy1TY2hlZHVsZWRUYXNrQWN0aW9uIC1FeGVjdXRlIFwiUG93ZXJzaGVsbC5leGVcIiAtQXJndW1lbnQgJHRlbXBTY3JpcHRQYXRoJyxcbiAgICAgICckdHJpZ2dlciA9IE5ldy1TY2hlZHVsZWRUYXNrVHJpZ2dlciAtT25jZSAtQXQgKGdldC1kYXRlKS5BZGRTZWNvbmRzKDEwKScsXG4gICAgICAnJHRyaWdnZXIuRW5kQm91bmRhcnkgPSAoZ2V0LWRhdGUpLkFkZFNlY29uZHMoNjApLlRvU3RyaW5nKFwic1wiKScsXG4gICAgICBgUmVnaXN0ZXItU2NoZWR1bGVkVGFzayAtRm9yY2UgLUFjdGlvbiAkYWN0aW9uIC1UcmlnZ2VyICR0cmlnZ2VyIC1UYXNrTmFtZSBcIlRhc2sgJHtpZH0gdG8gcnVuIHdpdGggRG9tYWluQWRtaW5cIiAtRGVzY3JpcHRpb24gXCJXb3JrYXJvdW5kIHRvIHJ1biB0aGUgY29kZSB3aXRoIGRvbWFpbiBhZG1pblwiIC1SdW5MZXZlbCBIaWdoZXN0IC1Vc2VyICR1c2VybmFtZSAtUGFzc3dvcmQgJFNlY3JldC5QYXNzd29yZGAsXG4gICAgXTtcbiAgICBuZXcgc3NtLkNmbkFzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICBuYW1lOiAnQVdTLVJ1blBvd2VyU2hlbGxTY3JpcHQnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBjb21tYW5kczogY29tbWFuZHMsXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW3sga2V5OiAnSW5zdGFuY2VJZHMnLCB2YWx1ZXM6IFt0aGlzLmluc3RhbmNlLmluc3RhbmNlSWRdIH1dLFxuICAgICAgbWF4RXJyb3JzOiAnNScsXG4gICAgICBtYXhDb25jdXJyZW5jeTogJzEnLFxuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRJbnN0YW5jZSgpIHtcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgJ1N0YXJ0SW5zdGFuY2UnLFxuICAgICAge1xuICAgICAgICBpbnN0YWxsTGF0ZXN0QXdzU2RrOiBmYWxzZSxcbiAgICAgICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICAgIHJlc291cmNlczogQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFLFxuICAgICAgICB9KSxcbiAgICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgICBzZXJ2aWNlOiAnRUMyJyxcbiAgICAgICAgICBhY3Rpb246ICdzdGFydEluc3RhbmNlcycsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvRUMyLmh0bWwjc3RhcnRJbnN0YW5jZXMtcHJvcGVydHlcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBJbnN0YW5jZUlkczogW3RoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IHtcbiAgICAgICAgICAgIGlkOiAnc3RhcnRJbnN0YW5jZS0nICsgdGhpcy5pbnN0YW5jZS5pbnN0YW5jZUlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -78,7 +78,7 @@
78
78
  "publishConfig": {
79
79
  "access": "public"
80
80
  },
81
- "version": "0.0.2",
81
+ "version": "0.0.3",
82
82
  "jest": {
83
83
  "coverageProvider": "v8",
84
84
  "testMatch": [