aws-cdk 2.178.2 → 2.179.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 (53) hide show
  1. package/THIRD_PARTY_LICENSES +256 -234
  2. package/build-info.json +2 -2
  3. package/lib/api/cxapp/cloud-assembly.d.ts +18 -1
  4. package/lib/api/cxapp/cloud-assembly.js +38 -5
  5. package/lib/api/deployments/asset-publishing.d.ts +4 -27
  6. package/lib/api/deployments/asset-publishing.js +8 -34
  7. package/lib/api/deployments/cloudformation.d.ts +1 -0
  8. package/lib/api/deployments/cloudformation.js +9 -1
  9. package/lib/api/deployments/deployments.d.ts +0 -22
  10. package/lib/api/deployments/deployments.js +1 -29
  11. package/lib/api/garbage-collection/garbage-collector.js +3 -3
  12. package/lib/api/garbage-collection/progress-printer.js +8 -1
  13. package/lib/{import.d.ts → api/resource-import/importer.d.ts} +55 -12
  14. package/lib/api/resource-import/importer.js +332 -0
  15. package/lib/api/resource-import/index.d.ts +2 -0
  16. package/lib/api/resource-import/index.js +19 -0
  17. package/lib/{migrator.d.ts → api/resource-import/migrator.d.ts} +9 -6
  18. package/lib/api/resource-import/migrator.js +74 -0
  19. package/lib/cli/cdk-toolkit.d.ts +7 -0
  20. package/lib/cli/cdk-toolkit.js +20 -9
  21. package/lib/cli/cli.js +4 -3
  22. package/lib/cli/convert-to-user-input.js +1 -1
  23. package/lib/cli/messages.d.ts +30 -0
  24. package/lib/cli/messages.js +112 -0
  25. package/lib/cli/parse-command-line-arguments.js +1 -1
  26. package/lib/cli/user-configuration.js +2 -1
  27. package/lib/cli/user-input.js +1 -1
  28. package/lib/cli/util/yargs-helpers.js +2 -2
  29. package/lib/cli/version.d.ts +1 -1
  30. package/lib/cli/version.js +6 -3
  31. package/lib/commands/doctor.js +2 -2
  32. package/lib/index.js +126 -197
  33. package/lib/init-templates/.init-version.json +1 -1
  34. package/lib/init-templates/app/javascript/package.json +1 -1
  35. package/lib/init-templates/app/typescript/package.json +1 -1
  36. package/lib/init-templates/sample-app/javascript/package.json +1 -1
  37. package/lib/init-templates/sample-app/typescript/package.json +1 -1
  38. package/lib/init.d.ts +13 -1
  39. package/lib/init.js +37 -32
  40. package/lib/list-stacks.d.ts +1 -17
  41. package/lib/list-stacks.js +2 -37
  42. package/package.json +10 -10
  43. package/test/api/deployments/cloudformation-deployments.test.js +27 -3
  44. package/test/api/garbage-collection.test.js +23 -1
  45. package/test/api/resource-import/import.test.js +373 -0
  46. package/test/init.test.js +14 -1
  47. package/test/toolkit/cli-io-host.test.js +18 -10
  48. package/lib/import.js +0 -329
  49. package/lib/migrator.js +0 -67
  50. package/test/_helpers/prompts.d.ts +0 -11
  51. package/test/_helpers/prompts.js +0 -22
  52. package/test/import.test.js +0 -364
  53. /package/test/{import.test.d.ts → api/resource-import/import.test.d.ts} +0 -0
@@ -6,6 +6,7 @@ const api_1 = require("../../lib/api");
6
6
  const mock_sdk_1 = require("../util/mock-sdk");
7
7
  const client_s3_1 = require("@aws-sdk/client-s3");
8
8
  const stack_refresh_1 = require("../../lib/api/garbage-collection/stack-refresh");
9
+ const progress_printer_1 = require("../../lib/api/garbage-collection/progress-printer");
9
10
  const client_ecr_1 = require("@aws-sdk/client-ecr");
10
11
  let garbageCollector;
11
12
  let stderrMock;
@@ -827,6 +828,27 @@ describe('BackgroundStackRefresh', () => {
827
828
  await expect(waitPromise).rejects.toThrow('refreshStacks took too long; the background thread likely threw an error');
828
829
  });
829
830
  });
