@dbx-tools/shared-mastra 0.9.5 → 0.9.7

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
@@ -67,10 +67,10 @@ conversation and model.
67
67
  ## Parse Embed Markers
68
68
 
69
69
  ```ts
70
- import { marker } from "@dbx-tools/shared-mastra";
70
+ import { markers } from "@dbx-tools/shared-mastra";
71
71
 
72
- const parts = marker.parseMarkers("Here is the chart:\n[chart:abc123]");
73
- const safeText = marker.stripIncompleteMarkerTail(streamingText);
72
+ const parts = markers.parseMarkers("Here is the chart:\n[chart:abc123]");
73
+ const safeText = markers.stripIncompleteMarkerTail(streamingText);
74
74
  ```
75
75
 
76
76
  Markers let an agent mention large or delayed artifacts by id, such as
package/index.ts CHANGED
@@ -3,16 +3,16 @@
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/shared-mastra";
6
- export const PACKAGE_VERSION = "0.9.5";
6
+ export const PACKAGE_VERSION = "0.9.7";
7
7
  export * as feedback from "./src/feedback.ts";
8
- export * as marker from "./src/marker.ts";
8
+ export * as markers from "./src/markers.ts";
9
9
  export * as override from "./src/override.ts";
10
10
  export * as routes from "./src/routes.ts";
11
11
  export * as thread from "./src/thread.ts";
12
12
  export * as wire from "./src/wire.ts";
13
13
  export { MLFLOW_TRACE_ID_HEADER, DEFAULT_FEEDBACK_NAME, DEFAULT_COMMENT_NAME, MastraFeedbackValueSchema, MastraFeedbackRequestSchema, MastraFeedbackResponseSchema } from "./src/feedback.ts";
14
14
  export type { MastraFeedbackValue, MastraFeedbackRequest, MastraFeedbackResponse } from "./src/feedback.ts";
15
- export type { MarkerType, ParsedMarker } from "./src/marker.ts";
15
+ export type { MarkerType, ParsedMarker } from "./src/markers.ts";
16
16
  export { MODEL_OVERRIDE_HEADER, MODEL_OVERRIDE_QUERY, MODEL_OVERRIDE_BODY_FIELDS } from "./src/override.ts";
17
17
  export { MASTRA_ROUTES } from "./src/routes.ts";
18
18
  export { THREAD_ID_HEADER, THREAD_ID_QUERY } from "./src/thread.ts";
package/lib/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/shared-mastra";
2
- export declare const PACKAGE_VERSION = "0.9.5";
2
+ export declare const PACKAGE_VERSION = "0.9.7";
3
3
  export * as feedback from "./src/feedback.ts";
4
- export * as marker from "./src/marker.ts";
4
+ export * as markers from "./src/markers.ts";
5
5
  export * as override from "./src/override.ts";
6
6
  export * as routes from "./src/routes.ts";
7
7
  export * as thread from "./src/thread.ts";
8
8
  export * as wire from "./src/wire.ts";
9
9
  export { MLFLOW_TRACE_ID_HEADER, DEFAULT_FEEDBACK_NAME, DEFAULT_COMMENT_NAME, MastraFeedbackValueSchema, MastraFeedbackRequestSchema, MastraFeedbackResponseSchema } from "./src/feedback.ts";
10
10
  export type { MastraFeedbackValue, MastraFeedbackRequest, MastraFeedbackResponse } from "./src/feedback.ts";
11
- export type { MarkerType, ParsedMarker } from "./src/marker.ts";
11
+ export type { MarkerType, ParsedMarker } from "./src/markers.ts";
12
12
  export { MODEL_OVERRIDE_HEADER, MODEL_OVERRIDE_QUERY, MODEL_OVERRIDE_BODY_FIELDS } from "./src/override.ts";
13
13
  export { MASTRA_ROUTES } from "./src/routes.ts";
14
14
  export { THREAD_ID_HEADER, THREAD_ID_QUERY } from "./src/thread.ts";
package/lib/index.js CHANGED
@@ -2,9 +2,9 @@
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/shared-mastra";
5
- export const PACKAGE_VERSION = "0.9.5";
5
+ export const PACKAGE_VERSION = "0.9.7";
6
6
  export * as feedback from "./src/feedback.js";
7
- export * as marker from "./src/marker.js";
7
+ export * as markers from "./src/markers.js";
8
8
  export * as override from "./src/override.js";
9
9
  export * as routes from "./src/routes.js";
10
10
  export * as thread from "./src/thread.js";
