@nodetool-ai/dsl 0.8.2 → 0.8.4-a24.1

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.
Files changed (67) hide show
  1. package/README.md +6 -0
  2. package/dist/.nodetool-build-stamp +1 -1
  3. package/dist/core.d.ts.map +1 -1
  4. package/dist/core.js +7 -0
  5. package/dist/core.js.map +1 -1
  6. package/dist/export.d.ts.map +1 -1
  7. package/dist/export.js +7 -5
  8. package/dist/export.js.map +1 -1
  9. package/dist/flow/core.d.ts +3 -0
  10. package/dist/flow/core.d.ts.map +1 -1
  11. package/dist/flow/core.js +12 -2
  12. package/dist/flow/core.js.map +1 -1
  13. package/dist/flow/generated/nodetool.image.d.ts +1 -1
  14. package/dist/flow/generated/nodetool.image.d.ts.map +1 -1
  15. package/dist/flow/generated/nodetool.manimgx.d.ts +52 -0
  16. package/dist/flow/generated/nodetool.manimgx.d.ts.map +1 -0
  17. package/dist/flow/generated/nodetool.manimgx.js +14 -0
  18. package/dist/flow/generated/nodetool.manimgx.js.map +1 -0
  19. package/dist/flow/generated/nodetool.storyboard.d.ts +17 -0
  20. package/dist/flow/generated/nodetool.storyboard.d.ts.map +1 -1
  21. package/dist/flow/generated/nodetool.storyboard.js +3 -0
  22. package/dist/flow/generated/nodetool.storyboard.js.map +1 -1
  23. package/dist/flow/generated/nodetool.video.d.ts +1 -0
  24. package/dist/flow/generated/nodetool.video.d.ts.map +1 -1
  25. package/dist/flow/generated/nodetool.video.js.map +1 -1
  26. package/dist/flow/generated/nodetool.workflows.app_node.d.ts +11 -0
  27. package/dist/flow/generated/nodetool.workflows.app_node.d.ts.map +1 -0
  28. package/dist/flow/generated/nodetool.workflows.app_node.js +11 -0
  29. package/dist/flow/generated/nodetool.workflows.app_node.js.map +1 -0
  30. package/dist/flow/index.d.ts +1 -1
  31. package/dist/flow/index.d.ts.map +1 -1
  32. package/dist/flow/index.js +1 -1
  33. package/dist/flow/index.js.map +1 -1
  34. package/dist/generated/index.d.ts +2 -0
  35. package/dist/generated/index.d.ts.map +1 -1
  36. package/dist/generated/index.js +2 -0
  37. package/dist/generated/index.js.map +1 -1
  38. package/dist/generated/nodetool.image.d.ts +1 -1
  39. package/dist/generated/nodetool.image.d.ts.map +1 -1
  40. package/dist/generated/nodetool.manimgx.d.ts +56 -0
  41. package/dist/generated/nodetool.manimgx.d.ts.map +1 -0
  42. package/dist/generated/nodetool.manimgx.js +12 -0
  43. package/dist/generated/nodetool.manimgx.js.map +1 -0
  44. package/dist/generated/nodetool.storyboard.d.ts +17 -0
  45. package/dist/generated/nodetool.storyboard.d.ts.map +1 -1
  46. package/dist/generated/nodetool.storyboard.js +3 -0
  47. package/dist/generated/nodetool.storyboard.js.map +1 -1
  48. package/dist/generated/nodetool.video.d.ts +1 -0
  49. package/dist/generated/nodetool.video.d.ts.map +1 -1
  50. package/dist/generated/nodetool.video.js.map +1 -1
  51. package/dist/generated/nodetool.workflows.app_node.d.ts +10 -0
  52. package/dist/generated/nodetool.workflows.app_node.d.ts.map +1 -0
  53. package/dist/generated/nodetool.workflows.app_node.js +6 -0
  54. package/dist/generated/nodetool.workflows.app_node.js.map +1 -0
  55. package/dist/index.d.ts +1 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +1 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/registry.d.ts +5 -15
  60. package/dist/registry.d.ts.map +1 -1
  61. package/dist/registry.js +32 -58
  62. package/dist/registry.js.map +1 -1
  63. package/dist/script-export.d.ts +57 -0
  64. package/dist/script-export.d.ts.map +1 -0
  65. package/dist/script-export.js +632 -0
  66. package/dist/script-export.js.map +1 -0
  67. package/package.json +11 -15