831
+ describe('ProgressPrinter', () => {
832
+ let progressPrinter;
833
+ let setInterval;
834
+ let clearInterval;
835
+ beforeEach(() => {
836
+ jest.useFakeTimers();
837
+ setInterval = jest.spyOn(global, 'setInterval');
838
+ clearInterval = jest.spyOn(global, 'clearInterval');
839
+ progressPrinter = new progress_printer_1.ProgressPrinter(0, 1000);
840
+ });
841
+ afterEach(() => {
842
+ jest.clearAllTimers();
843
+ setInterval.mockRestore();
844
+ clearInterval.mockRestore();
845
+ });
846
+ test('throws if start is called twice without stop', () => {
847
+ progressPrinter.start();
848
+ expect(setInterval).toHaveBeenCalledTimes(1);
849
+ expect(() => progressPrinter.start()).toThrow('ProgressPrinter is already running. Stop it first using the stop() method before starting it again.');
850
+ });
851
+ });
830
852
  function daysInThePast(days) {
831
853
  const d = new Date();
832
854
  d.setDate(d.getDate() - days);
@@ -837,4 +859,4 @@ function yearsInTheFuture(years) {
837
859
  d.setFullYear(d.getFullYear() + years);
838
860
  return d;
839
861
  }
840
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FyYmFnZS1jb2xsZWN0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYXJiYWdlLWNvbGxlY3Rpb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBQWlDOztBQUVqQywwRUFLd0M7QUFDeEMsdUNBQWlHO0FBQ2pHLCtDQUF1STtBQUN2SSxrREFNNEI7QUFDNUIsa0ZBSXdEO0FBQ3hELG9EQU02QjtBQUU3QixJQUFJLGdCQUFrQyxDQUFDO0FBRXZDLElBQUksVUFBNEIsQ0FBQztBQUNqQyxNQUFNLFNBQVMsR0FBRyxtQ0FBd0IsQ0FBQztBQUMzQyxNQUFNLFFBQVEsR0FBRyx1QkFBWSxDQUFDO0FBQzlCLE1BQU0sU0FBUyxHQUFHLHdCQUFhLENBQUM7QUFFaEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsa0NBQWtDO0FBRW5FLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGlCQUFXLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztJQUU1RyxrREFBa0Q7SUFDbEQsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7UUFDdkUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztJQUVILHFCQUFxQixFQUFFLENBQUM7SUFDeEIsb0JBQW9CLEVBQUUsQ0FBQztJQUN2QixxQkFBcUIsRUFBRSxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILFNB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LE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBRTlELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7UUFDbEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBRTlELE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsMEVBQTBFLENBQUMsQ0FBQztJQUN4SCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxhQUFhLENBQUMsSUFBWTtJQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYTtJQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuXG5pbXBvcnQge1xuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQsXG4gIExpc3RTdGFja3NDb21tYW5kLFxuICBTdGFjayxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IEVDUl9JU09MQVRFRF9UQUcsIEdhcmJhZ2VDb2xsZWN0b3IsIFMzX0lTT0xBVEVEX1RBRywgVG9vbGtpdEluZm8gfSBmcm9tICcuLi8uLi9saWIvYXBpJztcbmltcG9ydCB7IG1vY2tCb290c3RyYXBTdGFjaywgbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50LCBtb2NrRUNSQ2xpZW50LCBtb2NrUzNDbGllbnQsIE1vY2tTZGssIE1vY2tTZGtQcm92aWRlciB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtcbiAgQWN0aXZlQXNzZXRDYWNoZSxcbiAgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCxcbiAgQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzLFxufSBmcm9tICcuLi8uLi9saWIvYXBpL2dhcmJhZ2UtY29sbGVjdGlvbi9zdGFjay1yZWZyZXNoJztcbmltcG9ydCB7XG4gIEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLFxuICBCYXRjaEdldEltYWdlQ29tbWFuZCxcbiAgRGVzY3JpYmVJbWFnZXNDb21tYW5kLFxuICBMaXN0SW1hZ2VzQ29tbWFuZCxcbiAgUHV0SW1hZ2VDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcblxubGV0IGdhcmJhZ2VDb2xsZWN0b3I6IEdhcmJhZ2VDb2xsZWN0b3I7XG5cbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xuY29uc3QgY2ZuQ2xpZW50ID0gbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50O1xuY29uc3QgczNDbGllbnQgPSBtb2NrUzNDbGllbnQ7XG5jb25zdCBlY3JDbGllbnQgPSBtb2NrRUNSQ2xpZW50O1xuXG5jb25zdCBEQVkgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyBOdW1iZXIgb2YgbWlsbGlzZWNvbmRzIGluIGEgZGF5XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICAvLyBCeSBkZWZhdWx0LCB3ZSdsbCByZXR1cm4gYSBub24tZm91bmQgdG9vbGtpdCBpbmZvXG4gIGplc3Quc3B5T24oVG9vbGtpdEluZm8sICdsb29rdXAnKS5tb2NrUmVzb2x2ZWRWYWx1ZShUb29sa2l0SW5mby5ib290c3RyYXBTdGFja05vdEZvdW5kSW5mbygnR2FyYmFnZVN0YWNrJykpO1xuXG4gIC8vIFN1cHByZXNzIHN0ZGVyciB0byBub3Qgc3BhbSBvdXRwdXQgZHVyaW5nIHRlc3RzXG4gIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICBwcmVwYXJlRGVmYXVsdENmbk1vY2soKTtcbiAgcHJlcGFyZURlZmF1bHRTM01vY2soKTtcbiAgcHJlcGFyZURlZmF1bHRFY3JNb2NrKCk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgc3RkZXJyTW9jay5tb2NrUmVzZXQoKTtcbn0pO1xuXG5mdW5jdGlvbiBtb2NrVGhlVG9vbGtpdEluZm8oc3RhY2tQcm9wczogUGFydGlhbDxTdGFjaz4pIHtcbiAgamVzdC5zcHlPbihUb29sa2l0SW5mbywgJ2xvb2t1cCcpLm1vY2tSZXNvbHZlZFZhbHVlKFRvb2xraXRJbmZvLmZyb21TdGFjayhtb2NrQm9vdHN0cmFwU3RhY2soc3RhY2tQcm9wcykpKTtcbn1cblxuZnVuY3Rpb24gZ2MocHJvcHM6IHtcbiAgdHlwZTogJ3MzJyB8ICdlY3InIHwgJ2FsbCc7XG4gIHJvbGxiYWNrQnVmZmVyRGF5cz86IG51bWJlcjtcbiAgY3JlYXRlZEF0QnVmZmVyRGF5cz86IG51bWJlcjtcbiAgYWN0aW9uOiAnZnVsbCcgfCAncHJpbnQnIHwgJ3RhZycgfCAnZGVsZXRlLXRhZ2dlZCc7XG59KTogR2FyYmFnZUNvbGxlY3RvciB7XG4gIHJldHVybiBuZXcgR2FyYmFnZUNvbGxlY3Rvcih7XG4gICAgc2RrUHJvdmlkZXI6IG5ldyBNb2NrU2RrUHJvdmlkZXIoKSxcbiAgICBhY3Rpb246IHByb3BzLmFjdGlvbixcbiAgICByZXNvbHZlZEVudmlyb25tZW50OiB7XG4gICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICBuYW1lOiAnbW9jaycsXG4gICAgfSxcbiAgICBib290c3RyYXBTdGFja05hbWU6ICdHYXJiYWdlU3RhY2snLFxuICAgIHJvbGxiYWNrQnVmZmVyRGF5czogcHJvcHMucm9sbGJhY2tCdWZmZXJEYXlzID8/IDAsXG4gICAgY3JlYXRlZEJ1ZmZlckRheXM6IHByb3BzLmNyZWF0ZWRBdEJ1ZmZlckRheXMgPz8gMCxcbiAgICB0eXBlOiBwcm9wcy50eXBlLFxuICAgIGNvbmZpcm06IGZhbHNlLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ1MzIEdhcmJhZ2UgQ29sbGVjdGlvbicsICgpID0+IHtcbiAgdGVzdCgncm9sbGJhY2tCdWZmZXJEYXlzID0gMCAtLSBhc3NldHMgdG8gYmUgZGVsZXRlZCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAwLFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gbm8gdGFnZ2luZ1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDApO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDApO1xuXG4gICAgLy8gYXNzZXRzIGFyZSB0byBiZSBkZWxldGVkXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKERlbGV0ZU9iamVjdHNDb21tYW5kLCB7XG4gICAgICBCdWNrZXQ6ICdCVUNLRVRfTkFNRScsXG4gICAgICBEZWxldGU6IHtcbiAgICAgICAgT2JqZWN0czogW1xuICAgICAgICAgIHsgS2V5OiAnYXNzZXQxJyB9LFxuICAgICAgICAgIHsgS2V5OiAnYXNzZXQyJyB9LFxuICAgICAgICAgIHsgS2V5OiAnYXNzZXQzJyB9LFxuICAgICAgICBdLFxuICAgICAgICBRdWlldDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3JvbGxiYWNrQnVmZmVyRGF5cyA+IDAgLS0gYXNzZXRzIHRvIGJlIHRhZ2dlZCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gYXNzZXRzIHRhZ2dlZFxuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDMpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDIpO1xuXG4gICAgLy8gbm8gZGVsZXRpbmdcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKERlbGV0ZU9iamVjdHNDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlZEF0QnVmZmVyRGF5cyA+IDAnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ3MzJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGNyZWF0ZWRBdEJ1ZmZlckRheXM6IDUsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIHtcbiAgICAgIEJ1Y2tldDogJ0JVQ0tFVF9OQU1FJyxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAgLy8gYXNzZXQxIG5vdCBkZWxldGVkIGJlY2F1c2UgaXQgaXMgdG9vIHlvdW5nXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDInIH0sXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDMnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnYWN0aW9uID0gcHJpbnQgLS0gZG9lcyBub3QgdGFnIG9yIGRlbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAncHJpbnQnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RPYmplY3RzVjJDb21tYW5kLCAyKTtcblxuICAgIC8vIGdldCB0YWdzLCBidXQgZG9udCBwdXQgdGFnc1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDMpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDApO1xuXG4gICAgLy8gbm8gZGVsZXRpbmdcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKERlbGV0ZU9iamVjdHNDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnYWN0aW9uID0gdGFnIC0tIGRvZXMgbm90IGRlbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAndGFnJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyB0YWdzIG9iamVjdHNcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLCAzKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLCAyKTsgLy8gb25lIG9iamVjdCBhbHJlYWR5IGhhcyB0aGUgdGFnXG5cbiAgICAvLyBubyBkZWxldGluZ1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdhY3Rpb24gPSBkZWxldGUtdGFnZ2VkIC0tIGRvZXMgbm90IHRhZycsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAnZGVsZXRlLXRhZ2dlZCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gZ2V0IHRhZ3MsIGJ1dCBkb250IHB1dCB0YWdzXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMyk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZSBvYmplY3RzIHRoYXQgYXJlIG1vZGlmaWVkIGFmdGVyIGdjIHN0YXJ0JywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgczNDbGllbnQub24oTGlzdE9iamVjdHNWMkNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgIENvbnRlbnRzOiBbXG4gICAgICAgIHsgS2V5OiAnYXNzZXQxJywgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZSgwKSB9LFxuICAgICAgICB7IEtleTogJ2Fzc2V0MicsIExhc3RNb2RpZmllZDogbmV3IERhdGUoMCkgfSxcbiAgICAgICAgeyBLZXk6ICdhc3NldDMnLCBMYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0RnVsbFllYXIobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpICsgMSkpIH0sIC8vIGZ1dHVyZSBkYXRlIGlnbm9yZWQgZXZlcnl3aGVyZVxuICAgICAgXSxcbiAgICAgIEtleUNvdW50OiAzLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICAvLyBhc3NldHMgYXJlIHRvIGJlIGRlbGV0ZWRcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIHtcbiAgICAgIEJ1Y2tldDogJ0JVQ0tFVF9OQU1FJyxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDEnIH0sXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDInIH0sXG4gICAgICAgICAgLy8gbm8gYXNzZXQzXG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0VDUiBHYXJiYWdlIENvbGxlY3Rpb24nLCAoKSA9PiB7XG4gIHRlc3QoJ3JvbGxiYWNrQnVmZmVyRGF5cyA9IDAgLS0gYXNzZXRzIHRvIGJlIGRlbGV0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhEZXNjcmliZUltYWdlc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RJbWFnZXNDb21tYW5kLCAyKTtcblxuICAgIC8vIG5vIHRhZ2dpbmdcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRJbWFnZUNvbW1hbmQsIDApO1xuXG4gICAgLy8gYXNzZXRzIGFyZSB0byBiZSBkZWxldGVkXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdSRVBPX05BTUUnLFxuICAgICAgaW1hZ2VJZHM6IFtcbiAgICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnIH0sXG4gICAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgncm9sbGJhY2tCdWZmZXJEYXlzID4gMCAtLSBhc3NldHMgdG8gYmUgdGFnZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdlY3InLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgLy8gYXNzZXRzIHRhZ2dlZFxuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dEltYWdlQ29tbWFuZCwgMik7XG5cbiAgICAvLyBubyBkZWxldGluZ1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnY3JlYXRlZEF0QnVmZmVyRGF5cyA+IDAnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBjcmVhdGVkQXRCdWZmZXJEYXlzOiA1LFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdSRVBPX05BTUUnLFxuICAgICAgaW1hZ2VJZHM6IFtcbiAgICAgICAgLy8gZGlnZXN0MyBpcyB0b28geW91bmcgdG8gYmUgZGVsZXRlZFxuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MicgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FjdGlvbiA9IHByaW50IC0tIGRvZXMgbm90IHRhZyBvciBkZWxldGUnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdwcmludCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuXG4gICAgLy8gZG9udCBwdXQgdGFnc1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dEltYWdlQ29tbWFuZCwgMCk7XG5cbiAgICAvLyBubyBkZWxldGluZ1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnYWN0aW9uID0gdGFnIC0tIGRvZXMgbm90IGRlbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMyxcbiAgICAgIGFjdGlvbjogJ3RhZycsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuXG4gICAgLy8gdGFncyBvYmplY3RzXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0SW1hZ2VDb21tYW5kLCAyKTtcblxuICAgIC8vIG5vIGRlbGV0aW5nXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdhY3Rpb24gPSBkZWxldGUtdGFnZ2VkIC0tIGRvZXMgbm90IHRhZycsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMyxcbiAgICAgIGFjdGlvbjogJ2RlbGV0ZS10YWdnZWQnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcblxuICAgIC8vIGRvbnQgcHV0IHRhZ3NcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRJbWFnZUNvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdpZ25vcmUgaW1hZ2VzIHRoYXQgYXJlIG1vZGlmaWVkIGFmdGVyIGdjIHN0YXJ0JywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgcHJlcGFyZURlZmF1bHRFY3JNb2NrKCk7XG4gICAgZWNyQ2xpZW50Lm9uKERlc2NyaWJlSW1hZ2VzQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgaW1hZ2VEZXRhaWxzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnLFxuICAgICAgICAgIGltYWdlVGFnczogWydrbG1ubyddLFxuICAgICAgICAgIGltYWdlUHVzaGVkQXQ6IGRheXNJblRoZVBhc3QoMiksXG4gICAgICAgICAgaW1hZ2VTaXplSW5CeXRlczogMTAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyxcbiAgICAgICAgICBpbWFnZVRhZ3M6IFsnZmdoaWonXSxcbiAgICAgICAgICBpbWFnZVB1c2hlZEF0OiB5ZWFyc0luVGhlRnV0dXJlKDEpLFxuICAgICAgICAgIGltYWdlU2l6ZUluQnl0ZXM6IDMwMF8wMDBfMDAwLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QxJyxcbiAgICAgICAgICBpbWFnZVRhZ3M6IFsnYWJjZGUnXSxcbiAgICAgICAgICBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDEwMCksXG4gICAgICAgICAgaW1hZ2VTaXplSW5CeXRlczogMV8wMDBfMDAwXzAwMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgcHJlcGFyZURlZmF1bHRDZm5Nb2NrKCk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICAvLyBhc3NldHMgYXJlIHRvIGJlIGRlbGV0ZWRcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBpbWFnZUlkczogW1xuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N1Y2NlZWRzIHdoZW4gbm8gaW1hZ2VzIGFyZSBwcmVzZW50JywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgcHJlcGFyZURlZmF1bHRFY3JNb2NrKCk7XG4gICAgZWNyQ2xpZW50Lm9uKExpc3RJbWFnZXNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBpbWFnZUlkczogW10sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcblxuICAgIC8vIHN1Y2NlZWRzIHdpdGhvdXQgaGFuZ2luZ1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcbiAgfSk7XG5cbiAgdGVzdCgndGFncyBhcmUgdW5pcXVlJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdlY3InLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAndGFnJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG5cbiAgICAvLyB0YWdzIG9iamVjdHNcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRJbWFnZUNvbW1hbmQsIDIpO1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoUHV0SW1hZ2VDb21tYW5kLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnLFxuICAgICAgaW1hZ2VNYW5pZmVzdDogZXhwZWN0LmFueShTdHJpbmcpLFxuICAgICAgaW1hZ2VUYWc6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKGAwLSR7RUNSX0lTT0xBVEVEX1RBR31gKSxcbiAgICB9KTtcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKFB1dEltYWdlQ29tbWFuZCwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdSRVBPX05BTUUnLFxuICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyxcbiAgICAgIGltYWdlTWFuaWZlc3Q6IGV4cGVjdC5hbnkoU3RyaW5nKSxcbiAgICAgIGltYWdlVGFnOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhgMS0ke0VDUl9JU09MQVRFRF9UQUd9YCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xpc3RJbWFnZXNDb21tYW5kIHJldHVybnMgbmV4dFRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoaXMgdGVzdCBpcyB0byBlbnN1cmUgdGhhdCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FuIGhhbmRsZSBwYWdpbmF0ZWQgcmVzcG9uc2VzIGZyb20gdGhlIEVDUiBBUElcbiAgICAvLyBJZiBub3QgaGFuZGxlZCBjb3JyZWN0bHksIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aWxsIGNvbnRpbnVlIHRvIG1ha2UgcmVxdWVzdHMgdG8gdGhlIEVDUiBBUElcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHByZXBhcmVEZWZhdWx0RWNyTW9jaygpO1xuICAgIGVjckNsaWVudC5vbihMaXN0SW1hZ2VzQ29tbWFuZCkucmVzb2x2ZXMoeyAvLyBkZWZhdWx0IHJlc3BvbnNlXG4gICAgICBpbWFnZUlkczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QxJyxcbiAgICAgICAgICBpbWFnZVRhZzogJ2FiY2RlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlRGlnZXN0OiAnZGlnZXN0MicsXG4gICAgICAgICAgaW1hZ2VUYWc6ICdmZ2hpaicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgbmV4dFRva2VuOiAnbmV4dFRva2VuJyxcbiAgICB9KS5vbihMaXN0SW1hZ2VzQ29tbWFuZCwgeyAvLyByZXNwb25zZSB3aGVuIG5leHRUb2tlbiBpcyBwcm92aWRlZFxuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdSRVBPX05BTUUnLFxuICAgICAgbmV4dFRva2VuOiAnbmV4dFRva2VuJyxcbiAgICB9KS5yZXNvbHZlcyh7XG4gICAgICBpbWFnZUlkczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QzJyxcbiAgICAgICAgICBpbWFnZVRhZzogJ2tsbW5vJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgZWNyQ2xpZW50Lm9uKEJhdGNoR2V0SW1hZ2VDb21tYW5kKS5yZXNvbHZlc09uY2Uoe1xuICAgICAgaW1hZ2VzOiBbXG4gICAgICAgIHsgaW1hZ2VJZDogeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnIH0gfSxcbiAgICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MicgfSB9LFxuICAgICAgXSxcbiAgICB9KS5yZXNvbHZlc09uY2Uoe1xuICAgICAgaW1hZ2VzOiBbXG4gICAgICAgIHsgaW1hZ2VJZDogeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnIH0gfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgZWNyQ2xpZW50Lm9uKERlc2NyaWJlSW1hZ2VzQ29tbWFuZCkucmVzb2x2ZXNPbmNlKHtcbiAgICAgIGltYWdlRGV0YWlsczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QxJyxcbiAgICAgICAgICBpbWFnZVRhZ3M6IFsnYWJjZGUnXSxcbiAgICAgICAgICBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDEwMCksXG4gICAgICAgICAgaW1hZ2VTaXplSW5CeXRlczogMV8wMDBfMDAwXzAwMCxcbiAgICAgICAgfSxcbiAgICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInLCBpbWFnZVRhZ3M6IFsnZmdoaWonXSwgaW1hZ2VQdXNoZWRBdDogZGF5c0luVGhlUGFzdCgxMCksIGltYWdlU2l6ZUluQnl0ZXM6IDMwMF8wMDBfMDAwIH0sXG4gICAgICBdLFxuICAgIH0pLnJlc29sdmVzT25jZSh7XG4gICAgICBpbWFnZURldGFpbHM6IFtcbiAgICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnLCBpbWFnZVRhZ3M6IFsna2xtbm8nXSwgaW1hZ2VQdXNoZWRBdDogZGF5c0luVGhlUGFzdCgyKSwgaW1hZ2VTaXplSW5CeXRlczogMTAwIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHByZXBhcmVEZWZhdWx0Q2ZuTW9jaygpO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdlY3InLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAwLFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoRGVzY3JpYmVJbWFnZXNDb21tYW5kLCAyKTtcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0SW1hZ2VzQ29tbWFuZCwgNCk7XG5cbiAgICAvLyBubyB0YWdnaW5nXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0SW1hZ2VDb21tYW5kLCAwKTtcblxuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiAnUkVQT19OQU1FJyxcbiAgICAgIGltYWdlSWRzOiBbXG4gICAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyB9LFxuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDbG91ZEZvcm1hdGlvbiBBUEkgY2FsbHMnLCAoKSA9PiB7XG4gIHRlc3QoJ2Jvb3RzdHJhcCBmaWx0ZXJzIG91dCBvdGhlciBib290c3RyYXAgdmVyc2lvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIFBhcmFtZXRlcnM6IFt7XG4gICAgICAgIFBhcmFtZXRlcktleTogJ1F1YWxpZmllcicsXG4gICAgICAgIFBhcmFtZXRlclZhbHVlOiAnenp6enp6JyxcbiAgICAgIH1dLFxuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAnZnVsbCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCwgMik7XG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0VGVtcGxhdGVDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgncGFyYW1ldGVyIGhhc2hlcyBhcmUgaW5jbHVkZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjZm5DbGllbnQub24oR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgUGFyYW1ldGVyczogW3tcbiAgICAgICAgUGFyYW1ldGVyS2V5OiAnQXNzZXRQYXJhbWV0ZXJzYXNzZXQxJyxcbiAgICAgICAgRGVmYXVsdFZhbHVlOiAnYXNzZXQxJyxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyBubyB0YWdnaW5nXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG5cbiAgICAvLyBhc3NldHMgYXJlIHRvIGJlIGRlbGV0ZWRcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIHtcbiAgICAgIEJ1Y2tldDogJ0JVQ0tFVF9OQU1FJyxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAgLy8gbm8gJ2Fzc2V0MSdcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MicgfSxcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MycgfSxcbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBwcmVwYXJlRGVmYXVsdENmbk1vY2soKSB7XG4gIGNvbnN0IGNsaWVudCA9IGNmbkNsaWVudDtcbiAgY2xpZW50LnJlc2V0KCk7XG5cbiAgY2xpZW50Lm9uKExpc3RTdGFja3NDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgU3RhY2tTdW1tYXJpZXM6IFtcbiAgICAgIHsgU3RhY2tOYW1lOiAnU3RhY2sxJywgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLCBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCkgfSxcbiAgICAgIHsgU3RhY2tOYW1lOiAnU3RhY2syJywgU3RhY2tTdGF0dXM6ICdVUERBVEVfQ09NUExFVEUnLCBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCkgfSxcbiAgICBdLFxuICB9KTtcblxuICBjbGllbnQub24oR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIFBhcmFtZXRlcnM6IFt7XG4gICAgICBQYXJhbWV0ZXJLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgIERlZmF1bHRWYWx1ZTogJy9jZGstYm9vdHN0cmFwL2FiY2RlL3ZlcnNpb24nLFxuICAgIH1dLFxuICB9KTtcblxuICBjbGllbnQub24oR2V0VGVtcGxhdGVDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgVGVtcGxhdGVCb2R5OiAnYWJjZGUnLFxuICB9KTtcblxuICByZXR1cm4gY2xpZW50O1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRGVmYXVsdFMzTW9jaygpIHtcbiAgY29uc3QgY2xpZW50ID0gczNDbGllbnQ7XG4gIGNsaWVudC5yZXNldCgpO1xuXG4gIGNsaWVudC5vbihMaXN0T2JqZWN0c1YyQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIENvbnRlbnRzOiBbXG4gICAgICB7IEtleTogJ2Fzc2V0MScsIExhc3RNb2RpZmllZDogbmV3IERhdGUoRGF0ZS5ub3coKSAtICgyICogREFZKSkgfSxcbiAgICAgIHsgS2V5OiAnYXNzZXQyJywgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gKDEwICogREFZKSkgfSxcbiAgICAgIHsgS2V5OiAnYXNzZXQzJywgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gKDEwMCAqIERBWSkpIH0sXG4gICAgXSxcbiAgICBLZXlDb3VudDogMyxcbiAgfSk7XG5cbiAgY2xpZW50Lm9uKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gKHtcbiAgICBUYWdTZXQ6IHBhcmFtcy5LZXkgPT09ICdhc3NldDInID8gW3sgS2V5OiBTM19JU09MQVRFRF9UQUcsIFZhbHVlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgfV0gOiBbXSxcbiAgfSkpO1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVEZWZhdWx0RWNyTW9jaygpIHtcbiAgY29uc3QgY2xpZW50ID0gZWNyQ2xpZW50O1xuICBjbGllbnQucmVzZXQoKTtcblxuICBjbGllbnQub24oQmF0Y2hHZXRJbWFnZUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBpbWFnZXM6IFtcbiAgICAgIHsgaW1hZ2VJZDogeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnIH0gfSxcbiAgICAgIHsgaW1hZ2VJZDogeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInIH0gfSxcbiAgICAgIHsgaW1hZ2VJZDogeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnIH0gfSxcbiAgICBdLFxuICB9KTtcblxuICBjbGllbnQub24oRGVzY3JpYmVJbWFnZXNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgaW1hZ2VEZXRhaWxzOiBbXG4gICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycsIGltYWdlVGFnczogWydrbG1ubyddLCBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDIpLCBpbWFnZVNpemVJbkJ5dGVzOiAxMDAgfSxcbiAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJywgaW1hZ2VUYWdzOiBbJ2ZnaGlqJ10sIGltYWdlUHVzaGVkQXQ6IGRheXNJblRoZVBhc3QoMTApLCBpbWFnZVNpemVJbkJ5dGVzOiAzMDBfMDAwXzAwMCB9LFxuICAgICAge1xuICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnLFxuICAgICAgICBpbWFnZVRhZ3M6IFsnYWJjZGUnXSxcbiAgICAgICAgaW1hZ2VQdXNoZWRBdDogZGF5c0luVGhlUGFzdCgxMDApLFxuICAgICAgICBpbWFnZVNpemVJbkJ5dGVzOiAxXzAwMF8wMDBfMDAwLFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcblxuICBjbGllbnQub24oTGlzdEltYWdlc0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBpbWFnZUlkczogW1xuICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnLCBpbWFnZVRhZzogJ2FiY2RlJyB9LCAvLyBpbnVzZVxuICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInLCBpbWFnZVRhZzogJ2ZnaGlqJyB9LFxuICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnLCBpbWFnZVRhZzogJ2tsbW5vJyB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmRlc2NyaWJlKCdHYXJiYWdlIENvbGxlY3Rpb24gd2l0aCBsYXJnZSAjIG9mIG9iamVjdHMnLCAoKSA9PiB7XG4gIGNvbnN0IGtleUNvdW50ID0gMTAwMDA7XG5cbiAgdGVzdCgndGFnIG9ubHknLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBtb2NrQ2xpZW50c0ZvckxhcmdlT2JqZWN0cygpO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDEsXG4gICAgICBhY3Rpb246ICd0YWcnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RPYmplY3RzVjJDb21tYW5kLCAyKTtcblxuICAgIC8vIHRhZ2dpbmcgaXMgcGVyZm9ybWVkXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwga2V5Q291bnQpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoRGVsZXRlT2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDEwMDApOyAvLyAxMDAwIGluIHVzZSBhc3NldHMgYXJlIGVycm9uZW91c2x5IHRhZ2dlZFxuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDUwMDApOyAvLyA4MDAwLTQwMDAgYXNzZXRzIG5lZWQgdG8gYmUgdGFnZ2VkLCArIDEwMDAgKHNpbmNlIHVudGFnIGFsc28gY2FsbHMgdGhpcylcbiAgfSk7XG5cbiAgdGVzdCgnZGVsZXRlLXRhZ2dlZCBvbmx5JywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgbW9ja0NsaWVudHNGb3JMYXJnZU9iamVjdHMoKTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAxLFxuICAgICAgYWN0aW9uOiAnZGVsZXRlLXRhZ2dlZCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gZGVsZXRlIHByZXZpb3VzbHkgdGFnZ2VkIG9iamVjdHNcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLCBrZXlDb3VudCk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhEZWxldGVPYmplY3RzQ29tbWFuZCwgNCk7IC8vIDQwMDAgaXNvbGF0ZWQgYXNzZXRzIGFyZSBhbHJlYWR5IHRhZ2dlZCwgZGVsZXRlZCBpbiBiYXRjaGVzIG9mIDEwMDBcbiAgfSk7XG5cbiAgZnVuY3Rpb24gbW9ja0NsaWVudHNGb3JMYXJnZU9iamVjdHMoKSB7XG4gICAgY2ZuQ2xpZW50Lm9uKExpc3RTdGFja3NDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBTdGFja1N1bW1hcmllczogW1xuICAgICAgICB7IFN0YWNrTmFtZTogJ1N0YWNrMScsIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJywgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY2ZuQ2xpZW50Lm9uKEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgIFBhcmFtZXRlcnM6IFt7XG4gICAgICAgIFBhcmFtZXRlcktleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICBEZWZhdWx0VmFsdWU6ICcvY2RrLWJvb3RzdHJhcC9hYmNkZS92ZXJzaW9uJyxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgLy8gYWRkIGV2ZXJ5IDV0aCBhc3NldCBoYXNoIHRvIHRoZSBtb2NrIHRlbXBsYXRlIGJvZHk6IDgwMDAgYXNzZXRzIGFyZSBpc29sYXRlZFxuICAgIGNvbnN0IG1vY2tUZW1wbGF0ZUJvZHkgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleUNvdW50OyBpKz01KSB7XG4gICAgICBtb2NrVGVtcGxhdGVCb2R5LnB1c2goYGFzc2V0JHtpfWhhc2hgKTtcbiAgICB9XG4gICAgY2ZuQ2xpZW50Lm9uKEdldFRlbXBsYXRlQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgVGVtcGxhdGVCb2R5OiBtb2NrVGVtcGxhdGVCb2R5LmpvaW4oJy0nKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbnRlbnRzOiB7IEtleTogc3RyaW5nOyBMYXN0TW9kaWZpZWQ6IERhdGUgfVtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlDb3VudDsgaSsrKSB7XG4gICAgICBjb250ZW50cy5wdXNoKHtcbiAgICAgICAgS2V5OiBgYXNzZXQke2l9aGFzaGAsXG4gICAgICAgIExhc3RNb2RpZmllZDogbmV3IERhdGUoMCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzM0NsaWVudC5vbihMaXN0T2JqZWN0c1YyQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgQ29udGVudHM6IGNvbnRlbnRzLFxuICAgICAgS2V5Q291bnQ6IGtleUNvdW50LFxuICAgIH0pO1xuXG4gICAgLy8gZXZlcnkgb3RoZXIgb2JqZWN0IGhhcyB0aGUgaXNvbGF0ZWQgdGFnOiBvZiB0aGUgODAwMCBpc29sYXRlZCBhc3NldHMsIDQwMDAgYWxyZWFkeSBhcmUgdGFnZ2VkLlxuICAgIC8vIG9mIHRoZSAyMDAwIGluIHVzZSBhc3NldHMsIDEwMDAgYXJlIHRhZ2dlZC5cbiAgICBzM0NsaWVudC5vbihHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCkuY2FsbHNGYWtlKChwYXJhbXMpID0+ICh7XG4gICAgICBUYWdTZXQ6IE51bWJlcihwYXJhbXMuS2V5W3BhcmFtcy5LZXkubGVuZ3RoIC0gNV0pICUgMiA9PT0gMFxuICAgICAgICA/IFt7IEtleTogUzNfSVNPTEFURURfVEFHLCBWYWx1ZTogbmV3IERhdGUoMjAwMCwgMSwgMSkudG9JU09TdHJpbmcoKSB9XVxuICAgICAgICA6IFtdLFxuICAgIH0pKTtcbiAgfVxufSk7XG5cbmRlc2NyaWJlKCdCYWNrZ3JvdW5kU3RhY2tSZWZyZXNoJywgKCkgPT4ge1xuICBsZXQgYmFja2dyb3VuZFJlZnJlc2g6IEJhY2tncm91bmRTdGFja1JlZnJlc2g7XG4gIGxldCByZWZyZXNoUHJvcHM6IEJhY2tncm91bmRTdGFja1JlZnJlc2hQcm9wcztcbiAgbGV0IHNldFRpbWVvdXRTcHk6IGplc3QuU3B5SW5zdGFuY2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgamVzdC51c2VGYWtlVGltZXJzKCk7XG4gICAgc2V0VGltZW91dFNweSA9IGplc3Quc3B5T24oZ2xvYmFsLCAnc2V0VGltZW91dCcpO1xuXG4gICAgY29uc3QgZm9vID0gbmV3IE1vY2tTZGsoKTtcblxuICAgIHJlZnJlc2hQcm9wcyA9IHtcbiAgICAgIGNmbjogZm9vLmNsb3VkRm9ybWF0aW9uKCksXG4gICAgICBhY3RpdmVBc3NldHM6IG5ldyBBY3RpdmVBc3NldENhY2hlKCksXG4gICAgfTtcblxuICAgIGJhY2tncm91bmRSZWZyZXNoID0gbmV3IEJhY2tncm91bmRTdGFja1JlZnJlc2gocmVmcmVzaFByb3BzKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsVGltZXJzKCk7XG4gICAgc2V0VGltZW91dFNweS5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICB0ZXN0KCdzaG91bGQgc3RhcnQgYWZ0ZXIgYSBkZWxheScsICgpID0+IHtcbiAgICB2b2lkIGJhY2tncm91bmRSZWZyZXNoLnN0YXJ0KCk7XG4gICAgZXhwZWN0KHNldFRpbWVvdXRTcHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3Qoc2V0VGltZW91dFNweSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKGV4cGVjdC5hbnkoRnVuY3Rpb24pLCAzMDAwMDApO1xuICB9KTtcblxuICB0ZXN0KCdzaG91bGQgcmVmcmVzaCBzdGFja3MgYW5kIHNjaGVkdWxlIG5leHQgcmVmcmVzaCcsIGFzeW5jICgpID0+IHtcbiAgICB2b2lkIGJhY2tncm91bmRSZWZyZXNoLnN0YXJ0KCk7XG5cbiAgICAvLyBSdW4gdGhlIGZpcnN0IHRpbWVyICh3aGljaCBzaG91bGQgdHJpZ2dlciB0aGUgZmlyc3QgcmVmcmVzaClcbiAgICBhd2FpdCBqZXN0LnJ1bk9ubHlQZW5kaW5nVGltZXJzQXN5bmMoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcblxuICAgIGV4cGVjdChzZXRUaW1lb3V0U3B5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7IC8vIE9uY2UgZm9yIHN0YXJ0LCBvbmNlIGZvciBuZXh0IHJlZnJlc2hcbiAgICBleHBlY3Qoc2V0VGltZW91dFNweSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKGV4cGVjdC5hbnkoRnVuY3Rpb24pLCAzMDAwMDApO1xuXG4gICAgLy8gUnVuIHRoZSBmaXJzdCB0aW1lciAod2hpY2ggdHJpZ2dlcnMgdGhlIGZpcnN0IHJlZnJlc2gpXG4gICAgYXdhaXQgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVyc0FzeW5jKCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMik7XG4gICAgZXhwZWN0KHNldFRpbWVvdXRTcHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTsgLy8gVHdvIHJlZnJlc2hlcyBwbHVzIG9uZSBtb3JlIHNjaGVkdWxlZFxuICB9KTtcblxuICB0ZXN0KCdzaG91bGQgd2FpdCBmb3IgdGhlIG5leHQgcmVmcmVzaCBpZiBjYWxsZWQgd2l0aGluIHRpbWUgZnJhbWUnLCBhc3luYyAoKSA9PiB7XG4gICAgdm9pZCBiYWNrZ3JvdW5kUmVmcmVzaC5zdGFydCgpO1xuXG4gICAgLy8gUnVuIHRoZSBmaXJzdCB0aW1lciAod2hpY2ggdHJpZ2dlcnMgdGhlIGZpcnN0IHJlZnJlc2gpXG4gICAgYXdhaXQgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVyc0FzeW5jKCk7XG5cbiAgICBjb25zdCB3YWl0UHJvbWlzZSA9IGJhY2tncm91bmRSZWZyZXNoLm5vT2xkZXJUaGFuKDE4MDAwMCk7IC8vIDMgbWludXRlc1xuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgxMjAwMDApOyAvLyBBZHZhbmNlIHRpbWUgYnkgMiBtaW51dGVzXG5cbiAgICBhd2FpdCBleHBlY3Qod2FpdFByb21pc2UpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2hvdWxkIHdhaXQgZm9yIHRoZSBuZXh0IHJlZnJlc2ggaWYgcmVmcmVzaCBsYW5kcyBiZWZvcmUgdGhlIHRpbWVvdXQnLCBhc3luYyAoKSA9PiB7XG4gICAgdm9pZCBiYWNrZ3JvdW5kUmVmcmVzaC5zdGFydCgpO1xuXG4gICAgLy8gUnVuIHRoZSBmaXJzdCB0aW1lciAod2hpY2ggdHJpZ2dlcnMgdGhlIGZpcnN0IHJlZnJlc2gpXG4gICAgYXdhaXQgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVyc0FzeW5jKCk7XG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDI0MDAwKTsgLy8gQWR2YW5jZSB0aW1lIGJ5IDQgbWludXRlc1xuXG4gICAgY29uc3Qgd2FpdFByb21pc2UgPSBiYWNrZ3JvdW5kUmVmcmVzaC5ub09sZGVyVGhhbigzMDAwMDApOyAvLyA1IG1pbnV0ZXNcbiAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMTIwMDAwKTsgLy8gQWR2YW5jZSB0aW1lIGJ5IDIgbWludXRlcywgcmVmcmVzaCBzaG91bGQgZmlyZVxuXG4gICAgYXdhaXQgZXhwZWN0KHdhaXRQcm9taXNlKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCByZWplY3QgaWYgdGhlIHJlZnJlc2ggdGFrZXMgdG9vIGxvbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgdm9pZCBiYWNrZ3JvdW5kUmVmcmVzaC5zdGFydCgpO1xuXG4gICAgLy8gUnVuIHRoZSBmaXJzdCB0aW1lciAod2hpY2ggdHJpZ2dlcnMgdGhlIGZpcnN0IHJlZnJlc2gpXG4gICAgYXdhaXQgamVzdC5ydW5Pbmx5UGVuZGluZ1RpbWVyc0FzeW5jKCk7XG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDEyMDAwMCk7IC8vIEFkdmFuY2UgdGltZSBieSAyIG1pbnV0ZXNcblxuICAgIGNvbnN0IHdhaXRQcm9taXNlID0gYmFja2dyb3VuZFJlZnJlc2gubm9PbGRlclRoYW4oMCk7IC8vIDAgc2Vjb25kc1xuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgxMjAwMDApOyAvLyBBZHZhbmNlIHRpbWUgYnkgMiBtaW51dGVzXG5cbiAgICBhd2FpdCBleHBlY3Qod2FpdFByb21pc2UpLnJlamVjdHMudG9UaHJvdygncmVmcmVzaFN0YWNrcyB0b29rIHRvbyBsb25nOyB0aGUgYmFja2dyb3VuZCB0aHJlYWQgbGlrZWx5IHRocmV3IGFuIGVycm9yJyk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGRheXNJblRoZVBhc3QoZGF5czogbnVtYmVyKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICBkLnNldERhdGUoZC5nZXREYXRlKCkgLSBkYXlzKTtcbiAgcmV0dXJuIGQ7XG59XG5cbmZ1bmN0aW9uIHllYXJzSW5UaGVGdXR1cmUoeWVhcnM6IG51bWJlcik6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgKyB5ZWFycyk7XG4gIHJldHVybiBkO1xufVxuIl19
862
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FyYmFnZS1jb2xsZWN0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYXJiYWdlLWNvbGxlY3Rpb24udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBQWlDOztBQUVqQywwRUFLd0M7QUFDeEMsdUNBQWlHO0FBQ2pHLCtDQUF1STtBQUN2SSxrREFNNEI7QUFDNUIsa0ZBSXdEO0FBQ3hELHdGQUFvRjtBQUNwRixvREFNNkI7QUFFN0IsSUFBSSxnQkFBa0MsQ0FBQztBQUV2QyxJQUFJLFVBQTRCLENBQUM7QUFDakMsTUFBTSxTQUFTLEdBQUcsbUNBQXdCLENBQUM7QUFDM0MsTUFBTSxRQUFRLEdBQUcsdUJBQVksQ0FBQztBQUM5QixNQUFNLFNBQVMsR0FBRyx3QkFBYSxDQUFDO0FBRWhDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGtDQUFrQztBQUVuRSxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2Qsb0RBQW9EO0lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBVyxDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFFNUcsa0RBQWtEO0lBQ2xELFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFFSCxxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLG9CQUFvQixFQUFFLENBQUM7SUFDdkIscUJBQXFCLEVBQUUsQ0FBQztBQUMxQixDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7SUFDYixVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLGtCQUFrQixDQUFDLFVBQTBCO0lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBVyxDQUFDLFNBQVMsQ0FBQyxJQUFBLDZCQUFrQixFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RyxDQUFDO0FBRUQsU0FBUyxFQUFFLENBQUMsS0FLWDtJQUNDLE9BQU8sSUFBSSxzQkFBZ0IsQ0FBQztRQUMxQixXQUFXLEVBQUUsSUFBSSwwQkFBZSxFQUFFO1FBQ2xDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixtQkFBbUIsRUFBRTtZQUNuQixPQUFPLEVBQUUsY0FBYztZQUN2QixNQUFNLEVBQUUsV0FBVztZQUNuQixJQUFJLEVBQUUsTUFBTTtTQUNiO1FBQ0Qsa0JBQWtCLEVBQUUsY0FBYztRQUNsQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQztRQUNqRCxpQkFBaUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLElBQUksQ0FBQztRQUNqRCxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7UUFDaEIsT0FBTyxFQUFFLEtBQUs7S0FDZixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsUUFBUSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtJQUNyQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEUsa0JBQWtCLENBQUM7WUFDakIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLFNBQVMsRUFBRSxrQkFBa0I7b0JBQzdCLFdBQVcsRUFBRSxLQUFLO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxJQUFJO1lBQ1Ysa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSxhQUFhO1FBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxtQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4RSwyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLGdDQUFvQixFQUFFO1lBQy9ELE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUU7b0JBQ1AsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO29CQUNqQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7b0JBQ2pCLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtpQkFDbEI7Z0JBQ0QsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9ELGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLEVBQUUsSUFBSTtZQUNWLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyx5Q0FBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsZ0NBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckUsZ0JBQWdCO1FBQ2hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxtQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsbUNBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEUsY0FBYztRQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6QyxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxnQ0FBb0IsRUFBRTtZQUMvRCxNQUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFO29CQUNQLDZDQUE2QztvQkFDN0MsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO29CQUNqQixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7aUJBQ2xCO2dCQUNELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSw4QkFBOEI7UUFDOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxtQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV4RSxjQUFjO1FBQ2QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGdDQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pELGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLEVBQUUsSUFBSTtZQUNWLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyx5Q0FBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsZ0NBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckUsZUFBZTtRQUNmLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxtQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsbUNBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFFMUcsY0FBYztRQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RCxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxlQUFlO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSw4QkFBOEI7UUFDOUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxtQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxpREFBaUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNqRSxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsRUFBRSxDQUFDLGdDQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3pDLFFBQVEsRUFBRTtnQkFDUixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGlDQUFpQzthQUNuSTtZQUNELFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQyxDQUFDO1FBRUgsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxJQUFJO1lBQ1Ysa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxnQ0FBb0IsRUFBRTtZQUMvRCxNQUFNLEVBQUUsYUFBYTtZQUNyQixNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFO29CQUNQLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtvQkFDakIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO29CQUNqQixZQUFZO2lCQUNiO2dCQUNELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEUsa0JBQWtCLENBQUM7WUFDakIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLFNBQVMsRUFBRSxrQkFBa0I7b0JBQzdCLFdBQVcsRUFBRSxLQUFLO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGtDQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyw4QkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRSxhQUFhO1FBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDRCQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxvQ0FBdUIsRUFBRTtZQUNuRSxjQUFjLEVBQUUsV0FBVztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFO2dCQUMxQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7YUFDM0I7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvRCxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxnQkFBZ0I7UUFDaEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDRCQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsY0FBYztRQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxvQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6QyxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxvQ0FBdUIsRUFBRTtZQUNuRSxjQUFjLEVBQUUsV0FBVztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IscUNBQXFDO2dCQUNyQyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7YUFDM0I7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQywwQ0FBMEMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRCxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxPQUFPO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5FLGdCQUFnQjtRQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsMEJBQTBCLENBQUMsNEJBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVqRSxjQUFjO1FBQ2QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG9DQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pELGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLEVBQUUsS0FBSztZQUNYLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyx5Q0FBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRSxlQUFlO1FBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDRCQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsY0FBYztRQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxvQ0FBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RCxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxlQUFlO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5FLGdCQUFnQjtRQUNoQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsMEJBQTBCLENBQUMsNEJBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRSxrQkFBa0IsQ0FBQztZQUNqQixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hCLFNBQVMsQ0FBQyxFQUFFLENBQUMsa0NBQXFCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDM0MsWUFBWSxFQUFFO2dCQUNaO29CQUNFLFdBQVcsRUFBRSxTQUFTO29CQUN0QixTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3BCLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUMvQixnQkFBZ0IsRUFBRSxHQUFHO2lCQUN0QjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsU0FBUztvQkFDdEIsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNwQixhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUNsQyxnQkFBZ0IsRUFBRSxTQUFXO2lCQUM5QjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsU0FBUztvQkFDdEIsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNwQixhQUFhLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQztvQkFDakMsZ0JBQWdCLEVBQUUsVUFBYTtpQkFDaEM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILHFCQUFxQixFQUFFLENBQUM7UUFFeEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsMkJBQTJCO1FBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxvQ0FBdUIsRUFBRTtZQUNuRSxjQUFjLEVBQUUsV0FBVztZQUMzQixRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFO2FBQzNCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMscUNBQXFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDckQsa0JBQWtCLENBQUM7WUFDakIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLFNBQVMsRUFBRSxrQkFBa0I7b0JBQzdCLFdBQVcsRUFBRSxLQUFLO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgscUJBQXFCLEVBQUUsQ0FBQztRQUN4QixTQUFTLENBQUMsRUFBRSxDQUFDLDhCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLFFBQVEsRUFBRSxFQUFFO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILDJCQUEyQjtRQUMzQixNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pDLGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILGdCQUFnQixHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLEVBQUUsS0FBSztZQUNYLGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXhDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyx5Q0FBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRSxlQUFlO1FBQ2YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDRCQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLDRCQUFlLEVBQUU7WUFDM0QsY0FBYyxFQUFFLFdBQVc7WUFDM0IsV0FBVyxFQUFFLFNBQVM7WUFDdEIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1lBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxzQkFBZ0IsRUFBRSxDQUFDO1NBQzNELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyw0QkFBZSxFQUFFO1lBQzNELGNBQWMsRUFBRSxXQUFXO1lBQzNCLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLGFBQWEsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUNqQyxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQUssc0JBQWdCLEVBQUUsQ0FBQztTQUMzRCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRCxvR0FBb0c7UUFDcEcsZ0dBQWdHO1FBQ2hHLGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILHFCQUFxQixFQUFFLENBQUM7UUFDeEIsU0FBUyxDQUFDLEVBQUUsQ0FBQyw4QkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN2QyxRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsU0FBUztvQkFDdEIsUUFBUSxFQUFFLE9BQU87aUJBQ2xCO2FBQ0Y7WUFDRCxTQUFTLEVBQUUsV0FBVztTQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLDhCQUFpQixFQUFFO1lBQ3ZCLGNBQWMsRUFBRSxXQUFXO1lBQzNCLFNBQVMsRUFBRSxXQUFXO1NBQ3ZCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDVixRQUFRLEVBQUU7Z0JBQ1I7b0JBQ0UsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFFBQVEsRUFBRSxPQUFPO2lCQUNsQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLEVBQUUsQ0FBQyxpQ0FBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUM5QyxNQUFNLEVBQUU7Z0JBQ04sRUFBRSxPQUFPLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQ3ZDLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFO2FBQ3hDO1NBQ0YsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNkLE1BQU0sRUFBRTtnQkFDTixFQUFFLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRTthQUN4QztTQUNGLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxFQUFFLENBQUMsa0NBQXFCLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDL0MsWUFBWSxFQUFFO2dCQUNaO29CQUNFLFdBQVcsRUFBRSxTQUFTO29CQUN0QixTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ3BCLGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO29CQUNqQyxnQkFBZ0IsRUFBRSxVQUFhO2lCQUNoQztnQkFDRCxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxTQUFXLEVBQUU7YUFDbEg7U0FDRixDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ2QsWUFBWSxFQUFFO2dCQUNaLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRTthQUN6RztTQUNGLENBQUMsQ0FBQztRQUNILHFCQUFxQixFQUFFLENBQUM7UUFFeEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxLQUFLO1lBQ1gsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGtDQUFxQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyw4QkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVuRSxhQUFhO1FBQ2IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDRCQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFakUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLG9DQUF1QixFQUFFO1lBQ25FLGNBQWMsRUFBRSxXQUFXO1lBQzNCLFFBQVEsRUFBRTtnQkFDUixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUU7Z0JBQzFCLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTthQUMzQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNoRSxrQkFBa0IsQ0FBQztZQUNqQixVQUFVLEVBQUUsQ0FBQztvQkFDWCxZQUFZLEVBQUUsV0FBVztvQkFDekIsY0FBYyxFQUFFLFFBQVE7aUJBQ3pCLENBQUM7WUFDRixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsU0FBUyxFQUFFLGtCQUFrQjtvQkFDN0IsV0FBVyxFQUFFLEtBQUs7aUJBQ25CO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsMEJBQTBCLENBQUMsaURBQXlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDBDQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLCtCQUErQixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQy9DLGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILFNBQVMsQ0FBQyxFQUFFLENBQUMsaURBQXlCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDL0MsVUFBVSxFQUFFLENBQUM7b0JBQ1gsWUFBWSxFQUFFLHVCQUF1QjtvQkFDckMsWUFBWSxFQUFFLFFBQVE7aUJBQ3ZCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV4QyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsMEJBQTBCLENBQUMseUNBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLGdDQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJFLGFBQWE7UUFDYixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsbUNBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhFLDJCQUEyQjtRQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLENBQUMsZ0NBQW9CLEVBQUU7WUFDL0QsTUFBTSxFQUFFLGFBQWE7WUFDckIsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRTtvQkFDUCxjQUFjO29CQUNkLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRTtvQkFDakIsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2lCQUNsQjtnQkFDRCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMscUJBQXFCO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN6QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZixNQUFNLENBQUMsRUFBRSxDQUFDLHlDQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3BDLGNBQWMsRUFBRTtZQUNkLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUU7WUFDakYsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBRTtTQUNsRjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsaURBQXlCLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDNUMsVUFBVSxFQUFFLENBQUM7Z0JBQ1gsWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsWUFBWSxFQUFFLDhCQUE4QjthQUM3QyxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEVBQUUsQ0FBQywwQ0FBa0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxZQUFZLEVBQUUsT0FBTztLQUN0QixDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsU0FBUyxvQkFBb0I7SUFDM0IsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0NBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDdkMsUUFBUSxFQUFFO1lBQ1IsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7U0FDcEU7UUFDRCxRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxFQUFFLENBQUMsbUNBQXVCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQ25HLENBQUMsQ0FBQyxDQUFDO0lBRUosT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMscUJBQXFCO0lBQzVCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQztJQUN6QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZixNQUFNLENBQUMsRUFBRSxDQUFDLGlDQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sRUFBRTtZQUNOLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3ZDLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQ3ZDLEVBQUUsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxFQUFFO1NBQ3hDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLEVBQUUsQ0FBQyxrQ0FBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN4QyxZQUFZLEVBQUU7WUFDWixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7WUFDeEcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsU0FBVyxFQUFFO1lBQ2pIO2dCQUNFLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BCLGFBQWEsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO2dCQUNqQyxnQkFBZ0IsRUFBRSxVQUFhO2FBQ2hDO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxNQUFNLENBQUMsRUFBRSxDQUFDLDhCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3BDLFFBQVEsRUFBRTtZQUNSLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUTtZQUN2RCxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtZQUM3QyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTtTQUM5QztLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxRQUFRLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO0lBQzFELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV2QixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFCLGtCQUFrQixDQUFDO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxTQUFTLEVBQUUsa0JBQWtCO29CQUM3QixXQUFXLEVBQUUsS0FBSztpQkFDbkI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILDBCQUEwQixFQUFFLENBQUM7UUFFN0IsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksRUFBRSxJQUFJO1lBQ1Ysa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSx1QkFBdUI7UUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxzQ0FBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDRDQUE0QztRQUMzSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsMEJBQTBCLENBQUMsbUNBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQywyRUFBMkU7SUFDekosQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEMsa0JBQWtCLENBQUM7WUFDakIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLFNBQVMsRUFBRSxrQkFBa0I7b0JBQzdCLFdBQVcsRUFBRSxLQUFLO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsMEJBQTBCLEVBQUUsQ0FBQztRQUU3QixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7WUFDcEIsSUFBSSxFQUFFLElBQUk7WUFDVixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sRUFBRSxlQUFlO1NBQ3hCLENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFeEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVyRSxtQ0FBbUM7UUFDbkMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLG1DQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxnQ0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHNFQUFzRTtJQUM5SSxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsMEJBQTBCO1FBQ2pDLFNBQVMsQ0FBQyxFQUFFLENBQUMseUNBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDdkMsY0FBYyxFQUFFO2dCQUNkLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFLEVBQUU7YUFDbEY7U0FDRixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsRUFBRSxDQUFDLGlEQUF5QixDQUFDLENBQUMsUUFBUSxDQUFDO1lBQy9DLFVBQVUsRUFBRSxDQUFDO29CQUNYLFlBQVksRUFBRSxrQkFBa0I7b0JBQ2hDLFlBQVksRUFBRSw4QkFBOEI7aUJBQzdDLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCwrRUFBK0U7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsU0FBUyxDQUFDLEVBQUUsQ0FBQywwQ0FBa0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN4QyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztTQUN6QyxDQUFDLENBQUM7UUFFSCxNQUFNLFFBQVEsR0FBMEMsRUFBRSxDQUFDO1FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTTtnQkFDcEIsWUFBWSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQzthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQ0FBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN6QyxRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFFSCxpR0FBaUc7UUFDakcsOENBQThDO1FBQzlDLFFBQVEsQ0FBQyxFQUFFLENBQUMsbUNBQXVCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDMUQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pELENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDdkUsQ0FBQyxDQUFDLEVBQUU7U0FDUCxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsSUFBSSxpQkFBeUMsQ0FBQztJQUM5QyxJQUFJLFlBQXlDLENBQUM7SUFDOUMsSUFBSSxhQUErQixDQUFDO0lBRXBDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWpELE1BQU0sR0FBRyxHQUFHLElBQUksa0JBQU8sRUFBRSxDQUFDO1FBRTFCLFlBQVksR0FBRztZQUNiLEdBQUcsRUFBRSxHQUFHLENBQUMsY0FBYyxFQUFFO1lBQ3pCLFlBQVksRUFBRSxJQUFJLGdDQUFnQixFQUFFO1NBQ3JDLENBQUM7UUFFRixpQkFBaUIsR0FBRyxJQUFJLHNDQUFzQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFO1FBQ3RDLEtBQUssaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pFLEtBQUssaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IsK0RBQStEO1FBQy9ELE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFdkMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLHlDQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRW5FLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztRQUN4RixNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU3RSx5REFBeUQ7UUFDekQsTUFBTSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUV2QyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsMEJBQTBCLENBQUMseUNBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsd0NBQXdDO0lBQzFGLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDhEQUE4RCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzlFLEtBQUssaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IseURBQXlEO1FBQ3pELE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFdkMsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWTtRQUN2RSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7UUFFOUQsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHNFQUFzRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RGLEtBQUssaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IseURBQXlEO1FBQ3pELE1BQU0sSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsNEJBQTRCO1FBRTdELE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVk7UUFDdkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsaURBQWlEO1FBRW5GLE1BQU0sTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNyRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxLQUFLLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRS9CLHlEQUF5RDtRQUN6RCxNQUFNLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUU5RCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZO1FBQ2xFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLDRCQUE0QjtRQUU5RCxNQUFNLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDBFQUEwRSxDQUFDLENBQUM7SUFDeEgsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7SUFDL0IsSUFBSSxlQUFnQyxDQUFDO0lBQ3JDLElBQUksV0FBNkIsQ0FBQztJQUNsQyxJQUFJLGFBQStCLENBQUM7SUFFcEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDaEQsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRXBELGVBQWUsR0FBRyxJQUFJLGtDQUFlLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtRQUN4RCxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFeEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMscUdBQXFHLENBQUMsQ0FBQztJQUN2SixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxhQUFhLENBQUMsSUFBWTtJQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzlCLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBYTtJQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9vcmRlciAqL1xuXG5pbXBvcnQge1xuICBHZXRUZW1wbGF0ZUNvbW1hbmQsXG4gIEdldFRlbXBsYXRlU3VtbWFyeUNvbW1hbmQsXG4gIExpc3RTdGFja3NDb21tYW5kLFxuICBTdGFjayxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IEVDUl9JU09MQVRFRF9UQUcsIEdhcmJhZ2VDb2xsZWN0b3IsIFMzX0lTT0xBVEVEX1RBRywgVG9vbGtpdEluZm8gfSBmcm9tICcuLi8uLi9saWIvYXBpJztcbmltcG9ydCB7IG1vY2tCb290c3RyYXBTdGFjaywgbW9ja0Nsb3VkRm9ybWF0aW9uQ2xpZW50LCBtb2NrRUNSQ2xpZW50LCBtb2NrUzNDbGllbnQsIE1vY2tTZGssIE1vY2tTZGtQcm92aWRlciB9IGZyb20gJy4uL3V0aWwvbW9jay1zZGsnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT2JqZWN0c0NvbW1hbmQsXG4gIERlbGV0ZU9iamVjdFRhZ2dpbmdDb21tYW5kLFxuICBHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCxcbiAgTGlzdE9iamVjdHNWMkNvbW1hbmQsXG4gIFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtcbiAgQWN0aXZlQXNzZXRDYWNoZSxcbiAgQmFja2dyb3VuZFN0YWNrUmVmcmVzaCxcbiAgQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzLFxufSBmcm9tICcuLi8uLi9saWIvYXBpL2dhcmJhZ2UtY29sbGVjdGlvbi9zdGFjay1yZWZyZXNoJztcbmltcG9ydCB7IFByb2dyZXNzUHJpbnRlciB9IGZyb20gJy4uLy4uL2xpYi9hcGkvZ2FyYmFnZS1jb2xsZWN0aW9uL3Byb2dyZXNzLXByaW50ZXInO1xuaW1wb3J0IHtcbiAgQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsXG4gIEJhdGNoR2V0SW1hZ2VDb21tYW5kLFxuICBEZXNjcmliZUltYWdlc0NvbW1hbmQsXG4gIExpc3RJbWFnZXNDb21tYW5kLFxuICBQdXRJbWFnZUNvbW1hbmQsXG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3InO1xuXG5sZXQgZ2FyYmFnZUNvbGxlY3RvcjogR2FyYmFnZUNvbGxlY3RvcjtcblxubGV0IHN0ZGVyck1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG5jb25zdCBjZm5DbGllbnQgPSBtb2NrQ2xvdWRGb3JtYXRpb25DbGllbnQ7XG5jb25zdCBzM0NsaWVudCA9IG1vY2tTM0NsaWVudDtcbmNvbnN0IGVjckNsaWVudCA9IG1vY2tFQ1JDbGllbnQ7XG5cbmNvbnN0IERBWSA9IDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIE51bWJlciBvZiBtaWxsaXNlY29uZHMgaW4gYSBkYXlcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIC8vIEJ5IGRlZmF1bHQsIHdlJ2xsIHJldHVybiBhIG5vbi1mb3VuZCB0b29sa2l0IGluZm9cbiAgamVzdC5zcHlPbihUb29sa2l0SW5mbywgJ2xvb2t1cCcpLm1vY2tSZXNvbHZlZFZhbHVlKFRvb2xraXRJbmZvLmJvb3RzdHJhcFN0YWNrTm90Rm91bmRJbmZvKCdHYXJiYWdlU3RhY2snKSk7XG5cbiAgLy8gU3VwcHJlc3Mgc3RkZXJyIHRvIG5vdCBzcGFtIG91dHB1dCBkdXJpbmcgdGVzdHNcbiAgc3RkZXJyTW9jayA9IGplc3Quc3B5T24ocHJvY2Vzcy5zdGRlcnIsICd3cml0ZScpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHByZXBhcmVEZWZhdWx0Q2ZuTW9jaygpO1xuICBwcmVwYXJlRGVmYXVsdFMzTW9jaygpO1xuICBwcmVwYXJlRGVmYXVsdEVjck1vY2soKTtcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBzdGRlcnJNb2NrLm1vY2tSZXNldCgpO1xufSk7XG5cbmZ1bmN0aW9uIG1vY2tUaGVUb29sa2l0SW5mbyhzdGFja1Byb3BzOiBQYXJ0aWFsPFN0YWNrPikge1xuICBqZXN0LnNweU9uKFRvb2xraXRJbmZvLCAnbG9va3VwJykubW9ja1Jlc29sdmVkVmFsdWUoVG9vbGtpdEluZm8uZnJvbVN0YWNrKG1vY2tCb290c3RyYXBTdGFjayhzdGFja1Byb3BzKSkpO1xufVxuXG5mdW5jdGlvbiBnYyhwcm9wczoge1xuICB0eXBlOiAnczMnIHwgJ2VjcicgfCAnYWxsJztcbiAgcm9sbGJhY2tCdWZmZXJEYXlzPzogbnVtYmVyO1xuICBjcmVhdGVkQXRCdWZmZXJEYXlzPzogbnVtYmVyO1xuICBhY3Rpb246ICdmdWxsJyB8ICdwcmludCcgfCAndGFnJyB8ICdkZWxldGUtdGFnZ2VkJztcbn0pOiBHYXJiYWdlQ29sbGVjdG9yIHtcbiAgcmV0dXJuIG5ldyBHYXJiYWdlQ29sbGVjdG9yKHtcbiAgICBzZGtQcm92aWRlcjogbmV3IE1vY2tTZGtQcm92aWRlcigpLFxuICAgIGFjdGlvbjogcHJvcHMuYWN0aW9uLFxuICAgIHJlc29sdmVkRW52aXJvbm1lbnQ6IHtcbiAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgIG5hbWU6ICdtb2NrJyxcbiAgICB9LFxuICAgIGJvb3RzdHJhcFN0YWNrTmFtZTogJ0dhcmJhZ2VTdGFjaycsXG4gICAgcm9sbGJhY2tCdWZmZXJEYXlzOiBwcm9wcy5yb2xsYmFja0J1ZmZlckRheXMgPz8gMCxcbiAgICBjcmVhdGVkQnVmZmVyRGF5czogcHJvcHMuY3JlYXRlZEF0QnVmZmVyRGF5cyA/PyAwLFxuICAgIHR5cGU6IHByb3BzLnR5cGUsXG4gICAgY29uZmlybTogZmFsc2UsXG4gIH0pO1xufVxuXG5kZXNjcmliZSgnUzMgR2FyYmFnZSBDb2xsZWN0aW9uJywgKCkgPT4ge1xuICB0ZXN0KCdyb2xsYmFja0J1ZmZlckRheXMgPSAwIC0tIGFzc2V0cyB0byBiZSBkZWxldGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyBubyB0YWdnaW5nXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG5cbiAgICAvLyBhc3NldHMgYXJlIHRvIGJlIGRlbGV0ZWRcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIHtcbiAgICAgIEJ1Y2tldDogJ0JVQ0tFVF9OQU1FJyxcbiAgICAgIERlbGV0ZToge1xuICAgICAgICBPYmplY3RzOiBbXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDEnIH0sXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDInIH0sXG4gICAgICAgICAgeyBLZXk6ICdhc3NldDMnIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFF1aWV0OiB0cnVlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgncm9sbGJhY2tCdWZmZXJEYXlzID4gMCAtLSBhc3NldHMgdG8gYmUgdGFnZ2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyBhc3NldHMgdGFnZ2VkXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMyk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMik7XG5cbiAgICAvLyBubyBkZWxldGluZ1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVkQXRCdWZmZXJEYXlzID4gMCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnczMnLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAwLFxuICAgICAgY3JlYXRlZEF0QnVmZmVyRGF5czogNSxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChEZWxldGVPYmplY3RzQ29tbWFuZCwge1xuICAgICAgQnVja2V0OiAnQlVDS0VUX05BTUUnLFxuICAgICAgRGVsZXRlOiB7XG4gICAgICAgIE9iamVjdHM6IFtcbiAgICAgICAgICAvLyBhc3NldDEgbm90IGRlbGV0ZWQgYmVjYXVzZSBpdCBpcyB0b28geW91bmdcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MicgfSxcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MycgfSxcbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdhY3Rpb24gPSBwcmludCAtLSBkb2VzIG5vdCB0YWcgb3IgZGVsZXRlJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdwcmludCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gZ2V0IHRhZ3MsIGJ1dCBkb250IHB1dCB0YWdzXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMyk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgMCk7XG5cbiAgICAvLyBubyBkZWxldGluZ1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoRGVsZXRlT2JqZWN0c0NvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdhY3Rpb24gPSB0YWcgLS0gZG9lcyBub3QgZGVsZXRlJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICd0YWcnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RPYmplY3RzVjJDb21tYW5kLCAyKTtcblxuICAgIC8vIHRhZ3Mgb2JqZWN0c1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDMpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIDIpOyAvLyBvbmUgb2JqZWN0IGFscmVhZHkgaGFzIHRoZSB0YWdcblxuICAgIC8vIG5vIGRlbGV0aW5nXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhEZWxldGVPYmplY3RzQ29tbWFuZCwgMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FjdGlvbiA9IGRlbGV0ZS10YWdnZWQgLS0gZG9lcyBub3QgdGFnJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdkZWxldGUtdGFnZ2VkJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyBnZXQgdGFncywgYnV0IGRvbnQgcHV0IHRhZ3NcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLCAzKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLCAwKTtcbiAgfSk7XG5cbiAgdGVzdCgnaWdub3JlIG9iamVjdHMgdGhhdCBhcmUgbW9kaWZpZWQgYWZ0ZXIgZ2Mgc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBzM0NsaWVudC5vbihMaXN0T2JqZWN0c1YyQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgQ29udGVudHM6IFtcbiAgICAgICAgeyBLZXk6ICdhc3NldDEnLCBMYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKDApIH0sXG4gICAgICAgIHsgS2V5OiAnYXNzZXQyJywgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZSgwKSB9LFxuICAgICAgICB7IEtleTogJ2Fzc2V0MycsIExhc3RNb2RpZmllZDogbmV3IERhdGUobmV3IERhdGUoKS5zZXRGdWxsWWVhcihuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgKyAxKSkgfSwgLy8gZnV0dXJlIGRhdGUgaWdub3JlZCBldmVyeXdoZXJlXG4gICAgICBdLFxuICAgICAgS2V5Q291bnQ6IDMsXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ3MzJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIC8vIGFzc2V0cyBhcmUgdG8gYmUgZGVsZXRlZFxuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChEZWxldGVPYmplY3RzQ29tbWFuZCwge1xuICAgICAgQnVja2V0OiAnQlVDS0VUX05BTUUnLFxuICAgICAgRGVsZXRlOiB7XG4gICAgICAgIE9iamVjdHM6IFtcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MScgfSxcbiAgICAgICAgICB7IEtleTogJ2Fzc2V0MicgfSxcbiAgICAgICAgICAvLyBubyBhc3NldDNcbiAgICAgICAgXSxcbiAgICAgICAgUXVpZXQ6IHRydWUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnRUNSIEdhcmJhZ2UgQ29sbGVjdGlvbicsICgpID0+IHtcbiAgdGVzdCgncm9sbGJhY2tCdWZmZXJEYXlzID0gMCAtLSBhc3NldHMgdG8gYmUgZGVsZXRlZCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKERlc2NyaWJlSW1hZ2VzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdEltYWdlc0NvbW1hbmQsIDIpO1xuXG4gICAgLy8gbm8gdGFnZ2luZ1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dEltYWdlQ29tbWFuZCwgMCk7XG5cbiAgICAvLyBhc3NldHMgYXJlIHRvIGJlIGRlbGV0ZWRcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBpbWFnZUlkczogW1xuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycgfSxcbiAgICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdyb2xsYmFja0J1ZmZlckRheXMgPiAwIC0tIGFzc2V0cyB0byBiZSB0YWdnZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICAvLyBhc3NldHMgdGFnZ2VkXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0SW1hZ2VDb21tYW5kLCAyKTtcblxuICAgIC8vIG5vIGRlbGV0aW5nXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdjcmVhdGVkQXRCdWZmZXJEYXlzID4gMCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGNyZWF0ZWRBdEJ1ZmZlckRheXM6IDUsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRXaXRoKEJhdGNoRGVsZXRlSW1hZ2VDb21tYW5kLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBpbWFnZUlkczogW1xuICAgICAgICAvLyBkaWdlc3QzIGlzIHRvbyB5b3VuZyB0byBiZSBkZWxldGVkXG4gICAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnYWN0aW9uID0gcHJpbnQgLS0gZG9lcyBub3QgdGFnIG9yIGRlbGV0ZScsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMyxcbiAgICAgIGFjdGlvbjogJ3ByaW50JyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG5cbiAgICAvLyBkb250IHB1dCB0YWdzXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoUHV0SW1hZ2VDb21tYW5kLCAwKTtcblxuICAgIC8vIG5vIGRlbGV0aW5nXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdhY3Rpb24gPSB0YWcgLS0gZG9lcyBub3QgZGVsZXRlJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdlY3InLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAndGFnJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG5cbiAgICAvLyB0YWdzIG9iamVjdHNcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRJbWFnZUNvbW1hbmQsIDIpO1xuXG4gICAgLy8gbm8gZGVsZXRpbmdcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCwgMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2FjdGlvbiA9IGRlbGV0ZS10YWdnZWQgLS0gZG9lcyBub3QgdGFnJywgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdlY3InLFxuICAgICAgcm9sbGJhY2tCdWZmZXJEYXlzOiAzLFxuICAgICAgYWN0aW9uOiAnZGVsZXRlLXRhZ2dlZCcsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuXG4gICAgLy8gZG9udCBwdXQgdGFnc1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dEltYWdlQ29tbWFuZCwgMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZSBpbWFnZXMgdGhhdCBhcmUgbW9kaWZpZWQgYWZ0ZXIgZ2Mgc3RhcnQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBwcmVwYXJlRGVmYXVsdEVjck1vY2soKTtcbiAgICBlY3JDbGllbnQub24oRGVzY3JpYmVJbWFnZXNDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBpbWFnZURldGFpbHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGltYWdlRGlnZXN0OiAnZGlnZXN0MycsXG4gICAgICAgICAgaW1hZ2VUYWdzOiBbJ2tsbW5vJ10sXG4gICAgICAgICAgaW1hZ2VQdXNoZWRBdDogZGF5c0luVGhlUGFzdCgyKSxcbiAgICAgICAgICBpbWFnZVNpemVJbkJ5dGVzOiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInLFxuICAgICAgICAgIGltYWdlVGFnczogWydmZ2hpaiddLFxuICAgICAgICAgIGltYWdlUHVzaGVkQXQ6IHllYXJzSW5UaGVGdXR1cmUoMSksXG4gICAgICAgICAgaW1hZ2VTaXplSW5CeXRlczogMzAwXzAwMF8wMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnLFxuICAgICAgICAgIGltYWdlVGFnczogWydhYmNkZSddLFxuICAgICAgICAgIGltYWdlUHVzaGVkQXQ6IGRheXNJblRoZVBhc3QoMTAwKSxcbiAgICAgICAgICBpbWFnZVNpemVJbkJ5dGVzOiAxXzAwMF8wMDBfMDAwLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcmVwYXJlRGVmYXVsdENmbk1vY2soKTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIC8vIGFzc2V0cyBhcmUgdG8gYmUgZGVsZXRlZFxuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoQmF0Y2hEZWxldGVJbWFnZUNvbW1hbmQsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiAnUkVQT19OQU1FJyxcbiAgICAgIGltYWdlSWRzOiBbXG4gICAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QzJyB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3VjY2VlZHMgd2hlbiBubyBpbWFnZXMgYXJlIHByZXNlbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBwcmVwYXJlRGVmYXVsdEVjck1vY2soKTtcbiAgICBlY3JDbGllbnQub24oTGlzdEltYWdlc0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgIGltYWdlSWRzOiBbXSxcbiAgICB9KTtcblxuICAgIGdhcmJhZ2VDb2xsZWN0b3IgPSBnYyh7XG4gICAgICB0eXBlOiAnZWNyJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuXG4gICAgLy8gc3VjY2VlZHMgd2l0aG91dCBoYW5naW5nXG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuICB9KTtcblxuICB0ZXN0KCd0YWdzIGFyZSB1bmlxdWUnLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICd0YWcnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcblxuICAgIC8vIHRhZ3Mgb2JqZWN0c1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dEltYWdlQ29tbWFuZCwgMik7XG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChQdXRJbWFnZUNvbW1hbmQsIHtcbiAgICAgIHJlcG9zaXRvcnlOYW1lOiAnUkVQT19OQU1FJyxcbiAgICAgIGltYWdlRGlnZXN0OiAnZGlnZXN0MycsXG4gICAgICBpbWFnZU1hbmlmZXN0OiBleHBlY3QuYW55KFN0cmluZyksXG4gICAgICBpbWFnZVRhZzogZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoYDAtJHtFQ1JfSVNPTEFURURfVEFHfWApLFxuICAgIH0pO1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFdpdGgoUHV0SW1hZ2VDb21tYW5kLCB7XG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInLFxuICAgICAgaW1hZ2VNYW5pZmVzdDogZXhwZWN0LmFueShTdHJpbmcpLFxuICAgICAgaW1hZ2VUYWc6IGV4cGVjdC5zdHJpbmdDb250YWluaW5nKGAxLSR7RUNSX0lTT0xBVEVEX1RBR31gKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbGlzdEltYWdlc0NvbW1hbmQgcmV0dXJucyBuZXh0VG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gVGhpcyB0ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBnYXJiYWdlIGNvbGxlY3RvciBjYW4gaGFuZGxlIHBhZ2luYXRlZCByZXNwb25zZXMgZnJvbSB0aGUgRUNSIEFQSVxuICAgIC8vIElmIG5vdCBoYW5kbGVkIGNvcnJlY3RseSwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHdpbGwgY29udGludWUgdG8gbWFrZSByZXF1ZXN0cyB0byB0aGUgRUNSIEFQSVxuICAgIG1vY2tUaGVUb29sa2l0SW5mbyh7XG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgcHJlcGFyZURlZmF1bHRFY3JNb2NrKCk7XG4gICAgZWNyQ2xpZW50Lm9uKExpc3RJbWFnZXNDb21tYW5kKS5yZXNvbHZlcyh7IC8vIGRlZmF1bHQgcmVzcG9uc2VcbiAgICAgIGltYWdlSWRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnLFxuICAgICAgICAgIGltYWdlVGFnOiAnYWJjZGUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyxcbiAgICAgICAgICBpbWFnZVRhZzogJ2ZnaGlqJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBuZXh0VG9rZW46ICduZXh0VG9rZW4nLFxuICAgIH0pLm9uKExpc3RJbWFnZXNDb21tYW5kLCB7IC8vIHJlc3BvbnNlIHdoZW4gbmV4dFRva2VuIGlzIHByb3ZpZGVkXG4gICAgICByZXBvc2l0b3J5TmFtZTogJ1JFUE9fTkFNRScsXG4gICAgICBuZXh0VG9rZW46ICduZXh0VG9rZW4nLFxuICAgIH0pLnJlc29sdmVzKHtcbiAgICAgIGltYWdlSWRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDMnLFxuICAgICAgICAgIGltYWdlVGFnOiAna2xtbm8nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBlY3JDbGllbnQub24oQmF0Y2hHZXRJbWFnZUNvbW1hbmQpLnJlc29sdmVzT25jZSh7XG4gICAgICBpbWFnZXM6IFtcbiAgICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MScgfSB9LFxuICAgICAgICB7IGltYWdlSWQ6IHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QyJyB9IH0sXG4gICAgICBdLFxuICAgIH0pLnJlc29sdmVzT25jZSh7XG4gICAgICBpbWFnZXM6IFtcbiAgICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycgfSB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBlY3JDbGllbnQub24oRGVzY3JpYmVJbWFnZXNDb21tYW5kKS5yZXNvbHZlc09uY2Uoe1xuICAgICAgaW1hZ2VEZXRhaWxzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbWFnZURpZ2VzdDogJ2RpZ2VzdDEnLFxuICAgICAgICAgIGltYWdlVGFnczogWydhYmNkZSddLFxuICAgICAgICAgIGltYWdlUHVzaGVkQXQ6IGRheXNJblRoZVBhc3QoMTAwKSxcbiAgICAgICAgICBpbWFnZVNpemVJbkJ5dGVzOiAxXzAwMF8wMDBfMDAwLFxuICAgICAgICB9LFxuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MicsIGltYWdlVGFnczogWydmZ2hpaiddLCBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDEwKSwgaW1hZ2VTaXplSW5CeXRlczogMzAwXzAwMF8wMDAgfSxcbiAgICAgIF0sXG4gICAgfSkucmVzb2x2ZXNPbmNlKHtcbiAgICAgIGltYWdlRGV0YWlsczogW1xuICAgICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycsIGltYWdlVGFnczogWydrbG1ubyddLCBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDIpLCBpbWFnZVNpemVJbkJ5dGVzOiAxMDAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgcHJlcGFyZURlZmF1bHRDZm5Nb2NrKCk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ2VjcicsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDAsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhEZXNjcmliZUltYWdlc0NvbW1hbmQsIDIpO1xuICAgIGV4cGVjdChlY3JDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RJbWFnZXNDb21tYW5kLCA0KTtcblxuICAgIC8vIG5vIHRhZ2dpbmdcbiAgICBleHBlY3QoZWNyQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRJbWFnZUNvbW1hbmQsIDApO1xuXG4gICAgZXhwZWN0KGVjckNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChCYXRjaERlbGV0ZUltYWdlQ29tbWFuZCwge1xuICAgICAgcmVwb3NpdG9yeU5hbWU6ICdSRVBPX05BTUUnLFxuICAgICAgaW1hZ2VJZHM6IFtcbiAgICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInIH0sXG4gICAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QzJyB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0Nsb3VkRm9ybWF0aW9uIEFQSSBjYWxscycsICgpID0+IHtcbiAgdGVzdCgnYm9vdHN0cmFwIGZpbHRlcnMgb3V0IG90aGVyIGJvb3RzdHJhcCB2ZXJzaW9ucycsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgUGFyYW1ldGVyczogW3tcbiAgICAgICAgUGFyYW1ldGVyS2V5OiAnUXVhbGlmaWVyJyxcbiAgICAgICAgUGFyYW1ldGVyVmFsdWU6ICd6enp6enonLFxuICAgICAgfV0sXG4gICAgICBPdXRwdXRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBPdXRwdXRLZXk6ICdCb290c3RyYXBWZXJzaW9uJyxcbiAgICAgICAgICBPdXRwdXRWYWx1ZTogJzk5OScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDMsXG4gICAgICBhY3Rpb246ICdmdWxsJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kLCAyKTtcbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhHZXRUZW1wbGF0ZUNvbW1hbmQsIDApO1xuICB9KTtcblxuICB0ZXN0KCdwYXJhbWV0ZXIgaGFzaGVzIGFyZSBpbmNsdWRlZCcsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNmbkNsaWVudC5vbihHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBQYXJhbWV0ZXJzOiBbe1xuICAgICAgICBQYXJhbWV0ZXJLZXk6ICdBc3NldFBhcmFtZXRlcnNhc3NldDEnLFxuICAgICAgICBEZWZhdWx0VmFsdWU6ICdhc3NldDEnLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ3MzJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMCxcbiAgICAgIGFjdGlvbjogJ2Z1bGwnLFxuICAgIH0pO1xuICAgIGF3YWl0IGdhcmJhZ2VDb2xsZWN0b3IuZ2FyYmFnZUNvbGxlY3QoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAxKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RPYmplY3RzVjJDb21tYW5kLCAyKTtcblxuICAgIC8vIG5vIHRhZ2dpbmdcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLCAwKTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKFB1dE9iamVjdFRhZ2dpbmdDb21tYW5kLCAwKTtcblxuICAgIC8vIGFzc2V0cyBhcmUgdG8gYmUgZGVsZXRlZFxuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kV2l0aChEZWxldGVPYmplY3RzQ29tbWFuZCwge1xuICAgICAgQnVja2V0OiAnQlVDS0VUX05BTUUnLFxuICAgICAgRGVsZXRlOiB7XG4gICAgICAgIE9iamVjdHM6IFtcbiAgICAgICAgICAvLyBubyAnYXNzZXQxJ1xuICAgICAgICAgIHsgS2V5OiAnYXNzZXQyJyB9LFxuICAgICAgICAgIHsgS2V5OiAnYXNzZXQzJyB9LFxuICAgICAgICBdLFxuICAgICAgICBRdWlldDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIHByZXBhcmVEZWZhdWx0Q2ZuTW9jaygpIHtcbiAgY29uc3QgY2xpZW50ID0gY2ZuQ2xpZW50O1xuICBjbGllbnQucmVzZXQoKTtcblxuICBjbGllbnQub24oTGlzdFN0YWNrc0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBTdGFja1N1bW1hcmllczogW1xuICAgICAgeyBTdGFja05hbWU6ICdTdGFjazEnLCBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSB9LFxuICAgICAgeyBTdGFja05hbWU6ICdTdGFjazInLCBTdGFja1N0YXR1czogJ1VQREFURV9DT01QTEVURScsIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGNsaWVudC5vbihHZXRUZW1wbGF0ZVN1bW1hcnlDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgUGFyYW1ldGVyczogW3tcbiAgICAgIFBhcmFtZXRlcktleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgRGVmYXVsdFZhbHVlOiAnL2Nkay1ib290c3RyYXAvYWJjZGUvdmVyc2lvbicsXG4gICAgfV0sXG4gIH0pO1xuXG4gIGNsaWVudC5vbihHZXRUZW1wbGF0ZUNvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBUZW1wbGF0ZUJvZHk6ICdhYmNkZScsXG4gIH0pO1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVEZWZhdWx0UzNNb2NrKCkge1xuICBjb25zdCBjbGllbnQgPSBzM0NsaWVudDtcbiAgY2xpZW50LnJlc2V0KCk7XG5cbiAgY2xpZW50Lm9uKExpc3RPYmplY3RzVjJDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgQ29udGVudHM6IFtcbiAgICAgIHsgS2V5OiAnYXNzZXQxJywgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZShEYXRlLm5vdygpIC0gKDIgKiBEQVkpKSB9LFxuICAgICAgeyBLZXk6ICdhc3NldDInLCBMYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAoMTAgKiBEQVkpKSB9LFxuICAgICAgeyBLZXk6ICdhc3NldDMnLCBMYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKERhdGUubm93KCkgLSAoMTAwICogREFZKSkgfSxcbiAgICBdLFxuICAgIEtleUNvdW50OiAzLFxuICB9KTtcblxuICBjbGllbnQub24oR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQpLmNhbGxzRmFrZSgocGFyYW1zKSA9PiAoe1xuICAgIFRhZ1NldDogcGFyYW1zLktleSA9PT0gJ2Fzc2V0MicgPyBbeyBLZXk6IFMzX0lTT0xBVEVEX1RBRywgVmFsdWU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9XSA6IFtdLFxuICB9KSk7XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRFY3JNb2NrKCkge1xuICBjb25zdCBjbGllbnQgPSBlY3JDbGllbnQ7XG4gIGNsaWVudC5yZXNldCgpO1xuXG4gIGNsaWVudC5vbihCYXRjaEdldEltYWdlQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIGltYWdlczogW1xuICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MScgfSB9LFxuICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MicgfSB9LFxuICAgICAgeyBpbWFnZUlkOiB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycgfSB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGNsaWVudC5vbihEZXNjcmliZUltYWdlc0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICBpbWFnZURldGFpbHM6IFtcbiAgICAgIHsgaW1hZ2VEaWdlc3Q6ICdkaWdlc3QzJywgaW1hZ2VUYWdzOiBbJ2tsbW5vJ10sIGltYWdlUHVzaGVkQXQ6IGRheXNJblRoZVBhc3QoMiksIGltYWdlU2l6ZUluQnl0ZXM6IDEwMCB9LFxuICAgICAgeyBpbWFnZURpZ2VzdDogJ2RpZ2VzdDInLCBpbWFnZVRhZ3M6IFsnZmdoaWonXSwgaW1hZ2VQdXNoZWRBdDogZGF5c0luVGhlUGFzdCgxMCksIGltYWdlU2l6ZUluQnl0ZXM6IDMwMF8wMDBfMDAwIH0sXG4gICAgICB7XG4gICAgICAgIGltYWdlRGlnZXN0OiAnZGlnZXN0MScsXG4gICAgICAgIGltYWdlVGFnczogWydhYmNkZSddLFxuICAgICAgICBpbWFnZVB1c2hlZEF0OiBkYXlzSW5UaGVQYXN0KDEwMCksXG4gICAgICAgIGltYWdlU2l6ZUluQnl0ZXM6IDFfMDAwXzAwMF8wMDAsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuXG4gIGNsaWVudC5vbihMaXN0SW1hZ2VzQ29tbWFuZCkucmVzb2x2ZXMoe1xuICAgIGltYWdlSWRzOiBbXG4gICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MScsIGltYWdlVGFnOiAnYWJjZGUnIH0sIC8vIGludXNlXG4gICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MicsIGltYWdlVGFnOiAnZmdoaWonIH0sXG4gICAgICB7IGltYWdlRGlnZXN0OiAnZGlnZXN0MycsIGltYWdlVGFnOiAna2xtbm8nIH0sXG4gICAgXSxcbiAgfSk7XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZGVzY3JpYmUoJ0dhcmJhZ2UgQ29sbGVjdGlvbiB3aXRoIGxhcmdlICMgb2Ygb2JqZWN0cycsICgpID0+IHtcbiAgY29uc3Qga2V5Q291bnQgPSAxMDAwMDtcblxuICB0ZXN0KCd0YWcgb25seScsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrVGhlVG9vbGtpdEluZm8oe1xuICAgICAgT3V0cHV0czogW1xuICAgICAgICB7XG4gICAgICAgICAgT3V0cHV0S2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgICAgT3V0cHV0VmFsdWU6ICc5OTknLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIG1vY2tDbGllbnRzRm9yTGFyZ2VPYmplY3RzKCk7XG5cbiAgICBnYXJiYWdlQ29sbGVjdG9yID0gZ2Moe1xuICAgICAgdHlwZTogJ3MzJyxcbiAgICAgIHJvbGxiYWNrQnVmZmVyRGF5czogMSxcbiAgICAgIGFjdGlvbjogJ3RhZycsXG4gICAgfSk7XG4gICAgYXdhaXQgZ2FyYmFnZUNvbGxlY3Rvci5nYXJiYWdlQ29sbGVjdCgpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdE9iamVjdHNWMkNvbW1hbmQsIDIpO1xuXG4gICAgLy8gdGFnZ2luZyBpcyBwZXJmb3JtZWRcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kLCBrZXlDb3VudCk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhEZWxldGVPYmplY3RUYWdnaW5nQ29tbWFuZCwgMTAwMCk7IC8vIDEwMDAgaW4gdXNlIGFzc2V0cyBhcmUgZXJyb25lb3VzbHkgdGFnZ2VkXG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhQdXRPYmplY3RUYWdnaW5nQ29tbWFuZCwgNTAwMCk7IC8vIDgwMDAtNDAwMCBhc3NldHMgbmVlZCB0byBiZSB0YWdnZWQsICsgMTAwMCAoc2luY2UgdW50YWcgYWxzbyBjYWxscyB0aGlzKVxuICB9KTtcblxuICB0ZXN0KCdkZWxldGUtdGFnZ2VkIG9ubHknLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1RoZVRvb2xraXRJbmZvKHtcbiAgICAgIE91dHB1dHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIE91dHB1dEtleTogJ0Jvb3RzdHJhcFZlcnNpb24nLFxuICAgICAgICAgIE91dHB1dFZhbHVlOiAnOTk5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBtb2NrQ2xpZW50c0ZvckxhcmdlT2JqZWN0cygpO1xuXG4gICAgZ2FyYmFnZUNvbGxlY3RvciA9IGdjKHtcbiAgICAgIHR5cGU6ICdzMycsXG4gICAgICByb2xsYmFja0J1ZmZlckRheXM6IDEsXG4gICAgICBhY3Rpb246ICdkZWxldGUtdGFnZ2VkJyxcbiAgICB9KTtcbiAgICBhd2FpdCBnYXJiYWdlQ29sbGVjdG9yLmdhcmJhZ2VDb2xsZWN0KCk7XG5cbiAgICBleHBlY3QoY2ZuQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0U3RhY2tzQ29tbWFuZCwgMSk7XG4gICAgZXhwZWN0KHMzQ2xpZW50KS50b0hhdmVSZWNlaXZlZENvbW1hbmRUaW1lcyhMaXN0T2JqZWN0c1YyQ29tbWFuZCwgMik7XG5cbiAgICAvLyBkZWxldGUgcHJldmlvdXNseSB0YWdnZWQgb2JqZWN0c1xuICAgIGV4cGVjdChzM0NsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoR2V0T2JqZWN0VGFnZ2luZ0NvbW1hbmQsIGtleUNvdW50KTtcbiAgICBleHBlY3QoczNDbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKERlbGV0ZU9iamVjdHNDb21tYW5kLCA0KTsgLy8gNDAwMCBpc29sYXRlZCBhc3NldHMgYXJlIGFscmVhZHkgdGFnZ2VkLCBkZWxldGVkIGluIGJhdGNoZXMgb2YgMTAwMFxuICB9KTtcblxuICBmdW5jdGlvbiBtb2NrQ2xpZW50c0ZvckxhcmdlT2JqZWN0cygpIHtcbiAgICBjZm5DbGllbnQub24oTGlzdFN0YWNrc0NvbW1hbmQpLnJlc29sdmVzKHtcbiAgICAgIFN0YWNrU3VtbWFyaWVzOiBbXG4gICAgICAgIHsgU3RhY2tOYW1lOiAnU3RhY2sxJywgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLCBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCkgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjZm5DbGllbnQub24oR2V0VGVtcGxhdGVTdW1tYXJ5Q29tbWFuZCkucmVzb2x2ZXMoe1xuICAgICAgUGFyYW1ldGVyczogW3tcbiAgICAgICAgUGFyYW1ldGVyS2V5OiAnQm9vdHN0cmFwVmVyc2lvbicsXG4gICAgICAgIERlZmF1bHRWYWx1ZTogJy9jZGstYm9vdHN0cmFwL2FiY2RlL3ZlcnNpb24nLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgZXZlcnkgNXRoIGFzc2V0IGhhc2ggdG8gdGhlIG1vY2sgdGVtcGxhdGUgYm9keTogODAwMCBhc3NldHMgYXJlIGlzb2xhdGVkXG4gICAgY29uc3QgbW9ja1RlbXBsYXRlQm9keSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5Q291bnQ7IGkrPTUpIHtcbiAgICAgIG1vY2tUZW1wbGF0ZUJvZHkucHVzaChgYXNzZXQke2l9aGFzaGApO1xuICAgIH1cbiAgICBjZm5DbGllbnQub24oR2V0VGVtcGxhdGVDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBUZW1wbGF0ZUJvZHk6IG1vY2tUZW1wbGF0ZUJvZHkuam9pbignLScpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29udGVudHM6IHsgS2V5OiBzdHJpbmc7IExhc3RNb2RpZmllZDogRGF0ZSB9W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleUNvdW50OyBpKyspIHtcbiAgICAgIGNvbnRlbnRzLnB1c2goe1xuICAgICAgICBLZXk6IGBhc3NldCR7aX1oYXNoYCxcbiAgICAgICAgTGFzdE1vZGlmaWVkOiBuZXcgRGF0ZSgwKSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHMzQ2xpZW50Lm9uKExpc3RPYmplY3RzVjJDb21tYW5kKS5yZXNvbHZlcyh7XG4gICAgICBDb250ZW50czogY29udGVudHMsXG4gICAgICBLZXlDb3VudDoga2V5Q291bnQsXG4gICAgfSk7XG5cbiAgICAvLyBldmVyeSBvdGhlciBvYmplY3QgaGFzIHRoZSBpc29sYXRlZCB0YWc6IG9mIHRoZSA4MDAwIGlzb2xhdGVkIGFzc2V0cywgNDAwMCBhbHJlYWR5IGFyZSB0YWdnZWQuXG4gICAgLy8gb2YgdGhlIDIwMDAgaW4gdXNlIGFzc2V0cywgMTAwMCBhcmUgdGFnZ2VkLlxuICAgIHMzQ2xpZW50Lm9uKEdldE9iamVjdFRhZ2dpbmdDb21tYW5kKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gKHtcbiAgICAgIFRhZ1NldDogTnVtYmVyKHBhcmFtcy5LZXlbcGFyYW1zLktleS5sZW5ndGggLSA1XSkgJSAyID09PSAwXG4gICAgICAgID8gW3sgS2V5OiBTM19JU09MQVRFRF9UQUcsIFZhbHVlOiBuZXcgRGF0ZSgyMDAwLCAxLCAxKS50b0lTT1N0cmluZygpIH1dXG4gICAgICAgIDogW10sXG4gICAgfSkpO1xuICB9XG59KTtcblxuZGVzY3JpYmUoJ0JhY2tncm91bmRTdGFja1JlZnJlc2gnLCAoKSA9PiB7XG4gIGxldCBiYWNrZ3JvdW5kUmVmcmVzaDogQmFja2dyb3VuZFN0YWNrUmVmcmVzaDtcbiAgbGV0IHJlZnJlc2hQcm9wczogQmFja2dyb3VuZFN0YWNrUmVmcmVzaFByb3BzO1xuICBsZXQgc2V0VGltZW91dFNweTogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LnVzZUZha2VUaW1lcnMoKTtcbiAgICBzZXRUaW1lb3V0U3B5ID0gamVzdC5zcHlPbihnbG9iYWwsICdzZXRUaW1lb3V0Jyk7XG5cbiAgICBjb25zdCBmb28gPSBuZXcgTW9ja1NkaygpO1xuXG4gICAgcmVmcmVzaFByb3BzID0ge1xuICAgICAgY2ZuOiBmb28uY2xvdWRGb3JtYXRpb24oKSxcbiAgICAgIGFjdGl2ZUFzc2V0czogbmV3IEFjdGl2ZUFzc2V0Q2FjaGUoKSxcbiAgICB9O1xuXG4gICAgYmFja2dyb3VuZFJlZnJlc2ggPSBuZXcgQmFja2dyb3VuZFN0YWNrUmVmcmVzaChyZWZyZXNoUHJvcHMpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxUaW1lcnMoKTtcbiAgICBzZXRUaW1lb3V0U3B5Lm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCBzdGFydCBhZnRlciBhIGRlbGF5JywgKCkgPT4ge1xuICAgIHZvaWQgYmFja2dyb3VuZFJlZnJlc2guc3RhcnQoKTtcbiAgICBleHBlY3Qoc2V0VGltZW91dFNweSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChzZXRUaW1lb3V0U3B5KS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoZXhwZWN0LmFueShGdW5jdGlvbiksIDMwMDAwMCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCByZWZyZXNoIHN0YWNrcyBhbmQgc2NoZWR1bGUgbmV4dCByZWZyZXNoJywgYXN5bmMgKCkgPT4ge1xuICAgIHZvaWQgYmFja2dyb3VuZFJlZnJlc2guc3RhcnQoKTtcblxuICAgIC8vIFJ1biB0aGUgZmlyc3QgdGltZXIgKHdoaWNoIHNob3VsZCB0cmlnZ2VyIHRoZSBmaXJzdCByZWZyZXNoKVxuICAgIGF3YWl0IGplc3QucnVuT25seVBlbmRpbmdUaW1lcnNBc3luYygpO1xuXG4gICAgZXhwZWN0KGNmbkNsaWVudCkudG9IYXZlUmVjZWl2ZWRDb21tYW5kVGltZXMoTGlzdFN0YWNrc0NvbW1hbmQsIDEpO1xuXG4gICAgZXhwZWN0KHNldFRpbWVvdXRTcHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTsgLy8gT25jZSBmb3Igc3RhcnQsIG9uY2UgZm9yIG5leHQgcmVmcmVzaFxuICAgIGV4cGVjdChzZXRUaW1lb3V0U3B5KS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoZXhwZWN0LmFueShGdW5jdGlvbiksIDMwMDAwMCk7XG5cbiAgICAvLyBSdW4gdGhlIGZpcnN0IHRpbWVyICh3aGljaCB0cmlnZ2VycyB0aGUgZmlyc3QgcmVmcmVzaClcbiAgICBhd2FpdCBqZXN0LnJ1bk9ubHlQZW5kaW5nVGltZXJzQXN5bmMoKTtcblxuICAgIGV4cGVjdChjZm5DbGllbnQpLnRvSGF2ZVJlY2VpdmVkQ29tbWFuZFRpbWVzKExpc3RTdGFja3NDb21tYW5kLCAyKTtcbiAgICBleHBlY3Qoc2V0VGltZW91dFNweSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpOyAvLyBUd28gcmVmcmVzaGVzIHBsdXMgb25lIG1vcmUgc2NoZWR1bGVkXG4gIH0pO1xuXG4gIHRlc3QoJ3Nob3VsZCB3YWl0IGZvciB0aGUgbmV4dCByZWZyZXNoIGlmIGNhbGxlZCB3aXRoaW4gdGltZSBmcmFtZScsIGFzeW5jICgpID0+IHtcbiAgICB2b2lkIGJhY2tncm91bmRSZWZyZXNoLnN0YXJ0KCk7XG5cbiAgICAvLyBSdW4gdGhlIGZpcnN0IHRpbWVyICh3aGljaCB0cmlnZ2VycyB0aGUgZmlyc3QgcmVmcmVzaClcbiAgICBhd2FpdCBqZXN0LnJ1bk9ubHlQZW5kaW5nVGltZXJzQXN5bmMoKTtcblxuICAgIGNvbnN0IHdhaXRQcm9taXNlID0gYmFja2dyb3VuZFJlZnJlc2gubm9PbGRlclRoYW4oMTgwMDAwKTsgLy8gMyBtaW51dGVzXG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDEyMDAwMCk7IC8vIEFkdmFuY2UgdGltZSBieSAyIG1pbnV0ZXNcblxuICAgIGF3YWl0IGV4cGVjdCh3YWl0UHJvbWlzZSkucmVzb2x2ZXMudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdzaG91bGQgd2FpdCBmb3IgdGhlIG5leHQgcmVmcmVzaCBpZiByZWZyZXNoIGxhbmRzIGJlZm9yZSB0aGUgdGltZW91dCcsIGFzeW5jICgpID0+IHtcbiAgICB2b2lkIGJhY2tncm91bmRSZWZyZXNoLnN0YXJ0KCk7XG5cbiAgICAvLyBSdW4gdGhlIGZpcnN0IHRpbWVyICh3aGljaCB0cmlnZ2VycyB0aGUgZmlyc3QgcmVmcmVzaClcbiAgICBhd2FpdCBqZXN0LnJ1bk9ubHlQZW5kaW5nVGltZXJzQXN5bmMoKTtcbiAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMjQwMDApOyAvLyBBZHZhbmNlIHRpbWUgYnkgNCBtaW51dGVzXG5cbiAgICBjb25zdCB3YWl0UHJvbWlzZSA9IGJhY2tncm91bmRSZWZyZXNoLm5vT2xkZXJUaGFuKDMwMDAwMCk7IC8vIDUgbWludXRlc1xuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgxMjAwMDApOyAvLyBBZHZhbmNlIHRpbWUgYnkgMiBtaW51dGVzLCByZWZyZXNoIHNob3VsZCBmaXJlXG5cbiAgICBhd2FpdCBleHBlY3Qod2FpdFByb21pc2UpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgdGVzdCgnc2hvdWxkIHJlamVjdCBpZiB0aGUgcmVmcmVzaCB0YWtlcyB0b28gbG9uZycsIGFzeW5jICgpID0+IHtcbiAgICB2b2lkIGJhY2tncm91bmRSZWZyZXNoLnN0YXJ0KCk7XG5cbiAgICAvLyBSdW4gdGhlIGZpcnN0IHRpbWVyICh3aGljaCB0cmlnZ2VycyB0aGUgZmlyc3QgcmVmcmVzaClcbiAgICBhd2FpdCBqZXN0LnJ1bk9ubHlQZW5kaW5nVGltZXJzQXN5bmMoKTtcbiAgICBqZXN0LmFkdmFuY2VUaW1lcnNCeVRpbWUoMTIwMDAwKTsgLy8gQWR2YW5jZSB0aW1lIGJ5IDIgbWludXRlc1xuXG4gICAgY29uc3Qgd2FpdFByb21pc2UgPSBiYWNrZ3JvdW5kUmVmcmVzaC5ub09sZGVyVGhhbigwKTsgLy8gMCBzZWNvbmRzXG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDEyMDAwMCk7IC8vIEFkdmFuY2UgdGltZSBieSAyIG1pbnV0ZXNcblxuICAgIGF3YWl0IGV4cGVjdCh3YWl0UHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCdyZWZyZXNoU3RhY2tzIHRvb2sgdG9vIGxvbmc7IHRoZSBiYWNrZ3JvdW5kIHRocmVhZCBsaWtlbHkgdGhyZXcgYW4gZXJyb3InKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ1Byb2dyZXNzUHJpbnRlcicsICgpID0+IHtcbiAgbGV0IHByb2dyZXNzUHJpbnRlcjogUHJvZ3Jlc3NQcmludGVyO1xuICBsZXQgc2V0SW50ZXJ2YWw6IGplc3QuU3B5SW5zdGFuY2U7XG4gIGxldCBjbGVhckludGVydmFsOiBqZXN0LlNweUluc3RhbmNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QudXNlRmFrZVRpbWVycygpO1xuICAgIHNldEludGVydmFsID0gamVzdC5zcHlPbihnbG9iYWwsICdzZXRJbnRlcnZhbCcpO1xuICAgIGNsZWFySW50ZXJ2YWwgPSBqZXN0LnNweU9uKGdsb2JhbCwgJ2NsZWFySW50ZXJ2YWwnKTtcblxuICAgIHByb2dyZXNzUHJpbnRlciA9IG5ldyBQcm9ncmVzc1ByaW50ZXIoMCwgMTAwMCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbFRpbWVycygpO1xuICAgIHNldEludGVydmFsLm1vY2tSZXN0b3JlKCk7XG4gICAgY2xlYXJJbnRlcnZhbC5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICB0ZXN0KCd0aHJvd3MgaWYgc3RhcnQgaXMgY2FsbGVkIHR3aWNlIHdpdGhvdXQgc3RvcCcsICgpID0+IHtcbiAgICBwcm9ncmVzc1ByaW50ZXIuc3RhcnQoKTtcblxuICAgIGV4cGVjdChzZXRJbnRlcnZhbCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdCgoKSA9PiBwcm9ncmVzc1ByaW50ZXIuc3RhcnQoKSkudG9UaHJvdygnUHJvZ3Jlc3NQcmludGVyIGlzIGFscmVhZHkgcnVubmluZy4gU3RvcCBpdCBmaXJzdCB1c2luZyB0aGUgc3RvcCgpIG1ldGhvZCBiZWZvcmUgc3RhcnRpbmcgaXQgYWdhaW4uJyk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGRheXNJblRoZVBhc3QoZGF5czogbnVtYmVyKTogRGF0ZSB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICBkLnNldERhdGUoZC5nZXREYXRlKCkgLSBkYXlzKTtcbiAgcmV0dXJuIGQ7XG59XG5cbmZ1bmN0aW9uIHllYXJzSW5UaGVGdXR1cmUoeWVhcnM6IG51bWJlcik6IERhdGUge1xuICBjb25zdCBkID0gbmV3IERhdGUoKTtcbiAgZC5zZXRGdWxsWWVhcihkLmdldEZ1bGxZZWFyKCkgKyB5ZWFycyk7XG4gIHJldHVybiBkO1xufVxuIl19