aws-cdk 2.14.0 → 2.15.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 (35) hide show
  1. package/README.md +2 -1
  2. package/build-info.json +2 -2
  3. package/does-not-exist.json +1 -0
  4. package/lib/api/cloudformation-deployments.d.ts +1 -6
  5. package/lib/api/cloudformation-deployments.js +6 -72
  6. package/lib/api/evaluate-cloudformation-template.d.ts +9 -2
  7. package/lib/api/evaluate-cloudformation-template.js +14 -2
  8. package/lib/api/hotswap-deployments.js +34 -7
  9. package/lib/api/logs/find-cloudwatch-logs.js +2 -2
  10. package/lib/api/nested-stack-helpers.d.ts +28 -0
  11. package/lib/api/nested-stack-helpers.js +97 -0
  12. package/lib/cli.js +2 -2
  13. package/lib/index.js +1139 -389
  14. package/lib/notices.js +16 -7
  15. package/package.json +9 -9
  16. package/test/api/hotswap/hotswap-deployments.test.js +38 -2
  17. package/test/api/hotswap/hotswap-test-setup.d.ts +6 -4
  18. package/test/api/hotswap/hotswap-test-setup.js +46 -6
  19. package/test/api/hotswap/nested-stacks-hotswap.test.d.ts +1 -0
  20. package/test/api/hotswap/nested-stacks-hotswap.test.js +840 -0
  21. package/test/api/hotswap/state-machine-hotswap-deployments.test.js +2 -2
  22. package/test/integ/cli/cli.integtest.js +2 -2
  23. package/test/nested-stack-templates/one-lambda-one-stack-stack-with-asset-parameters.nested.template.json +52 -0
  24. package/test/nested-stack-templates/one-lambda-one-stack-stack.nested.template.json +26 -0
  25. package/test/nested-stack-templates/one-lambda-stack-with-asset-parameters.nested.template.json +29 -0
  26. package/test/nested-stack-templates/one-lambda-stack.nested.template.json +17 -0
  27. package/test/nested-stack-templates/one-lambda-version-stack.nested.template.json +20 -0
  28. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-output-one-param-stack.nested.template.json +0 -0
  29. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-one-stack-stack.nested.template.json +0 -0
  30. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-stack.nested.template.json +0 -0
  31. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-two-stacks-stack.nested.template.json +0 -0
  32. package/test/nested-stack-templates/one-unnamed-lambda-stack.nested.template.json +16 -0
  33. package/test/nested-stack-templates/one-unnamed-lambda-two-stacks-stack.nested.template.json +34 -0
  34. package/test/notices.test.js +26 -3
  35. package/test/util.js +2 -2
@@ -0,0 +1,26 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": "new-bucket",
8
+ "S3Key": "current-key"
9
+ },
10
+ "FunctionName": "child-function"
11
+ },
12
+ "Metadata": {
13
+ "aws:asset:path": "old-path"
14
+ }
15
+ },
16
+ "GrandChildStack": {
17
+ "Type": "AWS::CloudFormation::Stack",
18
+ "Properties": {
19
+ "TemplateURL": "https://www.magic-url.com"
20
+ },
21
+ "Metadata": {
22
+ "aws:asset:path": "one-lambda-stack.nested.template.json"
23
+ }
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": {
8
+ "Ref": "referencetoS3BucketParam"
9
+ },
10
+ "S3Key": {
11
+ "Ref": "referencetoS3KeyParam"
12
+ }
13
+ },
14
+ "FunctionName": "my-function"
15
+ },
16
+ "Metadata": {
17
+ "aws:asset:path": "old-path"
18
+ }
19
+ }
20
+ },
21
+ "Parameters": {
22
+ "referencetoS3BucketParam": {
23
+ "Type": "String"
24
+ },
25
+ "referencetoS3KeyParam": {
26
+ "Type": "String"
27
+ }
28
+ }
29
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": "current-bucket",
8
+ "S3Key": "new-key"
9
+ },
10
+ "FunctionName": "my-function"
11
+ },
12
+ "Metadata": {
13
+ "aws:asset:path": "old-path"
14
+ }
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": "current-bucket",
8
+ "S3Key": "new-key"
9
+ },
10
+ "FunctionName": "my-function"
11
+ }
12
+ },
13
+ "Version": {
14
+ "Type": "AWS::Lambda::Version",
15
+ "Properties": {
16
+ "FunctionName": { "Ref": "Func" }
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": "current-bucket",
8
+ "S3Key": "new-key"
9
+ }
10
+ },
11
+ "Metadata": {
12
+ "aws:asset:path": "old-path"
13
+ }
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "Resources": {
3
+ "Func": {
4
+ "Type": "AWS::Lambda::Function",
5
+ "Properties": {
6
+ "Code": {
7
+ "S3Bucket": "current-bucket",
8
+ "S3Key": "new-key"
9
+ }
10
+ },
11
+ "Metadata": {
12
+ "aws:asset:path": "old-path"
13
+ }
14
+ },
15
+ "GrandChildStackA": {
16
+ "Type": "AWS::CloudFormation::Stack",
17
+ "Properties": {
18
+ "TemplateURL": "https://www.magic-url.com"
19
+ },
20
+ "Metadata": {
21
+ "aws:asset:path": "one-unnamed-lambda-stack.nested.template.json"
22
+ }
23
+ },
24
+ "GrandChildStackB": {
25
+ "Type": "AWS::CloudFormation::Stack",
26
+ "Properties": {
27
+ "TemplateURL": "https://www.magic-url.com"
28
+ },
29
+ "Metadata": {
30
+ "aws:asset:path": "one-unnamed-lambda-stack.nested.template.json"
31
+ }
32
+ }
33
+ }
34
+ }
@@ -5,6 +5,7 @@ const os = require("os");
5
5
  const path = require("path");
6
6
  const fs = require("fs-extra");
7
7
  const nock = require("nock");
8
+ const logging = require("../lib/logging");
8
9
  const notices_1 = require("../lib/notices");
9
10
  const version = require("../lib/version");