@@ -0,0 +1,6 @@
1
+ // Auto-generated — do not edit manually
2
+ import { createNode } from "../core.js";
3
+ export function app(inputs, options) {
4
+ return createNode("nodetool.workflows.app_node.App", inputs, { id: options?.id, outputNames: [], outputTypes: {}, streaming: true, inputMode: "buffered" });
5
+ }
6
+ //# sourceMappingURL=nodetool.workflows.app_node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodetool.workflows.app_node.js","sourceRoot":"","sources":["../../src/generated/nodetool.workflows.app_node.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,UAAU,EAA6C,MAAM,YAAY,CAAC;AAYnF,MAAM,UAAU,GAAG,CAAC,MAAiB,EAAE,OAAqB;IAC1D,OAAO,UAAU,CAAC,iCAAiC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;AAC9J,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./core.js";
2
2
  export * from "./export.js";
3
+ export * from "./script-export.js";
3
4
  export * from "./types.js";
4
5
  export * from "./generated/index.js";
5
6
  export * from "./authoring.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from "./core.js";
2
2
  export * from "./export.js";
3
+ export * from "./script-export.js";
3
4
  export * from "./types.js";
4
5
  export * from "./generated/index.js";
5
6
  export * from "./authoring.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AAErC,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,29 +1,19 @@
1
- /**
2
- * Registry and executor resolution shared by the graph DSL (`run()`) and the
3
- * native flow API. One builtin-pack list, two consumers.
4
- */
5
1
  import { NodeRegistry } from "@nodetool-ai/node-sdk";
6
2
  import { type NodeExecutor, type PythonBridgeBase } from "@nodetool-ai/runtime";
7
3
  import type { NodeDescriptor } from "@nodetool-ai/protocol";
8
- /**
9
- * The registry of node packs shipped with the DSL. Built once per process:
10
- * `run()` used to rebuild it per call, and the flow API calls this per node
11
- * call, where re-importing six packages would dominate the cost of the call.
12
- *
13
- * Every pack except `base-nodes` is optional — an environment that cannot load
14
- * one (missing native dependency, platform-specific pack) keeps the rest.
15
- */
4
+ /** Build the resolvable legacy DSL packs once, retaining missing-pack metadata. */
16
5
  export declare function buildBuiltinRegistry(): Promise<NodeRegistry>;
17
6
  /**
18
- * Can any in-process TS registry resolve this node type? A `false` answer makes
19
- * the type a Python candidate, which is what decides whether a worker bridge is
20
- * worth connecting.
7
+ * Types handled by the TS registry never require a Python worker. Catalog
8
+ * types are refused by the executor resolver rather than sent to Python.
21
9
  */
22
10
  export declare function createHasTsExecutor(registry: NodeRegistry | undefined, builtinRegistry: NodeRegistry): (nodeType: string) => boolean;
23
11
  export interface ExecutorResolverOptions {
24
12
  /** Custom node registry, consulted before the global and builtin ones. */
25
13
  registry?: NodeRegistry | undefined;
26
14
  }
15
+ /** Refuse only catalog entries present in the selected registries, without constructing a node. */
16
+ export declare function assertNodePackAvailable(nodeType: string, opts: ExecutorResolverOptions | undefined, builtinRegistry: NodeRegistry): void;
27
17
  /**
28
18
  * The resolution chain: caller override → `NodeRegistry.global` → builtin packs
29
19
  * → the Python bridge. Unknown types throw.
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,YAAY,CAAC,CAG5D;AAmDD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,eAAe,EAAE,YAAY,GAC5B,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAK/B;AAED,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,eAAe,EAAE,YAAY,EAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAC9B,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAexC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,mFAAmF;AACnF,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,YAAY,CAAC,CAG5D;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,eAAe,EAAE,YAAY,GAC5B,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAQ/B;AAED,MAAM,WAAW,uBAAuB;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACrC;AAED,mGAAmG;AACnG,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,eAAe,EAAE,YAAY,GAC5B,IAAI,CAWN;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,uBAAuB,GAAG,SAAS,EACzC,eAAe,EAAE,YAAY,EAC7B,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAC9B,CAAC,IAAI,EAAE,cAAc,KAAK,YAAY,CAqBxC"}
package/dist/registry.js CHANGED
@@ -1,79 +1,47 @@
1
1
  /**
2
- * Registry and executor resolution shared by the graph DSL (`run()`) and the
3
- * native flow API. One builtin-pack list, two consumers.
2
+ * Registry and executor resolution shared by the graph DSL and native flow API.
4
3
  */
