aws-cdk 2.3.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/LICENSE +1 -1
  2. package/NOTICE +1 -1
  3. package/README.md +4 -1
  4. package/bin/cdk.js +7 -6
  5. package/build-info.json +2 -2
  6. package/lib/api/aws-auth/sdk-provider.d.ts +26 -1
  7. package/lib/api/aws-auth/sdk-provider.js +14 -24
  8. package/lib/api/aws-auth/sdk.d.ts +2 -0
  9. package/lib/api/aws-auth/sdk.js +4 -1
  10. package/lib/api/bootstrap/bootstrap-template.yaml +3 -1
  11. package/lib/api/bootstrap/deploy-bootstrap.js +2 -2
  12. package/lib/api/cloudformation-deployments.d.ts +63 -1
  13. package/lib/api/cloudformation-deployments.js +66 -3
  14. package/lib/api/cxapp/cloud-assembly.js +5 -5
  15. package/lib/api/deploy-stack.js +10 -4
  16. package/lib/api/hotswap/code-build-projects.d.ts +3 -0
  17. package/lib/api/hotswap/code-build-projects.js +53 -0
  18. package/lib/api/hotswap/common.d.ts +17 -1
  19. package/lib/api/hotswap/common.js +30 -6
  20. package/lib/api/hotswap/ecs-services.js +4 -18
  21. package/lib/api/hotswap/lambda-functions.js +169 -44
  22. package/lib/api/hotswap/s3-bucket-deployments.js +3 -10
  23. package/lib/api/hotswap/stepfunctions-state-machines.js +2 -1
  24. package/lib/api/hotswap-deployments.d.ts +0 -7
  25. package/lib/api/hotswap-deployments.js +85 -13
  26. package/lib/api/toolkit-info.d.ts +5 -5
  27. package/lib/api/toolkit-info.js +10 -10
  28. package/lib/api/util/cloudformation/stack-activity-monitor.js +22 -22
  29. package/lib/assets.js +3 -3
  30. package/lib/cdk-toolkit.js +66 -32
  31. package/lib/commands/context.js +7 -7
  32. package/lib/commands/docs.js +5 -5
  33. package/lib/commands/doctor.js +6 -6
  34. package/lib/context-providers/ami.js +2 -2
  35. package/lib/context-providers/availability-zones.js +2 -2
  36. package/lib/context-providers/endpoint-service-availability-zones.js +2 -2
  37. package/lib/context-providers/hosted-zones.js +2 -2
  38. package/lib/context-providers/keys.js +2 -2
  39. package/lib/context-providers/load-balancers.js +3 -3
  40. package/lib/context-providers/security-groups.js +2 -2
  41. package/lib/context-providers/ssm-parameters.js +2 -2
  42. package/lib/context-providers/vpcs.js +2 -2
  43. package/lib/diff.js +3 -3
  44. package/lib/init.js +15 -14
  45. package/lib/logging.js +7 -7
  46. package/lib/os.js +3 -3
  47. package/lib/plugin.js +4 -4
  48. package/lib/util/asset-publishing.js +3 -3
  49. package/lib/util/console-formatters.js +4 -3
  50. package/lib/util/npm.d.ts +1 -0
  51. package/lib/util/npm.js +21 -0
  52. package/lib/version.d.ts +1 -1
  53. package/lib/version.js +23 -20
  54. package/npm-shrinkwrap.json +229 -101
  55. package/package.json +19 -18
  56. package/test/api/cloudformation-deployments.test.js +2 -2
  57. package/test/api/hotswap/{lambda-hotswap-deployments.test.d.ts → code-build-projects-hotswap-deployments.test.d.ts} +0 -0
  58. package/test/api/hotswap/code-build-projects-hotswap-deployments.test.js +576 -0
  59. package/test/api/hotswap/hotswap-deployments.test.js +4 -2
  60. package/test/api/hotswap/hotswap-test-setup.d.ts +3 -1
  61. package/test/api/hotswap/hotswap-test-setup.js +7 -4
  62. package/test/api/hotswap/lambda-functions-hotswap-deployments.test.d.ts +1 -0
  63. package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +502 -0
  64. package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.d.ts +1 -0
  65. package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.js +197 -0
  66. package/test/api/sdk-provider.test.js +11 -11
  67. package/test/api/stack-activity-monitor.test.js +13 -13
  68. package/test/cdk-toolkit.test.js +240 -13
  69. package/test/context-providers/load-balancers.test.js +4 -4
  70. package/test/init.test.js +5 -4
  71. package/test/util/cloudformation.test.js +2 -2
  72. package/test/util/console-formatters.test.js +6 -6
  73. package/test/util/mock-sdk.d.ts +4 -2
  74. package/test/util/mock-sdk.js +6 -2
  75. package/test/util/mock-toolkitinfo.js +2 -2
  76. package/test/version.test.js +45 -3
  77. package/test/api/hotswap/lambda-hotswap-deployments.test.js +0 -418
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const setup = require("./hotswap-test-setup");
4
+ let mockUpdateLambdaCode;
5
+ let mockPublishVersion;
6
+ let mockUpdateAlias;
7
+ let hotswapMockSdkProvider;
8
+ beforeEach(() => {
9
+ hotswapMockSdkProvider = setup.setupHotswapTests();
10
+ mockUpdateLambdaCode = jest.fn();
11
+ mockPublishVersion = jest.fn();
12
+ mockUpdateAlias = jest.fn();
13
+ hotswapMockSdkProvider.stubLambda({
14
+ updateFunctionCode: mockUpdateLambdaCode,
15
+ publishVersion: mockPublishVersion,
16
+ updateAlias: mockUpdateAlias,
17
+ waitFor: jest.fn(),
18
+ });
19
+ });
20
+ test('hotswaps a Version if it points to a changed Function, even if it itself is unchanged', async () => {
21
+ // GIVEN
22
+ setup.setCurrentCfnStackTemplate({
23
+ Resources: {
24
+ Func: {
25
+ Type: 'AWS::Lambda::Function',
26
+ Properties: {
27
+ Code: {
28
+ S3Bucket: 'current-bucket',
29
+ S3Key: 'current-key',
30
+ },
31
+ FunctionName: 'my-function',
32
+ },
33
+ },
34
+ Version: {
35
+ Type: 'AWS::Lambda::Version',
36
+ Properties: {
37
+ FunctionName: { Ref: 'Func' },
38
+ },
39
+ },
40
+ },
41
+ });
42
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
43
+ template: {
44
+ Resources: {
45
+ Func: {
46
+ Type: 'AWS::Lambda::Function',
47
+ Properties: {
48
+ Code: {
49
+ S3Bucket: 'current-bucket',
50
+ S3Key: 'new-key',
51
+ },
52
+ FunctionName: 'my-function',
53
+ },
54
+ },
55
+ Version: {
56
+ Type: 'AWS::Lambda::Version',
57
+ Properties: {
58
+ FunctionName: { Ref: 'Func' },
59
+ },
60
+ },
61
+ },
62
+ },
63
+ });
64
+ // WHEN
65
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
66
+ // THEN
67
+ expect(deployStackResult).not.toBeUndefined();
68
+ expect(mockPublishVersion).toHaveBeenCalledWith({
69
+ FunctionName: 'my-function',
70
+ });
71
+ });
72
+ test('hotswaps a Version if it points to a changed Function, even if it itself is replaced', async () => {
73
+ // GIVEN
74
+ setup.setCurrentCfnStackTemplate({
75
+ Resources: {
76
+ Func: {
77
+ Type: 'AWS::Lambda::Function',
78
+ Properties: {
79
+ Code: {
80
+ S3Bucket: 'current-bucket',
81
+ S3Key: 'current-key',
82
+ },
83
+ FunctionName: 'my-function',
84
+ },
85
+ },
86
+ Version1: {
87
+ Type: 'AWS::Lambda::Version',
88
+ Properties: {
89
+ FunctionName: { Ref: 'Func' },
90
+ },
91
+ },
92
+ },
93
+ });
94
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
95
+ template: {
96
+ Resources: {
97
+ Func: {
98
+ Type: 'AWS::Lambda::Function',
99
+ Properties: {
100
+ Code: {
101
+ S3Bucket: 'current-bucket',
102
+ S3Key: 'new-key',
103
+ },
104
+ FunctionName: 'my-function',
105
+ },
106
+ },
107
+ Version2: {
108
+ Type: 'AWS::Lambda::Version',
109
+ Properties: {
110
+ FunctionName: { Ref: 'Func' },
111
+ },
112
+ },
113
+ },
114
+ },
115
+ });
116
+ // WHEN
117
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
118
+ // THEN
119
+ expect(deployStackResult).not.toBeUndefined();
120
+ expect(mockPublishVersion).toHaveBeenCalledWith({
121
+ FunctionName: 'my-function',
122
+ });
123
+ });
124
+ test('hotswaps a Version and an Alias if the Function they point to changed', async () => {
125
+ // GIVEN
126
+ setup.setCurrentCfnStackTemplate({
127
+ Resources: {
128
+ Func: {
129
+ Type: 'AWS::Lambda::Function',
130
+ Properties: {
131
+ Code: {
132
+ S3Bucket: 'current-bucket',
133
+ S3Key: 'current-key',
134
+ },
135
+ FunctionName: 'my-function',
136
+ },
137
+ },
138
+ Version1: {
139
+ Type: 'AWS::Lambda::Version',
140
+ Properties: {
141
+ FunctionName: { Ref: 'Func' },
142
+ },
143
+ },
144
+ Alias: {
145
+ Type: 'AWS::Lambda::Alias',
146
+ Properties: {
147
+ FunctionName: { Ref: 'Func' },
148
+ FunctionVersion: { 'Fn::GetAtt': ['Version1', 'Version'] },
149
+ Name: 'dev',
150
+ },
151
+ },
152
+ },
153
+ });
154
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
155
+ template: {
156
+ Resources: {
157
+ Func: {
158
+ Type: 'AWS::Lambda::Function',
159
+ Properties: {
160
+ Code: {
161
+ S3Bucket: 'current-bucket',
162
+ S3Key: 'new-key',
163
+ },
164
+ FunctionName: 'my-function',
165
+ },
166
+ },
167
+ Version2: {
168
+ Type: 'AWS::Lambda::Version',
169
+ Properties: {
170
+ FunctionName: { Ref: 'Func' },
171
+ },
172
+ },
173
+ Alias: {
174
+ Type: 'AWS::Lambda::Alias',
175
+ Properties: {
176
+ FunctionName: { Ref: 'Func' },
177
+ FunctionVersion: { 'Fn::GetAtt': ['Version2', 'Version'] },
178
+ Name: 'dev',
179
+ },
180
+ },
181
+ },
182
+ },
183
+ });
184
+ mockPublishVersion.mockReturnValue({
185
+ Version: 'v2',
186
+ });
187
+ // WHEN
188
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
189
+ // THEN
190
+ expect(deployStackResult).not.toBeUndefined();
191
+ expect(mockUpdateAlias).toHaveBeenCalledWith({
192
+ FunctionName: 'my-function',
193
+ FunctionVersion: 'v2',
194
+ Name: 'dev',
195
+ });
196
+ });
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLXZlcnNpb25zLWFsaWFzZXMtaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibGFtYmRhLXZlcnNpb25zLWFsaWFzZXMtaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOENBQThDO0FBRTlDLElBQUksb0JBQTRHLENBQUM7QUFDakgsSUFBSSxrQkFBMkYsQ0FBQztBQUNoRyxJQUFJLGVBQWlGLENBQUM7QUFDdEYsSUFBSSxzQkFBb0QsQ0FBQztBQUV6RCxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2Qsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbkQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2pDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixlQUFlLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzVCLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztRQUNoQyxrQkFBa0IsRUFBRSxvQkFBb0I7UUFDeEMsY0FBYyxFQUFFLGtCQUFrQjtRQUNsQyxXQUFXLEVBQUUsZUFBZTtRQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUNuQixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx1RkFBdUYsRUFBRSxLQUFLLElBQUksRUFBRTtJQUN2RyxRQUFRO0lBQ1IsS0FBSyxDQUFDLDBCQUEwQixDQUFDO1FBQy9CLFNBQVMsRUFBRTtZQUNULElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFO3dCQUNKLFFBQVEsRUFBRSxnQkFBZ0I7d0JBQzFCLEtBQUssRUFBRSxhQUFhO3FCQUNyQjtvQkFDRCxZQUFZLEVBQUUsYUFBYTtpQkFDNUI7YUFD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QixVQUFVLEVBQUU7d0JBQ1YsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTt3QkFDN0IsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxFQUFFO3dCQUMxRCxJQUFJLEVBQUUsS0FBSztxQkFDWjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxrQkFBa0IsQ0FBQyxlQUFlLENBQUM7UUFDakMsT0FBTyxFQUFFLElBQUk7S0FDZCxDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUYsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsb0JBQW9CLENBQUM7UUFDM0MsWUFBWSxFQUFFLGFBQWE7UUFDM0IsZUFBZSxFQUFFLElBQUk7UUFDckIsSUFBSSxFQUFFLEtBQUs7S0FDWixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhbWJkYSB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgc2V0dXAgZnJvbSAnLi9ob3Rzd2FwLXRlc3Qtc2V0dXAnO1xuXG5sZXQgbW9ja1VwZGF0ZUxhbWJkYUNvZGU6IChwYXJhbXM6IExhbWJkYS5UeXBlcy5VcGRhdGVGdW5jdGlvbkNvZGVSZXF1ZXN0KSA9PiBMYW1iZGEuVHlwZXMuRnVuY3Rpb25Db25maWd1cmF0aW9uO1xubGV0IG1vY2tQdWJsaXNoVmVyc2lvbjogamVzdC5Nb2NrPExhbWJkYS5GdW5jdGlvbkNvbmZpZ3VyYXRpb24sIExhbWJkYS5QdWJsaXNoVmVyc2lvblJlcXVlc3RbXT47XG5sZXQgbW9ja1VwZGF0ZUFsaWFzOiAocGFyYW1zOiBMYW1iZGEuVXBkYXRlQWxpYXNSZXF1ZXN0KSA9PiBMYW1iZGEuQWxpYXNDb25maWd1cmF0aW9uO1xubGV0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXI6IHNldHVwLkhvdHN3YXBNb2NrU2RrUHJvdmlkZXI7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gc2V0dXAuc2V0dXBIb3Rzd2FwVGVzdHMoKTtcbiAgbW9ja1VwZGF0ZUxhbWJkYUNvZGUgPSBqZXN0LmZuKCk7XG4gIG1vY2tQdWJsaXNoVmVyc2lvbiA9IGplc3QuZm4oKTtcbiAgbW9ja1VwZGF0ZUFsaWFzID0gamVzdC5mbigpO1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgIHVwZGF0ZUZ1bmN0aW9uQ29kZTogbW9ja1VwZGF0ZUxhbWJkYUNvZGUsXG4gICAgcHVibGlzaFZlcnNpb246IG1vY2tQdWJsaXNoVmVyc2lvbixcbiAgICB1cGRhdGVBbGlhczogbW9ja1VwZGF0ZUFsaWFzLFxuICAgIHdhaXRGb3I6IGplc3QuZm4oKSxcbiAgfSk7XG59KTtcblxudGVzdCgnaG90c3dhcHMgYSBWZXJzaW9uIGlmIGl0IHBvaW50cyB0byBhIGNoYW5nZWQgRnVuY3Rpb24sIGV2ZW4gaWYgaXQgaXRzZWxmIGlzIHVuY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgRnVuYzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIENvZGU6IHtcbiAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgUzNLZXk6ICdjdXJyZW50LWtleScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBGdW5jdGlvbk5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgVmVyc2lvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OlZlcnNpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7IFJlZjogJ0Z1bmMnIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgICBTM0tleTogJ25ldy1rZXknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHsgUmVmOiAnRnVuYycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tQdWJsaXNoVmVyc2lvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgfSk7XG59KTtcblxudGVzdCgnaG90c3dhcHMgYSBWZXJzaW9uIGlmIGl0IHBvaW50cyB0byBhIGNoYW5nZWQgRnVuY3Rpb24sIGV2ZW4gaWYgaXQgaXRzZWxmIGlzIHJlcGxhY2VkJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBGdW5jOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgQ29kZToge1xuICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICBTM0tleTogJ2N1cnJlbnQta2V5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBWZXJzaW9uMToge1xuICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OlZlcnNpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7IFJlZjogJ0Z1bmMnIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgICBTM0tleTogJ25ldy1rZXknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBWZXJzaW9uMjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6VmVyc2lvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiB7IFJlZjogJ0Z1bmMnIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrUHVibGlzaFZlcnNpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBGdW5jdGlvbk5hbWU6ICdteS1mdW5jdGlvbicsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ2hvdHN3YXBzIGEgVmVyc2lvbiBhbmQgYW4gQWxpYXMgaWYgdGhlIEZ1bmN0aW9uIHRoZXkgcG9pbnQgdG8gY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgRnVuYzoge1xuICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIENvZGU6IHtcbiAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgUzNLZXk6ICdjdXJyZW50LWtleScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBGdW5jdGlvbk5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgVmVyc2lvbjE6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogeyBSZWY6ICdGdW5jJyB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIEFsaWFzOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6QWxpYXMnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7IFJlZjogJ0Z1bmMnIH0sXG4gICAgICAgICAgRnVuY3Rpb25WZXJzaW9uOiB7ICdGbjo6R2V0QXR0JzogWydWZXJzaW9uMScsICdWZXJzaW9uJ10gfSxcbiAgICAgICAgICBOYW1lOiAnZGV2JyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIENvZGU6IHtcbiAgICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICAgIFMzS2V5OiAnbmV3LWtleScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiAnbXktZnVuY3Rpb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFZlcnNpb24yOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpWZXJzaW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHsgUmVmOiAnRnVuYycgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBBbGlhczoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6QWxpYXMnLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogeyBSZWY6ICdGdW5jJyB9LFxuICAgICAgICAgICAgRnVuY3Rpb25WZXJzaW9uOiB7ICdGbjo6R2V0QXR0JzogWydWZXJzaW9uMicsICdWZXJzaW9uJ10gfSxcbiAgICAgICAgICAgIE5hbWU6ICdkZXYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBtb2NrUHVibGlzaFZlcnNpb24ubW9ja1JldHVyblZhbHVlKHtcbiAgICBWZXJzaW9uOiAndjInLFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVBbGlhcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICBGdW5jdGlvblZlcnNpb246ICd2MicsXG4gICAgTmFtZTogJ2RldicsXG4gIH0pO1xufSk7XG4iXX0=
@@ -88,7 +88,7 @@ describe('with intercepted network calls', () => {
88
88
  expect(provider.defaultRegion).toEqual('eu-bla-5');
89
89
  await expect(provider.defaultAccount()).resolves.toEqual({ accountId: uniq('11111'), partition: 'aws-here' });
90
90
  // Ask for a different region
91
- const sdk = await provider.forEnvironment({ ...env(uniq('11111')), region: 'rgn' }, aws_auth_1.Mode.ForReading);
91
+ const sdk = (await provider.forEnvironment({ ...env(uniq('11111')), region: 'rgn' }, aws_auth_1.Mode.ForReading)).sdk;
92
92
  expect(sdkConfig(sdk).credentials.accessKeyId).toEqual(uniq('access'));
93
93
  expect(sdk.currentRegion).toEqual('rgn');
94
94
  });
