@dollhousemcp/mcp-server 1.7.4 → 1.8.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 (59) hide show
  1. package/dist/collection/CollectionBrowser.js +2 -2
  2. package/dist/collection/CollectionSearch.js +3 -3
  3. package/dist/collection/PersonaDetails.js +2 -2
  4. package/dist/config/ConfigManager.d.ts +20 -0
  5. package/dist/config/ConfigManager.d.ts.map +1 -1
  6. package/dist/config/ConfigManager.js +48 -4
  7. package/dist/generated/version.d.ts +2 -2
  8. package/dist/generated/version.js +3 -3
  9. package/dist/handlers/ConfigHandler.d.ts +30 -0
  10. package/dist/handlers/ConfigHandler.d.ts.map +1 -1
  11. package/dist/handlers/ConfigHandler.js +149 -21
  12. package/dist/index.d.ts +4 -6
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +73 -52
  15. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -1
  16. package/dist/portfolio/GitHubPortfolioIndexer.js +8 -5
  17. package/dist/portfolio/PortfolioIndexManager.d.ts +1 -1
  18. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  19. package/dist/portfolio/PortfolioRepoManager.d.ts +16 -2
  20. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -1
  21. package/dist/portfolio/PortfolioRepoManager.js +95 -18
  22. package/dist/portfolio/PortfolioSyncManager.d.ts.map +1 -1
  23. package/dist/portfolio/PortfolioSyncManager.js +23 -15
  24. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  25. package/dist/security/audit/config/suppressions.js +11 -1
  26. package/dist/server/ServerSetup.d.ts.map +1 -1
  27. package/dist/server/ServerSetup.js +11 -6
  28. package/dist/server/tools/CollectionTools.js +6 -6
  29. package/dist/server/tools/ConfigTools.js +2 -2
  30. package/dist/server/tools/ConfigToolsV2.js +5 -5
  31. package/dist/server/tools/PortfolioTools.d.ts.map +1 -1
  32. package/dist/server/tools/PortfolioTools.js +16 -5
  33. package/dist/server/types.d.ts +2 -0
  34. package/dist/server/types.d.ts.map +1 -1
  35. package/dist/server/types.js +1 -1
  36. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -1
  37. package/dist/tools/portfolio/submitToPortfolioTool.js +6 -5
  38. package/package.json +7 -6
  39. package/dist/config/ConfigWizardDisplay.d.ts +0 -64
  40. package/dist/config/ConfigWizardDisplay.d.ts.map +0 -1
  41. package/dist/config/ConfigWizardDisplay.js +0 -150
  42. package/dist/config/WizardFirstResponse.d.ts +0 -25
  43. package/dist/config/WizardFirstResponse.d.ts.map +0 -1
  44. package/dist/config/WizardFirstResponse.js +0 -118
  45. package/dist/scripts/scripts/run-config-wizard.js +0 -57
  46. package/dist/scripts/src/config/ConfigManager.js +0 -799
  47. package/dist/scripts/src/config/ConfigWizard.js +0 -368
  48. package/dist/scripts/src/errors/SecurityError.js +0 -47
  49. package/dist/scripts/src/security/constants.js +0 -28
  50. package/dist/scripts/src/security/contentValidator.js +0 -415
  51. package/dist/scripts/src/security/errors.js +0 -32
  52. package/dist/scripts/src/security/regexValidator.js +0 -217
  53. package/dist/scripts/src/security/secureYamlParser.js +0 -272
  54. package/dist/scripts/src/security/securityMonitor.js +0 -111
  55. package/dist/scripts/src/security/validators/unicodeValidator.js +0 -315
  56. package/dist/scripts/src/utils/logger.js +0 -288
  57. package/dist/tools/getWelcomeMessage.d.ts +0 -41
  58. package/dist/tools/getWelcomeMessage.d.ts.map +0 -1
  59. package/dist/tools/getWelcomeMessage.js +0 -109
@@ -346,10 +346,10 @@ export class CollectionBrowser {
346
346
  // This fixes the mismatch where browse returned "Code Review.md" but file is "code-review.md"
347
347
  const fullPath = item.path || (section + (type ? `/${type}` : '') + `/${item.name}`);
348
348
  const displayName = item.name.replace('.md', '');
349
- textParts.push(` ▫️ **${displayName}**\n`, ` 📥 Install: \`install_content "${fullPath}"\`\n`, ` 👁️ Details: \`get_collection_content "${fullPath}"\`\n\n`);
349
+ textParts.push(` ▫️ **${displayName}**\n`, ` 📥 Install: \`install_collection_content "${fullPath}"\`\n`, ` 👁️ Details: \`get_collection_content "${fullPath}"\`\n\n`);
350
350
  });
351
351
  }
352
352
  return textParts.join('');
353
353
  }