4
+ import { createMissingPackError, registerAvailablePacks } from "@nodetool-ai/node-catalog";
5
5
  import { NodeRegistry } from "@nodetool-ai/node-sdk";
6
6
  import { resolvePythonNodeExecutor } from "@nodetool-ai/runtime";
7
7
  let builtinRegistryPromise = null;
8
- /**
9
- * The registry of node packs shipped with the DSL. Built once per process:
10
- * `run()` used to rebuild it per call, and the flow API calls this per node
11
- * call, where re-importing six packages would dominate the cost of the call.
12
- *
13
- * Every pack except `base-nodes` is optional — an environment that cannot load
14
- * one (missing native dependency, platform-specific pack) keeps the rest.
15
- */
8
+ /** Build the resolvable legacy DSL packs once, retaining missing-pack metadata. */
16
9
  export function buildBuiltinRegistry() {
17
10
  builtinRegistryPromise ??= loadBuiltinRegistry();
18
11
  return builtinRegistryPromise;
19
12
  }
20
13
  async function loadBuiltinRegistry() {
21
14
  const builtinRegistry = new NodeRegistry();
22
- const { registerBaseNodes } = await import("@nodetool-ai/base-nodes");
23
- registerBaseNodes(builtinRegistry);
24
- try {
25
- const { registerWhisperCppNodes } = await import("@nodetool-ai/whisper-cpp");
26
- registerWhisperCppNodes(builtinRegistry);
27
- }
28
- catch {
29
- // Some environments do not have the whisper.cpp node package installed.
30
- }
31
- try {
32
- const { registerElevenLabsNodes } = await import("@nodetool-ai/elevenlabs-nodes");
33
- registerElevenLabsNodes(builtinRegistry);
34
- }
35
- catch {
36
- // Some environments do not have the ElevenLabs node package in a runnable state.
37
- }
38
- try {
39
- const { registerMinimaxNodes } = await import("@nodetool-ai/minimax-nodes");
40
- registerMinimaxNodes(builtinRegistry);
41
- }
42
- catch {
43
- // Some environments do not have the MiniMax node package in a runnable state.
44
- }
45
- try {
46
- const { registerTransformersJsNodes } = await import("@nodetool-ai/transformers-js-nodes");
47
- registerTransformersJsNodes(builtinRegistry);
48
- }
49
- catch {
50
- // Some environments do not have the Transformers.js node package in a runnable state.
51
- }
52
- try {
53
- const { registerHuggingFaceNodes } = await import("@nodetool-ai/huggingface-nodes");
54
- registerHuggingFaceNodes(builtinRegistry);
55
- }
56
- catch {
57
- // Some environments do not have the Hugging Face node package in a runnable state.
58
- }
59
- try {
60
- const { registerReveNodes } = await import("@nodetool-ai/reve-nodes");
61
- registerReveNodes(builtinRegistry);
62
- }
63
- catch {
64
- // Some environments do not have the Reve node package in a runnable state.
65
- }
15
+ await registerAvailablePacks(builtinRegistry, {
16
+ includeOptionalPacks: true,
17
+ excludedPackIds: ["fal", "kie", "topaz", "atlascloud", "higgsfield", "together", "replicate"]
18
+ });
66
19
  return builtinRegistry;
67
20
  }
68
21
  /**
69
- * Can any in-process TS registry resolve this node type? A `false` answer makes
70
- * the type a Python candidate, which is what decides whether a worker bridge is
71
- * worth connecting.
22
+ * Types handled by the TS registry never require a Python worker. Catalog
23
+ * types are refused by the executor resolver rather than sent to Python.
72
24
  */
73
25
  export function createHasTsExecutor(registry, builtinRegistry) {
74
26
  return (nodeType) => Boolean(registry?.has(nodeType)) ||
75
27
  NodeRegistry.global.has(nodeType) ||
76
- builtinRegistry.has(nodeType);
28
+ builtinRegistry.has(nodeType) ||
29
+ registry?.availability(nodeType) === "catalog" ||
30
+ NodeRegistry.global.availability(nodeType) === "catalog" ||
31
+ builtinRegistry.availability(nodeType) === "catalog";
32
+ }
33
+ /** Refuse only catalog entries present in the selected registries, without constructing a node. */
34
+ export function assertNodePackAvailable(nodeType, opts, builtinRegistry) {
35
+ const registries = [opts?.registry, NodeRegistry.global, builtinRegistry];
36
+ if (registries.some((registry) => registry?.has(nodeType))) {
37
+ return;
38
+ }
39
+ for (const registry of registries) {
40
+ const entry = registry?.catalogEntry(nodeType);
41
+ if (entry && registry?.availability(nodeType) === "catalog") {
42
+ throw createMissingPackError(entry.pack, [nodeType]);
43
+ }
44
+ }
77
45
  }
