aws-cdk 2.14.0 → 2.17.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 (46) hide show
  1. package/README.md +2 -1
  2. package/THIRD_PARTY_LICENSES +24 -24
  3. package/build-info.json +2 -2
  4. package/does-not-exist.json +1 -0
  5. package/lib/api/cloudformation-deployments.d.ts +1 -6
  6. package/lib/api/cloudformation-deployments.js +6 -72
  7. package/lib/api/evaluate-cloudformation-template.d.ts +9 -2
  8. package/lib/api/evaluate-cloudformation-template.js +14 -2
  9. package/lib/api/hotswap-deployments.js +34 -7
  10. package/lib/api/logs/find-cloudwatch-logs.js +2 -2
  11. package/lib/api/logs/logs-monitor.js +6 -5
  12. package/lib/api/nested-stack-helpers.d.ts +28 -0
  13. package/lib/api/nested-stack-helpers.js +97 -0
  14. package/lib/bridge.js +99 -59
  15. package/lib/cdk-toolkit.js +2 -2
  16. package/lib/cli.js +11 -9
  17. package/lib/index.js +6265 -2520
  18. package/lib/notices.js +18 -11
  19. package/lib/serialize.js +2 -8
  20. package/lib/setup-sandbox.js +2 -1
  21. package/lib/util/asset-publishing.js +2 -1
  22. package/package.json +10 -10
  23. package/test/api/hotswap/hotswap-deployments.test.js +38 -2
  24. package/test/api/hotswap/hotswap-test-setup.d.ts +6 -4
  25. package/test/api/hotswap/hotswap-test-setup.js +46 -6
  26. package/test/api/hotswap/nested-stacks-hotswap.test.d.ts +1 -0
  27. package/test/api/hotswap/nested-stacks-hotswap.test.js +840 -0
  28. package/test/api/hotswap/state-machine-hotswap-deployments.test.js +2 -2
  29. package/test/api/logs/logs-monitor.test.js +33 -5
  30. package/test/cdk-toolkit.test.js +12 -6
  31. package/test/integ/cli/cli.integtest.js +15 -3
  32. package/test/integ/helpers/test-helpers.js +6 -2
  33. package/test/integ/run-against-release +11 -1
  34. package/test/nested-stack-templates/one-lambda-one-stack-stack-with-asset-parameters.nested.template.json +52 -0
  35. package/test/nested-stack-templates/one-lambda-one-stack-stack.nested.template.json +26 -0
  36. package/test/nested-stack-templates/one-lambda-stack-with-asset-parameters.nested.template.json +29 -0
  37. package/test/nested-stack-templates/one-lambda-stack.nested.template.json +17 -0
  38. package/test/nested-stack-templates/one-lambda-version-stack.nested.template.json +20 -0
  39. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-output-one-param-stack.nested.template.json +0 -0
  40. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-one-stack-stack.nested.template.json +0 -0
  41. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-stack.nested.template.json +0 -0
  42. package/test/{diff-nested-stacks-templates → nested-stack-templates}/one-resource-two-stacks-stack.nested.template.json +0 -0
  43. package/test/nested-stack-templates/one-unnamed-lambda-stack.nested.template.json +16 -0
  44. package/test/nested-stack-templates/one-unnamed-lambda-two-stacks-stack.nested.template.json +34 -0
  45. package/test/notices.test.js +26 -3
  46. package/test/util.js +2 -2
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HotswapMockSdkProvider = exports.stackSummaryOf = exports.setCurrentCfnStackTemplate = exports.pushStackResourceSummaries = exports.cdkStackArtifactOf = exports.setupHotswapTests = exports.STACK_ID = void 0;
3
+ exports.HotswapMockSdkProvider = exports.stackSummaryOf = exports.addTemplateToCloudFormationLookupMock = exports.setCurrentCfnStackTemplate = exports.pushNestedStackResourceSummaries = exports.pushStackResourceSummaries = exports.cdkStackArtifactOf = exports.setupHotswapNestedStackTests = exports.setupHotswapTests = exports.STACK_ID = void 0;
4
4
  const deployments = require("../../../lib/api/hotswap-deployments");
5
+ const cloudformation_1 = require("../../../lib/api/util/cloudformation");
5
6
  const util_1 = require("../../util");
