@dollhousemcp/mcp-server 1.9.14 → 1.9.16
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 +15 -0
- package/README.github.md +51 -13
- package/README.md.backup +51 -13
- package/dist/cache/CollectionCache.js +2 -2
- package/dist/collection/CollectionIndexManager.js +3 -3
- package/dist/config/ConfigManager.d.ts +1 -1
- package/dist/config/ConfigManager.js +2 -2
- 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 +4 -4
- 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.js +15 -15
- 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.js +2 -2
- 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.js +2 -2
- package/dist/security/tokenManager.js +10 -10
- package/dist/security/validators/unicodeValidator.d.ts.map +1 -1
- package/dist/security/validators/unicodeValidator.js +5 -2
- package/dist/security/yamlValidator.js +3 -3
- package/dist/server/resources/CapabilityIndexResource.d.ts +64 -0
- package/dist/server/resources/CapabilityIndexResource.d.ts.map +1 -0
- package/dist/server/resources/CapabilityIndexResource.js +176 -0
- 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/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/logger.js +3 -3
- package/dist/utils/searchUtils.js +2 -2
- package/dist/utils/version.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.9.15] - 2025-10-01
|
|
4
|
+
|
|
5
|
+
Security patch: Zero-width Unicode bypass vulnerability + SonarCloud cleanup
|
|
6
|
+
|
|
7
|
+
SECURITY FIX [HIGH]:
|
|
8
|
+
- Block zero-width Unicode characters in metadata validation (#1228, #1229)
|
|
9
|
+
- Prevents steganography and homograph attacks
|
|
10
|
+
|
|
11
|
+
CODE QUALITY:
|
|
12
|
+
- 228+ SonarCloud issues resolved (#1220-1224)
|
|
13
|
+
- 199 security hotspots evaluated (all safe)
|
|
14
|
+
- Number.parseInt modernization, String.replaceAll updates
|
|
15
|
+
|
|
16
|
+
All production security concerns resolved.
|
|
17
|
+
|
|
3
18
|
## [1.9.14] - 2025-09-30
|
|
4
19
|
|
|
5
20
|
### Fixed
|
package/README.github.md
CHANGED
|
@@ -873,6 +873,57 @@ For detailed guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
873
873
|
|
|
874
874
|
## 🏷️ Version History
|
|
875
875
|
|
|
876
|
+
### v1.9.16 - October 3, 2025
|
|
877
|
+
|
|
878
|
+
**Patch Release**: Platform-agnostic MCP client documentation + SonarCloud code quality (19 issues)
|
|
879
|
+
|
|
880
|
+
#### 📚 Documentation
|
|
881
|
+
- **Platform-Agnostic Documentation** - Updated all documentation to reflect compatibility with ANY MCP client (#1236, #1237)
|
|
882
|
+
- Added "MCP Client Compatibility" section explicitly stating stdio transport compatibility
|
|
883
|
+
- Listed Claude Desktop, Claude Code, Gemini, and other MCP clients as supported platforms
|
|
884
|
+
- Updated all "Configure Claude Desktop" headers to "Configure Your MCP Client"
|
|
885
|
+
- Changed "Claude Desktop integration" to "MCP client integration" throughout
|
|
886
|
+
- New comprehensive guide: `docs/guides/MCP_CLIENT_SETUP.md`
|
|
887
|
+
- **Workflow Documentation** - Added comprehensive workflow examples for efficient issue handling (#1235)
|
|
888
|
+
|
|
889
|
+
#### 🧹 Code Quality
|
|
890
|
+
- **SonarCloud S7723** - Array constructor modernization (15 issues) (#1233)
|
|
891
|
+
- **SonarCloud S7758** - String method modernization (4 fixed, 2 false positives) (#1234)
|
|
892
|
+
- Removed temporary SonarCloud utility scripts (#1232)
|
|
893
|
+
|
|
894
|
+
#### 📊 Impact
|
|
895
|
+
- ✅ Removes artificial barrier for Gemini and other MCP client users
|
|
896
|
+
- ✅ 19 SonarCloud issues resolved
|
|
897
|
+
- ✅ Maintains Claude Desktop as primary example while being inclusive of all MCP clients
|
|
898
|
+
|
|
899
|
+
---
|
|
900
|
+
|
|
901
|
+
### v1.9.15 - October 1, 2025
|
|
902
|
+
|
|
903
|
+
**Security Patch**: Zero-width Unicode bypass vulnerability + SonarCloud cleanup
|
|
904
|
+
|
|
905
|
+
#### 🔒 Security Fix [HIGH]
|
|
906
|
+
- **Zero-width Unicode bypass vulnerability** - Restored Unicode security validation (#1228, #1229)
|
|
907
|
+
- Blocks zero-width characters (U+200B-U+200F, U+FEFF) in metadata validation
|
|
908
|
+
- Prevents steganography and homograph attacks
|
|
909
|
+
- Fixed `validateContent` bypass in DefaultElementProvider
|
|
910
|
+
- Restored security validation chain through ContentValidator and UnicodeValidator
|
|
911
|
+
|
|
912
|
+
#### 🧹 Code Quality
|
|
913
|
+
- **228+ SonarCloud issues resolved** across 5 issues (#1220-1224):
|
|
914
|
+
- S7773: Modernized Number parsing methods (90 issues) - `parseInt()` → `Number.parseInt()`
|
|
915
|
+
- S7781: String.replaceAll modernization (134 issues) - `.replace(/g)` → `.replaceAll()`
|
|
916
|
+
- MEDIUM severity fixes (4 issues) - Object literals, loop counters, Promise types
|
|
917
|
+
- False positives marked (11 issues) - Test-only patterns properly categorized
|
|
918
|
+
- **199 security hotspots evaluated** - All marked SAFE, zero production concerns (#1219)
|
|
919
|
+
- Math.random(), MD5, PATH usage validated for non-security contexts
|
|
920
|
+
- Comprehensive documentation of safe patterns
|
|
921
|
+
|
|
922
|
+
#### 📊 Impact
|
|
923
|
+
- ✅ 1 HIGH severity security vulnerability fixed
|
|
924
|
+
- ✅ All production security concerns resolved
|
|
925
|
+
- ✅ Test coverage maintained at >96%
|
|
926
|
+
|
|
876
927
|
### v1.9.14 - September 30, 2025
|
|
877
928
|
|
|
878
929
|
**Bug Fixes**: ElementFormatter and portfolio search improvements
|
|
@@ -882,23 +933,10 @@ For detailed guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
882
933
|
- SecureYamlParser now properly respects `validateContent: false` option
|
|
883
934
|
- ElementFormatter uses `validateContent: false` for all YAML parsing (5 locations)
|
|
884
935
|
- Local trusted files can bypass content scanning while maintaining security for untrusted sources
|
|
885
|
-
- Improved memory name generation: derives from filenames instead of auto-generated IDs
|
|
886
|
-
- Example: `sonarcloud-rules-reference` instead of `mem_1759077319164_w9m9fk56y`
|
|
887
936
|
|
|
888
937
|
- **Portfolio Search File Extension Display** - Fixed incorrect extension display (#1213, #1215)
|
|
889
938
|
- Portfolio search now shows correct file extensions based on element type
|
|
890
939
|
- Memories display `.yaml` extension, other elements show `.md` extension
|
|
891
|
-
- Added `getFileExtension()` public method to PortfolioManager
|
|
892
|
-
- No breaking changes, display-only fix
|
|
893
|
-
|
|
894
|
-
#### 🛠️ Code Quality
|
|
895
|
-
- Fixed 10 SonarCloud issues in Docker test files:
|
|
896
|
-
- S7018: Sorted apt packages alphabetically
|
|
897
|
-
- S7031: Merged consecutive RUN instructions
|
|
898
|
-
- S7772: Added `node:` prefix for built-in modules (4 occurrences)
|
|
899
|
-
- S2486: Added proper error logging for JSON parse exceptions
|
|
900
|
-
- S7780: Used String.raw for regex patterns (2 occurrences)
|
|
901
|
-
- Added comprehensive test coverage for portfolio search file extensions
|
|
902
940
|
|
|
903
941
|
#### 📚 Documentation
|
|
904
942
|
- Added SONARCLOUD_QUERY_PROCEDURE.md - Critical guide for querying SonarCloud correctly
|
package/README.md.backup
CHANGED
|
@@ -873,6 +873,57 @@ For detailed guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
873
873
|
|
|
874
874
|
## 🏷️ Version History
|
|
875
875
|
|
|
876
|
+
### v1.9.16 - October 3, 2025
|
|
877
|
+
|
|
878
|
+
**Patch Release**: Platform-agnostic MCP client documentation + SonarCloud code quality (19 issues)
|
|
879
|
+
|
|
880
|
+
#### 📚 Documentation
|
|
881
|
+
- **Platform-Agnostic Documentation** - Updated all documentation to reflect compatibility with ANY MCP client (#1236, #1237)
|
|
882
|
+
- Added "MCP Client Compatibility" section explicitly stating stdio transport compatibility
|
|
883
|
+
- Listed Claude Desktop, Claude Code, Gemini, and other MCP clients as supported platforms
|
|
884
|
+
- Updated all "Configure Claude Desktop" headers to "Configure Your MCP Client"
|
|
885
|
+
- Changed "Claude Desktop integration" to "MCP client integration" throughout
|
|
886
|
+
- New comprehensive guide: `docs/guides/MCP_CLIENT_SETUP.md`
|
|
887
|
+
- **Workflow Documentation** - Added comprehensive workflow examples for efficient issue handling (#1235)
|
|
888
|
+
|
|
889
|
+
#### 🧹 Code Quality
|
|
890
|
+
- **SonarCloud S7723** - Array constructor modernization (15 issues) (#1233)
|
|
891
|
+
- **SonarCloud S7758** - String method modernization (4 fixed, 2 false positives) (#1234)
|
|
892
|
+
- Removed temporary SonarCloud utility scripts (#1232)
|
|
893
|
+
|
|
894
|
+
#### 📊 Impact
|
|
895
|
+
- ✅ Removes artificial barrier for Gemini and other MCP client users
|
|
896
|
+
- ✅ 19 SonarCloud issues resolved
|
|
897
|
+
- ✅ Maintains Claude Desktop as primary example while being inclusive of all MCP clients
|
|
898
|
+
|
|
899
|
+
---
|
|
900
|
+
|
|
901
|
+
### v1.9.15 - October 1, 2025
|
|
902
|
+
|
|
903
|
+
**Security Patch**: Zero-width Unicode bypass vulnerability + SonarCloud cleanup
|
|
904
|
+
|
|
905
|
+
#### 🔒 Security Fix [HIGH]
|
|
906
|
+
- **Zero-width Unicode bypass vulnerability** - Restored Unicode security validation (#1228, #1229)
|
|
907
|
+
- Blocks zero-width characters (U+200B-U+200F, U+FEFF) in metadata validation
|
|
908
|
+
- Prevents steganography and homograph attacks
|
|
909
|
+
- Fixed `validateContent` bypass in DefaultElementProvider
|
|
910
|
+
- Restored security validation chain through ContentValidator and UnicodeValidator
|
|
911
|
+
|
|
912
|
+
#### 🧹 Code Quality
|
|
913
|
+
- **228+ SonarCloud issues resolved** across 5 issues (#1220-1224):
|
|
914
|
+
- S7773: Modernized Number parsing methods (90 issues) - `parseInt()` → `Number.parseInt()`
|
|
915
|
+
- S7781: String.replaceAll modernization (134 issues) - `.replace(/g)` → `.replaceAll()`
|
|
916
|
+
- MEDIUM severity fixes (4 issues) - Object literals, loop counters, Promise types
|
|
917
|
+
- False positives marked (11 issues) - Test-only patterns properly categorized
|
|
918
|
+
- **199 security hotspots evaluated** - All marked SAFE, zero production concerns (#1219)
|
|
919
|
+
- Math.random(), MD5, PATH usage validated for non-security contexts
|
|
920
|
+
- Comprehensive documentation of safe patterns
|
|
921
|
+
|
|
922
|
+
#### 📊 Impact
|
|
923
|
+
- ✅ 1 HIGH severity security vulnerability fixed
|
|
924
|
+
- ✅ All production security concerns resolved
|
|
925
|
+
- ✅ Test coverage maintained at >96%
|
|
926
|
+
|
|
876
927
|
### v1.9.14 - September 30, 2025
|
|
877
928
|
|
|
878
929
|
**Bug Fixes**: ElementFormatter and portfolio search improvements
|
|
@@ -882,23 +933,10 @@ For detailed guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
|
882
933
|
- SecureYamlParser now properly respects `validateContent: false` option
|
|
883
934
|
- ElementFormatter uses `validateContent: false` for all YAML parsing (5 locations)
|
|
884
935
|
- Local trusted files can bypass content scanning while maintaining security for untrusted sources
|
|
885
|
-
- Improved memory name generation: derives from filenames instead of auto-generated IDs
|
|
886
|
-
- Example: `sonarcloud-rules-reference` instead of `mem_1759077319164_w9m9fk56y`
|
|
887
936
|
|
|
888
937
|
- **Portfolio Search File Extension Display** - Fixed incorrect extension display (#1213, #1215)
|
|
889
938
|
- Portfolio search now shows correct file extensions based on element type
|
|
890
939
|
- Memories display `.yaml` extension, other elements show `.md` extension
|
|
891
|
-
- Added `getFileExtension()` public method to PortfolioManager
|
|
892
|
-
- No breaking changes, display-only fix
|
|
893
|
-
|
|
894
|
-
#### 🛠️ Code Quality
|
|
895
|
-
- Fixed 10 SonarCloud issues in Docker test files:
|
|
896
|
-
- S7018: Sorted apt packages alphabetically
|
|
897
|
-
- S7031: Merged consecutive RUN instructions
|
|
898
|
-
- S7772: Added `node:` prefix for built-in modules (4 occurrences)
|
|
899
|
-
- S2486: Added proper error logging for JSON parse exceptions
|
|
900
|
-
- S7780: Used String.raw for regex patterns (2 occurrences)
|
|
901
|
-
- Added comprehensive test coverage for portfolio search file extensions
|
|
902
940
|
|
|
903
941
|
#### 📚 Documentation
|
|
904
942
|
- Added SONARCLOUD_QUERY_PROCEDURE.md - Critical guide for querying SonarCloud correctly
|
|
@@ -119,7 +119,7 @@ export class CollectionCache {
|
|
|
119
119
|
*/
|
|
120
120
|
normalizeSearchTerm(term) {
|
|
121
121
|
return term.toLowerCase()
|
|
122
|
-
.
|
|
122
|
+
.replaceAll(/[-_\s]+/g, ' ') // Convert dashes, underscores to spaces
|
|
123
123
|
.replace(/\.md$/, '') // Remove .md extension
|
|
124
124
|
.trim();
|
|
125
125
|
}
|
|
@@ -169,4 +169,4 @@ export class CollectionCache {
|
|
|
169
169
|
};
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsWUFBWSxPQUFnQjtRQUMxQiwrRUFBK0U7UUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENB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QUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBsYXN0X21vZGlmaWVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25DYWNoZUVudHJ5IHtcbiAgaXRlbXM6IENvbGxlY3Rpb25JdGVtW107XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBldGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0aGF0IHN1cHBvcnRzIG9mZmxpbmUgYnJvd3NpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9UVExfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3VycyBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICBcbiAgY29uc3RydWN0b3IoYmFzZURpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFyYW1ldGVyIG9yIGRlZmF1bHRcbiAgICBjb25zdCBlbnZDYWNoZURpciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9DQUNIRV9ESVI7XG4gICAgaWYgKGVudkNhY2hlRGlyKSB7XG4gICAgICB0aGlzLmNhY2hlRGlyID0gZW52Q2FjaGVEaXI7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb25DYWNoZTogVXNpbmcgZW52aXJvbm1lbnQgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCYXNlRGlyID0gYmFzZURpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihkZWZhdWx0QmFzZURpciwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbkNhY2hlOiBVc2luZyBkZWZhdWx0IGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlRmlsZSA9IHBhdGguam9pbih0aGlzLmNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5jYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmNhY2hlRmlsZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gdGhpcy5DQUNIRV9UVExfTVMpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIGV4cGlyZWQsIHdpbGwgcmVmcmVzaCBmcm9tIEdpdEh1YicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgJHtjYWNoZS5pdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gbG9hZCBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjb2xsZWN0aW9uIGRhdGEgdG8gcGVyc2lzdGVudCBjYWNoZVxuICAgKi9cbiAgYXN5bmMgc2F2ZUNhY2hlKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdLCBldGFnPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ2FjaGVEaXIoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2FjaGVFbnRyeTogQ29sbGVjdGlvbkNhY2hlRW50cnkgPSB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGV0YWdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShjYWNoZUVudHJ5LCBudWxsLCAyKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNhY2hlRmlsZSwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBTYXZlZCAke2l0ZW1zLmxlbmd0aH0gaXRlbXMgdG8gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBjYWNoZSB3cml0ZSBvcGVyYXRpb25zXG4gICAgICBsb2dnZXIuZGVidWcoJ1NlY3VyaXR5IGF1ZGl0OiBDYWNoZSB3cml0ZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgXG4gICAgICAvLyBMb2cgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgZmlsZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggJHtpdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNhdmUgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGluZyBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlYXJjaCBjYWNoZWQgY29sbGVjdGlvbiBpdGVtcyB3aXRoIGZ1enp5IG1hdGNoaW5nXG4gICAqL1xuICBhc3luYyBzZWFyY2hDYWNoZShxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gU2VhcmNoIGluIGZpbGVuYW1lIGFuZCBwYXRoIHdpdGggbm9ybWFsaXphdGlvblxuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ucGF0aCk7XG4gICAgICBcbiAgICAgIHJldHVybiBub3JtYWxpemVkTmFtZS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8IFxuICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICAgICAoaXRlbS5jb250ZW50ICYmIHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLmNvbnRlbnQpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogTm9ybWFsaXplIHNlYXJjaCB0ZXJtcyBmb3IgYmV0dGVyIG1hdGNoaW5nIChoYW5kbGVzIHNwYWNlcywgZGFzaGVzLCBldGMuKVxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0udG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1stX1xcc10rL2csICcgJykgIC8vIENvbnZlcnQgZGFzaGVzLCB1bmRlcnNjb3JlcyB0byBzcGFjZXNcbiAgICAgIC5yZXBsYWNlKC9cXC5tZCQvLCAnJykgICAgICAgLy8gUmVtb3ZlIC5tZCBleHRlbnNpb25cbiAgICAgIC50cmltKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXMgYnkgdHlwZS9wYXRoXG4gICAqL1xuICBhc3luYyBnZXRJdGVtc0J5UGF0aChwYXRoUHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3Rpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXRoLnN0YXJ0c1dpdGgocGF0aFByZWZpeCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICAgKi9cbiAgYXN5bmMgaXNDYWNoZVZhbGlkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICByZXR1cm4gY2FjaGUgIT09IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLmNhY2hlRmlsZSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgY2xlYXJlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY2xlYXIgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdHMgZm9yIGRlYnVnZ2luZ1xuICAgKi9cbiAgYXN5bmMgZ2V0Q2FjaGVTdGF0cygpOiBQcm9taXNlPHsgaXRlbUNvdW50OiBudW1iZXI7IGNhY2hlQWdlOiBudW1iZXI7IGlzVmFsaWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4geyBpdGVtQ291bnQ6IDAsIGNhY2hlQWdlOiAwLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbUNvdW50OiBjYWNoZS5pdGVtcy5sZW5ndGgsXG4gICAgICBjYWNoZUFnZTogRGF0ZS5ub3coKSAtIGNhY2hlLnRpbWVzdGFtcCxcbiAgICAgIGlzVmFsaWQ6IERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPD0gdGhpcy5DQUNIRV9UVExfTVNcbiAgICB9O1xuICB9XG59Il19
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFnQmpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDbEIsUUFBUSxDQUFTO0lBQ2pCLFNBQVMsQ0FBUztJQUNULFlBQVksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxnQ0FBZ0M7SUFFckYsWUFBWSxPQUFnQjtRQUMxQiwrRUFBK0U7UUFDL0UsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNwRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxLQUFLLENBQUMsdURBQXVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENB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QUcsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU87WUFDTCxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVM7WUFDdEMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZO1NBQzNELENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0byBzdXBwb3J0IG9mZmxpbmUvYW5vbnltb3VzIGJyb3dzaW5nXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBQYXRoVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvcGF0aFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JdGVtIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBsYXN0X21vZGlmaWVkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25DYWNoZUVudHJ5IHtcbiAgaXRlbXM6IENvbGxlY3Rpb25JdGVtW107XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xuICBldGFnPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlbnQgY2FjaGUgZm9yIGNvbGxlY3Rpb24gZGF0YSB0aGF0IHN1cHBvcnRzIG9mZmxpbmUgYnJvd3NpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25DYWNoZSB7XG4gIHByaXZhdGUgY2FjaGVEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBjYWNoZUZpbGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9UVExfTVMgPSAyNCAqIDYwICogNjAgKiAxMDAwOyAvLyAyNCBob3VycyBmb3IgY29sbGVjdGlvbiBjYWNoZVxuICBcbiAgY29uc3RydWN0b3IoYmFzZURpcj86IHN0cmluZykge1xuICAgIC8vIFVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzZXQsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8gcGFyYW1ldGVyIG9yIGRlZmF1bHRcbiAgICBjb25zdCBlbnZDYWNoZURpciA9IHByb2Nlc3MuZW52LkRPTExIT1VTRV9DQUNIRV9ESVI7XG4gICAgaWYgKGVudkNhY2hlRGlyKSB7XG4gICAgICB0aGlzLmNhY2hlRGlyID0gZW52Q2FjaGVEaXI7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbGxlY3Rpb25DYWNoZTogVXNpbmcgZW52aXJvbm1lbnQgY2FjaGUgZGlyZWN0b3J5OiAke3RoaXMuY2FjaGVEaXJ9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCYXNlRGlyID0gYmFzZURpciB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgdGhpcy5jYWNoZURpciA9IHBhdGguam9pbihkZWZhdWx0QmFzZURpciwgJy5kb2xsaG91c2VtY3AnLCAnY2FjaGUnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ29sbGVjdGlvbkNhY2hlOiBVc2luZyBkZWZhdWx0IGNhY2hlIGRpcmVjdG9yeTogJHt0aGlzLmNhY2hlRGlyfWApO1xuICAgIH1cbiAgICB0aGlzLmNhY2hlRmlsZSA9IHBhdGguam9pbih0aGlzLmNhY2hlRGlyLCAnY29sbGVjdGlvbi1jYWNoZS5qc29uJyk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNhY2hlIGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlbnN1cmVDYWNoZURpcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMubWtkaXIodGhpcy5jYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBjYWNoZSBkaXJlY3Rvcnk6ICR7ZXJyb3J9YCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNvbGxlY3Rpb24gZGF0YSBmcm9tIHBlcnNpc3RlbnQgY2FjaGVcbiAgICovXG4gIGFzeW5jIGxvYWRDYWNoZSgpOiBQcm9taXNlPENvbGxlY3Rpb25DYWNoZUVudHJ5IHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBmaWxlIHBhdGggKGJhc2ljIHNlY3VyaXR5IGNoZWNrKVxuICAgICAgaWYgKHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCcuLicpIHx8IHRoaXMuY2FjaGVGaWxlLmluY2x1ZGVzKCdcXDAnKSkge1xuICAgICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGlvblxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1BBVEhfVFJBVkVSU0FMX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnQ29sbGVjdGlvbkNhY2hlLmxvYWRDYWNoZScsXG4gICAgICAgICAgZGV0YWlsczogYFBvdGVudGlhbCBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0IGRldGVjdGVkIGluIGNhY2hlIGZpbGUgcGF0aDogJHt0aGlzLmNhY2hlRmlsZS5zdWJzdHJpbmcoMCwgMTAwKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBsb2dnZXIud2FybignSW52YWxpZCBjYWNoZSBmaWxlIHBhdGgsIHNraXBwaW5nIGNhY2hlIGxvYWQnKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLmNhY2hlRmlsZSwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNhY2hlOiBDb2xsZWN0aW9uQ2FjaGVFbnRyeSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gY2FjaGUudGltZXN0YW1wID4gdGhpcy5DQUNIRV9UVExfTVMpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGNhY2hlIGV4cGlyZWQsIHdpbGwgcmVmcmVzaCBmcm9tIEdpdEh1YicpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBMb2FkZWQgJHtjYWNoZS5pdGVtcy5sZW5ndGh9IGl0ZW1zIGZyb20gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgcmV0dXJuIGNhY2hlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gbG9hZCBjb2xsZWN0aW9uIGNhY2hlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjb2xsZWN0aW9uIGRhdGEgdG8gcGVyc2lzdGVudCBjYWNoZVxuICAgKi9cbiAgYXN5bmMgc2F2ZUNhY2hlKGl0ZW1zOiBDb2xsZWN0aW9uSXRlbVtdLCBldGFnPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZW5zdXJlQ2FjaGVEaXIoKTtcbiAgICAgIFxuICAgICAgY29uc3QgY2FjaGVFbnRyeTogQ29sbGVjdGlvbkNhY2hlRW50cnkgPSB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGV0YWdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShjYWNoZUVudHJ5LCBudWxsLCAyKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLmNhY2hlRmlsZSwgZGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKGBTYXZlZCAke2l0ZW1zLmxlbmd0aH0gaXRlbXMgdG8gY29sbGVjdGlvbiBjYWNoZWApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IEFkZCBhdWRpdCBsb2dnaW5nIGZvciBjYWNoZSB3cml0ZSBvcGVyYXRpb25zXG4gICAgICBsb2dnZXIuZGVidWcoJ1NlY3VyaXR5IGF1ZGl0OiBDYWNoZSB3cml0ZSBvcGVyYXRpb24gY29tcGxldGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgXG4gICAgICAvLyBMb2cgb3BlcmF0aW9uIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgQ2FjaGUgZmlsZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggJHtpdGVtcy5sZW5ndGh9IGl0ZW1zYCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHNhdmUgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGluZyBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNlYXJjaCBjYWNoZWQgY29sbGVjdGlvbiBpdGVtcyB3aXRoIGZ1enp5IG1hdGNoaW5nXG4gICAqL1xuICBhc3luYyBzZWFyY2hDYWNoZShxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxDb2xsZWN0aW9uSXRlbVtdPiB7XG4gICAgY29uc3QgY2FjaGUgPSBhd2FpdCB0aGlzLmxvYWRDYWNoZSgpO1xuICAgIGlmICghY2FjaGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKHF1ZXJ5KTtcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgLy8gU2VhcmNoIGluIGZpbGVuYW1lIGFuZCBwYXRoIHdpdGggbm9ybWFsaXphdGlvblxuICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSB0aGlzLm5vcm1hbGl6ZVNlYXJjaFRlcm0oaXRlbS5uYW1lKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gdGhpcy5ub3JtYWxpemVTZWFyY2hUZXJtKGl0ZW0ucGF0aCk7XG4gICAgICBcbiAgICAgIHJldHVybiBub3JtYWxpemVkTmFtZS5pbmNsdWRlcyhub3JtYWxpemVkUXVlcnkpIHx8IFxuICAgICAgICAgICAgIG5vcm1hbGl6ZWRQYXRoLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkgfHxcbiAgICAgICAgICAgICAoaXRlbS5jb250ZW50ICYmIHRoaXMubm9ybWFsaXplU2VhcmNoVGVybShpdGVtLmNvbnRlbnQpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogTm9ybWFsaXplIHNlYXJjaCB0ZXJtcyBmb3IgYmV0dGVyIG1hdGNoaW5nIChoYW5kbGVzIHNwYWNlcywgZGFzaGVzLCBldGMuKVxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVTZWFyY2hUZXJtKHRlcm06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRlcm0udG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2VBbGwoL1stX1xcc10rL2csICcgJykgIC8vIENvbnZlcnQgZGFzaGVzLCB1bmRlcnNjb3JlcyB0byBzcGFjZXNcbiAgICAgIC5yZXBsYWNlKC9cXC5tZCQvLCAnJykgICAgICAgLy8gUmVtb3ZlIC5tZCBleHRlbnNpb25cbiAgICAgIC50cmltKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGVkIGNvbGxlY3Rpb24gaXRlbXMgYnkgdHlwZS9wYXRoXG4gICAqL1xuICBhc3luYyBnZXRJdGVtc0J5UGF0aChwYXRoUHJlZml4OiBzdHJpbmcpOiBQcm9taXNlPENvbGxlY3Rpb25JdGVtW10+IHtcbiAgICBjb25zdCBjYWNoZSA9IGF3YWl0IHRoaXMubG9hZENhY2hlKCk7XG4gICAgaWYgKCFjYWNoZSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2FjaGUuaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wYXRoLnN0YXJ0c1dpdGgocGF0aFByZWZpeCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgZXhpc3RzIGFuZCBpcyB2YWxpZFxuICAgKi9cbiAgYXN5bmMgaXNDYWNoZVZhbGlkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICByZXR1cm4gY2FjaGUgIT09IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciB0aGUgY2FjaGVcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLnVubGluayh0aGlzLmNhY2hlRmlsZSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gY2FjaGUgY2xlYXJlZCcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGYWlsZWQgdG8gY2xlYXIgY29sbGVjdGlvbiBjYWNoZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdHMgZm9yIGRlYnVnZ2luZ1xuICAgKi9cbiAgYXN5bmMgZ2V0Q2FjaGVTdGF0cygpOiBQcm9taXNlPHsgaXRlbUNvdW50OiBudW1iZXI7IGNhY2hlQWdlOiBudW1iZXI7IGlzVmFsaWQ6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUoKTtcbiAgICBpZiAoIWNhY2hlKSB7XG4gICAgICByZXR1cm4geyBpdGVtQ291bnQ6IDAsIGNhY2hlQWdlOiAwLCBpc1ZhbGlkOiBmYWxzZSB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbUNvdW50OiBjYWNoZS5pdGVtcy5sZW5ndGgsXG4gICAgICBjYWNoZUFnZTogRGF0ZS5ub3coKSAtIGNhY2hlLnRpbWVzdGFtcCxcbiAgICAgIGlzVmFsaWQ6IERhdGUubm93KCkgLSBjYWNoZS50aW1lc3RhbXAgPD0gdGhpcy5DQUNIRV9UVExfTVNcbiAgICB9O1xuICB9XG59Il19
|
|
@@ -64,8 +64,8 @@ export class CollectionIndexManager {
|
|
|
64
64
|
// Check environment variable first
|
|
65
65
|
const envTimeout = process.env.COLLECTION_FETCH_TIMEOUT;
|
|
66
66
|
if (envTimeout) {
|
|
67
|
-
const parsed = parseInt(envTimeout, 10);
|
|
68
|
-
if (!isNaN(parsed) && parsed > 0) {
|
|
67
|
+
const parsed = Number.parseInt(envTimeout, 10);
|
|
68
|
+
if (!Number.isNaN(parsed) && parsed > 0) {
|
|
69
69
|
logger.debug(`Using COLLECTION_FETCH_TIMEOUT from environment: ${parsed}ms`);
|
|
70
70
|
return parsed;
|
|
71
71
|
}
|
|
@@ -498,4 +498,4 @@ export class CollectionIndexManager {
|
|
|
498
498
|
}
|
|
499
499
|
}
|
|
500
500
|
}
|
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxvRUFBb0U7SUFDcEUsaUhBQWlIO0lBQ2hHLFNBQVMsR0FBRyxpRUFBaUUsQ0FBQztJQUM5RSxNQUFNLENBQVM7SUFDZixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLENBQVM7SUFDM0IsVUFBVSxDQUFTO0lBRTVCLFdBQVcsR0FBcUMsSUFBSSxDQUFDO0lBQ3JELHdCQUF3QixHQUF5QixJQUFJLENBQUM7SUFDdEQsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFDM0IseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUM5QiwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDeEQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMscUNBQXFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFFcEUsa0NBQWtDO0lBQ2pCLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLDJCQUEyQixHQUFHLElBQUksQ0FBQztJQUNuQywwQkFBMEIsR0FBRyxLQUFLLENBQUM7SUFDbkMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUM3QyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFFakMsWUFBWSxTQUF1QyxFQUFFO1FBQ25ELG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDO1FBQ3ZGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFNLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUVwRiw4RUFBOEU7UUFDOUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLEVBQUU7WUFDakQsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2xCLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsV0FBb0I7UUFDNUMsbUNBQW1DO1FBQ25DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUM7UUFDeEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELE1BQU0sSUFBSSxDQUFDLENBQUM7Z0JBQzdFLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxVQUFVLGlCQUFpQixDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUVELHVDQUF1QztRQUN2QyxPQUFPLFdBQVcsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osSUFBSSxDQUFDO1lBQ0gsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVCLENBQUM7WUFFRCx5REFBeUQ7WUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFFaEQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLHFDQUFxQztnQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO2dCQUV4RCw2REFBNkQ7Z0JBQzdELElBQUksYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQy9CLENBQUM7WUFFRCxtRUFBbUU7WUFDbkUsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO2dCQUM5QyxNQUFNLENBQUMsS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7Z0JBRXJFLGtEQUFrRDtnQkFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ2hDLENBQUM7Z0JBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQixDQUFDO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUM1RSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBRXpCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUV2RixzRUFBc0U7WUFDdEUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQixDQUFDO1lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxZQUFZO1FBQ2hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUU3RSxvQ0FBb0M7WUFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLENBQUMsQ0FBQztnQkFDM0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQixDQUFDO1lBRUQsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRW5DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTlELE9BQU8sR0FBRyxHQUFHLGdCQUFnQixDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ssc0JBQXNCO1FBQzVCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUN2RCxPQUFPO1FBQ1QsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1lBQ2xFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFFekIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRTthQUM1RCxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQzthQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLHdCQUF3QjtRQUNwQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRW5DLG1DQUFtQztZQUNuQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO1lBRWhDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDMUIsSUFBSSxTQUFTLEdBQWlCLElBQUksQ0FBQztRQUVuQyxLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQztnQkFDSCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDaEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoRCxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixLQUFLLGVBQWUsT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlGLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsQ0FBQztnQkFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDM0MsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsU0FBUyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLE9BQU8sR0FBRyxDQUFDLFNBQVMsRUFBRTtvQkFDbEQsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO29CQUN0QyxTQUFTLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXO2lCQUN0QyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxJQUFJLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssbUJBQW1CLENBQUMsT0FBZTtRQUN6QyxpREFBaUQ7UUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRTdFLHVCQUF1QjtRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXhFLHdDQUF3QztRQUN4QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssU0FBUyxDQUFDLEtBQWE7UUFDN0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLG9CQUFvQjtRQUNoQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDO1lBQ0gseUNBQXlDO1lBQ3pDLE1BQU0sT0FBTyxHQUEyQjtnQkFDdEMsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsWUFBWSxFQUFFLGtCQUFrQjtnQkFDaEMsZUFBZSxFQUFFLFVBQVU7YUFDNUIsQ0FBQztZQUVGLGlEQUFpRDtZQUNqRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztZQUNuRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQztZQUMvRCxDQUFDO1lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRTtnQkFDeEMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDOUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUk7YUFDbEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDM0MsT0FBTztnQkFDUCxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDMUIsQ0FBQyxDQUFDO1lBRUgsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXhCLDBCQUEwQjtZQUMxQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO2dCQUM5RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixPQUFPO29CQUNMLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7b0JBQzNCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7b0JBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVk7aUJBQzVDLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLFFBQVEsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUVELE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBcUIsQ0FBQztZQUUzRCwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxTQUFTLENBQUM7WUFFeEUsTUFBTSxDQUFDLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRTtnQkFDcEQsYUFBYSxFQUFFLFNBQVMsQ0FBQyxjQUFjO2dCQUN2QyxPQUFPLEVBQUUsU0FBUyxDQUFDLE9BQU87Z0JBQzFCLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSTthQUNoQixDQUFDLENBQUM7WUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFFakQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFeEIsSUFBSSxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQixDQUFDLEtBQVU7UUFDdkMsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFFRCxJQUFJLE9BQU8sS0FBSyxDQUFDLGNBQWMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBNEU7UUFDcEcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2pCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtZQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7WUFDdEIsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1lBQ3RDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDakMsUUFBUTtTQUNULENBQUM7UUFFRixNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QixNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFO1lBQzdDLE9BQU8sRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDakMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYztZQUM5QyxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssaUJBQWlCLENBQUMsSUFBcUI7UUFDN0MsMENBQTBDO1FBQzFDLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3BDLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsWUFBWTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBOEIsQ0FBQztZQUU3RCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6RCxNQUFNLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ2xELE9BQU87WUFDVCxDQUFDO1lBRUQsK0JBQStCO1lBQy9CLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdELElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN6QyxNQUFNLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7b0JBQzlELE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUUxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUVwQyxNQUFNLENBQUMsS0FBSyxDQUFDLHlDQUF5QyxFQUFFO2dCQUN0RCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87Z0JBQ3ZCLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7Z0JBQzNCLFNBQVM7Z0JBQ1QsYUFBYSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYzthQUMxQyxDQUFDLENBQUM7UUFFTCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUssS0FBYSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU87UUFFOUIsSUFBSSxDQUFDO1lBQ0gsZ0NBQWdDO1lBQ2hDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBRW5FLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV2RCxNQUFNLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JGLHlFQUF5RTtRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssb0JBQW9CO1FBQzFCLElBQUksSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ2pFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUN6RSxPQUFPLG9CQUFvQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztJQUNoRSxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFNUMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDbEUsTUFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRTtnQkFDN0QsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsMEJBQTBCO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxLQUFLLENBQUMsRUFBVTtRQUN0QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYztRQUNwQyxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUUsQ0FBQztZQUMzQixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFVWCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsR0FBRyxFQUFFLENBQUM7Z0JBQ04sUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUMvQixzQkFBc0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCO2dCQUNuRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7YUFDaEQsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFFcEQsT0FBTztZQUNMLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDL0IsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxFQUFFLGlCQUFpQjtZQUM5QyxRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWM7WUFDbkQsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7WUFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQ2hELENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFLLEtBQWEsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCO1FBQzVCLElBQUksSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sbGVjdGlvbiBJbmRleCBNYW5hZ2VyIHdpdGggQmFja2dyb3VuZCBSZWZyZXNoIGFuZCBSb2J1c3QgQ2FjaGluZ1xuICogXG4gKiBUaGlzIG1hbmFnZXIgaW1wbGVtZW50czpcbiAqIC0gMS1ob3VyIFRUTCB3aXRoIGxvY2FsIGZpbGUgY2FjaGluZ1xuICogLSBCYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZyBvcGVyYXRpb25zXG4gKiAtIEV4cG9uZW50aWFsIGJhY2tvZmYgcmV0cnkgbG9naWNcbiAqIC0gQ29uZmlndXJhYmxlIHRpbWVvdXRzIHZpYSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAqIC0gUmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmcgaW4gYmFja2dyb3VuZFxuICogLSBDb21wcmVoZW5zaXZlIGVycm9yIGhhbmRsaW5nIGZvciBwcm9kdWN0aW9uIHVzZVxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBDb2xsZWN0aW9uSW5kZXggfSBmcm9tICcuLi90eXBlcy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB7XG4gIGRhdGE6IENvbGxlY3Rpb25JbmRleDtcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGV0YWc/OiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjaGVja3N1bTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcge1xuICB0dGxNcz86IG51bWJlcjtcbiAgZmV0Y2hUaW1lb3V0TXM/OiBudW1iZXI7XG4gIG1heFJldHJpZXM/OiBudW1iZXI7XG4gIGJhc2VSZXRyeURlbGF5TXM/OiBudW1iZXI7XG4gIG1heFJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgY2FjaGVEaXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIHtcbiAgLy8gVXNlIEdpdEh1YiBQYWdlcyBpbmRleCB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgYnkgd29ya2Zsb3dcbiAgLy8gT2xkIFVSTCB3YXMgc3RhbGU6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Eb2xsaG91c2VNQ1AvY29sbGVjdGlvbi9tYWluL3B1YmxpYy9jb2xsZWN0aW9uLWluZGV4Lmpzb25cbiAgcHJpdmF0ZSByZWFkb25seSBJTkRFWF9VUkwgPSAnaHR0cHM6Ly9kb2xsaG91c2VtY3AuZ2l0aHViLmlvL2NvbGxlY3Rpb24vY29sbGVjdGlvbi1pbmRleC5qc29uJztcbiAgcHJpdmF0ZSByZWFkb25seSBUVExfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBGRVRDSF9USU1FT1VUX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJJRVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBCQVNFX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJZX0RFTEFZX01TOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfRklMRTogc3RyaW5nO1xuICBcbiAgcHJpdmF0ZSBjYWNoZWRJbmRleDogQ29sbGVjdGlvbkluZGV4Q2FjaGVFbnRyeSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGJhY2tncm91bmRSZWZyZXNoUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICBwcml2YXRlIGNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmUgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQgPSA1O1xuICBwcml2YXRlIHJlYWRvbmx5IENJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TID0gNSAqIDYwICogMTAwMDsgLy8gNSBtaW51dGVzXG4gIHByaXZhdGUgcmVhZG9ubHkgUkVGUkVTSF9USFJFU0hPTEQgPSAwLjg7IC8vIFJlZnJlc2ggd2hlbiA4MCUgb2YgVFRMIGhhcyBwYXNzZWRcbiAgcHJpdmF0ZSByZWFkb25seSBKSVRURVJfRkFDVE9SID0gMC4yNTsgLy8gwrEyNSUgcmFuZG9tbmVzcyBmb3Igaml0dGVyXG4gIFxuICAvLyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gY29uc3RhbnRzXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9UVExfTVMgPSA2MCAqIDYwICogMTAwMDsgLy8gMSBob3VyXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUyA9IDMwMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfRkVUQ0hfVElNRU9VVF9NUyA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHJlYWRvbmx5IENIRUNLU1VNX0xFTkdUSCA9IDg7XG4gIHByaXZhdGUgcmVhZG9ubHkgSlNPTl9JTkRFTlQgPSAyO1xuICBcbiAgY29uc3RydWN0b3IoY29uZmlnOiBDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyQ29uZmlnID0ge30pIHtcbiAgICAvLyBDb25maWd1cmF0aW9uIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGUgb3ZlcnJpZGVzXG4gICAgdGhpcy5UVExfTVMgPSBjb25maWcudHRsTXMgfHwgdGhpcy5ERUZBVUxUX1RUTF9NUztcbiAgICB0aGlzLkZFVENIX1RJTUVPVVRfTVMgPSB0aGlzLnBhcnNlRmV0Y2hUaW1lb3V0KGNvbmZpZy5mZXRjaFRpbWVvdXRNcyk7XG4gICAgdGhpcy5NQVhfUkVUUklFUyA9IGNvbmZpZy5tYXhSZXRyaWVzIHx8IHRoaXMuREVGQVVMVF9NQVhfUkVUUklFUztcbiAgICB0aGlzLkJBU0VfUkVUUllfREVMQVlfTVMgPSBjb25maWcuYmFzZVJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfQkFTRV9SRVRSWV9ERUxBWV9NUztcbiAgICB0aGlzLk1BWF9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5tYXhSZXRyeURlbGF5TXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSWV9ERUxBWV9NUztcbiAgICBcbiAgICAvLyBDYWNoZSBkaXJlY3RvcnkgLSB1c2Ugfi8uZG9sbGhvdXNlL2NhY2hlL2NvbGxlY3Rpb24taW5kZXguanNvbiBhcyBzcGVjaWZpZWRcbiAgICBjb25zdCBjYWNoZURpciA9IGNvbmZpZy5jYWNoZURpciB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLmRvbGxob3VzZScsICdjYWNoZScpO1xuICAgIHRoaXMuQ0FDSEVfRklMRSA9IHBhdGguam9pbihjYWNoZURpciwgJ2NvbGxlY3Rpb24taW5kZXguanNvbicpO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbkluZGV4TWFuYWdlciBpbml0aWFsaXplZCcsIHtcbiAgICAgIHR0bE1zOiB0aGlzLlRUTF9NUyxcbiAgICAgIGZldGNoVGltZW91dE1zOiB0aGlzLkZFVENIX1RJTUVPVVRfTVMsXG4gICAgICBjYWNoZUZpbGU6IHRoaXMuQ0FDSEVfRklMRSxcbiAgICAgIG1heFJldHJpZXM6IHRoaXMuTUFYX1JFVFJJRVNcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFBhcnNlIGZldGNoIHRpbWVvdXQgZnJvbSBjb25maWcgb3IgZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICovXG4gIHByaXZhdGUgcGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnVmFsdWU/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIENoZWNrIGVudmlyb25tZW50IHZhcmlhYmxlIGZpcnN0XG4gICAgY29uc3QgZW52VGltZW91dCA9IHByb2Nlc3MuZW52LkNPTExFQ1RJT05fRkVUQ0hfVElNRU9VVDtcbiAgICBpZiAoZW52VGltZW91dCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoZW52VGltZW91dCwgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBVc2luZyBDT0xMRUNUSU9OX0ZFVENIX1RJTUVPVVQgZnJvbSBlbnZpcm9ubWVudDogJHtwYXJzZWR9bXNgKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci53YXJuKGBJbnZhbGlkIENPTExFQ1RJT05fRkVUQ0hfVElNRU9VVCB2YWx1ZTogJHtlbnZUaW1lb3V0fSwgdXNpbmcgZGVmYXVsdGApO1xuICAgIH1cbiAgICBcbiAgICAvLyBGYWxsIGJhY2sgdG8gY29uZmlnIHZhbHVlIG9yIGRlZmF1bHRcbiAgICByZXR1cm4gY29uZmlnVmFsdWUgfHwgdGhpcy5ERUZBVUxUX0ZFVENIX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY29sbGVjdGlvbiBpbmRleCB3aXRoIHN0YWxlLXdoaWxlLXJldmFsaWRhdGUgcGF0dGVyblxuICAgKiBSZXR1cm5zIGNhY2hlZCBkYXRhIGltbWVkaWF0ZWx5IGlmIGF2YWlsYWJsZSwgcmVmcmVzaGVzIGluIGJhY2tncm91bmRcbiAgICovXG4gIGFzeW5jIGdldEluZGV4KCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIExvYWQgZnJvbSBtZW1vcnkgY2FjaGUgZmlyc3RcbiAgICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGcm9tRGlzaygpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgcmV0dXJuIHN0YWxlIGNhY2hlIHdoaWxlIHJlZnJlc2hpbmdcbiAgICAgIGNvbnN0IHNob3VsZFJlZnJlc2ggPSB0aGlzLnNob3VsZFJlZnJlc2hDYWNoZSgpO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCAmJiAhdGhpcy5pc0NhY2hlRXhwaXJlZCgpKSB7XG4gICAgICAgIC8vIENhY2hlIGlzIHZhbGlkLCByZXR1cm4gaW1tZWRpYXRlbHlcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXR1cm5pbmcgdmFsaWQgY2FjaGVkIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBuZWVkZWQgYnV0IG5vdCBhbHJlYWR5IHJ1bm5pbmdcbiAgICAgICAgaWYgKHNob3VsZFJlZnJlc2ggJiYgIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgc3RhbGUgY2FjaGUsIHJldHVybiBpdCB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4ICYmIHRoaXMuaXNDYWNoZUV4cGlyZWQoKSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ1JldHVybmluZyBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nIGluIGJhY2tncm91bmQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFN0YXJ0IGJhY2tncm91bmQgcmVmcmVzaCBpZiBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmICghdGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0QmFja2dyb3VuZFJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gTm8gY2FjaGUgYXZhaWxhYmxlLCBtdXN0IGZldGNoIHN5bmNocm9ub3VzbHlcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTm8gY2FjaGUgYXZhaWxhYmxlLCBmZXRjaGluZyBjb2xsZWN0aW9uIGluZGV4IHN5bmNocm9ub3VzbHknKTtcbiAgICAgIGNvbnN0IGZyZXNoSW5kZXggPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KCk7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlKGZyZXNoSW5kZXgpO1xuICAgICAgcmV0dXJuIGZyZXNoSW5kZXguZGF0YTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgY29sbGVjdGlvbiBpbmRleCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIFxuICAgICAgLy8gSWYgd2UgaGF2ZSBhbnkgY2FjaGVkIGRhdGEgKGV2ZW4gZXhwaXJlZCksIHJldHVybiBpdCBhcyBsYXN0IHJlc29ydFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1JldHVybmluZyBleHBpcmVkIGNhY2hlIGFzIGxhc3QgcmVzb3J0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiBpbmRleCBub3QgYXZhaWxhYmxlOiAke3RoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JjZSByZWZyZXNoIHRoZSBjb2xsZWN0aW9uIGluZGV4XG4gICAqL1xuICBhc3luYyBmb3JjZVJlZnJlc2goKTogUHJvbWlzZTxDb2xsZWN0aW9uSW5kZXg+IHtcbiAgICBsb2dnZXIuZGVidWcoJ0ZvcmNlIHJlZnJlc2hpbmcgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIHJldHVybiBmcmVzaEluZGV4LmRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRm9yY2UgcmVmcmVzaCBmYWlsZWQnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgY2FjaGVkIGRhdGEsIHJldHVybiBpdFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ZvcmNlIHJlZnJlc2ggZmFpbGVkLCByZXR1cm5pbmcgY2FjaGVkIGRhdGEnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXguZGF0YTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgc2hvdWxkIGJlIHJlZnJlc2hlZCAod2l0aGluIFRUTCBidXQgZ2V0dGluZyBjbG9zZSB0byBleHBpcnkpXG4gICAqL1xuICBwcml2YXRlIHNob3VsZFJlZnJlc2hDYWNoZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICBjb25zdCByZWZyZXNoVGhyZXNob2xkID0gdGhpcy5UVExfTVMgKiB0aGlzLlJFRlJFU0hfVEhSRVNIT0xEO1xuICAgIFxuICAgIHJldHVybiBhZ2UgPiByZWZyZXNoVGhyZXNob2xkO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgY2FjaGUgaXMgZXhwaXJlZFxuICAgKi9cbiAgcHJpdmF0ZSBpc0NhY2hlRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHJldHVybiB0cnVlO1xuICAgIFxuICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSB0aGlzLmNhY2hlZEluZGV4LnRpbWVzdGFtcDtcbiAgICByZXR1cm4gYWdlID4gdGhpcy5UVExfTVM7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggd2l0aG91dCBibG9ja2luZ1xuICAgKi9cbiAgcHJpdmF0ZSBzdGFydEJhY2tncm91bmRSZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBjaXJjdWl0IGJyZWFrZXJcbiAgICBpZiAodGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NpcmN1aXQgYnJlYWtlciBvcGVuLCBza2lwcGluZyBiYWNrZ3JvdW5kIHJlZnJlc2gnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIFxuICAgIHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlID0gdGhpcy5wZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKVxuICAgICAgLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgICB0aGlzLnJlY29yZENpcmN1aXRCcmVha2VyRmFpbHVyZSgpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UgPSBudWxsO1xuICAgICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQZXJmb3JtIGJhY2tncm91bmQgcmVmcmVzaFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwZXJmb3JtQmFja2dyb3VuZFJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbG9nZ2VyLmRlYnVnKCdTdGFydGluZyBiYWNrZ3JvdW5kIHJlZnJlc2ggb2YgY29sbGVjdGlvbiBpbmRleCcpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIFxuICAgICAgLy8gUmVzZXQgY2lyY3VpdCBicmVha2VyIG9uIHN1Y2Nlc3NcbiAgICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdCYWNrZ3JvdW5kIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRmV0Y2ggY29sbGVjdGlvbiBpbmRleCB3aXRoIHJldHJ5IGxvZ2ljIGFuZCBleHBvbmVudGlhbCBiYWNrb2ZmXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoV2l0aFJldHJ5KCk6IFByb21pc2U8eyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9PiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSB0aGlzLk1BWF9SRVRSSUVTOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChhdHRlbXB0ID4gMCkge1xuICAgICAgICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5jYWxjdWxhdGVSZXRyeURlbGF5KGF0dGVtcHQpO1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmV0cnlpbmcgZmV0Y2ggaW4gJHtkZWxheX1tcyAoYXR0ZW1wdCAke2F0dGVtcHQgKyAxfS8ke3RoaXMuTUFYX1JFVFJJRVMgKyAxfSlgKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNsZWVwKGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBGZXRjaCBhdHRlbXB0ICR7YXR0ZW1wdCArIDF9IGZhaWxlZGAsIHsgXG4gICAgICAgICAgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGxhc3RFcnJvciksXG4gICAgICAgICAgd2lsbFJldHJ5OiBhdHRlbXB0IDwgdGhpcy5NQVhfUkVUUklFU1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignQWxsIGZldGNoIGF0dGVtcHRzIGZhaWxlZCcpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2FsY3VsYXRlIHJldHJ5IGRlbGF5IHdpdGggZXhwb25lbnRpYWwgYmFja29mZiBhbmQgaml0dGVyXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZVJldHJ5RGVsYXkoYXR0ZW1wdDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmOiBiYXNlRGVsYXkgKiAoMiBeIGF0dGVtcHQpXG4gICAgY29uc3QgZXhwb25lbnRpYWxEZWxheSA9IHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyAqIE1hdGgucG93KDIsIGF0dGVtcHQgLSAxKTtcbiAgICBcbiAgICAvLyBDYXAgYXQgbWF4aW11bSBkZWxheVxuICAgIGNvbnN0IGNhcHBlZERlbGF5ID0gTWF0aC5taW4oZXhwb25lbnRpYWxEZWxheSwgdGhpcy5NQVhfUkVUUllfREVMQVlfTVMpO1xuICAgIFxuICAgIC8vIEFkZCBqaXR0ZXIgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmRcbiAgICByZXR1cm4gdGhpcy5hZGRKaXR0ZXIoY2FwcGVkRGVsYXkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQWRkIGppdHRlciAowrEyNSUgcmFuZG9tbmVzcykgdG8gYSBkZWxheSB0byBwcmV2ZW50IHRodW5kZXJpbmcgaGVyZCBwcm9ibGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRKaXR0ZXIoZGVsYXk6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgaml0dGVyID0gZGVsYXkgKiB0aGlzLkpJVFRFUl9GQUNUT1IgKiAoTWF0aC5yYW5kb20oKSAtIDAuNSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlbGF5ICsgaml0dGVyKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hDb2xsZWN0aW9uSW5kZXgoKTogUHJvbWlzZTx7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aGlzLkZFVENIX1RJTUVPVVRfTVMpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBCdWlsZCBoZWFkZXJzIGZvciBjb25kaXRpb25hbCByZXF1ZXN0c1xuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCcsXG4gICAgICAgICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJ1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgLy8gQWRkIGNvbmRpdGlvbmFsIGhlYWRlcnMgaWYgd2UgaGF2ZSBjYWNoZWQgZGF0YVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/LmV0YWcpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddID0gdGhpcy5jYWNoZWRJbmRleC5ldGFnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXg/Lmxhc3RNb2RpZmllZCkge1xuICAgICAgICBoZWFkZXJzWydJZi1Nb2RpZmllZC1TaW5jZSddID0gdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmV0Y2hpbmcgY29sbGVjdGlvbiBpbmRleCcsIHsgXG4gICAgICAgIHVybDogdGhpcy5JTkRFWF9VUkwsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgICAgaGFzRXRhZzogISF0aGlzLmNhY2hlZEluZGV4Py5ldGFnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLklOREVYX1VSTCwge1xuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSAzMDQgTm90IE1vZGlmaWVkXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAzMDQgJiYgdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggbm90IG1vZGlmaWVkICgzMDQpLCB1cGRhdGluZyBjYWNoZSB0aW1lc3RhbXAnKTtcbiAgICAgICAgdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVUb0Rpc2soKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB0aGlzLmNhY2hlZEluZGV4LmRhdGEsXG4gICAgICAgICAgZXRhZzogdGhpcy5jYWNoZWRJbmRleC5ldGFnLFxuICAgICAgICAgIGxhc3RNb2RpZmllZDogdGhpcy5jYWNoZWRJbmRleC5sYXN0TW9kaWZpZWRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGluZGV4RGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDb2xsZWN0aW9uSW5kZXg7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHRoZSBpbmRleCBzdHJ1Y3R1cmVcbiAgICAgIHRoaXMudmFsaWRhdGVJbmRleFN0cnVjdHVyZShpbmRleERhdGEpO1xuICAgICAgXG4gICAgICBjb25zdCBldGFnID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2V0YWcnKSB8fCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBsYXN0TW9kaWZpZWQgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnbGFzdC1tb2RpZmllZCcpIHx8IHVuZGVmaW5lZDtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGZldGNoZWQgc3VjY2Vzc2Z1bGx5Jywge1xuICAgICAgICB0b3RhbEVsZW1lbnRzOiBpbmRleERhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICAgIHZlcnNpb246IGluZGV4RGF0YS52ZXJzaW9uLFxuICAgICAgICBoYXNFdGFnOiAhIWV0YWdcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4geyBkYXRhOiBpbmRleERhdGEsIGV0YWcsIGxhc3RNb2RpZmllZCB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGZXRjaCB0aW1lb3V0IGFmdGVyICR7dGhpcy5GRVRDSF9USU1FT1VUX01TfW1zYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbGxlY3Rpb24gaW5kZXggc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXg6IGFueSk6IGFzc2VydHMgaW5kZXggaXMgQ29sbGVjdGlvbkluZGV4IHtcbiAgICBpZiAoIWluZGV4IHx8IHR5cGVvZiBpbmRleCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbm90IGFuIG9iamVjdCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCB2ZXJzaW9uJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgaW5kZXguZ2VuZXJhdGVkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgZ2VuZXJhdGVkIHRpbWVzdGFtcCcpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LnRvdGFsX2VsZW1lbnRzICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgdG90YWxfZWxlbWVudHMnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5pbmRleCB8fCB0eXBlb2YgaW5kZXguaW5kZXggIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBpbmRleCBvYmplY3QnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFpbmRleC5tZXRhZGF0YSB8fCB0eXBlb2YgaW5kZXgubWV0YWRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG1pc3Npbmcgb3IgaW52YWxpZCBtZXRhZGF0YScpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFVwZGF0ZSBjYWNoZSB3aXRoIG5ldyBkYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHVwZGF0ZUNhY2hlKGZldGNoUmVzdWx0OiB7IGRhdGE6IENvbGxlY3Rpb25JbmRleDsgZXRhZz86IHN0cmluZzsgbGFzdE1vZGlmaWVkPzogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGVja3N1bSA9IHRoaXMuY2FsY3VsYXRlQ2hlY2tzdW0oZmV0Y2hSZXN1bHQuZGF0YSk7XG4gICAgXG4gICAgdGhpcy5jYWNoZWRJbmRleCA9IHtcbiAgICAgIGRhdGE6IGZldGNoUmVzdWx0LmRhdGEsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBldGFnOiBmZXRjaFJlc3VsdC5ldGFnLFxuICAgICAgbGFzdE1vZGlmaWVkOiBmZXRjaFJlc3VsdC5sYXN0TW9kaWZpZWQsXG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICBjaGVja3N1bVxuICAgIH07XG4gICAgXG4gICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKCk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHVwZGF0ZWQnLCB7XG4gICAgICB2ZXJzaW9uOiBmZXRjaFJlc3VsdC5kYXRhLnZlcnNpb24sXG4gICAgICB0b3RhbEVsZW1lbnRzOiBmZXRjaFJlc3VsdC5kYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgY2hlY2tzdW1cbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBjaGVja3N1bSBmb3IgZGF0YSBpbnRlZ3JpdHkgdmVyaWZpY2F0aW9uXG4gICAqL1xuICBwcml2YXRlIGNhbGN1bGF0ZUNoZWNrc3VtKGRhdGE6IENvbGxlY3Rpb25JbmRleCk6IHN0cmluZyB7XG4gICAgLy8gU2ltcGxlIGNoZWNrc3VtIGJhc2VkIG9uIGtleSBwcm9wZXJ0aWVzXG4gICAgY29uc3QgY2hlY2tzdW1EYXRhID0ge1xuICAgICAgdmVyc2lvbjogZGF0YS52ZXJzaW9uLFxuICAgICAgZ2VuZXJhdGVkOiBkYXRhLmdlbmVyYXRlZCxcbiAgICAgIHRvdGFsX2VsZW1lbnRzOiBkYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoY2hlY2tzdW1EYXRhKSkudG9TdHJpbmcoJ2Jhc2U2NCcpLnN1YnN0cmluZygwLCB0aGlzLkNIRUNLU1VNX0xFTkdUSCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMb2FkIGNhY2hlIGZyb20gZGlza1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRnJvbURpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBmcy5yZWFkRmlsZSh0aGlzLkNBQ0hFX0ZJTEUsICd1dGY4Jyk7XG4gICAgICBjb25zdCBjYWNoZWQgPSBKU09OLnBhcnNlKGRhdGEpIGFzIENvbGxlY3Rpb25JbmRleENhY2hlRW50cnk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGNhY2hlIHN0cnVjdHVyZVxuICAgICAgaWYgKCFjYWNoZWQuZGF0YSB8fCAhY2FjaGVkLnRpbWVzdGFtcCB8fCAhY2FjaGVkLnZlcnNpb24pIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdJbnZhbGlkIGNhY2hlIHN0cnVjdHVyZSwgaWdub3JpbmcnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWZXJpZnkgY2hlY2tzdW0gaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoY2FjaGVkLmNoZWNrc3VtKSB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkQ2hlY2tzdW0gPSB0aGlzLmNhbGN1bGF0ZUNoZWNrc3VtKGNhY2hlZC5kYXRhKTtcbiAgICAgICAgaWYgKGNhY2hlZC5jaGVja3N1bSAhPT0gZXhwZWN0ZWRDaGVja3N1bSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnQ2FjaGUgY2hlY2tzdW0gbWlzbWF0Y2gsIGlnbm9yaW5nIGNhY2hlZCBkYXRhJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSBjYWNoZWQ7XG4gICAgICBcbiAgICAgIGNvbnN0IGFnZSA9IERhdGUubm93KCkgLSBjYWNoZWQudGltZXN0YW1wO1xuICAgICAgY29uc3QgaXNFeHBpcmVkID0gYWdlID4gdGhpcy5UVExfTVM7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnTG9hZGVkIGNvbGxlY3Rpb24gaW5kZXggZnJvbSBkaXNrIGNhY2hlJywge1xuICAgICAgICB2ZXJzaW9uOiBjYWNoZWQudmVyc2lvbixcbiAgICAgICAgYWdlOiBNYXRoLnJvdW5kKGFnZSAvIDEwMDApLFxuICAgICAgICBpc0V4cGlyZWQsXG4gICAgICAgIHRvdGFsRWxlbWVudHM6IGNhY2hlZC5kYXRhLnRvdGFsX2VsZW1lbnRzXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSAhPT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gbG9hZCBjYWNoZSBmcm9tIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU2F2ZSBjYWNoZSB0byBkaXNrXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNhdmVUb0Rpc2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm47XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVuc3VyZSBjYWNoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgICBhd2FpdCBmcy5ta2RpcihwYXRoLmRpcm5hbWUodGhpcy5DQUNIRV9GSUxFKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVkSW5kZXgsIG51bGwsIHRoaXMuSlNPTl9JTkRFTlQpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRoaXMuQ0FDSEVfRklMRSwgY2FjaGVEYXRhLCAndXRmOCcpO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgc2F2ZWQgdG8gZGlzaycpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBzYXZlIGNhY2hlIHRvIGRpc2snLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICAvLyBEb24ndCB0aHJvdyAtIGNhY2hlIHBlcnNpc3RlbmNlIGZhaWx1cmVzIHNob3VsZG4ndCBicmVhayBmdW5jdGlvbmFsaXR5XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2lyY3VpdCBicmVha2VyIGxvZ2ljXG4gICAqL1xuICBwcml2YXRlIGlzQ2lyY3VpdEJyZWFrZXJPcGVuKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPCB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGltZVNpbmNlTGFzdEZhaWx1cmUgPSBEYXRlLm5vdygpIC0gdGhpcy5jaXJjdWl0QnJlYWtlckxhc3RGYWlsdXJlO1xuICAgIHJldHVybiB0aW1lU2luY2VMYXN0RmFpbHVyZSA8IHRoaXMuQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVM7XG4gIH1cbiAgXG4gIHByaXZhdGUgcmVjb3JkQ2lyY3VpdEJyZWFrZXJGYWlsdXJlKCk6IHZvaWQge1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcysrO1xuICAgIHRoaXMuY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IERhdGUubm93KCk7XG4gICAgXG4gICAgaWYgKHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA+PSB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USFJFU0hPTEQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDaXJjdWl0IGJyZWFrZXIgb3BlbmVkIGR1ZSB0byByZXBlYXRlZCBmYWlsdXJlcycsIHtcbiAgICAgICAgZmFpbHVyZXM6IHRoaXMuY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyxcbiAgICAgICAgdGltZW91dE1zOiB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVdGlsaXR5IG1ldGhvZHNcbiAgICovXG4gIHByaXZhdGUgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3IubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgY2FjaGUgc3RhdGlzdGljcyBmb3IgbW9uaXRvcmluZ1xuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBhZ2U6IG51bWJlcjtcbiAgICBoYXNDYWNoZTogYm9vbGVhbjtcbiAgICB2ZXJzaW9uPzogc3RyaW5nO1xuICAgIHRvdGFsRWxlbWVudHM/OiBudW1iZXI7XG4gICAgaXNSZWZyZXNoaW5nOiBib29sZWFuO1xuICAgIGNpcmN1aXRCcmVha2VyRmFpbHVyZXM6IG51bWJlcjtcbiAgICBjaXJjdWl0QnJlYWtlck9wZW46IGJvb2xlYW47XG4gIH0ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGFnZTogMCxcbiAgICAgICAgaGFzQ2FjaGU6IGZhbHNlLFxuICAgICAgICBpc1JlZnJlc2hpbmc6IHRoaXMuaXNSZWZyZXNoaW5nLFxuICAgICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICAgIGNpcmN1aXRCcmVha2VyT3BlbjogdGhpcy5pc0NpcmN1aXRCcmVha2VyT3BlbigpXG4gICAgICB9O1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6ICF0aGlzLmlzQ2FjaGVFeHBpcmVkKCksXG4gICAgICBhZ2U6IE1hdGgucm91bmQoYWdlIC8gMTAwMCksIC8vIGFnZSBpbiBzZWNvbmRzXG4gICAgICBoYXNDYWNoZTogdHJ1ZSxcbiAgICAgIHZlcnNpb246IHRoaXMuY2FjaGVkSW5kZXgudmVyc2lvbixcbiAgICAgIHRvdGFsRWxlbWVudHM6IHRoaXMuY2FjaGVkSW5kZXguZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIGlzUmVmcmVzaGluZzogdGhpcy5pc1JlZnJlc2hpbmcsXG4gICAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICBjaXJjdWl0QnJlYWtlck9wZW46IHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY2FjaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgY2xlYXJDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNhY2hlZEluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy51bmxpbmsodGhpcy5DQUNIRV9GSUxFKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSBmaWxlIGRlbGV0ZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGRlbGV0ZSBjYWNoZSBmaWxlJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFueSBvbmdvaW5nIGJhY2tncm91bmQgcmVmcmVzaCB0byBjb21wbGV0ZVxuICAgKi9cbiAgYXN5bmMgd2FpdEZvckJhY2tncm91bmRSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSkge1xuICAgICAgYXdhaXQgdGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2U7XG4gICAgfVxuICB9XG59Il19
|
|
501
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvbkluZGV4TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25JbmRleE1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXpCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQW9CNUMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxvRUFBb0U7SUFDcEUsaUhBQWlIO0lBQ2hHLFNBQVMsR0FBRyxpRUFBaUUsQ0FBQztJQUM5RSxNQUFNLENBQVM7SUFDZixnQkFBZ0IsQ0FBUztJQUN6QixXQUFXLENBQVM7SUFDcEIsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLENBQVM7SUFDM0IsVUFBVSxDQUFTO0lBRTVCLFdBQVcsR0FBcUMsSUFBSSxDQUFDO0lBQ3JELHdCQUF3QixHQUF5QixJQUFJLENBQUM7SUFDdEQsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUNyQixzQkFBc0IsR0FBRyxDQUFDLENBQUM7SUFDM0IseUJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLHlCQUF5QixHQUFHLENBQUMsQ0FBQztJQUM5QiwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFlBQVk7SUFDeEQsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLENBQUMscUNBQXFDO0lBQzlELGFBQWEsR0FBRyxJQUFJLENBQUMsQ0FBQyw2QkFBNkI7SUFFcEUsa0NBQWtDO0lBQ2pCLGNBQWMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVM7SUFDMUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hC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Q0FBQztZQUN0RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx3QkFBd0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNsQyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0aW9uIEluZGV4IE1hbmFnZXIgd2l0aCBCYWNrZ3JvdW5kIFJlZnJlc2ggYW5kIFJvYnVzdCBDYWNoaW5nXG4gKiBcbiAqIFRoaXMgbWFuYWdlciBpbXBsZW1lbnRzOlxuICogLSAxLWhvdXIgVFRMIHdpdGggbG9jYWwgZmlsZSBjYWNoaW5nXG4gKiAtIEJhY2tncm91bmQgcmVmcmVzaCB3aXRob3V0IGJsb2NraW5nIG9wZXJhdGlvbnNcbiAqIC0gRXhwb25lbnRpYWwgYmFja29mZiByZXRyeSBsb2dpY1xuICogLSBDb25maWd1cmFibGUgdGltZW91dHMgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICogLSBSZXR1cm4gc3RhbGUgY2FjaGUgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kXG4gKiAtIENvbXByZWhlbnNpdmUgZXJyb3IgaGFuZGxpbmcgZm9yIHByb2R1Y3Rpb24gdXNlXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IENvbGxlY3Rpb25JbmRleCB9IGZyb20gJy4uL3R5cGVzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5IHtcbiAgZGF0YTogQ29sbGVjdGlvbkluZGV4O1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgZXRhZz86IHN0cmluZztcbiAgbGFzdE1vZGlmaWVkPzogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNoZWNrc3VtOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkluZGV4TWFuYWdlckNvbmZpZyB7XG4gIHR0bE1zPzogbnVtYmVyO1xuICBmZXRjaFRpbWVvdXRNcz86IG51bWJlcjtcbiAgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgYmFzZVJldHJ5RGVsYXlNcz86IG51bWJlcjtcbiAgbWF4UmV0cnlEZWxheU1zPzogbnVtYmVyO1xuICBjYWNoZURpcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25JbmRleE1hbmFnZXIge1xuICAvLyBVc2UgR2l0SHViIFBhZ2VzIGluZGV4IHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCBieSB3b3JrZmxvd1xuICAvLyBPbGQgVVJMIHdhcyBzdGFsZTogaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL21haW4vcHVibGljL2NvbGxlY3Rpb24taW5kZXguanNvblxuICBwcml2YXRlIHJlYWRvbmx5IElOREVYX1VSTCA9ICdodHRwczovL2RvbGxob3VzZW1jcC5naXRodWIuaW8vY29sbGVjdGlvbi9jb2xsZWN0aW9uLWluZGV4Lmpzb24nO1xuICBwcml2YXRlIHJlYWRvbmx5IFRUTF9NUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEZFVENIX1RJTUVPVVRfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUklFUzogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IEJBU0VfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUkVUUllfREVMQVlfTVM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBDQUNIRV9GSUxFOiBzdHJpbmc7XG4gIFxuICBwcml2YXRlIGNhY2hlZEluZGV4OiBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJGYWlsdXJlcyA9IDA7XG4gIHByaXZhdGUgY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZSA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RIUkVTSE9MRCA9IDU7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0lSQ1VJVF9CUkVBS0VSX1RJTUVPVVRfTVMgPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXNcbiAgcHJpdmF0ZSByZWFkb25seSBSRUZSRVNIX1RIUkVTSE9MRCA9IDAuODsgLy8gUmVmcmVzaCB3aGVuIDgwJSBvZiBUVEwgaGFzIHBhc3NlZFxuICBwcml2YXRlIHJlYWRvbmx5IEpJVFRFUl9GQUNUT1IgPSAwLjI1OyAvLyDCsTI1JSByYW5kb21uZXNzIGZvciBqaXR0ZXJcbiAgXG4gIC8vIERlZmF1bHQgY29uZmlndXJhdGlvbiBjb25zdGFudHNcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1RUTF9NUyA9IDYwICogNjAgKiAxMDAwOyAvLyAxIGhvdXJcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0JBU0VfUkVUUllfREVMQVlfTVMgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TID0gMzAwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9GRVRDSF9USU1FT1VUX01TID0gNTAwMDsgLy8gNSBzZWNvbmRzXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tTVU1fTEVOR1RIID0gODtcbiAgcHJpdmF0ZSByZWFkb25seSBKU09OX0lOREVOVCA9IDI7XG4gIFxuICBjb25zdHJ1Y3Rvcihjb25maWc6IENvbGxlY3Rpb25JbmRleE1hbmFnZXJDb25maWcgPSB7fSkge1xuICAgIC8vIENvbmZpZ3VyYXRpb24gd2l0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvdmVycmlkZXNcbiAgICB0aGlzLlRUTF9NUyA9IGNvbmZpZy50dGxNcyB8fCB0aGlzLkRFRkFVTFRfVFRMX01TO1xuICAgIHRoaXMuRkVUQ0hfVElNRU9VVF9NUyA9IHRoaXMucGFyc2VGZXRjaFRpbWVvdXQoY29uZmlnLmZldGNoVGltZW91dE1zKTtcbiAgICB0aGlzLk1BWF9SRVRSSUVTID0gY29uZmlnLm1heFJldHJpZXMgfHwgdGhpcy5ERUZBVUxUX01BWF9SRVRSSUVTO1xuICAgIHRoaXMuQkFTRV9SRVRSWV9ERUxBWV9NUyA9IGNvbmZpZy5iYXNlUmV0cnlEZWxheU1zIHx8IHRoaXMuREVGQVVMVF9CQVNFX1JFVFJZX0RFTEFZX01TO1xuICAgIHRoaXMuTUFYX1JFVFJZX0RFTEFZX01TID0gY29uZmlnLm1heFJldHJ5RGVsYXlNcyB8fCB0aGlzLkRFRkFVTFRfTUFYX1JFVFJZX0RFTEFZX01TO1xuICAgIFxuICAgIC8vIENhY2hlIGRpcmVjdG9yeSAtIHVzZSB+Ly5kb2xsaG91c2UvY2FjaGUvY29sbGVjdGlvbi1pbmRleC5qc29uIGFzIHNwZWNpZmllZFxuICAgIGNvbnN0IGNhY2hlRGlyID0gY29uZmlnLmNhY2hlRGlyIHx8IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuZG9sbGhvdXNlJywgJ2NhY2hlJyk7XG4gICAgdGhpcy5DQUNIRV9GSUxFID0gcGF0aC5qb2luKGNhY2hlRGlyLCAnY29sbGVjdGlvbi1pbmRleC5qc29uJyk7XG4gICAgXG4gICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uSW5kZXhNYW5hZ2VyIGluaXRpYWxpemVkJywge1xuICAgICAgdHRsTXM6IHRoaXMuVFRMX01TLFxuICAgICAgZmV0Y2hUaW1lb3V0TXM6IHRoaXMuRkVUQ0hfVElNRU9VVF9NUyxcbiAgICAgIGNhY2hlRmlsZTogdGhpcy5DQUNIRV9GSUxFLFxuICAgICAgbWF4UmV0cmllczogdGhpcy5NQVhfUkVUUklFU1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGFyc2UgZmV0Y2ggdGltZW91dCBmcm9tIGNvbmZpZyBvciBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZUZldGNoVGltZW91dChjb25maWdWYWx1ZT86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3RcbiAgICBjb25zdCBlbnZUaW1lb3V0ID0gcHJvY2Vzcy5lbnYuQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUO1xuICAgIGlmIChlbnZUaW1lb3V0KSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIucGFyc2VJbnQoZW52VGltZW91dCwgMTApO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkKSAmJiBwYXJzZWQgPiAwKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgVXNpbmcgQ09MTEVDVElPTl9GRVRDSF9USU1FT1VUIGZyb20gZW52aXJvbm1lbnQ6ICR7cGFyc2VkfW1zYCk7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybihgSW52YWxpZCBDT0xMRUNUSU9OX0ZFVENIX1RJTUVPVVQgdmFsdWU6ICR7ZW52VGltZW91dH0sIHVzaW5nIGRlZmF1bHRgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRmFsbCBiYWNrIHRvIGNvbmZpZyB2YWx1ZSBvciBkZWZhdWx0XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlIHx8IHRoaXMuREVGQVVMVF9GRVRDSF9USU1FT1VUX01TO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gaW5kZXggd2l0aCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlIHBhdHRlcm5cbiAgICogUmV0dXJucyBjYWNoZWQgZGF0YSBpbW1lZGlhdGVseSBpZiBhdmFpbGFibGUsIHJlZnJlc2hlcyBpbiBiYWNrZ3JvdW5kXG4gICAqL1xuICBhc3luYyBnZXRJbmRleCgpOiBQcm9taXNlPENvbGxlY3Rpb25JbmRleD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2FkIGZyb20gbWVtb3J5IGNhY2hlIGZpcnN0XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkRnJvbURpc2soKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIHJldHVybiBzdGFsZSBjYWNoZSB3aGlsZSByZWZyZXNoaW5nXG4gICAgICBjb25zdCBzaG91bGRSZWZyZXNoID0gdGhpcy5zaG91bGRSZWZyZXNoQ2FjaGUoKTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuY2FjaGVkSW5kZXggJiYgIXRoaXMuaXNDYWNoZUV4cGlyZWQoKSkge1xuICAgICAgICAvLyBDYWNoZSBpcyB2YWxpZCwgcmV0dXJuIGltbWVkaWF0ZWx5XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnUmV0dXJuaW5nIHZhbGlkIGNhY2hlZCBjb2xsZWN0aW9uIGluZGV4Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggaWYgbmVlZGVkIGJ1dCBub3QgYWxyZWFkeSBydW5uaW5nXG4gICAgICAgIGlmIChzaG91bGRSZWZyZXNoICYmICF0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgIHRoaXMuc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiB3ZSBoYXZlIHN0YWxlIGNhY2hlLCByZXR1cm4gaXQgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kXG4gICAgICBpZiAodGhpcy5jYWNoZWRJbmRleCAmJiB0aGlzLmlzQ2FjaGVFeHBpcmVkKCkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdSZXR1cm5pbmcgc3RhbGUgY2FjaGUgd2hpbGUgcmVmcmVzaGluZyBpbiBiYWNrZ3JvdW5kJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBTdGFydCBiYWNrZ3JvdW5kIHJlZnJlc2ggaWYgbm90IGFscmVhZHkgcnVubmluZ1xuICAgICAgICBpZiAoIXRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEJhY2tncm91bmRSZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE5vIGNhY2hlIGF2YWlsYWJsZSwgbXVzdCBmZXRjaCBzeW5jaHJvbm91c2x5XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIGNhY2hlIGF2YWlsYWJsZSwgZmV0Y2hpbmcgY29sbGVjdGlvbiBpbmRleCBzeW5jaHJvbm91c2x5Jyk7XG4gICAgICBjb25zdCBmcmVzaEluZGV4ID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeSgpO1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVDYWNoZShmcmVzaEluZGV4KTtcbiAgICAgIHJldHVybiBmcmVzaEluZGV4LmRhdGE7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IGNvbGxlY3Rpb24gaW5kZXgnLCB7IGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICBcbiAgICAgIC8vIElmIHdlIGhhdmUgYW55IGNhY2hlZCBkYXRhIChldmVuIGV4cGlyZWQpLCByZXR1cm4gaXQgYXMgbGFzdCByZXNvcnRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZXR1cm5pbmcgZXhwaXJlZCBjYWNoZSBhcyBsYXN0IHJlc29ydCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRJbmRleC5kYXRhO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbGxlY3Rpb24gaW5kZXggbm90IGF2YWlsYWJsZTogJHt0aGlzLmdldEVycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRm9yY2UgcmVmcmVzaCB0aGUgY29sbGVjdGlvbiBpbmRleFxuICAgKi9cbiAgYXN5bmMgZm9yY2VSZWZyZXNoKCk6IFByb21pc2U8Q29sbGVjdGlvbkluZGV4PiB7XG4gICAgbG9nZ2VyLmRlYnVnKCdGb3JjZSByZWZyZXNoaW5nIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGUoZnJlc2hJbmRleCk7XG4gICAgICByZXR1cm4gZnJlc2hJbmRleC5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZvcmNlIHJlZnJlc2ggZmFpbGVkJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgXG4gICAgICAvLyBJZiB3ZSBoYXZlIGNhY2hlZCBkYXRhLCByZXR1cm4gaXRcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdGb3JjZSByZWZyZXNoIGZhaWxlZCwgcmV0dXJuaW5nIGNhY2hlZCBkYXRhJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEluZGV4LmRhdGE7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhY2hlIHNob3VsZCBiZSByZWZyZXNoZWQgKHdpdGhpbiBUVEwgYnV0IGdldHRpbmcgY2xvc2UgdG8gZXhwaXJ5KVxuICAgKi9cbiAgcHJpdmF0ZSBzaG91bGRSZWZyZXNoQ2FjaGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm4gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgY29uc3QgcmVmcmVzaFRocmVzaG9sZCA9IHRoaXMuVFRMX01TICogdGhpcy5SRUZSRVNIX1RIUkVTSE9MRDtcbiAgICBcbiAgICByZXR1cm4gYWdlID4gcmVmcmVzaFRocmVzaG9sZDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhY2hlIGlzIGV4cGlyZWRcbiAgICovXG4gIHByaXZhdGUgaXNDYWNoZUV4cGlyZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNhY2hlZEluZGV4KSByZXR1cm4gdHJ1ZTtcbiAgICBcbiAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gdGhpcy5jYWNoZWRJbmRleC50aW1lc3RhbXA7XG4gICAgcmV0dXJuIGFnZSA+IHRoaXMuVFRMX01TO1xuICB9XG4gIFxuICAvKipcbiAgICogU3RhcnQgYmFja2dyb3VuZCByZWZyZXNoIHdpdGhvdXQgYmxvY2tpbmdcbiAgICovXG4gIHByaXZhdGUgc3RhcnRCYWNrZ3JvdW5kUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1JlZnJlc2hpbmcpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgY2lyY3VpdCBicmVha2VyXG4gICAgaWYgKHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdDaXJjdWl0IGJyZWFrZXIgb3Blbiwgc2tpcHBpbmcgYmFja2dyb3VuZCByZWZyZXNoJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICBcbiAgICB0aGlzLmJhY2tncm91bmRSZWZyZXNoUHJvbWlzZSA9IHRoaXMucGVyZm9ybUJhY2tncm91bmRSZWZyZXNoKClcbiAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGZhaWxlZCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgICAgdGhpcy5yZWNvcmRDaXJjdWl0QnJlYWtlckZhaWx1cmUoKTtcbiAgICAgIH0pXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlID0gbnVsbDtcbiAgICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUGVyZm9ybSBiYWNrZ3JvdW5kIHJlZnJlc2hcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcGVyZm9ybUJhY2tncm91bmRSZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5kZWJ1ZygnU3RhcnRpbmcgYmFja2dyb3VuZCByZWZyZXNoIG9mIGNvbGxlY3Rpb24gaW5kZXgnKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnJlc2hJbmRleCA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoKTtcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGUoZnJlc2hJbmRleCk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IGNpcmN1aXQgYnJlYWtlciBvbiBzdWNjZXNzXG4gICAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPSAwO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0JhY2tncm91bmQgcmVmcmVzaCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQmFja2dyb3VuZCByZWZyZXNoIGZhaWxlZCcsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIGNvbGxlY3Rpb24gaW5kZXggd2l0aCByZXRyeSBsb2dpYyBhbmQgZXhwb25lbnRpYWwgYmFja29mZlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhSZXRyeSgpOiBQcm9taXNlPHsgZGF0YTogQ29sbGVjdGlvbkluZGV4OyBldGFnPzogc3RyaW5nOyBsYXN0TW9kaWZpZWQ/OiBzdHJpbmcgfT4ge1xuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gdGhpcy5NQVhfUkVUUklFUzsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkZWxheSA9IHRoaXMuY2FsY3VsYXRlUmV0cnlEZWxheShhdHRlbXB0KTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFJldHJ5aW5nIGZldGNoIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHthdHRlbXB0ICsgMX0vJHt0aGlzLk1BWF9SRVRSSUVTICsgMX0pYCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zbGVlcChkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZldGNoQ29sbGVjdGlvbkluZGV4KCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsYXN0RXJyb3IgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2ggYXR0ZW1wdCAke2F0dGVtcHQgKyAxfSBmYWlsZWRgLCB7IFxuICAgICAgICAgIGVycm9yOiB0aGlzLmdldEVycm9yTWVzc2FnZShsYXN0RXJyb3IpLFxuICAgICAgICAgIHdpbGxSZXRyeTogYXR0ZW1wdCA8IHRoaXMuTUFYX1JFVFJJRVNcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ0FsbCBmZXRjaCBhdHRlbXB0cyBmYWlsZWQnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSByZXRyeSBkZWxheSB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmYgYW5kIGppdHRlclxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVSZXRyeURlbGF5KGF0dGVtcHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZjogYmFzZURlbGF5ICogKDIgXiBhdHRlbXB0KVxuICAgIGNvbnN0IGV4cG9uZW50aWFsRGVsYXkgPSB0aGlzLkJBU0VfUkVUUllfREVMQVlfTVMgKiBNYXRoLnBvdygyLCBhdHRlbXB0IC0gMSk7XG4gICAgXG4gICAgLy8gQ2FwIGF0IG1heGltdW0gZGVsYXlcbiAgICBjb25zdCBjYXBwZWREZWxheSA9IE1hdGgubWluKGV4cG9uZW50aWFsRGVsYXksIHRoaXMuTUFYX1JFVFJZX0RFTEFZX01TKTtcbiAgICBcbiAgICAvLyBBZGQgaml0dGVyIHRvIHByZXZlbnQgdGh1bmRlcmluZyBoZXJkXG4gICAgcmV0dXJuIHRoaXMuYWRkSml0dGVyKGNhcHBlZERlbGF5KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEFkZCBqaXR0ZXIgKMKxMjUlIHJhbmRvbW5lc3MpIHRvIGEgZGVsYXkgdG8gcHJldmVudCB0aHVuZGVyaW5nIGhlcmQgcHJvYmxlbXNcbiAgICovXG4gIHByaXZhdGUgYWRkSml0dGVyKGRlbGF5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGppdHRlciA9IGRlbGF5ICogdGhpcy5KSVRURVJfRkFDVE9SICogKE1hdGgucmFuZG9tKCkgLSAwLjUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBkZWxheSArIGppdHRlcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCBjb2xsZWN0aW9uIGluZGV4IGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoQ29sbGVjdGlvbkluZGV4KCk6IFByb21pc2U8eyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9PiB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgdGhpcy5GRVRDSF9USU1FT1VUX01TKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gQnVpbGQgaGVhZGVycyBmb3IgY29uZGl0aW9uYWwgcmVxdWVzdHNcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnLFxuICAgICAgICAnQ2FjaGUtQ29udHJvbCc6ICduby1jYWNoZSdcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIEFkZCBjb25kaXRpb25hbCBoZWFkZXJzIGlmIHdlIGhhdmUgY2FjaGVkIGRhdGFcbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4Py5ldGFnKSB7XG4gICAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IHRoaXMuY2FjaGVkSW5kZXguZXRhZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNhY2hlZEluZGV4Py5sYXN0TW9kaWZpZWQpIHtcbiAgICAgICAgaGVhZGVyc1snSWYtTW9kaWZpZWQtU2luY2UnXSA9IHRoaXMuY2FjaGVkSW5kZXgubGFzdE1vZGlmaWVkO1xuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0ZldGNoaW5nIGNvbGxlY3Rpb24gaW5kZXgnLCB7IFxuICAgICAgICB1cmw6IHRoaXMuSU5ERVhfVVJMLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLkZFVENIX1RJTUVPVVRfTVMsXG4gICAgICAgIGhhc0V0YWc6ICEhdGhpcy5jYWNoZWRJbmRleD8uZXRhZ1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5JTkRFWF9VUkwsIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgXG4gICAgICAvLyBIYW5kbGUgMzA0IE5vdCBNb2RpZmllZFxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMzA0ICYmIHRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IG5vdCBtb2RpZmllZCAoMzA0KSwgdXBkYXRpbmcgY2FjaGUgdGltZXN0YW1wJyk7XG4gICAgICAgIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlVG9EaXNrKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogdGhpcy5jYWNoZWRJbmRleC5kYXRhLFxuICAgICAgICAgIGV0YWc6IHRoaXMuY2FjaGVkSW5kZXguZXRhZyxcbiAgICAgICAgICBsYXN0TW9kaWZpZWQ6IHRoaXMuY2FjaGVkSW5kZXgubGFzdE1vZGlmaWVkXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBpbmRleERhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ29sbGVjdGlvbkluZGV4O1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgaW5kZXggc3RydWN0dXJlXG4gICAgICB0aGlzLnZhbGlkYXRlSW5kZXhTdHJ1Y3R1cmUoaW5kZXhEYXRhKTtcbiAgICAgIFxuICAgICAgY29uc3QgZXRhZyA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdldGFnJykgfHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgbGFzdE1vZGlmaWVkID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2xhc3QtbW9kaWZpZWQnKSB8fCB1bmRlZmluZWQ7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBmZXRjaGVkIHN1Y2Nlc3NmdWxseScsIHtcbiAgICAgICAgdG90YWxFbGVtZW50czogaW5kZXhEYXRhLnRvdGFsX2VsZW1lbnRzLFxuICAgICAgICB2ZXJzaW9uOiBpbmRleERhdGEudmVyc2lvbixcbiAgICAgICAgaGFzRXRhZzogISFldGFnXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgZGF0YTogaW5kZXhEYXRhLCBldGFnLCBsYXN0TW9kaWZpZWQgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgIFxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmV0Y2ggdGltZW91dCBhZnRlciAke3RoaXMuRkVUQ0hfVElNRU9VVF9NU31tc2ApO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb2xsZWN0aW9uIGluZGV4IHN0cnVjdHVyZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUluZGV4U3RydWN0dXJlKGluZGV4OiBhbnkpOiBhc3NlcnRzIGluZGV4IGlzIENvbGxlY3Rpb25JbmRleCB7XG4gICAgaWYgKCFpbmRleCB8fCB0eXBlb2YgaW5kZXggIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXg6IG5vdCBhbiBvYmplY3QnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBpbmRleC52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgdmVyc2lvbicpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGluZGV4LmdlbmVyYXRlZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIGdlbmVyYXRlZCB0aW1lc3RhbXAnKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBpbmRleC50b3RhbF9lbGVtZW50cyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleDogbWlzc2luZyBvciBpbnZhbGlkIHRvdGFsX2VsZW1lbnRzJyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghaW5kZXguaW5kZXggfHwgdHlwZW9mIGluZGV4LmluZGV4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgaW5kZXggb2JqZWN0Jyk7XG4gICAgfVxuICAgIFxuICAgIGlmICghaW5kZXgubWV0YWRhdGEgfHwgdHlwZW9mIGluZGV4Lm1ldGFkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4OiBtaXNzaW5nIG9yIGludmFsaWQgbWV0YWRhdGEnKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBVcGRhdGUgY2FjaGUgd2l0aCBuZXcgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVDYWNoZShmZXRjaFJlc3VsdDogeyBkYXRhOiBDb2xsZWN0aW9uSW5kZXg7IGV0YWc/OiBzdHJpbmc7IGxhc3RNb2RpZmllZD86IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2hlY2tzdW0gPSB0aGlzLmNhbGN1bGF0ZUNoZWNrc3VtKGZldGNoUmVzdWx0LmRhdGEpO1xuICAgIFxuICAgIHRoaXMuY2FjaGVkSW5kZXggPSB7XG4gICAgICBkYXRhOiBmZXRjaFJlc3VsdC5kYXRhLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZXRhZzogZmV0Y2hSZXN1bHQuZXRhZyxcbiAgICAgIGxhc3RNb2RpZmllZDogZmV0Y2hSZXN1bHQubGFzdE1vZGlmaWVkLFxuICAgICAgdmVyc2lvbjogZmV0Y2hSZXN1bHQuZGF0YS52ZXJzaW9uLFxuICAgICAgY2hlY2tzdW1cbiAgICB9O1xuICAgIFxuICAgIGF3YWl0IHRoaXMuc2F2ZVRvRGlzaygpO1xuICAgIFxuICAgIGxvZ2dlci5kZWJ1ZygnQ29sbGVjdGlvbiBpbmRleCBjYWNoZSB1cGRhdGVkJywge1xuICAgICAgdmVyc2lvbjogZmV0Y2hSZXN1bHQuZGF0YS52ZXJzaW9uLFxuICAgICAgdG90YWxFbGVtZW50czogZmV0Y2hSZXN1bHQuZGF0YS50b3RhbF9lbGVtZW50cyxcbiAgICAgIGNoZWNrc3VtXG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgY2hlY2tzdW0gZm9yIGRhdGEgaW50ZWdyaXR5IHZlcmlmaWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVDaGVja3N1bShkYXRhOiBDb2xsZWN0aW9uSW5kZXgpOiBzdHJpbmcge1xuICAgIC8vIFNpbXBsZSBjaGVja3N1bSBiYXNlZCBvbiBrZXkgcHJvcGVydGllc1xuICAgIGNvbnN0IGNoZWNrc3VtRGF0YSA9IHtcbiAgICAgIHZlcnNpb246IGRhdGEudmVyc2lvbixcbiAgICAgIGdlbmVyYXRlZDogZGF0YS5nZW5lcmF0ZWQsXG4gICAgICB0b3RhbF9lbGVtZW50czogZGF0YS50b3RhbF9lbGVtZW50c1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KGNoZWNrc3VtRGF0YSkpLnRvU3RyaW5nKCdiYXNlNjQnKS5zdWJzdHJpbmcoMCwgdGhpcy5DSEVDS1NVTV9MRU5HVEgpO1xuICB9XG4gIFxuICAvKipcbiAgICogTG9hZCBjYWNoZSBmcm9tIGRpc2tcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZEZyb21EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZnMucmVhZEZpbGUodGhpcy5DQUNIRV9GSUxFLCAndXRmOCcpO1xuICAgICAgY29uc3QgY2FjaGVkID0gSlNPTi5wYXJzZShkYXRhKSBhcyBDb2xsZWN0aW9uSW5kZXhDYWNoZUVudHJ5O1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBjYWNoZSBzdHJ1Y3R1cmVcbiAgICAgIGlmICghY2FjaGVkLmRhdGEgfHwgIWNhY2hlZC50aW1lc3RhbXAgfHwgIWNhY2hlZC52ZXJzaW9uKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnSW52YWxpZCBjYWNoZSBzdHJ1Y3R1cmUsIGlnbm9yaW5nJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gVmVyaWZ5IGNoZWNrc3VtIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKGNhY2hlZC5jaGVja3N1bSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZENoZWNrc3VtID0gdGhpcy5jYWxjdWxhdGVDaGVja3N1bShjYWNoZWQuZGF0YSk7XG4gICAgICAgIGlmIChjYWNoZWQuY2hlY2tzdW0gIT09IGV4cGVjdGVkQ2hlY2tzdW0pIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoJ0NhY2hlIGNoZWNrc3VtIG1pc21hdGNoLCBpZ25vcmluZyBjYWNoZWQgZGF0YScpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLmNhY2hlZEluZGV4ID0gY2FjaGVkO1xuICAgICAgXG4gICAgICBjb25zdCBhZ2UgPSBEYXRlLm5vdygpIC0gY2FjaGVkLnRpbWVzdGFtcDtcbiAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IGFnZSA+IHRoaXMuVFRMX01TO1xuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ0xvYWRlZCBjb2xsZWN0aW9uIGluZGV4IGZyb20gZGlzayBjYWNoZScsIHtcbiAgICAgICAgdmVyc2lvbjogY2FjaGVkLnZlcnNpb24sXG4gICAgICAgIGFnZTogTWF0aC5yb3VuZChhZ2UgLyAxMDAwKSxcbiAgICAgICAgaXNFeHBpcmVkLFxuICAgICAgICB0b3RhbEVsZW1lbnRzOiBjYWNoZWQuZGF0YS50b3RhbF9lbGVtZW50c1xuICAgICAgfSk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKChlcnJvciBhcyBhbnkpLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGxvYWQgY2FjaGUgZnJvbSBkaXNrJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFNhdmUgY2FjaGUgdG8gZGlza1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9EaXNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jYWNoZWRJbmRleCkgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBFbnN1cmUgY2FjaGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgICAgYXdhaXQgZnMubWtkaXIocGF0aC5kaXJuYW1lKHRoaXMuQ0FDSEVfRklMRSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICBjb25zdCBjYWNoZURhdGEgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNhY2hlZEluZGV4LCBudWxsLCB0aGlzLkpTT05fSU5ERU5UKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0aGlzLkNBQ0hFX0ZJTEUsIGNhY2hlRGF0YSwgJ3V0ZjgnKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmRlYnVnKCdDb2xsZWN0aW9uIGluZGV4IGNhY2hlIHNhdmVkIHRvIGRpc2snKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gc2F2ZSBjYWNoZSB0byBkaXNrJywgeyBlcnJvcjogdGhpcy5nZXRFcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgLy8gRG9uJ3QgdGhyb3cgLSBjYWNoZSBwZXJzaXN0ZW5jZSBmYWlsdXJlcyBzaG91bGRuJ3QgYnJlYWsgZnVuY3Rpb25hbGl0eVxuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENpcmN1aXQgYnJlYWtlciBsb2dpY1xuICAgKi9cbiAgcHJpdmF0ZSBpc0NpcmN1aXRCcmVha2VyT3BlbigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzIDwgdGhpcy5DSVJDVUlUX0JSRUFLRVJfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHRpbWVTaW5jZUxhc3RGYWlsdXJlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2lyY3VpdEJyZWFrZXJMYXN0RmFpbHVyZTtcbiAgICByZXR1cm4gdGltZVNpbmNlTGFzdEZhaWx1cmUgPCB0aGlzLkNJUkNVSVRfQlJFQUtFUl9USU1FT1VUX01TO1xuICB9XG4gIFxuICBwcml2YXRlIHJlY29yZENpcmN1aXRCcmVha2VyRmFpbHVyZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMrKztcbiAgICB0aGlzLmNpcmN1aXRCcmVha2VyTGFzdEZhaWx1cmUgPSBEYXRlLm5vdygpO1xuICAgIFxuICAgIGlmICh0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMgPj0gdGhpcy5DSVJDVUlUX0JSRUFLRVJfVEhSRVNIT0xEKSB7XG4gICAgICBsb2dnZXIud2FybignQ2lyY3VpdCBicmVha2VyIG9wZW5lZCBkdWUgdG8gcmVwZWF0ZWQgZmFpbHVyZXMnLCB7XG4gICAgICAgIGZhaWx1cmVzOiB0aGlzLmNpcmN1aXRCcmVha2VyRmFpbHVyZXMsXG4gICAgICAgIHRpbWVvdXRNczogdGhpcy5DSVJDVUlUX0JSRUFLRVJfVElNRU9VVF9NU1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogVXRpbGl0eSBtZXRob2RzXG4gICAqL1xuICBwcml2YXRlIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yLm1lc3NhZ2U7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3MgZm9yIG1vbml0b3JpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKToge1xuICAgIGlzVmFsaWQ6IGJvb2xlYW47XG4gICAgYWdlOiBudW1iZXI7XG4gICAgaGFzQ2FjaGU6IGJvb2xlYW47XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICB0b3RhbEVsZW1lbnRzPzogbnVtYmVyO1xuICAgIGlzUmVmcmVzaGluZzogYm9vbGVhbjtcbiAgICBjaXJjdWl0QnJlYWtlckZhaWx1cmVzOiBudW1iZXI7XG4gICAgY2lyY3VpdEJyZWFrZXJPcGVuOiBib29sZWFuO1xuICB9IHtcbiAgICBpZiAoIXRoaXMuY2FjaGVkSW5kZXgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBhZ2U6IDAsXG4gICAgICAgIGhhc0NhY2hlOiBmYWxzZSxcbiAgICAgICAgaXNSZWZyZXNoaW5nOiB0aGlzLmlzUmVmcmVzaGluZyxcbiAgICAgICAgY2lyY3VpdEJyZWFrZXJGYWlsdXJlczogdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzLFxuICAgICAgICBjaXJjdWl0QnJlYWtlck9wZW46IHRoaXMuaXNDaXJjdWl0QnJlYWtlck9wZW4oKVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgYWdlID0gRGF0ZS5ub3coKSAtIHRoaXMuY2FjaGVkSW5kZXgudGltZXN0YW1wO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiAhdGhpcy5pc0NhY2hlRXhwaXJlZCgpLFxuICAgICAgYWdlOiBNYXRoLnJvdW5kKGFnZSAvIDEwMDApLCAvLyBhZ2UgaW4gc2Vjb25kc1xuICAgICAgaGFzQ2FjaGU6IHRydWUsXG4gICAgICB2ZXJzaW9uOiB0aGlzLmNhY2hlZEluZGV4LnZlcnNpb24sXG4gICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmNhY2hlZEluZGV4LmRhdGEudG90YWxfZWxlbWVudHMsXG4gICAgICBpc1JlZnJlc2hpbmc6IHRoaXMuaXNSZWZyZXNoaW5nLFxuICAgICAgY2lyY3VpdEJyZWFrZXJGYWlsdXJlczogdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzLFxuICAgICAgY2lyY3VpdEJyZWFrZXJPcGVuOiB0aGlzLmlzQ2lyY3VpdEJyZWFrZXJPcGVuKClcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYXIgYWxsIGNhY2hlIGRhdGFcbiAgICovXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jYWNoZWRJbmRleCA9IG51bGw7XG4gICAgdGhpcy5jaXJjdWl0QnJlYWtlckZhaWx1cmVzID0gMDtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRoaXMuQ0FDSEVfRklMRSk7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbGxlY3Rpb24gaW5kZXggY2FjaGUgZmlsZSBkZWxldGVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlICE9PSAnRU5PRU5UJykge1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0ZhaWxlZCB0byBkZWxldGUgY2FjaGUgZmlsZScsIHsgZXJyb3I6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBXYWl0IGZvciBhbnkgb25nb2luZyBiYWNrZ3JvdW5kIHJlZnJlc2ggdG8gY29tcGxldGVcbiAgICovXG4gIGFzeW5jIHdhaXRGb3JCYWNrZ3JvdW5kUmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5iYWNrZ3JvdW5kUmVmcmVzaFByb21pc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuYmFja2dyb3VuZFJlZnJlc2hQcm9taXNlO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Validation and type safety
|
|
9
9
|
* - Atomic updates with backup
|
|
10
10
|
* - Privacy-first defaults
|
|
11
|
-
* - OAuth client ID storage for
|
|
11
|
+
* - OAuth client ID storage for MCP client integration
|
|
12
12
|
*/
|
|
13
13
|
export interface UserConfig {
|
|
14
14
|
username: string | null;
|