354
354
  }
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9Db2xsZWN0aW9uQnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxxREFBcUQ7QUFDckQsNkNBQTZDO0FBQzdDLDBFQUEwRTtBQUMxRSwrQ0FBK0M7QUFDL0MsZ0ZBQWdGO0FBQ2hGLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsV0FBVyxDQUFDLE9BQU8sRUFBSyx3REFBd0Q7SUFDaEYsV0FBVyxDQUFDLEtBQUssRUFBTyxxQ0FBcUM7SUFDN0QsV0FBVyxDQUFDLEtBQUssRUFBTyx1Q0FBdUM7SUFDL0QsV0FBVyxDQUFDLFFBQVEsQ0FBSSx3Q0FBd0M7Q0FDakUsQ0FBQztBQUVGOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQW9CLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFdBQXdCO0lBQ2xELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLFlBQVksQ0FBeUI7SUFDckMsT0FBTyxH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RUFBRSxDQUFDLENBQUM7Z0JBQ3JGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakQsU0FBUyxDQUFDLElBQUksQ0FDWixXQUFXLFdBQVcsTUFBTSxFQUM1Qix3Q0FBd0MsUUFBUSxPQUFPLEVBQ3ZELGdEQUFnRCxRQUFRLFNBQVMsQ0FDbEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZSBjb2xsZWN0aW9uIGNvbnRlbnQgZnJvbSBHaXRIdWJcbiAqL1xuXG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb25TZWVkZXIgfSBmcm9tICcuL0NvbGxlY3Rpb25TZWVkZXIuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkluZGV4TWFuYWdlciB9IGZyb20gJy4vQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSW5kZXgsIEluZGV4RW50cnkgfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5cbi8vIENvbnRlbnQgdHlwZXMgc3VwcG9ydGVkIGJ5IE1DUCBzZXJ2ZXIgKElzc3VlICMxNDQpXG4vLyBIaWRlOiBtZW1vcmllcywgZW5zZW1ibGVzIGZyb20gTUNQIHF1ZXJpZXNcbi8vIOKaoO+4jyBDUklUSUNBTDogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHlvdSBNVVNUIHVwZGF0ZSB0aGlzIGFycmF5IVxuLy8gQWxzbyB1cGRhdGUgdmFsaWRUeXBlcyBhcnJheSBpbiBzcmMvaW5kZXgudHNcbi8vIFNlZSBkb2NzL2RldmVsb3BtZW50L0FERElOR19ORVdfRUxFTUVOVF9UWVBFU19DSEVDS0xJU1QubWQgZm9yIGNvbXBsZXRlIGd1aWRlXG5jb25zdCBNQ1BfU1VQUE9SVEVEX1RZUEVTID0gW1xuICBFbGVtZW50VHlwZS5QRVJTT05BLCAgICAvLyBwZXJzb25hcyAtIHN1cHBvcnRlZCBieSBQZXJzb25hVG9vbHMgYW5kIEVsZW1lbnRUb29sc1xuICBFbGVtZW50VHlwZS5TS0lMTCwgICAgICAvLyBza2lsbHMgLSBzdXBwb3J0ZWQgYnkgRWxlbWVudFRvb2xzXG4gIEVsZW1lbnRUeXBlLkFHRU5ULCAgICAgIC8vIGFnZW50cyAtIHN1cHBvcnRlZCBieSBFbGVtZW50VG9vbHMgIFxuICBFbGVtZW50VHlwZS5URU1QTEFURSAgICAvLyB0ZW1wbGF0ZXMgLSBzdXBwb3J0ZWQgYnkgRWxlbWVudFRvb2xzXG5dO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gc2FmZWx5IGNoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgRWxlbWVudFR5cGVcbiAqL1xuZnVuY3Rpb24gaXNFbGVtZW50VHlwZSh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRWxlbWVudFR5cGUge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModmFsdWUgYXMgRWxlbWVudFR5cGUpO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gc2FmZWx5IGNoZWNrIGlmIGFuIEVsZW1lbnRUeXBlIGlzIHN1cHBvcnRlZCBieSBNQ1BcbiAqL1xuZnVuY3Rpb24gaXNNQ1BTdXBwb3J0ZWRUeXBlKGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTUNQX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhlbGVtZW50VHlwZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQnJvd3NlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGU7XG4gIHByaXZhdGUgaW5kZXhNYW5hZ2VyOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyO1xuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCwgY29sbGVjdGlvbkNhY2hlPzogQ29sbGVjdGlvbkNhY2hlLCBpbmRleE1hbmFnZXI/OiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5jb2xsZWN0aW9uQ2FjaGUgPSBjb2xsZWN0aW9uQ2FjaGUgfHwgbmV3IENvbGxlY3Rpb25DYWNoZSgpO1xuICAgIHRoaXMuaW5kZXhNYW5hZ2VyID0gaW5kZXhNYW5hZ2VyIHx8IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBCcm93c2UgY29sbGVjdGlvbiBjb250ZW50IGJ5IHNlY3Rpb24gYW5kIHR5cGVcbiAgICogVXNlcyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIGZvciBmYXN0IGJyb3dzaW5nIHdpdGggYmFja2dyb3VuZCByZWZyZXNoXG4gICAqIEZhbGxzIGJhY2sgdG8gY2FjaGVkIGRhdGEgd2hlbiBHaXRIdWIgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3Igbm90IGF1dGhlbnRpY2F0ZWRcbiAgICogQHBhcmFtIHNlY3Rpb24gLSBUb3AgbGV2ZWwgc2VjdGlvbjogbGlicmFyeSwgc2hvd2Nhc2UsIG9yIGNhdGFsb2dcbiAgICogQHBhcmFtIHR5cGUgLSBPcHRpb25hbCBjb250ZW50IHR5cGUgd2l0aGluIHRoZSBsaWJyYXJ5IHNlY3Rpb24gKHBlcnNvbmFzLCBza2lsbHMsIGV0Yy4pXG4gICAqL1xuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB1c2luZyBjb2xsZWN0aW9uIGluZGV4IGZpcnN0IGZvciBmYXN0ZXIgYnJvd3NpbmdcbiAgICAgIGNvbnN0IGluZGV4UmVzdWx0ID0gYXdhaXQgdGhpcy5icm93c2VGcm9tSW5kZXgoc2VjdGlvbiwgdHlwZSk7XG4gICAgICBpZiAoaW5kZXhSZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2VkIGNvbGxlY3Rpb24gaW5kZXggZm9yIGJyb3dzaW5nJyk7XG4gICAgICAgIHJldHVybiBpbmRleFJlc3VsdDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gR2l0SHViIEFQSVxuICAgICAgbGV0IHVybCA9IHRoaXMuYmFzZVVybDtcbiAgICAgIFxuICAgICAgLy8gSWYgbm8gc2VjdGlvbiBwcm92aWRlZCwgc2hvdyB0b3AtbGV2ZWwgc2VjdGlvbnNcbiAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCwgZmFsc2UpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiByZXNwb25zZS4gRXhwZWN0ZWQgZGlyZWN0b3J5IGxpc3RpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEZpbHRlciB0byBvbmx5IHNob3cgY29udGVudCBkaXJlY3Rvcmllc1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IFxuICAgICAgICAgIGl0ZW0udHlwZSA9PT0gJ2RpcicgJiYgWydsaWJyYXJ5JywgJ3Nob3djYXNlJywgJ2NhdGFsb2cnXS5pbmNsdWRlcyhpdGVtLm5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IFtdLCBzZWN0aW9ucyB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCcm93c2Ugd2l0aGluIGEgc2VjdGlvblxuICAgICAgdXJsID0gdHlwZSBcbiAgICAgICAgPyBgJHt0aGlzLmJhc2VVcmx9LyR7c2VjdGlvbn0vJHt0eXBlfWAgXG4gICAgICAgIDogYCR7dGhpcy5iYXNlVXJsfS8ke3NlY3Rpb259YDtcbiAgICAgIFxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2l0aHViQ2xpZW50LmZldGNoRnJvbUdpdEh1Yih1cmwsIGZhbHNlKTtcbiAgICAgIFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHJlc3BvbnNlLiBFeHBlY3RlZCBkaXJlY3RvcnkgbGlzdGluZy4nKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW4gdGhlIGxpYnJhcnkgc2VjdGlvbiwgd2UgaGF2ZSBjb250ZW50IHR5cGUgZGlyZWN0b3JpZXNcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXR5cGUpIHtcbiAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgc2hvdyBNQ1Atc3VwcG9ydGVkIGNvbnRlbnQgdHlwZXNcbiAgICAgICAgY29uc3QgY29udGVudFR5cGVzID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgIT09ICdkaXInKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKGl0ZW0ubmFtZSkgPyBpdGVtLm5hbWUgYXMgRWxlbWVudFR5cGUgOiBudWxsO1xuICAgICAgICAgIHJldHVybiBlbGVtZW50VHlwZSAmJiBpc01DUFN1cHBvcnRlZFR5cGUoZWxlbWVudFR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGxpYnJhcnkgY29udGVudCB0eXBlcywgc2hvdyBmaWxlcyBkaXJlY3RseSAoZmxhdCBzdHJ1Y3R1cmUpXG4gICAgICBjb25zdCBpdGVtcyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGl0ZW0ubmFtZS5lbmRzV2l0aCgnLm1kJykpO1xuICAgICAgLy8gRm9yIG5vbi1saWJyYXJ5IHNlY3Rpb25zLCB0aGV5IG1pZ2h0IHN0aWxsIGhhdmUgc3ViZGlyZWN0b3JpZXNcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBzZWN0aW9uID09PSAnbGlicmFyeScgPyBbXSA6IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtcywgY2F0ZWdvcmllcyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEdpdEh1YiBBUEkgYnJvd3NlIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgXG4gICAgICAvLyBGYWxsYmFjayB0byBjYWNoZWQgZGF0YVxuICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlRnJvbUNhY2hlKHNlY3Rpb24sIHR5cGUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBmYXN0IGNvbGxlY3Rpb24gaW5kZXhcbiAgICogUmV0dXJucyBudWxsIGlmIGluZGV4IGlzIG5vdCBhdmFpbGFibGUgb3IgYnJvd3NpbmcgZmFpbHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYnJvd3NlRnJvbUluZGV4KHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuaW5kZXhNYW5hZ2VyLmdldEluZGV4KCk7XG4gICAgICBcbiAgICAgIC8vIElmIG5vIHNlY3Rpb24gcHJvdmlkZWQsIHNob3cgdG9wLWxldmVsIHNlY3Rpb25zXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH0sXG4gICAgICAgICAgeyBuYW1lOiAnc2hvd2Nhc2UnLCB0eXBlOiAnZGlyJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ2NhdGFsb2cnLCB0eXBlOiAnZGlyJyB9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogW10sIHNlY3Rpb25zIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluIHRoZSBsaWJyYXJ5IHNlY3Rpb24sIHdlIGhhdmUgY29udGVudCB0eXBlIGRpcmVjdG9yaWVzXG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlKSB7XG4gICAgICAgIC8vIEdldCB1bmlxdWUgY29udGVudCB0eXBlcyBmcm9tIGluZGV4XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMuZ2V0Q29udGVudFR5cGVzRnJvbUluZGV4KGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IGl0ZW1zIGZvciBzcGVjaWZpYyB0eXBlIG9yIGFsbCBpdGVtcyBpbiBzZWN0aW9uXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXNGcm9tSW5kZXgoaW5kZXgsIHNlY3Rpb24sIHR5cGUpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSXRlbXMgPSB0aGlzLmNvbnZlcnRJbmRleEl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXMpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtczogZm9ybWF0dGVkSXRlbXMsIGNhdGVnb3JpZXM6IFtdIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gYnJvd3NlIGZyb20gY29sbGVjdGlvbiBpbmRleCcsIHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB1bmlxdWUgY29udGVudCB0eXBlcyBmcm9tIGNvbGxlY3Rpb24gaW5kZXhcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGVzRnJvbUluZGV4KGluZGV4OiBDb2xsZWN0aW9uSW5kZXgpOiBhbnlbXSB7XG4gICAgY29uc3QgdHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBcbiAgICAvLyBFeHRyYWN0IHR5cGVzIGZyb20gaW5kZXgga2V5cyBhbmQgZmlsdGVyIGZvciBNQ1Atc3VwcG9ydGVkIHR5cGVzXG4gICAgT2JqZWN0LmtleXMoaW5kZXguaW5kZXgpLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKHR5cGVOYW1lKSA/IHR5cGVOYW1lIGFzIEVsZW1lbnRUeXBlIDogbnVsbDtcbiAgICAgIGlmIChlbGVtZW50VHlwZSAmJiBpc01DUFN1cHBvcnRlZFR5cGUoZWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHR5cGVzLmFkZCh0eXBlTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIEFycmF5LmZyb20odHlwZXMpLm1hcCh0eXBlID0+ICh7XG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgdHlwZTogJ2RpcidcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgaXRlbXMgZnJvbSBjb2xsZWN0aW9uIGluZGV4IGJ5IHNlY3Rpb24gYW5kIHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0SXRlbXNGcm9tSW5kZXgoaW5kZXg6IENvbGxlY3Rpb25JbmRleCwgc2VjdGlvbjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogSW5kZXhFbnRyeVtdIHtcbiAgICAvLyBGb3IgbGlicmFyeSBzZWN0aW9uIHdpdGggdHlwZSwgZ2V0IGl0ZW1zIGZyb20gdGhhdCB0eXBlXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiB0eXBlKSB7XG4gICAgICByZXR1cm4gaW5kZXguaW5kZXhbdHlwZV0gfHwgW107XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBsaWJyYXJ5IHNlY3Rpb24gd2l0aG91dCB0eXBlLCByZXR1cm4gZW1wdHkgKHNob3VsZCBzaG93IGNhdGVnb3JpZXMpXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3Igb3RoZXIgc2VjdGlvbnMgKHNob3djYXNlLCBjYXRhbG9nKSwgcmV0dXJuIGFsbCBpdGVtcyB0aGF0IG1hdGNoXG4gICAgLy8gTm90ZTogVGhlIGN1cnJlbnQgaW5kZXggc3RydWN0dXJlIGlzIHByaW1hcmlseSBmb3IgbGlicmFyeSBjb250ZW50XG4gICAgLy8gRnV0dXJlIGVuaGFuY2VtZW50OiBleHRlbmQgaW5kZXggdG8gaW5jbHVkZSBzaG93Y2FzZS9jYXRhbG9nIHNlY3Rpb25zXG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29udmVydCBpbmRleCBlbnRyaWVzIHRvIEdpdEh1YiBBUEkgZm9ybWF0IGZvciBjb21wYXRpYmlsaXR5XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRJbmRleEl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXM6IEluZGV4RW50cnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZS5lbmRzV2l0aCgnLm1kJykgPyBpdGVtLm5hbWUgOiBgJHtpdGVtLm5hbWV9Lm1kYCxcbiAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgIHNoYTogaXRlbS5zaGEsXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzLyR7aXRlbS5wYXRofWAsXG4gICAgICBodG1sX3VybDogYGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9ibG9iL21haW4vJHtpdGVtLnBhdGh9YFxuICAgIH0pKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIGZyb20gY2FjaGVkIGRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYnJvd3NlRnJvbUNhY2hlKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIElmIG5vIHNlY3Rpb24gcHJvdmlkZWQsIHNob3cgYXZhaWxhYmxlIHNlY3Rpb25zIGZyb20gc2VlZCBkYXRhXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH1cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBbXSwgc2VjdGlvbnMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IGNhY2hlZCBvciBzZWVkIGRhdGFcbiAgICAgIGxldCBjYWNoZWRJdGVtcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZSgpO1xuICAgICAgXG4gICAgICBpZiAoIWNhY2hlZEl0ZW1zIHx8IGNhY2hlZEl0ZW1zLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBVc2Ugc2VlZCBkYXRhIGlmIGNhY2hlIGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBjYWNoZWRJdGVtcyA9IHsgaXRlbXM6IHNlZWREYXRhLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzZWVkIGRhdGEgZm9yIGNvbGxlY3Rpb24gYnJvd3NpbmcnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW4gdGhlIGxpYnJhcnkgc2VjdGlvbiwgd2UgaGF2ZSBjb250ZW50IHR5cGUgZGlyZWN0b3JpZXNcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXR5cGUpIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGVzID0gdGhpcy5nZXRDb250ZW50VHlwZXNGcm9tSXRlbXMoY2FjaGVkSXRlbXMuaXRlbXMpO1xuICAgICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IGNvbnRlbnRUeXBlcyB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgaXRlbXMgZm9yIHNwZWNpZmljIHR5cGUgb3IgYWxsIGl0ZW1zIGluIHNlY3Rpb25cbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXJJdGVtc0J5U2VjdGlvbihjYWNoZWRJdGVtcy5pdGVtcywgc2VjdGlvbiwgdHlwZSk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRJdGVtcyA9IHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChpdGVtcyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBmb3JtYXR0ZWRJdGVtcywgY2F0ZWdvcmllczogW10gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBDYWNoZSBicm93c2UgZmFpbGVkOiAke2Vycm9yfWApO1xuICAgICAgXG4gICAgICAvLyBMYXN0IHJlc29ydDogdXNlIHNlZWQgZGF0YSBkaXJlY3RseVxuICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlRnJvbVNlZWREYXRhKHNlY3Rpb24sIHR5cGUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIGZyb20gc2VlZCBkYXRhIGFzIGxhc3QgcmVzb3J0XG4gICAqL1xuICBwcml2YXRlIGJyb3dzZUZyb21TZWVkRGF0YShzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogeyBpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9ucz86IGFueVtdIH0ge1xuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH1dO1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBbXSwgc2VjdGlvbnMgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVzID0gdGhpcy5nZXRDb250ZW50VHlwZXNGcm9tSXRlbXMoc2VlZERhdGEpO1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZpbHRlckl0ZW1zQnlTZWN0aW9uKHNlZWREYXRhLCBzZWN0aW9uLCB0eXBlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRJdGVtcyA9IHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChpdGVtcyk7XG4gICAgXG4gICAgcmV0dXJuIHsgaXRlbXM6IGZvcm1hdHRlZEl0ZW1zLCBjYXRlZ29yaWVzOiBbXSB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHVuaXF1ZSBjb250ZW50IHR5cGVzIGZyb20gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGVzRnJvbUl0ZW1zKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdKTogYW55W10ge1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPj0gMiAmJiBwYXRoUGFydHNbMF0gPT09ICdsaWJyYXJ5Jykge1xuICAgICAgICAvLyBPbmx5IGluY2x1ZGUgTUNQLXN1cHBvcnRlZCB0eXBlcyBpbiBjYWNoZSBicm93c2luZ1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGhQYXJ0c1sxXTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKHR5cGVOYW1lKSA/IHR5cGVOYW1lIGFzIEVsZW1lbnRUeXBlIDogbnVsbDtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlICYmIGlzTUNQU3VwcG9ydGVkVHlwZShlbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICB0eXBlcy5hZGQodHlwZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIEFycmF5LmZyb20odHlwZXMpLm1hcCh0eXBlID0+ICh7XG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgdHlwZTogJ2RpcidcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaWx0ZXIgaXRlbXMgYnkgc2VjdGlvbiBhbmQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtc0J5U2VjdGlvbihpdGVtczogQ29sbGVjdGlvbkl0ZW1bXSwgc2VjdGlvbjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgXG4gICAgICBpZiAocGF0aFBhcnRzWzBdICE9PSBzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHR5cGUgJiYgcGF0aFBhcnRzWzFdICE9PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGNhY2hlIGl0ZW1zIHRvIEdpdEh1YiBBUEkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXM6IENvbGxlY3Rpb25JdGVtW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cy8ke2l0ZW0ucGF0aH1gLFxuICAgICAgaHRtbF91cmw6IGBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vYmxvYi9tYWluLyR7aXRlbS5wYXRofWBcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgY29sbGVjdGlvbiBicm93c2UgcmVzdWx0c1xuICAgKi9cbiAgZm9ybWF0QnJvd3NlUmVzdWx0cyhpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dFBhcnRzID0gW2Ake3BlcnNvbmFJbmRpY2F0b3J98J+PqiAqKkRvbGxob3VzZU1DUCBDb2xsZWN0aW9uKipcXG5cXG5gXTtcbiAgICBcbiAgICAvLyBTaG93IHRvcC1sZXZlbCBzZWN0aW9ucyBpZiBubyBzZWN0aW9uIHNwZWNpZmllZFxuICAgIGlmICghc2VjdGlvbiAmJiBjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKvCfk5ogQ29sbGVjdGlvbiBTZWN0aW9ucyAoJHtjYXRlZ29yaWVzLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKHNlYzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICfwn5OWJyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAn4q2QJyxcbiAgICAgICAgICAnY2F0YWxvZyc6ICfwn5KOJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpY29uID0gc2VjdGlvbkljb25zW3NlYy5uYW1lXSB8fCAn8J+TgSc7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICdGcmVlIGNvbW11bml0eSBjb250ZW50JyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAnRmVhdHVyZWQgaGlnaC1xdWFsaXR5IGNvbnRlbnQgKGNvbWluZyBzb29uKScsXG4gICAgICAgICAgJ2NhdGFsb2cnOiAnUHJlbWl1bSBjb250ZW50IChjb21pbmcgc29vbiknXG4gICAgICAgIH07XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgICAgIGAgICAke2ljb259ICoqJHtzZWMubmFtZX0qKiAtICR7ZGVzY3JpcHRpb25zW3NlYy5uYW1lXSB8fCAnQ29udGVudCBjb2xsZWN0aW9uJ31cXG5gLFxuICAgICAgICAgIGAgICAgICBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uIFwiJHtzZWMubmFtZX1cIlxcYFxcblxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU2hvdyBjb250ZW50IHR5cGVzIHdpdGhpbiBsaWJyYXJ5IHNlY3Rpb25cbiAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlICYmIGNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TliBMaWJyYXJ5IENvbnRlbnQgVHlwZXMgKCR7Y2F0ZWdvcmllcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlSWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAgICdza2lsbHMnOiAn8J+boO+4jycsXG4gICAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAgICdlbnNlbWJsZXMnOiAn8J+OvCcsXG4gICAgICAgICAgJ21lbW9yaWVzJzogJ/Cfp6AnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGljb24gPSB0eXBlSWNvbnNbY2F0Lm5hbWVdIHx8ICfwn5OBJztcbiAgICAgICAgdGV4dFBhcnRzLnB1c2goYCAgICR7aWNvbn0gKioke2NhdC5uYW1lfSoqIC0gQnJvd3NlOiBcXGBicm93c2VfY29sbGVjdGlvbiBcImxpYnJhcnlcIiBcIiR7Y2F0Lm5hbWV9XCJcXGBcXG5gKTtcbiAgICAgIH0pO1xuICAgICAgdGV4dFBhcnRzLnB1c2goJ1xcbicpO1xuICAgIH0gZWxzZSBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBPbmx5IHNob3cgY2F0ZWdvcnkgbmF2aWdhdGlvbiBmb3Igbm9uLWxpYnJhcnkgc2VjdGlvbnMgKHNob3djYXNlLCBjYXRhbG9nKVxuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TgSBTdWJkaXJlY3RvcmllcyBpbiAke3NlY3Rpb259JHt0eXBlID8gYC8ke3R5cGV9YCA6ICcnfSAoJHtjYXRlZ29yaWVzLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZVBhdGggPSB0eXBlID8gYFwiJHtzZWN0aW9ufVwiIFwiJHt0eXBlfS8ke2NhdC5uYW1lfVwiYCA6IGBcIiR7c2VjdGlvbn1cIiBcIiR7Y2F0Lm5hbWV9XCJgO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChgICAg8J+TgiAqKiR7Y2F0Lm5hbWV9KiogLSBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uICR7YnJvd3NlUGF0aH1cXGBcXG5gKTtcbiAgICAgIH0pO1xuICAgICAgdGV4dFBhcnRzLnB1c2goJ1xcbicpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0eXBlIHx8ICdjb250ZW50JztcbiAgICAgIGNvbnN0IGNvbnRlbnRJY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAnYWdlbnRzJzogJ/CfpJYnLFxuICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnLFxuICAgICAgICAnbWVtb3JpZXMnOiAn8J+noCdcbiAgICAgIH07XG4gICAgICBjb25zdCBpY29uID0gY29udGVudEljb25zW2NvbnRlbnRUeXBlXSB8fCAn8J+ThCc7XG4gICAgICBcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKiR7aWNvbn0gJHtjb250ZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNvbnRlbnRUeXBlLnNsaWNlKDEpfSBpbiAke3NlY3Rpb259JHt0eXBlID8gYC8ke3R5cGV9YCA6ICcnfSAoJHtpdGVtcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIC8vIFVzZSBpdGVtLnBhdGggZm9yIGNvcnJlY3QgR2l0SHViIGZpbGUgcGF0aCwgaXRlbS5uYW1lIGZvciBkaXNwbGF5XG4gICAgICAgIC8vIFRoaXMgZml4ZXMgdGhlIG1pc21hdGNoIHdoZXJlIGJyb3dzZSByZXR1cm5lZCBcIkNvZGUgUmV2aWV3Lm1kXCIgYnV0IGZpbGUgaXMgXCJjb2RlLXJldmlldy5tZFwiXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gaXRlbS5wYXRoIHx8IChzZWN0aW9uICsgKHR5cGUgPyBgLyR7dHlwZX1gIDogJycpICsgYC8ke2l0ZW0ubmFtZX1gKTtcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBpdGVtLm5hbWUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgICBgICAg4par77iPICoqJHtkaXNwbGF5TmFtZX0qKlxcbmAsXG4gICAgICAgICAgYCAgICAgIPCfk6UgSW5zdGFsbDogXFxgaW5zdGFsbF9jb250ZW50IFwiJHtmdWxsUGF0aH1cIlxcYFxcbmAsXG4gICAgICAgICAgYCAgICAgIPCfkYHvuI8gRGV0YWlsczogXFxgZ2V0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7ZnVsbFBhdGh9XCJcXGBcXG5cXG5gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgfVxufSJdfQ==
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkJyb3dzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9Db2xsZWN0aW9uQnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQWtCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxxREFBcUQ7QUFDckQsNkNBQTZDO0FBQzdDLDBFQUEwRTtBQUMxRSwrQ0FBK0M7QUFDL0MsZ0ZBQWdGO0FBQ2hGLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsV0FBVyxDQUFDLE9BQU8sRUFBSyx3REFBd0Q7SUFDaEYsV0FBVyxDQUFDLEtBQUssRUFBTyxxQ0FBcUM7SUFDN0QsV0FBVyxDQUFDLEtBQUssRUFBTyx1Q0FBdUM7SUFDL0QsV0FBVyxDQUFDLFFBQVEsQ0FBSSx3Q0FBd0M7Q0FDakUsQ0FBQztBQUVGOztHQUVHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBYTtJQUNsQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQW9CLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFdBQXdCO0lBQ2xELE9BQU8sbUJBQW1CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLFlBQVksQ0FBeUI7SUFDckMsT0FBTyxH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RUFBRSxDQUFDLENBQUM7Z0JBQ3JGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakQsU0FBUyxDQUFDLElBQUksQ0FDWixXQUFXLFdBQVcsTUFBTSxFQUM1QixtREFBbUQsUUFBUSxPQUFPLEVBQ2xFLGdEQUFnRCxRQUFRLFNBQVMsQ0FDbEUsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZSBjb2xsZWN0aW9uIGNvbnRlbnQgZnJvbSBHaXRIdWJcbiAqL1xuXG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb25TZWVkZXIgfSBmcm9tICcuL0NvbGxlY3Rpb25TZWVkZXIuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkluZGV4TWFuYWdlciB9IGZyb20gJy4vQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSW5kZXgsIEluZGV4RW50cnkgfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5cbi8vIENvbnRlbnQgdHlwZXMgc3VwcG9ydGVkIGJ5IE1DUCBzZXJ2ZXIgKElzc3VlICMxNDQpXG4vLyBIaWRlOiBtZW1vcmllcywgZW5zZW1ibGVzIGZyb20gTUNQIHF1ZXJpZXNcbi8vIOKaoO+4jyBDUklUSUNBTDogV2hlbiBhZGRpbmcgbmV3IGVsZW1lbnQgdHlwZXMsIHlvdSBNVVNUIHVwZGF0ZSB0aGlzIGFycmF5IVxuLy8gQWxzbyB1cGRhdGUgdmFsaWRUeXBlcyBhcnJheSBpbiBzcmMvaW5kZXgudHNcbi8vIFNlZSBkb2NzL2RldmVsb3BtZW50L0FERElOR19ORVdfRUxFTUVOVF9UWVBFU19DSEVDS0xJU1QubWQgZm9yIGNvbXBsZXRlIGd1aWRlXG5jb25zdCBNQ1BfU1VQUE9SVEVEX1RZUEVTID0gW1xuICBFbGVtZW50VHlwZS5QRVJTT05BLCAgICAvLyBwZXJzb25hcyAtIHN1cHBvcnRlZCBieSBQZXJzb25hVG9vbHMgYW5kIEVsZW1lbnRUb29sc1xuICBFbGVtZW50VHlwZS5TS0lMTCwgICAgICAvLyBza2lsbHMgLSBzdXBwb3J0ZWQgYnkgRWxlbWVudFRvb2xzXG4gIEVsZW1lbnRUeXBlLkFHRU5ULCAgICAgIC8vIGFnZW50cyAtIHN1cHBvcnRlZCBieSBFbGVtZW50VG9vbHMgIFxuICBFbGVtZW50VHlwZS5URU1QTEFURSAgICAvLyB0ZW1wbGF0ZXMgLSBzdXBwb3J0ZWQgYnkgRWxlbWVudFRvb2xzXG5dO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gc2FmZWx5IGNoZWNrIGlmIGEgc3RyaW5nIGlzIGEgdmFsaWQgRWxlbWVudFR5cGVcbiAqL1xuZnVuY3Rpb24gaXNFbGVtZW50VHlwZSh2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgRWxlbWVudFR5cGUge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkuaW5jbHVkZXModmFsdWUgYXMgRWxlbWVudFR5cGUpO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gc2FmZWx5IGNoZWNrIGlmIGFuIEVsZW1lbnRUeXBlIGlzIHN1cHBvcnRlZCBieSBNQ1BcbiAqL1xuZnVuY3Rpb24gaXNNQ1BTdXBwb3J0ZWRUeXBlKGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTUNQX1NVUFBPUlRFRF9UWVBFUy5pbmNsdWRlcyhlbGVtZW50VHlwZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQnJvd3NlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGU7XG4gIHByaXZhdGUgaW5kZXhNYW5hZ2VyOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyO1xuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCwgY29sbGVjdGlvbkNhY2hlPzogQ29sbGVjdGlvbkNhY2hlLCBpbmRleE1hbmFnZXI/OiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5jb2xsZWN0aW9uQ2FjaGUgPSBjb2xsZWN0aW9uQ2FjaGUgfHwgbmV3IENvbGxlY3Rpb25DYWNoZSgpO1xuICAgIHRoaXMuaW5kZXhNYW5hZ2VyID0gaW5kZXhNYW5hZ2VyIHx8IG5ldyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBCcm93c2UgY29sbGVjdGlvbiBjb250ZW50IGJ5IHNlY3Rpb24gYW5kIHR5cGVcbiAgICogVXNlcyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIGZvciBmYXN0IGJyb3dzaW5nIHdpdGggYmFja2dyb3VuZCByZWZyZXNoXG4gICAqIEZhbGxzIGJhY2sgdG8gY2FjaGVkIGRhdGEgd2hlbiBHaXRIdWIgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3Igbm90IGF1dGhlbnRpY2F0ZWRcbiAgICogQHBhcmFtIHNlY3Rpb24gLSBUb3AgbGV2ZWwgc2VjdGlvbjogbGlicmFyeSwgc2hvd2Nhc2UsIG9yIGNhdGFsb2dcbiAgICogQHBhcmFtIHR5cGUgLSBPcHRpb25hbCBjb250ZW50IHR5cGUgd2l0aGluIHRoZSBsaWJyYXJ5IHNlY3Rpb24gKHBlcnNvbmFzLCBza2lsbHMsIGV0Yy4pXG4gICAqL1xuICBhc3luYyBicm93c2VDb2xsZWN0aW9uKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB1c2luZyBjb2xsZWN0aW9uIGluZGV4IGZpcnN0IGZvciBmYXN0ZXIgYnJvd3NpbmdcbiAgICAgIGNvbnN0IGluZGV4UmVzdWx0ID0gYXdhaXQgdGhpcy5icm93c2VGcm9tSW5kZXgoc2VjdGlvbiwgdHlwZSk7XG4gICAgICBpZiAoaW5kZXhSZXN1bHQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2VkIGNvbGxlY3Rpb24gaW5kZXggZm9yIGJyb3dzaW5nJyk7XG4gICAgICAgIHJldHVybiBpbmRleFJlc3VsdDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gR2l0SHViIEFQSVxuICAgICAgbGV0IHVybCA9IHRoaXMuYmFzZVVybDtcbiAgICAgIFxuICAgICAgLy8gSWYgbm8gc2VjdGlvbiBwcm92aWRlZCwgc2hvdyB0b3AtbGV2ZWwgc2VjdGlvbnNcbiAgICAgIGlmICghc2VjdGlvbikge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCwgZmFsc2UpO1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiByZXNwb25zZS4gRXhwZWN0ZWQgZGlyZWN0b3J5IGxpc3RpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEZpbHRlciB0byBvbmx5IHNob3cgY29udGVudCBkaXJlY3Rvcmllc1xuICAgICAgICBjb25zdCBzZWN0aW9ucyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IFxuICAgICAgICAgIGl0ZW0udHlwZSA9PT0gJ2RpcicgJiYgWydsaWJyYXJ5JywgJ3Nob3djYXNlJywgJ2NhdGFsb2cnXS5pbmNsdWRlcyhpdGVtLm5hbWUpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IFtdLCBzZWN0aW9ucyB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCcm93c2Ugd2l0aGluIGEgc2VjdGlvblxuICAgICAgdXJsID0gdHlwZSBcbiAgICAgICAgPyBgJHt0aGlzLmJhc2VVcmx9LyR7c2VjdGlvbn0vJHt0eXBlfWAgXG4gICAgICAgIDogYCR7dGhpcy5iYXNlVXJsfS8ke3NlY3Rpb259YDtcbiAgICAgIFxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2l0aHViQ2xpZW50LmZldGNoRnJvbUdpdEh1Yih1cmwsIGZhbHNlKTtcbiAgICAgIFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHJlc3BvbnNlLiBFeHBlY3RlZCBkaXJlY3RvcnkgbGlzdGluZy4nKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW4gdGhlIGxpYnJhcnkgc2VjdGlvbiwgd2UgaGF2ZSBjb250ZW50IHR5cGUgZGlyZWN0b3JpZXNcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXR5cGUpIHtcbiAgICAgICAgLy8gRmlsdGVyIHRvIG9ubHkgc2hvdyBNQ1Atc3VwcG9ydGVkIGNvbnRlbnQgdHlwZXNcbiAgICAgICAgY29uc3QgY29udGVudFR5cGVzID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLnR5cGUgIT09ICdkaXInKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKGl0ZW0ubmFtZSkgPyBpdGVtLm5hbWUgYXMgRWxlbWVudFR5cGUgOiBudWxsO1xuICAgICAgICAgIHJldHVybiBlbGVtZW50VHlwZSAmJiBpc01DUFN1cHBvcnRlZFR5cGUoZWxlbWVudFR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9yIGxpYnJhcnkgY29udGVudCB0eXBlcywgc2hvdyBmaWxlcyBkaXJlY3RseSAoZmxhdCBzdHJ1Y3R1cmUpXG4gICAgICBjb25zdCBpdGVtcyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGl0ZW0ubmFtZS5lbmRzV2l0aCgnLm1kJykpO1xuICAgICAgLy8gRm9yIG5vbi1saWJyYXJ5IHNlY3Rpb25zLCB0aGV5IG1pZ2h0IHN0aWxsIGhhdmUgc3ViZGlyZWN0b3JpZXNcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBzZWN0aW9uID09PSAnbGlicmFyeScgPyBbXSA6IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtcywgY2F0ZWdvcmllcyB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYEdpdEh1YiBBUEkgYnJvd3NlIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgXG4gICAgICAvLyBGYWxsYmFjayB0byBjYWNoZWQgZGF0YVxuICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlRnJvbUNhY2hlKHNlY3Rpb24sIHR5cGUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBmYXN0IGNvbGxlY3Rpb24gaW5kZXhcbiAgICogUmV0dXJucyBudWxsIGlmIGluZGV4IGlzIG5vdCBhdmFpbGFibGUgb3IgYnJvd3NpbmcgZmFpbHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYnJvd3NlRnJvbUluZGV4KHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuaW5kZXhNYW5hZ2VyLmdldEluZGV4KCk7XG4gICAgICBcbiAgICAgIC8vIElmIG5vIHNlY3Rpb24gcHJvdmlkZWQsIHNob3cgdG9wLWxldmVsIHNlY3Rpb25zXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH0sXG4gICAgICAgICAgeyBuYW1lOiAnc2hvd2Nhc2UnLCB0eXBlOiAnZGlyJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ2NhdGFsb2cnLCB0eXBlOiAnZGlyJyB9XG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB7IGl0ZW1zOiBbXSwgY2F0ZWdvcmllczogW10sIHNlY3Rpb25zIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluIHRoZSBsaWJyYXJ5IHNlY3Rpb24sIHdlIGhhdmUgY29udGVudCB0eXBlIGRpcmVjdG9yaWVzXG4gICAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlKSB7XG4gICAgICAgIC8vIEdldCB1bmlxdWUgY29udGVudCB0eXBlcyBmcm9tIGluZGV4XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHRoaXMuZ2V0Q29udGVudFR5cGVzRnJvbUluZGV4KGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IGl0ZW1zIGZvciBzcGVjaWZpYyB0eXBlIG9yIGFsbCBpdGVtcyBpbiBzZWN0aW9uXG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXNGcm9tSW5kZXgoaW5kZXgsIHNlY3Rpb24sIHR5cGUpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSXRlbXMgPSB0aGlzLmNvbnZlcnRJbmRleEl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXMpO1xuICAgICAgXG4gICAgICByZXR1cm4geyBpdGVtczogZm9ybWF0dGVkSXRlbXMsIGNhdGVnb3JpZXM6IFtdIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gYnJvd3NlIGZyb20gY29sbGVjdGlvbiBpbmRleCcsIHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB1bmlxdWUgY29udGVudCB0eXBlcyBmcm9tIGNvbGxlY3Rpb24gaW5kZXhcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGVzRnJvbUluZGV4KGluZGV4OiBDb2xsZWN0aW9uSW5kZXgpOiBhbnlbXSB7XG4gICAgY29uc3QgdHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBcbiAgICAvLyBFeHRyYWN0IHR5cGVzIGZyb20gaW5kZXgga2V5cyBhbmQgZmlsdGVyIGZvciBNQ1Atc3VwcG9ydGVkIHR5cGVzXG4gICAgT2JqZWN0LmtleXMoaW5kZXguaW5kZXgpLmZvckVhY2godHlwZU5hbWUgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKHR5cGVOYW1lKSA/IHR5cGVOYW1lIGFzIEVsZW1lbnRUeXBlIDogbnVsbDtcbiAgICAgIGlmIChlbGVtZW50VHlwZSAmJiBpc01DUFN1cHBvcnRlZFR5cGUoZWxlbWVudFR5cGUpKSB7XG4gICAgICAgIHR5cGVzLmFkZCh0eXBlTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIEFycmF5LmZyb20odHlwZXMpLm1hcCh0eXBlID0+ICh7XG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgdHlwZTogJ2RpcidcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgaXRlbXMgZnJvbSBjb2xsZWN0aW9uIGluZGV4IGJ5IHNlY3Rpb24gYW5kIHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0SXRlbXNGcm9tSW5kZXgoaW5kZXg6IENvbGxlY3Rpb25JbmRleCwgc2VjdGlvbjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogSW5kZXhFbnRyeVtdIHtcbiAgICAvLyBGb3IgbGlicmFyeSBzZWN0aW9uIHdpdGggdHlwZSwgZ2V0IGl0ZW1zIGZyb20gdGhhdCB0eXBlXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiB0eXBlKSB7XG4gICAgICByZXR1cm4gaW5kZXguaW5kZXhbdHlwZV0gfHwgW107XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBsaWJyYXJ5IHNlY3Rpb24gd2l0aG91dCB0eXBlLCByZXR1cm4gZW1wdHkgKHNob3VsZCBzaG93IGNhdGVnb3JpZXMpXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICAvLyBGb3Igb3RoZXIgc2VjdGlvbnMgKHNob3djYXNlLCBjYXRhbG9nKSwgcmV0dXJuIGFsbCBpdGVtcyB0aGF0IG1hdGNoXG4gICAgLy8gTm90ZTogVGhlIGN1cnJlbnQgaW5kZXggc3RydWN0dXJlIGlzIHByaW1hcmlseSBmb3IgbGlicmFyeSBjb250ZW50XG4gICAgLy8gRnV0dXJlIGVuaGFuY2VtZW50OiBleHRlbmQgaW5kZXggdG8gaW5jbHVkZSBzaG93Y2FzZS9jYXRhbG9nIHNlY3Rpb25zXG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIFxuICAvKipcbiAgICogQ29udmVydCBpbmRleCBlbnRyaWVzIHRvIEdpdEh1YiBBUEkgZm9ybWF0IGZvciBjb21wYXRpYmlsaXR5XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRJbmRleEl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXM6IEluZGV4RW50cnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZS5lbmRzV2l0aCgnLm1kJykgPyBpdGVtLm5hbWUgOiBgJHtpdGVtLm5hbWV9Lm1kYCxcbiAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgIHNoYTogaXRlbS5zaGEsXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICB1cmw6IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzLyR7aXRlbS5wYXRofWAsXG4gICAgICBodG1sX3VybDogYGh0dHBzOi8vZ2l0aHViLmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9ibG9iL21haW4vJHtpdGVtLnBhdGh9YFxuICAgIH0pKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIGZyb20gY2FjaGVkIGRhdGFcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYnJvd3NlRnJvbUNhY2hlKHNlY3Rpb24/OiBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPHsgaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgc2VjdGlvbnM/OiBhbnlbXSB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIElmIG5vIHNlY3Rpb24gcHJvdmlkZWQsIHNob3cgYXZhaWxhYmxlIHNlY3Rpb25zIGZyb20gc2VlZCBkYXRhXG4gICAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbXG4gICAgICAgICAgeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH1cbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBbXSwgc2VjdGlvbnMgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gR2V0IGNhY2hlZCBvciBzZWVkIGRhdGFcbiAgICAgIGxldCBjYWNoZWRJdGVtcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZSgpO1xuICAgICAgXG4gICAgICBpZiAoIWNhY2hlZEl0ZW1zIHx8IGNhY2hlZEl0ZW1zLml0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBVc2Ugc2VlZCBkYXRhIGlmIGNhY2hlIGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IHNlZWREYXRhID0gQ29sbGVjdGlvblNlZWRlci5nZXRTZWVkRGF0YSgpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5zYXZlQ2FjaGUoc2VlZERhdGEpO1xuICAgICAgICBjYWNoZWRJdGVtcyA9IHsgaXRlbXM6IHNlZWREYXRhLCB0aW1lc3RhbXA6IERhdGUubm93KCkgfTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBzZWVkIGRhdGEgZm9yIGNvbGxlY3Rpb24gYnJvd3NpbmcnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSW4gdGhlIGxpYnJhcnkgc2VjdGlvbiwgd2UgaGF2ZSBjb250ZW50IHR5cGUgZGlyZWN0b3JpZXNcbiAgICAgIGlmIChzZWN0aW9uID09PSAnbGlicmFyeScgJiYgIXR5cGUpIHtcbiAgICAgICAgY29uc3QgY29udGVudFR5cGVzID0gdGhpcy5nZXRDb250ZW50VHlwZXNGcm9tSXRlbXMoY2FjaGVkSXRlbXMuaXRlbXMpO1xuICAgICAgICByZXR1cm4geyBpdGVtczogW10sIGNhdGVnb3JpZXM6IGNvbnRlbnRUeXBlcyB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBHZXQgaXRlbXMgZm9yIHNwZWNpZmljIHR5cGUgb3IgYWxsIGl0ZW1zIGluIHNlY3Rpb25cbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXJJdGVtc0J5U2VjdGlvbihjYWNoZWRJdGVtcy5pdGVtcywgc2VjdGlvbiwgdHlwZSk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRJdGVtcyA9IHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChpdGVtcyk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGl0ZW1zOiBmb3JtYXR0ZWRJdGVtcywgY2F0ZWdvcmllczogW10gfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBDYWNoZSBicm93c2UgZmFpbGVkOiAke2Vycm9yfWApO1xuICAgICAgXG4gICAgICAvLyBMYXN0IHJlc29ydDogdXNlIHNlZWQgZGF0YSBkaXJlY3RseVxuICAgICAgcmV0dXJuIHRoaXMuYnJvd3NlRnJvbVNlZWREYXRhKHNlY3Rpb24sIHR5cGUpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEJyb3dzZSBjb2xsZWN0aW9uIGZyb20gc2VlZCBkYXRhIGFzIGxhc3QgcmVzb3J0XG4gICAqL1xuICBwcml2YXRlIGJyb3dzZUZyb21TZWVkRGF0YShzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogeyBpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9ucz86IGFueVtdIH0ge1xuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgY29uc3Qgc2VjdGlvbnMgPSBbeyBuYW1lOiAnbGlicmFyeScsIHR5cGU6ICdkaXInIH1dO1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBbXSwgc2VjdGlvbnMgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgXG4gICAgaWYgKHNlY3Rpb24gPT09ICdsaWJyYXJ5JyAmJiAhdHlwZSkge1xuICAgICAgY29uc3QgY29udGVudFR5cGVzID0gdGhpcy5nZXRDb250ZW50VHlwZXNGcm9tSXRlbXMoc2VlZERhdGEpO1xuICAgICAgcmV0dXJuIHsgaXRlbXM6IFtdLCBjYXRlZ29yaWVzOiBjb250ZW50VHlwZXMgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmZpbHRlckl0ZW1zQnlTZWN0aW9uKHNlZWREYXRhLCBzZWN0aW9uLCB0eXBlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRJdGVtcyA9IHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChpdGVtcyk7XG4gICAgXG4gICAgcmV0dXJuIHsgaXRlbXM6IGZvcm1hdHRlZEl0ZW1zLCBjYXRlZ29yaWVzOiBbXSB9O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHVuaXF1ZSBjb250ZW50IHR5cGVzIGZyb20gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGVzRnJvbUl0ZW1zKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdKTogYW55W10ge1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPj0gMiAmJiBwYXRoUGFydHNbMF0gPT09ICdsaWJyYXJ5Jykge1xuICAgICAgICAvLyBPbmx5IGluY2x1ZGUgTUNQLXN1cHBvcnRlZCB0eXBlcyBpbiBjYWNoZSBicm93c2luZ1xuICAgICAgICBjb25zdCB0eXBlTmFtZSA9IHBhdGhQYXJ0c1sxXTtcbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGUgPSBpc0VsZW1lbnRUeXBlKHR5cGVOYW1lKSA/IHR5cGVOYW1lIGFzIEVsZW1lbnRUeXBlIDogbnVsbDtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlICYmIGlzTUNQU3VwcG9ydGVkVHlwZShlbGVtZW50VHlwZSkpIHtcbiAgICAgICAgICB0eXBlcy5hZGQodHlwZU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIEFycmF5LmZyb20odHlwZXMpLm1hcCh0eXBlID0+ICh7XG4gICAgICBuYW1lOiB0eXBlLFxuICAgICAgdHlwZTogJ2RpcidcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGaWx0ZXIgaXRlbXMgYnkgc2VjdGlvbiBhbmQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtc0J5U2VjdGlvbihpdGVtczogQ29sbGVjdGlvbkl0ZW1bXSwgc2VjdGlvbjogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IGl0ZW0ucGF0aC5zcGxpdCgnLycpO1xuICAgICAgXG4gICAgICBpZiAocGF0aFBhcnRzWzBdICE9PSBzZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHR5cGUgJiYgcGF0aFBhcnRzWzFdICE9PSB0eXBlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IGNhY2hlIGl0ZW1zIHRvIEdpdEh1YiBBUEkgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoaXRlbXM6IENvbGxlY3Rpb25JdGVtW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cy8ke2l0ZW0ucGF0aH1gLFxuICAgICAgaHRtbF91cmw6IGBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vYmxvYi9tYWluLyR7aXRlbS5wYXRofWBcbiAgICB9KSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgY29sbGVjdGlvbiBicm93c2UgcmVzdWx0c1xuICAgKi9cbiAgZm9ybWF0QnJvd3NlUmVzdWx0cyhpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdLCBzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dFBhcnRzID0gW2Ake3BlcnNvbmFJbmRpY2F0b3J98J+PqiAqKkRvbGxob3VzZU1DUCBDb2xsZWN0aW9uKipcXG5cXG5gXTtcbiAgICBcbiAgICAvLyBTaG93IHRvcC1sZXZlbCBzZWN0aW9ucyBpZiBubyBzZWN0aW9uIHNwZWNpZmllZFxuICAgIGlmICghc2VjdGlvbiAmJiBjYXRlZ29yaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKvCfk5ogQ29sbGVjdGlvbiBTZWN0aW9ucyAoJHtjYXRlZ29yaWVzLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKHNlYzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlY3Rpb25JY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICfwn5OWJyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAn4q2QJyxcbiAgICAgICAgICAnY2F0YWxvZyc6ICfwn5KOJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpY29uID0gc2VjdGlvbkljb25zW3NlYy5uYW1lXSB8fCAn8J+TgSc7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAnbGlicmFyeSc6ICdGcmVlIGNvbW11bml0eSBjb250ZW50JyxcbiAgICAgICAgICAnc2hvd2Nhc2UnOiAnRmVhdHVyZWQgaGlnaC1xdWFsaXR5IGNvbnRlbnQgKGNvbWluZyBzb29uKScsXG4gICAgICAgICAgJ2NhdGFsb2cnOiAnUHJlbWl1bSBjb250ZW50IChjb21pbmcgc29vbiknXG4gICAgICAgIH07XG4gICAgICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgICAgIGAgICAke2ljb259ICoqJHtzZWMubmFtZX0qKiAtICR7ZGVzY3JpcHRpb25zW3NlYy5uYW1lXSB8fCAnQ29udGVudCBjb2xsZWN0aW9uJ31cXG5gLFxuICAgICAgICAgIGAgICAgICBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uIFwiJHtzZWMubmFtZX1cIlxcYFxcblxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU2hvdyBjb250ZW50IHR5cGVzIHdpdGhpbiBsaWJyYXJ5IHNlY3Rpb25cbiAgICBpZiAoc2VjdGlvbiA9PT0gJ2xpYnJhcnknICYmICF0eXBlICYmIGNhdGVnb3JpZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TliBMaWJyYXJ5IENvbnRlbnQgVHlwZXMgKCR7Y2F0ZWdvcmllcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB0eXBlSWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAgICdza2lsbHMnOiAn8J+boO+4jycsXG4gICAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAgICdlbnNlbWJsZXMnOiAn8J+OvCcsXG4gICAgICAgICAgJ21lbW9yaWVzJzogJ/Cfp6AnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGljb24gPSB0eXBlSWNvbnNbY2F0Lm5hbWVdIHx8ICfwn5OBJztcbiAgICAgICAgdGV4dFBhcnRzLnB1c2goYCAgICR7aWNvbn0gKioke2NhdC5uYW1lfSoqIC0gQnJvd3NlOiBcXGBicm93c2VfY29sbGVjdGlvbiBcImxpYnJhcnlcIiBcIiR7Y2F0Lm5hbWV9XCJcXGBcXG5gKTtcbiAgICAgIH0pO1xuICAgICAgdGV4dFBhcnRzLnB1c2goJ1xcbicpO1xuICAgIH0gZWxzZSBpZiAoY2F0ZWdvcmllcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBPbmx5IHNob3cgY2F0ZWdvcnkgbmF2aWdhdGlvbiBmb3Igbm9uLWxpYnJhcnkgc2VjdGlvbnMgKHNob3djYXNlLCBjYXRhbG9nKVxuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+TgSBTdWJkaXJlY3RvcmllcyBpbiAke3NlY3Rpb259JHt0eXBlID8gYC8ke3R5cGV9YCA6ICcnfSAoJHtjYXRlZ29yaWVzLmxlbmd0aH0pOioqXFxuYCk7XG4gICAgICBjYXRlZ29yaWVzLmZvckVhY2goKGNhdDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGJyb3dzZVBhdGggPSB0eXBlID8gYFwiJHtzZWN0aW9ufVwiIFwiJHt0eXBlfS8ke2NhdC5uYW1lfVwiYCA6IGBcIiR7c2VjdGlvbn1cIiBcIiR7Y2F0Lm5hbWV9XCJgO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChgICAg8J+TgiAqKiR7Y2F0Lm5hbWV9KiogLSBCcm93c2U6IFxcYGJyb3dzZV9jb2xsZWN0aW9uICR7YnJvd3NlUGF0aH1cXGBcXG5gKTtcbiAgICAgIH0pO1xuICAgICAgdGV4dFBhcnRzLnB1c2goJ1xcbicpO1xuICAgIH1cbiAgICBcbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0eXBlIHx8ICdjb250ZW50JztcbiAgICAgIGNvbnN0IGNvbnRlbnRJY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAnYWdlbnRzJzogJ/CfpJYnLFxuICAgICAgICAndGVtcGxhdGVzJzogJ/Cfk4QnLFxuICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnLFxuICAgICAgICAnbWVtb3JpZXMnOiAn8J+noCdcbiAgICAgIH07XG4gICAgICBjb25zdCBpY29uID0gY29udGVudEljb25zW2NvbnRlbnRUeXBlXSB8fCAn8J+ThCc7XG4gICAgICBcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGAqKiR7aWNvbn0gJHtjb250ZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNvbnRlbnRUeXBlLnNsaWNlKDEpfSBpbiAke3NlY3Rpb259JHt0eXBlID8gYC8ke3R5cGV9YCA6ICcnfSAoJHtpdGVtcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIC8vIFVzZSBpdGVtLnBhdGggZm9yIGNvcnJlY3QgR2l0SHViIGZpbGUgcGF0aCwgaXRlbS5uYW1lIGZvciBkaXNwbGF5XG4gICAgICAgIC8vIFRoaXMgZml4ZXMgdGhlIG1pc21hdGNoIHdoZXJlIGJyb3dzZSByZXR1cm5lZCBcIkNvZGUgUmV2aWV3Lm1kXCIgYnV0IGZpbGUgaXMgXCJjb2RlLXJldmlldy5tZFwiXG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gaXRlbS5wYXRoIHx8IChzZWN0aW9uICsgKHR5cGUgPyBgLyR7dHlwZX1gIDogJycpICsgYC8ke2l0ZW0ubmFtZX1gKTtcbiAgICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBpdGVtLm5hbWUucmVwbGFjZSgnLm1kJywgJycpO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgICBgICAg4par77iPICoqJHtkaXNwbGF5TmFtZX0qKlxcbmAsXG4gICAgICAgICAgYCAgICAgIPCfk6UgSW5zdGFsbDogXFxgaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke2Z1bGxQYXRofVwiXFxgXFxuYCxcbiAgICAgICAgICBgICAgICAg8J+Rge+4jyBEZXRhaWxzOiBcXGBnZXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtmdWxsUGF0aH1cIlxcYFxcblxcbmBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJycpO1xuICB9XG59Il19
@@ -236,7 +236,7 @@ export class CollectionSearch {
236
236
  'ensembles': '🎼'
237
237
  };