@@ -116,7 +116,7 @@ describe('with intercepted network calls', () => {
116
116
  });
117
117
  const provider = await providerFromProfile(undefined);
118
118
  // THEN
119
- const sdk = await provider.forEnvironment(cxapi.EnvironmentUtils.make(cxapi.UNKNOWN_ACCOUNT, cxapi.UNKNOWN_REGION), aws_auth_1.Mode.ForReading);
119
+ const sdk = (await provider.forEnvironment(cxapi.EnvironmentUtils.make(cxapi.UNKNOWN_ACCOUNT, cxapi.UNKNOWN_REGION), aws_auth_1.Mode.ForReading)).sdk;
120
120
  expect(sdkConfig(sdk).credentials.accessKeyId).toEqual(uniq('access'));
121
121
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('11111'));
122
122
  expect(sdk.currentRegion).toEqual('eu-bla-5');
@@ -155,7 +155,7 @@ describe('with intercepted network calls', () => {
155
155
  // THEN
156
156
  expect(provider.defaultRegion).toEqual('eu-west-1');
157
157
  await expect(provider.defaultAccount()).resolves.toEqual({ accountId: uniq('22222'), partition: 'aws' });
158
- const sdk = await provider.forEnvironment(env(uniq('22222')), aws_auth_1.Mode.ForReading);
158
+ const sdk = (await provider.forEnvironment(env(uniq('22222')), aws_auth_1.Mode.ForReading)).sdk;
159
159
  expect(sdkConfig(sdk).credentials.accessKeyId).toEqual(uniq('fooccess'));
160
160
  });