6
7
  const mock_sdk_1 = require("../../util/mock-sdk");
7
8
  const fake_cloudformation_stack_1 = require("../fake-cloudformation-stack");
@@ -10,6 +11,8 @@ exports.STACK_ID = 'stackId';
10
11
  let hotswapMockSdkProvider;
11
12
  let currentCfnStack;
12
13
  const currentCfnStackResources = [];
14
+ let stackTemplates;
15
+ let currentNestedCfnStackResources;
13
16
  function setupHotswapTests() {
14
17
  jest.resetAllMocks();
15
18
  // clear the array
@@ -19,9 +22,28 @@ function setupHotswapTests() {
19
22
  stackName: STACK_NAME,
20
23
  stackId: exports.STACK_ID,
21
24
  });
25
+ cloudformation_1.CloudFormationStack.lookup = async (_, _stackName) => {
26
+ return currentCfnStack;
27
+ };
22
28
  return hotswapMockSdkProvider;
23
29
  }
24
30
  exports.setupHotswapTests = setupHotswapTests;
31
+ function setupHotswapNestedStackTests(rootStackName) {
32
+ jest.resetAllMocks();
33
+ currentNestedCfnStackResources = {};
34
+ hotswapMockSdkProvider = new HotswapMockSdkProvider(rootStackName);
35
+ currentCfnStack = new fake_cloudformation_stack_1.FakeCloudformationStack({
36
+ stackName: rootStackName,
37
+ stackId: exports.STACK_ID,
38
+ });
39
+ stackTemplates = {};
40
+ cloudformation_1.CloudFormationStack.lookup = async (_, stackName) => {
41
+ currentCfnStack.template = async () => stackTemplates[stackName];
42
+ return currentCfnStack;
43
+ };
44
+ return hotswapMockSdkProvider;
45
+ }
46
+ exports.setupHotswapNestedStackTests = setupHotswapNestedStackTests;
25
47
  function cdkStackArtifactOf(testStackArtifact = {}) {
26
48
  return util_1.testStack({
27
49
  stackName: STACK_NAME,
@@ -33,11 +55,23 @@ function pushStackResourceSummaries(...items) {
33
55
  currentCfnStackResources.push(...items);
34
56
  }
35
57
  exports.pushStackResourceSummaries = pushStackResourceSummaries;
58
+ function pushNestedStackResourceSummaries(stackName, ...items) {
59
+ if (!currentNestedCfnStackResources[stackName]) {
60
+ currentNestedCfnStackResources[stackName] = [];
61
+ }
62
+ currentNestedCfnStackResources[stackName].push(...items);
63
+ }
64
+ exports.pushNestedStackResourceSummaries = pushNestedStackResourceSummaries;
36
65
  function setCurrentCfnStackTemplate(template) {
37
66
  const templateDeepCopy = JSON.parse(JSON.stringify(template)); // deep copy the template, so our tests can mutate one template instead of creating two
38
67
  currentCfnStack.setTemplate(templateDeepCopy);
39
68
  }
40
69
  exports.setCurrentCfnStackTemplate = setCurrentCfnStackTemplate;
70
+ function addTemplateToCloudFormationLookupMock(stackArtifact) {
71
+ const templateDeepCopy = JSON.parse(JSON.stringify(stackArtifact.template)); // deep copy the template, so our tests can mutate one template instead of creating two
72
+ stackTemplates[stackArtifact.stackName] = templateDeepCopy;
73
+ }
74
+ exports.addTemplateToCloudFormationLookupMock = addTemplateToCloudFormationLookupMock;
41
75
  function stackSummaryOf(logicalId, resourceType, physicalResourceId) {
42
76
  return {
43
77
  LogicalResourceId: logicalId,
@@ -49,15 +83,21 @@ function stackSummaryOf(logicalId, resourceType, physicalResourceId) {
49
83
  }
50
84
  exports.stackSummaryOf = stackSummaryOf;
51
85
  class HotswapMockSdkProvider {
52
- constructor() {
86
+ constructor(rootStackName) {
53
87
  this.mockSdkProvider = new mock_sdk_1.MockSdkProvider({ realSdk: false });
54
88
  this.mockSdkProvider.stubCloudFormation({
55
89
  listStackResources: ({ StackName: stackName }) => {
56
- if (stackName !== STACK_NAME) {
57
- throw new Error(`Expected Stack name in listStackResources() call to be: '${STACK_NAME}', but received: ${stackName}'`);
90
+ if (rootStackName) {
91
+ const knownStackNames = Object.keys(currentNestedCfnStackResources);
92
+ if (stackName !== rootStackName && !knownStackNames.includes(stackName)) {
93
+ throw new Error(`Expected Stack name in listStackResources() call to be a member of ['${rootStackName}, ${knownStackNames}'], but received: '${stackName}'`);
94
+ }
95
+ }
96
+ else if (stackName !== STACK_NAME) {
97
+ throw new Error(`Expected Stack name in listStackResources() call to be: '${STACK_NAME}', but received: '${stackName}'`);
58
98
  }
59
99
  return {
60
- StackResourceSummaries: currentCfnStackResources,
100
+ StackResourceSummaries: rootStackName ? currentNestedCfnStackResources[stackName] : currentCfnStackResources,
61
101
  };
62
102
  },
63
103
  });
@@ -110,4 +150,4 @@ class HotswapMockSdkProvider {
110
150
  }
111
151
  }
112
152
  exports.HotswapMockSdkProvider = HotswapMockSdkProvider;
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9FQUFvRTtBQUVwRSxxQ0FBMEQ7QUFDMUQsa0RBQTJFO0FBQzNFLDRFQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDdEIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRWxDLElBQUksc0JBQThDLENBQUM7QUFDbkQsSUFBSSxlQUF3QyxDQUFDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQTBDLEVBQUUsQ0FBQztBQUUzRSxTQUFnQixpQkFBaUI7SUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLG1EQUF1QixDQUFDO1FBQzVDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxnQkFBUTtLQUNsQixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFYRCw4Q0FXQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLG9CQUFnRCxFQUFFO0lBQ25GLE9BQU8sZ0JBQVMsQ0FBQztRQUNmLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsS0FBNEM7SUFDeEYsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUZELGdFQUVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsUUFBa0I7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUFvQixDQUN6QixhQUFnRCxFQUNoRCxjQUF5QyxFQUFFO1FBRTNDLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RyxDQUFDO0NBQ0Y7QUFqRkQsd0RBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBjb2RlYnVpbGQgZnJvbSAnYXdzLXNkay9jbGllbnRzL2NvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLXNkay9jbGllbnRzL2xhbWJkYSc7XG5pbXBvcnQgKiBhcyBzdGVwZnVuY3Rpb25zIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaSc7XG5pbXBvcnQgKiBhcyBkZXBsb3ltZW50cyBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgdGVzdFN0YWNrLCBUZXN0U3RhY2tBcnRpZmFjdCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyLCBTeW5jSGFuZGxlclN1YnNldE9mIH0gZnJvbSAnLi4vLi4vdXRpbC9tb2NrLXNkayc7XG5pbXBvcnQgeyBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjayB9IGZyb20gJy4uL2Zha2UtY2xvdWRmb3JtYXRpb24tc3RhY2snO1xuXG5jb25zdCBTVEFDS19OQU1FID0gJ3dpdGhvdXRlcnJvcnMnO1xuZXhwb3J0IGNvbnN0IFNUQUNLX0lEID0gJ3N0YWNrSWQnO1xuXG5sZXQgaG90c3dhcE1vY2tTZGtQcm92aWRlcjogSG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbmxldCBjdXJyZW50Q2ZuU3RhY2s6IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrO1xuY29uc3QgY3VycmVudENmblN0YWNrUmVzb3VyY2VzOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEhvdHN3YXBUZXN0cygpIHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIC8vIGNsZWFyIHRoZSBhcnJheVxuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMuc3BsaWNlKDApO1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gbmV3IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgY3VycmVudENmblN0YWNrID0gbmV3IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrKHtcbiAgICBzdGFja05hbWU6IFNUQUNLX05BTUUsXG4gICAgc3RhY2tJZDogU1RBQ0tfSUQsXG4gIH0pO1xuXG4gIHJldHVybiBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2RrU3RhY2tBcnRpZmFjdE9mKHRlc3RTdGFja0FydGlmYWN0OiBQYXJ0aWFsPFRlc3RTdGFja0FydGlmYWN0PiA9IHt9KTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IHtcbiAgcmV0dXJuIHRlc3RTdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIC4uLnRlc3RTdGFja0FydGlmYWN0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKC4uLml0ZW1zOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdKSB7XG4gIGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcy5wdXNoKC4uLml0ZW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICBjb25zdCB0ZW1wbGF0ZURlZXBDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSkpOyAvLyBkZWVwIGNvcHkgdGhlIHRlbXBsYXRlLCBzbyBvdXIgdGVzdHMgY2FuIG11dGF0ZSBvbmUgdGVtcGxhdGUgaW5zdGVhZCBvZiBjcmVhdGluZyB0d29cbiAgY3VycmVudENmblN0YWNrLnNldFRlbXBsYXRlKHRlbXBsYXRlRGVlcENvcHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhY2tTdW1tYXJ5T2YobG9naWNhbElkOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nLCBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZyk6IENsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogbG9naWNhbElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgIFJlc291cmNlVHlwZTogcmVzb3VyY2VUeXBlLFxuICAgIFJlc291cmNlU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICBMYXN0VXBkYXRlZFRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgbW9ja1Nka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIgPSBuZXcgTW9ja1Nka1Byb3ZpZGVyKHsgcmVhbFNkazogZmFsc2UgfSk7XG5cbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgbGlzdFN0YWNrUmVzb3VyY2VzOiAoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSA9PiB7XG4gICAgICAgIGlmIChzdGFja05hbWUgIT09IFNUQUNLX05BTUUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFN0YWNrIG5hbWUgaW4gbGlzdFN0YWNrUmVzb3VyY2VzKCkgY2FsbCB0byBiZTogJyR7U1RBQ0tfTkFNRX0nLCBidXQgcmVjZWl2ZWQ6ICR7c3RhY2tOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrUmVzb3VyY2VTdW1tYXJpZXM6IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXBkYXRlU3RhdGVNYWNoaW5lTW9jayhcbiAgICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb246IChpbnB1dDogc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVJbnB1dCkgPT4gc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVPdXRwdXQsXG4gICkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJTdGVwRnVuY3Rpb25zKHtcbiAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZTogbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJMYW1iZGEoXG4gICAgc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkxhbWJkYT4sXG4gICAgc2VydmljZVN0dWJzPzogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU2VydmljZT4sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkxhbWJkYShzdHVicywge1xuICAgICAgYXBpOiB7XG4gICAgICAgIHdhaXRlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIG1ha2VSZXF1ZXN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgIGFkZExpc3RlbmVyczogKCkgPT4ge30sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLi4uc2VydmljZVN0dWJzLFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFtYmRhQXBpV2FpdGVycygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gKHRoaXMubW9ja1Nka1Byb3ZpZGVyLnNkay5sYW1iZGEoKSBhcyBhbnkpLmFwaS53YWl0ZXJzO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVByb2plY3RNb2NrKG1vY2tVcGRhdGVQcm9qZWN0OiAoaW5wdXQ6IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0SW5wdXQpID0+IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0T3V0cHV0KSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNvZGVCdWlsZCh7XG4gICAgICB1cGRhdGVQcm9qZWN0OiBtb2NrVXBkYXRlUHJvamVjdCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQXBwU3luYyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQXBwU3luYz4pIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyhzdHVicyk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW52b2tlTGFtYmRhTW9jayhtb2NrSW52b2tlTGFtYmRhOiAoaW5wdXQ6IGxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCkgPT4gbGFtYmRhLkludm9jYXRpb25SZXNwb25zZSkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgICAgaW52b2tlOiBtb2NrSW52b2tlTGFtYmRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJFY3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViRWNzKHN0dWJzLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBkZXBsb3ltZW50cy50cnlIb3Rzd2FwRGVwbG95bWVudCh0aGlzLm1vY2tTZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGN1cnJlbnRDZm5TdGFjaywgc3RhY2tBcnRpZmFjdCk7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLG9FQUFvRTtBQUNwRSx5RUFBcUY7QUFDckYscUNBQTBEO0FBQzFELGtEQUEyRTtBQUMzRSw0RUFBdUU7QUFFdkUsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO0FBQ3RCLFFBQUEsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUVsQyxJQUFJLHNCQUE4QyxDQUFDO0FBQ25ELElBQUksZUFBd0MsQ0FBQztBQUM3QyxNQUFNLHdCQUF3QixHQUE4QyxFQUFFLENBQUM7QUFDL0UsSUFBSSxjQUE0QyxDQUFDO0FBQ2pELElBQUksOEJBQWtHLENBQUM7QUFFdkcsU0FBZ0IsaUJBQWlCO0lBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNyQixrQkFBa0I7SUFDbEIsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztJQUN0RCxlQUFlLEdBQUcsSUFBSSxtREFBdUIsQ0FBQztRQUM1QyxTQUFTLEVBQUUsVUFBVTtRQUNyQixPQUFPLEVBQUUsZ0JBQVE7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsb0NBQW1CLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxDQUFxQixFQUFFLFVBQWtCLEVBQUUsRUFBRTtRQUMvRSxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDLENBQUM7SUFFRixPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFkRCw4Q0FjQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLGFBQXFCO0lBQ2hFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNyQiw4QkFBOEIsR0FBRyxFQUFFLENBQUM7SUFDcEMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNuRSxl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QUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFDakMsYUFBYSxFQUFFLGlCQUFpQjtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQXVDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxnQkFBZ0Y7UUFDekcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7WUFDOUIsTUFBTSxFQUFFLGdCQUFnQjtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sT0FBTyxDQUFDLEtBQW1DLEVBQUUsdUJBQStDLEVBQUU7UUFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLHFCQUFxQixDQUFDLElBQWtCO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLG9CQUFvQixDQUN6QixhQUFnRCxFQUNoRCxjQUF5QyxFQUFFO1FBRTNDLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RyxDQUFDO0NBQ0Y7QUF0RkQsd0RBc0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCAqIGFzIGNvZGVidWlsZCBmcm9tICdhd3Mtc2RrL2NsaWVudHMvY29kZWJ1aWxkJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvbGFtYmRhJztcbmltcG9ydCAqIGFzIHN0ZXBmdW5jdGlvbnMgZnJvbSAnYXdzLXNkay9jbGllbnRzL3N0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpJztcbmltcG9ydCAqIGFzIGRlcGxveW1lbnRzIGZyb20gJy4uLy4uLy4uL2xpYi9hcGkvaG90c3dhcC1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvblN0YWNrLCBUZW1wbGF0ZSB9IGZyb20gJy4uLy4uLy4uL2xpYi9hcGkvdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyB0ZXN0U3RhY2ssIFRlc3RTdGFja0FydGlmYWN0IH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgeyBNb2NrU2RrUHJvdmlkZXIsIFN5bmNIYW5kbGVyU3Vic2V0T2YgfSBmcm9tICcuLi8uLi91dGlsL21vY2stc2RrJztcbmltcG9ydCB7IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrIH0gZnJvbSAnLi4vZmFrZS1jbG91ZGZvcm1hdGlvbi1zdGFjayc7XG5cbmNvbnN0IFNUQUNLX05BTUUgPSAnd2l0aG91dGVycm9ycyc7XG5leHBvcnQgY29uc3QgU1RBQ0tfSUQgPSAnc3RhY2tJZCc7XG5cbmxldCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyOiBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xubGV0IGN1cnJlbnRDZm5TdGFjazogRmFrZUNsb3VkZm9ybWF0aW9uU3RhY2s7XG5jb25zdCBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXM6IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdID0gW107XG5sZXQgc3RhY2tUZW1wbGF0ZXM6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogYW55IH07XG5sZXQgY3VycmVudE5lc3RlZENmblN0YWNrUmVzb3VyY2VzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEhvdHN3YXBUZXN0cygpOiBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyIHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIC8vIGNsZWFyIHRoZSBhcnJheVxuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMuc3BsaWNlKDApO1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gbmV3IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgY3VycmVudENmblN0YWNrID0gbmV3IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrKHtcbiAgICBzdGFja05hbWU6IFNUQUNLX05BTUUsXG4gICAgc3RhY2tJZDogU1RBQ0tfSUQsXG4gIH0pO1xuICBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cCA9IGFzeW5jIChfOiBBV1MuQ2xvdWRGb3JtYXRpb24sIF9zdGFja05hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBjdXJyZW50Q2ZuU3RhY2s7XG4gIH07XG5cbiAgcmV0dXJuIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEhvdHN3YXBOZXN0ZWRTdGFja1Rlc3RzKHJvb3RTdGFja05hbWU6IHN0cmluZykge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcbiAgY3VycmVudE5lc3RlZENmblN0YWNrUmVzb3VyY2VzID0ge307XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIgPSBuZXcgSG90c3dhcE1vY2tTZGtQcm92aWRlcihyb290U3RhY2tOYW1lKTtcbiAgY3VycmVudENmblN0YWNrID0gbmV3IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrKHtcbiAgICBzdGFja05hbWU6IHJvb3RTdGFja05hbWUsXG4gICAgc3RhY2tJZDogU1RBQ0tfSUQsXG4gIH0pO1xuICBzdGFja1RlbXBsYXRlcyA9IHt9O1xuICBDbG91ZEZvcm1hdGlvblN0YWNrLmxvb2t1cCA9IGFzeW5jIChfOiBBV1MuQ2xvdWRGb3JtYXRpb24sIHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY3VycmVudENmblN0YWNrLnRlbXBsYXRlID0gYXN5bmMgKCkgPT4gc3RhY2tUZW1wbGF0ZXNbc3RhY2tOYW1lXTtcbiAgICByZXR1cm4gY3VycmVudENmblN0YWNrO1xuICB9O1xuXG4gIHJldHVybiBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2RrU3RhY2tBcnRpZmFjdE9mKHRlc3RTdGFja0FydGlmYWN0OiBQYXJ0aWFsPFRlc3RTdGFja0FydGlmYWN0PiA9IHt9KTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IHtcbiAgcmV0dXJuIHRlc3RTdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIC4uLnRlc3RTdGFja0FydGlmYWN0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKC4uLml0ZW1zOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSkge1xuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMucHVzaCguLi5pdGVtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoTmVzdGVkU3RhY2tSZXNvdXJjZVN1bW1hcmllcyhzdGFja05hbWU6IHN0cmluZywgLi4uaXRlbXM6IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdKSB7XG4gIGlmICghY3VycmVudE5lc3RlZENmblN0YWNrUmVzb3VyY2VzW3N0YWNrTmFtZV0pIHtcbiAgICBjdXJyZW50TmVzdGVkQ2ZuU3RhY2tSZXNvdXJjZXNbc3RhY2tOYW1lXSA9IFtdO1xuICB9XG4gIGN1cnJlbnROZXN0ZWRDZm5TdGFja1Jlc291cmNlc1tzdGFja05hbWVdLnB1c2goLi4uaXRlbXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUodGVtcGxhdGU6IFRlbXBsYXRlKSB7XG4gIGNvbnN0IHRlbXBsYXRlRGVlcENvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlKSk7IC8vIGRlZXAgY29weSB0aGUgdGVtcGxhdGUsIHNvIG91ciB0ZXN0cyBjYW4gbXV0YXRlIG9uZSB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIHR3b1xuICBjdXJyZW50Q2ZuU3RhY2suc2V0VGVtcGxhdGUodGVtcGxhdGVEZWVwQ29weSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUZW1wbGF0ZVRvQ2xvdWRGb3JtYXRpb25Mb29rdXBNb2NrKHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCkge1xuICBjb25zdCB0ZW1wbGF0ZURlZXBDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzdGFja0FydGlmYWN0LnRlbXBsYXRlKSk7IC8vIGRlZXAgY29weSB0aGUgdGVtcGxhdGUsIHNvIG91ciB0ZXN0cyBjYW4gbXV0YXRlIG9uZSB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIHR3b1xuICBzdGFja1RlbXBsYXRlc1tzdGFja0FydGlmYWN0LnN0YWNrTmFtZV0gPSB0ZW1wbGF0ZURlZXBDb3B5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhY2tTdW1tYXJ5T2YobG9naWNhbElkOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nLCBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZyk6IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeSB7XG4gIHJldHVybiB7XG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICBSZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZSxcbiAgICBSZXNvdXJjZVN0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgTGFzdFVwZGF0ZWRUaW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG1vY2tTZGtQcm92aWRlcjogTW9ja1Nka1Byb3ZpZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJvb3RTdGFja05hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlciA9IG5ldyBNb2NrU2RrUHJvdmlkZXIoeyByZWFsU2RrOiBmYWxzZSB9KTtcblxuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJDbG91ZEZvcm1hdGlvbih7XG4gICAgICBsaXN0U3RhY2tSZXNvdXJjZXM6ICh7IFN0YWNrTmFtZTogc3RhY2tOYW1lIH0pID0+IHtcbiAgICAgICAgaWYgKHJvb3RTdGFja05hbWUpIHtcbiAgICAgICAgICBjb25zdCBrbm93blN0YWNrTmFtZXMgPSBPYmplY3Qua2V5cyhjdXJyZW50TmVzdGVkQ2ZuU3RhY2tSZXNvdXJjZXMpO1xuICAgICAgICAgIGlmIChzdGFja05hbWUgIT09IHJvb3RTdGFja05hbWUgJiYgIWtub3duU3RhY2tOYW1lcy5pbmNsdWRlcyhzdGFja05hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFN0YWNrIG5hbWUgaW4gbGlzdFN0YWNrUmVzb3VyY2VzKCkgY2FsbCB0byBiZSBhIG1lbWJlciBvZiBbJyR7cm9vdFN0YWNrTmFtZX0sICR7a25vd25TdGFja05hbWVzfSddLCBidXQgcmVjZWl2ZWQ6ICcke3N0YWNrTmFtZX0nYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrTmFtZSAhPT0gU1RBQ0tfTkFNRSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgU3RhY2sgbmFtZSBpbiBsaXN0U3RhY2tSZXNvdXJjZXMoKSBjYWxsIHRvIGJlOiAnJHtTVEFDS19OQU1FfScsIGJ1dCByZWNlaXZlZDogJyR7c3RhY2tOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrUmVzb3VyY2VTdW1tYXJpZXM6IHJvb3RTdGFja05hbWUgPyBjdXJyZW50TmVzdGVkQ2ZuU3RhY2tSZXNvdXJjZXNbc3RhY2tOYW1lXSA6IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXBkYXRlU3RhdGVNYWNoaW5lTW9jayhcbiAgICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb246IChpbnB1dDogc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVJbnB1dCkgPT4gc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVPdXRwdXQsXG4gICkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJTdGVwRnVuY3Rpb25zKHtcbiAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZTogbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJMYW1iZGEoXG4gICAgc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkxhbWJkYT4sXG4gICAgc2VydmljZVN0dWJzPzogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU2VydmljZT4sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkxhbWJkYShzdHVicywge1xuICAgICAgYXBpOiB7XG4gICAgICAgIHdhaXRlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIG1ha2VSZXF1ZXN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgIGFkZExpc3RlbmVyczogKCkgPT4ge30sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLi4uc2VydmljZVN0dWJzLFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFtYmRhQXBpV2FpdGVycygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gKHRoaXMubW9ja1Nka1Byb3ZpZGVyLnNkay5sYW1iZGEoKSBhcyBhbnkpLmFwaS53YWl0ZXJzO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVByb2plY3RNb2NrKG1vY2tVcGRhdGVQcm9qZWN0OiAoaW5wdXQ6IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0SW5wdXQpID0+IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0T3V0cHV0KSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNvZGVCdWlsZCh7XG4gICAgICB1cGRhdGVQcm9qZWN0OiBtb2NrVXBkYXRlUHJvamVjdCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQXBwU3luYyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQXBwU3luYz4pIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyhzdHVicyk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW52b2tlTGFtYmRhTW9jayhtb2NrSW52b2tlTGFtYmRhOiAoaW5wdXQ6IGxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCkgPT4gbGFtYmRhLkludm9jYXRpb25SZXNwb25zZSkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgICAgaW52b2tlOiBtb2NrSW52b2tlTGFtYmRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJFY3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViRWNzKHN0dWJzLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBkZXBsb3ltZW50cy50cnlIb3Rzd2FwRGVwbG95bWVudCh0aGlzLm1vY2tTZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGN1cnJlbnRDZm5TdGFjaywgc3RhY2tBcnRpZmFjdCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};