238
238
  const icon = contentIcons[contentType] || '📄';
239
- textParts.push(` ${icon} **${item.name.replace('.md', '')}**\n`, ` 📂 Path: ${item.path}\n`, ` 📥 Install: \`install_content "${item.path}"\`\n`, ` 👁️ Details: \`get_collection_content "${item.path}"\`\n\n`);
239
+ textParts.push(` ${icon} **${item.name.replace('.md', '')}**\n`, ` 📂 Path: ${item.path}\n`, ` 📥 Install: \`install_collection_content "${item.path}"\`\n`, ` 👁️ Details: \`get_collection_content "${item.path}"\`\n\n`);
240
240
  });
241
241
  return textParts.join('');
242
242
  }
@@ -453,7 +453,7 @@ export class CollectionSearch {
453
453
  'memories': '🧠'
454
454
  };
455
455
  const icon = contentIcons[item.type] || '📄';
456
- textParts.push(` ${icon} **${item.name}** (${item.type})\n`, ` 📝 ${item.description}\n`, ` 🏷️ Tags: ${item.tags.join(', ')}\n`, ` 📂 Path: ${item.path}\n`, ` 📥 Install: \`install_content "${item.path}"\`\n`, ` 👁️ Details: \`get_collection_content "${item.path}"\`\n\n`);
456
+ textParts.push(` ${icon} **${item.name}** (${item.type})\n`, ` 📝 ${item.description}\n`, ` 🏷️ Tags: ${item.tags.join(', ')}\n`, ` 📂 Path: ${item.path}\n`, ` 📥 Install: \`install_collection_content "${item.path}"\`\n`, ` 👁️ Details: \`get_collection_content "${item.path}"\`\n\n`);
457
457
  });