@@ -14,4 +14,4 @@ export { MODEL_OVERRIDE_HEADER, MODEL_OVERRIDE_QUERY, MODEL_OVERRIDE_BODY_FIELDS
14
14
  export { MASTRA_ROUTES } from "./src/routes.js";
15
15
  export { THREAD_ID_HEADER, THREAD_ID_QUERY } from "./src/thread.js";
16
16
  export { MastraClientConfigSchema, DefaultModelResponseSchema, ServingEndpointsResponseSchema, MastraSuggestionsResponseSchema, ChartTypeSchema, ChartResultSchema, ChartSchema, StatementDataSchema, StartedEventSchema, AskGenieDoneEventSchema, MastraGenieErrorEventSchema, SummaryEventSchema, GenieAgentEventSchema, GenieWriterEventSchema, GENIE_PROGRESS_PART_TYPE, GenieProgressPartDataSchema, GenieDatasetDataSchema, GenieDatasetChartSchema, GenieDatasetSchema, GenieSummaryItemSchema, GenieAgentResultSchema } from "./src/wire.js";
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc5TCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSwrQkFBK0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuNVwiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2sgZnJvbSBcIi4vc3JjL2ZlZWRiYWNrLnRzXCI7XG5leHBvcnQgKiBhcyBtYXJrZXIgZnJvbSBcIi4vc3JjL21hcmtlci50c1wiO1xuZXhwb3J0ICogYXMgb3ZlcnJpZGUgZnJvbSBcIi4vc3JjL292ZXJyaWRlLnRzXCI7XG5leHBvcnQgKiBhcyByb3V0ZXMgZnJvbSBcIi4vc3JjL3JvdXRlcy50c1wiO1xuZXhwb3J0ICogYXMgdGhyZWFkIGZyb20gXCIuL3NyYy90aHJlYWQudHNcIjtcbmV4cG9ydCAqIGFzIHdpcmUgZnJvbSBcIi4vc3JjL3dpcmUudHNcIjtcbmV4cG9ydCB7IE1MRkxPV19UUkFDRV9JRF9IRUFERVIsIERFRkFVTFRfRkVFREJBQ0tfTkFNRSwgREVGQVVMVF9DT01NRU5UX05BTUUsIE1hc3RyYUZlZWRiYWNrVmFsdWVTY2hlbWEsIE1hc3RyYUZlZWRiYWNrUmVxdWVzdFNjaGVtYSwgTWFzdHJhRmVlZGJhY2tSZXNwb25zZVNjaGVtYSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXN0cmFGZWVkYmFja1ZhbHVlLCBNYXN0cmFGZWVkYmFja1JlcXVlc3QsIE1hc3RyYUZlZWRiYWNrUmVzcG9uc2UgfSBmcm9tIFwiLi9zcmMvZmVlZGJhY2sudHNcIjtcbmV4cG9ydCB0eXBlIHsgTWFya2VyVHlwZSwgUGFyc2VkTWFya2VyIH0gZnJvbSBcIi4vc3JjL21hcmtlci50c1wiO1xuZXhwb3J0IHsgTU9ERUxfT1ZFUlJJREVfSEVBREVSLCBNT0RFTF9PVkVSUklERV9RVUVSWSwgTU9ERUxfT1ZFUlJJREVfQk9EWV9GSUVMRFMgfSBmcm9tIFwiLi9zcmMvb3ZlcnJpZGUudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9ST1VURVMgfSBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgeyBUSFJFQURfSURfSEVBREVSLCBUSFJFQURfSURfUVVFUlkgfSBmcm9tIFwiLi9zcmMvdGhyZWFkLnRzXCI7XG5leHBvcnQgeyBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEsIERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hLCBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWEsIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEsIENoYXJ0VHlwZVNjaGVtYSwgQ2hhcnRSZXN1bHRTY2hlbWEsIENoYXJ0U2NoZW1hLCBTdGF0ZW1lbnREYXRhU2NoZW1hLCBTdGFydGVkRXZlbnRTY2hlbWEsIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hLCBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEsIFN1bW1hcnlFdmVudFNjaGVtYSwgR2VuaWVBZ2VudEV2ZW50U2NoZW1hLCBHZW5pZVdyaXRlckV2ZW50U2NoZW1hLCBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEUsIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYSwgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSwgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEsIEdlbmllRGF0YXNldFNjaGVtYSwgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSwgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYSB9IGZyb20gXCIuL3NyYy93aXJlLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUNsaWVudENvbmZpZywgRGVmYXVsdE1vZGVsUmVzcG9uc2UsIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSwgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSwgQ2hhcnRUeXBlLCBDaGFydFJlc3VsdCwgQ2hhcnQsIFN0YXRlbWVudERhdGEsIFN0YXJ0ZWRFdmVudCwgQXNrR2VuaWVEb25lRXZlbnQsIE1hc3RyYUdlbmllRXJyb3JFdmVudCwgU3VtbWFyeUV2ZW50LCBHZW5pZUFnZW50RXZlbnQsIEdlbmllV3JpdGVyRXZlbnQsIEdlbmllV3JpdGVyRXZlbnRUeXBlLCBHZW5pZVByb2dyZXNzUGFydERhdGEsIEdlbmllRGF0YXNldERhdGEsIEdlbmllRGF0YXNldENoYXJ0LCBHZW5pZURhdGFzZXQsIEdlbmllU3VtbWFyeUl0ZW0sIEdlbmllU3VtbWFyeUl0ZW1UeXBlLCBHZW5pZUFnZW50UmVzdWx0IH0gZnJvbSBcIi4vc3JjL3dpcmUudHNcIjtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc5TCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSw4QkFBOEIsRUFBRSwrQkFBK0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLHdCQUF3QixFQUFFLDJCQUEyQixFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9zaGFyZWQtbWFzdHJhXCI7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9WRVJTSU9OID0gXCIwLjkuN1wiO1xuZXhwb3J0ICogYXMgZmVlZGJhY2sgZnJvbSBcIi4vc3JjL2ZlZWRiYWNrLnRzXCI7XG5leHBvcnQgKiBhcyBtYXJrZXJzIGZyb20gXCIuL3NyYy9tYXJrZXJzLnRzXCI7XG5leHBvcnQgKiBhcyBvdmVycmlkZSBmcm9tIFwiLi9zcmMvb3ZlcnJpZGUudHNcIjtcbmV4cG9ydCAqIGFzIHJvdXRlcyBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgKiBhcyB0aHJlYWQgZnJvbSBcIi4vc3JjL3RocmVhZC50c1wiO1xuZXhwb3J0ICogYXMgd2lyZSBmcm9tIFwiLi9zcmMvd2lyZS50c1wiO1xuZXhwb3J0IHsgTUxGTE9XX1RSQUNFX0lEX0hFQURFUiwgREVGQVVMVF9GRUVEQkFDS19OQU1FLCBERUZBVUxUX0NPTU1FTlRfTkFNRSwgTWFzdHJhRmVlZGJhY2tWYWx1ZVNjaGVtYSwgTWFzdHJhRmVlZGJhY2tSZXF1ZXN0U2NoZW1hLCBNYXN0cmFGZWVkYmFja1Jlc3BvbnNlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2ZlZWRiYWNrLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUZlZWRiYWNrVmFsdWUsIE1hc3RyYUZlZWRiYWNrUmVxdWVzdCwgTWFzdHJhRmVlZGJhY2tSZXNwb25zZSB9IGZyb20gXCIuL3NyYy9mZWVkYmFjay50c1wiO1xuZXhwb3J0IHR5cGUgeyBNYXJrZXJUeXBlLCBQYXJzZWRNYXJrZXIgfSBmcm9tIFwiLi9zcmMvbWFya2Vycy50c1wiO1xuZXhwb3J0IHsgTU9ERUxfT1ZFUlJJREVfSEVBREVSLCBNT0RFTF9PVkVSUklERV9RVUVSWSwgTU9ERUxfT1ZFUlJJREVfQk9EWV9GSUVMRFMgfSBmcm9tIFwiLi9zcmMvb3ZlcnJpZGUudHNcIjtcbmV4cG9ydCB7IE1BU1RSQV9ST1VURVMgfSBmcm9tIFwiLi9zcmMvcm91dGVzLnRzXCI7XG5leHBvcnQgeyBUSFJFQURfSURfSEVBREVSLCBUSFJFQURfSURfUVVFUlkgfSBmcm9tIFwiLi9zcmMvdGhyZWFkLnRzXCI7XG5leHBvcnQgeyBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEsIERlZmF1bHRNb2RlbFJlc3BvbnNlU2NoZW1hLCBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWEsIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEsIENoYXJ0VHlwZVNjaGVtYSwgQ2hhcnRSZXN1bHRTY2hlbWEsIENoYXJ0U2NoZW1hLCBTdGF0ZW1lbnREYXRhU2NoZW1hLCBTdGFydGVkRXZlbnRTY2hlbWEsIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hLCBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWEsIFN1bW1hcnlFdmVudFNjaGVtYSwgR2VuaWVBZ2VudEV2ZW50U2NoZW1hLCBHZW5pZVdyaXRlckV2ZW50U2NoZW1hLCBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEUsIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYSwgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSwgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEsIEdlbmllRGF0YXNldFNjaGVtYSwgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYSwgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYSB9IGZyb20gXCIuL3NyYy93aXJlLnRzXCI7XG5leHBvcnQgdHlwZSB7IE1hc3RyYUNsaWVudENvbmZpZywgRGVmYXVsdE1vZGVsUmVzcG9uc2UsIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSwgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSwgQ2hhcnRUeXBlLCBDaGFydFJlc3VsdCwgQ2hhcnQsIFN0YXRlbWVudERhdGEsIFN0YXJ0ZWRFdmVudCwgQXNrR2VuaWVEb25lRXZlbnQsIE1hc3RyYUdlbmllRXJyb3JFdmVudCwgU3VtbWFyeUV2ZW50LCBHZW5pZUFnZW50RXZlbnQsIEdlbmllV3JpdGVyRXZlbnQsIEdlbmllV3JpdGVyRXZlbnRUeXBlLCBHZW5pZVByb2dyZXNzUGFydERhdGEsIEdlbmllRGF0YXNldERhdGEsIEdlbmllRGF0YXNldENoYXJ0LCBHZW5pZURhdGFzZXQsIEdlbmllU3VtbWFyeUl0ZW0sIEdlbmllU3VtbWFyeUl0ZW1UeXBlLCBHZW5pZUFnZW50UmVzdWx0IH0gZnJvbSBcIi4vc3JjL3dpcmUudHNcIjtcbiJdfQ==
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Agent-prose embed marker grammar.
3
+ *
4
+ * The Mastra agent is instructed to defer visualizations to the host
5
+ * UI by embedding markers in its markdown reply; the UI parses them
6
+ * out and swaps in the matching slot. This module is the single
7
+ * source of truth for that grammar so every consumer parses markers
8
+ * the same way and can't drift from the shapes documented on
9
+ * {@link ChartSchema} / {@link StatementDataSchema} in `protocol.ts`
10
+ * and the instructions the server hands the model.
11
+ *
12
+ * One grammar, open-ended type. A marker is `[<type>:<id>]`. The
13
+ * `<type>` is an opaque token that names the embed kind; the host
14
+ * resolves it against the generic `/embed/<type>/<id>` route, which
15
+ * 404s any type the server doesn't register. The grammar does NOT
16
+ * hard-code the known types - new embed kinds work end to end
17
+ * without touching this regex. Today the server registers:
18
+ *
19
+ * - `[chart:<chartId>]` - the `<chartId>` is a v4 UUID minted by
20
+ * the chart subsystem (`prepare_chart` / `render_data`) and
21
+ * resolves to a cached Echarts spec.
22
+ * - `[data:<statementId>]` - the `<statementId>` is a Databricks
23
+ * statement id (a time-ordered UUID) and resolves to the
24
+ * statement's rows.
25
+ *
26
+ * The `<id>` of a real embed is UUID-shaped (`8-4-4-4-12` hex): both
27
+ * id kinds above are UUIDs, just different versions (chart = v4,
28
+ * statement = v7-style). The grammar deliberately captures ANY
29
+ * non-bracket id token, not just UUID-shaped ones, so a fabricated
30
+ * marker the model glued together from a label
31
+ * (e.g. `[chart:placeholder]` or
32
+ * `[chart:01f163b6-1eac-region-fill-oos]`) still parses as a marker.
33
+ * Matching it - rather than letting the broad regex miss it - is what
34
+ * lets the host UI consume and obscure the bogus marker instead of
35
+ * leaking the literal `[chart:...]` text into the rendered prose.
36
+ * Whether an id is a genuine embed is a separate {@link isUuid}
37
+ * check the caller runs on {@link ParsedMarker.id}.
38
+ *
39
+ * Parse everything through {@link parseMarkers}, validate the id with
40
+ * {@link isUuid}, and branch on the returned {@link ParsedMarker.type}.
41
+ *
42
+ * @module
43
+ */
44
+ /**
45
+ * Single matcher for ANY embed marker, regardless of type. Matches
46
+ * `[<type>:<id>]`. Capture group 1 is the marker type token (e.g.
47
+ * `chart`, `data`); group 2 is the id - any run of non-bracket,
48
+ * non-whitespace characters, NOT constrained to a UUID shape.
49
+ *
50
+ * Neither the type nor the id shape is enumerated here. The type is
51
+ * left open because the server's resolver registry decides which
52
+ * types are real and 404s the rest, so a new embed kind needs no
53
+ * grammar change. The id is left broad on purpose: a fabricated
54
+ * marker the model emits from a label (e.g. `[chart:placeholder]`)
55
+ * MUST still match so the host UI can consume and obscure it rather
56
+ * than leak the literal `[chart:...]` text into the prose. The id is
57
+ * then validated with {@link isUuid} downstream; non-UUID ids resolve
58
+ * to no embed.
59
+ *
60
+ * Safe to share as a `/g` constant: it's only ever consumed via
61
+ * {@link String.prototype.matchAll}, which clones the regex and
62
+ * never advances this object's `lastIndex`. (A `.exec()`/`.test()`
63
+ * loop would need a fresh regex each time, but we don't do that.)
64
+ */
65
+ const MARKER_RE = /\[([A-Za-z][A-Za-z0-9_-]*):([^\]\s]+)\]/g;
66
+ /**
67
+ * UUID matcher (`8-4-4-4-12` hex, any version) anchored to the whole
68
+ * string. Covers v4 chart ids and time-ordered (v7-style) statement
69
+ * ids alike. Used by {@link isUuid} to tell a genuine embed id apart
70
+ * from a label the model fabricated into a marker.
71
+ */
72
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
73
+ /**
74
+ * Whether `id` is a UUID-shaped embed id. The marker grammar
75
+ * ({@link MARKER_RE}) matches any non-bracket id token so fabricated
76
+ * markers don't leak as literal prose; this is the guard callers run
77
+ * to decide whether an id is a real embed (render the slot) or a
78
+ * bogus label to obscure (drop the marker entirely).
79
+ */
80
+ export function isUuid(id) {
81
+ return UUID_RE.test(id);
82
+ }
83
+ /**
84
+ * Build the exact embed marker the agent should place in prose.
85
+ *
86
+ * Tool results return this complete value so the model copies one opaque token
87
+ * rather than reconstructing it from `type` plus `id`. Reconstruction is where
88
+ * valid-looking but never-minted UUIDs enter transcripts and produce a 404.
89
+ */
90
+ export function formatMarker(type, id) {
91
+ return `[${type}:${id}]`;
92
+ }
93
+ /**
94
+ * Parse every embed marker out of `text`, in source order. A single
95
+ * regex pass means matches never overlap, so callers can splice the
96
+ * spans directly without a sort/dedupe step. This is the one entry
97
+ * point for marker parsing: type branching runs on the returned
98
+ * markers. The grammar ({@link MARKER_RE}) matches any non-bracket id
99
+ * token, so a returned {@link ParsedMarker.id} is NOT guaranteed to
100
+ * be a real embed id - run it through {@link isUuid} to tell a
101
+ * genuine embed apart from a fabricated label, which the caller then
102
+ * obscures rather than rendering.
103
+ */
104
+ export function parseMarkers(text) {
105
+ const out = [];
106
+ for (const match of text.matchAll(MARKER_RE)) {
107
+ const start = match.index ?? 0;
108
+ out.push({
109
+ // Group 1 is the `<type>` token; the server's embed registry
110
+ // (not this parser) decides whether it's supported.
111
+ type: match[1] ?? "",
112
+ id: match[2] ?? "",
113
+ start,
114
+ end: start + match[0].length,
115
+ });
116
+ }
117
+ return out;
118
+ }
119
+ /**
120
+ * Strip a trailing partial marker (`[chart`, `[data:01f1`, ...) that
121
+ * hasn't received its closing `]` yet. While the model streams
122
+ * text-deltas a marker arrives across several chunks, and rendering
123
+ * each interim state would briefly flash the literal `[chart:abc-`
124
+ * prefix before the closing bracket swaps it for a slot. Hiding any
125
+ * trailing `[<non-whitespace-non-bracket>...` suffix keeps the prose
126
+ * stable until either a `]` (full marker) or whitespace (definitely
127
+ * not a marker) lands. Persisted transcripts never end mid-marker,
128
+ * so this is a no-op on reload.
129
+ */
130
+ export function stripIncompleteMarkerTail(text) {
131
+ return text.replace(/\[[^\s[\]]*$/, "");
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXJrZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFZSDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFNLFNBQVMsR0FBRywwQ0FBMEMsQ0FBQztBQUU3RDs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxHQUFHLGlFQUFpRSxDQUFDO0FBRWxGOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsRUFBVTtJQUMvQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBZ0IsRUFBRSxFQUFVO0lBQ3ZELE9BQU8sSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLENBQUM7QUFDM0IsQ0FBQztBQWNEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVk7SUFDdkMsTUFBTSxHQUFHLEdBQW1CLEVBQUUsQ0FBQztJQUMvQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ1AsNkRBQTZEO1lBQzdELG9EQUFvRDtZQUNwRCxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDcEIsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ2xCLEtBQUs7WUFDTCxHQUFHLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBQVk7SUFDcEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBZ2VudC1wcm9zZSBlbWJlZCBtYXJrZXIgZ3JhbW1hci5cbiAqXG4gKiBUaGUgTWFzdHJhIGFnZW50IGlzIGluc3RydWN0ZWQgdG8gZGVmZXIgdmlzdWFsaXphdGlvbnMgdG8gdGhlIGhvc3RcbiAqIFVJIGJ5IGVtYmVkZGluZyBtYXJrZXJzIGluIGl0cyBtYXJrZG93biByZXBseTsgdGhlIFVJIHBhcnNlcyB0aGVtXG4gKiBvdXQgYW5kIHN3YXBzIGluIHRoZSBtYXRjaGluZyBzbG90LiBUaGlzIG1vZHVsZSBpcyB0aGUgc2luZ2xlXG4gKiBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoYXQgZ3JhbW1hciBzbyBldmVyeSBjb25zdW1lciBwYXJzZXMgbWFya2Vyc1xuICogdGhlIHNhbWUgd2F5IGFuZCBjYW4ndCBkcmlmdCBmcm9tIHRoZSBzaGFwZXMgZG9jdW1lbnRlZCBvblxuICoge0BsaW5rIENoYXJ0U2NoZW1hfSAvIHtAbGluayBTdGF0ZW1lbnREYXRhU2NoZW1hfSBpbiBgcHJvdG9jb2wudHNgXG4gKiBhbmQgdGhlIGluc3RydWN0aW9ucyB0aGUgc2VydmVyIGhhbmRzIHRoZSBtb2RlbC5cbiAqXG4gKiBPbmUgZ3JhbW1hciwgb3Blbi1lbmRlZCB0eXBlLiBBIG1hcmtlciBpcyBgWzx0eXBlPjo8aWQ+XWAuIFRoZVxuICogYDx0eXBlPmAgaXMgYW4gb3BhcXVlIHRva2VuIHRoYXQgbmFtZXMgdGhlIGVtYmVkIGtpbmQ7IHRoZSBob3N0XG4gKiByZXNvbHZlcyBpdCBhZ2FpbnN0IHRoZSBnZW5lcmljIGAvZW1iZWQvPHR5cGU+LzxpZD5gIHJvdXRlLCB3aGljaFxuICogNDA0cyBhbnkgdHlwZSB0aGUgc2VydmVyIGRvZXNuJ3QgcmVnaXN0ZXIuIFRoZSBncmFtbWFyIGRvZXMgTk9UXG4gKiBoYXJkLWNvZGUgdGhlIGtub3duIHR5cGVzIC0gbmV3IGVtYmVkIGtpbmRzIHdvcmsgZW5kIHRvIGVuZFxuICogd2l0aG91dCB0b3VjaGluZyB0aGlzIHJlZ2V4LiBUb2RheSB0aGUgc2VydmVyIHJlZ2lzdGVyczpcbiAqXG4gKiAgIC0gYFtjaGFydDo8Y2hhcnRJZD5dYCAtIHRoZSBgPGNoYXJ0SWQ+YCBpcyBhIHY0IFVVSUQgbWludGVkIGJ5XG4gKiAgICAgdGhlIGNoYXJ0IHN1YnN5c3RlbSAoYHByZXBhcmVfY2hhcnRgIC8gYHJlbmRlcl9kYXRhYCkgYW5kXG4gKiAgICAgcmVzb2x2ZXMgdG8gYSBjYWNoZWQgRWNoYXJ0cyBzcGVjLlxuICogICAtIGBbZGF0YTo8c3RhdGVtZW50SWQ+XWAgLSB0aGUgYDxzdGF0ZW1lbnRJZD5gIGlzIGEgRGF0YWJyaWNrc1xuICogICAgIHN0YXRlbWVudCBpZCAoYSB0aW1lLW9yZGVyZWQgVVVJRCkgYW5kIHJlc29sdmVzIHRvIHRoZVxuICogICAgIHN0YXRlbWVudCdzIHJvd3MuXG4gKlxuICogVGhlIGA8aWQ+YCBvZiBhIHJlYWwgZW1iZWQgaXMgVVVJRC1zaGFwZWQgKGA4LTQtNC00LTEyYCBoZXgpOiBib3RoXG4gKiBpZCBraW5kcyBhYm92ZSBhcmUgVVVJRHMsIGp1c3QgZGlmZmVyZW50IHZlcnNpb25zIChjaGFydCA9IHY0LFxuICogc3RhdGVtZW50ID0gdjctc3R5bGUpLiBUaGUgZ3JhbW1hciBkZWxpYmVyYXRlbHkgY2FwdHVyZXMgQU5ZXG4gKiBub24tYnJhY2tldCBpZCB0b2tlbiwgbm90IGp1c3QgVVVJRC1zaGFwZWQgb25lcywgc28gYSBmYWJyaWNhdGVkXG4gKiBtYXJrZXIgdGhlIG1vZGVsIGdsdWVkIHRvZ2V0aGVyIGZyb20gYSBsYWJlbFxuICogKGUuZy4gYFtjaGFydDpwbGFjZWhvbGRlcl1gIG9yXG4gKiBgW2NoYXJ0OjAxZjE2M2I2LTFlYWMtcmVnaW9uLWZpbGwtb29zXWApIHN0aWxsIHBhcnNlcyBhcyBhIG1hcmtlci5cbiAqIE1hdGNoaW5nIGl0IC0gcmF0aGVyIHRoYW4gbGV0dGluZyB0aGUgYnJvYWQgcmVnZXggbWlzcyBpdCAtIGlzIHdoYXRcbiAqIGxldHMgdGhlIGhvc3QgVUkgY29uc3VtZSBhbmQgb2JzY3VyZSB0aGUgYm9ndXMgbWFya2VyIGluc3RlYWQgb2ZcbiAqIGxlYWtpbmcgdGhlIGxpdGVyYWwgYFtjaGFydDouLi5dYCB0ZXh0IGludG8gdGhlIHJlbmRlcmVkIHByb3NlLlxuICogV2hldGhlciBhbiBpZCBpcyBhIGdlbnVpbmUgZW1iZWQgaXMgYSBzZXBhcmF0ZSB7QGxpbmsgaXNVdWlkfVxuICogY2hlY2sgdGhlIGNhbGxlciBydW5zIG9uIHtAbGluayBQYXJzZWRNYXJrZXIuaWR9LlxuICpcbiAqIFBhcnNlIGV2ZXJ5dGhpbmcgdGhyb3VnaCB7QGxpbmsgcGFyc2VNYXJrZXJzfSwgdmFsaWRhdGUgdGhlIGlkIHdpdGhcbiAqIHtAbGluayBpc1V1aWR9LCBhbmQgYnJhbmNoIG9uIHRoZSByZXR1cm5lZCB7QGxpbmsgUGFyc2VkTWFya2VyLnR5cGV9LlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vKipcbiAqIFRoZSBlbWJlZCBraW5kIG5hbWVkIGJ5IGEgbWFya2VyJ3MgYDx0eXBlPmAgc2VnbWVudC4gTGVmdCBhcyBhblxuICogb3BlbiBgc3RyaW5nYCAobm90IGEgY2xvc2VkIHVuaW9uKSBzbyB0aGUgZ3JhbW1hciBzdGF5cyBnZW5lcmljOlxuICogdGhlIGF1dGhvcml0YXRpdmUgc2V0IG9mIHN1cHBvcnRlZCB0eXBlcyBsaXZlcyBpbiB0aGUgc2VydmVyJ3NcbiAqIGAvZW1iZWQvOnR5cGUvOmlkYCByZXNvbHZlciByZWdpc3RyeSwgYW5kIGFuIHVua25vd24gdHlwZSBzaW1wbHlcbiAqIDQwNHMuIFRoZSB0d28gdHlwZXMgdGhlIHNlcnZlciBzaGlwcyB0b2RheSBhcmUgYFwiY2hhcnRcImAgYW5kXG4gKiBgXCJkYXRhXCJgLlxuICovXG5leHBvcnQgdHlwZSBNYXJrZXJUeXBlID0gc3RyaW5nO1xuXG4vKipcbiAqIFNpbmdsZSBtYXRjaGVyIGZvciBBTlkgZW1iZWQgbWFya2VyLCByZWdhcmRsZXNzIG9mIHR5cGUuIE1hdGNoZXNcbiAqIGBbPHR5cGU+OjxpZD5dYC4gQ2FwdHVyZSBncm91cCAxIGlzIHRoZSBtYXJrZXIgdHlwZSB0b2tlbiAoZS5nLlxuICogYGNoYXJ0YCwgYGRhdGFgKTsgZ3JvdXAgMiBpcyB0aGUgaWQgLSBhbnkgcnVuIG9mIG5vbi1icmFja2V0LFxuICogbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycywgTk9UIGNvbnN0cmFpbmVkIHRvIGEgVVVJRCBzaGFwZS5cbiAqXG4gKiBOZWl0aGVyIHRoZSB0eXBlIG5vciB0aGUgaWQgc2hhcGUgaXMgZW51bWVyYXRlZCBoZXJlLiBUaGUgdHlwZSBpc1xuICogbGVmdCBvcGVuIGJlY2F1c2UgdGhlIHNlcnZlcidzIHJlc29sdmVyIHJlZ2lzdHJ5IGRlY2lkZXMgd2hpY2hcbiAqIHR5cGVzIGFyZSByZWFsIGFuZCA0MDRzIHRoZSByZXN0LCBzbyBhIG5ldyBlbWJlZCBraW5kIG5lZWRzIG5vXG4gKiBncmFtbWFyIGNoYW5nZS4gVGhlIGlkIGlzIGxlZnQgYnJvYWQgb24gcHVycG9zZTogYSBmYWJyaWNhdGVkXG4gKiBtYXJrZXIgdGhlIG1vZGVsIGVtaXRzIGZyb20gYSBsYWJlbCAoZS5nLiBgW2NoYXJ0OnBsYWNlaG9sZGVyXWApXG4gKiBNVVNUIHN0aWxsIG1hdGNoIHNvIHRoZSBob3N0IFVJIGNhbiBjb25zdW1lIGFuZCBvYnNjdXJlIGl0IHJhdGhlclxuICogdGhhbiBsZWFrIHRoZSBsaXRlcmFsIGBbY2hhcnQ6Li4uXWAgdGV4dCBpbnRvIHRoZSBwcm9zZS4gVGhlIGlkIGlzXG4gKiB0aGVuIHZhbGlkYXRlZCB3aXRoIHtAbGluayBpc1V1aWR9IGRvd25zdHJlYW07IG5vbi1VVUlEIGlkcyByZXNvbHZlXG4gKiB0byBubyBlbWJlZC5cbiAqXG4gKiBTYWZlIHRvIHNoYXJlIGFzIGEgYC9nYCBjb25zdGFudDogaXQncyBvbmx5IGV2ZXIgY29uc3VtZWQgdmlhXG4gKiB7QGxpbmsgU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbH0sIHdoaWNoIGNsb25lcyB0aGUgcmVnZXggYW5kXG4gKiBuZXZlciBhZHZhbmNlcyB0aGlzIG9iamVjdCdzIGBsYXN0SW5kZXhgLiAoQSBgLmV4ZWMoKWAvYC50ZXN0KClgXG4gKiBsb29wIHdvdWxkIG5lZWQgYSBmcmVzaCByZWdleCBlYWNoIHRpbWUsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0LilcbiAqL1xuY29uc3QgTUFSS0VSX1JFID0gL1xcWyhbQS1aYS16XVtBLVphLXowLTlfLV0qKTooW15cXF1cXHNdKylcXF0vZztcblxuLyoqXG4gKiBVVUlEIG1hdGNoZXIgKGA4LTQtNC00LTEyYCBoZXgsIGFueSB2ZXJzaW9uKSBhbmNob3JlZCB0byB0aGUgd2hvbGVcbiAqIHN0cmluZy4gQ292ZXJzIHY0IGNoYXJ0IGlkcyBhbmQgdGltZS1vcmRlcmVkICh2Ny1zdHlsZSkgc3RhdGVtZW50XG4gKiBpZHMgYWxpa2UuIFVzZWQgYnkge0BsaW5rIGlzVXVpZH0gdG8gdGVsbCBhIGdlbnVpbmUgZW1iZWQgaWQgYXBhcnRcbiAqIGZyb20gYSBsYWJlbCB0aGUgbW9kZWwgZmFicmljYXRlZCBpbnRvIGEgbWFya2VyLlxuICovXG5jb25zdCBVVUlEX1JFID0gL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2k7XG5cbi8qKlxuICogV2hldGhlciBgaWRgIGlzIGEgVVVJRC1zaGFwZWQgZW1iZWQgaWQuIFRoZSBtYXJrZXIgZ3JhbW1hclxuICogKHtAbGluayBNQVJLRVJfUkV9KSBtYXRjaGVzIGFueSBub24tYnJhY2tldCBpZCB0b2tlbiBzbyBmYWJyaWNhdGVkXG4gKiBtYXJrZXJzIGRvbid0IGxlYWsgYXMgbGl0ZXJhbCBwcm9zZTsgdGhpcyBpcyB0aGUgZ3VhcmQgY2FsbGVycyBydW5cbiAqIHRvIGRlY2lkZSB3aGV0aGVyIGFuIGlkIGlzIGEgcmVhbCBlbWJlZCAocmVuZGVyIHRoZSBzbG90KSBvciBhXG4gKiBib2d1cyBsYWJlbCB0byBvYnNjdXJlIChkcm9wIHRoZSBtYXJrZXIgZW50aXJlbHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNVdWlkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFVVSURfUkUudGVzdChpZCk7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGV4YWN0IGVtYmVkIG1hcmtlciB0aGUgYWdlbnQgc2hvdWxkIHBsYWNlIGluIHByb3NlLlxuICpcbiAqIFRvb2wgcmVzdWx0cyByZXR1cm4gdGhpcyBjb21wbGV0ZSB2YWx1ZSBzbyB0aGUgbW9kZWwgY29waWVzIG9uZSBvcGFxdWUgdG9rZW5cbiAqIHJhdGhlciB0aGFuIHJlY29uc3RydWN0aW5nIGl0IGZyb20gYHR5cGVgIHBsdXMgYGlkYC4gUmVjb25zdHJ1Y3Rpb24gaXMgd2hlcmVcbiAqIHZhbGlkLWxvb2tpbmcgYnV0IG5ldmVyLW1pbnRlZCBVVUlEcyBlbnRlciB0cmFuc2NyaXB0cyBhbmQgcHJvZHVjZSBhIDQwNC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdE1hcmtlcih0eXBlOiBNYXJrZXJUeXBlLCBpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBbJHt0eXBlfToke2lkfV1gO1xufVxuXG4vKiogT25lIG1hcmtlciBmb3VuZCBpbiBhZ2VudCBwcm9zZSwgd2l0aCBpdHMgc291cmNlIHNwYW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZE1hcmtlciB7XG4gIC8qKiBNYXJrZXIga2luZCB0b2tlbiAoZS5nLiBgY2hhcnRgLCBgZGF0YWApOyBzZWUge0BsaW5rIE1hcmtlclR5cGV9LiAqL1xuICB0eXBlOiBNYXJrZXJUeXBlO1xuICAvKiogUmF3IGlkIGNhcHR1cmVkIGZyb20gdGhlIG1hcmtlciAoY2hhcnQgaWQgb3Igc3RhdGVtZW50IGlkKS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIEluZGV4IG9mIHRoZSBtYXJrZXIncyBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHNvdXJjZSB0ZXh0LiAqL1xuICBzdGFydDogbnVtYmVyO1xuICAvKiogSW5kZXggb25lIHBhc3QgdGhlIG1hcmtlcidzIGxhc3QgY2hhcmFjdGVyLiAqL1xuICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJzZSBldmVyeSBlbWJlZCBtYXJrZXIgb3V0IG9mIGB0ZXh0YCwgaW4gc291cmNlIG9yZGVyLiBBIHNpbmdsZVxuICogcmVnZXggcGFzcyBtZWFucyBtYXRjaGVzIG5ldmVyIG92ZXJsYXAsIHNvIGNhbGxlcnMgY2FuIHNwbGljZSB0aGVcbiAqIHNwYW5zIGRpcmVjdGx5IHdpdGhvdXQgYSBzb3J0L2RlZHVwZSBzdGVwLiBUaGlzIGlzIHRoZSBvbmUgZW50cnlcbiAqIHBvaW50IGZvciBtYXJrZXIgcGFyc2luZzogdHlwZSBicmFuY2hpbmcgcnVucyBvbiB0aGUgcmV0dXJuZWRcbiAqIG1hcmtlcnMuIFRoZSBncmFtbWFyICh7QGxpbmsgTUFSS0VSX1JFfSkgbWF0Y2hlcyBhbnkgbm9uLWJyYWNrZXQgaWRcbiAqIHRva2VuLCBzbyBhIHJldHVybmVkIHtAbGluayBQYXJzZWRNYXJrZXIuaWR9IGlzIE5PVCBndWFyYW50ZWVkIHRvXG4gKiBiZSBhIHJlYWwgZW1iZWQgaWQgLSBydW4gaXQgdGhyb3VnaCB7QGxpbmsgaXNVdWlkfSB0byB0ZWxsIGFcbiAqIGdlbnVpbmUgZW1iZWQgYXBhcnQgZnJvbSBhIGZhYnJpY2F0ZWQgbGFiZWwsIHdoaWNoIHRoZSBjYWxsZXIgdGhlblxuICogb2JzY3VyZXMgcmF0aGVyIHRoYW4gcmVuZGVyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNYXJrZXJzKHRleHQ6IHN0cmluZyk6IFBhcnNlZE1hcmtlcltdIHtcbiAgY29uc3Qgb3V0OiBQYXJzZWRNYXJrZXJbXSA9IFtdO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIHRleHQubWF0Y2hBbGwoTUFSS0VSX1JFKSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gbWF0Y2guaW5kZXggPz8gMDtcbiAgICBvdXQucHVzaCh7XG4gICAgICAvLyBHcm91cCAxIGlzIHRoZSBgPHR5cGU+YCB0b2tlbjsgdGhlIHNlcnZlcidzIGVtYmVkIHJlZ2lzdHJ5XG4gICAgICAvLyAobm90IHRoaXMgcGFyc2VyKSBkZWNpZGVzIHdoZXRoZXIgaXQncyBzdXBwb3J0ZWQuXG4gICAgICB0eXBlOiBtYXRjaFsxXSA/PyBcIlwiLFxuICAgICAgaWQ6IG1hdGNoWzJdID8/IFwiXCIsXG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBTdHJpcCBhIHRyYWlsaW5nIHBhcnRpYWwgbWFya2VyIChgW2NoYXJ0YCwgYFtkYXRhOjAxZjFgLCAuLi4pIHRoYXRcbiAqIGhhc24ndCByZWNlaXZlZCBpdHMgY2xvc2luZyBgXWAgeWV0LiBXaGlsZSB0aGUgbW9kZWwgc3RyZWFtc1xuICogdGV4dC1kZWx0YXMgYSBtYXJrZXIgYXJyaXZlcyBhY3Jvc3Mgc2V2ZXJhbCBjaHVua3MsIGFuZCByZW5kZXJpbmdcbiAqIGVhY2ggaW50ZXJpbSBzdGF0ZSB3b3VsZCBicmllZmx5IGZsYXNoIHRoZSBsaXRlcmFsIGBbY2hhcnQ6YWJjLWBcbiAqIHByZWZpeCBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2tldCBzd2FwcyBpdCBmb3IgYSBzbG90LiBIaWRpbmcgYW55XG4gKiB0cmFpbGluZyBgWzxub24td2hpdGVzcGFjZS1ub24tYnJhY2tldD4uLi5gIHN1ZmZpeCBrZWVwcyB0aGUgcHJvc2VcbiAqIHN0YWJsZSB1bnRpbCBlaXRoZXIgYSBgXWAgKGZ1bGwgbWFya2VyKSBvciB3aGl0ZXNwYWNlIChkZWZpbml0ZWx5XG4gKiBub3QgYSBtYXJrZXIpIGxhbmRzLiBQZXJzaXN0ZWQgdHJhbnNjcmlwdHMgbmV2ZXIgZW5kIG1pZC1tYXJrZXIsXG4gKiBzbyB0aGlzIGlzIGEgbm8tb3Agb24gcmVsb2FkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBJbmNvbXBsZXRlTWFya2VyVGFpbCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5yZXBsYWNlKC9cXFtbXlxcc1tcXF1dKiQvLCBcIlwiKTtcbn1cbiJdfQ==
package/lib/src/wire.d.ts CHANGED
@@ -23,7 +23,7 @@
23
23
  * ({@link GenieAgentResult} and its summary / dataset items).
24
24
  *
25
25
  * The route segments live in the sibling `routes.ts`
26
- * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
26
+ * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `markers.ts`,
27
27
  * so this file stays purely declarative (schemas + inferred types).
28
28
  * The browser client that drives these routes (`MastraPluginClient`)
29
29
  * ships from `@dbx-tools/ui-mastra`.
@@ -31,7 +31,6 @@
31
31
  * @module
32
32
  */
33
33
  import { genieModel } from "@dbx-tools/shared-genie";
34
- import { model } from "@dbx-tools/shared-model";
35
34
  import { z } from "zod";
36
35
  /**
37
36
  * JSON-safe descriptor published by the Mastra plugin's
@@ -112,10 +111,10 @@ export declare const ServingEndpointsResponseSchema: z.ZodObject<{
112
111
  speed: z.ZodOptional<z.ZodNumber>;
113
112
  cost: z.ZodOptional<z.ZodNumber>;
114
113
  }, z.core.$strip>>;
115
- class: z.ZodOptional<z.ZodEnum<typeof model.ModelClass>>;
114
+ class: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<"chat-thinking">, z.ZodLiteral<"chat-balanced">, z.ZodLiteral<"chat-fast">, z.ZodLiteral<"embedding">]>>;
116
115
  serviceNames: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
117
116
  modelServiceName: z.ZodOptional<z.ZodString>;
118
- reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodString>>;
117
+ reasoningEfforts: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodLiteral<"none">, z.ZodLiteral<"minimal">, z.ZodLiteral<"low">, z.ZodLiteral<"medium">, z.ZodLiteral<"high">, z.ZodLiteral<"xhigh">, z.ZodLiteral<"max">]>>>;
119
118
  status: z.ZodOptional<z.ZodObject<{
120
119
  deprecated: z.ZodDefault<z.ZodBoolean>;
121
120
  }, z.core.$strip>>;
package/lib/src/wire.js CHANGED
@@ -23,7 +23,7 @@
23
23
  * ({@link GenieAgentResult} and its summary / dataset items).
24
24
  *
25
25
  * The route segments live in the sibling `routes.ts`
26
- * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
26
+ * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `markers.ts`,
27
27
  * so this file stays purely declarative (schemas + inferred types).
28
28
  * The browser client that drives these routes (`MastraPluginClient`)
29
29
  * ships from `@dbx-tools/ui-mastra`.
@@ -451,4 +451,4 @@ export const GenieAgentResultSchema = z.object({
451
451
  summary: z.array(GenieSummaryItemSchema),
452
452
  error: z.string().optional(),
453
453
  });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFJSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFJSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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RSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlci50c2AsXG4gKiBzbyB0aGlzIGZpbGUgc3RheXMgcHVyZWx5IGRlY2xhcmF0aXZlIChzY2hlbWFzICsgaW5mZXJyZWQgdHlwZXMpLlxuICogVGhlIGJyb3dzZXIgY2xpZW50IHRoYXQgZHJpdmVzIHRoZXNlIHJvdXRlcyAoYE1hc3RyYVBsdWdpbkNsaWVudGApXG4gKiBzaGlwcyBmcm9tIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWAuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGdlbmllTW9kZWwsIHR5cGUgR2VuaWVDaGF0RXZlbnQsIHR5cGUgTWVzc2FnZVN0YXR1cyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1nZW5pZVwiO1xuaW1wb3J0IHsgbW9kZWwgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtbW9kZWxcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xpZW50IGNvbmZpZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTi1zYWZlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IHRoZSBNYXN0cmEgcGx1Z2luJ3NcbiAqIGBjbGllbnRDb25maWcoKWAuXG4gKlxuICogT25seSB0aGUgaXJyZWR1Y2libGUgZGF0YSBsaXZlcyBoZXJlOiBgYmFzZVBhdGhgICh0aGUgb25lIHBhdGggdGhlXG4gKiBjbGllbnQgY2FuJ3Qgb3RoZXJ3aXNlIGtub3csIHNpbmNlIGl0IGVuY29kZXMgdGhlIHBsdWdpbidzIG1vdW50XG4gKiBuYW1lKSBwbHVzIHRoZSBydW50aW1lIGFnZW50IHJvc3Rlci4gRXZlcnkgY29uY3JldGUgZW5kcG9pbnQgVVJMIGlzXG4gKiBkZXJpdmVkIGZyb20gYGJhc2VQYXRoYCBieSB0aGUgYnJvd3NlciBjbGllbnRcbiAqIChgTWFzdHJhUGx1Z2luQ2xpZW50YCkgdXNpbmcgdGhlIHNoYXJlZCB7QGxpbmsgTUFTVFJBX1JPVVRFU31cbiAqIHNlZ21lbnRzLCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gcHVibGlzaCBwZXItcm91dGUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBiYXNlUGF0aGA6IHBsdWdpbiBtb3VudCBwYXRoLiBBbHdheXMgYC9hcGkvPHBsdWdpbk5hbWU+YC4gRmVlZFxuICogICAgIGl0IHRvIGBuZXcgTWFzdHJhUGx1Z2luQ2xpZW50KGNvbmZpZylgIChmcm9tXG4gKiAgICAgYEBkYngtdG9vbHMvdWktbWFzdHJhYCkgdG8gZ2V0IGEgdHlwZWQgY2xpZW50IG92ZXIgZXZlcnlcbiAqICAgICByb3V0ZSBwbHVzIHRoZSBzdGFuZGFyZCBhZ2VudCBzdHJlYW0uXG4gKiAgIC0gYGRlZmF1bHRBZ2VudGA6IGFnZW50IGlkIHRoZSBjbGllbnQgY29udmVyc2VzIHdpdGggd2hlbiBpdFxuICogICAgIGRvZXNuJ3QgbmFtZSBvbmUuXG4gKiAgIC0gYGFnZW50c2A6IGV2ZXJ5IHJlZ2lzdGVyZWQgYWdlbnQgaWQgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLlxuICogICAtIGBmZWVkYmFja0VuYWJsZWRgOiB3aGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIGxvZyB1c2VyIGZlZWRiYWNrIHRvXG4gKiAgICAgTUxmbG93IChNTGZsb3cgdHJhY2luZyBpcyBjb25maWd1cmVkKS4gRHJpdmVzIHdoZXRoZXIgdGhlIGNoYXQgVUlcbiAqICAgICBzdXJmYWNlcyB0aHVtYnMgLyBjb21tZW50IGNvbnRyb2xzLiBEZWZhdWx0cyB0byBgZmFsc2VgIHNvIGFcbiAqICAgICBjb25maWcgcHVibGlzaGVkIGJ5IGFuIG9sZGVyIHNlcnZlciAod2l0aG91dCB0aGUgZmllbGQpIHBhcnNlc1xuICogICAgIGNsZWFubHkgdG8gXCJvZmZcIi5cbiAqICAgLSBgY2hhdEFsd2F5c0F2YWlsYWJsZWA6IHdoZXRoZXIgdGhlIGFnZW50cycgRGF0YWJyaWNrcyBjYWxscyBydW4gYXMgdGhlXG4gKiAgICAgYXBwIHNlcnZpY2UgcHJpbmNpcGFsIHJhdGhlciB0aGFuIG9uLWJlaGFsZi1vZiB0aGUgc2lnbmVkLWluIHVzZXIuIFdoZW5cbiAqICAgICBgdHJ1ZWAgdGhlIGNoYXQgd29ya3MgZm9yIGFueSBjYWxsZXIgd2hvIGNhbiBvcGVuIHRoZSBhcHAsIHNvIGEgVUkgdGhhdFxuICogICAgIGhpZGVzIGNoYXQgd2hlbiB0aGUgT0JPIHRva2VuIGlzIGFic2VudCBzaG91bGQgc2hvdyBpdCBhbnl3YXkuIERlZmF1bHRzXG4gKiAgICAgdG8gYGZhbHNlYCAodGhlIE9CTyAvIGBcInVzZXJcImAgaWRlbnRpdHkgbW9kZSksIHNvIGFuIG9sZGVyIHNlcnZlciB3aXRob3V0XG4gKiAgICAgdGhlIGZpZWxkIGtlZXBzIHRoZSBPQk8tZ2F0ZWQgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFDbGllbnRDb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGJhc2VQYXRoOiB6LnN0cmluZygpLFxuICBkZWZhdWx0QWdlbnQ6IHouc3RyaW5nKCksXG4gIGFnZW50czogei5hcnJheSh6LnN0cmluZygpKSxcbiAgZmVlZGJhY2tFbmFibGVkOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgY2hhdEFsd2F5c0F2YWlsYWJsZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG59KTtcbi8qKiBCcm93c2VyLXNhZmUgTWFzdHJhIHBsdWdpbiBkZXNjcmlwdG9yIHVzZWQgdG8gY29uc3RydWN0IHJvdXRlIGFuZCBzdHJlYW0gY2xpZW50cy4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYUNsaWVudENvbmZpZyA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYUNsaWVudENvbmZpZ1NjaGVtYT47XG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZGVmYXVsdC1tb2RlbFs/YWdlbnRJZD1dYC4gVGhlXG4gKiBzdGF0aWMgZGVmYXVsdCBtb2RlbCB0aGUgYWdlbnQgcmVzb2x2ZXMgdG8gd2hlbiB0aGUgY2xpZW50IHBpbnMgbm8gbW9kZWwsXG4gKiBhcyBib3RoIHRoZSByYXcgc2VydmluZy1lbmRwb2ludCBgbW9kZWxgIGlkIGFuZCBhIGBkaXNwbGF5TmFtZWAgKHRoZVxuICogaHVtYW5pemVkIGxhYmVsIHRoZSBwaWNrZXIgc2hvd3MpLiBCb3RoIGFyZSBgbnVsbGAgd2hlbiB0aGUgYWdlbnQgZGVjaWRlc1xuICogaXRzIG1vZGVsIGR5bmFtaWNhbGx5IGF0IGNhbGwgdGltZSAobm90aGluZyBzdGF0aWMgdG8gYWR2ZXJ0aXNlKS4gTGV0cyB0aGVcbiAqIHBpY2tlciBsYWJlbCBpdHMgZGVmYXVsdCBvcHRpb24gV0lUSE9VVCB3YWl0aW5nIG9uIHRoZSBgL21vZGVsc2AgY2F0YWxvZ3VlLFxuICogc28gaXQgbmV2ZXIgZmxhc2hlcyBhIHJhdyBpZCBvbiBsb2FkLiBLZXB0IG9mZiB0aGUgc3RhdGljIGJvb3RzdHJhcFxuICogYGNsaWVudENvbmZpZ2Agb24gcHVycG9zZTogaXQgaXMgcGVyLWFnZW50IGFuZCBjYW4gYmUgZHluYW1pYywgc28gaXQgaXNcbiAqIGZldGNoZWQgbGlrZSBgL21vZGVsc2AuXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgYWdlbnRJZDogei5zdHJpbmcoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgZGlzcGxheU5hbWU6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuLyoqIFJlc3BvbnNlIGlkZW50aWZ5aW5nIHRoZSBtb2RlbCBjdXJyZW50bHkgc2VsZWN0ZWQgYXMgdGhlIHBsdWdpbiBkZWZhdWx0LiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdE1vZGVsUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBEZWZhdWx0TW9kZWxSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbW9kZWwgY2F0YWxvZ3VlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9tb2RlbHNgLiBXcmFwcyB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbW9kZWwuU2VydmluZ0VuZHBvaW50U3VtbWFyeVNjaGVtYX0gKHJlLWV4cG9ydGVkIGZyb21cbiAqIGBAZGJ4LXRvb2xzL3NoYXJlZC1tb2RlbGApIHNvIHRoZSBjYXRhbG9ndWVcbiAqIGRlc2NyaXB0b3IgaGFzIGEgc2luZ2xlIGRlZmluaXRpb24gdGhlIGNsaWVudCwgc2VydmVyLCBhbmQgdGhlXG4gKiBzdGFuZGFsb25lIGBAZGJ4LXRvb2xzL21vZGVsYCB0b29sa2l0IGFsbCBhZ3JlZSBvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZW5kcG9pbnRzOiB6LmFycmF5KG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWEpLFxufSk7XG4vKiogQXZhaWxhYmxlIERhdGFicmlja3Mgc2VydmluZyBlbmRwb2ludHMgcmV0dXJuZWQgYnkgdGhlIE1hc3RyYSBtb2RlbCByb3V0ZS4gKi9cbmV4cG9ydCB0eXBlIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFNlcnZpbmdFbmRwb2ludHNSZXNwb25zZVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdWdnZXN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBKU09OIHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9zdWdnZXN0aW9uc2AuXG4gKlxuICogQ2FycmllcyB0aGUgY3VyYXRlZCBzdGFydGVyIHF1ZXN0aW9ucyBmb3IgYW4gYWdlbnQncyBHZW5pZSBzcGFjZSAtXG4gKiB0aGUgYHNhbXBsZV9xdWVzdGlvbnNgIGFuIGF1dGhvciBjb25maWd1cmVkIG9uIHRoZSBzcGFjZSwgc3VyZmFjZWRcbiAqIGFzIG9uZS10YXAgcHJvbXB0cyBvbiB0aGUgY2hhdCdzIGVtcHR5IHN0YXRlLiBgcXVlc3Rpb25zYCBpcyBlbXB0eVxuICogd2hlbiB0aGUgYWdlbnQgaGFzIG5vIEdlbmllIHNwYWNlIChvciB0aGUgc3BhY2UgZGVmaW5lcyBub25lKSwgc29cbiAqIHRoZSBjbGllbnQgcmVuZGVycyBub3RoaW5nIGluIHRoYXQgY2FzZSByYXRoZXIgdGhhbiBmYWxsaW5nIGJhY2sgdG9cbiAqIGJ1aWx0LWluIGV4YW1wbGUgcHJvbXB0cy5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHF1ZXN0aW9uczogei5hcnJheSh6LnN0cmluZygpKSxcbn0pO1xuLyoqIEZvbGxvdy11cCBwcm9tcHRzIHN1Z2dlc3RlZCBmb3IgdGhlIGN1cnJlbnQgYWdlbnQgYW5kIHRocmVhZCBjb250ZXh0LiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhU3VnZ2VzdGlvbnNSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2hhcnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEFsbG93ZWQgY2hhcnQgdHlwZXMgdGhlIHBsYW5uZXIgY2FuIHBpY2suIERlZmluZWQgYXMgYVxuICogZGlzY3JpbWluYXRlZCBsaXRlcmFsIHVuaW9uIHNvIGVhY2ggdmFyaWFudCBjYXJyaWVzIGl0cyBvd25cbiAqIGAuZGVzY3JpYmUoKWAgY2xhdXNlIC0gdGhlIHNlcnZlci1zaWRlIHBsYW5uZXIncyBwcm9tcHRcbiAqIGZvcm1hdHRlciB3YWxrcyBgLm9wdGlvbnNgIHRvIGlubGluZSB0aGUgZGVzY3JpcHRpb25zIGludG8gdGhlXG4gKiBtb2RlbCBpbnN0cnVjdGlvbnMsIGtlZXBpbmcgdGhlIHByb21wdCBpbiBsb2NrLXN0ZXAgd2l0aCB0aGVcbiAqIHNjaGVtYSBieSBjb25zdHJ1Y3Rpb24uIFRoZSBydW50aW1lIHR5cGUgaXMgdGhlIHBsYWluIHN0cmluZ1xuICogdW5pb24gKGBcImJhclwiIHwgXCJsaW5lXCIgfCAuLi5gKSwgc28gY29uc3VtZXJzIHRoYXQganVzdCBuZWVkIGFcbiAqIGRpc2NyaW1pbmF0b3IgdmFsdWUgYmVoYXZlIHRoZSBzYW1lIGFzIGlmIGl0IHdlcmUgYVxuICogYHouZW51bShbLi4uXSlgLlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRUeXBlU2NoZW1hID0gelxuICAudW5pb24oW1xuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiYmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiY29tcGFyaW5nIGEgbnVtZXJpYyB2YWx1ZSBhY3Jvc3MgYSBzbWFsbC9tZWRpdW0gc2V0IG9mIGRpc2NyZXRlIGNhdGVnb3JpZXMgKHRvcC1OLCByYW5raW5nLCBncm91cC1ieSlcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJob3Jpem9udGFsQmFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwic2FtZSBhcyBiYXIgYnV0IGNhdGVnb3JpZXMgb24gdGhlIHktYXhpcyAtIHByZWZlciB3aGVuIGNhdGVnb3J5IGxhYmVscyBhcmUgbG9uZyBvciB0aGVyZSBhcmUgbWFueSBjYXRlZ29yaWVzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwibGluZVwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQtYXhpcyB0cmVuZCAodGltZSBzZXJpZXMsIHNlcXVlbmNlLCByYW5rKSB3aGVyZSB0aGUgeC1heGlzIGhhcyBuYXR1cmFsIG9yZGVyXCIsXG4gICAgICApLFxuICAgIHoubGl0ZXJhbChcImFyZWFcIikuZGVzY3JpYmUoXCJzdGFja2VkLXRyZW5kIGVtcGhhc2lzIC0gY3VtdWxhdGl2ZSBvciBjb21wb3NpdGlvbiBvdmVyIHRpbWVcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjb21ib1wiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1peGVkIGJhciArIGxpbmUgKG9yIGFyZWEpIHNlcmllcyBvbiBzaGFyZWQgY2F0ZWdvcmllcyAtIGUuZy4gdm9sdW1lIGJhcnMgd2l0aCBhIHJhdGUvdHJlbmQgbGluZTsgc2V0IGVhY2ggc2VyaWVzJyBgdHlwZWBcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ3YXRlcmZhbGxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJicmlkZ2UgLyBydW5uaW5nLXRvdGFsIG9mIHNpZ25lZCBzdGVwIHZhbHVlcyAoc3RhcnQgLT4gZGVsdGFzIC0+IGVuZCkgYWNyb3NzIG9yZGVyZWQgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInNjYXR0ZXJcIilcbiAgICAgIC5kZXNjcmliZShcInR3by1udW1lcmljLWF4aXMgY29ycmVsYXRpb25zIGJldHdlZW4gZmllbGRzIChlLmcuIHByaWNlIHZzLiBxdWFudGl0eSlcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJoZWF0bWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibWF0cml4IGludGVuc2l0eSBhY3Jvc3MgdHdvIGNhdGVnb3J5IGF4ZXMgLSB4IGxhYmVscyBpbiBgY2F0ZWdvcmllc2AsIG9uZSBzZXJpZXMgcGVyIG1hdHJpeCByb3cgaG9sZGluZyB0aGF0IHJvdydzIHZhbHVlc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcInJhZGFyXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwibXVsdGktZGltZW5zaW9uIGNvbXBhcmlzb24gYWNyb3NzIGEgZml4ZWQgc2V0IG9mIGF4ZXMgKG9uZSBpbmRpY2F0b3IgcGVyIGNhdGVnb3J5LCBvbmUgb3IgbW9yZSBzZXJpZXMgb2YgdmFsdWVzKVwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJwaWVcIikuZGVzY3JpYmUoXCJwYXJ0cy1vZi1hLXdob2xlIHdoZW4gMi03IGNhdGVnb3JpZXMgc3VtIHRvIGEgbWVhbmluZ2Z1bCB0b3RhbFwiKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImZ1bm5lbFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm9yZGVyZWQgc3RhZ2VzIHRoYXQgc2hyaW5rIChjb252ZXJzaW9uLCBwaXBlbGluZSwgYXR0cml0aW9uKSAtIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJ0cmVlbWFwXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwicGFydHMtb2YtYS13aG9sZSBhcyBuZXN0ZWQgcmVjdGFuZ2xlcyB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gfjcgY2F0ZWdvcmllcyBvciBhIGZsYXQgaGllcmFyY2h5IG9mIGB7bmFtZSwgdmFsdWV9YCBzbGljZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJjdXN0b21cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJlc2NhcGUgaGF0Y2ggZm9yIGEgY2hhcnQgbm9uZSBvZiB0aGUgYWJvdmUgY2FuIGV4cHJlc3MgKHNhbmtleSwgYm94cGxvdCwgY2FuZGxlc3RpY2ssIHN1bmJ1cnN0LCBnYXVnZSwgbmV0d29yayBncmFwaCwgY2FsZW5kYXIsIHBhcmFsbGVsLCAuLi4pIC0gaGFuZC13cml0ZSB0aGUgY29tcGxldGUgRWNoYXJ0cyBvcHRpb24gaW5zdGVhZCBvZiBhIHBsYW5cIixcbiAgICAgICksXG4gIF0pXG4gIC5kZXNjcmliZShcIlRoZSBjaGFydCBzaGFwZSB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgZGF0YSBhbmQgaW50ZW50LlwiKTtcbi8qKiBTdXBwb3J0ZWQgY2hhcnQgZmFtaWx5IHNlbGVjdGVkIGJ5IHRoZSBzZXJ2ZXItc2lkZSBjaGFydCBwbGFubmVyLiAqL1xuZXhwb3J0IHR5cGUgQ2hhcnRUeXBlID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRUeXBlU2NoZW1hPjtcblxuLyoqXG4gKiBSZXNvbHZlZCBjaGFydCBwbGFuIGEgc2V0dGxlZCBjaGFydCBlbnRyeSBjYXJyaWVzIG9uIGl0c1xuICogYHJlc3VsdGAgZmllbGQuIGBvcHRpb25gIGlzIHRoZSBmdWxsIEVjaGFydHMgc3BlYzsgcGFzc1xuICogc3RyYWlnaHQgaW50byBgPFJlYWN0RUNoYXJ0cyBvcHRpb249ey4uLn0+YC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydFR5cGU6IENoYXJ0VHlwZVNjaGVtYSxcbiAgb3B0aW9uOiB6XG4gICAgLnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSlcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkZ1bGx5LXJlc29sdmVkIEVjaGFydHMgYEVDaGFydHNPcHRpb25gIEpTT04gZm9yIHRoaXMgY2hhcnQgLSBkcm9wIGRpcmVjdGx5IGludG8gYW4gRWNoYXJ0cyBpbnN0YW5jZSAob3IgYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59IC8+YCkgd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuIEluY2x1ZGVzIHRpdGxlIC8gdG9vbHRpcCAvIGxlZ2VuZCAvIGdyaWQgLyBheGlzIC8gc2VyaWVzIGRlZmF1bHRzIGFscmVhZHkgbWVyZ2VkIGluLlwiLFxuICAgICksXG59KTtcbi8qKiBSZW5kZXItcmVhZHkgY2hhcnQgcGxhbiBzdG9yZWQgYmVoaW5kIGEgY2hhcnQgZW1iZWQgaWRlbnRpZmllci4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRSZXN1bHRTY2hlbWE+O1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IEFORCBzZXJ2ZXItc2lkZSBjYWNoZSBzaGFwZSBmb3IgYSBjaGFydCBlbnRyeS5cbiAqIFRocmVlIGxpZmVjeWNsZSBzdGF0ZXMgaW5mZXJyZWQgZnJvbSB0aGUgdHdvIG9wdGlvbmFsIGZpZWxkc1xuICogKG5vIGRpc2NyaW1pbmF0b3IgbmVlZGVkKTpcbiAqXG4gKiAgIC0gYHJlc3VsdGAgc2V0ICAgICAgICAgICAgICAgICAgICAtPiBjaGFydCBpcyByZWFkeSB0byByZW5kZXJcbiAqICAgLSBgZXJyb3JgIHNldCAgICAgICAgICAgICAgICAgICAgIC0+IHBsYW5uZXIgLyBkYXRhIGZldGNoIGZhaWxlZFxuICogICAtIGJvdGggYHJlc3VsdGAgYW5kIGBlcnJvcmAgdW5zZXQgLT4gc3RpbGwgcHJvY2Vzc2luZ1xuICpcbiAqIGBvcHRpb25gIGlzIHR5cGVkIGFzIGEgZ2VuZXJpYyByZWNvcmQgc28gdGhpcyBwYWNrYWdlIHN0YXlzXG4gKiBkZXBlbmRlbmN5LWZyZWUgb2YgYGVjaGFydHNgLiBUaGUgc2VydmVyIChgY2hhcnQudHNgKSBpbXBvcnRzXG4gKiB0aGlzIHNjaGVtYSBkaXJlY3RseTsgdGhlIGRlbW8gY2xpZW50IHBvbGxzIHRoZVxuICogYC9lbWJlZC9jaGFydC86aWRgIHJvdXRlIGFuZCBwYXJzZXMgcmVzcG9uc2VzIGFnYWluc3QgaXQuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRJZDogelxuICAgIC5zdHJpbmcoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiT3BhcXVlIGlkIG1pbnRlZCBieSB0aGUgY2hhcnQgc3Vic3lzdGVtLiBFbWJlZCB2ZXJiYXRpbSBhcyBgW2NoYXJ0OjxjaGFydElkPl1gIGluIGFnZW50IHByb3NlOyB0aGUgaG9zdCBVSSByZXNvbHZlcyBpdCBhZ2FpbnN0IHRoaXMgY2FjaGUgZW50cnkuXCIsXG4gICAgKSxcbiAgZXJyb3I6IHpcbiAgICAuc3RyaW5nKClcbiAgICAub3B0aW9uYWwoKVxuICAgIC5kZXNjcmliZShcbiAgICAgIFwiRXJyb3IgbWVzc2FnZSB3aGVuIHRoZSBjaGFydCBmYWlsZWQgKGRhdGEgZmV0Y2ggZXJyb3IsIHBsYW5uZXIgZXJyb3IsIGVtcHR5IGRhdGFzZXQpLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgcmVzdWx0YDsgYWJzZW50IG9uIHN1Y2Nlc3MgYW5kIHdoaWxlIHByb2Nlc3NpbmcuXCIsXG4gICAgKSxcbiAgcmVzdWx0OiBDaGFydFJlc3VsdFNjaGVtYS5vcHRpb25hbCgpLmRlc2NyaWJlKFxuICAgIFwiUmVzb2x2ZWQgY2hhcnQgcGxhbi4gQWJzZW50IHdoaWxlIHByb2Nlc3NpbmcgYW5kIHdoZW4gdGhlIHJ1biBlcnJvcmVkLlwiLFxuICApLFxufSk7XG4vKiogUG9sbGFibGUgY2hhcnQtY2FjaGUgZW50cnkgcmVwcmVzZW50aW5nIHBlbmRpbmcsIHN1Y2Nlc3NmdWwsIG9yIGZhaWxlZCBwbGFubmluZy4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgQ2hhcnRTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRlbWVudHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFdpcmUtZm9ybWF0IHBheWxvYWQgcmV0dXJuZWQgYnkgYEdFVCAke2Jhc2VQYXRofS9lbWJlZC9kYXRhLzppZGAuXG4gKlxuICogTWlycm9ycyB0aGUgYWdlbnQtc2lkZSBgZ2V0X3N0YXRlbWVudGAgdG9vbCdzIG91dHB1dCBzbyB0aGVcbiAqIGhvc3QgVUkgYW5kIHRoZSBMTE0gc2VlIHRoZSBleGFjdCBzYW1lIHNoYXBlIGZvciB0aGUgc2FtZVxuICogc3RhdGVtZW50OyB0aGUgcm91dGUgaXMgd2hhdCByZXNvbHZlcyBgW2RhdGE6PHN0YXRlbWVudF9pZD5dYFxuICogbWFya2VycyB0aGUgYWdlbnQgZW1iZWRzIGluIHByb3NlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgY29sdW1uc2A6IGNvbHVtbiBuYW1lcyBpbiBkZWNsYXJhdGlvbiBvcmRlci5cbiAqICAgLSBgcm93c2A6IHJvdyByZWNvcmRzIGtleWVkIGJ5IGNvbHVtbiBuYW1lLiBDZWxsIHZhbHVlcyBhcmVcbiAqICAgICBlaXRoZXIgY29lcmNlZCBudW1iZXJzIG9yIHRoZSBvcmlnaW5hbCBzdHJpbmdzIChHZW5pZSAvXG4gKiAgICAgU3RhdGVtZW50IEV4ZWN1dGlvbiByZXR1cm5zIGV2ZXJ5IGNlbGwgYXMgYHN0cmluZyB8IG51bGxgO1xuICogICAgIG51bWVyaWMtbG9va2luZyBjZWxscyBhcmUgY29lcmNlZCBzZXJ2ZXItc2lkZSBzbyB0aGUgVUlcbiAqICAgICBjYW4gZm9ybWF0IHdpdGggYHRhYnVsYXItbnVtc2Agd2l0aG91dCByZS1wYXJzaW5nKS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgdXBzdHJlYW0gKGluZGVwZW5kZW50IG9mIHRoZVxuICogICAgIGBsaW1pdGAgY2FwKS4gQ29tcGFyZSBhZ2FpbnN0IGByb3dzLmxlbmd0aGAgdG8gZGV0ZWN0XG4gKiAgICAgdHJ1bmNhdGlvbiAtIGB0cnVuY2F0ZWRgIGlzIHRoZSBwcmVjb21wdXRlZCBmbGFnLlxuICogICAtIGB0cnVuY2F0ZWRgOiBgdHJ1ZWAgd2hlbiB0aGUgc2VydmVyIGNsaXBwZWQgcm93cyB0byBob25vclxuICogICAgIHRoZSByb3V0ZSdzIHJvdyBjYXA7IHRoZSBVSSBzaG91bGQgc3VyZmFjZSBhIFwic2hvd2luZyBOIG9mXG4gKiAgICAgTSByb3dzXCIgYWZmb3JkYW5jZSBpbiB0aGF0IGNhc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBTdGF0ZW1lbnREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxuICB0cnVuY2F0ZWQ6IHouYm9vbGVhbigpLFxufSk7XG4vKiogVGFidWxhciBzdGF0ZW1lbnQgcGF5bG9hZCByZXNvbHZlZCBmcm9tIGEgYFtkYXRhOjxzdGF0ZW1lbnRfaWQ+XWAgZW1iZWQgbWFya2VyLiAqL1xuZXhwb3J0IHR5cGUgU3RhdGVtZW50RGF0YSA9IHouaW5mZXI8dHlwZW9mIFN0YXRlbWVudERhdGFTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tIG1hc3RyYS1vbmx5IGdlbmllLWFnZW50IGV2ZW50cyAtLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiB0aGUgR2VuaWUgdG9vbCBpbnZvY2F0aW9uIHN0YXJ0ZWQuXG4gKiBFbWl0dGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIGNhbGxpbmcgYWdlbnQgaW52b2tlcyB0aGUgR2VuaWVcbiAqIHRvb2wsIGJlZm9yZSBhbnkgaW5uZXIgYWdlbnQgLyB3aXJlIGFjdGl2aXR5LCBzbyB0aGUgVUkgY2FuXG4gKiBwb3AgYSBcIlRoaW5raW5nLi4uXCIgcGlsbCB0aGUgaW5zdGFudCB0aGUgbW9kZWwgZGVjaWRlcyB0b1xuICogZGVsZWdhdGUuIGBjb252ZXJzYXRpb25JZGAgLyBgbWVzc2FnZUlkYCBhcmUgYWJzZW50IG9uIHRoaXNcbiAqIGZpcnN0IGVtaXQgKG5vIEdlbmllIHJvdW5kLXRyaXAgeWV0KS4gRmllbGQgbmFtZXMgYXJlXG4gKiBjYW1lbENhc2UgKHZzIHRoZSBzbmFrZV9jYXNlIHdpcmUgZXZlbnRzKSB0byBtaXJyb3IgdGhlXG4gKiBHZW5pZSBhZ2VudCdzIG93biBpbnRlcm5hbCBkYXRhIHBsdW1iaW5nLlxuICovXG5leHBvcnQgY29uc3QgU3RhcnRlZEV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdGFydGVkXCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKipcbiAgICogR2VuaWUgY29udmVyc2F0aW9uIGlkLCBwb3B1bGF0ZWQgb25seSB3aGVuIHRoaXMgYHN0YXJ0ZWRgXG4gICAqIGV2ZW50IGNvcnJlc3BvbmRzIHRvIGEgZm9sbG93LXVwIHR1cm4gb24gYW4gZXhpc3RpbmdcbiAgICogY29udmVyc2F0aW9uLiBBYnNlbnQgb24gdGhlIGZpcnN0IHR1cm4uXG4gICAqL1xuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKipcbiAgICogR2VuaWUgbWVzc2FnZSBpZCwgcG9wdWxhdGVkIG9ubHkgYWZ0ZXIgdGhlIGZpcnN0IHdpcmVcbiAgICogYG1lc3NhZ2VgIGV2ZW50IGxhbmRzLiBBYnNlbnQgb24gdGhlIGltbWVkaWF0ZS1vbi1pbnZva2VcbiAgICogZW1pdC5cbiAgICovXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogUXVlc3Rpb24gdGhlIEdlbmllIGFnZW50IHNlbnQgdG8gR2VuaWUuICovXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCksXG59KTtcbi8qKiBJbW1lZGlhdGUgbGlmZWN5Y2xlIGV2ZW50IGVtaXR0ZWQgd2hlbiBhbiBgYXNrX2dlbmllYCBpbnZvY2F0aW9uIGJlZ2lucy4gKi9cbmV4cG9ydCB0eXBlIFN0YXJ0ZWRFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN0YXJ0ZWRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgbGlmZWN5Y2xlIGV2ZW50OiBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvblxuICogZmluaXNoZWQuIENhcnJpZXMgdGhlIGh5ZHJhdGVkIGBzdGF0ZW1lbnRJZHNgIChyb3dzIGFyZSBmZXRjaGVkXG4gKiB2aWEgYGdldFN0YXRlbWVudGAgc2VwYXJhdGVseSkgYW5kIEdlbmllJ3MgZmluYWwgcHJvc2UgYW5zd2VyXG4gKiBzbyB0aGUgVUkgY2FuIG1vdmUgZnJvbSBcInRoaW5raW5nXCIgdG8gXCJhbnN3ZXJlZFwiIHdpdGhvdXRcbiAqIHdhaXRpbmcgZm9yIHRoZSBHZW5pZSBhZ2VudCdzIHdob2xlIHJlYXNvbmluZyBsb29wIHRvIGVuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEFza0dlbmllRG9uZUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJhc2tfZ2VuaWVfZG9uZVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBHZW5pZSdzIG5hdHVyYWwtbGFuZ3VhZ2UgYW5zd2VyIGZvciB0aGUgdHVybiwgaWYgYW55LiAqL1xuICBhbnN3ZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFN0YXRlbWVudCBpZHMgZm9yIGFueSBub24tZW1wdHkgcmVzdWx0IHNldHMgdGhpcyB0dXJuIHByb2R1Y2VkLiAqL1xuICBzdGF0ZW1lbnRJZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIC8qKlxuICAgKiBUZXJtaW5hbCB3aXJlIHN0YXR1cyAoYENPTVBMRVRFRGAgLyBgRkFJTEVEYCAvIGBDQU5DRUxMRURgKS5cbiAgICogTWlycm9ycyB0aGUgc291cmNlIGByZXN1bHRgIGV2ZW50J3Mgc3RhdHVzIHNvIHN1YnNjcmliZXJzXG4gICAqIGNhbiByZWFjdCB0byBhc2stbGV2ZWwgY29tcGxldGlvbiB3aXRob3V0IHJlLXdhbGtpbmcgaGlzdG9yeS5cbiAgICogVHJlYXRlZCBhcyBgei5jdXN0b208TWVzc2FnZVN0YXR1cz5gIGJlY2F1c2UgdGhlIFNESyBpcyB0aGVcbiAgICogc291cmNlIG9mIHRydXRoIGZvciB0aGUgZW51bSB2YWx1ZXMuXG4gICAqL1xuICBzdGF0dXM6IHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiksXG59KTtcbi8qKiBDb21wbGV0aW9uIGV2ZW50IGZvciBvbmUgYGFza19nZW5pZWAgaW52b2NhdGlvbiwgaW5jbHVkaW5nIGl0cyB0ZXJtaW5hbCBzdGF0dXMuICovXG5leHBvcnQgdHlwZSBBc2tHZW5pZURvbmVFdmVudCA9IHouaW5mZXI8dHlwZW9mIEFza0dlbmllRG9uZUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBlcnJvciBldmVudDogdGVybWluYWwgR2VuaWUgYWdlbnQgLyB0cmFuc3BvcnRcbiAqIGVycm9yLiBHZW5pZSdzIG93biBgRkFJTEVEYCAvIGBDQU5DRUxMRURgIGNvbWUgdGhyb3VnaCB0aGVcbiAqIHdpcmUncyBgcmVzdWx0YCBldmVudCAtIHRoaXMgdmFyaWFudCBpcyBmb3IgZmFpbHVyZXMgdGhlIHdpcmVcbiAqIGNhbid0IHJlcHJlc2VudCAobmV0d29yaywgR2VuaWUgYWdlbnQgY3Jhc2gsIHBsYW5uZXIgZXJyb3IsXG4gKiBldGMuKSBwbHVzIGEgVUktZnJpZW5kbHkgbWlycm9yIG9mIGByZXN1bHRgIHdoZW4gdGhlIHN0YXR1cyBpc1xuICogbm9uLWBDT01QTEVURURgLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCksXG59KTtcbi8qKiBNYXN0cmEtc2lkZSBmYWlsdXJlIGV2ZW50IGZvciBlcnJvcnMgb3V0c2lkZSBHZW5pZSdzIG5vcm1hbCB0ZXJtaW5hbCByZXN1bHQuICovXG5leHBvcnQgdHlwZSBNYXN0cmFHZW5pZUVycm9yRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFHZW5pZUVycm9yRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIGlubmVyIEdlbmllIGFnZW50J3NcbiAqIHN0cnVjdHVyZWQtb3V0cHV0IGNvZXJjaW9uIGhhcyBsYW5kZWQuIEZpcmVzIG9uY2UgcGVyIEdlbmllXG4gKiB0b29sIGludm9jYXRpb24sIEFGVEVSIGBhZ2VudC5nZW5lcmF0ZSguLi4pYCBjb21wbGV0ZXMgKGkuZS5cbiAqIHRoZSBpbm5lciBsb29wICsgTWFzdHJhJ3Mgc3RydWN0dXJpbmcgcGFzcyBoYXZlIGJvdGhcbiAqIGZpbmlzaGVkKSBhbmQgQkVGT1JFIHRoZSB3cmFwcGVyIGh5ZHJhdGVzIGVhY2ggYGRhdGFgIGl0ZW1cbiAqIHdpdGggYSBjaGFydC4gU2lnbmFscyB0byB0aGUgaG9zdCBVSSB0aGF0IHRoZSBhZ2VudCBoYXNcbiAqIHN0b3BwZWQgcmVhc29uaW5nIGFuZCBpcyBtb3ZpbmcgaW50byBjaGFydCBnZW5lcmF0aW9uLlxuICpcbiAqIFRoZSBzdHJ1Y3R1cmluZyBwYXNzIGl0c2VsZiBpcyBvcGFxdWUgKGl0IHJ1bnMgaW5zaWRlXG4gKiBNYXN0cmEncyBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgdG9nZXRoZXIgd2l0aCB0aGUgdG9vbCBsb29wKVxuICogc28gdGhpcyBpcyB0aGUgZWFybGllc3QgaG9vayB3ZSBjYW4gb2ZmZXI7IHdlIGNhbid0IGZpcmUgYVxuICogXCJzdW1tYXJ5IHN0YXJ0ZWRcIiBldmVudCB0aGUgd2F5IHdlIGZpcmUgYHN0YXJ0ZWRgLlxuICovXG5leHBvcnQgY29uc3QgU3VtbWFyeUV2ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoXCJzdW1tYXJ5XCIpLFxuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICAvKiogVG90YWwgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhZ2VudCdzIHN0cnVjdHVyZWQgc3VtbWFyeS4gKi9cbiAgaXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqIENvdW50IG9mIGB0ZXh0YCAvIHByb3NlIGl0ZW1zIGluIHRoZSBzdW1tYXJ5LiAqL1xuICB0ZXh0SXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgLyoqXG4gICAqIENvdW50IG9mIGBkYXRhYCBpdGVtcyB0aGUgd3JhcHBlciB3aWxsIGh5ZHJhdGUgaW50byBjaGFydHMuXG4gICAqIFRoZSBob3N0IFVJIGNhbiB1c2UgdGhpcyB0byBzZWVkIE4gY2hhcnQgc2tlbGV0b25zIGJlZm9yZVxuICAgKiB0aGUgcGVyLWNoYXJ0IGV2ZW50cyBhcnJpdmUuXG4gICAqL1xuICBkYXRhSXRlbXM6IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbn0pO1xuLyoqIExpZmVjeWNsZSBldmVudCBlbWl0dGVkIGJlZm9yZSBzdW1tYXJ5IGRhdGEgaXRlbXMgYXJlIGh5ZHJhdGVkIGludG8gY2hhcnRzLiAqL1xuZXhwb3J0IHR5cGUgU3VtbWFyeUV2ZW50ID0gei5pbmZlcjx0eXBlb2YgU3VtbWFyeUV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBldmVudCB1bmlvbi4gRWFjaCB2YXJpYW50IHVzZXMgdGhlIHNhbWUgZmxhdFxuICogYHt0eXBlLCAuLi5maWVsZHN9YCBzaGFwZSBhcyB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHNvXG4gKiBzdWJzY3JpYmVycyB1bmlvbiBib3RoIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudEV2ZW50U2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgU3RhcnRlZEV2ZW50U2NoZW1hLFxuICBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSxcbiAgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hLFxuICBTdW1tYXJ5RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBNYXN0cmEtb3duZWQgbGlmZWN5Y2xlIGV2ZW50cyBsYXllcmVkIG9uIHRvcCBvZiBHZW5pZSdzIHdpcmUgZXZlbnQgc3RyZWFtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVBZ2VudEV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudEV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBUaGUgdW5pZmllZCB3cml0ZXItZXZlbnQgdm9jYWJ1bGFyeSBzdWJzY3JpYmVycyBzZWUgb25cbiAqIGBjdHgud3JpdGVyYDogdGhlIHdpcmUtZGVyaXZlZCB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9IHVuaW9uXG4gKiAqKnBsdXMqKiBNYXN0cmEtb25seSBldmVudHMgZnJvbSB7QGxpbmsgR2VuaWVBZ2VudEV2ZW50fS4gRWFjaFxuICogdmFyaWFudCBpcyBhIGZsYXQgYHt0eXBlLCAuLi5maWVsZHN9YCBvYmplY3Q7IGNvbnN1bWVycyBuYXJyb3dcbiAqIG9uIGB0eXBlYCBhbmQgcmVhZCBmaWVsZHMgaW5saW5lIC0gdGhlcmUgaXMgbm8gcGF5bG9hZCB3cmFwcGVyXG4gKiBhbmQgbm8gd3JpdGVyLWJvdW5kYXJ5IHRyYW5zbGF0b3IuXG4gKlxuICogQ29tcG9zZWQgdmlhIGB6LnVuaW9uYCAobm90IGB6LmRpc2NyaW1pbmF0ZWRVbmlvbmApIGJlY2F1c2VcbiAqIGJvdGggaGFsdmVzIGFyZSB0aGVtc2VsdmVzIGRpc2NyaW1pbmF0ZWQgdW5pb25zIG9uIHRoZSBzYW1lXG4gKiBgdHlwZWAga2V5LlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVXcml0ZXJFdmVudFNjaGVtYSA9IHoudW5pb24oW1xuICBnZW5pZU1vZGVsLkdlbmllQ2hhdEV2ZW50U2NoZW1hLFxuICBHZW5pZUFnZW50RXZlbnRTY2hlbWEsXG5dKTtcbi8qKiBDb21wbGV0ZSBldmVudCB2b2NhYnVsYXJ5IHdyaXR0ZW4gYnkgdGhlIE1hc3RyYSBHZW5pZSBpbnRlZ3JhdGlvbi4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVdyaXRlckV2ZW50U2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllV3JpdGVyRXZlbnR9LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVXcml0ZXJFdmVudFR5cGUgPSBHZW5pZVdyaXRlckV2ZW50W1widHlwZVwiXTtcblxuLyoqIE5hdGl2ZSBBSSBTREsgY3VzdG9tIGRhdGEtcGFydCB0eXBlIGNhcnJ5aW5nIG9uZSBHZW5pZSBwcm9ncmVzcyBldmVudC4gKi9cbmV4cG9ydCBjb25zdCBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEUgPSBcImRhdGEtZ2VuaWUtcHJvZ3Jlc3NcIiBhcyBjb25zdDtcblxuLyoqXG4gKiBEYXRhIGF0dGFjaGVkIHRvIHtAbGluayBHRU5JRV9QUk9HUkVTU19QQVJUX1RZUEV9LiBgdG9vbENhbGxJZGAgYXNzb2NpYXRlc1xuICogcHJvZ3Jlc3Mgd2l0aCB0aGUgbmF0aXZlIHRvb2wgcGFydCB0aGF0IG93bnMgdGhlIHJlcXVlc3QgYW5kIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKSxcbiAgZXZlbnQ6IEdlbmllV3JpdGVyRXZlbnRTY2hlbWEsXG59KTtcbi8qKiBWYWxpZGF0ZWQgcGF5bG9hZCBjYXJyaWVkIGJ5IGEgbmF0aXZlIEdlbmllIHByb2dyZXNzIGRhdGEgcGFydC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YSA9IHouaW5mZXI8dHlwZW9mIEdlbmllUHJvZ3Jlc3NQYXJ0RGF0YVNjaGVtYT47XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VtbWFyeSArIGRhdGFzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogVGFidWxhciBwYXlsb2FkIGVtYmVkZGVkIGluIGV2ZXJ5IHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfVxuICogYHZpc3VhbGl6ZWAgZGF0YXNldC4gQWx3YXlzIHByZXNlbnQ6IGh5ZHJhdGVkIGJ5IHRoZSB3b3JrZmxvdydzXG4gKiBhZ2VudCBzdGVwIGJlZm9yZSB0aGUgZmluYWxpemUgc3RlcCBydW5zLCBzbyBjb25zdW1lcnMgY2FuIHJlbmRlclxuICogYSB0YWJsZSBmYWxsYmFjayByZWdhcmRsZXNzIG9mIGNoYXJ0LXBsYW5uZXIgb3V0Y29tZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGlzcGxheSBvcmRlci5cbiAqICAgLSBgcm93c2A6IHRhYnVsYXIgcm93cyBrZXllZCBieSBjb2x1bW4gbmFtZS5cbiAqICAgLSBgcm93Q291bnRgOiB0b3RhbCByb3cgY291bnQgR2VuaWUgcmVwb3J0ZWQgKG1heSBleGNlZWRcbiAqICAgICBgcm93cy5sZW5ndGhgIHdoZW4gdGhlIHN0YXRlbWVudCB3YXMgdHJ1bmNhdGVkKS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbHVtbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIHJvd3M6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpKSxcbiAgcm93Q291bnQ6IHoubnVtYmVyKCksXG59KTtcbi8qKiBIeWRyYXRlZCB0YWJ1bGFyIGRhdGEgdGhhdCBhbHdheXMgYmFja3MgYSBHZW5pZSB2aXN1YWxpemF0aW9uIGl0ZW0uICovXG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXREYXRhID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0RGF0YVNjaGVtYT47XG5cbi8qKlxuICogU2xpbSBjaGFydCByZWZlcmVuY2UgYXR0YWNoZWQgdG8gYSB2aXN1YWxpemUgZGF0YXNldC4gT25seVxuICogcHJlc2VudCB3aGVuIHBsYW5uaW5nIHN1Y2NlZWRlZC5cbiAqXG4gKiBgb3B0aW9uYCBpcyBpbnRlbnRpb25hbGx5IE5PVCBpbmNsdWRlZC4gVGhlIHJlc29sdmVkIEVjaGFydHNcbiAqIHNwZWMgbGl2ZXMgb2ZmLWJhbmQgaW4gdGhlIGNoYXJ0IGNhY2hlOiB0aGUgaG9zdCBVSSBmZXRjaGVzIGl0XG4gKiBieSBgY2hhcnRJZGAgZnJvbSB0aGUgcGx1Z2luJ3MgZW1iZWQgcm91dGUgKGRlcml2ZWQgZnJvbVxuICogYGJhc2VQYXRoYCArIHtAbGluayBNQVNUUkFfUk9VVEVTfS5lbWJlZCwgaS5lLiBgL2VtYmVkL2NoYXJ0LzppZGA7XG4gKiBzZWUge0BsaW5rIENoYXJ0fSkuIEVtYmVkZGluZyB0aGUgZnVsbCBzcGVjIGlubGluZSB3b3VsZFxuICogaW5mbGF0ZSBldmVyeSBkYXRhc2V0IGJ5IHNldmVyYWwgS0IgcGVyIGNoYXJ0IGFuZCByb3VuZC10cmlwXG4gKiB0aHJvdWdoIHRoZSBMTE0gY29udGV4dCBmb3IgemVybyBiZW5lZml0ICh0aGUgbW9kZWwgb25seSBuZWVkc1xuICogdGhlIGBjaGFydElkYCB0byBwbGFjZSBhIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgbWFya2VyIGluIGl0c1xuICogcmVwbHkpLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHouc3RyaW5nKCksXG4gIGNoYXJ0VHlwZTogQ2hhcnRUeXBlU2NoZW1hLFxufSk7XG4vKiogTGlnaHR3ZWlnaHQgcmVmZXJlbmNlIHRvIGEgY2hhcnQgcGxhbiBzdG9yZWQgaW4gdGhlIE1hc3RyYSBjaGFydCBjYWNoZS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldENoYXJ0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0Q2hhcnRTY2hlbWE+O1xuXG4vKipcbiAqIERhdGFzZXQgYnVuZGxlIGF0dGFjaGVkIHRvIGEge0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19IGB2aXN1YWxpemVgXG4gKiBpdGVtLiBgZGF0YWAgaXMgYWx3YXlzIHBvcHVsYXRlZDsgYGNoYXJ0YCBpcyBiZXN0LWVmZm9ydCBhbmRcbiAqIGFic2VudCB3aGVuIHRoZSB3b3JrZmxvdydzIGNoYXJ0LXBsYW5uZXIgZmFpbGVkICh0aW1lb3V0LFxuICogbWFsZm9ybWVkIHBsYW4sIGFib3J0KSBzbyB0aGUgaG9zdCBVSSBjYW4gc3RpbGwgcmVuZGVyIHRoZVxuICogdW5kZXJseWluZyB0YWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgZGF0YTogR2VuaWVEYXRhc2V0RGF0YVNjaGVtYSxcbiAgY2hhcnQ6IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hLm9wdGlvbmFsKCksXG59KTtcbi8qKiBWaXN1YWxpemF0aW9uIGRhdGFzZXQgd2l0aCByZXF1aXJlZCB0YWJsZSBkYXRhIGFuZCBhbiBvcHRpb25hbCBwbGFubmVkIGNoYXJ0LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVEYXRhc2V0U2NoZW1hPjtcblxuLyoqXG4gKiBPbmUgaXRlbSBpbnNpZGUgdGhlIEdlbmllIHdvcmtmbG93J3MgZmluYWwgc3VtbWFyeS4gVGhlXG4gKiB3b3JrZmxvdyBwcm9kdWNlcyBhIG1peGVkIHNlcXVlbmNlIG9mOlxuICpcbiAqICAgLSBgc3RyaW5nYDogYSBtYXJrZG93biBwYXJhZ3JhcGggKGludGVycHJldGF0aW9uLCBjYWxsb3V0cyxcbiAqICAgICB0cmFuc2l0aW9ucyBiZXR3ZWVuIGRhdGEgYmxvY2tzKS5cbiAqICAgLSBgdmlzdWFsaXplYDogYSByZXF1ZXN0IGZyb20gdGhlIGFnZW50IHN0ZXAgdG8gdmlzdWFsaXplIGFcbiAqICAgICBzcGVjaWZpYyBHZW5pZSBzdGF0ZW1lbnQgYXQgdGhpcyBwb3NpdGlvbiBpbiB0aGUgcHJvc2UuXG4gKiAgICAgVGhlIGZpbmFsaXplIHN0ZXAgaHlkcmF0ZXMgYGRhdGFzZXQuZGF0YWAgKHJvd3MgZnJvbSB0aGVcbiAqICAgICBtYXRjaGluZyBgc3RhdGVtZW50SWRgKSBhbmQgYXR0YWNoZXMgYGRhdGFzZXQuY2hhcnRgIGFmdGVyXG4gKiAgICAgcnVubmluZyB0aGUgY2hhcnQtcGxhbm5lci4gVGhlIGFnZW50IE5FVkVSIHBpY2tzIHRoZSBjaGFydFxuICogICAgIHR5cGUgLSBpdCBvbmx5IG1hcmtzIHdoZXJlIGEgdmlzdWFsaXphdGlvbiBiZWxvbmdzLlxuICpcbiAqIFRoZSBob3N0IFVJIHdhbGtzIHRoZSBhcnJheSBpbiBkaXNwbGF5IG9yZGVyIHRvIGNvbXBvc2UgdGhlXG4gKiBmaW5hbCBhc3Npc3RhbnQgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwic3RyaW5nXCIpLFxuICAgIHRleHQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidmlzdWFsaXplXCIpLFxuICAgIHN0YXRlbWVudElkOiB6LnN0cmluZygpLFxuICAgIHRpdGxlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhc2V0OiBHZW5pZURhdGFzZXRTY2hlbWEsXG4gIH0pLFxuXSk7XG4vKiogT3JkZXJlZCBwcm9zZSBvciB2aXN1YWxpemF0aW9uIGl0ZW0gaW4gdGhlIEdlbmllIGFnZW50J3MgZmluYWwgc3VtbWFyeS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW0gPSB6LmluZmVyPHR5cGVvZiBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hPjtcblxuLyoqIERpc2NyaW1pbmF0b3IgdHlwZSBmb3Ige0BsaW5rIEdlbmllU3VtbWFyeUl0ZW19LiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVTdW1tYXJ5SXRlbVR5cGUgPSBHZW5pZVN1bW1hcnlJdGVtW1widHlwZVwiXTtcblxuLyoqXG4gKiBUaGUgR2VuaWUgYWdlbnQncyBmaW5hbCBvdXRwdXQgc2hhcGUgLSB3aGF0IHRoZSBjYWxsaW5nIGFnZW50J3NcbiAqIEdlbmllIHRvb2wgcmV0dXJucyB0byB0aGUgY2FsbGluZyBMTE0uIFRoZSBgc3VtbWFyeWAgYXJyYXkgaXNcbiAqIHRoZSB1c2VyLWZhY2luZyByZW5kZXJhYmxlOyBgY29udmVyc2F0aW9uSWRgIGxldHMgdGhlIGNhbGxpbmdcbiAqIGFnZW50IChvciB0aGUgVUkpIGZvbGxvdyB1cCBpbiB0aGUgc2FtZSBHZW5pZSB0aHJlYWQgb24gdGhlXG4gKiBuZXh0IHR1cm4uXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZUFnZW50UmVzdWx0U2NoZW1hID0gei5vYmplY3Qoe1xuICBzcGFjZUlkOiB6LnN0cmluZygpLFxuICBjb252ZXJzYXRpb25JZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzdW1tYXJ5OiB6LmFycmF5KEdlbmllU3VtbWFyeUl0ZW1TY2hlbWEpLFxuICBlcnJvcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxufSk7XG4vKiogRmluYWwgcmVuZGVyYWJsZSBvdXRwdXQgcmV0dXJuZWQgYnkgdGhlIEdlbmllIGFnZW50IHRvb2wgdG8gaXRzIGNhbGxlci4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBHZW5pZUFnZW50UmVzdWx0U2NoZW1hPjtcbiJdfQ==
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBMkMsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4Qiw2RUFBNkU7QUFFN0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDL0MsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7SUFDeEIsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzNCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztDQUNoRCxDQUFDLENBQUM7QUFJSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNqRCxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtJQUNuQixLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNuQyxDQUFDLENBQUM7QUFJSCwrRUFBK0U7QUFFL0U7Ozs7OztHQU1H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RSxDQUFDLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO0lBQ3hDLEtBQUssRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV2lyZS1mb3JtYXQgY29udHJhY3QgZm9yIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgOiB0aGVcbiAqIGRlcGVuZGVuY3ktZnJlZSB6b2Qgc2NoZW1hcyArIGluZmVycmVkIHR5cGVzIGV2ZXJ5IGNvbnN1bWVyICh0aGVcbiAqIFJlYWN0IGNsaWVudCwgYnJvd3NlciBidW5kbGVzLCB0aGUgc2VydmVyIHBsdWdpbikgc2hhcmVzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBgcGdgLCBgZmFzdGVtYmVkYCwgYW5kIHRoZSBNYXN0cmEgcnVudGltZSBzbyB0aGVcbiAqIGNsaWVudCBjYW4gaW1wb3J0IHRoZXNlIHNjaGVtYXMgd2l0aG91dCBkcmFnZ2luZyBpbiBzZXJ2ZXItb25seVxuICogZGVwZW5kZW5jaWVzLiBUaHJlZSBsYXllcnMgbGl2ZSBoZXJlOlxuICpcbiAqICAgMS4gVGhlIGRlc2NyaXB0b3IgcHVibGlzaGVkIGJ5IGBNYXN0cmFQbHVnaW4uY2xpZW50Q29uZmlnKClgXG4gKiAgICAgIHBsdXMgdGhlIFJFU1QgcGF5bG9hZHMgaXRzIHJvdXRlcyByZXR1cm4gKG1vZGVscywgaGlzdG9yeSxcbiAqICAgICAgc3VnZ2VzdGlvbnMsIGNoYXJ0IGVtYmVkcywgc3RhdGVtZW50IGRhdGEpLiBUaGUgc2VydmVyXG4gKiAgICAgIGRlcml2ZXMgZXZlcnkgcGF0aCBmcm9tIHRoZSBwbHVnaW4gbW91bnQgYW5kIHB1Ymxpc2hlcyB0aGVcbiAqICAgICAgcmVzb2x2ZWQgcGF0aHMgc28gdGhlIGNsaWVudCBjb21wb3NlcyBVUkxzIHdpdGhvdXRcbiAqICAgICAgaGFyZC1jb2RpbmcgYC9hcGkvbWFzdHJhYCAtIHJlbmFtZSB0aGUgcGx1Z2luIGFuZCB0aGUgY2xpZW50XG4gKiAgICAgIGtlZXBzIHdvcmtpbmcuXG4gKiAgIDIuIFRoZSBgY3R4LndyaXRlcmAgZXZlbnQgdm9jYWJ1bGFyeTogdGhlIHdpcmUtZGVyaXZlZFxuICogICAgICB7QGxpbmsgR2VuaWVDaGF0RXZlbnR9cyBmcm9tIGBAZGJ4LXRvb2xzL2dlbmllLXNoYXJlZGAgcGx1c1xuICogICAgICB0aGUgTWFzdHJhLW9ubHkgYWdlbnQgbGlmZWN5Y2xlIGV2ZW50cywgdW5pZmllZCBhc1xuICogICAgICB7QGxpbmsgR2VuaWVXcml0ZXJFdmVudH0gc28gc3Vic2NyaWJlcnMgbmFycm93IGJvdGggaGFsdmVzXG4gKiAgICAgIHdpdGggYSBzaW5nbGUgYHN3aXRjaCAoZXZlbnQudHlwZSlgLlxuICogICAzLiBUaGUgR2VuaWUgYWdlbnQncyB3b3JrZmxvdyBvdXRwdXQgc2hhcGVzXG4gKiAgICAgICh7QGxpbmsgR2VuaWVBZ2VudFJlc3VsdH0gYW5kIGl0cyBzdW1tYXJ5IC8gZGF0YXNldCBpdGVtcykuXG4gKlxuICogVGhlIHJvdXRlIHNlZ21lbnRzIGxpdmUgaW4gdGhlIHNpYmxpbmcgYHJvdXRlcy50c2BcbiAqICh7QGxpbmsgTUFTVFJBX1JPVVRFU30pIGFuZCB0aGUgZW1iZWQtbWFya2VyIGdyYW1tYXIgaW4gYG1hcmtlcnMudHNgLFxuICogc28gdGhpcyBmaWxlIHN0YXlzIHB1cmVseSBkZWNsYXJhdGl2ZSAoc2NoZW1hcyArIGluZmVycmVkIHR5cGVzKS5cbiAqIFRoZSBicm93c2VyIGNsaWVudCB0aGF0IGRyaXZlcyB0aGVzZSByb3V0ZXMgKGBNYXN0cmFQbHVnaW5DbGllbnRgKVxuICogc2hpcHMgZnJvbSBgQGRieC10b29scy91aS1tYXN0cmFgLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZW5pZU1vZGVsLCB0eXBlIEdlbmllQ2hhdEV2ZW50LCB0eXBlIE1lc3NhZ2VTdGF0dXMgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtZ2VuaWVcIjtcbmltcG9ydCB7IG1vZGVsIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLW1vZGVsXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsaWVudCBjb25maWcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIEpTT04tc2FmZSBkZXNjcmlwdG9yIHB1Ymxpc2hlZCBieSB0aGUgTWFzdHJhIHBsdWdpbidzXG4gKiBgY2xpZW50Q29uZmlnKClgLlxuICpcbiAqIE9ubHkgdGhlIGlycmVkdWNpYmxlIGRhdGEgbGl2ZXMgaGVyZTogYGJhc2VQYXRoYCAodGhlIG9uZSBwYXRoIHRoZVxuICogY2xpZW50IGNhbid0IG90aGVyd2lzZSBrbm93LCBzaW5jZSBpdCBlbmNvZGVzIHRoZSBwbHVnaW4ncyBtb3VudFxuICogbmFtZSkgcGx1cyB0aGUgcnVudGltZSBhZ2VudCByb3N0ZXIuIEV2ZXJ5IGNvbmNyZXRlIGVuZHBvaW50IFVSTCBpc1xuICogZGVyaXZlZCBmcm9tIGBiYXNlUGF0aGAgYnkgdGhlIGJyb3dzZXIgY2xpZW50XG4gKiAoYE1hc3RyYVBsdWdpbkNsaWVudGApIHVzaW5nIHRoZSBzaGFyZWQge0BsaW5rIE1BU1RSQV9ST1VURVN9XG4gKiBzZWdtZW50cywgc28gdGhlcmUncyBub3RoaW5nIHRvIHB1Ymxpc2ggcGVyLXJvdXRlLlxuICpcbiAqIEZpZWxkczpcbiAqICAgLSBgYmFzZVBhdGhgOiBwbHVnaW4gbW91bnQgcGF0aC4gQWx3YXlzIGAvYXBpLzxwbHVnaW5OYW1lPmAuIEZlZWRcbiAqICAgICBpdCB0byBgbmV3IE1hc3RyYVBsdWdpbkNsaWVudChjb25maWcpYCAoZnJvbVxuICogICAgIGBAZGJ4LXRvb2xzL3VpLW1hc3RyYWApIHRvIGdldCBhIHR5cGVkIGNsaWVudCBvdmVyIGV2ZXJ5XG4gKiAgICAgcm91dGUgcGx1cyB0aGUgc3RhbmRhcmQgYWdlbnQgc3RyZWFtLlxuICogICAtIGBkZWZhdWx0QWdlbnRgOiBhZ2VudCBpZCB0aGUgY2xpZW50IGNvbnZlcnNlcyB3aXRoIHdoZW4gaXRcbiAqICAgICBkb2Vzbid0IG5hbWUgb25lLlxuICogICAtIGBhZ2VudHNgOiBldmVyeSByZWdpc3RlcmVkIGFnZW50IGlkIGluIHJlZ2lzdHJhdGlvbiBvcmRlci5cbiAqICAgLSBgZmVlZGJhY2tFbmFibGVkYDogd2hldGhlciB0aGUgc2VydmVyIGNhbiBsb2cgdXNlciBmZWVkYmFjayB0b1xuICogICAgIE1MZmxvdyAoTUxmbG93IHRyYWNpbmcgaXMgY29uZmlndXJlZCkuIERyaXZlcyB3aGV0aGVyIHRoZSBjaGF0IFVJXG4gKiAgICAgc3VyZmFjZXMgdGh1bWJzIC8gY29tbWVudCBjb250cm9scy4gRGVmYXVsdHMgdG8gYGZhbHNlYCBzbyBhXG4gKiAgICAgY29uZmlnIHB1Ymxpc2hlZCBieSBhbiBvbGRlciBzZXJ2ZXIgKHdpdGhvdXQgdGhlIGZpZWxkKSBwYXJzZXNcbiAqICAgICBjbGVhbmx5IHRvIFwib2ZmXCIuXG4gKiAgIC0gYGNoYXRBbHdheXNBdmFpbGFibGVgOiB3aGV0aGVyIHRoZSBhZ2VudHMnIERhdGFicmlja3MgY2FsbHMgcnVuIGFzIHRoZVxuICogICAgIGFwcCBzZXJ2aWNlIHByaW5jaXBhbCByYXRoZXIgdGhhbiBvbi1iZWhhbGYtb2YgdGhlIHNpZ25lZC1pbiB1c2VyLiBXaGVuXG4gKiAgICAgYHRydWVgIHRoZSBjaGF0IHdvcmtzIGZvciBhbnkgY2FsbGVyIHdobyBjYW4gb3BlbiB0aGUgYXBwLCBzbyBhIFVJIHRoYXRcbiAqICAgICBoaWRlcyBjaGF0IHdoZW4gdGhlIE9CTyB0b2tlbiBpcyBhYnNlbnQgc2hvdWxkIHNob3cgaXQgYW55d2F5LiBEZWZhdWx0c1xuICogICAgIHRvIGBmYWxzZWAgKHRoZSBPQk8gLyBgXCJ1c2VyXCJgIGlkZW50aXR5IG1vZGUpLCBzbyBhbiBvbGRlciBzZXJ2ZXIgd2l0aG91dFxuICogICAgIHRoZSBmaWVsZCBrZWVwcyB0aGUgT0JPLWdhdGVkIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY29uc3QgTWFzdHJhQ2xpZW50Q29uZmlnU2NoZW1hID0gei5vYmplY3Qoe1xuICBiYXNlUGF0aDogei5zdHJpbmcoKSxcbiAgZGVmYXVsdEFnZW50OiB6LnN0cmluZygpLFxuICBhZ2VudHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGZlZWRiYWNrRW5hYmxlZDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gIGNoYXRBbHdheXNBdmFpbGFibGU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxufSk7XG4vKiogQnJvd3Nlci1zYWZlIE1hc3RyYSBwbHVnaW4gZGVzY3JpcHRvciB1c2VkIHRvIGNvbnN0cnVjdCByb3V0ZSBhbmQgc3RyZWFtIGNsaWVudHMuICovXG5leHBvcnQgdHlwZSBNYXN0cmFDbGllbnRDb25maWcgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFDbGllbnRDb25maWdTY2hlbWE+O1xuXG4vKipcbiAqIEpTT04gcGF5bG9hZCByZXR1cm5lZCBieSBgR0VUICR7YmFzZVBhdGh9L2RlZmF1bHQtbW9kZWxbP2FnZW50SWQ9XWAuIFRoZVxuICogc3RhdGljIGRlZmF1bHQgbW9kZWwgdGhlIGFnZW50IHJlc29sdmVzIHRvIHdoZW4gdGhlIGNsaWVudCBwaW5zIG5vIG1vZGVsLFxuICogYXMgYm90aCB0aGUgcmF3IHNlcnZpbmctZW5kcG9pbnQgYG1vZGVsYCBpZCBhbmQgYSBgZGlzcGxheU5hbWVgICh0aGVcbiAqIGh1bWFuaXplZCBsYWJlbCB0aGUgcGlja2VyIHNob3dzKS4gQm90aCBhcmUgYG51bGxgIHdoZW4gdGhlIGFnZW50IGRlY2lkZXNcbiAqIGl0cyBtb2RlbCBkeW5hbWljYWxseSBhdCBjYWxsIHRpbWUgKG5vdGhpbmcgc3RhdGljIHRvIGFkdmVydGlzZSkuIExldHMgdGhlXG4gKiBwaWNrZXIgbGFiZWwgaXRzIGRlZmF1bHQgb3B0aW9uIFdJVEhPVVQgd2FpdGluZyBvbiB0aGUgYC9tb2RlbHNgIGNhdGFsb2d1ZSxcbiAqIHNvIGl0IG5ldmVyIGZsYXNoZXMgYSByYXcgaWQgb24gbG9hZC4gS2VwdCBvZmYgdGhlIHN0YXRpYyBib290c3RyYXBcbiAqIGBjbGllbnRDb25maWdgIG9uIHB1cnBvc2U6IGl0IGlzIHBlci1hZ2VudCBhbmQgY2FuIGJlIGR5bmFtaWMsIHNvIGl0IGlzXG4gKiBmZXRjaGVkIGxpa2UgYC9tb2RlbHNgLlxuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdE1vZGVsUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGFnZW50SWQ6IHouc3RyaW5nKCksXG4gIG1vZGVsOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIGRpc3BsYXlOYW1lOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbi8qKiBSZXNwb25zZSBpZGVudGlmeWluZyB0aGUgbW9kZWwgY3VycmVudGx5IHNlbGVjdGVkIGFzIHRoZSBwbHVnaW4gZGVmYXVsdC4gKi9cbmV4cG9ydCB0eXBlIERlZmF1bHRNb2RlbFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgRGVmYXVsdE1vZGVsUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1vZGVsIGNhdGFsb2d1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vbW9kZWxzYC4gV3JhcHMgdGhlIHNoYXJlZFxuICoge0BsaW5rIG1vZGVsLlNlcnZpbmdFbmRwb2ludFN1bW1hcnlTY2hlbWF9IChyZS1leHBvcnRlZCBmcm9tXG4gKiBgQGRieC10b29scy9zaGFyZWQtbW9kZWxgKSBzbyB0aGUgY2F0YWxvZ3VlXG4gKiBkZXNjcmlwdG9yIGhhcyBhIHNpbmdsZSBkZWZpbml0aW9uIHRoZSBjbGllbnQsIHNlcnZlciwgYW5kIHRoZVxuICogc3RhbmRhbG9uZSBgQGRieC10b29scy9tb2RlbGAgdG9vbGtpdCBhbGwgYWdyZWUgb24uXG4gKi9cbmV4cG9ydCBjb25zdCBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGVuZHBvaW50czogei5hcnJheShtb2RlbC5TZXJ2aW5nRW5kcG9pbnRTdW1tYXJ5U2NoZW1hKSxcbn0pO1xuLyoqIEF2YWlsYWJsZSBEYXRhYnJpY2tzIHNlcnZpbmcgZW5kcG9pbnRzIHJldHVybmVkIGJ5IHRoZSBNYXN0cmEgbW9kZWwgcm91dGUuICovXG5leHBvcnQgdHlwZSBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aW5nRW5kcG9pbnRzUmVzcG9uc2VTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3VnZ2VzdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxuICogSlNPTiBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vc3VnZ2VzdGlvbnNgLlxuICpcbiAqIENhcnJpZXMgdGhlIGN1cmF0ZWQgc3RhcnRlciBxdWVzdGlvbnMgZm9yIGFuIGFnZW50J3MgR2VuaWUgc3BhY2UgLVxuICogdGhlIGBzYW1wbGVfcXVlc3Rpb25zYCBhbiBhdXRob3IgY29uZmlndXJlZCBvbiB0aGUgc3BhY2UsIHN1cmZhY2VkXG4gKiBhcyBvbmUtdGFwIHByb21wdHMgb24gdGhlIGNoYXQncyBlbXB0eSBzdGF0ZS4gYHF1ZXN0aW9uc2AgaXMgZW1wdHlcbiAqIHdoZW4gdGhlIGFnZW50IGhhcyBubyBHZW5pZSBzcGFjZSAob3IgdGhlIHNwYWNlIGRlZmluZXMgbm9uZSksIHNvXG4gKiB0aGUgY2xpZW50IHJlbmRlcnMgbm90aGluZyBpbiB0aGF0IGNhc2UgcmF0aGVyIHRoYW4gZmFsbGluZyBiYWNrIHRvXG4gKiBidWlsdC1pbiBleGFtcGxlIHByb21wdHMuXG4gKi9cbmV4cG9ydCBjb25zdCBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hID0gei5vYmplY3Qoe1xuICBxdWVzdGlvbnM6IHouYXJyYXkoei5zdHJpbmcoKSksXG59KTtcbi8qKiBGb2xsb3ctdXAgcHJvbXB0cyBzdWdnZXN0ZWQgZm9yIHRoZSBjdXJyZW50IGFnZW50IGFuZCB0aHJlYWQgY29udGV4dC4gKi9cbmV4cG9ydCB0eXBlIE1hc3RyYVN1Z2dlc3Rpb25zUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBNYXN0cmFTdWdnZXN0aW9uc1Jlc3BvbnNlU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNoYXJ0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBBbGxvd2VkIGNoYXJ0IHR5cGVzIHRoZSBwbGFubmVyIGNhbiBwaWNrLiBEZWZpbmVkIGFzIGFcbiAqIGRpc2NyaW1pbmF0ZWQgbGl0ZXJhbCB1bmlvbiBzbyBlYWNoIHZhcmlhbnQgY2FycmllcyBpdHMgb3duXG4gKiBgLmRlc2NyaWJlKClgIGNsYXVzZSAtIHRoZSBzZXJ2ZXItc2lkZSBwbGFubmVyJ3MgcHJvbXB0XG4gKiBmb3JtYXR0ZXIgd2Fsa3MgYC5vcHRpb25zYCB0byBpbmxpbmUgdGhlIGRlc2NyaXB0aW9ucyBpbnRvIHRoZVxuICogbW9kZWwgaW5zdHJ1Y3Rpb25zLCBrZWVwaW5nIHRoZSBwcm9tcHQgaW4gbG9jay1zdGVwIHdpdGggdGhlXG4gKiBzY2hlbWEgYnkgY29uc3RydWN0aW9uLiBUaGUgcnVudGltZSB0eXBlIGlzIHRoZSBwbGFpbiBzdHJpbmdcbiAqIHVuaW9uIChgXCJiYXJcIiB8IFwibGluZVwiIHwgLi4uYCksIHNvIGNvbnN1bWVycyB0aGF0IGp1c3QgbmVlZCBhXG4gKiBkaXNjcmltaW5hdG9yIHZhbHVlIGJlaGF2ZSB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIGFcbiAqIGB6LmVudW0oWy4uLl0pYC5cbiAqL1xuZXhwb3J0IGNvbnN0IENoYXJ0VHlwZVNjaGVtYSA9IHpcbiAgLnVuaW9uKFtcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcImNvbXBhcmluZyBhIG51bWVyaWMgdmFsdWUgYWNyb3NzIGEgc21hbGwvbWVkaXVtIHNldCBvZiBkaXNjcmV0ZSBjYXRlZ29yaWVzICh0b3AtTiwgcmFua2luZywgZ3JvdXAtYnkpXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiaG9yaXpvbnRhbEJhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcInNhbWUgYXMgYmFyIGJ1dCBjYXRlZ29yaWVzIG9uIHRoZSB5LWF4aXMgLSBwcmVmZXIgd2hlbiBjYXRlZ29yeSBsYWJlbHMgYXJlIGxvbmcgb3IgdGhlcmUgYXJlIG1hbnkgY2F0ZWdvcmllc1wiLFxuICAgICAgKSxcbiAgICB6XG4gICAgICAubGl0ZXJhbChcImxpbmVcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJvcmRlcmVkLWF4aXMgdHJlbmQgKHRpbWUgc2VyaWVzLCBzZXF1ZW5jZSwgcmFuaykgd2hlcmUgdGhlIHgtYXhpcyBoYXMgbmF0dXJhbCBvcmRlclwiLFxuICAgICAgKSxcbiAgICB6LmxpdGVyYWwoXCJhcmVhXCIpLmRlc2NyaWJlKFwic3RhY2tlZC10cmVuZCBlbXBoYXNpcyAtIGN1bXVsYXRpdmUgb3IgY29tcG9zaXRpb24gb3ZlciB0aW1lXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiY29tYm9cIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJtaXhlZCBiYXIgKyBsaW5lIChvciBhcmVhKSBzZXJpZXMgb24gc2hhcmVkIGNhdGVnb3JpZXMgLSBlLmcuIHZvbHVtZSBiYXJzIHdpdGggYSByYXRlL3RyZW5kIGxpbmU7IHNldCBlYWNoIHNlcmllcycgYHR5cGVgXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwid2F0ZXJmYWxsXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiYnJpZGdlIC8gcnVubmluZy10b3RhbCBvZiBzaWduZWQgc3RlcCB2YWx1ZXMgKHN0YXJ0IC0+IGRlbHRhcyAtPiBlbmQpIGFjcm9zcyBvcmRlcmVkIGNhdGVnb3JpZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJzY2F0dGVyXCIpXG4gICAgICAuZGVzY3JpYmUoXCJ0d28tbnVtZXJpYy1heGlzIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGZpZWxkcyAoZS5nLiBwcmljZSB2cy4gcXVhbnRpdHkpXCIpLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiaGVhdG1hcFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm1hdHJpeCBpbnRlbnNpdHkgYWNyb3NzIHR3byBjYXRlZ29yeSBheGVzIC0geCBsYWJlbHMgaW4gYGNhdGVnb3JpZXNgLCBvbmUgc2VyaWVzIHBlciBtYXRyaXggcm93IGhvbGRpbmcgdGhhdCByb3cncyB2YWx1ZXNcIixcbiAgICAgICksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJyYWRhclwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcIm11bHRpLWRpbWVuc2lvbiBjb21wYXJpc29uIGFjcm9zcyBhIGZpeGVkIHNldCBvZiBheGVzIChvbmUgaW5kaWNhdG9yIHBlciBjYXRlZ29yeSwgb25lIG9yIG1vcmUgc2VyaWVzIG9mIHZhbHVlcylcIixcbiAgICAgICksXG4gICAgei5saXRlcmFsKFwicGllXCIpLmRlc2NyaWJlKFwicGFydHMtb2YtYS13aG9sZSB3aGVuIDItNyBjYXRlZ29yaWVzIHN1bSB0byBhIG1lYW5pbmdmdWwgdG90YWxcIiksXG4gICAgelxuICAgICAgLmxpdGVyYWwoXCJmdW5uZWxcIilcbiAgICAgIC5kZXNjcmliZShcbiAgICAgICAgXCJvcmRlcmVkIHN0YWdlcyB0aGF0IHNocmluayAoY29udmVyc2lvbiwgcGlwZWxpbmUsIGF0dHJpdGlvbikgLSBge25hbWUsIHZhbHVlfWAgc2xpY2VzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwidHJlZW1hcFwiKVxuICAgICAgLmRlc2NyaWJlKFxuICAgICAgICBcInBhcnRzLW9mLWEtd2hvbGUgYXMgbmVzdGVkIHJlY3RhbmdsZXMgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIH43IGNhdGVnb3JpZXMgb3IgYSBmbGF0IGhpZXJhcmNoeSBvZiBge25hbWUsIHZhbHVlfWAgc2xpY2VzXCIsXG4gICAgICApLFxuICAgIHpcbiAgICAgIC5saXRlcmFsKFwiY3VzdG9tXCIpXG4gICAgICAuZGVzY3JpYmUoXG4gICAgICAgIFwiZXNjYXBlIGhhdGNoIGZvciBhIGNoYXJ0IG5vbmUgb2YgdGhlIGFib3ZlIGNhbiBleHByZXNzIChzYW5rZXksIGJveHBsb3QsIGNhbmRsZXN0aWNrLCBzdW5idXJzdCwgZ2F1Z2UsIG5ldHdvcmsgZ3JhcGgsIGNhbGVuZGFyLCBwYXJhbGxlbCwgLi4uKSAtIGhhbmQtd3JpdGUgdGhlIGNvbXBsZXRlIEVjaGFydHMgb3B0aW9uIGluc3RlYWQgb2YgYSBwbGFuXCIsXG4gICAgICApLFxuICBdKVxuICAuZGVzY3JpYmUoXCJUaGUgY2hhcnQgc2hhcGUgdGhhdCBiZXN0IG1hdGNoZXMgdGhlIGRhdGEgYW5kIGludGVudC5cIik7XG4vKiogU3VwcG9ydGVkIGNoYXJ0IGZhbWlseSBzZWxlY3RlZCBieSB0aGUgc2VydmVyLXNpZGUgY2hhcnQgcGxhbm5lci4gKi9cbmV4cG9ydCB0eXBlIENoYXJ0VHlwZSA9IHouaW5mZXI8dHlwZW9mIENoYXJ0VHlwZVNjaGVtYT47XG5cbi8qKlxuICogUmVzb2x2ZWQgY2hhcnQgcGxhbiBhIHNldHRsZWQgY2hhcnQgZW50cnkgY2FycmllcyBvbiBpdHNcbiAqIGByZXN1bHRgIGZpZWxkLiBgb3B0aW9uYCBpcyB0aGUgZnVsbCBFY2hhcnRzIHNwZWM7IHBhc3NcbiAqIHN0cmFpZ2h0IGludG8gYDxSZWFjdEVDaGFydHMgb3B0aW9uPXsuLi59PmAuXG4gKi9cbmV4cG9ydCBjb25zdCBDaGFydFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY2hhcnRUeXBlOiBDaGFydFR5cGVTY2hlbWEsXG4gIG9wdGlvbjogelxuICAgIC5yZWNvcmQoei5zdHJpbmcoKSwgei51bmtub3duKCkpXG4gICAgLmRlc2NyaWJlKFxuICAgICAgXCJGdWxseS1yZXNvbHZlZCBFY2hhcnRzIGBFQ2hhcnRzT3B0aW9uYCBKU09OIGZvciB0aGlzIGNoYXJ0IC0gZHJvcCBkaXJlY3RseSBpbnRvIGFuIEVjaGFydHMgaW5zdGFuY2UgKG9yIGA8UmVhY3RFQ2hhcnRzIG9wdGlvbj17Li4ufSAvPmApIHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLiBJbmNsdWRlcyB0aXRsZSAvIHRvb2x0aXAgLyBsZWdlbmQgLyBncmlkIC8gYXhpcyAvIHNlcmllcyBkZWZhdWx0cyBhbHJlYWR5IG1lcmdlZCBpbi5cIixcbiAgICApLFxufSk7XG4vKiogUmVuZGVyLXJlYWR5IGNoYXJ0IHBsYW4gc3RvcmVkIGJlaGluZCBhIGNoYXJ0IGVtYmVkIGlkZW50aWZpZXIuICovXG5leHBvcnQgdHlwZSBDaGFydFJlc3VsdCA9IHouaW5mZXI8dHlwZW9mIENoYXJ0UmVzdWx0U2NoZW1hPjtcblxuLyoqXG4gKiBXaXJlLWZvcm1hdCBBTkQgc2VydmVyLXNpZGUgY2FjaGUgc2hhcGUgZm9yIGEgY2hhcnQgZW50cnkuXG4gKiBUaHJlZSBsaWZlY3ljbGUgc3RhdGVzIGluZmVycmVkIGZyb20gdGhlIHR3byBvcHRpb25hbCBmaWVsZHNcbiAqIChubyBkaXNjcmltaW5hdG9yIG5lZWRlZCk6XG4gKlxuICogICAtIGByZXN1bHRgIHNldCAgICAgICAgICAgICAgICAgICAgLT4gY2hhcnQgaXMgcmVhZHkgdG8gcmVuZGVyXG4gKiAgIC0gYGVycm9yYCBzZXQgICAgICAgICAgICAgICAgICAgICAtPiBwbGFubmVyIC8gZGF0YSBmZXRjaCBmYWlsZWRcbiAqICAgLSBib3RoIGByZXN1bHRgIGFuZCBgZXJyb3JgIHVuc2V0IC0+IHN0aWxsIHByb2Nlc3NpbmdcbiAqXG4gKiBgb3B0aW9uYCBpcyB0eXBlZCBhcyBhIGdlbmVyaWMgcmVjb3JkIHNvIHRoaXMgcGFja2FnZSBzdGF5c1xuICogZGVwZW5kZW5jeS1mcmVlIG9mIGBlY2hhcnRzYC4gVGhlIHNlcnZlciAoYGNoYXJ0LnRzYCkgaW1wb3J0c1xuICogdGhpcyBzY2hlbWEgZGlyZWN0bHk7IHRoZSBkZW1vIGNsaWVudCBwb2xscyB0aGVcbiAqIGAvZW1iZWQvY2hhcnQvOmlkYCByb3V0ZSBhbmQgcGFyc2VzIHJlc3BvbnNlcyBhZ2FpbnN0IGl0LlxuICovXG5leHBvcnQgY29uc3QgQ2hhcnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNoYXJ0SWQ6IHpcbiAgICAuc3RyaW5nKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIk9wYXF1ZSBpZCBtaW50ZWQgYnkgdGhlIGNoYXJ0IHN1YnN5c3RlbS4gRW1iZWQgdmVyYmF0aW0gYXMgYFtjaGFydDo8Y2hhcnRJZD5dYCBpbiBhZ2VudCBwcm9zZTsgdGhlIGhvc3QgVUkgcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGlzIGNhY2hlIGVudHJ5LlwiLFxuICAgICksXG4gIGVycm9yOiB6XG4gICAgLnN0cmluZygpXG4gICAgLm9wdGlvbmFsKClcbiAgICAuZGVzY3JpYmUoXG4gICAgICBcIkVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgY2hhcnQgZmFpbGVkIChkYXRhIGZldGNoIGVycm9yLCBwbGFubmVyIGVycm9yLCBlbXB0eSBkYXRhc2V0KS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYHJlc3VsdGA7IGFic2VudCBvbiBzdWNjZXNzIGFuZCB3aGlsZSBwcm9jZXNzaW5nLlwiLFxuICAgICksXG4gIHJlc3VsdDogQ2hhcnRSZXN1bHRTY2hlbWEub3B0aW9uYWwoKS5kZXNjcmliZShcbiAgICBcIlJlc29sdmVkIGNoYXJ0IHBsYW4uIEFic2VudCB3aGlsZSBwcm9jZXNzaW5nIGFuZCB3aGVuIHRoZSBydW4gZXJyb3JlZC5cIixcbiAgKSxcbn0pO1xuLyoqIFBvbGxhYmxlIGNoYXJ0LWNhY2hlIGVudHJ5IHJlcHJlc2VudGluZyBwZW5kaW5nLCBzdWNjZXNzZnVsLCBvciBmYWlsZWQgcGxhbm5pbmcuICovXG5leHBvcnQgdHlwZSBDaGFydCA9IHouaW5mZXI8dHlwZW9mIENoYXJ0U2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGF0ZW1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXG4gKiBXaXJlLWZvcm1hdCBwYXlsb2FkIHJldHVybmVkIGJ5IGBHRVQgJHtiYXNlUGF0aH0vZW1iZWQvZGF0YS86aWRgLlxuICpcbiAqIE1pcnJvcnMgdGhlIGFnZW50LXNpZGUgYGdldF9zdGF0ZW1lbnRgIHRvb2wncyBvdXRwdXQgc28gdGhlXG4gKiBob3N0IFVJIGFuZCB0aGUgTExNIHNlZSB0aGUgZXhhY3Qgc2FtZSBzaGFwZSBmb3IgdGhlIHNhbWVcbiAqIHN0YXRlbWVudDsgdGhlIHJvdXRlIGlzIHdoYXQgcmVzb2x2ZXMgYFtkYXRhOjxzdGF0ZW1lbnRfaWQ+XWBcbiAqIG1hcmtlcnMgdGhlIGFnZW50IGVtYmVkcyBpbiBwcm9zZS5cbiAqXG4gKiBGaWVsZHM6XG4gKiAgIC0gYGNvbHVtbnNgOiBjb2x1bW4gbmFtZXMgaW4gZGVjbGFyYXRpb24gb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiByb3cgcmVjb3JkcyBrZXllZCBieSBjb2x1bW4gbmFtZS4gQ2VsbCB2YWx1ZXMgYXJlXG4gKiAgICAgZWl0aGVyIGNvZXJjZWQgbnVtYmVycyBvciB0aGUgb3JpZ2luYWwgc3RyaW5ncyAoR2VuaWUgL1xuICogICAgIFN0YXRlbWVudCBFeGVjdXRpb24gcmV0dXJucyBldmVyeSBjZWxsIGFzIGBzdHJpbmcgfCBudWxsYDtcbiAqICAgICBudW1lcmljLWxvb2tpbmcgY2VsbHMgYXJlIGNvZXJjZWQgc2VydmVyLXNpZGUgc28gdGhlIFVJXG4gKiAgICAgY2FuIGZvcm1hdCB3aXRoIGB0YWJ1bGFyLW51bXNgIHdpdGhvdXQgcmUtcGFyc2luZykuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IHVwc3RyZWFtIChpbmRlcGVuZGVudCBvZiB0aGVcbiAqICAgICBgbGltaXRgIGNhcCkuIENvbXBhcmUgYWdhaW5zdCBgcm93cy5sZW5ndGhgIHRvIGRldGVjdFxuICogICAgIHRydW5jYXRpb24gLSBgdHJ1bmNhdGVkYCBpcyB0aGUgcHJlY29tcHV0ZWQgZmxhZy5cbiAqICAgLSBgdHJ1bmNhdGVkYDogYHRydWVgIHdoZW4gdGhlIHNlcnZlciBjbGlwcGVkIHJvd3MgdG8gaG9ub3JcbiAqICAgICB0aGUgcm91dGUncyByb3cgY2FwOyB0aGUgVUkgc2hvdWxkIHN1cmZhY2UgYSBcInNob3dpbmcgTiBvZlxuICogICAgIE0gcm93c1wiIGFmZm9yZGFuY2UgaW4gdGhhdCBjYXNlLlxuICovXG5leHBvcnQgY29uc3QgU3RhdGVtZW50RGF0YVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29sdW1uczogei5hcnJheSh6LnN0cmluZygpKSxcbiAgcm93czogei5hcnJheSh6LnJlY29yZCh6LnN0cmluZygpLCB6LnVua25vd24oKSkpLFxuICByb3dDb3VudDogei5udW1iZXIoKSxcbiAgdHJ1bmNhdGVkOiB6LmJvb2xlYW4oKSxcbn0pO1xuLyoqIFRhYnVsYXIgc3RhdGVtZW50IHBheWxvYWQgcmVzb2x2ZWQgZnJvbSBhIGBbZGF0YTo8c3RhdGVtZW50X2lkPl1gIGVtYmVkIG1hcmtlci4gKi9cbmV4cG9ydCB0eXBlIFN0YXRlbWVudERhdGEgPSB6LmluZmVyPHR5cGVvZiBTdGF0ZW1lbnREYXRhU2NoZW1hPjtcblxuLyogLS0tLS0tLS0tLS0tLS0tLSBtYXN0cmEtb25seSBnZW5pZS1hZ2VudCBldmVudHMgLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogdGhlIEdlbmllIHRvb2wgaW52b2NhdGlvbiBzdGFydGVkLlxuICogRW1pdHRlZCBpbW1lZGlhdGVseSB3aGVuIHRoZSBjYWxsaW5nIGFnZW50IGludm9rZXMgdGhlIEdlbmllXG4gKiB0b29sLCBiZWZvcmUgYW55IGlubmVyIGFnZW50IC8gd2lyZSBhY3Rpdml0eSwgc28gdGhlIFVJIGNhblxuICogcG9wIGEgXCJUaGlua2luZy4uLlwiIHBpbGwgdGhlIGluc3RhbnQgdGhlIG1vZGVsIGRlY2lkZXMgdG9cbiAqIGRlbGVnYXRlLiBgY29udmVyc2F0aW9uSWRgIC8gYG1lc3NhZ2VJZGAgYXJlIGFic2VudCBvbiB0aGlzXG4gKiBmaXJzdCBlbWl0IChubyBHZW5pZSByb3VuZC10cmlwIHlldCkuIEZpZWxkIG5hbWVzIGFyZVxuICogY2FtZWxDYXNlICh2cyB0aGUgc25ha2VfY2FzZSB3aXJlIGV2ZW50cykgdG8gbWlycm9yIHRoZVxuICogR2VuaWUgYWdlbnQncyBvd24gaW50ZXJuYWwgZGF0YSBwbHVtYmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IFN0YXJ0ZWRFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3RhcnRlZFwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqXG4gICAqIEdlbmllIGNvbnZlcnNhdGlvbiBpZCwgcG9wdWxhdGVkIG9ubHkgd2hlbiB0aGlzIGBzdGFydGVkYFxuICAgKiBldmVudCBjb3JyZXNwb25kcyB0byBhIGZvbGxvdy11cCB0dXJuIG9uIGFuIGV4aXN0aW5nXG4gICAqIGNvbnZlcnNhdGlvbi4gQWJzZW50IG9uIHRoZSBmaXJzdCB0dXJuLlxuICAgKi9cbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqXG4gICAqIEdlbmllIG1lc3NhZ2UgaWQsIHBvcHVsYXRlZCBvbmx5IGFmdGVyIHRoZSBmaXJzdCB3aXJlXG4gICAqIGBtZXNzYWdlYCBldmVudCBsYW5kcy4gQWJzZW50IG9uIHRoZSBpbW1lZGlhdGUtb24taW52b2tlXG4gICAqIGVtaXQuXG4gICAqL1xuICBtZXNzYWdlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLyoqIFF1ZXN0aW9uIHRoZSBHZW5pZSBhZ2VudCBzZW50IHRvIEdlbmllLiAqL1xuICBjb250ZW50OiB6LnN0cmluZygpLFxufSk7XG4vKiogSW1tZWRpYXRlIGxpZmVjeWNsZSBldmVudCBlbWl0dGVkIHdoZW4gYW4gYGFza19nZW5pZWAgaW52b2NhdGlvbiBiZWdpbnMuICovXG5leHBvcnQgdHlwZSBTdGFydGVkRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBTdGFydGVkRXZlbnRTY2hlbWE+O1xuXG4vKipcbiAqIE1hc3RyYS1vbmx5IGxpZmVjeWNsZSBldmVudDogb25lIGBhc2tfZ2VuaWVgIGludm9jYXRpb25cbiAqIGZpbmlzaGVkLiBDYXJyaWVzIHRoZSBoeWRyYXRlZCBgc3RhdGVtZW50SWRzYCAocm93cyBhcmUgZmV0Y2hlZFxuICogdmlhIGBnZXRTdGF0ZW1lbnRgIHNlcGFyYXRlbHkpIGFuZCBHZW5pZSdzIGZpbmFsIHByb3NlIGFuc3dlclxuICogc28gdGhlIFVJIGNhbiBtb3ZlIGZyb20gXCJ0aGlua2luZ1wiIHRvIFwiYW5zd2VyZWRcIiB3aXRob3V0XG4gKiB3YWl0aW5nIGZvciB0aGUgR2VuaWUgYWdlbnQncyB3aG9sZSByZWFzb25pbmcgbG9vcCB0byBlbmQuXG4gKi9cbmV4cG9ydCBjb25zdCBBc2tHZW5pZURvbmVFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiYXNrX2dlbmllX2RvbmVcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCksXG4gIGNvbnZlcnNhdGlvbklkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAvKiogR2VuaWUncyBuYXR1cmFsLWxhbmd1YWdlIGFuc3dlciBmb3IgdGhlIHR1cm4sIGlmIGFueS4gKi9cbiAgYW5zd2VyOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8qKiBTdGF0ZW1lbnQgaWRzIGZvciBhbnkgbm9uLWVtcHR5IHJlc3VsdCBzZXRzIHRoaXMgdHVybiBwcm9kdWNlZC4gKi9cbiAgc3RhdGVtZW50SWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAvKipcbiAgICogVGVybWluYWwgd2lyZSBzdGF0dXMgKGBDT01QTEVURURgIC8gYEZBSUxFRGAgLyBgQ0FOQ0VMTEVEYCkuXG4gICAqIE1pcnJvcnMgdGhlIHNvdXJjZSBgcmVzdWx0YCBldmVudCdzIHN0YXR1cyBzbyBzdWJzY3JpYmVyc1xuICAgKiBjYW4gcmVhY3QgdG8gYXNrLWxldmVsIGNvbXBsZXRpb24gd2l0aG91dCByZS13YWxraW5nIGhpc3RvcnkuXG4gICAqIFRyZWF0ZWQgYXMgYHouY3VzdG9tPE1lc3NhZ2VTdGF0dXM+YCBiZWNhdXNlIHRoZSBTREsgaXMgdGhlXG4gICAqIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGVudW0gdmFsdWVzLlxuICAgKi9cbiAgc3RhdHVzOiB6LmN1c3RvbTxNZXNzYWdlU3RhdHVzPigodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpLFxufSk7XG4vKiogQ29tcGxldGlvbiBldmVudCBmb3Igb25lIGBhc2tfZ2VuaWVgIGludm9jYXRpb24sIGluY2x1ZGluZyBpdHMgdGVybWluYWwgc3RhdHVzLiAqL1xuZXhwb3J0IHR5cGUgQXNrR2VuaWVEb25lRXZlbnQgPSB6LmluZmVyPHR5cGVvZiBBc2tHZW5pZURvbmVFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXJyb3IgZXZlbnQ6IHRlcm1pbmFsIEdlbmllIGFnZW50IC8gdHJhbnNwb3J0XG4gKiBlcnJvci4gR2VuaWUncyBvd24gYEZBSUxFRGAgLyBgQ0FOQ0VMTEVEYCBjb21lIHRocm91Z2ggdGhlXG4gKiB3aXJlJ3MgYHJlc3VsdGAgZXZlbnQgLSB0aGlzIHZhcmlhbnQgaXMgZm9yIGZhaWx1cmVzIHRoZSB3aXJlXG4gKiBjYW4ndCByZXByZXNlbnQgKG5ldHdvcmssIEdlbmllIGFnZW50IGNyYXNoLCBwbGFubmVyIGVycm9yLFxuICogZXRjLikgcGx1cyBhIFVJLWZyaWVuZGx5IG1pcnJvciBvZiBgcmVzdWx0YCB3aGVuIHRoZSBzdGF0dXMgaXNcbiAqIG5vbi1gQ09NUExFVEVEYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwiZXJyb3JcIiksXG4gIHNwYWNlSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLFxufSk7XG4vKiogTWFzdHJhLXNpZGUgZmFpbHVyZSBldmVudCBmb3IgZXJyb3JzIG91dHNpZGUgR2VuaWUncyBub3JtYWwgdGVybWluYWwgcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgTWFzdHJhR2VuaWVFcnJvckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgTWFzdHJhR2VuaWVFcnJvckV2ZW50U2NoZW1hPjtcblxuLyoqXG4gKiBNYXN0cmEtb25seSBsaWZlY3ljbGUgZXZlbnQ6IHRoZSBpbm5lciBHZW5pZSBhZ2VudCdzXG4gKiBzdHJ1Y3R1cmVkLW91dHB1dCBjb2VyY2lvbiBoYXMgbGFuZGVkLiBGaXJlcyBvbmNlIHBlciBHZW5pZVxuICogdG9vbCBpbnZvY2F0aW9uLCBBRlRFUiBgYWdlbnQuZ2VuZXJhdGUoLi4uKWAgY29tcGxldGVzIChpLmUuXG4gKiB0aGUgaW5uZXIgbG9vcCArIE1hc3RyYSdzIHN0cnVjdHVyaW5nIHBhc3MgaGF2ZSBib3RoXG4gKiBmaW5pc2hlZCkgYW5kIEJFRk9SRSB0aGUgd3JhcHBlciBoeWRyYXRlcyBlYWNoIGBkYXRhYCBpdGVtXG4gKiB3aXRoIGEgY2hhcnQuIFNpZ25hbHMgdG8gdGhlIGhvc3QgVUkgdGhhdCB0aGUgYWdlbnQgaGFzXG4gKiBzdG9wcGVkIHJlYXNvbmluZyBhbmQgaXMgbW92aW5nIGludG8gY2hhcnQgZ2VuZXJhdGlvbi5cbiAqXG4gKiBUaGUgc3RydWN0dXJpbmcgcGFzcyBpdHNlbGYgaXMgb3BhcXVlIChpdCBydW5zIGluc2lkZVxuICogTWFzdHJhJ3MgYGFnZW50LmdlbmVyYXRlKC4uLilgIHRvZ2V0aGVyIHdpdGggdGhlIHRvb2wgbG9vcClcbiAqIHNvIHRoaXMgaXMgdGhlIGVhcmxpZXN0IGhvb2sgd2UgY2FuIG9mZmVyOyB3ZSBjYW4ndCBmaXJlIGFcbiAqIFwic3VtbWFyeSBzdGFydGVkXCIgZXZlbnQgdGhlIHdheSB3ZSBmaXJlIGBzdGFydGVkYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1bW1hcnlFdmVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKFwic3VtbWFyeVwiKSxcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYWdlbnQncyBzdHJ1Y3R1cmVkIHN1bW1hcnkuICovXG4gIGl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKiBDb3VudCBvZiBgdGV4dGAgLyBwcm9zZSBpdGVtcyBpbiB0aGUgc3VtbWFyeS4gKi9cbiAgdGV4dEl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIC8qKlxuICAgKiBDb3VudCBvZiBgZGF0YWAgaXRlbXMgdGhlIHdyYXBwZXIgd2lsbCBoeWRyYXRlIGludG8gY2hhcnRzLlxuICAgKiBUaGUgaG9zdCBVSSBjYW4gdXNlIHRoaXMgdG8gc2VlZCBOIGNoYXJ0IHNrZWxldG9ucyBiZWZvcmVcbiAgICogdGhlIHBlci1jaGFydCBldmVudHMgYXJyaXZlLlxuICAgKi9cbiAgZGF0YUl0ZW1zOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG59KTtcbi8qKiBMaWZlY3ljbGUgZXZlbnQgZW1pdHRlZCBiZWZvcmUgc3VtbWFyeSBkYXRhIGl0ZW1zIGFyZSBoeWRyYXRlZCBpbnRvIGNoYXJ0cy4gKi9cbmV4cG9ydCB0eXBlIFN1bW1hcnlFdmVudCA9IHouaW5mZXI8dHlwZW9mIFN1bW1hcnlFdmVudFNjaGVtYT47XG5cbi8qKlxuICogTWFzdHJhLW9ubHkgZXZlbnQgdW5pb24uIEVhY2ggdmFyaWFudCB1c2VzIHRoZSBzYW1lIGZsYXRcbiAqIGB7dHlwZSwgLi4uZmllbGRzfWAgc2hhcGUgYXMge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSBzb1xuICogc3Vic2NyaWJlcnMgdW5pb24gYm90aCB3aXRoIGEgc2luZ2xlIGBzd2l0Y2ggKGV2ZW50LnR5cGUpYC5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllQWdlbnRFdmVudFNjaGVtYSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIFN0YXJ0ZWRFdmVudFNjaGVtYSxcbiAgQXNrR2VuaWVEb25lRXZlbnRTY2hlbWEsXG4gIE1hc3RyYUdlbmllRXJyb3JFdmVudFNjaGVtYSxcbiAgU3VtbWFyeUV2ZW50U2NoZW1hLFxuXSk7XG4vKiogTWFzdHJhLW93bmVkIGxpZmVjeWNsZSBldmVudHMgbGF5ZXJlZCBvbiB0b3Agb2YgR2VuaWUncyB3aXJlIGV2ZW50IHN0cmVhbS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllQWdlbnRFdmVudCA9IHouaW5mZXI8dHlwZW9mIEdlbmllQWdlbnRFdmVudFNjaGVtYT47XG5cbi8qKlxuICogVGhlIHVuaWZpZWQgd3JpdGVyLWV2ZW50IHZvY2FidWxhcnkgc3Vic2NyaWJlcnMgc2VlIG9uXG4gKiBgY3R4LndyaXRlcmA6IHRoZSB3aXJlLWRlcml2ZWQge0BsaW5rIEdlbmllQ2hhdEV2ZW50fSB1bmlvblxuICogKipwbHVzKiogTWFzdHJhLW9ubHkgZXZlbnRzIGZyb20ge0BsaW5rIEdlbmllQWdlbnRFdmVudH0uIEVhY2hcbiAqIHZhcmlhbnQgaXMgYSBmbGF0IGB7dHlwZSwgLi4uZmllbGRzfWAgb2JqZWN0OyBjb25zdW1lcnMgbmFycm93XG4gKiBvbiBgdHlwZWAgYW5kIHJlYWQgZmllbGRzIGlubGluZSAtIHRoZXJlIGlzIG5vIHBheWxvYWQgd3JhcHBlclxuICogYW5kIG5vIHdyaXRlci1ib3VuZGFyeSB0cmFuc2xhdG9yLlxuICpcbiAqIENvbXBvc2VkIHZpYSBgei51bmlvbmAgKG5vdCBgei5kaXNjcmltaW5hdGVkVW5pb25gKSBiZWNhdXNlXG4gKiBib3RoIGhhbHZlcyBhcmUgdGhlbXNlbHZlcyBkaXNjcmltaW5hdGVkIHVuaW9ucyBvbiB0aGUgc2FtZVxuICogYHR5cGVgIGtleS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllV3JpdGVyRXZlbnRTY2hlbWEgPSB6LnVuaW9uKFtcbiAgZ2VuaWVNb2RlbC5HZW5pZUNoYXRFdmVudFNjaGVtYSxcbiAgR2VuaWVBZ2VudEV2ZW50U2NoZW1hLFxuXSk7XG4vKiogQ29tcGxldGUgZXZlbnQgdm9jYWJ1bGFyeSB3cml0dGVuIGJ5IHRoZSBNYXN0cmEgR2VuaWUgaW50ZWdyYXRpb24uICovXG5leHBvcnQgdHlwZSBHZW5pZVdyaXRlckV2ZW50ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVXcml0ZXJFdmVudFNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZVdyaXRlckV2ZW50fS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllV3JpdGVyRXZlbnRUeXBlID0gR2VuaWVXcml0ZXJFdmVudFtcInR5cGVcIl07XG5cbi8qKiBOYXRpdmUgQUkgU0RLIGN1c3RvbSBkYXRhLXBhcnQgdHlwZSBjYXJyeWluZyBvbmUgR2VuaWUgcHJvZ3Jlc3MgZXZlbnQuICovXG5leHBvcnQgY29uc3QgR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFID0gXCJkYXRhLWdlbmllLXByb2dyZXNzXCIgYXMgY29uc3Q7XG5cbi8qKlxuICogRGF0YSBhdHRhY2hlZCB0byB7QGxpbmsgR0VOSUVfUFJPR1JFU1NfUEFSVF9UWVBFfS4gYHRvb2xDYWxsSWRgIGFzc29jaWF0ZXNcbiAqIHByb2dyZXNzIHdpdGggdGhlIG5hdGl2ZSB0b29sIHBhcnQgdGhhdCBvd25zIHRoZSByZXF1ZXN0IGFuZCByZXN1bHQuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVByb2dyZXNzUGFydERhdGFTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gIGV2ZW50OiBHZW5pZVdyaXRlckV2ZW50U2NoZW1hLFxufSk7XG4vKiogVmFsaWRhdGVkIHBheWxvYWQgY2FycmllZCBieSBhIG5hdGl2ZSBHZW5pZSBwcm9ncmVzcyBkYXRhIHBhcnQuICovXG5leHBvcnQgdHlwZSBHZW5pZVByb2dyZXNzUGFydERhdGEgPSB6LmluZmVyPHR5cGVvZiBHZW5pZVByb2dyZXNzUGFydERhdGFTY2hlbWE+O1xuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN1bW1hcnkgKyBkYXRhc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcbiAqIFRhYnVsYXIgcGF5bG9hZCBlbWJlZGRlZCBpbiBldmVyeSB7QGxpbmsgR2VuaWVTdW1tYXJ5SXRlbX1cbiAqIGB2aXN1YWxpemVgIGRhdGFzZXQuIEFsd2F5cyBwcmVzZW50OiBoeWRyYXRlZCBieSB0aGUgd29ya2Zsb3cnc1xuICogYWdlbnQgc3RlcCBiZWZvcmUgdGhlIGZpbmFsaXplIHN0ZXAgcnVucywgc28gY29uc3VtZXJzIGNhbiByZW5kZXJcbiAqIGEgdGFibGUgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiBjaGFydC1wbGFubmVyIG91dGNvbWUuXG4gKlxuICogRmllbGRzOlxuICogICAtIGBjb2x1bW5zYDogY29sdW1uIG5hbWVzIGluIGRpc3BsYXkgb3JkZXIuXG4gKiAgIC0gYHJvd3NgOiB0YWJ1bGFyIHJvd3Mga2V5ZWQgYnkgY29sdW1uIG5hbWUuXG4gKiAgIC0gYHJvd0NvdW50YDogdG90YWwgcm93IGNvdW50IEdlbmllIHJlcG9ydGVkIChtYXkgZXhjZWVkXG4gKiAgICAgYHJvd3MubGVuZ3RoYCB3aGVuIHRoZSBzdGF0ZW1lbnQgd2FzIHRydW5jYXRlZCkuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXREYXRhU2NoZW1hID0gei5vYmplY3Qoe1xuICBjb2x1bW5zOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICByb3dzOiB6LmFycmF5KHoucmVjb3JkKHouc3RyaW5nKCksIHoudW5rbm93bigpKSksXG4gIHJvd0NvdW50OiB6Lm51bWJlcigpLFxufSk7XG4vKiogSHlkcmF0ZWQgdGFidWxhciBkYXRhIHRoYXQgYWx3YXlzIGJhY2tzIGEgR2VuaWUgdmlzdWFsaXphdGlvbiBpdGVtLiAqL1xuZXhwb3J0IHR5cGUgR2VuaWVEYXRhc2V0RGF0YSA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldERhdGFTY2hlbWE+O1xuXG4vKipcbiAqIFNsaW0gY2hhcnQgcmVmZXJlbmNlIGF0dGFjaGVkIHRvIGEgdmlzdWFsaXplIGRhdGFzZXQuIE9ubHlcbiAqIHByZXNlbnQgd2hlbiBwbGFubmluZyBzdWNjZWVkZWQuXG4gKlxuICogYG9wdGlvbmAgaXMgaW50ZW50aW9uYWxseSBOT1QgaW5jbHVkZWQuIFRoZSByZXNvbHZlZCBFY2hhcnRzXG4gKiBzcGVjIGxpdmVzIG9mZi1iYW5kIGluIHRoZSBjaGFydCBjYWNoZTogdGhlIGhvc3QgVUkgZmV0Y2hlcyBpdFxuICogYnkgYGNoYXJ0SWRgIGZyb20gdGhlIHBsdWdpbidzIGVtYmVkIHJvdXRlIChkZXJpdmVkIGZyb21cbiAqIGBiYXNlUGF0aGAgKyB7QGxpbmsgTUFTVFJBX1JPVVRFU30uZW1iZWQsIGkuZS4gYC9lbWJlZC9jaGFydC86aWRgO1xuICogc2VlIHtAbGluayBDaGFydH0pLiBFbWJlZGRpbmcgdGhlIGZ1bGwgc3BlYyBpbmxpbmUgd291bGRcbiAqIGluZmxhdGUgZXZlcnkgZGF0YXNldCBieSBzZXZlcmFsIEtCIHBlciBjaGFydCBhbmQgcm91bmQtdHJpcFxuICogdGhyb3VnaCB0aGUgTExNIGNvbnRleHQgZm9yIHplcm8gYmVuZWZpdCAodGhlIG1vZGVsIG9ubHkgbmVlZHNcbiAqIHRoZSBgY2hhcnRJZGAgdG8gcGxhY2UgYSBgW2NoYXJ0OjxjaGFydElkPl1gIG1hcmtlciBpbiBpdHNcbiAqIHJlcGx5KS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdlbmllRGF0YXNldENoYXJ0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjaGFydElkOiB6LnN0cmluZygpLFxuICBjaGFydFR5cGU6IENoYXJ0VHlwZVNjaGVtYSxcbn0pO1xuLyoqIExpZ2h0d2VpZ2h0IHJlZmVyZW5jZSB0byBhIGNoYXJ0IHBsYW4gc3RvcmVkIGluIHRoZSBNYXN0cmEgY2hhcnQgY2FjaGUuICovXG5leHBvcnQgdHlwZSBHZW5pZURhdGFzZXRDaGFydCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldENoYXJ0U2NoZW1hPjtcblxuLyoqXG4gKiBEYXRhc2V0IGJ1bmRsZSBhdHRhY2hlZCB0byBhIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfSBgdmlzdWFsaXplYFxuICogaXRlbS4gYGRhdGFgIGlzIGFsd2F5cyBwb3B1bGF0ZWQ7IGBjaGFydGAgaXMgYmVzdC1lZmZvcnQgYW5kXG4gKiBhYnNlbnQgd2hlbiB0aGUgd29ya2Zsb3cncyBjaGFydC1wbGFubmVyIGZhaWxlZCAodGltZW91dCxcbiAqIG1hbGZvcm1lZCBwbGFuLCBhYm9ydCkgc28gdGhlIGhvc3QgVUkgY2FuIHN0aWxsIHJlbmRlciB0aGVcbiAqIHVuZGVybHlpbmcgdGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZURhdGFzZXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGRhdGE6IEdlbmllRGF0YXNldERhdGFTY2hlbWEsXG4gIGNoYXJ0OiBHZW5pZURhdGFzZXRDaGFydFNjaGVtYS5vcHRpb25hbCgpLFxufSk7XG4vKiogVmlzdWFsaXphdGlvbiBkYXRhc2V0IHdpdGggcmVxdWlyZWQgdGFibGUgZGF0YSBhbmQgYW4gb3B0aW9uYWwgcGxhbm5lZCBjaGFydC4gKi9cbmV4cG9ydCB0eXBlIEdlbmllRGF0YXNldCA9IHouaW5mZXI8dHlwZW9mIEdlbmllRGF0YXNldFNjaGVtYT47XG5cbi8qKlxuICogT25lIGl0ZW0gaW5zaWRlIHRoZSBHZW5pZSB3b3JrZmxvdydzIGZpbmFsIHN1bW1hcnkuIFRoZVxuICogd29ya2Zsb3cgcHJvZHVjZXMgYSBtaXhlZCBzZXF1ZW5jZSBvZjpcbiAqXG4gKiAgIC0gYHN0cmluZ2A6IGEgbWFya2Rvd24gcGFyYWdyYXBoIChpbnRlcnByZXRhdGlvbiwgY2FsbG91dHMsXG4gKiAgICAgdHJhbnNpdGlvbnMgYmV0d2VlbiBkYXRhIGJsb2NrcykuXG4gKiAgIC0gYHZpc3VhbGl6ZWA6IGEgcmVxdWVzdCBmcm9tIHRoZSBhZ2VudCBzdGVwIHRvIHZpc3VhbGl6ZSBhXG4gKiAgICAgc3BlY2lmaWMgR2VuaWUgc3RhdGVtZW50IGF0IHRoaXMgcG9zaXRpb24gaW4gdGhlIHByb3NlLlxuICogICAgIFRoZSBmaW5hbGl6ZSBzdGVwIGh5ZHJhdGVzIGBkYXRhc2V0LmRhdGFgIChyb3dzIGZyb20gdGhlXG4gKiAgICAgbWF0Y2hpbmcgYHN0YXRlbWVudElkYCkgYW5kIGF0dGFjaGVzIGBkYXRhc2V0LmNoYXJ0YCBhZnRlclxuICogICAgIHJ1bm5pbmcgdGhlIGNoYXJ0LXBsYW5uZXIuIFRoZSBhZ2VudCBORVZFUiBwaWNrcyB0aGUgY2hhcnRcbiAqICAgICB0eXBlIC0gaXQgb25seSBtYXJrcyB3aGVyZSBhIHZpc3VhbGl6YXRpb24gYmVsb25ncy5cbiAqXG4gKiBUaGUgaG9zdCBVSSB3YWxrcyB0aGUgYXJyYXkgaW4gZGlzcGxheSBvcmRlciB0byBjb21wb3NlIHRoZVxuICogZmluYWwgYXNzaXN0YW50IG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBjb25zdCBHZW5pZVN1bW1hcnlJdGVtU2NoZW1hID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInN0cmluZ1wiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInZpc3VhbGl6ZVwiKSxcbiAgICBzdGF0ZW1lbnRJZDogei5zdHJpbmcoKSxcbiAgICB0aXRsZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgZGF0YXNldDogR2VuaWVEYXRhc2V0U2NoZW1hLFxuICB9KSxcbl0pO1xuLyoqIE9yZGVyZWQgcHJvc2Ugb3IgdmlzdWFsaXphdGlvbiBpdGVtIGluIHRoZSBHZW5pZSBhZ2VudCdzIGZpbmFsIHN1bW1hcnkuICovXG5leHBvcnQgdHlwZSBHZW5pZVN1bW1hcnlJdGVtID0gei5pbmZlcjx0eXBlb2YgR2VuaWVTdW1tYXJ5SXRlbVNjaGVtYT47XG5cbi8qKiBEaXNjcmltaW5hdG9yIHR5cGUgZm9yIHtAbGluayBHZW5pZVN1bW1hcnlJdGVtfS4gKi9cbmV4cG9ydCB0eXBlIEdlbmllU3VtbWFyeUl0ZW1UeXBlID0gR2VuaWVTdW1tYXJ5SXRlbVtcInR5cGVcIl07XG5cbi8qKlxuICogVGhlIEdlbmllIGFnZW50J3MgZmluYWwgb3V0cHV0IHNoYXBlIC0gd2hhdCB0aGUgY2FsbGluZyBhZ2VudCdzXG4gKiBHZW5pZSB0b29sIHJldHVybnMgdG8gdGhlIGNhbGxpbmcgTExNLiBUaGUgYHN1bW1hcnlgIGFycmF5IGlzXG4gKiB0aGUgdXNlci1mYWNpbmcgcmVuZGVyYWJsZTsgYGNvbnZlcnNhdGlvbklkYCBsZXRzIHRoZSBjYWxsaW5nXG4gKiBhZ2VudCAob3IgdGhlIFVJKSBmb2xsb3cgdXAgaW4gdGhlIHNhbWUgR2VuaWUgdGhyZWFkIG9uIHRoZVxuICogbmV4dCB0dXJuLlxuICovXG5leHBvcnQgY29uc3QgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgc3BhY2VJZDogei5zdHJpbmcoKSxcbiAgY29udmVyc2F0aW9uSWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgc3VtbWFyeTogei5hcnJheShHZW5pZVN1bW1hcnlJdGVtU2NoZW1hKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuLyoqIEZpbmFsIHJlbmRlcmFibGUgb3V0cHV0IHJldHVybmVkIGJ5IHRoZSBHZW5pZSBhZ2VudCB0b29sIHRvIGl0cyBjYWxsZXIuICovXG5leHBvcnQgdHlwZSBHZW5pZUFnZW50UmVzdWx0ID0gei5pbmZlcjx0eXBlb2YgR2VuaWVBZ2VudFJlc3VsdFNjaGVtYT47XG4iXX0=
@@ -1 +1 @@
1
- {"root":["../src/feedback.ts","../src/marker.ts","../src/override.ts","../src/routes.ts","../src/thread.ts","../src/wire.ts","../index.ts"],"version":"5.9.3"}
1
+ {"root":["../src/feedback.ts","../src/markers.ts","../src/override.ts","../src/routes.ts","../src/thread.ts","../src/wire.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -24,8 +24,8 @@
24
24
  "typescript": "^5.9.3"
25
25
  },
26
26
  "dependencies": {
27
- "@dbx-tools/shared-genie": "^0.9.5",
28
- "@dbx-tools/shared-model": "^0.9.5",
27
+ "@dbx-tools/shared-genie": "^0.9.7",
28
+ "@dbx-tools/shared-model": "^0.9.7",
29
29
  "zod": "4.3.6"
30
30
  },
31
31
  "main": "./lib/index.js",
@@ -42,7 +42,7 @@
42
42
  "./package.json": "./package.json"
43
43
  }
44
44
  },
45
- "version": "0.9.5",
45
+ "version": "0.9.7",
46
46
  "types": "./lib/index.d.ts",
47
47
  "type": "module",
48
48
  "exports": {
package/src/wire.ts CHANGED
@@ -23,7 +23,7 @@
23
23
  * ({@link GenieAgentResult} and its summary / dataset items).
24
24
  *
25
25
  * The route segments live in the sibling `routes.ts`
26
- * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `marker.ts`,
26
+ * ({@link MASTRA_ROUTES}) and the embed-marker grammar in `markers.ts`,
27
27
  * so this file stays purely declarative (schemas + inferred types).
28
28
  * The browser client that drives these routes (`MastraPluginClient`)
29
29
  * ships from `@dbx-tools/ui-mastra`.
package/lib/src/marker.js DELETED
@@ -1,133 +0,0 @@
1
- /**
2
- * Agent-prose embed marker grammar.
3
- *
4
- * The Mastra agent is instructed to defer visualizations to the host
5
- * UI by embedding markers in its markdown reply; the UI parses them
6
- * out and swaps in the matching slot. This module is the single
7
- * source of truth for that grammar so every consumer parses markers
8
- * the same way and can't drift from the shapes documented on
9
- * {@link ChartSchema} / {@link StatementDataSchema} in `protocol.ts`
10
- * and the instructions the server hands the model.
11
- *
12
- * One grammar, open-ended type. A marker is `[<type>:<id>]`. The
13
- * `<type>` is an opaque token that names the embed kind; the host
14
- * resolves it against the generic `/embed/<type>/<id>` route, which
15
- * 404s any type the server doesn't register. The grammar does NOT
16
- * hard-code the known types - new embed kinds work end to end
17
- * without touching this regex. Today the server registers:
18
- *
19
- * - `[chart:<chartId>]` - the `<chartId>` is a v4 UUID minted by
20
- * the chart subsystem (`prepare_chart` / `render_data`) and
21
- * resolves to a cached Echarts spec.
22
- * - `[data:<statementId>]` - the `<statementId>` is a Databricks
23
- * statement id (a time-ordered UUID) and resolves to the
24
- * statement's rows.
25
- *
26
- * The `<id>` of a real embed is UUID-shaped (`8-4-4-4-12` hex): both
27
- * id kinds above are UUIDs, just different versions (chart = v4,
28
- * statement = v7-style). The grammar deliberately captures ANY
29
- * non-bracket id token, not just UUID-shaped ones, so a fabricated
30
- * marker the model glued together from a label
31
- * (e.g. `[chart:placeholder]` or
32
- * `[chart:01f163b6-1eac-region-fill-oos]`) still parses as a marker.
33
- * Matching it - rather than letting the broad regex miss it - is what
34
- * lets the host UI consume and obscure the bogus marker instead of
35
- * leaking the literal `[chart:...]` text into the rendered prose.
36
- * Whether an id is a genuine embed is a separate {@link isUuid}
37
- * check the caller runs on {@link ParsedMarker.id}.
38
- *
39
- * Parse everything through {@link parseMarkers}, validate the id with
40
- * {@link isUuid}, and branch on the returned {@link ParsedMarker.type}.
41
- *
42
- * @module
43
- */
44
- /**
45
- * Single matcher for ANY embed marker, regardless of type. Matches
46
- * `[<type>:<id>]`. Capture group 1 is the marker type token (e.g.
47
- * `chart`, `data`); group 2 is the id - any run of non-bracket,
48
- * non-whitespace characters, NOT constrained to a UUID shape.
49
- *
50
- * Neither the type nor the id shape is enumerated here. The type is
51
- * left open because the server's resolver registry decides which
52
- * types are real and 404s the rest, so a new embed kind needs no
53
- * grammar change. The id is left broad on purpose: a fabricated
54
- * marker the model emits from a label (e.g. `[chart:placeholder]`)
55
- * MUST still match so the host UI can consume and obscure it rather
56
- * than leak the literal `[chart:...]` text into the prose. The id is
57
- * then validated with {@link isUuid} downstream; non-UUID ids resolve
58
- * to no embed.
59
- *
60
- * Safe to share as a `/g` constant: it's only ever consumed via
61
- * {@link String.prototype.matchAll}, which clones the regex and
62
- * never advances this object's `lastIndex`. (A `.exec()`/`.test()`
63
- * loop would need a fresh regex each time, but we don't do that.)
64
- */
65
- const MARKER_RE = /\[([A-Za-z][A-Za-z0-9_-]*):([^\]\s]+)\]/g;
66
- /**
67
- * UUID matcher (`8-4-4-4-12` hex, any version) anchored to the whole
68
- * string. Covers v4 chart ids and time-ordered (v7-style) statement
69
- * ids alike. Used by {@link isUuid} to tell a genuine embed id apart
70
- * from a label the model fabricated into a marker.
71
- */
72
- const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
73
- /**
74
- * Whether `id` is a UUID-shaped embed id. The marker grammar
75
- * ({@link MARKER_RE}) matches any non-bracket id token so fabricated
76
- * markers don't leak as literal prose; this is the guard callers run
77
- * to decide whether an id is a real embed (render the slot) or a
78
- * bogus label to obscure (drop the marker entirely).
79
- */
80
- export function isUuid(id) {
81
- return UUID_RE.test(id);
82
- }
83
- /**
84
- * Build the exact embed marker the agent should place in prose.
85
- *
86
- * Tool results return this complete value so the model copies one opaque token
87
- * rather than reconstructing it from `type` plus `id`. Reconstruction is where
88
- * valid-looking but never-minted UUIDs enter transcripts and produce a 404.
89
- */
90
- export function formatMarker(type, id) {
91
- return `[${type}:${id}]`;
92
- }
93
- /**
94
- * Parse every embed marker out of `text`, in source order. A single
95
- * regex pass means matches never overlap, so callers can splice the
96
- * spans directly without a sort/dedupe step. This is the one entry
97
- * point for marker parsing: type branching runs on the returned
98
- * markers. The grammar ({@link MARKER_RE}) matches any non-bracket id
99
- * token, so a returned {@link ParsedMarker.id} is NOT guaranteed to
100
- * be a real embed id - run it through {@link isUuid} to tell a
101
- * genuine embed apart from a fabricated label, which the caller then
102
- * obscures rather than rendering.
103
- */
104
- export function parseMarkers(text) {
105
- const out = [];
106
- for (const match of text.matchAll(MARKER_RE)) {
107
- const start = match.index ?? 0;
108
- out.push({
109
- // Group 1 is the `<type>` token; the server's embed registry
110
- // (not this parser) decides whether it's supported.
111
- type: match[1] ?? "",
112
- id: match[2] ?? "",
113
- start,
114
- end: start + match[0].length,
115
- });
116
- }
117
- return out;
118
- }
119
- /**
120
- * Strip a trailing partial marker (`[chart`, `[data:01f1`, ...) that
121
- * hasn't received its closing `]` yet. While the model streams
122
- * text-deltas a marker arrives across several chunks, and rendering
123
- * each interim state would briefly flash the literal `[chart:abc-`
124
- * prefix before the closing bracket swaps it for a slot. Hiding any
125
- * trailing `[<non-whitespace-non-bracket>...` suffix keeps the prose
126
- * stable until either a `]` (full marker) or whitespace (definitely
127
- * not a marker) lands. Persisted transcripts never end mid-marker,
128
- * so this is a no-op on reload.
129
- */
130
- export function stripIncompleteMarkerTail(text) {
131
- return text.replace(/\[[^\s[\]]*$/, "");
132
- }
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBWUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxTQUFTLEdBQUcsMENBQTBDLENBQUM7QUFFN0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sR0FBRyxpRUFBaUUsQ0FBQztBQUVsRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEVBQVU7SUFDL0IsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWdCLEVBQUUsRUFBVTtJQUN2RCxPQUFPLElBQUksSUFBSSxJQUFJLEVBQUUsR0FBRyxDQUFDO0FBQzNCLENBQUM7QUFjRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE1BQU0sR0FBRyxHQUFtQixFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLDZEQUE2RDtZQUM3RCxvREFBb0Q7WUFDcEQsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3BCLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLO1lBQ0wsR0FBRyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxJQUFZO0lBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWdlbnQtcHJvc2UgZW1iZWQgbWFya2VyIGdyYW1tYXIuXG4gKlxuICogVGhlIE1hc3RyYSBhZ2VudCBpcyBpbnN0cnVjdGVkIHRvIGRlZmVyIHZpc3VhbGl6YXRpb25zIHRvIHRoZSBob3N0XG4gKiBVSSBieSBlbWJlZGRpbmcgbWFya2VycyBpbiBpdHMgbWFya2Rvd24gcmVwbHk7IHRoZSBVSSBwYXJzZXMgdGhlbVxuICogb3V0IGFuZCBzd2FwcyBpbiB0aGUgbWF0Y2hpbmcgc2xvdC4gVGhpcyBtb2R1bGUgaXMgdGhlIHNpbmdsZVxuICogc291cmNlIG9mIHRydXRoIGZvciB0aGF0IGdyYW1tYXIgc28gZXZlcnkgY29uc3VtZXIgcGFyc2VzIG1hcmtlcnNcbiAqIHRoZSBzYW1lIHdheSBhbmQgY2FuJ3QgZHJpZnQgZnJvbSB0aGUgc2hhcGVzIGRvY3VtZW50ZWQgb25cbiAqIHtAbGluayBDaGFydFNjaGVtYX0gLyB7QGxpbmsgU3RhdGVtZW50RGF0YVNjaGVtYX0gaW4gYHByb3RvY29sLnRzYFxuICogYW5kIHRoZSBpbnN0cnVjdGlvbnMgdGhlIHNlcnZlciBoYW5kcyB0aGUgbW9kZWwuXG4gKlxuICogT25lIGdyYW1tYXIsIG9wZW4tZW5kZWQgdHlwZS4gQSBtYXJrZXIgaXMgYFs8dHlwZT46PGlkPl1gLiBUaGVcbiAqIGA8dHlwZT5gIGlzIGFuIG9wYXF1ZSB0b2tlbiB0aGF0IG5hbWVzIHRoZSBlbWJlZCBraW5kOyB0aGUgaG9zdFxuICogcmVzb2x2ZXMgaXQgYWdhaW5zdCB0aGUgZ2VuZXJpYyBgL2VtYmVkLzx0eXBlPi88aWQ+YCByb3V0ZSwgd2hpY2hcbiAqIDQwNHMgYW55IHR5cGUgdGhlIHNlcnZlciBkb2Vzbid0IHJlZ2lzdGVyLiBUaGUgZ3JhbW1hciBkb2VzIE5PVFxuICogaGFyZC1jb2RlIHRoZSBrbm93biB0eXBlcyAtIG5ldyBlbWJlZCBraW5kcyB3b3JrIGVuZCB0byBlbmRcbiAqIHdpdGhvdXQgdG91Y2hpbmcgdGhpcyByZWdleC4gVG9kYXkgdGhlIHNlcnZlciByZWdpc3RlcnM6XG4gKlxuICogICAtIGBbY2hhcnQ6PGNoYXJ0SWQ+XWAgLSB0aGUgYDxjaGFydElkPmAgaXMgYSB2NCBVVUlEIG1pbnRlZCBieVxuICogICAgIHRoZSBjaGFydCBzdWJzeXN0ZW0gKGBwcmVwYXJlX2NoYXJ0YCAvIGByZW5kZXJfZGF0YWApIGFuZFxuICogICAgIHJlc29sdmVzIHRvIGEgY2FjaGVkIEVjaGFydHMgc3BlYy5cbiAqICAgLSBgW2RhdGE6PHN0YXRlbWVudElkPl1gIC0gdGhlIGA8c3RhdGVtZW50SWQ+YCBpcyBhIERhdGFicmlja3NcbiAqICAgICBzdGF0ZW1lbnQgaWQgKGEgdGltZS1vcmRlcmVkIFVVSUQpIGFuZCByZXNvbHZlcyB0byB0aGVcbiAqICAgICBzdGF0ZW1lbnQncyByb3dzLlxuICpcbiAqIFRoZSBgPGlkPmAgb2YgYSByZWFsIGVtYmVkIGlzIFVVSUQtc2hhcGVkIChgOC00LTQtNC0xMmAgaGV4KTogYm90aFxuICogaWQga2luZHMgYWJvdmUgYXJlIFVVSURzLCBqdXN0IGRpZmZlcmVudCB2ZXJzaW9ucyAoY2hhcnQgPSB2NCxcbiAqIHN0YXRlbWVudCA9IHY3LXN0eWxlKS4gVGhlIGdyYW1tYXIgZGVsaWJlcmF0ZWx5IGNhcHR1cmVzIEFOWVxuICogbm9uLWJyYWNrZXQgaWQgdG9rZW4sIG5vdCBqdXN0IFVVSUQtc2hhcGVkIG9uZXMsIHNvIGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBnbHVlZCB0b2dldGhlciBmcm9tIGEgbGFiZWxcbiAqIChlLmcuIGBbY2hhcnQ6cGxhY2Vob2xkZXJdYCBvclxuICogYFtjaGFydDowMWYxNjNiNi0xZWFjLXJlZ2lvbi1maWxsLW9vc11gKSBzdGlsbCBwYXJzZXMgYXMgYSBtYXJrZXIuXG4gKiBNYXRjaGluZyBpdCAtIHJhdGhlciB0aGFuIGxldHRpbmcgdGhlIGJyb2FkIHJlZ2V4IG1pc3MgaXQgLSBpcyB3aGF0XG4gKiBsZXRzIHRoZSBob3N0IFVJIGNvbnN1bWUgYW5kIG9ic2N1cmUgdGhlIGJvZ3VzIG1hcmtlciBpbnN0ZWFkIG9mXG4gKiBsZWFraW5nIHRoZSBsaXRlcmFsIGBbY2hhcnQ6Li4uXWAgdGV4dCBpbnRvIHRoZSByZW5kZXJlZCBwcm9zZS5cbiAqIFdoZXRoZXIgYW4gaWQgaXMgYSBnZW51aW5lIGVtYmVkIGlzIGEgc2VwYXJhdGUge0BsaW5rIGlzVXVpZH1cbiAqIGNoZWNrIHRoZSBjYWxsZXIgcnVucyBvbiB7QGxpbmsgUGFyc2VkTWFya2VyLmlkfS5cbiAqXG4gKiBQYXJzZSBldmVyeXRoaW5nIHRocm91Z2gge0BsaW5rIHBhcnNlTWFya2Vyc30sIHZhbGlkYXRlIHRoZSBpZCB3aXRoXG4gKiB7QGxpbmsgaXNVdWlkfSwgYW5kIGJyYW5jaCBvbiB0aGUgcmV0dXJuZWQge0BsaW5rIFBhcnNlZE1hcmtlci50eXBlfS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLyoqXG4gKiBUaGUgZW1iZWQga2luZCBuYW1lZCBieSBhIG1hcmtlcidzIGA8dHlwZT5gIHNlZ21lbnQuIExlZnQgYXMgYW5cbiAqIG9wZW4gYHN0cmluZ2AgKG5vdCBhIGNsb3NlZCB1bmlvbikgc28gdGhlIGdyYW1tYXIgc3RheXMgZ2VuZXJpYzpcbiAqIHRoZSBhdXRob3JpdGF0aXZlIHNldCBvZiBzdXBwb3J0ZWQgdHlwZXMgbGl2ZXMgaW4gdGhlIHNlcnZlcidzXG4gKiBgL2VtYmVkLzp0eXBlLzppZGAgcmVzb2x2ZXIgcmVnaXN0cnksIGFuZCBhbiB1bmtub3duIHR5cGUgc2ltcGx5XG4gKiA0MDRzLiBUaGUgdHdvIHR5cGVzIHRoZSBzZXJ2ZXIgc2hpcHMgdG9kYXkgYXJlIGBcImNoYXJ0XCJgIGFuZFxuICogYFwiZGF0YVwiYC5cbiAqL1xuZXhwb3J0IHR5cGUgTWFya2VyVHlwZSA9IHN0cmluZztcblxuLyoqXG4gKiBTaW5nbGUgbWF0Y2hlciBmb3IgQU5ZIGVtYmVkIG1hcmtlciwgcmVnYXJkbGVzcyBvZiB0eXBlLiBNYXRjaGVzXG4gKiBgWzx0eXBlPjo8aWQ+XWAuIENhcHR1cmUgZ3JvdXAgMSBpcyB0aGUgbWFya2VyIHR5cGUgdG9rZW4gKGUuZy5cbiAqIGBjaGFydGAsIGBkYXRhYCk7IGdyb3VwIDIgaXMgdGhlIGlkIC0gYW55IHJ1biBvZiBub24tYnJhY2tldCxcbiAqIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIE5PVCBjb25zdHJhaW5lZCB0byBhIFVVSUQgc2hhcGUuXG4gKlxuICogTmVpdGhlciB0aGUgdHlwZSBub3IgdGhlIGlkIHNoYXBlIGlzIGVudW1lcmF0ZWQgaGVyZS4gVGhlIHR5cGUgaXNcbiAqIGxlZnQgb3BlbiBiZWNhdXNlIHRoZSBzZXJ2ZXIncyByZXNvbHZlciByZWdpc3RyeSBkZWNpZGVzIHdoaWNoXG4gKiB0eXBlcyBhcmUgcmVhbCBhbmQgNDA0cyB0aGUgcmVzdCwgc28gYSBuZXcgZW1iZWQga2luZCBuZWVkcyBub1xuICogZ3JhbW1hciBjaGFuZ2UuIFRoZSBpZCBpcyBsZWZ0IGJyb2FkIG9uIHB1cnBvc2U6IGEgZmFicmljYXRlZFxuICogbWFya2VyIHRoZSBtb2RlbCBlbWl0cyBmcm9tIGEgbGFiZWwgKGUuZy4gYFtjaGFydDpwbGFjZWhvbGRlcl1gKVxuICogTVVTVCBzdGlsbCBtYXRjaCBzbyB0aGUgaG9zdCBVSSBjYW4gY29uc3VtZSBhbmQgb2JzY3VyZSBpdCByYXRoZXJcbiAqIHRoYW4gbGVhayB0aGUgbGl0ZXJhbCBgW2NoYXJ0Oi4uLl1gIHRleHQgaW50byB0aGUgcHJvc2UuIFRoZSBpZCBpc1xuICogdGhlbiB2YWxpZGF0ZWQgd2l0aCB7QGxpbmsgaXNVdWlkfSBkb3duc3RyZWFtOyBub24tVVVJRCBpZHMgcmVzb2x2ZVxuICogdG8gbm8gZW1iZWQuXG4gKlxuICogU2FmZSB0byBzaGFyZSBhcyBhIGAvZ2AgY29uc3RhbnQ6IGl0J3Mgb25seSBldmVyIGNvbnN1bWVkIHZpYVxuICoge0BsaW5rIFN0cmluZy5wcm90b3R5cGUubWF0Y2hBbGx9LCB3aGljaCBjbG9uZXMgdGhlIHJlZ2V4IGFuZFxuICogbmV2ZXIgYWR2YW5jZXMgdGhpcyBvYmplY3QncyBgbGFzdEluZGV4YC4gKEEgYC5leGVjKClgL2AudGVzdCgpYFxuICogbG9vcCB3b3VsZCBuZWVkIGEgZnJlc2ggcmVnZXggZWFjaCB0aW1lLCBidXQgd2UgZG9uJ3QgZG8gdGhhdC4pXG4gKi9cbmNvbnN0IE1BUktFUl9SRSA9IC9cXFsoW0EtWmEtel1bQS1aYS16MC05Xy1dKik6KFteXFxdXFxzXSspXFxdL2c7XG5cbi8qKlxuICogVVVJRCBtYXRjaGVyIChgOC00LTQtNC0xMmAgaGV4LCBhbnkgdmVyc2lvbikgYW5jaG9yZWQgdG8gdGhlIHdob2xlXG4gKiBzdHJpbmcuIENvdmVycyB2NCBjaGFydCBpZHMgYW5kIHRpbWUtb3JkZXJlZCAodjctc3R5bGUpIHN0YXRlbWVudFxuICogaWRzIGFsaWtlLiBVc2VkIGJ5IHtAbGluayBpc1V1aWR9IHRvIHRlbGwgYSBnZW51aW5lIGVtYmVkIGlkIGFwYXJ0XG4gKiBmcm9tIGEgbGFiZWwgdGhlIG1vZGVsIGZhYnJpY2F0ZWQgaW50byBhIG1hcmtlci5cbiAqL1xuY29uc3QgVVVJRF9SRSA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC9pO1xuXG4vKipcbiAqIFdoZXRoZXIgYGlkYCBpcyBhIFVVSUQtc2hhcGVkIGVtYmVkIGlkLiBUaGUgbWFya2VyIGdyYW1tYXJcbiAqICh7QGxpbmsgTUFSS0VSX1JFfSkgbWF0Y2hlcyBhbnkgbm9uLWJyYWNrZXQgaWQgdG9rZW4gc28gZmFicmljYXRlZFxuICogbWFya2VycyBkb24ndCBsZWFrIGFzIGxpdGVyYWwgcHJvc2U7IHRoaXMgaXMgdGhlIGd1YXJkIGNhbGxlcnMgcnVuXG4gKiB0byBkZWNpZGUgd2hldGhlciBhbiBpZCBpcyBhIHJlYWwgZW1iZWQgKHJlbmRlciB0aGUgc2xvdCkgb3IgYVxuICogYm9ndXMgbGFiZWwgdG8gb2JzY3VyZSAoZHJvcCB0aGUgbWFya2VyIGVudGlyZWx5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVXVpZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBVVUlEX1JFLnRlc3QoaWQpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBleGFjdCBlbWJlZCBtYXJrZXIgdGhlIGFnZW50IHNob3VsZCBwbGFjZSBpbiBwcm9zZS5cbiAqXG4gKiBUb29sIHJlc3VsdHMgcmV0dXJuIHRoaXMgY29tcGxldGUgdmFsdWUgc28gdGhlIG1vZGVsIGNvcGllcyBvbmUgb3BhcXVlIHRva2VuXG4gKiByYXRoZXIgdGhhbiByZWNvbnN0cnVjdGluZyBpdCBmcm9tIGB0eXBlYCBwbHVzIGBpZGAuIFJlY29uc3RydWN0aW9uIGlzIHdoZXJlXG4gKiB2YWxpZC1sb29raW5nIGJ1dCBuZXZlci1taW50ZWQgVVVJRHMgZW50ZXIgdHJhbnNjcmlwdHMgYW5kIHByb2R1Y2UgYSA0MDQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRNYXJrZXIodHlwZTogTWFya2VyVHlwZSwgaWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgWyR7dHlwZX06JHtpZH1dYDtcbn1cblxuLyoqIE9uZSBtYXJrZXIgZm91bmQgaW4gYWdlbnQgcHJvc2UsIHdpdGggaXRzIHNvdXJjZSBzcGFuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRNYXJrZXIge1xuICAvKiogTWFya2VyIGtpbmQgdG9rZW4gKGUuZy4gYGNoYXJ0YCwgYGRhdGFgKTsgc2VlIHtAbGluayBNYXJrZXJUeXBlfS4gKi9cbiAgdHlwZTogTWFya2VyVHlwZTtcbiAgLyoqIFJhdyBpZCBjYXB0dXJlZCBmcm9tIHRoZSBtYXJrZXIgKGNoYXJ0IGlkIG9yIHN0YXRlbWVudCBpZCkuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBJbmRleCBvZiB0aGUgbWFya2VyJ3MgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzb3VyY2UgdGV4dC4gKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIEluZGV4IG9uZSBwYXN0IHRoZSBtYXJrZXIncyBsYXN0IGNoYXJhY3Rlci4gKi9cbiAgZW5kOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyc2UgZXZlcnkgZW1iZWQgbWFya2VyIG91dCBvZiBgdGV4dGAsIGluIHNvdXJjZSBvcmRlci4gQSBzaW5nbGVcbiAqIHJlZ2V4IHBhc3MgbWVhbnMgbWF0Y2hlcyBuZXZlciBvdmVybGFwLCBzbyBjYWxsZXJzIGNhbiBzcGxpY2UgdGhlXG4gKiBzcGFucyBkaXJlY3RseSB3aXRob3V0IGEgc29ydC9kZWR1cGUgc3RlcC4gVGhpcyBpcyB0aGUgb25lIGVudHJ5XG4gKiBwb2ludCBmb3IgbWFya2VyIHBhcnNpbmc6IHR5cGUgYnJhbmNoaW5nIHJ1bnMgb24gdGhlIHJldHVybmVkXG4gKiBtYXJrZXJzLiBUaGUgZ3JhbW1hciAoe0BsaW5rIE1BUktFUl9SRX0pIG1hdGNoZXMgYW55IG5vbi1icmFja2V0IGlkXG4gKiB0b2tlbiwgc28gYSByZXR1cm5lZCB7QGxpbmsgUGFyc2VkTWFya2VyLmlkfSBpcyBOT1QgZ3VhcmFudGVlZCB0b1xuICogYmUgYSByZWFsIGVtYmVkIGlkIC0gcnVuIGl0IHRocm91Z2gge0BsaW5rIGlzVXVpZH0gdG8gdGVsbCBhXG4gKiBnZW51aW5lIGVtYmVkIGFwYXJ0IGZyb20gYSBmYWJyaWNhdGVkIGxhYmVsLCB3aGljaCB0aGUgY2FsbGVyIHRoZW5cbiAqIG9ic2N1cmVzIHJhdGhlciB0aGFuIHJlbmRlcmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTWFya2Vycyh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRNYXJrZXJbXSB7XG4gIGNvbnN0IG91dDogUGFyc2VkTWFya2VyW10gPSBbXTtcbiAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKE1BUktFUl9SRSkpIHtcbiAgICBjb25zdCBzdGFydCA9IG1hdGNoLmluZGV4ID8/IDA7XG4gICAgb3V0LnB1c2goe1xuICAgICAgLy8gR3JvdXAgMSBpcyB0aGUgYDx0eXBlPmAgdG9rZW47IHRoZSBzZXJ2ZXIncyBlbWJlZCByZWdpc3RyeVxuICAgICAgLy8gKG5vdCB0aGlzIHBhcnNlcikgZGVjaWRlcyB3aGV0aGVyIGl0J3Mgc3VwcG9ydGVkLlxuICAgICAgdHlwZTogbWF0Y2hbMV0gPz8gXCJcIixcbiAgICAgIGlkOiBtYXRjaFsyXSA/PyBcIlwiLFxuICAgICAgc3RhcnQsXG4gICAgICBlbmQ6IHN0YXJ0ICsgbWF0Y2hbMF0ubGVuZ3RoLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogU3RyaXAgYSB0cmFpbGluZyBwYXJ0aWFsIG1hcmtlciAoYFtjaGFydGAsIGBbZGF0YTowMWYxYCwgLi4uKSB0aGF0XG4gKiBoYXNuJ3QgcmVjZWl2ZWQgaXRzIGNsb3NpbmcgYF1gIHlldC4gV2hpbGUgdGhlIG1vZGVsIHN0cmVhbXNcbiAqIHRleHQtZGVsdGFzIGEgbWFya2VyIGFycml2ZXMgYWNyb3NzIHNldmVyYWwgY2h1bmtzLCBhbmQgcmVuZGVyaW5nXG4gKiBlYWNoIGludGVyaW0gc3RhdGUgd291bGQgYnJpZWZseSBmbGFzaCB0aGUgbGl0ZXJhbCBgW2NoYXJ0OmFiYy1gXG4gKiBwcmVmaXggYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNrZXQgc3dhcHMgaXQgZm9yIGEgc2xvdC4gSGlkaW5nIGFueVxuICogdHJhaWxpbmcgYFs8bm9uLXdoaXRlc3BhY2Utbm9uLWJyYWNrZXQ+Li4uYCBzdWZmaXgga2VlcHMgdGhlIHByb3NlXG4gKiBzdGFibGUgdW50aWwgZWl0aGVyIGEgYF1gIChmdWxsIG1hcmtlcikgb3Igd2hpdGVzcGFjZSAoZGVmaW5pdGVseVxuICogbm90IGEgbWFya2VyKSBsYW5kcy4gUGVyc2lzdGVkIHRyYW5zY3JpcHRzIG5ldmVyIGVuZCBtaWQtbWFya2VyLFxuICogc28gdGhpcyBpcyBhIG5vLW9wIG9uIHJlbG9hZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwSW5jb21wbGV0ZU1hcmtlclRhaWwodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSgvXFxbW15cXHNbXFxdXSokLywgXCJcIik7XG59XG4iXX0=
File without changes
File without changes