78
46
  /**
79
47
  * The resolution chain: caller override → `NodeRegistry.global` → builtin packs
@@ -90,6 +58,12 @@ export function createExecutorResolver(opts, builtinRegistry, bridge) {
90
58
  if (builtinRegistry.has(node.type)) {
91
59
  return builtinRegistry.resolve(node);
92
60
  }
61
+ for (const registry of [opts?.registry, NodeRegistry.global, builtinRegistry]) {
62
+ const entry = registry?.catalogEntry(node.type);
63
+ if (entry && registry?.availability(node.type) === "catalog") {
64
+ throw createMissingPackError(entry.pack, [node.type]);
65
+ }
66
+ }
93
67
  const py = resolvePythonNodeExecutor(bridge, node);
94
68
  if (py)
95
69
  return py;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Workflow → JavaScript script.
3
+ *
4
+ * Turns a saved workflow graph into a script that calls each node as an async
5
+ * function, in dependency order: `await` is the edge and a variable is the
6
+ * wire. Two targets share one body and differ only in how a node is called:
7
+ *
8
+ * sandbox — a body for a JS script document or a Code node. Each call
9
+ * goes through the `@nodetool-ai/sandbox-flow` pack's untyped
10
+ * bridge, which crosses to the host and runs on the invoking
11
+ * run's context.
12
+ * node — a standalone `.mjs` for plain Node.js. Each call runs in process
13
+ * through `@nodetool-ai/dsl/flow`, with secrets read from the
14
+ * environment.
15
+ *
16
+ * Both reach the same native-flow backend (docs/dsl-native-flow-design.md), so
17
+ * a node behaves the same in either. What a call cannot express is refused in
18
+ * the generated script itself: a script with an unsupported node throws before
19
+ * it runs anything, naming every node and the reason.
20
+ */
21
+ import { type NodeMetadata } from "@nodetool-ai/node-sdk";
22
+ export type ScriptTarget = "sandbox" | "node";
23
+ export interface WorkflowToScriptOptions {
24
+ target: ScriptTarget;
25
+ workflowName?: string | null;
26
+ /**
27
+ * Metadata for a node type. Defaults to the node catalog; a server
28
+ * passes its registry so provider and pack nodes are described too.
29
+ */
30
+ getMetadata?: (nodeType: string) => NodeMetadata | undefined;
31
+ }
32
+ /** A declared script port, in the JS script document's `{name, type}` shape. */
33
+ export interface ScriptPort {
34
+ name: string;
35
+ type: string;
36
+ }
37
+ export interface ScriptIssue {
38
+ node_id: string;
39
+ node_type: string;
40
+ message: string;
41
+ }
42
+ export interface WorkflowScript {
43
+ code: string;
44
+ /** Workflow inputs, read as `inputs.<name>`. */
45
+ inputs: ScriptPort[];
46
+ /** Workflow outputs, written with `output(name, …)` or `emit(name, …)`. */
47
+ outputs: ScriptPort[];
48
+ /** Nodes the script refuses to run. Non-empty means the script throws. */
49
+ unsupported: ScriptIssue[];
50
+ }
51
+ interface WorkflowLike {
52
+ nodes: Array<Record<string, unknown>>;
53
+ edges: Array<Record<string, unknown>>;
54
+ }
55
+ export declare function workflowToScript(graph: WorkflowLike, options: WorkflowToScriptOptions): WorkflowScript;
56
+ export {};
57
+ //# sourceMappingURL=script-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-export.d.ts","sourceRoot":"","sources":["../src/script-export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9C,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAC;CAC9D;AAED,gFAAgF;AAChF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,2EAA2E;IAC3E,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,0EAA0E;IAC1E,WAAW,EAAE,WAAW,EAAE,CAAC;CAC5B;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvC;AA0VD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,uBAAuB,GAC/B,cAAc,CAsShB"}