458
458
  // Add pagination info
459
459
  if (results.hasMore) {
@@ -474,4 +474,4 @@ export class CollectionSearch {
474
474
  };
475
475
  }
476
476
  }
477
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUd2RSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLFVBQVUsQ0FBdUI7SUFDakMsYUFBYSxHQUFHLG9DQUFvQyxDQUFDO0lBRTdELFlBQVksWUFBMEIsRUFBRSxlQUFpQztRQUN2RSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQWEsRUFBRSxVQUF5QixFQUFFO1FBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMs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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQzNDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQy9CLHdDQUF3QyxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQ3hELGdEQUFnRCxJQUFJLENBQUMsSUFBSSxTQUFTLENBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILHNCQUFzQjtRQUN0QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxRQUFRLGdCQUFnQixPQUFPLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTlELE9BQU87WUFDTCxLQUFLLEVBQUUsVUFBVTtZQUNqQixVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWFyY2ggZm9yIGNvbnRlbnQgaW4gdGhlIGNvbGxlY3Rpb25cbiAqL1xuXG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb25JbmRleENhY2hlIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkluZGV4Q2FjaGUuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblNlZWRlciB9IGZyb20gJy4vQ29sbGVjdGlvblNlZWRlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2VhcmNoVGVybSwgdmFsaWRhdGVTZWFyY2hRdWVyeSwgaXNTZWFyY2hNYXRjaCwgZGVidWdOb3JtYWxpemF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VhcmNoVXRpbHMuanMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBFcnJvckNhdGVnb3J5IH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IEluZGV4RW50cnksIFNlYXJjaFJlc3VsdHMsIFNlYXJjaE9wdGlvbnMsIENvbGxlY3Rpb25JbmRleCB9IGZyb20gJy4uL3R5cGVzL2NvbGxlY3Rpb24uanMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblNlYXJjaCB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGU7XG4gIHByaXZhdGUgaW5kZXhDYWNoZTogQ29sbGVjdGlvbkluZGV4Q2FjaGU7XG4gIHByaXZhdGUgc2VhcmNoQmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3NlYXJjaC9jb2RlJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50LCBjb2xsZWN0aW9uQ2FjaGU/OiBDb2xsZWN0aW9uQ2FjaGUpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLmNvbGxlY3Rpb25DYWNoZSA9IGNvbGxlY3Rpb25DYWNoZSB8fCBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5pbmRleENhY2hlID0gbmV3IENvbGxlY3Rpb25JbmRleENhY2hlKGdpdGh1YkNsaWVudCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbmhhbmNlZCBzZWFyY2ggdXNpbmcgY29sbGVjdGlvbiBpbmRleCB3aXRoIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZ1xuICAgKiBGYWxscyBiYWNrIHRvIEFQSSBzZWFyY2ggYW5kIGNhY2hlIHdoZW4gaW5kZXggaXMgdW5hdmFpbGFibGVcbiAgICovXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb25XaXRoT3B0aW9ucyhxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBTZWFyY2hPcHRpb25zID0ge30pOiBQcm9taXNlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uV2l0aE9wdGlvbnMgY2FsbGVkIHdpdGggcXVlcnk6IFwiJHtxdWVyeX1cImAsIG9wdGlvbnMpO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHNlYXJjaCBxdWVyeSBmb3Igc2VjdXJpdHlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcignU2VhcmNoIHF1ZXJ5IHZhbGlkYXRpb24gZmFpbGVkOicsIHsgcXVlcnksIGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2guc2VhcmNoV2l0aE9wdGlvbnMudmFsaWRhdGVRdWVyeScsIGVycm9yLCB7IHF1ZXJ5IH0pO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlTZWFyY2hSZXN1bHRzKHF1ZXJ5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSBpbmRleC1iYXNlZCBzZWFyY2ggZmlyc3RcbiAgICAgIGNvbnN0IGluZGV4UmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoRnJvbUluZGV4KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICAgIGNvbnN0IHNlYXJjaFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoYEluZGV4IHNlYXJjaCBjb21wbGV0ZWQgaW4gJHtzZWFyY2hUaW1lfW1zIHdpdGggJHtpbmRleFJlc3VsdHMuaXRlbXMubGVuZ3RofSByZXN1bHRzYCk7XG4gICAgICByZXR1cm4geyAuLi5pbmRleFJlc3VsdHMsIHNlYXJjaFRpbWUgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdJbmRleCBzZWFyY2ggZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbGVnYWN5IHNlYXJjaDonLCBlcnJvcik7XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGxlZ2FjeSBzZWFyY2hcbiAgICAgIGNvbnN0IGxlZ2FjeVJlc3VsdHMgPSBhd2FpdCB0aGlzLnNlYXJjaENvbGxlY3Rpb24ocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICBcbiAgICAgIC8vIENvbnZlcnQgbGVnYWN5IHJlc3VsdHMgdG8gbmV3IGZvcm1hdFxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydExlZ2FjeVJlc3VsdHMobGVnYWN5UmVzdWx0cywgcXVlcnksIG9wdGlvbnMsIHNlYXJjaFRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggY29sbGVjdGlvbiBmb3IgY29udGVudCBtYXRjaGluZyBxdWVyeVxuICAgKiBGYWxscyBiYWNrIHRvIGNhY2hlZCBkYXRhIHdoZW4gR2l0SHViIEFQSSBpcyBub3QgYXZhaWxhYmxlIG9yIG5vdCBhdXRoZW50aWNhdGVkXG4gICAqL1xuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb24gY2FsbGVkIHdpdGggcXVlcnk6IFwiJHtxdWVyeX1cImApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHNlYXJjaCBxdWVyeSBmb3Igc2VjdXJpdHlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcignU2VhcmNoIHF1ZXJ5IHZhbGlkYXRpb24gZmFpbGVkOicsIHsgcXVlcnksIGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2guc2VhcmNoLnZhbGlkYXRlUXVlcnknLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCB0cnkgR2l0SHViIEFQSSBzZWFyY2ggaWYgYXV0aGVudGljYXRlZFxuICAgICAgY29uc3Qgc2VhcmNoVXJsID0gYCR7dGhpcy5zZWFyY2hCYXNlVXJsfT9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KX0rcmVwbzpEb2xsaG91c2VNQ1AvY29sbGVjdGlvbitwYXRoOmxpYnJhcnkrZXh0ZW5zaW9uOm1kYDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQXR0ZW1wdGluZyBHaXRIdWIgQVBJIHNlYXJjaCB3aXRoIFVSTDogJHtzZWFyY2hVcmx9YCk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHNlYXJjaFVybCwgZmFsc2UpOyAvLyBEb24ndCByZXF1aXJlIGF1dGggZm9yIHNlYXJjaFxuICAgICAgXG4gICAgICBpZiAoZGF0YS5pdGVtcyAmJiBBcnJheS5pc0FycmF5KGRhdGEuaXRlbXMpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHtkYXRhLml0ZW1zLmxlbmd0aH0gaXRlbXMgdmlhIEdpdEh1YiBBUEkgc2VhcmNoYCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgY2FjaGUgd2l0aCBmcmVzaCBkYXRhIGZyb20gQVBJXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGVGcm9tR2l0SHViSXRlbXMoZGF0YS5pdGVtcyk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZGF0YS5pdGVtcztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdHaXRIdWIgQVBJIHNlYXJjaCByZXR1cm5lZCBubyBpdGVtcywgZmFsbGluZyBiYWNrIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgR2l0SHViIEFQSSBzZWFyY2ggZmFpbGVkOiAke2Vycm9yTWVzc2FnZX0uIEZhbGxpbmcgYmFjayB0byBjYWNoZWQgc2VhcmNoLmApO1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdDb2xsZWN0aW9uU2VhcmNoLnNlYXJjaC5naXRodWJBcGknLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gY2FjaGVkIHNlYXJjaFxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTZWFyY2hpbmcgY2FjaGUgZm9yIHF1ZXJ5OiBcIiR7cXVlcnl9XCJgKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGxvYWQgZnJvbSBjYWNoZSBmaXJzdFxuICAgICAgY29uc3QgY2FjaGVkSXRlbXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5zZWFyY2hDYWNoZShxdWVyeSk7XG4gICAgICBcbiAgICAgIGlmIChjYWNoZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHtjYWNoZWRJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY2FjaGVgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChjYWNoZWRJdGVtcyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FjaGUgc2VhcmNoIHJldHVybmVkIG5vIHJlc3VsdHMsIHRyeWluZyBzZWVkIGRhdGEnKTtcbiAgICAgIFxuICAgICAgLy8gSWYgY2FjaGUgaXMgZW1wdHkgb3Igbm8gcmVzdWx0cywgdXNlIHNlZWQgZGF0YVxuICAgICAgY29uc3Qgc2VlZEl0ZW1zID0gdGhpcy5zZWFyY2hTZWVkRGF0YShxdWVyeSk7XG4gICAgICBpZiAoc2VlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCAke3NlZWRJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gc2VlZCBkYXRhYCk7XG4gICAgICAgIC8vIFNhdmUgc2VlZCBkYXRhIHRvIGNhY2hlIGZvciBmdXR1cmUgdXNlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKSk7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYXZlZCBzZWVkIGRhdGEgdG8gY2FjaGUnKTtcbiAgICAgICAgfSBjYXRjaCAoY2FjaGVFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGNhY2hlRXJyb3JNZXNzYWdlID0gY2FjaGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gY2FjaGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKGNhY2hlRXJyb3IpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIHNhdmUgc2VlZCBkYXRhIHRvIGNhY2hlOiAke2NhY2hlRXJyb3JNZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoc2VlZEl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBpdGVtcyBmb3VuZCBpbiBjYWNoZSBvciBzZWVkIGRhdGEnKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBDYWNoZSBzZWFyY2ggZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignQ29sbGVjdGlvblNlYXJjaC5zZWFyY2guY2FjaGUnLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIFxuICAgICAgLy8gTGFzdCByZXNvcnQ6IHNlYXJjaCBzZWVkIGRhdGEgd2l0aG91dCBjYWNoZVxuICAgICAgY29uc3Qgc2VlZEl0ZW1zID0gdGhpcy5zZWFyY2hTZWVkRGF0YShxdWVyeSk7XG4gICAgICBsb2dnZXIuZGVidWcoYEZhbGxiYWNrIHRvIHNlZWQgZGF0YSBmb3VuZCAke3NlZWRJdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Q2FjaGVJdGVtc1RvR2l0SHViRm9ybWF0KHNlZWRJdGVtcyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2VhcmNoIHNlZWQgZGF0YSBmb3IgbWF0Y2hpbmcgaXRlbXMgd2l0aCBmdXp6eSBtYXRjaGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hTZWVkRGF0YShxdWVyeTogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgY29uc3Qgbm9ybURlYnVnID0gZGVidWdOb3JtYWxpemF0aW9uKHF1ZXJ5KTtcbiAgICBsb2dnZXIuZGVidWcoYFNlYXJjaGluZyBzZWVkIGRhdGEgLSBPcmlnaW5hbDogXCIke25vcm1EZWJ1Zy5vcmlnaW5hbH1cIiwgTm9ybWFsaXplZDogXCIke25vcm1EZWJ1Zy5ub3JtYWxpemVkfVwiLCBQYXJ0aWFsOiBcIiR7bm9ybURlYnVnLnBhcnRpYWxNYXRjaH1cImApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU2VhcmNoaW5nIGFnYWluc3QgJHtzZWVkRGF0YS5sZW5ndGh9IHNlZWQgaXRlbXNgKTtcbiAgICBcbiAgICBjb25zdCBtYXRjaGVzID0gc2VlZERhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gVXNlIHRoZSBpbXByb3ZlZCBtYXRjaGluZyBmdW5jdGlvbiB0aGF0IHRyaWVzIG11bHRpcGxlIHN0cmF0ZWdpZXNcbiAgICAgIGNvbnN0IG5hbWVNYXRjaGVzID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IHBhdGhNYXRjaGVzID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgaXRlbS5wYXRoKTtcbiAgICAgIFxuICAgICAgY29uc3QgaXNNYXRjaCA9IG5hbWVNYXRjaGVzIHx8IHBhdGhNYXRjaGVzO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYOKckyBNYXRjaCBmb3VuZDogJHtpdGVtLm5hbWV9ICgke2l0ZW0ucGF0aH0pIG1hdGNoZXMgcXVlcnkgXCIke3F1ZXJ5fVwiYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBpc01hdGNoO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIElmIG5vIG1hdGNoZXMgZm91bmQsIGxldCdzIGRlYnVnIHdoYXQgd2UgaGF2ZVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBtYXRjaGVzIGZvdW5kLiBBdmFpbGFibGUgc2VlZCBkYXRhOicpO1xuICAgICAgc2VlZERhdGEuc2xpY2UoMCwgMTApLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgICAtICR7aXRlbS5uYW1lfSAoJHtpdGVtLnBhdGh9KWApO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VlZERhdGEubGVuZ3RoID4gMTApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGAgIC4uLiBhbmQgJHtzZWVkRGF0YS5sZW5ndGggLSAxMH0gbW9yZSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kICR7bWF0Y2hlcy5sZW5ndGh9IG1hdGNoZXMgaW4gc2VlZCBkYXRhYCk7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGdXp6eSBtYXRjaGluZyBhbGdvcml0aG0gZm9yIHBhcnRpYWwgc3RyaW5nIG1hdGNoZXNcbiAgICovXG4gIHByaXZhdGUgZnV6enlNYXRjaCh0ZXJtOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gU2ltcGxlIGZ1enp5IG1hdGNoaW5nOiBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBvZiB0ZXJtIGFwcGVhciBpbiBvcmRlciBpbiB0YXJnZXRcbiAgICBpZiAodGVybS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgbGV0IHRlcm1JbmRleCA9IDA7XG4gICAgbGV0IHRhcmdldEluZGV4ID0gMDtcbiAgICBcbiAgICB3aGlsZSAodGVybUluZGV4IDwgdGVybS5sZW5ndGggJiYgdGFyZ2V0SW5kZXggPCB0YXJnZXQubGVuZ3RoKSB7XG4gICAgICBpZiAodGVybVt0ZXJtSW5kZXhdID09PSB0YXJnZXRbdGFyZ2V0SW5kZXhdKSB7XG4gICAgICAgIHRlcm1JbmRleCsrO1xuICAgICAgfVxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRlcm1JbmRleCA9PT0gdGVybS5sZW5ndGg7XG4gIH1cbiAgXG4gIFxuICAvKipcbiAgICogQ29udmVydCBjYWNoZSBpdGVtcyB0byBHaXRIdWIgQVBJIGZvcm1hdCBmb3IgY29uc2lzdGVudCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChjYWNoZUl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdKTogYW55W10ge1xuICAgIHJldHVybiBjYWNoZUl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cy8ke2l0ZW0ucGF0aH1gLFxuICAgICAgaHRtbF91cmw6IGBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vYmxvYi9tYWluLyR7aXRlbS5wYXRofWAsXG4gICAgICByZXBvc2l0b3J5OiB7XG4gICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgZnVsbF9uYW1lOiAnRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24nXG4gICAgICB9XG4gICAgfSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHdpdGggZnJlc2ggZGF0YSBmcm9tIEdpdEh1YiBBUEkgaXRlbXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2FjaGVGcm9tR2l0SHViSXRlbXMoZ2l0aHViSXRlbXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlSXRlbXM6IENvbGxlY3Rpb25JdGVtW10gPSBnaXRodWJJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgICAgc2hhOiBpdGVtLnNoYSxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9KSk7XG4gICAgICBcbiAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShjYWNoZUl0ZW1zKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVXBkYXRlZCBjYWNoZSB3aXRoICR7Y2FjaGVJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gR2l0SHViIEFQSWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2gudXBkYXRlQ2FjaGVJbkJhY2tncm91bmQnLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIHVwZGF0ZSBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBzZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgZm9ybWF0U2VhcmNoUmVzdWx0cyhpdGVtczogYW55W10sIHF1ZXJ5OiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYCR7cGVyc29uYUluZGljYXRvcn3wn5SNIE5vIGNvbnRlbnQgZm91bmQgZm9yIHF1ZXJ5OiBcIiR7cXVlcnl9XCJgO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbYCR7cGVyc29uYUluZGljYXRvcn3wn5SNICoqU2VhcmNoIFJlc3VsdHMgZm9yIFwiJHtxdWVyeX1cIioqICgke2l0ZW1zLmxlbmd0aH0gZm91bmQpXFxuXFxuYF07XG4gICAgXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAvLyBFeHRyYWN0IGNvbnRlbnQgdHlwZSBmcm9tIHBhdGggKGxpYnJhcnkvcGVyc29uYXMvY3JlYXRpdmUvd3JpdGVyLm1kIC0+IHBlcnNvbmFzKVxuICAgICAgY29uc3QgcGF0aFBhcnRzID0gaXRlbS5wYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhdGhQYXJ0c1sxXSB8fCAnY29udGVudCc7XG4gICAgICBcbiAgICAgIGNvbnN0IGNvbnRlbnRJY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAnYWdlbnRzJzogJ/CfpJYnLFxuICAgICAgICAncHJvbXB0cyc6ICfwn5KsJyxcbiAgICAgICAgJ3RlbXBsYXRlcyc6ICfwn5OEJyxcbiAgICAgICAgJ3Rvb2xzJzogJ/CflKcnLFxuICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnXG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbiA9IGNvbnRlbnRJY29uc1tjb250ZW50VHlwZV0gfHwgJ/Cfk4QnO1xuICAgICAgXG4gICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgYCAgICR7aWNvbn0gKioke2l0ZW0ubmFtZS5yZXBsYWNlKCcubWQnLCAnJyl9KipcXG5gLFxuICAgICAgICBgICAgICAg8J+TgiBQYXRoOiAke2l0ZW0ucGF0aH1cXG5gLFxuICAgICAgICBgICAgICAg8J+TpSBJbnN0YWxsOiBcXGBpbnN0YWxsX2NvbnRlbnQgXCIke2l0ZW0ucGF0aH1cIlxcYFxcbmAsXG4gICAgICAgIGAgICAgICDwn5GB77iPIERldGFpbHM6IFxcYGdldF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke2l0ZW0ucGF0aH1cIlxcYFxcblxcbmBcbiAgICAgICk7XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZnJvbSBjb2xsZWN0aW9uIGluZGV4IHdpdGggZnVsbCBmZWF0dXJlZCBzZWFyY2ggYW5kIHBhZ2luYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoRnJvbUluZGV4KHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBQcm9taXNlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICBjb25zdCBpbmRleCA9IGF3YWl0IHRoaXMuaW5kZXhDYWNoZS5nZXRJbmRleCgpO1xuICAgIGNvbnN0IGFsbEVudHJpZXMgPSB0aGlzLmZsYXR0ZW5JbmRleEVudHJpZXMoaW5kZXgpO1xuICAgIFxuICAgIC8vIEZpbHRlciBieSBlbGVtZW50IHR5cGUgaWYgc3BlY2lmaWVkXG4gICAgbGV0IGZpbHRlcmVkRW50cmllcyA9IGFsbEVudHJpZXM7XG4gICAgaWYgKG9wdGlvbnMuZWxlbWVudFR5cGUpIHtcbiAgICAgIGZpbHRlcmVkRW50cmllcyA9IGFsbEVudHJpZXMuZmlsdGVyKGVudHJ5ID0+IGVudHJ5LnR5cGUgPT09IG9wdGlvbnMuZWxlbWVudFR5cGUpO1xuICAgIH1cbiAgICBcbiAgICAvLyBGaWx0ZXIgYnkgY2F0ZWdvcnkgaWYgc3BlY2lmaWVkXG4gICAgaWYgKG9wdGlvbnMuY2F0ZWdvcnkpIHtcbiAgICAgIGZpbHRlcmVkRW50cmllcyA9IGZpbHRlcmVkRW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkuY2F0ZWdvcnkgPT09IG9wdGlvbnMuY2F0ZWdvcnkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTZWFyY2ggbWF0Y2hpbmdcbiAgICBjb25zdCBtYXRjaGVkRW50cmllcyA9IHRoaXMucGVyZm9ybUluZGV4U2VhcmNoKHF1ZXJ5LCBmaWx0ZXJlZEVudHJpZXMpO1xuICAgIFxuICAgIC8vIFNvcnQgcmVzdWx0c1xuICAgIGNvbnN0IHNvcnRlZEVudHJpZXMgPSB0aGlzLnNvcnRTZWFyY2hSZXN1bHRzKG1hdGNoZWRFbnRyaWVzLCBvcHRpb25zLnNvcnRCeSB8fCAncmVsZXZhbmNlJywgcXVlcnkpO1xuICAgIFxuICAgIC8vIEFwcGx5IHBhZ2luYXRpb25cbiAgICBjb25zdCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zLnBhZ2VTaXplIHx8IDI1O1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAocGFnZSAtIDEpICogcGFnZVNpemU7XG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgY29uc3QgcGFnaW5hdGVkRW50cmllcyA9IHNvcnRlZEVudHJpZXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcGFnaW5hdGVkRW50cmllcyxcbiAgICAgIHRvdGFsOiBzb3J0ZWRFbnRyaWVzLmxlbmd0aCxcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIGhhc01vcmU6IGVuZEluZGV4IDwgc29ydGVkRW50cmllcy5sZW5ndGgsXG4gICAgICBxdWVyeSxcbiAgICAgIHNlYXJjaFRpbWU6IDAgLy8gV2lsbCBiZSBzZXQgYnkgY2FsbGVyXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVuIGluZGV4IGVudHJpZXMgZnJvbSBhbGwgY2F0ZWdvcmllcyBpbnRvIGEgc2luZ2xlIGFycmF5XG4gICAqL1xuICBwcml2YXRlIGZsYXR0ZW5JbmRleEVudHJpZXMoaW5kZXg6IENvbGxlY3Rpb25JbmRleCk6IEluZGV4RW50cnlbXSB7XG4gICAgY29uc3QgZW50cmllczogSW5kZXhFbnRyeVtdID0gW107XG4gICAgXG4gICAgZm9yIChjb25zdCBbZWxlbWVudFR5cGUsIHR5cGVFbnRyaWVzXSBvZiBPYmplY3QuZW50cmllcyhpbmRleC5pbmRleCkpIHtcbiAgICAgIGVudHJpZXMucHVzaCguLi50eXBlRW50cmllcyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBlbnRyaWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gc2VhcmNoIG1hdGNoaW5nIG9uIGluZGV4IGVudHJpZXNcbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUluZGV4U2VhcmNoKHF1ZXJ5OiBzdHJpbmcsIGVudHJpZXM6IEluZGV4RW50cnlbXSk6IEluZGV4RW50cnlbXSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gbm9ybWFsaXplU2VhcmNoVGVybShxdWVyeSk7XG4gICAgY29uc3QgcXVlcnlXb3JkcyA9IG5vcm1hbGl6ZWRRdWVyeS5zcGxpdCgvXFxzKy8pLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMCk7XG4gICAgXG4gICAgcmV0dXJuIGVudHJpZXMuZmlsdGVyKGVudHJ5ID0+IHtcbiAgICAgIC8vIFNlYXJjaCBpbiBtdWx0aXBsZSBmaWVsZHNcbiAgICAgIGNvbnN0IHNlYXJjaGFibGVUZXh0ID0gW1xuICAgICAgICBlbnRyeS5uYW1lLFxuICAgICAgICBlbnRyeS5kZXNjcmlwdGlvbixcbiAgICAgICAgZW50cnkucGF0aCxcbiAgICAgICAgLi4uZW50cnkudGFnc1xuICAgICAgXS5qb2luKCcgJykudG9Mb3dlckNhc2UoKTtcbiAgICAgIFxuICAgICAgLy8gVXNlIGV4aXN0aW5nIHNlYXJjaCB1dGlsaXRpZXMgZm9yIGNvbnNpc3RlbmN5XG4gICAgICBjb25zdCBuYW1lTWF0Y2ggPSBpc1NlYXJjaE1hdGNoKHF1ZXJ5LCBlbnRyeS5uYW1lKTtcbiAgICAgIGNvbnN0IGRlc2NNYXRjaCA9IGlzU2VhcmNoTWF0Y2gocXVlcnksIGVudHJ5LmRlc2NyaXB0aW9uKTtcbiAgICAgIGNvbnN0IHBhdGhNYXRjaCA9IGlzU2VhcmNoTWF0Y2gocXVlcnksIGVudHJ5LnBhdGgpO1xuICAgICAgY29uc3QgdGFnTWF0Y2ggPSBlbnRyeS50YWdzLnNvbWUodGFnID0+IGlzU2VhcmNoTWF0Y2gocXVlcnksIHRhZykpO1xuICAgICAgXG4gICAgICByZXR1cm4gbmFtZU1hdGNoIHx8IGRlc2NNYXRjaCB8fCBwYXRoTWF0Y2ggfHwgdGFnTWF0Y2g7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU29ydCBzZWFyY2ggcmVzdWx0cyBieSByZWxldmFuY2UsIG5hbWUsIG9yIGRhdGVcbiAgICovXG4gIHByaXZhdGUgc29ydFNlYXJjaFJlc3VsdHMoZW50cmllczogSW5kZXhFbnRyeVtdLCBzb3J0Qnk6ICdyZWxldmFuY2UnIHwgJ25hbWUnIHwgJ2RhdGUnLCBxdWVyeTogc3RyaW5nKTogSW5kZXhFbnRyeVtdIHtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uZW50cmllc107XG4gICAgXG4gICAgc3dpdGNoIChzb3J0QnkpIHtcbiAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICBzb3J0ZWQuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHNvcnRlZC5zb3J0KChhLCBiKSA9PiBuZXcgRGF0ZShiLmNyZWF0ZWQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEuY3JlYXRlZCkuZ2V0VGltZSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWxldmFuY2UnOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbGV2YW5jZSBzY29yZXNcbiAgICAgICAgc29ydGVkLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBzY29yZUEgPSB0aGlzLmNhbGN1bGF0ZVJlbGV2YW5jZVNjb3JlKHF1ZXJ5LCBhKTtcbiAgICAgICAgICBjb25zdCBzY29yZUIgPSB0aGlzLmNhbGN1bGF0ZVJlbGV2YW5jZVNjb3JlKHF1ZXJ5LCBiKTtcbiAgICAgICAgICByZXR1cm4gc2NvcmVCIC0gc2NvcmVBO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzb3J0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHJlbGV2YW5jZSBzY29yZSBmb3Igc2VhcmNoIHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgY2FsY3VsYXRlUmVsZXZhbmNlU2NvcmUocXVlcnk6IHN0cmluZywgZW50cnk6IEluZGV4RW50cnkpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IG5vcm1hbGl6ZVNlYXJjaFRlcm0ocXVlcnkpO1xuICAgIGxldCBzY29yZSA9IDA7XG4gICAgXG4gICAgLy8gRXhhY3QgbmFtZSBtYXRjaCBnZXRzIGhpZ2hlc3Qgc2NvcmVcbiAgICBpZiAobm9ybWFsaXplU2VhcmNoVGVybShlbnRyeS5uYW1lKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpKSB7XG4gICAgICBzY29yZSArPSAxMDA7XG4gICAgfVxuICAgIFxuICAgIC8vIERlc2NyaXB0aW9uIG1hdGNoXG4gICAgaWYgKG5vcm1hbGl6ZVNlYXJjaFRlcm0oZW50cnkuZGVzY3JpcHRpb24pLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpIHtcbiAgICAgIHNjb3JlICs9IDUwO1xuICAgIH1cbiAgICBcbiAgICAvLyBUYWcgbWF0Y2hlc1xuICAgIGNvbnN0IG1hdGNoaW5nVGFncyA9IGVudHJ5LnRhZ3MuZmlsdGVyKHRhZyA9PiBcbiAgICAgIG5vcm1hbGl6ZVNlYXJjaFRlcm0odGFnKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpXG4gICAgKTtcbiAgICBzY29yZSArPSBtYXRjaGluZ1RhZ3MubGVuZ3RoICogMjU7XG4gICAgXG4gICAgLy8gUGF0aCBtYXRjaCAobG93ZXIgcHJpb3JpdHkpXG4gICAgaWYgKG5vcm1hbGl6ZVNlYXJjaFRlcm0oZW50cnkucGF0aCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSkge1xuICAgICAgc2NvcmUgKz0gMTA7XG4gICAgfVxuICAgIFxuICAgIC8vIEJvbnVzIGZvciByZWNlbnQgY29udGVudFxuICAgIGNvbnN0IGRheXNTaW5jZUNyZWF0ZWQgPSAoRGF0ZS5ub3coKSAtIG5ldyBEYXRlKGVudHJ5LmNyZWF0ZWQpLmdldFRpbWUoKSkgLyAoMTAwMCAqIDYwICogNjAgKiAyNCk7XG4gICAgaWYgKGRheXNTaW5jZUNyZWF0ZWQgPCAzMCkge1xuICAgICAgc2NvcmUgKz0gNTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNjb3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgbGVnYWN5IHNlYXJjaCByZXN1bHRzIHRvIG5ldyBTZWFyY2hSZXN1bHRzIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0TGVnYWN5UmVzdWx0cyhsZWdhY3lSZXN1bHRzOiBhbnlbXSwgcXVlcnk6IHN0cmluZywgb3B0aW9uczogU2VhcmNoT3B0aW9ucywgc2VhcmNoVGltZTogbnVtYmVyKTogU2VhcmNoUmVzdWx0cyB7XG4gICAgLy8gQ29udmVydCBHaXRIdWIgQVBJIGZvcm1hdCB0byBJbmRleEVudHJ5IGZvcm1hdFxuICAgIGNvbnN0IGVudHJpZXM6IEluZGV4RW50cnlbXSA9IGxlZ2FjeVJlc3VsdHMubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgIHR5cGU6IHRoaXMuZXh0cmFjdFR5cGVGcm9tUGF0aChpdGVtLnBhdGgpLFxuICAgICAgbmFtZTogaXRlbS5uYW1lPy5yZXBsYWNlKCcubWQnLCAnJykgfHwgJ1Vua25vd24nLFxuICAgICAgZGVzY3JpcHRpb246ICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnLFxuICAgICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgICAgIGF1dGhvcjogJ1Vua25vd24nLFxuICAgICAgdGFnczogW10sXG4gICAgICBzaGE6IGl0ZW0uc2hhIHx8ICcnLFxuICAgICAgY2F0ZWdvcnk6IHRoaXMuZXh0cmFjdENhdGVnb3J5RnJvbVBhdGgoaXRlbS5wYXRoKSxcbiAgICAgIGNyZWF0ZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGxpY2Vuc2U6ICdVbmtub3duJ1xuICAgIH0pKTtcbiAgICBcbiAgICAvLyBBcHBseSBwYWdpbmF0aW9uXG4gICAgY29uc3QgcGFnZSA9IG9wdGlvbnMucGFnZSB8fCAxO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gb3B0aW9ucy5wYWdlU2l6ZSB8fCAyNTtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gKHBhZ2UgLSAxKSAqIHBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHBhZ2VTaXplO1xuICAgIGNvbnN0IHBhZ2luYXRlZEVudHJpZXMgPSBlbnRyaWVzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHBhZ2luYXRlZEVudHJpZXMsXG4gICAgICB0b3RhbDogZW50cmllcy5sZW5ndGgsXG4gICAgICBwYWdlLFxuICAgICAgcGFnZVNpemUsXG4gICAgICBoYXNNb3JlOiBlbmRJbmRleCA8IGVudHJpZXMubGVuZ3RoLFxuICAgICAgcXVlcnksXG4gICAgICBzZWFyY2hUaW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGVsZW1lbnQgdHlwZSBmcm9tIGZpbGUgcGF0aFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0VHlwZUZyb21QYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyICYmIHBhcnRzWzBdID09PSAnbGlicmFyeScpIHtcbiAgICAgIHJldHVybiBwYXJ0c1sxXTtcbiAgICB9XG4gICAgcmV0dXJuICd1bmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGNhdGVnb3J5IGZyb20gZmlsZSBwYXRoXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RDYXRlZ29yeUZyb21QYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAzICYmIHBhcnRzWzBdID09PSAnbGlicmFyeScpIHtcbiAgICAgIHJldHVybiBwYXJ0c1syXTtcbiAgICB9XG4gICAgcmV0dXJuICd1bmNhdGVnb3JpemVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZW1wdHkgc2VhcmNoIHJlc3VsdHMgZm9yIGVycm9yIGNhc2VzXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVtcHR5U2VhcmNoUmVzdWx0cyhxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBTZWFyY2hPcHRpb25zKTogU2VhcmNoUmVzdWx0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHRvdGFsOiAwLFxuICAgICAgcGFnZTogb3B0aW9ucy5wYWdlIHx8IDEsXG4gICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZSB8fCAyNSxcbiAgICAgIGhhc01vcmU6IGZhbHNlLFxuICAgICAgcXVlcnksXG4gICAgICBzZWFyY2hUaW1lOiAwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmhhbmNlZCBmb3JtYXQgZm9yIHNlYXJjaCByZXN1bHRzIHdpdGggcGFnaW5hdGlvbiBpbmZvXG4gICAqL1xuICBmb3JtYXRTZWFyY2hSZXN1bHRzV2l0aFBhZ2luYXRpb24ocmVzdWx0czogU2VhcmNoUmVzdWx0cywgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGlmIChyZXN1bHRzLnRvdGFsID09PSAwKSB7XG4gICAgICByZXR1cm4gYCR7cGVyc29uYUluZGljYXRvcn3wn5SNIE5vIGNvbnRlbnQgZm91bmQgZm9yIHF1ZXJ5OiBcIiR7cmVzdWx0cy5xdWVyeX1cImA7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHN0YXJ0SXRlbSA9IChyZXN1bHRzLnBhZ2UgLSAxKSAqIHJlc3VsdHMucGFnZVNpemUgKyAxO1xuICAgIGNvbnN0IGVuZEl0ZW0gPSBNYXRoLm1pbihyZXN1bHRzLnBhZ2UgKiByZXN1bHRzLnBhZ2VTaXplLCByZXN1bHRzLnRvdGFsKTtcbiAgICBcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbXG4gICAgICBgJHtwZXJzb25hSW5kaWNhdG9yffCflI0gKipTZWFyY2ggUmVzdWx0cyBmb3IgXCIke3Jlc3VsdHMucXVlcnl9XCIqKlxcbmAsXG4gICAgICBg8J+TiiBTaG93aW5nICR7c3RhcnRJdGVtfS0ke2VuZEl0ZW19IG9mICR7cmVzdWx0cy50b3RhbH0gcmVzdWx0cyAoUGFnZSAke3Jlc3VsdHMucGFnZX0pXFxuYCxcbiAgICAgIGDimqEgU2VhcmNoIHRpbWU6ICR7cmVzdWx0cy5zZWFyY2hUaW1lfW1zXFxuXFxuYFxuICAgIF07XG4gICAgXG4gICAgcmVzdWx0cy5pdGVtcy5mb3JFYWNoKChpdGVtOiBJbmRleEVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50SWNvbnM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAgICdwZXJzb25hcyc6ICfwn46tJyxcbiAgICAgICAgJ3NraWxscyc6ICfwn5ug77iPJyxcbiAgICAgICAgJ2FnZW50cyc6ICfwn6SWJyxcbiAgICAgICAgJ3Byb21wdHMnOiAn8J+SrCcsXG4gICAgICAgICd0ZW1wbGF0ZXMnOiAn8J+ThCcsXG4gICAgICAgICd0b29scyc6ICfwn5SnJyxcbiAgICAgICAgJ2Vuc2VtYmxlcyc6ICfwn468JyxcbiAgICAgICAgJ21lbW9yaWVzJzogJ/Cfp6AnXG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbiA9IGNvbnRlbnRJY29uc1tpdGVtLnR5cGVdIHx8ICfwn5OEJztcbiAgICAgIFxuICAgICAgdGV4dFBhcnRzLnB1c2goXG4gICAgICAgIGAgICAke2ljb259ICoqJHtpdGVtLm5hbWV9KiogKCR7aXRlbS50eXBlfSlcXG5gLFxuICAgICAgICBgICAgICAg8J+TnSAke2l0ZW0uZGVzY3JpcHRpb259XFxuYCxcbiAgICAgICAgYCAgICAgIPCfj7fvuI8gVGFnczogJHtpdGVtLnRhZ3Muam9pbignLCAnKX1cXG5gLFxuICAgICAgICBgICAgICAg8J+TgiBQYXRoOiAke2l0ZW0ucGF0aH1cXG5gLFxuICAgICAgICBgICAgICAg8J+TpSBJbnN0YWxsOiBcXGBpbnN0YWxsX2NvbnRlbnQgXCIke2l0ZW0ucGF0aH1cIlxcYFxcbmAsXG4gICAgICAgIGAgICAgICDwn5GB77iPIERldGFpbHM6IFxcYGdldF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke2l0ZW0ucGF0aH1cIlxcYFxcblxcbmBcbiAgICAgICk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gQWRkIHBhZ2luYXRpb24gaW5mb1xuICAgIGlmIChyZXN1bHRzLmhhc01vcmUpIHtcbiAgICAgIGNvbnN0IG5leHRQYWdlID0gcmVzdWx0cy5wYWdlICsgMTtcbiAgICAgIHRleHRQYXJ0cy5wdXNoKGDwn5OEIE1vcmUgcmVzdWx0cyBhdmFpbGFibGUuIFVzZSBwYWdlICR7bmV4dFBhZ2V9IHRvIHNlZSBuZXh0ICR7cmVzdWx0cy5wYWdlU2l6ZX0gaXRlbXMuXFxuYCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3MgZm9yIGRlYnVnZ2luZ1xuICAgKi9cbiAgYXN5bmMgZ2V0Q2FjaGVTdGF0cygpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGluZGV4U3RhdHMgPSB0aGlzLmluZGV4Q2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgIGNvbnN0IGNhY2hlU3RhdHMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5nZXRDYWNoZVN0YXRzKCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBpbmRleFN0YXRzLFxuICAgICAgY29sbGVjdGlvbjogY2FjaGVTdGF0c1xuICAgIH07XG4gIH1cbn0iXX0=
477
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDZCQUE2QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEgsT0FBTyxFQUFFLFlBQVksRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQUd2RSxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBQ2pDLFVBQVUsQ0FBdUI7SUFDakMsYUFBYSxHQUFHLG9DQUFvQyxDQUFDO0lBRTdELFlBQVksWUFBMEIsRUFBRSxlQUFpQztRQUN2RSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsSUFBSSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEtBQWEsRUFBRSxVQUF5QixFQUFFO1FBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsS0FBSyxDQUFDLG9FQUFvRSxLQUFLLEdBQUcsRUFBRSxPQUFPLENBQUMs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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQzNDLGtCQUFrQixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQy9CLG1EQUFtRCxJQUFJLENBQUMsSUFBSSxPQUFPLEVBQ25FLGdEQUFnRCxJQUFJLENBQUMsSUFBSSxTQUFTLENBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILHNCQUFzQjtRQUN0QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxRQUFRLGdCQUFnQixPQUFPLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQztRQUM3RyxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxhQUFhO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRTlELE9BQU87WUFDTCxLQUFLLEVBQUUsVUFBVTtZQUNqQixVQUFVLEVBQUUsVUFBVTtTQUN2QixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWFyY2ggZm9yIGNvbnRlbnQgaW4gdGhlIGNvbGxlY3Rpb25cbiAqL1xuXG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uQ2FjaGUsIENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcbmltcG9ydCB7IENvbGxlY3Rpb25JbmRleENhY2hlIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkluZGV4Q2FjaGUuanMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblNlZWRlciB9IGZyb20gJy4vQ29sbGVjdGlvblNlZWRlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2VhcmNoVGVybSwgdmFsaWRhdGVTZWFyY2hRdWVyeSwgaXNTZWFyY2hNYXRjaCwgZGVidWdOb3JtYWxpemF0aW9uIH0gZnJvbSAnLi4vdXRpbHMvc2VhcmNoVXRpbHMuanMnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyLCBFcnJvckNhdGVnb3J5IH0gZnJvbSAnLi4vdXRpbHMvRXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IEluZGV4RW50cnksIFNlYXJjaFJlc3VsdHMsIFNlYXJjaE9wdGlvbnMsIENvbGxlY3Rpb25JbmRleCB9IGZyb20gJy4uL3R5cGVzL2NvbGxlY3Rpb24uanMnO1xuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblNlYXJjaCB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgY29sbGVjdGlvbkNhY2hlOiBDb2xsZWN0aW9uQ2FjaGU7XG4gIHByaXZhdGUgaW5kZXhDYWNoZTogQ29sbGVjdGlvbkluZGV4Q2FjaGU7XG4gIHByaXZhdGUgc2VhcmNoQmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3NlYXJjaC9jb2RlJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50LCBjb2xsZWN0aW9uQ2FjaGU/OiBDb2xsZWN0aW9uQ2FjaGUpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLmNvbGxlY3Rpb25DYWNoZSA9IGNvbGxlY3Rpb25DYWNoZSB8fCBuZXcgQ29sbGVjdGlvbkNhY2hlKCk7XG4gICAgdGhpcy5pbmRleENhY2hlID0gbmV3IENvbGxlY3Rpb25JbmRleENhY2hlKGdpdGh1YkNsaWVudCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFbmhhbmNlZCBzZWFyY2ggdXNpbmcgY29sbGVjdGlvbiBpbmRleCB3aXRoIHBhZ2luYXRpb24gYW5kIGZpbHRlcmluZ1xuICAgKiBGYWxscyBiYWNrIHRvIEFQSSBzZWFyY2ggYW5kIGNhY2hlIHdoZW4gaW5kZXggaXMgdW5hdmFpbGFibGVcbiAgICovXG4gIGFzeW5jIHNlYXJjaENvbGxlY3Rpb25XaXRoT3B0aW9ucyhxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBTZWFyY2hPcHRpb25zID0ge30pOiBQcm9taXNlPFNlYXJjaFJlc3VsdHM+IHtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvblNlYXJjaC5zZWFyY2hDb2xsZWN0aW9uV2l0aE9wdGlvbnMgY2FsbGVkIHdpdGggcXVlcnk6IFwiJHtxdWVyeX1cImAsIG9wdGlvbnMpO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHNlYXJjaCBxdWVyeSBmb3Igc2VjdXJpdHlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcignU2VhcmNoIHF1ZXJ5IHZhbGlkYXRpb24gZmFpbGVkOicsIHsgcXVlcnksIGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2guc2VhcmNoV2l0aE9wdGlvbnMudmFsaWRhdGVRdWVyeScsIGVycm9yLCB7IHF1ZXJ5IH0pO1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlTZWFyY2hSZXN1bHRzKHF1ZXJ5LCBvcHRpb25zKTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSBpbmRleC1iYXNlZCBzZWFyY2ggZmlyc3RcbiAgICAgIGNvbnN0IGluZGV4UmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoRnJvbUluZGV4KHF1ZXJ5LCBvcHRpb25zKTtcbiAgICAgIGNvbnN0IHNlYXJjaFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoYEluZGV4IHNlYXJjaCBjb21wbGV0ZWQgaW4gJHtzZWFyY2hUaW1lfW1zIHdpdGggJHtpbmRleFJlc3VsdHMuaXRlbXMubGVuZ3RofSByZXN1bHRzYCk7XG4gICAgICByZXR1cm4geyAuLi5pbmRleFJlc3VsdHMsIHNlYXJjaFRpbWUgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdJbmRleCBzZWFyY2ggZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gbGVnYWN5IHNlYXJjaDonLCBlcnJvcik7XG4gICAgICBcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGxlZ2FjeSBzZWFyY2hcbiAgICAgIGNvbnN0IGxlZ2FjeVJlc3VsdHMgPSBhd2FpdCB0aGlzLnNlYXJjaENvbGxlY3Rpb24ocXVlcnkpO1xuICAgICAgY29uc3Qgc2VhcmNoVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICBcbiAgICAgIC8vIENvbnZlcnQgbGVnYWN5IHJlc3VsdHMgdG8gbmV3IGZvcm1hdFxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydExlZ2FjeVJlc3VsdHMobGVnYWN5UmVzdWx0cywgcXVlcnksIG9wdGlvbnMsIHNlYXJjaFRpbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggY29sbGVjdGlvbiBmb3IgY29udGVudCBtYXRjaGluZyBxdWVyeVxuICAgKiBGYWxscyBiYWNrIHRvIGNhY2hlZCBkYXRhIHdoZW4gR2l0SHViIEFQSSBpcyBub3QgYXZhaWxhYmxlIG9yIG5vdCBhdXRoZW50aWNhdGVkXG4gICAqL1xuICBhc3luYyBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBDb2xsZWN0aW9uU2VhcmNoLnNlYXJjaENvbGxlY3Rpb24gY2FsbGVkIHdpdGggcXVlcnk6IFwiJHtxdWVyeX1cImApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHNlYXJjaCBxdWVyeSBmb3Igc2VjdXJpdHlcbiAgICB0cnkge1xuICAgICAgdmFsaWRhdGVTZWFyY2hRdWVyeShxdWVyeSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5lcnJvcignU2VhcmNoIHF1ZXJ5IHZhbGlkYXRpb24gZmFpbGVkOicsIHsgcXVlcnksIGVycm9yOiBlcnJvck1lc3NhZ2UgfSk7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2guc2VhcmNoLnZhbGlkYXRlUXVlcnknLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpcnN0LCB0cnkgR2l0SHViIEFQSSBzZWFyY2ggaWYgYXV0aGVudGljYXRlZFxuICAgICAgY29uc3Qgc2VhcmNoVXJsID0gYCR7dGhpcy5zZWFyY2hCYXNlVXJsfT9xPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KX0rcmVwbzpEb2xsaG91c2VNQ1AvY29sbGVjdGlvbitwYXRoOmxpYnJhcnkrZXh0ZW5zaW9uOm1kYDtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQXR0ZW1wdGluZyBHaXRIdWIgQVBJIHNlYXJjaCB3aXRoIFVSTDogJHtzZWFyY2hVcmx9YCk7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHNlYXJjaFVybCwgZmFsc2UpOyAvLyBEb24ndCByZXF1aXJlIGF1dGggZm9yIHNlYXJjaFxuICAgICAgXG4gICAgICBpZiAoZGF0YS5pdGVtcyAmJiBBcnJheS5pc0FycmF5KGRhdGEuaXRlbXMpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHtkYXRhLml0ZW1zLmxlbmd0aH0gaXRlbXMgdmlhIEdpdEh1YiBBUEkgc2VhcmNoYCk7XG4gICAgICAgIFxuICAgICAgICAvLyBVcGRhdGUgY2FjaGUgd2l0aCBmcmVzaCBkYXRhIGZyb20gQVBJXG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGVGcm9tR2l0SHViSXRlbXMoZGF0YS5pdGVtcyk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gZGF0YS5pdGVtcztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdHaXRIdWIgQVBJIHNlYXJjaCByZXR1cm5lZCBubyBpdGVtcywgZmFsbGluZyBiYWNrIHRvIGNhY2hlJyk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgR2l0SHViIEFQSSBzZWFyY2ggZmFpbGVkOiAke2Vycm9yTWVzc2FnZX0uIEZhbGxpbmcgYmFjayB0byBjYWNoZWQgc2VhcmNoLmApO1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdDb2xsZWN0aW9uU2VhcmNoLnNlYXJjaC5naXRodWJBcGknLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIFxuICAgICAgLy8gRmFsbGJhY2sgdG8gY2FjaGVkIHNlYXJjaFxuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZWFyY2ggY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2VhcmNoRnJvbUNhY2hlKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgbG9nZ2VyLmRlYnVnKGBTZWFyY2hpbmcgY2FjaGUgZm9yIHF1ZXJ5OiBcIiR7cXVlcnl9XCJgKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gVHJ5IHRvIGxvYWQgZnJvbSBjYWNoZSBmaXJzdFxuICAgICAgY29uc3QgY2FjaGVkSXRlbXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb25DYWNoZS5zZWFyY2hDYWNoZShxdWVyeSk7XG4gICAgICBcbiAgICAgIGlmIChjYWNoZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRm91bmQgJHtjYWNoZWRJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY2FjaGVgKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChjYWNoZWRJdGVtcyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FjaGUgc2VhcmNoIHJldHVybmVkIG5vIHJlc3VsdHMsIHRyeWluZyBzZWVkIGRhdGEnKTtcbiAgICAgIFxuICAgICAgLy8gSWYgY2FjaGUgaXMgZW1wdHkgb3Igbm8gcmVzdWx0cywgdXNlIHNlZWQgZGF0YVxuICAgICAgY29uc3Qgc2VlZEl0ZW1zID0gdGhpcy5zZWFyY2hTZWVkRGF0YShxdWVyeSk7XG4gICAgICBpZiAoc2VlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCAke3NlZWRJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gc2VlZCBkYXRhYCk7XG4gICAgICAgIC8vIFNhdmUgc2VlZCBkYXRhIHRvIGNhY2hlIGZvciBmdXR1cmUgdXNlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuc2F2ZUNhY2hlKENvbGxlY3Rpb25TZWVkZXIuZ2V0U2VlZERhdGEoKSk7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTYXZlZCBzZWVkIGRhdGEgdG8gY2FjaGUnKTtcbiAgICAgICAgfSBjYXRjaCAoY2FjaGVFcnJvcikge1xuICAgICAgICAgIGNvbnN0IGNhY2hlRXJyb3JNZXNzYWdlID0gY2FjaGVFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gY2FjaGVFcnJvci5tZXNzYWdlIDogU3RyaW5nKGNhY2hlRXJyb3IpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmFpbGVkIHRvIHNhdmUgc2VlZCBkYXRhIHRvIGNhY2hlOiAke2NhY2hlRXJyb3JNZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRDYWNoZUl0ZW1zVG9HaXRIdWJGb3JtYXQoc2VlZEl0ZW1zKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBpdGVtcyBmb3VuZCBpbiBjYWNoZSBvciBzZWVkIGRhdGEnKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBDYWNoZSBzZWFyY2ggZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignQ29sbGVjdGlvblNlYXJjaC5zZWFyY2guY2FjaGUnLCBlcnJvciwgeyBxdWVyeSB9KTtcbiAgICAgIFxuICAgICAgLy8gTGFzdCByZXNvcnQ6IHNlYXJjaCBzZWVkIGRhdGEgd2l0aG91dCBjYWNoZVxuICAgICAgY29uc3Qgc2VlZEl0ZW1zID0gdGhpcy5zZWFyY2hTZWVkRGF0YShxdWVyeSk7XG4gICAgICBsb2dnZXIuZGVidWcoYEZhbGxiYWNrIHRvIHNlZWQgZGF0YSBmb3VuZCAke3NlZWRJdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Q2FjaGVJdGVtc1RvR2l0SHViRm9ybWF0KHNlZWRJdGVtcyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2VhcmNoIHNlZWQgZGF0YSBmb3IgbWF0Y2hpbmcgaXRlbXMgd2l0aCBmdXp6eSBtYXRjaGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBzZWFyY2hTZWVkRGF0YShxdWVyeTogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgY29uc3Qgc2VlZERhdGEgPSBDb2xsZWN0aW9uU2VlZGVyLmdldFNlZWREYXRhKCk7XG4gICAgY29uc3Qgbm9ybURlYnVnID0gZGVidWdOb3JtYWxpemF0aW9uKHF1ZXJ5KTtcbiAgICBsb2dnZXIuZGVidWcoYFNlYXJjaGluZyBzZWVkIGRhdGEgLSBPcmlnaW5hbDogXCIke25vcm1EZWJ1Zy5vcmlnaW5hbH1cIiwgTm9ybWFsaXplZDogXCIke25vcm1EZWJ1Zy5ub3JtYWxpemVkfVwiLCBQYXJ0aWFsOiBcIiR7bm9ybURlYnVnLnBhcnRpYWxNYXRjaH1cImApO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU2VhcmNoaW5nIGFnYWluc3QgJHtzZWVkRGF0YS5sZW5ndGh9IHNlZWQgaXRlbXNgKTtcbiAgICBcbiAgICBjb25zdCBtYXRjaGVzID0gc2VlZERhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gVXNlIHRoZSBpbXByb3ZlZCBtYXRjaGluZyBmdW5jdGlvbiB0aGF0IHRyaWVzIG11bHRpcGxlIHN0cmF0ZWdpZXNcbiAgICAgIGNvbnN0IG5hbWVNYXRjaGVzID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IHBhdGhNYXRjaGVzID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgaXRlbS5wYXRoKTtcbiAgICAgIFxuICAgICAgY29uc3QgaXNNYXRjaCA9IG5hbWVNYXRjaGVzIHx8IHBhdGhNYXRjaGVzO1xuICAgICAgXG4gICAgICBpZiAoaXNNYXRjaCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYOKckyBNYXRjaCBmb3VuZDogJHtpdGVtLm5hbWV9ICgke2l0ZW0ucGF0aH0pIG1hdGNoZXMgcXVlcnkgXCIke3F1ZXJ5fVwiYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiBpc01hdGNoO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIElmIG5vIG1hdGNoZXMgZm91bmQsIGxldCdzIGRlYnVnIHdoYXQgd2UgaGF2ZVxuICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBtYXRjaGVzIGZvdW5kLiBBdmFpbGFibGUgc2VlZCBkYXRhOicpO1xuICAgICAgc2VlZERhdGEuc2xpY2UoMCwgMTApLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgICAtICR7aXRlbS5uYW1lfSAoJHtpdGVtLnBhdGh9KWApO1xuICAgICAgfSk7XG4gICAgICBpZiAoc2VlZERhdGEubGVuZ3RoID4gMTApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGAgIC4uLiBhbmQgJHtzZWVkRGF0YS5sZW5ndGggLSAxMH0gbW9yZSBpdGVtc2ApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kICR7bWF0Y2hlcy5sZW5ndGh9IG1hdGNoZXMgaW4gc2VlZCBkYXRhYCk7XG4gICAgcmV0dXJuIG1hdGNoZXM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGdXp6eSBtYXRjaGluZyBhbGdvcml0aG0gZm9yIHBhcnRpYWwgc3RyaW5nIG1hdGNoZXNcbiAgICovXG4gIHByaXZhdGUgZnV6enlNYXRjaCh0ZXJtOiBzdHJpbmcsIHRhcmdldDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gU2ltcGxlIGZ1enp5IG1hdGNoaW5nOiBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBvZiB0ZXJtIGFwcGVhciBpbiBvcmRlciBpbiB0YXJnZXRcbiAgICBpZiAodGVybS5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGlmICh0YXJnZXQubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgbGV0IHRlcm1JbmRleCA9IDA7XG4gICAgbGV0IHRhcmdldEluZGV4ID0gMDtcbiAgICBcbiAgICB3aGlsZSAodGVybUluZGV4IDwgdGVybS5sZW5ndGggJiYgdGFyZ2V0SW5kZXggPCB0YXJnZXQubGVuZ3RoKSB7XG4gICAgICBpZiAodGVybVt0ZXJtSW5kZXhdID09PSB0YXJnZXRbdGFyZ2V0SW5kZXhdKSB7XG4gICAgICAgIHRlcm1JbmRleCsrO1xuICAgICAgfVxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRlcm1JbmRleCA9PT0gdGVybS5sZW5ndGg7XG4gIH1cbiAgXG4gIFxuICAvKipcbiAgICogQ29udmVydCBjYWNoZSBpdGVtcyB0byBHaXRIdWIgQVBJIGZvcm1hdCBmb3IgY29uc2lzdGVudCByZXNwb25zZSBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgY29udmVydENhY2hlSXRlbXNUb0dpdEh1YkZvcm1hdChjYWNoZUl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdKTogYW55W10ge1xuICAgIHJldHVybiBjYWNoZUl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICBwYXRoOiBpdGVtLnBhdGgsXG4gICAgICBzaGE6IGl0ZW0uc2hhLFxuICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cy8ke2l0ZW0ucGF0aH1gLFxuICAgICAgaHRtbF91cmw6IGBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vYmxvYi9tYWluLyR7aXRlbS5wYXRofWAsXG4gICAgICByZXBvc2l0b3J5OiB7XG4gICAgICAgIG5hbWU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgZnVsbF9uYW1lOiAnRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24nXG4gICAgICB9XG4gICAgfSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogVXBkYXRlIGNhY2hlIHdpdGggZnJlc2ggZGF0YSBmcm9tIEdpdEh1YiBBUEkgaXRlbXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ2FjaGVGcm9tR2l0SHViSXRlbXMoZ2l0aHViSXRlbXM6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlSXRlbXM6IENvbGxlY3Rpb25JdGVtW10gPSBnaXRodWJJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHBhdGg6IGl0ZW0ucGF0aCxcbiAgICAgICAgc2hhOiBpdGVtLnNoYSxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9KSk7XG4gICAgICBcbiAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbkNhY2hlLnNhdmVDYWNoZShjYWNoZUl0ZW1zKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgVXBkYXRlZCBjYWNoZSB3aXRoICR7Y2FjaGVJdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gR2l0SHViIEFQSWApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0NvbGxlY3Rpb25TZWFyY2gudXBkYXRlQ2FjaGVJbkJhY2tncm91bmQnLCBlcnJvcik7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIHVwZGF0ZSBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBzZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgZm9ybWF0U2VhcmNoUmVzdWx0cyhpdGVtczogYW55W10sIHF1ZXJ5OiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYCR7cGVyc29uYUluZGljYXRvcn3wn5SNIE5vIGNvbnRlbnQgZm91bmQgZm9yIHF1ZXJ5OiBcIiR7cXVlcnl9XCJgO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbYCR7cGVyc29uYUluZGljYXRvcn3wn5SNICoqU2VhcmNoIFJlc3VsdHMgZm9yIFwiJHtxdWVyeX1cIioqICgke2l0ZW1zLmxlbmd0aH0gZm91bmQpXFxuXFxuYF07XG4gICAgXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAvLyBFeHRyYWN0IGNvbnRlbnQgdHlwZSBmcm9tIHBhdGggKGxpYnJhcnkvcGVyc29uYXMvY3JlYXRpdmUvd3JpdGVyLm1kIC0+IHBlcnNvbmFzKVxuICAgICAgY29uc3QgcGF0aFBhcnRzID0gaXRlbS5wYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhdGhQYXJ0c1sxXSB8fCAnY29udGVudCc7XG4gICAgICBcbiAgICAgIGNvbnN0IGNvbnRlbnRJY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAnYWdlbnRzJzogJ/CfpJYnLFxuICAgICAgICAncHJvbXB0cyc6ICfwn5KsJyxcbiAgICAgICAgJ3RlbXBsYXRlcyc6ICfwn5OEJyxcbiAgICAgICAgJ3Rvb2xzJzogJ/CflKcnLFxuICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnXG4gICAgICB9O1xuICAgICAgY29uc3QgaWNvbiA9IGNvbnRlbnRJY29uc1tjb250ZW50VHlwZV0gfHwgJ/Cfk4QnO1xuICAgICAgXG4gICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgYCAgICR7aWNvbn0gKioke2l0ZW0ubmFtZS5yZXBsYWNlKCcubWQnLCAnJyl9KipcXG5gLFxuICAgICAgICBgICAgICAg8J+TgiBQYXRoOiAke2l0ZW0ucGF0aH1cXG5gLFxuICAgICAgICBgICAgICAg8J+TpSBJbnN0YWxsOiBcXGBpbnN0YWxsX2NvbGxlY3Rpb25fY29udGVudCBcIiR7aXRlbS5wYXRofVwiXFxgXFxuYCxcbiAgICAgICAgYCAgICAgIPCfkYHvuI8gRGV0YWlsczogXFxgZ2V0X2NvbGxlY3Rpb25fY29udGVudCBcIiR7aXRlbS5wYXRofVwiXFxgXFxuXFxuYFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmcm9tIGNvbGxlY3Rpb24gaW5kZXggd2l0aCBmdWxsIGZlYXR1cmVkIHNlYXJjaCBhbmQgcGFnaW5hdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2hGcm9tSW5kZXgocXVlcnk6IHN0cmluZywgb3B0aW9uczogU2VhcmNoT3B0aW9ucyk6IFByb21pc2U8U2VhcmNoUmVzdWx0cz4ge1xuICAgIGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5pbmRleENhY2hlLmdldEluZGV4KCk7XG4gICAgY29uc3QgYWxsRW50cmllcyA9IHRoaXMuZmxhdHRlbkluZGV4RW50cmllcyhpbmRleCk7XG4gICAgXG4gICAgLy8gRmlsdGVyIGJ5IGVsZW1lbnQgdHlwZSBpZiBzcGVjaWZpZWRcbiAgICBsZXQgZmlsdGVyZWRFbnRyaWVzID0gYWxsRW50cmllcztcbiAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgZmlsdGVyZWRFbnRyaWVzID0gYWxsRW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkudHlwZSA9PT0gb3B0aW9ucy5lbGVtZW50VHlwZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEZpbHRlciBieSBjYXRlZ29yeSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy5jYXRlZ29yeSkge1xuICAgICAgZmlsdGVyZWRFbnRyaWVzID0gZmlsdGVyZWRFbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5jYXRlZ29yeSA9PT0gb3B0aW9ucy5jYXRlZ29yeSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNlYXJjaCBtYXRjaGluZ1xuICAgIGNvbnN0IG1hdGNoZWRFbnRyaWVzID0gdGhpcy5wZXJmb3JtSW5kZXhTZWFyY2gocXVlcnksIGZpbHRlcmVkRW50cmllcyk7XG4gICAgXG4gICAgLy8gU29ydCByZXN1bHRzXG4gICAgY29uc3Qgc29ydGVkRW50cmllcyA9IHRoaXMuc29ydFNlYXJjaFJlc3VsdHMobWF0Y2hlZEVudHJpZXMsIG9wdGlvbnMuc29ydEJ5IHx8ICdyZWxldmFuY2UnLCBxdWVyeSk7XG4gICAgXG4gICAgLy8gQXBwbHkgcGFnaW5hdGlvblxuICAgIGNvbnN0IHBhZ2UgPSBvcHRpb25zLnBhZ2UgfHwgMTtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnZVNpemUgfHwgMjU7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IChwYWdlIC0gMSkgKiBwYWdlU2l6ZTtcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcbiAgICBjb25zdCBwYWdpbmF0ZWRFbnRyaWVzID0gc29ydGVkRW50cmllcy5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBwYWdpbmF0ZWRFbnRyaWVzLFxuICAgICAgdG90YWw6IHNvcnRlZEVudHJpZXMubGVuZ3RoLFxuICAgICAgcGFnZSxcbiAgICAgIHBhZ2VTaXplLFxuICAgICAgaGFzTW9yZTogZW5kSW5kZXggPCBzb3J0ZWRFbnRyaWVzLmxlbmd0aCxcbiAgICAgIHF1ZXJ5LFxuICAgICAgc2VhcmNoVGltZTogMCAvLyBXaWxsIGJlIHNldCBieSBjYWxsZXJcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gaW5kZXggZW50cmllcyBmcm9tIGFsbCBjYXRlZ29yaWVzIGludG8gYSBzaW5nbGUgYXJyYXlcbiAgICovXG4gIHByaXZhdGUgZmxhdHRlbkluZGV4RW50cmllcyhpbmRleDogQ29sbGVjdGlvbkluZGV4KTogSW5kZXhFbnRyeVtdIHtcbiAgICBjb25zdCBlbnRyaWVzOiBJbmRleEVudHJ5W10gPSBbXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IFtlbGVtZW50VHlwZSwgdHlwZUVudHJpZXNdIG9mIE9iamVjdC5lbnRyaWVzKGluZGV4LmluZGV4KSkge1xuICAgICAgZW50cmllcy5wdXNoKC4uLnR5cGVFbnRyaWVzKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBzZWFyY2ggbWF0Y2hpbmcgb24gaW5kZXggZW50cmllc1xuICAgKi9cbiAgcHJpdmF0ZSBwZXJmb3JtSW5kZXhTZWFyY2gocXVlcnk6IHN0cmluZywgZW50cmllczogSW5kZXhFbnRyeVtdKTogSW5kZXhFbnRyeVtdIHtcbiAgICBjb25zdCBub3JtYWxpemVkUXVlcnkgPSBub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICBjb25zdCBxdWVyeVdvcmRzID0gbm9ybWFsaXplZFF1ZXJ5LnNwbGl0KC9cXHMrLykuZmlsdGVyKHdvcmQgPT4gd29yZC5sZW5ndGggPiAwKTtcbiAgICBcbiAgICByZXR1cm4gZW50cmllcy5maWx0ZXIoZW50cnkgPT4ge1xuICAgICAgLy8gU2VhcmNoIGluIG11bHRpcGxlIGZpZWxkc1xuICAgICAgY29uc3Qgc2VhcmNoYWJsZVRleHQgPSBbXG4gICAgICAgIGVudHJ5Lm5hbWUsXG4gICAgICAgIGVudHJ5LmRlc2NyaXB0aW9uLFxuICAgICAgICBlbnRyeS5wYXRoLFxuICAgICAgICAuLi5lbnRyeS50YWdzXG4gICAgICBdLmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICAvLyBVc2UgZXhpc3Rpbmcgc2VhcmNoIHV0aWxpdGllcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgIGNvbnN0IG5hbWVNYXRjaCA9IGlzU2VhcmNoTWF0Y2gocXVlcnksIGVudHJ5Lm5hbWUpO1xuICAgICAgY29uc3QgZGVzY01hdGNoID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgZW50cnkuZGVzY3JpcHRpb24pO1xuICAgICAgY29uc3QgcGF0aE1hdGNoID0gaXNTZWFyY2hNYXRjaChxdWVyeSwgZW50cnkucGF0aCk7XG4gICAgICBjb25zdCB0YWdNYXRjaCA9IGVudHJ5LnRhZ3Muc29tZSh0YWcgPT4gaXNTZWFyY2hNYXRjaChxdWVyeSwgdGFnKSk7XG4gICAgICBcbiAgICAgIHJldHVybiBuYW1lTWF0Y2ggfHwgZGVzY01hdGNoIHx8IHBhdGhNYXRjaCB8fCB0YWdNYXRjaDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0IHNlYXJjaCByZXN1bHRzIGJ5IHJlbGV2YW5jZSwgbmFtZSwgb3IgZGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzb3J0U2VhcmNoUmVzdWx0cyhlbnRyaWVzOiBJbmRleEVudHJ5W10sIHNvcnRCeTogJ3JlbGV2YW5jZScgfCAnbmFtZScgfCAnZGF0ZScsIHF1ZXJ5OiBzdHJpbmcpOiBJbmRleEVudHJ5W10ge1xuICAgIGNvbnN0IHNvcnRlZCA9IFsuLi5lbnRyaWVzXTtcbiAgICBcbiAgICBzd2l0Y2ggKHNvcnRCeSkge1xuICAgICAgY2FzZSAnbmFtZSc6XG4gICAgICAgIHNvcnRlZC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgc29ydGVkLnNvcnQoKGEsIGIpID0+IG5ldyBEYXRlKGIuY3JlYXRlZCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYS5jcmVhdGVkKS5nZXRUaW1lKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlbGV2YW5jZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBDYWxjdWxhdGUgcmVsZXZhbmNlIHNjb3Jlc1xuICAgICAgICBzb3J0ZWQuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjb3JlQSA9IHRoaXMuY2FsY3VsYXRlUmVsZXZhbmNlU2NvcmUocXVlcnksIGEpO1xuICAgICAgICAgIGNvbnN0IHNjb3JlQiA9IHRoaXMuY2FsY3VsYXRlUmVsZXZhbmNlU2NvcmUocXVlcnksIGIpO1xuICAgICAgICAgIHJldHVybiBzY29yZUIgLSBzY29yZUE7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHNvcnRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgcmVsZXZhbmNlIHNjb3JlIGZvciBzZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZWxldmFuY2VTY29yZShxdWVyeTogc3RyaW5nLCBlbnRyeTogSW5kZXhFbnRyeSk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gbm9ybWFsaXplU2VhcmNoVGVybShxdWVyeSk7XG4gICAgbGV0IHNjb3JlID0gMDtcbiAgICBcbiAgICAvLyBFeGFjdCBuYW1lIG1hdGNoIGdldHMgaGlnaGVzdCBzY29yZVxuICAgIGlmIChub3JtYWxpemVTZWFyY2hUZXJtKGVudHJ5Lm5hbWUpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpIHtcbiAgICAgIHNjb3JlICs9IDEwMDtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVzY3JpcHRpb24gbWF0Y2hcbiAgICBpZiAobm9ybWFsaXplU2VhcmNoVGVybShlbnRyeS5kZXNjcmlwdGlvbikuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSkge1xuICAgICAgc2NvcmUgKz0gNTA7XG4gICAgfVxuICAgIFxuICAgIC8vIFRhZyBtYXRjaGVzXG4gICAgY29uc3QgbWF0Y2hpbmdUYWdzID0gZW50cnkudGFncy5maWx0ZXIodGFnID0+IFxuICAgICAgbm9ybWFsaXplU2VhcmNoVGVybSh0YWcpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSlcbiAgICApO1xuICAgIHNjb3JlICs9IG1hdGNoaW5nVGFncy5sZW5ndGggKiAyNTtcbiAgICBcbiAgICAvLyBQYXRoIG1hdGNoIChsb3dlciBwcmlvcml0eSlcbiAgICBpZiAobm9ybWFsaXplU2VhcmNoVGVybShlbnRyeS5wYXRoKS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpKSB7XG4gICAgICBzY29yZSArPSAxMDtcbiAgICB9XG4gICAgXG4gICAgLy8gQm9udXMgZm9yIHJlY2VudCBjb250ZW50XG4gICAgY29uc3QgZGF5c1NpbmNlQ3JlYXRlZCA9IChEYXRlLm5vdygpIC0gbmV3IERhdGUoZW50cnkuY3JlYXRlZCkuZ2V0VGltZSgpKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KTtcbiAgICBpZiAoZGF5c1NpbmNlQ3JlYXRlZCA8IDMwKSB7XG4gICAgICBzY29yZSArPSA1O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gc2NvcmU7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBsZWdhY3kgc2VhcmNoIHJlc3VsdHMgdG8gbmV3IFNlYXJjaFJlc3VsdHMgZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRMZWdhY3lSZXN1bHRzKGxlZ2FjeVJlc3VsdHM6IGFueVtdLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zOiBTZWFyY2hPcHRpb25zLCBzZWFyY2hUaW1lOiBudW1iZXIpOiBTZWFyY2hSZXN1bHRzIHtcbiAgICAvLyBDb252ZXJ0IEdpdEh1YiBBUEkgZm9ybWF0IHRvIEluZGV4RW50cnkgZm9ybWF0XG4gICAgY29uc3QgZW50cmllczogSW5kZXhFbnRyeVtdID0gbGVnYWN5UmVzdWx0cy5tYXAoaXRlbSA9PiAoe1xuICAgICAgcGF0aDogaXRlbS5wYXRoLFxuICAgICAgdHlwZTogdGhpcy5leHRyYWN0VHlwZUZyb21QYXRoKGl0ZW0ucGF0aCksXG4gICAgICBuYW1lOiBpdGVtLm5hbWU/LnJlcGxhY2UoJy5tZCcsICcnKSB8fCAnVW5rbm93bicsXG4gICAgICBkZXNjcmlwdGlvbjogJ05vIGRlc2NyaXB0aW9uIGF2YWlsYWJsZScsXG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgYXV0aG9yOiAnVW5rbm93bicsXG4gICAgICB0YWdzOiBbXSxcbiAgICAgIHNoYTogaXRlbS5zaGEgfHwgJycsXG4gICAgICBjYXRlZ29yeTogdGhpcy5leHRyYWN0Q2F0ZWdvcnlGcm9tUGF0aChpdGVtLnBhdGgpLFxuICAgICAgY3JlYXRlZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgbGljZW5zZTogJ1Vua25vd24nXG4gICAgfSkpO1xuICAgIFxuICAgIC8vIEFwcGx5IHBhZ2luYXRpb25cbiAgICBjb25zdCBwYWdlID0gb3B0aW9ucy5wYWdlIHx8IDE7XG4gICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zLnBhZ2VTaXplIHx8IDI1O1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAocGFnZSAtIDEpICogcGFnZVNpemU7XG4gICAgY29uc3QgZW5kSW5kZXggPSBzdGFydEluZGV4ICsgcGFnZVNpemU7XG4gICAgY29uc3QgcGFnaW5hdGVkRW50cmllcyA9IGVudHJpZXMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcGFnaW5hdGVkRW50cmllcyxcbiAgICAgIHRvdGFsOiBlbnRyaWVzLmxlbmd0aCxcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIGhhc01vcmU6IGVuZEluZGV4IDwgZW50cmllcy5sZW5ndGgsXG4gICAgICBxdWVyeSxcbiAgICAgIHNlYXJjaFRpbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZWxlbWVudCB0eXBlIGZyb20gZmlsZSBwYXRoXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RUeXBlRnJvbVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDIgJiYgcGFydHNbMF0gPT09ICdsaWJyYXJ5Jykge1xuICAgICAgcmV0dXJuIHBhcnRzWzFdO1xuICAgIH1cbiAgICByZXR1cm4gJ3Vua25vd24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgY2F0ZWdvcnkgZnJvbSBmaWxlIHBhdGhcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdENhdGVnb3J5RnJvbVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID49IDMgJiYgcGFydHNbMF0gPT09ICdsaWJyYXJ5Jykge1xuICAgICAgcmV0dXJuIHBhcnRzWzJdO1xuICAgIH1cbiAgICByZXR1cm4gJ3VuY2F0ZWdvcml6ZWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBlbXB0eSBzZWFyY2ggcmVzdWx0cyBmb3IgZXJyb3IgY2FzZXNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRW1wdHlTZWFyY2hSZXN1bHRzKHF1ZXJ5OiBzdHJpbmcsIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBTZWFyY2hSZXN1bHRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IFtdLFxuICAgICAgdG90YWw6IDAsXG4gICAgICBwYWdlOiBvcHRpb25zLnBhZ2UgfHwgMSxcbiAgICAgIHBhZ2VTaXplOiBvcHRpb25zLnBhZ2VTaXplIHx8IDI1LFxuICAgICAgaGFzTW9yZTogZmFsc2UsXG4gICAgICBxdWVyeSxcbiAgICAgIHNlYXJjaFRpbWU6IDBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuaGFuY2VkIGZvcm1hdCBmb3Igc2VhcmNoIHJlc3VsdHMgd2l0aCBwYWdpbmF0aW9uIGluZm9cbiAgICovXG4gIGZvcm1hdFNlYXJjaFJlc3VsdHNXaXRoUGFnaW5hdGlvbihyZXN1bHRzOiBTZWFyY2hSZXN1bHRzLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgaWYgKHJlc3VsdHMudG90YWwgPT09IDApIHtcbiAgICAgIHJldHVybiBgJHtwZXJzb25hSW5kaWNhdG9yffCflI0gTm8gY29udGVudCBmb3VuZCBmb3IgcXVlcnk6IFwiJHtyZXN1bHRzLnF1ZXJ5fVwiYDtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc3RhcnRJdGVtID0gKHJlc3VsdHMucGFnZSAtIDEpICogcmVzdWx0cy5wYWdlU2l6ZSArIDE7XG4gICAgY29uc3QgZW5kSXRlbSA9IE1hdGgubWluKHJlc3VsdHMucGFnZSAqIHJlc3VsdHMucGFnZVNpemUsIHJlc3VsdHMudG90YWwpO1xuICAgIFxuICAgIGNvbnN0IHRleHRQYXJ0cyA9IFtcbiAgICAgIGAke3BlcnNvbmFJbmRpY2F0b3J98J+UjSAqKlNlYXJjaCBSZXN1bHRzIGZvciBcIiR7cmVzdWx0cy5xdWVyeX1cIioqXFxuYCxcbiAgICAgIGDwn5OKIFNob3dpbmcgJHtzdGFydEl0ZW19LSR7ZW5kSXRlbX0gb2YgJHtyZXN1bHRzLnRvdGFsfSByZXN1bHRzIChQYWdlICR7cmVzdWx0cy5wYWdlfSlcXG5gLFxuICAgICAgYOKaoSBTZWFyY2ggdGltZTogJHtyZXN1bHRzLnNlYXJjaFRpbWV9bXNcXG5cXG5gXG4gICAgXTtcbiAgICBcbiAgICByZXN1bHRzLml0ZW1zLmZvckVhY2goKGl0ZW06IEluZGV4RW50cnkpID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRJY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgJ3BlcnNvbmFzJzogJ/Cfjq0nLFxuICAgICAgICAnc2tpbGxzJzogJ/Cfm6DvuI8nLFxuICAgICAgICAnYWdlbnRzJzogJ/CfpJYnLFxuICAgICAgICAncHJvbXB0cyc6ICfwn5KsJyxcbiAgICAgICAgJ3RlbXBsYXRlcyc6ICfwn5OEJyxcbiAgICAgICAgJ3Rvb2xzJzogJ/CflKcnLFxuICAgICAgICAnZW5zZW1ibGVzJzogJ/CfjrwnLFxuICAgICAgICAnbWVtb3JpZXMnOiAn8J+noCdcbiAgICAgIH07XG4gICAgICBjb25zdCBpY29uID0gY29udGVudEljb25zW2l0ZW0udHlwZV0gfHwgJ/Cfk4QnO1xuICAgICAgXG4gICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgYCAgICR7aWNvbn0gKioke2l0ZW0ubmFtZX0qKiAoJHtpdGVtLnR5cGV9KVxcbmAsXG4gICAgICAgIGAgICAgICDwn5OdICR7aXRlbS5kZXNjcmlwdGlvbn1cXG5gLFxuICAgICAgICBgICAgICAg8J+Pt++4jyBUYWdzOiAke2l0ZW0udGFncy5qb2luKCcsICcpfVxcbmAsXG4gICAgICAgIGAgICAgICDwn5OCIFBhdGg6ICR7aXRlbS5wYXRofVxcbmAsXG4gICAgICAgIGAgICAgICDwn5OlIEluc3RhbGw6IFxcYGluc3RhbGxfY29sbGVjdGlvbl9jb250ZW50IFwiJHtpdGVtLnBhdGh9XCJcXGBcXG5gLFxuICAgICAgICBgICAgICAg8J+Rge+4jyBEZXRhaWxzOiBcXGBnZXRfY29sbGVjdGlvbl9jb250ZW50IFwiJHtpdGVtLnBhdGh9XCJcXGBcXG5cXG5gXG4gICAgICApO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEFkZCBwYWdpbmF0aW9uIGluZm9cbiAgICBpZiAocmVzdWx0cy5oYXNNb3JlKSB7XG4gICAgICBjb25zdCBuZXh0UGFnZSA9IHJlc3VsdHMucGFnZSArIDE7XG4gICAgICB0ZXh0UGFydHMucHVzaChg8J+ThCBNb3JlIHJlc3VsdHMgYXZhaWxhYmxlLiBVc2UgcGFnZSAke25leHRQYWdlfSB0byBzZWUgbmV4dCAke3Jlc3VsdHMucGFnZVNpemV9IGl0ZW1zLlxcbmApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGV4dFBhcnRzLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzIGZvciBkZWJ1Z2dpbmdcbiAgICovXG4gIGFzeW5jIGdldENhY2hlU3RhdHMoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBpbmRleFN0YXRzID0gdGhpcy5pbmRleENhY2hlLmdldENhY2hlU3RhdHMoKTtcbiAgICBjb25zdCBjYWNoZVN0YXRzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uQ2FjaGUuZ2V0Q2FjaGVTdGF0cygpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogaW5kZXhTdGF0cyxcbiAgICAgIGNvbGxlY3Rpb246IGNhY2hlU3RhdHNcbiAgICB9O1xuICB9XG59Il19
@@ -64,8 +64,8 @@ export class PersonaDetails {
64
64
  if (metadata.triggers && metadata.triggers.length > 0) {
65
65
  textParts.push(`**🔗 Triggers:** ${metadata.triggers.join(', ')}\n\n`);
66
66
  }
67
- textParts.push(`**📥 Installation:**\n`, `Use: \`install_content "${path}"\`\n\n`, `**📄 Full Content:**\n\`\`\`\n${content}\n\`\`\``);
67
+ textParts.push(`**📥 Installation:**\n`, `Use: \`install_collection_content "${path}"\`\n\n`, `**📄 Full Content:**\n\`\`\`\n${content}\n\`\`\``);
68
68
  return textParts.join('');
69
69
  }
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYURldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9QZXJzb25hRGV0YWlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sY0FBYztJQUNqQixZQUFZLENBQWU7SUFDM0IsT0FBTyxHQUFHLCtEQUErRCxDQUFDO0lBRWxGLFlBQVksWUFBMEI7UUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQVk7UUFDckMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXRDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEUscUVBQXFFO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUUseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlHLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBdUIsQ0FBQztRQUVoRCxvQ0FBb0M7UUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELE9BQU87WUFDTCxRQUFRO1lBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxRQUF5QixFQUFFLE9BQWUsRUFBRSxJQUFZLEVBQUUsbUJBQTJCLEVBQUU7UUFDMUcsTUFBTSxTQUFTLEdBQUc7WUFDaEIsR0FBRyxnQkFBZ0IsNEJBQTRCLFFBQVEsQ0FBQyxJQUFJLFFBQVE7WUFDcEUsbUJBQW1CO1lBQ25CLGFBQWEsUUFBUSxDQUFDLFNBQVMsSUFBSSxlQUFlLElBQUk7WUFDdEQsaUJBQWlCLFFBQVEsQ0FBQyxNQUFNLElBQUksU0FBUyxJQUFJO1lBQ2pELG1CQUFtQixRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSTtZQUNyRCxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUk7WUFDNUMsa0JBQWtCLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSyxJQUFJO1lBQy9DLHFCQUFxQixRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSTtZQUNyRCxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsTUFBTTtZQUMxRSx3QkFBd0IsUUFBUSxDQUFDLFdBQVcsTUFBTTtTQUNuRCxDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsU0FBUyxDQUFDLElBQUksQ0FDWix3QkFBd0IsRUFDeEIsMkJBQTJCLElBQUksU0FBUyxFQUN4QyxpQ0FBaUMsT0FBTyxVQUFVLENBQ25ELENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXQgY29udGVudCBkZXRhaWxzIGZyb20gY29sbGVjdGlvblxuICovXG5cbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuaW1wb3J0IHsgR2l0SHViQ2xpZW50IH0gZnJvbSAnLi9HaXRIdWJDbGllbnQuanMnO1xuaW1wb3J0IHsgUGVyc29uYU1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuXG5leHBvcnQgY2xhc3MgUGVyc29uYURldGFpbHMge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCkge1xuICAgIHRoaXMuZ2l0aHViQ2xpZW50ID0gZ2l0aHViQ2xpZW50O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGNvbGxlY3Rpb24gY29udGVudFxuICAgKi9cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGE7IGNvbnRlbnQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS8ke3BhdGh9YDtcbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlY29kZSBCYXNlNjQgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShkYXRhLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICBcbiAgICAvLyBTYW5pdGl6ZSBjb250ZW50IGZvciBkaXNwbGF5ICh0aGlzIGlzIHZpZXctb25seSwgbm90IGluc3RhbGxhdGlvbilcbiAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gQ29udGVudFZhbGlkYXRvci5zYW5pdGl6ZVBlcnNvbmFDb250ZW50KGNvbnRlbnQpO1xuICAgIFxuICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICBsZXQgcGFyc2VkO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoc2FuaXRpemVkQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB3YXJuaW5nOiBUaGlzIGNvbnRlbnQgY29udGFpbnMgcG90ZW50aWFsbHkgbWFsaWNpb3VzIGNvbnRlbnQgLSAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBkaXNwbGF5XG4gICAgY29uc3QgbWV0YWRhdGFWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZU1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBpZiAoIW1ldGFkYXRhVmFsaWRhdGlvbi5pc1ZhbGlkICYmIG1ldGFkYXRhVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB3YXJuaW5nOiBUaGlzIGNvbnRlbnQgY29udGFpbnMgcG90ZW50aWFsbHkgbWFsaWNpb3VzIGNvbnRlbnRgKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY29udGVudDogcGFyc2VkLmNvbnRlbnRcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IHBlcnNvbmEgZGV0YWlscyBmb3IgZGlzcGxheVxuICAgKi9cbiAgZm9ybWF0UGVyc29uYURldGFpbHMobWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSwgY29udGVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbXG4gICAgICBgJHtwZXJzb25hSW5kaWNhdG9yffCfjq0gKipDb2xsZWN0aW9uIENvbnRlbnQ6ICR7bWV0YWRhdGEubmFtZX0qKlxcblxcbmAsXG4gICAgICBgKirwn5OLIERldGFpbHM6KipcXG5gLFxuICAgICAgYCAgIPCfhpQgSUQ6ICR7bWV0YWRhdGEudW5pcXVlX2lkIHx8ICdOb3Qgc3BlY2lmaWVkJ31cXG5gLFxuICAgICAgYCAgIPCfkaQgQXV0aG9yOiAke21ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCxcbiAgICAgIGAgICDwn5OBIENhdGVnb3J5OiAke21ldGFkYXRhLmNhdGVnb3J5IHx8ICdHZW5lcmFsJ31cXG5gLFxuICAgICAgYCAgIPCflJYgUHJpY2U6ICR7bWV0YWRhdGEucHJpY2UgfHwgJ0ZyZWUnfVxcbmAsXG4gICAgICBgICAg8J+TiiBWZXJzaW9uOiAke21ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCxcbiAgICAgIGAgICDwn5SeIEFnZSBSYXRpbmc6ICR7bWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnQWxsJ31cXG5gLFxuICAgICAgYCAgICR7bWV0YWRhdGEuYWlfZ2VuZXJhdGVkID8gJ/CfpJYgQUkgR2VuZXJhdGVkJyA6ICfwn5GkIEh1bWFuIENyZWF0ZWQnfVxcblxcbmAsXG4gICAgICBgKirwn5OdIERlc2NyaXB0aW9uOioqXFxuJHttZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gXG4gICAgXTtcbiAgICBcbiAgICBpZiAobWV0YWRhdGEudHJpZ2dlcnMgJiYgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+UlyBUcmlnZ2VyczoqKiAke21ldGFkYXRhLnRyaWdnZXJzLmpvaW4oJywgJyl9XFxuXFxuYCk7XG4gICAgfVxuICAgIFxuICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgYCoq8J+TpSBJbnN0YWxsYXRpb246KipcXG5gLFxuICAgICAgYFVzZTogXFxgaW5zdGFsbF9jb250ZW50IFwiJHtwYXRofVwiXFxgXFxuXFxuYCxcbiAgICAgIGAqKvCfk4QgRnVsbCBDb250ZW50OioqXFxuXFxgXFxgXFxgXFxuJHtjb250ZW50fVxcblxcYFxcYFxcYGBcbiAgICApO1xuICAgIFxuICAgIHJldHVybiB0ZXh0UGFydHMuam9pbignJyk7XG4gIH1cbn0iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYURldGFpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9QZXJzb25hRGV0YWlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUtILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUzRCxNQUFNLE9BQU8sY0FBYztJQUNqQixZQUFZLENBQWU7SUFDM0IsT0FBTyxHQUFHLCtEQUErRCxDQUFDO0lBRWxGLFlBQVksWUFBMEI7UUFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQVk7UUFDckMsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRXRDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEUscUVBQXFFO1FBQ3JFLE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUUseUJBQXlCO1FBQ3pCLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVksYUFBYSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsMkVBQTJFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzlHLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBdUIsQ0FBQztRQUVoRCxvQ0FBb0M7UUFDcEMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUM5RSxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUVELE9BQU87WUFDTCxRQUFRO1lBQ1IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxRQUF5QixFQUFFLE9BQWUsRUFBRSxJQUFZLEVBQUUsbUJBQTJCLEVBQUU7UUFDMUcsTUFBTSxTQUFTLEdBQUc7WUFDaEIsR0FBRyxnQkFBZ0IsNEJBQTRCLFFBQVEsQ0FBQyxJQUFJLFFBQVE7WUFDcEUsbUJBQW1CO1lBQ25CLGFBQWEsUUFBUSxDQUFDLFNBQVMsSUFBSSxlQUFlLElBQUk7WUFDdEQsaUJBQWlCLFFBQVEsQ0FBQyxNQUFNLElBQUksU0FBUyxJQUFJO1lBQ2pELG1CQUFtQixRQUFRLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSTtZQUNyRCxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssSUFBSSxNQUFNLElBQUk7WUFDNUMsa0JBQWtCLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSyxJQUFJO1lBQy9DLHFCQUFxQixRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUssSUFBSTtZQUNyRCxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsTUFBTTtZQUMxRSx3QkFBd0IsUUFBUSxDQUFDLFdBQVcsTUFBTTtTQUNuRCxDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRUQsU0FBUyxDQUFDLElBQUksQ0FDWix3QkFBd0IsRUFDeEIsc0NBQXNDLElBQUksU0FBUyxFQUNuRCxpQ0FBaUMsT0FBTyxVQUFVLENBQ25ELENBQUM7UUFFRixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZXQgY29udGVudCBkZXRhaWxzIGZyb20gY29sbGVjdGlvblxuICovXG5cbmltcG9ydCBtYXR0ZXIgZnJvbSAnZ3JheS1tYXR0ZXInO1xuaW1wb3J0IHsgR2l0SHViQ2xpZW50IH0gZnJvbSAnLi9HaXRIdWJDbGllbnQuanMnO1xuaW1wb3J0IHsgUGVyc29uYU1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvcGVyc29uYS5qcyc7XG5pbXBvcnQgeyBDb250ZW50VmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cmVZYW1sUGFyc2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJlWWFtbFBhcnNlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuXG5leHBvcnQgY2xhc3MgUGVyc29uYURldGFpbHMge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIGJhc2VVcmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9jb250ZW50cyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCkge1xuICAgIHRoaXMuZ2l0aHViQ2xpZW50ID0gZ2l0aHViQ2xpZW50O1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGNvbGxlY3Rpb24gY29udGVudFxuICAgKi9cbiAgYXN5bmMgZ2V0Q29sbGVjdGlvbkNvbnRlbnQocGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IG1ldGFkYXRhOiBQZXJzb25hTWV0YWRhdGE7IGNvbnRlbnQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS8ke3BhdGh9YDtcbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlY29kZSBCYXNlNjQgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShkYXRhLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICBcbiAgICAvLyBTYW5pdGl6ZSBjb250ZW50IGZvciBkaXNwbGF5ICh0aGlzIGlzIHZpZXctb25seSwgbm90IGluc3RhbGxhdGlvbilcbiAgICBjb25zdCBzYW5pdGl6ZWRDb250ZW50ID0gQ29udGVudFZhbGlkYXRvci5zYW5pdGl6ZVBlcnNvbmFDb250ZW50KGNvbnRlbnQpO1xuICAgIFxuICAgIC8vIFVzZSBzZWN1cmUgWUFNTCBwYXJzZXJcbiAgICBsZXQgcGFyc2VkO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoc2FuaXRpemVkQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB3YXJuaW5nOiBUaGlzIGNvbnRlbnQgY29udGFpbnMgcG90ZW50aWFsbHkgbWFsaWNpb3VzIGNvbnRlbnQgLSAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBQZXJzb25hTWV0YWRhdGE7XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCB2YWxpZGF0aW9uIGZvciBkaXNwbGF5XG4gICAgY29uc3QgbWV0YWRhdGFWYWxpZGF0aW9uID0gQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZU1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICBpZiAoIW1ldGFkYXRhVmFsaWRhdGlvbi5pc1ZhbGlkICYmIG1ldGFkYXRhVmFsaWRhdGlvbi5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB3YXJuaW5nOiBUaGlzIGNvbnRlbnQgY29udGFpbnMgcG90ZW50aWFsbHkgbWFsaWNpb3VzIGNvbnRlbnRgKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgY29udGVudDogcGFyc2VkLmNvbnRlbnRcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IHBlcnNvbmEgZGV0YWlscyBmb3IgZGlzcGxheVxuICAgKi9cbiAgZm9ybWF0UGVyc29uYURldGFpbHMobWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YSwgY29udGVudDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbXG4gICAgICBgJHtwZXJzb25hSW5kaWNhdG9yffCfjq0gKipDb2xsZWN0aW9uIENvbnRlbnQ6ICR7bWV0YWRhdGEubmFtZX0qKlxcblxcbmAsXG4gICAgICBgKirwn5OLIERldGFpbHM6KipcXG5gLFxuICAgICAgYCAgIPCfhpQgSUQ6ICR7bWV0YWRhdGEudW5pcXVlX2lkIHx8ICdOb3Qgc3BlY2lmaWVkJ31cXG5gLFxuICAgICAgYCAgIPCfkaQgQXV0aG9yOiAke21ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCxcbiAgICAgIGAgICDwn5OBIENhdGVnb3J5OiAke21ldGFkYXRhLmNhdGVnb3J5IHx8ICdHZW5lcmFsJ31cXG5gLFxuICAgICAgYCAgIPCflJYgUHJpY2U6ICR7bWV0YWRhdGEucHJpY2UgfHwgJ0ZyZWUnfVxcbmAsXG4gICAgICBgICAg8J+TiiBWZXJzaW9uOiAke21ldGFkYXRhLnZlcnNpb24gfHwgJzEuMCd9XFxuYCxcbiAgICAgIGAgICDwn5SeIEFnZSBSYXRpbmc6ICR7bWV0YWRhdGEuYWdlX3JhdGluZyB8fCAnQWxsJ31cXG5gLFxuICAgICAgYCAgICR7bWV0YWRhdGEuYWlfZ2VuZXJhdGVkID8gJ/CfpJYgQUkgR2VuZXJhdGVkJyA6ICfwn5GkIEh1bWFuIENyZWF0ZWQnfVxcblxcbmAsXG4gICAgICBgKirwn5OdIERlc2NyaXB0aW9uOioqXFxuJHttZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gXG4gICAgXTtcbiAgICBcbiAgICBpZiAobWV0YWRhdGEudHJpZ2dlcnMgJiYgbWV0YWRhdGEudHJpZ2dlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGV4dFBhcnRzLnB1c2goYCoq8J+UlyBUcmlnZ2VyczoqKiAke21ldGFkYXRhLnRyaWdnZXJzLmpvaW4oJywgJyl9XFxuXFxuYCk7XG4gICAgfVxuICAgIFxuICAgIHRleHRQYXJ0cy5wdXNoKFxuICAgICAgYCoq8J+TpSBJbnN0YWxsYXRpb246KipcXG5gLFxuICAgICAgYFVzZTogXFxgaW5zdGFsbF9jb2xsZWN0aW9uX2NvbnRlbnQgXCIke3BhdGh9XCJcXGBcXG5cXG5gLFxuICAgICAgYCoq8J+ThCBGdWxsIENvbnRlbnQ6KipcXG5cXGBcXGBcXGBcXG4ke2NvbnRlbnR9XFxuXFxgXFxgXFxgYFxuICAgICk7XG4gICAgXG4gICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgfVxufSJdfQ==
@@ -79,6 +79,14 @@ export interface DisplayConfig {
79
79
  verbose_logging: boolean;
80
80
  show_progress: boolean;
81
81
  }
