@dbx-tools/appkit-mastra 0.9.165 → 0.9.166
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/index.ts +2 -2
- package/lib/index.d.ts +2 -2
- package/lib/index.js +3 -3
- package/lib/src/genie-chat.d.ts +2 -0
- package/lib/src/genie-chat.js +39 -4
- package/package.json +16 -16
- package/src/genie-chat.ts +41 -4
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.166";
|
|
7
7
|
export * as agents from "./src/agents.ts";
|
|
8
8
|
export * as chart from "./src/chart.ts";
|
|
9
9
|
export * as chat from "./src/chat.ts";
|
|
@@ -54,7 +54,7 @@ export { filesystems, MastraFileSystemAdapter, MountedCompositeFilesystem, scrat
|
|
|
54
54
|
export type { MastraFileSystemAdapterOptions } from "./src/filesystems.ts";
|
|
55
55
|
export { FOLLOW_UP_USER_TEXT_KEY, FOLLOW_UP_NATIVE_QUESTIONS_KEY, FOLLOW_UP_RUN_ID_KEY, resolveFollowUpSuggestionsConfig, suggestFollowUps, buildFollowUpSuggestionsProcessor, buildFollowUpSuggestionsTransform, buildSuggestFollowUpsTool } from "./src/follow-up-suggestions.ts";
|
|
56
56
|
export type { ResolvedFollowUpSuggestionsConfig, SuggestFollowUpsOptions, FollowUpSuggester } from "./src/follow-up-suggestions.ts";
|
|
57
|
-
export { genieAnswerText, visibleGenieQuestion, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.ts";
|
|
57
|
+
export { genieAnswerText, visibleGenieQuestion, visibleGenieThreadTitle, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.ts";
|
|
58
58
|
export type { GenieChatSpace } from "./src/genie-chat.ts";
|
|
59
59
|
export { DEFAULT_GENIE_ALIAS, askGenieToolId, GENIE_INSTRUCTIONS, normalizeGenieSpaces, resolveGenieSpaces, buildGenieTools, buildGenieToolkitProvider, collectSpaceSuggestions } from "./src/genie.ts";
|
|
60
60
|
export type { GenieSpaceConfig, GenieSpacesConfig } from "./src/genie.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.166";
|
|
3
3
|
export * as agents from "./src/agents.ts";
|
|
4
4
|
export * as chart from "./src/chart.ts";
|
|
5
5
|
export * as chat from "./src/chat.ts";
|
|
@@ -50,7 +50,7 @@ export { filesystems, MastraFileSystemAdapter, MountedCompositeFilesystem, scrat
|
|
|
50
50
|
export type { MastraFileSystemAdapterOptions } from "./src/filesystems.ts";
|
|
51
51
|
export { FOLLOW_UP_USER_TEXT_KEY, FOLLOW_UP_NATIVE_QUESTIONS_KEY, FOLLOW_UP_RUN_ID_KEY, resolveFollowUpSuggestionsConfig, suggestFollowUps, buildFollowUpSuggestionsProcessor, buildFollowUpSuggestionsTransform, buildSuggestFollowUpsTool } from "./src/follow-up-suggestions.ts";
|
|
52
52
|
export type { ResolvedFollowUpSuggestionsConfig, SuggestFollowUpsOptions, FollowUpSuggester } from "./src/follow-up-suggestions.ts";
|
|
53
|
-
export { genieAnswerText, visibleGenieQuestion, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.ts";
|
|
53
|
+
export { genieAnswerText, visibleGenieQuestion, visibleGenieThreadTitle, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.ts";
|
|
54
54
|
export type { GenieChatSpace } from "./src/genie-chat.ts";
|
|
55
55
|
export { DEFAULT_GENIE_ALIAS, askGenieToolId, GENIE_INSTRUCTIONS, normalizeGenieSpaces, resolveGenieSpaces, buildGenieTools, buildGenieToolkitProvider, collectSpaceSuggestions } from "./src/genie.ts";
|
|
56
56
|
export type { GenieSpaceConfig, GenieSpacesConfig } from "./src/genie.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-mastra";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.166";
|
|
6
6
|
export * as agents from "./src/agents.js";
|
|
7
7
|
export * as chart from "./src/chart.js";
|
|
8
8
|
export * as chat from "./src/chat.js";
|
|
@@ -46,7 +46,7 @@ export { createMastraEvalDriver } from "./src/evaluation.js";
|
|
|
46
46
|
export { resolveFeedbackMode } from "./src/feedback-mode.js";
|
|
47
47
|
export { filesystems, MastraFileSystemAdapter, MountedCompositeFilesystem, scratchFilesystem } from "./src/filesystems.js";
|
|
48
48
|
export { FOLLOW_UP_USER_TEXT_KEY, FOLLOW_UP_NATIVE_QUESTIONS_KEY, FOLLOW_UP_RUN_ID_KEY, resolveFollowUpSuggestionsConfig, suggestFollowUps, buildFollowUpSuggestionsProcessor, buildFollowUpSuggestionsTransform, buildSuggestFollowUpsTool } from "./src/follow-up-suggestions.js";
|
|
49
|
-
export { genieAnswerText, visibleGenieQuestion, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.js";
|
|
49
|
+
export { genieAnswerText, visibleGenieQuestion, visibleGenieThreadTitle, genieMessageToUiMessages, listGenieThreads, listGenieThreadMessages, genieChatStream, deleteGenieThread, deleteGenieThreadMessage } from "./src/genie-chat.js";
|
|
50
50
|
export { DEFAULT_GENIE_ALIAS, askGenieToolId, GENIE_INSTRUCTIONS, normalizeGenieSpaces, resolveGenieSpaces, buildGenieTools, buildGenieToolkitProvider, collectSpaceSuggestions } from "./src/genie.js";
|
|
51
51
|
export { IDENTITY_ENV, resolveIdentityMode } from "./src/identity.js";
|
|
52
52
|
export { buildMcpServer } from "./src/mcp.js";
|
|
@@ -72,4 +72,4 @@ export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO
|
|
|
72
72
|
export { invalidFields } from "./src/validation.js";
|
|
73
73
|
export { DEFAULT_DATABRICKS_WORKSPACE_PATHS, databricksWorkspaceConfig, databricksWorkspace, bindDatabricksWorkspaceContext, resolveDatabricksWorkspacePaths, inlineSkillsFromLocalMounts, requestWorkspaceClient } from "./src/workspaces.js";
|
|
74
74
|
export { safeWriteProgress } from "./src/writer.js";
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FB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QUFFOW9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pULE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE2NVwiO1xuZXhwb3J0ICogYXMgYWdlbnRzIGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXJ0IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZXZhbHVhdGlvbiBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2tNb2RlIGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBmb2xsb3dVcFN1Z2dlc3Rpb25zIGZyb20gXCIuL3NyYy9mb2xsb3ctdXAtc3VnZ2VzdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ2hhdCBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0Q29udGV4dCBmcm9tIFwiLi9zcmMvcmVxdWVzdC1jb250ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IHRvb2wsIGNyZWF0ZUFnZW50LCBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfVE9PTF9XT1JLRkxPV19JTlNUUlVDVElPTlMsIENPREVfTU9ERV9ST1VUSU5HX0lOU1RSVUNUSU9OUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMsIGJ1aWxkQWdlbnRzLCBhcHByb3ZhbEdhdGVkVG9vbElkcyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhVG9vbHMsIEFwcEtpdFRvb2xPcHRpb25zLCBUb29sa2l0T3B0aW9ucywgTWFzdHJhUGx1Z2luVG9vbGtpdFByb3ZpZGVyLCBNYXN0cmFQbHVnaW5zLCBNYXN0cmFUb29sc0ZuLCBNYXN0cmFBZ2VudFdvcmtzcGFjZVJlc29sdmVyLCBNYXN0cmFBZ2VudERlZmluaXRpb24sIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhU3RvcmFnZUNvbmZpZ092ZXJyaWRlLCBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSwgQWdlbnREZWZhdWx0TW9kZWwsIEJ1aWx0QWdlbnRzLCBNYXN0cmFPdXRwdXRQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHsgY2hhcnRQbGFuU2NoZW1hLCBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hLCBjaGFydFRvb2xPdXRwdXRTY2hlbWEsIHByZXBhcmVDaGFydCwgZmV0Y2hDaGFydCwgcGxhblRvRWNoYXJ0c09wdGlvbiwgYnVpbGRSZW5kZXJEYXRhVG9vbCB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBhZ2VudEFib3J0U2lnbmFsLCBhZ2VudENoYXRSb3V0ZXMgfSBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQsIGF0dHJpYnV0ZWRVc2VySWQsIHJlc29sdmVVc2VyS2V5LCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWcsIE1hc3RyYUNvZGVNb2RlVHJhbnNwb3J0LCBNYXN0cmFDb2RlTW9kZUNvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgZ2VuaWVDb252ZXJzYXRpb25SZWFkRGVmYXVsdHMsIGdlbmllQ29udmVyc2F0aW9uV3JpdGVEZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHsgY3JlYXRlTWFzdHJhRXZhbERyaXZlciB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IHJlc29sdmVGZWVkYmFja01vZGUgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2stbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBGZWVkYmFja0F2YWlsYWJpbGl0eSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgeyBmaWxlc3lzdGVtcywgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIsIE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtLCBzY3JhdGNoRmlsZXN5c3RlbSB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IEZPTExPV19VUF9VU0VSX1RFWFRfS0VZLCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksIEZPTExPV19VUF9SVU5fSURfS0VZLCByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgc3VnZ2VzdEZvbGxvd1VwcywgYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zUHJvY2Vzc29yLCBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0sIGJ1aWxkU3VnZ2VzdEZvbGxvd1Vwc1Rvb2wgfSBmcm9tIFwiLi9zcmMvZm9sbG93LXVwLXN1Z2dlc3Rpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgU3VnZ2VzdEZvbGxvd1Vwc09wdGlvbnMsIEZvbGxvd1VwU3VnZ2VzdGVyIH0gZnJvbSBcIi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50c1wiO1xuZXhwb3J0IHsgZ2VuaWVBbnN3ZXJUZXh0LCB2aXNpYmxlR2VuaWVRdWVzdGlvbiwgZ2VuaWVNZXNzYWdlVG9VaU1lc3NhZ2VzLCBsaXN0R2VuaWVUaHJlYWRzLCBsaXN0R2VuaWVUaHJlYWRNZXNzYWdlcywgZ2VuaWVDaGF0U3RyZWFtLCBkZWxldGVHZW5pZVRocmVhZCwgZGVsZXRlR2VuaWVUaHJlYWRNZXNzYWdlIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNoYXQudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVDaGF0U3BhY2UgfSBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9HRU5JRV9BTElBUywgYXNrR2VuaWVUb29sSWQsIEdFTklFX0lOU1RSVUNUSU9OUywgbm9ybWFsaXplR2VuaWVTcGFjZXMsIHJlc29sdmVHZW5pZVNwYWNlcywgYnVpbGRHZW5pZVRvb2xzLCBidWlsZEdlbmllVG9vbGtpdFByb3ZpZGVyLCBjb2xsZWN0U3BhY2VTdWdnZXN0aW9ucyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZVNwYWNlQ29uZmlnLCBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfRU5WLCByZXNvbHZlSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgeyBidWlsZE1jcFNlcnZlciB9IGZyb20gXCIuL3NyYy9tY3AudHNcIjtcbmV4cG9ydCB0eXBlIHsgUmVzb2x2ZWRNY3AgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgeyByZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhSZXF1ZXN0TWVtb3J5U2NvcGUsIHdpdGhTb2Z0U3RvcmFnZUluaXQsIG5lZWRzTGFrZWJhc2UsIGNyZWF0ZU1lbW9yeUJ1aWxkZXIsIGNyZWF0ZU1hc3RyYUxha2ViYXNlUG9vbCwgTWVtb3J5QnVpbGRlciB9IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCB7IEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yLCB1Y1RyYWNlUHJlZml4RnJvbUV4cGVyaW1lbnRUYWdzLCByZXNldFVjVHJhY2VQcmVmaXhDYWNoZSwgbWxmbG93QXNzZXNzbWVudFRyYWNlSWQsIGRpcmVjdE1sZmxvd1RyYWNraW5nVXJpLCBkaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uLCBkaXJlY3RNbGZsb3dUcmFjaW5nQ29uZmlndXJlZCwgYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCwgaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbywgaW5pdGlhbGl6ZVJlcXVlc3RNbGZsb3dUcmFjZUluZm8sIHBlcnNpc3RBcHBNbGZsb3dUcmFjZUluZm8sIHJlc2V0QXBwTWxmbG93VHJhY2VJbmZvLCBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZywgdXBkYXRlQWN0aXZlTWxmbG93VHJhY2UsIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlVGFncywgZGlyZWN0TWxmbG93VHJhY2luZ0FjdGl2ZSwgZmx1c2hEaXJlY3RNbGZsb3dUcmFjaW5nLCBtbGZsb3dFbmFibGVkLCBtbGZsb3dFeHBlcmltZW50TWFuYWdlclVybCwgbG9nRmVlZGJhY2sgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcE1sZmxvd1RyYWNlSW5mbywgTG9nRmVlZGJhY2tQYXJhbXMgfSBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgeyBSRVNQT05TRVNfUFJPVklERVJfT1BUSU9OUywgc2VydmluZ0FwaSwgcmVzb2x2ZU1vZGVsV29ya3NwYWNlQ2xpZW50LCByZXNvbHZlRGVmYXVsdE1vZGVsSWQsIGJ1aWxkTW9kZWwgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgbW9udHlNYXhQcm9jZXNzZXMsIE1vbnR5U2FuZGJveCB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vbnR5U2FuZGJveE9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHsgaXNPdGxwVHJhY2luZ0NvbmZpZ3VyZWQsIGNvbmZpZ3VyZU90ZWxQcm9wYWdhdGlvbiwgYnVpbGRPYnNlcnZhYmlsaXR5IH0gZnJvbSBcIi4vc3JjL29ic2VydmFiaWxpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRPYnNlcnZhYmlsaXR5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFQbHVnaW4sIG1hc3RyYSB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IHN0cmlwU3RhbGVDaGFydHNQcm9jZXNzb3IgfSBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0IHsgQUlUT09MU19TS0lMTFNfTU9VTlQsIFJFTU9URV9TS0lMTFNfTU9VTlQsIEFJVE9PTFNfUkVGUkVTSF9UVExfTVMsIEFJVE9PTFNfU09VUkNFLCBub3JtYWxpemVSZW1vdGVTa2lsbHNPcHRpb24sIHByb3Zpc2lvblJlbW90ZVNraWxscyB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFpVG9vbHNTb3VyY2UsIFJlbW90ZVNraWxsU291cmNlT3B0aW9ucywgUmVtb3RlU2tpbGxTb3VyY2UsIFJlbW90ZVNraWxsc09wdGlvbiwgTG9jYWxTa2lsbERpcmVjdG9yeU1vdW50LCBNZW1vcnlTa2lsbE1vdW50LCBMb2NhbFNraWxsTW91bnQsIFByb3Zpc2lvblJlbW90ZVNraWxsc09wdGlvbnMsIFByb3Zpc2lvbmVkUmVtb3RlU2tpbGxzLCBSZW1vdGVTa2lsbENhY2hlRW50cnksIFJlbW90ZVNraWxsc01ldGFkYXRhIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9PUklHSU5fS0VZIH0gZnJvbSBcIi4vc3JjL3JlcXVlc3QtY29udGV4dC50c1wiO1xuZXhwb3J0IHsgZGF0YWJyaWNrc0ZldGNoLCByZWFkUmVzcG9uc2VUZXh0LCByZWFkUmVzcG9uc2VKc29uIH0gZnJvbSBcIi4vc3JjL3Jlc3QudHNcIjtcbmV4cG9ydCB0eXBlIHsgRGF0YWJyaWNrc0ZldGNoSW5pdCB9IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgeyBjbGVhclRydXN0ZWRSZXF1ZXN0Q29udGV4dCwgcmVxdWVzdE9yaWdpbiwgc3RhbXBSZXF1ZXN0Q29udGV4dFVzZXIsIGNyZWF0ZVJlcXVlc3RDb250ZXh0LCBNYXN0cmFTZXJ2ZXIsIGlzTWFzdHJhUmVxdWVzdEFsbG93ZWQsIGF0dGFjaFJvdXRlUGF0Y2hNaWRkbGV3YXJlLCBhdHRhY2hTdGFsZVJlc3VtZVJlY292ZXJ5IH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHR5cGUgeyBBdHRyaWJ1dGVkSWRlbnRpdHksIE1hc3RyYUFwaUdhdGVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX01PREVMX09WRVJSSURFX0tFWSwgTUFTVFJBX1JFU09MVkVEX01PREVMX0tFWSwgZXh0cmFjdE1vZGVsT3ZlcnJpZGUsIHJlc29sdmVTZXJ2aW5nQ29uZmlnIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgT1JHQU5JWkFUSU9OX0FTU0lTVEFOVF9QQVRILCBPUkdBTklaQVRJT05fU0tJTExTX1BBVEgsIHBlcnNvbmFsV29ya3NwYWNlUGF0aCwgcGVyc29uYWxTa2lsbHNQYXRoIH0gZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgeyBTVEFURU1FTlRfUk9XX0NBUCwgZmV0Y2hTdGF0ZW1lbnREYXRhLCBmZXRjaFN0YXRlbWVudEVtYmVkRGF0YSB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3RhdGVtZW50RW1iZWREYXRhIH0gZnJvbSBcIi4vc3JjL3N0YXRlbWVudC50c1wiO1xuZXhwb3J0IHsgYWdlbnRTdG9yYWdlU2NoZW1hTmFtZSB9IGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0IHsgVFlQT0dSQVBIWV9SVUxFIH0gZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgeyBUSVRMRV9JTlNUUlVDVElPTlMsIHN1bW1hcnlNb2RlbCwgc3VtbWFyaXplVGV4dCwgYnVpbGRTdW1tYXJpemVUb29sIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdW1tYXJpemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHsgVFJBQ0VfSU9fTElNSVQsIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLCBNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIENIQVRfTUVTU0FHRVNfQVRUUiwgQ0hBVF9SRVNQT05TRV9BVFRSLCBDSEFUX0lERU5USVRZX0FUVFIsIENIQVRfR0VOSUVfVVNFRF9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FUVFIsIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBNTEZMT1dfU0VTU0lPTl9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFLCBzdGFtcEdlbmllVG9vbFNwYW4sIGFjdGl2ZUNoYXRUcmFjaW5nT3B0aW9ucywgcmVjb3JkQWN0aXZlVHJhY2VUYWcsIHJlY29yZEFjdGl2ZVRyYWNlVGFncywgcmVjb3JkQWN0aXZlVHJhY2VNb2RlbCwgcmVjb3JkQWN0aXZlVHJhY2VVc2VyLCByZWNvcmRBY3RpdmVUcmFjZUF1dGgsIHRleHRPbmx5Q2hhdElucHV0LCBhc3Npc3RhbnRUZXh0RnJvbVNzZSwgYXNzaXN0YW50VGV4dEZyb21Kc29uLCBBcHBNbGZsb3dUcmFjZUluZm9TcGFuUHJvY2Vzc29yLCByZWdpc3RlckFwcE1sZmxvd1RyYWNlSW5mb1Byb2Nlc3NvciwgY2hhdFR1cm5UZWxlbWV0cnlNaWRkbGV3YXJlLCBhdHRhY2hDaGF0VHVyblRlbGVtZXRyeSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB0eXBlIHsgQ2hhdFR1cm5UZWxlbWV0cnlPcHRpb25zLCBDaGF0VHJhY2VUYWdWYWx1ZSB9IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9UQUdfUFJFRklYLCBNTEZMT1dfQUdFTlRfVEFHLCBNTEZMT1dfR0VOSUVfVEFHLCBNTEZMT1dfT0JPX0FVVEhfVEFHLCBNTEZMT1dfU1BfQVVUSF9UQUcsIE1MRkxPV19MT0NBTF9UQUcsIE1MRkxPV19BR0VOVF9UQUdfQVRUUiwgTUxGTE9XX0dFTklFX1RBR19BVFRSLCBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSLCBNTEZMT1dfT0JPX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19TUF9BVVRIX1RBR19BVFRSLCBNTEZMT1dfTE9DQUxfVEFHX0FUVFIgfSBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0IHsgaW52YWxpZEZpZWxkcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX0RBVEFCUklDS1NfV09SS1NQQUNFX1BBVEhTLCBkYXRhYnJpY2tzV29ya3NwYWNlQ29uZmlnLCBkYXRhYnJpY2tzV29ya3NwYWNlLCBiaW5kRGF0YWJyaWNrc1dvcmtzcGFjZUNvbnRleHQsIHJlc29sdmVEYXRhYnJpY2tzV29ya3NwYWNlUGF0aHMsIGlubGluZVNraWxsc0Zyb21Mb2NhbE1vdW50cywgcmVxdWVzdFdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VQYXRoLCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aFZhbHVlLCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGVGaWx0ZXIsIERhdGFicmlja3NXb3Jrc3BhY2VDYWNoZSwgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiwgRGF0YWJyaWNrc1dvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHsgc2FmZVdyaXRlUHJvZ3Jlc3MgfSBmcm9tIFwiLi9zcmMvd3JpdGVyLnRzXCI7XG4iXX0=
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxtQkFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FB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b0JBQW9CLENBQUM7QUFFOW9CLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUIsRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pULE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsa0NBQWtDLEVBQUUseUJBQXlCLEVBQUUsbUJBQW1CLEVBQUUsOEJBQThCLEVBQUUsK0JBQStCLEVBQUUsMkJBQTJCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUvTyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE2NlwiO1xuZXhwb3J0ICogYXMgYWdlbnRzIGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCAqIGFzIGNoYXJ0IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0ICogYXMgY2hhdCBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0ICogYXMgZXZhbHVhdGlvbiBmcm9tIFwiLi9zcmMvZXZhbHVhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2tNb2RlIGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgKiBhcyBmb2xsb3dVcFN1Z2dlc3Rpb25zIGZyb20gXCIuL3NyYy9mb2xsb3ctdXAtc3VnZ2VzdGlvbnMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllQ2hhdCBmcm9tIFwiLi9zcmMvZ2VuaWUtY2hhdC50c1wiO1xuZXhwb3J0ICogYXMgZ2VuaWUgZnJvbSBcIi4vc3JjL2dlbmllLnRzXCI7XG5leHBvcnQgKiBhcyBpZGVudGl0eSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCAqIGFzIG1jcCBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgKiBhcyBtZW1vcnkgZnJvbSBcIi4vc3JjL21lbW9yeS50c1wiO1xuZXhwb3J0ICogYXMgbWxmbG93IGZyb20gXCIuL3NyYy9tbGZsb3cudHNcIjtcbmV4cG9ydCAqIGFzIG1vZGVsIGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0ICogYXMgbW9udHlTYW5kYm94IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgKiBhcyBvYnNlcnZhYmlsaXR5IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgKiBhcyBwbHVnaW4gZnJvbSBcIi4vc3JjL3BsdWdpbi50c1wiO1xuZXhwb3J0ICogYXMgcHJvY2Vzc29ycyBmcm9tIFwiLi9zcmMvcHJvY2Vzc29ycy50c1wiO1xuZXhwb3J0ICogYXMgcmVtb3RlU2tpbGxzIGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgKiBhcyByZXF1ZXN0Q29udGV4dCBmcm9tIFwiLi9zcmMvcmVxdWVzdC1jb250ZXh0LnRzXCI7XG5leHBvcnQgKiBhcyByZXN0IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgKiBhcyBzZXJ2ZXIgZnJvbSBcIi4vc3JjL3NlcnZlci50c1wiO1xuZXhwb3J0ICogYXMgc2VydmluZyBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxQYXRocyBmcm9tIFwiLi9zcmMvc2tpbGwtcGF0aHMudHNcIjtcbmV4cG9ydCAqIGFzIHN0YXRlbWVudCBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgKiBhcyBzdG9yYWdlU2NoZW1hIGZyb20gXCIuL3NyYy9zdG9yYWdlLXNjaGVtYS50c1wiO1xuZXhwb3J0ICogYXMgc3R5bGUgZnJvbSBcIi4vc3JjL3N0eWxlLnRzXCI7XG5leHBvcnQgKiBhcyBzdW1tYXJpemUgZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0ICogYXMgdGVsZW1ldHJ5IGZyb20gXCIuL3NyYy90ZWxlbWV0cnkudHNcIjtcbmV4cG9ydCAqIGFzIHRyYWNlQXR0cmlidXRlcyBmcm9tIFwiLi9zcmMvdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdmFsaWRhdGlvbiBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlcyBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogYXMgd3JpdGVyIGZyb20gXCIuL3NyYy93cml0ZXIudHNcIjtcbmV4cG9ydCB7IHRvb2wsIGNyZWF0ZUFnZW50LCBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfVE9PTF9XT1JLRkxPV19JTlNUUlVDVElPTlMsIENPREVfTU9ERV9ST1VUSU5HX0lOU1RSVUNUSU9OUywgREVGQVVMVF9TVFlMRV9JTlNUUlVDVElPTlMsIGJ1aWxkQWdlbnRzLCBhcHByb3ZhbEdhdGVkVG9vbElkcyB9IGZyb20gXCIuL3NyYy9hZ2VudHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhVG9vbHMsIEFwcEtpdFRvb2xPcHRpb25zLCBUb29sa2l0T3B0aW9ucywgTWFzdHJhUGx1Z2luVG9vbGtpdFByb3ZpZGVyLCBNYXN0cmFQbHVnaW5zLCBNYXN0cmFUb29sc0ZuLCBNYXN0cmFBZ2VudFdvcmtzcGFjZVJlc29sdmVyLCBNYXN0cmFBZ2VudERlZmluaXRpb24sIEFueU1hc3RyYUFnZW50RGVmaW5pdGlvbiwgTWFzdHJhU3RvcmFnZUNvbmZpZ092ZXJyaWRlLCBNYXN0cmFNZW1vcnlDb25maWdPdmVycmlkZSwgQWdlbnREZWZhdWx0TW9kZWwsIEJ1aWx0QWdlbnRzLCBNYXN0cmFPdXRwdXRQcm9jZXNzb3JGYWN0b3J5IH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHsgY2hhcnRQbGFuU2NoZW1hLCBjaGFydFBsYW5uZXJSZXF1ZXN0U2NoZW1hLCBjaGFydFRvb2xPdXRwdXRTY2hlbWEsIHByZXBhcmVDaGFydCwgZmV0Y2hDaGFydCwgcGxhblRvRWNoYXJ0c09wdGlvbiwgYnVpbGRSZW5kZXJEYXRhVG9vbCB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBhZ2VudEFib3J0U2lnbmFsLCBhZ2VudENoYXRSb3V0ZXMgfSBmcm9tIFwiLi9zcmMvY2hhdC50c1wiO1xuZXhwb3J0IHsgTUFTVFJBX1VTRVJfS0VZLCBNQVNUUkFfVVNFUl9OQU1FX0tFWSwgTUFTVFJBX1VTRVJfRU1BSUxfS0VZLCBNQVNUUkFfQVVUSF9NT0RFX0tFWSwgTUFTVFJBX1JFUVVFU1RfSURfS0VZLCBNQVNUUkFfU0NPUEVTX0tFWSwgVFJBQ0VfUkVRVUVTVF9DT05URVhUX0tFWVMsIGV4ZWN1dGlvbkNvbnRleHRVc2VySWQsIGF0dHJpYnV0ZWRVc2VySWQsIHJlc29sdmVVc2VyS2V5LCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFXb3Jrc3BhY2VTa2lsbHNDb25maWcsIE1hc3RyYUNvZGVNb2RlVHJhbnNwb3J0LCBNYXN0cmFDb2RlTW9kZUNvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBGb2xsb3dVcFN1Z2dlc3Rpb25zQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgZ2VuaWVDb252ZXJzYXRpb25SZWFkRGVmYXVsdHMsIGdlbmllQ29udmVyc2F0aW9uV3JpdGVEZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHsgY3JlYXRlTWFzdHJhRXZhbERyaXZlciB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUV2YWxEcml2ZXJPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2V2YWx1YXRpb24udHNcIjtcbmV4cG9ydCB7IHJlc29sdmVGZWVkYmFja01vZGUgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2stbW9kZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBGZWVkYmFja0F2YWlsYWJpbGl0eSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay1tb2RlLnRzXCI7XG5leHBvcnQgeyBmaWxlc3lzdGVtcywgTWFzdHJhRmlsZVN5c3RlbUFkYXB0ZXIsIE1vdW50ZWRDb21wb3NpdGVGaWxlc3lzdGVtLCBzY3JhdGNoRmlsZXN5c3RlbSB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IEZPTExPV19VUF9VU0VSX1RFWFRfS0VZLCBGT0xMT1dfVVBfTkFUSVZFX1FVRVNUSU9OU19LRVksIEZPTExPV19VUF9SVU5fSURfS0VZLCByZXNvbHZlRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgc3VnZ2VzdEZvbGxvd1VwcywgYnVpbGRGb2xsb3dVcFN1Z2dlc3Rpb25zUHJvY2Vzc29yLCBidWlsZEZvbGxvd1VwU3VnZ2VzdGlvbnNUcmFuc2Zvcm0sIGJ1aWxkU3VnZ2VzdEZvbGxvd1Vwc1Rvb2wgfSBmcm9tIFwiLi9zcmMvZm9sbG93LXVwLXN1Z2dlc3Rpb25zLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkRm9sbG93VXBTdWdnZXN0aW9uc0NvbmZpZywgU3VnZ2VzdEZvbGxvd1Vwc09wdGlvbnMsIEZvbGxvd1VwU3VnZ2VzdGVyIH0gZnJvbSBcIi4vc3JjL2ZvbGxvdy11cC1zdWdnZXN0aW9ucy50c1wiO1xuZXhwb3J0IHsgZ2VuaWVBbnN3ZXJUZXh0LCB2aXNpYmxlR2VuaWVRdWVzdGlvbiwgdmlzaWJsZUdlbmllVGhyZWFkVGl0bGUsIGdlbmllTWVzc2FnZVRvVWlNZXNzYWdlcywgbGlzdEdlbmllVGhyZWFkcywgbGlzdEdlbmllVGhyZWFkTWVzc2FnZXMsIGdlbmllQ2hhdFN0cmVhbSwgZGVsZXRlR2VuaWVUaHJlYWQsIGRlbGV0ZUdlbmllVGhyZWFkTWVzc2FnZSB9IGZyb20gXCIuL3NyYy9nZW5pZS1jaGF0LnRzXCI7XG5leHBvcnQgdHlwZSB7IEdlbmllQ2hhdFNwYWNlIH0gZnJvbSBcIi4vc3JjL2dlbmllLWNoYXQudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfR0VOSUVfQUxJQVMsIGFza0dlbmllVG9vbElkLCBHRU5JRV9JTlNUUlVDVElPTlMsIG5vcm1hbGl6ZUdlbmllU3BhY2VzLCByZXNvbHZlR2VuaWVTcGFjZXMsIGJ1aWxkR2VuaWVUb29scywgYnVpbGRHZW5pZVRvb2xraXRQcm92aWRlciwgY29sbGVjdFNwYWNlU3VnZ2VzdGlvbnMgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgR2VuaWVTcGFjZUNvbmZpZywgR2VuaWVTcGFjZXNDb25maWcgfSBmcm9tIFwiLi9zcmMvZ2VuaWUudHNcIjtcbmV4cG9ydCB7IElERU5USVRZX0VOViwgcmVzb2x2ZUlkZW50aXR5TW9kZSB9IGZyb20gXCIuL3NyYy9pZGVudGl0eS50c1wiO1xuZXhwb3J0IHsgYnVpbGRNY3BTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvbWNwLnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkTWNwIH0gZnJvbSBcIi4vc3JjL21jcC50c1wiO1xuZXhwb3J0IHsgcmVxdWVzdE1lbW9yeVNjb3BlLCB3aXRoUmVxdWVzdE1lbW9yeVNjb3BlLCB3aXRoU29mdFN0b3JhZ2VJbml0LCBuZWVkc0xha2ViYXNlLCBjcmVhdGVNZW1vcnlCdWlsZGVyLCBjcmVhdGVNYXN0cmFMYWtlYmFzZVBvb2wsIE1lbW9yeUJ1aWxkZXIgfSBmcm9tIFwiLi9zcmMvbWVtb3J5LnRzXCI7XG5leHBvcnQgeyBBZ2VudFRyYWNlU3BhblByb2Nlc3NvciwgdWNUcmFjZVByZWZpeEZyb21FeHBlcmltZW50VGFncywgcmVzZXRVY1RyYWNlUHJlZml4Q2FjaGUsIG1sZmxvd0Fzc2Vzc21lbnRUcmFjZUlkLCBkaXJlY3RNbGZsb3dUcmFja2luZ1VyaSwgZGlyZWN0TWxmbG93VHJhY2VMb2NhdGlvbiwgZGlyZWN0TWxmbG93VHJhY2luZ0NvbmZpZ3VyZWQsIGFwcE1sZmxvd1RyYWNlSW5mb0NvbmZpZ3VyZWQsIGluaXRpYWxpemVBcHBNbGZsb3dUcmFjZUluZm8sIGluaXRpYWxpemVSZXF1ZXN0TWxmbG93VHJhY2VJbmZvLCBwZXJzaXN0QXBwTWxmbG93VHJhY2VJbmZvLCByZXNldEFwcE1sZmxvd1RyYWNlSW5mbywgaW5pdGlhbGl6ZURpcmVjdE1sZmxvd1RyYWNpbmcsIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlLCB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZVRhZ3MsIGRpcmVjdE1sZmxvd1RyYWNpbmdBY3RpdmUsIGZsdXNoRGlyZWN0TWxmbG93VHJhY2luZywgbWxmbG93RW5hYmxlZCwgbWxmbG93RXhwZXJpbWVudE1hbmFnZXJVcmwsIGxvZ0ZlZWRiYWNrIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBNbGZsb3dUcmFjZUluZm8sIExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMsIHNlcnZpbmdBcGksIHJlc29sdmVNb2RlbFdvcmtzcGFjZUNsaWVudCwgcmVzb2x2ZURlZmF1bHRNb2RlbElkLCBidWlsZE1vZGVsIH0gZnJvbSBcIi4vc3JjL21vZGVsLnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkTW9kZWxPdmVycmlkZXMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB7IG1vbnR5TWF4UHJvY2Vzc2VzLCBNb250eVNhbmRib3ggfSBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBNb250eVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB7IGlzT3RscFRyYWNpbmdDb25maWd1cmVkLCBjb25maWd1cmVPdGVsUHJvcGFnYXRpb24sIGJ1aWxkT2JzZXJ2YWJpbGl0eSB9IGZyb20gXCIuL3NyYy9vYnNlcnZhYmlsaXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU0tJTExTX01PVU5ULCBSRU1PVEVfU0tJTExTX01PVU5ULCBBSVRPT0xTX1JFRlJFU0hfVFRMX01TLCBBSVRPT0xTX1NPVVJDRSwgbm9ybWFsaXplUmVtb3RlU2tpbGxzT3B0aW9uLCBwcm92aXNpb25SZW1vdGVTa2lsbHMgfSBmcm9tIFwiLi9zcmMvcmVtb3RlLXNraWxscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBaVRvb2xzU291cmNlLCBSZW1vdGVTa2lsbFNvdXJjZU9wdGlvbnMsIFJlbW90ZVNraWxsU291cmNlLCBSZW1vdGVTa2lsbHNPcHRpb24sIExvY2FsU2tpbGxEaXJlY3RvcnlNb3VudCwgTWVtb3J5U2tpbGxNb3VudCwgTG9jYWxTa2lsbE1vdW50LCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfT1JJR0lOX0tFWSB9IGZyb20gXCIuL3NyYy9yZXF1ZXN0LWNvbnRleHQudHNcIjtcbmV4cG9ydCB7IGRhdGFicmlja3NGZXRjaCwgcmVhZFJlc3BvbnNlVGV4dCwgcmVhZFJlc3BvbnNlSnNvbiB9IGZyb20gXCIuL3NyYy9yZXN0LnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgY2xlYXJUcnVzdGVkUmVxdWVzdENvbnRleHQsIHJlcXVlc3RPcmlnaW4sIHN0YW1wUmVxdWVzdENvbnRleHRVc2VyLCBjcmVhdGVSZXF1ZXN0Q29udGV4dCwgTWFzdHJhU2VydmVyLCBpc01hc3RyYVJlcXVlc3RBbGxvd2VkLCBhdHRhY2hSb3V0ZVBhdGNoTWlkZGxld2FyZSwgYXR0YWNoU3RhbGVSZXN1bWVSZWNvdmVyeSB9IGZyb20gXCIuL3NyYy9zZXJ2ZXIudHNcIjtcbmV4cG9ydCB0eXBlIHsgQXR0cmlidXRlZElkZW50aXR5LCBNYXN0cmFBcGlHYXRlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zZXJ2ZXIudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9NT0RFTF9PVkVSUklERV9LRVksIE1BU1RSQV9SRVNPTFZFRF9NT0RFTF9LRVksIGV4dHJhY3RNb2RlbE92ZXJyaWRlLCByZXNvbHZlU2VydmluZ0NvbmZpZyB9IGZyb20gXCIuL3NyYy9zZXJ2aW5nLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1vZGVsT3ZlcnJpZGVSZXF1ZXN0IH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB7IE9SR0FOSVpBVElPTl9BU1NJU1RBTlRfUEFUSCwgT1JHQU5JWkFUSU9OX1NLSUxMU19QQVRILCBwZXJzb25hbFdvcmtzcGFjZVBhdGgsIHBlcnNvbmFsU2tpbGxzUGF0aCB9IGZyb20gXCIuL3NyYy9za2lsbC1wYXRocy50c1wiO1xuZXhwb3J0IHsgU1RBVEVNRU5UX1JPV19DQVAsIGZldGNoU3RhdGVtZW50RGF0YSwgZmV0Y2hTdGF0ZW1lbnRFbWJlZERhdGEgfSBmcm9tIFwiLi9zcmMvc3RhdGVtZW50LnRzXCI7XG5leHBvcnQgdHlwZSB7IFN0YXRlbWVudEVtYmVkRGF0YSB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB7IGFnZW50U3RvcmFnZVNjaGVtYU5hbWUgfSBmcm9tIFwiLi9zcmMvc3RvcmFnZS1zY2hlbWEudHNcIjtcbmV4cG9ydCB7IFRZUE9HUkFQSFlfUlVMRSB9IGZyb20gXCIuL3NyYy9zdHlsZS50c1wiO1xuZXhwb3J0IHsgVElUTEVfSU5TVFJVQ1RJT05TLCBzdW1tYXJ5TW9kZWwsIHN1bW1hcml6ZVRleHQsIGJ1aWxkU3VtbWFyaXplVG9vbCB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB0eXBlIHsgU3VtbWFyaXplT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCB7IFRSQUNFX0lPX0xJTUlULCBNTEZMT1dfU1BBTl9JTlBVVFNfQVRUUiwgTUxGTE9XX1NQQU5fT1VUUFVUU19BVFRSLCBDSEFUX01FU1NBR0VTX0FUVFIsIENIQVRfUkVTUE9OU0VfQVRUUiwgQ0hBVF9JREVOVElUWV9BVFRSLCBDSEFUX0dFTklFX1VTRURfQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BVFRSLCBHRU5fQUlfT1BFUkFUSU9OX05BTUVfQVRUUiwgTUxGTE9XX1NFU1NJT05fQVRUUiwgTUxGTE9XX1NQQU5fVFlQRV9BR0VOVCwgTUxGTE9XX1NQQU5fVFlQRV9HRU5JRSwgc3RhbXBHZW5pZVRvb2xTcGFuLCBhY3RpdmVDaGF0VHJhY2luZ09wdGlvbnMsIHJlY29yZEFjdGl2ZVRyYWNlVGFnLCByZWNvcmRBY3RpdmVUcmFjZVRhZ3MsIHJlY29yZEFjdGl2ZVRyYWNlTW9kZWwsIHJlY29yZEFjdGl2ZVRyYWNlVXNlciwgcmVjb3JkQWN0aXZlVHJhY2VBdXRoLCB0ZXh0T25seUNoYXRJbnB1dCwgYXNzaXN0YW50VGV4dEZyb21Tc2UsIGFzc2lzdGFudFRleHRGcm9tSnNvbiwgQXBwTWxmbG93VHJhY2VJbmZvU3BhblByb2Nlc3NvciwgcmVnaXN0ZXJBcHBNbGZsb3dUcmFjZUluZm9Qcm9jZXNzb3IsIGNoYXRUdXJuVGVsZW1ldHJ5TWlkZGxld2FyZSwgYXR0YWNoQ2hhdFR1cm5UZWxlbWV0cnkgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgdHlwZSB7IENoYXRUdXJuVGVsZW1ldHJ5T3B0aW9ucywgQ2hhdFRyYWNlVGFnVmFsdWUgfSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgeyBNTEZMT1dfVFJBQ0VfVEFHX1BSRUZJWCwgTUxGTE9XX0FHRU5UX1RBRywgTUxGTE9XX0dFTklFX1RBRywgTUxGTE9XX09CT19BVVRIX1RBRywgTUxGTE9XX1NQX0FVVEhfVEFHLCBNTEZMT1dfTE9DQUxfVEFHLCBNTEZMT1dfQUdFTlRfVEFHX0FUVFIsIE1MRkxPV19HRU5JRV9UQUdfQVRUUiwgQVBQS0lUX0FHRU5UX1RSQUNFX1JPT1RfQVRUUiwgTUxGTE9XX09CT19BVVRIX1RBR19BVFRSLCBNTEZMT1dfU1BfQVVUSF9UQUdfQVRUUiwgTUxGTE9XX0xPQ0FMX1RBR19BVFRSIH0gZnJvbSBcIi4vc3JjL3RyYWNlLWF0dHJpYnV0ZXMudHNcIjtcbmV4cG9ydCB7IGludmFsaWRGaWVsZHMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBTY2hlbWFJc3N1ZXMgfSBmcm9tIFwiLi9zcmMvdmFsaWRhdGlvbi50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9EQVRBQlJJQ0tTX1dPUktTUEFDRV9QQVRIUywgZGF0YWJyaWNrc1dvcmtzcGFjZUNvbmZpZywgZGF0YWJyaWNrc1dvcmtzcGFjZSwgYmluZERhdGFicmlja3NXb3Jrc3BhY2VDb250ZXh0LCByZXNvbHZlRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhzLCBpbmxpbmVTa2lsbHNGcm9tTG9jYWxNb3VudHMsIHJlcXVlc3RXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzV29ya3NwYWNlQ29udGV4dCwgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhPcHRpb25zLCBEYXRhYnJpY2tzV29ya3NwYWNlUGF0aCwgRGF0YWJyaWNrc1dvcmtzcGFjZVBhdGhWYWx1ZSwgRGF0YWJyaWNrc1dvcmtzcGFjZUNhY2hlRmlsdGVyLCBEYXRhYnJpY2tzV29ya3NwYWNlQ2FjaGUsIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24sIERhdGFicmlja3NXb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCB7IHNhZmVXcml0ZVByb2dyZXNzIH0gZnJvbSBcIi4vc3JjL3dyaXRlci50c1wiO1xuIl19
|
package/lib/src/genie-chat.d.ts
CHANGED
|
@@ -36,6 +36,8 @@ export interface GenieChatSpace {
|
|
|
36
36
|
export declare function genieAnswerText(message: GenieMessage): string;
|
|
37
37
|
/** Recover the original user question from a context-augmented Genie input. */
|
|
38
38
|
export declare function visibleGenieQuestion(content: string): string;
|
|
39
|
+
/** Remove a complete hidden context envelope or omit a truncated polluted title. */
|
|
40
|
+
export declare function visibleGenieThreadTitle(title: string | undefined): string | undefined;
|
|
39
41
|
/**
|
|
40
42
|
* Project one persisted Genie message onto the user question and the assistant
|
|
41
43
|
* answer the chat transcript renders. The assistant owns an `ask_genie` tool
|
package/lib/src/genie-chat.js
CHANGED
|
@@ -26,7 +26,8 @@ const LIST_PAGE_SIZE = 100;
|
|
|
26
26
|
const THREAD_LIMIT = 100;
|
|
27
27
|
const AGENT_CONVERSATION_TYPE = "GENIE_CONVERSATION_TYPE_AGENT";
|
|
28
28
|
const DIRECT_GENIE_ERROR = "Genie could not complete the request.";
|
|
29
|
-
const
|
|
29
|
+
const GENIE_CONTEXT_TAG = "<dbx-tools-genie-context>";
|
|
30
|
+
const GENIE_CONTEXT_PREFIX = `${GENIE_CONTEXT_TAG}\n`;
|
|
30
31
|
const GENIE_CONTEXT_SUFFIX = "\n</dbx-tools-genie-context>\n\n";
|
|
31
32
|
const GENIE_MEMORY_MESSAGES = 12;
|
|
32
33
|
/** Suffix that keeps a Genie question's user message id distinct from its answer. */
|
|
@@ -113,6 +114,20 @@ export function visibleGenieQuestion(content) {
|
|
|
113
114
|
const boundary = content.indexOf(GENIE_CONTEXT_SUFFIX);
|
|
114
115
|
return boundary < 0 ? content : content.slice(boundary + GENIE_CONTEXT_SUFFIX.length);
|
|
115
116
|
}
|
|
117
|
+
/** Remove a complete hidden context envelope or omit a truncated polluted title. */
|
|
118
|
+
export function visibleGenieThreadTitle(title) {
|
|
119
|
+
const candidate = title?.trim();
|
|
120
|
+
if (!candidate)
|
|
121
|
+
return undefined;
|
|
122
|
+
if (!candidate.startsWith(GENIE_CONTEXT_TAG))
|
|
123
|
+
return candidate;
|
|
124
|
+
if (!candidate.startsWith(GENIE_CONTEXT_PREFIX))
|
|
125
|
+
return undefined;
|
|
126
|
+
const visible = visibleGenieQuestion(candidate);
|
|
127
|
+
if (visible === candidate)
|
|
128
|
+
return undefined;
|
|
129
|
+
return visible.trim() || undefined;
|
|
130
|
+
}
|
|
116
131
|
function messageText(message) {
|
|
117
132
|
const text = message.content.parts
|
|
118
133
|
.flatMap((part) => isRecord(part) && part.type === "text" && typeof part.text === "string" ? [part.text] : [])
|
|
@@ -270,15 +285,35 @@ export async function listGenieThreads(client, space, signal) {
|
|
|
270
285
|
if (!isRecord(conversation) || conversation.agent_type !== AGENT_CONVERSATION_TYPE) {
|
|
271
286
|
continue;
|
|
272
287
|
}
|
|
288
|
+
const rawTitle = typeof conversation.title === "string" ? conversation.title : undefined;
|
|
289
|
+
const title = visibleGenieThreadTitle(rawTitle);
|
|
273
290
|
threads.push({
|
|
274
291
|
id: conversation.conversation_id,
|
|
275
|
-
...(
|
|
292
|
+
...(title ? { title } : {}),
|
|
293
|
+
...(rawTitle?.trim().startsWith(GENIE_CONTEXT_TAG) && !title ? { recoverTitle: true } : {}),
|
|
276
294
|
createdAt: new Date(conversation.created_timestamp).toISOString(),
|
|
277
295
|
});
|
|
278
296
|
}
|
|
279
297
|
pageToken = page.next_page_token || undefined;
|
|
280
298
|
} while (pageToken && threads.length < THREAD_LIMIT);
|
|
281
|
-
|
|
299
|
+
const recovered = await Promise.all(threads.map(async ({ recoverTitle, ...thread }) => {
|
|
300
|
+
if (!recoverTitle)
|
|
301
|
+
return thread;
|
|
302
|
+
try {
|
|
303
|
+
const messages = await listAgentModeConversation(client, space.spaceId, thread.id, signal ? { context: signal } : {});
|
|
304
|
+
const title = visibleGenieQuestion(messages[0]?.content ?? "").trim();
|
|
305
|
+
return title ? { ...thread, title } : thread;
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
logger.warn("thread:title-recovery-failed", {
|
|
309
|
+
conversationId: thread.id,
|
|
310
|
+
spaceId: space.spaceId,
|
|
311
|
+
error: toError(error),
|
|
312
|
+
});
|
|
313
|
+
return thread;
|
|
314
|
+
}
|
|
315
|
+
}));
|
|
316
|
+
return recovered.sort((a, b) => b.createdAt.localeCompare(a.createdAt)).slice(0, THREAD_LIMIT);
|
|
282
317
|
}
|
|
283
318
|
/**
|
|
284
319
|
* Load one conversation's messages as chronological chat transcript messages.
|
|
@@ -441,4 +476,4 @@ export async function deleteGenieThreadMessage(client, space, conversationId, me
|
|
|
441
476
|
: messageId,
|
|
442
477
|
});
|
|
443
478
|
}
|
|
444
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuaWUtY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5pZS1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUdILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0YsT0FBTyxFQUlMLFlBQVksRUFDWix3QkFBd0IsRUFHeEIsNEJBQTRCLEdBQzdCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUMsTUFBTSxJQUFJLENBQUM7QUFFaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU1QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFL0MscUVBQXFFO0FBQ3JFLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sdUJBQXVCLEdBQUcsK0JBQStCLENBQUM7QUFDaEUsTUFBTSxrQkFBa0IsR0FBRyx1Q0FBdUMsQ0FBQztBQUNuRSxNQUFNLG9CQUFvQixHQUFHLDZCQUE2QixDQUFDO0FBQzNELE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFDaEUsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFFakMscUZBQXFGO0FBQ3JGLE1B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QUFDLENBQUMsU0FBUztLQUNkLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERpcmVjdCBHZW5pZSBjaGF0IG92ZXIgdGhlIE1hc3RyYSBjaGF0IHdpcmUuXG4gKlxuICogU2VydmVzIG9uZSBHZW5pZSBzcGFjZSBhcyBhIGNoYXQgd2l0aG91dCBhbiBvdXRlciBtb2RlbC4gR2VuaWUgb3duc1xuICogY29udmVyc2F0aW9uIHN0YXRlOyBvcHRpb25hbCBNYXN0cmEgTWVtb3J5IGNvbnRyaWJ1dGVzIHJlc291cmNlLXNjb3BlZFxuICogc2VtYW50aWMgcmVjYWxsIGFuZCByZWNlaXZlcyBjb21wbGV0ZWQgdHVybnMuIEVhY2ggdHVybiBpcyBwcm9qZWN0ZWQgb250b1xuICogdGhlIHNhbWUgQUkgU0RLIFVJIGNodW5rcyBhbiBhZ2VudCB0dXJuIHByb2R1Y2VzIHdoZW4gaXQgY2FsbHMgYGFza19nZW5pZWBcbiAqIChhIG5hdGl2ZSB0b29sIHBhcnQsIGBkYXRhLWdlbmllLXByb2dyZXNzYCBldmVudHMsIGFuZCB0aGUgYW5zd2VyIHRleHQpLCBzb1xuICogdGhlIE1hc3RyYSBjaGF0IFVJIHJlbmRlcnMgcGlsbHMsIHRob3VnaHRzLCBzdWdnZXN0aW9ucywgYW5kIGVtYmVkc1xuICogaWRlbnRpY2FsbHkgZm9yIGJvdGguXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlQ2xpZW50IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgdG9Db250ZXh0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsaXN0QWdlbnRNb2RlQ29udmVyc2F0aW9uLCBnZW5pZUV2ZW50Q2hhdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2dlbmllXCI7XG5pbXBvcnQgeyBsb2csIHRvRXJyb3IsIGlkLCBpc1JlY29yZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIEdlbmllTWVzc2FnZSwgZXZlbnRzRnJvbU1lc3NhZ2UsIGh1bWFuaXplU3RhdHVzIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWdlbmllXCI7XG5pbXBvcnQge1xuICB0eXBlIEdlbmllQ2hhdFJlcXVlc3QsXG4gIHR5cGUgR2VuaWVUaHJlYWQsXG4gIHR5cGUgU3RhcnRlZEV2ZW50LFxuICBmb3JtYXRNYXJrZXIsXG4gIEdFTklFX1BST0dSRVNTX1BBUlRfVFlQRSxcbiAgdHlwZSBHZW5pZVdyaXRlckV2ZW50LFxuICB0eXBlIEdlbmllQ29udmVyc2F0aW9uUGFydERhdGEsXG4gIEdFTklFX0NPTlZFUlNBVElPTl9QQVJUX1RZUEUsXG59IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1tYXN0cmFcIjtcbmltcG9ydCB0eXBlIHsgTWFzdHJhREJNZXNzYWdlIH0gZnJvbSBcIkBtYXN0cmEvY29yZS9hZ2VudFwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFNZW1vcnkgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL21lbW9yeVwiO1xuaW1wb3J0IHsgTUFTVFJBX1JFU09VUkNFX0lEX0tFWSwgdHlwZSBSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCJAbWFzdHJhL2NvcmUvcmVxdWVzdC1jb250ZXh0XCI7XG5pbXBvcnQgeyBjcmVhdGVVSU1lc3NhZ2VTdHJlYW0sIHR5cGUgVUlNZXNzYWdlLCB0eXBlIFVJTWVzc2FnZUNodW5rIH0gZnJvbSBcImFpXCI7XG5cbmltcG9ydCB7IGFza0dlbmllVG9vbElkIH0gZnJvbSBcIi4vZ2VuaWUudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcIm1hc3RyYS9nZW5pZS1jaGF0XCIpO1xuXG4vKiogUGFnZSBzaXplIHVzZWQgd2hpbGUgd2Fsa2luZyBHZW5pZSdzIHBhZ2luYXRlZCBsaXN0IGVuZHBvaW50cy4gKi9cbmNvbnN0IExJU1RfUEFHRV9TSVpFID0gMTAwO1xuXG4vKiogVXBwZXIgYm91bmQgb24gY29udmVyc2F0aW9ucyBzdXJmYWNlZCBpbiB0aGUgdGhyZWFkIGxpc3QuICovXG5jb25zdCBUSFJFQURfTElNSVQgPSAxMDA7XG5jb25zdCBBR0VOVF9DT05WRVJTQVRJT05fVFlQRSA9IFwiR0VOSUVfQ09OVkVSU0FUSU9OX1RZUEVfQUdFTlRcIjtcbmNvbnN0IERJUkVDVF9HRU5JRV9FUlJPUiA9IFwiR2VuaWUgY291bGQgbm90IGNvbXBsZXRlIHRoZSByZXF1ZXN0LlwiO1xuY29uc3QgR0VOSUVfQ09OVEVYVF9QUkVGSVggPSBcIjxkYngtdG9vbHMtZ2VuaWUtY29udGV4dD5cXG5cIjtcbmNvbnN0IEdFTklFX0NPTlRFWFRfU1VGRklYID0gXCJcXG48L2RieC10b29scy1nZW5pZS1jb250ZXh0PlxcblxcblwiO1xuY29uc3QgR0VOSUVfTUVNT1JZX01FU1NBR0VTID0gMTI7XG5cbi8qKiBTdWZmaXggdGhhdCBrZWVwcyBhIEdlbmllIHF1ZXN0aW9uJ3MgdXNlciBtZXNzYWdlIGlkIGRpc3RpbmN0IGZyb20gaXRzIGFuc3dlci4gKi9cbmNvbnN0IFFVRVNUSU9OX0lEX1NVRkZJWCA9IFwiOnF1ZXN0aW9uXCI7XG5cbi8qKiBPbmUgY29uZmlndXJlZCBHZW5pZSBzcGFjZSBhZGRyZXNzZWQgYnkgdGhlIGRpcmVjdCBjaGF0IHJvdXRlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuaWVDaGF0U3BhY2Uge1xuICAvKiogU3BhY2UgYWxpYXMgZnJvbSB0aGUgcm91dGUsIHdoaWNoIGFsc28gc2VsZWN0cyB0aGUgYGFza19nZW5pZWAgdG9vbCBpZC4gKi9cbiAgYWxpYXM6IHN0cmluZztcbiAgLyoqIEdlbmllIGBzcGFjZV9pZGAuICovXG4gIHNwYWNlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21wb3NlIHRoZSB2aXNpYmxlIGFuc3dlciBmb3Igb25lIHRlcm1pbmFsIEdlbmllIG1lc3NhZ2UuIEFnZW50IE1vZGUgcHV0cyBhblxuICogZW1wdHkgYG91dHB1dF90ZXh0YCBwYXJ0IHdpdGggYG1ldGFkYXRhLnZpei5hdHRhY2htZW50X2lkYCB3aGVyZXZlciBhIG5hdGl2ZVxuICogdmlzdWFsaXphdGlvbiBiZWxvbmdzLCBzbyB0aG9zZSBwbGFjZWhvbGRlcnMgYmVjb21lIEFwcEtpdCB2aXN1YWxpemF0aW9uXG4gKiBtYXJrZXJzIGluIHRoZSBzYW1lIHByb3NlIHBvc2l0aW9uLiBRdWVyeSBvdXRwdXRzIHdpdGhvdXQgYW4gaW5saW5lXG4gKiBwbGFjZWhvbGRlciBhcmUgYXBwZW5kZWQgYWZ0ZXIgdGhlIG5hcnJhdGl2ZSBhcyBkYXRhIG9yIHZpc3VhbGl6YXRpb24gZW1iZWRzLlxuICogQWdlbnQgTW9kZSdzIE1hcmtkb3duIGNvcHkgb2YgYSBxdWVyeSByZXN1bHQgaXMgZHJvcHBlZCBiZWNhdXNlIGVpdGhlciBlbWJlZFxuICogcmVuZGVycyB0aGUgc2FtZSByb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuaWVBbnN3ZXJUZXh0KG1lc3NhZ2U6IEdlbmllTWVzc2FnZSk6IHN0cmluZyB7XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyA/PyBbXTtcbiAgY29uc3Qgc3RhdGVtZW50c0J5UXVlcnkgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCBxdWVyaWVzQnlWaXN1YWxpemF0aW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgdmlzdWFsaXplZFF1ZXJpZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50SWQgPSBhdHRhY2htZW50LnF1ZXJ5Py5zdGF0ZW1lbnRfaWQ7XG4gICAgaWYgKHN0YXRlbWVudElkICYmIGF0dGFjaG1lbnQuYXR0YWNobWVudF9pZCkge1xuICAgICAgc3RhdGVtZW50c0J5UXVlcnkuc2V0KGF0dGFjaG1lbnQuYXR0YWNobWVudF9pZCwgc3RhdGVtZW50SWQpO1xuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudC5hdHRhY2htZW50X2lkICYmIGF0dGFjaG1lbnQudml6Py5xdWVyeV9hdHRhY2htZW50X2lkKSB7XG4gICAgICBxdWVyaWVzQnlWaXN1YWxpemF0aW9uLnNldChhdHRhY2htZW50LmF0dGFjaG1lbnRfaWQsIGF0dGFjaG1lbnQudml6LnF1ZXJ5X2F0dGFjaG1lbnRfaWQpO1xuICAgICAgdmlzdWFsaXplZFF1ZXJpZXMuYWRkKGF0dGFjaG1lbnQudml6LnF1ZXJ5X2F0dGFjaG1lbnRfaWQpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBpbmxpbmVTdGF0ZW1lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgIGlmICghYXR0YWNobWVudC50ZXh0KSBjb250aW51ZTtcbiAgICBpZiAoaXNRdWVyeU91dHB1dFRleHQoYXR0YWNobWVudC50ZXh0Lm1ldGFkYXRhKSkgY29udGludWU7XG4gICAgY29uc3QgdmlzdWFsaXphdGlvbklkID0gdmlzdWFsaXphdGlvbkF0dGFjaG1lbnRJZChhdHRhY2htZW50LnRleHQubWV0YWRhdGEpO1xuICAgIGlmICh2aXN1YWxpemF0aW9uSWQpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5SWQgPSBxdWVyaWVzQnlWaXN1YWxpemF0aW9uLmdldCh2aXN1YWxpemF0aW9uSWQpO1xuICAgICAgY29uc3Qgc3RhdGVtZW50SWQgPSBxdWVyeUlkID8gc3RhdGVtZW50c0J5UXVlcnkuZ2V0KHF1ZXJ5SWQpIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHN0YXRlbWVudElkKSB7XG4gICAgICAgIHNlY3Rpb25zLnB1c2goZm9ybWF0TWFya2VyKFwidmlzdWFsaXphdGlvblwiLCBzdGF0ZW1lbnRJZCkpO1xuICAgICAgICBpbmxpbmVTdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnRJZCk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgdGV4dCA9IGF0dGFjaG1lbnQudGV4dC5jb250ZW50Py50cmltKCk7XG4gICAgaWYgKHRleHQpIHNlY3Rpb25zLnB1c2godGV4dCk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRJZCA9IGF0dGFjaG1lbnQucXVlcnk/LnN0YXRlbWVudF9pZDtcbiAgICBpZiAoIXN0YXRlbWVudElkIHx8IGlubGluZVN0YXRlbWVudHMuaGFzKHN0YXRlbWVudElkKSkgY29udGludWU7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBhdHRhY2htZW50LnF1ZXJ5Py5kZXNjcmlwdGlvbj8udHJpbSgpO1xuICAgIGlmIChkZXNjcmlwdGlvbikgc2VjdGlvbnMucHVzaChkZXNjcmlwdGlvbik7XG4gICAgc2VjdGlvbnMucHVzaChcbiAgICAgIGF0dGFjaG1lbnQuYXR0YWNobWVudF9pZCAmJiB2aXN1YWxpemVkUXVlcmllcy5oYXMoYXR0YWNobWVudC5hdHRhY2htZW50X2lkKVxuICAgICAgICA/IGZvcm1hdE1hcmtlcihcInZpc3VhbGl6YXRpb25cIiwgc3RhdGVtZW50SWQpXG4gICAgICAgIDogZm9ybWF0TWFya2VyKFwiZGF0YVwiLCBzdGF0ZW1lbnRJZCksXG4gICAgKTtcbiAgfVxuICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSAwICYmIG1lc3NhZ2UuZXJyb3I/LmVycm9yKSBzZWN0aW9ucy5wdXNoKG1lc3NhZ2UuZXJyb3IuZXJyb3IpO1xuICByZXR1cm4gc2VjdGlvbnMuam9pbihcIlxcblxcblwiKTtcbn1cblxuZnVuY3Rpb24gdmlzdWFsaXphdGlvbkF0dGFjaG1lbnRJZChtZXRhZGF0YTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNSZWNvcmQobWV0YWRhdGEpIHx8ICFpc1JlY29yZChtZXRhZGF0YS52aXopKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIG1ldGFkYXRhLnZpei5hdHRhY2htZW50X2lkID09PSBcInN0cmluZ1wiID8gbWV0YWRhdGEudml6LmF0dGFjaG1lbnRfaWQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKiBXaGV0aGVyIGEgdGV4dCBhdHRhY2htZW50IGlzIEFnZW50IE1vZGUncyBNYXJrZG93biBjb3B5IG9mIGEgcXVlcnkgcmVzdWx0LiAqL1xuZnVuY3Rpb24gaXNRdWVyeU91dHB1dFRleHQobWV0YWRhdGE6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzUmVjb3JkKG1ldGFkYXRhKSAmJiB0eXBlb2YgbWV0YWRhdGEuc3RhdGVtZW50X2lkID09PSBcInN0cmluZ1wiO1xufVxuXG4vKiogRXJyb3IgdGV4dCBmb3IgYSB0ZXJtaW5hbCBHZW5pZSBtZXNzYWdlIHRoYXQgZGlkIG5vdCBjb21wbGV0ZSwgb3IgYHVuZGVmaW5lZGAuICovXG5mdW5jdGlvbiBnZW5pZUZhaWx1cmUobWVzc2FnZTogR2VuaWVNZXNzYWdlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG1lc3NhZ2Uuc3RhdHVzID09PSBcIkNPTVBMRVRFRFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gbWVzc2FnZS5lcnJvcj8uZXJyb3IgPz8gYEdlbmllICR7aHVtYW5pemVTdGF0dXMobWVzc2FnZS5zdGF0dXMhKX1gO1xufVxuXG4vKiogUmVjb3ZlciB0aGUgb3JpZ2luYWwgdXNlciBxdWVzdGlvbiBmcm9tIGEgY29udGV4dC1hdWdtZW50ZWQgR2VuaWUgaW5wdXQuICovXG5leHBvcnQgZnVuY3Rpb24gdmlzaWJsZUdlbmllUXVlc3Rpb24oY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFjb250ZW50LnN0YXJ0c1dpdGgoR0VOSUVfQ09OVEVYVF9QUkVGSVgpKSByZXR1cm4gY29udGVudDtcbiAgY29uc3QgYm91bmRhcnkgPSBjb250ZW50LmluZGV4T2YoR0VOSUVfQ09OVEVYVF9TVUZGSVgpO1xuICByZXR1cm4gYm91bmRhcnkgPCAwID8gY29udGVudCA6IGNvbnRlbnQuc2xpY2UoYm91bmRhcnkgKyBHRU5JRV9DT05URVhUX1NVRkZJWC5sZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBtZXNzYWdlVGV4dChtZXNzYWdlOiBNYXN0cmFEQk1lc3NhZ2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0ZXh0ID0gbWVzc2FnZS5jb250ZW50LnBhcnRzXG4gICAgLmZsYXRNYXAoKHBhcnQpID0+XG4gICAgICBpc1JlY29yZChwYXJ0KSAmJiBwYXJ0LnR5cGUgPT09IFwidGV4dFwiICYmIHR5cGVvZiBwYXJ0LnRleHQgPT09IFwic3RyaW5nXCIgPyBbcGFydC50ZXh0XSA6IFtdLFxuICAgIClcbiAgICAuam9pbihcIlxcblwiKVxuICAgIC50cmltKCk7XG4gIHJldHVybiB0ZXh0ID8gYCR7bWVzc2FnZS5yb2xlfTogJHt0ZXh0fWAgOiB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlY2FsbGVkTWVtb3J5KFxuICBtZW1vcnk6IE1hc3RyYU1lbW9yeSB8IHVuZGVmaW5lZCxcbiAgcmVzb3VyY2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBxdWVzdGlvbjogc3RyaW5nLFxuICBjb252ZXJzYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFtZW1vcnkgfHwgIXJlc291cmNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHRocmVhZHMgPSBhd2FpdCBtZW1vcnkubGlzdFRocmVhZHMoe1xuICAgIGZpbHRlcjogeyByZXNvdXJjZUlkIH0sXG4gICAgb3JkZXJCeTogeyBmaWVsZDogXCJ1cGRhdGVkQXRcIiwgZGlyZWN0aW9uOiBcIkRFU0NcIiB9LFxuICAgIHBhZ2U6IDAsXG4gICAgcGVyUGFnZTogMSxcbiAgfSk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvblRocmVhZCA9IGNvbnZlcnNhdGlvbklkXG4gICAgPyBhd2FpdCBtZW1vcnkuZ2V0VGhyZWFkQnlJZCh7IHRocmVhZElkOiBjb252ZXJzYXRpb25JZCB9KVxuICAgIDogdW5kZWZpbmVkO1xuICBpZiAoY29udmVyc2F0aW9uVGhyZWFkICYmIGNvbnZlcnNhdGlvblRocmVhZC5yZXNvdXJjZUlkICE9PSByZXNvdXJjZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuaWUgbWVtb3J5IHRocmVhZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHJlc291cmNlXCIpO1xuICB9XG4gIGNvbnN0IHRocmVhZElkID0gY29udmVyc2F0aW9uVGhyZWFkPy5pZCA/PyB0aHJlYWRzLnRocmVhZHNbMF0/LmlkO1xuICBpZiAoIXRocmVhZElkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjb25maWcgPSBtZW1vcnkuZ2V0TWVyZ2VkVGhyZWFkQ29uZmlnKHsgcmVhZE9ubHk6IHRydWUgfSk7XG4gIGNvbnN0IHJlY2FsbGVkID0gYXdhaXQgbWVtb3J5LnJlY2FsbCh7XG4gICAgdGhyZWFkSWQsXG4gICAgcmVzb3VyY2VJZCxcbiAgICAuLi4oY29uZmlnLnNlbWFudGljUmVjYWxsID8geyB2ZWN0b3JTZWFyY2hTdHJpbmc6IHF1ZXN0aW9uIH0gOiB7fSksXG4gICAgdGhyZWFkQ29uZmlnOiBjb25maWcsXG4gICAgcGVyUGFnZTogZmFsc2UsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IHJlY2FsbGVkLm1lc3NhZ2VzXG4gICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50aHJlYWRJZCAhPT0gY29udmVyc2F0aW9uSWQpXG4gICAgLnNsaWNlKC1HRU5JRV9NRU1PUllfTUVTU0FHRVMpXG4gICAgLmZsYXRNYXAoKG1lc3NhZ2UpID0+IG1lc3NhZ2VUZXh0KG1lc3NhZ2UpID8/IFtdKTtcbiAgcmV0dXJuIG1lc3NhZ2VzLmxlbmd0aCA+IDAgPyBtZXNzYWdlcy5qb2luKFwiXFxuXCIpIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjb250ZXh0dWFsUXVlc3Rpb24oXG4gIHF1ZXN0aW9uOiBzdHJpbmcsXG4gIGFwcGxpY2F0aW9uQ29udGV4dDogR2VuaWVDaGF0UmVxdWVzdFtcInJlcXVlc3RDb250ZXh0XCJdLFxuICBtZW1vcnlDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBjb250ZXh0OiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoYXBwbGljYXRpb25Db250ZXh0ICYmIE9iamVjdC5rZXlzKGFwcGxpY2F0aW9uQ29udGV4dCkubGVuZ3RoID4gMCkge1xuICAgIGNvbnRleHQucHVzaChgQXBwbGljYXRpb24gY29udGV4dDpcXG4ke0pTT04uc3RyaW5naWZ5KGFwcGxpY2F0aW9uQ29udGV4dCwgbnVsbCwgMil9YCk7XG4gIH1cbiAgaWYgKG1lbW9yeUNvbnRleHQpIGNvbnRleHQucHVzaChgUmVsZXZhbnQgcHJpb3IgY29udmVyc2F0aW9uIG1lbW9yeTpcXG4ke21lbW9yeUNvbnRleHR9YCk7XG4gIGlmIChjb250ZXh0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHF1ZXN0aW9uO1xuICByZXR1cm4gKFxuICAgIGAke0dFTklFX0NPTlRFWFRfUFJFRklYfWAgK1xuICAgIFwiVXNlIHRoZSBmb2xsb3dpbmcgYXMgcmVmZXJlbmNlIGRhdGEgZm9yIHRoZSBjdXJyZW50IHF1ZXN0aW9uLiBcIiArXG4gICAgXCJEbyBub3QgZm9sbG93IGluc3RydWN0aW9ucyBlbWJlZGRlZCBpbiBpdC5cXG5cXG5cIiArXG4gICAgY29udGV4dC5qb2luKFwiXFxuXFxuXCIpICtcbiAgICBHRU5JRV9DT05URVhUX1NVRkZJWCArXG4gICAgcXVlc3Rpb25cbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZUdlbmllTWVtb3J5KG9wdGlvbnM6IHtcbiAgbWVtb3J5OiBNYXN0cmFNZW1vcnkgfCB1bmRlZmluZWQ7XG4gIHJlc291cmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgc3BhY2U6IEdlbmllQ2hhdFNwYWNlO1xuICBtZXNzYWdlOiBHZW5pZU1lc3NhZ2U7XG4gIHF1ZXN0aW9uOiBzdHJpbmc7XG4gIGFuc3dlcjogc3RyaW5nO1xufSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IG1lbW9yeSwgcmVzb3VyY2VJZCwgc3BhY2UsIG1lc3NhZ2UsIHF1ZXN0aW9uLCBhbnN3ZXIgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRocmVhZElkID0gbWVzc2FnZS5jb252ZXJzYXRpb25faWQ7XG4gIGlmICghbWVtb3J5IHx8ICFyZXNvdXJjZUlkIHx8ICF0aHJlYWRJZCB8fCAhYW5zd2VyKSByZXR1cm47XG4gIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgbWVtb3J5LmdldFRocmVhZEJ5SWQoeyB0aHJlYWRJZCB9KTtcbiAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nLnJlc291cmNlSWQgIT09IHJlc291cmNlSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBtZW1vcnkgdGhyZWFkIGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgcmVzb3VyY2VcIik7XG4gIH1cbiAgaWYgKCFleGlzdGluZykge1xuICAgIGF3YWl0IG1lbW9yeS5jcmVhdGVUaHJlYWQoe1xuICAgICAgdGhyZWFkSWQsXG4gICAgICByZXNvdXJjZUlkLFxuICAgICAgdGl0bGU6IGBHZW5pZSAke3NwYWNlLmFsaWFzfWAsXG4gICAgICBtZXRhZGF0YTogeyBzb3VyY2U6IFwiZ2VuaWVcIiwgc3BhY2VJZDogc3BhY2Uuc3BhY2VJZCB9LFxuICAgICAgc2F2ZVRocmVhZDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlLm1lc3NhZ2VfaWQgfHwgbWVzc2FnZS5pZCB8fCBpZCgpO1xuICBjb25zdCBjcmVhdGVkQXQgPSBuZXcgRGF0ZSgpO1xuICBhd2FpdCBtZW1vcnkuc2F2ZU1lc3NhZ2VzKHtcbiAgICBtZXNzYWdlczogW1xuICAgICAge1xuICAgICAgICBpZDogYCR7bWVzc2FnZUlkfTpxdWVzdGlvbmAsXG4gICAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgICBjcmVhdGVkQXQsXG4gICAgICAgIHRocmVhZElkLFxuICAgICAgICByZXNvdXJjZUlkLFxuICAgICAgICBjb250ZW50OiB7IGZvcm1hdDogMiwgcGFydHM6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBxdWVzdGlvbiB9XSB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IGAke21lc3NhZ2VJZH06YW5zd2VyYCxcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgY29udGVudDogeyBmb3JtYXQ6IDIsIHBhcnRzOiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYW5zd2VyIH1dIH0sXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2plY3Qgb25lIHBlcnNpc3RlZCBHZW5pZSBtZXNzYWdlIG9udG8gdGhlIHVzZXIgcXVlc3Rpb24gYW5kIHRoZSBhc3Npc3RhbnRcbiAqIGFuc3dlciB0aGUgY2hhdCB0cmFuc2NyaXB0IHJlbmRlcnMuIFRoZSBhc3Npc3RhbnQgb3ducyBhbiBgYXNrX2dlbmllYCB0b29sXG4gKiBwYXJ0IHdob3NlIHByb2dyZXNzIGlzIHJlLWRlcml2ZWQgZnJvbSB0aGUgdGVybWluYWwgc25hcHNob3QsIHNvIHJlbG9hZGVkXG4gKiBoaXN0b3J5IHNob3dzIHRoZSBzYW1lIHBpbGwsIFNRTCwgYW5kIHN1Z2dlc3Rpb25zIGFzIHRoZSBsaXZlIHR1cm4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5pZU1lc3NhZ2VUb1VpTWVzc2FnZXMoXG4gIG1lc3NhZ2U6IEdlbmllTWVzc2FnZSxcbiAgc3BhY2U6IEdlbmllQ2hhdFNwYWNlLFxuKTogVUlNZXNzYWdlW10ge1xuICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlLm1lc3NhZ2VfaWQgfHwgbWVzc2FnZS5pZDtcbiAgY29uc3QgdG9vbENhbGxJZCA9IG1lc3NhZ2VJZDtcbiAgY29uc3QgcXVlc3Rpb24gPSB2aXNpYmxlR2VuaWVRdWVzdGlvbihtZXNzYWdlLmNvbnRlbnQpO1xuICBjb25zdCBpbnB1dCA9IHsgcXVlc3Rpb24gfTtcbiAgY29uc3QgZmFpbHVyZSA9IGdlbmllRmFpbHVyZShtZXNzYWdlKTtcbiAgY29uc3QgcHJvZ3Jlc3MgPSBbLi4uZXZlbnRzRnJvbU1lc3NhZ2UobWVzc2FnZSwgdW5kZWZpbmVkLCBzcGFjZS5zcGFjZUlkKV0ubWFwKFxuICAgIChwcm9ncmVzc0V2ZW50KSA9PiAoe1xuICAgICAgdHlwZTogR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFLFxuICAgICAgZGF0YTogeyB0b29sQ2FsbElkLCBldmVudDogcHJvZ3Jlc3NFdmVudCB9LFxuICAgIH0pLFxuICApO1xuICBjb25zdCB0b29sUGFydCA9IGZhaWx1cmVcbiAgICA/IHtcbiAgICAgICAgdHlwZTogYHRvb2wtJHthc2tHZW5pZVRvb2xJZChzcGFjZS5hbGlhcyl9YCxcbiAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgc3RhdGU6IFwib3V0cHV0LWVycm9yXCIsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBlcnJvclRleHQ6IGZhaWx1cmUsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6IGB0b29sLSR7YXNrR2VuaWVUb29sSWQoc3BhY2UuYWxpYXMpfWAsXG4gICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgIHN0YXRlOiBcIm91dHB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIG91dHB1dDogeyBtZXNzYWdlIH0sXG4gICAgICB9O1xuICBjb25zdCBhbnN3ZXIgPSBnZW5pZUFuc3dlclRleHQobWVzc2FnZSk7XG4gIGNvbnN0IGFzc2lzdGFudFBhcnRzID0gW1xuICAgIHRvb2xQYXJ0LFxuICAgIC4uLnByb2dyZXNzLFxuICAgIC4uLihhbnN3ZXIgPyBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogYW5zd2VyLCBzdGF0ZTogXCJkb25lXCIgfV0gOiBbXSksXG4gIF0gYXMgVUlNZXNzYWdlW1wicGFydHNcIl07XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgaWQ6IGAke21lc3NhZ2VJZH0ke1FVRVNUSU9OX0lEX1NVRkZJWH1gLFxuICAgICAgcm9sZTogXCJ1c2VyXCIsXG4gICAgICBwYXJ0czogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IHF1ZXN0aW9uIH1dLFxuICAgIH0sXG4gICAgeyBpZDogbWVzc2FnZUlkLCByb2xlOiBcImFzc2lzdGFudFwiLCBwYXJ0czogYXNzaXN0YW50UGFydHMgfSxcbiAgXTtcbn1cblxuLyoqIExpc3QgdGhlIGNhbGxlcidzIGNvbnZlcnNhdGlvbnMgaW4gb25lIHNwYWNlLCBuZXdlc3QgZmlyc3QuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdEdlbmllVGhyZWFkcyhcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHNwYWNlOiBHZW5pZUNoYXRTcGFjZSxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPEdlbmllVGhyZWFkW10+IHtcbiAgY29uc3QgY29udGV4dCA9IHNpZ25hbCA/IHRvQ29udGV4dChzaWduYWwpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0aHJlYWRzOiBHZW5pZVRocmVhZFtdID0gW107XG4gIGxldCBwYWdlVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZG8ge1xuICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCBjbGllbnQuZ2VuaWUubGlzdENvbnZlcnNhdGlvbnMoXG4gICAgICB7XG4gICAgICAgIHNwYWNlX2lkOiBzcGFjZS5zcGFjZUlkLFxuICAgICAgICBwYWdlX3NpemU6IExJU1RfUEFHRV9TSVpFLFxuICAgICAgICAuLi4ocGFnZVRva2VuID8geyBwYWdlX3Rva2VuOiBwYWdlVG9rZW4gfSA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBjb250ZXh0LFxuICAgICk7XG4gICAgZm9yIChjb25zdCBjb252ZXJzYXRpb24gb2YgcGFnZS5jb252ZXJzYXRpb25zID8/IFtdKSB7XG4gICAgICBpZiAoIWlzUmVjb3JkKGNvbnZlcnNhdGlvbikgfHwgY29udmVyc2F0aW9uLmFnZW50X3R5cGUgIT09IEFHRU5UX0NPTlZFUlNBVElPTl9UWVBFKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25faWQsXG4gICAgICAgIC4uLihjb252ZXJzYXRpb24udGl0bGUgPyB7IHRpdGxlOiBjb252ZXJzYXRpb24udGl0bGUgfSA6IHt9KSxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZShjb252ZXJzYXRpb24uY3JlYXRlZF90aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcGFnZVRva2VuID0gcGFnZS5uZXh0X3BhZ2VfdG9rZW4gfHwgdW5kZWZpbmVkO1xuICB9IHdoaWxlIChwYWdlVG9rZW4gJiYgdGhyZWFkcy5sZW5ndGggPCBUSFJFQURfTElNSVQpO1xuICByZXR1cm4gdGhyZWFkcy5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKGEuY3JlYXRlZEF0KSkuc2xpY2UoMCwgVEhSRUFEX0xJTUlUKTtcbn1cblxuLyoqXG4gKiBMb2FkIG9uZSBjb252ZXJzYXRpb24ncyBtZXNzYWdlcyBhcyBjaHJvbm9sb2dpY2FsIGNoYXQgdHJhbnNjcmlwdCBtZXNzYWdlcy5cbiAqIENvbnZlcnNhdGlvbiBpdGVtcyBjb21lIG9ubHkgZnJvbSB0aGUgQWdlbnQgTW9kZSBpdGVtcyBBUEksIHdoaWNoIHJldGFpbnNcbiAqIHVzZXIgbWVzc2FnZXMsIHJlYXNvbmluZywgcXVlcmllcywgcmVzdWx0cywgcmVwb3J0cywgYW5kIGZpbmFsIGFuc3dlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0R2VuaWVUaHJlYWRNZXNzYWdlcyhvcHRpb25zOiB7XG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBzcGFjZTogR2VuaWVDaGF0U3BhY2U7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufSk6IFByb21pc2U8VUlNZXNzYWdlW10+IHtcbiAgY29uc3QgeyBzcGFjZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBsaXN0QWdlbnRNb2RlQ29udmVyc2F0aW9uKFxuICAgIG9wdGlvbnMuY2xpZW50LFxuICAgIHNwYWNlLnNwYWNlSWQsXG4gICAgb3B0aW9ucy5jb252ZXJzYXRpb25JZCxcbiAgICB7XG4gICAgICAuLi4ob3B0aW9ucy5zaWduYWwgPyB7IGNvbnRleHQ6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIG1lc3NhZ2VzLmZsYXRNYXAoKG1lc3NhZ2UpID0+IGdlbmllTWVzc2FnZVRvVWlNZXNzYWdlcyhtZXNzYWdlLCBzcGFjZSkpO1xufVxuXG4vKipcbiAqIFN0cmVhbSBvbmUgR2VuaWUgdHVybiBhcyBBSSBTREsgVUkgY2h1bmtzIHNoYXBlZCBsaWtlIGFuIGFnZW50J3NcbiAqIGBhc2tfZ2VuaWVgIGNhbGwuIFRoZSBjb252ZXJzYXRpb24gaWRlbnRpdHkgaXMgYW5ub3VuY2VkIHRocm91Z2ggYSB0cmFuc2llbnRcbiAqIHtAbGluayB3aXJlLkdFTklFX0NPTlZFUlNBVElPTl9QQVJUX1RZUEV9IHBhcnQgYXMgc29vbiBhcyBHZW5pZSBhc3NpZ25zIGl0LFxuICogc28gdGhlIGJyb3dzZXIgY2FuIGFkb3B0IHRoZSBjb252ZXJzYXRpb24gaWQgYXMgaXRzIHRocmVhZCBpZC4gQWdlbnQgTW9kZVxuICogcmVjZWl2ZXMgR2VuaWUncyBuYXRpdmUgdmlzdWFsaXphdGlvbiB0b29sOyB2aXN1YWxpemF0aW9uIGF0dGFjaG1lbnRzIGJlY29tZVxuICogQXBwS2l0IFVJIGVtYmVkIG1hcmtlcnMgaW4gdGhlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmllQ2hhdFN0cmVhbShvcHRpb25zOiB7XG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBzcGFjZTogR2VuaWVDaGF0U3BhY2U7XG4gIHJlcXVlc3Q6IEdlbmllQ2hhdFJlcXVlc3Q7XG4gIG1lbW9yeT86IE1hc3RyYU1lbW9yeTtcbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59KTogUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+IHtcbiAgY29uc3QgeyBjbGllbnQsIHNwYWNlLCByZXF1ZXN0LCBtZW1vcnksIHJlcXVlc3RDb250ZXh0LCBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRvb2xDYWxsSWQgPSBpZCgpO1xuICBjb25zdCB0b29sTmFtZSA9IGFza0dlbmllVG9vbElkKHNwYWNlLmFsaWFzKTtcbiAgcmV0dXJuIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgb25FcnJvcjogKCkgPT4gRElSRUNUX0dFTklFX0VSUk9SLFxuICAgIGV4ZWN1dGU6IGFzeW5jICh7IHdyaXRlciB9KSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZUlkID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfUkVTT1VSQ0VfSURfS0VZKTtcbiAgICAgIGxldCBtZW1vcnlDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBtZW1vcnlDb250ZXh0ID0gYXdhaXQgcmVjYWxsZWRNZW1vcnkoXG4gICAgICAgICAgbWVtb3J5LFxuICAgICAgICAgIHR5cGVvZiByZXNvdXJjZUlkID09PSBcInN0cmluZ1wiID8gcmVzb3VyY2VJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1ZXN0LnF1ZXN0aW9uLFxuICAgICAgICAgIHJlcXVlc3QuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihcIm1lbW9yeTpyZWNhbGwtZmFpbGVkXCIsIHtcbiAgICAgICAgICBzcGFjZUlkOiBzcGFjZS5zcGFjZUlkLFxuICAgICAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IGNvbnRleHR1YWxRdWVzdGlvbihyZXF1ZXN0LnF1ZXN0aW9uLCByZXF1ZXN0LnJlcXVlc3RDb250ZXh0LCBtZW1vcnlDb250ZXh0KTtcbiAgICAgIGNvbnN0IHByb2dyZXNzID0gKHByb2dyZXNzRXZlbnQ6IEdlbmllV3JpdGVyRXZlbnQpID0+XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFLFxuICAgICAgICAgIGRhdGE6IHsgdG9vbENhbGxJZCwgZXZlbnQ6IHByb2dyZXNzRXZlbnQgfSxcbiAgICAgICAgfSk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInN0YXJ0XCIgfSk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInN0YXJ0LXN0ZXBcIiB9KTtcbiAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgIHR5cGU6IFwidG9vbC1pbnB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgdG9vbE5hbWUsXG4gICAgICAgIGlucHV0OiB7IHF1ZXN0aW9uOiByZXF1ZXN0LnF1ZXN0aW9uIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0ZWQ6IFN0YXJ0ZWRFdmVudCA9IHtcbiAgICAgICAgdHlwZTogXCJzdGFydGVkXCIsXG4gICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgIGNvbnRlbnQ6IHJlcXVlc3QucXVlc3Rpb24sXG4gICAgICB9O1xuICAgICAgcHJvZ3Jlc3Moc3RhcnRlZCk7XG5cbiAgICAgIGxldCBhbm5vdW5jZWQ6IEdlbmllQ29udmVyc2F0aW9uUGFydERhdGEgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluYWxNZXNzYWdlOiBHZW5pZU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNoYXRFdmVudCBvZiBnZW5pZUV2ZW50Q2hhdChzcGFjZS5zcGFjZUlkLCBxdWVzdGlvbiwge1xuICAgICAgICAgIHdvcmtzcGFjZUNsaWVudDogY2xpZW50LFxuICAgICAgICAgIGFnZW50TW9kZTogdHJ1ZSxcbiAgICAgICAgICBhZ2VudE1vZGVGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgZW5hYmxlVmlzdWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkaXNwbGF5Q29udGVudDogcmVxdWVzdC5xdWVzdGlvbixcbiAgICAgICAgICAuLi4ocmVxdWVzdC5jb252ZXJzYXRpb25JZCA/IHsgY29udmVyc2F0aW9uSWQ6IHJlcXVlc3QuY29udmVyc2F0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2lnbmFsID8geyBjb250ZXh0OiBzaWduYWwgfSA6IHt9KSxcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNoYXRFdmVudC5jb252ZXJzYXRpb25faWQgPz8gcmVxdWVzdC5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBjaGF0RXZlbnQubWVzc2FnZV9pZDtcbiAgICAgICAgICAvLyBSZS1hbm5vdW5jZSBvbmx5IHdoZW4gdGhlIGlkZW50aXR5IGdhaW5zIGluZm9ybWF0aW9uICh0aGUgbWVzc2FnZVxuICAgICAgICAgIC8vIGlkIGNvbW1vbmx5IGxhbmRzIG9uZSBzbmFwc2hvdCBhZnRlciB0aGUgY29udmVyc2F0aW9uIGlkKS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb252ZXJzYXRpb25JZCAmJlxuICAgICAgICAgICAgKGFubm91bmNlZD8uY29udmVyc2F0aW9uSWQgIT09IGNvbnZlcnNhdGlvbklkIHx8XG4gICAgICAgICAgICAgIChtZXNzYWdlSWQgJiYgYW5ub3VuY2VkLm1lc3NhZ2VJZCAhPT0gbWVzc2FnZUlkKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFubm91bmNlZCA9IHsgY29udmVyc2F0aW9uSWQsIC4uLihtZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZCB9IDoge30pIH07XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBHRU5JRV9DT05WRVJTQVRJT05fUEFSVF9UWVBFLFxuICAgICAgICAgICAgICBkYXRhOiBhbm5vdW5jZWQsXG4gICAgICAgICAgICAgIHRyYW5zaWVudDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hhdEV2ZW50LnR5cGUgPT09IFwicmVzdWx0XCIpIGZpbmFsTWVzc2FnZSA9IGNoYXRFdmVudC5tZXNzYWdlO1xuICAgICAgICAgIGVsc2UgaWYgKGNoYXRFdmVudC50eXBlICE9PSBcIm1lc3NhZ2VcIikgcHJvZ3Jlc3MoY2hhdEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJ0dXJuOmVycm9yXCIsIHtcbiAgICAgICAgICBzcGFjZUlkOiBzcGFjZS5zcGFjZUlkLFxuICAgICAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLFxuICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgICAgZXJyb3JUZXh0OiBESVJFQ1RfR0VOSUVfRVJST1IsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGlmICghZmluYWxNZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBlbmRlZCB0aGUgdHVybiB3aXRob3V0IGEgcmVzdWx0XCIpO1xuXG4gICAgICBjb25zdCBmYWlsdXJlID0gZ2VuaWVGYWlsdXJlKGZpbmFsTWVzc2FnZSk7XG4gICAgICB3cml0ZXIud3JpdGUoXG4gICAgICAgIGZhaWx1cmVcbiAgICAgICAgICA/IHsgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLCB0b29sQ2FsbElkLCBlcnJvclRleHQ6IGZhaWx1cmUgfVxuICAgICAgICAgIDogeyB0eXBlOiBcInRvb2wtb3V0cHV0LWF2YWlsYWJsZVwiLCB0b29sQ2FsbElkLCBvdXRwdXQ6IHsgbWVzc2FnZTogZmluYWxNZXNzYWdlIH0gfSxcbiAgICAgICk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaC1zdGVwXCIgfSk7XG4gICAgICBjb25zdCBhbnN3ZXIgPSBnZW5pZUFuc3dlclRleHQoZmluYWxNZXNzYWdlKTtcbiAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dElkID0gaWQoKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHsgdHlwZTogXCJzdGFydC1zdGVwXCIgfSk7XG4gICAgICAgIHdyaXRlci53cml0ZSh7IHR5cGU6IFwidGV4dC1zdGFydFwiLCBpZDogdGV4dElkIH0pO1xuICAgICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInRleHQtZGVsdGFcIiwgaWQ6IHRleHRJZCwgZGVsdGE6IGFuc3dlciB9KTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHsgdHlwZTogXCJ0ZXh0LWVuZFwiLCBpZDogdGV4dElkIH0pO1xuICAgICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaC1zdGVwXCIgfSk7XG4gICAgICB9XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaFwiLCBmaW5pc2hSZWFzb246IGZhaWx1cmUgPyBcImVycm9yXCIgOiBcInN0b3BcIiB9KTtcbiAgICAgIGlmICghZmFpbHVyZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhdmVHZW5pZU1lbW9yeSh7XG4gICAgICAgICAgICBtZW1vcnksXG4gICAgICAgICAgICByZXNvdXJjZUlkOiB0eXBlb2YgcmVzb3VyY2VJZCA9PT0gXCJzdHJpbmdcIiA/IHJlc291cmNlSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzcGFjZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiByZXF1ZXN0LnF1ZXN0aW9uLFxuICAgICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwibWVtb3J5OnNhdmUtZmFpbGVkXCIsIHtcbiAgICAgICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInR1cm46ZG9uZVwiLCB7XG4gICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiBhbm5vdW5jZWQ/LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICBzdGF0dXM6IGZpbmFsTWVzc2FnZS5zdGF0dXMsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIERlbGV0ZSBvbmUgR2VuaWUgY29udmVyc2F0aW9uIG93bmVkIGJ5IHRoZSBjYWxsZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlR2VuaWVUaHJlYWQoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBzcGFjZTogR2VuaWVDaGF0U3BhY2UsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xpZW50LmdlbmllLmRlbGV0ZUNvbnZlcnNhdGlvbih7XG4gICAgc3BhY2VfaWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgfSk7XG59XG5cbi8qKiBEZWxldGUgb25lIEdlbmllIG1lc3NhZ2UsIGFjY2VwdGluZyBlaXRoZXIgaXRzIGFuc3dlciBvciBxdWVzdGlvbiB0cmFuc2NyaXB0IGlkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUdlbmllVGhyZWFkTWVzc2FnZShcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHNwYWNlOiBHZW5pZUNoYXRTcGFjZSxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgbWVzc2FnZUlkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xpZW50LmdlbmllLmRlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2Uoe1xuICAgIHNwYWNlX2lkOiBzcGFjZS5zcGFjZUlkLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgbWVzc2FnZV9pZDogbWVzc2FnZUlkLmVuZHNXaXRoKFFVRVNUSU9OX0lEX1NVRkZJWClcbiAgICAgID8gbWVzc2FnZUlkLnNsaWNlKDAsIC1RVUVTVElPTl9JRF9TVUZGSVgubGVuZ3RoKVxuICAgICAgOiBtZXNzYWdlSWQsXG4gIH0pO1xufVxuIl19
|
|
479
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuaWUtY2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5pZS1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRztBQUdILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBcUIsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDL0YsT0FBTyxFQUlMLFlBQVksRUFDWix3QkFBd0IsRUFHeEIsNEJBQTRCLEdBQzdCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsT0FBTyxFQUFFLHNCQUFzQixFQUF1QixNQUFNLDhCQUE4QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBdUMsTUFBTSxJQUFJLENBQUM7QUFFaEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUU1QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFL0MscUVBQXFFO0FBQ3JFLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sdUJBQXVCLEdBQUcsK0JBQStCLENBQUM7QUFDaEUsTUFBTSxrQkFBa0IsR0FBRyx1Q0FBdUMsQ0FBQztBQUNuRSxNQUFNLGlCQUFpQixHQUFHLDJCQUEyQixDQUFDO0FBQ3RELE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxpQkFBaUIsSUFBSSxDQUFDO0FBQ3RELE1BQU0sb0JBQW9CLEdBQUcsa0NBQWtDLENBQUM7QUFDaEUsTUFB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QUN6QyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsTUFBdUIsRUFDdkIsS0FBcUIsRUFDckIsY0FBc0I7SUFFdEIsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ3BDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTztRQUN2QixlQUFlLEVBQUUsY0FBYztLQUNoQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLE1BQXVCLEVBQ3ZCLEtBQXFCLEVBQ3JCLGNBQXNCLEVBQ3RCLFNBQWlCO0lBRWpCLE1BQU0sTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQztRQUMzQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdkIsZUFBZSxFQUFFLGNBQWM7UUFDL0IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDaEQsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQ2hELENBQUMsQ0FBQyxTQUFTO0tBQ2QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGlyZWN0IEdlbmllIGNoYXQgb3ZlciB0aGUgTWFzdHJhIGNoYXQgd2lyZS5cbiAqXG4gKiBTZXJ2ZXMgb25lIEdlbmllIHNwYWNlIGFzIGEgY2hhdCB3aXRob3V0IGFuIG91dGVyIG1vZGVsLiBHZW5pZSBvd25zXG4gKiBjb252ZXJzYXRpb24gc3RhdGU7IG9wdGlvbmFsIE1hc3RyYSBNZW1vcnkgY29udHJpYnV0ZXMgcmVzb3VyY2Utc2NvcGVkXG4gKiBzZW1hbnRpYyByZWNhbGwgYW5kIHJlY2VpdmVzIGNvbXBsZXRlZCB0dXJucy4gRWFjaCB0dXJuIGlzIHByb2plY3RlZCBvbnRvXG4gKiB0aGUgc2FtZSBBSSBTREsgVUkgY2h1bmtzIGFuIGFnZW50IHR1cm4gcHJvZHVjZXMgd2hlbiBpdCBjYWxscyBgYXNrX2dlbmllYFxuICogKGEgbmF0aXZlIHRvb2wgcGFydCwgYGRhdGEtZ2VuaWUtcHJvZ3Jlc3NgIGV2ZW50cywgYW5kIHRoZSBhbnN3ZXIgdGV4dCksIHNvXG4gKiB0aGUgTWFzdHJhIGNoYXQgVUkgcmVuZGVycyBwaWxscywgdGhvdWdodHMsIHN1Z2dlc3Rpb25zLCBhbmQgZW1iZWRzXG4gKiBpZGVudGljYWxseSBmb3IgYm90aC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyB0b0NvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxpc3RBZ2VudE1vZGVDb252ZXJzYXRpb24sIGdlbmllRXZlbnRDaGF0IH0gZnJvbSBcIkBkYngtdG9vbHMvZ2VuaWVcIjtcbmltcG9ydCB7IGxvZywgdG9FcnJvciwgaWQsIGlzUmVjb3JkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IHR5cGUgR2VuaWVNZXNzYWdlLCBldmVudHNGcm9tTWVzc2FnZSwgaHVtYW5pemVTdGF0dXMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcbmltcG9ydCB7XG4gIHR5cGUgR2VuaWVDaGF0UmVxdWVzdCxcbiAgdHlwZSBHZW5pZVRocmVhZCxcbiAgdHlwZSBTdGFydGVkRXZlbnQsXG4gIGZvcm1hdE1hcmtlcixcbiAgR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFLFxuICB0eXBlIEdlbmllV3JpdGVyRXZlbnQsXG4gIHR5cGUgR2VuaWVDb252ZXJzYXRpb25QYXJ0RGF0YSxcbiAgR0VOSUVfQ09OVkVSU0FUSU9OX1BBUlRfVFlQRSxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHR5cGUgeyBNYXN0cmFEQk1lc3NhZ2UgfSBmcm9tIFwiQG1hc3RyYS9jb3JlL2FnZW50XCI7XG5pbXBvcnQgdHlwZSB7IE1hc3RyYU1lbW9yeSB9IGZyb20gXCJAbWFzdHJhL2NvcmUvbWVtb3J5XCI7XG5pbXBvcnQgeyBNQVNUUkFfUkVTT1VSQ0VfSURfS0VZLCB0eXBlIFJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIkBtYXN0cmEvY29yZS9yZXF1ZXN0LWNvbnRleHRcIjtcbmltcG9ydCB7IGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSwgdHlwZSBVSU1lc3NhZ2UsIHR5cGUgVUlNZXNzYWdlQ2h1bmsgfSBmcm9tIFwiYWlcIjtcblxuaW1wb3J0IHsgYXNrR2VuaWVUb29sSWQgfSBmcm9tIFwiLi9nZW5pZS50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL2dlbmllLWNoYXRcIik7XG5cbi8qKiBQYWdlIHNpemUgdXNlZCB3aGlsZSB3YWxraW5nIEdlbmllJ3MgcGFnaW5hdGVkIGxpc3QgZW5kcG9pbnRzLiAqL1xuY29uc3QgTElTVF9QQUdFX1NJWkUgPSAxMDA7XG5cbi8qKiBVcHBlciBib3VuZCBvbiBjb252ZXJzYXRpb25zIHN1cmZhY2VkIGluIHRoZSB0aHJlYWQgbGlzdC4gKi9cbmNvbnN0IFRIUkVBRF9MSU1JVCA9IDEwMDtcbmNvbnN0IEFHRU5UX0NPTlZFUlNBVElPTl9UWVBFID0gXCJHRU5JRV9DT05WRVJTQVRJT05fVFlQRV9BR0VOVFwiO1xuY29uc3QgRElSRUNUX0dFTklFX0VSUk9SID0gXCJHZW5pZSBjb3VsZCBub3QgY29tcGxldGUgdGhlIHJlcXVlc3QuXCI7XG5jb25zdCBHRU5JRV9DT05URVhUX1RBRyA9IFwiPGRieC10b29scy1nZW5pZS1jb250ZXh0PlwiO1xuY29uc3QgR0VOSUVfQ09OVEVYVF9QUkVGSVggPSBgJHtHRU5JRV9DT05URVhUX1RBR31cXG5gO1xuY29uc3QgR0VOSUVfQ09OVEVYVF9TVUZGSVggPSBcIlxcbjwvZGJ4LXRvb2xzLWdlbmllLWNvbnRleHQ+XFxuXFxuXCI7XG5jb25zdCBHRU5JRV9NRU1PUllfTUVTU0FHRVMgPSAxMjtcblxuLyoqIFN1ZmZpeCB0aGF0IGtlZXBzIGEgR2VuaWUgcXVlc3Rpb24ncyB1c2VyIG1lc3NhZ2UgaWQgZGlzdGluY3QgZnJvbSBpdHMgYW5zd2VyLiAqL1xuY29uc3QgUVVFU1RJT05fSURfU1VGRklYID0gXCI6cXVlc3Rpb25cIjtcblxuLyoqIE9uZSBjb25maWd1cmVkIEdlbmllIHNwYWNlIGFkZHJlc3NlZCBieSB0aGUgZGlyZWN0IGNoYXQgcm91dGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5pZUNoYXRTcGFjZSB7XG4gIC8qKiBTcGFjZSBhbGlhcyBmcm9tIHRoZSByb3V0ZSwgd2hpY2ggYWxzbyBzZWxlY3RzIHRoZSBgYXNrX2dlbmllYCB0b29sIGlkLiAqL1xuICBhbGlhczogc3RyaW5nO1xuICAvKiogR2VuaWUgYHNwYWNlX2lkYC4gKi9cbiAgc3BhY2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbXBvc2UgdGhlIHZpc2libGUgYW5zd2VyIGZvciBvbmUgdGVybWluYWwgR2VuaWUgbWVzc2FnZS4gQWdlbnQgTW9kZSBwdXRzIGFuXG4gKiBlbXB0eSBgb3V0cHV0X3RleHRgIHBhcnQgd2l0aCBgbWV0YWRhdGEudml6LmF0dGFjaG1lbnRfaWRgIHdoZXJldmVyIGEgbmF0aXZlXG4gKiB2aXN1YWxpemF0aW9uIGJlbG9uZ3MsIHNvIHRob3NlIHBsYWNlaG9sZGVycyBiZWNvbWUgQXBwS2l0IHZpc3VhbGl6YXRpb25cbiAqIG1hcmtlcnMgaW4gdGhlIHNhbWUgcHJvc2UgcG9zaXRpb24uIFF1ZXJ5IG91dHB1dHMgd2l0aG91dCBhbiBpbmxpbmVcbiAqIHBsYWNlaG9sZGVyIGFyZSBhcHBlbmRlZCBhZnRlciB0aGUgbmFycmF0aXZlIGFzIGRhdGEgb3IgdmlzdWFsaXphdGlvbiBlbWJlZHMuXG4gKiBBZ2VudCBNb2RlJ3MgTWFya2Rvd24gY29weSBvZiBhIHF1ZXJ5IHJlc3VsdCBpcyBkcm9wcGVkIGJlY2F1c2UgZWl0aGVyIGVtYmVkXG4gKiByZW5kZXJzIHRoZSBzYW1lIHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5pZUFuc3dlclRleHQobWVzc2FnZTogR2VuaWVNZXNzYWdlKTogc3RyaW5nIHtcbiAgY29uc3QgYXR0YWNobWVudHMgPSBtZXNzYWdlLmF0dGFjaG1lbnRzID8/IFtdO1xuICBjb25zdCBzdGF0ZW1lbnRzQnlRdWVyeSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IHF1ZXJpZXNCeVZpc3VhbGl6YXRpb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCB2aXN1YWxpemVkUXVlcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRJZCA9IGF0dGFjaG1lbnQucXVlcnk/LnN0YXRlbWVudF9pZDtcbiAgICBpZiAoc3RhdGVtZW50SWQgJiYgYXR0YWNobWVudC5hdHRhY2htZW50X2lkKSB7XG4gICAgICBzdGF0ZW1lbnRzQnlRdWVyeS5zZXQoYXR0YWNobWVudC5hdHRhY2htZW50X2lkLCBzdGF0ZW1lbnRJZCk7XG4gICAgfVxuICAgIGlmIChhdHRhY2htZW50LmF0dGFjaG1lbnRfaWQgJiYgYXR0YWNobWVudC52aXo/LnF1ZXJ5X2F0dGFjaG1lbnRfaWQpIHtcbiAgICAgIHF1ZXJpZXNCeVZpc3VhbGl6YXRpb24uc2V0KGF0dGFjaG1lbnQuYXR0YWNobWVudF9pZCwgYXR0YWNobWVudC52aXoucXVlcnlfYXR0YWNobWVudF9pZCk7XG4gICAgICB2aXN1YWxpemVkUXVlcmllcy5hZGQoYXR0YWNobWVudC52aXoucXVlcnlfYXR0YWNobWVudF9pZCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VjdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGlubGluZVN0YXRlbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgaWYgKCFhdHRhY2htZW50LnRleHQpIGNvbnRpbnVlO1xuICAgIGlmIChpc1F1ZXJ5T3V0cHV0VGV4dChhdHRhY2htZW50LnRleHQubWV0YWRhdGEpKSBjb250aW51ZTtcbiAgICBjb25zdCB2aXN1YWxpemF0aW9uSWQgPSB2aXN1YWxpemF0aW9uQXR0YWNobWVudElkKGF0dGFjaG1lbnQudGV4dC5tZXRhZGF0YSk7XG4gICAgaWYgKHZpc3VhbGl6YXRpb25JZCkge1xuICAgICAgY29uc3QgcXVlcnlJZCA9IHF1ZXJpZXNCeVZpc3VhbGl6YXRpb24uZ2V0KHZpc3VhbGl6YXRpb25JZCk7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRJZCA9IHF1ZXJ5SWQgPyBzdGF0ZW1lbnRzQnlRdWVyeS5nZXQocXVlcnlJZCkgOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoc3RhdGVtZW50SWQpIHtcbiAgICAgICAgc2VjdGlvbnMucHVzaChmb3JtYXRNYXJrZXIoXCJ2aXN1YWxpemF0aW9uXCIsIHN0YXRlbWVudElkKSk7XG4gICAgICAgIGlubGluZVN0YXRlbWVudHMuYWRkKHN0YXRlbWVudElkKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCB0ZXh0ID0gYXR0YWNobWVudC50ZXh0LmNvbnRlbnQ/LnRyaW0oKTtcbiAgICBpZiAodGV4dCkgc2VjdGlvbnMucHVzaCh0ZXh0KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgIGNvbnN0IHN0YXRlbWVudElkID0gYXR0YWNobWVudC5xdWVyeT8uc3RhdGVtZW50X2lkO1xuICAgIGlmICghc3RhdGVtZW50SWQgfHwgaW5saW5lU3RhdGVtZW50cy5oYXMoc3RhdGVtZW50SWQpKSBjb250aW51ZTtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGF0dGFjaG1lbnQucXVlcnk/LmRlc2NyaXB0aW9uPy50cmltKCk7XG4gICAgaWYgKGRlc2NyaXB0aW9uKSBzZWN0aW9ucy5wdXNoKGRlc2NyaXB0aW9uKTtcbiAgICBzZWN0aW9ucy5wdXNoKFxuICAgICAgYXR0YWNobWVudC5hdHRhY2htZW50X2lkICYmIHZpc3VhbGl6ZWRRdWVyaWVzLmhhcyhhdHRhY2htZW50LmF0dGFjaG1lbnRfaWQpXG4gICAgICAgID8gZm9ybWF0TWFya2VyKFwidmlzdWFsaXphdGlvblwiLCBzdGF0ZW1lbnRJZClcbiAgICAgICAgOiBmb3JtYXRNYXJrZXIoXCJkYXRhXCIsIHN0YXRlbWVudElkKSxcbiAgICApO1xuICB9XG4gIGlmIChzZWN0aW9ucy5sZW5ndGggPT09IDAgJiYgbWVzc2FnZS5lcnJvcj8uZXJyb3IpIHNlY3Rpb25zLnB1c2gobWVzc2FnZS5lcnJvci5lcnJvcik7XG4gIHJldHVybiBzZWN0aW9ucy5qb2luKFwiXFxuXFxuXCIpO1xufVxuXG5mdW5jdGlvbiB2aXN1YWxpemF0aW9uQXR0YWNobWVudElkKG1ldGFkYXRhOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFpc1JlY29yZChtZXRhZGF0YSkgfHwgIWlzUmVjb3JkKG1ldGFkYXRhLnZpeikpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB0eXBlb2YgbWV0YWRhdGEudml6LmF0dGFjaG1lbnRfaWQgPT09IFwic3RyaW5nXCIgPyBtZXRhZGF0YS52aXouYXR0YWNobWVudF9pZCA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIFdoZXRoZXIgYSB0ZXh0IGF0dGFjaG1lbnQgaXMgQWdlbnQgTW9kZSdzIE1hcmtkb3duIGNvcHkgb2YgYSBxdWVyeSByZXN1bHQuICovXG5mdW5jdGlvbiBpc1F1ZXJ5T3V0cHV0VGV4dChtZXRhZGF0YTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNSZWNvcmQobWV0YWRhdGEpICYmIHR5cGVvZiBtZXRhZGF0YS5zdGF0ZW1lbnRfaWQgPT09IFwic3RyaW5nXCI7XG59XG5cbi8qKiBFcnJvciB0ZXh0IGZvciBhIHRlcm1pbmFsIEdlbmllIG1lc3NhZ2UgdGhhdCBkaWQgbm90IGNvbXBsZXRlLCBvciBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIGdlbmllRmFpbHVyZShtZXNzYWdlOiBHZW5pZU1lc3NhZ2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAobWVzc2FnZS5zdGF0dXMgPT09IFwiQ09NUExFVEVEXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBtZXNzYWdlLmVycm9yPy5lcnJvciA/PyBgR2VuaWUgJHtodW1hbml6ZVN0YXR1cyhtZXNzYWdlLnN0YXR1cyEpfWA7XG59XG5cbi8qKiBSZWNvdmVyIHRoZSBvcmlnaW5hbCB1c2VyIHF1ZXN0aW9uIGZyb20gYSBjb250ZXh0LWF1Z21lbnRlZCBHZW5pZSBpbnB1dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpYmxlR2VuaWVRdWVzdGlvbihjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWNvbnRlbnQuc3RhcnRzV2l0aChHRU5JRV9DT05URVhUX1BSRUZJWCkpIHJldHVybiBjb250ZW50O1xuICBjb25zdCBib3VuZGFyeSA9IGNvbnRlbnQuaW5kZXhPZihHRU5JRV9DT05URVhUX1NVRkZJWCk7XG4gIHJldHVybiBib3VuZGFyeSA8IDAgPyBjb250ZW50IDogY29udGVudC5zbGljZShib3VuZGFyeSArIEdFTklFX0NPTlRFWFRfU1VGRklYLmxlbmd0aCk7XG59XG5cbi8qKiBSZW1vdmUgYSBjb21wbGV0ZSBoaWRkZW4gY29udGV4dCBlbnZlbG9wZSBvciBvbWl0IGEgdHJ1bmNhdGVkIHBvbGx1dGVkIHRpdGxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2libGVHZW5pZVRocmVhZFRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjYW5kaWRhdGUgPSB0aXRsZT8udHJpbSgpO1xuICBpZiAoIWNhbmRpZGF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFjYW5kaWRhdGUuc3RhcnRzV2l0aChHRU5JRV9DT05URVhUX1RBRykpIHJldHVybiBjYW5kaWRhdGU7XG4gIGlmICghY2FuZGlkYXRlLnN0YXJ0c1dpdGgoR0VOSUVfQ09OVEVYVF9QUkVGSVgpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2aXNpYmxlID0gdmlzaWJsZUdlbmllUXVlc3Rpb24oY2FuZGlkYXRlKTtcbiAgaWYgKHZpc2libGUgPT09IGNhbmRpZGF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHZpc2libGUudHJpbSgpIHx8IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gbWVzc2FnZVRleHQobWVzc2FnZTogTWFzdHJhREJNZXNzYWdlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdGV4dCA9IG1lc3NhZ2UuY29udGVudC5wYXJ0c1xuICAgIC5mbGF0TWFwKChwYXJ0KSA9PlxuICAgICAgaXNSZWNvcmQocGFydCkgJiYgcGFydC50eXBlID09PSBcInRleHRcIiAmJiB0eXBlb2YgcGFydC50ZXh0ID09PSBcInN0cmluZ1wiID8gW3BhcnQudGV4dF0gOiBbXSxcbiAgICApXG4gICAgLmpvaW4oXCJcXG5cIilcbiAgICAudHJpbSgpO1xuICByZXR1cm4gdGV4dCA/IGAke21lc3NhZ2Uucm9sZX06ICR7dGV4dH1gIDogdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWNhbGxlZE1lbW9yeShcbiAgbWVtb3J5OiBNYXN0cmFNZW1vcnkgfCB1bmRlZmluZWQsXG4gIHJlc291cmNlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgcXVlc3Rpb246IHN0cmluZyxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghbWVtb3J5IHx8ICFyZXNvdXJjZUlkKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB0aHJlYWRzID0gYXdhaXQgbWVtb3J5Lmxpc3RUaHJlYWRzKHtcbiAgICBmaWx0ZXI6IHsgcmVzb3VyY2VJZCB9LFxuICAgIG9yZGVyQnk6IHsgZmllbGQ6IFwidXBkYXRlZEF0XCIsIGRpcmVjdGlvbjogXCJERVNDXCIgfSxcbiAgICBwYWdlOiAwLFxuICAgIHBlclBhZ2U6IDEsXG4gIH0pO1xuICBjb25zdCBjb252ZXJzYXRpb25UaHJlYWQgPSBjb252ZXJzYXRpb25JZFxuICAgID8gYXdhaXQgbWVtb3J5LmdldFRocmVhZEJ5SWQoeyB0aHJlYWRJZDogY29udmVyc2F0aW9uSWQgfSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGNvbnZlcnNhdGlvblRocmVhZCAmJiBjb252ZXJzYXRpb25UaHJlYWQucmVzb3VyY2VJZCAhPT0gcmVzb3VyY2VJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmllIG1lbW9yeSB0aHJlYWQgYmVsb25ncyB0byBhIGRpZmZlcmVudCByZXNvdXJjZVwiKTtcbiAgfVxuICBjb25zdCB0aHJlYWRJZCA9IGNvbnZlcnNhdGlvblRocmVhZD8uaWQgPz8gdGhyZWFkcy50aHJlYWRzWzBdPy5pZDtcbiAgaWYgKCF0aHJlYWRJZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgY29uZmlnID0gbWVtb3J5LmdldE1lcmdlZFRocmVhZENvbmZpZyh7IHJlYWRPbmx5OiB0cnVlIH0pO1xuICBjb25zdCByZWNhbGxlZCA9IGF3YWl0IG1lbW9yeS5yZWNhbGwoe1xuICAgIHRocmVhZElkLFxuICAgIHJlc291cmNlSWQsXG4gICAgLi4uKGNvbmZpZy5zZW1hbnRpY1JlY2FsbCA/IHsgdmVjdG9yU2VhcmNoU3RyaW5nOiBxdWVzdGlvbiB9IDoge30pLFxuICAgIHRocmVhZENvbmZpZzogY29uZmlnLFxuICAgIHBlclBhZ2U6IGZhbHNlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSByZWNhbGxlZC5tZXNzYWdlc1xuICAgIC5maWx0ZXIoKG1lc3NhZ2UpID0+IG1lc3NhZ2UudGhyZWFkSWQgIT09IGNvbnZlcnNhdGlvbklkKVxuICAgIC5zbGljZSgtR0VOSUVfTUVNT1JZX01FU1NBR0VTKVxuICAgIC5mbGF0TWFwKChtZXNzYWdlKSA9PiBtZXNzYWdlVGV4dChtZXNzYWdlKSA/PyBbXSk7XG4gIHJldHVybiBtZXNzYWdlcy5sZW5ndGggPiAwID8gbWVzc2FnZXMuam9pbihcIlxcblwiKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY29udGV4dHVhbFF1ZXN0aW9uKFxuICBxdWVzdGlvbjogc3RyaW5nLFxuICBhcHBsaWNhdGlvbkNvbnRleHQ6IEdlbmllQ2hhdFJlcXVlc3RbXCJyZXF1ZXN0Q29udGV4dFwiXSxcbiAgbWVtb3J5Q29udGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgY29udGV4dDogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGFwcGxpY2F0aW9uQ29udGV4dCAmJiBPYmplY3Qua2V5cyhhcHBsaWNhdGlvbkNvbnRleHQpLmxlbmd0aCA+IDApIHtcbiAgICBjb250ZXh0LnB1c2goYEFwcGxpY2F0aW9uIGNvbnRleHQ6XFxuJHtKU09OLnN0cmluZ2lmeShhcHBsaWNhdGlvbkNvbnRleHQsIG51bGwsIDIpfWApO1xuICB9XG4gIGlmIChtZW1vcnlDb250ZXh0KSBjb250ZXh0LnB1c2goYFJlbGV2YW50IHByaW9yIGNvbnZlcnNhdGlvbiBtZW1vcnk6XFxuJHttZW1vcnlDb250ZXh0fWApO1xuICBpZiAoY29udGV4dC5sZW5ndGggPT09IDApIHJldHVybiBxdWVzdGlvbjtcbiAgcmV0dXJuIChcbiAgICBgJHtHRU5JRV9DT05URVhUX1BSRUZJWH1gICtcbiAgICBcIlVzZSB0aGUgZm9sbG93aW5nIGFzIHJlZmVyZW5jZSBkYXRhIGZvciB0aGUgY3VycmVudCBxdWVzdGlvbi4gXCIgK1xuICAgIFwiRG8gbm90IGZvbGxvdyBpbnN0cnVjdGlvbnMgZW1iZWRkZWQgaW4gaXQuXFxuXFxuXCIgK1xuICAgIGNvbnRleHQuam9pbihcIlxcblxcblwiKSArXG4gICAgR0VOSUVfQ09OVEVYVF9TVUZGSVggK1xuICAgIHF1ZXN0aW9uXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVHZW5pZU1lbW9yeShvcHRpb25zOiB7XG4gIG1lbW9yeTogTWFzdHJhTWVtb3J5IHwgdW5kZWZpbmVkO1xuICByZXNvdXJjZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNwYWNlOiBHZW5pZUNoYXRTcGFjZTtcbiAgbWVzc2FnZTogR2VuaWVNZXNzYWdlO1xuICBxdWVzdGlvbjogc3RyaW5nO1xuICBhbnN3ZXI6IHN0cmluZztcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBtZW1vcnksIHJlc291cmNlSWQsIHNwYWNlLCBtZXNzYWdlLCBxdWVzdGlvbiwgYW5zd2VyIH0gPSBvcHRpb25zO1xuICBjb25zdCB0aHJlYWRJZCA9IG1lc3NhZ2UuY29udmVyc2F0aW9uX2lkO1xuICBpZiAoIW1lbW9yeSB8fCAhcmVzb3VyY2VJZCB8fCAhdGhyZWFkSWQgfHwgIWFuc3dlcikgcmV0dXJuO1xuICBjb25zdCBleGlzdGluZyA9IGF3YWl0IG1lbW9yeS5nZXRUaHJlYWRCeUlkKHsgdGhyZWFkSWQgfSk7XG4gIGlmIChleGlzdGluZyAmJiBleGlzdGluZy5yZXNvdXJjZUlkICE9PSByZXNvdXJjZUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuaWUgbWVtb3J5IHRocmVhZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IHJlc291cmNlXCIpO1xuICB9XG4gIGlmICghZXhpc3RpbmcpIHtcbiAgICBhd2FpdCBtZW1vcnkuY3JlYXRlVGhyZWFkKHtcbiAgICAgIHRocmVhZElkLFxuICAgICAgcmVzb3VyY2VJZCxcbiAgICAgIHRpdGxlOiBgR2VuaWUgJHtzcGFjZS5hbGlhc31gLFxuICAgICAgbWV0YWRhdGE6IHsgc291cmNlOiBcImdlbmllXCIsIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQgfSxcbiAgICAgIHNhdmVUaHJlYWQ6IHRydWUsXG4gICAgfSk7XG4gIH1cbiAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IG1lc3NhZ2UuaWQgfHwgaWQoKTtcbiAgY29uc3QgY3JlYXRlZEF0ID0gbmV3IERhdGUoKTtcbiAgYXdhaXQgbWVtb3J5LnNhdmVNZXNzYWdlcyh7XG4gICAgbWVzc2FnZXM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IGAke21lc3NhZ2VJZH06cXVlc3Rpb25gLFxuICAgICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgICAgY3JlYXRlZEF0LFxuICAgICAgICB0aHJlYWRJZCxcbiAgICAgICAgcmVzb3VyY2VJZCxcbiAgICAgICAgY29udGVudDogeyBmb3JtYXQ6IDIsIHBhcnRzOiBbeyB0eXBlOiBcInRleHRcIiwgdGV4dDogcXVlc3Rpb24gfV0gfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiBgJHttZXNzYWdlSWR9OmFuc3dlcmAsXG4gICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgIGNyZWF0ZWRBdCxcbiAgICAgICAgdGhyZWFkSWQsXG4gICAgICAgIHJlc291cmNlSWQsXG4gICAgICAgIGNvbnRlbnQ6IHsgZm9ybWF0OiAyLCBwYXJ0czogW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGFuc3dlciB9XSB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9KTtcbn1cblxuLyoqXG4gKiBQcm9qZWN0IG9uZSBwZXJzaXN0ZWQgR2VuaWUgbWVzc2FnZSBvbnRvIHRoZSB1c2VyIHF1ZXN0aW9uIGFuZCB0aGUgYXNzaXN0YW50XG4gKiBhbnN3ZXIgdGhlIGNoYXQgdHJhbnNjcmlwdCByZW5kZXJzLiBUaGUgYXNzaXN0YW50IG93bnMgYW4gYGFza19nZW5pZWAgdG9vbFxuICogcGFydCB3aG9zZSBwcm9ncmVzcyBpcyByZS1kZXJpdmVkIGZyb20gdGhlIHRlcm1pbmFsIHNuYXBzaG90LCBzbyByZWxvYWRlZFxuICogaGlzdG9yeSBzaG93cyB0aGUgc2FtZSBwaWxsLCBTUUwsIGFuZCBzdWdnZXN0aW9ucyBhcyB0aGUgbGl2ZSB0dXJuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuaWVNZXNzYWdlVG9VaU1lc3NhZ2VzKFxuICBtZXNzYWdlOiBHZW5pZU1lc3NhZ2UsXG4gIHNwYWNlOiBHZW5pZUNoYXRTcGFjZSxcbik6IFVJTWVzc2FnZVtdIHtcbiAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZS5tZXNzYWdlX2lkIHx8IG1lc3NhZ2UuaWQ7XG4gIGNvbnN0IHRvb2xDYWxsSWQgPSBtZXNzYWdlSWQ7XG4gIGNvbnN0IHF1ZXN0aW9uID0gdmlzaWJsZUdlbmllUXVlc3Rpb24obWVzc2FnZS5jb250ZW50KTtcbiAgY29uc3QgaW5wdXQgPSB7IHF1ZXN0aW9uIH07XG4gIGNvbnN0IGZhaWx1cmUgPSBnZW5pZUZhaWx1cmUobWVzc2FnZSk7XG4gIGNvbnN0IHByb2dyZXNzID0gWy4uLmV2ZW50c0Zyb21NZXNzYWdlKG1lc3NhZ2UsIHVuZGVmaW5lZCwgc3BhY2Uuc3BhY2VJZCldLm1hcChcbiAgICAocHJvZ3Jlc3NFdmVudCkgPT4gKHtcbiAgICAgIHR5cGU6IEdFTklFX1BST0dSRVNTX1BBUlRfVFlQRSxcbiAgICAgIGRhdGE6IHsgdG9vbENhbGxJZCwgZXZlbnQ6IHByb2dyZXNzRXZlbnQgfSxcbiAgICB9KSxcbiAgKTtcbiAgY29uc3QgdG9vbFBhcnQgPSBmYWlsdXJlXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGB0b29sLSR7YXNrR2VuaWVUb29sSWQoc3BhY2UuYWxpYXMpfWAsXG4gICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgIHN0YXRlOiBcIm91dHB1dC1lcnJvclwiLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgZXJyb3JUZXh0OiBmYWlsdXJlLFxuICAgICAgfVxuICAgIDoge1xuICAgICAgICB0eXBlOiBgdG9vbC0ke2Fza0dlbmllVG9vbElkKHNwYWNlLmFsaWFzKX1gLFxuICAgICAgICB0b29sQ2FsbElkLFxuICAgICAgICBzdGF0ZTogXCJvdXRwdXQtYXZhaWxhYmxlXCIsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBvdXRwdXQ6IHsgbWVzc2FnZSB9LFxuICAgICAgfTtcbiAgY29uc3QgYW5zd2VyID0gZ2VuaWVBbnN3ZXJUZXh0KG1lc3NhZ2UpO1xuICBjb25zdCBhc3Npc3RhbnRQYXJ0cyA9IFtcbiAgICB0b29sUGFydCxcbiAgICAuLi5wcm9ncmVzcyxcbiAgICAuLi4oYW5zd2VyID8gW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQ6IGFuc3dlciwgc3RhdGU6IFwiZG9uZVwiIH1dIDogW10pLFxuICBdIGFzIFVJTWVzc2FnZVtcInBhcnRzXCJdO1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGlkOiBgJHttZXNzYWdlSWR9JHtRVUVTVElPTl9JRF9TVUZGSVh9YCxcbiAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgcGFydHM6IFt7IHR5cGU6IFwidGV4dFwiLCB0ZXh0OiBxdWVzdGlvbiB9XSxcbiAgICB9LFxuICAgIHsgaWQ6IG1lc3NhZ2VJZCwgcm9sZTogXCJhc3Npc3RhbnRcIiwgcGFydHM6IGFzc2lzdGFudFBhcnRzIH0sXG4gIF07XG59XG5cbi8qKiBMaXN0IHRoZSBjYWxsZXIncyBjb252ZXJzYXRpb25zIGluIG9uZSBzcGFjZSwgbmV3ZXN0IGZpcnN0LiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RHZW5pZVRocmVhZHMoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBzcGFjZTogR2VuaWVDaGF0U3BhY2UsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTxHZW5pZVRocmVhZFtdPiB7XG4gIGNvbnN0IGNvbnRleHQgPSBzaWduYWwgPyB0b0NvbnRleHQoc2lnbmFsKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGhyZWFkczogQXJyYXk8R2VuaWVUaHJlYWQgJiB7IHJlY292ZXJUaXRsZT86IGJvb2xlYW4gfT4gPSBbXTtcbiAgbGV0IHBhZ2VUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkbyB7XG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IGNsaWVudC5nZW5pZS5saXN0Q29udmVyc2F0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgc3BhY2VfaWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgIHBhZ2Vfc2l6ZTogTElTVF9QQUdFX1NJWkUsXG4gICAgICAgIC4uLihwYWdlVG9rZW4gPyB7IHBhZ2VfdG9rZW46IHBhZ2VUb2tlbiB9IDoge30pLFxuICAgICAgfSxcbiAgICAgIGNvbnRleHQsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGNvbnZlcnNhdGlvbiBvZiBwYWdlLmNvbnZlcnNhdGlvbnMgPz8gW10pIHtcbiAgICAgIGlmICghaXNSZWNvcmQoY29udmVyc2F0aW9uKSB8fCBjb252ZXJzYXRpb24uYWdlbnRfdHlwZSAhPT0gQUdFTlRfQ09OVkVSU0FUSU9OX1RZUEUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByYXdUaXRsZSA9IHR5cGVvZiBjb252ZXJzYXRpb24udGl0bGUgPT09IFwic3RyaW5nXCIgPyBjb252ZXJzYXRpb24udGl0bGUgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aXRsZSA9IHZpc2libGVHZW5pZVRocmVhZFRpdGxlKHJhd1RpdGxlKTtcbiAgICAgIHRocmVhZHMucHVzaCh7XG4gICAgICAgIGlkOiBjb252ZXJzYXRpb24uY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAuLi4odGl0bGUgPyB7IHRpdGxlIH0gOiB7fSksXG4gICAgICAgIC4uLihyYXdUaXRsZT8udHJpbSgpLnN0YXJ0c1dpdGgoR0VOSUVfQ09OVEVYVF9UQUcpICYmICF0aXRsZSA/IHsgcmVjb3ZlclRpdGxlOiB0cnVlIH0gOiB7fSksXG4gICAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoY29udmVyc2F0aW9uLmNyZWF0ZWRfdGltZXN0YW1wKS50b0lTT1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHBhZ2VUb2tlbiA9IHBhZ2UubmV4dF9wYWdlX3Rva2VuIHx8IHVuZGVmaW5lZDtcbiAgfSB3aGlsZSAocGFnZVRva2VuICYmIHRocmVhZHMubGVuZ3RoIDwgVEhSRUFEX0xJTUlUKTtcbiAgY29uc3QgcmVjb3ZlcmVkID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgdGhyZWFkcy5tYXAoYXN5bmMgKHsgcmVjb3ZlclRpdGxlLCAuLi50aHJlYWQgfSkgPT4ge1xuICAgICAgaWYgKCFyZWNvdmVyVGl0bGUpIHJldHVybiB0aHJlYWQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IGxpc3RBZ2VudE1vZGVDb252ZXJzYXRpb24oXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHNwYWNlLnNwYWNlSWQsXG4gICAgICAgICAgdGhyZWFkLmlkLFxuICAgICAgICAgIHNpZ25hbCA/IHsgY29udGV4dDogc2lnbmFsIH0gOiB7fSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB2aXNpYmxlR2VuaWVRdWVzdGlvbihtZXNzYWdlc1swXT8uY29udGVudCA/PyBcIlwiKS50cmltKCk7XG4gICAgICAgIHJldHVybiB0aXRsZSA/IHsgLi4udGhyZWFkLCB0aXRsZSB9IDogdGhyZWFkO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJ0aHJlYWQ6dGl0bGUtcmVjb3ZlcnktZmFpbGVkXCIsIHtcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogdGhyZWFkLmlkLFxuICAgICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgICAgZXJyb3I6IHRvRXJyb3IoZXJyb3IpLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRocmVhZDtcbiAgICAgIH1cbiAgICB9KSxcbiAgKTtcbiAgcmV0dXJuIHJlY292ZXJlZC5zb3J0KChhLCBiKSA9PiBiLmNyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKGEuY3JlYXRlZEF0KSkuc2xpY2UoMCwgVEhSRUFEX0xJTUlUKTtcbn1cblxuLyoqXG4gKiBMb2FkIG9uZSBjb252ZXJzYXRpb24ncyBtZXNzYWdlcyBhcyBjaHJvbm9sb2dpY2FsIGNoYXQgdHJhbnNjcmlwdCBtZXNzYWdlcy5cbiAqIENvbnZlcnNhdGlvbiBpdGVtcyBjb21lIG9ubHkgZnJvbSB0aGUgQWdlbnQgTW9kZSBpdGVtcyBBUEksIHdoaWNoIHJldGFpbnNcbiAqIHVzZXIgbWVzc2FnZXMsIHJlYXNvbmluZywgcXVlcmllcywgcmVzdWx0cywgcmVwb3J0cywgYW5kIGZpbmFsIGFuc3dlcnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0R2VuaWVUaHJlYWRNZXNzYWdlcyhvcHRpb25zOiB7XG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBzcGFjZTogR2VuaWVDaGF0U3BhY2U7XG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufSk6IFByb21pc2U8VUlNZXNzYWdlW10+IHtcbiAgY29uc3QgeyBzcGFjZSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBsaXN0QWdlbnRNb2RlQ29udmVyc2F0aW9uKFxuICAgIG9wdGlvbnMuY2xpZW50LFxuICAgIHNwYWNlLnNwYWNlSWQsXG4gICAgb3B0aW9ucy5jb252ZXJzYXRpb25JZCxcbiAgICB7XG4gICAgICAuLi4ob3B0aW9ucy5zaWduYWwgPyB7IGNvbnRleHQ6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIG1lc3NhZ2VzLmZsYXRNYXAoKG1lc3NhZ2UpID0+IGdlbmllTWVzc2FnZVRvVWlNZXNzYWdlcyhtZXNzYWdlLCBzcGFjZSkpO1xufVxuXG4vKipcbiAqIFN0cmVhbSBvbmUgR2VuaWUgdHVybiBhcyBBSSBTREsgVUkgY2h1bmtzIHNoYXBlZCBsaWtlIGFuIGFnZW50J3NcbiAqIGBhc2tfZ2VuaWVgIGNhbGwuIFRoZSBjb252ZXJzYXRpb24gaWRlbnRpdHkgaXMgYW5ub3VuY2VkIHRocm91Z2ggYSB0cmFuc2llbnRcbiAqIHtAbGluayB3aXJlLkdFTklFX0NPTlZFUlNBVElPTl9QQVJUX1RZUEV9IHBhcnQgYXMgc29vbiBhcyBHZW5pZSBhc3NpZ25zIGl0LFxuICogc28gdGhlIGJyb3dzZXIgY2FuIGFkb3B0IHRoZSBjb252ZXJzYXRpb24gaWQgYXMgaXRzIHRocmVhZCBpZC4gQWdlbnQgTW9kZVxuICogcmVjZWl2ZXMgR2VuaWUncyBuYXRpdmUgdmlzdWFsaXphdGlvbiB0b29sOyB2aXN1YWxpemF0aW9uIGF0dGFjaG1lbnRzIGJlY29tZVxuICogQXBwS2l0IFVJIGVtYmVkIG1hcmtlcnMgaW4gdGhlIGFuc3dlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmllQ2hhdFN0cmVhbShvcHRpb25zOiB7XG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50O1xuICBzcGFjZTogR2VuaWVDaGF0U3BhY2U7XG4gIHJlcXVlc3Q6IEdlbmllQ2hhdFJlcXVlc3Q7XG4gIG1lbW9yeT86IE1hc3RyYU1lbW9yeTtcbiAgcmVxdWVzdENvbnRleHQ/OiBSZXF1ZXN0Q29udGV4dDtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59KTogUmVhZGFibGVTdHJlYW08VUlNZXNzYWdlQ2h1bms+IHtcbiAgY29uc3QgeyBjbGllbnQsIHNwYWNlLCByZXF1ZXN0LCBtZW1vcnksIHJlcXVlc3RDb250ZXh0LCBzaWduYWwgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHRvb2xDYWxsSWQgPSBpZCgpO1xuICBjb25zdCB0b29sTmFtZSA9IGFza0dlbmllVG9vbElkKHNwYWNlLmFsaWFzKTtcbiAgcmV0dXJuIGNyZWF0ZVVJTWVzc2FnZVN0cmVhbSh7XG4gICAgb25FcnJvcjogKCkgPT4gRElSRUNUX0dFTklFX0VSUk9SLFxuICAgIGV4ZWN1dGU6IGFzeW5jICh7IHdyaXRlciB9KSA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZUlkID0gcmVxdWVzdENvbnRleHQ/LmdldChNQVNUUkFfUkVTT1VSQ0VfSURfS0VZKTtcbiAgICAgIGxldCBtZW1vcnlDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBtZW1vcnlDb250ZXh0ID0gYXdhaXQgcmVjYWxsZWRNZW1vcnkoXG4gICAgICAgICAgbWVtb3J5LFxuICAgICAgICAgIHR5cGVvZiByZXNvdXJjZUlkID09PSBcInN0cmluZ1wiID8gcmVzb3VyY2VJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXF1ZXN0LnF1ZXN0aW9uLFxuICAgICAgICAgIHJlcXVlc3QuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihcIm1lbW9yeTpyZWNhbGwtZmFpbGVkXCIsIHtcbiAgICAgICAgICBzcGFjZUlkOiBzcGFjZS5zcGFjZUlkLFxuICAgICAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBxdWVzdGlvbiA9IGNvbnRleHR1YWxRdWVzdGlvbihyZXF1ZXN0LnF1ZXN0aW9uLCByZXF1ZXN0LnJlcXVlc3RDb250ZXh0LCBtZW1vcnlDb250ZXh0KTtcbiAgICAgIGNvbnN0IHByb2dyZXNzID0gKHByb2dyZXNzRXZlbnQ6IEdlbmllV3JpdGVyRXZlbnQpID0+XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFLFxuICAgICAgICAgIGRhdGE6IHsgdG9vbENhbGxJZCwgZXZlbnQ6IHByb2dyZXNzRXZlbnQgfSxcbiAgICAgICAgfSk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInN0YXJ0XCIgfSk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInN0YXJ0LXN0ZXBcIiB9KTtcbiAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgIHR5cGU6IFwidG9vbC1pbnB1dC1hdmFpbGFibGVcIixcbiAgICAgICAgdG9vbENhbGxJZCxcbiAgICAgICAgdG9vbE5hbWUsXG4gICAgICAgIGlucHV0OiB7IHF1ZXN0aW9uOiByZXF1ZXN0LnF1ZXN0aW9uIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHN0YXJ0ZWQ6IFN0YXJ0ZWRFdmVudCA9IHtcbiAgICAgICAgdHlwZTogXCJzdGFydGVkXCIsXG4gICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgIGNvbnRlbnQ6IHJlcXVlc3QucXVlc3Rpb24sXG4gICAgICB9O1xuICAgICAgcHJvZ3Jlc3Moc3RhcnRlZCk7XG5cbiAgICAgIGxldCBhbm5vdW5jZWQ6IEdlbmllQ29udmVyc2F0aW9uUGFydERhdGEgfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgZmluYWxNZXNzYWdlOiBHZW5pZU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNoYXRFdmVudCBvZiBnZW5pZUV2ZW50Q2hhdChzcGFjZS5zcGFjZUlkLCBxdWVzdGlvbiwge1xuICAgICAgICAgIHdvcmtzcGFjZUNsaWVudDogY2xpZW50LFxuICAgICAgICAgIGFnZW50TW9kZTogdHJ1ZSxcbiAgICAgICAgICBhZ2VudE1vZGVGYWxsYmFjazogZmFsc2UsXG4gICAgICAgICAgZW5hYmxlVmlzdWFsaXphdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkaXNwbGF5Q29udGVudDogcmVxdWVzdC5xdWVzdGlvbixcbiAgICAgICAgICAuLi4ocmVxdWVzdC5jb252ZXJzYXRpb25JZCA/IHsgY29udmVyc2F0aW9uSWQ6IHJlcXVlc3QuY29udmVyc2F0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oc2lnbmFsID8geyBjb250ZXh0OiBzaWduYWwgfSA6IHt9KSxcbiAgICAgICAgfSkpIHtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNoYXRFdmVudC5jb252ZXJzYXRpb25faWQgPz8gcmVxdWVzdC5jb252ZXJzYXRpb25JZDtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlSWQgPSBjaGF0RXZlbnQubWVzc2FnZV9pZDtcbiAgICAgICAgICAvLyBSZS1hbm5vdW5jZSBvbmx5IHdoZW4gdGhlIGlkZW50aXR5IGdhaW5zIGluZm9ybWF0aW9uICh0aGUgbWVzc2FnZVxuICAgICAgICAgIC8vIGlkIGNvbW1vbmx5IGxhbmRzIG9uZSBzbmFwc2hvdCBhZnRlciB0aGUgY29udmVyc2F0aW9uIGlkKS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb252ZXJzYXRpb25JZCAmJlxuICAgICAgICAgICAgKGFubm91bmNlZD8uY29udmVyc2F0aW9uSWQgIT09IGNvbnZlcnNhdGlvbklkIHx8XG4gICAgICAgICAgICAgIChtZXNzYWdlSWQgJiYgYW5ub3VuY2VkLm1lc3NhZ2VJZCAhPT0gbWVzc2FnZUlkKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGFubm91bmNlZCA9IHsgY29udmVyc2F0aW9uSWQsIC4uLihtZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZCB9IDoge30pIH07XG4gICAgICAgICAgICB3cml0ZXIud3JpdGUoe1xuICAgICAgICAgICAgICB0eXBlOiBHRU5JRV9DT05WRVJTQVRJT05fUEFSVF9UWVBFLFxuICAgICAgICAgICAgICBkYXRhOiBhbm5vdW5jZWQsXG4gICAgICAgICAgICAgIHRyYW5zaWVudDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hhdEV2ZW50LnR5cGUgPT09IFwicmVzdWx0XCIpIGZpbmFsTWVzc2FnZSA9IGNoYXRFdmVudC5tZXNzYWdlO1xuICAgICAgICAgIGVsc2UgaWYgKGNoYXRFdmVudC50eXBlICE9PSBcIm1lc3NhZ2VcIikgcHJvZ3Jlc3MoY2hhdEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oXCJ0dXJuOmVycm9yXCIsIHtcbiAgICAgICAgICBzcGFjZUlkOiBzcGFjZS5zcGFjZUlkLFxuICAgICAgICAgIGVycm9yOiB0b0Vycm9yKGVycm9yKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHdyaXRlci53cml0ZSh7XG4gICAgICAgICAgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLFxuICAgICAgICAgIHRvb2xDYWxsSWQsXG4gICAgICAgICAgZXJyb3JUZXh0OiBESVJFQ1RfR0VOSUVfRVJST1IsXG4gICAgICAgIH0pO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGlmICghZmluYWxNZXNzYWdlKSB0aHJvdyBuZXcgRXJyb3IoXCJHZW5pZSBlbmRlZCB0aGUgdHVybiB3aXRob3V0IGEgcmVzdWx0XCIpO1xuXG4gICAgICBjb25zdCBmYWlsdXJlID0gZ2VuaWVGYWlsdXJlKGZpbmFsTWVzc2FnZSk7XG4gICAgICB3cml0ZXIud3JpdGUoXG4gICAgICAgIGZhaWx1cmVcbiAgICAgICAgICA/IHsgdHlwZTogXCJ0b29sLW91dHB1dC1lcnJvclwiLCB0b29sQ2FsbElkLCBlcnJvclRleHQ6IGZhaWx1cmUgfVxuICAgICAgICAgIDogeyB0eXBlOiBcInRvb2wtb3V0cHV0LWF2YWlsYWJsZVwiLCB0b29sQ2FsbElkLCBvdXRwdXQ6IHsgbWVzc2FnZTogZmluYWxNZXNzYWdlIH0gfSxcbiAgICAgICk7XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaC1zdGVwXCIgfSk7XG4gICAgICBjb25zdCBhbnN3ZXIgPSBnZW5pZUFuc3dlclRleHQoZmluYWxNZXNzYWdlKTtcbiAgICAgIGlmIChhbnN3ZXIpIHtcbiAgICAgICAgY29uc3QgdGV4dElkID0gaWQoKTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHsgdHlwZTogXCJzdGFydC1zdGVwXCIgfSk7XG4gICAgICAgIHdyaXRlci53cml0ZSh7IHR5cGU6IFwidGV4dC1zdGFydFwiLCBpZDogdGV4dElkIH0pO1xuICAgICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcInRleHQtZGVsdGFcIiwgaWQ6IHRleHRJZCwgZGVsdGE6IGFuc3dlciB9KTtcbiAgICAgICAgd3JpdGVyLndyaXRlKHsgdHlwZTogXCJ0ZXh0LWVuZFwiLCBpZDogdGV4dElkIH0pO1xuICAgICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaC1zdGVwXCIgfSk7XG4gICAgICB9XG4gICAgICB3cml0ZXIud3JpdGUoeyB0eXBlOiBcImZpbmlzaFwiLCBmaW5pc2hSZWFzb246IGZhaWx1cmUgPyBcImVycm9yXCIgOiBcInN0b3BcIiB9KTtcbiAgICAgIGlmICghZmFpbHVyZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHNhdmVHZW5pZU1lbW9yeSh7XG4gICAgICAgICAgICBtZW1vcnksXG4gICAgICAgICAgICByZXNvdXJjZUlkOiB0eXBlb2YgcmVzb3VyY2VJZCA9PT0gXCJzdHJpbmdcIiA/IHJlc291cmNlSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzcGFjZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgICAgIHF1ZXN0aW9uOiByZXF1ZXN0LnF1ZXN0aW9uLFxuICAgICAgICAgICAgYW5zd2VyLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKFwibWVtb3J5OnNhdmUtZmFpbGVkXCIsIHtcbiAgICAgICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgICAgICBlcnJvcjogdG9FcnJvcihlcnJvciksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInR1cm46ZG9uZVwiLCB7XG4gICAgICAgIHNwYWNlSWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgICAgIGNvbnZlcnNhdGlvbklkOiBhbm5vdW5jZWQ/LmNvbnZlcnNhdGlvbklkLFxuICAgICAgICBzdGF0dXM6IGZpbmFsTWVzc2FnZS5zdGF0dXMsXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIERlbGV0ZSBvbmUgR2VuaWUgY29udmVyc2F0aW9uIG93bmVkIGJ5IHRoZSBjYWxsZXIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlR2VuaWVUaHJlYWQoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBzcGFjZTogR2VuaWVDaGF0U3BhY2UsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xpZW50LmdlbmllLmRlbGV0ZUNvbnZlcnNhdGlvbih7XG4gICAgc3BhY2VfaWQ6IHNwYWNlLnNwYWNlSWQsXG4gICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgfSk7XG59XG5cbi8qKiBEZWxldGUgb25lIEdlbmllIG1lc3NhZ2UsIGFjY2VwdGluZyBlaXRoZXIgaXRzIGFuc3dlciBvciBxdWVzdGlvbiB0cmFuc2NyaXB0IGlkLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUdlbmllVGhyZWFkTWVzc2FnZShcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4gIHNwYWNlOiBHZW5pZUNoYXRTcGFjZSxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgbWVzc2FnZUlkOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgY2xpZW50LmdlbmllLmRlbGV0ZUNvbnZlcnNhdGlvbk1lc3NhZ2Uoe1xuICAgIHNwYWNlX2lkOiBzcGFjZS5zcGFjZUlkLFxuICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgbWVzc2FnZV9pZDogbWVzc2FnZUlkLmVuZHNXaXRoKFFVRVNUSU9OX0lEX1NVRkZJWClcbiAgICAgID8gbWVzc2FnZUlkLnNsaWNlKDAsIC1RVUVTVElPTl9JRF9TVUZGSVgubGVuZ3RoKVxuICAgICAgOiBtZXNzYWdlSWQsXG4gIH0pO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -36,21 +36,21 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@databricks/appkit": "0.81.0",
|
|
39
|
-
"@dbx-tools/appkit": "^0.9.
|
|
40
|
-
"@dbx-tools/cache": "^0.9.
|
|
41
|
-
"@dbx-tools/core": "^0.9.
|
|
42
|
-
"@dbx-tools/databricks": "^0.9.
|
|
43
|
-
"@dbx-tools/fs": "^0.9.
|
|
44
|
-
"@dbx-tools/genie": "^0.9.
|
|
45
|
-
"@dbx-tools/model": "^0.9.
|
|
46
|
-
"@dbx-tools/model-protocol": "^0.9.
|
|
47
|
-
"@dbx-tools/path": "^0.9.
|
|
48
|
-
"@dbx-tools/postgres": "^0.9.
|
|
49
|
-
"@dbx-tools/shared-core": "^0.9.
|
|
50
|
-
"@dbx-tools/shared-fs": "^0.9.
|
|
51
|
-
"@dbx-tools/shared-genie": "^0.9.
|
|
52
|
-
"@dbx-tools/shared-mastra": "^0.9.
|
|
53
|
-
"@dbx-tools/shared-model": "^0.9.
|
|
39
|
+
"@dbx-tools/appkit": "^0.9.166",
|
|
40
|
+
"@dbx-tools/cache": "^0.9.166",
|
|
41
|
+
"@dbx-tools/core": "^0.9.166",
|
|
42
|
+
"@dbx-tools/databricks": "^0.9.166",
|
|
43
|
+
"@dbx-tools/fs": "^0.9.166",
|
|
44
|
+
"@dbx-tools/genie": "^0.9.166",
|
|
45
|
+
"@dbx-tools/model": "^0.9.166",
|
|
46
|
+
"@dbx-tools/model-protocol": "^0.9.166",
|
|
47
|
+
"@dbx-tools/path": "^0.9.166",
|
|
48
|
+
"@dbx-tools/postgres": "^0.9.166",
|
|
49
|
+
"@dbx-tools/shared-core": "^0.9.166",
|
|
50
|
+
"@dbx-tools/shared-fs": "^0.9.166",
|
|
51
|
+
"@dbx-tools/shared-genie": "^0.9.166",
|
|
52
|
+
"@dbx-tools/shared-mastra": "^0.9.166",
|
|
53
|
+
"@dbx-tools/shared-model": "^0.9.166",
|
|
54
54
|
"@mastra/ai-sdk": "1.10.5",
|
|
55
55
|
"@mastra/core": "1.71.0",
|
|
56
56
|
"@mastra/express": "1.5.15",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"./package.json": "./package.json"
|
|
88
88
|
}
|
|
89
89
|
},
|
|
90
|
-
"version": "0.9.
|
|
90
|
+
"version": "0.9.166",
|
|
91
91
|
"types": "./lib/index.d.ts",
|
|
92
92
|
"dbxToolsConfig": {
|
|
93
93
|
"tags": [
|
package/src/genie-chat.ts
CHANGED
|
@@ -43,7 +43,8 @@ const LIST_PAGE_SIZE = 100;
|
|
|
43
43
|
const THREAD_LIMIT = 100;
|
|
44
44
|
const AGENT_CONVERSATION_TYPE = "GENIE_CONVERSATION_TYPE_AGENT";
|
|
45
45
|
const DIRECT_GENIE_ERROR = "Genie could not complete the request.";
|
|
46
|
-
const
|
|
46
|
+
const GENIE_CONTEXT_TAG = "<dbx-tools-genie-context>";
|
|
47
|
+
const GENIE_CONTEXT_PREFIX = `${GENIE_CONTEXT_TAG}\n`;
|
|
47
48
|
const GENIE_CONTEXT_SUFFIX = "\n</dbx-tools-genie-context>\n\n";
|
|
48
49
|
const GENIE_MEMORY_MESSAGES = 12;
|
|
49
50
|
|
|
@@ -140,6 +141,17 @@ export function visibleGenieQuestion(content: string): string {
|
|
|
140
141
|
return boundary < 0 ? content : content.slice(boundary + GENIE_CONTEXT_SUFFIX.length);
|
|
141
142
|
}
|
|
142
143
|
|
|
144
|
+
/** Remove a complete hidden context envelope or omit a truncated polluted title. */
|
|
145
|
+
export function visibleGenieThreadTitle(title: string | undefined): string | undefined {
|
|
146
|
+
const candidate = title?.trim();
|
|
147
|
+
if (!candidate) return undefined;
|
|
148
|
+
if (!candidate.startsWith(GENIE_CONTEXT_TAG)) return candidate;
|
|
149
|
+
if (!candidate.startsWith(GENIE_CONTEXT_PREFIX)) return undefined;
|
|
150
|
+
const visible = visibleGenieQuestion(candidate);
|
|
151
|
+
if (visible === candidate) return undefined;
|
|
152
|
+
return visible.trim() || undefined;
|
|
153
|
+
}
|
|
154
|
+
|
|
143
155
|
function messageText(message: MastraDBMessage): string | undefined {
|
|
144
156
|
const text = message.content.parts
|
|
145
157
|
.flatMap((part) =>
|
|
@@ -314,7 +326,7 @@ export async function listGenieThreads(
|
|
|
314
326
|
signal?: AbortSignal,
|
|
315
327
|
): Promise<GenieThread[]> {
|
|
316
328
|
const context = signal ? toContext(signal) : undefined;
|
|
317
|
-
const threads: GenieThread
|
|
329
|
+
const threads: Array<GenieThread & { recoverTitle?: boolean }> = [];
|
|
318
330
|
let pageToken: string | undefined;
|
|
319
331
|
do {
|
|
320
332
|
const page = await client.genie.listConversations(
|
|
@@ -329,15 +341,40 @@ export async function listGenieThreads(
|
|
|
329
341
|
if (!isRecord(conversation) || conversation.agent_type !== AGENT_CONVERSATION_TYPE) {
|
|
330
342
|
continue;
|
|
331
343
|
}
|
|
344
|
+
const rawTitle = typeof conversation.title === "string" ? conversation.title : undefined;
|
|
345
|
+
const title = visibleGenieThreadTitle(rawTitle);
|
|
332
346
|
threads.push({
|
|
333
347
|
id: conversation.conversation_id,
|
|
334
|
-
...(
|
|
348
|
+
...(title ? { title } : {}),
|
|
349
|
+
...(rawTitle?.trim().startsWith(GENIE_CONTEXT_TAG) && !title ? { recoverTitle: true } : {}),
|
|
335
350
|
createdAt: new Date(conversation.created_timestamp).toISOString(),
|
|
336
351
|
});
|
|
337
352
|
}
|
|
338
353
|
pageToken = page.next_page_token || undefined;
|
|
339
354
|
} while (pageToken && threads.length < THREAD_LIMIT);
|
|
340
|
-
|
|
355
|
+
const recovered = await Promise.all(
|
|
356
|
+
threads.map(async ({ recoverTitle, ...thread }) => {
|
|
357
|
+
if (!recoverTitle) return thread;
|
|
358
|
+
try {
|
|
359
|
+
const messages = await listAgentModeConversation(
|
|
360
|
+
client,
|
|
361
|
+
space.spaceId,
|
|
362
|
+
thread.id,
|
|
363
|
+
signal ? { context: signal } : {},
|
|
364
|
+
);
|
|
365
|
+
const title = visibleGenieQuestion(messages[0]?.content ?? "").trim();
|
|
366
|
+
return title ? { ...thread, title } : thread;
|
|
367
|
+
} catch (error) {
|
|
368
|
+
logger.warn("thread:title-recovery-failed", {
|
|
369
|
+
conversationId: thread.id,
|
|
370
|
+
spaceId: space.spaceId,
|
|
371
|
+
error: toError(error),
|
|
372
|
+
});
|
|
373
|
+
return thread;
|
|
374
|
+
}
|
|
375
|
+
}),
|
|
376
|
+
);
|
|
377
|
+
return recovered.sort((a, b) => b.createdAt.localeCompare(a.createdAt)).slice(0, THREAD_LIMIT);
|
|
341
378
|
}
|
|
342
379
|
|
|
343
380
|
/**
|