@dbx-tools/appkit-graphiti 0.6.125 → 0.6.126
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.d.ts +2 -0
- package/lib/src/plugin.js +12 -1
- package/package.json +4 -4
- package/src/plugin.ts +11 -0
package/lib/src/plugin.d.ts
CHANGED
|
@@ -25,9 +25,11 @@ export declare class GraphitiPlugin extends Plugin<GraphitiPluginConfig> {
|
|
|
25
25
|
private mcpTools;
|
|
26
26
|
private resolved?;
|
|
27
27
|
private setupComplete;
|
|
28
|
+
private startup?;
|
|
28
29
|
private supervision?;
|
|
29
30
|
private stopping;
|
|
30
31
|
setup(): Promise<void>;
|
|
32
|
+
private startSidecars;
|
|
31
33
|
injectRoutes(router: IAppRouter): void;
|
|
32
34
|
abortActiveOperations(): void;
|
|
33
35
|
shutdown(): Promise<void>;
|
package/lib/src/plugin.js
CHANGED
|
@@ -68,9 +68,19 @@ export class GraphitiPlugin extends Plugin {
|
|
|
68
68
|
mcpTools = {};
|
|
69
69
|
resolved;
|
|
70
70
|
setupComplete = false;
|
|
71
|
+
startup;
|
|
71
72
|
supervision;
|
|
72
73
|
stopping = false;
|
|
73
74
|
async setup() {
|
|
75
|
+
this.startup = this.startSidecars().catch((error) => {
|
|
76
|
+
if (this.stopping)
|
|
77
|
+
return;
|
|
78
|
+
this.logger.error("background startup failed; Graphiti remains unavailable", { error });
|
|
79
|
+
});
|
|
80
|
+
void this.startup;
|
|
81
|
+
this.logger.info("background startup scheduled");
|
|
82
|
+
}
|
|
83
|
+
async startSidecars() {
|
|
74
84
|
const configured = resolveGraphitiConfig(this.config);
|
|
75
85
|
const [graphitiPort, litellmPort, proxyPort] = await distinctPorts(coreConfig.port(undefined, "DATABRICKS_APP_PORT", 8000, coreConfig.ENV_ONLY), configured.graphitiPort, configured.litellmPort, configured.proxyPort);
|
|
76
86
|
await ensureGraphitiPython(configured.python);
|
|
@@ -287,6 +297,7 @@ export class GraphitiPlugin extends Plugin {
|
|
|
287
297
|
this.mcpTools = {};
|
|
288
298
|
this.commands = [];
|
|
289
299
|
this.supervision = undefined;
|
|
300
|
+
this.startup = undefined;
|
|
290
301
|
}
|
|
291
302
|
closeIdleMcpServers() {
|
|
292
303
|
const cutoff = Date.now() - MCP_SERVER_IDLE_MS;
|
|
@@ -400,4 +411,4 @@ async function distinctPorts(appPort, graphitiPort, litellmPort, proxyPort) {
|
|
|
400
411
|
function commandLine(arguments_) {
|
|
401
412
|
return arguments_.map((value) => `'${value.replaceAll("'", "'\\''")}'`).join(" ");
|
|
402
413
|
}
|
|
403
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsR0FJVCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLElBQUksY0FBYyxFQUMxQixNQUFNLElBQUksWUFBWSxHQUN2QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxNQUFNLElBQUksVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssSUFBSSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLFlBQXVELE1BQU0sY0FBYyxDQUFDO0FBRW5GLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIscUJBQXFCLEdBR3RCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3RFLE1BQU0sZUFBZSxHQUNuQixhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyx5Q0FBeUMsQ0FDekUsQ0FBQyxPQUFPLENBQUM7QUFDVixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztBQUNyQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUM7QUFDekMsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixVQUFVLEVBQUUsVUFBVTtJQUN0QixXQUFXLEVBQUUsVUFBVTtJQUN2QixpQkFBaUIsRUFBRSxXQUFXO0lBQzlCLFlBQVksRUFBRSxXQUFXO0lBQ3pCLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLG1CQUFtQixFQUFFLFdBQVc7SUFDaEMsWUFBWSxFQUFFLFdBQVc7SUFDekIsY0FBYyxFQUFFLFVBQVU7Q0FDbEIsQ0FBQztBQUNYLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDbEcsTUFBTSxrQkFBa0IsR0FBRztJQUN6QixrQkFBa0I7SUFDbEIsd0JBQXdCO0lBQ3hCLDRCQUE0QjtJQUM1QixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLE1BQU07Q0FDRSxDQUFDO0FBc0JYLE1BQU0sT0FBTyxjQUFlLFNBQVEsTUFBNEI7SUFDOUQsTUFBTSxDQUFDLFFBQVEsR0FBK0I7UUFDNUMsSUFBSSxFQUFFLFVBQVU7UUFDaEIsV0FBVyxFQUFFLFVBQVU7UUFDdkIsV0FBVyxFQUNULDRFQUE0RTtZQUM1RSx3REFBd0Q7UUFDMUQsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7U0FDcEQ7UUFDRCxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUU7S0FDM0MsQ0FBQztJQUVGLE1BQU0sQ0FBQyx1QkFBdUI7UUFDNUIsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3RCxHQUFHLFFBQVE7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVnQixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxRQUFRLEdBQWMsRUFBRSxDQUFDO0lBQ3pCLEdBQUcsQ0FBYTtJQUNoQixVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7SUFDOUMsY0FBYyxDQUFrQjtJQUNoQyxRQUFRLEdBQXlCLEVBQUUsQ0FBQztJQUNwQyxRQUFRLENBQWdDO0lBQ3hDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsV0FBVyxDQUFzQjtJQUNqQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWhCLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsR0FBRyxNQUFNLGFBQWEsQ0FDaEUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDNUUsVUFBVSxDQUFDLFlBQVksRUFDdkIsVUFBVSxDQUFDLFdBQVcsRUFDdEIsVUFBVSxDQUFDLFNBQVMsQ0FDckIsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxHQUFHLFVBQVU7WUFDYixZQUFZO1lBQ1osV0FBVztZQUNYLFNBQVM7U0FDVixDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQzdCO1lBQ0U7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ2pGLEdBQUcsRUFBRTtvQkFDSCxHQUFHLE9BQU8sQ0FBQyxHQUFHO29CQUNkLGFBQWEsRUFBRSxXQUFXO29CQUMxQixhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO29CQUNqRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtvQkFDakQsWUFBWSxFQUFFLFdBQVc7b0JBQ3pCLFlBQVksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7b0JBQy9DLGNBQWMsRUFBRSxNQUFNO2lCQUN2QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLFdBQVcsQ0FBQztvQkFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO29CQUNwQixJQUFJO29CQUNKLDBCQUEwQjtvQkFDMUIsY0FBYztvQkFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7b0JBQy9CLGlCQUFpQjtvQkFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO2lCQUNuQyxDQUFDO2dCQUNGLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzthQUNqQjtTQUNGLEVBQ0Q7WUFDRSxZQUFZLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1lBQ3BDLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLFdBQVcsRUFBRSxNQUFNO1lBQ25CLE1BQU0sRUFBRSxNQUFNO1lBQ2QsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDL0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQzdCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQ3hDLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDckQsR0FBRyxFQUFFO1lBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDakIsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDVixNQUFNLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxFQUFFO2dCQUNKLGtCQUFrQjthQUNuQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDO2dCQUN2QixFQUFFLEVBQUUsbUJBQW1CLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUNuRCxPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFO3dCQUNSLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLE1BQU0sQ0FBQztxQkFDaEU7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztpQkFDdkIsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBWSxDQUFVLENBQUM7aUJBQzlFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQyxDQUNsRCxDQUFDO1lBQ0YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdkYsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3hCLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7WUFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztZQUN0QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1lBQ2xDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLFlBQVksQ0FBQyxNQUFrQjtRQUN0QyxLQUFLLE1BQU0sTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQVUsRUFBRSxDQUFDO1lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNqQixJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUs7Z0JBQ3BCLE1BQU07Z0JBQ04sSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDO2FBQ25FLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRVEscUJBQXFCO1FBQzVCLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzlCLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRVEsT0FBTztRQUNkLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxJQUFJO1lBQ0o7Z0JBQ0UsWUFBWSxFQUFFLElBQWE7Z0JBQzNCLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixTQUFTLEVBQUUsSUFBSTtnQkFDZixHQUFHLEVBQUU7b0JBQ0gsSUFBSTtvQkFDSixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO2lCQUNuRTtnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFFLE9BQWlCLENBQUMsQ0FBQyxDQUFFLE1BQWdCO29CQUN0RSxtQkFBbUIsRUFBRSxJQUFhO2lCQUNuQzthQUNGO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUNwQixJQUFZLEVBQ1osSUFBYSxFQUNiLE1BQW9CLEVBQ3BCLE9BQWlDO1FBRWpDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLE1BQU0sR0FBRyxPQUFPLEVBQUUsVUFBVSxJQUFJLHNCQUFzQixFQUFFLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1lBQ2xFLFdBQVcsRUFBRSxNQUFNO1NBQ1gsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBd0IsRUFBRSxRQUEwQjtRQUMzRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25CLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLENBQUMsQ0FBQztZQUM5RCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUNqRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUNyQixHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQztZQUNyRCxRQUFRLEVBQUUsUUFBUTtZQUNsQixHQUFHLEVBQUUsT0FBTztZQUNaLEdBQUcsRUFBRSxRQUFRO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDekIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEQsSUFBSTtZQUNKLFVBQVUsQ0FBQztnQkFDVCxFQUFFLEVBQUUsSUFBSTtnQkFDUixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJO2dCQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxPQUFPLEVBQUUsQ0FBQyxJQUFhLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO29CQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87d0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDNUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQWdCLENBQUMsQ0FBQztnQkFDNUUsQ0FBQzthQUNGLENBQUM7U0FDSCxDQUFDLENBQ0gsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDO1lBQzNCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLEtBQUs7U0FDTixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDOUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWU7UUFDdEMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVE7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDakMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwRSxJQUFJLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRTtZQUN0QixXQUFXLEVBQUUsTUFBTTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsV0FBVyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDL0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNwRSxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVE7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUMvQyxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlDLElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxNQUFNO2dCQUFFLFNBQVM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQzs7QUFLSCxnRkFBZ0Y7QUFDaEYsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsTUFBYyxFQUNkLE1BQWtCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7SUFFakUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxDQUFDO1lBQ0gsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLElBQUk7Z0JBQ0osb0dBQW9HO2dCQUNwRyxRQUFRO2dCQUNSLHlCQUF5QjthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUk7WUFDSixLQUFLO1lBQ0wsU0FBUztZQUNULDZCQUE2QjtZQUM3QixRQUFRO1lBQ1IseUJBQXlCO1lBQ3pCLHVCQUF1QixlQUFlLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRWpELFNBQVMsc0JBQXNCO0lBQzdCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ25ELElBQUksQ0FBQyxPQUFPO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0RSxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsTUFBYztJQUMvQixPQUFPLFFBQVEsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsSUFBWSxFQUFFLElBQWEsRUFBRSxLQUFhO0lBQ2pFLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxrQkFBa0IsQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEQsS0FBSyxNQUFNLFFBQVEsSUFBSSxrQkFBa0I7UUFBRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxNQUFNLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUF1QyxDQUFDLENBQUM7SUFDMUUsSUFBSSxLQUFLLEtBQUssVUFBVTtRQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2xELElBQUksS0FBSyxLQUFLLFdBQVc7UUFBRSxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsSUFBWTtJQUN6QyxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsSUFBSSxDQUN4QyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ25CLElBQUksQ0FBQztZQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixJQUFJLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDNUUsT0FBTyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDLEVBQ0Q7UUFDRSxVQUFVLEVBQUUsR0FBRztRQUNmLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLO0tBQzdCLENBQ0YsRUFBRSxDQUFDO1FBQ0YsSUFBSSxLQUFLO1lBQUUsT0FBTztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhO0lBQzFCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxNQUFNLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUNqQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsYUFBYSxDQUMxQixPQUFlLEVBQ2YsWUFBb0IsRUFDcEIsV0FBbUIsRUFDbkIsU0FBaUI7SUFFakIsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixLQUFLLE1BQU0sY0FBYyxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ3BFLElBQUksY0FBYyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksa0JBQWtCLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUM5RixDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsY0FBYyxJQUFJLENBQUMsTUFBTSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxJQUFJLEdBQUcsTUFBTSxhQUFhLEVBQUUsQ0FBQztRQUMxRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUE2QixDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxVQUFvQjtJQUN2QyxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgc3VwZXJ2aXNlcyBHcmFwaGl0aSBhbmQgcmVwdWJsaXNoZXMgdXNlci1zY29wZWQgTUNQIHRvb2xzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgZXhlY0ZpbGUgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXIgfSBmcm9tIFwibm9kZTpuZXRcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIjtcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25FcnJvcixcbiAgUGx1Z2luLFxuICBsYWtlYmFzZSxcbiAgdG9QbHVnaW4sXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbiAgdHlwZSBSZXNvdXJjZVJlcXVpcmVtZW50LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQge1xuICBhcHBraXQgYXMgZGJ4QXBwa2l0LFxuICBpZGVudGl0eSBhcyBhcHBraXRJZGVudGl0eSxcbiAgcGx1Z2luIGFzIGFwcGtpdFBsdWdpbixcbn0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBjb25maWcgYXMgY29yZUNvbmZpZyB9IGZyb20gXCJAZGJ4LXRvb2xzL2NvcmVcIjtcbmltcG9ydCB7IGFzeW5jIGFzIGFzeW5jTW9kdWxlLCBsb2csIG9iamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sLCB0eXBlIFRvb2wgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL3Rvb2xzXCI7XG5pbXBvcnQgeyBNQ1BDbGllbnQsIE1DUFNlcnZlciB9IGZyb20gXCJAbWFzdHJhL21jcFwiO1xuaW1wb3J0IGNvbmN1cnJlbnRseSwgeyB0eXBlIENvbW1hbmQsIHR5cGUgQ29uY3VycmVudGx5UmVzdWx0IH0gZnJvbSBcImNvbmN1cnJlbnRseVwiO1xuaW1wb3J0IHR5cGUgZXhwcmVzcyBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHtcbiAgR1JBUEhJVElfQ09ORklHX1NDSEVNQSxcbiAgcmVzb2x2ZUdyYXBoaXRpQ29uZmlnLFxuICB0eXBlIEdyYXBoaXRpUGx1Z2luQ29uZmlnLFxuICB0eXBlIFJlc29sdmVkR3JhcGhpdGlQbHVnaW5Db25maWcsXG59IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuXG5jb25zdCBMQUtFQkFTRV9NQU5JRkVTVCA9IGFwcGtpdFBsdWdpbi5kYXRhKGxha2ViYXNlKS5wbHVnaW4ubWFuaWZlc3Q7XG5jb25zdCBQQUNLQUdFX1ZFUlNJT04gPSAoXG4gIGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKShcIkBkYngtdG9vbHMvYXBwa2l0LWdyYXBoaXRpL3BhY2thZ2UuanNvblwiKSBhcyB7IHZlcnNpb246IHN0cmluZyB9XG4pLnZlcnNpb247XG5jb25zdCBNQ1BfUEFUSCA9IFwiL2FwaS9ncmFwaGl0aS9tY3BcIjtcbmNvbnN0IE1DUF9TRVJWRVJfSURMRV9NUyA9IDMwICogNjAgKiAxMDAwO1xuY29uc3QgTUNQX1NFUlZFUl9TV0VFUF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5jb25zdCBTSURFQ0FSX1NIVVRET1dOX0dSQUNFX01TID0gMTBfMDAwO1xuY29uc3QgU0NPUEVEX1RPT0xfRklFTERTID0ge1xuICBhZGRfbWVtb3J5OiBcImdyb3VwX2lkXCIsXG4gIGFkZF90cmlwbGV0OiBcImdyb3VwX2lkXCIsXG4gIGJ1aWxkX2NvbW11bml0aWVzOiBcImdyb3VwX2lkc1wiLFxuICBnZXRfZXBpc29kZXM6IFwiZ3JvdXBfaWRzXCIsXG4gIGdldF9zdGF0dXM6IHVuZGVmaW5lZCxcbiAgc2VhcmNoX21lbW9yeV9mYWN0czogXCJncm91cF9pZHNcIixcbiAgc2VhcmNoX25vZGVzOiBcImdyb3VwX2lkc1wiLFxuICBzdW1tYXJpemVfc2FnYTogXCJncm91cF9pZFwiLFxufSBhcyBjb25zdDtcbmNvbnN0IFdSSVRFX1RPT0xTID0gbmV3IFNldChbXCJhZGRfbWVtb3J5XCIsIFwiYWRkX3RyaXBsZXRcIiwgXCJidWlsZF9jb21tdW5pdGllc1wiLCBcInN1bW1hcml6ZV9zYWdhXCJdKTtcbmNvbnN0IFVOU0NPUEVEX0FSR1VNRU5UUyA9IFtcbiAgXCJjZW50ZXJfbm9kZV91dWlkXCIsXG4gIFwicHJldmlvdXNfZXBpc29kZV91dWlkc1wiLFxuICBcInNhZ2FfcHJldmlvdXNfZXBpc29kZV91dWlkXCIsXG4gIFwic291cmNlX25vZGVfdXVpZFwiLFxuICBcInRhcmdldF9ub2RlX3V1aWRcIixcbiAgXCJ1dWlkXCIsXG5dIGFzIGNvbnN0O1xuXG5pbnRlcmZhY2UgVG9vbGtpdEVudHJ5IHtcbiAgcmVhZG9ubHkgX190b29sa2l0UmVmOiB0cnVlO1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIGxvY2FsTmFtZTogc3RyaW5nO1xuICBkZWY6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiB1bmtub3duO1xuICB9O1xuICBhbm5vdGF0aW9uczoge1xuICAgIGVmZmVjdDogXCJyZWFkXCIgfCBcIndyaXRlXCI7XG4gICAgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFVzZXJNY3BTZXJ2ZXIge1xuICBsYXN0VXNlZDogbnVtYmVyO1xuICBzZXJ2ZXI6IE1DUFNlcnZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIEdyYXBoaXRpUGx1Z2luIGV4dGVuZHMgUGx1Z2luPEdyYXBoaXRpUGx1Z2luQ29uZmlnPiB7XG4gIHN0YXRpYyBtYW5pZmVzdDogUGx1Z2luTWFuaWZlc3Q8XCJncmFwaGl0aVwiPiA9IHtcbiAgICBuYW1lOiBcImdyYXBoaXRpXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiR3JhcGhpdGlcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiUnVucyB0aGUgZGJ4LXRvb2xzIEdyYXBoaXRpIE1DUCBzaWRlY2FyIHdpdGggTGFrZWJhc2UtYmFja2VkIHJlY292ZXJ5IGFuZCBcIiArXG4gICAgICBcInB1Ymxpc2hlcyBpdCB0aHJvdWdoIHRoZSBBcHAncyBzaW5nbGUgcG9ydCB3aXRoIENhZGR5LlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogWy4uLkxBS0VCQVNFX01BTklGRVNULnJlc291cmNlcy5yZXF1aXJlZF0sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBHUkFQSElUSV9DT05GSUdfU0NIRU1BIH0sXG4gIH07XG5cbiAgc3RhdGljIGdldFJlc291cmNlUmVxdWlyZW1lbnRzKCk6IFJlc291cmNlUmVxdWlyZW1lbnRbXSB7XG4gICAgcmV0dXJuIExBS0VCQVNFX01BTklGRVNULnJlc291cmNlcy5yZXF1aXJlZC5tYXAoKHJlc291cmNlKSA9PiAoe1xuICAgICAgLi4ucmVzb3VyY2UsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGxvZy5sb2dnZXIodGhpcyk7XG4gIHByaXZhdGUgY29tbWFuZHM6IENvbW1hbmRbXSA9IFtdO1xuICBwcml2YXRlIG1jcD86IE1DUENsaWVudDtcbiAgcHJpdmF0ZSBtY3BTZXJ2ZXJzID0gbmV3IE1hcDxzdHJpbmcsIFVzZXJNY3BTZXJ2ZXI+KCk7XG4gIHByaXZhdGUgbWNwU2VydmVyU3dlZXA/OiBOb2RlSlMuVGltZW91dDtcbiAgcHJpdmF0ZSBtY3BUb29sczogUmVjb3JkPHN0cmluZywgVG9vbD4gPSB7fTtcbiAgcHJpdmF0ZSByZXNvbHZlZD86IFJlc29sdmVkR3JhcGhpdGlQbHVnaW5Db25maWc7XG4gIHByaXZhdGUgc2V0dXBDb21wbGV0ZSA9IGZhbHNlO1xuICBwcml2YXRlIHN1cGVydmlzaW9uPzogQ29uY3VycmVudGx5UmVzdWx0O1xuICBwcml2YXRlIHN0b3BwaW5nID0gZmFsc2U7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlndXJlZCA9IHJlc29sdmVHcmFwaGl0aUNvbmZpZyh0aGlzLmNvbmZpZyk7XG4gICAgY29uc3QgW2dyYXBoaXRpUG9ydCwgbGl0ZWxsbVBvcnQsIHByb3h5UG9ydF0gPSBhd2FpdCBkaXN0aW5jdFBvcnRzKFxuICAgICAgY29yZUNvbmZpZy5wb3J0KHVuZGVmaW5lZCwgXCJEQVRBQlJJQ0tTX0FQUF9QT1JUXCIsIDgwMDAsIGNvcmVDb25maWcuRU5WX09OTFkpLFxuICAgICAgY29uZmlndXJlZC5ncmFwaGl0aVBvcnQsXG4gICAgICBjb25maWd1cmVkLmxpdGVsbG1Qb3J0LFxuICAgICAgY29uZmlndXJlZC5wcm94eVBvcnQsXG4gICAgKTtcbiAgICBhd2FpdCBlbnN1cmVHcmFwaGl0aVB5dGhvbihjb25maWd1cmVkLnB5dGhvbik7XG4gICAgdGhpcy5yZXNvbHZlZCA9IHtcbiAgICAgIC4uLmNvbmZpZ3VyZWQsXG4gICAgICBncmFwaGl0aVBvcnQsXG4gICAgICBsaXRlbGxtUG9ydCxcbiAgICAgIHByb3h5UG9ydCxcbiAgICB9O1xuICAgIHRoaXMuc3VwZXJ2aXNpb24gPSBjb25jdXJyZW50bHkoXG4gICAgICBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImdyYXBoaXRpXCIsXG4gICAgICAgICAgY29tbWFuZDogY29tbWFuZExpbmUoW3RoaXMucmVzb2x2ZWQucHl0aG9uLCBcIi1tXCIsIFwiZGJ4X3Rvb2xzLmdyYXBoaXRpXCIsIFwic3RhcnRcIl0pLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgICBHUkFQSElUSV9IT1NUOiBcIjEyNy4wLjAuMVwiLFxuICAgICAgICAgICAgR1JBUEhJVElfUE9SVDogU3RyaW5nKHRoaXMucmVzb2x2ZWQuZ3JhcGhpdGlQb3J0KSxcbiAgICAgICAgICAgIEpPVVJOQUxfTkFNRVNQQUNFOiB0aGlzLnJlc29sdmVkLmpvdXJuYWxOYW1lc3BhY2UsXG4gICAgICAgICAgICBMSVRFTExNX0hPU1Q6IFwiMTI3LjAuMC4xXCIsXG4gICAgICAgICAgICBMSVRFTExNX1BPUlQ6IFN0cmluZyh0aGlzLnJlc29sdmVkLmxpdGVsbG1Qb3J0KSxcbiAgICAgICAgICAgIE1BTkFHRV9MSVRFTExNOiBcInRydWVcIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjYWRkeVwiLFxuICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmRMaW5lKFtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZWQucHl0aG9uLFxuICAgICAgICAgICAgXCItbVwiLFxuICAgICAgICAgICAgXCJkYnhfdG9vbHMuZ3JhcGhpdGkucHJveHlcIixcbiAgICAgICAgICAgIFwiLS1wcm94eS1wb3J0XCIsXG4gICAgICAgICAgICBTdHJpbmcodGhpcy5yZXNvbHZlZC5wcm94eVBvcnQpLFxuICAgICAgICAgICAgXCItLWdyYXBoaXRpLXBvcnRcIixcbiAgICAgICAgICAgIFN0cmluZyh0aGlzLnJlc29sdmVkLmdyYXBoaXRpUG9ydCksXG4gICAgICAgICAgXSksXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB7XG4gICAgICAgIGtpbGxPdGhlcnNPbjogW1wiZmFpbHVyZVwiLCBcInN1Y2Nlc3NcIl0sXG4gICAgICAgIGtpbGxTaWduYWw6IFwiU0lHVEVSTVwiLFxuICAgICAgICBraWxsVGltZW91dDogMTJfMDAwLFxuICAgICAgICBwcmVmaXg6IFwibmFtZVwiLFxuICAgICAgICBwcmVmaXhDb2xvcnM6IGZhbHNlLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuY29tbWFuZHMgPSB0aGlzLnN1cGVydmlzaW9uLmNvbW1hbmRzO1xuICAgIHZvaWQgdGhpcy5zdXBlcnZpc2lvbi5yZXN1bHQudGhlbihcbiAgICAgICgpID0+IHRoaXMub25TdXBlcnZpc29yRXhpdCgpLFxuICAgICAgKGVycm9yKSA9PiB0aGlzLm9uU3VwZXJ2aXNvckV4aXQoZXJyb3IpLFxuICAgICk7XG4gICAgY29uc3Qgc3VwZXJ2aXNpb25GYWlsdXJlID0gdGhpcy5zdXBlcnZpc2lvbi5yZXN1bHQudGhlbihcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgc2lkZWNhciBzdXBlcnZpc29yIGV4aXRlZCBkdXJpbmcgc3RhcnR1cFwiKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9LFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvckdyYXBoaXRpKGdyYXBoaXRpUG9ydCk7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvckdyYXBoaXRpKHByb3h5UG9ydCk7XG4gICAgICAgIH0pKCksXG4gICAgICAgIHN1cGVydmlzaW9uRmFpbHVyZSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5tY3AgPSBuZXcgTUNQQ2xpZW50KHtcbiAgICAgICAgaWQ6IGBhcHBraXQtZ3JhcGhpdGktJHt0aGlzLnJlc29sdmVkLmdyYXBoaXRpUG9ydH1gLFxuICAgICAgICBzZXJ2ZXJzOiB7XG4gICAgICAgICAgZ3JhcGhpdGk6IHtcbiAgICAgICAgICAgIHVybDogbmV3IFVSTChgaHR0cDovLzEyNy4wLjAuMToke3RoaXMucmVzb2x2ZWQucHJveHlQb3J0fS9tY3BgKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBkaXNjb3ZlcmVkID0gYXdhaXQgdGhpcy5tY3AubGlzdFRvb2xzKCk7XG4gICAgICB0aGlzLm1jcFRvb2xzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhkaXNjb3ZlcmVkKVxuICAgICAgICAgIC5tYXAoKFtuYW1lLCB0b29sXSkgPT4gW25hbWUucmVwbGFjZSgvXmdyYXBoaXRpXy8sIFwiXCIpLCB0b29sIGFzIFRvb2xdIGFzIGNvbnN0KVxuICAgICAgICAgIC5maWx0ZXIoKFtuYW1lXSkgPT4gbmFtZSBpbiBTQ09QRURfVE9PTF9GSUVMRFMpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1pc3NpbmcgPSBPYmplY3Qua2V5cyhTQ09QRURfVE9PTF9GSUVMRFMpLmZpbHRlcigobmFtZSkgPT4gIXRoaXMubWNwVG9vbHNbbmFtZV0pO1xuICAgICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoaXRpIGRpZCBub3QgcHVibGlzaCByZXF1aXJlZCBzY29wZWQgdG9vbHM6ICR7bWlzc2luZy5qb2luKFwiLCBcIil9YCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHRoaXMuc3RvcFNpZGVjYXJzKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhpcy5zZXR1cENvbXBsZXRlID0gdHJ1ZTtcbiAgICB0aGlzLm1jcFNlcnZlclN3ZWVwID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5jbG9zZUlkbGVNY3BTZXJ2ZXJzKCksIE1DUF9TRVJWRVJfU1dFRVBfTVMpO1xuICAgIHRoaXMubWNwU2VydmVyU3dlZXAudW5yZWYoKTtcbiAgICB0aGlzLmxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgZ3JhcGhpdGlQb3J0OiB0aGlzLnJlc29sdmVkLmdyYXBoaXRpUG9ydCxcbiAgICAgIGxpdGVsbG1Qb3J0OiB0aGlzLnJlc29sdmVkLmxpdGVsbG1Qb3J0LFxuICAgICAgcHJveHlQb3J0OiB0aGlzLnJlc29sdmVkLnByb3h5UG9ydCxcbiAgICAgIG1jcFBhdGg6IE1DUF9QQVRILFxuICAgICAgdG9vbHM6IE9iamVjdC5rZXlzKHRoaXMubWNwVG9vbHMpLFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5qZWN0Um91dGVzKHJvdXRlcjogSUFwcFJvdXRlcik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIFtcImdldFwiLCBcInBvc3RcIiwgXCJkZWxldGVcIl0gYXMgY29uc3QpIHtcbiAgICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICAgIG5hbWU6IGAke21ldGhvZH1NY3BgLFxuICAgICAgICBtZXRob2QsXG4gICAgICAgIHBhdGg6IFwiL21jcFwiLFxuICAgICAgICBoYW5kbGVyOiAocmVxdWVzdCwgcmVzcG9uc2UpID0+IHRoaXMuZm9yd2FyZE1jcChyZXF1ZXN0LCByZXNwb25zZSksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgc3VwZXIuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLm1jcD8uZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zdG9wU2lkZWNhcnMoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHsgbWNwUGF0aDogTUNQX1BBVEggfTtcbiAgfVxuXG4gIHRvb2xraXQoKTogUmVjb3JkPHN0cmluZywgVG9vbGtpdEVudHJ5PiB7XG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMubWNwVG9vbHMpLm1hcCgoW25hbWUsIHRvb2xdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBfX3Rvb2xraXRSZWY6IHRydWUgYXMgY29uc3QsXG4gICAgICAgICAgcGx1Z2luTmFtZTogXCJncmFwaGl0aVwiLFxuICAgICAgICAgIGxvY2FsTmFtZTogbmFtZSxcbiAgICAgICAgICBkZWY6IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogdG9vbC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRvb2wuaW5wdXRTY2hlbWEgPz8geyB0eXBlOiBcIm9iamVjdFwiLCBwcm9wZXJ0aWVzOiB7fSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYW5ub3RhdGlvbnM6IHtcbiAgICAgICAgICAgIGVmZmVjdDogV1JJVEVfVE9PTFMuaGFzKG5hbWUpID8gKFwid3JpdGVcIiBhcyBjb25zdCkgOiAoXCJyZWFkXCIgYXMgY29uc3QpLFxuICAgICAgICAgICAgcmVxdWlyZXNVc2VyQ29udGV4dDogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudFRvb2woXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGFyZ3M6IHVua25vd24sXG4gICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgY29udGV4dD86IHsgcmVzb3VyY2VJZD86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPHVua25vd24+IHtcbiAgICBjb25zdCB0b29sID0gdGhpcy5tY3BUb29sc1tuYW1lXTtcbiAgICBpZiAoIXRvb2w/LmV4ZWN1dGUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBHcmFwaGl0aSB0b29sOiAke25hbWV9YCk7XG4gICAgY29uc3QgdXNlcklkID0gY29udGV4dD8ucmVzb3VyY2VJZCA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKCk7XG4gICAgcmV0dXJuIHRvb2wuZXhlY3V0ZShzY29wZWRBcmd1bWVudHMobmFtZSwgYXJncywgdXNlclNjb3BlKHVzZXJJZCkpLCB7XG4gICAgICBhYm9ydFNpZ25hbDogc2lnbmFsLFxuICAgIH0gYXMgbmV2ZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmb3J3YXJkTWNwKHJlcXVlc3Q6IGV4cHJlc3MuUmVxdWVzdCwgcmVzcG9uc2U6IGV4cHJlc3MuUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMucmVzb2x2ZWQpIHtcbiAgICAgIHJlc3BvbnNlLnN0YXR1cyg1MDMpLmpzb24oeyBlcnJvcjogXCJHcmFwaGl0aSBpcyBub3QgcmVhZHlcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXNlcklkID0gYXBwa2l0SWRlbnRpdHkucmVxdWVzdFVzZXJJZChyZXF1ZXN0KSA/PyBleGVjdXRpb25Db250ZXh0VXNlcklkKCk7XG4gICAgY29uc3Qgc2VydmVyID0gdGhpcy5tY3BTZXJ2ZXIodXNlcklkKTtcbiAgICBhd2FpdCBzZXJ2ZXIuc3RhcnRIVFRQKHtcbiAgICAgIHVybDogbmV3IFVSTChyZXF1ZXN0Lm9yaWdpbmFsVXJsLCBcImh0dHA6Ly9hcHAubG9jYWxcIiksXG4gICAgICBodHRwUGF0aDogTUNQX1BBVEgsXG4gICAgICByZXE6IHJlcXVlc3QsXG4gICAgICByZXM6IHJlc3BvbnNlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtY3BTZXJ2ZXIodXNlcklkOiBzdHJpbmcpOiBNQ1BTZXJ2ZXIge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5tY3BTZXJ2ZXJzLmdldCh1c2VySWQpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZXhpc3RpbmcubGFzdFVzZWQgPSBEYXRlLm5vdygpO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nLnNlcnZlcjtcbiAgICB9XG4gICAgY29uc3Qgc2NvcGUgPSB1c2VyU2NvcGUodXNlcklkKTtcbiAgICBjb25zdCB0b29scyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMubWNwVG9vbHMpLm1hcCgoW25hbWUsIHRvb2xdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNyZWF0ZVRvb2woe1xuICAgICAgICAgIGlkOiBuYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0b29sLmRlc2NyaXB0aW9uID8/IG5hbWUsXG4gICAgICAgICAgLi4uKHRvb2wuaW5wdXRTY2hlbWEgPyB7IGlucHV0U2NoZW1hOiB0b29sLmlucHV0U2NoZW1hIGFzIG5ldmVyIH0gOiB7fSksXG4gICAgICAgICAgZXhlY3V0ZTogKGFyZ3M6IHVua25vd24sIGNvbnRleHQ6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgIGlmICghdG9vbC5leGVjdXRlKSB0aHJvdyBuZXcgRXJyb3IoYEdyYXBoaXRpIHRvb2wgY2Fubm90IGV4ZWN1dGU6ICR7bmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiB0b29sLmV4ZWN1dGUoc2NvcGVkQXJndW1lbnRzKG5hbWUsIGFyZ3MsIHNjb3BlKSwgY29udGV4dCBhcyBuZXZlcik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IHNlcnZlciA9IG5ldyBNQ1BTZXJ2ZXIoe1xuICAgICAgbmFtZTogXCJHcmFwaGl0aVwiLFxuICAgICAgdmVyc2lvbjogXCIxLjAuMFwiLFxuICAgICAgdG9vbHMsXG4gICAgfSk7XG4gICAgdGhpcy5tY3BTZXJ2ZXJzLnNldCh1c2VySWQsIHsgbGFzdFVzZWQ6IERhdGUubm93KCksIHNlcnZlciB9KTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBvblN1cGVydmlzb3JFeGl0KGVycm9yPzogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0b3BwaW5nIHx8ICF0aGlzLnNldHVwQ29tcGxldGUpIHJldHVybjtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihcInNpZGVjYXIgc3VwZXJ2aXNvciBleGl0ZWRcIiwgeyBlcnJvciB9KTtcbiAgICBwcm9jZXNzLmtpbGwocHJvY2Vzcy5waWQsIFwiU0lHVEVSTVwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RvcFNpZGVjYXJzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0b3BwaW5nKSByZXR1cm47XG4gICAgdGhpcy5zdG9wcGluZyA9IHRydWU7XG4gICAgaWYgKHRoaXMubWNwU2VydmVyU3dlZXApIGNsZWFySW50ZXJ2YWwodGhpcy5tY3BTZXJ2ZXJTd2VlcCk7XG4gICAgdGhpcy5tY3BTZXJ2ZXJTd2VlcCA9IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb21tYW5kcyA9IHRoaXMuY29tbWFuZHM7XG4gICAgY29uc3Qgc3VwZXJ2aXNpb24gPSB0aGlzLnN1cGVydmlzaW9uO1xuICAgIGZvciAoY29uc3QgY29tbWFuZCBvZiBjb21tYW5kcykgY29tbWFuZC5raWxsKFwiU0lHVEVSTVwiKTtcbiAgICBjb25zdCBjbGVhbnVwID0gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgIC4uLlsuLi50aGlzLm1jcFNlcnZlcnMudmFsdWVzKCldLm1hcCgoeyBzZXJ2ZXIgfSkgPT4gc2VydmVyLmNsb3NlKCkpLFxuICAgICAgdGhpcy5tY3A/LmRpc2Nvbm5lY3QoKSxcbiAgICAgIHN1cGVydmlzaW9uPy5yZXN1bHQsXG4gICAgXSk7XG4gICAgY29uc3QgY29tcGxldGVkID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGNsZWFudXAudGhlbigoKSA9PiB0cnVlKSxcbiAgICAgIGFzeW5jTW9kdWxlLnNsZWVwKFNJREVDQVJfU0hVVERPV05fR1JBQ0VfTVMpLnRoZW4oKCkgPT4gZmFsc2UpLFxuICAgIF0pO1xuICAgIGlmICghY29tcGxldGVkKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFwic2lkZWNhcnMgaWdub3JlZCBTSUdURVJNOyBlc2NhbGF0aW5nIHRvIFNJR0tJTExcIik7XG4gICAgICBmb3IgKGNvbnN0IGNvbW1hbmQgb2YgY29tbWFuZHMpIGNvbW1hbmQua2lsbChcIlNJR0tJTExcIik7XG4gICAgfVxuICAgIHRoaXMubWNwU2VydmVycy5jbGVhcigpO1xuICAgIHRoaXMubWNwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWNwVG9vbHMgPSB7fTtcbiAgICB0aGlzLmNvbW1hbmRzID0gW107XG4gICAgdGhpcy5zdXBlcnZpc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VJZGxlTWNwU2VydmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBjdXRvZmYgPSBEYXRlLm5vdygpIC0gTUNQX1NFUlZFUl9JRExFX01TO1xuICAgIGZvciAoY29uc3QgW3VzZXJJZCwgZW50cnldIG9mIHRoaXMubWNwU2VydmVycykge1xuICAgICAgaWYgKGVudHJ5Lmxhc3RVc2VkID49IGN1dG9mZikgY29udGludWU7XG4gICAgICB0aGlzLm1jcFNlcnZlcnMuZGVsZXRlKHVzZXJJZCk7XG4gICAgICB2b2lkIGVudHJ5LnNlcnZlci5jbG9zZSgpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiaWRsZSBNQ1Agc2VydmVyIGNsb3NlIGZhaWxlZFwiLCB7IGVycm9yIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbnR5cGUgRXhlY1B5dGhvbiA9IChmaWxlOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdKSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4vKiogRW5zdXJlIERhdGFicmlja3MgQXBwcyBoYXMgdGhlIFB5dGhvbiBzaWRlY2FyIG1hdGNoaW5nIHRoaXMgTm9kZSBwYWNrYWdlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUdyYXBoaXRpUHl0aG9uKFxuICBweXRob246IHN0cmluZyxcbiAgcnVuOiBFeGVjUHl0aG9uID0gKGZpbGUsIGFyZ3MpID0+IHByb21pc2lmeShleGVjRmlsZSkoZmlsZSwgYXJncyksXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBydW4ocHl0aG9uLCBbXCItY1wiLCBcImltcG9ydCBkYnhfdG9vbHMuZ3JhcGhpdGlcIl0pO1xuICB9IGNhdGNoIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcnVuKHB5dGhvbiwgW1wiLW1cIiwgXCJwaXBcIiwgXCItLXZlcnNpb25cIl0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgYXdhaXQgcnVuKHB5dGhvbiwgW1xuICAgICAgICBcIi1jXCIsXG4gICAgICAgIFwiaW1wb3J0IHVybGxpYi5yZXF1ZXN0OyBleGVjKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHBzOi8vYm9vdHN0cmFwLnB5cGEuaW8vZ2V0LXBpcC5weScpLnJlYWQoKSlcIixcbiAgICAgICAgXCItLXVzZXJcIixcbiAgICAgICAgXCItLWJyZWFrLXN5c3RlbS1wYWNrYWdlc1wiLFxuICAgICAgXSk7XG4gICAgfVxuICAgIGF3YWl0IHJ1bihweXRob24sIFtcbiAgICAgIFwiLW1cIixcbiAgICAgIFwicGlwXCIsXG4gICAgICBcImluc3RhbGxcIixcbiAgICAgIFwiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrXCIsXG4gICAgICBcIi0tdXNlclwiLFxuICAgICAgXCItLWJyZWFrLXN5c3RlbS1wYWNrYWdlc1wiLFxuICAgICAgYGRieC10b29scy1ncmFwaGl0aT09JHtQQUNLQUdFX1ZFUlNJT059YCxcbiAgICBdKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ3JhcGhpdGkgPSB0b1BsdWdpbihHcmFwaGl0aVBsdWdpbik7XG5cbmZ1bmN0aW9uIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQoKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGV4dCA9IGRieEFwcGtpdC50cnlHZXRFeGVjdXRpb25Db250ZXh0KCk7XG4gIGlmICghY29udGV4dCkgdGhyb3cgbmV3IEVycm9yKFwiR3JhcGhpdGkgbWVtb3J5IHJlcXVpcmVzIGFuIEFwcEtpdCBleGVjdXRpb24gY29udGV4dFwiKTtcbiAgcmV0dXJuIFwidXNlcklkXCIgaW4gY29udGV4dCA/IGNvbnRleHQudXNlcklkIDogY29udGV4dC5zZXJ2aWNlVXNlcklkO1xufVxuXG5mdW5jdGlvbiB1c2VyU2NvcGUodXNlcklkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYHVzZXJfJHtjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZSh1c2VySWQpLmRpZ2VzdChcImJhc2U2NHVybFwiKX1gO1xufVxuXG5mdW5jdGlvbiBzY29wZWRBcmd1bWVudHMobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzY29wZTogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBpZiAoIShuYW1lIGluIFNDT1BFRF9UT09MX0ZJRUxEUykpIHRocm93IG5ldyBFcnJvcihgR3JhcGhpdGkgdG9vbCBpcyBub3QgdXNlci1zY29wZWQ6ICR7bmFtZX1gKTtcbiAgY29uc3Qgc2NvcGVkID0gb2JqZWN0LmlzUmVjb3JkKGFyZ3MpID8geyAuLi5hcmdzIH0gOiB7fTtcbiAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBVTlNDT1BFRF9BUkdVTUVOVFMpIGRlbGV0ZSBzY29wZWRbYXJndW1lbnRdO1xuICBjb25zdCBmaWVsZCA9IFNDT1BFRF9UT09MX0ZJRUxEU1tuYW1lIGFzIGtleW9mIHR5cGVvZiBTQ09QRURfVE9PTF9GSUVMRFNdO1xuICBpZiAoZmllbGQgPT09IFwiZ3JvdXBfaWRcIikgc2NvcGVkLmdyb3VwX2lkID0gc2NvcGU7XG4gIGlmIChmaWVsZCA9PT0gXCJncm91cF9pZHNcIikgc2NvcGVkLmdyb3VwX2lkcyA9IFtzY29wZV07XG4gIHJldHVybiBzY29wZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JHcmFwaGl0aShwb3J0OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIGF3YWl0IChjb25zdCByZWFkeSBvZiBhc3luY01vZHVsZS5wb2xsKFxuICAgIGFzeW5jICh7IHNpZ25hbCB9KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vaGVhbHRoYCwgeyBzaWduYWwgfSk7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5vaztcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBpbnRlcnZhbE1zOiAyNTAsXG4gICAgICB0aW1lb3V0TXM6IDYwXzAwMCxcbiAgICAgIHByZWRpY2F0ZTogKHJlYWR5KSA9PiAhcmVhZHksXG4gICAgfSxcbiAgKSkge1xuICAgIGlmIChyZWFkeSkgcmV0dXJuO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF2YWlsYWJsZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgc2VydmVyLmxpc3RlbigwLCBcIjEyNy4wLjAuMVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhZGRyZXNzID0gc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgIGlmICghYWRkcmVzcyB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNvdWxkIG5vdCBhbGxvY2F0ZSBhIEdyYXBoaXRpIGxvb3BiYWNrIHBvcnRcIikpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXJ2ZXIuY2xvc2UoKGVycm9yKSA9PiAoZXJyb3IgPyByZWplY3QoZXJyb3IpIDogcmVzb2x2ZShhZGRyZXNzLnBvcnQpKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBkaXN0aW5jdFBvcnRzKFxuICBhcHBQb3J0OiBudW1iZXIsXG4gIGdyYXBoaXRpUG9ydDogbnVtYmVyLFxuICBsaXRlbGxtUG9ydDogbnVtYmVyLFxuICBwcm94eVBvcnQ6IG51bWJlcixcbik6IFByb21pc2U8W251bWJlciwgbnVtYmVyLCBudW1iZXJdPiB7XG4gIGNvbnN0IHBvcnRzID0gW2FwcFBvcnRdO1xuICBmb3IgKGNvbnN0IGNvbmZpZ3VyZWRQb3J0IG9mIFtncmFwaGl0aVBvcnQsIGxpdGVsbG1Qb3J0LCBwcm94eVBvcnRdKSB7XG4gICAgaWYgKGNvbmZpZ3VyZWRQb3J0ICYmIHBvcnRzLmluY2x1ZGVzKGNvbmZpZ3VyZWRQb3J0KSkge1xuICAgICAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcIkdyYXBoaXRpIHNpZGVjYXIgcG9ydHMgbXVzdCBkaWZmZXIgZnJvbSBEQVRBQlJJQ0tTX0FQUF9QT1JUXCIpO1xuICAgIH1cbiAgICBsZXQgcG9ydCA9IGNvbmZpZ3VyZWRQb3J0IHx8IChhd2FpdCBhdmFpbGFibGVQb3J0KCkpO1xuICAgIHdoaWxlIChwb3J0cy5pbmNsdWRlcyhwb3J0KSkgcG9ydCA9IGF3YWl0IGF2YWlsYWJsZVBvcnQoKTtcbiAgICBwb3J0cy5wdXNoKHBvcnQpO1xuICB9XG4gIHJldHVybiBwb3J0cy5zbGljZSgxKSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG59XG5cbmZ1bmN0aW9uIGNvbW1hbmRMaW5lKGFyZ3VtZW50c186IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGFyZ3VtZW50c18ubWFwKCh2YWx1ZSkgPT4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXFwnJ1wiKX0nYCkuam9pbihcIiBcIik7XG59XG4iXX0=
|
|
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==
|
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.126",
|
|
30
|
+
"@dbx-tools/core": "0.6.126",
|
|
31
|
+
"@dbx-tools/shared-core": "0.6.126",
|
|
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.126",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/plugin.ts
CHANGED
|
@@ -113,10 +113,20 @@ export class GraphitiPlugin extends Plugin<GraphitiPluginConfig> {
|
|
|
113
113
|
private mcpTools: Record<string, Tool> = {};
|
|
114
114
|
private resolved?: ResolvedGraphitiPluginConfig;
|
|
115
115
|
private setupComplete = false;
|
|
116
|
+
private startup?: Promise<void>;
|
|
116
117
|
private supervision?: ConcurrentlyResult;
|
|
117
118
|
private stopping = false;
|
|
118
119
|
|
|
119
120
|
override async setup(): Promise<void> {
|
|
121
|
+
this.startup = this.startSidecars().catch((error: unknown) => {
|
|
122
|
+
if (this.stopping) return;
|
|
123
|
+
this.logger.error("background startup failed; Graphiti remains unavailable", { error });
|
|
124
|
+
});
|
|
125
|
+
void this.startup;
|
|
126
|
+
this.logger.info("background startup scheduled");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private async startSidecars(): Promise<void> {
|
|
120
130
|
const configured = resolveGraphitiConfig(this.config);
|
|
121
131
|
const [graphitiPort, litellmPort, proxyPort] = await distinctPorts(
|
|
122
132
|
coreConfig.port(undefined, "DATABRICKS_APP_PORT", 8000, coreConfig.ENV_ONLY),
|
|
@@ -360,6 +370,7 @@ export class GraphitiPlugin extends Plugin<GraphitiPluginConfig> {
|
|
|
360
370
|
this.mcpTools = {};
|
|
361
371
|
this.commands = [];
|
|
362
372
|
this.supervision = undefined;
|
|
373
|
+
this.startup = undefined;
|
|
363
374
|
}
|
|
364
375
|
|
|
365
376
|
private closeIdleMcpServers(): void {
|