@dbx-tools/appkit-mastra 0.9.68 → 0.9.70

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/README.md CHANGED
@@ -789,12 +789,12 @@ serialized envelopes. `appkit.mastra.identity.mode` records `obo` versus
789
789
  `service-principal`. The experiment UI's User and Tags columns read the OTel
790
790
  attributes Databricks documents for inbound traces: `user.id` (forwarded email
791
791
  or user id), `session.id` (Mastra thread id), `mlflow.spanType` (`AGENT` on the
792
- root, `GENIE` on `ask_genie`), `mlflow.traceTag.agent=true` on every chat, and
793
- `mlflow.traceTag.genie=true` when the turn called Genie. The `model` trace tag is
794
- the selected model id for a one-model turn, or an ordered JSON array string when
795
- the turn uses multiple models. `obo_auth=true` and `sp_auth=true` independently
796
- record whether each Databricks authentication mode was invoked during the turn,
797
- so a mixed-auth turn keeps both tags. `local=true` is added automatically when
792
+ root, `GENIE` on `ask_genie`), `mlflow.traceTag.agent=<first model id>` on every
793
+ chat, and `mlflow.traceTag.genie=true` when the turn called Genie. Model changes
794
+ later in the turn do not replace the `agent` tag, and no separate `model` tag is
795
+ written. `obo_auth=true` and `sp_auth=true` independently record whether each
796
+ Databricks authentication mode was invoked during the turn, so a mixed-auth
797
+ turn keeps both tags. `local=true` is added automatically when
798
798
  `isDatabricksAppEnv()` is false. The `@dbx-tools/tunnel` AppKit plugin injects
799
799
  `tunnel=portr|frp` and `tunnel_subdomain=<name>` through AppKit's generic
800
800
  request-tag context when the public host matches its tunnel configuration.
@@ -825,8 +825,8 @@ tracing. The plugin initializes the MLflow Node SDK, injects
825
825
  `DATABRICKS_CONFIG_PROFILE` into a `databricks://<profile>` tracking URI, and
826
826
  auto-detects the experiment's UC trace location. `MLFLOW_UC_TRACE_PREFIX` or the
827
827
  `MLFLOW_UC_CATALOG` / `MLFLOW_UC_SCHEMA` / `MLFLOW_UC_TABLE_PREFIX` trio can
828
- override that location. The local provider forwards only `agent=true` chat
829
- roots and their descendants, so unrelated AppKit HTTP, cache, and plugin spans
828
+ override that location. The local provider forwards only marked chat roots and
829
+ their descendants, so unrelated AppKit HTTP, cache, and plugin spans
830
830
  do not become traces. Before export it also writes the resolved email, user
831
831
  name, or resource id to MLflow's trace user field. Direct mode requires a
832
832
  UC-linked experiment. Inside a Databricks App (`isDatabricksAppEnv()`), this
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.68";
6
+ export const PACKAGE_VERSION = "0.9.70";
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";
@@ -81,7 +81,7 @@ export { TITLE_INSTRUCTIONS } from "./src/summarize.ts";
81
81
  export type { SummarizeOptions } from "./src/summarize.ts";
82
82
  export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR, CHAT_MESSAGES_ATTR, CHAT_RESPONSE_ATTR, CHAT_IDENTITY_ATTR, CHAT_GENIE_USED_ATTR, MLFLOW_SPAN_TYPE_ATTR, GEN_AI_OPERATION_NAME_ATTR, MLFLOW_USER_ATTR, MLFLOW_SESSION_ATTR, MLFLOW_SPAN_TYPE_AGENT, MLFLOW_SPAN_TYPE_GENIE } from "./src/telemetry.ts";
83
83
  export type { ChatTurnTelemetryOptions, ChatTraceTagValue } from "./src/telemetry.ts";
84
- export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_MODEL_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, MLFLOW_MODEL_TAG_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.ts";
84
+ export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, APPKIT_AGENT_TRACE_ROOT_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.ts";
85
85
  export type { SchemaIssues } from "./src/validation.ts";
86
86
  export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.ts";
87
87
  export type { WorkspaceMountContext, SkillFolderValue, SkillFolderOptions, WorkspaceMountContribution, WorkspaceMountResolver, DefaultSkillFolderName, WorkspaceSandboxSelection, CreateWorkspaceOptions } from "./src/workspaces.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.68";
2
+ export declare const PACKAGE_VERSION = "0.9.70";
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";
@@ -77,7 +77,7 @@ export { TITLE_INSTRUCTIONS } from "./src/summarize.ts";
77
77
  export type { SummarizeOptions } from "./src/summarize.ts";
78
78
  export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR, CHAT_MESSAGES_ATTR, CHAT_RESPONSE_ATTR, CHAT_IDENTITY_ATTR, CHAT_GENIE_USED_ATTR, MLFLOW_SPAN_TYPE_ATTR, GEN_AI_OPERATION_NAME_ATTR, MLFLOW_USER_ATTR, MLFLOW_SESSION_ATTR, MLFLOW_SPAN_TYPE_AGENT, MLFLOW_SPAN_TYPE_GENIE } from "./src/telemetry.ts";
79
79
  export type { ChatTurnTelemetryOptions, ChatTraceTagValue } from "./src/telemetry.ts";
80
- export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_MODEL_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, MLFLOW_MODEL_TAG_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.ts";
80
+ export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, APPKIT_AGENT_TRACE_ROOT_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.ts";
81
81
  export type { SchemaIssues } from "./src/validation.ts";
82
82
  export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.ts";
83
83
  export type { WorkspaceMountContext, SkillFolderValue, SkillFolderOptions, WorkspaceMountContribution, WorkspaceMountResolver, DefaultSkillFolderName, WorkspaceSandboxSelection, CreateWorkspaceOptions } from "./src/workspaces.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.68";
5
+ export const PACKAGE_VERSION = "0.9.70";
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";
@@ -60,7 +60,7 @@ export { STATEMENT_ROW_CAP } from "./src/statement.js";
60
60
  export { TYPOGRAPHY_RULE } from "./src/style.js";
61
61
  export { TITLE_INSTRUCTIONS } from "./src/summarize.js";
62
62
  export { TRACE_IO_LIMIT, MLFLOW_SPAN_INPUTS_ATTR, MLFLOW_SPAN_OUTPUTS_ATTR, CHAT_MESSAGES_ATTR, CHAT_RESPONSE_ATTR, CHAT_IDENTITY_ATTR, CHAT_GENIE_USED_ATTR, MLFLOW_SPAN_TYPE_ATTR, GEN_AI_OPERATION_NAME_ATTR, MLFLOW_USER_ATTR, MLFLOW_SESSION_ATTR, MLFLOW_SPAN_TYPE_AGENT, MLFLOW_SPAN_TYPE_GENIE } from "./src/telemetry.js";
63
- export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_MODEL_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, MLFLOW_MODEL_TAG_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.js";
63
+ export { MLFLOW_TRACE_TAG_PREFIX, MLFLOW_AGENT_TAG, MLFLOW_GENIE_TAG, MLFLOW_OBO_AUTH_TAG, MLFLOW_SP_AUTH_TAG, MLFLOW_LOCAL_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG_ATTR, APPKIT_AGENT_TRACE_ROOT_ATTR, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_LOCAL_TAG_ATTR } from "./src/trace-attributes.js";
64
64
  export { DEFAULT_SKILL_FOLDERS } from "./src/workspaces.js";
65
65
  export * from "./exports.js";
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7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LGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuVSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVwVSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjY4XCI7XG5leHBvcnQgKiBhcyBhZ2VudHMgZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0ICogYXMgY2hhcnQgZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgKiBhcyBjaGF0IGZyb20gXCIuL3NyYy9jaGF0LnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWcgZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgKiBhcyBldmFsdWF0aW9uIGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBmaWxlc3lzdGVtcyBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllIGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0ICogYXMgaWRlbnRpdHkgZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgKiBhcyBtY3AgZnJvbSBcIi4vc3JjL21jcC50c1wiO1xuZXhwb3J0ICogYXMgbWVtb3J5IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCAqIGFzIG1sZmxvdyBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbCBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCAqIGFzIG1vbnR5U2FuZGJveCBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0ICogYXMgb2JzZXJ2YWJpbGl0eSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NvcnMgZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCAqIGFzIHJlbW90ZVNraWxscyBmcm9tIFwiLi9zcmMvcmVtb3RlLXNraWxscy50c1wiO1xuZXhwb3J0ICogYXMgcmVzdCBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0ICogYXMgc2FuZGJveCBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0ICogYXMgc2VydmVyIGZyb20gXCIuL3NyYy9zZXJ2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHNlcnZpbmcgZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCAqIGFzIHNlcnZpbmdTYW5pdGl6ZSBmcm9tIFwiLi9zcmMvc2VydmluZy1zYW5pdGl6ZS50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxDYWNoZSBmcm9tIFwiLi9zcmMvc2tpbGwtY2FjaGUudHNcIjtcbmV4cG9ydCAqIGFzIHNraWxsUGF0aHMgZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgKiBhcyBzdGF0ZW1lbnQgZnJvbSBcIi4vc3JjL3N0YXRlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc3RvcmFnZVNjaGVtYSBmcm9tIFwiLi9zcmMvc3RvcmFnZS1zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHN0eWxlIGZyb20gXCIuL3NyYy9zdHlsZS50c1wiO1xuZXhwb3J0ICogYXMgc3VtbWFyaXplIGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCAqIGFzIHRlbGVtZXRyeSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgKiBhcyB0cmFjZUF0dHJpYnV0ZXMgZnJvbSBcIi4vc3JjL3RyYWNlLWF0dHJpYnV0ZXMudHNcIjtcbmV4cG9ydCAqIGFzIHZhbGlkYXRpb24gZnJvbSBcIi4vc3JjL3ZhbGlkYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHdvcmtzcGFjZXMgZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCAqIGFzIHdyaXRlciBmcm9tIFwiLi9zcmMvd3JpdGVyLnRzXCI7XG5leHBvcnQgeyBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfU1RZTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFUb29scywgQXBwS2l0VG9vbE9wdGlvbnMsIFRvb2xraXRPcHRpb25zLCBNYXN0cmFQbHVnaW5Ub29sa2l0UHJvdmlkZXIsIE1hc3RyYVBsdWdpbnMsIE1hc3RyYVRvb2xzRm4sIE1hc3RyYUFnZW50V29ya3NwYWNlUmVzb2x2ZXIsIE1hc3RyYUFnZW50RGVmaW5pdGlvbiwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uLCBNYXN0cmFTdG9yYWdlQ29uZmlnT3ZlcnJpZGUsIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlLCBBZ2VudERlZmF1bHRNb2RlbCwgQnVpbHRBZ2VudHMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgeyBjaGFydFBsYW5TY2hlbWEsIGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWEsIGNoYXJ0VG9vbE91dHB1dFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfVVNFUl9LRVksIE1BU1RSQV9VU0VSX05BTUVfS0VZLCBNQVNUUkFfVVNFUl9FTUFJTF9LRVksIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSwgTUFTVFJBX1NDT1BFU19LRVksIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTLCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFTa2lsbFNlYXJjaENvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFFdmFsRHJpdmVyT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlciB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfR0VOSUVfQUxJQVMsIEdFTklFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZVNwYWNlQ29uZmlnLCBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfRU5WLCBJREVOVElUWV9NT0RFUywgREVGQVVMVF9JREVOVElUWV9NT0RFLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIsIHJlcXVlc3RVc2VySWQsIHJlcXVlc3RVc2VyRW1haWwsIHVzZVNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkTWNwIH0gZnJvbSBcIi4vc3JjL21jcC50c1wiO1xuZXhwb3J0IHsgTWVtb3J5QnVpbGRlciB9IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCB7IEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBNbGZsb3dUcmFjZUluZm8sIExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9XT1JLU1BBQ0VfU0tJTExfQ0FDSEVfVFRMX01TLCBBcHBLaXRDYWNoZWRGaWxlU3lzdGVtIH0gZnJvbSBcIi4vc3JjL3NraWxsLWNhY2hlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcEtpdENhY2hlZEZpbGVTeXN0ZW1PcHRpb25zLCBDYWNoZWRXb3Jrc3BhY2VTa2lsbE1vdW50IH0gZnJvbSBcIi4vc3JjL3NraWxsLWNhY2hlLnRzXCI7XG5leHBvcnQgeyBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRIIH0gZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgeyBTVEFURU1FTlRfUk9XX0NBUCB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB7IFRZUE9HUkFQSFlfUlVMRSB9IGZyb20gXCIuL3NyYy9zdHlsZS50c1wiO1xuZXhwb3J0IHsgVElUTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdW1tYXJpemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHsgVFJBQ0VfSU9fTElNSVQsIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLCBNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIENIQVRfTUVTU0FHRVNfQVRUUiwgQ0hBVF9SRVNQT05TRV9BVFRSLCBDSEFUX0lERU5USVRZX0FUVFIsIENIQVRfR0VOSUVfVVNFRF9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FUVFIsIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBNTEZMT1dfVVNFUl9BVFRSLCBNTEZMT1dfU0VTU0lPTl9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGF0VHVyblRlbGVtZXRyeU9wdGlvbnMsIENoYXRUcmFjZVRhZ1ZhbHVlIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHsgTUxGTE9XX1RSQUNFX1RBR19QUkVGSVgsIE1MRkxPV19BR0VOVF9UQUcsIE1MRkxPV19HRU5JRV9UQUcsIE1MRkxPV19NT0RFTF9UQUcsIE1MRkxPV19PQk9fQVVUSF9UQUcsIE1MRkxPV19TUF9BVVRIX1RBRywgTUxGTE9XX0xPQ0FMX1RBRywgTUxGTE9XX0FHRU5UX1RBR19BVFRSLCBNTEZMT1dfR0VOSUVfVEFHX0FUVFIsIE1MRkxPV19NT0RFTF9UQUdfQVRUUiwgTUxGTE9XX09CT19BVVRIX1RBR19BVFRSLCBNTEZMT1dfU1BfQVVUSF9UQUdfQVRUUiwgTUxGTE9XX0xPQ0FMX1RBR19BVFRSIH0gZnJvbSBcIi4vc3JjL3RyYWNlLWF0dHJpYnV0ZXMudHNcIjtcbmV4cG9ydCB0eXBlIHsgU2NoZW1hSXNzdWVzIH0gZnJvbSBcIi4vc3JjL3ZhbGlkYXRpb24udHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfU0tJTExfRk9MREVSUyB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFdvcmtzcGFjZU1vdW50Q29udGV4dCwgU2tpbGxGb2xkZXJWYWx1ZSwgU2tpbGxGb2xkZXJPcHRpb25zLCBXb3Jrc3BhY2VNb3VudENvbnRyaWJ1dGlvbiwgV29ya3NwYWNlTW91bnRSZXNvbHZlciwgRGVmYXVsdFNraWxsRm9sZGVyTmFtZSwgV29ya3NwYWNlU2FuZGJveFNlbGVjdGlvbiwgQ3JlYXRlV29ya3NwYWNlT3B0aW9ucyB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2VzLnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9leHBvcnRzLnRzXCI7XG4iXX0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEtBQUssV0FBVyxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxLQUFLLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxLQUFLLFFBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEtBQUssTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxZQUFZLE1BQU0sd0JBQXdCLENBQUM7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LGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXhELE9BQU8sRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVuVSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6VCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjcwXCI7XG5leHBvcnQgKiBhcyBhZ2VudHMgZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0ICogYXMgY2hhcnQgZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgKiBhcyBjaGF0IGZyb20gXCIuL3NyYy9jaGF0LnRzXCI7XG5leHBvcnQgKiBhcyBjb25maWcgZnJvbSBcIi4vc3JjL2NvbmZpZy50c1wiO1xuZXhwb3J0ICogYXMgZGVmYXVsdHMgZnJvbSBcIi4vc3JjL2RlZmF1bHRzLnRzXCI7XG5leHBvcnQgKiBhcyBldmFsdWF0aW9uIGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgKiBhcyBmaWxlc3lzdGVtcyBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCAqIGFzIGdlbmllIGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0ICogYXMgaWRlbnRpdHkgZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgKiBhcyBtY3AgZnJvbSBcIi4vc3JjL21jcC50c1wiO1xuZXhwb3J0ICogYXMgbWVtb3J5IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCAqIGFzIG1sZmxvdyBmcm9tIFwiLi9zcmMvbWxmbG93LnRzXCI7XG5leHBvcnQgKiBhcyBtb2RlbCBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCAqIGFzIG1vbnR5U2FuZGJveCBmcm9tIFwiLi9zcmMvbW9udHktc2FuZGJveC50c1wiO1xuZXhwb3J0ICogYXMgb2JzZXJ2YWJpbGl0eSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0ICogYXMgcGx1Z2luIGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCAqIGFzIHByb2Nlc3NvcnMgZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCAqIGFzIHJlbW90ZVNraWxscyBmcm9tIFwiLi9zcmMvcmVtb3RlLXNraWxscy50c1wiO1xuZXhwb3J0ICogYXMgcmVzdCBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0ICogYXMgc2FuZGJveCBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0ICogYXMgc2VydmVyIGZyb20gXCIuL3NyYy9zZXJ2ZXIudHNcIjtcbmV4cG9ydCAqIGFzIHNlcnZpbmcgZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCAqIGFzIHNlcnZpbmdTYW5pdGl6ZSBmcm9tIFwiLi9zcmMvc2VydmluZy1zYW5pdGl6ZS50c1wiO1xuZXhwb3J0ICogYXMgc2tpbGxDYWNoZSBmcm9tIFwiLi9zcmMvc2tpbGwtY2FjaGUudHNcIjtcbmV4cG9ydCAqIGFzIHNraWxsUGF0aHMgZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgKiBhcyBzdGF0ZW1lbnQgZnJvbSBcIi4vc3JjL3N0YXRlbWVudC50c1wiO1xuZXhwb3J0ICogYXMgc3RvcmFnZVNjaGVtYSBmcm9tIFwiLi9zcmMvc3RvcmFnZS1zY2hlbWEudHNcIjtcbmV4cG9ydCAqIGFzIHN0eWxlIGZyb20gXCIuL3NyYy9zdHlsZS50c1wiO1xuZXhwb3J0ICogYXMgc3VtbWFyaXplIGZyb20gXCIuL3NyYy9zdW1tYXJpemUudHNcIjtcbmV4cG9ydCAqIGFzIHRlbGVtZXRyeSBmcm9tIFwiLi9zcmMvdGVsZW1ldHJ5LnRzXCI7XG5leHBvcnQgKiBhcyB0cmFjZUF0dHJpYnV0ZXMgZnJvbSBcIi4vc3JjL3RyYWNlLWF0dHJpYnV0ZXMudHNcIjtcbmV4cG9ydCAqIGFzIHZhbGlkYXRpb24gZnJvbSBcIi4vc3JjL3ZhbGlkYXRpb24udHNcIjtcbmV4cG9ydCAqIGFzIHdvcmtzcGFjZXMgZnJvbSBcIi4vc3JjL3dvcmtzcGFjZXMudHNcIjtcbmV4cG9ydCAqIGFzIHdyaXRlciBmcm9tIFwiLi9zcmMvd3JpdGVyLnRzXCI7XG5leHBvcnQgeyBGQUxMQkFDS19BR0VOVF9JRCwgREVGQVVMVF9BR0VOVF9NQVhfU1RFUFMsIERFRkFVTFRfU1RZTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL2FnZW50cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFUb29scywgQXBwS2l0VG9vbE9wdGlvbnMsIFRvb2xraXRPcHRpb25zLCBNYXN0cmFQbHVnaW5Ub29sa2l0UHJvdmlkZXIsIE1hc3RyYVBsdWdpbnMsIE1hc3RyYVRvb2xzRm4sIE1hc3RyYUFnZW50V29ya3NwYWNlUmVzb2x2ZXIsIE1hc3RyYUFnZW50RGVmaW5pdGlvbiwgQW55TWFzdHJhQWdlbnREZWZpbml0aW9uLCBNYXN0cmFTdG9yYWdlQ29uZmlnT3ZlcnJpZGUsIE1hc3RyYU1lbW9yeUNvbmZpZ092ZXJyaWRlLCBBZ2VudERlZmF1bHRNb2RlbCwgQnVpbHRBZ2VudHMgfSBmcm9tIFwiLi9zcmMvYWdlbnRzLnRzXCI7XG5leHBvcnQgeyBjaGFydFBsYW5TY2hlbWEsIGNoYXJ0UGxhbm5lclJlcXVlc3RTY2hlbWEsIGNoYXJ0VG9vbE91dHB1dFNjaGVtYSB9IGZyb20gXCIuL3NyYy9jaGFydC50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGFydFBsYW5uZXJSZXF1ZXN0LCBDaGFydFRvb2xPdXRwdXQsIFByZXBhcmVDaGFydE9wdGlvbnMsIEZldGNoQ2hhcnRPcHRpb25zIH0gZnJvbSBcIi4vc3JjL2NoYXJ0LnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfVVNFUl9LRVksIE1BU1RSQV9VU0VSX05BTUVfS0VZLCBNQVNUUkFfVVNFUl9FTUFJTF9LRVksIE1BU1RSQV9SRVFVRVNUX0lEX0tFWSwgTUFTVFJBX1NDT1BFU19LRVksIFRSQUNFX1JFUVVFU1RfQ09OVEVYVF9LRVlTLCBNQVNUUkFfQ09ORklHX1NDSEVNQSB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB0eXBlIHsgVXNlciwgTWFzdHJhTWVtb3J5Q29uZmlnLCBNYXN0cmFTa2lsbFNlYXJjaENvbmZpZywgTWFzdHJhTWNwQ29uZmlnLCBNYXN0cmFQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgeyBtb2RlbENhdGFsb2d1ZURlZmF1bHRzLCBnZW5pZVN1Z2dlc3Rpb25EZWZhdWx0cywgc3RhdGVtZW50RGF0YURlZmF1bHRzLCBjaGFydEZldGNoRGVmYXVsdHMsIGZlZWRiYWNrV3JpdGVEZWZhdWx0cyB9IGZyb20gXCIuL3NyYy9kZWZhdWx0cy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFFdmFsRHJpdmVyT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9ldmFsdWF0aW9uLnRzXCI7XG5leHBvcnQgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlciB9IGZyb20gXCIuL3NyYy9maWxlc3lzdGVtcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGaWxlU3lzdGVtQWRhcHRlck9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvZmlsZXN5c3RlbXMudHNcIjtcbmV4cG9ydCB7IERFRkFVTFRfR0VOSUVfQUxJQVMsIEdFTklFX0lOU1RSVUNUSU9OUyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBHZW5pZVNwYWNlQ29uZmlnLCBHZW5pZVNwYWNlc0NvbmZpZyB9IGZyb20gXCIuL3NyYy9nZW5pZS50c1wiO1xuZXhwb3J0IHsgSURFTlRJVFlfRU5WLCBJREVOVElUWV9NT0RFUywgREVGQVVMVF9JREVOVElUWV9NT0RFLCBVU0VSX0lEX0hFQURFUiwgVVNFUl9FTUFJTF9IRUFERVIsIHJlcXVlc3RVc2VySWQsIHJlcXVlc3RVc2VyRW1haWwsIHVzZVNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi9zcmMvaWRlbnRpdHkudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFzdHJhSWRlbnRpdHlNb2RlIH0gZnJvbSBcIi4vc3JjL2lkZW50aXR5LnRzXCI7XG5leHBvcnQgdHlwZSB7IFJlc29sdmVkTWNwIH0gZnJvbSBcIi4vc3JjL21jcC50c1wiO1xuZXhwb3J0IHsgTWVtb3J5QnVpbGRlciB9IGZyb20gXCIuL3NyYy9tZW1vcnkudHNcIjtcbmV4cG9ydCB7IEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHR5cGUgeyBBcHBNbGZsb3dUcmFjZUluZm8sIExvZ0ZlZWRiYWNrUGFyYW1zIH0gZnJvbSBcIi4vc3JjL21sZmxvdy50c1wiO1xuZXhwb3J0IHsgUkVTUE9OU0VTX1BST1ZJREVSX09QVElPTlMgfSBmcm9tIFwiLi9zcmMvbW9kZWwudHNcIjtcbmV4cG9ydCB0eXBlIHsgQnVpbGRNb2RlbE92ZXJyaWRlcyB9IGZyb20gXCIuL3NyYy9tb2RlbC50c1wiO1xuZXhwb3J0IHsgTW9udHlTYW5kYm94IH0gZnJvbSBcIi4vc3JjL21vbnR5LXNhbmRib3gudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9udHlTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9tb250eS1zYW5kYm94LnRzXCI7XG5leHBvcnQgdHlwZSB7IEJ1aWxkT2JzZXJ2YWJpbGl0eU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvb2JzZXJ2YWJpbGl0eS50c1wiO1xuZXhwb3J0IHsgTWFzdHJhUGx1Z2luLCBtYXN0cmEgfSBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgeyBzdHJpcFN0YWxlQ2hhcnRzUHJvY2Vzc29yIH0gZnJvbSBcIi4vc3JjL3Byb2Nlc3NvcnMudHNcIjtcbmV4cG9ydCB7IEFJVE9PTFNfU09VUkNFIH0gZnJvbSBcIi4vc3JjL3JlbW90ZS1za2lsbHMudHNcIjtcbmV4cG9ydCB0eXBlIHsgQWlUb29sc1NvdXJjZSwgUmVtb3RlU2tpbGxTb3VyY2VPcHRpb25zLCBSZW1vdGVTa2lsbFNvdXJjZSwgUmVtb3RlU2tpbGxzT3B0aW9uLCBQcm92aXNpb25SZW1vdGVTa2lsbHNPcHRpb25zLCBQcm92aXNpb25lZFJlbW90ZVNraWxscywgUmVtb3RlU2tpbGxDYWNoZUVudHJ5LCBSZW1vdGVTa2lsbHNNZXRhZGF0YSB9IGZyb20gXCIuL3NyYy9yZW1vdGUtc2tpbGxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IERhdGFicmlja3NGZXRjaEluaXQgfSBmcm9tIFwiLi9zcmMvcmVzdC50c1wiO1xuZXhwb3J0IHsgRGF0YWJyaWNrc1NhbmRib3ggfSBmcm9tIFwiLi9zcmMvc2FuZGJveC50c1wiO1xuZXhwb3J0IHR5cGUgeyBEYXRhYnJpY2tzU2FuZGJveE9wdGlvbnMsIERhdGFicmlja3NXb3Jrc3BhY2VTYW5kYm94T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9zYW5kYm94LnRzXCI7XG5leHBvcnQgeyBNYXN0cmFTZXJ2ZXIgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IEF0dHJpYnV0ZWRJZGVudGl0eSwgTWFzdHJhQXBpR2F0ZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvc2VydmVyLnRzXCI7XG5leHBvcnQgeyBNQVNUUkFfTU9ERUxfT1ZFUlJJREVfS0VZIH0gZnJvbSBcIi4vc3JjL3NlcnZpbmcudHNcIjtcbmV4cG9ydCB0eXBlIHsgTW9kZWxPdmVycmlkZVJlcXVlc3QgfSBmcm9tIFwiLi9zcmMvc2VydmluZy50c1wiO1xuZXhwb3J0IHsgREVGQVVMVF9XT1JLU1BBQ0VfU0tJTExfQ0FDSEVfVFRMX01TLCBBcHBLaXRDYWNoZWRGaWxlU3lzdGVtIH0gZnJvbSBcIi4vc3JjL3NraWxsLWNhY2hlLnRzXCI7XG5leHBvcnQgdHlwZSB7IEFwcEtpdENhY2hlZEZpbGVTeXN0ZW1PcHRpb25zLCBDYWNoZWRXb3Jrc3BhY2VTa2lsbE1vdW50IH0gZnJvbSBcIi4vc3JjL3NraWxsLWNhY2hlLnRzXCI7XG5leHBvcnQgeyBBU1NJU1RBTlRfU0hBUkVEX1NLSUxMU19QQVRIIH0gZnJvbSBcIi4vc3JjL3NraWxsLXBhdGhzLnRzXCI7XG5leHBvcnQgeyBTVEFURU1FTlRfUk9XX0NBUCB9IGZyb20gXCIuL3NyYy9zdGF0ZW1lbnQudHNcIjtcbmV4cG9ydCB7IFRZUE9HUkFQSFlfUlVMRSB9IGZyb20gXCIuL3NyYy9zdHlsZS50c1wiO1xuZXhwb3J0IHsgVElUTEVfSU5TVFJVQ1RJT05TIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHR5cGUgeyBTdW1tYXJpemVPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3N1bW1hcml6ZS50c1wiO1xuZXhwb3J0IHsgVFJBQ0VfSU9fTElNSVQsIE1MRkxPV19TUEFOX0lOUFVUU19BVFRSLCBNTEZMT1dfU1BBTl9PVVRQVVRTX0FUVFIsIENIQVRfTUVTU0FHRVNfQVRUUiwgQ0hBVF9SRVNQT05TRV9BVFRSLCBDSEFUX0lERU5USVRZX0FUVFIsIENIQVRfR0VOSUVfVVNFRF9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FUVFIsIEdFTl9BSV9PUEVSQVRJT05fTkFNRV9BVFRSLCBNTEZMT1dfVVNFUl9BVFRSLCBNTEZMT1dfU0VTU0lPTl9BVFRSLCBNTEZMT1dfU1BBTl9UWVBFX0FHRU5ULCBNTEZMT1dfU1BBTl9UWVBFX0dFTklFIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHR5cGUgeyBDaGF0VHVyblRlbGVtZXRyeU9wdGlvbnMsIENoYXRUcmFjZVRhZ1ZhbHVlIH0gZnJvbSBcIi4vc3JjL3RlbGVtZXRyeS50c1wiO1xuZXhwb3J0IHsgTUxGTE9XX1RSQUNFX1RBR19QUkVGSVgsIE1MRkxPV19BR0VOVF9UQUcsIE1MRkxPV19HRU5JRV9UQUcsIE1MRkxPV19PQk9fQVVUSF9UQUcsIE1MRkxPV19TUF9BVVRIX1RBRywgTUxGTE9XX0xPQ0FMX1RBRywgTUxGTE9XX0FHRU5UX1RBR19BVFRSLCBNTEZMT1dfR0VOSUVfVEFHX0FUVFIsIEFQUEtJVF9BR0VOVF9UUkFDRV9ST09UX0FUVFIsIE1MRkxPV19PQk9fQVVUSF9UQUdfQVRUUiwgTUxGTE9XX1NQX0FVVEhfVEFHX0FUVFIsIE1MRkxPV19MT0NBTF9UQUdfQVRUUiB9IGZyb20gXCIuL3NyYy90cmFjZS1hdHRyaWJ1dGVzLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNjaGVtYUlzc3VlcyB9IGZyb20gXCIuL3NyYy92YWxpZGF0aW9uLnRzXCI7XG5leHBvcnQgeyBERUZBVUxUX1NLSUxMX0ZPTERFUlMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBXb3Jrc3BhY2VNb3VudENvbnRleHQsIFNraWxsRm9sZGVyVmFsdWUsIFNraWxsRm9sZGVyT3B0aW9ucywgV29ya3NwYWNlTW91bnRDb250cmlidXRpb24sIFdvcmtzcGFjZU1vdW50UmVzb2x2ZXIsIERlZmF1bHRTa2lsbEZvbGRlck5hbWUsIFdvcmtzcGFjZVNhbmRib3hTZWxlY3Rpb24sIENyZWF0ZVdvcmtzcGFjZU9wdGlvbnMgfSBmcm9tIFwiLi9zcmMvd29ya3NwYWNlcy50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXhwb3J0cy50c1wiO1xuIl19
package/lib/src/mlflow.js CHANGED
@@ -33,7 +33,7 @@ import { TraceInfo } from "@mlflow/core/dist/core/entities/trace_info";
33
33
  import { TraceState } from "@mlflow/core/dist/core/entities/trace_state";
