liminal 0.10.0 → 0.11.0

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 (90) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/L.ts +8 -2
  3. package/LEvent.ts +13 -7
  4. package/Sequence.ts +14 -0
  5. package/Strand.ts +18 -39
  6. package/assistant.ts +3 -4
  7. package/assistantStruct.ts +2 -1
  8. package/branch.ts +26 -0
  9. package/clear.ts +15 -0
  10. package/dist/L.d.ts +8 -2
  11. package/dist/L.js +8 -2
  12. package/dist/L.js.map +1 -1
  13. package/dist/LEvent.d.ts +12 -8
  14. package/dist/LEvent.js +8 -5
  15. package/dist/LEvent.js.map +1 -1
  16. package/dist/Sequence.d.ts +2 -0
  17. package/dist/Sequence.js +2 -0
  18. package/dist/Sequence.js.map +1 -0
  19. package/dist/Strand.d.ts +18 -13
  20. package/dist/Strand.js +2 -20
  21. package/dist/Strand.js.map +1 -1
  22. package/dist/assistant.js +3 -4
  23. package/dist/assistant.js.map +1 -1
  24. package/dist/assistantStruct.js +2 -1
  25. package/dist/assistantStruct.js.map +1 -1
  26. package/dist/branch.d.ts +4 -0
  27. package/dist/branch.js +18 -0
  28. package/dist/branch.js.map +1 -0
  29. package/dist/clear.d.ts +5 -0
  30. package/dist/clear.js +15 -0
  31. package/dist/clear.js.map +1 -0
  32. package/dist/events.d.ts +1 -1
  33. package/dist/events.js +1 -1
  34. package/dist/events.js.map +1 -1
  35. package/dist/index.d.ts +1 -0
  36. package/dist/index.js +1 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/internal/JsonValue.d.ts +5 -0
  39. package/dist/internal/JsonValue.js +2 -0
  40. package/dist/internal/JsonValue.js.map +1 -0
  41. package/dist/{Taggable.d.ts → internal/Taggable.d.ts} +1 -1
  42. package/dist/internal/Taggable.js.map +1 -0
  43. package/dist/messages.d.ts +5 -0
  44. package/dist/messages.js +5 -0
  45. package/dist/messages.js.map +1 -0
  46. package/dist/pretty.d.ts +2 -0
  47. package/dist/pretty.js +37 -0
  48. package/dist/pretty.js.map +1 -0
  49. package/dist/reduce.d.ts +2 -4
  50. package/dist/reduce.js +10 -29
  51. package/dist/reduce.js.map +1 -1
  52. package/dist/sequence_.d.ts +2 -0
  53. package/dist/sequence_.js +5 -0
  54. package/dist/sequence_.js.map +1 -0
  55. package/dist/strand_.d.ts +4 -0
  56. package/dist/strand_.js +18 -0
  57. package/dist/strand_.js.map +1 -0
  58. package/dist/system.d.ts +5 -0
  59. package/dist/system.js +11 -0
  60. package/dist/system.js.map +1 -0
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/dist/user.d.ts +1 -1
  63. package/dist/user.js +1 -1
  64. package/dist/user.js.map +1 -1
  65. package/dist/userJson.d.ts +6 -0
  66. package/dist/userJson.js +8 -0
  67. package/dist/userJson.js.map +1 -0
  68. package/events.ts +1 -1
  69. package/index.ts +1 -0
  70. package/internal/JsonValue.ts +5 -0
  71. package/{Taggable.ts → internal/Taggable.ts} +1 -1
  72. package/messages.ts +9 -0
  73. package/package.json +8 -6
  74. package/pretty.ts +41 -0
  75. package/reduce.ts +21 -45
  76. package/sequence_.ts +9 -0
  77. package/strand_.ts +25 -0
  78. package/system.ts +13 -0
  79. package/user.ts +1 -1
  80. package/userJson.ts +12 -0
  81. package/dist/Taggable.js.map +0 -1
  82. package/dist/turn.d.ts +0 -7
  83. package/dist/turn.js +0 -21
  84. package/dist/turn.js.map +0 -1
  85. package/dist/unsafeSet.d.ts +0 -5
  86. package/dist/unsafeSet.js +0 -13
  87. package/dist/unsafeSet.js.map +0 -1
  88. package/turn.ts +0 -25
  89. package/unsafeSet.ts +0 -15
  90. /package/dist/{Taggable.js → internal/Taggable.js} +0 -0
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { Strand } from "./Strand.js";
3
+ /** Get a copy of the current list of messages. */
4
+ export const messages = Effect.map(Strand, ({ messages: [...messages] }) => messages);
5
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../messages.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,kDAAkD;AAClD,MAAM,CAAC,MAAM,QAAQ,GAAiD,MAAM,CAAC,GAAG,CAC9E,MAAM,EACN,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAC1C,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { LEvent } from "./LEvent.ts";
2
+ export declare const pretty: (event: typeof LEvent["Type"]) => string;
package/dist/pretty.js ADDED
@@ -0,0 +1,37 @@
1
+ const GRAY = "\x1b[90m";
2
+ const RESET = "\x1b[0m";
3
+ const BOLD = "\x1b[1m";
4
+ const GRAY_BG = "\x1b[47m";
5
+ export const pretty = (event) => {
6
+ let text = `${GRAY}${event._tag}${RESET}`;
7
+ switch (event._tag) {
8
+ case "MessagesAppended": {
9
+ text += event.messages.map(formatMessage).join("\n");
10
+ break;
11
+ }
12
+ case "MessagesCleared": {
13
+ text += `\n${event.cleared.length} messages cleared.`;
14
+ break;
15
+ }
16
+ }
17
+ return text;
18
+ };
19
+ const formatMessage = ({ _tag, parts }) => {
20
+ let value = "";
21
+ for (const part of parts) {
22
+ value += `\n${BOLD}${_tag}\n${GRAY_BG}`;
23
+ switch (part._tag) {
24
+ case "TextPart": {
25
+ value += `${part.text}`;
26
+ break;
27
+ }
28
+ default: {
29
+ value += `${JSON.stringify(part, null, 2)}`;
30
+ break;
31
+ }
32
+ }
33
+ value += RESET;
34
+ }
35
+ return value;
36
+ };
37
+ //# sourceMappingURL=pretty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pretty.js","sourceRoot":"","sources":["../pretty.ts"],"names":[],"mappings":"AAGA,MAAM,IAAI,GAAG,UAAU,CAAA;AACvB,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,IAAI,GAAG,SAAS,CAAA;AACtB,MAAM,OAAO,GAAG,UAAU,CAAA;AAE1B,MAAM,CAAC,MAAM,MAAM,GAA6C,CAAC,KAAK,EAAE,EAAE;IACxE,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,EAAE,CAAA;IACzC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACpD,MAAK;QACP,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,IAAI,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,oBAAoB,CAAA;YACrD,MAAK;QACP,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAW,EAAU,EAAE;IACzD,IAAI,KAAK,GAAG,EAAE,CAAA;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,CAAA;QACvC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBACvB,MAAK;YACP,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,KAAK,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;gBAC3C,MAAK;YACP,CAAC;QACH,CAAC;QACD,KAAK,IAAI,KAAK,CAAA;IAChB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
package/dist/reduce.d.ts CHANGED
@@ -1,6 +1,4 @@
1
1
  import * as Effect from "effect/Effect";