10
11
  const BASIC_NOTICE = {
@@ -188,6 +189,26 @@ describe('cli notices', () => {
188
189
  const result = await dataSource.fetch();
189
190
  expect(result).toEqual([]);
190
191
  });
192
+ test('returns empty array when the connection stays idle for too long', async () => {
193
+ nock('https://cli.cdk.dev-tools.aws.dev')
194
+ .get('/notices.json')
195
+ .delayConnection(3500)
196
+ .reply(200, {
197
+ notices: [BASIC_NOTICE],
198
+ });
199
+ const result = await dataSource.fetch();
200
+ expect(result).toEqual([]);
201
+ });
202
+ test('returns empty array when the request takes too long to finish', async () => {
203
+ nock('https://cli.cdk.dev-tools.aws.dev')
204
+ .get('/notices.json')
205
+ .delayBody(3500)
206
+ .reply(200, {
207
+ notices: [BASIC_NOTICE],
208
+ });
209
+ const result = await dataSource.fetch();
210
+ expect(result).toEqual([]);
211
+ });
191
212
  function mockCall(statusCode, body) {
192
213
  nock('https://cli.cdk.dev-tools.aws.dev')
193
214
  .get('/notices.json')
@@ -226,10 +247,12 @@ describe('cli notices', () => {
226
247
  expect(notices).toEqual(freshData);
227
248
  });
228
249
  test('retrieves data from the delegate when the file cannot be read', async () => {
229
- const nonExistingFile = path.join(os.tmpdir(), 'cache.json');
230
- const dataSource = dataSourceWithDelegateReturning(freshData, nonExistingFile);
250
+ const debugSpy = jest.spyOn(logging, 'debug');
251
+ const dataSource = dataSourceWithDelegateReturning(freshData, 'does-not-exist.json');
231
252
  const notices = await dataSource.fetch();
232
253
  expect(notices).toEqual(freshData);
254
+ expect(debugSpy).not.toHaveBeenCalled();
255
+ debugSpy.mockRestore();
233
256
  });
234
257
  test('retrieved data from the delegate when it is configured to ignore the cache', async () => {
235
258
  fs.writeJsonSync(fileName, {
@@ -289,4 +312,4 @@ If you don’t want to see a notice anymore, use "cdk acknowledge <id>". For exa
289
312
  }
290
313
  });
291
314
  });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWNlcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3Qiw0Q0FPd0I7QUFDeEIsMENBQTBDO0FBRTFDLE1BQU0sWUFBWSxHQUFHO0lBQ25CLEtBQUssRUFBRSxnRUFBZ0U7SUFDdkUsV0FBVyxFQUFFLEtBQUs7SUFDbEIsUUFBUSxFQUFFLDZLQUE2SztJQUN2TCxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsT0FBTyxFQUFFLFdBQVc7U0FDckIsQ0FBQztJQUNGLGFBQWEsRUFBRSxHQUFHO0NBQ25CLENBQUM7QUFFRixNQUFNLGlDQUFpQyxHQUFHO0lBQ3hDLEtBQUssRUFBRSxxREFBcUQ7SUFDNUQsV0FBVyxFQUFFLEtBQUs7SUFDbEIsUUFBUSxFQUFFLHdKQUF3SjtJQUNsSyxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxLQUFLO1lBQ1gsT0FBTyxFQUFFLG9CQUFvQjtTQUM5QixDQUFDO0lBQ0YsYUFBYSxFQUFFLEdBQUc7Q0FDbkIsQ0FBQztBQUVGLE1BQU0sK0JBQStCLEdBQUc7SUFDdEMsS0FBSyxFQUFFLDZCQUE2QjtJQUNwQyxXQUFXLEVBQUUsSUFBSTtJQUNqQixRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFVBQVUsRUFBRSxDQUFDO1lBQ1gsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLFVBQVU7U0FDcEIsQ0FBQztJQUNGLGFBQWEsRUFBRSxHQUFHO0NBQ25CLENBQUM7QUFFRixNQUFNLHVCQUF1QixHQUFHO0lBQzlCLEtBQUssRUFBRSw2QkFBNkI7SUFDcEMsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFB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LElBQUksRUFBRTtZQUNwRCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RDLFVBQVUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxZQUFZLEVBQUUsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO1lBRXRGLE1BQU0sTUFBTSxHQUFHLE1BQU0seUJBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQy9DLHdCQUF3QixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsTUFBTTthQUNmLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs2R0FlZ0YsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxnQkFBZ0I7WUFDdkIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgbm9jayBmcm9tICdub2NrJztcbmltcG9ydCB7XG4gIENhY2hlZERhdGFTb3VyY2UsXG4gIGZpbHRlck5vdGljZXMsXG4gIGZvcm1hdE5vdGljZXMsXG4gIGdlbmVyYXRlTWVzc2FnZSxcbiAgTm90aWNlLFxuICBXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSxcbn0gZnJvbSAnLi4vbGliL25vdGljZXMnO1xuaW1wb3J0ICogYXMgdmVyc2lvbiBmcm9tICcuLi9saWIvdmVyc2lvbic7XG5cbmNvbnN0IEJBU0lDX05PVElDRSA9IHtcbiAgdGl0bGU6ICdUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldCcsXG4gIGlzc3VlTnVtYmVyOiAxNjYwMyxcbiAgb3ZlcnZpZXc6ICdJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGggYXV0b19kZWxldGVfb2JqZWN0cz1UcnVlLCBhbmQgdGhlbiByZS1kZXBsb3llZCB3aXRoIGF1dG9fZGVsZXRlX29iamVjdHM9RmFsc2UsIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0IHdpbGwgYmUgZGVsZXRlZC4nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdjbGknLFxuICAgIHZlcnNpb246ICc8PTEuMTI2LjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFID0ge1xuICB0aXRsZTogJ0Vycm9yIHdoZW4gYnVpbGRpbmcgRUtTIGNsdXN0ZXIgd2l0aCBtb25vY2RrIGltcG9ydCcsXG4gIGlzc3VlTnVtYmVyOiAxNzA2MSxcbiAgb3ZlcnZpZXc6ICdXaGVuIHVzaW5nIG1vbm9jZGsvYXdzLWVrcyB0byBidWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgYW4gRUtTIGNsdXN0ZXIsIGVycm9yIGlzIHRocm93biBhYm91dCBtaXNzaW5nIGxhbWJkYS1sYXllci1ub2RlLXByb3h5LWFnZW50L2xheWVyL3BhY2thZ2UuanNvbi4nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdjbGknLFxuICAgIHZlcnNpb246ICc8MS4xMzAuMCA+PTEuMTI2LjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgRlJBTUVXT1JLXzJfMV8wX0FGRkVDVEVEX05PVElDRSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2ZyYW1ld29yaycsXG4gICAgdmVyc2lvbjogJzw9IDIuMS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWVYyID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnQGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi1hbHBoYS4nLFxuICAgIHZlcnNpb246ICc8PSAyLjEzLjAtYWxwaGEuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBOT1RJQ0VfRk9SX0FQSUdBVEVXQVkgPSB7XG4gIHRpdGxlOiAnUmVncmVzc2lvbiBvbiBtb2R1bGUgZm9vYmFyJyxcbiAgaXNzdWVOdW1iZXI6IDEyMzQsXG4gIG92ZXJ2aWV3OiAnU29tZSBidWcgZGVzY3JpcHRpb24nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheScsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWVYyX0NGTl9TVEFHRSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2F3cy1jZGstbGliLmF3c19hcGlnYXRld2F5djIuQ2ZuU3RhZ2UnLFxuICAgIHZlcnNpb246ICc8PSAyLjEzLjAtYWxwaGEuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5kZXNjcmliZSgnY2xpIG5vdGljZXMnLCAoKSA9PiB7XG4gIGJlZm9yZUFsbCgoKSA9PiB7XG4gICAgamVzdFxuICAgICAgLnNweU9uKHZlcnNpb24sICd2ZXJzaW9uTnVtYmVyJylcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gJzEuMC4wJyk7XG4gIH0pO1xuXG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZShmb3JtYXROb3RpY2VzLCAoKSA9PiB7XG4gICAgdGVzdCgnY29ycmVjdCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXROb3RpY2VzKFtCQVNJQ19OT1RJQ0VdKVswXTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoYDE2NjAzXHRUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldFxuXG5cdE92ZXJ2aWV3OiBJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9VHJ1ZSwgYW5kIHRoZW4gcmUtZGVwbG95ZWQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXRcblx0ICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZC5cblxuXHRBZmZlY3RlZCB2ZXJzaW9uczogY2xpOiA8PTEuMTI2LjBcblxuXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2NjAzXG5gKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ211bHRpcGxlIGFmZmVjdCB2ZXJzaW9ucycsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdE5vdGljZXMoW01VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0pWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgMTcwNjFcdEVycm9yIHdoZW4gYnVpbGRpbmcgRUtTIGNsdXN0ZXIgd2l0aCBtb25vY2RrIGltcG9ydFxuXG5cdE92ZXJ2aWV3OiBXaGVuIHVzaW5nIG1vbm9jZGsvYXdzLWVrcyB0byBidWlsZCBhIHN0YWNrIGNvbnRhaW5pbmcgYW5cblx0ICAgICAgICAgIEVLUyBjbHVzdGVyLCBlcnJvciBpcyB0aHJvd24gYWJvdXQgbWlzc2luZ1xuXHQgICAgICAgICAgbGFtYmRhLWxheWVyLW5vZGUtcHJveHktYWdlbnQvbGF5ZXIvcGFja2FnZS5qc29uLlxuXG5cdEFmZmVjdGVkIHZlcnNpb25zOiBjbGk6IDwxLjEzMC4wID49MS4xMjYuMFxuXG5cdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTcwNjFcbmApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShmaWx0ZXJOb3RpY2VzLCAoKSA9PiB7XG4gICAgdGVzdCgnY29ycmVjdGx5IGZpbHRlciBub3RpY2VzIG9uIGNsaScsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdGljZXMgPSBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdO1xuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgfSkpLnRvRXF1YWwoW0JBU0lDX05PVElDRV0pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEyOS4wJyxcbiAgICAgIH0pKS50b0VxdWFsKFtNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdKTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4xMjYuMCcsXG4gICAgICB9KSkudG9FcXVhbChub3RpY2VzKTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBjbGlWZXJzaW9uOiAnMS4xMzAuMCcsXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjb3JyZWN0bHkgZmlsdGVyIG5vdGljZXMgb24gZnJhbWV3b3JrJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtGUkFNRVdPUktfMl8xXzBfQUZGRUNURURfTk9USUNFXTtcblxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9idWlsdC13aXRoLTJfMTJfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMV8xNDRfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW0ZSQU1FV09SS18yXzFfMF9BRkZFQ1RFRF9OT1RJQ0VdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NvcnJlY3RseSBmaWx0ZXIgbm90aWNlcyBvbiBhcmJpdHJhcnkgbW9kdWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vdGljZXMgPSBbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJdO1xuXG4gICAgICAvLyBtb2R1bGUtbGV2ZWwgbWF0Y2hcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvZXhwZXJpbWVudGFsLW1vZHVsZScpLFxuICAgICAgfSkpLnRvRXF1YWwoW05PVElDRV9GT1JfQVBJR0FURVdBWVYyXSk7XG5cbiAgICAgIC8vIG5vIGFwaWdhdGV3YXl2MiBpbiB0aGUgdHJlZVxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9idWlsdC13aXRoLTJfMTJfMCcpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICAvLyBtb2R1bGUgbmFtZSBtaXNtYXRjaDogYXBpZ2F0ZXdheSAhPSBhcGlnYXRld2F5djJcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVldLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2V4cGVyaW1lbnRhbC1tb2R1bGUnKSxcbiAgICAgIH0pKS50b0VxdWFsKFtdKTtcblxuICAgICAgLy8gY29uc3RydWN0LWxldmVsIG1hdGNoXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFXSwge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9leHBlcmltZW50YWwtbW9kdWxlJyksXG4gICAgICB9KSkudG9FcXVhbChbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFXSk7XG4gICAgfSk7XG5cbiAgfSk7XG5cbiAgZGVzY3JpYmUoV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UsICgpID0+IHtcbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IFdlYnNpdGVOb3RpY2VEYXRhU291cmNlKCk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGRhdGEgd2hlbiBkb3dubG9hZCBzdWNjZWVkcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwge1xuICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gdGhlIHNlcnZlciByZXR1cm5zIGFuIHVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrQ2FsbCg1MDAsIHtcbiAgICAgICAgbm90aWNlczogW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgYW4gdW5leHBlY3RlZCBzdHJ1Y3R1cmUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrQ2FsbCgyMDAsIHtcbiAgICAgICAgZm9vOiBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBpbnZhbGlkIGpzb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2NrQ2FsbCgyMDAsICctMDlhaXNramtqODM4Jyk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIEhUVFBTIGNhbGwgdGhyb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja0dldCA9IGplc3Quc3B5T24oaHR0cHMsICdnZXQnKVxuICAgICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdObyBjb25uZWN0aW9uJyk7IH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU291cmNlLmZldGNoKCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuXG4gICAgICBtb2NrR2V0Lm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gdGhlIHJlcXVlc3QgaGFzIGFuIGVycm9yJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbm9jaygnaHR0cHM6Ly9jbGkuY2RrLmRldi10b29scy5hd3MuZGV2JylcbiAgICAgICAgLmdldCgnL25vdGljZXMuanNvbicpXG4gICAgICAgIC5yZXBseVdpdGhFcnJvcignRE5TIHJlc29sdXRpb24gZmFpbGVkJyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtb2NrQ2FsbChzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IGFueSk6IFByb21pc2U8Tm90aWNlW10+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAucmVwbHkoc3RhdHVzQ29kZSwgYm9keSk7XG5cbiAgICAgIHJldHVybiBkYXRhU291cmNlLmZldGNoKCk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShDYWNoZWREYXRhU291cmNlLCAoKSA9PiB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjYWNoZS5qc29uJyk7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IFtCQVNJQ19OT1RJQ0VdO1xuICAgIGNvbnN0IGZyZXNoRGF0YSA9IFtNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVOYW1lLCAnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyaWV2ZXMgZGF0YSBmcm9tIHRoZSBkZWxlZ2F0ZSBjYWNoZSB3aGVuIHRoZSBmaWxlIGlzIGVtcHR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGZpbGUgd2hlbiB0aGUgZGF0YSBpcyBzdGlsbCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogRGF0ZS5ub3coKSArIDEwMDAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChjYWNoZWREYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGRhdGEgaXMgZXhwaXJlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHJlYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBub25FeGlzdGluZ0ZpbGUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjYWNoZS5qc29uJyk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEsIG5vbkV4aXN0aW5nRmlsZSk7XG5cbiAgICAgIGNvbnN0IG5vdGljZXMgPSBhd2FpdCBkYXRhU291cmNlLmZldGNoKCk7XG5cbiAgICAgIGV4cGVjdChub3RpY2VzKS50b0VxdWFsKGZyZXNoRGF0YSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyaWV2ZWQgZGF0YSBmcm9tIHRoZSBkZWxlZ2F0ZSB3aGVuIGl0IGlzIGNvbmZpZ3VyZWQgdG8gaWdub3JlIHRoZSBjYWNoZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogRGF0ZS5ub3coKSArIDEwMDAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEsIGZpbGVOYW1lLCB0cnVlKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcobm90aWNlczogTm90aWNlW10sIGZpbGU6IHN0cmluZyA9IGZpbGVOYW1lLCBpZ25vcmVDYWNoZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBkZWxlZ2F0ZSA9IHtcbiAgICAgICAgZmV0Y2g6IGplc3QuZm4oKSxcbiAgICAgIH07XG5cbiAgICAgIGRlbGVnYXRlLmZldGNoLm1vY2tSZXNvbHZlZFZhbHVlKG5vdGljZXMpO1xuICAgICAgcmV0dXJuIG5ldyBDYWNoZWREYXRhU291cmNlKGZpbGUsIGRlbGVnYXRlLCBpZ25vcmVDYWNoZSk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShnZW5lcmF0ZU1lc3NhZ2UsICgpID0+IHtcbiAgICB0ZXN0KCdkb2VzIG5vdCBzaG93IGFueXRoaW5nIHdoZW4gdGhlcmUgYXJlIG5vIG5vdGljZXMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gY3JlYXRlRGF0YVNvdXJjZSgpO1xuICAgICAgZGF0YVNvdXJjZS5mZXRjaC5tb2NrUmVzb2x2ZWRWYWx1ZShbXSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlLCB7XG4gICAgICAgIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogW10sXG4gICAgICAgIG91dGRpcjogJy90bXAnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnc2hvd3Mgbm90aWNlcyB0aGF0IHBhc3MgdGhlIGZpbHRlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICBkYXRhU291cmNlLmZldGNoLm1vY2tSZXNvbHZlZFZhbHVlKFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZU1lc3NhZ2UoZGF0YVNvdXJjZSwge1xuICAgICAgICBhY2tub3dsZWRnZWRJc3N1ZU51bWJlcnM6IFsxNzA2MV0sXG4gICAgICAgIG91dGRpcjogJy90bXAnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoYFxuTk9USUNFU1xuXG4xNjYwM1x0VG9nZ2xpbmcgb2ZmIGF1dG9fZGVsZXRlX29iamVjdHMgZm9yIEJ1Y2tldCBlbXB0aWVzIHRoZSBidWNrZXRcblxuXHRPdmVydmlldzogSWYgYSBzdGFjayBpcyBkZXBsb3llZCB3aXRoIGFuIFMzIGJ1Y2tldCB3aXRoXG5cdCAgICAgICAgICBhdXRvX2RlbGV0ZV9vYmplY3RzPVRydWUsIGFuZCB0aGVuIHJlLWRlcGxveWVkIHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9RmFsc2UsIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgYnVja2V0XG5cdCAgICAgICAgICB3aWxsIGJlIGRlbGV0ZWQuXG5cblx0QWZmZWN0ZWQgdmVyc2lvbnM6IGNsaTogPD0xLjEyNi4wXG5cblx0TW9yZSBpbmZvcm1hdGlvbiBhdDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNjYwM1xuXG5cbklmIHlvdSBkb27igJl0IHdhbnQgdG8gc2VlIGEgbm90aWNlIGFueW1vcmUsIHVzZSBcImNkayBhY2tub3dsZWRnZSA8aWQ+XCIuIEZvciBleGFtcGxlLCBcImNkayBhY2tub3dsZWRnZSAxNjYwM1wiLmApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0YVNvdXJjZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoOiBqZXN0LmZuKCksXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWNlcy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm90aWNlcy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsK0JBQStCO0FBQy9CLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLDZCQUE2QjtBQUM3QiwwQ0FBMEM7QUFDMUMsNENBT3dCO0FBQ3hCLDBDQUEwQztBQUUxQyxNQUFNLFlBQVksR0FBRztJQUNuQixLQUFLLEVBQUUsZ0VBQWdFO0lBQ3ZFLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSw2S0FBNks7SUFDdkwsVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSxpQ0FBaUMsR0FBRztJQUN4QyxLQUFLLEVBQUUscURBQXFEO0lBQzVELFdBQVcsRUFBRSxLQUFLO0lBQ2xCLFFBQVEsRUFBRSx3SkFBd0o7SUFDbEssVUFBVSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsS0FBSztZQUNYLE9BQU8sRUFBRSxvQkFBb0I7U0FDOUIsQ0FBQztJQUNGLGFBQWEsRUFBRSxHQUFHO0NBQ25CLENBQUM7QUFFRixNQUFNLCtCQUErQixHQUFHO0lBQ3RDLEtBQUssRUFBRSw2QkFBNkI7SUFDcEMsV0FBVyxFQUFFLElBQUk7SUFDakIsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxVQUFVLEVBQUUsQ0FBQztZQUNYLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxVQUFVO1NBQ3BCLENBQUM7SUFDRixhQUFhLEVBQUUsR0FBRztDQUNuQixDQUFDO0FBRUYsTUFBTSx1QkFBdUIsR0FBRztJQUM5QixLQUFLLEVBQUUsNkJBQTZCO0lBQ3BDLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLENBQUM7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QUFVLEVBQUU7Z0JBQy9DLHdCQUF3QixFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxNQUFNLEVBQUUsTUFBTTthQUNmLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs2R0FlZ0YsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxnQkFBZ0I7WUFDdkIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTthQUNqQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgbm9jayBmcm9tICdub2NrJztcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSAnLi4vbGliL2xvZ2dpbmcnO1xuaW1wb3J0IHtcbiAgQ2FjaGVkRGF0YVNvdXJjZSxcbiAgZmlsdGVyTm90aWNlcyxcbiAgZm9ybWF0Tm90aWNlcyxcbiAgZ2VuZXJhdGVNZXNzYWdlLFxuICBOb3RpY2UsXG4gIFdlYnNpdGVOb3RpY2VEYXRhU291cmNlLFxufSBmcm9tICcuLi9saWIvbm90aWNlcyc7XG5pbXBvcnQgKiBhcyB2ZXJzaW9uIGZyb20gJy4uL2xpYi92ZXJzaW9uJztcblxuY29uc3QgQkFTSUNfTk9USUNFID0ge1xuICB0aXRsZTogJ1RvZ2dsaW5nIG9mZiBhdXRvX2RlbGV0ZV9vYmplY3RzIGZvciBCdWNrZXQgZW1wdGllcyB0aGUgYnVja2V0JyxcbiAgaXNzdWVOdW1iZXI6IDE2NjAzLFxuICBvdmVydmlldzogJ0lmIGEgc3RhY2sgaXMgZGVwbG95ZWQgd2l0aCBhbiBTMyBidWNrZXQgd2l0aCBhdXRvX2RlbGV0ZV9vYmplY3RzPVRydWUsIGFuZCB0aGVuIHJlLWRlcGxveWVkIHdpdGggYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXQgd2lsbCBiZSBkZWxldGVkLicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2NsaScsXG4gICAgdmVyc2lvbjogJzw9MS4xMjYuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0UgPSB7XG4gIHRpdGxlOiAnRXJyb3Igd2hlbiBidWlsZGluZyBFS1MgY2x1c3RlciB3aXRoIG1vbm9jZGsgaW1wb3J0JyxcbiAgaXNzdWVOdW1iZXI6IDE3MDYxLFxuICBvdmVydmlldzogJ1doZW4gdXNpbmcgbW9ub2Nkay9hd3MtZWtzIHRvIGJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyBhbiBFS1MgY2x1c3RlciwgZXJyb3IgaXMgdGhyb3duIGFib3V0IG1pc3NpbmcgbGFtYmRhLWxheWVyLW5vZGUtcHJveHktYWdlbnQvbGF5ZXIvcGFja2FnZS5qc29uLicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ2NsaScsXG4gICAgdmVyc2lvbjogJzwxLjEzMC4wID49MS4xMjYuMCcsXG4gIH1dLFxuICBzY2hlbWFWZXJzaW9uOiAnMScsXG59O1xuXG5jb25zdCBGUkFNRVdPUktfMl8xXzBfQUZGRUNURURfTk9USUNFID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnZnJhbWV3b3JrJyxcbiAgICB2ZXJzaW9uOiAnPD0gMi4xLjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTk9USUNFX0ZPUl9BUElHQVRFV0FZVjIgPSB7XG4gIHRpdGxlOiAnUmVncmVzc2lvbiBvbiBtb2R1bGUgZm9vYmFyJyxcbiAgaXNzdWVOdW1iZXI6IDEyMzQsXG4gIG92ZXJ2aWV3OiAnU29tZSBidWcgZGVzY3JpcHRpb24nLFxuICBjb21wb25lbnRzOiBbe1xuICAgIG5hbWU6ICdAYXdzLWNkay9hd3MtYXBpZ2F0ZXdheXYyLWFscGhhLicsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmNvbnN0IE5PVElDRV9GT1JfQVBJR0FURVdBWSA9IHtcbiAgdGl0bGU6ICdSZWdyZXNzaW9uIG9uIG1vZHVsZSBmb29iYXInLFxuICBpc3N1ZU51bWJlcjogMTIzNCxcbiAgb3ZlcnZpZXc6ICdTb21lIGJ1ZyBkZXNjcmlwdGlvbicsXG4gIGNvbXBvbmVudHM6IFt7XG4gICAgbmFtZTogJ0Bhd3MtY2RrL2F3cy1hcGlnYXRld2F5JyxcbiAgICB2ZXJzaW9uOiAnPD0gMi4xMy4wLWFscGhhLjAnLFxuICB9XSxcbiAgc2NoZW1hVmVyc2lvbjogJzEnLFxufTtcblxuY29uc3QgTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJfQ0ZOX1NUQUdFID0ge1xuICB0aXRsZTogJ1JlZ3Jlc3Npb24gb24gbW9kdWxlIGZvb2JhcicsXG4gIGlzc3VlTnVtYmVyOiAxMjM0LFxuICBvdmVydmlldzogJ1NvbWUgYnVnIGRlc2NyaXB0aW9uJyxcbiAgY29tcG9uZW50czogW3tcbiAgICBuYW1lOiAnYXdzLWNkay1saWIuYXdzX2FwaWdhdGV3YXl2Mi5DZm5TdGFnZScsXG4gICAgdmVyc2lvbjogJzw9IDIuMTMuMC1hbHBoYS4wJyxcbiAgfV0sXG4gIHNjaGVtYVZlcnNpb246ICcxJyxcbn07XG5cbmRlc2NyaWJlKCdjbGkgbm90aWNlcycsICgpID0+IHtcbiAgYmVmb3JlQWxsKCgpID0+IHtcbiAgICBqZXN0XG4gICAgICAuc3B5T24odmVyc2lvbiwgJ3ZlcnNpb25OdW1iZXInKVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAnMS4wLjAnKTtcbiAgfSk7XG5cbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGZvcm1hdE5vdGljZXMsICgpID0+IHtcbiAgICB0ZXN0KCdjb3JyZWN0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdE5vdGljZXMoW0JBU0lDX05PVElDRV0pWzBdO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgMTY2MDNcdFRvZ2dsaW5nIG9mZiBhdXRvX2RlbGV0ZV9vYmplY3RzIGZvciBCdWNrZXQgZW1wdGllcyB0aGUgYnVja2V0XG5cblx0T3ZlcnZpZXc6IElmIGEgc3RhY2sgaXMgZGVwbG95ZWQgd2l0aCBhbiBTMyBidWNrZXQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1UcnVlLCBhbmQgdGhlbiByZS1kZXBsb3llZCB3aXRoXG5cdCAgICAgICAgICBhdXRvX2RlbGV0ZV9vYmplY3RzPUZhbHNlLCBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGJ1Y2tldFxuXHQgICAgICAgICAgd2lsbCBiZSBkZWxldGVkLlxuXG5cdEFmZmVjdGVkIHZlcnNpb25zOiBjbGk6IDw9MS4xMjYuMFxuXG5cdE1vcmUgaW5mb3JtYXRpb24gYXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTY2MDNcbmApO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbXVsdGlwbGUgYWZmZWN0IHZlcnNpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Tm90aWNlcyhbTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSlbMF07XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGAxNzA2MVx0RXJyb3Igd2hlbiBidWlsZGluZyBFS1MgY2x1c3RlciB3aXRoIG1vbm9jZGsgaW1wb3J0XG5cblx0T3ZlcnZpZXc6IFdoZW4gdXNpbmcgbW9ub2Nkay9hd3MtZWtzIHRvIGJ1aWxkIGEgc3RhY2sgY29udGFpbmluZyBhblxuXHQgICAgICAgICAgRUtTIGNsdXN0ZXIsIGVycm9yIGlzIHRocm93biBhYm91dCBtaXNzaW5nXG5cdCAgICAgICAgICBsYW1iZGEtbGF5ZXItbm9kZS1wcm94eS1hZ2VudC9sYXllci9wYWNrYWdlLmpzb24uXG5cblx0QWZmZWN0ZWQgdmVyc2lvbnM6IGNsaTogPDEuMTMwLjAgPj0xLjEyNi4wXG5cblx0TW9yZSBpbmZvcm1hdGlvbiBhdDogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzA2MVxuYCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGZpbHRlck5vdGljZXMsICgpID0+IHtcbiAgICB0ZXN0KCdjb3JyZWN0bHkgZmlsdGVyIG5vdGljZXMgb24gY2xpJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV07XG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjAuMCcsXG4gICAgICB9KSkudG9FcXVhbChbQkFTSUNfTk9USUNFXSk7XG5cbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgY2xpVmVyc2lvbjogJzEuMTI5LjAnLFxuICAgICAgfSkpLnRvRXF1YWwoW01VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0pO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEyNi4wJyxcbiAgICAgIH0pKS50b0VxdWFsKG5vdGljZXMpO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIGNsaVZlcnNpb246ICcxLjEzMC4wJyxcbiAgICAgIH0pKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NvcnJlY3RseSBmaWx0ZXIgbm90aWNlcyBvbiBmcmFtZXdvcmsnLCAoKSA9PiB7XG4gICAgICBjb25zdCBub3RpY2VzID0gW0ZSQU1FV09SS18yXzFfMF9BRkZFQ1RFRF9OT1RJQ0VdO1xuXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMl8xMl8wJyksXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG5cbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKG5vdGljZXMsIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvYnVpbHQtd2l0aC0xXzE0NF8wJyksXG4gICAgICB9KSkudG9FcXVhbChbRlJBTUVXT1JLXzJfMV8wX0FGRkVDVEVEX05PVElDRV0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY29ycmVjdGx5IGZpbHRlciBub3RpY2VzIG9uIGFyYml0cmFyeSBtb2R1bGVzJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl07XG5cbiAgICAgIC8vIG1vZHVsZS1sZXZlbCBtYXRjaFxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMobm90aWNlcywge1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihfX2Rpcm5hbWUsICdjbG91ZC1hc3NlbWJseS10cmVlcy9leHBlcmltZW50YWwtbW9kdWxlJyksXG4gICAgICB9KSkudG9FcXVhbChbTk9USUNFX0ZPUl9BUElHQVRFV0FZVjJdKTtcblxuICAgICAgLy8gbm8gYXBpZ2F0ZXdheXYyIGluIHRoZSB0cmVlXG4gICAgICBleHBlY3QoZmlsdGVyTm90aWNlcyhub3RpY2VzLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2J1aWx0LXdpdGgtMl8xMl8wJyksXG4gICAgICB9KSkudG9FcXVhbChbXSk7XG5cbiAgICAgIC8vIG1vZHVsZSBuYW1lIG1pc21hdGNoOiBhcGlnYXRld2F5ICE9IGFwaWdhdGV3YXl2MlxuICAgICAgZXhwZWN0KGZpbHRlck5vdGljZXMoW05PVElDRV9GT1JfQVBJR0FURVdBWV0sIHtcbiAgICAgICAgb3V0ZGlyOiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY2xvdWQtYXNzZW1ibHktdHJlZXMvZXhwZXJpbWVudGFsLW1vZHVsZScpLFxuICAgICAgfSkpLnRvRXF1YWwoW10pO1xuXG4gICAgICAvLyBjb25zdHJ1Y3QtbGV2ZWwgbWF0Y2hcbiAgICAgIGV4cGVjdChmaWx0ZXJOb3RpY2VzKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl9DRk5fU1RBR0VdLCB7XG4gICAgICAgIG91dGRpcjogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Nsb3VkLWFzc2VtYmx5LXRyZWVzL2V4cGVyaW1lbnRhbC1tb2R1bGUnKSxcbiAgICAgIH0pKS50b0VxdWFsKFtOT1RJQ0VfRk9SX0FQSUdBVEVXQVlWMl9DRk5fU1RBR0VdKTtcbiAgICB9KTtcblxuICB9KTtcblxuICBkZXNjcmliZShXZWJzaXRlTm90aWNlRGF0YVNvdXJjZSwgKCkgPT4ge1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgV2Vic2l0ZU5vdGljZURhdGFTb3VyY2UoKTtcblxuICAgIHRlc3QoJ3JldHVybnMgZGF0YSB3aGVuIGRvd25sb2FkIHN1Y2NlZWRzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9ja0NhbGwoMjAwLCB7XG4gICAgICAgIG5vdGljZXM6IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgc2VydmVyIHJldHVybnMgYW4gdW5leHBlY3RlZCBzdGF0dXMgY29kZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDUwMCwge1xuICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFLCBNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSBzZXJ2ZXIgcmV0dXJucyBhbiB1bmV4cGVjdGVkIHN0cnVjdHVyZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwge1xuICAgICAgICBmb286IFtCQVNJQ19OT1RJQ0UsIE1VTFRJUExFX0FGRkVDVEVEX1ZFUlNJT05TX05PVElDRV0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gdGhlIHNlcnZlciByZXR1cm5zIGludmFsaWQganNvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vY2tDYWxsKDIwMCwgJy0wOWFpc2tqa2o4MzgnKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXR1cm5zIGVtcHR5IGFycmF5IHdoZW4gSFRUUFMgY2FsbCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrR2V0ID0gamVzdC5zcHlPbihodHRwcywgJ2dldCcpXG4gICAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbm5lY3Rpb24nKTsgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG5cbiAgICAgIG1vY2tHZXQubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgcmVxdWVzdCBoYXMgYW4gZXJyb3InLCBhc3luYyAoKSA9PiB7XG4gICAgICBub2NrKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYnKVxuICAgICAgICAuZ2V0KCcvbm90aWNlcy5qc29uJylcbiAgICAgICAgLnJlcGx5V2l0aEVycm9yKCdETlMgcmVzb2x1dGlvbiBmYWlsZWQnKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHVybnMgZW1wdHkgYXJyYXkgd2hlbiB0aGUgY29ubmVjdGlvbiBzdGF5cyBpZGxlIGZvciAgdG9vIGxvbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBub2NrKCdodHRwczovL2NsaS5jZGsuZGV2LXRvb2xzLmF3cy5kZXYnKVxuICAgICAgICAuZ2V0KCcvbm90aWNlcy5qc29uJylcbiAgICAgICAgLmRlbGF5Q29ubmVjdGlvbigzNTAwKVxuICAgICAgICAucmVwbHkoMjAwLCB7XG4gICAgICAgICAgbm90aWNlczogW0JBU0lDX05PVElDRV0sXG4gICAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhU291cmNlLmZldGNoKCk7XG5cbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoW10pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncmV0dXJucyBlbXB0eSBhcnJheSB3aGVuIHRoZSByZXF1ZXN0IHRha2VzIHRvbyBsb25nIHRvIGZpbmlzaCcsIGFzeW5jICgpID0+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAuZGVsYXlCb2R5KDM1MDApXG4gICAgICAgIC5yZXBseSgyMDAsIHtcbiAgICAgICAgICBub3RpY2VzOiBbQkFTSUNfTk9USUNFXSxcbiAgICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtb2NrQ2FsbChzdGF0dXNDb2RlOiBudW1iZXIsIGJvZHk6IGFueSk6IFByb21pc2U8Tm90aWNlW10+IHtcbiAgICAgIG5vY2soJ2h0dHBzOi8vY2xpLmNkay5kZXYtdG9vbHMuYXdzLmRldicpXG4gICAgICAgIC5nZXQoJy9ub3RpY2VzLmpzb24nKVxuICAgICAgICAucmVwbHkoc3RhdHVzQ29kZSwgYm9keSk7XG5cbiAgICAgIHJldHVybiBkYXRhU291cmNlLmZldGNoKCk7XG4gICAgfVxuICB9KTtcblxuICBkZXNjcmliZShDYWNoZWREYXRhU291cmNlLCAoKSA9PiB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksICdjYWNoZS5qc29uJyk7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IFtCQVNJQ19OT1RJQ0VdO1xuICAgIGNvbnN0IGZyZXNoRGF0YSA9IFtNVUxUSVBMRV9BRkZFQ1RFRF9WRVJTSU9OU19OT1RJQ0VdO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVOYW1lLCAnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdyZXRyaWV2ZXMgZGF0YSBmcm9tIHRoZSBkZWxlZ2F0ZSBjYWNoZSB3aGVuIHRoZSBmaWxlIGlzIGVtcHR5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGZpbGUgd2hlbiB0aGUgZGF0YSBpcyBzdGlsbCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogRGF0ZS5ub3coKSArIDEwMDAwLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhmcmVzaERhdGEpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChjYWNoZWREYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGRhdGEgaXMgZXhwaXJlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGZzLndyaXRlSnNvblN5bmMoZmlsZU5hbWUsIHtcbiAgICAgICAgbm90aWNlczogY2FjaGVkRGF0YSxcbiAgICAgICAgZXhwaXJhdGlvbjogMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2VXaXRoRGVsZWdhdGVSZXR1cm5pbmcoZnJlc2hEYXRhKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlcyBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHJlYWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBkZWJ1Z1NweSA9IGplc3Quc3B5T24obG9nZ2luZywgJ2RlYnVnJyk7XG5cbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgJ2RvZXMtbm90LWV4aXN0Lmpzb24nKTtcblxuICAgICAgY29uc3Qgbm90aWNlcyA9IGF3YWl0IGRhdGFTb3VyY2UuZmV0Y2goKTtcblxuICAgICAgZXhwZWN0KG5vdGljZXMpLnRvRXF1YWwoZnJlc2hEYXRhKTtcbiAgICAgIGV4cGVjdChkZWJ1Z1NweSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgZGVidWdTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3JldHJpZXZlZCBkYXRhIGZyb20gdGhlIGRlbGVnYXRlIHdoZW4gaXQgaXMgY29uZmlndXJlZCB0byBpZ25vcmUgdGhlIGNhY2hlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZnMud3JpdGVKc29uU3luYyhmaWxlTmFtZSwge1xuICAgICAgICBub3RpY2VzOiBjYWNoZWREYXRhLFxuICAgICAgICBleHBpcmF0aW9uOiBEYXRlLm5vdygpICsgMTAwMDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhU291cmNlV2l0aERlbGVnYXRlUmV0dXJuaW5nKGZyZXNoRGF0YSwgZmlsZU5hbWUsIHRydWUpO1xuXG4gICAgICBjb25zdCBub3RpY2VzID0gYXdhaXQgZGF0YVNvdXJjZS5mZXRjaCgpO1xuXG4gICAgICBleHBlY3Qobm90aWNlcykudG9FcXVhbChmcmVzaERhdGEpO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gZGF0YVNvdXJjZVdpdGhEZWxlZ2F0ZVJldHVybmluZyhub3RpY2VzOiBOb3RpY2VbXSwgZmlsZTogc3RyaW5nID0gZmlsZU5hbWUsIGlnbm9yZUNhY2hlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGRlbGVnYXRlID0ge1xuICAgICAgICBmZXRjaDogamVzdC5mbigpLFxuICAgICAgfTtcblxuICAgICAgZGVsZWdhdGUuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUobm90aWNlcyk7XG4gICAgICByZXR1cm4gbmV3IENhY2hlZERhdGFTb3VyY2UoZmlsZSwgZGVsZWdhdGUsIGlnbm9yZUNhY2hlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGRlc2NyaWJlKGdlbmVyYXRlTWVzc2FnZSwgKCkgPT4ge1xuICAgIHRlc3QoJ2RvZXMgbm90IHNob3cgYW55dGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gbm90aWNlcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBjcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICBkYXRhU291cmNlLmZldGNoLm1vY2tSZXNvbHZlZFZhbHVlKFtdKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVNZXNzYWdlKGRhdGFTb3VyY2UsIHtcbiAgICAgICAgYWNrbm93bGVkZ2VkSXNzdWVOdW1iZXJzOiBbXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzaG93cyBub3RpY2VzIHRoYXQgcGFzcyB0aGUgZmlsdGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGNyZWF0ZURhdGFTb3VyY2UoKTtcbiAgICAgIGRhdGFTb3VyY2UuZmV0Y2gubW9ja1Jlc29sdmVkVmFsdWUoW0JBU0lDX05PVElDRSwgTVVMVElQTEVfQUZGRUNURURfVkVSU0lPTlNfTk9USUNFXSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlTWVzc2FnZShkYXRhU291cmNlLCB7XG4gICAgICAgIGFja25vd2xlZGdlZElzc3VlTnVtYmVyczogWzE3MDYxXSxcbiAgICAgICAgb3V0ZGlyOiAnL3RtcCcsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChgXG5OT1RJQ0VTXG5cbjE2NjAzXHRUb2dnbGluZyBvZmYgYXV0b19kZWxldGVfb2JqZWN0cyBmb3IgQnVja2V0IGVtcHRpZXMgdGhlIGJ1Y2tldFxuXG5cdE92ZXJ2aWV3OiBJZiBhIHN0YWNrIGlzIGRlcGxveWVkIHdpdGggYW4gUzMgYnVja2V0IHdpdGhcblx0ICAgICAgICAgIGF1dG9fZGVsZXRlX29iamVjdHM9VHJ1ZSwgYW5kIHRoZW4gcmUtZGVwbG95ZWQgd2l0aFxuXHQgICAgICAgICAgYXV0b19kZWxldGVfb2JqZWN0cz1GYWxzZSwgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXRcblx0ICAgICAgICAgIHdpbGwgYmUgZGVsZXRlZC5cblxuXHRBZmZlY3RlZCB2ZXJzaW9uczogY2xpOiA8PTEuMTI2LjBcblxuXHRNb3JlIGluZm9ybWF0aW9uIGF0OiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2NjAzXG5cblxuSWYgeW91IGRvbuKAmXQgd2FudCB0byBzZWUgYSBub3RpY2UgYW55bW9yZSwgdXNlIFwiY2RrIGFja25vd2xlZGdlIDxpZD5cIi4gRm9yIGV4YW1wbGUsIFwiY2RrIGFja25vd2xlZGdlIDE2NjAzXCIuYCk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRhU291cmNlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmV0Y2g6IGplc3QuZm4oKSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn0pO1xuIl19
package/test/util.js CHANGED
@@ -61,7 +61,7 @@ function addAttributes(assembly, builder) {
61
61
  function addNestedStacks(templatePath, outdir, rootStackTemplate) {
62
62
  let template = rootStackTemplate;
63
63
  if (!template) {
64
- const templatePathWithDir = path.join('diff-nested-stacks-templates', templatePath);
64
+ const templatePathWithDir = path.join('nested-stack-templates', templatePath);
65
65
  template = JSON.parse(fs.readFileSync(path.join(__dirname, templatePathWithDir)).toString());
66
66
  fs.writeFileSync(path.join(outdir, templatePath), JSON.stringify(template, undefined, 2));
67
67
  }
@@ -178,4 +178,4 @@ exports.withMocked = withMocked;
178
178
  function isPromise(object) {
179
179
  return Promise.resolve(object) === object;
180
180
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLHdFQUFvRTtBQUNwRSw4Q0FBZ0Q7QUFDaEQsOENBQWtEO0FBRXJDLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFvQnpELE1BQWEsbUJBQW9CLFNBQVEsa0NBQWU7SUFJdEQsWUFBWSxRQUFzQjtRQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFlLEVBQUUsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixhQUFhO1lBQ2IsV0FBVztZQUNYLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFqQkQsa0RBaUJDO0FBRUQsU0FBUyxLQUFLLENBQUMsR0FBUTtJQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFzQixFQUFFLE9BQW1DOztJQUNoRixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDbkMsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQztRQUN4RCxNQUFNLFFBQVEsU0FBRyxLQUFLLENBQUMsUUFBUSxtQ0FBSSw2QkFBcUIsQ0FBQztRQUN6RCxF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LENBQUM7S0FDckI7QUFDSCxDQUFDO0FBZkQsNERBZUM7QUFFRCxTQUFnQixVQUFVLENBQXlDLEdBQU0sRUFBRSxHQUFNLEVBQUUsS0FBbUM7SUFDcEgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4QixHQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBRTNCLElBQUksWUFBWSxHQUFZLEtBQUssQ0FBQztJQUNsQyxJQUFJO1FBQ0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxPQUFPLEdBQUcsQ0FBQztTQUFFO1FBRXBDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQztLQUMzRDtZQUFTO1FBQ1IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3JCO0tBQ0Y7QUFDSCxDQUFDO0FBakJELGdDQWlCQztBQUVELFNBQVMsU0FBUyxDQUFJLE1BQVc7SUFDL0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vbGliL2FwaS9jeGFwcC9jbG91ZC1leGVjdXRhYmxlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9saWIvc2V0dGluZ3MnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyIH0gZnJvbSAnLi91dGlsL21vY2stc2RrJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFLRV9URU1QTEFURSA9IHsgTm86ICdSZXNvdXJjZXMnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFN0YWNrQXJ0aWZhY3Qge1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgdGVtcGxhdGU/OiBhbnk7XG4gIGVudj86IHN0cmluZyxcbiAgZGVwZW5kcz86IHN0cmluZ1tdO1xuICBtZXRhZGF0YT86IGN4YXBpLlN0YWNrTWV0YWRhdGE7XG4gIGFzc2V0cz86IGN4c2NoZW1hLkFzc2V0TWV0YWRhdGFFbnRyeVtdO1xuICBwcm9wZXJ0aWVzPzogUGFydGlhbDxjeHNjaGVtYS5Bd3NDbG91ZEZvcm1hdGlvblN0YWNrUHJvcGVydGllcz47XG4gIHRlcm1pbmF0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RBc3NlbWJseSB7XG4gIHN0YWNrczogVGVzdFN0YWNrQXJ0aWZhY3RbXTtcbiAgbWlzc2luZz86IGN4c2NoZW1hLk1pc3NpbmdDb250ZXh0W107XG4gIG5lc3RlZEFzc2VtYmxpZXM/OiBUZXN0QXNzZW1ibHlbXTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDbG91ZEV4ZWN1dGFibGUgZXh0ZW5kcyBDbG91ZEV4ZWN1dGFibGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoYXNzZW1ibHk6IFRlc3RBc3NlbWJseSkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgICAgc3ludGhlc2l6ZXI6ICgpID0+IFByb21pc2UucmVzb2x2ZSh0ZXN0QXNzZW1ibHkoYXNzZW1ibHkpKSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5zZGtQcm92aWRlciA9IHNka1Byb3ZpZGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lKG9iajogYW55KSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVzKGFzc2VtYmx5OiBUZXN0QXNzZW1ibHksIGJ1aWxkZXI6IGN4YXBpLkNsb3VkQXNzZW1ibHlCdWlsZGVyKSB7XG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgYXNzZW1ibHkuc3RhY2tzKSB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlID0gYCR7c3RhY2suc3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYDtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHN0YWNrLnRlbXBsYXRlID8/IERFRkFVTFRfRkFLRV9URU1QTEFURTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihidWlsZGVyLm91dGRpciwgdGVtcGxhdGVGaWxlKSwgSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUsIHVuZGVmaW5lZCwgMikpO1xuICAgIGFkZE5lc3RlZFN0YWNrcyh0ZW1wbGF0ZUZpbGUsIGJ1aWxkZXIub3V0ZGlyLCB0ZW1wbGF0ZSk7XG5cbiAgICAvLyB3ZSBjYWxsIHBhdGNoU3RhY2tUYWdzIGhlcmUgdG8gc2ltdWxhdGUgdGhlIHRhZ3MgZm9ybWF0dGVyXG4gICAgLy8gdGhhdCBpcyB1c2VkIHdoZW4gYnVpbGRpbmcgcmVhbCBtYW5pZmVzdCBmaWxlcy5cbiAgICBjb25zdCBtZXRhZGF0YTogeyBbcGF0aDogc3RyaW5nXTogY3hzY2hlbWEuTWV0YWRhdGFFbnRyeVtdIH0gPSBwYXRjaFN0YWNrVGFncyh7IC4uLnN0YWNrLm1ldGFkYXRhIH0pO1xuICAgIGZvciAoY29uc3QgYXNzZXQgb2Ygc3RhY2suYXNzZXRzIHx8IFtdKSB7XG4gICAgICBtZXRhZGF0YVthc3NldC5pZF0gPSBbXG4gICAgICAgIHsgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5BU1NFVCwgZGF0YTogYXNzZXQgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIGFzc2VtYmx5Lm1pc3NpbmcgfHwgW10pIHtcbiAgICAgIGJ1aWxkZXIuYWRkTWlzc2luZyhtaXNzaW5nKTtcbiAgICB9XG5cbiAgICBidWlsZGVyLmFkZEFydGlmYWN0KHN0YWNrLnN0YWNrTmFtZSwge1xuICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RUeXBlLkFXU19DTE9VREZPUk1BVElPTl9TVEFDSyxcbiAgICAgIGVudmlyb25tZW50OiBzdGFjay5lbnYgfHwgJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcblxuICAgICAgZGVwZW5kZW5jaWVzOiBzdGFjay5kZXBlbmRzLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLnN0YWNrLnByb3BlcnRpZXMsXG4gICAgICAgIHRlbXBsYXRlRmlsZSxcbiAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBzdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHN0YWNrLmRpc3BsYXlOYW1lLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZE5lc3RlZFN0YWNrcyh0ZW1wbGF0ZVBhdGg6IHN0cmluZywgb3V0ZGlyOiBzdHJpbmcsIHJvb3RTdGFja1RlbXBsYXRlPzogYW55KSB7XG4gIGxldCB0ZW1wbGF0ZSA9IHJvb3RTdGFja1RlbXBsYXRlO1xuXG4gIGlmICghdGVtcGxhdGUpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGhXaXRoRGlyID0gcGF0aC5qb2luKCdkaWZmLW5lc3RlZC1zdGFja3MtdGVtcGxhdGVzJywgdGVtcGxhdGVQYXRoKTtcbiAgICB0ZW1wbGF0ZSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsIHRlbXBsYXRlUGF0aFdpdGhEaXIpKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRkaXIsIHRlbXBsYXRlUGF0aCksIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlLCB1bmRlZmluZWQsIDIpKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbG9naWNhbElkIGluIHRlbXBsYXRlLlJlc291cmNlcykge1xuICAgIGlmICh0ZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXS5UeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKSB7XG4gICAgICBpZiAodGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGEgJiYgdGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ10pIHtcbiAgICAgICAgY29uc3QgbmVzdGVkVGVtcGxhdGVQYXRoID0gdGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ107XG4gICAgICAgIGFkZE5lc3RlZFN0YWNrcyhuZXN0ZWRUZW1wbGF0ZVBhdGgsIG91dGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0QXNzZW1ibHkoYXNzZW1ibHk6IFRlc3RBc3NlbWJseSk6IGN4YXBpLkNsb3VkQXNzZW1ibHkge1xuICBjb25zdCBidWlsZGVyID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHlCdWlsZGVyKCk7XG4gIGFkZEF0dHJpYnV0ZXMoYXNzZW1ibHksIGJ1aWxkZXIpO1xuXG4gIGlmIChhc3NlbWJseS5uZXN0ZWRBc3NlbWJsaWVzICE9IG51bGwgJiYgYXNzZW1ibHkubmVzdGVkQXNzZW1ibGllcy5sZW5ndGggPiAwKSB7XG4gICAgYXNzZW1ibHkubmVzdGVkQXNzZW1ibGllcz8uZm9yRWFjaCgobmVzdGVkQXNzZW1ibHk6IFRlc3RBc3NlbWJseSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXN0ZWRBc3NlbWJseUJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZU5lc3RlZEFzc2VtYmx5KGBuZXN0ZWQke2l9YCwgYG5lc3RlZCR7aX1gKTtcbiAgICAgIGFkZEF0dHJpYnV0ZXMobmVzdGVkQXNzZW1ibHksIG5lc3RlZEFzc2VtYmx5QnVpbGRlcik7XG4gICAgICBuZXN0ZWRBc3NlbWJseUJ1aWxkZXIuYnVpbGRBc3NlbWJseSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkZXIuYnVpbGRBc3NlbWJseSgpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBzdGFjayB0YWdzIGZyb20gaG93IHRoZXkgYXJlIGRlY2FscmVkIGluIHNvdXJjZSBjb2RlIChsb3dlciBjYXNlZClcbiAqIHRvIGhvdyB0aGV5IGFyZSBzdG9yZWQgb24gZGlzayAodXBwZXIgY2FzZWQpLiBJbiByZWFsIHN5bnRoZXNpcyB0aGlzIGlzIGRvbmVcbiAqIGJ5IGEgc3BlY2lhbCB0YWdzIGZvcm1hdHRlci5cbiAqXG4gKiBAc2VlIEBhd3MtY2RrL2NvcmUvbGliL3N0YWNrLnRzXG4gKi9cbmZ1bmN0aW9uIHBhdGNoU3RhY2tUYWdzKG1ldGFkYXRhOiB7IFtwYXRoOiBzdHJpbmddOiBjeHNjaGVtYS5NZXRhZGF0YUVudHJ5W10gfSk6IHsgW3BhdGg6IHN0cmluZ106IGN4c2NoZW1hLk1ldGFkYXRhRW50cnlbXSB9IHtcblxuICBjb25zdCBjbG9uZWQgPSBjbG9uZShtZXRhZGF0YSkgYXMgeyBbcGF0aDogc3RyaW5nXTogY3hzY2hlbWEuTWV0YWRhdGFFbnRyeVtdIH07XG5cbiAgZm9yIChjb25zdCBtZXRhZGF0YUVudHJpZXMgb2YgT2JqZWN0LnZhbHVlcyhjbG9uZWQpKSB7XG4gICAgZm9yIChjb25zdCBtZXRhZGF0YUVudHJ5IG9mIG1ldGFkYXRhRW50cmllcykge1xuICAgICAgaWYgKG1ldGFkYXRhRW50cnkudHlwZSA9PT0gY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTICYmIG1ldGFkYXRhRW50cnkuZGF0YSkge1xuXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQW55ID0gbWV0YWRhdGFFbnRyeSBhcyBhbnk7XG5cbiAgICAgICAgbWV0YWRhdGFBbnkuZGF0YSA9IG1ldGFkYXRhQW55LmRhdGEubWFwKCh0OiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4geyBLZXk6IHQua2V5LCBWYWx1ZTogdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsb25lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RTdGFjayhzdGFjazogVGVzdFN0YWNrQXJ0aWZhY3QpOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Qge1xuICBjb25zdCBhc3NlbWJseSA9IHRlc3RBc3NlbWJseSh7IHN0YWNrczogW3N0YWNrXSB9KTtcbiAgcmV0dXJuIGFzc2VtYmx5LmdldFN0YWNrQnlOYW1lKHN0YWNrLnN0YWNrTmFtZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbW9ja2VkIGluc3RhbmNlIG9mIGEgY2xhc3MsIGdpdmVuIGl0cyBjb25zdHJ1Y3RvclxuICpcbiAqIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgamVzdCBkb2Vzbid0IHByb3ZpZGUgdGhpcyBieSBkZWZhdWx0LFxuICogYnV0IHRoZXJlIHlvdSBnby5cbiAqXG4gKiBGSVhNRTogQ3VycmVudGx5IHZlcnkgbGltaXRlZC4gRG9lc24ndCBzdXBwb3J0IGluaGVyaXRhbmNlLCBnZXR0ZXJzIG9yXG4gKiBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHByb3BlcnRpZXMgKGFzIHRob3NlIGV4aXN0IG9uIGluc3RhbmNlcywgbm90XG4gKiBjbGFzc2VzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlTW9ja0Zyb208QT4oY3RyOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBBKTogamVzdC5Nb2NrZWQ8QT4ge1xuICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3RyLnByb3RvdHlwZSkpIHtcbiAgICByZXRbbWV0aG9kTmFtZV0gPSBqZXN0LmZuKCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSdW4gYW4gYXN5bmMgYmxvY2sgd2l0aCBhIGNsYXNzIChjb25zdHJ1Y3RvcikgcmVwbGFjZWQgd2l0aCBhIG1vY2tcbiAqXG4gKiBUaGUgY2xhc3MgY29uc3RydWN0b3Igd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgY29uc3RydWN0b3IgdGhhdCByZXR1cm5zXG4gKiBhIHNpbmdsZXRvbiwgYW5kIHRoZSBzaW5nbGV0b24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGJsb2NrIHNvIHRoYXQgaXRzXG4gKiBtZXRob2RzIGNhbiBiZSBtb2NrZWQgaW5kaXZpZHVhbGx5LlxuICpcbiAqIFVzZXMgYGluc3RhbmNlTW9ja0Zyb21gIHNvIGlzIHN1YmplY3QgdG8gdGhlIHNhbWUgbGltaXRhdGlvbnMgdGhhdCBob2xkXG4gKiBmb3IgdGhhdCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhNb2NrZWRDbGFzc1NpbmdsZXRvbjxBIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgQSwgQj4oXG4gIG9iajogQSxcbiAga2V5OiBLLFxuICBjYjogKG1vY2s6IEFbS10gZXh0ZW5kcyBqZXN0LkNvbnN0cnVjdGFibGUgPyBqZXN0Lk1vY2tlZDxJbnN0YW5jZVR5cGU8QVtLXT4+IDogbmV2ZXIpID0+IFByb21pc2U8Qj4sXG4pOiBQcm9taXNlPEI+IHtcblxuICBjb25zdCBvcmlnaW5hbCA9IG9ialtrZXldO1xuICB0cnkge1xuICAgIGNvbnN0IG1vY2sgPSBpbnN0YW5jZU1vY2tGcm9tKG9yaWdpbmFsIGFzIGFueSk7XG4gICAgb2JqW2tleV0gPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2spIGFzIGFueTtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjYihtb2NrIGFzIGFueSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSBmaW5hbGx5IHtcbiAgICBvYmpba2V5XSA9IG9yaWdpbmFsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTW9ja2VkPEEgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBBLCBCPihvYmo6IEEsIGtleTogSywgYmxvY2s6IChmbjogamVzdC5Nb2NrZWQ8QT5bS10pID0+IEIpOiBCIHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBvYmpba2V5XTtcbiAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpO1xuICAob2JqIGFzIGFueSlba2V5XSA9IG1vY2tGbjtcblxuICBsZXQgYXN5bmNGaW5hbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcmV0ID0gYmxvY2sobW9ja0ZuIGFzIGFueSk7XG4gICAgaWYgKCFpc1Byb21pc2UocmV0KSkgeyByZXR1cm4gcmV0OyB9XG5cbiAgICBhc3luY0ZpbmFsbHkgPSB0cnVlO1xuICAgIHJldHVybiByZXQuZmluYWxseSgoKSA9PiB7IG9ialtrZXldID0gb3JpZ2luYWw7IH0pIGFzIGFueTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoIWFzeW5jRmluYWxseSkge1xuICAgICAgb2JqW2tleV0gPSBvcmlnaW5hbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlPEE+KG9iamVjdDogYW55KTogb2JqZWN0IGlzIFByb21pc2U8QT4ge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9iamVjdCkgPT09IG9iamVjdDtcbn1cbiJdfQ==
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwyREFBMkQ7QUFDM0QseUNBQXlDO0FBQ3pDLHdFQUFvRTtBQUNwRSw4Q0FBZ0Q7QUFDaEQsOENBQWtEO0FBRXJDLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFvQnpELE1BQWEsbUJBQW9CLFNBQVEsa0NBQWU7SUFJdEQsWUFBWSxRQUFzQjtRQUNoQyxNQUFNLGFBQWEsR0FBRyxJQUFJLHdCQUFhLEVBQUUsQ0FBQztRQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFlLEVBQUUsQ0FBQztRQUUxQyxLQUFLLENBQUM7WUFDSixhQUFhO1lBQ2IsV0FBVztZQUNYLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0NBQ0Y7QUFqQkQsa0RBaUJDO0FBRUQsU0FBUyxLQUFLLENBQUMsR0FBUTtJQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxRQUFzQixFQUFFLE9BQW1DOztJQUNoRixLQUFLLE1BQU0sS0FBSyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7UUFDbkMsTUFBTSxZQUFZLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxnQkFBZ0IsQ0FBQztRQUN4RCxNQUFNLFFBQVEsU0FBRyxLQUFLLENBQUMsUUFBUSxtQ0FBSSw2QkFBcUIsQ0FBQztRQUN6RCxF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LENBQUM7S0FDckI7QUFDSCxDQUFDO0FBZkQsNERBZUM7QUFFRCxTQUFnQixVQUFVLENBQXlDLEdBQU0sRUFBRSxHQUFNLEVBQUUsS0FBbUM7SUFDcEgsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUN4QixHQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBRTNCLElBQUksWUFBWSxHQUFZLEtBQUssQ0FBQztJQUNsQyxJQUFJO1FBQ0YsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFBRSxPQUFPLEdBQUcsQ0FBQztTQUFFO1FBRXBDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQVEsQ0FBQztLQUMzRDtZQUFTO1FBQ1IsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO1NBQ3JCO0tBQ0Y7QUFDSCxDQUFDO0FBakJELGdDQWlCQztBQUVELFNBQVMsU0FBUyxDQUFJLE1BQVc7SUFDL0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQ2xvdWRFeGVjdXRhYmxlIH0gZnJvbSAnLi4vbGliL2FwaS9jeGFwcC9jbG91ZC1leGVjdXRhYmxlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9saWIvc2V0dGluZ3MnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyIH0gZnJvbSAnLi91dGlsL21vY2stc2RrJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkFLRV9URU1QTEFURSA9IHsgTm86ICdSZXNvdXJjZXMnIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVzdFN0YWNrQXJ0aWZhY3Qge1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgdGVtcGxhdGU/OiBhbnk7XG4gIGVudj86IHN0cmluZyxcbiAgZGVwZW5kcz86IHN0cmluZ1tdO1xuICBtZXRhZGF0YT86IGN4YXBpLlN0YWNrTWV0YWRhdGE7XG4gIGFzc2V0cz86IGN4c2NoZW1hLkFzc2V0TWV0YWRhdGFFbnRyeVtdO1xuICBwcm9wZXJ0aWVzPzogUGFydGlhbDxjeHNjaGVtYS5Bd3NDbG91ZEZvcm1hdGlvblN0YWNrUHJvcGVydGllcz47XG4gIHRlcm1pbmF0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlc3RBc3NlbWJseSB7XG4gIHN0YWNrczogVGVzdFN0YWNrQXJ0aWZhY3RbXTtcbiAgbWlzc2luZz86IGN4c2NoZW1hLk1pc3NpbmdDb250ZXh0W107XG4gIG5lc3RlZEFzc2VtYmxpZXM/OiBUZXN0QXNzZW1ibHlbXTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDbG91ZEV4ZWN1dGFibGUgZXh0ZW5kcyBDbG91ZEV4ZWN1dGFibGUge1xuICBwdWJsaWMgcmVhZG9ubHkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbjtcbiAgcHVibGljIHJlYWRvbmx5IHNka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoYXNzZW1ibHk6IFRlc3RBc3NlbWJseSkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbigpO1xuICAgIGNvbnN0IHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcigpO1xuXG4gICAgc3VwZXIoe1xuICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyLFxuICAgICAgc3ludGhlc2l6ZXI6ICgpID0+IFByb21pc2UucmVzb2x2ZSh0ZXN0QXNzZW1ibHkoYXNzZW1ibHkpKSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5zZGtQcm92aWRlciA9IHNka1Byb3ZpZGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lKG9iajogYW55KSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRyaWJ1dGVzKGFzc2VtYmx5OiBUZXN0QXNzZW1ibHksIGJ1aWxkZXI6IGN4YXBpLkNsb3VkQXNzZW1ibHlCdWlsZGVyKSB7XG4gIGZvciAoY29uc3Qgc3RhY2sgb2YgYXNzZW1ibHkuc3RhY2tzKSB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlID0gYCR7c3RhY2suc3RhY2tOYW1lfS50ZW1wbGF0ZS5qc29uYDtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHN0YWNrLnRlbXBsYXRlID8/IERFRkFVTFRfRkFLRV9URU1QTEFURTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihidWlsZGVyLm91dGRpciwgdGVtcGxhdGVGaWxlKSwgSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUsIHVuZGVmaW5lZCwgMikpO1xuICAgIGFkZE5lc3RlZFN0YWNrcyh0ZW1wbGF0ZUZpbGUsIGJ1aWxkZXIub3V0ZGlyLCB0ZW1wbGF0ZSk7XG5cbiAgICAvLyB3ZSBjYWxsIHBhdGNoU3RhY2tUYWdzIGhlcmUgdG8gc2ltdWxhdGUgdGhlIHRhZ3MgZm9ybWF0dGVyXG4gICAgLy8gdGhhdCBpcyB1c2VkIHdoZW4gYnVpbGRpbmcgcmVhbCBtYW5pZmVzdCBmaWxlcy5cbiAgICBjb25zdCBtZXRhZGF0YTogeyBbcGF0aDogc3RyaW5nXTogY3hzY2hlbWEuTWV0YWRhdGFFbnRyeVtdIH0gPSBwYXRjaFN0YWNrVGFncyh7IC4uLnN0YWNrLm1ldGFkYXRhIH0pO1xuICAgIGZvciAoY29uc3QgYXNzZXQgb2Ygc3RhY2suYXNzZXRzIHx8IFtdKSB7XG4gICAgICBtZXRhZGF0YVthc3NldC5pZF0gPSBbXG4gICAgICAgIHsgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5BU1NFVCwgZGF0YTogYXNzZXQgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIGFzc2VtYmx5Lm1pc3NpbmcgfHwgW10pIHtcbiAgICAgIGJ1aWxkZXIuYWRkTWlzc2luZyhtaXNzaW5nKTtcbiAgICB9XG5cbiAgICBidWlsZGVyLmFkZEFydGlmYWN0KHN0YWNrLnN0YWNrTmFtZSwge1xuICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RUeXBlLkFXU19DTE9VREZPUk1BVElPTl9TVEFDSyxcbiAgICAgIGVudmlyb25tZW50OiBzdGFjay5lbnYgfHwgJ2F3czovLzEyMzQ1Njc4OTAxMi9oZXJlJyxcblxuICAgICAgZGVwZW5kZW5jaWVzOiBzdGFjay5kZXBlbmRzLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLnN0YWNrLnByb3BlcnRpZXMsXG4gICAgICAgIHRlbXBsYXRlRmlsZSxcbiAgICAgICAgdGVybWluYXRpb25Qcm90ZWN0aW9uOiBzdGFjay50ZXJtaW5hdGlvblByb3RlY3Rpb24sXG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHN0YWNrLmRpc3BsYXlOYW1lLFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZE5lc3RlZFN0YWNrcyh0ZW1wbGF0ZVBhdGg6IHN0cmluZywgb3V0ZGlyOiBzdHJpbmcsIHJvb3RTdGFja1RlbXBsYXRlPzogYW55KSB7XG4gIGxldCB0ZW1wbGF0ZSA9IHJvb3RTdGFja1RlbXBsYXRlO1xuXG4gIGlmICghdGVtcGxhdGUpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGhXaXRoRGlyID0gcGF0aC5qb2luKCduZXN0ZWQtc3RhY2stdGVtcGxhdGVzJywgdGVtcGxhdGVQYXRoKTtcbiAgICB0ZW1wbGF0ZSA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihfX2Rpcm5hbWUsIHRlbXBsYXRlUGF0aFdpdGhEaXIpKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihvdXRkaXIsIHRlbXBsYXRlUGF0aCksIEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlLCB1bmRlZmluZWQsIDIpKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgbG9naWNhbElkIGluIHRlbXBsYXRlLlJlc291cmNlcykge1xuICAgIGlmICh0ZW1wbGF0ZS5SZXNvdXJjZXNbbG9naWNhbElkXS5UeXBlID09PSAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U3RhY2snKSB7XG4gICAgICBpZiAodGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGEgJiYgdGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ10pIHtcbiAgICAgICAgY29uc3QgbmVzdGVkVGVtcGxhdGVQYXRoID0gdGVtcGxhdGUuUmVzb3VyY2VzW2xvZ2ljYWxJZF0uTWV0YWRhdGFbJ2F3czphc3NldDpwYXRoJ107XG4gICAgICAgIGFkZE5lc3RlZFN0YWNrcyhuZXN0ZWRUZW1wbGF0ZVBhdGgsIG91dGRpcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0QXNzZW1ibHkoYXNzZW1ibHk6IFRlc3RBc3NlbWJseSk6IGN4YXBpLkNsb3VkQXNzZW1ibHkge1xuICBjb25zdCBidWlsZGVyID0gbmV3IGN4YXBpLkNsb3VkQXNzZW1ibHlCdWlsZGVyKCk7XG4gIGFkZEF0dHJpYnV0ZXMoYXNzZW1ibHksIGJ1aWxkZXIpO1xuXG4gIGlmIChhc3NlbWJseS5uZXN0ZWRBc3NlbWJsaWVzICE9IG51bGwgJiYgYXNzZW1ibHkubmVzdGVkQXNzZW1ibGllcy5sZW5ndGggPiAwKSB7XG4gICAgYXNzZW1ibHkubmVzdGVkQXNzZW1ibGllcz8uZm9yRWFjaCgobmVzdGVkQXNzZW1ibHk6IFRlc3RBc3NlbWJseSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBuZXN0ZWRBc3NlbWJseUJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZU5lc3RlZEFzc2VtYmx5KGBuZXN0ZWQke2l9YCwgYG5lc3RlZCR7aX1gKTtcbiAgICAgIGFkZEF0dHJpYnV0ZXMobmVzdGVkQXNzZW1ibHksIG5lc3RlZEFzc2VtYmx5QnVpbGRlcik7XG4gICAgICBuZXN0ZWRBc3NlbWJseUJ1aWxkZXIuYnVpbGRBc3NlbWJseSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGJ1aWxkZXIuYnVpbGRBc3NlbWJseSgpO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBzdGFjayB0YWdzIGZyb20gaG93IHRoZXkgYXJlIGRlY2FscmVkIGluIHNvdXJjZSBjb2RlIChsb3dlciBjYXNlZClcbiAqIHRvIGhvdyB0aGV5IGFyZSBzdG9yZWQgb24gZGlzayAodXBwZXIgY2FzZWQpLiBJbiByZWFsIHN5bnRoZXNpcyB0aGlzIGlzIGRvbmVcbiAqIGJ5IGEgc3BlY2lhbCB0YWdzIGZvcm1hdHRlci5cbiAqXG4gKiBAc2VlIEBhd3MtY2RrL2NvcmUvbGliL3N0YWNrLnRzXG4gKi9cbmZ1bmN0aW9uIHBhdGNoU3RhY2tUYWdzKG1ldGFkYXRhOiB7IFtwYXRoOiBzdHJpbmddOiBjeHNjaGVtYS5NZXRhZGF0YUVudHJ5W10gfSk6IHsgW3BhdGg6IHN0cmluZ106IGN4c2NoZW1hLk1ldGFkYXRhRW50cnlbXSB9IHtcblxuICBjb25zdCBjbG9uZWQgPSBjbG9uZShtZXRhZGF0YSkgYXMgeyBbcGF0aDogc3RyaW5nXTogY3hzY2hlbWEuTWV0YWRhdGFFbnRyeVtdIH07XG5cbiAgZm9yIChjb25zdCBtZXRhZGF0YUVudHJpZXMgb2YgT2JqZWN0LnZhbHVlcyhjbG9uZWQpKSB7XG4gICAgZm9yIChjb25zdCBtZXRhZGF0YUVudHJ5IG9mIG1ldGFkYXRhRW50cmllcykge1xuICAgICAgaWYgKG1ldGFkYXRhRW50cnkudHlwZSA9PT0gY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTICYmIG1ldGFkYXRhRW50cnkuZGF0YSkge1xuXG4gICAgICAgIGNvbnN0IG1ldGFkYXRhQW55ID0gbWV0YWRhdGFFbnRyeSBhcyBhbnk7XG5cbiAgICAgICAgbWV0YWRhdGFBbnkuZGF0YSA9IG1ldGFkYXRhQW55LmRhdGEubWFwKCh0OiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4geyBLZXk6IHQua2V5LCBWYWx1ZTogdC52YWx1ZSB9O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNsb25lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RTdGFjayhzdGFjazogVGVzdFN0YWNrQXJ0aWZhY3QpOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Qge1xuICBjb25zdCBhc3NlbWJseSA9IHRlc3RBc3NlbWJseSh7IHN0YWNrczogW3N0YWNrXSB9KTtcbiAgcmV0dXJuIGFzc2VtYmx5LmdldFN0YWNrQnlOYW1lKHN0YWNrLnN0YWNrTmFtZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIGEgbW9ja2VkIGluc3RhbmNlIG9mIGEgY2xhc3MsIGdpdmVuIGl0cyBjb25zdHJ1Y3RvclxuICpcbiAqIEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgamVzdCBkb2Vzbid0IHByb3ZpZGUgdGhpcyBieSBkZWZhdWx0LFxuICogYnV0IHRoZXJlIHlvdSBnby5cbiAqXG4gKiBGSVhNRTogQ3VycmVudGx5IHZlcnkgbGltaXRlZC4gRG9lc24ndCBzdXBwb3J0IGluaGVyaXRhbmNlLCBnZXR0ZXJzIG9yXG4gKiBhdXRvbWF0aWMgZGV0ZWN0aW9uIG9mIHByb3BlcnRpZXMgKGFzIHRob3NlIGV4aXN0IG9uIGluc3RhbmNlcywgbm90XG4gKiBjbGFzc2VzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlTW9ja0Zyb208QT4oY3RyOiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBBKTogamVzdC5Nb2NrZWQ8QT4ge1xuICBjb25zdCByZXQ6IGFueSA9IHt9O1xuICBmb3IgKGNvbnN0IG1ldGhvZE5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3RyLnByb3RvdHlwZSkpIHtcbiAgICByZXRbbWV0aG9kTmFtZV0gPSBqZXN0LmZuKCk7XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBSdW4gYW4gYXN5bmMgYmxvY2sgd2l0aCBhIGNsYXNzIChjb25zdHJ1Y3RvcikgcmVwbGFjZWQgd2l0aCBhIG1vY2tcbiAqXG4gKiBUaGUgY2xhc3MgY29uc3RydWN0b3Igd2lsbCBiZSByZXBsYWNlZCB3aXRoIGEgY29uc3RydWN0b3IgdGhhdCByZXR1cm5zXG4gKiBhIHNpbmdsZXRvbiwgYW5kIHRoZSBzaW5nbGV0b24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGJsb2NrIHNvIHRoYXQgaXRzXG4gKiBtZXRob2RzIGNhbiBiZSBtb2NrZWQgaW5kaXZpZHVhbGx5LlxuICpcbiAqIFVzZXMgYGluc3RhbmNlTW9ja0Zyb21gIHNvIGlzIHN1YmplY3QgdG8gdGhlIHNhbWUgbGltaXRhdGlvbnMgdGhhdCBob2xkXG4gKiBmb3IgdGhhdCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhNb2NrZWRDbGFzc1NpbmdsZXRvbjxBIGV4dGVuZHMgb2JqZWN0LCBLIGV4dGVuZHMga2V5b2YgQSwgQj4oXG4gIG9iajogQSxcbiAga2V5OiBLLFxuICBjYjogKG1vY2s6IEFbS10gZXh0ZW5kcyBqZXN0LkNvbnN0cnVjdGFibGUgPyBqZXN0Lk1vY2tlZDxJbnN0YW5jZVR5cGU8QVtLXT4+IDogbmV2ZXIpID0+IFByb21pc2U8Qj4sXG4pOiBQcm9taXNlPEI+IHtcblxuICBjb25zdCBvcmlnaW5hbCA9IG9ialtrZXldO1xuICB0cnkge1xuICAgIGNvbnN0IG1vY2sgPSBpbnN0YW5jZU1vY2tGcm9tKG9yaWdpbmFsIGFzIGFueSk7XG4gICAgb2JqW2tleV0gPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG1vY2spIGFzIGFueTtcbiAgICBjb25zdCByZXQgPSBhd2FpdCBjYihtb2NrIGFzIGFueSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSBmaW5hbGx5IHtcbiAgICBvYmpba2V5XSA9IG9yaWdpbmFsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTW9ja2VkPEEgZXh0ZW5kcyBvYmplY3QsIEsgZXh0ZW5kcyBrZXlvZiBBLCBCPihvYmo6IEEsIGtleTogSywgYmxvY2s6IChmbjogamVzdC5Nb2NrZWQ8QT5bS10pID0+IEIpOiBCIHtcbiAgY29uc3Qgb3JpZ2luYWwgPSBvYmpba2V5XTtcbiAgY29uc3QgbW9ja0ZuID0gamVzdC5mbigpO1xuICAob2JqIGFzIGFueSlba2V5XSA9IG1vY2tGbjtcblxuICBsZXQgYXN5bmNGaW5hbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgcmV0ID0gYmxvY2sobW9ja0ZuIGFzIGFueSk7XG4gICAgaWYgKCFpc1Byb21pc2UocmV0KSkgeyByZXR1cm4gcmV0OyB9XG5cbiAgICBhc3luY0ZpbmFsbHkgPSB0cnVlO1xuICAgIHJldHVybiByZXQuZmluYWxseSgoKSA9PiB7IG9ialtrZXldID0gb3JpZ2luYWw7IH0pIGFzIGFueTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpZiAoIWFzeW5jRmluYWxseSkge1xuICAgICAgb2JqW2tleV0gPSBvcmlnaW5hbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlPEE+KG9iamVjdDogYW55KTogb2JqZWN0IGlzIFByb21pc2U8QT4ge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9iamVjdCkgPT09IG9iamVjdDtcbn1cbiJdfQ==