34
34
  import { z } from "zod";
35
35
  import { databricksFetch, readResponseJson, readResponseText } from "./rest.js";
36
- import { MLFLOW_AGENT_TAG_ATTR } from "./trace-attributes.js";
36
+ import { APPKIT_AGENT_TRACE_ROOT_ATTR } from "./trace-attributes.js";
37
37
  const logger = log.logger("mastra/mlflow");
38
38
  let directMlflow;
39
39
  let directMlflowInitStarted = false;
@@ -49,7 +49,7 @@ const NOISY_INSTRUMENTATION_SCOPES = new Set([
49
49
  "cache-manager-cache-manager",
50
50
  ]);
51
51
  function isAgentTraceRoot(span) {
52
- return span.attributes[MLFLOW_AGENT_TAG_ATTR] === "true";
52
+ return span.attributes[APPKIT_AGENT_TRACE_ROOT_ATTR] === true;
53
53
  }
54
54
  function isUsefulAgentDescendant(span) {
55
55
  return !NOISY_INSTRUMENTATION_SCOPES.has(span.instrumentationScope.name);
@@ -662,4 +662,4 @@ export async function logFeedback(client, params) {
662
662
  }
663
663
  return undefined;
664
664
  }
665
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWxmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21sZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBUXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBSzNDLElBQUksWUFBc0MsQ0FBQztBQUMzQyxJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUNwQyxJQUFJLG9CQUFvRCxDQUFDO0FBQ3pELElBQUkscUJBQWdELENBQUM7QUFDckQsSUFBSSw2QkFBNkIsR0FBRyxLQUFLLENBQUM7QUFDMUMsSUFBSSx3QkFBcUQsQ0FBQztBQUMxRCxJQUFJLG9CQUF3QyxDQUFDO0FBQzdDLE1BQU0seUJBQXlC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TGZsb3cgdXNlci1mZWVkYmFjayBsb2dnaW5nOiBkZXRlY3Qgd2hldGhlciBNTGZsb3cgdHJhY2luZyBpcyB3aXJlZFxuICogZm9yIHRoaXMgZGVwbG95bWVudCwgYW5kIGxvZyBhIHRodW1icyAvIGNvbW1lbnQgYXMgYSB0cmFjZVxuICogKmFzc2Vzc21lbnQqIHZpYSB0aGUgRGF0YWJyaWNrcyBNTGZsb3cgUkVTVCBBUEkuXG4gKlxuICogRmVlZGJhY2sgYXR0YWNoZXMgdG8gYSB0cmFjZSwgYW5kIHRoZSBwbHVnaW4ncyBzcGFucyByZWFjaCBNTGZsb3dcbiAqIHRocm91Z2ggdGhlIHNhbWUgT1RlbCBwaXBlbGluZSBhcyBldmVyeSBvdGhlciBBcHBLaXQgc3BhbiAoc2VlXG4gKiBgb2JzZXJ2YWJpbGl0eS50c2ApLiBPbiBEYXRhYnJpY2tzIEFwcHMgdGhhdCBwaXBlbGluZSBpcyB0aGUgVUNcbiAqIHNpZGVjYXIgaW5qZWN0ZWQgYnkgYHRlbGVtZXRyeV9leHBvcnRfZGVzdGluYXRpb25zYCwgbm90IGEgZGlyZWN0XG4gKiB3b3Jrc3BhY2UgT1RMUCBVUkwuIE1MZmxvdyBkZXJpdmVzIGl0cyB0cmFjZSBpZCBmcm9tIHRoZSBPcGVuVGVsZW1ldHJ5XG4gKiB0cmFjZSBpZCAoYHRyLTxoZXgob3RlbFRyYWNlSWQpPmApLCBzbyB0aGUgc2VydmVyIHN0YW1wcyB0aGUgYWN0aXZlXG4gKiB0cmFjZSBpZCBvbiBlYWNoIHR1cm4ncyByZXNwb25zZSBhbmQgdGhlIGNsaWVudCBzZW5kcyBpdCBiYWNrIGhlcmUuXG4gKlxuICogVGhlcmUgaXMgbm8gTUxmbG93IEpTIFNESywgc28gdGhpcyBwb3N0cyB0byB0aGUgYXNzZXNzbWVudHMgUkVTVFxuICogZW5kcG9pbnQgZGlyZWN0bHkgdXNpbmcgdGhlIE9CTy1zY29wZWQgd29ya3NwYWNlIGNsaWVudCAodGhlIGZlZWRiYWNrXG4gKiBpcyB0aHVzIGF0dHJpYnV0ZWQgdG8gdGhlIHNpZ25lZC1pbiB1c2VyKS4gVUMtYmFja2VkIEFwcHMgdHJhY2VzIG5lZWRcbiAqIHRoZSBleHBlcmltZW50J3MgdGFibGUtcHJlZml4IFVSSSAoYHRyYWNlOi97Y2F0YWxvZ30ue3NjaGVtYX0ue3ByZWZpeH0ve3RyLWhleH1gKVxuICogcmF0aGVyIHRoYW4gdGhlIGV4cGVyaW1lbnQtc3RvcmUgaWQgdGhlIFVJIGRvZXMgbm90IHN0b3JlLiBUaGF0IHByZWZpeCBpc1xuICogcmVhZCBmcm9tIHRoZSBleHBlcmltZW50J3MgYG1sZmxvdy5leHBlcmltZW50LmRhdGFicmlja3NUcmFjZURlc3RpbmF0aW9uUGF0aGBcbiAqIHRhZyAob3IgdGhlIHNwYW5zLXRhYmxlIHRhZyk7IGBNTEZMT1dfVUNfVFJBQ0VfUFJFRklYYCByZW1haW5zIGFuIG9wdGlvbmFsXG4gKiBvdmVycmlkZS4gVHJhY2UgZXhwb3J0IGlzIGFzeW5jaHJvbm91cywgc28gdGhlIGp1c3QtZmluaXNoZWQgdHJhY2UgbWF5IG5vdFxuICogZXhpc3QgaW4gTUxmbG93IHlldCB3aGVuIHRoZSB1c2VyIHJlYWN0czsgdGhlIGxvZyBjYWxsIHJldHJpZXMgYnJpZWZseSBvblxuICogXCJub3QgZm91bmRcIiBiZWZvcmUgZ2l2aW5nIHVwIHNvZnRseS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVycm9yLCBjcmVhdGVXb3Jrc3BhY2VDbGllbnQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGFzeW5jVXRpbHMsIGVycm9yVXRpbHMsIGxvZywgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGZlZWRiYWNrIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1hc3RyYVwiO1xuaW1wb3J0IHsgVHJhY2VMb2NhdGlvblR5cGUsIFRyYWNlTWV0YWRhdGFLZXkgfSBmcm9tIFwiQG1sZmxvdy9jb3JlXCI7XG5pbXBvcnQgeyBUcmFjZUluZm8gfSBmcm9tIFwiQG1sZmxvdy9jb3JlL2Rpc3QvY29yZS9lbnRpdGllcy90cmFjZV9pbmZvXCI7XG5pbXBvcnQgeyBUcmFjZVN0YXRlIH0gZnJvbSBcIkBtbGZsb3cvY29yZS9kaXN0L2NvcmUvZW50aXRpZXMvdHJhY2Vfc3RhdGVcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9hcGlcIjtcbmltcG9ydCB0eXBlIHtcbiAgUmVhZGFibGVTcGFuLFxuICBTcGFuIGFzIFNka1NwYW4sXG4gIFNwYW5Qcm9jZXNzb3IsXG59IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlVHJhY2VyUHJvdmlkZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzRmV0Y2gsIHJlYWRSZXNwb25zZUpzb24sIHJlYWRSZXNwb25zZVRleHQgfSBmcm9tIFwiLi9yZXN0LnRzXCI7XG5pbXBvcnQgeyBNTEZMT1dfQUdFTlRfVEFHX0FUVFIgfSBmcm9tIFwiLi90cmFjZS1hdHRyaWJ1dGVzLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJtYXN0cmEvbWxmbG93XCIpO1xuXG50eXBlIE1sZmxvd01vZHVsZSA9IHR5cGVvZiBpbXBvcnQoXCJAbWxmbG93L2NvcmVcIik7XG50eXBlIFVwZGF0ZUN1cnJlbnRUcmFjZU9wdGlvbnMgPSBQYXJhbWV0ZXJzPE1sZmxvd01vZHVsZVtcInVwZGF0ZUN1cnJlbnRUcmFjZVwiXT5bMF07XG5cbmxldCBkaXJlY3RNbGZsb3c6IE1sZmxvd01vZHVsZSB8IHVuZGVmaW5lZDtcbmxldCBkaXJlY3RNbGZsb3dJbml0U3RhcnRlZCA9IGZhbHNlO1xubGV0IGRpcmVjdE1sZmxvd1Byb3ZpZGVyOiBOb2RlVHJhY2VyUHJvdmlkZXIgfCB1bmRlZmluZWQ7XG5sZXQgZGlyZWN0TWxmbG93UHJvY2Vzc29yOiBTcGFuUHJvY2Vzc29yIHwgdW5kZWZpbmVkO1xubGV0IGFwcE1sZmxvd1RyYWNlSW5mb0luaXRTdGFydGVkID0gZmFsc2U7XG5sZXQgYXBwTWxmbG93VHJhY2VJbmZvQ2xpZW50OiBXb3Jrc3BhY2VDbGllbnQgfCB1bmRlZmluZWQ7XG5sZXQgYXBwTWxmbG93VHJhY2VQcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbmNvbnN0IHBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm8gPSBuZXcgU2V0PFByb21pc2U8dm9pZD4+KCk7XG5cbmNvbnN0IE5PSVNZX0lOU1RSVU1FTlRBVElPTl9TQ09QRVMgPSBuZXcgU2V0KFtcbiAgXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24tZXhwcmVzc1wiLFxuICBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1odHRwXCIsXG4gIFwiY2FjaGUtbWFuYWdlci1jYWNoZS1tYW5hZ2VyXCIsXG5dKTtcblxuZnVuY3Rpb24gaXNBZ2VudFRyYWNlUm9vdChzcGFuOiBTZGtTcGFuKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGFuLmF0dHJpYnV0ZXNbTUxGTE9XX0FHRU5UX1RBR19BVFRSXSA9PT0gXCJ0cnVlXCI7XG59XG5cbmZ1bmN0aW9uIGlzVXNlZnVsQWdlbnREZXNjZW5kYW50KHNwYW46IFNka1NwYW4pOiBib29sZWFuIHtcbiAgcmV0dXJuICFOT0lTWV9JTlNUUlVNRU5UQVRJT05fU0NPUEVTLmhhcyhzcGFuLmluc3RydW1lbnRhdGlvblNjb3BlLm5hbWUpO1xufVxuXG4vKipcbiAqIFJlc3RyaWN0IHRoZSBkaXJlY3QgTUxmbG93IHByb3ZpZGVyIHRvIGNoYXQgcm9vdHMgYW5kIHRoZWlyIGRlc2NlbmRhbnRzLlxuICogQXBwS2l0IGFuZCBNYXN0cmEgY3JlYXRlIG90aGVyIE9UZWwgcm9vdHMgZm9yIGNhY2hlIGFuZCBwbHVnaW4gb3BlcmF0aW9ucztcbiAqIGZvcndhcmRpbmcgdGhvc2Ugd291bGQgcmVjcmVhdGUgdGhlIG9uZS10cmFjZS1wZXItcmVxdWVzdCBub2lzZSB0aGlzIHBhdGggaXNcbiAqIGludGVuZGVkIHRvIGF2b2lkLlxuICovXG5leHBvcnQgY2xhc3MgQWdlbnRUcmFjZVNwYW5Qcm9jZXNzb3IgaW1wbGVtZW50cyBTcGFuUHJvY2Vzc29yIHtcbiAgcHJpdmF0ZSByZWFkb25seSB0cmFjZUlkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwYW5JZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRlbGVnYXRlOiBTcGFuUHJvY2Vzc29yKSB7fVxuXG4gIG9uU3RhcnQoc3BhbjogU2RrU3BhbiwgcGFyZW50Q29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuICAgIGNvbnN0IHRyYWNlSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBjb25zdCBpc1Jvb3QgPSAhc3Bhbi5wYXJlbnRTcGFuQ29udGV4dD8uc3BhbklkO1xuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGlmICghaXNBZ2VudFRyYWNlUm9vdChzcGFuKSkgcmV0dXJuO1xuICAgICAgdGhpcy50cmFjZUlkcy5hZGQodHJhY2VJZCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy50cmFjZUlkcy5oYXModHJhY2VJZCkgfHwgIWlzVXNlZnVsQWdlbnREZXNjZW5kYW50KHNwYW4pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3Bhbklkcy5hZGQoc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCk7XG4gICAgdGhpcy5kZWxlZ2F0ZS5vblN0YXJ0KHNwYW4sIHBhcmVudENvbnRleHQpO1xuICB9XG5cbiAgb25FbmRpbmcoc3BhbjogU2RrU3Bhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zcGFuSWRzLmhhcyhzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkKSkgcmV0dXJuO1xuICAgIHRoaXMuZGVsZWdhdGUub25FbmRpbmc/LihzcGFuKTtcbiAgfVxuXG4gIG9uRW5kKHNwYW46IFJlYWRhYmxlU3Bhbik6IHZvaWQge1xuICAgIGNvbnN0IHRyYWNlSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkudHJhY2VJZDtcbiAgICBjb25zdCBzcGFuSWQgPSBzcGFuLnNwYW5Db250ZXh0KCkuc3BhbklkO1xuICAgIGlmICghdGhpcy5zcGFuSWRzLmRlbGV0ZShzcGFuSWQpKSByZXR1cm47XG4gICAgdGhpcy5kZWxlZ2F0ZS5vbkVuZChzcGFuKTtcbiAgICBpZiAoIXNwYW4ucGFyZW50U3BhbkNvbnRleHQ/LnNwYW5JZCkgdGhpcy50cmFjZUlkcy5kZWxldGUodHJhY2VJZCk7XG4gIH1cblxuICBmb3JjZUZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLmZvcmNlRmx1c2goKTtcbiAgfVxuXG4gIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudHJhY2VJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnNwYW5JZHMuY2xlYXIoKTtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zaHV0ZG93bigpO1xuICB9XG59XG5cbi8qKiBXb3Jrc3BhY2UgY2xpZW50IGNhcnJpZWQgb24gYW4gQXBwS2l0IGV4ZWN1dGlvbiBjb250ZXh0LiAqL1xudHlwZSBXb3Jrc3BhY2VDbGllbnQgPSBhcHBraXQuV29ya3NwYWNlQ2xpZW50TGlrZTtcblxuLyoqIEV4cGVyaW1lbnQgdGFnIERhdGFicmlja3Mgc3RvcmVzIGFzIGBjYXRhbG9nLnNjaGVtYS50YWJsZV9wcmVmaXhgLiAqL1xuY29uc3QgVFJBQ0VfREVTVElOQVRJT05fUEFUSF9UQUcgPSBcIm1sZmxvdy5leHBlcmltZW50LmRhdGFicmlja3NUcmFjZURlc3RpbmF0aW9uUGF0aFwiO1xuLyoqIEV4cGVyaW1lbnQgdGFnIG5hbWluZyB0aGUgT1RlbCBzcGFucyB0YWJsZSAoYGNhdGFsb2cuc2NoZW1hLntwcmVmaXh9X290ZWxfc3BhbnNgKS4gKi9cbmNvbnN0IFRSQUNFX1NQQU5fU1RPUkFHRV9UQUJMRV9UQUcgPSBcIm1sZmxvdy5leHBlcmltZW50LmRhdGFicmlja3NUcmFjZVNwYW5TdG9yYWdlVGFibGVcIjtcblxuLyoqXG4gKiBDYWNoZWQgVUMgdGFibGUgcHJlZml4IHJlc29sdmVkIGZyb20gdGhlIGV4cGVyaW1lbnQuIGBsb2FkZWRgIGRpc3Rpbmd1aXNoZXNcbiAqIFwibm90IGZldGNoZWQgeWV0XCIgZnJvbSBcImZldGNoZWQsIGV4cGVyaW1lbnQgaGFzIG5vIFVDIGxvY2F0aW9uXCIuIE5ldHdvcmtcbiAqIGZhaWx1cmVzIGFyZSBub3QgY2FjaGVkIHNvIGEgbGF0ZXIgdGh1bWJzIGNsaWNrIGNhbiByZXRyeS5cbiAqL1xubGV0IGxvYWRlZFVjUHJlZml4OiB7IHByZWZpeDogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfCB1bmRlZmluZWQ7XG5cbi8qKiBTdHJpcCB0aGUgYHRyYWNlOi9gIFVSSSB3cmFwcGVyIGFuZCB0cmFpbGluZyBzbGFzaGVzIGZyb20gYSBVQyBwcmVmaXguICovXG5mdW5jdGlvbiBub3JtYWxpemVVY1ByZWZpeChyYXc6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHZhbHVlID0gcmF3XG4gICAgPy50cmltKClcbiAgICAucmVwbGFjZSgvXnRyYWNlOlxcLy8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG4gIHJldHVybiB2YWx1ZSB8fCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGVyaXZlIGBjYXRhbG9nLnNjaGVtYS50YWJsZV9wcmVmaXhgIGZyb20gYSBzcGFucyB0YWJsZSBuYW1lLlxuICogRGF0YWJyaWNrcyBuYW1lcyB0aGUgdGFibGUgYHtwcmVmaXh9X290ZWxfc3BhbnNgLlxuICovXG5mdW5jdGlvbiBwcmVmaXhGcm9tU3BhblRhYmxlKHRhYmxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBuYW1lID0gdGFibGU/LnRyaW0oKTtcbiAgaWYgKCFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAobmFtZS5lbmRzV2l0aChcIl9vdGVsX3NwYW5zXCIpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtXCJfb3RlbF9zcGFuc1wiLmxlbmd0aCk7XG4gIGlmIChuYW1lLmVuZHNXaXRoKFwiX3NwYW5zXCIpKSByZXR1cm4gbmFtZS5zbGljZSgwLCAtXCJfc3BhbnNcIi5sZW5ndGgpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHBlcmltZW50VGFnTWFwKHJhdzogdW5rbm93bik6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCB0YWdzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgIGZvciAoY29uc3QgdGFnIG9mIHJhdykge1xuICAgICAgaWYgKCFvYmplY3QuaXNSZWNvcmQodGFnKSB8fCB0eXBlb2YgdGFnLmtleSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdGFnLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGFncy5zZXQodGFnLmtleSwgdGFnLnZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhZ3M7XG4gIH1cbiAgaWYgKCFvYmplY3QuaXNSZWNvcmQocmF3KSkgcmV0dXJuIHRhZ3M7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJhdykpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB0YWdzLnNldChrZXksIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdGFncztcbn1cblxuLyoqXG4gKiBVQyB0YWJsZSBwcmVmaXggdGhlIGFzc2Vzc21lbnRzIEFQSSBuZWVkcywgcmVhZCBmcm9tIGV4cGVyaW1lbnQgdGFncy5cbiAqXG4gKiBQcmVmZXJzIHRoZSB0aHJlZS1wYXJ0IGRlc3RpbmF0aW9uIHBhdGggRGF0YWJyaWNrcyB3cml0ZXMgd2hlbiB0aGVcbiAqIGV4cGVyaW1lbnQgaXMgbGlua2VkIHRvIGEgdGFibGUtcHJlZml4IGxvY2F0aW9uLiBGYWxscyBiYWNrIHRvIHN0cmlwcGluZ1xuICogYF9vdGVsX3NwYW5zYCBmcm9tIHRoZSBzcGFucy10YWJsZSB0YWcuIFR3by1wYXJ0IHNjaGVtYS1saW5rZWQgZGVzdGluYXRpb25zXG4gKiBhcmUgaWdub3JlZCAodGhleSBhcmUgbm90IGEgdGFibGUgcHJlZml4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVjVHJhY2VQcmVmaXhGcm9tRXhwZXJpbWVudFRhZ3MocmF3VGFnczogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRhZ3MgPSBleHBlcmltZW50VGFnTWFwKHJhd1RhZ3MpO1xuICBjb25zdCBkZXN0aW5hdGlvbiA9IG5vcm1hbGl6ZVVjUHJlZml4KHRhZ3MuZ2V0KFRSQUNFX0RFU1RJTkFUSU9OX1BBVEhfVEFHKSk7XG4gIGlmIChkZXN0aW5hdGlvbiAmJiBkZXN0aW5hdGlvbi5zcGxpdChcIi5cIikubGVuZ3RoID49IDMpIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgcmV0dXJuIHByZWZpeEZyb21TcGFuVGFibGUodGFncy5nZXQoVFJBQ0VfU1BBTl9TVE9SQUdFX1RBQkxFX1RBRykpO1xufVxuXG4vKiogRHJvcCB0aGUgaW4tcHJvY2VzcyBVQyBwcmVmaXggY2FjaGUgKHRlc3RzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldFVjVHJhY2VQcmVmaXhDYWNoZSgpOiB2b2lkIHtcbiAgbG9hZGVkVWNQcmVmaXggPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJhY2UgaWQgdGhlIGFzc2Vzc21lbnRzIFJFU1QgQVBJIGFjY2VwdHMgZm9yIHRoaXMgZGVwbG95bWVudC5cbiAqXG4gKiBEYXRhYnJpY2tzIEFwcHMgcGVyc2lzdCB0cmFjZXMgaW4gVW5pdHkgQ2F0YWxvZy4gVGhlIGV4cGVyaW1lbnQgVUkgbGlzdHNcbiAqIHRob3NlIHJvd3MsIGJ1dCBgUE9TVCAvYXBpLzMuMC9tbGZsb3cvdHJhY2VzL3tpZH0vYXNzZXNzbWVudHNgIGxvb2tzIHVwIHRoZVxuICogZXhwZXJpbWVudCBzdG9yZSB1bmxlc3MgYHtpZH1gIGlzIHRoZSBVQyBVUkkgYHRyYWNlOi97Y2F0YWxvZ30ue3NjaGVtYX0ue3ByZWZpeH0ve3RyLWhleH1gLlxuICogQSBiYXJlIGB0ci08aGV4PmAgNDA0cyBhbmQgdGhlIGFzc2Vzc21lbnQgbmV2ZXIgYXBwZWFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1sZmxvd0Fzc2Vzc21lbnRUcmFjZUlkKHRyYWNlSWQ6IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBub3JtYWxpemVVY1ByZWZpeChwcmVmaXgpO1xuICByZXR1cm4gcmVzb2x2ZWQgPyBgdHJhY2U6LyR7cmVzb2x2ZWR9LyR7dHJhY2VJZH1gIDogdHJhY2VJZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVVjVHJhY2VQcmVmaXgoY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBmcm9tRW52ID0gbm9ybWFsaXplVWNQcmVmaXgocHJvY2Vzcy5lbnYuTUxGTE9XX1VDX1RSQUNFX1BSRUZJWCk7XG4gIGlmIChmcm9tRW52KSByZXR1cm4gZnJvbUVudjtcbiAgaWYgKGxvYWRlZFVjUHJlZml4KSByZXR1cm4gbG9hZGVkVWNQcmVmaXgucHJlZml4O1xuICBjb25zdCBleHBlcmltZW50ID0gYXdhaXQgZmV0Y2hFeHBlcmltZW50KGNsaWVudCk7XG4gIGlmICghZXhwZXJpbWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcHJlZml4ID0gdWNUcmFjZVByZWZpeEZyb21FeHBlcmltZW50VGFncyhleHBlcmltZW50LnRhZ3MpO1xuICBsb2FkZWRVY1ByZWZpeCA9IHsgcHJlZml4IH07XG4gIHJldHVybiBwcmVmaXg7XG59XG5cbi8qKiBBc3Nlc3NtZW50cyBSRVNUIHBhdGggZm9yIGEgdHJhY2UuIGAzLjBgIGlzIHRoZSBjdXJyZW50IE1MZmxvdyBBUEkgdmVyc2lvbi4gKi9cbmNvbnN0IGFzc2Vzc21lbnRzUGF0aCA9ICh0cmFjZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgYC9hcGkvMy4wL21sZmxvdy90cmFjZXMvJHtlbmNvZGVVUklDb21wb25lbnQodHJhY2VJZCl9L2Fzc2Vzc21lbnRzYDtcblxuLyoqIE51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIFwidHJhY2Ugbm90IGZvdW5kXCIgcmVzcG9uc2UgYmVmb3JlIGdpdmluZyB1cC4gKi9cbmNvbnN0IE5PVF9GT1VORF9SRVRSSUVTID0gMztcbi8qKiBCYXNlIGJhY2tvZmYgYmV0d2VlbiBcInRyYWNlIG5vdCBmb3VuZFwiIHJldHJpZXMsIGluIG1zIChncm93cyBsaW5lYXJseSkuICovXG5jb25zdCBOT1RfRk9VTkRfQkFDS09GRl9NUyA9IDEyMDA7XG5cbmNvbnN0IE1sZmxvd0V4cGVyaW1lbnRSZXNwb25zZVNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZXhwZXJpbWVudDogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIGV4cGVyaW1lbnRfaWQ6IHouc3RyaW5nKCkubWluKDEpLmRlc2NyaWJlKFwiV29ya3NwYWNlIE1MZmxvdyBleHBlcmltZW50IGlkZW50aWZpZXIuXCIpLFxuICAgICAgICB0YWdzOiB6LnVua25vd24oKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiRXhwZXJpbWVudCB0YWdzLCBpbmNsdWRpbmcgdGhlIFVDIHRyYWNlIGxvY2F0aW9uLlwiKSxcbiAgICAgIH0pXG4gICAgICAucGFzc3Rocm91Z2goKVxuICAgICAgLmRlc2NyaWJlKFwiQ29uZmlndXJlZCBNTGZsb3cgZXhwZXJpbWVudC5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIk1MZmxvdyBnZXQtZXhwZXJpbWVudCByZXNwb25zZS5cIik7XG5cbmNvbnN0IEN1cnJlbnRVc2VyUmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIHVzZXJOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDdXJyZW50IHdvcmtzcGFjZSB1c2VyIG5hbWUuXCIpLFxuICAgIGFwcGxpY2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkN1cnJlbnQgc2VydmljZSBwcmluY2lwYWwgYXBwbGljYXRpb24gaWQuXCIpLFxuICAgIGRpc3BsYXlOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDdXJyZW50IHByaW5jaXBhbCBkaXNwbGF5IG5hbWUuXCIpLFxuICAgIGdyb3VwczogelxuICAgICAgLmFycmF5KFxuICAgICAgICB6XG4gICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICB2YWx1ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV29ya3NwYWNlIGdyb3VwIGlkZW50aWZpZXIuXCIpLFxuICAgICAgICAgICAgZGlzcGxheTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiV29ya3NwYWNlIGdyb3VwIGRpc3BsYXkgbmFtZS5cIiksXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGFzc3Rocm91Z2goKSxcbiAgICAgIClcbiAgICAgIC5vcHRpb25hbCgpXG4gICAgICAuZGVzY3JpYmUoXCJHcm91cHMgYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgcHJpbmNpcGFsLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiRGF0YWJyaWNrcyBDdXJyZW50IFVzZXIgQVBJIHJlc3BvbnNlLlwiKTtcblxuY29uc3QgRXhwZXJpbWVudFBlcm1pc3Npb25zUmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGFjY2Vzc19jb250cm9sX2xpc3Q6IHpcbiAgICAgIC5hcnJheShcbiAgICAgICAgelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgdXNlcl9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJVc2VyIHByaW5jaXBhbCBuYW1lLlwiKSxcbiAgICAgICAgICAgIGdyb3VwX25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkdyb3VwIHByaW5jaXBhbCBuYW1lLlwiKSxcbiAgICAgICAgICAgIHNlcnZpY2VfcHJpbmNpcGFsX25hbWU6IHpcbiAgICAgICAgICAgICAgLnN0cmluZygpXG4gICAgICAgICAgICAgIC5vcHRpb25hbCgpXG4gICAgICAgICAgICAgIC5kZXNjcmliZShcIlNlcnZpY2UgcHJpbmNpcGFsIGFwcGxpY2F0aW9uIGlkLlwiKSxcbiAgICAgICAgICAgIGFsbF9wZXJtaXNzaW9uczogelxuICAgICAgICAgICAgICAuYXJyYXkoXG4gICAgICAgICAgICAgICAgelxuICAgICAgICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25fbGV2ZWw6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJFZmZlY3RpdmUgZXhwZXJpbWVudCBwZXJtaXNzaW9uIGxldmVsLlwiKSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAucGFzc3Rocm91Z2goKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgICAuZGVzY3JpYmUoXCJEaXJlY3QgYW5kIGluaGVyaXRlZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyBwcmluY2lwYWwuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBhc3N0aHJvdWdoKCksXG4gICAgICApXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiRXhwZXJpbWVudCBhY2Nlc3MgY29udHJvbCBlbnRyaWVzLlwiKSxcbiAgfSlcbiAgLnBhc3N0aHJvdWdoKClcbiAgLmRlc2NyaWJlKFwiRGF0YWJyaWNrcyBleHBlcmltZW50IHBlcm1pc3Npb25zIHJlc3BvbnNlLlwiKTtcblxuZnVuY3Rpb24gY29uZmlndXJlZEV4cGVyaW1lbnQoKTogeyBpZD86IHN0cmluZzsgbmFtZT86IHN0cmluZyB9IHtcbiAgY29uc3QgaWQgPSBwcm9jZXNzLmVudi5NTEZMT1dfRVhQRVJJTUVOVF9JRD8udHJpbSgpO1xuICBjb25zdCBuYW1lID0gcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfTkFNRT8udHJpbSgpO1xuICByZXR1cm4ge1xuICAgIC4uLihpZCA/IHsgaWQgfSA6IHt9KSxcbiAgICAuLi4obmFtZSA/IHsgbmFtZSB9IDoge30pLFxuICB9O1xufVxuXG4vKiogVHJhY2tpbmcgVVJJIGZvciBkaXJlY3QgbG9jYWwgTUxmbG93IHRyYWNpbmcsIHdpdGggQ0xJLXByb2ZpbGUgYXV0aCBpbmplY3RlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RNbGZsb3dUcmFja2luZ1VyaSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoYXBwa2l0LmlzRGF0YWJyaWNrc0FwcEVudigpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjb25maWd1cmVkID0gcHJvY2Vzcy5lbnYuTUxGTE9XX1RSQUNLSU5HX1VSST8udHJpbSgpO1xuICBpZiAoY29uZmlndXJlZCAmJiBjb25maWd1cmVkICE9PSBcImRhdGFicmlja3NcIikgcmV0dXJuIGNvbmZpZ3VyZWQ7XG4gIGNvbnN0IHByb2ZpbGUgPSBwcm9jZXNzLmVudi5EQVRBQlJJQ0tTX0NPTkZJR19QUk9GSUxFPy50cmltKCk7XG4gIHJldHVybiBwcm9maWxlID8gYGRhdGFicmlja3M6Ly8ke3Byb2ZpbGV9YCA6IFwiZGF0YWJyaWNrc1wiO1xufVxuXG4vKiogUGFyc2UgdGhlIG9wdGlvbmFsIFVDIHRhYmxlLXByZWZpeCBsb2NhdGlvbiB1c2VkIGJ5IGRpcmVjdCBsb2NhbCB0cmFjaW5nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdE1sZmxvd1RyYWNlTG9jYXRpb24oKTpcbiAgfCB7IGNhdGFsb2dOYW1lOiBzdHJpbmc7IHNjaGVtYU5hbWU6IHN0cmluZzsgdGFibGVQcmVmaXg6IHN0cmluZyB9XG4gIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgY2F0YWxvZ05hbWUgPSBwcm9jZXNzLmVudi5NTEZMT1dfVUNfQ0FUQUxPRz8udHJpbSgpO1xuICBjb25zdCBzY2hlbWFOYW1lID0gcHJvY2Vzcy5lbnYuTUxGTE9XX1VDX1NDSEVNQT8udHJpbSgpO1xuICBjb25zdCB0YWJsZVByZWZpeCA9IHByb2Nlc3MuZW52Lk1MRkxPV19VQ19UQUJMRV9QUkVGSVg/LnRyaW0oKTtcbiAgaWYgKGNhdGFsb2dOYW1lICYmIHNjaGVtYU5hbWUgJiYgdGFibGVQcmVmaXgpIHtcbiAgICByZXR1cm4geyBjYXRhbG9nTmFtZSwgc2NoZW1hTmFtZSwgdGFibGVQcmVmaXggfTtcbiAgfVxuXG4gIGNvbnN0IHByZWZpeCA9IG5vcm1hbGl6ZVVjUHJlZml4KHByb2Nlc3MuZW52Lk1MRkxPV19VQ19UUkFDRV9QUkVGSVgpO1xuICBpZiAoIXByZWZpeCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcGFydHMgPSBwcmVmaXguc3BsaXQoXCIuXCIpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBbcHJlZml4Q2F0YWxvZywgcHJlZml4U2NoZW1hLCBwcmVmaXhUYWJsZV0gPSBwYXJ0cztcbiAgaWYgKCFwcmVmaXhDYXRhbG9nIHx8ICFwcmVmaXhTY2hlbWEgfHwgIXByZWZpeFRhYmxlKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4ge1xuICAgIGNhdGFsb2dOYW1lOiBwcmVmaXhDYXRhbG9nLFxuICAgIHNjaGVtYU5hbWU6IHByZWZpeFNjaGVtYSxcbiAgICB0YWJsZVByZWZpeDogcHJlZml4VGFibGUsXG4gIH07XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBsb2NhbCBkaXJlY3QtdG8tZXhwZXJpbWVudCBNTGZsb3cgU0RLIGhhcyBlbm91Z2ggY29uZmlndXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RNbGZsb3dUcmFjaW5nQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgIWFwcGtpdC5pc0RhdGFicmlja3NBcHBFbnYoKSAmJlxuICAgICAgcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfSUQ/LnRyaW0oKSAmJlxuICAgICAgZGlyZWN0TWxmbG93VHJhY2tpbmdVcmkoKSxcbiAgKTtcbn1cblxuLyoqIFdoZXRoZXIgYSBEYXRhYnJpY2tzIEFwcCBjYW4gcHJvbW90ZSBPVExQIHNwYW5zIGludG8gZnVsbCBNTGZsb3cgdHJhY2UgaW5mby4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBNbGZsb3dUcmFjZUluZm9Db25maWd1cmVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBhcHBraXQuaXNEYXRhYnJpY2tzQXBwRW52KCkgJiZcbiAgICAgIChwcm9jZXNzLmVudi5NTEZMT1dfRVhQRVJJTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk1MRkxPV19FWFBFUklNRU5UX05BTUU/LnRyaW0oKSkgJiZcbiAgICAgIChwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQ/LnRyaW0oKSB8fFxuICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVFJBQ0VTX0VORFBPSU5UPy50cmltKCkpLFxuICApO1xufVxuXG4vKiogSW5pdGlhbGl6ZSB0aGUgQXBwIHNlcnZpY2UtcHJpbmNpcGFsIGNsaWVudCB1c2VkIHRvIHBlcnNpc3QgVjQgdHJhY2UgdGFncyBhbmQgbWV0YWRhdGEuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcE1sZmxvd1RyYWNlSW5mbyhcbiAgY2xpZW50PzogV29ya3NwYWNlQ2xpZW50LFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhcHBNbGZsb3dUcmFjZUluZm9DbGllbnQgJiYgYXBwTWxmbG93VHJhY2VQcmVmaXgpIHJldHVybiB0cnVlO1xuICBpZiAoYXBwTWxmbG93VHJhY2VJbmZvSW5pdFN0YXJ0ZWQgfHwgIWFwcE1sZmxvd1RyYWNlSW5mb0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBhcHBNbGZsb3dUcmFjZUluZm9Jbml0U3RhcnRlZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzb2x2ZWRDbGllbnQgPSBjbGllbnQgPz8gKGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpIGFzIFdvcmtzcGFjZUNsaWVudCk7XG4gICAgY29uc3QgcHJlZml4ID0gYXdhaXQgcmVzb2x2ZVVjVHJhY2VQcmVmaXgocmVzb2x2ZWRDbGllbnQpO1xuICAgIGlmICghcHJlZml4IHx8IHByZWZpeC5zcGxpdChcIi5cIikubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgICBcIkRhdGFicmlja3MgQXBwcyBNTGZsb3cgdHJhY2UtaW5mbyBwcm9tb3Rpb24gcmVxdWlyZXMgYSBVQy1saW5rZWQgZXhwZXJpbWVudCBvciBNTEZMT1dfVUNfVFJBQ0VfUFJFRklYLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgYXBwTWxmbG93VHJhY2VJbmZvQ2xpZW50ID0gcmVzb2x2ZWRDbGllbnQ7XG4gICAgYXBwTWxmbG93VHJhY2VQcmVmaXggPSBwcmVmaXg7XG4gICAgbG9nZ2VyLmluZm8oXCJEYXRhYnJpY2tzIEFwcHMgTUxmbG93IHRyYWNlLWluZm8gcHJvbW90aW9uIGVuYWJsZWRcIiwgeyBwcmVmaXggfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiRGF0YWJyaWNrcyBBcHBzIE1MZmxvdyB0cmFjZS1pbmZvIHByb21vdGlvbiBkaXNhYmxlZFwiLCB7XG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFRyYWNlLWxldmVsIHZhbHVlcyBwZXJzaXN0ZWQgYmVzaWRlIHNwYW5zIGFscmVhZHkgZXhwb3J0ZWQgYnkgdGhlIEFwcHMgT1RMUCBzaWRlY2FyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBNbGZsb3dUcmFjZUluZm8ge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIHJlcXVlc3RUaW1lOiBudW1iZXI7XG4gIGV4ZWN1dGlvbkR1cmF0aW9uOiBudW1iZXI7XG4gIGVycm9yOiBib29sZWFuO1xuICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB1c2VyPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHJlcXVlc3RQcmV2aWV3Pzogc3RyaW5nO1xuICByZXNwb25zZVByZXZpZXc/OiBzdHJpbmc7XG59XG5cbi8qKiBQZXJzaXN0IE1MZmxvdyBWNCB0cmFjZSBpbmZvIGZvciBvbmUgRGF0YWJyaWNrcyBBcHBzIE9UZWwgcm9vdCB3aXRob3V0IHJlLWV4cG9ydGluZyBzcGFucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJzaXN0QXBwTWxmbG93VHJhY2VJbmZvKHBhcmFtczogQXBwTWxmbG93VHJhY2VJbmZvKTogdm9pZCB7XG4gIGNvbnN0IGNsaWVudCA9IGFwcE1sZmxvd1RyYWNlSW5mb0NsaWVudDtcbiAgY29uc3QgcHJlZml4ID0gYXBwTWxmbG93VHJhY2VQcmVmaXg7XG4gIGlmICghY2xpZW50IHx8ICFwcmVmaXgpIHJldHVybjtcbiAgY29uc3QgW2NhdGFsb2dOYW1lLCBzY2hlbWFOYW1lLCB0YWJsZVByZWZpeF0gPSBwcmVmaXguc3BsaXQoXCIuXCIpO1xuICBpZiAoIWNhdGFsb2dOYW1lIHx8ICFzY2hlbWFOYW1lIHx8ICF0YWJsZVByZWZpeCkgcmV0dXJuO1xuICBjb25zdCB0cmFjZUluZm8gPSBuZXcgVHJhY2VJbmZvKHtcbiAgICB0cmFjZUlkOiBgdHJhY2U6LyR7cHJlZml4fS8ke3BhcmFtcy50cmFjZUlkfWAsXG4gICAgdHJhY2VMb2NhdGlvbjoge1xuICAgICAgdHlwZTogVHJhY2VMb2NhdGlvblR5cGUuVUNfVEFCTEVfUFJFRklYLFxuICAgICAgdWNUYWJsZVByZWZpeDogeyBjYXRhbG9nTmFtZSwgc2NoZW1hTmFtZSwgdGFibGVQcmVmaXggfSxcbiAgICB9LFxuICAgIHJlcXVlc3RUaW1lOiBwYXJhbXMucmVxdWVzdFRpbWUsXG4gICAgZXhlY3V0aW9uRHVyYXRpb246IHBhcmFtcy5leGVjdXRpb25EdXJhdGlvbixcbiAgICBzdGF0ZTogcGFyYW1zLmVycm9yID8gVHJhY2VTdGF0ZS5FUlJPUiA6IFRyYWNlU3RhdGUuT0ssXG4gICAgLi4uKHBhcmFtcy5yZXF1ZXN0UHJldmlldyA/IHsgcmVxdWVzdFByZXZpZXc6IHBhcmFtcy5yZXF1ZXN0UHJldmlldyB9IDoge30pLFxuICAgIC4uLihwYXJhbXMucmVzcG9uc2VQcmV2aWV3ID8geyByZXNwb25zZVByZXZpZXc6IHBhcmFtcy5yZXNwb25zZVByZXZpZXcgfSA6IHt9KSxcbiAgICB0cmFjZU1ldGFkYXRhOiB7XG4gICAgICBbVHJhY2VNZXRhZGF0YUtleS5TQ0hFTUFfVkVSU0lPTl06IFwiNFwiLFxuICAgICAgLi4uKHBhcmFtcy51c2VyID8geyBbVHJhY2VNZXRhZGF0YUtleS5UUkFDRV9VU0VSXTogcGFyYW1zLnVzZXIgfSA6IHt9KSxcbiAgICAgIC4uLihwYXJhbXMuc2Vzc2lvbklkID8geyBbVHJhY2VNZXRhZGF0YUtleS5UUkFDRV9TRVNTSU9OXTogcGFyYW1zLnNlc3Npb25JZCB9IDoge30pLFxuICAgIH0sXG4gICAgdGFnczogcGFyYW1zLnRhZ3MsXG4gICAgYXNzZXNzbWVudHM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGF0aCA9IGAvYXBpLzQuMC9tbGZsb3cvdHJhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9LyR7cGFyYW1zLnRyYWNlSWR9L2luZm9gO1xuICBjb25zdCBwZW5kaW5nID0gZGF0YWJyaWNrc0ZldGNoKGNsaWVudCwgcGF0aCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5OiB0cmFjZUluZm8udG9Kc29uKCkgfSlcbiAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5vaykgcmV0dXJuO1xuICAgICAgbG9nZ2VyLndhcm4oXCJEYXRhYnJpY2tzIEFwcHMgTUxmbG93IHRyYWNlLWluZm8gcHJvbW90aW9uIGZhaWxlZFwiLCB7XG4gICAgICAgIHRyYWNlSWQ6IHBhcmFtcy50cmFjZUlkLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgYm9keTogYXdhaXQgcmVhZFJlc3BvbnNlVGV4dChyZXNwb25zZSksXG4gICAgICB9KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcIkRhdGFicmlja3MgQXBwcyBNTGZsb3cgdHJhY2UtaW5mbyBwcm9tb3Rpb24gZmFpbGVkXCIsIHtcbiAgICAgICAgdHJhY2VJZDogcGFyYW1zLnRyYWNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiBwZW5kaW5nQXBwTWxmbG93VHJhY2VJbmZvLmRlbGV0ZShwZW5kaW5nKSk7XG4gIHBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm8uYWRkKHBlbmRpbmcpO1xufVxuXG4vKiogUmVzZXQgQXBwcyB0cmFjZS1pbmZvIHByb21vdGlvbiBzdGF0ZSBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRBcHBNbGZsb3dUcmFjZUluZm8oKTogdm9pZCB7XG4gIGFwcE1sZmxvd1RyYWNlSW5mb0luaXRTdGFydGVkID0gZmFsc2U7XG4gIGFwcE1sZmxvd1RyYWNlSW5mb0NsaWVudCA9IHVuZGVmaW5lZDtcbiAgYXBwTWxmbG93VHJhY2VQcmVmaXggPSB1bmRlZmluZWQ7XG4gIHBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm8uY2xlYXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0ZWREaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uKFxuICBtbGZsb3c6IE1sZmxvd01vZHVsZSxcbiAgdHJhY2tpbmdVcmk6IHN0cmluZyxcbiAgZXhwZXJpbWVudElkOiBzdHJpbmcsXG4gIGhvc3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8eyBjYXRhbG9nTmFtZTogc3RyaW5nOyBzY2hlbWFOYW1lOiBzdHJpbmc7IHRhYmxlUHJlZml4OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBsaWNpdCA9IGRpcmVjdE1sZmxvd1RyYWNlTG9jYXRpb24oKTtcbiAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG4gIHRyeSB7XG4gICAgY29uc3QgYXV0aFByb3ZpZGVyID0gbWxmbG93LmNyZWF0ZUF1dGhQcm92aWRlcih7XG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIC4uLihob3N0ID8geyBob3N0IH0gOiB7fSksXG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IG1sZmxvdy5NbGZsb3dDbGllbnQoeyB0cmFja2luZ1VyaSwgYXV0aFByb3ZpZGVyIH0pO1xuICAgIGNvbnN0IGV4cGVyaW1lbnQgPSBhd2FpdCBjbGllbnQuZ2V0RXhwZXJpbWVudChleHBlcmltZW50SWQpO1xuICAgIGlmICghZXhwZXJpbWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB7IHVjTG9jYXRpb25Gcm9tRXhwZXJpbWVudFRhZ3MgfSA9IGF3YWl0IGltcG9ydChcIkBtbGZsb3cvY29yZS9kaXN0L2NvcmUvZGVzdGluYXRpb25cIik7XG4gICAgY29uc3QgbG9jYXRpb24gPSB1Y0xvY2F0aW9uRnJvbUV4cGVyaW1lbnRUYWdzKGV4cGVyaW1lbnQudGFncyk7XG4gICAgaWYgKCFsb2NhdGlvbj8udGFibGVQcmVmaXgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhdGFsb2dOYW1lOiBsb2NhdGlvbi5jYXRhbG9nTmFtZSxcbiAgICAgIHNjaGVtYU5hbWU6IGxvY2F0aW9uLnNjaGVtYU5hbWUsXG4gICAgICB0YWJsZVByZWZpeDogbG9jYXRpb24udGFibGVQcmVmaXgsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJkaXJlY3QgTUxmbG93IFVDIHRyYWNlLWxvY2F0aW9uIGRldGVjdGlvbiBmYWlsZWRcIiwge1xuICAgICAgZXhwZXJpbWVudElkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBNTGZsb3cgTm9kZSB0cmFjZXIgZm9yIGxvY2FsIGRldmVsb3BtZW50IHdoZW4gQXBwS2l0IGhhcyBubyBPVExQXG4gKiBleHBvcnRlci4gVGhpcyBwcm92aWRlciBpcyBuZXZlciBzdGFydGVkIGluIHRoZSBkZXBsb3llZCBBcHBzIHBhdGgsIGF2b2lkaW5nXG4gKiBhIHNlY29uZCBnbG9iYWwgT1RlbCBwcm92aWRlciByYWNpbmcgQXBwS2l0J3MgdGVsZW1ldHJ5IG1hbmFnZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGRpcmVjdE1sZmxvdykgcmV0dXJuIHRydWU7XG4gIGlmIChkaXJlY3RNbGZsb3dJbml0U3RhcnRlZCB8fCAhZGlyZWN0TWxmbG93VHJhY2luZ0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBkaXJlY3RNbGZsb3dJbml0U3RhcnRlZCA9IHRydWU7XG5cbiAgY29uc3QgZXhwZXJpbWVudElkID0gcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfSUQhLnRyaW0oKTtcbiAgY29uc3QgdHJhY2tpbmdVcmkgPSBkaXJlY3RNbGZsb3dUcmFja2luZ1VyaSgpITtcbiAgdHJ5IHtcbiAgICBjb25zdCBtbGZsb3cgPSBhd2FpdCBpbXBvcnQoXCJAbWxmbG93L2NvcmVcIik7XG4gICAgY29uc3QgcmF3SG9zdCA9IHByb2Nlc3MuZW52LkRBVEFCUklDS1NfSE9TVD8udHJpbSgpO1xuICAgIGNvbnN0IGhvc3QgPSByYXdIb3N0XG4gICAgICA/IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocmF3SG9zdClcbiAgICAgICAgPyByYXdIb3N0XG4gICAgICAgIDogYGh0dHBzOi8vJHtyYXdIb3N0fWBcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRyYWNlTG9jYXRpb24gPSBhd2FpdCBkZXRlY3RlZERpcmVjdE1sZmxvd1RyYWNlTG9jYXRpb24oXG4gICAgICBtbGZsb3csXG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIGV4cGVyaW1lbnRJZCxcbiAgICAgIGhvc3QsXG4gICAgKTtcbiAgICBpZiAoIXRyYWNlTG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAgIFwiRGlyZWN0IGxvY2FsIE1MZmxvdyB0cmFjaW5nIHJlcXVpcmVzIGEgVUMtbGlua2VkIGV4cGVyaW1lbnQgb3IgTUxGTE9XX1VDX1RSQUNFX1BSRUZJWC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IFt7IERhdGFicmlja3NVQ1RhYmxlU3BhbkV4cG9ydGVyLCBEYXRhYnJpY2tzVUNUYWJsZVNwYW5Qcm9jZXNzb3IgfSwgc2RrXSA9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGltcG9ydChcIkBtbGZsb3cvY29yZS9kaXN0L2V4cG9ydGVycy91Y190YWJsZVwiKSxcbiAgICAgICAgaW1wb3J0KFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGVcIiksXG4gICAgICBdKTtcbiAgICBjb25zdCBhdXRoUHJvdmlkZXIgPSBtbGZsb3cuY3JlYXRlQXV0aFByb3ZpZGVyKHtcbiAgICAgIHRyYWNraW5nVXJpLFxuICAgICAgLi4uKGhvc3QgPyB7IGhvc3QgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgbWxmbG93Lk1sZmxvd0NsaWVudCh7IHRyYWNraW5nVXJpLCBhdXRoUHJvdmlkZXIgfSk7XG4gICAgY29uc3QgZXhwb3J0ZXIgPSBuZXcgRGF0YWJyaWNrc1VDVGFibGVTcGFuRXhwb3J0ZXIoY2xpZW50KTtcbiAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgQWdlbnRUcmFjZVNwYW5Qcm9jZXNzb3IoXG4gICAgICBuZXcgRGF0YWJyaWNrc1VDVGFibGVTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB0cmFjZUxvY2F0aW9uKSxcbiAgICApO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IHNkay5Ob2RlVHJhY2VyUHJvdmlkZXIoeyBzcGFuUHJvY2Vzc29yczogW3Byb2Nlc3Nvcl0gfSk7XG4gICAgcHJvdmlkZXIucmVnaXN0ZXIoKTtcbiAgICBkaXJlY3RNbGZsb3cgPSBtbGZsb3c7XG4gICAgZGlyZWN0TWxmbG93UHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICBkaXJlY3RNbGZsb3dQcm9jZXNzb3IgPSBwcm9jZXNzb3I7XG4gICAgbG9nZ2VyLmluZm8oXCJkaXJlY3QgTUxmbG93IHRyYWNpbmcgZW5hYmxlZFwiLCB7XG4gICAgICBleHBlcmltZW50SWQsXG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIHRyYWNlTG9jYXRpb24sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiZGlyZWN0IE1MZmxvdyB0cmFjaW5nIGRpc2FibGVkXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogUGVyc2lzdCB0cmFjZS1sZXZlbCBmaWVsZHMgb24gdGhlIGRpcmVjdCBNTGZsb3cgdHJhY2UgaW4gdGhlIGN1cnJlbnQgT1RlbCBjb250ZXh0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlKG9wdGlvbnM6IFVwZGF0ZUN1cnJlbnRUcmFjZU9wdGlvbnMpOiB2b2lkIHtcbiAgZGlyZWN0TWxmbG93Py51cGRhdGVDdXJyZW50VHJhY2Uob3B0aW9ucyk7XG59XG5cbi8qKiBQZXJzaXN0IHRhZ3Mgb24gdGhlIGRpcmVjdCBNTGZsb3cgdHJhY2UgYWN0aXZlIGluIHRoZSBjdXJyZW50IE9UZWwgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZVRhZ3ModGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZSh7IHRhZ3MgfSk7XG59XG5cbi8qKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBvd25zIHRoZSBmaWx0ZXJlZCBsb2NhbCBNTGZsb3cgdHJhY2VyIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdE1sZmxvd1RyYWNpbmdBY3RpdmUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBkaXJlY3RNbGZsb3dQcm9jZXNzb3IgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIEZsdXNoIHBlbmRpbmcgZGlyZWN0IGxvY2FsIHRyYWNlIGV4cG9ydHMgZHVyaW5nIGdyYWNlZnVsIHNodXRkb3duLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoRGlyZWN0TWxmbG93VHJhY2luZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm9dKTtcbiAgYXdhaXQgZGlyZWN0TWxmbG93UHJvY2Vzc29yPy5mb3JjZUZsdXNoKCk7XG4gIGF3YWl0IGRpcmVjdE1sZmxvd1Byb3ZpZGVyPy5mb3JjZUZsdXNoKCk7XG59XG5cbi8qKlxuICogV2hldGhlciBNTGZsb3cgZmVlZGJhY2sgbG9nZ2luZyBpcyBhdmFpbGFibGUgZm9yIHRoaXMgZGVwbG95bWVudC5cbiAqXG4gKiBFbmFibGVkIHdoZW4gYW4gTUxmbG93IGV4cGVyaW1lbnQgaXMgY29uZmlndXJlZCBhbmQgdHJhY2VzIGhhdmUgYW4gZXhwb3J0XG4gKiBwYXRoOiBBcHBLaXQgT1RMUCBpbiBhIERhdGFicmlja3MgQXBwLCBvciB0aGUgZGlyZWN0IE1MZmxvdyBOb2RlIFNESyBvdXRzaWRlXG4gKiBvbmUuIEJvdGggcGF0aHMgYXJlIHNlbGVjdGVkIGZyb20gc3RhbmRhcmQgZW52aXJvbm1lbnQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWxmbG93RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgaGFzRXhwb3J0ZXIgPSBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVD8udHJpbSgpIHx8XG4gICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVD8udHJpbSgpLFxuICApO1xuICBjb25zdCBoYXNFeHBlcmltZW50ID0gQm9vbGVhbihcbiAgICBwcm9jZXNzLmVudi5NTEZMT1dfRVhQRVJJTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk1MRkxPV19FWFBFUklNRU5UX05BTUU/LnRyaW0oKSxcbiAgKTtcbiAgcmV0dXJuIGhhc0V4cGVyaW1lbnQgJiYgKGhhc0V4cG9ydGVyIHx8IGRpcmVjdE1sZmxvd1RyYWNpbmdDb25maWd1cmVkKCkpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgd2hldGhlciB1c2VyIGZlZWRiYWNrIGlzIGVuYWJsZWQgZnJvbSB0aGUgcGx1Z2luJ3Mgb3B0aW9uYWxcbiAqIGBjb25maWcuZmVlZGJhY2tgIG92ZXJyaWRlOiB0aGUgZXhwbGljaXQgYm9vbGVhbiB3aW5zLCBvdGhlcndpc2UgZmFsbFxuICogYmFjayB0byBhdXRvLWRldGVjdGluZyBNTGZsb3cgdHJhY2luZyAoe0BsaW5rIG1sZmxvd0VuYWJsZWR9KS4gU2hhcmVkXG4gKiBieSB0aGUgcGx1Z2luJ3MgY2xpZW50LWNvbmZpZyBnYXRlIGFuZCB0aGUgc2VydmVyJ3MgdHJhY2UtaWQgaGVhZGVyIHNvXG4gKiB0aGUgdHdvIG5ldmVyIGRpc2FncmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZlZWRiYWNrRW5hYmxlZChleHBsaWNpdDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXhwbGljaXQgPz8gbWxmbG93RW5hYmxlZCgpO1xufVxuXG4vKipcbiAqIFJlamVjdCBhbiBleHBsaWNpdGx5IGVuYWJsZWQgZmVlZGJhY2sgc3VyZmFjZSB3aGVuIG5vIE1MZmxvdyBleHBlcmltZW50IGlzXG4gKiBjb25maWd1cmVkLiBBdXRvIG1vZGUgcmVtYWlucyBub24tZmF0YWwgYW5kIHNpbXBseSBkaXNhYmxlcyBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmVlZGJhY2tDb25maWcoZXhwbGljaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKGV4cGxpY2l0ICE9PSB0cnVlKSByZXR1cm47XG4gIGNvbnN0IGV4cGVyaW1lbnQgPSBjb25maWd1cmVkRXhwZXJpbWVudCgpO1xuICBpZiAoZXhwZXJpbWVudC5pZCB8fCBleHBlcmltZW50Lm5hbWUpIHJldHVybjtcbiAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICBcIm1hc3RyYTogZmVlZGJhY2sgaXMgZW5hYmxlZCBidXQgbm8gTUxmbG93IGV4cGVyaW1lbnQgaXMgY29uZmlndXJlZC4gXCIgK1xuICAgICAgXCJTZXQgTUxGTE9XX0VYUEVSSU1FTlRfSUQgb3IgTUxGTE9XX0VYUEVSSU1FTlRfTkFNRSwgdXNlIGZlZWRiYWNrOiBmYWxzZSwgXCIgK1xuICAgICAgXCJvciBvbWl0IGZlZWRiYWNrIHRvIHVzZSBhdXRvbWF0aWMgZGV0ZWN0aW9uLlwiLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgY29uZmlndXJlZCBleHBlcmltZW50IFVSTCBvbmx5IHdoZW4gdGhlIGFjdGl2ZSBEYXRhYnJpY2tzXG4gKiBwcmluY2lwYWwgaGFzIGVmZmVjdGl2ZSBgQ0FOX01BTkFHRWAgcGVybWlzc2lvbi4gUGVybWlzc2lvbiBsb29rdXAgaXNcbiAqIGludGVudGlvbmFsbHkgYmVzdC1lZmZvcnQgc28gQXBwcyBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgZXhwb3NlIHRoZVxuICogcmVxdWlyZWQgQVBJcyBzaW1wbHkgb21pdCB0aGUgZGVidWcgYWZmb3JkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1sZmxvd0V4cGVyaW1lbnRNYW5hZ2VyVXJsKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVNbGZsb3dFeHBlcmltZW50TWFuYWdlclVybChjbGllbnQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVNbGZsb3dFeHBlcmltZW50TWFuYWdlclVybChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBlcmltZW50SWQgPSBhd2FpdCByZXNvbHZlRXhwZXJpbWVudElkKGNsaWVudCk7XG4gIGlmICghZXhwZXJpbWVudElkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IFtjdXJyZW50UmVzcG9uc2UsIHBlcm1pc3Npb25zUmVzcG9uc2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRhdGFicmlja3NGZXRjaChjbGllbnQsIFwiL2FwaS8yLjAvcHJldmlldy9zY2ltL3YyL01lXCIsIHsgbWV0aG9kOiBcIkdFVFwiIH0pLFxuICAgIGRhdGFicmlja3NGZXRjaChcbiAgICAgIGNsaWVudCxcbiAgICAgIGAvYXBpLzIuMC9wZXJtaXNzaW9ucy9leHBlcmltZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChleHBlcmltZW50SWQpfWAsXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiB9LFxuICAgICksXG4gIF0pO1xuICBpZiAoIWN1cnJlbnRSZXNwb25zZS5vayB8fCAhcGVybWlzc2lvbnNSZXNwb25zZS5vaykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBjdXJyZW50ID0gQ3VycmVudFVzZXJSZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UoYXdhaXQgcmVhZFJlc3BvbnNlSnNvbihjdXJyZW50UmVzcG9uc2UpKTtcbiAgY29uc3QgcGVybWlzc2lvbnMgPSBFeHBlcmltZW50UGVybWlzc2lvbnNSZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UoXG4gICAgYXdhaXQgcmVhZFJlc3BvbnNlSnNvbihwZXJtaXNzaW9uc1Jlc3BvbnNlKSxcbiAgKTtcbiAgaWYgKCFjdXJyZW50LnN1Y2Nlc3MgfHwgIXBlcm1pc3Npb25zLnN1Y2Nlc3MpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgdXNlck5hbWVzID0gbmV3IFNldChcbiAgICBbY3VycmVudC5kYXRhLnVzZXJOYW1lLCBjdXJyZW50LmRhdGEuYXBwbGljYXRpb25JZCwgY3VycmVudC5kYXRhLmRpc3BsYXlOYW1lXS5maWx0ZXIoXG4gICAgICAodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSksXG4gICAgKSxcbiAgKTtcbiAgY29uc3QgZ3JvdXBOYW1lcyA9IG5ldyBTZXQoXG4gICAgKGN1cnJlbnQuZGF0YS5ncm91cHMgPz8gW10pLmZsYXRNYXAoKHsgdmFsdWUsIGRpc3BsYXkgfSkgPT5cbiAgICAgIFt2YWx1ZSwgZGlzcGxheV0uZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiBCb29sZWFuKGVudHJ5KSksXG4gICAgKSxcbiAgKTtcbiAgY29uc3QgY2FuTWFuYWdlID0gKHBlcm1pc3Npb25zLmRhdGEuYWNjZXNzX2NvbnRyb2xfbGlzdCA/PyBbXSkuc29tZSgoZW50cnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVzID1cbiAgICAgIChlbnRyeS51c2VyX25hbWUgIT09IHVuZGVmaW5lZCAmJiB1c2VyTmFtZXMuaGFzKGVudHJ5LnVzZXJfbmFtZSkpIHx8XG4gICAgICAoZW50cnkuc2VydmljZV9wcmluY2lwYWxfbmFtZSAhPT0gdW5kZWZpbmVkICYmIHVzZXJOYW1lcy5oYXMoZW50cnkuc2VydmljZV9wcmluY2lwYWxfbmFtZSkpIHx8XG4gICAgICAoZW50cnkuZ3JvdXBfbmFtZSAhPT0gdW5kZWZpbmVkICYmIGdyb3VwTmFtZXMuaGFzKGVudHJ5Lmdyb3VwX25hbWUpKTtcbiAgICByZXR1cm4gKFxuICAgICAgbWF0Y2hlcyAmJlxuICAgICAgKGVudHJ5LmFsbF9wZXJtaXNzaW9ucyA/PyBbXSkuc29tZShcbiAgICAgICAgKHBlcm1pc3Npb24pID0+IHBlcm1pc3Npb24ucGVybWlzc2lvbl9sZXZlbCA9PT0gXCJDQU5fTUFOQUdFXCIsXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG4gIGlmICghY2FuTWFuYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgVVJMKGAvbWwvZXhwZXJpbWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQoZXhwZXJpbWVudElkKX1gLCBob3N0KS50b1N0cmluZygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEV4cGVyaW1lbnQoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuKTogUHJvbWlzZTx7IGV4cGVyaW1lbnRfaWQ6IHN0cmluZzsgdGFncz86IHVua25vd24gfSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBlcmltZW50ID0gY29uZmlndXJlZEV4cGVyaW1lbnQoKTtcbiAgY29uc3QgcGF0aCA9IGV4cGVyaW1lbnQuaWRcbiAgICA/IGAvYXBpLzIuMC9tbGZsb3cvZXhwZXJpbWVudHMvZ2V0P2V4cGVyaW1lbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQoZXhwZXJpbWVudC5pZCl9YFxuICAgIDogZXhwZXJpbWVudC5uYW1lXG4gICAgICA/IGAvYXBpLzIuMC9tbGZsb3cvZXhwZXJpbWVudHMvZ2V0LWJ5LW5hbWU/ZXhwZXJpbWVudF9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGV4cGVyaW1lbnQubmFtZSxcbiAgICAgICAgKX1gXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRhdGFicmlja3NGZXRjaChjbGllbnQsIHBhdGgsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYXJzZWQgPSBNbGZsb3dFeHBlcmltZW50UmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKGF3YWl0IHJlYWRSZXNwb25zZUpzb24ocmVzcG9uc2UpKTtcbiAgcmV0dXJuIHBhcnNlZC5zdWNjZXNzID8gcGFyc2VkLmRhdGEuZXhwZXJpbWVudCA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUV4cGVyaW1lbnRJZChjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBjb25maWd1cmVkRXhwZXJpbWVudCgpO1xuICBpZiAoY29uZmlndXJlZC5pZCkgcmV0dXJuIGNvbmZpZ3VyZWQuaWQ7XG4gIHJldHVybiAoYXdhaXQgZmV0Y2hFeHBlcmltZW50KGNsaWVudCkpPy5leHBlcmltZW50X2lkO1xufVxuXG4vKiogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ0ZlZWRiYWNrfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRmVlZGJhY2tQYXJhbXMge1xuICAvKiogTUxmbG93IHRyYWNlIGlkIHRoZSBhc3Nlc3NtZW50IGF0dGFjaGVzIHRvIChgdHItPGhleD5gKS4gKi9cbiAgdHJhY2VJZDogc3RyaW5nO1xuICAvKiogQXNzZXNzbWVudCBuYW1lOyBkZWZhdWx0cyBwZXIgd2hldGhlciBhIHZhbHVlIG9yIGEgY29tbWVudCBpcyBzZW50LiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGh1bWJzIC8gcmF0aW5nIC8gbGFiZWwgdmFsdWUuIE9taXQgZm9yIGEgY29tbWVudC1vbmx5IHN1Ym1pc3Npb24uICovXG4gIHZhbHVlPzogYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZztcbiAgLyoqIEZyZWVmb3JtIGNvbW1lbnQ6IHRoZSByYXRpb25hbGUgYWxvbmdzaWRlIGEgdmFsdWUsIG9yIHRoZSB2YWx1ZSBpdHNlbGYgd2hlbiBub25lLiAqL1xuICBjb21tZW50Pzogc3RyaW5nO1xuICAvKiogSWRlbnRpdHkgdGhlIGZlZWRiYWNrIGlzIGF0dHJpYnV0ZWQgdG8gKHVzZXIgZW1haWwgLyBpZCkuICovXG4gIHNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvZyBhIEhVTUFOIGZlZWRiYWNrIGFzc2Vzc21lbnQgdG8gYSB0cmFjZS4gUmV0dXJucyB0aGUgY3JlYXRlZFxuICogYXNzZXNzbWVudCBpZCBvbiBzdWNjZXNzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSB0cmFjZSBjYW4ndCBiZVxuICogZm91bmQgKGV2ZW4gYWZ0ZXIgcmV0cnlpbmcgZm9yIGV4cG9ydCBsYWcpIG9yIHRoZSByZXF1ZXN0IG90aGVyd2lzZVxuICogZmFpbHMgLSBjYWxsZXJzIHN1cmZhY2UgdGhhdCBhcyBhIHNvZnQgXCJub3QgcmVjb3JkZWRcIiByYXRoZXIgdGhhbiBhblxuICogZXJyb3IsIGtlZXBpbmcgdGhlIGNoYXQgdXNhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nRmVlZGJhY2soXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBwYXJhbXM6IExvZ0ZlZWRiYWNrUGFyYW1zLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgLy8gQSBjb21tZW50IHdpdGggbm8gdGh1bWJzIHZhbHVlIGlzIGxvZ2dlZCBhcyB0ZXh0IGZlZWRiYWNrOyBhIHZhbHVlXG4gIC8vICh3aXRoIGFuIG9wdGlvbmFsIGNvbW1lbnQgYXMgdGhlIHJhdGlvbmFsZSkgaXMgdGhlIHRodW1icyBwYXRoLlxuICBjb25zdCBoYXNWYWx1ZSA9IHBhcmFtcy52YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBuYW1lID1cbiAgICBwYXJhbXMubmFtZT8udHJpbSgpIHx8XG4gICAgKGhhc1ZhbHVlID8gZmVlZGJhY2suREVGQVVMVF9GRUVEQkFDS19OQU1FIDogZmVlZGJhY2suREVGQVVMVF9DT01NRU5UX05BTUUpO1xuICBjb25zdCB2YWx1ZSA9IGhhc1ZhbHVlID8gcGFyYW1zLnZhbHVlIDogcGFyYW1zLmNvbW1lbnQ7XG4gIGNvbnN0IGFzc2Vzc21lbnRUcmFjZUlkID0gbWxmbG93QXNzZXNzbWVudFRyYWNlSWQoXG4gICAgcGFyYW1zLnRyYWNlSWQsXG4gICAgYXdhaXQgcmVzb2x2ZVVjVHJhY2VQcmVmaXgoY2xpZW50KSxcbiAgKTtcbiAgY29uc3QgYXNzZXNzbWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgdHJhY2VfaWQ6IGFzc2Vzc21lbnRUcmFjZUlkLFxuICAgIGFzc2Vzc21lbnRfbmFtZTogbmFtZSxcbiAgICBzb3VyY2U6IHtcbiAgICAgIHNvdXJjZV90eXBlOiBcIkhVTUFOXCIsXG4gICAgICBzb3VyY2VfaWQ6IHBhcmFtcy5zb3VyY2VJZD8udHJpbSgpIHx8IFwidXNlclwiLFxuICAgIH0sXG4gICAgZmVlZGJhY2s6IHsgdmFsdWUgfSxcbiAgICAuLi4oaGFzVmFsdWUgJiYgcGFyYW1zLmNvbW1lbnQ/LnRyaW0oKSA/IHsgcmF0aW9uYWxlOiBwYXJhbXMuY29tbWVudCB9IDoge30pLFxuICB9O1xuICBjb25zdCBib2R5ID0geyBhc3Nlc3NtZW50IH07XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gTk9UX0ZPVU5EX1JFVFJJRVM7IGF0dGVtcHQrKykge1xuICAgIGxldCByZXM6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCBkYXRhYnJpY2tzRmV0Y2goY2xpZW50LCBhc3Nlc3NtZW50c1BhdGgoYXNzZXNzbWVudFRyYWNlSWQpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmVlZGJhY2sgcmVxdWVzdCBmYWlsZWRcIiwge1xuICAgICAgICB0cmFjZUlkOiBwYXJhbXMudHJhY2VJZCxcbiAgICAgICAgYXNzZXNzbWVudFRyYWNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzLm9rKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCByZWFkUmVzcG9uc2VKc29uKHJlcyk7XG4gICAgICBjb25zdCBhc3Nlc3NtZW50SWQgPVxuICAgICAgICAocGFyc2VkIGFzIHsgYXNzZXNzbWVudD86IHsgYXNzZXNzbWVudF9pZD86IHVua25vd24gfSB9KT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA/P1xuICAgICAgICAocGFyc2VkIGFzIHsgYXNzZXNzbWVudF9pZD86IHVua25vd24gfSk/LmFzc2Vzc21lbnRfaWQ7XG4gICAgICByZXR1cm4gdHlwZW9mIGFzc2Vzc21lbnRJZCA9PT0gXCJzdHJpbmdcIiA/IGFzc2Vzc21lbnRJZCA6IFwiXCI7XG4gICAgfVxuICAgIC8vIFRyYWNlIGV4cG9ydCBpcyBhc3luYzsgYSBmcmVzaCB0cmFjZSBtYXkgbm90IGV4aXN0IHlldC4gUmV0cnkgYVxuICAgIC8vIGZldyB0aW1lcyB3aXRoIGEgc2hvcnQgYmFja29mZiBiZWZvcmUgZ2l2aW5nIHVwIHNvZnRseS5cbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0ICYmIGF0dGVtcHQgPCBOT1RfRk9VTkRfUkVUUklFUykge1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChOT1RfRk9VTkRfQkFDS09GRl9NUyAqIChhdHRlbXB0ICsgMSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxvZ2dlci53YXJuKFwiZmVlZGJhY2sgbm90IHJlY29yZGVkXCIsIHtcbiAgICAgIHRyYWNlSWQ6IHBhcmFtcy50cmFjZUlkLFxuICAgICAgYXNzZXNzbWVudFRyYWNlSWQsXG4gICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICBib2R5OiBhd2FpdCByZWFkUmVzcG9uc2VUZXh0KHJlcyksXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWxmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21sZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBSXpFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNoRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBSzNDLElBQUksWUFBc0MsQ0FBQztBQUMzQyxJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztBQUNwQyxJQUFJLG9CQUFvRCxDQUFDO0FBQ3pELElBQUkscUJBQWdELENBQUM7QUFDckQsSUFBSSw2QkFBNkIsR0FBRyxLQUFLLENBQUM7QUFDMUMsSUFBSSx3QkFBcUQsQ0FBQztBQUMxRCxJQUFJLG9CQUF3QyxDQUFDO0FBQzdDLE1BQU0seUJBQXlC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ZmxvdyB1c2VyLWZlZWRiYWNrIGxvZ2dpbmc6IGRldGVjdCB3aGV0aGVyIE1MZmxvdyB0cmFjaW5nIGlzIHdpcmVkXG4gKiBmb3IgdGhpcyBkZXBsb3ltZW50LCBhbmQgbG9nIGEgdGh1bWJzIC8gY29tbWVudCBhcyBhIHRyYWNlXG4gKiAqYXNzZXNzbWVudCogdmlhIHRoZSBEYXRhYnJpY2tzIE1MZmxvdyBSRVNUIEFQSS5cbiAqXG4gKiBGZWVkYmFjayBhdHRhY2hlcyB0byBhIHRyYWNlLCBhbmQgdGhlIHBsdWdpbidzIHNwYW5zIHJlYWNoIE1MZmxvd1xuICogdGhyb3VnaCB0aGUgc2FtZSBPVGVsIHBpcGVsaW5lIGFzIGV2ZXJ5IG90aGVyIEFwcEtpdCBzcGFuIChzZWVcbiAqIGBvYnNlcnZhYmlsaXR5LnRzYCkuIE9uIERhdGFicmlja3MgQXBwcyB0aGF0IHBpcGVsaW5lIGlzIHRoZSBVQ1xuICogc2lkZWNhciBpbmplY3RlZCBieSBgdGVsZW1ldHJ5X2V4cG9ydF9kZXN0aW5hdGlvbnNgLCBub3QgYSBkaXJlY3RcbiAqIHdvcmtzcGFjZSBPVExQIFVSTC4gTUxmbG93IGRlcml2ZXMgaXRzIHRyYWNlIGlkIGZyb20gdGhlIE9wZW5UZWxlbWV0cnlcbiAqIHRyYWNlIGlkIChgdHItPGhleChvdGVsVHJhY2VJZCk+YCksIHNvIHRoZSBzZXJ2ZXIgc3RhbXBzIHRoZSBhY3RpdmVcbiAqIHRyYWNlIGlkIG9uIGVhY2ggdHVybidzIHJlc3BvbnNlIGFuZCB0aGUgY2xpZW50IHNlbmRzIGl0IGJhY2sgaGVyZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBNTGZsb3cgSlMgU0RLLCBzbyB0aGlzIHBvc3RzIHRvIHRoZSBhc3Nlc3NtZW50cyBSRVNUXG4gKiBlbmRwb2ludCBkaXJlY3RseSB1c2luZyB0aGUgT0JPLXNjb3BlZCB3b3Jrc3BhY2UgY2xpZW50ICh0aGUgZmVlZGJhY2tcbiAqIGlzIHRodXMgYXR0cmlidXRlZCB0byB0aGUgc2lnbmVkLWluIHVzZXIpLiBVQy1iYWNrZWQgQXBwcyB0cmFjZXMgbmVlZFxuICogdGhlIGV4cGVyaW1lbnQncyB0YWJsZS1wcmVmaXggVVJJIChgdHJhY2U6L3tjYXRhbG9nfS57c2NoZW1hfS57cHJlZml4fS97dHItaGV4fWApXG4gKiByYXRoZXIgdGhhbiB0aGUgZXhwZXJpbWVudC1zdG9yZSBpZCB0aGUgVUkgZG9lcyBub3Qgc3RvcmUuIFRoYXQgcHJlZml4IGlzXG4gKiByZWFkIGZyb20gdGhlIGV4cGVyaW1lbnQncyBgbWxmbG93LmV4cGVyaW1lbnQuZGF0YWJyaWNrc1RyYWNlRGVzdGluYXRpb25QYXRoYFxuICogdGFnIChvciB0aGUgc3BhbnMtdGFibGUgdGFnKTsgYE1MRkxPV19VQ19UUkFDRV9QUkVGSVhgIHJlbWFpbnMgYW4gb3B0aW9uYWxcbiAqIG92ZXJyaWRlLiBUcmFjZSBleHBvcnQgaXMgYXN5bmNocm9ub3VzLCBzbyB0aGUganVzdC1maW5pc2hlZCB0cmFjZSBtYXkgbm90XG4gKiBleGlzdCBpbiBNTGZsb3cgeWV0IHdoZW4gdGhlIHVzZXIgcmVhY3RzOyB0aGUgbG9nIGNhbGwgcmV0cmllcyBicmllZmx5IG9uXG4gKiBcIm5vdCBmb3VuZFwiIGJlZm9yZSBnaXZpbmcgdXAgc29mdGx5LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIGNyZWF0ZVdvcmtzcGFjZUNsaWVudCB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYXN5bmNVdGlscywgZXJyb3JVdGlscywgbG9nLCBvYmplY3QgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgZmVlZGJhY2sgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5pbXBvcnQgeyBUcmFjZUxvY2F0aW9uVHlwZSwgVHJhY2VNZXRhZGF0YUtleSB9IGZyb20gXCJAbWxmbG93L2NvcmVcIjtcbmltcG9ydCB7IFRyYWNlSW5mbyB9IGZyb20gXCJAbWxmbG93L2NvcmUvZGlzdC9jb3JlL2VudGl0aWVzL3RyYWNlX2luZm9cIjtcbmltcG9ydCB7IFRyYWNlU3RhdGUgfSBmcm9tIFwiQG1sZmxvdy9jb3JlL2Rpc3QvY29yZS9lbnRpdGllcy90cmFjZV9zdGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xuaW1wb3J0IHR5cGUgeyBSZWFkYWJsZVNwYW4sIFNwYW4gYXMgU2RrU3BhbiwgU3BhblByb2Nlc3NvciB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2UtYmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBOb2RlVHJhY2VyUHJvdmlkZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGVcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyBkYXRhYnJpY2tzRmV0Y2gsIHJlYWRSZXNwb25zZUpzb24sIHJlYWRSZXNwb25zZVRleHQgfSBmcm9tIFwiLi9yZXN0LnRzXCI7XG5pbXBvcnQgeyBBUFBLSVRfQUdFTlRfVFJBQ0VfUk9PVF9BVFRSIH0gZnJvbSBcIi4vdHJhY2UtYXR0cmlidXRlcy50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwibWFzdHJhL21sZmxvd1wiKTtcblxudHlwZSBNbGZsb3dNb2R1bGUgPSB0eXBlb2YgaW1wb3J0KFwiQG1sZmxvdy9jb3JlXCIpO1xudHlwZSBVcGRhdGVDdXJyZW50VHJhY2VPcHRpb25zID0gUGFyYW1ldGVyczxNbGZsb3dNb2R1bGVbXCJ1cGRhdGVDdXJyZW50VHJhY2VcIl0+WzBdO1xuXG5sZXQgZGlyZWN0TWxmbG93OiBNbGZsb3dNb2R1bGUgfCB1bmRlZmluZWQ7XG5sZXQgZGlyZWN0TWxmbG93SW5pdFN0YXJ0ZWQgPSBmYWxzZTtcbmxldCBkaXJlY3RNbGZsb3dQcm92aWRlcjogTm9kZVRyYWNlclByb3ZpZGVyIHwgdW5kZWZpbmVkO1xubGV0IGRpcmVjdE1sZmxvd1Byb2Nlc3NvcjogU3BhblByb2Nlc3NvciB8IHVuZGVmaW5lZDtcbmxldCBhcHBNbGZsb3dUcmFjZUluZm9Jbml0U3RhcnRlZCA9IGZhbHNlO1xubGV0IGFwcE1sZmxvd1RyYWNlSW5mb0NsaWVudDogV29ya3NwYWNlQ2xpZW50IHwgdW5kZWZpbmVkO1xubGV0IGFwcE1sZmxvd1RyYWNlUHJlZml4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5jb25zdCBwZW5kaW5nQXBwTWxmbG93VHJhY2VJbmZvID0gbmV3IFNldDxQcm9taXNlPHZvaWQ+PigpO1xuXG5jb25zdCBOT0lTWV9JTlNUUlVNRU5UQVRJT05fU0NPUEVTID0gbmV3IFNldChbXG4gIFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWV4cHJlc3NcIixcbiAgXCJAb3BlbnRlbGVtZXRyeS9pbnN0cnVtZW50YXRpb24taHR0cFwiLFxuICBcImNhY2hlLW1hbmFnZXItY2FjaGUtbWFuYWdlclwiLFxuXSk7XG5cbmZ1bmN0aW9uIGlzQWdlbnRUcmFjZVJvb3Qoc3BhbjogU2RrU3Bhbik6IGJvb2xlYW4ge1xuICByZXR1cm4gc3Bhbi5hdHRyaWJ1dGVzW0FQUEtJVF9BR0VOVF9UUkFDRV9ST09UX0FUVFJdID09PSB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1VzZWZ1bEFnZW50RGVzY2VuZGFudChzcGFuOiBTZGtTcGFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhTk9JU1lfSU5TVFJVTUVOVEFUSU9OX1NDT1BFUy5oYXMoc3Bhbi5pbnN0cnVtZW50YXRpb25TY29wZS5uYW1lKTtcbn1cblxuLyoqXG4gKiBSZXN0cmljdCB0aGUgZGlyZWN0IE1MZmxvdyBwcm92aWRlciB0byBjaGF0IHJvb3RzIGFuZCB0aGVpciBkZXNjZW5kYW50cy5cbiAqIEFwcEtpdCBhbmQgTWFzdHJhIGNyZWF0ZSBvdGhlciBPVGVsIHJvb3RzIGZvciBjYWNoZSBhbmQgcGx1Z2luIG9wZXJhdGlvbnM7XG4gKiBmb3J3YXJkaW5nIHRob3NlIHdvdWxkIHJlY3JlYXRlIHRoZSBvbmUtdHJhY2UtcGVyLXJlcXVlc3Qgbm9pc2UgdGhpcyBwYXRoIGlzXG4gKiBpbnRlbmRlZCB0byBhdm9pZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFnZW50VHJhY2VTcGFuUHJvY2Vzc29yIGltcGxlbWVudHMgU3BhblByb2Nlc3NvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2VJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzcGFuSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkZWxlZ2F0ZTogU3BhblByb2Nlc3Nvcikge31cblxuICBvblN0YXJ0KHNwYW46IFNka1NwYW4sIHBhcmVudENvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCB0cmFjZUlkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gICAgY29uc3QgaXNSb290ID0gIXNwYW4ucGFyZW50U3BhbkNvbnRleHQ/LnNwYW5JZDtcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBpZiAoIWlzQWdlbnRUcmFjZVJvb3Qoc3BhbikpIHJldHVybjtcbiAgICAgIHRoaXMudHJhY2VJZHMuYWRkKHRyYWNlSWQpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudHJhY2VJZHMuaGFzKHRyYWNlSWQpIHx8ICFpc1VzZWZ1bEFnZW50RGVzY2VuZGFudChzcGFuKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNwYW5JZHMuYWRkKHNwYW4uc3BhbkNvbnRleHQoKS5zcGFuSWQpO1xuICAgIHRoaXMuZGVsZWdhdGUub25TdGFydChzcGFuLCBwYXJlbnRDb250ZXh0KTtcbiAgfVxuXG4gIG9uRW5kaW5nKHNwYW46IFNka1NwYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3Bhbklkcy5oYXMoc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZCkpIHJldHVybjtcbiAgICB0aGlzLmRlbGVnYXRlLm9uRW5kaW5nPy4oc3Bhbik7XG4gIH1cblxuICBvbkVuZChzcGFuOiBSZWFkYWJsZVNwYW4pOiB2b2lkIHtcbiAgICBjb25zdCB0cmFjZUlkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnRyYWNlSWQ7XG4gICAgY29uc3Qgc3BhbklkID0gc3Bhbi5zcGFuQ29udGV4dCgpLnNwYW5JZDtcbiAgICBpZiAoIXRoaXMuc3Bhbklkcy5kZWxldGUoc3BhbklkKSkgcmV0dXJuO1xuICAgIHRoaXMuZGVsZWdhdGUub25FbmQoc3Bhbik7XG4gICAgaWYgKCFzcGFuLnBhcmVudFNwYW5Db250ZXh0Py5zcGFuSWQpIHRoaXMudHJhY2VJZHMuZGVsZXRlKHRyYWNlSWQpO1xuICB9XG5cbiAgZm9yY2VGbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kZWxlZ2F0ZS5mb3JjZUZsdXNoKCk7XG4gIH1cblxuICBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRyYWNlSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5zcGFuSWRzLmNsZWFyKCk7XG4gICAgcmV0dXJuIHRoaXMuZGVsZWdhdGUuc2h1dGRvd24oKTtcbiAgfVxufVxuXG4vKiogV29ya3NwYWNlIGNsaWVudCBjYXJyaWVkIG9uIGFuIEFwcEtpdCBleGVjdXRpb24gY29udGV4dC4gKi9cbnR5cGUgV29ya3NwYWNlQ2xpZW50ID0gYXBwa2l0LldvcmtzcGFjZUNsaWVudExpa2U7XG5cbi8qKiBFeHBlcmltZW50IHRhZyBEYXRhYnJpY2tzIHN0b3JlcyBhcyBgY2F0YWxvZy5zY2hlbWEudGFibGVfcHJlZml4YC4gKi9cbmNvbnN0IFRSQUNFX0RFU1RJTkFUSU9OX1BBVEhfVEFHID0gXCJtbGZsb3cuZXhwZXJpbWVudC5kYXRhYnJpY2tzVHJhY2VEZXN0aW5hdGlvblBhdGhcIjtcbi8qKiBFeHBlcmltZW50IHRhZyBuYW1pbmcgdGhlIE9UZWwgc3BhbnMgdGFibGUgKGBjYXRhbG9nLnNjaGVtYS57cHJlZml4fV9vdGVsX3NwYW5zYCkuICovXG5jb25zdCBUUkFDRV9TUEFOX1NUT1JBR0VfVEFCTEVfVEFHID0gXCJtbGZsb3cuZXhwZXJpbWVudC5kYXRhYnJpY2tzVHJhY2VTcGFuU3RvcmFnZVRhYmxlXCI7XG5cbi8qKlxuICogQ2FjaGVkIFVDIHRhYmxlIHByZWZpeCByZXNvbHZlZCBmcm9tIHRoZSBleHBlcmltZW50LiBgbG9hZGVkYCBkaXN0aW5ndWlzaGVzXG4gKiBcIm5vdCBmZXRjaGVkIHlldFwiIGZyb20gXCJmZXRjaGVkLCBleHBlcmltZW50IGhhcyBubyBVQyBsb2NhdGlvblwiLiBOZXR3b3JrXG4gKiBmYWlsdXJlcyBhcmUgbm90IGNhY2hlZCBzbyBhIGxhdGVyIHRodW1icyBjbGljayBjYW4gcmV0cnkuXG4gKi9cbmxldCBsb2FkZWRVY1ByZWZpeDogeyBwcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkO1xuXG4vKiogU3RyaXAgdGhlIGB0cmFjZTovYCBVUkkgd3JhcHBlciBhbmQgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGEgVUMgcHJlZml4LiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplVWNQcmVmaXgocmF3OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB2YWx1ZSA9IHJhd1xuICAgID8udHJpbSgpXG4gICAgLnJlcGxhY2UoL150cmFjZTpcXC8vLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xuICByZXR1cm4gdmFsdWUgfHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERlcml2ZSBgY2F0YWxvZy5zY2hlbWEudGFibGVfcHJlZml4YCBmcm9tIGEgc3BhbnMgdGFibGUgbmFtZS5cbiAqIERhdGFicmlja3MgbmFtZXMgdGhlIHRhYmxlIGB7cHJlZml4fV9vdGVsX3NwYW5zYC5cbiAqL1xuZnVuY3Rpb24gcHJlZml4RnJvbVNwYW5UYWJsZSh0YWJsZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbmFtZSA9IHRhYmxlPy50cmltKCk7XG4gIGlmICghbmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG5hbWUuZW5kc1dpdGgoXCJfb3RlbF9zcGFuc1wiKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLVwiX290ZWxfc3BhbnNcIi5sZW5ndGgpO1xuICBpZiAobmFtZS5lbmRzV2l0aChcIl9zcGFuc1wiKSkgcmV0dXJuIG5hbWUuc2xpY2UoMCwgLVwiX3NwYW5zXCIubGVuZ3RoKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXhwZXJpbWVudFRhZ01hcChyYXc6IHVua25vd24pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgdGFncyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGlmIChBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICBmb3IgKGNvbnN0IHRhZyBvZiByYXcpIHtcbiAgICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKHRhZykgfHwgdHlwZW9mIHRhZy5rZXkgIT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIHRhZy52YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRhZ3Muc2V0KHRhZy5rZXksIHRhZy52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0YWdzO1xuICB9XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHJhdykpIHJldHVybiB0YWdzO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcpKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgdGFncy5zZXQoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHRhZ3M7XG59XG5cbi8qKlxuICogVUMgdGFibGUgcHJlZml4IHRoZSBhc3Nlc3NtZW50cyBBUEkgbmVlZHMsIHJlYWQgZnJvbSBleHBlcmltZW50IHRhZ3MuXG4gKlxuICogUHJlZmVycyB0aGUgdGhyZWUtcGFydCBkZXN0aW5hdGlvbiBwYXRoIERhdGFicmlja3Mgd3JpdGVzIHdoZW4gdGhlXG4gKiBleHBlcmltZW50IGlzIGxpbmtlZCB0byBhIHRhYmxlLXByZWZpeCBsb2NhdGlvbi4gRmFsbHMgYmFjayB0byBzdHJpcHBpbmdcbiAqIGBfb3RlbF9zcGFuc2AgZnJvbSB0aGUgc3BhbnMtdGFibGUgdGFnLiBUd28tcGFydCBzY2hlbWEtbGlua2VkIGRlc3RpbmF0aW9uc1xuICogYXJlIGlnbm9yZWQgKHRoZXkgYXJlIG5vdCBhIHRhYmxlIHByZWZpeCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1Y1RyYWNlUHJlZml4RnJvbUV4cGVyaW1lbnRUYWdzKHJhd1RhZ3M6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YWdzID0gZXhwZXJpbWVudFRhZ01hcChyYXdUYWdzKTtcbiAgY29uc3QgZGVzdGluYXRpb24gPSBub3JtYWxpemVVY1ByZWZpeCh0YWdzLmdldChUUkFDRV9ERVNUSU5BVElPTl9QQVRIX1RBRykpO1xuICBpZiAoZGVzdGluYXRpb24gJiYgZGVzdGluYXRpb24uc3BsaXQoXCIuXCIpLmxlbmd0aCA+PSAzKSByZXR1cm4gZGVzdGluYXRpb247XG4gIHJldHVybiBwcmVmaXhGcm9tU3BhblRhYmxlKHRhZ3MuZ2V0KFRSQUNFX1NQQU5fU1RPUkFHRV9UQUJMRV9UQUcpKTtcbn1cblxuLyoqIERyb3AgdGhlIGluLXByb2Nlc3MgVUMgcHJlZml4IGNhY2hlICh0ZXN0cykuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRVY1RyYWNlUHJlZml4Q2FjaGUoKTogdm9pZCB7XG4gIGxvYWRlZFVjUHJlZml4ID0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyYWNlIGlkIHRoZSBhc3Nlc3NtZW50cyBSRVNUIEFQSSBhY2NlcHRzIGZvciB0aGlzIGRlcGxveW1lbnQuXG4gKlxuICogRGF0YWJyaWNrcyBBcHBzIHBlcnNpc3QgdHJhY2VzIGluIFVuaXR5IENhdGFsb2cuIFRoZSBleHBlcmltZW50IFVJIGxpc3RzXG4gKiB0aG9zZSByb3dzLCBidXQgYFBPU1QgL2FwaS8zLjAvbWxmbG93L3RyYWNlcy97aWR9L2Fzc2Vzc21lbnRzYCBsb29rcyB1cCB0aGVcbiAqIGV4cGVyaW1lbnQgc3RvcmUgdW5sZXNzIGB7aWR9YCBpcyB0aGUgVUMgVVJJIGB0cmFjZTove2NhdGFsb2d9LntzY2hlbWF9LntwcmVmaXh9L3t0ci1oZXh9YC5cbiAqIEEgYmFyZSBgdHItPGhleD5gIDQwNHMgYW5kIHRoZSBhc3Nlc3NtZW50IG5ldmVyIGFwcGVhcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtbGZsb3dBc3Nlc3NtZW50VHJhY2VJZCh0cmFjZUlkOiBzdHJpbmcsIHByZWZpeD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlc29sdmVkID0gbm9ybWFsaXplVWNQcmVmaXgocHJlZml4KTtcbiAgcmV0dXJuIHJlc29sdmVkID8gYHRyYWNlOi8ke3Jlc29sdmVkfS8ke3RyYWNlSWR9YCA6IHRyYWNlSWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVVY1RyYWNlUHJlZml4KGNsaWVudDogV29ya3NwYWNlQ2xpZW50KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgZnJvbUVudiA9IG5vcm1hbGl6ZVVjUHJlZml4KHByb2Nlc3MuZW52Lk1MRkxPV19VQ19UUkFDRV9QUkVGSVgpO1xuICBpZiAoZnJvbUVudikgcmV0dXJuIGZyb21FbnY7XG4gIGlmIChsb2FkZWRVY1ByZWZpeCkgcmV0dXJuIGxvYWRlZFVjUHJlZml4LnByZWZpeDtcbiAgY29uc3QgZXhwZXJpbWVudCA9IGF3YWl0IGZldGNoRXhwZXJpbWVudChjbGllbnQpO1xuICBpZiAoIWV4cGVyaW1lbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHByZWZpeCA9IHVjVHJhY2VQcmVmaXhGcm9tRXhwZXJpbWVudFRhZ3MoZXhwZXJpbWVudC50YWdzKTtcbiAgbG9hZGVkVWNQcmVmaXggPSB7IHByZWZpeCB9O1xuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKiogQXNzZXNzbWVudHMgUkVTVCBwYXRoIGZvciBhIHRyYWNlLiBgMy4wYCBpcyB0aGUgY3VycmVudCBNTGZsb3cgQVBJIHZlcnNpb24uICovXG5jb25zdCBhc3Nlc3NtZW50c1BhdGggPSAodHJhY2VJZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGAvYXBpLzMuMC9tbGZsb3cvdHJhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRyYWNlSWQpfS9hc3Nlc3NtZW50c2A7XG5cbi8qKiBOdW1iZXIgb2YgdGltZXMgdG8gcmV0cnkgYSBcInRyYWNlIG5vdCBmb3VuZFwiIHJlc3BvbnNlIGJlZm9yZSBnaXZpbmcgdXAuICovXG5jb25zdCBOT1RfRk9VTkRfUkVUUklFUyA9IDM7XG4vKiogQmFzZSBiYWNrb2ZmIGJldHdlZW4gXCJ0cmFjZSBub3QgZm91bmRcIiByZXRyaWVzLCBpbiBtcyAoZ3Jvd3MgbGluZWFybHkpLiAqL1xuY29uc3QgTk9UX0ZPVU5EX0JBQ0tPRkZfTVMgPSAxMjAwO1xuXG5jb25zdCBNbGZsb3dFeHBlcmltZW50UmVzcG9uc2VTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGV4cGVyaW1lbnQ6IHpcbiAgICAgIC5vYmplY3Qoe1xuICAgICAgICBleHBlcmltZW50X2lkOiB6LnN0cmluZygpLm1pbigxKS5kZXNjcmliZShcIldvcmtzcGFjZSBNTGZsb3cgZXhwZXJpbWVudCBpZGVudGlmaWVyLlwiKSxcbiAgICAgICAgdGFnczogei51bmtub3duKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIkV4cGVyaW1lbnQgdGFncywgaW5jbHVkaW5nIHRoZSBVQyB0cmFjZSBsb2NhdGlvbi5cIiksXG4gICAgICB9KVxuICAgICAgLnBhc3N0aHJvdWdoKClcbiAgICAgIC5kZXNjcmliZShcIkNvbmZpZ3VyZWQgTUxmbG93IGV4cGVyaW1lbnQuXCIpLFxuICB9KVxuICAucGFzc3Rocm91Z2goKVxuICAuZGVzY3JpYmUoXCJNTGZsb3cgZ2V0LWV4cGVyaW1lbnQgcmVzcG9uc2UuXCIpO1xuXG5jb25zdCBDdXJyZW50VXNlclJlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICB1c2VyTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQ3VycmVudCB3b3Jrc3BhY2UgdXNlciBuYW1lLlwiKSxcbiAgICBhcHBsaWNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJDdXJyZW50IHNlcnZpY2UgcHJpbmNpcGFsIGFwcGxpY2F0aW9uIGlkLlwiKSxcbiAgICBkaXNwbGF5TmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiQ3VycmVudCBwcmluY2lwYWwgZGlzcGxheSBuYW1lLlwiKSxcbiAgICBncm91cHM6IHpcbiAgICAgIC5hcnJheShcbiAgICAgICAgelxuICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgdmFsdWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIldvcmtzcGFjZSBncm91cCBpZGVudGlmaWVyLlwiKSxcbiAgICAgICAgICAgIGRpc3BsYXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5kZXNjcmliZShcIldvcmtzcGFjZSBncm91cCBkaXNwbGF5IG5hbWUuXCIpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLnBhc3N0aHJvdWdoKCksXG4gICAgICApXG4gICAgICAub3B0aW9uYWwoKVxuICAgICAgLmRlc2NyaWJlKFwiR3JvdXBzIGFzc2lnbmVkIHRvIHRoZSBjdXJyZW50IHByaW5jaXBhbC5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIkRhdGFicmlja3MgQ3VycmVudCBVc2VyIEFQSSByZXNwb25zZS5cIik7XG5cbmNvbnN0IEV4cGVyaW1lbnRQZXJtaXNzaW9uc1Jlc3BvbnNlU2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBhY2Nlc3NfY29udHJvbF9saXN0OiB6XG4gICAgICAuYXJyYXkoXG4gICAgICAgIHpcbiAgICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICAgIHVzZXJfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLmRlc2NyaWJlKFwiVXNlciBwcmluY2lwYWwgbmFtZS5cIiksXG4gICAgICAgICAgICBncm91cF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoXCJHcm91cCBwcmluY2lwYWwgbmFtZS5cIiksXG4gICAgICAgICAgICBzZXJ2aWNlX3ByaW5jaXBhbF9uYW1lOiB6XG4gICAgICAgICAgICAgIC5zdHJpbmcoKVxuICAgICAgICAgICAgICAub3B0aW9uYWwoKVxuICAgICAgICAgICAgICAuZGVzY3JpYmUoXCJTZXJ2aWNlIHByaW5jaXBhbCBhcHBsaWNhdGlvbiBpZC5cIiksXG4gICAgICAgICAgICBhbGxfcGVybWlzc2lvbnM6IHpcbiAgICAgICAgICAgICAgLmFycmF5KFxuICAgICAgICAgICAgICAgIHpcbiAgICAgICAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9uX2xldmVsOiB6LnN0cmluZygpLmRlc2NyaWJlKFwiRWZmZWN0aXZlIGV4cGVyaW1lbnQgcGVybWlzc2lvbiBsZXZlbC5cIiksXG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLnBhc3N0aHJvdWdoKCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm9wdGlvbmFsKClcbiAgICAgICAgICAgICAgLmRlc2NyaWJlKFwiRGlyZWN0IGFuZCBpbmhlcml0ZWQgcGVybWlzc2lvbnMgZm9yIHRoaXMgcHJpbmNpcGFsLlwiKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5wYXNzdGhyb3VnaCgpLFxuICAgICAgKVxuICAgICAgLm9wdGlvbmFsKClcbiAgICAgIC5kZXNjcmliZShcIkV4cGVyaW1lbnQgYWNjZXNzIGNvbnRyb2wgZW50cmllcy5cIiksXG4gIH0pXG4gIC5wYXNzdGhyb3VnaCgpXG4gIC5kZXNjcmliZShcIkRhdGFicmlja3MgZXhwZXJpbWVudCBwZXJtaXNzaW9ucyByZXNwb25zZS5cIik7XG5cbmZ1bmN0aW9uIGNvbmZpZ3VyZWRFeHBlcmltZW50KCk6IHsgaWQ/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmcgfSB7XG4gIGNvbnN0IGlkID0gcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfSUQ/LnRyaW0oKTtcbiAgY29uc3QgbmFtZSA9IHByb2Nlc3MuZW52Lk1MRkxPV19FWFBFUklNRU5UX05BTUU/LnRyaW0oKTtcbiAgcmV0dXJuIHtcbiAgICAuLi4oaWQgPyB7IGlkIH0gOiB7fSksXG4gICAgLi4uKG5hbWUgPyB7IG5hbWUgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqIFRyYWNraW5nIFVSSSBmb3IgZGlyZWN0IGxvY2FsIE1MZmxvdyB0cmFjaW5nLCB3aXRoIENMSS1wcm9maWxlIGF1dGggaW5qZWN0ZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZGlyZWN0TWxmbG93VHJhY2tpbmdVcmkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGFwcGtpdC5pc0RhdGFicmlja3NBcHBFbnYoKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgY29uZmlndXJlZCA9IHByb2Nlc3MuZW52Lk1MRkxPV19UUkFDS0lOR19VUkk/LnRyaW0oKTtcbiAgaWYgKGNvbmZpZ3VyZWQgJiYgY29uZmlndXJlZCAhPT0gXCJkYXRhYnJpY2tzXCIpIHJldHVybiBjb25maWd1cmVkO1xuICBjb25zdCBwcm9maWxlID0gcHJvY2Vzcy5lbnYuREFUQUJSSUNLU19DT05GSUdfUFJPRklMRT8udHJpbSgpO1xuICByZXR1cm4gcHJvZmlsZSA/IGBkYXRhYnJpY2tzOi8vJHtwcm9maWxlfWAgOiBcImRhdGFicmlja3NcIjtcbn1cblxuLyoqIFBhcnNlIHRoZSBvcHRpb25hbCBVQyB0YWJsZS1wcmVmaXggbG9jYXRpb24gdXNlZCBieSBkaXJlY3QgbG9jYWwgdHJhY2luZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uKCk6XG4gIHsgY2F0YWxvZ05hbWU6IHN0cmluZzsgc2NoZW1hTmFtZTogc3RyaW5nOyB0YWJsZVByZWZpeDogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICBjb25zdCBjYXRhbG9nTmFtZSA9IHByb2Nlc3MuZW52Lk1MRkxPV19VQ19DQVRBTE9HPy50cmltKCk7XG4gIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9jZXNzLmVudi5NTEZMT1dfVUNfU0NIRU1BPy50cmltKCk7XG4gIGNvbnN0IHRhYmxlUHJlZml4ID0gcHJvY2Vzcy5lbnYuTUxGTE9XX1VDX1RBQkxFX1BSRUZJWD8udHJpbSgpO1xuICBpZiAoY2F0YWxvZ05hbWUgJiYgc2NoZW1hTmFtZSAmJiB0YWJsZVByZWZpeCkge1xuICAgIHJldHVybiB7IGNhdGFsb2dOYW1lLCBzY2hlbWFOYW1lLCB0YWJsZVByZWZpeCB9O1xuICB9XG5cbiAgY29uc3QgcHJlZml4ID0gbm9ybWFsaXplVWNQcmVmaXgocHJvY2Vzcy5lbnYuTUxGTE9XX1VDX1RSQUNFX1BSRUZJWCk7XG4gIGlmICghcHJlZml4KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYXJ0cyA9IHByZWZpeC5zcGxpdChcIi5cIik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IFtwcmVmaXhDYXRhbG9nLCBwcmVmaXhTY2hlbWEsIHByZWZpeFRhYmxlXSA9IHBhcnRzO1xuICBpZiAoIXByZWZpeENhdGFsb2cgfHwgIXByZWZpeFNjaGVtYSB8fCAhcHJlZml4VGFibGUpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgY2F0YWxvZ05hbWU6IHByZWZpeENhdGFsb2csXG4gICAgc2NoZW1hTmFtZTogcHJlZml4U2NoZW1hLFxuICAgIHRhYmxlUHJlZml4OiBwcmVmaXhUYWJsZSxcbiAgfTtcbn1cblxuLyoqIFdoZXRoZXIgdGhlIGxvY2FsIGRpcmVjdC10by1leHBlcmltZW50IE1MZmxvdyBTREsgaGFzIGVub3VnaCBjb25maWd1cmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdE1sZmxvd1RyYWNpbmdDb25maWd1cmVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICAhYXBwa2l0LmlzRGF0YWJyaWNrc0FwcEVudigpICYmXG4gICAgcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfSUQ/LnRyaW0oKSAmJlxuICAgIGRpcmVjdE1sZmxvd1RyYWNraW5nVXJpKCksXG4gICk7XG59XG5cbi8qKiBXaGV0aGVyIGEgRGF0YWJyaWNrcyBBcHAgY2FuIHByb21vdGUgT1RMUCBzcGFucyBpbnRvIGZ1bGwgTUxmbG93IHRyYWNlIGluZm8uICovXG5leHBvcnQgZnVuY3Rpb24gYXBwTWxmbG93VHJhY2VJbmZvQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgYXBwa2l0LmlzRGF0YWJyaWNrc0FwcEVudigpICYmXG4gICAgKHByb2Nlc3MuZW52Lk1MRkxPV19FWFBFUklNRU5UX0lEPy50cmltKCkgfHwgcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfTkFNRT8udHJpbSgpKSAmJlxuICAgIChwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlQ/LnRyaW0oKSB8fFxuICAgICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVD8udHJpbSgpKSxcbiAgKTtcbn1cblxuLyoqIEluaXRpYWxpemUgdGhlIEFwcCBzZXJ2aWNlLXByaW5jaXBhbCBjbGllbnQgdXNlZCB0byBwZXJzaXN0IFY0IHRyYWNlIHRhZ3MgYW5kIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBNbGZsb3dUcmFjZUluZm8oY2xpZW50PzogV29ya3NwYWNlQ2xpZW50KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChhcHBNbGZsb3dUcmFjZUluZm9DbGllbnQgJiYgYXBwTWxmbG93VHJhY2VQcmVmaXgpIHJldHVybiB0cnVlO1xuICBpZiAoYXBwTWxmbG93VHJhY2VJbmZvSW5pdFN0YXJ0ZWQgfHwgIWFwcE1sZmxvd1RyYWNlSW5mb0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBhcHBNbGZsb3dUcmFjZUluZm9Jbml0U3RhcnRlZCA9IHRydWU7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzb2x2ZWRDbGllbnQgPSBjbGllbnQgPz8gKGNyZWF0ZVdvcmtzcGFjZUNsaWVudCgpIGFzIFdvcmtzcGFjZUNsaWVudCk7XG4gICAgY29uc3QgcHJlZml4ID0gYXdhaXQgcmVzb2x2ZVVjVHJhY2VQcmVmaXgocmVzb2x2ZWRDbGllbnQpO1xuICAgIGlmICghcHJlZml4IHx8IHByZWZpeC5zcGxpdChcIi5cIikubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29uZmlndXJhdGlvbkVycm9yKFxuICAgICAgICBcIkRhdGFicmlja3MgQXBwcyBNTGZsb3cgdHJhY2UtaW5mbyBwcm9tb3Rpb24gcmVxdWlyZXMgYSBVQy1saW5rZWQgZXhwZXJpbWVudCBvciBNTEZMT1dfVUNfVFJBQ0VfUFJFRklYLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgYXBwTWxmbG93VHJhY2VJbmZvQ2xpZW50ID0gcmVzb2x2ZWRDbGllbnQ7XG4gICAgYXBwTWxmbG93VHJhY2VQcmVmaXggPSBwcmVmaXg7XG4gICAgbG9nZ2VyLmluZm8oXCJEYXRhYnJpY2tzIEFwcHMgTUxmbG93IHRyYWNlLWluZm8gcHJvbW90aW9uIGVuYWJsZWRcIiwgeyBwcmVmaXggfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiRGF0YWJyaWNrcyBBcHBzIE1MZmxvdyB0cmFjZS1pbmZvIHByb21vdGlvbiBkaXNhYmxlZFwiLCB7XG4gICAgICBlcnJvcjogZXJyb3JVdGlscy5lcnJvck1lc3NhZ2UoZXJyKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqIFRyYWNlLWxldmVsIHZhbHVlcyBwZXJzaXN0ZWQgYmVzaWRlIHNwYW5zIGFscmVhZHkgZXhwb3J0ZWQgYnkgdGhlIEFwcHMgT1RMUCBzaWRlY2FyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBNbGZsb3dUcmFjZUluZm8ge1xuICB0cmFjZUlkOiBzdHJpbmc7XG4gIHJlcXVlc3RUaW1lOiBudW1iZXI7XG4gIGV4ZWN1dGlvbkR1cmF0aW9uOiBudW1iZXI7XG4gIGVycm9yOiBib29sZWFuO1xuICB0YWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB1c2VyPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHJlcXVlc3RQcmV2aWV3Pzogc3RyaW5nO1xuICByZXNwb25zZVByZXZpZXc/OiBzdHJpbmc7XG59XG5cbi8qKiBQZXJzaXN0IE1MZmxvdyBWNCB0cmFjZSBpbmZvIGZvciBvbmUgRGF0YWJyaWNrcyBBcHBzIE9UZWwgcm9vdCB3aXRob3V0IHJlLWV4cG9ydGluZyBzcGFucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZXJzaXN0QXBwTWxmbG93VHJhY2VJbmZvKHBhcmFtczogQXBwTWxmbG93VHJhY2VJbmZvKTogdm9pZCB7XG4gIGNvbnN0IGNsaWVudCA9IGFwcE1sZmxvd1RyYWNlSW5mb0NsaWVudDtcbiAgY29uc3QgcHJlZml4ID0gYXBwTWxmbG93VHJhY2VQcmVmaXg7XG4gIGlmICghY2xpZW50IHx8ICFwcmVmaXgpIHJldHVybjtcbiAgY29uc3QgW2NhdGFsb2dOYW1lLCBzY2hlbWFOYW1lLCB0YWJsZVByZWZpeF0gPSBwcmVmaXguc3BsaXQoXCIuXCIpO1xuICBpZiAoIWNhdGFsb2dOYW1lIHx8ICFzY2hlbWFOYW1lIHx8ICF0YWJsZVByZWZpeCkgcmV0dXJuO1xuICBjb25zdCB0cmFjZUluZm8gPSBuZXcgVHJhY2VJbmZvKHtcbiAgICB0cmFjZUlkOiBgdHJhY2U6LyR7cHJlZml4fS8ke3BhcmFtcy50cmFjZUlkfWAsXG4gICAgdHJhY2VMb2NhdGlvbjoge1xuICAgICAgdHlwZTogVHJhY2VMb2NhdGlvblR5cGUuVUNfVEFCTEVfUFJFRklYLFxuICAgICAgdWNUYWJsZVByZWZpeDogeyBjYXRhbG9nTmFtZSwgc2NoZW1hTmFtZSwgdGFibGVQcmVmaXggfSxcbiAgICB9LFxuICAgIHJlcXVlc3RUaW1lOiBwYXJhbXMucmVxdWVzdFRpbWUsXG4gICAgZXhlY3V0aW9uRHVyYXRpb246IHBhcmFtcy5leGVjdXRpb25EdXJhdGlvbixcbiAgICBzdGF0ZTogcGFyYW1zLmVycm9yID8gVHJhY2VTdGF0ZS5FUlJPUiA6IFRyYWNlU3RhdGUuT0ssXG4gICAgLi4uKHBhcmFtcy5yZXF1ZXN0UHJldmlldyA/IHsgcmVxdWVzdFByZXZpZXc6IHBhcmFtcy5yZXF1ZXN0UHJldmlldyB9IDoge30pLFxuICAgIC4uLihwYXJhbXMucmVzcG9uc2VQcmV2aWV3ID8geyByZXNwb25zZVByZXZpZXc6IHBhcmFtcy5yZXNwb25zZVByZXZpZXcgfSA6IHt9KSxcbiAgICB0cmFjZU1ldGFkYXRhOiB7XG4gICAgICBbVHJhY2VNZXRhZGF0YUtleS5TQ0hFTUFfVkVSU0lPTl06IFwiNFwiLFxuICAgICAgLi4uKHBhcmFtcy51c2VyID8geyBbVHJhY2VNZXRhZGF0YUtleS5UUkFDRV9VU0VSXTogcGFyYW1zLnVzZXIgfSA6IHt9KSxcbiAgICAgIC4uLihwYXJhbXMuc2Vzc2lvbklkID8geyBbVHJhY2VNZXRhZGF0YUtleS5UUkFDRV9TRVNTSU9OXTogcGFyYW1zLnNlc3Npb25JZCB9IDoge30pLFxuICAgIH0sXG4gICAgdGFnczogcGFyYW1zLnRhZ3MsXG4gICAgYXNzZXNzbWVudHM6IFtdLFxuICB9KTtcbiAgY29uc3QgcGF0aCA9IGAvYXBpLzQuMC9tbGZsb3cvdHJhY2VzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHByZWZpeCl9LyR7cGFyYW1zLnRyYWNlSWR9L2luZm9gO1xuICBjb25zdCBwZW5kaW5nID0gZGF0YWJyaWNrc0ZldGNoKGNsaWVudCwgcGF0aCwgeyBtZXRob2Q6IFwiUE9TVFwiLCBib2R5OiB0cmFjZUluZm8udG9Kc29uKCkgfSlcbiAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5vaykgcmV0dXJuO1xuICAgICAgbG9nZ2VyLndhcm4oXCJEYXRhYnJpY2tzIEFwcHMgTUxmbG93IHRyYWNlLWluZm8gcHJvbW90aW9uIGZhaWxlZFwiLCB7XG4gICAgICAgIHRyYWNlSWQ6IHBhcmFtcy50cmFjZUlkLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgYm9keTogYXdhaXQgcmVhZFJlc3BvbnNlVGV4dChyZXNwb25zZSksXG4gICAgICB9KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBsb2dnZXIud2FybihcIkRhdGFicmlja3MgQXBwcyBNTGZsb3cgdHJhY2UtaW5mbyBwcm9tb3Rpb24gZmFpbGVkXCIsIHtcbiAgICAgICAgdHJhY2VJZDogcGFyYW1zLnRyYWNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmluYWxseSgoKSA9PiBwZW5kaW5nQXBwTWxmbG93VHJhY2VJbmZvLmRlbGV0ZShwZW5kaW5nKSk7XG4gIHBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm8uYWRkKHBlbmRpbmcpO1xufVxuXG4vKiogUmVzZXQgQXBwcyB0cmFjZS1pbmZvIHByb21vdGlvbiBzdGF0ZSBmb3IgdGVzdHMuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRBcHBNbGZsb3dUcmFjZUluZm8oKTogdm9pZCB7XG4gIGFwcE1sZmxvd1RyYWNlSW5mb0luaXRTdGFydGVkID0gZmFsc2U7XG4gIGFwcE1sZmxvd1RyYWNlSW5mb0NsaWVudCA9IHVuZGVmaW5lZDtcbiAgYXBwTWxmbG93VHJhY2VQcmVmaXggPSB1bmRlZmluZWQ7XG4gIHBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm8uY2xlYXIoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0ZWREaXJlY3RNbGZsb3dUcmFjZUxvY2F0aW9uKFxuICBtbGZsb3c6IE1sZmxvd01vZHVsZSxcbiAgdHJhY2tpbmdVcmk6IHN0cmluZyxcbiAgZXhwZXJpbWVudElkOiBzdHJpbmcsXG4gIGhvc3Q6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IFByb21pc2U8eyBjYXRhbG9nTmFtZTogc3RyaW5nOyBzY2hlbWFOYW1lOiBzdHJpbmc7IHRhYmxlUHJlZml4OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBsaWNpdCA9IGRpcmVjdE1sZmxvd1RyYWNlTG9jYXRpb24oKTtcbiAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG4gIHRyeSB7XG4gICAgY29uc3QgYXV0aFByb3ZpZGVyID0gbWxmbG93LmNyZWF0ZUF1dGhQcm92aWRlcih7XG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIC4uLihob3N0ID8geyBob3N0IH0gOiB7fSksXG4gICAgfSk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IG1sZmxvdy5NbGZsb3dDbGllbnQoeyB0cmFja2luZ1VyaSwgYXV0aFByb3ZpZGVyIH0pO1xuICAgIGNvbnN0IGV4cGVyaW1lbnQgPSBhd2FpdCBjbGllbnQuZ2V0RXhwZXJpbWVudChleHBlcmltZW50SWQpO1xuICAgIGlmICghZXhwZXJpbWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB7IHVjTG9jYXRpb25Gcm9tRXhwZXJpbWVudFRhZ3MgfSA9IGF3YWl0IGltcG9ydChcIkBtbGZsb3cvY29yZS9kaXN0L2NvcmUvZGVzdGluYXRpb25cIik7XG4gICAgY29uc3QgbG9jYXRpb24gPSB1Y0xvY2F0aW9uRnJvbUV4cGVyaW1lbnRUYWdzKGV4cGVyaW1lbnQudGFncyk7XG4gICAgaWYgKCFsb2NhdGlvbj8udGFibGVQcmVmaXgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhdGFsb2dOYW1lOiBsb2NhdGlvbi5jYXRhbG9nTmFtZSxcbiAgICAgIHNjaGVtYU5hbWU6IGxvY2F0aW9uLnNjaGVtYU5hbWUsXG4gICAgICB0YWJsZVByZWZpeDogbG9jYXRpb24udGFibGVQcmVmaXgsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJkaXJlY3QgTUxmbG93IFVDIHRyYWNlLWxvY2F0aW9uIGRldGVjdGlvbiBmYWlsZWRcIiwge1xuICAgICAgZXhwZXJpbWVudElkLFxuICAgICAgZXJyb3I6IGVycm9yVXRpbHMuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0IHRoZSBNTGZsb3cgTm9kZSB0cmFjZXIgZm9yIGxvY2FsIGRldmVsb3BtZW50IHdoZW4gQXBwS2l0IGhhcyBubyBPVExQXG4gKiBleHBvcnRlci4gVGhpcyBwcm92aWRlciBpcyBuZXZlciBzdGFydGVkIGluIHRoZSBkZXBsb3llZCBBcHBzIHBhdGgsIGF2b2lkaW5nXG4gKiBhIHNlY29uZCBnbG9iYWwgT1RlbCBwcm92aWRlciByYWNpbmcgQXBwS2l0J3MgdGVsZW1ldHJ5IG1hbmFnZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0aWFsaXplRGlyZWN0TWxmbG93VHJhY2luZygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKGRpcmVjdE1sZmxvdykgcmV0dXJuIHRydWU7XG4gIGlmIChkaXJlY3RNbGZsb3dJbml0U3RhcnRlZCB8fCAhZGlyZWN0TWxmbG93VHJhY2luZ0NvbmZpZ3VyZWQoKSkgcmV0dXJuIGZhbHNlO1xuICBkaXJlY3RNbGZsb3dJbml0U3RhcnRlZCA9IHRydWU7XG5cbiAgY29uc3QgZXhwZXJpbWVudElkID0gcHJvY2Vzcy5lbnYuTUxGTE9XX0VYUEVSSU1FTlRfSUQhLnRyaW0oKTtcbiAgY29uc3QgdHJhY2tpbmdVcmkgPSBkaXJlY3RNbGZsb3dUcmFja2luZ1VyaSgpITtcbiAgdHJ5IHtcbiAgICBjb25zdCBtbGZsb3cgPSBhd2FpdCBpbXBvcnQoXCJAbWxmbG93L2NvcmVcIik7XG4gICAgY29uc3QgcmF3SG9zdCA9IHByb2Nlc3MuZW52LkRBVEFCUklDS1NfSE9TVD8udHJpbSgpO1xuICAgIGNvbnN0IGhvc3QgPSByYXdIb3N0XG4gICAgICA/IC9eaHR0cHM/OlxcL1xcLy9pLnRlc3QocmF3SG9zdClcbiAgICAgICAgPyByYXdIb3N0XG4gICAgICAgIDogYGh0dHBzOi8vJHtyYXdIb3N0fWBcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRyYWNlTG9jYXRpb24gPSBhd2FpdCBkZXRlY3RlZERpcmVjdE1sZmxvd1RyYWNlTG9jYXRpb24oXG4gICAgICBtbGZsb3csXG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIGV4cGVyaW1lbnRJZCxcbiAgICAgIGhvc3QsXG4gICAgKTtcbiAgICBpZiAoIXRyYWNlTG9jYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBDb25maWd1cmF0aW9uRXJyb3IoXG4gICAgICAgIFwiRGlyZWN0IGxvY2FsIE1MZmxvdyB0cmFjaW5nIHJlcXVpcmVzIGEgVUMtbGlua2VkIGV4cGVyaW1lbnQgb3IgTUxGTE9XX1VDX1RSQUNFX1BSRUZJWC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IFt7IERhdGFicmlja3NVQ1RhYmxlU3BhbkV4cG9ydGVyLCBEYXRhYnJpY2tzVUNUYWJsZVNwYW5Qcm9jZXNzb3IgfSwgc2RrXSA9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIGltcG9ydChcIkBtbGZsb3cvY29yZS9kaXN0L2V4cG9ydGVycy91Y190YWJsZVwiKSxcbiAgICAgICAgaW1wb3J0KFwiQG9wZW50ZWxlbWV0cnkvc2RrLXRyYWNlLW5vZGVcIiksXG4gICAgICBdKTtcbiAgICBjb25zdCBhdXRoUHJvdmlkZXIgPSBtbGZsb3cuY3JlYXRlQXV0aFByb3ZpZGVyKHtcbiAgICAgIHRyYWNraW5nVXJpLFxuICAgICAgLi4uKGhvc3QgPyB7IGhvc3QgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgbWxmbG93Lk1sZmxvd0NsaWVudCh7IHRyYWNraW5nVXJpLCBhdXRoUHJvdmlkZXIgfSk7XG4gICAgY29uc3QgZXhwb3J0ZXIgPSBuZXcgRGF0YWJyaWNrc1VDVGFibGVTcGFuRXhwb3J0ZXIoY2xpZW50KTtcbiAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgQWdlbnRUcmFjZVNwYW5Qcm9jZXNzb3IoXG4gICAgICBuZXcgRGF0YWJyaWNrc1VDVGFibGVTcGFuUHJvY2Vzc29yKGV4cG9ydGVyLCB0cmFjZUxvY2F0aW9uKSxcbiAgICApO1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IHNkay5Ob2RlVHJhY2VyUHJvdmlkZXIoeyBzcGFuUHJvY2Vzc29yczogW3Byb2Nlc3Nvcl0gfSk7XG4gICAgcHJvdmlkZXIucmVnaXN0ZXIoKTtcbiAgICBkaXJlY3RNbGZsb3cgPSBtbGZsb3c7XG4gICAgZGlyZWN0TWxmbG93UHJvdmlkZXIgPSBwcm92aWRlcjtcbiAgICBkaXJlY3RNbGZsb3dQcm9jZXNzb3IgPSBwcm9jZXNzb3I7XG4gICAgbG9nZ2VyLmluZm8oXCJkaXJlY3QgTUxmbG93IHRyYWNpbmcgZW5hYmxlZFwiLCB7XG4gICAgICBleHBlcmltZW50SWQsXG4gICAgICB0cmFja2luZ1VyaSxcbiAgICAgIHRyYWNlTG9jYXRpb24sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKFwiZGlyZWN0IE1MZmxvdyB0cmFjaW5nIGRpc2FibGVkXCIsIHtcbiAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKiogUGVyc2lzdCB0cmFjZS1sZXZlbCBmaWVsZHMgb24gdGhlIGRpcmVjdCBNTGZsb3cgdHJhY2UgaW4gdGhlIGN1cnJlbnQgT1RlbCBjb250ZXh0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZU1sZmxvd1RyYWNlKG9wdGlvbnM6IFVwZGF0ZUN1cnJlbnRUcmFjZU9wdGlvbnMpOiB2b2lkIHtcbiAgZGlyZWN0TWxmbG93Py51cGRhdGVDdXJyZW50VHJhY2Uob3B0aW9ucyk7XG59XG5cbi8qKiBQZXJzaXN0IHRhZ3Mgb24gdGhlIGRpcmVjdCBNTGZsb3cgdHJhY2UgYWN0aXZlIGluIHRoZSBjdXJyZW50IE9UZWwgY29udGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZVRhZ3ModGFnczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICB1cGRhdGVBY3RpdmVNbGZsb3dUcmFjZSh7IHRhZ3MgfSk7XG59XG5cbi8qKiBXaGV0aGVyIHRoaXMgcHJvY2VzcyBvd25zIHRoZSBmaWx0ZXJlZCBsb2NhbCBNTGZsb3cgdHJhY2VyIHByb3ZpZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdE1sZmxvd1RyYWNpbmdBY3RpdmUoKTogYm9vbGVhbiB7XG4gIHJldHVybiBkaXJlY3RNbGZsb3dQcm9jZXNzb3IgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIEZsdXNoIHBlbmRpbmcgZGlyZWN0IGxvY2FsIHRyYWNlIGV4cG9ydHMgZHVyaW5nIGdyYWNlZnVsIHNodXRkb3duLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZsdXNoRGlyZWN0TWxmbG93VHJhY2luZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoWy4uLnBlbmRpbmdBcHBNbGZsb3dUcmFjZUluZm9dKTtcbiAgYXdhaXQgZGlyZWN0TWxmbG93UHJvY2Vzc29yPy5mb3JjZUZsdXNoKCk7XG4gIGF3YWl0IGRpcmVjdE1sZmxvd1Byb3ZpZGVyPy5mb3JjZUZsdXNoKCk7XG59XG5cbi8qKlxuICogV2hldGhlciBNTGZsb3cgZmVlZGJhY2sgbG9nZ2luZyBpcyBhdmFpbGFibGUgZm9yIHRoaXMgZGVwbG95bWVudC5cbiAqXG4gKiBFbmFibGVkIHdoZW4gYW4gTUxmbG93IGV4cGVyaW1lbnQgaXMgY29uZmlndXJlZCBhbmQgdHJhY2VzIGhhdmUgYW4gZXhwb3J0XG4gKiBwYXRoOiBBcHBLaXQgT1RMUCBpbiBhIERhdGFicmlja3MgQXBwLCBvciB0aGUgZGlyZWN0IE1MZmxvdyBOb2RlIFNESyBvdXRzaWRlXG4gKiBvbmUuIEJvdGggcGF0aHMgYXJlIHNlbGVjdGVkIGZyb20gc3RhbmRhcmQgZW52aXJvbm1lbnQgdmFsdWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWxmbG93RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgY29uc3QgaGFzRXhwb3J0ZXIgPSBCb29sZWFuKFxuICAgIHByb2Nlc3MuZW52Lk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVD8udHJpbSgpIHx8XG4gICAgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1RSQUNFU19FTkRQT0lOVD8udHJpbSgpLFxuICApO1xuICBjb25zdCBoYXNFeHBlcmltZW50ID0gQm9vbGVhbihcbiAgICBwcm9jZXNzLmVudi5NTEZMT1dfRVhQRVJJTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk1MRkxPV19FWFBFUklNRU5UX05BTUU/LnRyaW0oKSxcbiAgKTtcbiAgcmV0dXJuIGhhc0V4cGVyaW1lbnQgJiYgKGhhc0V4cG9ydGVyIHx8IGRpcmVjdE1sZmxvd1RyYWNpbmdDb25maWd1cmVkKCkpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgd2hldGhlciB1c2VyIGZlZWRiYWNrIGlzIGVuYWJsZWQgZnJvbSB0aGUgcGx1Z2luJ3Mgb3B0aW9uYWxcbiAqIGBjb25maWcuZmVlZGJhY2tgIG92ZXJyaWRlOiB0aGUgZXhwbGljaXQgYm9vbGVhbiB3aW5zLCBvdGhlcndpc2UgZmFsbFxuICogYmFjayB0byBhdXRvLWRldGVjdGluZyBNTGZsb3cgdHJhY2luZyAoe0BsaW5rIG1sZmxvd0VuYWJsZWR9KS4gU2hhcmVkXG4gKiBieSB0aGUgcGx1Z2luJ3MgY2xpZW50LWNvbmZpZyBnYXRlIGFuZCB0aGUgc2VydmVyJ3MgdHJhY2UtaWQgaGVhZGVyIHNvXG4gKiB0aGUgdHdvIG5ldmVyIGRpc2FncmVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZlZWRiYWNrRW5hYmxlZChleHBsaWNpdDogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZXhwbGljaXQgPz8gbWxmbG93RW5hYmxlZCgpO1xufVxuXG4vKipcbiAqIFJlamVjdCBhbiBleHBsaWNpdGx5IGVuYWJsZWQgZmVlZGJhY2sgc3VyZmFjZSB3aGVuIG5vIE1MZmxvdyBleHBlcmltZW50IGlzXG4gKiBjb25maWd1cmVkLiBBdXRvIG1vZGUgcmVtYWlucyBub24tZmF0YWwgYW5kIHNpbXBseSBkaXNhYmxlcyBmZWVkYmFjay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlRmVlZGJhY2tDb25maWcoZXhwbGljaXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgaWYgKGV4cGxpY2l0ICE9PSB0cnVlKSByZXR1cm47XG4gIGNvbnN0IGV4cGVyaW1lbnQgPSBjb25maWd1cmVkRXhwZXJpbWVudCgpO1xuICBpZiAoZXhwZXJpbWVudC5pZCB8fCBleHBlcmltZW50Lm5hbWUpIHJldHVybjtcbiAgdGhyb3cgbmV3IENvbmZpZ3VyYXRpb25FcnJvcihcbiAgICBcIm1hc3RyYTogZmVlZGJhY2sgaXMgZW5hYmxlZCBidXQgbm8gTUxmbG93IGV4cGVyaW1lbnQgaXMgY29uZmlndXJlZC4gXCIgK1xuICAgICAgXCJTZXQgTUxGTE9XX0VYUEVSSU1FTlRfSUQgb3IgTUxGTE9XX0VYUEVSSU1FTlRfTkFNRSwgdXNlIGZlZWRiYWNrOiBmYWxzZSwgXCIgK1xuICAgICAgXCJvciBvbWl0IGZlZWRiYWNrIHRvIHVzZSBhdXRvbWF0aWMgZGV0ZWN0aW9uLlwiLFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgY29uZmlndXJlZCBleHBlcmltZW50IFVSTCBvbmx5IHdoZW4gdGhlIGFjdGl2ZSBEYXRhYnJpY2tzXG4gKiBwcmluY2lwYWwgaGFzIGVmZmVjdGl2ZSBgQ0FOX01BTkFHRWAgcGVybWlzc2lvbi4gUGVybWlzc2lvbiBsb29rdXAgaXNcbiAqIGludGVudGlvbmFsbHkgYmVzdC1lZmZvcnQgc28gQXBwcyBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgZXhwb3NlIHRoZVxuICogcmVxdWlyZWQgQVBJcyBzaW1wbHkgb21pdCB0aGUgZGVidWcgYWZmb3JkYW5jZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1sZmxvd0V4cGVyaW1lbnRNYW5hZ2VyVXJsKFxuICBjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCxcbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVNbGZsb3dFeHBlcmltZW50TWFuYWdlclVybChjbGllbnQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVNbGZsb3dFeHBlcmltZW50TWFuYWdlclVybChcbiAgY2xpZW50OiBXb3Jrc3BhY2VDbGllbnQsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBlcmltZW50SWQgPSBhd2FpdCByZXNvbHZlRXhwZXJpbWVudElkKGNsaWVudCk7XG4gIGlmICghZXhwZXJpbWVudElkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IFtjdXJyZW50UmVzcG9uc2UsIHBlcm1pc3Npb25zUmVzcG9uc2VdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGRhdGFicmlja3NGZXRjaChjbGllbnQsIFwiL2FwaS8yLjAvcHJldmlldy9zY2ltL3YyL01lXCIsIHsgbWV0aG9kOiBcIkdFVFwiIH0pLFxuICAgIGRhdGFicmlja3NGZXRjaChcbiAgICAgIGNsaWVudCxcbiAgICAgIGAvYXBpLzIuMC9wZXJtaXNzaW9ucy9leHBlcmltZW50cy8ke2VuY29kZVVSSUNvbXBvbmVudChleHBlcmltZW50SWQpfWAsXG4gICAgICB7IG1ldGhvZDogXCJHRVRcIiB9LFxuICAgICksXG4gIF0pO1xuICBpZiAoIWN1cnJlbnRSZXNwb25zZS5vayB8fCAhcGVybWlzc2lvbnNSZXNwb25zZS5vaykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBjdXJyZW50ID0gQ3VycmVudFVzZXJSZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UoYXdhaXQgcmVhZFJlc3BvbnNlSnNvbihjdXJyZW50UmVzcG9uc2UpKTtcbiAgY29uc3QgcGVybWlzc2lvbnMgPSBFeHBlcmltZW50UGVybWlzc2lvbnNSZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UoXG4gICAgYXdhaXQgcmVhZFJlc3BvbnNlSnNvbihwZXJtaXNzaW9uc1Jlc3BvbnNlKSxcbiAgKTtcbiAgaWYgKCFjdXJyZW50LnN1Y2Nlc3MgfHwgIXBlcm1pc3Npb25zLnN1Y2Nlc3MpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgdXNlck5hbWVzID0gbmV3IFNldChcbiAgICBbY3VycmVudC5kYXRhLnVzZXJOYW1lLCBjdXJyZW50LmRhdGEuYXBwbGljYXRpb25JZCwgY3VycmVudC5kYXRhLmRpc3BsYXlOYW1lXS5maWx0ZXIoXG4gICAgICAodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gQm9vbGVhbih2YWx1ZSksXG4gICAgKSxcbiAgKTtcbiAgY29uc3QgZ3JvdXBOYW1lcyA9IG5ldyBTZXQoXG4gICAgKGN1cnJlbnQuZGF0YS5ncm91cHMgPz8gW10pLmZsYXRNYXAoKHsgdmFsdWUsIGRpc3BsYXkgfSkgPT5cbiAgICAgIFt2YWx1ZSwgZGlzcGxheV0uZmlsdGVyKChlbnRyeSk6IGVudHJ5IGlzIHN0cmluZyA9PiBCb29sZWFuKGVudHJ5KSksXG4gICAgKSxcbiAgKTtcbiAgY29uc3QgY2FuTWFuYWdlID0gKHBlcm1pc3Npb25zLmRhdGEuYWNjZXNzX2NvbnRyb2xfbGlzdCA/PyBbXSkuc29tZSgoZW50cnkpID0+IHtcbiAgICBjb25zdCBtYXRjaGVzID1cbiAgICAgIChlbnRyeS51c2VyX25hbWUgIT09IHVuZGVmaW5lZCAmJiB1c2VyTmFtZXMuaGFzKGVudHJ5LnVzZXJfbmFtZSkpIHx8XG4gICAgICAoZW50cnkuc2VydmljZV9wcmluY2lwYWxfbmFtZSAhPT0gdW5kZWZpbmVkICYmIHVzZXJOYW1lcy5oYXMoZW50cnkuc2VydmljZV9wcmluY2lwYWxfbmFtZSkpIHx8XG4gICAgICAoZW50cnkuZ3JvdXBfbmFtZSAhPT0gdW5kZWZpbmVkICYmIGdyb3VwTmFtZXMuaGFzKGVudHJ5Lmdyb3VwX25hbWUpKTtcbiAgICByZXR1cm4gKFxuICAgICAgbWF0Y2hlcyAmJlxuICAgICAgKGVudHJ5LmFsbF9wZXJtaXNzaW9ucyA/PyBbXSkuc29tZShcbiAgICAgICAgKHBlcm1pc3Npb24pID0+IHBlcm1pc3Npb24ucGVybWlzc2lvbl9sZXZlbCA9PT0gXCJDQU5fTUFOQUdFXCIsXG4gICAgICApXG4gICAgKTtcbiAgfSk7XG4gIGlmICghY2FuTWFuYWdlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhvc3QgPSAoYXdhaXQgY2xpZW50LmNvbmZpZy5nZXRIb3N0KCkpLnRvU3RyaW5nKCk7XG4gIHJldHVybiBuZXcgVVJMKGAvbWwvZXhwZXJpbWVudHMvJHtlbmNvZGVVUklDb21wb25lbnQoZXhwZXJpbWVudElkKX1gLCBob3N0KS50b1N0cmluZygpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEV4cGVyaW1lbnQoXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuKTogUHJvbWlzZTx7IGV4cGVyaW1lbnRfaWQ6IHN0cmluZzsgdGFncz86IHVua25vd24gfSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBleHBlcmltZW50ID0gY29uZmlndXJlZEV4cGVyaW1lbnQoKTtcbiAgY29uc3QgcGF0aCA9IGV4cGVyaW1lbnQuaWRcbiAgICA/IGAvYXBpLzIuMC9tbGZsb3cvZXhwZXJpbWVudHMvZ2V0P2V4cGVyaW1lbnRfaWQ9JHtlbmNvZGVVUklDb21wb25lbnQoZXhwZXJpbWVudC5pZCl9YFxuICAgIDogZXhwZXJpbWVudC5uYW1lXG4gICAgICA/IGAvYXBpLzIuMC9tbGZsb3cvZXhwZXJpbWVudHMvZ2V0LWJ5LW5hbWU/ZXhwZXJpbWVudF9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgIGV4cGVyaW1lbnQubmFtZSxcbiAgICAgICAgKX1gXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKCFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRhdGFicmlja3NGZXRjaChjbGllbnQsIHBhdGgsIHsgbWV0aG9kOiBcIkdFVFwiIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBwYXJzZWQgPSBNbGZsb3dFeHBlcmltZW50UmVzcG9uc2VTY2hlbWEuc2FmZVBhcnNlKGF3YWl0IHJlYWRSZXNwb25zZUpzb24ocmVzcG9uc2UpKTtcbiAgcmV0dXJuIHBhcnNlZC5zdWNjZXNzID8gcGFyc2VkLmRhdGEuZXhwZXJpbWVudCA6IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUV4cGVyaW1lbnRJZChjbGllbnQ6IFdvcmtzcGFjZUNsaWVudCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSBjb25maWd1cmVkRXhwZXJpbWVudCgpO1xuICBpZiAoY29uZmlndXJlZC5pZCkgcmV0dXJuIGNvbmZpZ3VyZWQuaWQ7XG4gIHJldHVybiAoYXdhaXQgZmV0Y2hFeHBlcmltZW50KGNsaWVudCkpPy5leHBlcmltZW50X2lkO1xufVxuXG4vKiogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxvZ0ZlZWRiYWNrfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRmVlZGJhY2tQYXJhbXMge1xuICAvKiogTUxmbG93IHRyYWNlIGlkIHRoZSBhc3Nlc3NtZW50IGF0dGFjaGVzIHRvIChgdHItPGhleD5gKS4gKi9cbiAgdHJhY2VJZDogc3RyaW5nO1xuICAvKiogQXNzZXNzbWVudCBuYW1lOyBkZWZhdWx0cyBwZXIgd2hldGhlciBhIHZhbHVlIG9yIGEgY29tbWVudCBpcyBzZW50LiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGh1bWJzIC8gcmF0aW5nIC8gbGFiZWwgdmFsdWUuIE9taXQgZm9yIGEgY29tbWVudC1vbmx5IHN1Ym1pc3Npb24uICovXG4gIHZhbHVlPzogYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZztcbiAgLyoqIEZyZWVmb3JtIGNvbW1lbnQ6IHRoZSByYXRpb25hbGUgYWxvbmdzaWRlIGEgdmFsdWUsIG9yIHRoZSB2YWx1ZSBpdHNlbGYgd2hlbiBub25lLiAqL1xuICBjb21tZW50Pzogc3RyaW5nO1xuICAvKiogSWRlbnRpdHkgdGhlIGZlZWRiYWNrIGlzIGF0dHJpYnV0ZWQgdG8gKHVzZXIgZW1haWwgLyBpZCkuICovXG4gIHNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIExvZyBhIEhVTUFOIGZlZWRiYWNrIGFzc2Vzc21lbnQgdG8gYSB0cmFjZS4gUmV0dXJucyB0aGUgY3JlYXRlZFxuICogYXNzZXNzbWVudCBpZCBvbiBzdWNjZXNzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZSB0cmFjZSBjYW4ndCBiZVxuICogZm91bmQgKGV2ZW4gYWZ0ZXIgcmV0cnlpbmcgZm9yIGV4cG9ydCBsYWcpIG9yIHRoZSByZXF1ZXN0IG90aGVyd2lzZVxuICogZmFpbHMgLSBjYWxsZXJzIHN1cmZhY2UgdGhhdCBhcyBhIHNvZnQgXCJub3QgcmVjb3JkZWRcIiByYXRoZXIgdGhhbiBhblxuICogZXJyb3IsIGtlZXBpbmcgdGhlIGNoYXQgdXNhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nRmVlZGJhY2soXG4gIGNsaWVudDogV29ya3NwYWNlQ2xpZW50LFxuICBwYXJhbXM6IExvZ0ZlZWRiYWNrUGFyYW1zLFxuKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgLy8gQSBjb21tZW50IHdpdGggbm8gdGh1bWJzIHZhbHVlIGlzIGxvZ2dlZCBhcyB0ZXh0IGZlZWRiYWNrOyBhIHZhbHVlXG4gIC8vICh3aXRoIGFuIG9wdGlvbmFsIGNvbW1lbnQgYXMgdGhlIHJhdGlvbmFsZSkgaXMgdGhlIHRodW1icyBwYXRoLlxuICBjb25zdCBoYXNWYWx1ZSA9IHBhcmFtcy52YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCBuYW1lID1cbiAgICBwYXJhbXMubmFtZT8udHJpbSgpIHx8XG4gICAgKGhhc1ZhbHVlID8gZmVlZGJhY2suREVGQVVMVF9GRUVEQkFDS19OQU1FIDogZmVlZGJhY2suREVGQVVMVF9DT01NRU5UX05BTUUpO1xuICBjb25zdCB2YWx1ZSA9IGhhc1ZhbHVlID8gcGFyYW1zLnZhbHVlIDogcGFyYW1zLmNvbW1lbnQ7XG4gIGNvbnN0IGFzc2Vzc21lbnRUcmFjZUlkID0gbWxmbG93QXNzZXNzbWVudFRyYWNlSWQoXG4gICAgcGFyYW1zLnRyYWNlSWQsXG4gICAgYXdhaXQgcmVzb2x2ZVVjVHJhY2VQcmVmaXgoY2xpZW50KSxcbiAgKTtcbiAgY29uc3QgYXNzZXNzbWVudDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgdHJhY2VfaWQ6IGFzc2Vzc21lbnRUcmFjZUlkLFxuICAgIGFzc2Vzc21lbnRfbmFtZTogbmFtZSxcbiAgICBzb3VyY2U6IHtcbiAgICAgIHNvdXJjZV90eXBlOiBcIkhVTUFOXCIsXG4gICAgICBzb3VyY2VfaWQ6IHBhcmFtcy5zb3VyY2VJZD8udHJpbSgpIHx8IFwidXNlclwiLFxuICAgIH0sXG4gICAgZmVlZGJhY2s6IHsgdmFsdWUgfSxcbiAgICAuLi4oaGFzVmFsdWUgJiYgcGFyYW1zLmNvbW1lbnQ/LnRyaW0oKSA/IHsgcmF0aW9uYWxlOiBwYXJhbXMuY29tbWVudCB9IDoge30pLFxuICB9O1xuICBjb25zdCBib2R5ID0geyBhc3Nlc3NtZW50IH07XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPD0gTk9UX0ZPVU5EX1JFVFJJRVM7IGF0dGVtcHQrKykge1xuICAgIGxldCByZXM6IFJlc3BvbnNlO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCBkYXRhYnJpY2tzRmV0Y2goY2xpZW50LCBhc3Nlc3NtZW50c1BhdGgoYXNzZXNzbWVudFRyYWNlSWQpLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGJvZHksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiZmVlZGJhY2sgcmVxdWVzdCBmYWlsZWRcIiwge1xuICAgICAgICB0cmFjZUlkOiBwYXJhbXMudHJhY2VJZCxcbiAgICAgICAgYXNzZXNzbWVudFRyYWNlSWQsXG4gICAgICAgIGVycm9yOiBlcnJvclV0aWxzLmVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzLm9rKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCByZWFkUmVzcG9uc2VKc29uKHJlcyk7XG4gICAgICBjb25zdCBhc3Nlc3NtZW50SWQgPVxuICAgICAgICAocGFyc2VkIGFzIHsgYXNzZXNzbWVudD86IHsgYXNzZXNzbWVudF9pZD86IHVua25vd24gfSB9KT8uYXNzZXNzbWVudD8uYXNzZXNzbWVudF9pZCA/P1xuICAgICAgICAocGFyc2VkIGFzIHsgYXNzZXNzbWVudF9pZD86IHVua25vd24gfSk/LmFzc2Vzc21lbnRfaWQ7XG4gICAgICByZXR1cm4gdHlwZW9mIGFzc2Vzc21lbnRJZCA9PT0gXCJzdHJpbmdcIiA/IGFzc2Vzc21lbnRJZCA6IFwiXCI7XG4gICAgfVxuICAgIC8vIFRyYWNlIGV4cG9ydCBpcyBhc3luYzsgYSBmcmVzaCB0cmFjZSBtYXkgbm90IGV4aXN0IHlldC4gUmV0cnkgYVxuICAgIC8vIGZldyB0aW1lcyB3aXRoIGEgc2hvcnQgYmFja29mZiBiZWZvcmUgZ2l2aW5nIHVwIHNvZnRseS5cbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0ICYmIGF0dGVtcHQgPCBOT1RfRk9VTkRfUkVUUklFUykge1xuICAgICAgYXdhaXQgYXN5bmNVdGlscy5zbGVlcChOT1RfRk9VTkRfQkFDS09GRl9NUyAqIChhdHRlbXB0ICsgMSkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxvZ2dlci53YXJuKFwiZmVlZGJhY2sgbm90IHJlY29yZGVkXCIsIHtcbiAgICAgIHRyYWNlSWQ6IHBhcmFtcy50cmFjZUlkLFxuICAgICAgYXNzZXNzbWVudFRyYWNlSWQsXG4gICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICBib2R5OiBhd2FpdCByZWFkUmVzcG9uc2VUZXh0KHJlcyksXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -19,7 +19,7 @@
19
19
  */