2
- import * as Option from "effect/Option";
3
- import type { YieldWrap } from "effect/Utils";
4
2
  import { Strand } from "./Strand.ts";
5
- /** Reduce the current strand's messages. */
6
- export declare const reduce: <Y extends YieldWrap<Effect.Effect<any, any, any>>, A, E, R>(reducer: () => Generator<Y, Effect.Effect<Option.Option<A>, E, R>, never>) => Effect.Effect<void, ([Y] extends [never] ? never : [Y] extends [YieldWrap<Effect.Effect<infer _A, infer E, infer _R>>] ? E : never) | E, Strand | ([Y] extends [never] ? never : [Y] extends [YieldWrap<Effect.Effect<infer _A, infer _E, infer R>>] ? R : never) | R>;
3
+ /** Sequentially reduce the current strand's messages in chronological order. */
4
+ export declare const reduce: <E, R, E1, R1>(reducer: Effect.Effect<Effect.Effect<void, E1, R1>, E, R>) => Effect.Effect<void, E | E1, R | R1 | Strand>;
package/dist/reduce.js CHANGED
@@ -1,39 +1,20 @@
1
- import { Message } from "@effect/ai/AiInput";
2
1
  import * as Effect from "effect/Effect";
3
- import * as Option from "effect/Option";
4
- import * as PubSub from "effect/PubSub";
5
2
  import { append } from "./append.js";
