@dollhousemcp/mcp-server 1.9.13 → 1.9.15
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.
- package/CHANGELOG.md +48 -0
- package/README.github.md +54 -0
- package/README.md.backup +1241 -49
- package/dist/cache/CollectionCache.js +2 -2
- package/dist/collection/CollectionIndexManager.js +3 -3
- package/dist/config/ConfigWizard.js +3 -3
- package/dist/config/indicator-config.js +2 -2
- package/dist/config/portfolio-constants.js +12 -12
- package/dist/elements/BaseElement.js +7 -7
- package/dist/elements/FeedbackProcessor.d.ts +7 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -1
- package/dist/elements/FeedbackProcessor.js +67 -14
- package/dist/elements/agents/AgentManager.js +6 -6
- package/dist/elements/memories/Memory.js +4 -4
- package/dist/elements/memories/MemoryManager.js +3 -3
- package/dist/elements/memories/utils.js +3 -3
- package/dist/elements/skills/Skill.js +2 -2
- package/dist/elements/skills/SkillManager.js +2 -2
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +38 -14
- package/dist/elements/templates/TemplateManager.js +2 -2
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/handlers/ConfigHandler.js +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -16
- package/dist/persona/PersonaElementManager.js +3 -3
- package/dist/persona/PersonaManager.js +2 -2
- package/dist/persona/export-import/PersonaImporter.js +3 -3
- package/dist/portfolio/DefaultElementProvider.d.ts +12 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +23 -6
- package/dist/portfolio/GitHubPortfolioIndexer.js +2 -2
- package/dist/portfolio/MigrationManager.js +2 -2
- package/dist/portfolio/NLPScoringManager.js +2 -2
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +8 -1
- package/dist/portfolio/PortfolioRepoManager.js +2 -2
- package/dist/portfolio/PortfolioSyncManager.js +5 -5
- package/dist/portfolio/RelationshipManager.js +4 -4
- package/dist/portfolio/UnifiedIndexManager.js +4 -4
- package/dist/portfolio/types/RelationshipTypes.js +2 -2
- package/dist/security/InputValidator.d.ts +12 -0
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +38 -18
- package/dist/security/audit/config/suppressions.js +10 -10
- package/dist/security/commandValidator.js +2 -2
- package/dist/security/dosProtection.d.ts +123 -0
- package/dist/security/dosProtection.d.ts.map +1 -0
- package/dist/security/dosProtection.js +392 -0
- package/dist/security/pathValidator.js +2 -2
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +4 -3
- package/dist/security/tokenManager.js +10 -10
- package/dist/security/validators/unicodeValidator.js +2 -2
- package/dist/security/yamlValidator.js +3 -3
- package/dist/sync/PortfolioDownloader.js +2 -2
- package/dist/sync/PortfolioSyncComparer.js +2 -2
- package/dist/tools/portfolio/PortfolioElementAdapter.js +3 -3
- package/dist/tools/portfolio/submitToPortfolioTool.js +14 -14
- package/dist/utils/EarlyTerminationSearch.d.ts +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -1
- package/dist/utils/EarlyTerminationSearch.js +3 -3
- package/dist/utils/ElementFormatter.d.ts +1 -0
- package/dist/utils/ElementFormatter.d.ts.map +1 -1
- package/dist/utils/ElementFormatter.js +21 -13
- package/dist/utils/GitHubRateLimiter.d.ts +6 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -1
- package/dist/utils/GitHubRateLimiter.js +20 -5
- package/dist/utils/RateLimiter.js +2 -2
- package/dist/utils/SecureDownloader.js +2 -2
- package/dist/utils/fileOperations.d.ts +6 -1
- package/dist/utils/fileOperations.d.ts.map +1 -1
- package/dist/utils/fileOperations.js +29 -5
- package/dist/utils/filesystem.js +6 -6
- package/dist/utils/searchUtils.js +2 -2
- package/dist/utils/version.js +3 -3
- package/package.json +1 -1
|
@@ -358,7 +358,7 @@ export class GitHubPortfolioIndexer {
|
|
|
358
358
|
try {
|
|
359
359
|
// Parse metadata from filename or fetch content if needed
|
|
360
360
|
// FIX: Keep original filename format to match local file expectations
|
|
361
|
-
// Previously: .
|
|
361
|
+
// Previously: .replaceAll(/-/g, ' ') converted hyphens to spaces causing sync mismatch
|
|
362
362
|
const name = fileInfo.name.replace('.md', '');
|
|
363
363
|
const entry = {
|
|
364
364
|
path: fileInfo.path,
|
|
@@ -494,4 +494,4 @@ export class GitHubPortfolioIndexer {
|
|
|
494
494
|
return index;
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViUG9ydGZvbGlvSW5kZXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vR2l0SHViUG9ydGZvbGlvSW5kZXhlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBb0MxRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ3pCLE1BQU0sQ0FBQyxRQUFRLEdBQWtDLElBQUksQ0FBQztJQUN0RCxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUU1QixLQUFLLEdBQWdDLElBQUksQ0FBQztJQUMxQyxTQUFTLEdBQWdCLElBQUksQ0FBQztJQUNyQixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQzVDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixlQUFlLEdBQWdCLElBQUksQ0FBQztJQUMzQixpQkFBaUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtJQUVyRSxvQkFBb0IsQ0FBdUI7SUFDM0MsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUF3QjtJ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SSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxRQUFpQixFQUFFLFVBQW1CO1FBQzdELE1BQU0sS0FBSyxHQUF5QjtZQUNsQyxRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7WUFDL0IsVUFBVSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUU7WUFDdkUsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUNuQixhQUFhLEVBQUUsQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRTtTQUNSLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDckQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdEh1YiBQb3J0Zm9saW8gSW5kZXhlciAtIEZldGNoZXMgYW5kIGluZGV4ZXMgdXNlcidzIEdpdEh1YiBwb3J0Zm9saW8gZm9yIGZhc3Qgc2VhcmNoaW5nXG4gKiBcbiAqIEZlYXR1cmVzOlxuICogLSBTaW5nbGV0b24gcGF0dGVybiBmb3IgZWZmaWNpZW50IHJlc291cmNlIHVzYWdlXG4gKiAtIFNtYXJ0IGNhY2hpbmcgd2l0aCBUVEwgYW5kIGludmFsaWRhdGlvbiBhZnRlciB1c2VyIGFjdGlvbnNcbiAqIC0gR3JhcGhRTC9SRVNUIEFQSSBpbnRlZ3JhdGlvbiBmb3IgZWZmaWNpZW50IGZldGNoaW5nXG4gKiAtIFJhdGUgbGltaXRpbmcgYW5kIGF1dGhlbnRpY2F0aW9uIGhhbmRsaW5nXG4gKiAtIEZhbGxiYWNrIHN0cmF0ZWd5IGZvciByZXNpbGllbnQgb3BlcmF0aW9uXG4gKiAtIFBlcmZvcm1hbmNlIG9wdGltaXplZCBmb3IgMTAwMCsgcG9ydGZvbGlvIGVsZW1lbnRzXG4gKi9cblxuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tICcuL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSB9IGZyb20gJy4uL2NhY2hlL0FQSUNhY2hlLmpzJztcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSAnLi4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViSW5kZXhFbnRyeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xuICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGU7XG4gIHNoYTogc3RyaW5nOyAvLyBGaWxlIFNIQSBmb3IgY2hhbmdlIGRldGVjdGlvblxuICBodG1sVXJsOiBzdHJpbmc7IC8vIExpbmsgdG8gR2l0SHViXG4gIGRvd25sb2FkVXJsOiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZDogRGF0ZTtcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YlBvcnRmb2xpb0luZGV4IHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogRGF0ZTtcbiAgZWxlbWVudHM6IE1hcDxFbGVtZW50VHlwZSwgR2l0SHViSW5kZXhFbnRyeVtdPjtcbiAgdG90YWxFbGVtZW50czogbnVtYmVyO1xuICBzaGE6IHN0cmluZzsgLy8gTGF0ZXN0IGNvbW1pdCBTSEFcbiAgcmF0ZUxpbWl0SW5mbz86IHtcbiAgICByZW1haW5pbmc6IG51bWJlcjtcbiAgICByZXNldFRpbWU6IERhdGU7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViRmV0Y2hPcHRpb25zIHtcbiAgZm9yY2U/OiBib29sZWFuO1xuICBtYXhFbGVtZW50cz86IG51bWJlcjtcbiAgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXTtcbiAgdXNlR3JhcGhRTD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VMb2NrID0gZmFsc2U7XG4gIFxuICBwcml2YXRlIGNhY2hlOiBHaXRIdWJQb3J0Zm9saW9JbmRleCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RGZXRjaDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bCA9IDE1ICogNjAgKiAxMDAwOyAvLyAxNSBtaW51dGVzXG4gIHByaXZhdGUgcmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGlvblRpbWVzdGFtcDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkdyYWNlUGVyaW9kID0gMiAqIDYwICogMTAwMDsgLy8gMiBtaW51dGVzIGFmdGVyIGFjdGlvblxuICBcbiAgcHJpdmF0ZSBwb3J0Zm9saW9SZXBvTWFuYWdlcjogUG9ydGZvbGlvUmVwb01hbmFnZXI7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlO1xuICBwcml2YXRlIHJhdGVMaW1pdFRyYWNrZXI6IE1hcDxzdHJpbmcsIG51bWJlcltdPjtcbiAgXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hcGlDYWNoZSA9IG5ldyBBUElDYWNoZSgpOyAvLyBVc2VzIGRlZmF1bHQgc2V0dGluZ3NcbiAgICB0aGlzLnJhdGVMaW1pdFRyYWNrZXIgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpKTtcbiAgICBcbiAgICBsb2dnZXIuZGVidWcoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIgY3JlYXRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBwYXR0ZXJuIHdpdGggdGhyZWFkIHNhZmV0eVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIHtcbiAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIGlmICh0aGlzLmluc3RhbmNlTG9jaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIgaW5zdGFuY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBhbm90aGVyIHRocmVhZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmluc3RhbmNlTG9jayA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgR2l0SHViUG9ydGZvbGlvSW5kZXhlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogTWFpbiBtZXRob2QgdG8gZ2V0IEdpdEh1YiBwb3J0Zm9saW8gaW5kZXhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRJbmRleChmb3JjZSA9IGZhbHNlKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIGZyZXNoIGRhdGFcbiAgICAgIGlmIChmb3JjZSB8fCB0aGlzLnNob3VsZEZldGNoRnJlc2goKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaEZyZXNoKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgZGF0YSBpZiBhdmFpbGFibGUgYW5kIHZhbGlkXG4gICAgICBpZiAodGhpcy5jYWNoZSAmJiB0aGlzLmlzQ2FjaGVWYWxpZCgpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0dXJuaW5nIGNhY2hlZCBHaXRIdWIgcG9ydGZvbGlvIGluZGV4Jywge1xuICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmNhY2hlLnVzZXJuYW1lLFxuICAgICAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuY2FjaGUudG90YWxFbGVtZW50cyxcbiAgICAgICAgICBhZ2U6IHRoaXMubGFzdEZldGNoID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEZldGNoLmdldFRpbWUoKSA6ICd1bmtub3duJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBmZXRjaCBmcmVzaCwgZmFsbCBiYWNrIHRvIHN0YWxlIGNhY2hlIG9uIGZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoRnJlc2goKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZmV0Y2ggZnJlc2ggR2l0SHViIHBvcnRmb2xpbyBpbmRleCwgY2hlY2tpbmcgZm9yIHN0YWxlIGNhY2hlJywge1xuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm4gc3RhbGUgY2FjaGUgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ1JldHVybmluZyBzdGFsZSBHaXRIdWIgcG9ydGZvbGlvIGNhY2hlIGFzIGZhbGxiYWNrJywge1xuICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMuY2FjaGUudXNlcm5hbWUsXG4gICAgICAgICAgICBhZ2U6IHRoaXMubGFzdEZldGNoID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEZldGNoLmdldFRpbWUoKSA6ICd1bmtub3duJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgaW5kZXggYXMgbGFzdCByZXNvcnRcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlJbmRleCgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViUG9ydGZvbGlvSW5kZXhlci5nZXRJbmRleCcsIGVycm9yKTtcbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIHN0YWxlIGNhY2hlIG9yIGVtcHR5IGluZGV4XG4gICAgICBpZiAodGhpcy5jYWNoZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZhbGlkYXRlIGNhY2hlIGFmdGVyIHVzZXIgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGludmFsaWRhdGVBZnRlckFjdGlvbihhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZ2dlci5pbmZvKCdJbnZhbGlkYXRpbmcgR2l0SHViIHBvcnRmb2xpbyBjYWNoZSBhZnRlciB1c2VyIGFjdGlvbicsIHsgYWN0aW9uIH0pO1xuICAgIFxuICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25UaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgIFxuICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0NBQ0hFX0lOVkFMSURBVElPTicsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHaXRIdWJQb3J0Zm9saW9JbmRleGVyLmludmFsaWRhdGVBZnRlckFjdGlvbicsXG4gICAgICBkZXRhaWxzOiBgQ2FjaGUgaW52YWxpZGF0ZWQgYWZ0ZXIgdXNlciBhY3Rpb246ICR7YWN0aW9ufWAsXG4gICAgICBtZXRhZGF0YTogeyBhY3Rpb24gfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgZGF0YVxuICAgKi9cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgdGhpcy5sYXN0RmV0Y2ggPSBudWxsO1xuICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aW9uVGltZXN0YW1wID0gbnVsbDtcbiAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gICAgXG4gICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBwb3J0Zm9saW8gY2FjaGUgY2xlYXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2FjaGVTdGF0cygpOiB7XG4gICAgaGFzQ2FjaGVkRGF0YTogYm9vbGVhbjtcbiAgICBsYXN0RmV0Y2g6IERhdGUgfCBudWxsO1xuICAgIGlzU3RhbGU6IGJvb2xlYW47XG4gICAgcmVjZW50VXNlckFjdGlvbjogYm9vbGVhbjtcbiAgICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNDYWNoZWREYXRhOiB0aGlzLmNhY2hlICE9PSBudWxsLFxuICAgICAgbGFzdEZldGNoOiB0aGlzLmxhc3RGZXRjaCxcbiAgICAgIGlzU3RhbGU6ICF0aGlzLmlzQ2FjaGVWYWxpZCgpLFxuICAgICAgcmVjZW50VXNlckFjdGlvbjogdGhpcy5yZWNlbnRVc2VyQWN0aW9uLFxuICAgICAgdG90YWxFbGVtZW50czogdGhpcy5jYWNoZT8udG90YWxFbGVtZW50cyB8fCAwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBmcmVzaCBkYXRhIGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoRnJlc2goKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nIGZyZXNoIEdpdEh1YiBwb3J0Zm9saW8gaW5kZXguLi4nKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IEdpdEh1YiB1c2VybmFtZSBmcm9tIHRva2VuXG4gICAgICBjb25zdCB1c2VybmFtZSA9IGF3YWl0IHRoaXMuZ2V0R2l0SHViVXNlcm5hbWUoKTtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyByZXBvc2l0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgcmVwb0V4aXN0cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvUmVwb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWUpO1xuICAgICAgaWYgKCFyZXBvRXhpc3RzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZG9lcyBub3QgZXhpc3QnLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVFbXB0eUluZGV4KHVzZXJuYW1lLCByZXBvc2l0b3J5KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmV0Y2ggcmVwb3NpdG9yeSBjb250ZW50IHVzaW5nIEdpdEh1YiBBUElcbiAgICAgIGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFJlcG9zaXRvcnlDb250ZW50KHVzZXJuYW1lLCByZXBvc2l0b3J5KTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGNhY2hlXG4gICAgICB0aGlzLmNhY2hlID0gaW5kZXg7XG4gICAgICB0aGlzLmxhc3RGZXRjaCA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnJlY2VudFVzZXJBY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWN0aW9uVGltZXN0YW1wID0gbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBwb3J0Zm9saW8gaW5kZXggZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICB0b3RhbEVsZW1lbnRzOiBpbmRleC50b3RhbEVsZW1lbnRzLFxuICAgICAgICBkdXJhdGlvbjogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgICByYXRlTGltaXRSZW1haW5pbmc6IGluZGV4LnJhdGVMaW1pdEluZm8/LnJlbWFpbmluZ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUE9SVEZPTElPX0ZFVENIX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuZmV0Y2hGcmVzaCcsXG4gICAgICAgIGRldGFpbHM6IGBGZXRjaGVkIEdpdEh1YiBwb3J0Zm9saW8gd2l0aCAke2luZGV4LnRvdGFsRWxlbWVudHN9IGVsZW1lbnRzIGluICR7ZHVyYXRpb259bXNgLFxuICAgICAgICBtZXRhZGF0YTogeyB1c2VybmFtZSwgZHVyYXRpb24sIHRvdGFsRWxlbWVudHM6IGluZGV4LnRvdGFsRWxlbWVudHMgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuZmV0Y2hGcmVzaCcsIGVycm9yLCB7IGR1cmF0aW9uIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBmZXRjaCBHaXRIdWIgcG9ydGZvbGlvIGluZGV4JywgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggcmVwb3NpdG9yeSBjb250ZW50IGZyb20gR2l0SHViIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJlcG9zaXRvcnlDb250ZW50KHVzZXJuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IFByb21pc2U8R2l0SHViUG9ydGZvbGlvSW5kZXg+IHtcbiAgICAvLyBUcnkgR3JhcGhRTCBmaXJzdCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCBmYWxsYmFjayB0byBSRVNUXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoV2l0aEdyYXBoUUwodXNlcm5hbWUsIHJlcG9zaXRvcnkpO1xuICAgIH0gY2F0Y2ggKGdyYXBocWxFcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdHcmFwaFFMIGZldGNoIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIFJFU1QgQVBJJywge1xuICAgICAgICBlcnJvcjogZ3JhcGhxbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBncmFwaHFsRXJyb3IubWVzc2FnZSA6IFN0cmluZyhncmFwaHFsRXJyb3IpXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hXaXRoUkVTVCh1c2VybmFtZSwgcmVwb3NpdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHVzaW5nIEdyYXBoUUwgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhHcmFwaFFMKHVzZXJuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IFByb21pc2U8R2l0SHViUG9ydGZvbGlvSW5kZXg+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIHF1ZXJ5IEdldFBvcnRmb2xpb0NvbnRlbnQoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISkge1xuICAgICAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICAgICAgZGVmYXVsdEJyYW5jaFJlZiB7XG4gICAgICAgICAgICB0YXJnZXQge1xuICAgICAgICAgICAgICAuLi4gb24gQ29tbWl0IHtcbiAgICAgICAgICAgICAgICBvaWRcbiAgICAgICAgICAgICAgICBoaXN0b3J5KGZpcnN0OiAxKSB7XG4gICAgICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZERhdGVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqZWN0KGV4cHJlc3Npb246IFwiSEVBRDpcIikge1xuICAgICAgICAgICAgLi4uIG9uIFRyZWUge1xuICAgICAgICAgICAgICBlbnRyaWVzIHtcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgIG9iamVjdCB7XG4gICAgICAgICAgICAgICAgICAuLi4gb24gVHJlZSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXMge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgb2lkXG4gICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiBvbiBCbG9iIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByYXRlTGltaXQge1xuICAgICAgICAgIHJlbWFpbmluZ1xuICAgICAgICAgIHJlc2V0QXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gICAgXG4gICAgY29uc3QgdmFyaWFibGVzID0geyBvd25lcjogdXNlcm5hbWUsIG5hbWU6IHJlcG9zaXRvcnkgfTtcbiAgICBcbiAgICAvLyBHcmFwaFFMIGVuZHBvaW50IG5vdCB5ZXQgaW1wbGVtZW50ZWQgd2l0aCBQb3J0Zm9saW9SZXBvTWFuYWdlclxuICAgIC8vIEZvciBub3csIGp1c3QgdGhyb3cgdG8gZmFsbCBiYWNrIHRvIFJFU1RcbiAgICAvLyBOb3RlOiBUaGlzIGlzIGEgc2ltcGxpZmllZCBHcmFwaFFMIGltcGxlbWVudGF0aW9uXG4gICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCB5b3Ugd291bGQgc2VuZCBQT1NUIHJlcXVlc3Qgd2l0aCBxdWVyeSBhbmQgdmFyaWFibGVzXG4gICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaFFMIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdXNpbmcgUkVTVCBBUEkgd2l0aCBwYWdpbmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFJFU1QodXNlcm5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVc2VybmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXJuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSBpbmZvIGFuZCBsYXRlc3QgY29tbWl0XG4gICAgY29uc3QgcmVwb0luZm8gPSBhd2FpdCB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdpdGh1YlJlcXVlc3QoXG4gICAgICBgL3JlcG9zLyR7bm9ybWFsaXplZFVzZXJuYW1lfS8ke3JlcG9zaXRvcnl9YFxuICAgICk7XG4gICAgXG4gICAgY29uc3QgbGF0ZXN0Q29tbWl0ID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlci5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke25vcm1hbGl6ZWRVc2VybmFtZX0vJHtyZXBvc2l0b3J5fS9jb21taXRzL0hFQURgXG4gICAgKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGluZGV4XG4gICAgY29uc3QgaW5kZXg6IEdpdEh1YlBvcnRmb2xpb0luZGV4ID0ge1xuICAgICAgdXNlcm5hbWU6IG5vcm1hbGl6ZWRVc2VybmFtZSxcbiAgICAgIHJlcG9zaXRvcnksXG4gICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUobGF0ZXN0Q29tbWl0LmNvbW1pdC5jb21taXR0ZXIuZGF0ZSksXG4gICAgICBlbGVtZW50czogbmV3IE1hcCgpLFxuICAgICAgdG90YWxFbGVtZW50czogMCxcbiAgICAgIHNoYTogbGF0ZXN0Q29tbWl0LnNoYVxuICAgIH07XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBlbGVtZW50IHR5cGUgbWFwc1xuICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzLnNldChlbGVtZW50VHlwZSwgW10pO1xuICAgIH1cbiAgICBcbiAgICAvLyBGZXRjaCBjb250ZW50IGZvciBlYWNoIGVsZW1lbnQgdHlwZVxuICAgIGxvZ2dlci5pbmZvKGBGZXRjaGluZyBjb250ZW50IGZvciBhbGwgZWxlbWVudCB0eXBlcyBmcm9tIEdpdEh1YiBwb3J0Zm9saW8uLi5gKTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nICR7ZWxlbWVudFR5cGV9IGZyb20gR2l0SHViLi4uYCk7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmZldGNoRWxlbWVudFR5cGVDb250ZW50KG5vcm1hbGl6ZWRVc2VybmFtZSwgcmVwb3NpdG9yeSwgZWxlbWVudFR5cGUpO1xuICAgICAgICBpbmRleC5lbGVtZW50cy5zZXQoZWxlbWVudFR5cGUsIGVudHJpZXMpO1xuICAgICAgICBpbmRleC50b3RhbEVsZW1lbnRzICs9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDinIUgRm91bmQgJHtlbnRyaWVzLmxlbmd0aH0gJHtlbGVtZW50VHlwZX0gaW4gR2l0SHViIHBvcnRmb2xpb2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhg8J+TgSBObyAke2VsZW1lbnRUeXBlfSBmb3VuZCAoZGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0KWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2Fybihg4p2MIEZhaWxlZCB0byBmZXRjaCAke2VsZW1lbnRUeXBlfSBmcm9tIEdpdEh1YiBwb3J0Zm9saW9gLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICBlbGVtZW50VHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBlbGVtZW50IHR5cGVzXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBjb250ZW50IGZvciBhIHNwZWNpZmljIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEVsZW1lbnRUeXBlQ29udGVudChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVcbiAgKTogUHJvbWlzZTxHaXRIdWJJbmRleEVudHJ5W10+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRpcmVjdG9yeSBsaXN0aW5nIHVzaW5nIFBvcnRmb2xpb1JlcG9NYW5hZ2VyXG4gICAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvUmVwb01hbmFnZXIuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke3JlcG9zaXRvcnl9L2NvbnRlbnRzLyR7ZWxlbWVudFR5cGV9YFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnRzKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVudHJpZXM6IEdpdEh1YkluZGV4RW50cnlbXSA9IFtdO1xuICAgICAgY29uc3QgbWF4Q29uY3VycmVudCA9IDU7IC8vIExpbWl0IGNvbmN1cnJlbnQgcmVxdWVzdHNcbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBmaWxlcyBpbiBiYXRjaGVzIHRvIGF2b2lkIHJhdGUgbGltaXRpbmdcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudHMubGVuZ3RoOyBpICs9IG1heENvbmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBjb250ZW50cy5zbGljZShpLCBpICsgbWF4Q29uY3VycmVudCk7XG4gICAgICAgIGNvbnN0IGJhdGNoUHJvbWlzZXMgPSBiYXRjaFxuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdmaWxlJyAmJiBpdGVtLm5hbWUuZW5kc1dpdGgoJy5tZCcpKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZUdpdEh1YkluZGV4RW50cnkodXNlcm5hbWUsIHJlcG9zaXRvcnksIGVsZW1lbnRUeXBlLCBpdGVtKSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBiYXRjaFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYmF0Y2hQcm9taXNlcyk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBiYXRjaFJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEFkZCBkZWxheSBiZXR3ZWVuIGJhdGNoZXMgdG8gcmVzcGVjdCByYXRlIGxpbWl0c1xuICAgICAgICBpZiAoaSArIG1heENvbmN1cnJlbnQgPCBjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCAtIGNoZWNrIGZvciA0MDQgZXJyb3JzXG4gICAgICAvLyBQb3J0Zm9saW9SZXBvTWFuYWdlciB3aWxsIHRocm93IHN0YW5kYXJkIEdpdEh1YiBBUEkgZXJyb3JzXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAvLyBDaGVjayBmb3IgNDA0IE5vdCBGb3VuZCBlcnJvcnMgZnJvbSBHaXRIdWIgQVBJXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCc0MDQnKSB8fCBcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ05vdCBGb3VuZCcpKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBEaXJlY3RvcnkgJHtlbGVtZW50VHlwZX0gbm90IGZvdW5kIGluIEdpdEh1YiByZXBvc2l0b3J5ICh0aGlzIGlzIG5vcm1hbCBpZiBub3QgeWV0IGNyZWF0ZWQpYCk7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRXJyb3IgZmV0Y2hpbmcgJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmUtdGhyb3cgb3RoZXIgZXJyb3JzXG4gICAgICBsb2dnZXIud2FybihgVW5leHBlY3RlZCBlcnJvciBmZXRjaGluZyAke2VsZW1lbnRUeXBlfTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIEdpdEh1YiBpbmRleCBlbnRyeSBmcm9tIEFQSSByZXNwb25zZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVHaXRIdWJJbmRleEVudHJ5KFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgICBmaWxlSW5mbzogYW55XG4gICk6IFByb21pc2U8R2l0SHViSW5kZXhFbnRyeSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUGFyc2UgbWV0YWRhdGEgZnJvbSBmaWxlbmFtZSBvciBmZXRjaCBjb250ZW50IGlmIG5lZWRlZFxuICAgICAgLy8gRklYOiBLZWVwIG9yaWdpbmFsIGZpbGVuYW1lIGZvcm1hdCB0byBtYXRjaCBsb2NhbCBmaWxlIGV4cGVjdGF0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogLnJlcGxhY2UoLy0vZywgJyAnKSBjb252ZXJ0ZWQgaHlwaGVucyB0byBzcGFjZXMgY2F1c2luZyBzeW5jIG1pc21hdGNoXG4gICAgICBjb25zdCBuYW1lID0gZmlsZUluZm8ubmFtZS5yZXBsYWNlKCcubWQnLCAnJyk7XG4gICAgICBcbiAgICAgIGNvbnN0IGVudHJ5OiBHaXRIdWJJbmRleEVudHJ5ID0ge1xuICAgICAgICBwYXRoOiBmaWxlSW5mby5wYXRoLFxuICAgICAgICBuYW1lLFxuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgc2hhOiBmaWxlSW5mby5zaGEsXG4gICAgICAgIGh0bWxVcmw6IGZpbGVJbmZvLmh0bWxfdXJsLFxuICAgICAgICBkb3dubG9hZFVybDogZmlsZUluZm8uZG93bmxvYWRfdXJsLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKCksIC8vIEdpdEh1YiBBUEkgZG9lc24ndCBwcm92aWRlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgZGlyZWN0bHlcbiAgICAgICAgc2l6ZTogZmlsZUluZm8uc2l6ZSB8fCAwXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPcHRpb25hbGx5IGZldGNoIGNvbnRlbnQgdG8gZXh0cmFjdCBtZXRhZGF0YVxuICAgICAgLy8gVGhpcyBpcyBleHBlbnNpdmUsIHNvIG9ubHkgZG8gaXQgZm9yIHNtYWxsIGZpbGVzIG9yIHdoZW4gc3BlY2lmaWNhbGx5IG5lZWRlZFxuICAgICAgaWYgKGZpbGVJbmZvLnNpemUgJiYgZmlsZUluZm8uc2l6ZSA8IDEwMDAwKSB7IC8vIE9ubHkgZm9yIGZpbGVzIDwgMTBLQlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEZvciBkb3dubG9hZCBVUkxzLCB3ZSBuZWVkIHRvIGZldGNoIGRpcmVjdGx5LCBub3QgdGhyb3VnaCBBUElcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGVJbmZvLmRvd25sb2FkX3VybCk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMucGFyc2VNZXRhZGF0YUZyb21Db250ZW50KGNvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChtZXRhZGF0YS5uYW1lKSBlbnRyeS5uYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZGVzY3JpcHRpb24pIGVudHJ5LmRlc2NyaXB0aW9uID0gbWV0YWRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLnZlcnNpb24pIGVudHJ5LnZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5hdXRob3IpIGVudHJ5LmF1dGhvciA9IG1ldGFkYXRhLmF1dGhvcjtcbiAgICAgICAgfSBjYXRjaCAobWV0YWRhdGFFcnJvcikge1xuICAgICAgICAgIC8vIE5vbi1jcml0aWNhbCBlcnJvciwgY29udGludWUgd2l0aG91dCBtZXRhZGF0YVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGZldGNoIG1ldGFkYXRhIGZvciBmaWxlJywge1xuICAgICAgICAgICAgcGF0aDogZmlsZUluZm8ucGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBtZXRhZGF0YUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBtZXRhZGF0YUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcobWV0YWRhdGFFcnJvcilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiBpbmRleCBlbnRyeScsIHtcbiAgICAgICAgcGF0aDogZmlsZUluZm8ucGF0aCxcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgbWV0YWRhdGEgZnJvbSBmaWxlIGNvbnRlbnQgKGZyb250bWF0dGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZU1ldGFkYXRhRnJvbUNvbnRlbnQoY29udGVudDogc3RyaW5nKToge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBhbnkgPSB7fTtcbiAgICBcbiAgICAvLyBTaW1wbGUgZnJvbnRtYXR0ZXIgcGFyc2luZyAoY291bGQgdXNlIGEgcHJvcGVyIFlBTUwgcGFyc2VyKVxuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tLyk7XG4gICAgaWYgKGZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICAgIFxuICAgICAgY29uc3QgbmFtZU1hdGNoID0gZnJvbnRtYXR0ZXIubWF0Y2goL15uYW1lOlxccyooLispJC9tKTtcbiAgICAgIGlmIChuYW1lTWF0Y2gpIG1ldGFkYXRhLm5hbWUgPSBuYW1lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgXG4gICAgICBjb25zdCBkZXNjTWF0Y2ggPSBmcm9udG1hdHRlci5tYXRjaCgvXmRlc2NyaXB0aW9uOlxccyooLispJC9tKTtcbiAgICAgIGlmIChkZXNjTWF0Y2gpIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGVzY01hdGNoWzFdLnRyaW0oKTtcbiAgICAgIFxuICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gZnJvbnRtYXR0ZXIubWF0Y2goL152ZXJzaW9uOlxccyooLispJC9tKTtcbiAgICAgIGlmICh2ZXJzaW9uTWF0Y2gpIG1ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgXG4gICAgICBjb25zdCBhdXRob3JNYXRjaCA9IGZyb250bWF0dGVyLm1hdGNoKC9eYXV0aG9yOlxccyooLispJC9tKTtcbiAgICAgIGlmIChhdXRob3JNYXRjaCkgbWV0YWRhdGEuYXV0aG9yID0gYXV0aG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEdpdEh1YiB1c2VybmFtZSBmcm9tIGF1dGhlbnRpY2F0ZWQgdG9rZW5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0R2l0SHViVXNlcm5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdpdGh1YlJlcXVlc3QoJy91c2VyJyk7XG4gICAgICByZXR1cm4gdXNlckluZm8ubG9naW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBHaXRIdWIgdXNlcm5hbWUuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBhdXRoZW50aWNhdGVkIHdpdGggR2l0SHViLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYWNoZSBpcyB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhY2hlVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlIHx8ICF0aGlzLmxhc3RGZXRjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RmV0Y2guZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZ2UgPCB0aGlzLnR0bDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGZldGNoIGZyZXNoIGRhdGFcbiAgICovXG4gIHByaXZhdGUgc2hvdWxkRmV0Y2hGcmVzaCgpOiBib29sZWFuIHtcbiAgICAvLyBBbHdheXMgZmV0Y2ggaWYgbm8gY2FjaGVcbiAgICBpZiAoIXRoaXMuY2FjaGUgfHwgIXRoaXMubGFzdEZldGNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHJlY2VudCB1c2VyIGFjdGlvbnNcbiAgICBpZiAodGhpcy5yZWNlbnRVc2VyQWN0aW9uICYmIHRoaXMuYWN0aW9uVGltZXN0YW1wKSB7XG4gICAgICBjb25zdCBhY3Rpb25BZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5hY3Rpb25UaW1lc3RhbXAuZ2V0VGltZSgpO1xuICAgICAgaWYgKGFjdGlvbkFnZSA8IHRoaXMuYWN0aW9uR3JhY2VQZXJpb2QpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGZXRjaGluZyBmcmVzaCBkdWUgdG8gcmVjZW50IHVzZXIgYWN0aW9uJywgeyBhY3Rpb25BZ2UgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR3JhY2UgcGVyaW9kIGV4cGlyZWQsIGNsZWFyIGFjdGlvbiBmbGFnXG4gICAgICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvblRpbWVzdGFtcCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIFRUTFxuICAgIHJldHVybiAhdGhpcy5pc0NhY2hlVmFsaWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZW1wdHkgaW5kZXggd2hlbiBubyBwb3J0Zm9saW8gZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVtcHR5SW5kZXgodXNlcm5hbWU/OiBzdHJpbmcsIHJlcG9zaXRvcnk/OiBzdHJpbmcpOiBHaXRIdWJQb3J0Zm9saW9JbmRleCB7XG4gICAgY29uc3QgaW5kZXg6IEdpdEh1YlBvcnRmb2xpb0luZGV4ID0ge1xuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lIHx8ICd1bmtub3duJyxcbiAgICAgIHJlcG9zaXRvcnk6IHJlcG9zaXRvcnkgfHwgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCksXG4gICAgICBlbGVtZW50czogbmV3IE1hcCgpLFxuICAgICAgdG90YWxFbGVtZW50czogMCxcbiAgICAgIHNoYTogJydcbiAgICB9O1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgZW1wdHkgZWxlbWVudCB0eXBlIG1hcHNcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICBpbmRleC5lbGVtZW50cy5zZXQoZWxlbWVudFR5cGUsIFtdKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59Il19
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViUG9ydGZvbGlvSW5kZXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vR2l0SHViUG9ydGZvbGlvSW5kZXhlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBb0MxRSxNQUFNLE9BQU8sc0JBQXNCO0lBQ3pCLE1BQU0sQ0FBQyxRQUFRLEdBQWtDLElBQUksQ0FBQztJQUN0RCxNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUU1QixLQUFLLEdBQWdDLElBQUksQ0FBQztJQUMxQyxTQUFTLEdBQWdCLElBQUksQ0FBQztJQUNyQixHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxhQUFhO0lBQzVDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUN6QixlQUFlLEdBQWdCLElBQUksQ0FBQztJQUMzQixpQkFBaUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLHlCQUF5QjtJQUVyRSxvQkFBb0IsQ0FBdUI7SUFDM0MsUUFBUSxDQUFXO0lBQ25CLGdCQUFnQixDQUF3QjtJ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SSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDBDQUEwQztnQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxZQUFZO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxRQUFpQixFQUFFLFVBQW1CO1FBQzdELE1BQU0sS0FBSyxHQUF5QjtZQUNsQyxRQUFRLEVBQUUsUUFBUSxJQUFJLFNBQVM7WUFDL0IsVUFBVSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUU7WUFDdkUsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUNuQixhQUFhLEVBQUUsQ0FBQztZQUNoQixHQUFHLEVBQUUsRUFBRTtTQUNSLENBQUM7UUFFRixxQ0FBcUM7UUFDckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDckQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdEh1YiBQb3J0Zm9saW8gSW5kZXhlciAtIEZldGNoZXMgYW5kIGluZGV4ZXMgdXNlcidzIEdpdEh1YiBwb3J0Zm9saW8gZm9yIGZhc3Qgc2VhcmNoaW5nXG4gKiBcbiAqIEZlYXR1cmVzOlxuICogLSBTaW5nbGV0b24gcGF0dGVybiBmb3IgZWZmaWNpZW50IHJlc291cmNlIHVzYWdlXG4gKiAtIFNtYXJ0IGNhY2hpbmcgd2l0aCBUVEwgYW5kIGludmFsaWRhdGlvbiBhZnRlciB1c2VyIGFjdGlvbnNcbiAqIC0gR3JhcGhRTC9SRVNUIEFQSSBpbnRlZ3JhdGlvbiBmb3IgZWZmaWNpZW50IGZldGNoaW5nXG4gKiAtIFJhdGUgbGltaXRpbmcgYW5kIGF1dGhlbnRpY2F0aW9uIGhhbmRsaW5nXG4gKiAtIEZhbGxiYWNrIHN0cmF0ZWd5IGZvciByZXNpbGllbnQgb3BlcmF0aW9uXG4gKiAtIFBlcmZvcm1hbmNlIG9wdGltaXplZCBmb3IgMTAwMCsgcG9ydGZvbGlvIGVsZW1lbnRzXG4gKi9cblxuaW1wb3J0IHsgUG9ydGZvbGlvUmVwb01hbmFnZXIgfSBmcm9tICcuL1BvcnRmb2xpb1JlcG9NYW5hZ2VyLmpzJztcbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSB9IGZyb20gJy4uL2NhY2hlL0FQSUNhY2hlLmpzJztcbmltcG9ydCB7IGdldFBvcnRmb2xpb1JlcG9zaXRvcnlOYW1lIH0gZnJvbSAnLi4vY29uZmlnL3BvcnRmb2xpb0NvbmZpZy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViSW5kZXhFbnRyeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYXV0aG9yPzogc3RyaW5nO1xuICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGU7XG4gIHNoYTogc3RyaW5nOyAvLyBGaWxlIFNIQSBmb3IgY2hhbmdlIGRldGVjdGlvblxuICBodG1sVXJsOiBzdHJpbmc7IC8vIExpbmsgdG8gR2l0SHViXG4gIGRvd25sb2FkVXJsOiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZDogRGF0ZTtcbiAgc2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YlBvcnRmb2xpb0luZGV4IHtcbiAgdXNlcm5hbWU6IHN0cmluZztcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICBsYXN0VXBkYXRlZDogRGF0ZTtcbiAgZWxlbWVudHM6IE1hcDxFbGVtZW50VHlwZSwgR2l0SHViSW5kZXhFbnRyeVtdPjtcbiAgdG90YWxFbGVtZW50czogbnVtYmVyO1xuICBzaGE6IHN0cmluZzsgLy8gTGF0ZXN0IGNvbW1pdCBTSEFcbiAgcmF0ZUxpbWl0SW5mbz86IHtcbiAgICByZW1haW5pbmc6IG51bWJlcjtcbiAgICByZXNldFRpbWU6IERhdGU7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViRmV0Y2hPcHRpb25zIHtcbiAgZm9yY2U/OiBib29sZWFuO1xuICBtYXhFbGVtZW50cz86IG51bWJlcjtcbiAgZWxlbWVudFR5cGVzPzogRWxlbWVudFR5cGVbXTtcbiAgdXNlR3JhcGhRTD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IEdpdEh1YlBvcnRmb2xpb0luZGV4ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VMb2NrID0gZmFsc2U7XG4gIFxuICBwcml2YXRlIGNhY2hlOiBHaXRIdWJQb3J0Zm9saW9JbmRleCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RGZXRjaDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHR0bCA9IDE1ICogNjAgKiAxMDAwOyAvLyAxNSBtaW51dGVzXG4gIHByaXZhdGUgcmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICBwcml2YXRlIGFjdGlvblRpbWVzdGFtcDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbkdyYWNlUGVyaW9kID0gMiAqIDYwICogMTAwMDsgLy8gMiBtaW51dGVzIGFmdGVyIGFjdGlvblxuICBcbiAgcHJpdmF0ZSBwb3J0Zm9saW9SZXBvTWFuYWdlcjogUG9ydGZvbGlvUmVwb01hbmFnZXI7XG4gIHByaXZhdGUgYXBpQ2FjaGU6IEFQSUNhY2hlO1xuICBwcml2YXRlIHJhdGVMaW1pdFRyYWNrZXI6IE1hcDxzdHJpbmcsIG51bWJlcltdPjtcbiAgXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5hcGlDYWNoZSA9IG5ldyBBUElDYWNoZSgpOyAvLyBVc2VzIGRlZmF1bHQgc2V0dGluZ3NcbiAgICB0aGlzLnJhdGVMaW1pdFRyYWNrZXIgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlciA9IG5ldyBQb3J0Zm9saW9SZXBvTWFuYWdlcihnZXRQb3J0Zm9saW9SZXBvc2l0b3J5TmFtZSgpKTtcbiAgICBcbiAgICBsb2dnZXIuZGVidWcoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIgY3JlYXRlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbmdsZXRvbiBwYXR0ZXJuIHdpdGggdGhyZWFkIHNhZmV0eVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBHaXRIdWJQb3J0Zm9saW9JbmRleGVyIHtcbiAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgIGlmICh0aGlzLmluc3RhbmNlTG9jaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIgaW5zdGFuY2UgaXMgYmVpbmcgY3JlYXRlZCBieSBhbm90aGVyIHRocmVhZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmluc3RhbmNlTG9jayA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBuZXcgR2l0SHViUG9ydGZvbGlvSW5kZXhlcigpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUxvY2sgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5zdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogTWFpbiBtZXRob2QgdG8gZ2V0IEdpdEh1YiBwb3J0Zm9saW8gaW5kZXhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRJbmRleChmb3JjZSA9IGZhbHNlKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIGZyZXNoIGRhdGFcbiAgICAgIGlmIChmb3JjZSB8fCB0aGlzLnNob3VsZEZldGNoRnJlc2goKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5mZXRjaEZyZXNoKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBjYWNoZWQgZGF0YSBpZiBhdmFpbGFibGUgYW5kIHZhbGlkXG4gICAgICBpZiAodGhpcy5jYWNoZSAmJiB0aGlzLmlzQ2FjaGVWYWxpZCgpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0dXJuaW5nIGNhY2hlZCBHaXRIdWIgcG9ydGZvbGlvIGluZGV4Jywge1xuICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLmNhY2hlLnVzZXJuYW1lLFxuICAgICAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuY2FjaGUudG90YWxFbGVtZW50cyxcbiAgICAgICAgICBhZ2U6IHRoaXMubGFzdEZldGNoID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEZldGNoLmdldFRpbWUoKSA6ICd1bmtub3duJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFRyeSB0byBmZXRjaCBmcmVzaCwgZmFsbCBiYWNrIHRvIHN0YWxlIGNhY2hlIG9uIGZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoRnJlc2goKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGYWlsZWQgdG8gZmV0Y2ggZnJlc2ggR2l0SHViIHBvcnRmb2xpbyBpbmRleCwgY2hlY2tpbmcgZm9yIHN0YWxlIGNhY2hlJywge1xuICAgICAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm4gc3RhbGUgY2FjaGUgaWYgYXZhaWxhYmxlXG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oJ1JldHVybmluZyBzdGFsZSBHaXRIdWIgcG9ydGZvbGlvIGNhY2hlIGFzIGZhbGxiYWNrJywge1xuICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMuY2FjaGUudXNlcm5hbWUsXG4gICAgICAgICAgICBhZ2U6IHRoaXMubGFzdEZldGNoID8gRGF0ZS5ub3coKSAtIHRoaXMubGFzdEZldGNoLmdldFRpbWUoKSA6ICd1bmtub3duJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBSZXR1cm4gZW1wdHkgaW5kZXggYXMgbGFzdCByZXNvcnRcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlJbmRleCgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViUG9ydGZvbGlvSW5kZXhlci5nZXRJbmRleCcsIGVycm9yKTtcbiAgICAgIFxuICAgICAgLy8gUmV0dXJuIHN0YWxlIGNhY2hlIG9yIGVtcHR5IGluZGV4XG4gICAgICBpZiAodGhpcy5jYWNoZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRW1wdHlJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZhbGlkYXRlIGNhY2hlIGFmdGVyIHVzZXIgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGludmFsaWRhdGVBZnRlckFjdGlvbihhY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGxvZ2dlci5pbmZvKCdJbnZhbGlkYXRpbmcgR2l0SHViIHBvcnRmb2xpbyBjYWNoZSBhZnRlciB1c2VyIGFjdGlvbicsIHsgYWN0aW9uIH0pO1xuICAgIFxuICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5hY3Rpb25UaW1lc3RhbXAgPSBuZXcgRGF0ZSgpO1xuICAgIFxuICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnUE9SVEZPTElPX0NBQ0hFX0lOVkFMSURBVElPTicsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHaXRIdWJQb3J0Zm9saW9JbmRleGVyLmludmFsaWRhdGVBZnRlckFjdGlvbicsXG4gICAgICBkZXRhaWxzOiBgQ2FjaGUgaW52YWxpZGF0ZWQgYWZ0ZXIgdXNlciBhY3Rpb246ICR7YWN0aW9ufWAsXG4gICAgICBtZXRhZGF0YTogeyBhY3Rpb24gfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZWQgZGF0YVxuICAgKi9cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5jYWNoZSA9IG51bGw7XG4gICAgdGhpcy5sYXN0RmV0Y2ggPSBudWxsO1xuICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aW9uVGltZXN0YW1wID0gbnVsbDtcbiAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gICAgXG4gICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBwb3J0Zm9saW8gY2FjaGUgY2xlYXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjYWNoZSBzdGF0aXN0aWNzXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2FjaGVTdGF0cygpOiB7XG4gICAgaGFzQ2FjaGVkRGF0YTogYm9vbGVhbjtcbiAgICBsYXN0RmV0Y2g6IERhdGUgfCBudWxsO1xuICAgIGlzU3RhbGU6IGJvb2xlYW47XG4gICAgcmVjZW50VXNlckFjdGlvbjogYm9vbGVhbjtcbiAgICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNDYWNoZWREYXRhOiB0aGlzLmNhY2hlICE9PSBudWxsLFxuICAgICAgbGFzdEZldGNoOiB0aGlzLmxhc3RGZXRjaCxcbiAgICAgIGlzU3RhbGU6ICF0aGlzLmlzQ2FjaGVWYWxpZCgpLFxuICAgICAgcmVjZW50VXNlckFjdGlvbjogdGhpcy5yZWNlbnRVc2VyQWN0aW9uLFxuICAgICAgdG90YWxFbGVtZW50czogdGhpcy5jYWNoZT8udG90YWxFbGVtZW50cyB8fCAwXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBmcmVzaCBkYXRhIGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoRnJlc2goKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgbG9nZ2VyLmluZm8oJ0ZldGNoaW5nIGZyZXNoIEdpdEh1YiBwb3J0Zm9saW8gaW5kZXguLi4nKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IEdpdEh1YiB1c2VybmFtZSBmcm9tIHRva2VuXG4gICAgICBjb25zdCB1c2VybmFtZSA9IGF3YWl0IHRoaXMuZ2V0R2l0SHViVXNlcm5hbWUoKTtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdldFJlcG9zaXRvcnlOYW1lKCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIHBvcnRmb2xpbyByZXBvc2l0b3J5IGV4aXN0c1xuICAgICAgY29uc3QgcmVwb0V4aXN0cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvUmVwb01hbmFnZXIuY2hlY2tQb3J0Zm9saW9FeGlzdHModXNlcm5hbWUpO1xuICAgICAgaWYgKCFyZXBvRXhpc3RzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdHaXRIdWIgcG9ydGZvbGlvIHJlcG9zaXRvcnkgZG9lcyBub3QgZXhpc3QnLCB7IHVzZXJuYW1lIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVFbXB0eUluZGV4KHVzZXJuYW1lLCByZXBvc2l0b3J5KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRmV0Y2ggcmVwb3NpdG9yeSBjb250ZW50IHVzaW5nIEdpdEh1YiBBUElcbiAgICAgIGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFJlcG9zaXRvcnlDb250ZW50KHVzZXJuYW1lLCByZXBvc2l0b3J5KTtcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGNhY2hlXG4gICAgICB0aGlzLmNhY2hlID0gaW5kZXg7XG4gICAgICB0aGlzLmxhc3RGZXRjaCA9IG5ldyBEYXRlKCk7XG4gICAgICB0aGlzLnJlY2VudFVzZXJBY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuYWN0aW9uVGltZXN0YW1wID0gbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBwb3J0Zm9saW8gaW5kZXggZmV0Y2hlZCBzdWNjZXNzZnVsbHknLCB7XG4gICAgICAgIHVzZXJuYW1lLFxuICAgICAgICB0b3RhbEVsZW1lbnRzOiBpbmRleC50b3RhbEVsZW1lbnRzLFxuICAgICAgICBkdXJhdGlvbjogYCR7ZHVyYXRpb259bXNgLFxuICAgICAgICByYXRlTGltaXRSZW1haW5pbmc6IGluZGV4LnJhdGVMaW1pdEluZm8/LnJlbWFpbmluZ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUE9SVEZPTElPX0ZFVENIX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuZmV0Y2hGcmVzaCcsXG4gICAgICAgIGRldGFpbHM6IGBGZXRjaGVkIEdpdEh1YiBwb3J0Zm9saW8gd2l0aCAke2luZGV4LnRvdGFsRWxlbWVudHN9IGVsZW1lbnRzIGluICR7ZHVyYXRpb259bXNgLFxuICAgICAgICBtZXRhZGF0YTogeyB1c2VybmFtZSwgZHVyYXRpb24sIHRvdGFsRWxlbWVudHM6IGluZGV4LnRvdGFsRWxlbWVudHMgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YlBvcnRmb2xpb0luZGV4ZXIuZmV0Y2hGcmVzaCcsIGVycm9yLCB7IGR1cmF0aW9uIH0pO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBmZXRjaCBHaXRIdWIgcG9ydGZvbGlvIGluZGV4JywgRXJyb3JDYXRlZ29yeS5ORVRXT1JLX0VSUk9SKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggcmVwb3NpdG9yeSBjb250ZW50IGZyb20gR2l0SHViIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJlcG9zaXRvcnlDb250ZW50KHVzZXJuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IFByb21pc2U8R2l0SHViUG9ydGZvbGlvSW5kZXg+IHtcbiAgICAvLyBUcnkgR3JhcGhRTCBmaXJzdCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLCBmYWxsYmFjayB0byBSRVNUXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoV2l0aEdyYXBoUUwodXNlcm5hbWUsIHJlcG9zaXRvcnkpO1xuICAgIH0gY2F0Y2ggKGdyYXBocWxFcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdHcmFwaFFMIGZldGNoIGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIFJFU1QgQVBJJywge1xuICAgICAgICBlcnJvcjogZ3JhcGhxbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBncmFwaHFsRXJyb3IubWVzc2FnZSA6IFN0cmluZyhncmFwaHFsRXJyb3IpXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hXaXRoUkVTVCh1c2VybmFtZSwgcmVwb3NpdG9yeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHVzaW5nIEdyYXBoUUwgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhHcmFwaFFMKHVzZXJuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IFByb21pc2U8R2l0SHViUG9ydGZvbGlvSW5kZXg+IHtcbiAgICBjb25zdCBxdWVyeSA9IGBcbiAgICAgIHF1ZXJ5IEdldFBvcnRmb2xpb0NvbnRlbnQoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISkge1xuICAgICAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICAgICAgZGVmYXVsdEJyYW5jaFJlZiB7XG4gICAgICAgICAgICB0YXJnZXQge1xuICAgICAgICAgICAgICAuLi4gb24gQ29tbWl0IHtcbiAgICAgICAgICAgICAgICBvaWRcbiAgICAgICAgICAgICAgICBoaXN0b3J5KGZpcnN0OiAxKSB7XG4gICAgICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1pdHRlZERhdGVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqZWN0KGV4cHJlc3Npb246IFwiSEVBRDpcIikge1xuICAgICAgICAgICAgLi4uIG9uIFRyZWUge1xuICAgICAgICAgICAgICBlbnRyaWVzIHtcbiAgICAgICAgICAgICAgICBuYW1lXG4gICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgIG9iamVjdCB7XG4gICAgICAgICAgICAgICAgICAuLi4gb24gVHJlZSB7XG4gICAgICAgICAgICAgICAgICAgIGVudHJpZXMge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWVcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgb2lkXG4gICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiBvbiBCbG9iIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZVNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByYXRlTGltaXQge1xuICAgICAgICAgIHJlbWFpbmluZ1xuICAgICAgICAgIHJlc2V0QXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGA7XG4gICAgXG4gICAgY29uc3QgdmFyaWFibGVzID0geyBvd25lcjogdXNlcm5hbWUsIG5hbWU6IHJlcG9zaXRvcnkgfTtcbiAgICBcbiAgICAvLyBHcmFwaFFMIGVuZHBvaW50IG5vdCB5ZXQgaW1wbGVtZW50ZWQgd2l0aCBQb3J0Zm9saW9SZXBvTWFuYWdlclxuICAgIC8vIEZvciBub3csIGp1c3QgdGhyb3cgdG8gZmFsbCBiYWNrIHRvIFJFU1RcbiAgICAvLyBOb3RlOiBUaGlzIGlzIGEgc2ltcGxpZmllZCBHcmFwaFFMIGltcGxlbWVudGF0aW9uXG4gICAgLy8gSW4gYSByZWFsIGltcGxlbWVudGF0aW9uLCB5b3Ugd291bGQgc2VuZCBQT1NUIHJlcXVlc3Qgd2l0aCBxdWVyeSBhbmQgdmFyaWFibGVzXG4gICAgdGhyb3cgbmV3IEVycm9yKCdHcmFwaFFMIG5vdCB5ZXQgaW1wbGVtZW50ZWQgZm9yIHBvcnRmb2xpbyBvcGVyYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggdXNpbmcgUkVTVCBBUEkgd2l0aCBwYWdpbmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFJFU1QodXNlcm5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogUHJvbWlzZTxHaXRIdWJQb3J0Zm9saW9JbmRleD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVc2VybmFtZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHVzZXJuYW1lKS5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICAvLyBHZXQgcmVwb3NpdG9yeSBpbmZvIGFuZCBsYXRlc3QgY29tbWl0XG4gICAgY29uc3QgcmVwb0luZm8gPSBhd2FpdCB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdpdGh1YlJlcXVlc3QoXG4gICAgICBgL3JlcG9zLyR7bm9ybWFsaXplZFVzZXJuYW1lfS8ke3JlcG9zaXRvcnl9YFxuICAgICk7XG4gICAgXG4gICAgY29uc3QgbGF0ZXN0Q29tbWl0ID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlci5naXRodWJSZXF1ZXN0KFxuICAgICAgYC9yZXBvcy8ke25vcm1hbGl6ZWRVc2VybmFtZX0vJHtyZXBvc2l0b3J5fS9jb21taXRzL0hFQURgXG4gICAgKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGluZGV4XG4gICAgY29uc3QgaW5kZXg6IEdpdEh1YlBvcnRmb2xpb0luZGV4ID0ge1xuICAgICAgdXNlcm5hbWU6IG5vcm1hbGl6ZWRVc2VybmFtZSxcbiAgICAgIHJlcG9zaXRvcnksXG4gICAgICBsYXN0VXBkYXRlZDogbmV3IERhdGUobGF0ZXN0Q29tbWl0LmNvbW1pdC5jb21taXR0ZXIuZGF0ZSksXG4gICAgICBlbGVtZW50czogbmV3IE1hcCgpLFxuICAgICAgdG90YWxFbGVtZW50czogMCxcbiAgICAgIHNoYTogbGF0ZXN0Q29tbWl0LnNoYVxuICAgIH07XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBlbGVtZW50IHR5cGUgbWFwc1xuICAgIGZvciAoY29uc3QgZWxlbWVudFR5cGUgb2YgT2JqZWN0LnZhbHVlcyhFbGVtZW50VHlwZSkpIHtcbiAgICAgIGluZGV4LmVsZW1lbnRzLnNldChlbGVtZW50VHlwZSwgW10pO1xuICAgIH1cbiAgICBcbiAgICAvLyBGZXRjaCBjb250ZW50IGZvciBlYWNoIGVsZW1lbnQgdHlwZVxuICAgIGxvZ2dlci5pbmZvKGBGZXRjaGluZyBjb250ZW50IGZvciBhbGwgZWxlbWVudCB0eXBlcyBmcm9tIEdpdEh1YiBwb3J0Zm9saW8uLi5gKTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nICR7ZWxlbWVudFR5cGV9IGZyb20gR2l0SHViLi4uYCk7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmZldGNoRWxlbWVudFR5cGVDb250ZW50KG5vcm1hbGl6ZWRVc2VybmFtZSwgcmVwb3NpdG9yeSwgZWxlbWVudFR5cGUpO1xuICAgICAgICBpbmRleC5lbGVtZW50cy5zZXQoZWxlbWVudFR5cGUsIGVudHJpZXMpO1xuICAgICAgICBpbmRleC50b3RhbEVsZW1lbnRzICs9IGVudHJpZXMubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKGVudHJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDinIUgRm91bmQgJHtlbnRyaWVzLmxlbmd0aH0gJHtlbGVtZW50VHlwZX0gaW4gR2l0SHViIHBvcnRmb2xpb2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1Zyhg8J+TgSBObyAke2VsZW1lbnRUeXBlfSBmb3VuZCAoZGlyZWN0b3J5IG1heSBub3QgZXhpc3QgeWV0KWApO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2Fybihg4p2MIEZhaWxlZCB0byBmZXRjaCAke2VsZW1lbnRUeXBlfSBmcm9tIEdpdEh1YiBwb3J0Zm9saW9gLCB7XG4gICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICBlbGVtZW50VHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ29udGludWUgd2l0aCBvdGhlciBlbGVtZW50IHR5cGVzXG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBjb250ZW50IGZvciBhIHNwZWNpZmljIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEVsZW1lbnRUeXBlQ29udGVudChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVcbiAgKTogUHJvbWlzZTxHaXRIdWJJbmRleEVudHJ5W10+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IGRpcmVjdG9yeSBsaXN0aW5nIHVzaW5nIFBvcnRmb2xpb1JlcG9NYW5hZ2VyXG4gICAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IHRoaXMucG9ydGZvbGlvUmVwb01hbmFnZXIuZ2l0aHViUmVxdWVzdChcbiAgICAgICAgYC9yZXBvcy8ke3VzZXJuYW1lfS8ke3JlcG9zaXRvcnl9L2NvbnRlbnRzLyR7ZWxlbWVudFR5cGV9YFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnRzKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGVudHJpZXM6IEdpdEh1YkluZGV4RW50cnlbXSA9IFtdO1xuICAgICAgY29uc3QgbWF4Q29uY3VycmVudCA9IDU7IC8vIExpbWl0IGNvbmN1cnJlbnQgcmVxdWVzdHNcbiAgICAgIFxuICAgICAgLy8gUHJvY2VzcyBmaWxlcyBpbiBiYXRjaGVzIHRvIGF2b2lkIHJhdGUgbGltaXRpbmdcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGVudHMubGVuZ3RoOyBpICs9IG1heENvbmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgYmF0Y2ggPSBjb250ZW50cy5zbGljZShpLCBpICsgbWF4Q29uY3VycmVudCk7XG4gICAgICAgIGNvbnN0IGJhdGNoUHJvbWlzZXMgPSBiYXRjaFxuICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdmaWxlJyAmJiBpdGVtLm5hbWUuZW5kc1dpdGgoJy5tZCcpKVxuICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmNyZWF0ZUdpdEh1YkluZGV4RW50cnkodXNlcm5hbWUsIHJlcG9zaXRvcnksIGVsZW1lbnRUeXBlLCBpdGVtKSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBiYXRjaFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoYmF0Y2hQcm9taXNlcyk7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiBiYXRjaFJlc3VsdHMpIHtcbiAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgJiYgcmVzdWx0LnZhbHVlKSB7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEFkZCBkZWxheSBiZXR3ZWVuIGJhdGNoZXMgdG8gcmVzcGVjdCByYXRlIGxpbWl0c1xuICAgICAgICBpZiAoaSArIG1heENvbmN1cnJlbnQgPCBjb250ZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIGVudHJpZXM7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRGlyZWN0b3J5IG1pZ2h0IG5vdCBleGlzdCAtIGNoZWNrIGZvciA0MDQgZXJyb3JzXG4gICAgICAvLyBQb3J0Zm9saW9SZXBvTWFuYWdlciB3aWxsIHRocm93IHN0YW5kYXJkIEdpdEh1YiBBUEkgZXJyb3JzXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAvLyBDaGVjayBmb3IgNDA0IE5vdCBGb3VuZCBlcnJvcnMgZnJvbSBHaXRIdWIgQVBJXG4gICAgICAgIGlmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCc0MDQnKSB8fCBcbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ05vdCBGb3VuZCcpKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBEaXJlY3RvcnkgJHtlbGVtZW50VHlwZX0gbm90IGZvdW5kIGluIEdpdEh1YiByZXBvc2l0b3J5ICh0aGlzIGlzIG5vcm1hbCBpZiBub3QgeWV0IGNyZWF0ZWQpYCk7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRXJyb3IgZmV0Y2hpbmcgJHtlbGVtZW50VHlwZX06ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmUtdGhyb3cgb3RoZXIgZXJyb3JzXG4gICAgICBsb2dnZXIud2FybihgVW5leHBlY3RlZCBlcnJvciBmZXRjaGluZyAke2VsZW1lbnRUeXBlfTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIEdpdEh1YiBpbmRleCBlbnRyeSBmcm9tIEFQSSByZXNwb25zZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVHaXRIdWJJbmRleEVudHJ5KFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICAgIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSxcbiAgICBmaWxlSW5mbzogYW55XG4gICk6IFByb21pc2U8R2l0SHViSW5kZXhFbnRyeSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgLy8gUGFyc2UgbWV0YWRhdGEgZnJvbSBmaWxlbmFtZSBvciBmZXRjaCBjb250ZW50IGlmIG5lZWRlZFxuICAgICAgLy8gRklYOiBLZWVwIG9yaWdpbmFsIGZpbGVuYW1lIGZvcm1hdCB0byBtYXRjaCBsb2NhbCBmaWxlIGV4cGVjdGF0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogLnJlcGxhY2VBbGwoLy0vZywgJyAnKSBjb252ZXJ0ZWQgaHlwaGVucyB0byBzcGFjZXMgY2F1c2luZyBzeW5jIG1pc21hdGNoXG4gICAgICBjb25zdCBuYW1lID0gZmlsZUluZm8ubmFtZS5yZXBsYWNlKCcubWQnLCAnJyk7XG4gICAgICBcbiAgICAgIGNvbnN0IGVudHJ5OiBHaXRIdWJJbmRleEVudHJ5ID0ge1xuICAgICAgICBwYXRoOiBmaWxlSW5mby5wYXRoLFxuICAgICAgICBuYW1lLFxuICAgICAgICBlbGVtZW50VHlwZSxcbiAgICAgICAgc2hhOiBmaWxlSW5mby5zaGEsXG4gICAgICAgIGh0bWxVcmw6IGZpbGVJbmZvLmh0bWxfdXJsLFxuICAgICAgICBkb3dubG9hZFVybDogZmlsZUluZm8uZG93bmxvYWRfdXJsLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IG5ldyBEYXRlKCksIC8vIEdpdEh1YiBBUEkgZG9lc24ndCBwcm92aWRlIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWUgZGlyZWN0bHlcbiAgICAgICAgc2l6ZTogZmlsZUluZm8uc2l6ZSB8fCAwXG4gICAgICB9O1xuICAgICAgXG4gICAgICAvLyBPcHRpb25hbGx5IGZldGNoIGNvbnRlbnQgdG8gZXh0cmFjdCBtZXRhZGF0YVxuICAgICAgLy8gVGhpcyBpcyBleHBlbnNpdmUsIHNvIG9ubHkgZG8gaXQgZm9yIHNtYWxsIGZpbGVzIG9yIHdoZW4gc3BlY2lmaWNhbGx5IG5lZWRlZFxuICAgICAgaWYgKGZpbGVJbmZvLnNpemUgJiYgZmlsZUluZm8uc2l6ZSA8IDEwMDAwKSB7IC8vIE9ubHkgZm9yIGZpbGVzIDwgMTBLQlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEZvciBkb3dubG9hZCBVUkxzLCB3ZSBuZWVkIHRvIGZldGNoIGRpcmVjdGx5LCBub3QgdGhyb3VnaCBBUElcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGVJbmZvLmRvd25sb2FkX3VybCk7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMucGFyc2VNZXRhZGF0YUZyb21Db250ZW50KGNvbnRlbnQpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChtZXRhZGF0YS5uYW1lKSBlbnRyeS5uYW1lID0gbWV0YWRhdGEubmFtZTtcbiAgICAgICAgICBpZiAobWV0YWRhdGEuZGVzY3JpcHRpb24pIGVudHJ5LmRlc2NyaXB0aW9uID0gbWV0YWRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgaWYgKG1ldGFkYXRhLnZlcnNpb24pIGVudHJ5LnZlcnNpb24gPSBtZXRhZGF0YS52ZXJzaW9uO1xuICAgICAgICAgIGlmIChtZXRhZGF0YS5hdXRob3IpIGVudHJ5LmF1dGhvciA9IG1ldGFkYXRhLmF1dGhvcjtcbiAgICAgICAgfSBjYXRjaCAobWV0YWRhdGFFcnJvcikge1xuICAgICAgICAgIC8vIE5vbi1jcml0aWNhbCBlcnJvciwgY29udGludWUgd2l0aG91dCBtZXRhZGF0YVxuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGZldGNoIG1ldGFkYXRhIGZvciBmaWxlJywge1xuICAgICAgICAgICAgcGF0aDogZmlsZUluZm8ucGF0aCxcbiAgICAgICAgICAgIGVycm9yOiBtZXRhZGF0YUVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBtZXRhZGF0YUVycm9yLm1lc3NhZ2UgOiBTdHJpbmcobWV0YWRhdGFFcnJvcilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gZW50cnk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gY3JlYXRlIEdpdEh1YiBpbmRleCBlbnRyeScsIHtcbiAgICAgICAgcGF0aDogZmlsZUluZm8ucGF0aCxcbiAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgbWV0YWRhdGEgZnJvbSBmaWxlIGNvbnRlbnQgKGZyb250bWF0dGVyKVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZU1ldGFkYXRhRnJvbUNvbnRlbnQoY29udGVudDogc3RyaW5nKToge1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICBhdXRob3I/OiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBhbnkgPSB7fTtcbiAgICBcbiAgICAvLyBTaW1wbGUgZnJvbnRtYXR0ZXIgcGFyc2luZyAoY291bGQgdXNlIGEgcHJvcGVyIFlBTUwgcGFyc2VyKVxuICAgIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tLyk7XG4gICAgaWYgKGZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICAgIFxuICAgICAgY29uc3QgbmFtZU1hdGNoID0gZnJvbnRtYXR0ZXIubWF0Y2goL15uYW1lOlxccyooLispJC9tKTtcbiAgICAgIGlmIChuYW1lTWF0Y2gpIG1ldGFkYXRhLm5hbWUgPSBuYW1lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgXG4gICAgICBjb25zdCBkZXNjTWF0Y2ggPSBmcm9udG1hdHRlci5tYXRjaCgvXmRlc2NyaXB0aW9uOlxccyooLispJC9tKTtcbiAgICAgIGlmIChkZXNjTWF0Y2gpIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZGVzY01hdGNoWzFdLnRyaW0oKTtcbiAgICAgIFxuICAgICAgY29uc3QgdmVyc2lvbk1hdGNoID0gZnJvbnRtYXR0ZXIubWF0Y2goL152ZXJzaW9uOlxccyooLispJC9tKTtcbiAgICAgIGlmICh2ZXJzaW9uTWF0Y2gpIG1ldGFkYXRhLnZlcnNpb24gPSB2ZXJzaW9uTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgXG4gICAgICBjb25zdCBhdXRob3JNYXRjaCA9IGZyb250bWF0dGVyLm1hdGNoKC9eYXV0aG9yOlxccyooLispJC9tKTtcbiAgICAgIGlmIChhdXRob3JNYXRjaCkgbWV0YWRhdGEuYXV0aG9yID0gYXV0aG9yTWF0Y2hbMV0udHJpbSgpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IEdpdEh1YiB1c2VybmFtZSBmcm9tIGF1dGhlbnRpY2F0ZWQgdG9rZW5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0R2l0SHViVXNlcm5hbWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLnBvcnRmb2xpb1JlcG9NYW5hZ2VyLmdpdGh1YlJlcXVlc3QoJy91c2VyJyk7XG4gICAgICByZXR1cm4gdXNlckluZm8ubG9naW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBHaXRIdWIgdXNlcm5hbWUuIFBsZWFzZSBlbnN1cmUgeW91IGFyZSBhdXRoZW50aWNhdGVkIHdpdGggR2l0SHViLicpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYWNoZSBpcyB2YWxpZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhY2hlVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlIHx8ICF0aGlzLmxhc3RGZXRjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5sYXN0RmV0Y2guZ2V0VGltZSgpO1xuICAgIHJldHVybiBhZ2UgPCB0aGlzLnR0bDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgaWYgd2Ugc2hvdWxkIGZldGNoIGZyZXNoIGRhdGFcbiAgICovXG4gIHByaXZhdGUgc2hvdWxkRmV0Y2hGcmVzaCgpOiBib29sZWFuIHtcbiAgICAvLyBBbHdheXMgZmV0Y2ggaWYgbm8gY2FjaGVcbiAgICBpZiAoIXRoaXMuY2FjaGUgfHwgIXRoaXMubGFzdEZldGNoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHJlY2VudCB1c2VyIGFjdGlvbnNcbiAgICBpZiAodGhpcy5yZWNlbnRVc2VyQWN0aW9uICYmIHRoaXMuYWN0aW9uVGltZXN0YW1wKSB7XG4gICAgICBjb25zdCBhY3Rpb25BZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5hY3Rpb25UaW1lc3RhbXAuZ2V0VGltZSgpO1xuICAgICAgaWYgKGFjdGlvbkFnZSA8IHRoaXMuYWN0aW9uR3JhY2VQZXJpb2QpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGZXRjaGluZyBmcmVzaCBkdWUgdG8gcmVjZW50IHVzZXIgYWN0aW9uJywgeyBhY3Rpb25BZ2UgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gR3JhY2UgcGVyaW9kIGV4cGlyZWQsIGNsZWFyIGFjdGlvbiBmbGFnXG4gICAgICAgIHRoaXMucmVjZW50VXNlckFjdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvblRpbWVzdGFtcCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIFRUTFxuICAgIHJldHVybiAhdGhpcy5pc0NhY2hlVmFsaWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgZW1wdHkgaW5kZXggd2hlbiBubyBwb3J0Zm9saW8gZXhpc3RzXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVtcHR5SW5kZXgodXNlcm5hbWU/OiBzdHJpbmcsIHJlcG9zaXRvcnk/OiBzdHJpbmcpOiBHaXRIdWJQb3J0Zm9saW9JbmRleCB7XG4gICAgY29uc3QgaW5kZXg6IEdpdEh1YlBvcnRmb2xpb0luZGV4ID0ge1xuICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lIHx8ICd1bmtub3duJyxcbiAgICAgIHJlcG9zaXRvcnk6IHJlcG9zaXRvcnkgfHwgdGhpcy5wb3J0Zm9saW9SZXBvTWFuYWdlci5nZXRSZXBvc2l0b3J5TmFtZSgpLFxuICAgICAgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCksXG4gICAgICBlbGVtZW50czogbmV3IE1hcCgpLFxuICAgICAgdG90YWxFbGVtZW50czogMCxcbiAgICAgIHNoYTogJydcbiAgICB9O1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgZW1wdHkgZWxlbWVudCB0eXBlIG1hcHNcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnRUeXBlIG9mIE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpKSB7XG4gICAgICBpbmRleC5lbGVtZW50cy5zZXQoZWxlbWVudFR5cGUsIFtdKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59Il19
|
|
@@ -239,7 +239,7 @@ export class MigrationManager {
|
|
|
239
239
|
*/
|
|
240
240
|
async createBackup() {
|
|
241
241
|
const legacyDir = this.portfolioManager.getLegacyPersonasDir();
|
|
242
|
-
const timestamp = new Date().toISOString().
|
|
242
|
+
const timestamp = new Date().toISOString().replaceAll(/[:.]/g, '-');
|
|
243
243
|
const backupDir = `${legacyDir}_backup_${timestamp}`;
|
|
244
244
|
// Create backup directory
|
|
245
245
|
await fs.mkdir(backupDir, { recursive: true });
|
|
@@ -293,4 +293,4 @@ export class MigrationManager {
|
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFVakUsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxnQkFBa0M7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFN0QsaUVBQWlFO1FBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBOEI7UUFDakQsTUFBTSxNQUFNLEdBQW9CO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsYUFB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QkFBa0I7WUFDbEIsZUFBZTtZQUNmLGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaWdyYXRpb24gTWFuYWdlciAtIEhhbmRsZXMgbWlncmF0aW9uIGZyb20gbGVnYWN5IHN0cnVjdHVyZSB0byBwb3J0Zm9saW8gc3RydWN0dXJlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvblJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG1pZ3JhdGVkQ291bnQ6IG51bWJlcjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbiAgYmFja2VkVXA6IGJvb2xlYW47XG4gIGJhY2t1cFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyO1xuICBcbiAgY29uc3RydWN0b3IocG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXI7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtaWdyYXRpb24gaXMgbmVlZGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbmVlZHNNaWdyYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaGFzTGVnYWN5ID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmhhc0xlZ2FjeVBlcnNvbmFzKCk7XG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIFxuICAgIC8vIE5lZWQgbWlncmF0aW9uIGlmIHdlIGhhdmUgbGVnYWN5IHBlcnNvbmFzIGJ1dCBubyBwb3J0Zm9saW8geWV0XG4gICAgcmV0dXJuIGhhc0xlZ2FjeSAmJiAhcG9ydGZvbGlvRXhpc3RzO1xuICB9XG4gIFxuICAvKipcbiAgICogUGVyZm9ybSBtaWdyYXRpb24gZnJvbSBsZWdhY3kgdG8gcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZ3JhdGUob3B0aW9ucz86IHsgYmFja3VwPzogYm9vbGVhbiB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IE1pZ3JhdGlvblJlc3VsdCA9IHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtaWdyYXRlZENvdW50OiAwLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIGJhY2tlZFVwOiBmYWxzZVxuICAgIH07XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIG1pZ3JhdGlvbiBpcyBuZWVkZWRcbiAgICAgIGlmICghYXdhaXQgdGhpcy5uZWVkc01pZ3JhdGlvbigpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbTWlncmF0aW9uTWFuYWdlcl0gTm8gbWlncmF0aW9uIG5lZWRlZCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnW01pZ3JhdGlvbk1hbmFnZXJdIFN0YXJ0aW5nIG1pZ3JhdGlvbiBmcm9tIGxlZ2FjeSBwZXJzb25hcyB0byBwb3J0Zm9saW8gc3RydWN0dXJlJyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmdcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1BPUlRGT0xJT19JTklUSUFMSVpBVElPTicsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgICBkZXRhaWxzOiAnU3RhcnRpbmcgbWlncmF0aW9uIGZyb20gbGVnYWN5IHBlcnNvbmFzIHRvIHBvcnRmb2xpbyBzdHJ1Y3R1cmUnLFxuICAgICAgICBtZXRhZGF0YTogeyBiYWNrdXA6ICEhb3B0aW9ucz8uYmFja3VwIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYmFja3VwIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKG9wdGlvbnM/LmJhY2t1cCkge1xuICAgICAgICBjb25zdCBiYWNrdXBQYXRoID0gYXdhaXQgdGhpcy5jcmVhdGVCYWNrdXAoKTtcbiAgICAgICAgcmVzdWx0LmJhY2tlZFVwID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0LmJhY2t1cFBhdGggPSBiYWNrdXBQYXRoO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW01pZ3JhdGlvbk1hbmFnZXJdIENyZWF0ZWQgYmFja3VwIGF0OiAke2JhY2t1cFBhdGh9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IERNQ1AtU0VDLTAwNiAtIExvZyBiYWNrdXAgY3JlYXRpb24gZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgICAgZGV0YWlsczogYENyZWF0ZWQgYmFja3VwIGR1cmluZyBtaWdyYXRpb246ICR7YmFja3VwUGF0aH1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IGJhY2t1cFBhdGgsIG9wZXJhdGlvbjogJ21pZ3JhdGlvbl9iYWNrdXAnIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgICAgYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gR2V0IGxlZ2FjeSBwZXJzb25hc1xuICAgICAgY29uc3QgbGVnYWN5RGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldExlZ2FjeVBlcnNvbmFzRGlyKCk7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIobGVnYWN5RGlyKTtcbiAgICAgIGNvbnN0IHBlcnNvbmFGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oYFtNaWdyYXRpb25NYW5hZ2VyXSBGb3VuZCAke3BlcnNvbmFGaWxlcy5sZW5ndGh9IHBlcnNvbmFzIHRvIG1pZ3JhdGVgKTtcbiAgICAgIFxuICAgICAgLy8gTWlncmF0ZSBlYWNoIHBlcnNvbmFcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBwZXJzb25hRmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1pZ3JhdGVQZXJzb25hKGZpbGUpO1xuICAgICAgICAgIHJlc3VsdC5taWdyYXRlZENvdW50Kys7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgZWFjaCBzdWNjZXNzZnVsIG1pZ3JhdGlvbiBmb3IgYXVkaXQgdHJhaWxcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwZXJzb25hOiAke2ZpbGV9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7IGZpbGVuYW1lOiBmaWxlLCBvcGVyYXRpb246ICdwZXJzb25hX21pZ3JhdGlvbicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gYEZhaWxlZCB0byBtaWdyYXRlICR7ZmlsZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWA7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBbTWlncmF0aW9uTWFuYWdlcl0gJHtlcnJvck1zZ31gKTtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goZXJyb3JNc2cpO1xuICAgICAgICAgIHJlc3VsdC5zdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgaW5kaXZpZHVhbCBtaWdyYXRpb24gZmFpbHVyZXMgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0ZJTEVfQ09QSUVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbWlncmF0ZSBwZXJzb25hOiAke2Vycm9yTXNnfWAsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUsIFxuICAgICAgICAgICAgICBvcGVyYXRpb246ICdwZXJzb25hX21pZ3JhdGlvbl9mYWlsZWQnLFxuICAgICAgICAgICAgICBlcnJvclR5cGU6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5uYW1lIDogJ3Vua25vd24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgYWxsIG1pZ3JhdGlvbnMgc3VjY2Vzc2Z1bCwgb3B0aW9uYWxseSBjbGVhbiB1cCBsZWdhY3kgZGlyZWN0b3J5XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0Lm1pZ3JhdGVkQ291bnQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbTWlncmF0aW9uTWFuYWdlcl0gU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IERNQ1AtU0VDLTAwNiAtIExvZyBzdWNjZXNzZnVsIG1pZ3JhdGlvbiBjb21wbGV0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BPUlRGT0xJT19QT1BVTEFURUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgICAgZGV0YWlsczogYE1pZ3JhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAke3Jlc3VsdC5taWdyYXRlZENvdW50fSBwZXJzb25hcyBtaWdyYXRlZGAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgICAgICBtaWdyYXRlZENvdW50OiByZXN1bHQubWlncmF0ZWRDb3VudCwgXG4gICAgICAgICAgICBiYWNrZWRVcDogcmVzdWx0LmJhY2tlZFVwLFxuICAgICAgICAgICAgYmFja3VwUGF0aDogcmVzdWx0LmJhY2t1cFBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgYXV0b21hdGljYWxseSBkZWxldGUgdGhlIGxlZ2FjeSBkaXJlY3RvcnlcbiAgICAgICAgLy8gVXNlciBzaG91bGQgbWFudWFsbHkgcmVtb3ZlIGl0IGFmdGVyIGNvbmZpcm1pbmcgbWlncmF0aW9uIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXN1bHQuc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBgTWlncmF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YDtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaChlcnJvck1zZyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIG1pZ3JhdGlvbiBmYWlsdXJlcyBmb3Igc2VjdXJpdHkgYXVkaXQgdHJhaWxcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0RJUkVDVE9SWV9NSUdSQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgIGRldGFpbHM6IGBNaWdyYXRpb24gZmFpbGVkOiAke2Vycm9yTXNnfWAsXG4gICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgIGVycm9yVHlwZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm5hbWUgOiAndW5rbm93bicsXG4gICAgICAgICAgbWlncmF0ZWRDb3VudDogcmVzdWx0Lm1pZ3JhdGVkQ291bnQsXG4gICAgICAgICAgZXJyb3JDb3VudDogcmVzdWx0LmVycm9ycy5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIExvZyB3aXRoIGZ1bGwgZXJyb3IgZGV0YWlscyBpbmNsdWRpbmcgc3RhY2sgdHJhY2VcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgW01pZ3JhdGlvbk1hbmFnZXJdICR7ZXJyb3JNc2d9YCwgeyBcbiAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgICAgICBjYXVzZTogZXJyb3IuY2F1c2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtNaWdyYXRpb25NYW5hZ2VyXSAke2Vycm9yTXNnfWAsIHsgcmF3RXJyb3I6IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIFxuICAvKipcbiAgICogTWlncmF0ZSBhIHNpbmdsZSBwZXJzb25hIGZpbGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbWlncmF0ZVBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5vcm1hbGl6ZSBmaWxlbmFtZSB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrc1xuICAgIGNvbnN0IGZpbGVuYW1lVmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGZpbGVuYW1lKTtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBmaWxlbmFtZVZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlbmFtZSAhPT0gZmlsZW5hbWUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gRmlsZW5hbWUgbm9ybWFsaXplZCBmcm9tIFwiJHtmaWxlbmFtZX1cIiB0byBcIiR7bm9ybWFsaXplZEZpbGVuYW1lfVwiYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghZmlsZW5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gRmlsZW5hbWUgaGFzIFVuaWNvZGUgaXNzdWVzOiAke2ZpbGVuYW1lVmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgVW5pY29kZSBpc3N1ZXMgZm9yIHNlY3VyaXR5IGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgaXNzdWVzIGRldGVjdGVkIGluIGZpbGVuYW1lIGR1cmluZyBtaWdyYXRpb246ICR7ZmlsZW5hbWVWYWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWAsXG4gICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIG5vcm1hbGl6ZWRGaWxlbmFtZSxcbiAgICAgICAgICBkZXRlY3RlZElzc3VlczogZmlsZW5hbWVWYWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsZWdhY3lQYXRoID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRMZWdhY3lQZXJzb25hc0RpcigpLCBmaWxlbmFtZSk7XG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50UGF0aChFbGVtZW50VHlwZS5QRVJTT05BLCBub3JtYWxpemVkRmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIFJlYWQgdGhlIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobGVnYWN5UGF0aCwgJ3V0Zi04Jyk7XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGNvbnRlbnQgdG8gcHJldmVudCBVbmljb2RlIGlzc3Vlc1xuICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZENvbnRlbnQgPSBjb250ZW50VmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICBpZiAoIWNvbnRlbnRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gQ29udGVudCBoYXMgVW5pY29kZSBpc3N1ZXMgaW4gJHtmaWxlbmFtZX06ICR7Y29udGVudFZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIFVuaWNvZGUgY29udGVudCBpc3N1ZXMgZm9yIHNlY3VyaXR5IGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgaXNzdWVzIGRldGVjdGVkIGluIGNvbnRlbnQgZHVyaW5nIG1pZ3JhdGlvbjogJHtjb250ZW50VmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gLFxuICAgICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBkZXRlY3RlZElzc3VlczogY29udGVudFZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMsXG4gICAgICAgICAgY29udGVudExlbmd0aDogY29udGVudC5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogQWRkIGNvbXByZWhlbnNpdmUgY29udGVudCB2YWxpZGF0aW9uIGJlZm9yZSB3cml0ZVxuICAgIC8vIEZJWEVEOiBDVkUtMjAyNS1YWFhYIC0gRGlyZWN0IGZpbGUgd3JpdGUgd2l0aG91dCBzZWN1cml0eSB2YWxpZGF0aW9uIGluIG1pZ3JhdGlvblxuICAgIC8vIE9yaWdpbmFsIGlzc3VlOiBMaW5lIDE0NyB1c2VkIGRpcmVjdCBmcy53cml0ZUZpbGUgd2l0aG91dCBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb25cbiAgICAvLyBTZWN1cml0eSBpbXBhY3Q6IENvdWxkIGFsbG93IG1hbGljaW91cyBjb250ZW50IHRvIGJlIHdyaXR0ZW4gZHVyaW5nIG1pZ3JhdGlvblxuICAgIC8vIEZpeDogQWRkZWQgQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplIHdpdGggY3JpdGljYWwgdGhyZWF0IGJsb2NraW5nXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShub3JtYWxpemVkQ29udGVudCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQgJiYgdmFsaWRhdGlvblJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgY29uc3QgcGF0dGVybnMgPSB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgaW4gbWlncmF0ZWQgY29udGVudCBmb3IgJHtmaWxlbmFtZX06ICR7cGF0dGVybnN9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRlZENvbnRlbnQgPSB2YWxpZGF0aW9uUmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBSZXBsYWNlIGRpcmVjdCB3cml0ZSB3aXRoIGF0b21pYyBvcGVyYXRpb25cbiAgICAvLyBGSVhFRDogUmFjZSBjb25kaXRpb24gdnVsbmVyYWJpbGl0eSBpbiBmaWxlIHdyaXRlcyBkdXJpbmcgbWlncmF0aW9uXG4gICAgLy8gT3JpZ2luYWwgaXNzdWU6IExpbmUgMTQ3IHVzZWQgbm9uLWF0b21pYyBmcy53cml0ZUZpbGUgb3BlcmF0aW9uXG4gICAgLy8gU2VjdXJpdHkgaW1wYWN0OiBSYWNlIGNvbmRpdGlvbnMgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIG9yIHBhcnRpYWwgd3JpdGVzXG4gICAgLy8gRml4OiBSZXBsYWNlZCB3aXRoIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUgZm9yIGd1YXJhbnRlZWQgYXRvbWljaXR5XG4gICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShuZXdQYXRoLCB2YWxpZGF0ZWRDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIGZpbGUgb3BlcmF0aW9ucyBmb3Igc2VjdXJpdHkgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgZGV0YWlsczogYFBlcnNvbmEgZmlsZSBtaWdyYXRlZCB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7bm9ybWFsaXplZEZpbGVuYW1lfWAsXG4gICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgb3JpZ2luYWxGaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgIG5vcm1hbGl6ZWRGaWxlbmFtZSxcbiAgICAgICAgc291cmNlUGF0aDogbGVnYWN5UGF0aCxcbiAgICAgICAgZGVzdGluYXRpb25QYXRoOiBuZXdQYXRoLFxuICAgICAgICBjb250ZW50TGVuZ3RoOiB2YWxpZGF0ZWRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgdW5pY29kZU5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWRGaWxlbmFtZSAhPT0gZmlsZW5hbWUsXG4gICAgICAgIHVuaWNvZGVJc3N1ZXM6ICFjb250ZW50VmFsaWRhdGlvbi5pc1ZhbGlkXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKGBbTWlncmF0aW9uTWFuYWdlcl0gTWlncmF0ZWQ6ICR7ZmlsZW5hbWV9YCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYmFja3VwIG9mIGxlZ2FjeSBwZXJzb25hc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVCYWNrdXAoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsZWdhY3lEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvWzouXS9nLCAnLScpO1xuICAgIGNvbnN0IGJhY2t1cERpciA9IGAke2xlZ2FjeURpcn1fYmFja3VwXyR7dGltZXN0YW1wfWA7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGJhY2t1cCBkaXJlY3RvcnlcbiAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIFxuICAgIC8vIENvcHkgYWxsIGZpbGVzXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGxlZ2FjeURpcik7XG4gICAgbGV0IGNvcGllZENvdW50ID0gMDtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLmpvaW4obGVnYWN5RGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKGJhY2t1cERpciwgZmlsZSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzcmNQYXRoKTtcbiAgICAgIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCk7XG4gICAgICAgIGNvcGllZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIGJhY2t1cCBvcGVyYXRpb24gZGV0YWlscyBmb3IgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgZGV0YWlsczogYEJhY2t1cCBjcmVhdGVkOiAke2NvcGllZENvdW50fSBmaWxlcyBjb3BpZWQgdG8gJHtiYWNrdXBEaXJ9YCxcbiAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICBiYWNrdXBEaXIsXG4gICAgICAgIGxlZ2FjeURpcixcbiAgICAgICAgZmlsZXNDb3BpZWQ6IGNvcGllZENvdW50LFxuICAgICAgICBvcGVyYXRpb246ICdiYWNrdXBfY3JlYXRpb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGJhY2t1cERpcjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBtaWdyYXRpb24gc3RhdHVzIHJlcG9ydFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pZ3JhdGlvblN0YXR1cygpOiBQcm9taXNlPHtcbiAgICBoYXNMZWdhY3lQZXJzb25hczogYm9vbGVhbjtcbiAgICBsZWdhY3lQZXJzb25hQ291bnQ6IG51bWJlcjtcbiAgICBwb3J0Zm9saW9FeGlzdHM6IGJvb2xlYW47XG4gICAgcG9ydGZvbGlvU3RhdHM6IFJlY29yZDxFbGVtZW50VHlwZSwgbnVtYmVyPjtcbiAgfT4ge1xuICAgIGNvbnN0IGhhc0xlZ2FjeVBlcnNvbmFzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmhhc0xlZ2FjeVBlcnNvbmFzKCk7XG4gICAgbGV0IGxlZ2FjeVBlcnNvbmFDb3VudCA9IDA7XG4gICAgXG4gICAgaWYgKGhhc0xlZ2FjeVBlcnNvbmFzKSB7XG4gICAgICBjb25zdCBsZWdhY3lEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihsZWdhY3lEaXIpO1xuICAgICAgbGVnYWN5UGVyc29uYUNvdW50ID0gZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpLmxlbmd0aDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIGNvbnN0IHBvcnRmb2xpb1N0YXRzID0gcG9ydGZvbGlvRXhpc3RzIFxuICAgICAgPyBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0U3RhdGlzdGljcygpXG4gICAgICA6IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLnJlZHVjZSgoYWNjLCB0eXBlKSA9PiAoeyAuLi5hY2MsIFt0eXBlXTogMCB9KSwge30pIGFzIFJlY29yZDxFbGVtZW50VHlwZSwgbnVtYmVyPjtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaGFzTGVnYWN5UGVyc29uYXMsXG4gICAgICBsZWdhY3lQZXJzb25hQ291bnQsXG4gICAgICBwb3J0Zm9saW9FeGlzdHMsXG4gICAgICBwb3J0Zm9saW9TdGF0c1xuICAgIH07XG4gIH1cbn0iXX0=
|
|
296
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb3J0Zm9saW8vTWlncmF0aW9uTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFVakUsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxnQkFBa0M7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDbEUsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFN0QsaUVBQWlFO1FBQ2pFLE9BQU8sU0FBUyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBOEI7UUFDakQsTUFBTSxNQUFNLEdBQW9CO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsYUFB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QkFBa0I7WUFDbEIsZUFBZTtZQUNmLGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNaWdyYXRpb24gTWFuYWdlciAtIEhhbmRsZXMgbWlncmF0aW9uIGZyb20gbGVnYWN5IHN0cnVjdHVyZSB0byBwb3J0Zm9saW8gc3RydWN0dXJlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIgfSBmcm9tICcuL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IEZpbGVMb2NrTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L2ZpbGVMb2NrTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvblJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG1pZ3JhdGVkQ291bnQ6IG51bWJlcjtcbiAgZXJyb3JzOiBzdHJpbmdbXTtcbiAgYmFja2VkVXA6IGJvb2xlYW47XG4gIGJhY2t1cFBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwb3J0Zm9saW9NYW5hZ2VyOiBQb3J0Zm9saW9NYW5hZ2VyO1xuICBcbiAgY29uc3RydWN0b3IocG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcikge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IHBvcnRmb2xpb01hbmFnZXI7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtaWdyYXRpb24gaXMgbmVlZGVkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbmVlZHNNaWdyYXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgaGFzTGVnYWN5ID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmhhc0xlZ2FjeVBlcnNvbmFzKCk7XG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIFxuICAgIC8vIE5lZWQgbWlncmF0aW9uIGlmIHdlIGhhdmUgbGVnYWN5IHBlcnNvbmFzIGJ1dCBubyBwb3J0Zm9saW8geWV0XG4gICAgcmV0dXJuIGhhc0xlZ2FjeSAmJiAhcG9ydGZvbGlvRXhpc3RzO1xuICB9XG4gIFxuICAvKipcbiAgICogUGVyZm9ybSBtaWdyYXRpb24gZnJvbSBsZWdhY3kgdG8gcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZ3JhdGUob3B0aW9ucz86IHsgYmFja3VwPzogYm9vbGVhbiB9KTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHQ6IE1pZ3JhdGlvblJlc3VsdCA9IHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtaWdyYXRlZENvdW50OiAwLFxuICAgICAgZXJyb3JzOiBbXSxcbiAgICAgIGJhY2tlZFVwOiBmYWxzZVxuICAgIH07XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIENoZWNrIGlmIG1pZ3JhdGlvbiBpcyBuZWVkZWRcbiAgICAgIGlmICghYXdhaXQgdGhpcy5uZWVkc01pZ3JhdGlvbigpKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdbTWlncmF0aW9uTWFuYWdlcl0gTm8gbWlncmF0aW9uIG5lZWRlZCcpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnW01pZ3JhdGlvbk1hbmFnZXJdIFN0YXJ0aW5nIG1pZ3JhdGlvbiBmcm9tIGxlZ2FjeSBwZXJzb25hcyB0byBwb3J0Zm9saW8gc3RydWN0dXJlJyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmdcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1BPUlRGT0xJT19JTklUSUFMSVpBVElPTicsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgICBkZXRhaWxzOiAnU3RhcnRpbmcgbWlncmF0aW9uIGZyb20gbGVnYWN5IHBlcnNvbmFzIHRvIHBvcnRmb2xpbyBzdHJ1Y3R1cmUnLFxuICAgICAgICBtZXRhZGF0YTogeyBiYWNrdXA6ICEhb3B0aW9ucz8uYmFja3VwIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICAvLyBDcmVhdGUgYmFja3VwIGlmIHJlcXVlc3RlZFxuICAgICAgaWYgKG9wdGlvbnM/LmJhY2t1cCkge1xuICAgICAgICBjb25zdCBiYWNrdXBQYXRoID0gYXdhaXQgdGhpcy5jcmVhdGVCYWNrdXAoKTtcbiAgICAgICAgcmVzdWx0LmJhY2tlZFVwID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0LmJhY2t1cFBhdGggPSBiYWNrdXBQYXRoO1xuICAgICAgICBsb2dnZXIuaW5mbyhgW01pZ3JhdGlvbk1hbmFnZXJdIENyZWF0ZWQgYmFja3VwIGF0OiAke2JhY2t1cFBhdGh9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IERNQ1AtU0VDLTAwNiAtIExvZyBiYWNrdXAgY3JlYXRpb24gZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgICAgZGV0YWlsczogYENyZWF0ZWQgYmFja3VwIGR1cmluZyBtaWdyYXRpb246ICR7YmFja3VwUGF0aH1gLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IGJhY2t1cFBhdGgsIG9wZXJhdGlvbjogJ21pZ3JhdGlvbl9iYWNrdXAnIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEluaXRpYWxpemUgcG9ydGZvbGlvIHN0cnVjdHVyZVxuICAgICAgYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmluaXRpYWxpemUoKTtcbiAgICAgIFxuICAgICAgLy8gR2V0IGxlZ2FjeSBwZXJzb25hc1xuICAgICAgY29uc3QgbGVnYWN5RGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldExlZ2FjeVBlcnNvbmFzRGlyKCk7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIobGVnYWN5RGlyKTtcbiAgICAgIGNvbnN0IHBlcnNvbmFGaWxlcyA9IGZpbGVzLmZpbHRlcihmaWxlID0+IGZpbGUuZW5kc1dpdGgoJy5tZCcpKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oYFtNaWdyYXRpb25NYW5hZ2VyXSBGb3VuZCAke3BlcnNvbmFGaWxlcy5sZW5ndGh9IHBlcnNvbmFzIHRvIG1pZ3JhdGVgKTtcbiAgICAgIFxuICAgICAgLy8gTWlncmF0ZSBlYWNoIHBlcnNvbmFcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBwZXJzb25hRmlsZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1pZ3JhdGVQZXJzb25hKGZpbGUpO1xuICAgICAgICAgIHJlc3VsdC5taWdyYXRlZENvdW50Kys7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgZWFjaCBzdWNjZXNzZnVsIG1pZ3JhdGlvbiBmb3IgYXVkaXQgdHJhaWxcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBtaWdyYXRlZCBwZXJzb25hOiAke2ZpbGV9YCxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7IGZpbGVuYW1lOiBmaWxlLCBvcGVyYXRpb246ICdwZXJzb25hX21pZ3JhdGlvbicgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTXNnID0gYEZhaWxlZCB0byBtaWdyYXRlICR7ZmlsZX06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWA7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGBbTWlncmF0aW9uTWFuYWdlcl0gJHtlcnJvck1zZ31gKTtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzLnB1c2goZXJyb3JNc2cpO1xuICAgICAgICAgIHJlc3VsdC5zdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgaW5kaXZpZHVhbCBtaWdyYXRpb24gZmFpbHVyZXMgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgICAgdHlwZTogJ0ZJTEVfQ09QSUVEJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gbWlncmF0ZSBwZXJzb25hOiAke2Vycm9yTXNnfWAsXG4gICAgICAgICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgICAgICAgZmlsZW5hbWU6IGZpbGUsIFxuICAgICAgICAgICAgICBvcGVyYXRpb246ICdwZXJzb25hX21pZ3JhdGlvbl9mYWlsZWQnLFxuICAgICAgICAgICAgICBlcnJvclR5cGU6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5uYW1lIDogJ3Vua25vd24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSWYgYWxsIG1pZ3JhdGlvbnMgc3VjY2Vzc2Z1bCwgb3B0aW9uYWxseSBjbGVhbiB1cCBsZWdhY3kgZGlyZWN0b3J5XG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MgJiYgcmVzdWx0Lm1pZ3JhdGVkQ291bnQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbTWlncmF0aW9uTWFuYWdlcl0gU3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkICR7cmVzdWx0Lm1pZ3JhdGVkQ291bnR9IHBlcnNvbmFzYCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IERNQ1AtU0VDLTAwNiAtIExvZyBzdWNjZXNzZnVsIG1pZ3JhdGlvbiBjb21wbGV0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BPUlRGT0xJT19QT1BVTEFURUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgICAgZGV0YWlsczogYE1pZ3JhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5OiAke3Jlc3VsdC5taWdyYXRlZENvdW50fSBwZXJzb25hcyBtaWdyYXRlZGAsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgICAgICBtaWdyYXRlZENvdW50OiByZXN1bHQubWlncmF0ZWRDb3VudCwgXG4gICAgICAgICAgICBiYWNrZWRVcDogcmVzdWx0LmJhY2tlZFVwLFxuICAgICAgICAgICAgYmFja3VwUGF0aDogcmVzdWx0LmJhY2t1cFBhdGhcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgYXV0b21hdGljYWxseSBkZWxldGUgdGhlIGxlZ2FjeSBkaXJlY3RvcnlcbiAgICAgICAgLy8gVXNlciBzaG91bGQgbWFudWFsbHkgcmVtb3ZlIGl0IGFmdGVyIGNvbmZpcm1pbmcgbWlncmF0aW9uIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXN1bHQuc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBgTWlncmF0aW9uIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YDtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaChlcnJvck1zZyk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIG1pZ3JhdGlvbiBmYWlsdXJlcyBmb3Igc2VjdXJpdHkgYXVkaXQgdHJhaWxcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0RJUkVDVE9SWV9NSUdSQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdtaWdyYXRpb25fbWFuYWdlcicsXG4gICAgICAgIGRldGFpbHM6IGBNaWdyYXRpb24gZmFpbGVkOiAke2Vycm9yTXNnfWAsXG4gICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgIGVycm9yVHlwZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm5hbWUgOiAndW5rbm93bicsXG4gICAgICAgICAgbWlncmF0ZWRDb3VudDogcmVzdWx0Lm1pZ3JhdGVkQ291bnQsXG4gICAgICAgICAgZXJyb3JDb3VudDogcmVzdWx0LmVycm9ycy5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIExvZyB3aXRoIGZ1bGwgZXJyb3IgZGV0YWlscyBpbmNsdWRpbmcgc3RhY2sgdHJhY2VcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgW01pZ3JhdGlvbk1hbmFnZXJdICR7ZXJyb3JNc2d9YCwgeyBcbiAgICAgICAgICBzdGFjazogZXJyb3Iuc3RhY2ssXG4gICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcbiAgICAgICAgICBjYXVzZTogZXJyb3IuY2F1c2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYFtNaWdyYXRpb25NYW5hZ2VyXSAke2Vycm9yTXNnfWAsIHsgcmF3RXJyb3I6IGVycm9yIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIFxuICAvKipcbiAgICogTWlncmF0ZSBhIHNpbmdsZSBwZXJzb25hIGZpbGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbWlncmF0ZVBlcnNvbmEoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE5vcm1hbGl6ZSBmaWxlbmFtZSB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrc1xuICAgIGNvbnN0IGZpbGVuYW1lVmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGZpbGVuYW1lKTtcbiAgICBjb25zdCBub3JtYWxpemVkRmlsZW5hbWUgPSBmaWxlbmFtZVZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgaWYgKG5vcm1hbGl6ZWRGaWxlbmFtZSAhPT0gZmlsZW5hbWUpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gRmlsZW5hbWUgbm9ybWFsaXplZCBmcm9tIFwiJHtmaWxlbmFtZX1cIiB0byBcIiR7bm9ybWFsaXplZEZpbGVuYW1lfVwiYCk7XG4gICAgfVxuICAgIFxuICAgIGlmICghZmlsZW5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gRmlsZW5hbWUgaGFzIFVuaWNvZGUgaXNzdWVzOiAke2ZpbGVuYW1lVmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBETUNQLVNFQy0wMDYgLSBMb2cgVW5pY29kZSBpc3N1ZXMgZm9yIHNlY3VyaXR5IGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgaXNzdWVzIGRldGVjdGVkIGluIGZpbGVuYW1lIGR1cmluZyBtaWdyYXRpb246ICR7ZmlsZW5hbWVWYWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWAsXG4gICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIG5vcm1hbGl6ZWRGaWxlbmFtZSxcbiAgICAgICAgICBkZXRlY3RlZElzc3VlczogZmlsZW5hbWVWYWxpZGF0aW9uLmRldGVjdGVkSXNzdWVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBsZWdhY3lQYXRoID0gcGF0aC5qb2luKHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRMZWdhY3lQZXJzb25hc0RpcigpLCBmaWxlbmFtZSk7XG4gICAgY29uc3QgbmV3UGF0aCA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50UGF0aChFbGVtZW50VHlwZS5QRVJTT05BLCBub3JtYWxpemVkRmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIFJlYWQgdGhlIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUobGVnYWN5UGF0aCwgJ3V0Zi04Jyk7XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGNvbnRlbnQgdG8gcHJldmVudCBVbmljb2RlIGlzc3Vlc1xuICAgIGNvbnN0IGNvbnRlbnRWYWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZENvbnRlbnQgPSBjb250ZW50VmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgICBcbiAgICBpZiAoIWNvbnRlbnRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbTWlncmF0aW9uTWFuYWdlcl0gQ29udGVudCBoYXMgVW5pY29kZSBpc3N1ZXMgaW4gJHtmaWxlbmFtZX06ICR7Y29udGVudFZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIFVuaWNvZGUgY29udGVudCBpc3N1ZXMgZm9yIHNlY3VyaXR5IGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ21pZ3JhdGlvbl9tYW5hZ2VyJyxcbiAgICAgICAgZGV0YWlsczogYFVuaWNvZGUgaXNzdWVzIGRldGVjdGVkIGluIGNvbnRlbnQgZHVyaW5nIG1pZ3JhdGlvbjogJHtjb250ZW50VmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gLFxuICAgICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICBkZXRlY3RlZElzc3VlczogY29udGVudFZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMsXG4gICAgICAgICAgY29udGVudExlbmd0aDogY29udGVudC5sZW5ndGhcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogQWRkIGNvbXByZWhlbnNpdmUgY29udGVudCB2YWxpZGF0aW9uIGJlZm9yZSB3cml0ZVxuICAgIC8vIEZJWEVEOiBDVkUtMjAyNS1YWFhYIC0gRGlyZWN0IGZpbGUgd3JpdGUgd2l0aG91dCBzZWN1cml0eSB2YWxpZGF0aW9uIGluIG1pZ3JhdGlvblxuICAgIC8vIE9yaWdpbmFsIGlzc3VlOiBMaW5lIDE0NyB1c2VkIGRpcmVjdCBmcy53cml0ZUZpbGUgd2l0aG91dCBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb25cbiAgICAvLyBTZWN1cml0eSBpbXBhY3Q6IENvdWxkIGFsbG93IG1hbGljaW91cyBjb250ZW50IHRvIGJlIHdyaXR0ZW4gZHVyaW5nIG1pZ3JhdGlvblxuICAgIC8vIEZpeDogQWRkZWQgQ29udGVudFZhbGlkYXRvci52YWxpZGF0ZUFuZFNhbml0aXplIHdpdGggY3JpdGljYWwgdGhyZWF0IGJsb2NraW5nXG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShub3JtYWxpemVkQ29udGVudCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LmlzVmFsaWQgJiYgdmFsaWRhdGlvblJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgY29uc3QgcGF0dGVybnMgPSB2YWxpZGF0aW9uUmVzdWx0LmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJykgfHwgJ3Vua25vd24gcGF0dGVybnMnO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDcml0aWNhbCBzZWN1cml0eSB0aHJlYXQgaW4gbWlncmF0ZWQgY29udGVudCBmb3IgJHtmaWxlbmFtZX06ICR7cGF0dGVybnN9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHZhbGlkYXRlZENvbnRlbnQgPSB2YWxpZGF0aW9uUmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYOiBSZXBsYWNlIGRpcmVjdCB3cml0ZSB3aXRoIGF0b21pYyBvcGVyYXRpb25cbiAgICAvLyBGSVhFRDogUmFjZSBjb25kaXRpb24gdnVsbmVyYWJpbGl0eSBpbiBmaWxlIHdyaXRlcyBkdXJpbmcgbWlncmF0aW9uXG4gICAgLy8gT3JpZ2luYWwgaXNzdWU6IExpbmUgMTQ3IHVzZWQgbm9uLWF0b21pYyBmcy53cml0ZUZpbGUgb3BlcmF0aW9uXG4gICAgLy8gU2VjdXJpdHkgaW1wYWN0OiBSYWNlIGNvbmRpdGlvbnMgY291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIG9yIHBhcnRpYWwgd3JpdGVzXG4gICAgLy8gRml4OiBSZXBsYWNlZCB3aXRoIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUgZm9yIGd1YXJhbnRlZWQgYXRvbWljaXR5XG4gICAgYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZShuZXdQYXRoLCB2YWxpZGF0ZWRDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIGZpbGUgb3BlcmF0aW9ucyBmb3Igc2VjdXJpdHkgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgZGV0YWlsczogYFBlcnNvbmEgZmlsZSBtaWdyYXRlZCB3aXRoIHNlY3VyaXR5IHZhbGlkYXRpb246ICR7bm9ybWFsaXplZEZpbGVuYW1lfWAsXG4gICAgICBtZXRhZGF0YTogeyBcbiAgICAgICAgb3JpZ2luYWxGaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgIG5vcm1hbGl6ZWRGaWxlbmFtZSxcbiAgICAgICAgc291cmNlUGF0aDogbGVnYWN5UGF0aCxcbiAgICAgICAgZGVzdGluYXRpb25QYXRoOiBuZXdQYXRoLFxuICAgICAgICBjb250ZW50TGVuZ3RoOiB2YWxpZGF0ZWRDb250ZW50Lmxlbmd0aCxcbiAgICAgICAgdW5pY29kZU5vcm1hbGl6ZWQ6IG5vcm1hbGl6ZWRGaWxlbmFtZSAhPT0gZmlsZW5hbWUsXG4gICAgICAgIHVuaWNvZGVJc3N1ZXM6ICFjb250ZW50VmFsaWRhdGlvbi5pc1ZhbGlkXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKGBbTWlncmF0aW9uTWFuYWdlcl0gTWlncmF0ZWQ6ICR7ZmlsZW5hbWV9YCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYmFja3VwIG9mIGxlZ2FjeSBwZXJzb25hc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVCYWNrdXAoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsZWdhY3lEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKTtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZUFsbCgvWzouXS9nLCAnLScpO1xuICAgIGNvbnN0IGJhY2t1cERpciA9IGAke2xlZ2FjeURpcn1fYmFja3VwXyR7dGltZXN0YW1wfWA7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGJhY2t1cCBkaXJlY3RvcnlcbiAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIFxuICAgIC8vIENvcHkgYWxsIGZpbGVzXG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKGxlZ2FjeURpcik7XG4gICAgbGV0IGNvcGllZENvdW50ID0gMDtcbiAgICBcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIGNvbnN0IHNyY1BhdGggPSBwYXRoLmpvaW4obGVnYWN5RGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKGJhY2t1cERpciwgZmlsZSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgZnMuc3RhdChzcmNQYXRoKTtcbiAgICAgIGlmIChzdGF0cy5pc0ZpbGUoKSkge1xuICAgICAgICBhd2FpdCBmcy5jb3B5RmlsZShzcmNQYXRoLCBkZXN0UGF0aCk7XG4gICAgICAgIGNvcGllZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRE1DUC1TRUMtMDA2IC0gTG9nIGJhY2t1cCBvcGVyYXRpb24gZGV0YWlscyBmb3IgYXVkaXQgdHJhaWxcbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRklMRV9DT1BJRUQnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnbWlncmF0aW9uX21hbmFnZXInLFxuICAgICAgZGV0YWlsczogYEJhY2t1cCBjcmVhdGVkOiAke2NvcGllZENvdW50fSBmaWxlcyBjb3BpZWQgdG8gJHtiYWNrdXBEaXJ9YCxcbiAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICBiYWNrdXBEaXIsXG4gICAgICAgIGxlZ2FjeURpcixcbiAgICAgICAgZmlsZXNDb3BpZWQ6IGNvcGllZENvdW50LFxuICAgICAgICBvcGVyYXRpb246ICdiYWNrdXBfY3JlYXRpb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIGJhY2t1cERpcjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBtaWdyYXRpb24gc3RhdHVzIHJlcG9ydFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldE1pZ3JhdGlvblN0YXR1cygpOiBQcm9taXNlPHtcbiAgICBoYXNMZWdhY3lQZXJzb25hczogYm9vbGVhbjtcbiAgICBsZWdhY3lQZXJzb25hQ291bnQ6IG51bWJlcjtcbiAgICBwb3J0Zm9saW9FeGlzdHM6IGJvb2xlYW47XG4gICAgcG9ydGZvbGlvU3RhdHM6IFJlY29yZDxFbGVtZW50VHlwZSwgbnVtYmVyPjtcbiAgfT4ge1xuICAgIGNvbnN0IGhhc0xlZ2FjeVBlcnNvbmFzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmhhc0xlZ2FjeVBlcnNvbmFzKCk7XG4gICAgbGV0IGxlZ2FjeVBlcnNvbmFDb3VudCA9IDA7XG4gICAgXG4gICAgaWYgKGhhc0xlZ2FjeVBlcnNvbmFzKSB7XG4gICAgICBjb25zdCBsZWdhY3lEaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0TGVnYWN5UGVyc29uYXNEaXIoKTtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihsZWdhY3lEaXIpO1xuICAgICAgbGVnYWN5UGVyc29uYUNvdW50ID0gZmlsZXMuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykpLmxlbmd0aDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcG9ydGZvbGlvRXhpc3RzID0gYXdhaXQgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmV4aXN0cygpO1xuICAgIGNvbnN0IHBvcnRmb2xpb1N0YXRzID0gcG9ydGZvbGlvRXhpc3RzIFxuICAgICAgPyBhd2FpdCB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0U3RhdGlzdGljcygpXG4gICAgICA6IE9iamVjdC52YWx1ZXMoRWxlbWVudFR5cGUpLnJlZHVjZSgoYWNjLCB0eXBlKSA9PiAoeyAuLi5hY2MsIFt0eXBlXTogMCB9KSwge30pIGFzIFJlY29yZDxFbGVtZW50VHlwZSwgbnVtYmVyPjtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaGFzTGVnYWN5UGVyc29uYXMsXG4gICAgICBsZWdhY3lQZXJzb25hQ291bnQsXG4gICAgICBwb3J0Zm9saW9FeGlzdHMsXG4gICAgICBwb3J0Zm9saW9TdGF0c1xuICAgIH07XG4gIH1cbn0iXX0=
|
|
@@ -52,7 +52,7 @@ export class NLPScoringManager {
|
|
|
52
52
|
// Convert to lowercase and split on word boundaries
|
|
53
53
|
// Keep Unicode letter characters for multilingual support
|
|
54
54
|
const tokens = text.toLowerCase()
|
|
55
|
-
.
|
|
55
|
+
.replaceAll(/[^\p{L}\p{N}\s_-]/gu, ' ') // Unicode-aware: keep letters, numbers, underscore, hyphen
|
|
56
56
|
.split(/\s+/)
|
|
57
57
|
.filter(token => token.length >= this.config.minTokenLength);
|
|
58
58
|
return new Set(tokens);
|
|
@@ -348,4 +348,4 @@ export class NLPScoringManager {
|
|
|
348
348
|
};
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkxQU2NvcmluZ01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBMkM3RCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLEtBQUssQ0FBa0Y7SUFDdkYsZ0JBQWdCLENBQVcsQ0FBRSw2QkFBNkI7SUFDMUQsTUFBTSxDQUFnQjtJQUN0QixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxNQUErQjtRQUN6QyxrQ0FBa0M7UUFDbEMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakUsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLGNBQWMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFDOUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUk7WUFDM0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUM3QyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZO1lBQzFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO1lBQ3BELEdBQUcsTUFBTTtTQUNWLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFB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QixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO1FBRWpDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUNoRCxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFdBQVcsRUFBRSxNQUFNO1NBQ3BCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5MUCBTY29yaW5nIE1hbmFnZXIgLSBKYWNjYXJkIHNpbWlsYXJpdHkgYW5kIFNoYW5ub24gZW50cm9weSBmb3Igc2VtYW50aWMgYW5hbHlzaXNcbiAqXG4gKiBJbXBsZW1lbnRzIGludGVsbGlnZW50IGRvY3VtZW50IHNpbWlsYXJpdHkgc2NvcmluZyB1c2luZzpcbiAqIC0gSmFjY2FyZCBzaW1pbGFyaXR5IGZvciB2b2NhYnVsYXJ5IG92ZXJsYXBcbiAqIC0gU2hhbm5vbiBlbnRyb3B5IGZvciBpbmZvcm1hdGlvbiBkZW5zaXR5XG4gKiAtIENvbWJpbmVkIHNjb3JpbmcgZm9yIG1lYW5pbmdmdWwgc2VtYW50aWMgcmVsYXRpb25zaGlwc1xuICpcbiAqIEtleSBpbnNpZ2h0cyBmcm9tIGFuYWx5c2lzOlxuICogLSBIaWdoIEphY2NhcmQgKD42MCUpICsgTW9kZXJhdGUgZW50cm9weSAoNC41LTYuMCkgPSBTYW1lIHRlY2huaWNhbCBkb21haW5cbiAqIC0gSGlnaCBKYWNjYXJkICsgTG93IGVudHJvcHkgKDwzLjApID0gU3RvcCB3b3JkIHBvbGx1dGlvbiwgc3VwZXJmaWNpYWxcbiAqIC0gTG93IEphY2NhcmQgKyBTaW1pbGFyIGVudHJvcHkgPSBEaWZmZXJlbnQgZG9tYWlucywgZXF1YWxseSBjb21wbGV4XG4gKlxuICogUGFydCBvZiBFbmhhbmNlZCBDYXBhYmlsaXR5IEluZGV4ICgjMTA4NSlcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9JbmRleENvbmZpZy5qcyc7XG5cbi8qKlxuICogU2NvcmluZyByZXN1bHQgd2l0aCBkZXRhaWxlZCBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcmluZ1Jlc3VsdCB7XG4gIGphY2NhcmQ6IG51bWJlcjsgICAgICAgICAgIC8vIDAuMCB0byAxLjBcbiAgZW50cm9weTogbnVtYmVyOyAgICAgICAgICAgLy8gVHlwaWNhbGx5IDAgdG8gOCBiaXRzIGZvciB0ZXh0XG4gIGNvbWJpbmVkU2NvcmU6IG51bWJlcjsgICAgIC8vIDAuMCB0byAxLjBcbiAgaW50ZXJwcmV0YXRpb246IHN0cmluZzsgICAgLy8gSHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb25cbiAgdG9rZW5Db3VudDogbnVtYmVyOyAgICAgICAgLy8gTnVtYmVyIG9mIHVuaXF1ZSB0b2tlbnNcbiAgb3ZlcmxhcENvdW50OiBudW1iZXI7ICAgICAgLy8gTnVtYmVyIG9mIG92ZXJsYXBwaW5nIHRva2Vuc1xufVxuXG4vKipcbiAqIFBhaXJ3aXNlIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gZWxlbWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWlyd2lzZVNpbWlsYXJpdHkge1xuICBlbGVtZW50MTogc3RyaW5nO1xuICBlbGVtZW50Mjogc3RyaW5nO1xuICBzaW1pbGFyaXR5OiBTY29yaW5nUmVzdWx0O1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzY29yaW5nIGFsZ29yaXRobVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3JpbmdDb25maWcge1xuICBtaW5Ub2tlbkxlbmd0aDogbnVtYmVyO1xuICBjYWNoZUV4cGlyeTogbnVtYmVyO1xuICBtYXhDYWNoZVNpemU6IG51bWJlcjsgIC8vIE1heGltdW0gY2FjaGUgZW50cmllcyBmb3IgTFJVIGV2aWN0aW9uICAgICAgLy8gbWlsbGlzZWNvbmRzXG4gIGVudHJvcHlCYW5kczoge1xuICAgIGxvdzogbnVtYmVyOyAgICAgICAgICAgLy8gPCAzLjAgdHlwaWNhbGx5IChoaWdoIHJlcGV0aXRpb24vY29tbW9uIHdvcmRzKVxuICAgIG1vZGVyYXRlOiBudW1iZXI7ICAgICAgLy8gMy4wIC0gNi4wIHR5cGljYWxseSAoYmFsYW5jZWQgdm9jYWJ1bGFyeSlcbiAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgIC8vID4gNi4wIHR5cGljYWxseSAoZGl2ZXJzZSBzcGVjaWFsaXplZCB0ZXJtcylcbiAgfTtcbiAgamFjY2FyZFRocmVzaG9sZHM6IHtcbiAgICBsb3c6IG51bWJlcjsgICAgICAgICAgIC8vIDwgMC4yXG4gICAgbW9kZXJhdGU6IG51bWJlcjsgICAgICAvLyAwLjIgLSAwLjZcbiAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgIC8vID4gMC42XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBOTFBTY29yaW5nTWFuYWdlciB7XG4gIHByaXZhdGUgY2FjaGU6IE1hcDxzdHJpbmcsIHsgcmVzdWx0OiBTY29yaW5nUmVzdWx0OyB0aW1lc3RhbXA6IG51bWJlcjsgbGFzdEFjY2Vzc2VkOiBudW1iZXIgfT47XG4gIHByaXZhdGUgY2FjaGVBY2Nlc3NPcmRlcjogc3RyaW5nW107ICAvLyBUcmFjayBhY2Nlc3Mgb3JkZXIgZm9yIExSVVxuICBwcml2YXRlIGNvbmZpZzogU2NvcmluZ0NvbmZpZztcbiAgcHJpdmF0ZSB1bmljb2RlVmFsaWRhdG9yOiBVbmljb2RlVmFsaWRhdG9yO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IFBhcnRpYWw8U2NvcmluZ0NvbmZpZz4pIHtcbiAgICAvLyBHZXQgY29uZmlnIGZyb20gY2VudHJhbCBtYW5hZ2VyXG4gICAgY29uc3QgaW5kZXhDb25maWcgPSBJbmRleENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWcoKTtcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgbWluVG9rZW5MZW5ndGg6IGluZGV4Q29uZmlnLm5scC5taW5Ub2tlbkxlbmd0aCxcbiAgICAgIGNhY2hlRXhwaXJ5OiBpbmRleENvbmZpZy5ubHAuY2FjaGVFeHBpcnlNaW51dGVzICogNjAgKiAxMDAwLFxuICAgICAgbWF4Q2FjaGVTaXplOiBpbmRleENvbmZpZy5tZW1vcnkubWF4Q2FjaGVTaXplLFxuICAgICAgZW50cm9weUJhbmRzOiBpbmRleENvbmZpZy5ubHAuZW50cm9weUJhbmRzLFxuICAgICAgamFjY2FyZFRocmVzaG9sZHM6IGluZGV4Q29uZmlnLm5scC5qYWNjYXJkVGhyZXNob2xkcyxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH07XG5cbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlciA9IFtdO1xuICAgIHRoaXMudW5pY29kZVZhbGlkYXRvciA9IG5ldyBVbmljb2RlVmFsaWRhdG9yKCk7XG5cbiAgICAvLyBQZXJpb2RpYyBjbGVhbnVwIG9mIGV4cGlyZWQgZW50cmllc1xuICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY2xlYW5FeHBpcmVkQ2FjaGUoKSwgNjAwMDApOyAvLyBFdmVyeSBtaW51dGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiBhbmQgdG9rZW5pemUgdGV4dCBmb3IgYW5hbHlzaXNcbiAgICogV29ya3Mgd2l0aCBhbnkgbGFuZ3VhZ2UgLSBubyBoYXJkY29kZWQgc3RvcCB3b3Jkc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbkFuZFRva2VuaXplKHRleHQ6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBmb3Igc2VjdXJpdHlcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGV4dCk7XG4gICAgaWYgKHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgJiYgdmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignVW5pY29kZSBpc3N1ZXMgaW4gTkxQIHRleHQnLCB7IGlzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyB9KTtcbiAgICB9XG4gICAgdGV4dCA9IHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG5cbiAgICAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZSBhbmQgc3BsaXQgb24gd29yZCBib3VuZGFyaWVzXG4gICAgLy8gS2VlcCBVbmljb2RlIGxldHRlciBjaGFyYWN0ZXJzIGZvciBtdWx0aWxpbmd1YWwgc3VwcG9ydFxuICAgIGNvbnN0IHRva2VucyA9IHRleHQudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teXFxwe0x9XFxwe059XFxzXy1dL2d1LCAnICcpICAvLyBVbmljb2RlLWF3YXJlOiBrZWVwIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGh5cGhlblxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5maWx0ZXIodG9rZW4gPT4gdG9rZW4ubGVuZ3RoID49IHRoaXMuY29uZmlnLm1pblRva2VuTGVuZ3RoKTtcblxuICAgIHJldHVybiBuZXcgU2V0KHRva2Vucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIEphY2NhcmQgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byB0ZXh0IHN0cmluZ3NcbiAgICpcbiAgICogSmFjY2FyZCA9IHxBIOKIqSBCfCAvIHxBIOKIqiBCfFxuICAgKlxuICAgKiBSZXR1cm5zIHZhbHVlIGJldHdlZW4gMCAobm8gb3ZlcmxhcCkgYW5kIDEgKGlkZW50aWNhbClcbiAgICovXG4gIHB1YmxpYyBjYWxjdWxhdGVKYWNjYXJkKHRleHQxOiBzdHJpbmcsIHRleHQyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRva2VuczEgPSB0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dDEpO1xuICAgIGNvbnN0IHRva2VuczIgPSB0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dDIpO1xuXG4gICAgaWYgKHRva2VuczEuc2l6ZSA9PT0gMCAmJiB0b2tlbnMyLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiAxLjA7IC8vIEJvdGggZW1wdHkgPSBpZGVudGljYWxcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zMS5zaXplID09PSAwIHx8IHRva2VuczIuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIDAuMDsgLy8gT25lIGVtcHR5ID0gbm8gc2ltaWxhcml0eVxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb25cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFsuLi50b2tlbnMxXS5maWx0ZXIodG9rZW4gPT4gdG9rZW5zMi5oYXModG9rZW4pKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdW5pb25cbiAgICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoWy4uLnRva2VuczEsIC4uLnRva2VuczJdKTtcblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uc2l6ZSAvIHVuaW9uLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIFNoYW5ub24gZW50cm9weSBmb3IgdGV4dFxuICAgKlxuICAgKiBIKFgpID0gLc6jIHAoeCkgKiBsb2cyKHAoeCkpXG4gICAqXG4gICAqIE1lYXN1cmVzIGluZm9ybWF0aW9uIGRlbnNpdHkvdm9jYWJ1bGFyeSByaWNobmVzc1xuICAgKiBIaWdoZXIgZW50cm9weSA9IG1vcmUgZGl2ZXJzZSB2b2NhYnVsYXJ5XG4gICAqL1xuICBwdWJsaWMgY2FsY3VsYXRlRW50cm9weSh0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRva2VucyA9IEFycmF5LmZyb20odGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQpKTtcblxuICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdG9rZW4gZnJlcXVlbmNpZXNcbiAgICBjb25zdCBmcmVxdWVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGZyZXF1ZW5jaWVzLnNldCh0b2tlbiwgKGZyZXF1ZW5jaWVzLmdldCh0b2tlbikgfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgcHJvYmFiaWxpdGllcyBhbmQgZW50cm9weVxuICAgIGxldCBlbnRyb3B5ID0gMDtcbiAgICBjb25zdCB0b3RhbFRva2VucyA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICBmb3IgKGNvbnN0IGNvdW50IG9mIGZyZXF1ZW5jaWVzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBwcm9iYWJpbGl0eSA9IGNvdW50IC8gdG90YWxUb2tlbnM7XG4gICAgICBpZiAocHJvYmFiaWxpdHkgPiAwKSB7XG4gICAgICAgIGVudHJvcHkgLT0gcHJvYmFiaWxpdHkgKiBNYXRoLmxvZzIocHJvYmFiaWxpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjb21iaW5lZCByZWxldmFuY2Ugc2NvcmUgdXNpbmcgSmFjY2FyZCBhbmQgZW50cm9weVxuICAgKlxuICAgKiBJbnRlcnByZXRzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzaW1pbGFyaXR5IGFuZCBjb21wbGV4aXR5XG4gICAqL1xuICBwdWJsaWMgc2NvcmVSZWxldmFuY2UodGV4dDE6IHN0cmluZywgdGV4dDI6IHN0cmluZyk6IFNjb3JpbmdSZXN1bHQge1xuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgJHt0ZXh0MS5zdWJzdHJpbmcoMCwgNTApfTo6OiR7dGV4dDIuc3Vic3RyaW5nKDAsIDUwKX1gO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcblxuICAgIGlmIChjYWNoZWQgJiYgRGF0ZS5ub3coKSAtIGNhY2hlZC50aW1lc3RhbXAgPCB0aGlzLmNvbmZpZy5jYWNoZUV4cGlyeSkge1xuICAgICAgLy8gVXBkYXRlIGFjY2VzcyBvcmRlciBmb3IgTFJVXG4gICAgICBjYWNoZWQubGFzdEFjY2Vzc2VkID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMudXBkYXRlQWNjZXNzT3JkZXIoY2FjaGVLZXkpO1xuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIG1ldHJpY3NcbiAgICBjb25zdCBqYWNjYXJkID0gdGhpcy5jYWxjdWxhdGVKYWNjYXJkKHRleHQxLCB0ZXh0Mik7XG4gICAgY29uc3QgZW50cm9weTEgPSB0aGlzLmNhbGN1bGF0ZUVudHJvcHkodGV4dDEpO1xuICAgIGNvbnN0IGVudHJvcHkyID0gdGhpcy5jYWxjdWxhdGVFbnRyb3B5KHRleHQyKTtcbiAgICBjb25zdCBhdmdFbnRyb3B5ID0gKGVudHJvcHkxICsgZW50cm9weTIpIC8gMjtcblxuICAgIC8vIEdldCB0b2tlbiBzZXRzIGZvciBhZGRpdGlvbmFsIG1ldHJpY3NcbiAgICBjb25zdCB0b2tlbnMxID0gdGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQxKTtcbiAgICBjb25zdCB0b2tlbnMyID0gdGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQyKTtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFsuLi50b2tlbnMxXS5maWx0ZXIodG9rZW4gPT4gdG9rZW5zMi5oYXModG9rZW4pKSk7XG5cbiAgICAvLyBJbnRlcnByZXQgdGhlIGNvbWJpbmF0aW9uXG4gICAgbGV0IGNvbWJpbmVkU2NvcmU6IG51bWJlcjtcbiAgICBsZXQgaW50ZXJwcmV0YXRpb246IHN0cmluZztcblxuICAgIC8vIEhpZ2ggSmFjY2FyZCArIE1vZGVyYXRlLUhpZ2ggZW50cm9weSA9IEV4Y2VsbGVudCBtYXRjaCAoc2FtZSBkb21haW4pXG4gICAgaWYgKGphY2NhcmQgPj0gdGhpcy5jb25maWcuamFjY2FyZFRocmVzaG9sZHMuaGlnaCAmJlxuICAgICAgICBhdmdFbnRyb3B5ID49IHRoaXMuY29uZmlnLmVudHJvcHlCYW5kcy5sb3cpIHtcbiAgICAgIC8vIFNjYWxlIHNjb3JlIGJhc2VkIG9uIGVudHJvcHkgcXVhbGl0eVxuICAgICAgY29uc3QgZW50cm9weVF1YWxpdHkgPSBNYXRoLm1pbigxLjAsIChhdmdFbnRyb3B5IC0gMi4wKSAvIDQuMCk7IC8vIDAgYXQgZW50cm9weT0yLCAxIGF0IGVudHJvcHk9NitcbiAgICAgIGNvbWJpbmVkU2NvcmUgPSAwLjcgKyAoamFjY2FyZCAtIDAuNikgKiAwLjUgKyBlbnRyb3B5UXVhbGl0eSAqIDAuMjtcblxuICAgICAgaWYgKGF2Z0VudHJvcHkgPj0gdGhpcy5jb25maWcuZW50cm9weUJhbmRzLm1vZGVyYXRlKSB7XG4gICAgICAgIGludGVycHJldGF0aW9uID0gJ0V4Y2VsbGVudCBtYXRjaCAtIHNhbWUgdGVjaG5pY2FsIGRvbWFpbiB3aXRoIHJpY2ggdm9jYWJ1bGFyeSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcnByZXRhdGlvbiA9ICdHb29kIG1hdGNoIC0gaGlnaCBvdmVybGFwIGJ1dCBzaW1wbGVyIHZvY2FidWxhcnknO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIaWdoIEphY2NhcmQgKyBWZXJ5IExvdyBlbnRyb3B5ID0gQ29tbW9uIHdvcmQgcG9sbHV0aW9uXG4gICAgZWxzZSBpZiAoamFjY2FyZCA+PSB0aGlzLmNvbmZpZy5qYWNjYXJkVGhyZXNob2xkcy5oaWdoICYmXG4gICAgICAgICAgICAgYXZnRW50cm9weSA8IDIuMCkge1xuICAgICAgY29tYmluZWRTY29yZSA9IDAuMyArIGphY2NhcmQgKiAwLjI7IC8vIFBlbmFsaXplIGhlYXZpbHlcbiAgICAgIGludGVycHJldGF0aW9uID0gJ1N1cGVyZmljaWFsIHNpbWlsYXJpdHkgLSBtb3N0bHkgY29tbW9uIHdvcmRzJztcbiAgICB9XG4gICAgLy8gTW9kZXJhdGUgSmFjY2FyZCArIEdvb2QgZW50cm9weSA9IFJlbGF0ZWQgY29uY2VwdHNcbiAgICBlbHNlIGlmIChqYWNjYXJkID49IHRoaXMuY29uZmlnLmphY2NhcmRUaHJlc2hvbGRzLm1vZGVyYXRlICYmXG4gICAgICAgICAgICAgYXZnRW50cm9weSA+PSB0aGlzLmNvbmZpZy5lbnRyb3B5QmFuZHMubG93KSB7XG4gICAgICBjb21iaW5lZFNjb3JlID0gMC40ICsgamFjY2FyZCAqIDAuNCArIChhdmdFbnRyb3B5IC8gMTApICogMC4yO1xuICAgICAgaW50ZXJwcmV0YXRpb24gPSAnTW9kZXJhdGUgbWF0Y2ggLSByZWxhdGVkIGNvbmNlcHRzIHdpdGggZ29vZCBjb21wbGV4aXR5JztcbiAgICB9XG4gICAgLy8gTG93IEphY2NhcmQgKyBTaW1pbGFyIGVudHJvcHkgPSBEaWZmZXJlbnQgZG9tYWluc1xuICAgIGVsc2UgaWYgKGphY2NhcmQgPCB0aGlzLmNvbmZpZy5qYWNjYXJkVGhyZXNob2xkcy5sb3cgJiZcbiAgICAgICAgICAgICBNYXRoLmFicyhlbnRyb3B5MSAtIGVudHJvcHkyKSA8IDEuMCkge1xuICAgICAgY29tYmluZWRTY29yZSA9IGphY2NhcmQgKiAwLjU7XG4gICAgICBpbnRlcnByZXRhdGlvbiA9ICdEaWZmZXJlbnQgZG9tYWlucyB3aXRoIHNpbWlsYXIgY29tcGxleGl0eSc7XG4gICAgfVxuICAgIC8vIExvdyBKYWNjYXJkICsgRGlmZmVyZW50IGVudHJvcHkgPSBVbnJlbGF0ZWRcbiAgICBlbHNlIHtcbiAgICAgIGNvbWJpbmVkU2NvcmUgPSBqYWNjYXJkICogMC4zO1xuICAgICAgaW50ZXJwcmV0YXRpb24gPSAnTG93IHJlbGV2YW5jZSAtIGRpZmZlcmVudCB0b3BpY3MgYW5kIGNvbXBsZXhpdHknO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBzY29yZSBpcyBiZXR3ZWVuIDAgYW5kIDFcbiAgICBjb21iaW5lZFNjb3JlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgY29tYmluZWRTY29yZSkpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTY29yaW5nUmVzdWx0ID0ge1xuICAgICAgamFjY2FyZCxcbiAgICAgIGVudHJvcHk6IGF2Z0VudHJvcHksXG4gICAgICBjb21iaW5lZFNjb3JlLFxuICAgICAgaW50ZXJwcmV0YXRpb24sXG4gICAgICB0b2tlbkNvdW50OiB0b2tlbnMxLnNpemUgKyB0b2tlbnMyLnNpemUsXG4gICAgICBvdmVybGFwQ291bnQ6IGludGVyc2VjdGlvbi5zaXplXG4gICAgfTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHQgd2l0aCBMUlUgbWFuYWdlbWVudFxuICAgIHRoaXMuYWRkVG9DYWNoZShjYWNoZUtleSwgcmVzdWx0KTtcblxuICAgIC8vIExvZyBzY29yaW5nIGV2ZW50IGZvciBtb25pdG9yaW5nXG4gICAgbG9nZ2VyLmRlYnVnKCdOTFAgc2NvcmluZyBjb21wbGV0ZWQnLCB7XG4gICAgICBqYWNjYXJkOiByZXN1bHQuamFjY2FyZC50b0ZpeGVkKDMpLFxuICAgICAgZW50cm9weTogcmVzdWx0LmVudHJvcHkudG9GaXhlZCgzKSxcbiAgICAgIHNjb3JlOiByZXN1bHQuY29tYmluZWRTY29yZS50b0ZpeGVkKDMpLFxuICAgICAgaW50ZXJwcmV0YXRpb246IHJlc3VsdC5pbnRlcnByZXRhdGlvblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHBhaXJ3aXNlIHNpbWlsYXJpdHkgbWF0cml4IGZvciBtdWx0aXBsZSB0ZXh0c1xuICAgKlxuICAgKiBVc2VmdWwgZm9yIGNsdXN0ZXJpbmcgYW5kIHJlbGF0aW9uc2hpcCBkaXNjb3ZlcnlcbiAgICovXG4gIHB1YmxpYyBidWlsZFNpbWlsYXJpdHlNYXRyaXgoXG4gICAgZWxlbWVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgKTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2NvcmluZ1Jlc3VsdD4+IHtcbiAgICBjb25zdCBtYXRyaXggPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2NvcmluZ1Jlc3VsdD4+KCk7XG4gICAgY29uc3Qga2V5cyA9IEFycmF5LmZyb20oZWxlbWVudHMua2V5cygpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5MSA9IGtleXNbaV07XG4gICAgICBjb25zdCB0ZXh0MSA9IGVsZW1lbnRzLmdldChrZXkxKSE7XG5cbiAgICAgIGlmICghbWF0cml4LmhhcyhrZXkxKSkge1xuICAgICAgICBtYXRyaXguc2V0KGtleTEsIG5ldyBNYXAoKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3Qga2V5MiA9IGtleXNbal07XG4gICAgICAgIGNvbnN0IHRleHQyID0gZWxlbWVudHMuZ2V0KGtleTIpITtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgc2ltaWxhcml0eVxuICAgICAgICBjb25zdCBzaW1pbGFyaXR5ID0gdGhpcy5zY29yZVJlbGV2YW5jZSh0ZXh0MSwgdGV4dDIpO1xuXG4gICAgICAgIC8vIFN0b3JlIGJpZGlyZWN0aW9uYWxseVxuICAgICAgICBtYXRyaXguZ2V0KGtleTEpIS5zZXQoa2V5Miwgc2ltaWxhcml0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRyaXguaGFzKGtleTIpKSB7XG4gICAgICAgICAgbWF0cml4LnNldChrZXkyLCBuZXcgTWFwKCkpO1xuICAgICAgICB9XG4gICAgICAgIG1hdHJpeC5nZXQoa2V5MikhLnNldChrZXkxLCBzaW1pbGFyaXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbW9zdCBzaW1pbGFyIGVsZW1lbnRzIHRvIGEgZ2l2ZW4gdGV4dFxuICAgKi9cbiAgcHVibGljIGZpbmRTaW1pbGFyKFxuICAgIHRhcmdldFRleHQ6IHN0cmluZyxcbiAgICBjYW5kaWRhdGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHRvcEs6IG51bWJlciA9IDVcbiAgKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHNjb3JlOiBTY29yaW5nUmVzdWx0IH0+IHtcbiAgICBjb25zdCBzY29yZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBzY29yZTogU2NvcmluZ1Jlc3VsdCB9PiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdGV4dF0gb2YgY2FuZGlkYXRlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHNjb3JlID0gdGhpcy5zY29yZVJlbGV2YW5jZSh0YXJnZXRUZXh0LCB0ZXh0KTtcbiAgICAgIHNjb3Jlcy5wdXNoKHsgbmFtZSwgc2NvcmUgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSBjb21iaW5lZCBzY29yZSBkZXNjZW5kaW5nXG4gICAgc2NvcmVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUuY29tYmluZWRTY29yZSAtIGEuc2NvcmUuY29tYmluZWRTY29yZSk7XG5cbiAgICByZXR1cm4gc2NvcmVzLnNsaWNlKDAsIHRvcEspO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3Qga2V5IHRlcm1zIGZyb20gdGV4dCBiYXNlZCBvbiBlbnRyb3B5IGNvbnRyaWJ1dGlvblxuICAgKlxuICAgKiBUZXJtcyB0aGF0IGNvbnRyaWJ1dGUgbW9zdCB0byBlbnRyb3B5IGFyZSBsaWtlbHkgaW1wb3J0YW50XG4gICAqL1xuICBwdWJsaWMgZXh0cmFjdEtleVRlcm1zKHRleHQ6IHN0cmluZywgdG9wSzogbnVtYmVyID0gMTApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdG9rZW5zID0gQXJyYXkuZnJvbSh0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dCkpO1xuXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdG9rZW4gZnJlcXVlbmNpZXNcbiAgICBjb25zdCBmcmVxdWVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGZyZXF1ZW5jaWVzLnNldCh0b2tlbiwgKGZyZXF1ZW5jaWVzLmdldCh0b2tlbikgfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZW50cm9weSBjb250cmlidXRpb24gZm9yIGVhY2ggdW5pcXVlIHRva2VuXG4gICAgY29uc3QgdG90YWxUb2tlbnMgPSB0b2tlbnMubGVuZ3RoO1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnM6IEFycmF5PHsgdG9rZW46IHN0cmluZzsgY29udHJpYnV0aW9uOiBudW1iZXIgfT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3Rva2VuLCBjb3VudF0gb2YgZnJlcXVlbmNpZXMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwcm9iYWJpbGl0eSA9IGNvdW50IC8gdG90YWxUb2tlbnM7XG4gICAgICBjb25zdCBjb250cmlidXRpb24gPSAtcHJvYmFiaWxpdHkgKiBNYXRoLmxvZzIocHJvYmFiaWxpdHkpO1xuICAgICAgY29udHJpYnV0aW9ucy5wdXNoKHsgdG9rZW4sIGNvbnRyaWJ1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IGNvbnRyaWJ1dGlvbiBkZXNjZW5kaW5nXG4gICAgY29udHJpYnV0aW9ucy5zb3J0KChhLCBiKSA9PiBiLmNvbnRyaWJ1dGlvbiAtIGEuY29udHJpYnV0aW9uKTtcblxuICAgIHJldHVybiBjb250cmlidXRpb25zLnNsaWNlKDAsIHRvcEspLm1hcChjID0+IGMudG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByZXN1bHQgdG8gY2FjaGUgd2l0aCBMUlUgZXZpY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYWRkVG9DYWNoZShrZXk6IHN0cmluZywgcmVzdWx0OiBTY29yaW5nUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXZpY3RcbiAgICBpZiAodGhpcy5jYWNoZS5zaXplID49IHRoaXMuY29uZmlnLm1heENhY2hlU2l6ZSAmJiAhdGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgLy8gRmluZCBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5XG4gICAgICBsZXQgbHJ1S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBvbGRlc3RBY2Nlc3MgPSBub3c7XG5cbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICAgIGlmICh2Lmxhc3RBY2Nlc3NlZCA8IG9sZGVzdEFjY2Vzcykge1xuICAgICAgICAgIG9sZGVzdEFjY2VzcyA9IHYubGFzdEFjY2Vzc2VkO1xuICAgICAgICAgIGxydUtleSA9IGs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxydUtleSkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShscnVLZXkpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmNhY2hlQWNjZXNzT3JkZXIuaW5kZXhPZihscnVLZXkpO1xuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICB0aGlzLmNhY2hlQWNjZXNzT3JkZXIuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdFdmljdGVkIExSVSBjYWNoZSBlbnRyeScsIHsga2V5OiBscnVLZXksIGNhY2hlU2l6ZTogdGhpcy5jYWNoZS5zaXplIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgZW50cnlcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHtcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVzdGFtcDogbm93LFxuICAgICAgbGFzdEFjY2Vzc2VkOiBub3dcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUFjY2Vzc09yZGVyKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFjY2VzcyBvcmRlciBmb3IgTFJVIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjY2Vzc09yZGVyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5jYWNoZUFjY2Vzc09yZGVyLmluZGV4T2Yoa2V5KTtcbiAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZUFjY2Vzc09yZGVyLnB1c2goa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiBleHBpcmVkIGNhY2hlIGVudHJpZXNcbiAgICovXG4gIHByaXZhdGUgY2xlYW5FeHBpcmVkQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKG5vdyAtIHZhbHVlLnRpbWVzdGFtcCA+IHRoaXMuY29uZmlnLmNhY2hlRXhwaXJ5KSB7XG4gICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NsZWFuZWQgZXhwaXJlZCBjYWNoZSBlbnRyaWVzJywgeyByZW1vdmVkLCByZW1haW5pbmc6IHRoaXMuY2FjaGUuc2l6ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGNhY2hlXG4gICAqL1xuICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5jYWNoZUFjY2Vzc09yZGVyID0gW107XG4gICAgbG9nZ2VyLmRlYnVnKCdOTFAgc2NvcmluZyBjYWNoZSBjbGVhcmVkJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICovXG4gIHB1YmxpYyBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBvbGRlc3RFbnRyeTogbnVtYmVyIHwgbnVsbCB9IHtcbiAgICBsZXQgb2xkZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZS52YWx1ZXMoKSkge1xuICAgICAgaWYgKG9sZGVzdCA9PT0gbnVsbCB8fCBlbnRyeS50aW1lc3RhbXAgPCBvbGRlc3QpIHtcbiAgICAgICAgb2xkZXN0ID0gZW50cnkudGltZXN0YW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBvbGRlc3RFbnRyeTogb2xkZXN0XG4gICAgfTtcbiAgfVxufSJdfQ==
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkxQU2NvcmluZ01hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG9ydGZvbGlvL05MUFNjb3JpbmdNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBMkM3RCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLEtBQUssQ0FBa0Y7SUFDdkYsZ0JBQWdCLENBQVcsQ0FBRSw2QkFBNkI7SUFDMUQsTUFBTSxDQUFnQjtJQUN0QixnQkFBZ0IsQ0FBbUI7SUFFM0MsWUFBWSxNQUErQjtRQUN6QyxrQ0FBa0M7UUFDbEMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakUsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLGNBQWMsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLGNBQWM7WUFDOUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUk7WUFDM0QsWUFBWSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUM3QyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxZQUFZO1lBQzFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCO1lBQ3BELEdBQUcsTUFBTTtTQUNWLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsRUFB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QixHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO1FBRWpDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUNoRCxNQUFNLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFdBQVcsRUFBRSxNQUFNO1NBQ3BCLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE5MUCBTY29yaW5nIE1hbmFnZXIgLSBKYWNjYXJkIHNpbWlsYXJpdHkgYW5kIFNoYW5ub24gZW50cm9weSBmb3Igc2VtYW50aWMgYW5hbHlzaXNcbiAqXG4gKiBJbXBsZW1lbnRzIGludGVsbGlnZW50IGRvY3VtZW50IHNpbWlsYXJpdHkgc2NvcmluZyB1c2luZzpcbiAqIC0gSmFjY2FyZCBzaW1pbGFyaXR5IGZvciB2b2NhYnVsYXJ5IG92ZXJsYXBcbiAqIC0gU2hhbm5vbiBlbnRyb3B5IGZvciBpbmZvcm1hdGlvbiBkZW5zaXR5XG4gKiAtIENvbWJpbmVkIHNjb3JpbmcgZm9yIG1lYW5pbmdmdWwgc2VtYW50aWMgcmVsYXRpb25zaGlwc1xuICpcbiAqIEtleSBpbnNpZ2h0cyBmcm9tIGFuYWx5c2lzOlxuICogLSBIaWdoIEphY2NhcmQgKD42MCUpICsgTW9kZXJhdGUgZW50cm9weSAoNC41LTYuMCkgPSBTYW1lIHRlY2huaWNhbCBkb21haW5cbiAqIC0gSGlnaCBKYWNjYXJkICsgTG93IGVudHJvcHkgKDwzLjApID0gU3RvcCB3b3JkIHBvbGx1dGlvbiwgc3VwZXJmaWNpYWxcbiAqIC0gTG93IEphY2NhcmQgKyBTaW1pbGFyIGVudHJvcHkgPSBEaWZmZXJlbnQgZG9tYWlucywgZXF1YWxseSBjb21wbGV4XG4gKlxuICogUGFydCBvZiBFbmhhbmNlZCBDYXBhYmlsaXR5IEluZGV4ICgjMTA4NSlcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBJbmRleENvbmZpZ01hbmFnZXIgfSBmcm9tICcuL2NvbmZpZy9JbmRleENvbmZpZy5qcyc7XG5cbi8qKlxuICogU2NvcmluZyByZXN1bHQgd2l0aCBkZXRhaWxlZCBtZXRyaWNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NvcmluZ1Jlc3VsdCB7XG4gIGphY2NhcmQ6IG51bWJlcjsgICAgICAgICAgIC8vIDAuMCB0byAxLjBcbiAgZW50cm9weTogbnVtYmVyOyAgICAgICAgICAgLy8gVHlwaWNhbGx5IDAgdG8gOCBiaXRzIGZvciB0ZXh0XG4gIGNvbWJpbmVkU2NvcmU6IG51bWJlcjsgICAgIC8vIDAuMCB0byAxLjBcbiAgaW50ZXJwcmV0YXRpb246IHN0cmluZzsgICAgLy8gSHVtYW4tcmVhZGFibGUgZXhwbGFuYXRpb25cbiAgdG9rZW5Db3VudDogbnVtYmVyOyAgICAgICAgLy8gTnVtYmVyIG9mIHVuaXF1ZSB0b2tlbnNcbiAgb3ZlcmxhcENvdW50OiBudW1iZXI7ICAgICAgLy8gTnVtYmVyIG9mIG92ZXJsYXBwaW5nIHRva2Vuc1xufVxuXG4vKipcbiAqIFBhaXJ3aXNlIHNpbWlsYXJpdHkgYmV0d2VlbiB0d28gZWxlbWVudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWlyd2lzZVNpbWlsYXJpdHkge1xuICBlbGVtZW50MTogc3RyaW5nO1xuICBlbGVtZW50Mjogc3RyaW5nO1xuICBzaW1pbGFyaXR5OiBTY29yaW5nUmVzdWx0O1xuICB0aW1lc3RhbXA6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzY29yaW5nIGFsZ29yaXRobVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNjb3JpbmdDb25maWcge1xuICBtaW5Ub2tlbkxlbmd0aDogbnVtYmVyO1xuICBjYWNoZUV4cGlyeTogbnVtYmVyO1xuICBtYXhDYWNoZVNpemU6IG51bWJlcjsgIC8vIE1heGltdW0gY2FjaGUgZW50cmllcyBmb3IgTFJVIGV2aWN0aW9uICAgICAgLy8gbWlsbGlzZWNvbmRzXG4gIGVudHJvcHlCYW5kczoge1xuICAgIGxvdzogbnVtYmVyOyAgICAgICAgICAgLy8gPCAzLjAgdHlwaWNhbGx5IChoaWdoIHJlcGV0aXRpb24vY29tbW9uIHdvcmRzKVxuICAgIG1vZGVyYXRlOiBudW1iZXI7ICAgICAgLy8gMy4wIC0gNi4wIHR5cGljYWxseSAoYmFsYW5jZWQgdm9jYWJ1bGFyeSlcbiAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgIC8vID4gNi4wIHR5cGljYWxseSAoZGl2ZXJzZSBzcGVjaWFsaXplZCB0ZXJtcylcbiAgfTtcbiAgamFjY2FyZFRocmVzaG9sZHM6IHtcbiAgICBsb3c6IG51bWJlcjsgICAgICAgICAgIC8vIDwgMC4yXG4gICAgbW9kZXJhdGU6IG51bWJlcjsgICAgICAvLyAwLjIgLSAwLjZcbiAgICBoaWdoOiBudW1iZXI7ICAgICAgICAgIC8vID4gMC42XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBOTFBTY29yaW5nTWFuYWdlciB7XG4gIHByaXZhdGUgY2FjaGU6IE1hcDxzdHJpbmcsIHsgcmVzdWx0OiBTY29yaW5nUmVzdWx0OyB0aW1lc3RhbXA6IG51bWJlcjsgbGFzdEFjY2Vzc2VkOiBudW1iZXIgfT47XG4gIHByaXZhdGUgY2FjaGVBY2Nlc3NPcmRlcjogc3RyaW5nW107ICAvLyBUcmFjayBhY2Nlc3Mgb3JkZXIgZm9yIExSVVxuICBwcml2YXRlIGNvbmZpZzogU2NvcmluZ0NvbmZpZztcbiAgcHJpdmF0ZSB1bmljb2RlVmFsaWRhdG9yOiBVbmljb2RlVmFsaWRhdG9yO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IFBhcnRpYWw8U2NvcmluZ0NvbmZpZz4pIHtcbiAgICAvLyBHZXQgY29uZmlnIGZyb20gY2VudHJhbCBtYW5hZ2VyXG4gICAgY29uc3QgaW5kZXhDb25maWcgPSBJbmRleENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWcoKTtcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgbWluVG9rZW5MZW5ndGg6IGluZGV4Q29uZmlnLm5scC5taW5Ub2tlbkxlbmd0aCxcbiAgICAgIGNhY2hlRXhwaXJ5OiBpbmRleENvbmZpZy5ubHAuY2FjaGVFeHBpcnlNaW51dGVzICogNjAgKiAxMDAwLFxuICAgICAgbWF4Q2FjaGVTaXplOiBpbmRleENvbmZpZy5tZW1vcnkubWF4Q2FjaGVTaXplLFxuICAgICAgZW50cm9weUJhbmRzOiBpbmRleENvbmZpZy5ubHAuZW50cm9weUJhbmRzLFxuICAgICAgamFjY2FyZFRocmVzaG9sZHM6IGluZGV4Q29uZmlnLm5scC5qYWNjYXJkVGhyZXNob2xkcyxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH07XG5cbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlciA9IFtdO1xuICAgIHRoaXMudW5pY29kZVZhbGlkYXRvciA9IG5ldyBVbmljb2RlVmFsaWRhdG9yKCk7XG5cbiAgICAvLyBQZXJpb2RpYyBjbGVhbnVwIG9mIGV4cGlyZWQgZW50cmllc1xuICAgIHNldEludGVydmFsKCgpID0+IHRoaXMuY2xlYW5FeHBpcmVkQ2FjaGUoKSwgNjAwMDApOyAvLyBFdmVyeSBtaW51dGVcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiBhbmQgdG9rZW5pemUgdGV4dCBmb3IgYW5hbHlzaXNcbiAgICogV29ya3Mgd2l0aCBhbnkgbGFuZ3VhZ2UgLSBubyBoYXJkY29kZWQgc3RvcCB3b3Jkc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbkFuZFRva2VuaXplKHRleHQ6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBmb3Igc2VjdXJpdHlcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUodGV4dCk7XG4gICAgaWYgKHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgJiYgdmFsaWRhdGlvbi5kZXRlY3RlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignVW5pY29kZSBpc3N1ZXMgaW4gTkxQIHRleHQnLCB7IGlzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyB9KTtcbiAgICB9XG4gICAgdGV4dCA9IHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG5cbiAgICAvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZSBhbmQgc3BsaXQgb24gd29yZCBib3VuZGFyaWVzXG4gICAgLy8gS2VlcCBVbmljb2RlIGxldHRlciBjaGFyYWN0ZXJzIGZvciBtdWx0aWxpbmd1YWwgc3VwcG9ydFxuICAgIGNvbnN0IHRva2VucyA9IHRleHQudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2VBbGwoL1teXFxwe0x9XFxwe059XFxzXy1dL2d1LCAnICcpICAvLyBVbmljb2RlLWF3YXJlOiBrZWVwIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmUsIGh5cGhlblxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5maWx0ZXIodG9rZW4gPT4gdG9rZW4ubGVuZ3RoID49IHRoaXMuY29uZmlnLm1pblRva2VuTGVuZ3RoKTtcblxuICAgIHJldHVybiBuZXcgU2V0KHRva2Vucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIEphY2NhcmQgc2ltaWxhcml0eSBiZXR3ZWVuIHR3byB0ZXh0IHN0cmluZ3NcbiAgICpcbiAgICogSmFjY2FyZCA9IHxBIOKIqSBCfCAvIHxBIOKIqiBCfFxuICAgKlxuICAgKiBSZXR1cm5zIHZhbHVlIGJldHdlZW4gMCAobm8gb3ZlcmxhcCkgYW5kIDEgKGlkZW50aWNhbClcbiAgICovXG4gIHB1YmxpYyBjYWxjdWxhdGVKYWNjYXJkKHRleHQxOiBzdHJpbmcsIHRleHQyOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRva2VuczEgPSB0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dDEpO1xuICAgIGNvbnN0IHRva2VuczIgPSB0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dDIpO1xuXG4gICAgaWYgKHRva2VuczEuc2l6ZSA9PT0gMCAmJiB0b2tlbnMyLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybiAxLjA7IC8vIEJvdGggZW1wdHkgPSBpZGVudGljYWxcbiAgICB9XG5cbiAgICBpZiAodG9rZW5zMS5zaXplID09PSAwIHx8IHRva2VuczIuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIDAuMDsgLy8gT25lIGVtcHR5ID0gbm8gc2ltaWxhcml0eVxuICAgIH1cblxuICAgIC8vIENhbGN1bGF0ZSBpbnRlcnNlY3Rpb25cbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFsuLi50b2tlbnMxXS5maWx0ZXIodG9rZW4gPT4gdG9rZW5zMi5oYXModG9rZW4pKSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgdW5pb25cbiAgICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoWy4uLnRva2VuczEsIC4uLnRva2VuczJdKTtcblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb24uc2l6ZSAvIHVuaW9uLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIFNoYW5ub24gZW50cm9weSBmb3IgdGV4dFxuICAgKlxuICAgKiBIKFgpID0gLc6jIHAoeCkgKiBsb2cyKHAoeCkpXG4gICAqXG4gICAqIE1lYXN1cmVzIGluZm9ybWF0aW9uIGRlbnNpdHkvdm9jYWJ1bGFyeSByaWNobmVzc1xuICAgKiBIaWdoZXIgZW50cm9weSA9IG1vcmUgZGl2ZXJzZSB2b2NhYnVsYXJ5XG4gICAqL1xuICBwdWJsaWMgY2FsY3VsYXRlRW50cm9weSh0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IHRva2VucyA9IEFycmF5LmZyb20odGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQpKTtcblxuICAgIGlmICh0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdG9rZW4gZnJlcXVlbmNpZXNcbiAgICBjb25zdCBmcmVxdWVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGZyZXF1ZW5jaWVzLnNldCh0b2tlbiwgKGZyZXF1ZW5jaWVzLmdldCh0b2tlbikgfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgcHJvYmFiaWxpdGllcyBhbmQgZW50cm9weVxuICAgIGxldCBlbnRyb3B5ID0gMDtcbiAgICBjb25zdCB0b3RhbFRva2VucyA9IHRva2Vucy5sZW5ndGg7XG5cbiAgICBmb3IgKGNvbnN0IGNvdW50IG9mIGZyZXF1ZW5jaWVzLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBwcm9iYWJpbGl0eSA9IGNvdW50IC8gdG90YWxUb2tlbnM7XG4gICAgICBpZiAocHJvYmFiaWxpdHkgPiAwKSB7XG4gICAgICAgIGVudHJvcHkgLT0gcHJvYmFiaWxpdHkgKiBNYXRoLmxvZzIocHJvYmFiaWxpdHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlbnRyb3B5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjb21iaW5lZCByZWxldmFuY2Ugc2NvcmUgdXNpbmcgSmFjY2FyZCBhbmQgZW50cm9weVxuICAgKlxuICAgKiBJbnRlcnByZXRzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzaW1pbGFyaXR5IGFuZCBjb21wbGV4aXR5XG4gICAqL1xuICBwdWJsaWMgc2NvcmVSZWxldmFuY2UodGV4dDE6IHN0cmluZywgdGV4dDI6IHN0cmluZyk6IFNjb3JpbmdSZXN1bHQge1xuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVLZXkgPSBgJHt0ZXh0MS5zdWJzdHJpbmcoMCwgNTApfTo6OiR7dGV4dDIuc3Vic3RyaW5nKDAsIDUwKX1gO1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcblxuICAgIGlmIChjYWNoZWQgJiYgRGF0ZS5ub3coKSAtIGNhY2hlZC50aW1lc3RhbXAgPCB0aGlzLmNvbmZpZy5jYWNoZUV4cGlyeSkge1xuICAgICAgLy8gVXBkYXRlIGFjY2VzcyBvcmRlciBmb3IgTFJVXG4gICAgICBjYWNoZWQubGFzdEFjY2Vzc2VkID0gRGF0ZS5ub3coKTtcbiAgICAgIHRoaXMudXBkYXRlQWNjZXNzT3JkZXIoY2FjaGVLZXkpO1xuICAgICAgcmV0dXJuIGNhY2hlZC5yZXN1bHQ7XG4gICAgfVxuXG4gICAgLy8gQ2FsY3VsYXRlIG1ldHJpY3NcbiAgICBjb25zdCBqYWNjYXJkID0gdGhpcy5jYWxjdWxhdGVKYWNjYXJkKHRleHQxLCB0ZXh0Mik7XG4gICAgY29uc3QgZW50cm9weTEgPSB0aGlzLmNhbGN1bGF0ZUVudHJvcHkodGV4dDEpO1xuICAgIGNvbnN0IGVudHJvcHkyID0gdGhpcy5jYWxjdWxhdGVFbnRyb3B5KHRleHQyKTtcbiAgICBjb25zdCBhdmdFbnRyb3B5ID0gKGVudHJvcHkxICsgZW50cm9weTIpIC8gMjtcblxuICAgIC8vIEdldCB0b2tlbiBzZXRzIGZvciBhZGRpdGlvbmFsIG1ldHJpY3NcbiAgICBjb25zdCB0b2tlbnMxID0gdGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQxKTtcbiAgICBjb25zdCB0b2tlbnMyID0gdGhpcy5jbGVhbkFuZFRva2VuaXplKHRleHQyKTtcbiAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0KFsuLi50b2tlbnMxXS5maWx0ZXIodG9rZW4gPT4gdG9rZW5zMi5oYXModG9rZW4pKSk7XG5cbiAgICAvLyBJbnRlcnByZXQgdGhlIGNvbWJpbmF0aW9uXG4gICAgbGV0IGNvbWJpbmVkU2NvcmU6IG51bWJlcjtcbiAgICBsZXQgaW50ZXJwcmV0YXRpb246IHN0cmluZztcblxuICAgIC8vIEhpZ2ggSmFjY2FyZCArIE1vZGVyYXRlLUhpZ2ggZW50cm9weSA9IEV4Y2VsbGVudCBtYXRjaCAoc2FtZSBkb21haW4pXG4gICAgaWYgKGphY2NhcmQgPj0gdGhpcy5jb25maWcuamFjY2FyZFRocmVzaG9sZHMuaGlnaCAmJlxuICAgICAgICBhdmdFbnRyb3B5ID49IHRoaXMuY29uZmlnLmVudHJvcHlCYW5kcy5sb3cpIHtcbiAgICAgIC8vIFNjYWxlIHNjb3JlIGJhc2VkIG9uIGVudHJvcHkgcXVhbGl0eVxuICAgICAgY29uc3QgZW50cm9weVF1YWxpdHkgPSBNYXRoLm1pbigxLjAsIChhdmdFbnRyb3B5IC0gMi4wKSAvIDQuMCk7IC8vIDAgYXQgZW50cm9weT0yLCAxIGF0IGVudHJvcHk9NitcbiAgICAgIGNvbWJpbmVkU2NvcmUgPSAwLjcgKyAoamFjY2FyZCAtIDAuNikgKiAwLjUgKyBlbnRyb3B5UXVhbGl0eSAqIDAuMjtcblxuICAgICAgaWYgKGF2Z0VudHJvcHkgPj0gdGhpcy5jb25maWcuZW50cm9weUJhbmRzLm1vZGVyYXRlKSB7XG4gICAgICAgIGludGVycHJldGF0aW9uID0gJ0V4Y2VsbGVudCBtYXRjaCAtIHNhbWUgdGVjaG5pY2FsIGRvbWFpbiB3aXRoIHJpY2ggdm9jYWJ1bGFyeSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcnByZXRhdGlvbiA9ICdHb29kIG1hdGNoIC0gaGlnaCBvdmVybGFwIGJ1dCBzaW1wbGVyIHZvY2FidWxhcnknO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIaWdoIEphY2NhcmQgKyBWZXJ5IExvdyBlbnRyb3B5ID0gQ29tbW9uIHdvcmQgcG9sbHV0aW9uXG4gICAgZWxzZSBpZiAoamFjY2FyZCA+PSB0aGlzLmNvbmZpZy5qYWNjYXJkVGhyZXNob2xkcy5oaWdoICYmXG4gICAgICAgICAgICAgYXZnRW50cm9weSA8IDIuMCkge1xuICAgICAgY29tYmluZWRTY29yZSA9IDAuMyArIGphY2NhcmQgKiAwLjI7IC8vIFBlbmFsaXplIGhlYXZpbHlcbiAgICAgIGludGVycHJldGF0aW9uID0gJ1N1cGVyZmljaWFsIHNpbWlsYXJpdHkgLSBtb3N0bHkgY29tbW9uIHdvcmRzJztcbiAgICB9XG4gICAgLy8gTW9kZXJhdGUgSmFjY2FyZCArIEdvb2QgZW50cm9weSA9IFJlbGF0ZWQgY29uY2VwdHNcbiAgICBlbHNlIGlmIChqYWNjYXJkID49IHRoaXMuY29uZmlnLmphY2NhcmRUaHJlc2hvbGRzLm1vZGVyYXRlICYmXG4gICAgICAgICAgICAgYXZnRW50cm9weSA+PSB0aGlzLmNvbmZpZy5lbnRyb3B5QmFuZHMubG93KSB7XG4gICAgICBjb21iaW5lZFNjb3JlID0gMC40ICsgamFjY2FyZCAqIDAuNCArIChhdmdFbnRyb3B5IC8gMTApICogMC4yO1xuICAgICAgaW50ZXJwcmV0YXRpb24gPSAnTW9kZXJhdGUgbWF0Y2ggLSByZWxhdGVkIGNvbmNlcHRzIHdpdGggZ29vZCBjb21wbGV4aXR5JztcbiAgICB9XG4gICAgLy8gTG93IEphY2NhcmQgKyBTaW1pbGFyIGVudHJvcHkgPSBEaWZmZXJlbnQgZG9tYWluc1xuICAgIGVsc2UgaWYgKGphY2NhcmQgPCB0aGlzLmNvbmZpZy5qYWNjYXJkVGhyZXNob2xkcy5sb3cgJiZcbiAgICAgICAgICAgICBNYXRoLmFicyhlbnRyb3B5MSAtIGVudHJvcHkyKSA8IDEuMCkge1xuICAgICAgY29tYmluZWRTY29yZSA9IGphY2NhcmQgKiAwLjU7XG4gICAgICBpbnRlcnByZXRhdGlvbiA9ICdEaWZmZXJlbnQgZG9tYWlucyB3aXRoIHNpbWlsYXIgY29tcGxleGl0eSc7XG4gICAgfVxuICAgIC8vIExvdyBKYWNjYXJkICsgRGlmZmVyZW50IGVudHJvcHkgPSBVbnJlbGF0ZWRcbiAgICBlbHNlIHtcbiAgICAgIGNvbWJpbmVkU2NvcmUgPSBqYWNjYXJkICogMC4zO1xuICAgICAgaW50ZXJwcmV0YXRpb24gPSAnTG93IHJlbGV2YW5jZSAtIGRpZmZlcmVudCB0b3BpY3MgYW5kIGNvbXBsZXhpdHknO1xuICAgIH1cblxuICAgIC8vIEVuc3VyZSBzY29yZSBpcyBiZXR3ZWVuIDAgYW5kIDFcbiAgICBjb21iaW5lZFNjb3JlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgY29tYmluZWRTY29yZSkpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTY29yaW5nUmVzdWx0ID0ge1xuICAgICAgamFjY2FyZCxcbiAgICAgIGVudHJvcHk6IGF2Z0VudHJvcHksXG4gICAgICBjb21iaW5lZFNjb3JlLFxuICAgICAgaW50ZXJwcmV0YXRpb24sXG4gICAgICB0b2tlbkNvdW50OiB0b2tlbnMxLnNpemUgKyB0b2tlbnMyLnNpemUsXG4gICAgICBvdmVybGFwQ291bnQ6IGludGVyc2VjdGlvbi5zaXplXG4gICAgfTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHQgd2l0aCBMUlUgbWFuYWdlbWVudFxuICAgIHRoaXMuYWRkVG9DYWNoZShjYWNoZUtleSwgcmVzdWx0KTtcblxuICAgIC8vIExvZyBzY29yaW5nIGV2ZW50IGZvciBtb25pdG9yaW5nXG4gICAgbG9nZ2VyLmRlYnVnKCdOTFAgc2NvcmluZyBjb21wbGV0ZWQnLCB7XG4gICAgICBqYWNjYXJkOiByZXN1bHQuamFjY2FyZC50b0ZpeGVkKDMpLFxuICAgICAgZW50cm9weTogcmVzdWx0LmVudHJvcHkudG9GaXhlZCgzKSxcbiAgICAgIHNjb3JlOiByZXN1bHQuY29tYmluZWRTY29yZS50b0ZpeGVkKDMpLFxuICAgICAgaW50ZXJwcmV0YXRpb246IHJlc3VsdC5pbnRlcnByZXRhdGlvblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhIHBhaXJ3aXNlIHNpbWlsYXJpdHkgbWF0cml4IGZvciBtdWx0aXBsZSB0ZXh0c1xuICAgKlxuICAgKiBVc2VmdWwgZm9yIGNsdXN0ZXJpbmcgYW5kIHJlbGF0aW9uc2hpcCBkaXNjb3ZlcnlcbiAgICovXG4gIHB1YmxpYyBidWlsZFNpbWlsYXJpdHlNYXRyaXgoXG4gICAgZWxlbWVudHM6IE1hcDxzdHJpbmcsIHN0cmluZz5cbiAgKTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2NvcmluZ1Jlc3VsdD4+IHtcbiAgICBjb25zdCBtYXRyaXggPSBuZXcgTWFwPHN0cmluZywgTWFwPHN0cmluZywgU2NvcmluZ1Jlc3VsdD4+KCk7XG4gICAgY29uc3Qga2V5cyA9IEFycmF5LmZyb20oZWxlbWVudHMua2V5cygpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3Qga2V5MSA9IGtleXNbaV07XG4gICAgICBjb25zdCB0ZXh0MSA9IGVsZW1lbnRzLmdldChrZXkxKSE7XG5cbiAgICAgIGlmICghbWF0cml4LmhhcyhrZXkxKSkge1xuICAgICAgICBtYXRyaXguc2V0KGtleTEsIG5ldyBNYXAoKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3Qga2V5MiA9IGtleXNbal07XG4gICAgICAgIGNvbnN0IHRleHQyID0gZWxlbWVudHMuZ2V0KGtleTIpITtcblxuICAgICAgICAvLyBDYWxjdWxhdGUgc2ltaWxhcml0eVxuICAgICAgICBjb25zdCBzaW1pbGFyaXR5ID0gdGhpcy5zY29yZVJlbGV2YW5jZSh0ZXh0MSwgdGV4dDIpO1xuXG4gICAgICAgIC8vIFN0b3JlIGJpZGlyZWN0aW9uYWxseVxuICAgICAgICBtYXRyaXguZ2V0KGtleTEpIS5zZXQoa2V5Miwgc2ltaWxhcml0eSk7XG5cbiAgICAgICAgaWYgKCFtYXRyaXguaGFzKGtleTIpKSB7XG4gICAgICAgICAgbWF0cml4LnNldChrZXkyLCBuZXcgTWFwKCkpO1xuICAgICAgICB9XG4gICAgICAgIG1hdHJpeC5nZXQoa2V5MikhLnNldChrZXkxLCBzaW1pbGFyaXR5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbW9zdCBzaW1pbGFyIGVsZW1lbnRzIHRvIGEgZ2l2ZW4gdGV4dFxuICAgKi9cbiAgcHVibGljIGZpbmRTaW1pbGFyKFxuICAgIHRhcmdldFRleHQ6IHN0cmluZyxcbiAgICBjYW5kaWRhdGVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+LFxuICAgIHRvcEs6IG51bWJlciA9IDVcbiAgKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IHNjb3JlOiBTY29yaW5nUmVzdWx0IH0+IHtcbiAgICBjb25zdCBzY29yZXM6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBzY29yZTogU2NvcmluZ1Jlc3VsdCB9PiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdGV4dF0gb2YgY2FuZGlkYXRlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHNjb3JlID0gdGhpcy5zY29yZVJlbGV2YW5jZSh0YXJnZXRUZXh0LCB0ZXh0KTtcbiAgICAgIHNjb3Jlcy5wdXNoKHsgbmFtZSwgc2NvcmUgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSBjb21iaW5lZCBzY29yZSBkZXNjZW5kaW5nXG4gICAgc2NvcmVzLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUuY29tYmluZWRTY29yZSAtIGEuc2NvcmUuY29tYmluZWRTY29yZSk7XG5cbiAgICByZXR1cm4gc2NvcmVzLnNsaWNlKDAsIHRvcEspO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3Qga2V5IHRlcm1zIGZyb20gdGV4dCBiYXNlZCBvbiBlbnRyb3B5IGNvbnRyaWJ1dGlvblxuICAgKlxuICAgKiBUZXJtcyB0aGF0IGNvbnRyaWJ1dGUgbW9zdCB0byBlbnRyb3B5IGFyZSBsaWtlbHkgaW1wb3J0YW50XG4gICAqL1xuICBwdWJsaWMgZXh0cmFjdEtleVRlcm1zKHRleHQ6IHN0cmluZywgdG9wSzogbnVtYmVyID0gMTApOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdG9rZW5zID0gQXJyYXkuZnJvbSh0aGlzLmNsZWFuQW5kVG9rZW5pemUodGV4dCkpO1xuXG4gICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgdG9rZW4gZnJlcXVlbmNpZXNcbiAgICBjb25zdCBmcmVxdWVuY2llcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICAgIGZyZXF1ZW5jaWVzLnNldCh0b2tlbiwgKGZyZXF1ZW5jaWVzLmdldCh0b2tlbikgfHwgMCkgKyAxKTtcbiAgICB9XG5cbiAgICAvLyBDYWxjdWxhdGUgZW50cm9weSBjb250cmlidXRpb24gZm9yIGVhY2ggdW5pcXVlIHRva2VuXG4gICAgY29uc3QgdG90YWxUb2tlbnMgPSB0b2tlbnMubGVuZ3RoO1xuICAgIGNvbnN0IGNvbnRyaWJ1dGlvbnM6IEFycmF5PHsgdG9rZW46IHN0cmluZzsgY29udHJpYnV0aW9uOiBudW1iZXIgfT4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW3Rva2VuLCBjb3VudF0gb2YgZnJlcXVlbmNpZXMuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBwcm9iYWJpbGl0eSA9IGNvdW50IC8gdG90YWxUb2tlbnM7XG4gICAgICBjb25zdCBjb250cmlidXRpb24gPSAtcHJvYmFiaWxpdHkgKiBNYXRoLmxvZzIocHJvYmFiaWxpdHkpO1xuICAgICAgY29udHJpYnV0aW9ucy5wdXNoKHsgdG9rZW4sIGNvbnRyaWJ1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IGNvbnRyaWJ1dGlvbiBkZXNjZW5kaW5nXG4gICAgY29udHJpYnV0aW9ucy5zb3J0KChhLCBiKSA9PiBiLmNvbnRyaWJ1dGlvbiAtIGEuY29udHJpYnV0aW9uKTtcblxuICAgIHJldHVybiBjb250cmlidXRpb25zLnNsaWNlKDAsIHRvcEspLm1hcChjID0+IGMudG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByZXN1bHQgdG8gY2FjaGUgd2l0aCBMUlUgZXZpY3Rpb25cbiAgICovXG4gIHByaXZhdGUgYWRkVG9DYWNoZShrZXk6IHN0cmluZywgcmVzdWx0OiBTY29yaW5nUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXZpY3RcbiAgICBpZiAodGhpcy5jYWNoZS5zaXplID49IHRoaXMuY29uZmlnLm1heENhY2hlU2l6ZSAmJiAhdGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgLy8gRmluZCBsZWFzdCByZWNlbnRseSB1c2VkIGVudHJ5XG4gICAgICBsZXQgbHJ1S2V5OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgIGxldCBvbGRlc3RBY2Nlc3MgPSBub3c7XG5cbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICAgIGlmICh2Lmxhc3RBY2Nlc3NlZCA8IG9sZGVzdEFjY2Vzcykge1xuICAgICAgICAgIG9sZGVzdEFjY2VzcyA9IHYubGFzdEFjY2Vzc2VkO1xuICAgICAgICAgIGxydUtleSA9IGs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGxydUtleSkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShscnVLZXkpO1xuICAgICAgICBjb25zdCBpZHggPSB0aGlzLmNhY2hlQWNjZXNzT3JkZXIuaW5kZXhPZihscnVLZXkpO1xuICAgICAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgICAgICB0aGlzLmNhY2hlQWNjZXNzT3JkZXIuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdFdmljdGVkIExSVSBjYWNoZSBlbnRyeScsIHsga2V5OiBscnVLZXksIGNhY2hlU2l6ZTogdGhpcy5jYWNoZS5zaXplIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCBuZXcgZW50cnlcbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHtcbiAgICAgIHJlc3VsdCxcbiAgICAgIHRpbWVzdGFtcDogbm93LFxuICAgICAgbGFzdEFjY2Vzc2VkOiBub3dcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUFjY2Vzc09yZGVyKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFjY2VzcyBvcmRlciBmb3IgTFJVIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjY2Vzc09yZGVyKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5jYWNoZUFjY2Vzc09yZGVyLmluZGV4T2Yoa2V5KTtcbiAgICBpZiAoaWR4ID4gLTEpIHtcbiAgICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5zcGxpY2UoaWR4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5jYWNoZUFjY2Vzc09yZGVyLnB1c2goa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiBleHBpcmVkIGNhY2hlIGVudHJpZXNcbiAgICovXG4gIHByaXZhdGUgY2xlYW5FeHBpcmVkQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmNhY2hlLmVudHJpZXMoKSkge1xuICAgICAgaWYgKG5vdyAtIHZhbHVlLnRpbWVzdGFtcCA+IHRoaXMuY29uZmlnLmNhY2hlRXhwaXJ5KSB7XG4gICAgICAgIHRoaXMuY2FjaGUuZGVsZXRlKGtleSk7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5pbmRleE9mKGtleSk7XG4gICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgIHRoaXMuY2FjaGVBY2Nlc3NPcmRlci5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbW92ZWQgPiAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NsZWFuZWQgZXhwaXJlZCBjYWNoZSBlbnRyaWVzJywgeyByZW1vdmVkLCByZW1haW5pbmc6IHRoaXMuY2FjaGUuc2l6ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGNhY2hlXG4gICAqL1xuICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5jYWNoZUFjY2Vzc09yZGVyID0gW107XG4gICAgbG9nZ2VyLmRlYnVnKCdOTFAgc2NvcmluZyBjYWNoZSBjbGVhcmVkJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICovXG4gIHB1YmxpYyBnZXRDYWNoZVN0YXRzKCk6IHsgc2l6ZTogbnVtYmVyOyBvbGRlc3RFbnRyeTogbnVtYmVyIHwgbnVsbCB9IHtcbiAgICBsZXQgb2xkZXN0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5jYWNoZS52YWx1ZXMoKSkge1xuICAgICAgaWYgKG9sZGVzdCA9PT0gbnVsbCB8fCBlbnRyeS50aW1lc3RhbXAgPCBvbGRlc3QpIHtcbiAgICAgICAgb2xkZXN0ID0gZW50cnkudGltZXN0YW1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBvbGRlc3RFbnRyeTogb2xkZXN0XG4gICAgfTtcbiAgfVxufSJdfQ==
|
|
@@ -20,6 +20,11 @@ export declare class PortfolioManager {
|
|
|
20
20
|
* Get the directory for a specific element type
|
|
21
21
|
*/
|
|
22
22
|
getElementDir(type: ElementType): string;
|
|
23
|
+
/**
|
|
24
|
+
* Get the file extension for a specific element type
|
|
25
|
+
* FIX (#1213): Expose ELEMENT_FILE_EXTENSIONS mapping for correct extension display
|
|
26
|
+
*/
|
|
27
|
+
getFileExtension(type: ElementType): string;
|
|
23
28
|
/**
|
|
24
29
|
* Initialize the portfolio directory structure
|
|
25
30
|
* Uses locking to prevent race conditions during concurrent initialization
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PortfolioManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/PortfolioManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmB1D,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA8B;IAClE,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;WA4BO,WAAW,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,gBAAgB;IAiBrE;;OAEG;IACI,UAAU,IAAI,MAAM;IAI3B;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAI/C;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxC;;OAEG;YACW,qBAAqB;IAiDnC;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC;;;OAGG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgD/C;;OAEG;IACU,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqC/D;;OAEG;IACI,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IA0ClE;;OAEG;IACU,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjF;;OAEG;IACI,oBAAoB,IAAI,MAAM;IAIrC;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAWlE;;;OAGG;YACW,8BAA8B;CA+D7C"}
|
|
1
|
+
{"version":3,"file":"PortfolioManager.d.ts","sourceRoot":"","sources":["../../src/portfolio/PortfolioManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmB1D,OAAO,EAAE,WAAW,EAAE,CAAC;AACvB,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAC1C,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAS;IAC1C,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAA8B;IAClE,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO;WA4BO,WAAW,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,gBAAgB;IAiBrE;;OAEG;IACI,UAAU,IAAI,MAAM;IAI3B;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAI/C;;;OAGG;IACI,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAIlD;;;OAGG;IACU,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBxC;;OAEG;YACW,qBAAqB;IAiDnC;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC;;;OAGG;IACI,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgD/C;;OAEG;IACU,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAqC/D;;OAEG;IACI,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IA0ClE;;OAEG;IACU,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASjF;;OAEG;IACI,oBAAoB,IAAI,MAAM;IAIrC;;OAEG;IACU,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAUlD;;OAEG;IACU,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAWlE;;;OAGG;YACW,8BAA8B;CA+D7C"}
|