20
20
  import { type Span } from "@opentelemetry/api";
21
21
  import type express from "express";
22
- export { MLFLOW_AGENT_TAG, MLFLOW_AGENT_TAG_ATTR, MLFLOW_GENIE_TAG, MLFLOW_GENIE_TAG_ATTR, MLFLOW_MODEL_TAG, MLFLOW_MODEL_TAG_ATTR, MLFLOW_LOCAL_TAG, MLFLOW_LOCAL_TAG_ATTR, MLFLOW_OBO_AUTH_TAG, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_TRACE_TAG_PREFIX, } from "./trace-attributes.ts";
22
+ export { MLFLOW_AGENT_TAG, MLFLOW_AGENT_TAG_ATTR, APPKIT_AGENT_TRACE_ROOT_ATTR, MLFLOW_GENIE_TAG, MLFLOW_GENIE_TAG_ATTR, MLFLOW_LOCAL_TAG, MLFLOW_LOCAL_TAG_ATTR, MLFLOW_OBO_AUTH_TAG, MLFLOW_OBO_AUTH_TAG_ATTR, MLFLOW_SP_AUTH_TAG, MLFLOW_SP_AUTH_TAG_ATTR, MLFLOW_TRACE_TAG_PREFIX, } from "./trace-attributes.ts";
23
23
  /** Cap on each payload copied onto a span, so one turn cannot bloat the export. */