6
- import { LEvent, MessagesReduced } from "./LEvent.js";
3
+ import { clear } from "./clear.js";
7
4
  import { Strand } from "./Strand.js";
8
- import { unsafeSet } from "./unsafeSet.js";
9
- /** Reduce the current strand's messages. */
5
+ import { strand } from "./strand_.js";
6
+ /** Sequentially reduce the current strand's messages in chronological order. */
10
7
  export const reduce = Effect.fnUntraced(function* (reducer) {
11
- const strand = yield* Strand;
12
- if (!strand.messages.length || strand.messages.length === 1)
8
+ const parent = yield* Strand;
9
+ if (!parent.messages.length || parent.messages.length === 1)
13
10
  return;
14
- const [m0, m1, ...mRest] = strand.messages;
15
- let prelude = yield* Effect
16
- .gen(function* () {
17
- yield* append(m0, m1);
18
- return yield* Effect.gen(reducer);
19
- })
20
- .pipe(Effect.provide(Strand.new()));
11
+ const [m0, m1, ...mRest] = parent.messages;
12
+ let acc = yield* strand(append(m0, m1), reducer);
21
13
  while (mRest.length) {
22
- prelude = yield* Effect
23
- .gen(function* () {
24
- yield* prelude;
25
- yield* append(mRest.pop());
26
- return yield* Effect.gen(reducer);
27
- })
28
- .pipe(Effect.provide(Strand.new()));
14
+ acc = yield* strand(acc, append(mRest.pop()), reducer);
29
15
  }
30
- const messages = [];
31
- yield* prelude.pipe(Effect.provideService(Strand, Strand.of({
32
- messages,
33
- events: yield* PubSub.unbounded(),
34
- })));
35
- const previous = yield* unsafeSet(messages);
36
- yield* strand.events.publish(MessagesReduced.make({ previous, messages }));
16
+ yield* clear;
17
+ yield* acc;
37
18
  return;
38
19
  });
39
20
  //# sourceMappingURL=reduce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reduce.js","sourceRoot":"","sources":["../reduce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,MAAM,GAQf,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,OAAO;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IACnE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC1C,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM;SACxB,GAAG,CAAC,QAAQ,CAAC;QACZ,KAAK,CAAC,CAAC,MAAM,CAAC,EAAG,EAAE,EAAG,CAAC,CAAA;QACvB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC,CAAC;SACD,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAC7B,CAAA;IACH,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM;aACpB,GAAG,CAAC,QAAQ,CAAC;YACZ,KAAK,CAAC,CAAC,OAAO,CAAA;YACd,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC,CAAA;YAC3B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC,CAAC;aACD,IAAI,CACH,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAC7B,CAAA;IACL,CAAC;IACD,MAAM,QAAQ,GAAmB,EAAE,CAAA;IACnC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CACvC,MAAM,EACN,MAAM,CAAC,EAAE,CAAC;QACR,QAAQ;QACR,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;KAC1C,CAAC,CACH,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC3C,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAC1B,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAC7C,CAAA;IACD,OAAM;AACR,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"reduce.js","sourceRoot":"","sources":["../reduce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAMf,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAC,OAAO;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IACnE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAA;IAC1C,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CACrB,MAAM,CAAC,EAAG,EAAE,EAAG,CAAC,EAChB,OAAO,CACR,CAAA;IACD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;QACpB,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CACjB,GAAG,EACH,MAAM,CAAC,KAAK,CAAC,GAAG,EAAG,CAAC,EACpB,OAAO,CACR,CAAA;IACH,CAAC;IACD,KAAK,CAAC,CAAC,KAAK,CAAA;IACZ,KAAK,CAAC,CAAC,GAAG,CAAA;IACV,OAAM;AACR,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { Sequence } from "./Sequence";
