@dbx-tools/appkit-graphiti 0.6.126 → 0.6.127
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/lib/src/plugin.js +4 -3
- package/package.json +4 -4
- package/src/plugin.ts +3 -2
package/lib/src/plugin.js
CHANGED
|
@@ -22,6 +22,7 @@ const MCP_PATH = "/api/graphiti/mcp";
|
|
|
22
22
|
const MCP_SERVER_IDLE_MS = 30 * 60 * 1000;
|
|
23
23
|
const MCP_SERVER_SWEEP_MS = 5 * 60 * 1000;
|
|
24
24
|
const SIDECAR_SHUTDOWN_GRACE_MS = 10_000;
|
|
25
|
+
const SIDECAR_STARTUP_TIMEOUT_MS = 10 * 60_000;
|
|
25
26
|
const SCOPED_TOOL_FIELDS = {
|
|
26
27
|
add_memory: "group_id",
|
|
27
28
|
add_triplet: "group_id",
|
|
@@ -120,7 +121,7 @@ export class GraphitiPlugin extends Plugin {
|
|
|
120
121
|
], {
|
|
121
122
|
killOthersOn: ["failure", "success"],
|
|
122
123
|
killSignal: "SIGTERM",
|
|
123
|
-
killTimeout:
|
|
124
|
+
killTimeout: SIDECAR_SHUTDOWN_GRACE_MS,
|
|
124
125
|
prefix: "name",
|
|
125
126
|
prefixColors: false,
|
|
126
127
|
});
|
|
@@ -373,7 +374,7 @@ async function waitForGraphiti(port) {
|
|
|
373
374
|
}
|
|
374
375
|
}, {
|
|
375
376
|
intervalMs: 250,
|
|
376
|
-
timeoutMs:
|
|
377
|
+
timeoutMs: SIDECAR_STARTUP_TIMEOUT_MS,
|
|
377
378
|
predicate: (ready) => !ready,
|
|
378
379
|
})) {
|
|
379
380
|
if (ready)
|
|
@@ -411,4 +412,4 @@ async function distinctPorts(appPort, graphitiPort, litellmPort, proxyPort) {
|
|
|
411
412
|
function commandLine(arguments_) {
|
|
412
413
|
return arguments_.map((value) => `'${value.replaceAll("'", "'\\''")}'`).join(" ");
|
|
413
414
|
}
|
|
414
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsR0FJVCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLElBQUksY0FBYyxFQUMxQixNQUFNLElBQUksWUFBWSxHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLFlBQXVELE1BQU0sY0FBYyxDQUFDO0FBRW5GLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIscUJBQXFCLEdBR3RCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3RFLE1BQU0sZUFBZSxH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LENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsS0FBSyxVQUFVLGFBQWEsQ0FDMUIsT0FBZSxFQUNmLFlBQW9CLEVBQ3BCLFdBQW1CLEVBQ25CLFNBQWlCO0lBRWpCLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsS0FBSyxNQUFNLGNBQWMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxJQUFJLGNBQWMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLGtCQUFrQixDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUNELElBQUksSUFBSSxHQUFHLGNBQWMsSUFBSSxDQUFDLE1BQU0sYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsSUFBSSxHQUFHLE1BQU0sYUFBYSxFQUFFLENBQUM7UUFDMUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBNkIsQ0FBQztBQUNwRCxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsVUFBb0I7SUFDdkMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwS2l0IHBsdWdpbiB0aGF0IHN1cGVydmlzZXMgR3JhcGhpdGkgYW5kIHJlcHVibGlzaGVzIHVzZXItc2NvcGVkIE1DUCB0b29scy5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGV4ZWNGaWxlIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSBcIm5vZGU6bmV0XCI7XG5pbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBwcm9taXNpZnkgfSBmcm9tIFwibm9kZTp1dGlsXCI7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIFBsdWdpbixcbiAgbGFrZWJhc2UsXG4gIHRvUGx1Z2luLFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG4gIHR5cGUgUmVzb3VyY2VSZXF1aXJlbWVudCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgYXBwa2l0IGFzIGRieEFwcGtpdCxcbiAgaWRlbnRpdHkgYXMgYXBwa2l0SWRlbnRpdHksXG4gIHBsdWdpbiBhcyBhcHBraXRQbHVnaW4sXG59IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgY29uZmlnIGFzIGNvcmVDb25maWcgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBhc3luYyBhcyBhc3luY01vZHVsZSwgbG9nLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCwgdHlwZSBUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgTUNQQ2xpZW50LCBNQ1BTZXJ2ZXIgfSBmcm9tIFwiQG1hc3RyYS9tY3BcIjtcbmltcG9ydCBjb25jdXJyZW50bHksIHsgdHlwZSBDb21tYW5kLCB0eXBlIENvbmN1cnJlbnRseVJlc3VsdCB9IGZyb20gXCJjb25jdXJyZW50bHlcIjtcbmltcG9ydCB0eXBlIGV4cHJlc3MgZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB7XG4gIEdSQVBISVRJX0NPTkZJR19TQ0hFTUEsXG4gIHJlc29sdmVHcmFwaGl0aUNvbmZpZyxcbiAgdHlwZSBHcmFwaGl0aVBsdWdpbkNvbmZpZyxcbiAgdHlwZSBSZXNvbHZlZEdyYXBoaXRpUGx1Z2luQ29uZmlnLFxufSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgTEFLRUJBU0VfTUFOSUZFU1QgPSBhcHBraXRQbHVnaW4uZGF0YShsYWtlYmFzZSkucGx1Z2luLm1hbmlmZXN0O1xuY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gKFxuICBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkoXCJAZGJ4LXRvb2xzL2FwcGtpdC1ncmFwaGl0aS9wYWNrYWdlLmpzb25cIikgYXMgeyB2ZXJzaW9uOiBzdHJpbmcgfVxuKS52ZXJzaW9uO1xuY29uc3QgTUNQX1BBVEggPSBcIi9hcGkvZ3JhcGhpdGkvbWNwXCI7XG5jb25zdCBNQ1BfU0VSVkVSX0lETEVfTVMgPSAzMCAqIDYwICogMTAwMDtcbmNvbnN0IE1DUF9TRVJWRVJfU1dFRVBfTVMgPSA1ICogNjAgKiAxMDAwO1xuY29uc3QgU0lERUNBUl9TSFVURE9XTl9HUkFDRV9NUyA9IDEwXzAwMDtcbmNvbnN0IFNDT1BFRF9UT09MX0ZJRUxEUyA9IHtcbiAgYWRkX21lbW9yeTogXCJncm91cF9pZFwiLFxuICBhZGRfdHJpcGxldDogXCJncm91cF9pZFwiLFxuICBidWlsZF9jb21tdW5pdGllczogXCJncm91cF9pZHNcIixcbiAgZ2V0X2VwaXNvZGVzOiBcImdyb3VwX2lkc1wiLFxuICBnZXRfc3RhdHVzOiB1bmRlZmluZWQsXG4gIHNlYXJjaF9tZW1vcnlfZmFjdHM6IFwiZ3JvdXBfaWRzXCIsXG4gIHNlYXJjaF9ub2RlczogXCJncm91cF9pZHNcIixcbiAgc3VtbWFyaXplX3NhZ2E6IFwiZ3JvdXBfaWRcIixcbn0gYXMgY29uc3Q7XG5jb25zdCBXUklURV9UT09MUyA9IG5ldyBTZXQoW1wiYWRkX21lbW9yeVwiLCBcImFkZF90cmlwbGV0XCIsIFwiYnVpbGRfY29tbXVuaXRpZXNcIiwgXCJzdW1tYXJpemVfc2FnYVwiXSk7XG5jb25zdCBVTlNDT1BFRF9BUkdVTUVOVFMgPSBbXG4gIFwiY2VudGVyX25vZGVfdXVpZFwiLFxuICBcInByZXZpb3VzX2VwaXNvZGVfdXVpZHNcIixcbiAgXCJzYWdhX3ByZXZpb3VzX2VwaXNvZGVfdXVpZFwiLFxuICBcInNvdXJjZV9ub2RlX3V1aWRcIixcbiAgXCJ0YXJnZXRfbm9kZV91dWlkXCIsXG4gIFwidXVpZFwiLFxuXSBhcyBjb25zdDtcblxuaW50ZXJmYWNlIFRvb2xraXRFbnRyeSB7XG4gIHJlYWRvbmx5IF9fdG9vbGtpdFJlZjogdHJ1ZTtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBsb2NhbE5hbWU6IHN0cmluZztcbiAgZGVmOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVyczogdW5rbm93bjtcbiAgfTtcbiAgYW5ub3RhdGlvbnM6IHtcbiAgICBlZmZlY3Q6IFwicmVhZFwiIHwgXCJ3cml0ZVwiO1xuICAgIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWU7XG4gIH07XG59XG5cbmludGVyZmFjZSBVc2VyTWNwU2VydmVyIHtcbiAgbGFzdFVzZWQ6IG51bWJlcjtcbiAgc2VydmVyOiBNQ1BTZXJ2ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaGl0aVBsdWdpbiBleHRlbmRzIFBsdWdpbjxHcmFwaGl0aVBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3Q6IFBsdWdpbk1hbmlmZXN0PFwiZ3JhcGhpdGlcIj4gPSB7XG4gICAgbmFtZTogXCJncmFwaGl0aVwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIkdyYXBoaXRpXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJ1bnMgdGhlIGRieC10b29scyBHcmFwaGl0aSBNQ1Agc2lkZWNhciB3aXRoIExha2ViYXNlLWJhY2tlZCByZWNvdmVyeSBhbmQgXCIgK1xuICAgICAgXCJwdWJsaXNoZXMgaXQgdGhyb3VnaCB0aGUgQXBwJ3Mgc2luZ2xlIHBvcnQgd2l0aCBDYWRkeS5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFsuLi5MQUtFQkFTRV9NQU5JRkVTVC5yZXNvdXJjZXMucmVxdWlyZWRdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogR1JBUEhJVElfQ09ORklHX1NDSEVNQSB9LFxuICB9O1xuXG4gIHN0YXRpYyBnZXRSZXNvdXJjZVJlcXVpcmVtZW50cygpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIHJldHVybiBMQUtFQkFTRV9NQU5JRkVTVC5yZXNvdXJjZXMucmVxdWlyZWQubWFwKChyZXNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLnJlc291cmNlLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBsb2cubG9nZ2VyKHRoaXMpO1xuICBwcml2YXRlIGNvbW1hbmRzOiBDb21tYW5kW10gPSBbXTtcbiAgcHJpdmF0ZSBtY3A/OiBNQ1BDbGllbnQ7XG4gIHByaXZhdGUgbWNwU2VydmVycyA9IG5ldyBNYXA8c3RyaW5nLCBVc2VyTWNwU2VydmVyPigpO1xuICBwcml2YXRlIG1jcFNlcnZlclN3ZWVwPzogTm9kZUpTLlRpbWVvdXQ7XG4gIHByaXZhdGUgbWNwVG9vbHM6IFJlY29yZDxzdHJpbmcsIFRvb2w+ID0ge307XG4gIHByaXZhdGUgcmVzb2x2ZWQ/OiBSZXNvbHZlZEdyYXBoaXRpUGx1Z2luQ29uZmlnO1xuICBwcml2YXRlIHNldHVwQ29tcGxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGFydHVwPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBzdXBlcnZpc2lvbj86IENvbmN1cnJlbnRseVJlc3VsdDtcbiAgcHJpdmF0ZSBzdG9wcGluZyA9IGZhbHNlO1xuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhcnR1cCA9IHRoaXMuc3RhcnRTaWRlY2FycygpLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RvcHBpbmcpIHJldHVybjtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiYmFja2dyb3VuZCBzdGFydHVwIGZhaWxlZDsgR3JhcGhpdGkgcmVtYWlucyB1bmF2YWlsYWJsZVwiLCB7IGVycm9yIH0pO1xuICAgIH0pO1xuICAgIHZvaWQgdGhpcy5zdGFydHVwO1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXCJiYWNrZ3JvdW5kIHN0YXJ0dXAgc2NoZWR1bGVkXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFNpZGVjYXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSByZXNvbHZlR3JhcGhpdGlDb25maWcodGhpcy5jb25maWcpO1xuICAgIGNvbnN0IFtncmFwaGl0aVBvcnQsIGxpdGVsbG1Qb3J0LCBwcm94eVBvcnRdID0gYXdhaXQgZGlzdGluY3RQb3J0cyhcbiAgICAgIGNvcmVDb25maWcucG9ydCh1bmRlZmluZWQsIFwiREFUQUJSSUNLU19BUFBfUE9SVFwiLCA4MDAwLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSxcbiAgICAgIGNvbmZpZ3VyZWQuZ3JhcGhpdGlQb3J0LFxuICAgICAgY29uZmlndXJlZC5saXRlbGxtUG9ydCxcbiAgICAgIGNvbmZpZ3VyZWQucHJveHlQb3J0LFxuICAgICk7XG4gICAgYXdhaXQgZW5zdXJlR3JhcGhpdGlQeXRob24oY29uZmlndXJlZC5weXRob24pO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB7XG4gICAgICAuLi5jb25maWd1cmVkLFxuICAgICAgZ3JhcGhpdGlQb3J0LFxuICAgICAgbGl0ZWxsbVBvcnQsXG4gICAgICBwcm94eVBvcnQsXG4gICAgfTtcbiAgICB0aGlzLnN1cGVydmlzaW9uID0gY29uY3VycmVudGx5KFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJncmFwaGl0aVwiLFxuICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRMaW5lKFt0aGlzLnJlc29sdmVkLnB5dGhvbiwgXCItbVwiLCBcImRieF90b29scy5ncmFwaGl0aVwiLCBcInN0YXJ0XCJdKSxcbiAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgICAgR1JBUEhJVElfSE9TVDogXCIxMjcuMC4wLjFcIixcbiAgICAgICAgICAgIEdSQVBISVRJX1BPUlQ6IFN0cmluZyh0aGlzLnJlc29sdmVkLmdyYXBoaXRpUG9ydCksXG4gICAgICAgICAgICBKT1VSTkFMX05BTUVTUEFDRTogdGhpcy5yZXNvbHZlZC5qb3VybmFsTmFtZXNwYWNlLFxuICAgICAgICAgICAgTElURUxMTV9IT1NUOiBcIjEyNy4wLjAuMVwiLFxuICAgICAgICAgICAgTElURUxMTV9QT1JUOiBTdHJpbmcodGhpcy5yZXNvbHZlZC5saXRlbGxtUG9ydCksXG4gICAgICAgICAgICBNQU5BR0VfTElURUxMTTogXCJ0cnVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2FkZHlcIixcbiAgICAgICAgICBjb21tYW5kOiBjb21tYW5kTGluZShbXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVkLnB5dGhvbixcbiAgICAgICAgICAgIFwiLW1cIixcbiAgICAgICAgICAgIFwiZGJ4X3Rvb2xzLmdyYXBoaXRpLnByb3h5XCIsXG4gICAgICAgICAgICBcIi0tcHJveHktcG9ydFwiLFxuICAgICAgICAgICAgU3RyaW5nKHRoaXMucmVzb2x2ZWQucHJveHlQb3J0KSxcbiAgICAgICAgICAgIFwiLS1ncmFwaGl0aS1wb3J0XCIsXG4gICAgICAgICAgICBTdHJpbmcodGhpcy5yZXNvbHZlZC5ncmFwaGl0aVBvcnQpLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBraWxsT3RoZXJzT246IFtcImZhaWx1cmVcIiwgXCJzdWNjZXNzXCJdLFxuICAgICAgICBraWxsU2lnbmFsOiBcIlNJR1RFUk1cIixcbiAgICAgICAga2lsbFRpbWVvdXQ6IDEyXzAwMCxcbiAgICAgICAgcHJlZml4OiBcIm5hbWVcIixcbiAgICAgICAgcHJlZml4Q29sb3JzOiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmNvbW1hbmRzID0gdGhpcy5zdXBlcnZpc2lvbi5jb21tYW5kcztcbiAgICB2b2lkIHRoaXMuc3VwZXJ2aXNpb24ucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB0aGlzLm9uU3VwZXJ2aXNvckV4aXQoKSxcbiAgICAgIChlcnJvcikgPT4gdGhpcy5vblN1cGVydmlzb3JFeGl0KGVycm9yKSxcbiAgICApO1xuICAgIGNvbnN0IHN1cGVydmlzaW9uRmFpbHVyZSA9IHRoaXMuc3VwZXJ2aXNpb24ucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdyYXBoaXRpIHNpZGVjYXIgc3VwZXJ2aXNvciBleGl0ZWQgZHVyaW5nIHN0YXJ0dXBcIik7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSxcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JHcmFwaGl0aShncmFwaGl0aVBvcnQpO1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JHcmFwaGl0aShwcm94eVBvcnQpO1xuICAgICAgICB9KSgpLFxuICAgICAgICBzdXBlcnZpc2lvbkZhaWx1cmUsXG4gICAgICBdKTtcbiAgICAgIHRoaXMubWNwID0gbmV3IE1DUENsaWVudCh7XG4gICAgICAgIGlkOiBgYXBwa2l0LWdyYXBoaXRpLSR7dGhpcy5yZXNvbHZlZC5ncmFwaGl0aVBvcnR9YCxcbiAgICAgICAgc2VydmVyczoge1xuICAgICAgICAgIGdyYXBoaXRpOiB7XG4gICAgICAgICAgICB1cmw6IG5ldyBVUkwoYGh0dHA6Ly8xMjcuMC4wLjE6JHt0aGlzLnJlc29sdmVkLnByb3h5UG9ydH0vbWNwYCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGlzY292ZXJlZCA9IGF3YWl0IHRoaXMubWNwLmxpc3RUb29scygpO1xuICAgICAgdGhpcy5tY3BUb29scyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZGlzY292ZXJlZClcbiAgICAgICAgICAubWFwKChbbmFtZSwgdG9vbF0pID0+IFtuYW1lLnJlcGxhY2UoL15ncmFwaGl0aV8vLCBcIlwiKSwgdG9vbCBhcyBUb29sXSBhcyBjb25zdClcbiAgICAgICAgICAuZmlsdGVyKChbbmFtZV0pID0+IG5hbWUgaW4gU0NPUEVEX1RPT0xfRklFTERTKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBtaXNzaW5nID0gT2JqZWN0LmtleXMoU0NPUEVEX1RPT0xfRklFTERTKS5maWx0ZXIoKG5hbWUpID0+ICF0aGlzLm1jcFRvb2xzW25hbWVdKTtcbiAgICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHcmFwaGl0aSBkaWQgbm90IHB1Ymxpc2ggcmVxdWlyZWQgc2NvcGVkIHRvb2xzOiAke21pc3Npbmcuam9pbihcIiwgXCIpfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBhd2FpdCB0aGlzLnN0b3BTaWRlY2FycygpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRoaXMuc2V0dXBDb21wbGV0ZSA9IHRydWU7XG4gICAgdGhpcy5tY3BTZXJ2ZXJTd2VlcCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2xvc2VJZGxlTWNwU2VydmVycygpLCBNQ1BfU0VSVkVSX1NXRUVQX01TKTtcbiAgICB0aGlzLm1jcFNlcnZlclN3ZWVwLnVucmVmKCk7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcInJlYWR5XCIsIHtcbiAgICAgIGdyYXBoaXRpUG9ydDogdGhpcy5yZXNvbHZlZC5ncmFwaGl0aVBvcnQsXG4gICAgICBsaXRlbGxtUG9ydDogdGhpcy5yZXNvbHZlZC5saXRlbGxtUG9ydCxcbiAgICAgIHByb3h5UG9ydDogdGhpcy5yZXNvbHZlZC5wcm94eVBvcnQsXG4gICAgICBtY3BQYXRoOiBNQ1BfUEFUSCxcbiAgICAgIHRvb2xzOiBPYmplY3Qua2V5cyh0aGlzLm1jcFRvb2xzKSxcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBbXCJnZXRcIiwgXCJwb3N0XCIsIFwiZGVsZXRlXCJdIGFzIGNvbnN0KSB7XG4gICAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgICBuYW1lOiBgJHttZXRob2R9TWNwYCxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBwYXRoOiBcIi9tY3BcIixcbiAgICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlKSA9PiB0aGlzLmZvcndhcmRNY3AocmVxdWVzdCwgcmVzcG9uc2UpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk6IHZvaWQge1xuICAgIHN1cGVyLmFib3J0QWN0aXZlT3BlcmF0aW9ucygpO1xuICAgIHZvaWQgdGhpcy5tY3A/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc3RvcFNpZGVjYXJzKCk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7IG1jcFBhdGg6IE1DUF9QQVRIIH07XG4gIH1cblxuICB0b29sa2l0KCk6IFJlY29yZDxzdHJpbmcsIFRvb2xraXRFbnRyeT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLm1jcFRvb2xzKS5tYXAoKFtuYW1lLCB0b29sXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgX190b29sa2l0UmVmOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgIHBsdWdpbk5hbWU6IFwiZ3JhcGhpdGlcIixcbiAgICAgICAgICBsb2NhbE5hbWU6IG5hbWUsXG4gICAgICAgICAgZGVmOiB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHRvb2wuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB0b29sLmlucHV0U2NoZW1hID8/IHsgdHlwZTogXCJvYmplY3RcIiwgcHJvcGVydGllczoge30gfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFubm90YXRpb25zOiB7XG4gICAgICAgICAgICBlZmZlY3Q6IFdSSVRFX1RPT0xTLmhhcyhuYW1lKSA/IChcIndyaXRlXCIgYXMgY29uc3QpIDogKFwicmVhZFwiIGFzIGNvbnN0KSxcbiAgICAgICAgICAgIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBleGVjdXRlQWdlbnRUb29sKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBhcmdzOiB1bmtub3duLFxuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgIGNvbnRleHQ/OiB7IHJlc291cmNlSWQ/OiBzdHJpbmcgfSxcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgY29uc3QgdG9vbCA9IHRoaXMubWNwVG9vbHNbbmFtZV07XG4gICAgaWYgKCF0b29sPy5leGVjdXRlKSB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gR3JhcGhpdGkgdG9vbDogJHtuYW1lfWApO1xuICAgIGNvbnN0IHVzZXJJZCA9IGNvbnRleHQ/LnJlc291cmNlSWQgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZCgpO1xuICAgIHJldHVybiB0b29sLmV4ZWN1dGUoc2NvcGVkQXJndW1lbnRzKG5hbWUsIGFyZ3MsIHVzZXJTY29wZSh1c2VySWQpKSwge1xuICAgICAgYWJvcnRTaWduYWw6IHNpZ25hbCxcbiAgICB9IGFzIG5ldmVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZm9yd2FyZE1jcChyZXF1ZXN0OiBleHByZXNzLlJlcXVlc3QsIHJlc3BvbnNlOiBleHByZXNzLlJlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnJlc29sdmVkKSB7XG4gICAgICByZXNwb25zZS5zdGF0dXMoNTAzKS5qc29uKHsgZXJyb3I6IFwiR3JhcGhpdGkgaXMgbm90IHJlYWR5XCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHVzZXJJZCA9IGFwcGtpdElkZW50aXR5LnJlcXVlc3RVc2VySWQocmVxdWVzdCkgPz8gZXhlY3V0aW9uQ29udGV4dFVzZXJJZCgpO1xuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMubWNwU2VydmVyKHVzZXJJZCk7XG4gICAgYXdhaXQgc2VydmVyLnN0YXJ0SFRUUCh7XG4gICAgICB1cmw6IG5ldyBVUkwocmVxdWVzdC5vcmlnaW5hbFVybCwgXCJodHRwOi8vYXBwLmxvY2FsXCIpLFxuICAgICAgaHR0cFBhdGg6IE1DUF9QQVRILFxuICAgICAgcmVxOiByZXF1ZXN0LFxuICAgICAgcmVzOiByZXNwb25zZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWNwU2VydmVyKHVzZXJJZDogc3RyaW5nKTogTUNQU2VydmVyIHtcbiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMubWNwU2VydmVycy5nZXQodXNlcklkKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGV4aXN0aW5nLmxhc3RVc2VkID0gRGF0ZS5ub3coKTtcbiAgICAgIHJldHVybiBleGlzdGluZy5zZXJ2ZXI7XG4gICAgfVxuICAgIGNvbnN0IHNjb3BlID0gdXNlclNjb3BlKHVzZXJJZCk7XG4gICAgY29uc3QgdG9vbHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh0aGlzLm1jcFRvb2xzKS5tYXAoKFtuYW1lLCB0b29sXSkgPT4gW1xuICAgICAgICBuYW1lLFxuICAgICAgICBjcmVhdGVUb29sKHtcbiAgICAgICAgICBpZDogbmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdG9vbC5kZXNjcmlwdGlvbiA/PyBuYW1lLFxuICAgICAgICAgIC4uLih0b29sLmlucHV0U2NoZW1hID8geyBpbnB1dFNjaGVtYTogdG9vbC5pbnB1dFNjaGVtYSBhcyBuZXZlciB9IDoge30pLFxuICAgICAgICAgIGV4ZWN1dGU6IChhcmdzOiB1bmtub3duLCBjb250ZXh0OiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRvb2wuZXhlY3V0ZSkgdGhyb3cgbmV3IEVycm9yKGBHcmFwaGl0aSB0b29sIGNhbm5vdCBleGVjdXRlOiAke25hbWV9YCk7XG4gICAgICAgICAgICByZXR1cm4gdG9vbC5leGVjdXRlKHNjb3BlZEFyZ3VtZW50cyhuYW1lLCBhcmdzLCBzY29wZSksIGNvbnRleHQgYXMgbmV2ZXIpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgTUNQU2VydmVyKHtcbiAgICAgIG5hbWU6IFwiR3JhcGhpdGlcIixcbiAgICAgIHZlcnNpb246IFwiMS4wLjBcIixcbiAgICAgIHRvb2xzLFxuICAgIH0pO1xuICAgIHRoaXMubWNwU2VydmVycy5zZXQodXNlcklkLCB7IGxhc3RVc2VkOiBEYXRlLm5vdygpLCBzZXJ2ZXIgfSk7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgb25TdXBlcnZpc29yRXhpdChlcnJvcj86IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdG9wcGluZyB8fCAhdGhpcy5zZXR1cENvbXBsZXRlKSByZXR1cm47XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IoXCJzaWRlY2FyIHN1cGVydmlzb3IgZXhpdGVkXCIsIHsgZXJyb3IgfSk7XG4gICAgcHJvY2Vzcy5raWxsKHByb2Nlc3MucGlkLCBcIlNJR1RFUk1cIik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0b3BTaWRlY2FycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdG9wcGluZykgcmV0dXJuO1xuICAgIHRoaXMuc3RvcHBpbmcgPSB0cnVlO1xuICAgIGlmICh0aGlzLm1jcFNlcnZlclN3ZWVwKSBjbGVhckludGVydmFsKHRoaXMubWNwU2VydmVyU3dlZXApO1xuICAgIHRoaXMubWNwU2VydmVyU3dlZXAgPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgY29tbWFuZHMgPSB0aGlzLmNvbW1hbmRzO1xuICAgIGNvbnN0IHN1cGVydmlzaW9uID0gdGhpcy5zdXBlcnZpc2lvbjtcbiAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIGNvbW1hbmQua2lsbChcIlNJR1RFUk1cIik7XG4gICAgY29uc3QgY2xlYW51cCA9IFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAuLi5bLi4udGhpcy5tY3BTZXJ2ZXJzLnZhbHVlcygpXS5tYXAoKHsgc2VydmVyIH0pID0+IHNlcnZlci5jbG9zZSgpKSxcbiAgICAgIHRoaXMubWNwPy5kaXNjb25uZWN0KCksXG4gICAgICBzdXBlcnZpc2lvbj8ucmVzdWx0LFxuICAgIF0pO1xuICAgIGNvbnN0IGNvbXBsZXRlZCA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBjbGVhbnVwLnRoZW4oKCkgPT4gdHJ1ZSksXG4gICAgICBhc3luY01vZHVsZS5zbGVlcChTSURFQ0FSX1NIVVRET1dOX0dSQUNFX01TKS50aGVuKCgpID0+IGZhbHNlKSxcbiAgICBdKTtcbiAgICBpZiAoIWNvbXBsZXRlZCkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcInNpZGVjYXJzIGlnbm9yZWQgU0lHVEVSTTsgZXNjYWxhdGluZyB0byBTSUdLSUxMXCIpO1xuICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNvbW1hbmRzKSBjb21tYW5kLmtpbGwoXCJTSUdLSUxMXCIpO1xuICAgIH1cbiAgICB0aGlzLm1jcFNlcnZlcnMuY2xlYXIoKTtcbiAgICB0aGlzLm1jcCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1jcFRvb2xzID0ge307XG4gICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIHRoaXMuc3VwZXJ2aXNpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zdGFydHVwID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZUlkbGVNY3BTZXJ2ZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1dG9mZiA9IERhdGUubm93KCkgLSBNQ1BfU0VSVkVSX0lETEVfTVM7XG4gICAgZm9yIChjb25zdCBbdXNlcklkLCBlbnRyeV0gb2YgdGhpcy5tY3BTZXJ2ZXJzKSB7XG4gICAgICBpZiAoZW50cnkubGFzdFVzZWQgPj0gY3V0b2ZmKSBjb250aW51ZTtcbiAgICAgIHRoaXMubWNwU2VydmVycy5kZWxldGUodXNlcklkKTtcbiAgICAgIHZvaWQgZW50cnkuc2VydmVyLmNsb3NlKCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJpZGxlIE1DUCBzZXJ2ZXIgY2xvc2UgZmFpbGVkXCIsIHsgZXJyb3IgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxudHlwZSBFeGVjUHl0aG9uID0gKGZpbGU6IHN0cmluZywgYXJnczogc3RyaW5nW10pID0+IFByb21pc2U8dW5rbm93bj47XG5cbi8qKiBFbnN1cmUgRGF0YWJyaWNrcyBBcHBzIGhhcyB0aGUgUHl0aG9uIHNpZGVjYXIgbWF0Y2hpbmcgdGhpcyBOb2RlIHBhY2thZ2UuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlR3JhcGhpdGlQeXRob24oXG4gIHB5dGhvbjogc3RyaW5nLFxuICBydW46IEV4ZWNQeXRob24gPSAoZmlsZSwgYXJncykgPT4gcHJvbWlzaWZ5KGV4ZWNGaWxlKShmaWxlLCBhcmdzKSxcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGF3YWl0IHJ1bihweXRob24sIFtcIi1jXCIsIFwiaW1wb3J0IGRieF90b29scy5ncmFwaGl0aVwiXSk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBydW4ocHl0aG9uLCBbXCItbVwiLCBcInBpcFwiLCBcIi0tdmVyc2lvblwiXSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBhd2FpdCBydW4ocHl0aG9uLCBbXG4gICAgICAgIFwiLWNcIixcbiAgICAgICAgXCJpbXBvcnQgdXJsbGliLnJlcXVlc3Q7IGV4ZWModXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cHM6Ly9ib290c3RyYXAucHlwYS5pby9nZXQtcGlwLnB5JykucmVhZCgpKVwiLFxuICAgICAgICBcIi0tdXNlclwiLFxuICAgICAgICBcIi0tYnJlYWstc3lzdGVtLXBhY2thZ2VzXCIsXG4gICAgICBdKTtcbiAgICB9XG4gICAgYXdhaXQgcnVuKHB5dGhvbiwgW1xuICAgICAgXCItbVwiLFxuICAgICAgXCJwaXBcIixcbiAgICAgIFwiaW5zdGFsbFwiLFxuICAgICAgXCItLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2tcIixcbiAgICAgIFwiLS11c2VyXCIsXG4gICAgICBcIi0tYnJlYWstc3lzdGVtLXBhY2thZ2VzXCIsXG4gICAgICBgZGJ4LXRvb2xzLWdyYXBoaXRpPT0ke1BBQ0tBR0VfVkVSU0lPTn1gLFxuICAgIF0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBncmFwaGl0aSA9IHRvUGx1Z2luKEdyYXBoaXRpUGx1Z2luKTtcblxuZnVuY3Rpb24gZXhlY3V0aW9uQ29udGV4dFVzZXJJZCgpOiBzdHJpbmcge1xuICBjb25zdCBjb250ZXh0ID0gZGJ4QXBwa2l0LnRyeUdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgaWYgKCFjb250ZXh0KSB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBtZW1vcnkgcmVxdWlyZXMgYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0XCIpO1xuICByZXR1cm4gXCJ1c2VySWRcIiBpbiBjb250ZXh0ID8gY29udGV4dC51c2VySWQgOiBjb250ZXh0LnNlcnZpY2VVc2VySWQ7XG59XG5cbmZ1bmN0aW9uIHVzZXJTY29wZSh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgdXNlcl8ke2NyZWF0ZUhhc2goXCJzaGEyNTZcIikudXBkYXRlKHVzZXJJZCkuZGlnZXN0KFwiYmFzZTY0dXJsXCIpfWA7XG59XG5cbmZ1bmN0aW9uIHNjb3BlZEFyZ3VtZW50cyhuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNjb3BlOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGlmICghKG5hbWUgaW4gU0NPUEVEX1RPT0xfRklFTERTKSkgdGhyb3cgbmV3IEVycm9yKGBHcmFwaGl0aSB0b29sIGlzIG5vdCB1c2VyLXNjb3BlZDogJHtuYW1lfWApO1xuICBjb25zdCBzY29wZWQgPSBvYmplY3QuaXNSZWNvcmQoYXJncykgPyB7IC4uLmFyZ3MgfSA6IHt9O1xuICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIFVOU0NPUEVEX0FSR1VNRU5UUykgZGVsZXRlIHNjb3BlZFthcmd1bWVudF07XG4gIGNvbnN0IGZpZWxkID0gU0NPUEVEX1RPT0xfRklFTERTW25hbWUgYXMga2V5b2YgdHlwZW9mIFNDT1BFRF9UT09MX0ZJRUxEU107XG4gIGlmIChmaWVsZCA9PT0gXCJncm91cF9pZFwiKSBzY29wZWQuZ3JvdXBfaWQgPSBzY29wZTtcbiAgaWYgKGZpZWxkID09PSBcImdyb3VwX2lkc1wiKSBzY29wZWQuZ3JvdXBfaWRzID0gW3Njb3BlXTtcbiAgcmV0dXJuIHNjb3BlZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckdyYXBoaXRpKHBvcnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgYXdhaXQgKGNvbnN0IHJlYWR5IG9mIGFzeW5jTW9kdWxlLnBvbGwoXG4gICAgYXN5bmMgKHsgc2lnbmFsIH0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYGh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS9oZWFsdGhgLCB7IHNpZ25hbCB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLm9rO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGludGVydmFsTXM6IDI1MCxcbiAgICAgIHRpbWVvdXRNczogNjBfMDAwLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXZhaWxhYmxlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsIFwiMTI3LjAuMC4xXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgaWYgKCFhZGRyZXNzIHx8IHR5cGVvZiBhZGRyZXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ291bGQgbm90IGFsbG9jYXRlIGEgR3JhcGhpdGkgbG9vcGJhY2sgcG9ydFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlcnZlci5jbG9zZSgoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKGFkZHJlc3MucG9ydCkpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc3RpbmN0UG9ydHMoXG4gIGFwcFBvcnQ6IG51bWJlcixcbiAgZ3JhcGhpdGlQb3J0OiBudW1iZXIsXG4gIGxpdGVsbG1Qb3J0OiBudW1iZXIsXG4gIHByb3h5UG9ydDogbnVtYmVyLFxuKTogUHJvbWlzZTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgY29uc3QgcG9ydHMgPSBbYXBwUG9ydF07XG4gIGZvciAoY29uc3QgY29uZmlndXJlZFBvcnQgb2YgW2dyYXBoaXRpUG9ydCwgbGl0ZWxsbVBvcnQsIHByb3h5UG9ydF0pIHtcbiAgICBpZiAoY29uZmlndXJlZFBvcnQgJiYgcG9ydHMuaW5jbHVkZXMoY29uZmlndXJlZFBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFwiR3JhcGhpdGkgc2lkZWNhciBwb3J0cyBtdXN0IGRpZmZlciBmcm9tIERBVEFCUklDS1NfQVBQX1BPUlRcIik7XG4gICAgfVxuICAgIGxldCBwb3J0ID0gY29uZmlndXJlZFBvcnQgfHwgKGF3YWl0IGF2YWlsYWJsZVBvcnQoKSk7XG4gICAgd2hpbGUgKHBvcnRzLmluY2x1ZGVzKHBvcnQpKSBwb3J0ID0gYXdhaXQgYXZhaWxhYmxlUG9ydCgpO1xuICAgIHBvcnRzLnB1c2gocG9ydCk7XG4gIH1cbiAgcmV0dXJuIHBvcnRzLnNsaWNlKDEpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZnVuY3Rpb24gY29tbWFuZExpbmUoYXJndW1lbnRzXzogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJndW1lbnRzXy5tYXAoKHZhbHVlKSA9PiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcXCcnXCIpfSdgKS5qb2luKFwiIFwiKTtcbn1cbiJdfQ==
|
|
415
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsR0FJVCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLElBQUksY0FBYyxFQUMxQixNQUFNLElBQUksWUFBWSxHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLFlBQXVELE1BQU0sY0FBYyxDQUFDO0FBRW5GLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIscUJBQXFCLEdBR3RCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3RFLE1BQU0sZUFBZSxH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TyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsYUFBYSxDQUMxQixPQUFlLEVBQ2YsWUFBb0IsRUFDcEIsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixLQUFLLE1BQU0sY0FBYyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3BFLElBQUksY0FBYyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksa0JBQWtCLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsY0FBYyxJQUFJLENBQUMsTUFBTSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxJQUFJLEdBQUcsTUFBTSxhQUFhLEVBQUUsQ0FBQztRQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUE2QixDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFvQjtJQUN2QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgc3VwZXJ2aXNlcyBHcmFwaGl0aSBhbmQgcmVwdWJsaXNoZXMgdXNlci1zY29wZWQgTUNQIHRvb2xzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIgfSBmcm9tIFwibm9kZTpuZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIjtcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgUGx1Z2luLFxuICBsYWtlYmFzZSxcbiAgdG9QbHVnaW4sXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbiAgdHlwZSBSZXNvdXJjZVJlcXVpcmVtZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBhcHBraXQgYXMgZGJ4QXBwa2l0LFxuICBpZGVudGl0eSBhcyBhcHBraXRJZGVudGl0eSxcbiAgcGx1Z2luIGFzIGFwcGtpdFBsdWdpbixcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGFzeW5jIGFzIGFzeW5jTW9kdWxlLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sLCB0eXBlIFRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgeyBNQ1BDbGllbnQsIE1DUFNlcnZlciB9IGZyb20gXCJAbWFzdHJhL21jcFwiO1xuaW1wb3J0IGNvbmN1cnJlbnRseSwgeyB0eXBlIENvbW1hbmQsIHR5cGUgQ29uY3VycmVudGx5UmVzdWx0IH0gZnJvbSBcImNvbmN1cnJlbnRseVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHtcbiAgR1JBUEhJVElfQ09ORklHX1NDSEVNQSxcbiAgcmVzb2x2ZUdyYXBoaXRpQ29uZmlnLFxuICB0eXBlIEdyYXBoaXRpUGx1Z2luQ29uZmlnLFxuICB0eXBlIFJlc29sdmVkR3JhcGhpdGlQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuXG5jb25zdCBMQUtFQkFTRV9NQU5JRkVTVCA9IGFwcGtpdFBsdWdpbi5kYXRhKGxha2ViYXNlKS5wbHVnaW4ubWFuaWZlc3Q7XG5jb25zdCBQQUNLQUdFX1ZFUlNJT04gPSAoXG4gIGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKShcIkBkYngtdG9vbHMvYXBwa2l0LWdyYXBoaXRpL3BhY2thZ2UuanNvblwiKSBhcyB7IHZlcnNpb246IHN0cmluZyB9XG4pLnZlcnNpb247XG5jb25zdCBNQ1BfUEFUSCA9IFwiL2FwaS9ncmFwaGl0aS9tY3BcIjtcbmNvbnN0IE1DUF9TRVJWRVJfSURMRV9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgTUNQX1NFUlZFUl9TV0VFUF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBTSURFQ0FSX1NIVVRET1dOX0dSQUNFX01TID0gMTBfMDAwO1xuY29uc3QgU0lERUNBUl9TVEFSVFVQX1RJTUVPVVRfTVMgPSAxMCAqIDYwXzAwMDtcbmNvbnN0IFNDT1BFRF9UT09MX0ZJRUxEUyA9IHtcbiAgYWRkX21lbW9yeTogXCJncm91cF9pZFwiLFxuICBhZGRfdHJpcGxldDogXCJncm91cF9pZFwiLFxuICBidWlsZF9jb21tdW5pdGllczogXCJncm91cF9pZHNcIixcbiAgZ2V0X2VwaXNvZGVzOiBcImdyb3VwX2lkc1wiLFxuICBnZXRfc3RhdHVzOiB1bmRlZmluZWQsXG4gIHNlYXJjaF9tZW1vcnlfZmFjdHM6IFwiZ3JvdXBfaWRzXCIsXG4gIHNlYXJjaF9ub2RlczogXCJncm91cF9pZHNcIixcbiAgc3VtbWFyaXplX3NhZ2E6IFwiZ3JvdXBfaWRcIixcbn0gYXMgY29uc3Q7XG5jb25zdCBXUklURV9UT09MUyA9IG5ldyBTZXQoW1wiYWRkX21lbW9yeVwiLCBcImFkZF90cmlwbGV0XCIsIFwiYnVpbGRfY29tbXVuaXRpZXNcIiwgXCJzdW1tYXJpemVfc2FnYVwiXSk7XG5jb25zdCBVTlNDT1BFRF9BUkdVTUVOVFMgPSBbXG4gIFwiY2VudGVyX25vZGVfdXVpZFwiLFxuICBcInByZXZpb3VzX2VwaXNvZGVfdXVpZHNcIixcbiAgXCJzYWdhX3ByZXZpb3VzX2VwaXNvZGVfdXVpZFwiLFxuICBcInNvdXJjZV9ub2RlX3V1aWRcIixcbiAgXCJ0YXJnZXRfbm9kZV91dWlkXCIsXG4gIFwidXVpZFwiLFxuXSBhcyBjb25zdDtcblxuaW50ZXJmYWNlIFRvb2xraXRFbnRyeSB7XG4gIHJlYWRvbmx5IF9fdG9vbGtpdFJlZjogdHJ1ZTtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBsb2NhbE5hbWU6IHN0cmluZztcbiAgZGVmOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgcGFyYW1ldGVyczogdW5rbm93bjtcbiAgfTtcbiAgYW5ub3RhdGlvbnM6IHtcbiAgICBlZmZlY3Q6IFwicmVhZFwiIHwgXCJ3cml0ZVwiO1xuICAgIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWU7XG4gIH07XG59XG5cbmludGVyZmFjZSBVc2VyTWNwU2VydmVyIHtcbiAgbGFzdFVzZWQ6IG51bWJlcjtcbiAgc2VydmVyOiBNQ1BTZXJ2ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBHcmFwaGl0aVBsdWdpbiBleHRlbmRzIFBsdWdpbjxHcmFwaGl0aVBsdWdpbkNvbmZpZz4ge1xuICBzdGF0aWMgbWFuaWZlc3Q6IFBsdWdpbk1hbmlmZXN0PFwiZ3JhcGhpdGlcIj4gPSB7XG4gICAgbmFtZTogXCJncmFwaGl0aVwiLFxuICAgIGRpc3BsYXlOYW1lOiBcIkdyYXBoaXRpXCIsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICBcIlJ1bnMgdGhlIGRieC10b29scyBHcmFwaGl0aSBNQ1Agc2lkZWNhciB3aXRoIExha2ViYXNlLWJhY2tlZCByZWNvdmVyeSBhbmQgXCIgK1xuICAgICAgXCJwdWJsaXNoZXMgaXQgdGhyb3VnaCB0aGUgQXBwJ3Mgc2luZ2xlIHBvcnQgd2l0aCBDYWRkeS5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFsuLi5MQUtFQkFTRV9NQU5JRkVTVC5yZXNvdXJjZXMucmVxdWlyZWRdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogR1JBUEhJVElfQ09ORklHX1NDSEVNQSB9LFxuICB9O1xuXG4gIHN0YXRpYyBnZXRSZXNvdXJjZVJlcXVpcmVtZW50cygpOiBSZXNvdXJjZVJlcXVpcmVtZW50W10ge1xuICAgIHJldHVybiBMQUtFQkFTRV9NQU5JRkVTVC5yZXNvdXJjZXMucmVxdWlyZWQubWFwKChyZXNvdXJjZSkgPT4gKHtcbiAgICAgIC4uLnJlc291cmNlLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBsb2cubG9nZ2VyKHRoaXMpO1xuICBwcml2YXRlIGNvbW1hbmRzOiBDb21tYW5kW10gPSBbXTtcbiAgcHJpdmF0ZSBtY3A/OiBNQ1BDbGllbnQ7XG4gIHByaXZhdGUgbWNwU2VydmVycyA9IG5ldyBNYXA8c3RyaW5nLCBVc2VyTWNwU2VydmVyPigpO1xuICBwcml2YXRlIG1jcFNlcnZlclN3ZWVwPzogTm9kZUpTLlRpbWVvdXQ7XG4gIHByaXZhdGUgbWNwVG9vbHM6IFJlY29yZDxzdHJpbmcsIFRvb2w+ID0ge307XG4gIHByaXZhdGUgcmVzb2x2ZWQ/OiBSZXNvbHZlZEdyYXBoaXRpUGx1Z2luQ29uZmlnO1xuICBwcml2YXRlIHNldHVwQ29tcGxldGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGFydHVwPzogUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSBzdXBlcnZpc2lvbj86IENvbmN1cnJlbnRseVJlc3VsdDtcbiAgcHJpdmF0ZSBzdG9wcGluZyA9IGZhbHNlO1xuXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhcnR1cCA9IHRoaXMuc3RhcnRTaWRlY2FycygpLmNhdGNoKChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgaWYgKHRoaXMuc3RvcHBpbmcpIHJldHVybjtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFwiYmFja2dyb3VuZCBzdGFydHVwIGZhaWxlZDsgR3JhcGhpdGkgcmVtYWlucyB1bmF2YWlsYWJsZVwiLCB7IGVycm9yIH0pO1xuICAgIH0pO1xuICAgIHZvaWQgdGhpcy5zdGFydHVwO1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXCJiYWNrZ3JvdW5kIHN0YXJ0dXAgc2NoZWR1bGVkXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydFNpZGVjYXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZ3VyZWQgPSByZXNvbHZlR3JhcGhpdGlDb25maWcodGhpcy5jb25maWcpO1xuICAgIGNvbnN0IFtncmFwaGl0aVBvcnQsIGxpdGVsbG1Qb3J0LCBwcm94eVBvcnRdID0gYXdhaXQgZGlzdGluY3RQb3J0cyhcbiAgICAgIGNvcmVDb25maWcucG9ydCh1bmRlZmluZWQsIFwiREFUQUJSSUNLU19BUFBfUE9SVFwiLCA4MDAwLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSxcbiAgICAgIGNvbmZpZ3VyZWQuZ3JhcGhpdGlQb3J0LFxuICAgICAgY29uZmlndXJlZC5saXRlbGxtUG9ydCxcbiAgICAgIGNvbmZpZ3VyZWQucHJveHlQb3J0LFxuICAgICk7XG4gICAgYXdhaXQgZW5zdXJlR3JhcGhpdGlQeXRob24oY29uZmlndXJlZC5weXRob24pO1xuICAgIHRoaXMucmVzb2x2ZWQgPSB7XG4gICAgICAuLi5jb25maWd1cmVkLFxuICAgICAgZ3JhcGhpdGlQb3J0LFxuICAgICAgbGl0ZWxsbVBvcnQsXG4gICAgICBwcm94eVBvcnQsXG4gICAgfTtcbiAgICB0aGlzLnN1cGVydmlzaW9uID0gY29uY3VycmVudGx5KFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJncmFwaGl0aVwiLFxuICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRMaW5lKFt0aGlzLnJlc29sdmVkLnB5dGhvbiwgXCItbVwiLCBcImRieF90b29scy5ncmFwaGl0aVwiLCBcInN0YXJ0XCJdKSxcbiAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgICAgICAgR1JBUEhJVElfSE9TVDogXCIxMjcuMC4wLjFcIixcbiAgICAgICAgICAgIEdSQVBISVRJX1BPUlQ6IFN0cmluZyh0aGlzLnJlc29sdmVkLmdyYXBoaXRpUG9ydCksXG4gICAgICAgICAgICBKT1VSTkFMX05BTUVTUEFDRTogdGhpcy5yZXNvbHZlZC5qb3VybmFsTmFtZXNwYWNlLFxuICAgICAgICAgICAgTElURUxMTV9IT1NUOiBcIjEyNy4wLjAuMVwiLFxuICAgICAgICAgICAgTElURUxMTV9QT1JUOiBTdHJpbmcodGhpcy5yZXNvbHZlZC5saXRlbGxtUG9ydCksXG4gICAgICAgICAgICBNQU5BR0VfTElURUxMTTogXCJ0cnVlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2FkZHlcIixcbiAgICAgICAgICBjb21tYW5kOiBjb21tYW5kTGluZShbXG4gICAgICAgICAgICB0aGlzLnJlc29sdmVkLnB5dGhvbixcbiAgICAgICAgICAgIFwiLW1cIixcbiAgICAgICAgICAgIFwiZGJ4X3Rvb2xzLmdyYXBoaXRpLnByb3h5XCIsXG4gICAgICAgICAgICBcIi0tcHJveHktcG9ydFwiLFxuICAgICAgICAgICAgU3RyaW5nKHRoaXMucmVzb2x2ZWQucHJveHlQb3J0KSxcbiAgICAgICAgICAgIFwiLS1ncmFwaGl0aS1wb3J0XCIsXG4gICAgICAgICAgICBTdHJpbmcodGhpcy5yZXNvbHZlZC5ncmFwaGl0aVBvcnQpLFxuICAgICAgICAgIF0pLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICBraWxsT3RoZXJzT246IFtcImZhaWx1cmVcIiwgXCJzdWNjZXNzXCJdLFxuICAgICAgICBraWxsU2lnbmFsOiBcIlNJR1RFUk1cIixcbiAgICAgICAga2lsbFRpbWVvdXQ6IFNJREVDQVJfU0hVVERPV05fR1JBQ0VfTVMsXG4gICAgICAgIHByZWZpeDogXCJuYW1lXCIsXG4gICAgICAgIHByZWZpeENvbG9yczogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5jb21tYW5kcyA9IHRoaXMuc3VwZXJ2aXNpb24uY29tbWFuZHM7XG4gICAgdm9pZCB0aGlzLnN1cGVydmlzaW9uLnJlc3VsdC50aGVuKFxuICAgICAgKCkgPT4gdGhpcy5vblN1cGVydmlzb3JFeGl0KCksXG4gICAgICAoZXJyb3IpID0+IHRoaXMub25TdXBlcnZpc29yRXhpdChlcnJvciksXG4gICAgKTtcbiAgICBjb25zdCBzdXBlcnZpc2lvbkZhaWx1cmUgPSB0aGlzLnN1cGVydmlzaW9uLnJlc3VsdC50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHcmFwaGl0aSBzaWRlY2FyIHN1cGVydmlzb3IgZXhpdGVkIGR1cmluZyBzdGFydHVwXCIpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yR3JhcGhpdGkoZ3JhcGhpdGlQb3J0KTtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yR3JhcGhpdGkocHJveHlQb3J0KTtcbiAgICAgICAgfSkoKSxcbiAgICAgICAgc3VwZXJ2aXNpb25GYWlsdXJlLFxuICAgICAgXSk7XG4gICAgICB0aGlzLm1jcCA9IG5ldyBNQ1BDbGllbnQoe1xuICAgICAgICBpZDogYGFwcGtpdC1ncmFwaGl0aS0ke3RoaXMucmVzb2x2ZWQuZ3JhcGhpdGlQb3J0fWAsXG4gICAgICAgIHNlcnZlcnM6IHtcbiAgICAgICAgICBncmFwaGl0aToge1xuICAgICAgICAgICAgdXJsOiBuZXcgVVJMKGBodHRwOi8vMTI3LjAuMC4xOiR7dGhpcy5yZXNvbHZlZC5wcm94eVBvcnR9L21jcGApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRpc2NvdmVyZWQgPSBhd2FpdCB0aGlzLm1jcC5saXN0VG9vbHMoKTtcbiAgICAgIHRoaXMubWNwVG9vbHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGRpc2NvdmVyZWQpXG4gICAgICAgICAgLm1hcCgoW25hbWUsIHRvb2xdKSA9PiBbbmFtZS5yZXBsYWNlKC9eZ3JhcGhpdGlfLywgXCJcIiksIHRvb2wgYXMgVG9vbF0gYXMgY29uc3QpXG4gICAgICAgICAgLmZpbHRlcigoW25hbWVdKSA9PiBuYW1lIGluIFNDT1BFRF9UT09MX0ZJRUxEUyksXG4gICAgICApO1xuICAgICAgY29uc3QgbWlzc2luZyA9IE9iamVjdC5rZXlzKFNDT1BFRF9UT09MX0ZJRUxEUykuZmlsdGVyKChuYW1lKSA9PiAhdGhpcy5tY3BUb29sc1tuYW1lXSk7XG4gICAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgZGlkIG5vdCBwdWJsaXNoIHJlcXVpcmVkIHNjb3BlZCB0b29sczogJHttaXNzaW5nLmpvaW4oXCIsIFwiKX1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgYXdhaXQgdGhpcy5zdG9wU2lkZWNhcnMoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aGlzLnNldHVwQ29tcGxldGUgPSB0cnVlO1xuICAgIHRoaXMubWNwU2VydmVyU3dlZXAgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLmNsb3NlSWRsZU1jcFNlcnZlcnMoKSwgTUNQX1NFUlZFUl9TV0VFUF9NUyk7XG4gICAgdGhpcy5tY3BTZXJ2ZXJTd2VlcC51bnJlZigpO1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICBncmFwaGl0aVBvcnQ6IHRoaXMucmVzb2x2ZWQuZ3JhcGhpdGlQb3J0LFxuICAgICAgbGl0ZWxsbVBvcnQ6IHRoaXMucmVzb2x2ZWQubGl0ZWxsbVBvcnQsXG4gICAgICBwcm94eVBvcnQ6IHRoaXMucmVzb2x2ZWQucHJveHlQb3J0LFxuICAgICAgbWNwUGF0aDogTUNQX1BBVEgsXG4gICAgICB0b29sczogT2JqZWN0LmtleXModGhpcy5tY3BUb29scyksXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgW1wiZ2V0XCIsIFwicG9zdFwiLCBcImRlbGV0ZVwiXSBhcyBjb25zdCkge1xuICAgICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgICAgbmFtZTogYCR7bWV0aG9kfU1jcGAsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgcGF0aDogXCIvbWNwXCIsXG4gICAgICAgIGhhbmRsZXI6IChyZXF1ZXN0LCByZXNwb25zZSkgPT4gdGhpcy5mb3J3YXJkTWNwKHJlcXVlc3QsIHJlc3BvbnNlKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIGFib3J0QWN0aXZlT3BlcmF0aW9ucygpOiB2b2lkIHtcbiAgICBzdXBlci5hYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTtcbiAgICB2b2lkIHRoaXMubWNwPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTaWRlY2FycygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpIHtcbiAgICByZXR1cm4geyBtY3BQYXRoOiBNQ1BfUEFUSCB9O1xuICB9XG5cbiAgdG9vbGtpdCgpOiBSZWNvcmQ8c3RyaW5nLCBUb29sa2l0RW50cnk+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5tY3BUb29scykubWFwKChbbmFtZSwgdG9vbF0pID0+IFtcbiAgICAgICAgbmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIF9fdG9vbGtpdFJlZjogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBwbHVnaW5OYW1lOiBcImdyYXBoaXRpXCIsXG4gICAgICAgICAgbG9jYWxOYW1lOiBuYW1lLFxuICAgICAgICAgIGRlZjoge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogdG9vbC5pbnB1dFNjaGVtYSA/PyB7IHR5cGU6IFwib2JqZWN0XCIsIHByb3BlcnRpZXM6IHt9IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbm5vdGF0aW9uczoge1xuICAgICAgICAgICAgZWZmZWN0OiBXUklURV9UT09MUy5oYXMobmFtZSkgPyAoXCJ3cml0ZVwiIGFzIGNvbnN0KSA6IChcInJlYWRcIiBhcyBjb25zdCksXG4gICAgICAgICAgICByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgYXJnczogdW5rbm93bixcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICBjb250ZXh0PzogeyByZXNvdXJjZUlkPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIGNvbnN0IHRvb2wgPSB0aGlzLm1jcFRvb2xzW25hbWVdO1xuICAgIGlmICghdG9vbD8uZXhlY3V0ZSkgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIEdyYXBoaXRpIHRvb2w6ICR7bmFtZX1gKTtcbiAgICBjb25zdCB1c2VySWQgPSBjb250ZXh0Py5yZXNvdXJjZUlkID8/IGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoKTtcbiAgICByZXR1cm4gdG9vbC5leGVjdXRlKHNjb3BlZEFyZ3VtZW50cyhuYW1lLCBhcmdzLCB1c2VyU2NvcGUodXNlcklkKSksIHtcbiAgICAgIGFib3J0U2lnbmFsOiBzaWduYWwsXG4gICAgfSBhcyBuZXZlcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcndhcmRNY3AocmVxdWVzdDogZXhwcmVzcy5SZXF1ZXN0LCByZXNwb25zZTogZXhwcmVzcy5SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5yZXNvbHZlZCkge1xuICAgICAgcmVzcG9uc2Uuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiBcIkdyYXBoaXRpIGlzIG5vdCByZWFkeVwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VySWQgPSBhcHBraXRJZGVudGl0eS5yZXF1ZXN0VXNlcklkKHJlcXVlc3QpID8/IGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoKTtcbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLm1jcFNlcnZlcih1c2VySWQpO1xuICAgIGF3YWl0IHNlcnZlci5zdGFydEhUVFAoe1xuICAgICAgdXJsOiBuZXcgVVJMKHJlcXVlc3Qub3JpZ2luYWxVcmwsIFwiaHR0cDovL2FwcC5sb2NhbFwiKSxcbiAgICAgIGh0dHBQYXRoOiBNQ1BfUEFUSCxcbiAgICAgIHJlcTogcmVxdWVzdCxcbiAgICAgIHJlczogcmVzcG9uc2UsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1jcFNlcnZlcih1c2VySWQ6IHN0cmluZyk6IE1DUFNlcnZlciB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLm1jcFNlcnZlcnMuZ2V0KHVzZXJJZCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICBleGlzdGluZy5sYXN0VXNlZCA9IERhdGUubm93KCk7XG4gICAgICByZXR1cm4gZXhpc3Rpbmcuc2VydmVyO1xuICAgIH1cbiAgICBjb25zdCBzY29wZSA9IHVzZXJTY29wZSh1c2VySWQpO1xuICAgIGNvbnN0IHRvb2xzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5tY3BUb29scykubWFwKChbbmFtZSwgdG9vbF0pID0+IFtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlVG9vbCh7XG4gICAgICAgICAgaWQ6IG5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRvb2wuZGVzY3JpcHRpb24gPz8gbmFtZSxcbiAgICAgICAgICAuLi4odG9vbC5pbnB1dFNjaGVtYSA/IHsgaW5wdXRTY2hlbWE6IHRvb2wuaW5wdXRTY2hlbWEgYXMgbmV2ZXIgfSA6IHt9KSxcbiAgICAgICAgICBleGVjdXRlOiAoYXJnczogdW5rbm93biwgY29udGV4dDogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0b29sLmV4ZWN1dGUpIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgdG9vbCBjYW5ub3QgZXhlY3V0ZTogJHtuYW1lfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRvb2wuZXhlY3V0ZShzY29wZWRBcmd1bWVudHMobmFtZSwgYXJncywgc2NvcGUpLCBjb250ZXh0IGFzIG5ldmVyKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IE1DUFNlcnZlcih7XG4gICAgICBuYW1lOiBcIkdyYXBoaXRpXCIsXG4gICAgICB2ZXJzaW9uOiBcIjEuMC4wXCIsXG4gICAgICB0b29scyxcbiAgICB9KTtcbiAgICB0aGlzLm1jcFNlcnZlcnMuc2V0KHVzZXJJZCwgeyBsYXN0VXNlZDogRGF0ZS5ub3coKSwgc2VydmVyIH0pO1xuICAgIHJldHVybiBzZXJ2ZXI7XG4gIH1cblxuICBwcml2YXRlIG9uU3VwZXJ2aXNvckV4aXQoZXJyb3I/OiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RvcHBpbmcgfHwgIXRoaXMuc2V0dXBDb21wbGV0ZSkgcmV0dXJuO1xuICAgIHRoaXMubG9nZ2VyLmVycm9yKFwic2lkZWNhciBzdXBlcnZpc29yIGV4aXRlZFwiLCB7IGVycm9yIH0pO1xuICAgIHByb2Nlc3Mua2lsbChwcm9jZXNzLnBpZCwgXCJTSUdURVJNXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9wU2lkZWNhcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RvcHBpbmcpIHJldHVybjtcbiAgICB0aGlzLnN0b3BwaW5nID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5tY3BTZXJ2ZXJTd2VlcCkgY2xlYXJJbnRlcnZhbCh0aGlzLm1jcFNlcnZlclN3ZWVwKTtcbiAgICB0aGlzLm1jcFNlcnZlclN3ZWVwID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5jb21tYW5kcztcbiAgICBjb25zdCBzdXBlcnZpc2lvbiA9IHRoaXMuc3VwZXJ2aXNpb247XG4gICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNvbW1hbmRzKSBjb21tYW5kLmtpbGwoXCJTSUdURVJNXCIpO1xuICAgIGNvbnN0IGNsZWFudXAgPSBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgLi4uWy4uLnRoaXMubWNwU2VydmVycy52YWx1ZXMoKV0ubWFwKCh7IHNlcnZlciB9KSA9PiBzZXJ2ZXIuY2xvc2UoKSksXG4gICAgICB0aGlzLm1jcD8uZGlzY29ubmVjdCgpLFxuICAgICAgc3VwZXJ2aXNpb24/LnJlc3VsdCxcbiAgICBdKTtcbiAgICBjb25zdCBjb21wbGV0ZWQgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgY2xlYW51cC50aGVuKCgpID0+IHRydWUpLFxuICAgICAgYXN5bmNNb2R1bGUuc2xlZXAoU0lERUNBUl9TSFVURE9XTl9HUkFDRV9NUykudGhlbigoKSA9PiBmYWxzZSksXG4gICAgXSk7XG4gICAgaWYgKCFjb21wbGV0ZWQpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXCJzaWRlY2FycyBpZ25vcmVkIFNJR1RFUk07IGVzY2FsYXRpbmcgdG8gU0lHS0lMTFwiKTtcbiAgICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBjb21tYW5kcykgY29tbWFuZC5raWxsKFwiU0lHS0lMTFwiKTtcbiAgICB9XG4gICAgdGhpcy5tY3BTZXJ2ZXJzLmNsZWFyKCk7XG4gICAgdGhpcy5tY3AgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tY3BUb29scyA9IHt9O1xuICAgIHRoaXMuY29tbWFuZHMgPSBbXTtcbiAgICB0aGlzLnN1cGVydmlzaW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc3RhcnR1cCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VJZGxlTWNwU2VydmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBjdXRvZmYgPSBEYXRlLm5vdygpIC0gTUNQX1NFUlZFUl9JRExFX01TO1xuICAgIGZvciAoY29uc3QgW3VzZXJJZCwgZW50cnldIG9mIHRoaXMubWNwU2VydmVycykge1xuICAgICAgaWYgKGVudHJ5Lmxhc3RVc2VkID49IGN1dG9mZikgY29udGludWU7XG4gICAgICB0aGlzLm1jcFNlcnZlcnMuZGVsZXRlKHVzZXJJZCk7XG4gICAgICB2b2lkIGVudHJ5LnNlcnZlci5jbG9zZSgpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiaWRsZSBNQ1Agc2VydmVyIGNsb3NlIGZhaWxlZFwiLCB7IGVycm9yIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgRXhlY1B5dGhvbiA9IChmaWxlOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4vKiogRW5zdXJlIERhdGFicmlja3MgQXBwcyBoYXMgdGhlIFB5dGhvbiBzaWRlY2FyIG1hdGNoaW5nIHRoaXMgTm9kZSBwYWNrYWdlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUdyYXBoaXRpUHl0aG9uKFxuICBweXRob246IHN0cmluZyxcbiAgcnVuOiBFeGVjUHl0aG9uID0gKGZpbGUsIGFyZ3MpID0+IHByb21pc2lmeShleGVjRmlsZSkoZmlsZSwgYXJncyksXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBydW4ocHl0aG9uLCBbXCItY1wiLCBcImltcG9ydCBkYnhfdG9vbHMuZ3JhcGhpdGlcIl0pO1xuICB9IGNhdGNoIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuKHB5dGhvbiwgW1wiLW1cIiwgXCJwaXBcIiwgXCItLXZlcnNpb25cIl0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgYXdhaXQgcnVuKHB5dGhvbiwgW1xuICAgICAgICBcIi1jXCIsXG4gICAgICAgIFwiaW1wb3J0IHVybGxpYi5yZXF1ZXN0OyBleGVjKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHBzOi8vYm9vdHN0cmFwLnB5cGEuaW8vZ2V0LXBpcC5weScpLnJlYWQoKSlcIixcbiAgICAgICAgXCItLXVzZXJcIixcbiAgICAgICAgXCItLWJyZWFrLXN5c3RlbS1wYWNrYWdlc1wiLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGF3YWl0IHJ1bihweXRob24sIFtcbiAgICAgIFwiLW1cIixcbiAgICAgIFwicGlwXCIsXG4gICAgICBcImluc3RhbGxcIixcbiAgICAgIFwiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrXCIsXG4gICAgICBcIi0tdXNlclwiLFxuICAgICAgXCItLWJyZWFrLXN5c3RlbS1wYWNrYWdlc1wiLFxuICAgICAgYGRieC10b29scy1ncmFwaGl0aT09JHtQQUNLQUdFX1ZFUlNJT059YCxcbiAgICBdKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ3JhcGhpdGkgPSB0b1BsdWdpbihHcmFwaGl0aVBsdWdpbik7XG5cbmZ1bmN0aW9uIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGV4dCA9IGRieEFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgbWVtb3J5IHJlcXVpcmVzIGFuIEFwcEtpdCBleGVjdXRpb24gY29udGV4dFwiKTtcbiAgcmV0dXJuIFwidXNlcklkXCIgaW4gY29udGV4dCA/IGNvbnRleHQudXNlcklkIDogY29udGV4dC5zZXJ2aWNlVXNlcklkO1xufVxuXG5mdW5jdGlvbiB1c2VyU2NvcGUodXNlcklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHVzZXJfJHtjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZSh1c2VySWQpLmRpZ2VzdChcImJhc2U2NHVybFwiKX1gO1xufVxuXG5mdW5jdGlvbiBzY29wZWRBcmd1bWVudHMobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzY29wZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIShuYW1lIGluIFNDT1BFRF9UT09MX0ZJRUxEUykpIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgdG9vbCBpcyBub3QgdXNlci1zY29wZWQ6ICR7bmFtZX1gKTtcbiAgY29uc3Qgc2NvcGVkID0gb2JqZWN0LmlzUmVjb3JkKGFyZ3MpID8geyAuLi5hcmdzIH0gOiB7fTtcbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBVTlNDT1BFRF9BUkdVTUVOVFMpIGRlbGV0ZSBzY29wZWRbYXJndW1lbnRdO1xuICBjb25zdCBmaWVsZCA9IFNDT1BFRF9UT09MX0ZJRUxEU1tuYW1lIGFzIGtleW9mIHR5cGVvZiBTQ09QRURfVE9PTF9GSUVMRFNdO1xuICBpZiAoZmllbGQgPT09IFwiZ3JvdXBfaWRcIikgc2NvcGVkLmdyb3VwX2lkID0gc2NvcGU7XG4gIGlmIChmaWVsZCA9PT0gXCJncm91cF9pZHNcIikgc2NvcGVkLmdyb3VwX2lkcyA9IFtzY29wZV07XG4gIHJldHVybiBzY29wZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JHcmFwaGl0aShwb3J0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCByZWFkeSBvZiBhc3luY01vZHVsZS5wb2xsKFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vaGVhbHRoYCwgeyBzaWduYWwgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5vaztcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpbnRlcnZhbE1zOiAyNTAsXG4gICAgICB0aW1lb3V0TXM6IFNJREVDQVJfU1RBUlRVUF9USU1FT1VUX01TLFxuICAgICAgcHJlZGljYXRlOiAocmVhZHkpID0+ICFyZWFkeSxcbiAgICB9LFxuICApKSB7XG4gICAgaWYgKHJlYWR5KSByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXZhaWxhYmxlUG9ydCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHNlcnZlci5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsIFwiMTI3LjAuMC4xXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgaWYgKCFhZGRyZXNzIHx8IHR5cGVvZiBhZGRyZXNzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKFwiQ291bGQgbm90IGFsbG9jYXRlIGEgR3JhcGhpdGkgbG9vcGJhY2sgcG9ydFwiKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlcnZlci5jbG9zZSgoZXJyb3IpID0+IChlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKGFkZHJlc3MucG9ydCkpKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc3RpbmN0UG9ydHMoXG4gIGFwcFBvcnQ6IG51bWJlcixcbiAgZ3JhcGhpdGlQb3J0OiBudW1iZXIsXG4gIGxpdGVsbG1Qb3J0OiBudW1iZXIsXG4gIHByb3h5UG9ydDogbnVtYmVyLFxuKTogUHJvbWlzZTxbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0+IHtcbiAgY29uc3QgcG9ydHMgPSBbYXBwUG9ydF07XG4gIGZvciAoY29uc3QgY29uZmlndXJlZFBvcnQgb2YgW2dyYXBoaXRpUG9ydCwgbGl0ZWxsbVBvcnQsIHByb3h5UG9ydF0pIHtcbiAgICBpZiAoY29uZmlndXJlZFBvcnQgJiYgcG9ydHMuaW5jbHVkZXMoY29uZmlndXJlZFBvcnQpKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFwiR3JhcGhpdGkgc2lkZWNhciBwb3J0cyBtdXN0IGRpZmZlciBmcm9tIERBVEFCUklDS1NfQVBQX1BPUlRcIik7XG4gICAgfVxuICAgIGxldCBwb3J0ID0gY29uZmlndXJlZFBvcnQgfHwgKGF3YWl0IGF2YWlsYWJsZVBvcnQoKSk7XG4gICAgd2hpbGUgKHBvcnRzLmluY2x1ZGVzKHBvcnQpKSBwb3J0ID0gYXdhaXQgYXZhaWxhYmxlUG9ydCgpO1xuICAgIHBvcnRzLnB1c2gocG9ydCk7XG4gIH1cbiAgcmV0dXJuIHBvcnRzLnNsaWNlKDEpIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbn1cblxuZnVuY3Rpb24gY29tbWFuZExpbmUoYXJndW1lbnRzXzogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJndW1lbnRzXy5tYXAoKHZhbHVlKSA9PiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcXCcnXCIpfSdgKS5qb2luKFwiIFwiKTtcbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@databricks/appkit": "^0.60.0",
|
|
29
|
-
"@dbx-tools/appkit": "0.6.
|
|
30
|
-
"@dbx-tools/core": "0.6.
|
|
31
|
-
"@dbx-tools/shared-core": "0.6.
|
|
29
|
+
"@dbx-tools/appkit": "0.6.127",
|
|
30
|
+
"@dbx-tools/core": "0.6.127",
|
|
31
|
+
"@dbx-tools/shared-core": "0.6.127",
|
|
32
32
|
"@mastra/core": "1.47.0",
|
|
33
33
|
"@mastra/mcp": "1.12.0",
|
|
34
34
|
"concurrently": "^10.0.3"
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"./package.json": "./package.json"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"version": "0.6.
|
|
50
|
+
"version": "0.6.127",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/plugin.ts
CHANGED
|
@@ -43,6 +43,7 @@ const MCP_PATH = "/api/graphiti/mcp";
|
|
|
43
43
|
const MCP_SERVER_IDLE_MS = 30 * 60 * 1000;
|
|
44
44
|
const MCP_SERVER_SWEEP_MS = 5 * 60 * 1000;
|
|
45
45
|
const SIDECAR_SHUTDOWN_GRACE_MS = 10_000;
|
|
46
|
+
const SIDECAR_STARTUP_TIMEOUT_MS = 10 * 60_000;
|
|
46
47
|
const SCOPED_TOOL_FIELDS = {
|
|
47
48
|
add_memory: "group_id",
|
|
48
49
|
add_triplet: "group_id",
|
|
@@ -173,7 +174,7 @@ export class GraphitiPlugin extends Plugin<GraphitiPluginConfig> {
|
|
|
173
174
|
{
|
|
174
175
|
killOthersOn: ["failure", "success"],
|
|
175
176
|
killSignal: "SIGTERM",
|
|
176
|
-
killTimeout:
|
|
177
|
+
killTimeout: SIDECAR_SHUTDOWN_GRACE_MS,
|
|
177
178
|
prefix: "name",
|
|
178
179
|
prefixColors: false,
|
|
179
180
|
},
|
|
@@ -451,7 +452,7 @@ async function waitForGraphiti(port: number): Promise<void> {
|
|
|
451
452
|
},
|
|
452
453
|
{
|
|
453
454
|
intervalMs: 250,
|
|
454
|
-
timeoutMs:
|
|
455
|
+
timeoutMs: SIDECAR_STARTUP_TIMEOUT_MS,
|
|
455
456
|
predicate: (ready) => !ready,
|
|
456
457
|
},
|
|
457
458
|
)) {
|