161
161
  test('supports profile only in config_file', async () => {
@@ -171,7 +171,7 @@ describe('with intercepted network calls', () => {
171
171
  // THEN
172
172
  expect(provider.defaultRegion).toEqual('eu-bla-5'); // Fall back to default config
173
173
  await expect(provider.defaultAccount()).resolves.toEqual({ accountId: uniq('22222'), partition: 'aws' });
174
- const sdk = await provider.forEnvironment(env(uniq('22222')), aws_auth_1.Mode.ForReading);
174
+ const sdk = (await provider.forEnvironment(env(uniq('22222')), aws_auth_1.Mode.ForReading)).sdk;
175
175
  expect(sdkConfig(sdk).credentials.accessKeyId).toEqual(uniq('fooccess'));
176
176
  });
177
177
  test('can assume-role configured in config', async () => {
@@ -194,7 +194,7 @@ describe('with intercepted network calls', () => {
194
194
  });
195
195
  const provider = await providerFromProfile('assumable');
196
196
  // WHEN
197
- const sdk = await provider.forEnvironment(env(uniq('66666')), aws_auth_1.Mode.ForReading);
197
+ const sdk = (await provider.forEnvironment(env(uniq('66666')), aws_auth_1.Mode.ForReading)).sdk;
198
198
  // THEN
199
199
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('66666'));
200
200
  });
@@ -237,7 +237,7 @@ describe('with intercepted network calls', () => {
237
237
  const provider = await providerFromProfile('mfa-role');
238
238
  const promptlyMockCalls = promptly.prompt.mock.calls.length;
239
239
  // THEN
240
- const sdk = await provider.forEnvironment(env(uniq('66666')), aws_auth_1.Mode.ForReading);
240
+ const sdk = (await provider.forEnvironment(env(uniq('66666')), aws_auth_1.Mode.ForReading)).sdk;
241
241
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('66666'));
242
242
  expect(fakeSts.assumedRoles[0]).toEqual(expect.objectContaining({
243
243
  roleArn: 'arn:aws:iam::66666:role/Assumable',
@@ -284,7 +284,7 @@ describe('with intercepted network calls', () => {
284
284
  userInfo.mockReturnValue({ username: 'skål', uid: 1, gid: 1, homedir: '/here', shell: '/bin/sh' });
285
285
  // WHEN
286
286
  const provider = await providerFromProfile(undefined);
287
- const sdk = await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' });
287
+ const sdk = (await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' })).sdk;
288
288
  await sdk.currentAccount();
289
289
  // THEN
290
290
  expect(fakeSts.assumedRoles[0]).toEqual(expect.objectContaining({
@@ -302,7 +302,7 @@ describe('with intercepted network calls', () => {
302
302
  });
303
303
  const provider = await providerFromProfile(undefined);
304
304
  // WHEN
305
- const sdk = await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' });
305
+ const sdk = (await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' })).sdk;
306
306
  // THEN
307
307
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('88888'));
308
308
  });
@@ -316,7 +316,7 @@ describe('with intercepted network calls', () => {
316
316
  });
317
317
  const provider = await providerFromProfile(undefined);
318
318
  // WHEN - assumeRole fails because the role can only be assumed from account 11111
319
- const sdk = await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' });
319
+ const sdk = (await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' })).sdk;
320
320
  // THEN
321
321
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('88888'));
322
322
  });
@@ -351,7 +351,7 @@ describe('with intercepted network calls', () => {
351
351
  });
352
352
  test('even if AssumeRole fails but current credentials are from a plugin, we will still use them', async () => {
353
353
  const provider = await providerFromProfile(undefined);
354
- const sdk = await provider.forEnvironment(env(uniq('99999')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'does:not:exist' });
354
+ const sdk = (await provider.forEnvironment(env(uniq('99999')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'does:not:exist' })).sdk;
355
355
  // THEN
356
356
  expect((await sdk.currentAccount()).accountId).toEqual(uniq('99999'));
357
357
  });
@@ -540,4 +540,4 @@ function isProfileRole(x) {
540
540
  function providerFromProfile(profile) {
541
541
  return aws_auth_1.SdkProvider.withAwsCliCompatibleDefaults({ ...defaultCredOptions, profile });
542
542
  }
543
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBRS9CLHFDQUFxQztBQUNyQyw2QkFBNkI7QUFDN0IscURBQXNFO0FBQ3RFLDZDQUE2QztBQUM3Qyw2Q0FBOEM7QUFDOUMsb0NBQW9DO0FBQ3BDLGtDQUFxQztBQUNyQyx5Q0FBK0U7QUFFL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztDQUM1QyxDQUFDLENBQUMsQ0FBQztBQUVKLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsUUFBUSxFQUFFLEtBQUs7SUFDZixjQUFjLEVBQUUsS0FBSztDQUN0QixDQUFDO0FBRUYsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxpQkFBaUI7SUFDakIsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRixpREFBaUQ7SUFDakQsK0NBQStDO0lBQy9DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBRXZCLE9BQU8sQ0FBQyxXQUFXLGVBQXdCLENBQUM7SUFFNUMsbUJBQVUsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELG1CQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztRQUNqRCxXQUFXLEtBQUssT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxxQkFBcUIsQ0FBQyxPQUFPLElB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QztvQkFDekMsTUFBQSxPQUFPLENBQUMsT0FBTywwQ0FBRSxZQUFZLENBQUMsSUFBSSxPQUFDLElBQUksQ0FBQyxRQUFRLG1DQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFO2lCQUNuSDthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNuQztTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLENBQUM7UUFDTCwyQkFBMkIsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUNqRSxzQkFBc0IsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUN4RCxDQUFDLENBQUM7SUFFSCx5Q0FBeUM7SUFDekMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ3JGLENBQUM7QUFrQ0QsU0FBUyxhQUFhLENBQUMsQ0FBNEI7SUFDakQsT0FBTyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQTJCO0lBQ3RELE9BQU8sc0JBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB0eXBlIHsgQ29uZmlndXJhdGlvbk9wdGlvbnMgfSBmcm9tICdhd3Mtc2RrL2xpYi9jb25maWctYmFzZSc7XG5pbXBvcnQgKiBhcyBwcm9tcHRseSBmcm9tICdwcm9tcHRseSc7XG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgSVNESywgTW9kZSwgU0RLLCBTZGtQcm92aWRlciB9IGZyb20gJy4uLy4uL2xpYi9hcGkvYXdzLWF1dGgnO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi8uLi9saWIvbG9nZ2luZyc7XG5pbXBvcnQgeyBQbHVnaW5Ib3N0IH0gZnJvbSAnLi4vLi4vbGliL3BsdWdpbic7XG5pbXBvcnQgKiBhcyBib2NrZnMgZnJvbSAnLi4vYm9ja2ZzJztcbmltcG9ydCB7IHdpdGhNb2NrZWQgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEZha2VTdHMsIFJlZ2lzdGVyUm9sZU9wdGlvbnMsIFJlZ2lzdGVyVXNlck9wdGlvbnMgfSBmcm9tICcuL2Zha2Utc3RzJztcblxuamVzdC5tb2NrKCdwcm9tcHRseScsICgpID0+ICh7XG4gIHByb21wdDogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKCcxMjM0JyksXG59KSk7XG5cbmNvbnN0IGRlZmF1bHRDcmVkT3B0aW9ucyA9IHtcbiAgZWMyY3JlZHM6IGZhbHNlLFxuICBjb250YWluZXJDcmVkczogZmFsc2UsXG59O1xuXG5sZXQgdWlkOiBzdHJpbmc7XG5sZXQgcGx1Z2luUXVlcmllZCA9IGZhbHNlO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgLy8gQ2FjaGUgYnVzdGVycyFcbiAgLy8gV2UgcHJlZml4IGV2ZXJ5dGhpbmcgd2l0aCBVVUlEcyBiZWNhdXNlOlxuICAvL1xuICAvLyAtIFdlIGhhdmUgYSBjYWNoZSBmcm9tIGFjY291bnQjIC0+IGNyZWRlbnRpYWxzXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjZXNzIGtleSAtPiBhY2NvdW50XG4gIHVpZCA9IGAoJHt1dWlkLnY0KCl9KWA7XG5cbiAgbG9nZ2luZy5zZXRMb2dMZXZlbChsb2dnaW5nLkxvZ0xldmVsLlRSQUNFKTtcblxuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMuc3BsaWNlKDApO1xuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMucHVzaCh7XG4gICAgaXNBdmFpbGFibGUoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7IH0sXG4gICAgY2FuUHJvdmlkZUNyZWRlbnRpYWxzKGFjY291bnQpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhY2NvdW50ID09PSB1bmlxKCc5OTk5OScpKTsgfSxcbiAgICBnZXRQcm92aWRlcigpIHtcbiAgICAgIHBsdWdpblF1ZXJpZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQVdTLkNyZWRlbnRpYWxzKHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGAke3VpZH1wbHVnaW5fa2V5YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiAncGx1Z2luX3NlY3JldCcsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogJ3BsdWdpbl90b2tlbicsXG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBuYW1lOiAndGVzdCBwbHVnaW4nLFxuICB9KTtcblxuICAvLyBNYWtlIHN1cmUgdGhlc2UgcG9pbnQgdG8gbm9uZXhpc3RhbnQgZmlsZXMgdG8gc3RhcnQsIGlmIHdlIGRvbid0IGNhbGxcbiAgLy8gcHJlcGFyZSgpIHRoZW4gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHdhbnQgdG8gZmFsbCBiYWNrIHRvIHN5c3RlbSBjb25maWcuXG4gIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9ICcvZGV2L251bGwnO1xuICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSAnL2Rldi9udWxsJztcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBib2NrZnMucmVzdG9yZSgpO1xufSk7XG5cbmZ1bmN0aW9uIHVuaXEoYWNjb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBgJHt1aWR9JHthY2NvdW50fWA7XG59XG5cbmZ1bmN0aW9uIGVudihhY2NvdW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGN4YXBpLkVudmlyb25tZW50VXRpbHMubWFrZShhY2NvdW50LCAnZGVmJyk7XG59XG5cbmRlc2NyaWJlKCd3aXRoIGludGVyY2VwdGVkIG5ldHdvcmsgY2FsbHMnLCAoKSA9PiB7XG4gIC8vIE1vc3QgdGVzdHMgd2lsbCB1c2UgaW50ZXJjZXB0ZWQgbmV0d29yayBjYWxscywgZXhjZXB0IG9uZSB0ZXN0IHRoYXQgdGVzdHNcbiAgLy8gdGhhdCB0aGUgcmlnaHQgSFRUUCBgQWdlbnRgIGlzIHVzZWQuXG5cbiAgbGV0IGZha2VTdHM6IEZha2VTdHM7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGZha2VTdHMgPSBuZXcgRmFrZVN0cygpO1xuICAgIGZha2VTdHMuYmVnaW4oKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgS2V5SUQgcmV0dXJuZWQgYnkgdGhlIHBsdWdpbiBpcyByZWNvZ25pemVkXG4gICAgZmFrZVN0cy5yZWdpc3RlclVzZXIodW5pcSgnOTk5OTknKSwgdW5pcSgncGx1Z2luX2tleScpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmYWtlU3RzLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgLy8gU2V0IG9mIHRlc3RzIHdoZXJlIHRoZSBDREsgd2lsbCBub3QgdHJpZ2dlciBhc3N1bWUtcm9sZVxuICAvLyAodGhlIElOSSBmaWxlIG1pZ2h0IHN0aWxsIGRvIGFzc3VtZS1yb2xlKVxuICBkZXNjcmliZSgnd2hlbiBDREsgZG9lcyBub3QgQXNzdW1lUm9sZScsICgpID0+IHtcbiAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgY3JlZGVudGlhbHMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnLCAkZmFrZVN0c09wdGlvbnM6IHsgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwcm92aWRlci5kZWZhdWx0UmVnaW9uKS50b0VxdWFsKCdldS1ibGEtNScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzExMTExJyksIHBhcnRpdGlvbjogJ2F3cy1oZXJlJyB9KTtcblxuICAgICAgLy8gQXNrIGZvciBhIGRpZmZlcmVudCByZWdpb25cbiAgICAgIGNvbnN0IHNkayA9IGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KHsgLi4uZW52KHVuaXEoJzExMTExJykpLCByZWdpb246ICdyZ24nIH0sIE1vZGUuRm9yUmVhZGluZyk7XG4gICAgICBleHBlY3Qoc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMhLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2FjY2VzcycpKTtcbiAgICAgIGV4cGVjdChzZGsuY3VycmVudFJlZ2lvbikudG9FcXVhbCgncmduJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgaWYgcHJvZmlsZSBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgcmlnaHQgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGJvbyc6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2JvbycpO1xuXG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJ3NvbWVfYWNjb3VudF8jJykpLCBNb2RlLkZvclJlYWRpbmcpKS5yZWplY3RzLnRvVGhyb3coJ05lZWQgdG8gcGVyZm9ybSBBV1MgY2FsbHMnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZSBwcm9maWxlIGFjY3QvcmVnaW9uIGlmIGFnbm9zdGljIGVudiByZXF1ZXN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKGN4YXBpLlVOS05PV05fQUNDT1VOVCwgY3hhcGkuVU5LTk9XTl9SRUdJT04pLCBNb2RlLkZvclJlYWRpbmcpO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdhY2Nlc3MnKSk7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMTExMTEnKSk7XG4gICAgICBleHBlY3Qoc2RrLmN1cnJlbnRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwYXNzaW5nIHByb2ZpbGUgc2tpcHMgRW52aXJvbm1lbnRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGZvbzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZm9vJyk7XG5cbiAgICAgIGNvbnN0IGVudmlyb25tZW50Q3JlZGVudGlhbHNQcm90b3R5cGUgPSAobmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKSkuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgICBhd2FpdCB3aXRoTW9ja2VkKGVudmlyb25tZW50Q3JlZGVudGlhbHNQcm90b3R5cGUsICdyZWZyZXNoJywgYXN5bmMgKHJlZnJlc2gpID0+IHtcbiAgICAgICAgcmVmcmVzaC5tb2NrSW1wbGVtZW50YXRpb24oKGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQnKSkpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgZXhwZWN0KChhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzExMTExJykpO1xuXG4gICAgICAgIGV4cGVjdChyZWZyZXNoKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIHNwcmVhZCBvdmVyIGNvbmZpZ19maWxlIGFuZCBjcmVkZW50aWFsc19maWxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBmb286IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb29jY2VzcycsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBmb28nOiB7IHJlZ2lvbjogJ2V1LXdlc3QtMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHsgLi4uZGVmYXVsdENyZWRPcHRpb25zLCBwcm9maWxlOiAnZm9vJyB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LXdlc3QtMScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIG9ubHkgaW4gY29uZmlnX2ZpbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgZm9vJzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Zvb2NjZXNzJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7IC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGNvbmZpZ1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lLXJvbGUgY29uZmlndXJlZCBpbiBjb25maWcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnNjY2NjYnLFxuICAgICAgICAgICAgJGZha2VTdHNPcHRpb25zOiB7IGFsbG93ZWRBY2NvdW50czogWycxMTExMSddIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdhc3N1bWFibGUnKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnNjY2NjYnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgZXZlbiBpZiBbZGVmYXVsdF0gcHJvZmlsZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIGFzc3VtYWJsZTogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGFzc3VtYWJsZSc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdhc3N1bWFibGUnKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzIyMjIyJykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbWZhX3NlcmlhbCBpbiBwcm9maWxlIHdpbGwgYXNrIHVzZXIgZm9yIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzY2NjY2JyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1lcic6IHsgcmVnaW9uOiAndXMtZWFzdC0yJyB9LFxuICAgICAgICAgICdwcm9maWxlIG1mYS1yb2xlJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJyxcbiAgICAgICAgICAgIG1mYV9zZXJpYWw6ICdhcm46YXdzOmlhbTo6YWNjb3VudDptZmEvdXNlcicsXG4gICAgICAgICAgICAkYWNjb3VudDogJzY2NjY2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ21mYS1yb2xlJyk7XG5cbiAgICAgIGNvbnN0IHByb21wdGx5TW9ja0NhbGxzID0gKHByb21wdGx5LnByb21wdCBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubGVuZ3RoO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnNjY2NjYnKSksIE1vZGUuRm9yUmVhZGluZyk7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnNjY2NjYnKSk7XG4gICAgICBleHBlY3QoZmFrZVN0cy5hc3N1bWVkUm9sZXNbMF0pLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICByb2xlQXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgc2VyaWFsTnVtYmVyOiAnYXJuOmF3czppYW06OmFjY291bnQ6bWZhL3VzZXInLFxuICAgICAgICB0b2tlbkNvZGU6ICcxMjM0JyxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gTW9jayByZXNwb25zZSB3YXMgc2V0IHRvIGZhaWwgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgU1RTXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIE1GQSBtb2NrIHdhcyBjYWxsZWQgZHVyaW5nIHRoaXMgdGVzdFxuICAgICAgZXhwZWN0KChwcm9tcHRseS5wcm9tcHQgYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZShwcm9tcHRseU1vY2tDYWxscyArIDEpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBGb3IgRGVmYXVsdFN5bnRoZXNpcyB3ZSB3aWxsIGRvIGFuIGFzc3VtZS1yb2xlIGFmdGVyIGhhdmluZyBnb3R0ZW4gYmFzZSBjcmVkZW50aWFsc1xuICBkZXNjcmliZSgnd2hlbiBDREsgQXNzdW1lUm9sZXMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAvLyBBbGwgdGhlc2UgdGVzdHMgc2hhcmUgdGhhdCAnYXJuOmF3czpyb2xlJyBpcyBhIHJvbGUgaW50byBhY2NvdW50IDg4ODg4IHdoaWNoIGNhbiBiZSBhc3N1bWVkIGZyb20gMTExMTFcbiAgICAgIGZha2VTdHMucmVnaXN0ZXJSb2xlKHVuaXEoJzg4ODg4JyksICdhcm46YXdzOnJvbGUnLCB7IGFsbG93ZWRBY2NvdW50czogW3VuaXEoJzExMTExJyldIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3Igd2UgZ2V0IGZyb20gYXNzdW1pbmcgYSByb2xlIGlzIHVzZWZ1bCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcHJvbWlzZSA9IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdkb2Vzbm90ZXhpc3Qucm9sZS5hcm4nLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU4gLSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIGJvdGggYSBoZWxwZnVsIGhpbnQgYW5kIHRoZSB1bmRlcmx5aW5nIEFzc3VtZVJvbGUgbWVzc2FnZVxuICAgICAgYXdhaXQgZXhwZWN0KHByb21pc2UpLnJlamVjdHMudG9UaHJvdygnKHJlKS1ib290c3RyYXAgdGhlIGVudmlyb25tZW50Jyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCdkb2Vzbm90ZXhpc3Qucm9sZS5hcm4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Fzc3VtaW5nIGEgcm9sZSBzYW5pdGl6ZXMgdGhlIHVzZXJuYW1lIGludG8gdGhlIHNlc3Npb24gbmFtZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3aXRoTW9ja2VkKG9zLCAndXNlckluZm8nLCBhc3luYyAodXNlckluZm8pID0+IHtcbiAgICAgICAgdXNlckluZm8ubW9ja1JldHVyblZhbHVlKHsgdXNlcm5hbWU6ICdza8OlbCcsIHVpZDogMSwgZ2lkOiAxLCBob21lZGlyOiAnL2hlcmUnLCBzaGVsbDogJy9iaW4vc2gnIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkgYXMgU0RLO1xuICAgICAgICBhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgcm9sZVNlc3Npb25OYW1lOiAnYXdzLWNkay1za0BsJyxcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdldmVuIGlmIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciB0aGUgd3JvbmcgYWNjb3VudCwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbSB0byBBc3N1bWVSb2xlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgc2RrID0gYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkgYXMgU0RLO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnODg4ODgnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdpZiBBc3N1bWVSb2xlIGZhaWxzIGJ1dCBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIHJpZ2h0IGFjY291bnQsIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnODg4ODgnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOIC0gYXNzdW1lUm9sZSBmYWlscyBiZWNhdXNlIHRoZSByb2xlIGNhbiBvbmx5IGJlIGFzc3VtZWQgZnJvbSBhY2NvdW50IDExMTExXG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KSBhcyBTREs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc4ODg4OCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1BsdWdpbnMnLCAoKSA9PiB7XG4gICAgdGVzdCgnZG9lcyBub3QgdXNlIHBsdWdpbnMgaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIGV4cGVjdGVkIGFjY291bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnMTExMTEnKSksIE1vZGUuRm9yUmVhZGluZyk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd1c2VzIHBsdWdpbiBmb3IgYWNjb3VudCA5OTk5OScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzk5OTk5JykpLCBNb2RlLkZvclJlYWRpbmcpO1xuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBjcmVkZW50aWFscyBmcm9tIHBsdWdpbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGZha2VTdHMucmVnaXN0ZXJSb2xlKHVuaXEoJzk5OTk5JyksICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnKTtcblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZywge1xuICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czppYW06Ojk5OTk5OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZmFrZVN0cy5hc3N1bWVkUm9sZXNbMF0pLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICByb2xlQXJuOiAnYXJuOmF3czppYW06Ojk5OTk5OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgIH0pKTtcbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXZlbiBpZiBBc3N1bWVSb2xlIGZhaWxzIGJ1dCBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmcm9tIGEgcGx1Z2luLCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCBzZGsgPSBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnZG9lczpub3Q6ZXhpc3QnIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnOTk5OTknKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwbHVnaW5zIGFyZSBzdGlsbCBxdWVyaWVkIGV2ZW4gaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZXhwaXJlZCAob3Igb3RoZXJ3aXNlIGludmFsaWQpJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gYCR7dWlkfWFraWRgO1xuICAgICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0gJ3Nla3JpdCc7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzk5OTk5JykpLCBNb2RlLkZvclJlYWRpbmcpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N1cHBvcnQgZm9yIGNyZWRlbnRpYWxfc291cmNlJywgKCkgPT4ge1xuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVjcyBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB3aXRoTW9ja2VkKEFXUy5FQ1NDcmVkZW50aWFscy5wcm90b3R5cGUsICduZWVkc1JlZnJlc2gnLCBhc3luYyAobmVlZHNSZWZyZXNoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgY3JlZGVudGlhbF9zb3VyY2U6ICdFY3NDb250YWluZXInLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChuZWVkc1JlZnJlc2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBlYzIgY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gd2l0aE1vY2tlZChBV1MuRUMyTWV0YWRhdGFDcmVkZW50aWFscy5wcm90b3R5cGUsICduZWVkc1JlZnJlc2gnLCBhc3luYyAobmVlZHNSZWZyZXNoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgY3JlZGVudGlhbF9zb3VyY2U6ICdFYzJJbnN0YW5jZU1ldGFkYXRhJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3QobmVlZHNSZWZyZXNoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBlbnYgY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gd2l0aE1vY2tlZChBV1MuRW52aXJvbm1lbnRDcmVkZW50aWFscy5wcm90b3R5cGUsICduZWVkc1JlZnJlc2gnLCBhc3luYyAobmVlZHNSZWZyZXNoKSA9PiB7XG4gICAgICAgIC8vIEdJVkVOXG4gICAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgY3JlZGVudGlhbF9zb3VyY2U6ICdFbnZpcm9ubWVudCcsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG5lZWRzUmVmcmVzaCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhc3N1bWUgZmFpbHMgd2l0aCB1bnN1cHBvcnRlZCBjcmVkZW50aWFsX3NvdXJjZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAncHJvZmlsZSBlY3MnOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgY3JlZGVudGlhbF9zb3VyY2U6ICd1bnN1cHBvcnRlZCcsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IGFjY291bnQgPSBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYWNjb3VudD8uYWNjb3VudElkKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RlZmF1bHRBY2NvdW50IHJldHVybnMgdW5kZWZpbmVkIGlmIFNUUyBjYWxsIGZhaWxzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSBgJHt1aWR9YWtpZGA7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZID0gJ3Nla3JpdCc7XG5cbiAgICAvLyBXSEVOXG4gICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAvLyBUSEVOXG4gICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvQmUodW5kZWZpbmVkKTtcbiAgfSk7XG59KTtcblxudGVzdCgnZXZlbiB3aGVuIHVzaW5nIGEgcHJvZmlsZSB0byBhc3N1bWUgYW5vdGhlciBwcm9maWxlLCBTVFMgY2FsbHMgZ29lcyB0aHJvdWdoIHRoZSBwcm94eScsIGFzeW5jICgpID0+IHtcbiAgcHJlcGFyZUNyZWRzKHtcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInIH0sXG4gICAgfSxcbiAgICBjb25maWc6IHtcbiAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICdwcm9maWxlIGFzc3VtYWJsZSc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLCBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzY2NjY2JyB9LFxuICAgICAgJ3Byb2ZpbGUgYXNzdW1lcic6IHsgcmVnaW9uOiAndXMtZWFzdC0yJyB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIE1lc3N5IG1vY2tpbmdcbiAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICBqZXN0Lm1vY2soJ3Byb3h5LWFnZW50JywgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG4gICAgY2xhc3MgRmFrZUFnZW50IGV4dGVuZHMgcmVxdWlyZSgnaHR0cHMnKS5BZ2VudCB7XG4gICAgICBwdWJsaWMgYWRkUmVxdWVzdChfOiBhbnksIF9fOiBhbnkpIHtcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgZXJyb3IgdGFrZXMgNiBzZWNvbmRzIHRvIGJlIGNvbXBsZXRlbHkgaGFuZGxlZC4gSXRcbiAgICAgICAgLy8gbWlnaHQgYmUgcmV0cmllcyBpbiB0aGUgU0RLIHNvbWV3aGVyZSwgb3Igc29tZXRoaW5nIGFib3V0IHRoZSBOb2RlXG4gICAgICAgIC8vIGV2ZW50IGxvb3AuIEkndmUgc3BlbnQgYW4gaG91ciB0cnlpbmcgdG8gZmlndXJlIGl0IG91dCBhbmQgSSBjYW4ndCxcbiAgICAgICAgLy8gYW5kIEkgZ2F2ZSB1cC4gV2UnbGwganVzdCBoYXZlIHRvIGxpdmUgd2l0aCB0aGlzIHVudGlsIHNvbWVvbmUgZ2V0c1xuICAgICAgICAvLyBpbnNwaXJlZC5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0FCT1JURUQgQlkgVEVTVCcpO1xuICAgICAgICAoZXJyb3IgYXMgYW55KS5jb2RlID0gJ1JlcXVlc3RBYm9ydGVkRXJyb3InO1xuICAgICAgICAoZXJyb3IgYXMgYW55KS5yZXRyeWFibGUgPSBmYWxzZTtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBGYWtlQWdlbnQ7XG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHtcbiAgICAuLi5kZWZhdWx0Q3JlZE9wdGlvbnMsXG4gICAgcHJvZmlsZTogJ2Fzc3VtYWJsZScsXG4gICAgaHR0cE9wdGlvbnM6IHtcbiAgICAgIHByb3h5QWRkcmVzczogJ2h0dHA6Ly9ET0VTTlRNQVRURVIvJyxcbiAgICB9LFxuICB9KTtcblxuICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gIC8vIFRIRU4gLS0gdGhlIGZha2UgcHJveHkgYWdlbnQgZ290IGNhbGxlZCwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgcmVzdWx0XG4gIGV4cGVjdChjYWxsZWQpLnRvRXF1YWwodHJ1ZSk7XG59KTtcblxuLyoqXG4gKiBVc2Ugb2JqZWN0IGhhY2tlcnkgdG8gZ2V0IHRoZSBjcmVkZW50aWFscyBvdXQgb2YgdGhlIFNESyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2RrQ29uZmlnKHNkazogSVNESyk6IENvbmZpZ3VyYXRpb25PcHRpb25zIHtcbiAgcmV0dXJuIChzZGsgYXMgYW55KS5jb25maWc7XG59XG5cbi8qKlxuICogRml4dHVyZSBmb3IgU0RLIGF1dGggZm9yIHRoaXMgdGVzdCBzdWl0ZVxuICpcbiAqIEhhcyBrbm93bGVkZ2Ugb2YgdGhlIGNhY2hlIGJ1c3Rlciwgd2lsbCB3cml0ZSBwcm9wZXIgZmFrZSBjb25maWcgZmlsZXMgYW5kXG4gKiByZWdpc3RlciB1c2VycyBhbmQgcm9sZXMgaW4gRmFrZVN0cyBhdCB0aGUgc2FtZSB0aW1lLlxuICovXG5mdW5jdGlvbiBwcmVwYXJlQ3JlZHMob3B0aW9uczogUHJlcGFyZUNyZWRzT3B0aW9ucykge1xuICBmdW5jdGlvbiBjb252ZXJ0U2VjdGlvbnMoc2VjdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlPikge1xuICAgIGNvbnN0IHJldCA9IFtdO1xuICAgIGZvciAoY29uc3QgW3Byb2ZpbGUsIHVzZXJdIG9mIE9iamVjdC5lbnRyaWVzKHNlY3Rpb25zID8/IHt9KSkge1xuICAgICAgcmV0LnB1c2goYFske3Byb2ZpbGV9XWApO1xuXG4gICAgICBpZiAoaXNQcm9maWxlUm9sZSh1c2VyKSkge1xuICAgICAgICByZXQucHVzaChgcm9sZV9hcm49JHt1c2VyLnJvbGVfYXJufWApO1xuICAgICAgICBpZiAoJ3NvdXJjZV9wcm9maWxlJyBpbiB1c2VyKSB7XG4gICAgICAgICAgcmV0LnB1c2goYHNvdXJjZV9wcm9maWxlPSR7dXNlci5zb3VyY2VfcHJvZmlsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2NyZWRlbnRpYWxfc291cmNlJyBpbiB1c2VyKSB7XG4gICAgICAgICAgcmV0LnB1c2goYGNyZWRlbnRpYWxfc291cmNlPSR7dXNlci5jcmVkZW50aWFsX3NvdXJjZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlci5tZmFfc2VyaWFsKSB7XG4gICAgICAgICAgcmV0LnB1c2goYG1mYV9zZXJpYWw9JHt1c2VyLm1mYV9zZXJpYWx9YCk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5mYWtlU3RzPy5yZWdpc3RlclJvbGUodW5pcSh1c2VyLiRhY2NvdW50ID8/ICcwMDAwMCcpLCB1c2VyLnJvbGVfYXJuLCB7XG4gICAgICAgICAgLi4udXNlci4kZmFrZVN0c09wdGlvbnMsXG4gICAgICAgICAgYWxsb3dlZEFjY291bnRzOiB1c2VyLiRmYWtlU3RzT3B0aW9ucz8uYWxsb3dlZEFjY291bnRzPy5tYXAodW5pcSksXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHVzZXIuYXdzX2FjY2Vzc19rZXlfaWQpIHtcbiAgICAgICAgICByZXQucHVzaChgYXdzX2FjY2Vzc19rZXlfaWQ9JHt1bmlxKHVzZXIuYXdzX2FjY2Vzc19rZXlfaWQpfWApO1xuICAgICAgICAgIHJldC5wdXNoKCdhd3Nfc2VjcmV0X2FjY2Vzc19rZXk9c2VjcmV0Jyk7XG4gICAgICAgICAgb3B0aW9ucy5mYWtlU3RzPy5yZWdpc3RlclVzZXIodW5pcSh1c2VyLiRhY2NvdW50ID8/ICcwMDAwMCcpLCB1bmlxKHVzZXIuYXdzX2FjY2Vzc19rZXlfaWQpLCB1c2VyLiRmYWtlU3RzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVzZXIucmVnaW9uKSB7XG4gICAgICAgIHJldC5wdXNoKGByZWdpb249JHt1c2VyLnJlZ2lvbn1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGJvY2tmcyh7XG4gICAgJy9ob21lL21lLy5ieHQvY3JlZGVudGlhbHMnOiBjb252ZXJ0U2VjdGlvbnMob3B0aW9ucy5jcmVkZW50aWFscyksXG4gICAgJy9ob21lL21lLy5ieHQvY29uZmlnJzogY29udmVydFNlY3Rpb25zKG9wdGlvbnMuY29uZmlnKSxcbiAgfSk7XG5cbiAgLy8gU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHdlIHdhbnRcbiAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gYm9ja2ZzLnBhdGgoJy9ob21lL21lLy5ieHQvY29uZmlnJyk7XG4gIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9IGJvY2tmcy5wYXRoKCcvaG9tZS9tZS8uYnh0L2NyZWRlbnRpYWxzJyk7XG59XG5cbmludGVyZmFjZSBQcmVwYXJlQ3JlZHNPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBhd3MvY3JlZGVudGlhbHMgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM/OiBSZWNvcmQ8c3RyaW5nLCBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlPjtcblxuICAvKipcbiAgICogV3JpdGUgdGhlIGF3cy9jb25maWcgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT47XG5cbiAgLyoqXG4gICAqIElmIGdpdmVuLCBhZGQgdXNlcnMgdG8gRmFrZVNUU1xuICAgKi9cbiAgcmVhZG9ubHkgZmFrZVN0cz86IEZha2VTdHM7XG59XG5cbmludGVyZmFjZSBQcm9maWxlVXNlciB7XG4gIHJlYWRvbmx5IGF3c19hY2Nlc3Nfa2V5X2lkPzogc3RyaW5nO1xuICByZWFkb25seSAkYWNjb3VudD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICByZWFkb25seSAkZmFrZVN0c09wdGlvbnM/OiBSZWdpc3RlclVzZXJPcHRpb25zO1xufVxuXG50eXBlIFByb2ZpbGVSb2xlID0ge1xuICByZWFkb25seSByb2xlX2Fybjogc3RyaW5nO1xuICByZWFkb25seSBtZmFfc2VyaWFsPzogc3RyaW5nO1xuICByZWFkb25seSAkYWNjb3VudDogc3RyaW5nO1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRmYWtlU3RzT3B0aW9ucz86IFJlZ2lzdGVyUm9sZU9wdGlvbnM7XG59ICYgKHsgcmVhZG9ubHkgc291cmNlX3Byb2ZpbGU6IHN0cmluZyB9IHwgeyByZWFkb25seSBjcmVkZW50aWFsX3NvdXJjZTogc3RyaW5nIH0pO1xuXG5mdW5jdGlvbiBpc1Byb2ZpbGVSb2xlKHg6IFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGUpOiB4IGlzIFByb2ZpbGVSb2xlIHtcbiAgcmV0dXJuICdyb2xlX2FybicgaW4geDtcbn1cblxuZnVuY3Rpb24gcHJvdmlkZXJGcm9tUHJvZmlsZShwcm9maWxlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoeyAuLi5kZWZhdWx0Q3JlZE9wdGlvbnMsIHByb2ZpbGUgfSk7XG59Il19
543
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBRS9CLHFDQUFxQztBQUNyQyw2QkFBNkI7QUFDN0IscURBQXNFO0FBQ3RFLDZDQUE2QztBQUM3Qyw2Q0FBOEM7QUFDOUMsb0NBQW9DO0FBQ3BDLGtDQUFxQztBQUNyQyx5Q0FBK0U7QUFFL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztDQUM1QyxDQUFDLENBQUMsQ0FBQztBQUVKLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsUUFBUSxFQUFFLEtBQUs7SUFDZixjQUFjLEVBQUUsS0FBSztDQUN0QixDQUFDO0FBRUYsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxpQkFBaUI7SUFDakIsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRixpREFBaUQ7SUFDakQsK0NBQStDO0lBQy9DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBRXZCLE9BQU8sQ0FBQyxXQUFXLGVBQXdCLENBQUM7SUFFNUMsbUJBQVUsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELG1CQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQztRQUNqRCxXQUFXLEtBQUssT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxxQkFBcUIsQ0FBQyxPQUFPLElB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LENBQUMsT0FBMkI7SUFDdEQsT0FBTyxzQkFBVyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBJU0RLLCBNb2RlLCBTREssIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS9hd3MtYXV0aCc7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gJy4uLy4uL2xpYi9sb2dnaW5nJztcbmltcG9ydCB7IFBsdWdpbkhvc3QgfSBmcm9tICcuLi8uLi9saWIvcGx1Z2luJztcbmltcG9ydCAqIGFzIGJvY2tmcyBmcm9tICcuLi9ib2NrZnMnO1xuaW1wb3J0IHsgd2l0aE1vY2tlZCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgRmFrZVN0cywgUmVnaXN0ZXJSb2xlT3B0aW9ucywgUmVnaXN0ZXJVc2VyT3B0aW9ucyB9IGZyb20gJy4vZmFrZS1zdHMnO1xuXG5qZXN0Lm1vY2soJ3Byb21wdGx5JywgKCkgPT4gKHtcbiAgcHJvbXB0OiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoJzEyMzQnKSxcbn0pKTtcblxuY29uc3QgZGVmYXVsdENyZWRPcHRpb25zID0ge1xuICBlYzJjcmVkczogZmFsc2UsXG4gIGNvbnRhaW5lckNyZWRzOiBmYWxzZSxcbn07XG5cbmxldCB1aWQ6IHN0cmluZztcbmxldCBwbHVnaW5RdWVyaWVkID0gZmFsc2U7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICAvLyBDYWNoZSBidXN0ZXJzIVxuICAvLyBXZSBwcmVmaXggZXZlcnl0aGluZyB3aXRoIFVVSURzIGJlY2F1c2U6XG4gIC8vXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjb3VudCMgLT4gY3JlZGVudGlhbHNcbiAgLy8gLSBXZSBoYXZlIGEgY2FjaGUgZnJvbSBhY2Nlc3Mga2V5IC0+IGFjY291bnRcbiAgdWlkID0gYCgke3V1aWQudjQoKX0pYDtcblxuICBsb2dnaW5nLnNldExvZ0xldmVsKGxvZ2dpbmcuTG9nTGV2ZWwuVFJBQ0UpO1xuXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5zcGxpY2UoMCk7XG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZSgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTsgfSxcbiAgICBjYW5Qcm92aWRlQ3JlZGVudGlhbHMoYWNjb3VudCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFjY291bnQgPT09IHVuaXEoJzk5OTk5JykpOyB9LFxuICAgIGdldFByb3ZpZGVyKCkge1xuICAgICAgcGx1Z2luUXVlcmllZCA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBBV1MuQ3JlZGVudGlhbHMoe1xuICAgICAgICBhY2Nlc3NLZXlJZDogYCR7dWlkfXBsdWdpbl9rZXlgLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6ICdwbHVnaW5fc2VjcmV0JyxcbiAgICAgICAgc2Vzc2lvblRva2VuOiAncGx1Z2luX3Rva2VuJyxcbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIG5hbWU6ICd0ZXN0IHBsdWdpbicsXG4gIH0pO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGVzZSBwb2ludCB0byBub25leGlzdGFudCBmaWxlcyB0byBzdGFydCwgaWYgd2UgZG9uJ3QgY2FsbFxuICAvLyBwcmVwYXJlKCkgdGhlbiB3ZSBkb24ndCBhY2NpZGVudGFsbHkgd2FudCB0byBmYWxsIGJhY2sgdG8gc3lzdGVtIGNvbmZpZy5cbiAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gJy9kZXYvbnVsbCc7XG4gIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9ICcvZGV2L251bGwnO1xufSk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIGJvY2tmcy5yZXN0b3JlKCk7XG59KTtcblxuZnVuY3Rpb24gdW5pcShhY2NvdW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAke3VpZH0ke2FjY291bnR9YDtcbn1cblxuZnVuY3Rpb24gZW52KGFjY291bnQ6IHN0cmluZykge1xuICByZXR1cm4gY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKGFjY291bnQsICdkZWYnKTtcbn1cblxuZGVzY3JpYmUoJ3dpdGggaW50ZXJjZXB0ZWQgbmV0d29yayBjYWxscycsICgpID0+IHtcbiAgLy8gTW9zdCB0ZXN0cyB3aWxsIHVzZSBpbnRlcmNlcHRlZCBuZXR3b3JrIGNhbGxzLCBleGNlcHQgb25lIHRlc3QgdGhhdCB0ZXN0c1xuICAvLyB0aGF0IHRoZSByaWdodCBIVFRQIGBBZ2VudGAgaXMgdXNlZC5cblxuICBsZXQgZmFrZVN0czogRmFrZVN0cztcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmFrZVN0cyA9IG5ldyBGYWtlU3RzKCk7XG4gICAgZmFrZVN0cy5iZWdpbigpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBLZXlJRCByZXR1cm5lZCBieSB0aGUgcGx1Z2luIGlzIHJlY29nbml6ZWRcbiAgICBmYWtlU3RzLnJlZ2lzdGVyVXNlcih1bmlxKCc5OTk5OScpLCB1bmlxKCdwbHVnaW5fa2V5JykpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGZha2VTdHMucmVzdG9yZSgpO1xuICB9KTtcblxuICAvLyBTZXQgb2YgdGVzdHMgd2hlcmUgdGhlIENESyB3aWxsIG5vdCB0cmlnZ2VyIGFzc3VtZS1yb2xlXG4gIC8vICh0aGUgSU5JIGZpbGUgbWlnaHQgc3RpbGwgZG8gYXNzdW1lLXJvbGUpXG4gIGRlc2NyaWJlKCd3aGVuIENESyBkb2VzIG5vdCBBc3N1bWVSb2xlJywgKCkgPT4ge1xuICAgIHRlc3QoJ3VzZXMgZGVmYXVsdCBjcmVkZW50aWFscyBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScsICRmYWtlU3RzT3B0aW9uczogeyBwYXJ0aXRpb246ICdhd3MtaGVyZScgfSB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMTExMTEnKSwgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0pO1xuXG4gICAgICAvLyBBc2sgZm9yIGEgZGlmZmVyZW50IHJlZ2lvblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KHsgLi4uZW52KHVuaXEoJzExMTExJykpLCByZWdpb246ICdyZ24nIH0sIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnYWNjZXNzJykpO1xuICAgICAgZXhwZWN0KHNkay5jdXJyZW50UmVnaW9uKS50b0VxdWFsKCdyZ24nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBpZiBwcm9maWxlIGNyZWRlbnRpYWxzIGFyZSBub3QgZm9yIHRoZSByaWdodCBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgYm9vJzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnYm9vJyk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnc29tZV9hY2NvdW50XyMnKSksIE1vZGUuRm9yUmVhZGluZykpLnJlamVjdHMudG9UaHJvdygnTmVlZCB0byBwZXJmb3JtIEFXUyBjYWxscycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlIHByb2ZpbGUgYWNjdC9yZWdpb24gaWYgYWdub3N0aWMgZW52IHJlcXVlc3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKGN4YXBpLlVOS05PV05fQUNDT1VOVCwgY3hhcGkuVU5LTk9XTl9SRUdJT04pLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3Qoc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMhLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2FjY2VzcycpKTtcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCcxMTExMScpKTtcbiAgICAgIGV4cGVjdChzZGsuY3VycmVudFJlZ2lvbikudG9FcXVhbCgnZXUtYmxhLTUnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Bhc3NpbmcgcHJvZmlsZSBza2lwcyBFbnZpcm9ubWVudENyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZm9vOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgY29uc3QgZW52aXJvbm1lbnRDcmVkZW50aWFsc1Byb3RvdHlwZSA9IChuZXcgQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMoJ0FXUycpKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQoZW52aXJvbm1lbnRDcmVkZW50aWFsc1Byb3RvdHlwZSwgJ3JlZnJlc2gnLCBhc3luYyAocmVmcmVzaCkgPT4ge1xuICAgICAgICByZWZyZXNoLm1vY2tJbXBsZW1lbnRhdGlvbigoY2FsbGJhY2s6IChlcnI/OiBFcnJvcikgPT4gdm9pZCkgPT4gY2FsbGJhY2sobmV3IEVycm9yKCdUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCcpKSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBleHBlY3QoKGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMTExMTEnKSk7XG5cbiAgICAgICAgZXhwZWN0KHJlZnJlc2gpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1cHBvcnRzIHByb2ZpbGUgc3ByZWFkIG92ZXIgY29uZmlnX2ZpbGUgYW5kIGNyZWRlbnRpYWxzX2ZpbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGZvbzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Zvb2NjZXNzJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGZvbyc6IHsgcmVnaW9uOiAnZXUtd2VzdC0xJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoeyAuLi5kZWZhdWx0Q3JlZE9wdGlvbnMsIHByb2ZpbGU6ICdmb28nIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocHJvdmlkZXIuZGVmYXVsdFJlZ2lvbikudG9FcXVhbCgnZXUtd2VzdC0xJyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMjIyMjInKSwgcGFydGl0aW9uOiAnYXdzJyB9KTtcblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdmb29jY2VzcycpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1cHBvcnRzIHByb2ZpbGUgb25seSBpbiBjb25maWdfZmlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBmb28nOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vY2Nlc3MnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2ZvbycpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocHJvdmlkZXIuZGVmYXVsdFJlZ2lvbikudG9FcXVhbCgnZXUtYmxhLTUnKTsgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgY29uZmlnXG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMjIyMjInKSwgcGFydGl0aW9uOiAnYXdzJyB9KTtcblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdmb29jY2VzcycpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUtcm9sZSBjb25maWd1cmVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGFzc3VtZXInOiB7IHJlZ2lvbjogJ3VzLWVhc3QtMicgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWFibGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICc2NjY2NicsXG4gICAgICAgICAgICAkZmFrZVN0c09wdGlvbnM6IHsgYWxsb3dlZEFjY291bnRzOiBbJzExMTExJ10gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc2NjY2NicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSBldmVuIGlmIFtkZWZhdWx0XSBwcm9maWxlIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgYXNzdW1hYmxlOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMjIyMjInKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdtZmFfc2VyaWFsIGluIHByb2ZpbGUgd2lsbCBhc2sgdXNlciBmb3IgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnNjY2NjYnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgbWZhLXJvbGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgbWZhX3NlcmlhbDogJ2Fybjphd3M6aWFtOjphY2NvdW50Om1mYS91c2VyJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnNjY2NjYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnbWZhLXJvbGUnKTtcblxuICAgICAgY29uc3QgcHJvbXB0bHlNb2NrQ2FsbHMgPSAocHJvbXB0bHkucHJvbXB0IGFzIGplc3QuTW9jaykubW9jay5jYWxscy5sZW5ndGg7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnNjY2NjYnKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc2NjY2NicpKTtcbiAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIHJvbGVBcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICBzZXJpYWxOdW1iZXI6ICdhcm46YXdzOmlhbTo6YWNjb3VudDptZmEvdXNlcicsXG4gICAgICAgIHRva2VuQ29kZTogJzEyMzQnLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBNb2NrIHJlc3BvbnNlIHdhcyBzZXQgdG8gZmFpbCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY2FsbCBTVFNcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgTUZBIG1vY2sgd2FzIGNhbGxlZCBkdXJpbmcgdGhpcyB0ZXN0XG4gICAgICBleHBlY3QoKHByb21wdGx5LnByb21wdCBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKHByb21wdGx5TW9ja0NhbGxzICsgMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEZvciBEZWZhdWx0U3ludGhlc2lzIHdlIHdpbGwgZG8gYW4gYXNzdW1lLXJvbGUgYWZ0ZXIgaGF2aW5nIGdvdHRlbiBiYXNlIGNyZWRlbnRpYWxzXG4gIGRlc2NyaWJlKCd3aGVuIENESyBBc3N1bWVSb2xlcycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIC8vIEFsbCB0aGVzZSB0ZXN0cyBzaGFyZSB0aGF0ICdhcm46YXdzOnJvbGUnIGlzIGEgcm9sZSBpbnRvIGFjY291bnQgODg4ODggd2hpY2ggY2FuIGJlIGFzc3VtZWQgZnJvbSAxMTExMVxuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnODg4ODgnKSwgJ2Fybjphd3M6cm9sZScsIHsgYWxsb3dlZEFjY291bnRzOiBbdW5pcSgnMTExMTEnKV0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlcnJvciB3ZSBnZXQgZnJvbSBhc3N1bWluZyBhIHJvbGUgaXMgdXNlZnVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm9taXNlID0gcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2RvZXNub3RleGlzdC5yb2xlLmFybicsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTiAtIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgYm90aCBhIGhlbHBmdWwgaGludCBhbmQgdGhlIHVuZGVybHlpbmcgQXNzdW1lUm9sZSBtZXNzYWdlXG4gICAgICBhd2FpdCBleHBlY3QocHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCcocmUpLWJvb3RzdHJhcCB0aGUgZW52aXJvbm1lbnQnKTtcbiAgICAgIGF3YWl0IGV4cGVjdChwcm9taXNlKS5yZWplY3RzLnRvVGhyb3coJ2RvZXNub3RleGlzdC5yb2xlLmFybicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXNzdW1pbmcgYSByb2xlIHNhbml0aXplcyB0aGUgdXNlcm5hbWUgaW50byB0aGUgc2Vzc2lvbiBuYW1lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrUmV0dXJuVmFsdWUoeyB1c2VybmFtZTogJ3Nrw6VsJywgdWlkOiAxLCBnaWQ6IDEsIGhvbWVkaXI6ICcvaGVyZScsIHNoZWxsOiAnL2Jpbi9zaCcgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkpLnNkayBhcyBTREs7XG4gICAgICAgIGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KGZha2VTdHMuYXNzdW1lZFJvbGVzWzBdKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICByb2xlU2Vzc2lvbk5hbWU6ICdhd3MtY2RrLXNrQGwnLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2V2ZW4gaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSB3cm9uZyBhY2NvdW50LCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtIHRvIEFzc3VtZVJvbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkpLnNkayBhcyBTREs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc4ODg4OCcpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2lmIEFzc3VtZVJvbGUgZmFpbHMgYnV0IGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciB0aGUgcmlnaHQgYWNjb3VudCwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICc4ODg4OCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU4gLSBhc3N1bWVSb2xlIGZhaWxzIGJlY2F1c2UgdGhlIHJvbGUgY2FuIG9ubHkgYmUgYXNzdW1lZCBmcm9tIGFjY291bnQgMTExMTFcbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KSkuc2RrIGFzIFNESztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzg4ODg4JykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2lucycsICgpID0+IHtcbiAgICB0ZXN0KCdkb2VzIG5vdCB1c2UgcGx1Z2lucyBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgZXhwZWN0ZWQgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcxMTExMScpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZXMgcGx1Z2luIGZvciBhY2NvdW50IDk5OTk5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZyk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGNyZWRlbnRpYWxzIGZyb20gcGx1Z2luJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnOTk5OTknKSwgJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScpO1xuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIHJvbGVBcm46ICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgfSkpO1xuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdldmVuIGlmIEFzc3VtZVJvbGUgZmFpbHMgYnV0IGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZyb20gYSBwbHVnaW4sIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnZG9lczpub3Q6ZXhpc3QnIH0pKS5zZGs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc5OTk5OScpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3BsdWdpbnMgYXJlIHN0aWxsIHF1ZXJpZWQgZXZlbiBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIChvciBvdGhlcndpc2UgaW52YWxpZCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSBgJHt1aWR9YWtpZGA7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnc2Vrcml0JztcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VwcG9ydCBmb3IgY3JlZGVudGlhbF9zb3VyY2UnLCAoKSA9PiB7XG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZWNzIGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpdGhNb2NrZWQoQVdTLkVDU0NyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0Vjc0NvbnRhaW5lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG5lZWRzUmVmcmVzaCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVjMiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB3aXRoTW9ja2VkKEFXUy5FQzJNZXRhZGF0YUNyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0VjMkluc3RhbmNlTWV0YWRhdGEnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChuZWVkc1JlZnJlc2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVudiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB3aXRoTW9ja2VkKEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0Vudmlyb25tZW50JywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3QobmVlZHNSZWZyZXNoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Fzc3VtZSBmYWlscyB3aXRoIHVuc3VwcG9ydGVkIGNyZWRlbnRpYWxfc291cmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ3Vuc3VwcG9ydGVkJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChhY2NvdW50Py5hY2NvdW50SWQpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVmYXVsdEFjY291bnQgcmV0dXJucyB1bmRlZmluZWQgaWYgU1RTIGNhbGwgZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCA9IGAke3VpZH1ha2lkYDtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnc2Vrcml0JztcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdldmVuIHdoZW4gdXNpbmcgYSBwcm9maWxlIHRvIGFzc3VtZSBhbm90aGVyIHByb2ZpbGUsIFNUUyBjYWxscyBnb2VzIHRocm91Z2ggdGhlIHByb3h5JywgYXN5bmMgKCkgPT4ge1xuICBwcmVwYXJlQ3JlZHMoe1xuICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicgfSxcbiAgICB9LFxuICAgIGNvbmZpZzoge1xuICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsICRhY2NvdW50OiAnNjY2NjYnIH0sXG4gICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gTWVzc3kgbW9ja2luZ1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGplc3QubW9jaygncHJveHktYWdlbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjbGFzcyBGYWtlQWdlbnQgZXh0ZW5kcyByZXF1aXJlKCdodHRwcycpLkFnZW50IHtcbiAgICAgIHB1YmxpYyBhZGRSZXF1ZXN0KF86IGFueSwgX186IGFueSkge1xuICAgICAgICAvLyBGSVhNRTogdGhpcyBlcnJvciB0YWtlcyA2IHNlY29uZHMgdG8gYmUgY29tcGxldGVseSBoYW5kbGVkLiBJdFxuICAgICAgICAvLyBtaWdodCBiZSByZXRyaWVzIGluIHRoZSBTREsgc29tZXdoZXJlLCBvciBzb21ldGhpbmcgYWJvdXQgdGhlIE5vZGVcbiAgICAgICAgLy8gZXZlbnQgbG9vcC4gSSd2ZSBzcGVudCBhbiBob3VyIHRyeWluZyB0byBmaWd1cmUgaXQgb3V0IGFuZCBJIGNhbid0LFxuICAgICAgICAvLyBhbmQgSSBnYXZlIHVwLiBXZSdsbCBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIHRoaXMgdW50aWwgc29tZW9uZSBnZXRzXG4gICAgICAgIC8vIGluc3BpcmVkLlxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQUJPUlRFRCBCWSBURVNUJyk7XG4gICAgICAgIChlcnJvciBhcyBhbnkpLmNvZGUgPSAnUmVxdWVzdEFib3J0ZWRFcnJvcic7XG4gICAgICAgIChlcnJvciBhcyBhbnkpLnJldHJ5YWJsZSA9IGZhbHNlO1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEZha2VBZ2VudDtcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBwcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgIC4uLmRlZmF1bHRDcmVkT3B0aW9ucyxcbiAgICBwcm9maWxlOiAnYXNzdW1hYmxlJyxcbiAgICBodHRwT3B0aW9uczoge1xuICAgICAgcHJveHlBZGRyZXNzOiAnaHR0cDovL0RPRVNOVE1BVFRFUi8nLFxuICAgIH0sXG4gIH0pO1xuXG4gIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgLy8gVEhFTiAtLSB0aGUgZmFrZSBwcm94eSBhZ2VudCBnb3QgY2FsbGVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHRcbiAgZXhwZWN0KGNhbGxlZCkudG9FcXVhbCh0cnVlKTtcbn0pO1xuXG4vKipcbiAqIFVzZSBvYmplY3QgaGFja2VyeSB0byBnZXQgdGhlIGNyZWRlbnRpYWxzIG91dCBvZiB0aGUgU0RLIG9iamVjdFxuICovXG5mdW5jdGlvbiBzZGtDb25maWcoc2RrOiBJU0RLKTogQ29uZmlndXJhdGlvbk9wdGlvbnMge1xuICByZXR1cm4gKHNkayBhcyBhbnkpLmNvbmZpZztcbn1cblxuLyoqXG4gKiBGaXh0dXJlIGZvciBTREsgYXV0aCBmb3IgdGhpcyB0ZXN0IHN1aXRlXG4gKlxuICogSGFzIGtub3dsZWRnZSBvZiB0aGUgY2FjaGUgYnVzdGVyLCB3aWxsIHdyaXRlIHByb3BlciBmYWtlIGNvbmZpZyBmaWxlcyBhbmRcbiAqIHJlZ2lzdGVyIHVzZXJzIGFuZCByb2xlcyBpbiBGYWtlU3RzIGF0IHRoZSBzYW1lIHRpbWUuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDcmVkcyhvcHRpb25zOiBQcmVwYXJlQ3JlZHNPcHRpb25zKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRTZWN0aW9ucyhzZWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBbcHJvZmlsZSwgdXNlcl0gb2YgT2JqZWN0LmVudHJpZXMoc2VjdGlvbnMgPz8ge30pKSB7XG4gICAgICByZXQucHVzaChgWyR7cHJvZmlsZX1dYCk7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGVSb2xlKHVzZXIpKSB7XG4gICAgICAgIHJldC5wdXNoKGByb2xlX2Fybj0ke3VzZXIucm9sZV9hcm59YCk7XG4gICAgICAgIGlmICgnc291cmNlX3Byb2ZpbGUnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgc291cmNlX3Byb2ZpbGU9JHt1c2VyLnNvdXJjZV9wcm9maWxlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnY3JlZGVudGlhbF9zb3VyY2UnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgY3JlZGVudGlhbF9zb3VyY2U9JHt1c2VyLmNyZWRlbnRpYWxfc291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyLm1mYV9zZXJpYWwpIHtcbiAgICAgICAgICByZXQucHVzaChgbWZhX3NlcmlhbD0ke3VzZXIubWZhX3NlcmlhbH1gKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyUm9sZSh1bmlxKHVzZXIuJGFjY291bnQgPz8gJzAwMDAwJyksIHVzZXIucm9sZV9hcm4sIHtcbiAgICAgICAgICAuLi51c2VyLiRmYWtlU3RzT3B0aW9ucyxcbiAgICAgICAgICBhbGxvd2VkQWNjb3VudHM6IHVzZXIuJGZha2VTdHNPcHRpb25zPy5hbGxvd2VkQWNjb3VudHM/Lm1hcCh1bmlxKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXNlci5hd3NfYWNjZXNzX2tleV9pZCkge1xuICAgICAgICAgIHJldC5wdXNoKGBhd3NfYWNjZXNzX2tleV9pZD0ke3VuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCl9YCk7XG4gICAgICAgICAgcmV0LnB1c2goJ2F3c19zZWNyZXRfYWNjZXNzX2tleT1zZWNyZXQnKTtcbiAgICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyVXNlcih1bmlxKHVzZXIuJGFjY291bnQgPz8gJzAwMDAwJyksIHVuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCksIHVzZXIuJGZha2VTdHNPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlci5yZWdpb24pIHtcbiAgICAgICAgcmV0LnB1c2goYHJlZ2lvbj0ke3VzZXIucmVnaW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgYm9ja2ZzKHtcbiAgICAnL2hvbWUvbWUvLmJ4dC9jcmVkZW50aWFscyc6IGNvbnZlcnRTZWN0aW9ucyhvcHRpb25zLmNyZWRlbnRpYWxzKSxcbiAgICAnL2hvbWUvbWUvLmJ4dC9jb25maWcnOiBjb252ZXJ0U2VjdGlvbnMob3B0aW9ucy5jb25maWcpLFxuICB9KTtcblxuICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgd2Ugd2FudFxuICBwcm9jZXNzLmVudi5BV1NfQ09ORklHX0ZJTEUgPSBib2NrZnMucGF0aCgnL2hvbWUvbWUvLmJ4dC9jb25maWcnKTtcbiAgcHJvY2Vzcy5lbnYuQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFID0gYm9ja2ZzLnBhdGgoJy9ob21lL21lLy5ieHQvY3JlZGVudGlhbHMnKTtcbn1cblxuaW50ZXJmYWNlIFByZXBhcmVDcmVkc09wdGlvbnMge1xuICAvKipcbiAgICogV3JpdGUgdGhlIGF3cy9jcmVkZW50aWFscyBmaWxlXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFscz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+O1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgYXdzL2NvbmZpZyBmaWxlXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlPjtcblxuICAvKipcbiAgICogSWYgZ2l2ZW4sIGFkZCB1c2VycyB0byBGYWtlU1RTXG4gICAqL1xuICByZWFkb25seSBmYWtlU3RzPzogRmFrZVN0cztcbn1cblxuaW50ZXJmYWNlIFByb2ZpbGVVc2VyIHtcbiAgcmVhZG9ubHkgYXdzX2FjY2Vzc19rZXlfaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRhY2NvdW50Pzogc3RyaW5nO1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRmYWtlU3RzT3B0aW9ucz86IFJlZ2lzdGVyVXNlck9wdGlvbnM7XG59XG5cbnR5cGUgUHJvZmlsZVJvbGUgPSB7XG4gIHJlYWRvbmx5IHJvbGVfYXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1mYV9zZXJpYWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgJGZha2VTdHNPcHRpb25zPzogUmVnaXN0ZXJSb2xlT3B0aW9ucztcbn0gJiAoeyByZWFkb25seSBzb3VyY2VfcHJvZmlsZTogc3RyaW5nIH0gfCB7IHJlYWRvbmx5IGNyZWRlbnRpYWxfc291cmNlOiBzdHJpbmcgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvZmlsZVJvbGUoeDogUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZSk6IHggaXMgUHJvZmlsZVJvbGUge1xuICByZXR1cm4gJ3JvbGVfYXJuJyBpbiB4O1xufVxuXG5mdW5jdGlvbiBwcm92aWRlckZyb21Qcm9maWxlKHByb2ZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gU2RrUHJvdmlkZXIud2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyh7IC4uLmRlZmF1bHRDcmVkT3B0aW9ucywgcHJvZmlsZSB9KTtcbn1cbiJdfQ==