82
+ export interface WizardConfig {
83
+ completed: boolean;
84
+ dismissed: boolean;
85
+ completedAt?: string;
86
+ version?: string;
87
+ lastSeenVersion?: string;
88
+ skippedSections?: string[];
89
+ }
82
90
  export interface DollhouseConfig {
83
91
  version: string;
84
92
  user: UserConfig;
@@ -87,6 +95,7 @@ export interface DollhouseConfig {
87
95
  collection: CollectionConfig;
88
96
  elements: ElementsConfig;
89
97
  display: DisplayConfig;
98
+ wizard: WizardConfig;
90
99
  }
91
100
  export interface ConfigUpdateResult {
92
101
  success: boolean;
@@ -111,6 +120,17 @@ export declare class ConfigManager {
111
120
  * Thread-safe singleton instance getter
112
121
  */
113
122
  static getInstance(): ConfigManager;
123
+ /**
124
+ * Reset the singleton instance for testing purposes only.
125
+ * This method is ONLY available in test environments to enable proper test isolation.
126
+ *
127
+ * IMPORTANT: This follows industry-standard patterns used by Google, Facebook, Microsoft
128
+ * for testing singleton classes. The method is protected by an environment check to
129
+ * ensure it cannot be called in production.
130
+ *
131
+ * @throws Error if called outside test environment
132
+ */
133
+ static resetForTesting(): void;
114
134
  /**
115
135
  * Get default configuration
116
136
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfigManager.d.ts","sourceRoot":"","sources":["../../src/config/ConfigManager.ts"],"names":[],"mappings":"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"}