24
24
  export declare const TRACE_IO_LIMIT = 8000;
25
25
  /** Attribute keys the MLflow UC `*_trace_unified` view reads from the root span. */
@@ -70,14 +70,12 @@ export declare function stampGenieToolSpan(span?: Span | undefined): void;
70
70
  export declare function recordActiveTraceTag(name: string, value?: ChatTraceTagValue): void;
71
71
  /** Inject multiple MLflow trace tags into the active chat request. */
72
72
  export declare function recordActiveTraceTags(tags: Readonly<Record<string, ChatTraceTagValue | undefined>>): void;
73
- /** Record a selected model on the active chat trace, preserving first-use order. */
73
+ /** Record the first selected model as the active chat trace's `agent` tag. */
74
74
  export declare function recordActiveTraceModel(modelId: string): void;
75
75
  /** Record the best resolved user identifier on the active chat trace. */
76
76
  export declare function recordActiveTraceUser(user: string | undefined): void;
77
77
  /** Record one Databricks authentication mode used during the active chat trace. */
78
78
  export declare function recordActiveTraceAuth(auth: "obo" | "service-principal"): void;
79
- /** Serialize model tags as a scalar or an ordered JSON array for multiple values. */
80
- export declare function modelTraceTag(models: Iterable<string>): string | undefined;
81
79
  /** Return one raw prompt when the request is exactly one text-only user message. */
82
80
  export declare function textOnlyChatInput(messages: unknown): string | undefined;
83
81
  /**