@dollhousemcp/mcp-server 1.6.0 → 1.6.1
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 +9 -0
- package/README.md +6 -6
- package/dist/auth/GitHubAuthManager.d.ts +13 -3
- package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
- package/dist/auth/GitHubAuthManager.js +27 -12
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.6.1] - 2025-08-25
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- **OAuth Default Client ID** - Fixed "just works" authentication for NPM installs
|
|
14
|
+
- Added default DollhouseMCP OAuth Client ID for seamless setup
|
|
15
|
+
- Users can now run `setup_github_auth` without any configuration
|
|
16
|
+
- OAuth device flow with 8-character code works out of the box
|
|
17
|
+
- Maintains backward compatibility with environment variables and config
|
|
18
|
+
|
|
10
19
|
## [1.6.0] - 2025-08-25
|
|
11
20
|
|
|
12
21
|
### Added
|
package/README.md
CHANGED
|
@@ -30,9 +30,9 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
|
|
|
30
30
|
**🏪 Collection**: https://github.com/DollhouseMCP/collection
|
|
31
31
|
**📦 NPM Package**: https://www.npmjs.com/package/@dollhousemcp/mcp-server
|
|
32
32
|
**🌍 Website**: https://dollhousemcp.com (planned)
|
|
33
|
-
**📦 Version**: v1.6.
|
|
33
|
+
**📦 Version**: v1.6.1
|
|
34
34
|
|
|
35
|
-
> **🎉 New in v1.6.
|
|
35
|
+
> **🎉 New in v1.6.1**: Default OAuth client ID for seamless GitHub authentication! Users can now authenticate without any configuration. The portfolio management system, GitHub integration, and 42 MCP tools from v1.6.0 are also included.
|
|
36
36
|
|
|
37
37
|
> **⚠️ Breaking Change**: PersonaTools have been streamlined in v1.6.0. 9 redundant tools were removed in favor of ElementTools. See [PersonaTools Migration Guide](docs/PERSONATOOLS_MIGRATION_GUIDE.md) for migration instructions.
|
|
38
38
|
|
|
@@ -42,8 +42,8 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
|
|
|
42
42
|
# Install globally
|
|
43
43
|
npm install -g @dollhousemcp/mcp-server
|
|
44
44
|
|
|
45
|
-
# ✅ v1.
|
|
46
|
-
# Browse and submit to collection without authentication:
|
|
45
|
+
# ✅ v1.6.1 includes default OAuth - authentication just works!
|
|
46
|
+
# Browse and submit to collection with or without authentication:
|
|
47
47
|
# npm install -g @dollhousemcp/mcp-server@latest
|
|
48
48
|
|
|
49
49
|
# Add to Claude Desktop config (see path below for your OS)
|
|
@@ -735,7 +735,7 @@ get_collection_cache_health
|
|
|
735
735
|
|
|
736
736
|
### GitHub Authentication (v1.5.0+)
|
|
737
737
|
|
|
738
|
-
DollhouseMCP supports GitHub OAuth device flow authentication for enhanced features. **NEW in v1.
|
|
738
|
+
DollhouseMCP supports GitHub OAuth device flow authentication for enhanced features. **NEW in v1.6.1**: Default OAuth client ID built-in - no configuration needed!
|
|
739
739
|
|
|
740
740
|
#### OAuth Setup (For Self-Hosting)
|
|
741
741
|
|
|
@@ -1547,7 +1547,7 @@ This project is licensed under the **AGPL-3.0** License with Platform Stability
|
|
|
1547
1547
|
|
|
1548
1548
|
## 🏷️ Version History
|
|
1549
1549
|
|
|
1550
|
-
### v1.6.
|
|
1550
|
+
### v1.6.1 - August 25, 2025 (Current - Develop Branch)
|
|
1551
1551
|
|
|
1552
1552
|
**⚠️ Breaking Changes**:
|
|
1553
1553
|
- 🔄 **Serialization Format Change** - `BaseElement.serialize()` now returns markdown with YAML frontmatter instead of JSON
|
|
@@ -28,9 +28,19 @@ export interface AuthStatus {
|
|
|
28
28
|
*/
|
|
29
29
|
export declare class GitHubAuthManager {
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* DollhouseMCP's official OAuth App Client ID
|
|
32
|
+
* This is PUBLIC information - OAuth Client IDs are meant to be visible.
|
|
33
|
+
* Only Client Secrets are private (device flow doesn't use secrets).
|
|
34
|
+
*
|
|
35
|
+
* This Client ID enables the GitHub device flow authentication
|
|
36
|
+
* allowing users to authenticate with an 8-character code.
|
|
37
|
+
*/
|
|
38
|
+
private static readonly DEFAULT_CLIENT_ID;
|
|
39
|
+
/**
|
|
40
|
+
* Get the CLIENT_ID from environment variable, ConfigManager, or default
|
|
41
|
+
* Priority: Environment variable > ConfigManager > Default Client ID
|
|
42
|
+
*
|
|
43
|
+
* @returns The OAuth Client ID to use for authentication
|
|
34
44
|
*/
|
|
35
45
|
private static getClientId;
|
|
36
46
|
private static readonly DEVICE_CODE_URL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GitHubAuthManager.d.ts","sourceRoot":"","sources":["../../src/auth/GitHubAuthManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B
|
|
1
|
+
{"version":3,"file":"GitHubAuthManager.d.ts","sourceRoot":"","sources":["../../src/auth/GitHubAuthManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;IAEnE;;;;;OAKG;mBACkB,WAAW;IA4BhC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAA0C;IACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAiD;IAClF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAGjE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAQ;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAO;IAEhD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,aAAa,CAAgC;gBAEzC,QAAQ,EAAE,QAAQ;IAI9B;;OAEG;YACW,cAAc;IA2C5B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA8B1C;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA4DvD;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAgD,GAAG,OAAO,CAAC,aAAa,CAAC;IAkF1H;;OAEG;IACG,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC;IA4B/E;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC1C;;OAEG;YACW,UAAU;IAYxB;;OAEG;YACW,aAAa;IA6E3B;;OAEG;IACH,sBAAsB,CAAC,cAAc,EAAE,kBAAkB,GAAG,MAAM;IAmBlE;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAK3C;;OAEG;YACW,aAAa;IAmB3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;CAyBjC"}
|
|
@@ -14,26 +14,44 @@ import { ConfigManager } from '../config/ConfigManager.js';
|
|
|
14
14
|
*/
|
|
15
15
|
export class GitHubAuthManager {
|
|
16
16
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* DollhouseMCP's official OAuth App Client ID
|
|
18
|
+
* This is PUBLIC information - OAuth Client IDs are meant to be visible.
|
|
19
|
+
* Only Client Secrets are private (device flow doesn't use secrets).
|
|
20
|
+
*
|
|
21
|
+
* This Client ID enables the GitHub device flow authentication
|
|
22
|
+
* allowing users to authenticate with an 8-character code.
|
|
23
|
+
*/
|
|
24
|
+
static DEFAULT_CLIENT_ID = 'Ov23liXGGP9jNrBhBNfO';
|
|
25
|
+
/**
|
|
26
|
+
* Get the CLIENT_ID from environment variable, ConfigManager, or default
|
|
27
|
+
* Priority: Environment variable > ConfigManager > Default Client ID
|
|
28
|
+
*
|
|
29
|
+
* @returns The OAuth Client ID to use for authentication
|
|
20
30
|
*/
|
|
21
31
|
static async getClientId() {
|
|
22
32
|
// Check environment variable first (for backward compatibility)
|
|
23
33
|
const envClientId = process.env.DOLLHOUSE_GITHUB_CLIENT_ID;
|
|
24
34
|
if (envClientId) {
|
|
35
|
+
logger.debug('Using OAuth Client ID from environment variable');
|
|
25
36
|
return envClientId;
|
|
26
37
|
}
|
|
27
|
-
//
|
|
38
|
+
// Check ConfigManager for stored configuration
|
|
28
39
|
try {
|
|
29
40
|
const configManager = ConfigManager.getInstance();
|
|
30
41
|
await configManager.loadConfig();
|
|
31
|
-
|
|
42
|
+
const configClientId = configManager.getGitHubClientId();
|
|
43
|
+
if (configClientId) {
|
|
44
|
+
logger.debug('Using OAuth Client ID from config');
|
|
45
|
+
return configClientId;
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
48
|
catch (error) {
|
|
34
|
-
logger.debug('
|
|
35
|
-
return null;
|
|
49
|
+
logger.debug('No OAuth Client ID in config', { error });
|
|
36
50
|
}
|
|
51
|
+
// Use default DollhouseMCP OAuth App Client ID
|
|
52
|
+
// This enables "just works" experience for NPM installs
|
|
53
|
+
logger.debug('Using default DollhouseMCP OAuth Client ID');
|
|
54
|
+
return GitHubAuthManager.DEFAULT_CLIENT_ID;
|
|
37
55
|
}
|
|
38
56
|
// GitHub OAuth endpoints
|
|
39
57
|
static DEVICE_CODE_URL = 'https://github.com/login/device/code';
|
|
@@ -117,10 +135,7 @@ export class GitHubAuthManager {
|
|
|
117
135
|
*/
|
|
118
136
|
async initiateDeviceFlow() {
|
|
119
137
|
const clientId = await GitHubAuthManager.getClientId();
|
|
120
|
-
|
|
121
|
-
throw new Error('GitHub OAuth client ID is not configured. ' +
|
|
122
|
-
'Please set the DOLLHOUSE_GITHUB_CLIENT_ID environment variable.');
|
|
123
|
-
}
|
|
138
|
+
// getClientId() always returns a value (env, config, or default)
|
|
124
139
|
try {
|
|
125
140
|
const response = await this.fetchWithRetry(GitHubAuthManager.DEVICE_CODE_URL, {
|
|
126
141
|
method: 'POST',
|
|
@@ -489,4 +504,4 @@ Don't have a GitHub account? You'll be prompted to create one (it's free!)
|
|
|
489
504
|
}
|
|
490
505
|
}
|
|
491
506
|
}
|
|
492
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQXV0aE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9HaXRIdWJBdXRoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQXdCM0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7OztPQUlHO0lBQ0ssTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXO1FBQzlCLGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1FBQzNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixJQUFJLENBQUM7WUFDSCxNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEQsTUFBTSxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakMsT0FBTyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENB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Q0FBQztRQUN6RSxDQUFDO1FBRUQsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHdCQUF3QixDQUFDLE1BQWMsRUFBRSxTQUFpQjtRQUNoRSxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxHQUFHO2dCQUNOLE9BQU8sZ0ZBQWdGLENBQUM7WUFDMUYsS0FBSyxHQUFHO2dCQUNOLE9BQU8sZ0hBQWdILENBQUM7WUFDMUgsS0FBSyxHQUFHO2dCQUNOLE9BQU8sdUVBQXVFLENBQUM7WUFDakYsS0FBSyxHQUFHO2dCQUNOLE9BQU8sNERBQTRELENBQUM7WUFDdEUsS0FBSyxHQUFHO2dCQUNOLE9BQU8scUVBQXFFLENBQUM7WUFDL0UsS0FBSyxHQUFHO2dCQUNOLE9BQU8sa0VBQWtFLENBQUM7WUFDNUUsS0FBSyxHQUFHLENBQUM7WUFDVCxLQUFLLEdBQUcsQ0FBQztZQUNULEtBQUssR0FBRyxDQUFDO1lBQ1QsS0FBSyxHQUFHO2dCQUNOLE9BQU8sNEVBQTRFLENBQUM7WUFDdEY7Z0JBQ0Usb0VBQW9FO2dCQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxTQUFTLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU8sc0JBQXNCLFNBQVMsd0RBQXdELENBQUM7UUFDbkcsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdpdEh1YiBhdXRoZW50aWNhdGlvbiBtYW5hZ2VyIHVzaW5nIE9BdXRoIGRldmljZSBmbG93XG4gKiBIYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGZvciBNQ1Agc2VydmVycyB3aXRob3V0IHJlcXVpcmluZyBjbGllbnQgc2VjcmV0c1xuICovXG5cbmltcG9ydCB7IFRva2VuTWFuYWdlciB9IGZyb20gJy4uL3NlY3VyaXR5L3Rva2VuTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgQVBJQ2FjaGUgfSBmcm9tICcuLi9jYWNoZS9BUElDYWNoZS5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIsIEVycm9yQ2F0ZWdvcnkgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgQ29uZmlnTWFuYWdlciB9IGZyb20gJy4uL2NvbmZpZy9Db25maWdNYW5hZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VDb2RlUmVzcG9uc2Uge1xuICBkZXZpY2VfY29kZTogc3RyaW5nO1xuICB1c2VyX2NvZGU6IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaTogc3RyaW5nO1xuICBleHBpcmVzX2luOiBudW1iZXI7XG4gIGludGVydmFsOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5SZXNwb25zZSB7XG4gIGFjY2Vzc190b2tlbjogc3RyaW5nO1xuICB0b2tlbl90eXBlOiBzdHJpbmc7XG4gIHNjb3BlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aFN0YXR1cyB7XG4gIGlzQXV0aGVudGljYXRlZDogYm9vbGVhbjtcbiAgaGFzVG9rZW46IGJvb2xlYW47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICBzY29wZXM/OiBzdHJpbmdbXTtcbiAgZXhwaXJlc0F0PzogRGF0ZTtcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIEdpdEh1YiBhdXRoZW50aWNhdGlvbiB1c2luZyB0aGUgT0F1dGggZGV2aWNlIGZsb3dcbiAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoIGZvciBDTEkvZGVza3RvcCBhcHBsaWNhdGlvbnNcbiAqL1xuZXhwb3J0IGNsYXNzIEdpdEh1YkF1dGhNYW5hZ2VyIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgQ0xJRU5UX0lEIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGUgb3IgQ29uZmlnTWFuYWdlclxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZSB0YWtlcyBwcmVjZWRlbmNlLCB0aGVuIENvbmZpZ01hbmFnZXJcbiAgICogTm8gaGFyZGNvZGVkIGZhbGxiYWNrIGZvciBzZWN1cml0eSByZWFzb25zXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBhc3luYyBnZXRDbGllbnRJZCgpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAvLyBDaGVjayBlbnZpcm9ubWVudCB2YXJpYWJsZSBmaXJzdCAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgY29uc3QgZW52Q2xpZW50SWQgPSBwcm9jZXNzLmVudi5ET0xMSE9VU0VfR0lUSFVCX0NMSUVOVF9JRDtcbiAgICBpZiAoZW52Q2xpZW50SWQpIHtcbiAgICAgIHJldHVybiBlbnZDbGllbnRJZDtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBDb25maWdNYW5hZ2VyXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBDb25maWdNYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLmxvYWRDb25maWcoKTtcbiAgICAgIHJldHVybiBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZvciBjbGllbnQgSUQnLCB7IGVycm9yIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvLyBHaXRIdWIgT0F1dGggZW5kcG9pbnRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFVklDRV9DT0RFX1VSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vbG9naW4vZGV2aWNlL2NvZGUnO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBUT0tFTl9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL29hdXRoL2FjY2Vzc190b2tlbic7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFVTRVJfVVJMID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcic7XG4gIFxuICAvLyBQb2xsaW5nIGNvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QT0xMX0lOVEVSVkFMID0gNTAwMDsgLy8gNSBzZWNvbmRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9QT0xMX0FUVEVNUFRTID0gMTgwOyAvLyAxNSBtaW51dGVzIHRvdGFsXG4gIFxuICBwcml2YXRlIGFwaUNhY2hlOiBBUElDYWNoZTtcbiAgcHJpdmF0ZSBhY3RpdmVQb2xsaW5nOiBBYm9ydENvbnRyb2xsZXIgfCBudWxsID0gbnVsbDtcbiAgXG4gIGNvbnN0cnVjdG9yKGFwaUNhY2hlOiBBUElDYWNoZSkge1xuICAgIHRoaXMuYXBpQ2FjaGUgPSBhcGlDYWNoZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBuZXR3b3JrIHJlcXVlc3Qgd2l0aCByZXRyeSBsb2dpY1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdpdGhSZXRyeShcbiAgICB1cmw6IHN0cmluZywgXG4gICAgb3B0aW9uczogUmVxdWVzdEluaXQsIFxuICAgIG1heFJldHJpZXM6IG51bWJlciA9IDMsXG4gICAgcmV0cnlEZWxheTogbnVtYmVyID0gMTAwMFxuICApOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgbGV0IGxhc3RFcnJvcjogRXJyb3IgfCBudWxsID0gbnVsbDtcbiAgICBcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhSZXRyaWVzOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbGFzdEVycm9yID0gZXJyb3IgYXMgRXJyb3I7XG4gICAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuZmV0Y2hXaXRoUmV0cnknLCBlcnJvciwgeyB1cmwsIGF0dGVtcHQgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgbmV0d29yayBlcnJvciB0aGF0IHNob3VsZCBiZSByZXRyaWVkXG4gICAgICAgIGNvbnN0IGlzTmV0d29ya0Vycm9yID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAoXG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRUNPTk5SRUZVU0VEJykgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFVElNRURPVVQnKSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VOT1RGT1VORCcpIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnbmV0d29yaycpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNOZXR3b3JrRXJyb3IgJiYgYXR0ZW1wdCA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYE5ldHdvcmsgcmVxdWVzdCBmYWlsZWQsIHJldHJ5aW5nICgke2F0dGVtcHR9LyR7bWF4UmV0cmllc30pYCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgICAgICBuZXh0UmV0cnlJbjogcmV0cnlEZWxheSAqIGF0dGVtcHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJldHJ5RGVsYXkgKiBhdHRlbXB0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbmV0d29yayBlcnJvciBvciBsYXN0IGF0dGVtcHQsIHRocm93IGltbWVkaWF0ZWx5XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhyb3cgbGFzdEVycm9yIHx8IG5ldyBFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCBhZnRlciBhbGwgcmV0cmllcycpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgY3VycmVudCBhdXRoZW50aWNhdGlvbiBzdGF0dXNcbiAgICovXG4gIGFzeW5jIGdldEF1dGhTdGF0dXMoKTogUHJvbWlzZTxBdXRoU3RhdHVzPiB7XG4gICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgIFxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2UsXG4gICAgICAgIGhhc1Rva2VuOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyeSB0byBnZXQgdXNlciBpbmZvIHRvIHZhbGlkYXRlIHRva2VuXG4gICAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuZmV0Y2hVc2VySW5mbyh0b2tlbik7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgaGFzVG9rZW46IHRydWUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgICAgc2NvcGVzOiB1c2VySW5mby5zY29wZXNcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFRva2VuIG1pZ2h0IGJlIGludmFsaWQgb3IgZXhwaXJlZFxuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5jaGVja0F1dGhTdGF0dXMnLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNUb2tlbjogdHJ1ZSAvLyBIYXMgdG9rZW4gYnV0IGl0J3MgaW52YWxpZFxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWF0ZSB0aGUgZGV2aWNlIGZsb3cgYXV0aGVudGljYXRpb24gcHJvY2Vzc1xuICAgKi9cbiAgYXN5bmMgaW5pdGlhdGVEZXZpY2VGbG93KCk6IFByb21pc2U8RGV2aWNlQ29kZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgY2xpZW50SWQgPSBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpO1xuICAgIFxuICAgIGlmICghY2xpZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0dpdEh1YiBPQXV0aCBjbGllbnQgSUQgaXMgbm90IGNvbmZpZ3VyZWQuICcgK1xuICAgICAgICAnUGxlYXNlIHNldCB0aGUgRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQgZW52aXJvbm1lbnQgdmFyaWFibGUuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaFdpdGhSZXRyeShHaXRIdWJBdXRoTWFuYWdlci5ERVZJQ0VfQ09ERV9VUkwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsXG4gICAgICAgICAgc2NvcGU6ICdwdWJsaWNfcmVwbyByZWFkOnVzZXInXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAvLyBQcm92aWRlIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZXMgYmFzZWQgb24gc3RhdHVzIGNvZGVzXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHJlc3BvbnNlLnN0YXR1cywgJ2RldmljZSBmbG93IGluaXRpYWxpemF0aW9uJyk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRGV2aWNlIGZsb3cgaW5pdGlhdGlvbiBmYWlsZWQnLCB7IFxuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBcbiAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0IFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIHJlc3BvbnNlXG4gICAgICBpZiAoIWRhdGEuZGV2aWNlX2NvZGUgfHwgIWRhdGEudXNlcl9jb2RlIHx8ICFkYXRhLnZlcmlmaWNhdGlvbl91cmkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRldmljZSBmbG93IHJlc3BvbnNlIGZyb20gR2l0SHViJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWxcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93JyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiBPQXV0aCBkZXZpY2UgZmxvdyBpbml0aWF0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICB1c2VyQ29kZTogZGF0YS51c2VyX2NvZGUsXG4gICAgICAgICAgZXhwaXJlc0luOiBkYXRhLmV4cGlyZXNfaW4sXG4gICAgICAgICAgaW50ZXJ2YWw6IGRhdGEuaW50ZXJ2YWxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiBkYXRhIGFzIERldmljZUNvZGVSZXNwb25zZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5pbml0aWF0ZURldmljZUZsb3cnLCBlcnJvcik7XG4gICAgICBcbiAgICAgIC8vIFJlLXRocm93IGlmIGl0J3MgYWxyZWFkeSBhIHByb3Blcmx5IGZvcm1hdHRlZCBlcnJvclxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnR2l0SHViIE9BdXRoJykpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHN0YXJ0IEdpdEh1YiBhdXRoZW50aWNhdGlvbi4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4nKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBQb2xsIGZvciB0b2tlbiBhZnRlciB1c2VyIGhhcyBhdXRob3JpemVkIHRoZSBkZXZpY2VcbiAgICovXG4gIGFzeW5jIHBvbGxGb3JUb2tlbihkZXZpY2VDb2RlOiBzdHJpbmcsIGludGVydmFsOiBudW1iZXIgPSBHaXRIdWJBdXRoTWFuYWdlci5ERUZBVUxUX1BPTExfSU5URVJWQUwpOiBQcm9taXNlPFRva2VuUmVzcG9uc2U+IHtcbiAgICAvLyBDcmVhdGUgbmV3IGFib3J0IGNvbnRyb2xsZXIgZm9yIHRoaXMgcG9sbGluZyBzZXNzaW9uXG4gICAgdGhpcy5hY3RpdmVQb2xsaW5nID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMuYWN0aXZlUG9sbGluZy5zaWduYWw7XG4gICAgXG4gICAgbGV0IGF0dGVtcHRzID0gMDtcbiAgICBcbiAgICB0cnkge1xuICAgICAgd2hpbGUgKGF0dGVtcHRzIDwgR2l0SHViQXV0aE1hbmFnZXIuTUFYX1BPTExfQVRURU1QVFMpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgcG9sbGluZyB3YXMgYWJvcnRlZFxuICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHBvbGxpbmcgd2FzIGNhbmNlbGxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBhdHRlbXB0cysrO1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChHaXRIdWJBdXRoTWFuYWdlci5UT0tFTl9VUkwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2xpZW50X2lkOiBhd2FpdCBHaXRIdWJBdXRoTWFuYWdlci5nZXRDbGllbnRJZCgpIHx8ICcnLFxuICAgICAgICAgICAgZGV2aWNlX2NvZGU6IGRldmljZUNvZGUsXG4gICAgICAgICAgICBncmFudF90eXBlOiAndXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGUnXG4gICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgZm9yIHZhcmlvdXMgcmVzcG9uc2Ugc3RhdGVzXG4gICAgICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgc3dpdGNoIChkYXRhLmVycm9yKSB7XG4gICAgICAgICAgICBjYXNlICdhdXRob3JpemF0aW9uX3BlbmRpbmcnOlxuICAgICAgICAgICAgICAvLyBVc2VyIGhhc24ndCBhdXRob3JpemVkIHlldCwga2VlcCBwb2xsaW5nXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ3Nsb3dfZG93bic6XG4gICAgICAgICAgICAgIC8vIEluY3JlYXNlIHBvbGxpbmcgaW50ZXJ2YWxcbiAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBNYXRoLm1pbihpbnRlcnZhbCAqIDEuNSwgMzAwMDApOyAvLyBNYXggMzAgc2Vjb25kc1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1Nsb3dpbmcgZG93biBwb2xsaW5nIGludGVydmFsJywgeyBuZXdJbnRlcnZhbDogaW50ZXJ2YWwgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2V4cGlyZWRfdG9rZW4nOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhdXRob3JpemF0aW9uIGNvZGUgaGFzIGV4cGlyZWQuIFBsZWFzZSBzdGFydCBvdmVyLicpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNhc2UgJ2FjY2Vzc19kZW5pZWQnOlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhvcml6YXRpb24gd2FzIGRlbmllZC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBlcnJvciBmb3IgZGVidWdnaW5nXG4gICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnT0F1dGggZGV2aWNlIGZsb3cgZXJyb3InLCB7IFxuICAgICAgICAgICAgICAgIGVycm9yOiBkYXRhLmVycm9yLCBcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGF0YS5lcnJvcl9kZXNjcmlwdGlvbiBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkLiBQbGVhc2UgdHJ5IHN0YXJ0aW5nIHRoZSBwcm9jZXNzIGFnYWluLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgIC8vIFN1Y2Nlc3MhXG4gICAgICAgICAgcmV0dXJuIGRhdGEgYXMgVG9rZW5SZXNwb25zZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gV2FpdCBiZWZvcmUgbmV4dCBwb2xsXG4gICAgICAgIC8vIFdhaXQgZm9yIGludGVydmFsIHdpdGggYWJvcnQgc3VwcG9ydFxuICAgICAgICBhd2FpdCB0aGlzLndhaXRXaXRoQWJvcnQoaW50ZXJ2YWwsIHNpZ25hbCk7XG4gICAgICAgIFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gTmV0d29yayBlcnJvcnMgc2hvdWxkbid0IHN0b3AgcG9sbGluZ1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLnBvbGxGb3JUb2tlbicsIGVycm9yLCB7IGF0dGVtcHQ6IGF0dGVtcHRzIH0pO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRXaXRoQWJvcnQoaW50ZXJ2YWwsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IG5ldyBFcnJvcignQXV0aGVudGljYXRpb24gdGltZWQgb3V0LiBQbGVhc2UgdHJ5IGFnYWluLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDbGVhciBhY3RpdmUgcG9sbGluZyByZWZlcmVuY2VcbiAgICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG51bGw7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ29tcGxldGUgdGhlIGF1dGhlbnRpY2F0aW9uIGZsb3cgYW5kIHN0b3JlIHRoZSB0b2tlblxuICAgKi9cbiAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbih0b2tlblJlc3BvbnNlOiBUb2tlblJlc3BvbnNlKTogUHJvbWlzZTxBdXRoU3RhdHVzPiB7XG4gICAgLy8gU3RvcmUgdG9rZW4gc2VjdXJlbHlcbiAgICBhd2FpdCB0aGlzLnN0b3JlVG9rZW4odG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xuICAgIFxuICAgIC8vIEdldCB1c2VyIGluZm9cbiAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuZmV0Y2hVc2VySW5mbyh0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbik7XG4gICAgXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gY29tcGxldGlvblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuY29tcGxldGVBdXRoZW50aWNhdGlvbicsXG4gICAgICBkZXRhaWxzOiAnR2l0SHViIE9BdXRoIGRldmljZSBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJJbmZvLmxvZ2luLFxuICAgICAgICBzY29wZXM6IHRva2VuUmVzcG9uc2Uuc2NvcGUuc3BsaXQoJyAnKSxcbiAgICAgICAgdG9rZW5UeXBlOiBUb2tlbk1hbmFnZXIuZ2V0VG9rZW5UeXBlKHRva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICBoYXNUb2tlbjogdHJ1ZSxcbiAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgIHNjb3BlczogdG9rZW5SZXNwb25zZS5zY29wZS5zcGxpdCgnICcpXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFyIHN0b3JlZCBhdXRoZW50aWNhdGlvbiBhbmQgcmV2b2tlIHRva2VuXG4gICAqL1xuICBhc3luYyBjbGVhckF1dGhlbnRpY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIHRva2VuIGJlZm9yZSBjbGVhcmluZyBpdFxuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW5Bc3luYygpO1xuICAgICAgXG4gICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byByZXZva2UgdGhlIHRva2VuIG9uIEdpdEh1YlxuICAgICAgICAvLyBOb3RlOiBHaXRIdWIgT0F1dGggdG9rZW5zIGRvbid0IGhhdmUgYSByZXZvY2F0aW9uIGVuZHBvaW50IGZvciBkZXZpY2UgZmxvdyB0b2tlbnNcbiAgICAgICAgLy8gQnV0IHdlJ2xsIGNsZWFyIHRoZSBjYWNoZSBhbmQgcmVtb3ZlIGZyb20gc3RvcmFnZVxuICAgICAgICBcbiAgICAgICAgLy8gQ2xlYXIgY2FjaGVkIHVzZXIgaW5mb1xuICAgICAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVE9LRU5fQ0FDSEVfQ0xFQVJFRCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6ICdHaXRIdWIgYXV0aGVudGljYXRpb24gY2xlYXJlZCBieSB1c2VyIHJlcXVlc3QnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICBoYWRUb2tlbjogdHJ1ZSxcbiAgICAgICAgICAgIHRva2VuUHJlZml4OiBUb2tlbk1hbmFnZXIuZ2V0VG9rZW5QcmVmaXgodG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmVtb3ZlIGZyb20gc2VjdXJlIHN0b3JhZ2VcbiAgICAgIGF3YWl0IFRva2VuTWFuYWdlci5yZW1vdmVTdG9yZWRUb2tlbigpO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGNsZWFyZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuY2xlYXJBdXRoZW50aWNhdGlvbicsIGVycm9yKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci5jcmVhdGVFcnJvcignRmFpbGVkIHRvIGNsZWFyIGF1dGhlbnRpY2F0aW9uJywgRXJyb3JDYXRlZ29yeS5BVVRIX0VSUk9SLCB1bmRlZmluZWQsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTdG9yZSB0b2tlbiBzZWN1cmVseSB1c2luZyBlbmNyeXB0ZWQgZmlsZSBzdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN0b3JlVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBUb2tlbk1hbmFnZXIuc3RvcmVHaXRIdWJUb2tlbih0b2tlbik7XG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIHRva2VuIHN0b3JlZCBzZWN1cmVseS4gWW91IGFyZSBub3cgYXV0aGVudGljYXRlZCEnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5zdG9yZVRva2VuJywgZXJyb3IpO1xuICAgICAgLy8gRmFsbGJhY2sgdG8gZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdHJ1Y3Rpb25zXG4gICAgICBsb2dnZXIuaW5mbygnRm9yIG1hbnVhbCBzZXR1cCwgeW91IGNhbiBzZXQgR0lUSFVCX1RPS0VOIGVudmlyb25tZW50IHZhcmlhYmxlLicpO1xuICAgICAgdGhyb3cgRXJyb3JIYW5kbGVyLndyYXBFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBzdG9yZSBHaXRIdWIgdG9rZW4nLCBFcnJvckNhdGVnb3J5LkFVVEhfRVJST1IpO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEZldGNoIHVzZXIgaW5mb3JtYXRpb24gZnJvbSBHaXRIdWJcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hVc2VySW5mbyh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuYXBpQ2FjaGUuZ2V0KEdpdEh1YkF1dGhNYW5hZ2VyLlVTRVJfVVJMKTtcbiAgICBpZiAoY2FjaGVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoR2l0SHViQXV0aE1hbmFnZXIuVVNFUl9VUkwsIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nXG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5nZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMocmVzcG9uc2Uuc3RhdHVzLCAndXNlciBpbmZvcm1hdGlvbiBmZXRjaCcpO1xuICAgICAgbG9nZ2VyLmRlYnVnKCdGYWlsZWQgdG8gZmV0Y2ggdXNlciBpbmZvJywgeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSB1c2VybmFtZSBhbmQgb3RoZXIgdGV4dCBmaWVsZHMgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3NcbiAgICBpZiAoZGF0YS5sb2dpbikge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGRhdGEubG9naW4pO1xuICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVTklDT0RFX1ZBTElEQVRJT05fRVJST1InLFxuICAgICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHVzZXJuYW1lIGNvbnRhaW5zIGludmFsaWQgVW5pY29kZScsXG4gICAgICAgICAgbWV0YWRhdGE6IHsgXG4gICAgICAgICAgICBvcmlnaW5hbExlbmd0aDogZGF0YS5sb2dpbi5sZW5ndGgsXG4gICAgICAgICAgICBkZXRlY3RlZElzc3VlczogdmFsaWRhdGlvbi5kZXRlY3RlZElzc3VlcyBcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlcm5hbWUgZm9ybWF0IGZyb20gR2l0SHViJyk7XG4gICAgICB9XG4gICAgICBkYXRhLmxvZ2luID0gdmFsaWRhdGlvbi5ub3JtYWxpemVkQ29udGVudDtcbiAgICB9XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGRpc3BsYXkgbmFtZSBpZiBwcmVzZW50XG4gICAgaWYgKGRhdGEubmFtZSkge1xuICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLm5hbWUpO1xuICAgICAgaWYgKG5hbWVWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgZGF0YS5uYW1lID0gbmFtZVZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEb24ndCBmYWlsIG9uIGRpc3BsYXkgbmFtZSwganVzdCByZW1vdmUgaXRcbiAgICAgICAgZGVsZXRlIGRhdGEubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQWRkIHNjb3BlcyBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICBjb25zdCBzY29wZUhlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW9hdXRoLXNjb3BlcycpO1xuICAgIGlmIChzY29wZUhlYWRlcikge1xuICAgICAgZGF0YS5zY29wZXMgPSBzY29wZUhlYWRlci5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gTG9nIHN1Y2Nlc3NmdWwgYXV0aGVudGljYXRpb24gZm9yIGF1ZGl0IHRyYWlsXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fU1VDQ0VTUycsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5mZXRjaFVzZXJJbmZvJyxcbiAgICAgIGRldGFpbHM6ICdHaXRIdWIgdXNlciBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICB1c2VybmFtZTogZGF0YS5sb2dpbixcbiAgICAgICAgaGFzRW1haWw6ICEhZGF0YS5lbWFpbCxcbiAgICAgICAgc2NvcGVzOiBkYXRhLnNjb3BlcyB8fCBbXVxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICB0aGlzLmFwaUNhY2hlLnNldChHaXRIdWJBdXRoTWFuYWdlci5VU0VSX1VSTCwgZGF0YSk7XG4gICAgXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgYXV0aGVudGljYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciB1c2Vyc1xuICAgKi9cbiAgZm9ybWF0QXV0aEluc3RydWN0aW9ucyhkZXZpY2VSZXNwb25zZTogRGV2aWNlQ29kZVJlc3BvbnNlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYPCflJAgKipHaXRIdWIgQXV0aGVudGljYXRpb24gUmVxdWlyZWQqKlxuXG5UbyBhY2Nlc3MgYWxsIERvbGxob3VzZU1DUCBmZWF0dXJlcywgcGxlYXNlIGF1dGhlbnRpY2F0ZSB3aXRoIEdpdEh1YjpcblxuMS4gVmlzaXQ6ICoqJHtkZXZpY2VSZXNwb25zZS52ZXJpZmljYXRpb25fdXJpfSoqXG4yLiBFbnRlciBjb2RlOiAqKiR7ZGV2aWNlUmVzcG9uc2UudXNlcl9jb2RlfSoqXG4zLiBBdXRob3JpemUgJ0RvbGxob3VzZU1DUCBDb2xsZWN0aW9uJ1xuXG5UaGlzIHdpbGwgZ3JhbnQgYWNjZXNzIHRvOlxu4pyFIEJyb3dzZSB0aGUgcHVibGljIGNvbGxlY3Rpb25cbuKchSBJbnN0YWxsIGNvbW11bml0eSBjb250ZW50ICBcbuKchSBTdWJtaXQgeW91ciBvd24gY3JlYXRpb25zXG5cbkRvbid0IGhhdmUgYSBHaXRIdWIgYWNjb3VudD8gWW91J2xsIGJlIHByb21wdGVkIHRvIGNyZWF0ZSBvbmUgKGl0J3MgZnJlZSEpXG5cbuKPse+4jyBUaGlzIGNvZGUgZXhwaXJlcyBpbiAke01hdGguZmxvb3IoZGV2aWNlUmVzcG9uc2UuZXhwaXJlc19pbiAvIDYwKX0gbWludXRlcy5gO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBuZWVkcyB0byBhdXRoZW50aWNhdGUgZm9yIGEgc3BlY2lmaWMgYWN0aW9uXG4gICAqL1xuICBuZWVkc0F1dGhGb3JBY3Rpb24oYWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhdXRoUmVxdWlyZWRBY3Rpb25zID0gWydzdWJtaXQnLCAnY3JlYXRlX3ByJywgJ21hbmFnZV9jb250ZW50J107XG4gICAgcmV0dXJuIGF1dGhSZXF1aXJlZEFjdGlvbnMuaW5jbHVkZXMoYWN0aW9uLnRvTG93ZXJDYXNlKCkpO1xuICB9XG4gIFxuICAvKipcbiAgICogV2FpdCB3aXRoIGFib3J0IHNpZ25hbCBzdXBwb3J0XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRXaXRoQWJvcnQobXM6IG51bWJlciwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gICAgICBcbiAgICAgIC8vIExpc3RlbiBmb3IgYWJvcnQgc2lnbmFsXG4gICAgICBjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignV2FpdCBhYm9ydGVkJykpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIENsZWFuIHVwIGFmdGVyIHRpbWVvdXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEhhbmRsZXIpO1xuICAgICAgfSwgbXMpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2xlYW4gdXAgYW55IGFjdGl2ZSBvcGVyYXRpb25zIChjYWxsZWQgb24gc2VydmVyIHNodXRkb3duKVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBYm9ydCBhbnkgYWN0aXZlIHBvbGxpbmdcbiAgICBpZiAodGhpcy5hY3RpdmVQb2xsaW5nKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcuYWJvcnQoKTtcbiAgICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG51bGw7XG4gICAgICBcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFudXAnLFxuICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGggbWFuYWdlciBjbGVhbmVkIHVwIG9uIHNodXRkb3duJyxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBoYWRBY3RpdmVQb2xsaW5nOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIuaW5mbygnR2l0SHViIGF1dGhlbnRpY2F0aW9uIHBvbGxpbmcgY2FuY2VsbGVkIGR1ZSB0byBzaHV0ZG93bicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhciBBUEkgY2FjaGVcbiAgICB0aGlzLmFwaUNhY2hlLmNsZWFyKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdXNlci1mcmllbmRseSBlcnJvciBtZXNzYWdlIGJhc2VkIG9uIEhUVFAgc3RhdHVzIGNvZGVcbiAgICogQXZvaWRzIGV4cG9zaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB3aGlsZSBwcm92aWRpbmcgaGVscGZ1bCBndWlkYW5jZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2VGb3JTdGF0dXMoc3RhdHVzOiBudW1iZXIsIG9wZXJhdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSA0MDA6XG4gICAgICAgIHJldHVybiBgSW52YWxpZCByZXF1ZXN0IHRvIEdpdEh1Yi4gUGxlYXNlIGVuc3VyZSB0aGUgT0F1dGggYXBwIGlzIHByb3Blcmx5IGNvbmZpZ3VyZWQuYDtcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gYEdpdEh1YiBPQXV0aCBpcyBub3QgY29uZmlndXJlZC4gUGxlYXNlIHJlcG9ydCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRG9sbGhvdXNlTUNQL21jcC1zZXJ2ZXIvaXNzdWVzYDtcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gYEFjY2VzcyBkZW5pZWQgYnkgR2l0SHViLiBUaGUgT0F1dGggYXBwIG1heSBsYWNrIHJlcXVpcmVkIHBlcm1pc3Npb25zLmA7XG4gICAgICBjYXNlIDQwNDpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgc2VydmljZSBub3QgZm91bmQuIFRoaXMgbWF5IGluZGljYXRlIGFuIEFQSSBjaGFuZ2UuYDtcbiAgICAgIGNhc2UgNDIyOlxuICAgICAgICByZXR1cm4gYEludmFsaWQgcGFyYW1ldGVycyBzZW50IHRvIEdpdEh1Yi4gUGxlYXNlIGNoZWNrIHlvdXIgY29uZmlndXJhdGlvbi5gO1xuICAgICAgY2FzZSA0Mjk6XG4gICAgICAgIHJldHVybiBgVG9vIG1hbnkgcmVxdWVzdHMgdG8gR2l0SHViLiBQbGVhc2Ugd2FpdCBhIG1vbWVudCBhbmQgdHJ5IGFnYWluLmA7XG4gICAgICBjYXNlIDUwMDpcbiAgICAgIGNhc2UgNTAyOlxuICAgICAgY2FzZSA1MDM6XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgc2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIGZldyBtb21lbnRzLmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBMb2cgdGhlIGFjdHVhbCBzdGF0dXMgZm9yIGRlYnVnZ2luZywgYnV0IGRvbid0IGV4cG9zZSBpdCB0byB1c2Vyc1xuICAgICAgICBsb2dnZXIuZGVidWcoYFVuZXhwZWN0ZWQgc3RhdHVzIGNvZGUgZHVyaW5nICR7b3BlcmF0aW9ufWAsIHsgc3RhdHVzIH0pO1xuICAgICAgICByZXR1cm4gYEZhaWxlZCB0byBjb21wbGV0ZSAke29wZXJhdGlvbn0uIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24gYW5kIHRyeSBhZ2Fpbi5gO1xuICAgIH1cbiAgfVxufSJdfQ==
|
|
507
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2l0SHViQXV0aE1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9HaXRIdWJBdXRoTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQXdCM0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1Qjs7Ozs7OztPQU9HO0lBQ0ssTUFBTSxDQUFVLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0lBRW5FOzs7OztPQUtHO0lBQ0ssTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXO1FBQzlCLGdFQUFnRTtRQUNoRSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO1FBQzNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xELE1BQU0sYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pELElBQUksY0FBYyxFQUFFLENBQUM7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ZXIgdXNpbmcgT0F1dGggZGV2aWNlIGZsb3dcbiAqIEhhbmRsZXMgYXV0aGVudGljYXRpb24gZm9yIE1DUCBzZXJ2ZXJzIHdpdGhvdXQgcmVxdWlyaW5nIGNsaWVudCBzZWNyZXRzXG4gKi9cblxuaW1wb3J0IHsgVG9rZW5NYW5hZ2VyIH0gZnJvbSAnLi4vc2VjdXJpdHkvdG9rZW5NYW5hZ2VyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBBUElDYWNoZSB9IGZyb20gJy4uL2NhY2hlL0FQSUNhY2hlLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IEVycm9ySGFuZGxlciwgRXJyb3JDYXRlZ29yeSB9IGZyb20gJy4uL3V0aWxzL0Vycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgeyBDb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnL0NvbmZpZ01hbmFnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERldmljZUNvZGVSZXNwb25zZSB7XG4gIGRldmljZV9jb2RlOiBzdHJpbmc7XG4gIHVzZXJfY29kZTogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25fdXJpOiBzdHJpbmc7XG4gIGV4cGlyZXNfaW46IG51bWJlcjtcbiAgaW50ZXJ2YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblJlc3BvbnNlIHtcbiAgYWNjZXNzX3Rva2VuOiBzdHJpbmc7XG4gIHRva2VuX3R5cGU6IHN0cmluZztcbiAgc2NvcGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoU3RhdHVzIHtcbiAgaXNBdXRoZW50aWNhdGVkOiBib29sZWFuO1xuICBoYXNUb2tlbjogYm9vbGVhbjtcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICBleHBpcmVzQXQ/OiBEYXRlO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgR2l0SHViIGF1dGhlbnRpY2F0aW9uIHVzaW5nIHRoZSBPQXV0aCBkZXZpY2UgZmxvd1xuICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgYXBwcm9hY2ggZm9yIENMSS9kZXNrdG9wIGFwcGxpY2F0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgR2l0SHViQXV0aE1hbmFnZXIge1xuICAvKipcbiAgICogRG9sbGhvdXNlTUNQJ3Mgb2ZmaWNpYWwgT0F1dGggQXBwIENsaWVudCBJRFxuICAgKiBUaGlzIGlzIFBVQkxJQyBpbmZvcm1hdGlvbiAtIE9BdXRoIENsaWVudCBJRHMgYXJlIG1lYW50IHRvIGJlIHZpc2libGUuXG4gICAqIE9ubHkgQ2xpZW50IFNlY3JldHMgYXJlIHByaXZhdGUgKGRldmljZSBmbG93IGRvZXNuJ3QgdXNlIHNlY3JldHMpLlxuICAgKiBcbiAgICogVGhpcyBDbGllbnQgSUQgZW5hYmxlcyB0aGUgR2l0SHViIGRldmljZSBmbG93IGF1dGhlbnRpY2F0aW9uXG4gICAqIGFsbG93aW5nIHVzZXJzIHRvIGF1dGhlbnRpY2F0ZSB3aXRoIGFuIDgtY2hhcmFjdGVyIGNvZGUuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NMSUVOVF9JRCA9ICdPdjIzbGlYR0dQOWpOckJoQk5mTyc7XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBDTElFTlRfSUQgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgQ29uZmlnTWFuYWdlciwgb3IgZGVmYXVsdFxuICAgKiBQcmlvcml0eTogRW52aXJvbm1lbnQgdmFyaWFibGUgPiBDb25maWdNYW5hZ2VyID4gRGVmYXVsdCBDbGllbnQgSURcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBPQXV0aCBDbGllbnQgSUQgdG8gdXNlIGZvciBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0Q2xpZW50SWQoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgLy8gQ2hlY2sgZW52aXJvbm1lbnQgdmFyaWFibGUgZmlyc3QgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAgIGNvbnN0IGVudkNsaWVudElkID0gcHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0dJVEhVQl9DTElFTlRfSUQ7XG4gICAgaWYgKGVudkNsaWVudElkKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIE9BdXRoIENsaWVudCBJRCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlJyk7XG4gICAgICByZXR1cm4gZW52Q2xpZW50SWQ7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgQ29uZmlnTWFuYWdlciBmb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnTWFuYWdlciA9IENvbmZpZ01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICAgIGF3YWl0IGNvbmZpZ01hbmFnZXIubG9hZENvbmZpZygpO1xuICAgICAgY29uc3QgY29uZmlnQ2xpZW50SWQgPSBjb25maWdNYW5hZ2VyLmdldEdpdEh1YkNsaWVudElkKCk7XG4gICAgICBpZiAoY29uZmlnQ2xpZW50SWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBPQXV0aCBDbGllbnQgSUQgZnJvbSBjb25maWcnKTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ0NsaWVudElkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIE9BdXRoIENsaWVudCBJRCBpbiBjb25maWcnLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgICBcbiAgICAvLyBVc2UgZGVmYXVsdCBEb2xsaG91c2VNQ1AgT0F1dGggQXBwIENsaWVudCBJRFxuICAgIC8vIFRoaXMgZW5hYmxlcyBcImp1c3Qgd29ya3NcIiBleHBlcmllbmNlIGZvciBOUE0gaW5zdGFsbHNcbiAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIGRlZmF1bHQgRG9sbGhvdXNlTUNQIE9BdXRoIENsaWVudCBJRCcpO1xuICAgIHJldHVybiBHaXRIdWJBdXRoTWFuYWdlci5ERUZBVUxUX0NMSUVOVF9JRDtcbiAgfVxuICBcbiAgLy8gR2l0SHViIE9BdXRoIGVuZHBvaW50c1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERVZJQ0VfQ09ERV9VUkwgPSAnaHR0cHM6Ly9naXRodWIuY29tL2xvZ2luL2RldmljZS9jb2RlJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbi9vYXV0aC9hY2Nlc3NfdG9rZW4nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBVU0VSX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3VzZXInO1xuICBcbiAgLy8gUG9sbGluZyBjb25maWd1cmF0aW9uXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUE9MTF9JTlRFUlZBTCA9IDUwMDA7IC8vIDUgc2Vjb25kc1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfUE9MTF9BVFRFTVBUUyA9IDE4MDsgLy8gMTUgbWludXRlcyB0b3RhbFxuICBcbiAgcHJpdmF0ZSBhcGlDYWNoZTogQVBJQ2FjaGU7XG4gIHByaXZhdGUgYWN0aXZlUG9sbGluZzogQWJvcnRDb250cm9sbGVyIHwgbnVsbCA9IG51bGw7XG4gIFxuICBjb25zdHJ1Y3RvcihhcGlDYWNoZTogQVBJQ2FjaGUpIHtcbiAgICB0aGlzLmFwaUNhY2hlID0gYXBpQ2FjaGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgbmV0d29yayByZXF1ZXN0IHdpdGggcmV0cnkgbG9naWNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hXaXRoUmV0cnkoXG4gICAgdXJsOiBzdHJpbmcsIFxuICAgIG9wdGlvbnM6IFJlcXVlc3RJbml0LCBcbiAgICBtYXhSZXRyaWVzOiBudW1iZXIgPSAzLFxuICAgIHJldHJ5RGVsYXk6IG51bWJlciA9IDEwMDBcbiAgKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGxldCBsYXN0RXJyb3I6IEVycm9yIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gbWF4UmV0cmllczsgYXR0ZW1wdCsrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxhc3RFcnJvciA9IGVycm9yIGFzIEVycm9yO1xuICAgICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmZldGNoV2l0aFJldHJ5JywgZXJyb3IsIHsgdXJsLCBhdHRlbXB0IH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3IgdGhhdCBzaG91bGQgYmUgcmV0cmllZFxuICAgICAgICBjb25zdCBpc05ldHdvcmtFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgKFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0VDT05OUkVGVVNFRCcpIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZS5pbmNsdWRlcygnRVRJTUVET1VUJykgfHxcbiAgICAgICAgICBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFTk9URk9VTkQnKSB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ25ldHdvcmsnKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzTmV0d29ya0Vycm9yICYmIGF0dGVtcHQgPCBtYXhSZXRyaWVzKSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR3b3JrIHJlcXVlc3QgZmFpbGVkLCByZXRyeWluZyAoJHthdHRlbXB0fS8ke21heFJldHJpZXN9KWAsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgbmV4dFJldHJ5SW46IHJldHJ5RGVsYXkgKiBhdHRlbXB0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeURlbGF5ICogYXR0ZW1wdCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vdCBhIG5ldHdvcmsgZXJyb3Igb3IgbGFzdCBhdHRlbXB0LCB0aHJvdyBpbW1lZGlhdGVseVxuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRocm93IGxhc3RFcnJvciB8fCBuZXcgRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQgYWZ0ZXIgYWxsIHJldHJpZXMnKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGN1cnJlbnQgYXV0aGVudGljYXRpb24gc3RhdHVzXG4gICAqL1xuICBhc3luYyBnZXRBdXRoU3RhdHVzKCk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBoYXNUb2tlbjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gZ2V0IHVzZXIgaW5mbyB0byB2YWxpZGF0ZSB0b2tlblxuICAgICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW4pO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IHRydWUsXG4gICAgICAgIGhhc1Rva2VuOiB0cnVlLFxuICAgICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICAgIHNjb3BlczogdXNlckluZm8uc2NvcGVzXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBUb2tlbiBtaWdodCBiZSBpbnZhbGlkIG9yIGV4cGlyZWRcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuY2hlY2tBdXRoU3RhdHVzJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZSxcbiAgICAgICAgaGFzVG9rZW46IHRydWUgLy8gSGFzIHRva2VuIGJ1dCBpdCdzIGludmFsaWRcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogSW5pdGlhdGUgdGhlIGRldmljZSBmbG93IGF1dGhlbnRpY2F0aW9uIHByb2Nlc3NcbiAgICovXG4gIGFzeW5jIGluaXRpYXRlRGV2aWNlRmxvdygpOiBQcm9taXNlPERldmljZUNvZGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IGNsaWVudElkID0gYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKTtcbiAgICAvLyBnZXRDbGllbnRJZCgpIGFsd2F5cyByZXR1cm5zIGEgdmFsdWUgKGVudiwgY29uZmlnLCBvciBkZWZhdWx0KVxuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hXaXRoUmV0cnkoR2l0SHViQXV0aE1hbmFnZXIuREVWSUNFX0NPREVfVVJMLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBjbGllbnRfaWQ6IGNsaWVudElkLFxuICAgICAgICAgIHNjb3BlOiAncHVibGljX3JlcG8gcmVhZDp1c2VyJ1xuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgLy8gUHJvdmlkZSB1c2VyLWZyaWVuZGx5IGVycm9yIG1lc3NhZ2VzIGJhc2VkIG9uIHN0YXR1cyBjb2Rlc1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZUZvclN0YXR1cyhyZXNwb25zZS5zdGF0dXMsICdkZXZpY2UgZmxvdyBpbml0aWFsaXphdGlvbicpO1xuICAgICAgICBsb2dnZXIuZGVidWcoJ0RldmljZSBmbG93IGluaXRpYXRpb24gZmFpbGVkJywgeyBcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCBcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSByZXNwb25zZVxuICAgICAgaWYgKCFkYXRhLmRldmljZV9jb2RlIHx8ICFkYXRhLnVzZXJfY29kZSB8fCAhZGF0YS52ZXJpZmljYXRpb25fdXJpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZXZpY2UgZmxvdyByZXNwb25zZSBmcm9tIEdpdEh1YicpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmluaXRpYXRlRGV2aWNlRmxvdycsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgT0F1dGggZGV2aWNlIGZsb3cgaW5pdGlhdGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdXNlckNvZGU6IGRhdGEudXNlcl9jb2RlLFxuICAgICAgICAgIGV4cGlyZXNJbjogZGF0YS5leHBpcmVzX2luLFxuICAgICAgICAgIGludGVydmFsOiBkYXRhLmludGVydmFsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICByZXR1cm4gZGF0YSBhcyBEZXZpY2VDb2RlUmVzcG9uc2U7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuaW5pdGlhdGVEZXZpY2VGbG93JywgZXJyb3IpO1xuICAgICAgXG4gICAgICAvLyBSZS10aHJvdyBpZiBpdCdzIGFscmVhZHkgYSBwcm9wZXJseSBmb3JtYXR0ZWQgZXJyb3JcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0dpdEh1YiBPQXV0aCcpKSB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBHaXRIdWIgYXV0aGVudGljYXRpb24uIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUG9sbCBmb3IgdG9rZW4gYWZ0ZXIgdXNlciBoYXMgYXV0aG9yaXplZCB0aGUgZGV2aWNlXG4gICAqL1xuICBhc3luYyBwb2xsRm9yVG9rZW4oZGV2aWNlQ29kZTogc3RyaW5nLCBpbnRlcnZhbDogbnVtYmVyID0gR2l0SHViQXV0aE1hbmFnZXIuREVGQVVMVF9QT0xMX0lOVEVSVkFMKTogUHJvbWlzZTxUb2tlblJlc3BvbnNlPiB7XG4gICAgLy8gQ3JlYXRlIG5ldyBhYm9ydCBjb250cm9sbGVyIGZvciB0aGlzIHBvbGxpbmcgc2Vzc2lvblxuICAgIHRoaXMuYWN0aXZlUG9sbGluZyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBjb25zdCBzaWduYWwgPSB0aGlzLmFjdGl2ZVBvbGxpbmcuc2lnbmFsO1xuICAgIFxuICAgIGxldCBhdHRlbXB0cyA9IDA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlIChhdHRlbXB0cyA8IEdpdEh1YkF1dGhNYW5hZ2VyLk1BWF9QT0xMX0FUVEVNUFRTKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHBvbGxpbmcgd2FzIGFib3J0ZWRcbiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRoZW50aWNhdGlvbiBwb2xsaW5nIHdhcyBjYW5jZWxsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYXR0ZW1wdHMrKztcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR2l0SHViQXV0aE1hbmFnZXIuVE9LRU5fVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGNsaWVudF9pZDogYXdhaXQgR2l0SHViQXV0aE1hbmFnZXIuZ2V0Q2xpZW50SWQoKSB8fCAnJyxcbiAgICAgICAgICAgIGRldmljZV9jb2RlOiBkZXZpY2VDb2RlLFxuICAgICAgICAgICAgZ3JhbnRfdHlwZTogJ3VybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGZvciB2YXJpb3VzIHJlc3BvbnNlIHN0YXRlc1xuICAgICAgICBpZiAoZGF0YS5lcnJvcikge1xuICAgICAgICAgIHN3aXRjaCAoZGF0YS5lcnJvcikge1xuICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXphdGlvbl9wZW5kaW5nJzpcbiAgICAgICAgICAgICAgLy8gVXNlciBoYXNuJ3QgYXV0aG9yaXplZCB5ZXQsIGtlZXAgcG9sbGluZ1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdzbG93X2Rvd24nOlxuICAgICAgICAgICAgICAvLyBJbmNyZWFzZSBwb2xsaW5nIGludGVydmFsXG4gICAgICAgICAgICAgIGludGVydmFsID0gTWF0aC5taW4oaW50ZXJ2YWwgKiAxLjUsIDMwMDAwKTsgLy8gTWF4IDMwIHNlY29uZHNcbiAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdTbG93aW5nIGRvd24gcG9sbGluZyBpbnRlcnZhbCcsIHsgbmV3SW50ZXJ2YWw6IGludGVydmFsIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdleHBpcmVkX3Rva2VuJzpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXV0aG9yaXphdGlvbiBjb2RlIGhhcyBleHBpcmVkLiBQbGVhc2Ugc3RhcnQgb3Zlci4nKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlICdhY2Nlc3NfZGVuaWVkJzpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdXRob3JpemF0aW9uIHdhcyBkZW5pZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyk7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gTG9nIHRoZSBhY3R1YWwgZXJyb3IgZm9yIGRlYnVnZ2luZ1xuICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ09BdXRoIGRldmljZSBmbG93IGVycm9yJywgeyBcbiAgICAgICAgICAgICAgICBlcnJvcjogZGF0YS5lcnJvciwgXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZXJyb3JfZGVzY3JpcHRpb24gXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZC4gUGxlYXNlIHRyeSBzdGFydGluZyB0aGUgcHJvY2VzcyBhZ2Fpbi4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAvLyBTdWNjZXNzIVxuICAgICAgICAgIHJldHVybiBkYXRhIGFzIFRva2VuUmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFdhaXQgYmVmb3JlIG5leHQgcG9sbFxuICAgICAgICAvLyBXYWl0IGZvciBpbnRlcnZhbCB3aXRoIGFib3J0IHN1cHBvcnRcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2l0aEFib3J0KGludGVydmFsLCBzaWduYWwpO1xuICAgICAgICBcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE5ldHdvcmsgZXJyb3JzIHNob3VsZG4ndCBzdG9wIHBvbGxpbmdcbiAgICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdHaXRIdWJBdXRoTWFuYWdlci5wb2xsRm9yVG9rZW4nLCBlcnJvciwgeyBhdHRlbXB0OiBhdHRlbXB0cyB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy53YWl0V2l0aEFib3J0KGludGVydmFsLCBzaWduYWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0F1dGhlbnRpY2F0aW9uIHRpbWVkIG91dC4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gQ2xlYXIgYWN0aXZlIHBvbGxpbmcgcmVmZXJlbmNlXG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcgPSBudWxsO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIENvbXBsZXRlIHRoZSBhdXRoZW50aWNhdGlvbiBmbG93IGFuZCBzdG9yZSB0aGUgdG9rZW5cbiAgICovXG4gIGFzeW5jIGNvbXBsZXRlQXV0aGVudGljYXRpb24odG9rZW5SZXNwb25zZTogVG9rZW5SZXNwb25zZSk6IFByb21pc2U8QXV0aFN0YXR1cz4ge1xuICAgIC8vIFN0b3JlIHRva2VuIHNlY3VyZWx5XG4gICAgYXdhaXQgdGhpcy5zdG9yZVRva2VuKHRva2VuUmVzcG9uc2UuYWNjZXNzX3Rva2VuKTtcbiAgICBcbiAgICAvLyBHZXQgdXNlciBpbmZvXG4gICAgY29uc3QgdXNlckluZm8gPSBhd2FpdCB0aGlzLmZldGNoVXNlckluZm8odG9rZW5SZXNwb25zZS5hY2Nlc3NfdG9rZW4pO1xuICAgIFxuICAgIC8vIExvZyBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIGNvbXBsZXRpb25cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgIHNvdXJjZTogJ0dpdEh1YkF1dGhNYW5hZ2VyLmNvbXBsZXRlQXV0aGVudGljYXRpb24nLFxuICAgICAgZGV0YWlsczogJ0dpdEh1YiBPQXV0aCBkZXZpY2UgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mby5sb2dpbixcbiAgICAgICAgc2NvcGVzOiB0b2tlblJlc3BvbnNlLnNjb3BlLnNwbGl0KCcgJyksXG4gICAgICAgIHRva2VuVHlwZTogVG9rZW5NYW5hZ2VyLmdldFRva2VuVHlwZSh0b2tlblJlc3BvbnNlLmFjY2Vzc190b2tlbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgaGFzVG9rZW46IHRydWUsXG4gICAgICB1c2VybmFtZTogdXNlckluZm8ubG9naW4sXG4gICAgICBzY29wZXM6IHRva2VuUmVzcG9uc2Uuc2NvcGUuc3BsaXQoJyAnKVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBzdG9yZWQgYXV0aGVudGljYXRpb24gYW5kIHJldm9rZSB0b2tlblxuICAgKi9cbiAgYXN5bmMgY2xlYXJBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSB0b2tlbiBiZWZvcmUgY2xlYXJpbmcgaXRcbiAgICAgIGNvbnN0IHRva2VuID0gYXdhaXQgVG9rZW5NYW5hZ2VyLmdldEdpdEh1YlRva2VuQXN5bmMoKTtcbiAgICAgIFxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gcmV2b2tlIHRoZSB0b2tlbiBvbiBHaXRIdWJcbiAgICAgICAgLy8gTm90ZTogR2l0SHViIE9BdXRoIHRva2VucyBkb24ndCBoYXZlIGEgcmV2b2NhdGlvbiBlbmRwb2ludCBmb3IgZGV2aWNlIGZsb3cgdG9rZW5zXG4gICAgICAgIC8vIEJ1dCB3ZSdsbCBjbGVhciB0aGUgY2FjaGUgYW5kIHJlbW92ZSBmcm9tIHN0b3JhZ2VcbiAgICAgICAgXG4gICAgICAgIC8vIENsZWFyIGNhY2hlZCB1c2VyIGluZm9cbiAgICAgICAgdGhpcy5hcGlDYWNoZS5jbGVhcigpO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBhdWRpdCB0cmFpbFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX0NBQ0hFX0NMRUFSRUQnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5jbGVhckF1dGhlbnRpY2F0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIGF1dGhlbnRpY2F0aW9uIGNsZWFyZWQgYnkgdXNlciByZXF1ZXN0JyxcbiAgICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgICAgaGFkVG9rZW46IHRydWUsXG4gICAgICAgICAgICB0b2tlblByZWZpeDogVG9rZW5NYW5hZ2VyLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFJlbW92ZSBmcm9tIHNlY3VyZSBzdG9yYWdlXG4gICAgICBhd2FpdCBUb2tlbk1hbmFnZXIucmVtb3ZlU3RvcmVkVG9rZW4oKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBjbGVhcmVkIHN1Y2Nlc3NmdWxseScpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0dpdEh1YkF1dGhNYW5hZ2VyLmNsZWFyQXV0aGVudGljYXRpb24nLCBlcnJvcik7XG4gICAgICB0aHJvdyBFcnJvckhhbmRsZXIuY3JlYXRlRXJyb3IoJ0ZhaWxlZCB0byBjbGVhciBhdXRoZW50aWNhdGlvbicsIEVycm9yQ2F0ZWdvcnkuQVVUSF9FUlJPUiwgdW5kZWZpbmVkLCBlcnJvcik7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogU3RvcmUgdG9rZW4gc2VjdXJlbHkgdXNpbmcgZW5jcnlwdGVkIGZpbGUgc3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgVG9rZW5NYW5hZ2VyLnN0b3JlR2l0SHViVG9rZW4odG9rZW4pO1xuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHkuIFlvdSBhcmUgbm93IGF1dGhlbnRpY2F0ZWQhJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignR2l0SHViQXV0aE1hbmFnZXIuc3RvcmVUb2tlbicsIGVycm9yKTtcbiAgICAgIC8vIEZhbGxiYWNrIHRvIGVudmlyb25tZW50IHZhcmlhYmxlIGluc3RydWN0aW9uc1xuICAgICAgbG9nZ2VyLmluZm8oJ0ZvciBtYW51YWwgc2V0dXAsIHlvdSBjYW4gc2V0IEdJVEhVQl9UT0tFTiBlbnZpcm9ubWVudCB2YXJpYWJsZS4nKTtcbiAgICAgIHRocm93IEVycm9ySGFuZGxlci53cmFwRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gc3RvcmUgR2l0SHViIHRva2VuJywgRXJyb3JDYXRlZ29yeS5BVVRIX0VSUk9SKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGZXRjaCB1c2VyIGluZm9ybWF0aW9uIGZyb20gR2l0SHViXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoVXNlckluZm8odG9rZW46IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmFwaUNhY2hlLmdldChHaXRIdWJBdXRoTWFuYWdlci5VU0VSX1VSTCk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmZldGNoV2l0aFJldHJ5KEdpdEh1YkF1dGhNYW5hZ2VyLlVTRVJfVVJMLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uJ1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHJlc3BvbnNlLnN0YXR1cywgJ3VzZXIgaW5mb3JtYXRpb24gZmV0Y2gnKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIGZldGNoIHVzZXIgaW5mbycsIHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgdXNlcm5hbWUgYW5kIG90aGVyIHRleHQgZmllbGRzIHRvIHByZXZlbnQgVW5pY29kZSBhdHRhY2tzXG4gICAgaWYgKGRhdGEubG9naW4pIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShkYXRhLmxvZ2luKTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnVU5JQ09ERV9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuZmV0Y2hVc2VySW5mbycsXG4gICAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB1c2VybmFtZSBjb250YWlucyBpbnZhbGlkIFVuaWNvZGUnLFxuICAgICAgICAgIG1ldGFkYXRhOiB7IFxuICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGg6IGRhdGEubG9naW4ubGVuZ3RoLFxuICAgICAgICAgICAgZGV0ZWN0ZWRJc3N1ZXM6IHZhbGlkYXRpb24uZGV0ZWN0ZWRJc3N1ZXMgXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVzZXJuYW1lIGZvcm1hdCBmcm9tIEdpdEh1YicpO1xuICAgICAgfVxuICAgICAgZGF0YS5sb2dpbiA9IHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgfVxuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSBkaXNwbGF5IG5hbWUgaWYgcHJlc2VudFxuICAgIGlmIChkYXRhLm5hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWVWYWxpZGF0aW9uID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoZGF0YS5uYW1lKTtcbiAgICAgIGlmIChuYW1lVmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIGRhdGEubmFtZSA9IG5hbWVWYWxpZGF0aW9uLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBvbiBkaXNwbGF5IG5hbWUsIGp1c3QgcmVtb3ZlIGl0XG4gICAgICAgIGRlbGV0ZSBkYXRhLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFkZCBzY29wZXMgZnJvbSByZXNwb25zZSBoZWFkZXJzXG4gICAgY29uc3Qgc2NvcGVIZWFkZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1vYXV0aC1zY29wZXMnKTtcbiAgICBpZiAoc2NvcGVIZWFkZXIpIHtcbiAgICAgIGRhdGEuc2NvcGVzID0gc2NvcGVIZWFkZXIuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIExvZyBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uIGZvciBhdWRpdCB0cmFpbFxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgc291cmNlOiAnR2l0SHViQXV0aE1hbmFnZXIuZmV0Y2hVc2VySW5mbycsXG4gICAgICBkZXRhaWxzOiAnR2l0SHViIHVzZXIgYXV0aGVudGljYXRlZCBzdWNjZXNzZnVsbHknLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcm5hbWU6IGRhdGEubG9naW4sXG4gICAgICAgIGhhc0VtYWlsOiAhIWRhdGEuZW1haWwsXG4gICAgICAgIHNjb3BlczogZGF0YS5zY29wZXMgfHwgW11cbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICAvLyBDYWNoZSB0aGUgcmVzdWx0XG4gICAgdGhpcy5hcGlDYWNoZS5zZXQoR2l0SHViQXV0aE1hbmFnZXIuVVNFUl9VUkwsIGRhdGEpO1xuICAgIFxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGF1dGhlbnRpY2F0aW9uIGluc3RydWN0aW9ucyBmb3IgdXNlcnNcbiAgICovXG4gIGZvcm1hdEF1dGhJbnN0cnVjdGlvbnMoZGV2aWNlUmVzcG9uc2U6IERldmljZUNvZGVSZXNwb25zZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGDwn5SQICoqR2l0SHViIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkKipcblxuVG8gYWNjZXNzIGFsbCBEb2xsaG91c2VNQ1AgZmVhdHVyZXMsIHBsZWFzZSBhdXRoZW50aWNhdGUgd2l0aCBHaXRIdWI6XG5cbjEuIFZpc2l0OiAqKiR7ZGV2aWNlUmVzcG9uc2UudmVyaWZpY2F0aW9uX3VyaX0qKlxuMi4gRW50ZXIgY29kZTogKioke2RldmljZVJlc3BvbnNlLnVzZXJfY29kZX0qKlxuMy4gQXV0aG9yaXplICdEb2xsaG91c2VNQ1AgQ29sbGVjdGlvbidcblxuVGhpcyB3aWxsIGdyYW50IGFjY2VzcyB0bzpcbuKchSBCcm93c2UgdGhlIHB1YmxpYyBjb2xsZWN0aW9uXG7inIUgSW5zdGFsbCBjb21tdW5pdHkgY29udGVudCAgXG7inIUgU3VibWl0IHlvdXIgb3duIGNyZWF0aW9uc1xuXG5Eb24ndCBoYXZlIGEgR2l0SHViIGFjY291bnQ/IFlvdSdsbCBiZSBwcm9tcHRlZCB0byBjcmVhdGUgb25lIChpdCdzIGZyZWUhKVxuXG7ij7HvuI8gVGhpcyBjb2RlIGV4cGlyZXMgaW4gJHtNYXRoLmZsb29yKGRldmljZVJlc3BvbnNlLmV4cGlyZXNfaW4gLyA2MCl9IG1pbnV0ZXMuYDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgbmVlZHMgdG8gYXV0aGVudGljYXRlIGZvciBhIHNwZWNpZmljIGFjdGlvblxuICAgKi9cbiAgbmVlZHNBdXRoRm9yQWN0aW9uKGFjdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXV0aFJlcXVpcmVkQWN0aW9ucyA9IFsnc3VibWl0JywgJ2NyZWF0ZV9wcicsICdtYW5hZ2VfY29udGVudCddO1xuICAgIHJldHVybiBhdXRoUmVxdWlyZWRBY3Rpb25zLmluY2x1ZGVzKGFjdGlvbi50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFdhaXQgd2l0aCBhYm9ydCBzaWduYWwgc3VwcG9ydFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB3YWl0V2l0aEFib3J0KG1zOiBudW1iZXIsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICAgICAgXG4gICAgICAvLyBMaXN0ZW4gZm9yIGFib3J0IHNpZ25hbFxuICAgICAgY29uc3QgYWJvcnRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1dhaXQgYWJvcnRlZCcpKTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0SGFuZGxlciwgeyBvbmNlOiB0cnVlIH0pO1xuICAgICAgXG4gICAgICAvLyBDbGVhbiB1cCBhZnRlciB0aW1lb3V0XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRIYW5kbGVyKTtcbiAgICAgIH0sIG1zKTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFuIHVwIGFueSBhY3RpdmUgb3BlcmF0aW9ucyAoY2FsbGVkIG9uIHNlcnZlciBzaHV0ZG93bilcbiAgICovXG4gIGFzeW5jIGNsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQWJvcnQgYW55IGFjdGl2ZSBwb2xsaW5nXG4gICAgaWYgKHRoaXMuYWN0aXZlUG9sbGluZykge1xuICAgICAgdGhpcy5hY3RpdmVQb2xsaW5nLmFib3J0KCk7XG4gICAgICB0aGlzLmFjdGl2ZVBvbGxpbmcgPSBudWxsO1xuICAgICAgXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9DQUNIRV9DTEVBUkVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdHaXRIdWJBdXRoTWFuYWdlci5jbGVhbnVwJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiBhdXRoIG1hbmFnZXIgY2xlYW5lZCB1cCBvbiBzaHV0ZG93bicsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgaGFkQWN0aXZlUG9sbGluZzogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiBhdXRoZW50aWNhdGlvbiBwb2xsaW5nIGNhbmNlbGxlZCBkdWUgdG8gc2h1dGRvd24nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2xlYXIgQVBJIGNhY2hlXG4gICAgdGhpcy5hcGlDYWNoZS5jbGVhcigpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBIVFRQIHN0YXR1cyBjb2RlXG4gICAqIEF2b2lkcyBleHBvc2luZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gd2hpbGUgcHJvdmlkaW5nIGhlbHBmdWwgZ3VpZGFuY2VcbiAgICovXG4gIHByaXZhdGUgZ2V0RXJyb3JNZXNzYWdlRm9yU3RhdHVzKHN0YXR1czogbnVtYmVyLCBvcGVyYXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgNDAwOlxuICAgICAgICByZXR1cm4gYEludmFsaWQgcmVxdWVzdCB0byBHaXRIdWIuIFBsZWFzZSBlbnN1cmUgdGhlIE9BdXRoIGFwcCBpcyBwcm9wZXJseSBjb25maWd1cmVkLmA7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuIGBHaXRIdWIgT0F1dGggaXMgbm90IGNvbmZpZ3VyZWQuIFBsZWFzZSByZXBvcnQgdGhpcyBpc3N1ZSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0RvbGxob3VzZU1DUC9tY3Atc2VydmVyL2lzc3Vlc2A7XG4gICAgICBjYXNlIDQwMzpcbiAgICAgICAgcmV0dXJuIGBBY2Nlc3MgZGVuaWVkIGJ5IEdpdEh1Yi4gVGhlIE9BdXRoIGFwcCBtYXkgbGFjayByZXF1aXJlZCBwZXJtaXNzaW9ucy5gO1xuICAgICAgY2FzZSA0MDQ6XG4gICAgICAgIHJldHVybiBgR2l0SHViIHNlcnZpY2Ugbm90IGZvdW5kLiBUaGlzIG1heSBpbmRpY2F0ZSBhbiBBUEkgY2hhbmdlLmA7XG4gICAgICBjYXNlIDQyMjpcbiAgICAgICAgcmV0dXJuIGBJbnZhbGlkIHBhcmFtZXRlcnMgc2VudCB0byBHaXRIdWIuIFBsZWFzZSBjaGVjayB5b3VyIGNvbmZpZ3VyYXRpb24uYDtcbiAgICAgIGNhc2UgNDI5OlxuICAgICAgICByZXR1cm4gYFRvbyBtYW55IHJlcXVlc3RzIHRvIEdpdEh1Yi4gUGxlYXNlIHdhaXQgYSBtb21lbnQgYW5kIHRyeSBhZ2Fpbi5gO1xuICAgICAgY2FzZSA1MDA6XG4gICAgICBjYXNlIDUwMjpcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiBgR2l0SHViIHNlcnZpY2UgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gaW4gYSBmZXcgbW9tZW50cy5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gTG9nIHRoZSBhY3R1YWwgc3RhdHVzIGZvciBkZWJ1Z2dpbmcsIGJ1dCBkb24ndCBleHBvc2UgaXQgdG8gdXNlcnNcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBVbmV4cGVjdGVkIHN0YXR1cyBjb2RlIGR1cmluZyAke29wZXJhdGlvbn1gLCB7IHN0YXR1cyB9KTtcbiAgICAgICAgcmV0dXJuIGBGYWlsZWQgdG8gY29tcGxldGUgJHtvcGVyYXRpb259LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4uYDtcbiAgICB9XG4gIH1cbn0iXX0=
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export declare const PACKAGE_VERSION = "1.6.
|
|
6
|
-
export declare const BUILD_TIMESTAMP = "2025-08-
|
|
5
|
+
export declare const PACKAGE_VERSION = "1.6.1";
|
|
6
|
+
export declare const BUILD_TIMESTAMP = "2025-08-25T21:15:34.362Z";
|
|
7
7
|
export declare const BUILD_TYPE: 'npm' | 'git';
|
|
8
8
|
export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
|
|
9
9
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Auto-generated file - DO NOT EDIT
|
|
3
3
|
* Generated at build time by scripts/generate-version.js
|
|
4
4
|
*/
|
|
5
|
-
export const PACKAGE_VERSION = '1.6.
|
|
6
|
-
export const BUILD_TIMESTAMP = '2025-08-
|
|
5
|
+
export const PACKAGE_VERSION = '1.6.1';
|
|
6
|
+
export const BUILD_TIMESTAMP = '2025-08-25T21:15:34.362Z';
|
|
7
7
|
export const BUILD_TYPE = 'npm';
|
|
8
8
|
export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcxLjYuMSc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjUtMDgtMjVUMjE6MTU6MzQuMzYyWic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dollhousemcp/mcp-server",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|