2
+ export declare const sequence: Sequence;
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ export const sequence = (...steps) => Effect.all(steps, {
3
+ concurrency: 1,
4
+ }).pipe(Effect.map((v) => v.pop()));
5
+ //# sourceMappingURL=sequence_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sequence_.js","sourceRoot":"","sources":["../sequence_.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,MAAM,CAAC,MAAM,QAAQ,GAAa,CAAC,GAAG,KAAK,EAAE,EAAE,CAC7C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE;IAChB,WAAW,EAAE,CAAC;CACf,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,GAAG,CAAC,CAAC,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAG,CAAU,CACnD,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { type Sequence } from "./Sequence.ts";
2
+ import { Strand } from "./Strand.ts";
3
+ /** Isolate the effect with a new strand in context. */
4
+ export declare const strand: Sequence<Strand>;
@@ -0,0 +1,18 @@
1
+ import * as Effect from "effect/Effect";
2
+ import { flow } from "effect/Function";
3
+ import * as Option from "effect/Option";
4
+ import * as PubSub from "effect/PubSub";
5
+ import {} from "./Sequence.js";
6
+ import { sequence } from "./sequence_.js";
7
+ import { Strand } from "./Strand.js";
8
+ /** Isolate the effect with a new strand in context. */
9
+ export const strand = flow(sequence, Effect.provideServiceEffect(Strand, Effect.gen(function* () {
10
+ return Strand.of({
11
+ parent: yield* Effect.serviceOption(Strand),
12
+ events: yield* PubSub.unbounded(),
13
+ system: Option.none(),
14
+ messages: [],
15
+ tools: [],
16
+ });
17
+ })));
18
+ //# sourceMappingURL=strand_.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strand_.js","sourceRoot":"","sources":["../strand_.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,EAAiB,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAAqB,IAAI,CAC1C,QAAQ,EACR,MAAM,CAAC,oBAAoB,CACzB,MAAM,EACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,OAAO,MAAM,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3C,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAU;QACzC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE;QACrB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE;KACV,CAAC,CAAA;AACJ,CAAC,CAAC,CACH,CACF,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import { type TaggableNullable } from "./internal/Taggable.ts";
4
+ import { Strand } from "./Strand.ts";
5
+ export declare const system: TaggableNullable<Effect.Effect<Option.Option<string>, never, Strand>>;
package/dist/system.js ADDED
@@ -0,0 +1,11 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Option from "effect/Option";
3
+ import { normalize } from "./internal/Taggable.js";
4
+ import { Strand } from "./Strand.js";
5
+ export const system = Effect.fnUntraced(function* (a0, ...aRest) {
6
+ const conversation = yield* Strand;
7
+ const { system } = conversation;
8
+ conversation.system = a0 ? Option.some(normalize(a0, aRest)) : Option.none();
9
+ return system;
10
+ });
11
+ //# sourceMappingURL=system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system.js","sourceRoot":"","sources":["../system.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,SAAS,EAAyB,MAAM,wBAAwB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,CAAC,MAAM,MAAM,GAA0E,MAAM,CAAC,UAAU,CAC5G,QAAQ,CAAC,EAAC,EAAE,EAAE,GAAG,KAAK;IACpB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAA;IAClC,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;IAC/B,YAAY,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC5E,OAAO,MAAM,CAAA;AACf,CAAC,CACF,CAAA"}