@moltzap/client 2026.503.4 → 2026.504.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 (187) hide show
  1. package/dist/channel-core.d.ts +1 -4
  2. package/dist/channel-core.d.ts.map +1 -1
  3. package/dist/channel-core.js +0 -9
  4. package/dist/channel-core.js.map +1 -1
  5. package/dist/channel-core.test.js +90 -71
  6. package/dist/channel-core.test.js.map +1 -1
  7. package/dist/cli/commands/agents.js +2 -2
  8. package/dist/cli/commands/agents.js.map +1 -1
  9. package/dist/cli/commands/apps.d.ts +2 -24
  10. package/dist/cli/commands/apps.d.ts.map +1 -1
  11. package/dist/cli/commands/apps.js +22 -47
  12. package/dist/cli/commands/apps.js.map +1 -1
  13. package/dist/cli/commands/apps.test.js +59 -72
  14. package/dist/cli/commands/apps.test.js.map +1 -1
  15. package/dist/cli/commands/contacts.d.ts +1 -5
  16. package/dist/cli/commands/contacts.d.ts.map +1 -1
  17. package/dist/cli/commands/contacts.js +11 -26
  18. package/dist/cli/commands/contacts.js.map +1 -1
  19. package/dist/cli/commands/conversations-v2.test.js +30 -26
  20. package/dist/cli/commands/conversations-v2.test.js.map +1 -1
  21. package/dist/cli/commands/conversations.d.ts.map +1 -1
  22. package/dist/cli/commands/conversations.js +48 -33
  23. package/dist/cli/commands/conversations.js.map +1 -1
  24. package/dist/cli/commands/messages.d.ts.map +1 -1
  25. package/dist/cli/commands/messages.js +11 -8
  26. package/dist/cli/commands/messages.js.map +1 -1
  27. package/dist/cli/commands/messages.test.js +28 -30
  28. package/dist/cli/commands/messages.test.js.map +1 -1
  29. package/dist/cli/commands/presence.d.ts.map +1 -1
  30. package/dist/cli/commands/presence.js +5 -4
  31. package/dist/cli/commands/presence.js.map +1 -1
  32. package/dist/cli/commands/send.d.ts.map +1 -1
  33. package/dist/cli/commands/send.js +20 -11
  34. package/dist/cli/commands/send.js.map +1 -1
  35. package/dist/cli/commands/send.test.js +11 -9
  36. package/dist/cli/commands/send.test.js.map +1 -1
  37. package/dist/cli/commands/status.js +2 -2
  38. package/dist/cli/commands/status.js.map +1 -1
  39. package/dist/cli/commands/test-transport.d.ts +10 -0
  40. package/dist/cli/commands/test-transport.d.ts.map +1 -0
  41. package/dist/cli/commands/test-transport.js +29 -0
  42. package/dist/cli/commands/test-transport.js.map +1 -0
  43. package/dist/cli/index.d.ts.map +1 -1
  44. package/dist/cli/index.js +0 -2
  45. package/dist/cli/index.js.map +1 -1
  46. package/dist/cli/socket-client.d.ts +9 -4
  47. package/dist/cli/socket-client.d.ts.map +1 -1
  48. package/dist/cli/socket-client.js +27 -12
  49. package/dist/cli/socket-client.js.map +1 -1
  50. package/dist/cli/transport.d.ts +3 -2
  51. package/dist/cli/transport.d.ts.map +1 -1
  52. package/dist/cli/transport.js +6 -6
  53. package/dist/cli/transport.js.map +1 -1
  54. package/dist/cli/transport.test.js +4 -4
  55. package/dist/cli/transport.test.js.map +1 -1
  56. package/dist/index.d.ts +2 -3
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +1 -1
  59. package/dist/index.js.map +1 -1
  60. package/dist/internal/__tests__/app-callback-partition-key.test.d.ts +2 -0
  61. package/dist/internal/__tests__/app-callback-partition-key.test.d.ts.map +1 -0
  62. package/dist/internal/__tests__/app-callback-partition-key.test.js +33 -0
  63. package/dist/internal/__tests__/app-callback-partition-key.test.js.map +1 -0
  64. package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts +2 -0
  65. package/dist/internal/__tests__/app-callback-partition-worker.test.d.ts.map +1 -0
  66. package/dist/internal/__tests__/{s2c-partition-worker.test.js → app-callback-partition-worker.test.js} +6 -9
  67. package/dist/internal/__tests__/app-callback-partition-worker.test.js.map +1 -0
  68. package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts +2 -0
  69. package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.d.ts.map +1 -0
  70. package/dist/internal/__tests__/{s2c-partitioned-dispatcher-real-ws.test.js → app-callback-partitioned-dispatcher-real-ws.test.js} +69 -94
  71. package/dist/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.js.map +1 -0
  72. package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts +2 -0
  73. package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.d.ts.map +1 -0
  74. package/dist/internal/__tests__/{s2c-partitioned-dispatcher.test.js → app-callback-partitioned-dispatcher.test.js} +35 -69
  75. package/dist/internal/__tests__/app-callback-partitioned-dispatcher.test.js.map +1 -0
  76. package/dist/internal/__tests__/app-callback-test-requests.d.ts +58 -0
  77. package/dist/internal/__tests__/app-callback-test-requests.d.ts.map +1 -0
  78. package/dist/internal/__tests__/app-callback-test-requests.js +124 -0
  79. package/dist/internal/__tests__/app-callback-test-requests.js.map +1 -0
  80. package/dist/internal/{s2c-dispatcher-errors.d.ts → app-callback-dispatcher-errors.d.ts} +5 -21
  81. package/dist/internal/app-callback-dispatcher-errors.d.ts.map +1 -0
  82. package/dist/internal/{s2c-dispatcher-errors.js → app-callback-dispatcher-errors.js} +3 -13
  83. package/dist/internal/app-callback-dispatcher-errors.js.map +1 -0
  84. package/dist/internal/app-callback-partition-key.d.ts +68 -0
  85. package/dist/internal/app-callback-partition-key.d.ts.map +1 -0
  86. package/dist/internal/app-callback-partition-key.js +90 -0
  87. package/dist/internal/app-callback-partition-key.js.map +1 -0
  88. package/dist/internal/{s2c-partition-worker.d.ts → app-callback-partition-worker.d.ts} +5 -5
  89. package/dist/internal/app-callback-partition-worker.d.ts.map +1 -0
  90. package/dist/internal/{s2c-partition-worker.js → app-callback-partition-worker.js} +5 -5
  91. package/dist/internal/app-callback-partition-worker.js.map +1 -0
  92. package/dist/internal/{s2c-partitioned-dispatcher.d.ts → app-callback-partitioned-dispatcher.d.ts} +9 -10
  93. package/dist/internal/app-callback-partitioned-dispatcher.d.ts.map +1 -0
  94. package/dist/internal/{s2c-partitioned-dispatcher.js → app-callback-partitioned-dispatcher.js} +12 -19
  95. package/dist/internal/app-callback-partitioned-dispatcher.js.map +1 -0
  96. package/dist/runtime/errors.d.ts +2 -28
  97. package/dist/runtime/errors.d.ts.map +1 -1
  98. package/dist/runtime/errors.js +0 -9
  99. package/dist/runtime/errors.js.map +1 -1
  100. package/dist/runtime/errors.test.js +2 -2
  101. package/dist/runtime/errors.test.js.map +1 -1
  102. package/dist/runtime/frame.d.ts +17 -18
  103. package/dist/runtime/frame.d.ts.map +1 -1
  104. package/dist/runtime/frame.js +86 -31
  105. package/dist/runtime/frame.js.map +1 -1
  106. package/dist/runtime/frame.test.js +15 -11
  107. package/dist/runtime/frame.test.js.map +1 -1
  108. package/dist/runtime/index.d.ts +1 -1
  109. package/dist/runtime/index.d.ts.map +1 -1
  110. package/dist/runtime/index.js +1 -1
  111. package/dist/runtime/index.js.map +1 -1
  112. package/dist/runtime/local-service-commands.d.ts +7 -0
  113. package/dist/runtime/local-service-commands.d.ts.map +1 -0
  114. package/dist/runtime/local-service-commands.js +6 -0
  115. package/dist/runtime/local-service-commands.js.map +1 -0
  116. package/dist/runtime/runtime.test.js +1 -2
  117. package/dist/runtime/runtime.test.js.map +1 -1
  118. package/dist/runtime/subscribers.d.ts +34 -29
  119. package/dist/runtime/subscribers.d.ts.map +1 -1
  120. package/dist/runtime/subscribers.js +19 -19
  121. package/dist/runtime/subscribers.js.map +1 -1
  122. package/dist/runtime/subscribers.test.js +50 -31
  123. package/dist/runtime/subscribers.test.js.map +1 -1
  124. package/dist/service.d.ts +24 -39
  125. package/dist/service.d.ts.map +1 -1
  126. package/dist/service.js +165 -161
  127. package/dist/service.js.map +1 -1
  128. package/dist/service.test.js +111 -170
  129. package/dist/service.test.js.map +1 -1
  130. package/dist/test-utils/channel-service-fixture.d.ts +1 -2
  131. package/dist/test-utils/channel-service-fixture.d.ts.map +1 -1
  132. package/dist/test-utils/channel-service-fixture.js +28 -20
  133. package/dist/test-utils/channel-service-fixture.js.map +1 -1
  134. package/dist/test-utils/conformance-adapter.d.ts +2 -2
  135. package/dist/test-utils/conformance-adapter.d.ts.map +1 -1
  136. package/dist/test-utils/conformance-adapter.js +33 -26
  137. package/dist/test-utils/conformance-adapter.js.map +1 -1
  138. package/dist/test-utils/fake-service.d.ts +14 -39
  139. package/dist/test-utils/fake-service.d.ts.map +1 -1
  140. package/dist/test-utils/fake-service.js +33 -39
  141. package/dist/test-utils/fake-service.js.map +1 -1
  142. package/dist/test-utils/ids.d.ts +9 -0
  143. package/dist/test-utils/ids.d.ts.map +1 -0
  144. package/dist/test-utils/ids.js +52 -0
  145. package/dist/test-utils/ids.js.map +1 -0
  146. package/dist/test-utils/index.d.ts +10 -2
  147. package/dist/test-utils/index.d.ts.map +1 -1
  148. package/dist/test-utils/index.js +12 -5
  149. package/dist/test-utils/index.js.map +1 -1
  150. package/dist/ws-client.d.ts +58 -64
  151. package/dist/ws-client.d.ts.map +1 -1
  152. package/dist/ws-client.js +151 -133
  153. package/dist/ws-client.js.map +1 -1
  154. package/dist/ws-client.test.js +157 -167
  155. package/dist/ws-client.test.js.map +1 -1
  156. package/package.json +3 -3
  157. package/dist/cli/commands/permissions.d.ts +0 -70
  158. package/dist/cli/commands/permissions.d.ts.map +0 -1
  159. package/dist/cli/commands/permissions.js +0 -100
  160. package/dist/cli/commands/permissions.js.map +0 -1
  161. package/dist/cli/commands/permissions.test.d.ts +0 -2
  162. package/dist/cli/commands/permissions.test.d.ts.map +0 -1
  163. package/dist/cli/commands/permissions.test.js +0 -127
  164. package/dist/cli/commands/permissions.test.js.map +0 -1
  165. package/dist/internal/__tests__/s2c-partition-key.test.d.ts +0 -2
  166. package/dist/internal/__tests__/s2c-partition-key.test.d.ts.map +0 -1
  167. package/dist/internal/__tests__/s2c-partition-key.test.js +0 -231
  168. package/dist/internal/__tests__/s2c-partition-key.test.js.map +0 -1
  169. package/dist/internal/__tests__/s2c-partition-worker.test.d.ts +0 -2
  170. package/dist/internal/__tests__/s2c-partition-worker.test.d.ts.map +0 -1
  171. package/dist/internal/__tests__/s2c-partition-worker.test.js.map +0 -1
  172. package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts +0 -2
  173. package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.d.ts.map +0 -1
  174. package/dist/internal/__tests__/s2c-partitioned-dispatcher-real-ws.test.js.map +0 -1
  175. package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts +0 -2
  176. package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.d.ts.map +0 -1
  177. package/dist/internal/__tests__/s2c-partitioned-dispatcher.test.js.map +0 -1
  178. package/dist/internal/s2c-dispatcher-errors.d.ts.map +0 -1
  179. package/dist/internal/s2c-dispatcher-errors.js.map +0 -1
  180. package/dist/internal/s2c-partition-key.d.ts +0 -79
  181. package/dist/internal/s2c-partition-key.d.ts.map +0 -1
  182. package/dist/internal/s2c-partition-key.js +0 -146
  183. package/dist/internal/s2c-partition-key.js.map +0 -1
  184. package/dist/internal/s2c-partition-worker.d.ts.map +0 -1
  185. package/dist/internal/s2c-partition-worker.js.map +0 -1
  186. package/dist/internal/s2c-partitioned-dispatcher.d.ts.map +0 -1
  187. package/dist/internal/s2c-partitioned-dispatcher.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-callback-partitioned-dispatcher-real-ws.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-callback-partitioned-dispatcher-real-ws.test.d.ts","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.ts"],"names":[],"mappings":""}
@@ -8,7 +8,7 @@
8
8
  * tests; see PR body "Deviations" for the rationale).
9
9
  *
10
10
  * Boots an in-process `@effect/platform-node` WebSocket server,
11
- * connects a real `MoltZapWsClient`, registers two competing s2c
11
+ * connects a real `MoltZapWsClient`, registers two competing appCallback
12
12
  * handlers (`before_dispatch` parks on a Deferred;
13
13
  * `before_message_delivery` resolves it), and asserts both replies
14
14
  * round-trip back to the server. Pre-#356 this hangs; post-#356 it
@@ -20,12 +20,28 @@
20
20
  import * as NodeSocketServer from "@effect/platform-node/NodeSocketServer";
21
21
  import { Deferred, Effect, Scope } from "effect";
22
22
  import { describe, expect, it } from "vitest";
23
- import { PROTOCOL_VERSION } from "@moltzap/protocol";
24
23
  import { MoltZapWsClient } from "../../ws-client.js";
25
- import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, Connect, } from "@moltzap/protocol";
26
- const SESSION_A = "11111111-1111-4111-8111-111111111111";
27
- const SESSION_B = "22222222-2222-4222-8222-222222222222";
28
- const CONV_X = "conv-X";
24
+ import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, Connect, PROTOCOL_VERSION, jsonRpcStringId, requestFrame, responseFrame, validators, } from "@moltzap/protocol";
25
+ import { beforeDispatchParams, beforeMessageDeliveryParams, CONV_X, SESSION_A, SESSION_B, } from "./app-callback-test-requests.js";
26
+ const TEST_AGENT_ID = "11111111-1111-4111-8111-111111111111";
27
+ const TEST_POLICY = {
28
+ maxMessageBytes: 1_000_000,
29
+ maxPartsPerMessage: 10,
30
+ maxTextLength: 32_768,
31
+ maxGroupParticipants: 100,
32
+ heartbeatIntervalMs: 30_000,
33
+ rateLimits: {
34
+ messagesPerMinute: 60,
35
+ requestsPerMinute: 120,
36
+ },
37
+ };
38
+ const helloOk = () => ({
39
+ protocolVersion: PROTOCOL_VERSION,
40
+ agentId: TEST_AGENT_ID,
41
+ conversations: [],
42
+ unreadCounts: {},
43
+ policy: TEST_POLICY,
44
+ });
29
45
  /**
30
46
  * Spin up an in-process WS server on 127.0.0.1:0. Caller owns the
31
47
  * provided scope; when it closes the server shuts down.
@@ -71,7 +87,20 @@ async function connect(client) {
71
87
  async function close(client) {
72
88
  await Effect.runPromise(client.close());
73
89
  }
74
- describe("integration: AppHost + partitioned s2c dispatcher", () => {
90
+ function responseIds(rawFrames) {
91
+ return rawFrames.flatMap((raw) => {
92
+ try {
93
+ const parsed = JSON.parse(raw);
94
+ return validators.responseFrame(parsed) && typeof parsed.id === "string"
95
+ ? [parsed.id]
96
+ : [];
97
+ }
98
+ catch {
99
+ return [];
100
+ }
101
+ });
102
+ }
103
+ describe("integration: AppHost + partitioned appCallback dispatcher", () => {
75
104
  it("two competing handlers (before_dispatch + before_message_delivery) for the " +
76
105
  "same conversation: parked before_dispatch resumes after sibling " +
77
106
  "before_message_delivery completes — both replies ship to the server", async () => {
@@ -82,37 +111,20 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
82
111
  // fires from the sibling, and both replies ship.
83
112
  const result = await Effect.runPromise(Effect.scoped(Effect.gen(function* () {
84
113
  const server = yield* startWsServer((conn, raw) => Effect.gen(function* () {
85
- const frame = JSON.parse(raw);
86
- if (frame.method === Connect.name && frame.id) {
87
- yield* conn.send(JSON.stringify({
88
- jsonrpc: "2.0",
89
- type: "response",
90
- direction: "c2s",
91
- id: frame.id,
92
- result: {
93
- agentId: "agent-test",
94
- protocol: PROTOCOL_VERSION,
95
- },
96
- }));
97
- // Fire BOTH s2c requests for the SAME (S, C). With
114
+ const parsed = JSON.parse(raw);
115
+ if (!validators.requestFrame(parsed)) {
116
+ return yield* Effect.die("expected JSON-RPC request frame");
117
+ }
118
+ const frame = parsed;
119
+ if (frame.method === Connect.name) {
120
+ yield* conn.send(JSON.stringify(responseFrame(frame.id, {
121
+ result: helloOk(),
122
+ })));
123
+ // Fire BOTH appCallback requests for the SAME (S, C). With
98
124
  // pre-#356 dispatching they queue on one fiber and
99
125
  // deadlock; with #356 they run concurrently.
100
- yield* conn.send(JSON.stringify({
101
- jsonrpc: "2.0",
102
- type: "request",
103
- direction: "s2c",
104
- id: "rpc-bd-1",
105
- method: AppsOnBeforeDispatch.name,
106
- params: { sessionId: SESSION_A, conversationId: CONV_X },
107
- }));
108
- yield* conn.send(JSON.stringify({
109
- jsonrpc: "2.0",
110
- type: "request",
111
- direction: "s2c",
112
- id: "rpc-bmd-1",
113
- method: AppsOnBeforeMessageDelivery.name,
114
- params: { sessionId: SESSION_A, conversationId: CONV_X },
115
- }));
126
+ yield* conn.send(JSON.stringify(requestFrame(jsonRpcStringId("rpc-bd-1"), AppsOnBeforeDispatch, beforeDispatchParams(SESSION_A, CONV_X))));
127
+ yield* conn.send(JSON.stringify(requestFrame(jsonRpcStringId("rpc-bmd-1"), AppsOnBeforeMessageDelivery, beforeMessageDeliveryParams(SESSION_A, CONV_X))));
116
128
  }
117
129
  }));
118
130
  const client = new MoltZapWsClient({
@@ -128,13 +140,13 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
128
140
  // the parking Deferred — pre-#356 this would never run
129
141
  // because both queue on a single dispatch fiber.
130
142
  const release = yield* Deferred.make();
131
- yield* client.handleServerRpc(AppsOnBeforeDispatch.name, () => Effect.gen(function* () {
143
+ yield* client.handleServerRpc(AppsOnBeforeDispatch, () => Effect.gen(function* () {
132
144
  yield* Deferred.await(release);
133
- return { admission: "allow" };
145
+ return { admission: { decision: "grant" } };
134
146
  }));
135
- yield* client.handleServerRpc(AppsOnBeforeMessageDelivery.name, () => Effect.gen(function* () {
147
+ yield* client.handleServerRpc(AppsOnBeforeMessageDelivery, () => Effect.gen(function* () {
136
148
  yield* Deferred.succeed(release, undefined);
137
- return { decision: "allow" };
149
+ return { block: false };
138
150
  }));
139
151
  yield* Effect.promise(() => connect(client));
140
152
  // Wait for both replies to land at the server.
@@ -143,17 +155,7 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
143
155
  while (Date.now() < deadline) {
144
156
  const conn = server.conns[0];
145
157
  if (conn) {
146
- const replyIds = conn.received
147
- .map((r) => {
148
- try {
149
- const f = JSON.parse(r);
150
- return f.id ?? null;
151
- }
152
- catch {
153
- return null;
154
- }
155
- })
156
- .filter((x) => x !== null);
158
+ const replyIds = responseIds(conn.received);
157
159
  if (replyIds.includes("rpc-bd-1") &&
158
160
  replyIds.includes("rpc-bmd-1")) {
159
161
  bothReplied = true;
@@ -171,36 +173,19 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
171
173
  "(slow handler in session A does not delay session B)", async () => {
172
174
  const result = await Effect.runPromise(Effect.scoped(Effect.gen(function* () {
173
175
  const server = yield* startWsServer((conn, raw) => Effect.gen(function* () {
174
- const frame = JSON.parse(raw);
175
- if (frame.method === Connect.name && frame.id) {
176
- yield* conn.send(JSON.stringify({
177
- jsonrpc: "2.0",
178
- type: "response",
179
- direction: "c2s",
180
- id: frame.id,
181
- result: {
182
- agentId: "agent-test",
183
- protocol: PROTOCOL_VERSION,
184
- },
185
- }));
176
+ const parsed = JSON.parse(raw);
177
+ if (!validators.requestFrame(parsed)) {
178
+ return yield* Effect.die("expected JSON-RPC request frame");
179
+ }
180
+ const frame = parsed;
181
+ if (frame.method === Connect.name) {
182
+ yield* conn.send(JSON.stringify(responseFrame(frame.id, {
183
+ result: helloOk(),
184
+ })));
186
185
  // Session A: park forever (until release).
187
- yield* conn.send(JSON.stringify({
188
- jsonrpc: "2.0",
189
- type: "request",
190
- direction: "s2c",
191
- id: "rpc-A",
192
- method: AppsOnBeforeDispatch.name,
193
- params: { sessionId: SESSION_A, conversationId: CONV_X },
194
- }));
186
+ yield* conn.send(JSON.stringify(requestFrame(jsonRpcStringId("rpc-A"), AppsOnBeforeDispatch, beforeDispatchParams(SESSION_A, CONV_X))));
195
187
  // Session B: must complete despite A being parked.
196
- yield* conn.send(JSON.stringify({
197
- jsonrpc: "2.0",
198
- type: "request",
199
- direction: "s2c",
200
- id: "rpc-B",
201
- method: AppsOnBeforeDispatch.name,
202
- params: { sessionId: SESSION_B, conversationId: CONV_X },
203
- }));
188
+ yield* conn.send(JSON.stringify(requestFrame(jsonRpcStringId("rpc-B"), AppsOnBeforeDispatch, beforeDispatchParams(SESSION_B, CONV_X))));
204
189
  }
205
190
  }));
206
191
  const release = yield* Deferred.make();
@@ -213,12 +198,11 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
213
198
  error: () => { },
214
199
  },
215
200
  });
216
- yield* client.handleServerRpc(AppsOnBeforeDispatch.name, (params) => Effect.gen(function* () {
217
- const sid = params.sessionId;
218
- if (sid === SESSION_A) {
201
+ yield* client.handleServerRpc(AppsOnBeforeDispatch, (params) => Effect.gen(function* () {
202
+ if (params.sessionId === SESSION_A) {
219
203
  yield* Deferred.await(release);
220
204
  }
221
- return { admission: "allow" };
205
+ return { admission: { decision: "grant" } };
222
206
  }));
223
207
  yield* Effect.promise(() => connect(client));
224
208
  const deadline = Date.now() + 4000;
@@ -226,16 +210,7 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
226
210
  while (Date.now() < deadline) {
227
211
  const conn = server.conns[0];
228
212
  if (conn) {
229
- const replyIds = conn.received
230
- .map((r) => {
231
- try {
232
- return JSON.parse(r).id ?? null;
233
- }
234
- catch {
235
- return null;
236
- }
237
- })
238
- .filter((x) => x !== null);
213
+ const replyIds = responseIds(conn.received);
239
214
  if (replyIds.includes("rpc-B")) {
240
215
  bRan = true;
241
216
  break;
@@ -252,4 +227,4 @@ describe("integration: AppHost + partitioned s2c dispatcher", () => {
252
227
  expect(result).toBe(true);
253
228
  }, /* per-test timeout */ 6000);
254
229
  });
255
- //# sourceMappingURL=s2c-partitioned-dispatcher-real-ws.test.js.map
230
+ //# sourceMappingURL=app-callback-partitioned-dispatcher-real-ws.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-callback-partitioned-dispatcher-real-ws.test.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-partitioned-dispatcher-real-ws.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-callback-partitioned-dispatcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-callback-partitioned-dispatcher.test.d.ts","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-partitioned-dispatcher.test.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Unit tests for the partitioned s2c dispatcher.
2
+ * Unit tests for the partitioned appCallback dispatcher.
3
3
  *
4
4
  * Spec: moltzap#356 §8 (test plan, file 3).
5
5
  *
@@ -9,26 +9,9 @@
9
9
  */
10
10
  import { describe, it, expect } from "vitest";
11
11
  import { Deferred, Effect, Exit, Ref, Scope } from "effect";
12
- import { DEFAULT_PARTITIONED_DISPATCHER_CONFIG, makePartitionedDispatcher, } from "../s2c-partitioned-dispatcher.js";
13
- import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, AppsOnJoin, } from "@moltzap/protocol";
14
- const SESSION_A = "11111111-1111-4111-8111-111111111111";
15
- const CONV_X = "conv-X";
16
- const CONV_Y = "conv-Y";
17
- const reqBeforeDispatch = (id, sessionId = SESSION_A, conv = CONV_X) => ({
18
- id,
19
- method: AppsOnBeforeDispatch.name,
20
- params: { sessionId, conversationId: conv },
21
- });
22
- const reqBeforeMessageDelivery = (id, sessionId = SESSION_A, conv = CONV_X) => ({
23
- id,
24
- method: AppsOnBeforeMessageDelivery.name,
25
- params: { sessionId, conversationId: conv },
26
- });
27
- const reqLifecycle = (id, method = AppsOnJoin.name, sessionId = SESSION_A) => ({
28
- id,
29
- method,
30
- params: { sessionId },
31
- });
12
+ import { DEFAULT_PARTITIONED_DISPATCHER_CONFIG, makePartitionedDispatcher, } from "../app-callback-partitioned-dispatcher.js";
13
+ import { AppsOnBeforeDispatch, AppsOnBeforeMessageDelivery, } from "@moltzap/protocol";
14
+ import { beforeDispatch, beforeMessageDelivery, conversationIdForIndex, CONV_X, CONV_Y, CONV_Z, onJoin, SESSION_A, } from "./app-callback-test-requests.js";
32
15
  /** Drive a body under a fresh CloseableScope; close on exit. */
33
16
  function withScope(body) {
34
17
  return Effect.gen(function* () {
@@ -53,9 +36,9 @@ describe("makePartitionedDispatcher — routing", () => {
53
36
  }),
54
37
  scope,
55
38
  });
56
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1"));
57
- yield* dispatcher.offer(reqBeforeDispatch("rpc-2"));
58
- yield* dispatcher.offer(reqBeforeDispatch("rpc-3"));
39
+ yield* dispatcher.offer(beforeDispatch("rpc-1"));
40
+ yield* dispatcher.offer(beforeDispatch("rpc-2"));
41
+ yield* dispatcher.offer(beforeDispatch("rpc-3"));
59
42
  yield* Deferred.await(allDone);
60
43
  return yield* Ref.get(order);
61
44
  })));
@@ -81,8 +64,8 @@ describe("makePartitionedDispatcher — routing", () => {
81
64
  handle,
82
65
  scope,
83
66
  });
84
- yield* dispatcher.offer(reqBeforeDispatch("rpc-A-park", SESSION_A, CONV_X));
85
- yield* dispatcher.offer(reqBeforeDispatch("rpc-B-go", SESSION_A, CONV_Y));
67
+ yield* dispatcher.offer(beforeDispatch("rpc-A-park", SESSION_A, CONV_X));
68
+ yield* dispatcher.offer(beforeDispatch("rpc-B-go", SESSION_A, CONV_Y));
86
69
  // bDone fires only if rpc-B ran without being blocked by
87
70
  // rpc-A's parked Deferred.
88
71
  yield* Deferred.await(bDone);
@@ -93,23 +76,6 @@ describe("makePartitionedDispatcher — routing", () => {
93
76
  })));
94
77
  expect(result).toBe("concurrent");
95
78
  });
96
- it("offer with malformed params returns MalformedPartitionKeyError", async () => {
97
- const verdict = await Effect.runPromise(withScope((scope) => Effect.gen(function* () {
98
- const dispatcher = yield* makePartitionedDispatcher({
99
- handle: () => Effect.void,
100
- scope,
101
- });
102
- return yield* Effect.either(dispatcher.offer({
103
- id: "rpc-x",
104
- method: AppsOnBeforeDispatch.name,
105
- params: { /* sessionId missing */ conversationId: CONV_X },
106
- }));
107
- })));
108
- expect(verdict._tag).toBe("Left");
109
- if (verdict._tag === "Left") {
110
- expect(verdict.left._tag).toBe("MalformedPartitionKeyError");
111
- }
112
- });
113
79
  });
114
80
  describe("makePartitionedDispatcher — soft cap", () => {
115
81
  it("allocates up to maxPartitions partitions", async () => {
@@ -123,7 +89,7 @@ describe("makePartitionedDispatcher — soft cap", () => {
123
89
  // Distinct conversationIds → distinct keys → distinct
124
90
  // partitions, all parked on `release`.
125
91
  for (let i = 0; i < 4; i++) {
126
- yield* dispatcher.offer(reqBeforeDispatch(`rpc-${i}`, SESSION_A, `conv-${i}`));
92
+ yield* dispatcher.offer(beforeDispatch(`rpc-${i}`, SESSION_A, conversationIdForIndex(i)));
127
93
  }
128
94
  const stats = yield* dispatcher.stats;
129
95
  yield* Deferred.succeed(release, undefined);
@@ -139,10 +105,10 @@ describe("makePartitionedDispatcher — soft cap", () => {
139
105
  scope,
140
106
  config: { maxPartitions: 2 },
141
107
  });
142
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1", SESSION_A, "conv-A"));
143
- yield* dispatcher.offer(reqBeforeDispatch("rpc-2", SESSION_A, "conv-B"));
108
+ yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
109
+ yield* dispatcher.offer(beforeDispatch("rpc-2", SESSION_A, CONV_Y));
144
110
  // Third distinct key → should fail with PartitionLimitError.
145
- const overflow = yield* Effect.either(dispatcher.offer(reqBeforeDispatch("rpc-3", SESSION_A, "conv-C")));
111
+ const overflow = yield* Effect.either(dispatcher.offer(beforeDispatch("rpc-3", SESSION_A, CONV_Z)));
146
112
  yield* Deferred.succeed(release, undefined);
147
113
  return overflow;
148
114
  })));
@@ -161,7 +127,7 @@ describe("makePartitionedDispatcher — backpressure", () => {
161
127
  const bDone = yield* Deferred.make();
162
128
  const dispatcher = yield* makePartitionedDispatcher({
163
129
  handle: (req) => Effect.gen(function* () {
164
- if (req.method === AppsOnBeforeDispatch.name) {
130
+ if (req.definition.name === AppsOnBeforeDispatch.name) {
165
131
  yield* Deferred.await(releaseA);
166
132
  }
167
133
  else if (req.id === "rpc-B-go") {
@@ -172,7 +138,7 @@ describe("makePartitionedDispatcher — backpressure", () => {
172
138
  config: { partitionQueueCapacity: 1 },
173
139
  });
174
140
  // Start partition A; first offer goes into the handler.
175
- yield* dispatcher.offer(reqBeforeDispatch("rpc-A-1", SESSION_A, CONV_X));
141
+ yield* dispatcher.offer(beforeDispatch("rpc-A-1", SESSION_A, CONV_X));
176
142
  // Wait until the handler has actually taken rpc-A-1 off the
177
143
  // queue (queue size 0). Then fill the queue with rpc-A-2 so
178
144
  // a third offer to A would fail.
@@ -183,11 +149,11 @@ describe("makePartitionedDispatcher — backpressure", () => {
183
149
  break;
184
150
  yield* Effect.yieldNow();
185
151
  }
186
- yield* dispatcher.offer(reqBeforeDispatch("rpc-A-2", SESSION_A, CONV_X));
152
+ yield* dispatcher.offer(beforeDispatch("rpc-A-2", SESSION_A, CONV_X));
187
153
  // Partition A is now at capacity. A third offer to A would
188
154
  // fail. Meanwhile a different-key offer (partition B) must
189
155
  // still run.
190
- yield* dispatcher.offer(reqBeforeMessageDelivery("rpc-B-go", SESSION_A, CONV_X));
156
+ yield* dispatcher.offer(beforeMessageDelivery("rpc-B-go", SESSION_A, CONV_X));
191
157
  yield* Deferred.await(bDone);
192
158
  yield* Deferred.succeed(releaseA, undefined);
193
159
  return "B-ran";
@@ -204,7 +170,7 @@ describe("makePartitionedDispatcher — backpressure", () => {
204
170
  scope,
205
171
  config: { partitionQueueCapacity: 1 },
206
172
  });
207
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1", SESSION_A, CONV_X));
173
+ yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
208
174
  // Wait for the handler to take rpc-1 off the queue.
209
175
  for (let i = 0; i < 200; i++) {
210
176
  const stats = yield* dispatcher.stats;
@@ -213,8 +179,8 @@ describe("makePartitionedDispatcher — backpressure", () => {
213
179
  break;
214
180
  yield* Effect.yieldNow();
215
181
  }
216
- yield* dispatcher.offer(reqBeforeDispatch("rpc-2", SESSION_A, CONV_X));
217
- const overflow = yield* Effect.either(dispatcher.offer(reqBeforeDispatch("rpc-3", SESSION_A, CONV_X)));
182
+ yield* dispatcher.offer(beforeDispatch("rpc-2", SESSION_A, CONV_X));
183
+ const overflow = yield* Effect.either(dispatcher.offer(beforeDispatch("rpc-3", SESSION_A, CONV_X)));
218
184
  yield* Deferred.succeed(release, undefined);
219
185
  return overflow;
220
186
  })));
@@ -246,12 +212,12 @@ describe("makePartitionedDispatcher — deadlock fix (D10 reproducer at dispatch
246
212
  const deliveryDone = yield* Deferred.make();
247
213
  const dispatcher = yield* makePartitionedDispatcher({
248
214
  handle: (req) => Effect.gen(function* () {
249
- if (req.method === AppsOnBeforeDispatch.name) {
215
+ if (req.definition.name === AppsOnBeforeDispatch.name) {
250
216
  // Park.
251
217
  yield* Deferred.await(releaseDispatch);
252
218
  yield* Deferred.succeed(dispatchDone, undefined);
253
219
  }
254
- else if (req.method === AppsOnBeforeMessageDelivery.name) {
220
+ else if (req.definition.name === AppsOnBeforeMessageDelivery.name) {
255
221
  // The lease-release hook in arena's pattern. Run
256
222
  // to completion and signal the dispatch path to
257
223
  // resume.
@@ -262,9 +228,9 @@ describe("makePartitionedDispatcher — deadlock fix (D10 reproducer at dispatch
262
228
  scope,
263
229
  });
264
230
  // Step 1: park dispatch handler.
265
- yield* dispatcher.offer(reqBeforeDispatch("rpc-dispatch-1", SESSION_A, CONV_X));
231
+ yield* dispatcher.offer(beforeDispatch("rpc-dispatch-1", SESSION_A, CONV_X));
266
232
  // Step 2: send delivery handler for the SAME conversation.
267
- yield* dispatcher.offer(reqBeforeMessageDelivery("rpc-delivery-1", SESSION_A, CONV_X));
233
+ yield* dispatcher.offer(beforeMessageDelivery("rpc-delivery-1", SESSION_A, CONV_X));
268
234
  // Both must complete. With pre-#356 single-fiber
269
235
  // dispatch, this hangs forever (the test's `runPromise`
270
236
  // would never resolve — vitest's `testTimeout` would
@@ -291,7 +257,7 @@ describe("makePartitionedDispatcher — idle reaper", () => {
291
257
  idleReaperIntervalMs: 10,
292
258
  },
293
259
  });
294
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1", SESSION_A, CONV_X));
260
+ yield* dispatcher.offer(beforeDispatch("rpc-1", SESSION_A, CONV_X));
295
261
  // Wait for the handler to finish so the partition becomes
296
262
  // Idle.
297
263
  for (let i = 0; i < 200; i++) {
@@ -333,7 +299,7 @@ describe("makePartitionedDispatcher — idle reaper", () => {
333
299
  idleReaperIntervalMs: 10,
334
300
  },
335
301
  });
336
- yield* dispatcher.offer(reqBeforeDispatch("rpc-busy", SESSION_A, CONV_X));
302
+ yield* dispatcher.offer(beforeDispatch("rpc-busy", SESSION_A, CONV_X));
337
303
  // Bump clock past TTL while handler is still parked. Reaper
338
304
  // sees `idleSince._tag === "Busy"` and skips reclamation.
339
305
  yield* Ref.set(fakeNow, 10_000);
@@ -355,9 +321,9 @@ describe("makePartitionedDispatcher — scope teardown", () => {
355
321
  handle: () => Deferred.await(release),
356
322
  scope,
357
323
  });
358
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1"));
359
- yield* dispatcher.offer(reqBeforeMessageDelivery("rpc-2"));
360
- yield* dispatcher.offer(reqLifecycle("rpc-3", AppsOnJoin.name));
324
+ yield* dispatcher.offer(beforeDispatch("rpc-1"));
325
+ yield* dispatcher.offer(beforeMessageDelivery("rpc-2"));
326
+ yield* dispatcher.offer(onJoin("rpc-3"));
361
327
  // Close while every handler is parked. Must not hang.
362
328
  yield* Scope.close(scope, Exit.void);
363
329
  // Release any awaiters (no-op if scope close already
@@ -392,7 +358,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
392
358
  // the count would still be 2N (the lingering fiber never
393
359
  // gets new items because the map points to a fresh worker)
394
360
  // — so this is not a perfect distinguisher of leaked-vs-not,
395
- // but combined with `s2c-partition-worker.test.ts > "offer
361
+ // but combined with `app-callback-partition-worker.test.ts > "offer
396
362
  // after Scope close fails with PartitionQueueFullError"`,
397
363
  // we cover both the per-worker-scope contract and the
398
364
  // reaper's use of it.
@@ -419,7 +385,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
419
385
  });
420
386
  // Spawn N partitions across N distinct conv keys.
421
387
  for (let i = 0; i < N; i++) {
422
- yield* dispatcher.offer(reqBeforeDispatch(`rpc-${i}`, SESSION_A, `conv-${i}`));
388
+ yield* dispatcher.offer(beforeDispatch(`rpc-${i}`, SESSION_A, conversationIdForIndex(i)));
423
389
  }
424
390
  // Wait until every worker is Idle (handler returned).
425
391
  for (let attempt = 0; attempt < 200; attempt++) {
@@ -450,7 +416,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
450
416
  // is processing — not a stale reference returning an
451
417
  // already-shutdown queue).
452
418
  for (let i = 0; i < N; i++) {
453
- yield* dispatcher.offer(reqBeforeDispatch(`rpc-fresh-${i}`, SESSION_A, `conv-fresh-${i}`));
419
+ yield* dispatcher.offer(beforeDispatch(`rpc-fresh-${i}`, SESSION_A, conversationIdForIndex(i + N)));
454
420
  }
455
421
  // Wait for the fresh handlers to all run.
456
422
  for (let attempt = 0; attempt < 200; attempt++) {
@@ -507,7 +473,7 @@ describe("makePartitionedDispatcher — reaper releases per-worker scopes", () =
507
473
  const outcomes = [];
508
474
  for (let i = 0; i < cycles; i++) {
509
475
  yield* Ref.set(fakeNow, 1000 * i);
510
- const result = yield* Effect.either(dispatcher.offer(reqBeforeDispatch(`rpc-cycle-${i}`, SESSION_A, "conv-race")));
476
+ const result = yield* Effect.either(dispatcher.offer(beforeDispatch(`rpc-cycle-${i}`, SESSION_A, CONV_Z)));
511
477
  outcomes.push(result._tag === "Right" ? "ok" : "rejected");
512
478
  // Yield so the reaper has a chance to run between cycles.
513
479
  yield* Effect.yieldNow();
@@ -552,7 +518,7 @@ describe("makePartitionedDispatcher — runSync(close()) contract (regression of
552
518
  handle: () => Effect.void,
553
519
  scope,
554
520
  });
555
- yield* dispatcher.offer(reqBeforeDispatch("rpc-1"));
521
+ yield* dispatcher.offer(beforeDispatch("rpc-1"));
556
522
  // Use Effect.runFork-equivalent via Effect.forkDaemon — a
557
523
  // runSync caller wraps `Scope.close(...)` similarly.
558
524
  const fiber = yield* Effect.forkDaemon(Scope.close(scope, Exit.void));
@@ -569,4 +535,4 @@ describe("makePartitionedDispatcher — defaults", () => {
569
535
  expect(DEFAULT_PARTITIONED_DISPATCHER_CONFIG.idleReaperIntervalMs).toBe(5_000);
570
536
  });
571
537
  });
572
- //# sourceMappingURL=s2c-partitioned-dispatcher.test.js.map
538
+ //# sourceMappingURL=app-callback-partitioned-dispatcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-callback-partitioned-dispatcher.test.js","sourceRoot":"","sources":["../../../src/internal/__tests__/app-callback-partitioned-dispatcher.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC5D,OAAO,EACL,qCAAqC,EACrC,yBAAyB,GAC1B,MAAM,2CAA2C,CAAC;AAGnD,OAAO,EACL,oBAAoB,EACpB,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,MAAM,EACN,MAAM,EACN,MAAM,EACN,MAAM,EACN,SAAS,GACV,MAAM,iCAAiC,CAAC;AAEzC,gEAAgE;AAChE,SAAS,SAAS,CAChB,IAA0D;IAE1D,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAClC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAW,EAAE,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClD,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBACjC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACpB,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC,CAAC;gBACJ,KAAK;aACN,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,+DAA+D;QAC/D,8DAA8D;QAC9D,wDAAwD;QACxD,uDAAuD;QACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC3C,MAAM,MAAM,GAAG,CAAC,GAAyB,EAAE,EAAE,CAC3C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,IAAI,GAAG,CAAC,EAAE,KAAK,YAAY,EAAE,CAAC;oBAC5B,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;oBACjC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC,CAAC;YACL,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM;gBACN,KAAK;aACN,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,CAChD,CAAC;YACF,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAC9C,CAAC;YACF,yDAAyD;YACzD,2BAA2B;YAC3B,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,0DAA0D;YAC1D,4BAA4B;YAC5B,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO,YAAqB,CAAC;QAC/B,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,KAAK;gBACL,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;aAC7B,CAAC,CAAC;YACH,sDAAsD;YACtD,uCAAuC;YACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC,gBAAgB,CAAC;QAChC,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wFAAwF,EAAE,KAAK,IAAI,EAAE;QACtG,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,KAAK;gBACL,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE;aAC7B,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CACnC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAC7D,CAAC;YACF,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,EAAE,CAAC,mFAAmF,EAAE,KAAK,IAAI,EAAE;QACjG,0DAA0D;QAC1D,0CAA0C;QAC1C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,CAAC;wBACtD,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAClC,CAAC;yBAAM,IAAI,GAAG,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC;wBACjC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC,CAAC;gBACJ,KAAK;gBACL,MAAM,EAAE,EAAE,sBAAsB,EAAE,CAAC,EAAE;aACtC,CAAC,CAAC;YACH,wDAAwD;YACxD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACtE,4DAA4D;YAC5D,4DAA4D;YAC5D,iCAAiC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAC1C,CAAC;gBACF,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,CAAC;oBAAE,MAAM;gBAC1C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAEtE,2DAA2D;YAC3D,2DAA2D;YAC3D,aAAa;YACb,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,qBAAqB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CACrD,CAAC;YACF,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC7C,OAAO,OAAgB,CAAC;QAC1B,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qGAAqG,EAAE,KAAK,IAAI,EAAE;QACnH,kEAAkE;QAClE,oEAAoE;QACpE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,KAAK;gBACL,MAAM,EAAE,EAAE,sBAAsB,EAAE,CAAC,EAAE;aACtC,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,oDAAoD;YACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC;oBAAE,MAAM;gBACxC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CACnC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAC7D,CAAC;YACF,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+EAA+E,EAAE,GAAG,EAAE;IAC7F,EAAE,CAAC,qFAAqF;QACtF,4FAA4F,EAAE,KAAK,IAAI,EAAE;QACzG,iEAAiE;QACjE,uCAAuC;QACvC,EAAE;QACF,gEAAgE;QAChE,mCAAmC;QACnC,gEAAgE;QAChE,0DAA0D;QAC1D,0DAA0D;QAC1D,EAAE;QACF,2DAA2D;QAC3D,+DAA+D;QAC/D,4DAA4D;QAC5D,oDAAoD;QACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAClD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAClB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,oBAAoB,CAAC,IAAI,EAAE,CAAC;wBACtD,QAAQ;wBACR,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;wBACvC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBACnD,CAAC;yBAAM,IACL,GAAG,CAAC,UAAU,CAAC,IAAI,KAAK,2BAA2B,CAAC,IAAI,EACxD,CAAC;wBACD,iDAAiD;wBACjD,gDAAgD;wBAChD,UAAU;wBACV,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;wBACpD,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC;gBACJ,KAAK;aACN,CAAC,CAAC;YACH,iCAAiC;YACjC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,CACpD,CAAC;YACF,2DAA2D;YAC3D,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,EAAE,MAAM,CAAC,CAC3D,CAAC;YACF,iDAAiD;YACjD,wDAAwD;YACxD,qDAAqD;YACrD,aAAa;YACb,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACpC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACpC,OAAO,aAAsB,CAAC;QAChC,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,CAAC,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,oDAAoD;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;gBACzB,KAAK;gBACL,KAAK;gBACL,MAAM,EAAE;oBACN,kBAAkB,EAAE,GAAG;oBACvB,oBAAoB,EAAE,EAAE;iBACzB;aACF,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,0DAA0D;YAC1D,QAAQ;YACR,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM;gBAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,uCAAuC;YACvC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChC,sDAAsD;YACtD,2DAA2D;YAC3D,0BAA0B;YAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;oBACjC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;gBACD,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,KAAK;gBACL,KAAK;gBACL,MAAM,EAAE;oBACN,kBAAkB,EAAE,GAAG;oBACvB,oBAAoB,EAAE,EAAE;iBACzB;aACF,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAC9C,CAAC;YACF,4DAA4D;YAC5D,0DAA0D;YAC1D,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAChC,6BAA6B;YAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YACtC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5C,OAAO,KAAK,CAAC,gBAAgB,CAAC;QAChC,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAQ,CAAC;YAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACrC,KAAK;aACN,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;YACxD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACzC,sDAAsD;YACtD,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,qDAAqD;YACrD,kCAAkC;YAClC,KAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChE,OAAO,WAAoB,CAAC;QAC9B,CAAC,CAAC,CACH,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+DAA+D,EAAE,GAAG,EAAE;IAC7E,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,gEAAgE;QAChE,mEAAmE;QACnE,0DAA0D;QAC1D,gDAAgD;QAChD,EAAE;QACF,iDAAiD;QACjD,mEAAmE;QACnE,iCAAiC;QACjC,iEAAiE;QACjE,kEAAkE;QAClE,iDAAiD;QACjD,0DAA0D;QAC1D,8DAA8D;QAC9D,+DAA+D;QAC/D,+DAA+D;QAC/D,+DAA+D;QAC/D,wDAAwD;QACxD,iEAAiE;QACjE,iEAAiE;QACjE,8DAA8D;QAC9D,gEAAgE;QAChE,kEAAkE;QAClE,yEAAyE;QACzE,+DAA+D;QAC/D,2DAA2D;QAC3D,2BAA2B;QAC3B,4DAA4D;QAC5D,6DAA6D;QAC7D,gEAAgE;QAChE,+DAA+D;QAC/D,8DAA8D;QAC9D,uCAAuC;QACvC,MAAM,CAAC,GAAG,GAAG,CAAC;QACd,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpD,KAAK;gBACL,KAAK;gBACL,MAAM,EAAE;oBACN,aAAa,EAAE,CAAC;oBAChB,kBAAkB,EAAE,GAAG;oBACvB,oBAAoB,EAAE,EAAE;iBACzB;aACF,CAAC,CAAC;YAEH,kDAAkD;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CACjE,CAAC;YACJ,CAAC;YAED,sDAAsD;YACtD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,MAAM,OAAO,GACX,KAAK,CAAC,gBAAgB,KAAK,CAAC;oBAC5B,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxC,IAAI,OAAO;oBAAE,MAAM;gBACnB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YACzC,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAEzD,gBAAgB;YAChB,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEhC,wCAAwC;YACxC,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;gBACtC,IAAI,KAAK,CAAC,gBAAgB,KAAK,CAAC,EAAE,CAAC;oBACjC,MAAM,GAAG,IAAI,CAAC;oBACd,MAAM;gBACR,CAAC;gBACD,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnC,CAAC;YAED,yDAAyD;YACzD,+DAA+D;YAC/D,2DAA2D;YAC3D,qDAAqD;YACrD,2BAA2B;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CACrB,cAAc,CACZ,aAAa,CAAC,EAAE,EAChB,SAAS,EACT,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAC9B,CACF,CAAC;YACJ,CAAC;YACD,0CAA0C;YAC1C,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBAAE,MAAM;gBACvB,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;YAC1C,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC5D,OAAO;gBACL,WAAW,EAAE,QAAQ,CAAC,gBAAgB;gBACtC,MAAM;gBACN,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;gBAC5C,mBAAmB;gBACnB,sBAAsB;aACvB,CAAC;QACJ,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,kEAAkE;QAClE,+DAA+D;QAC/D,wDAAwD;QACxD,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2HAA2H,EAAE,KAAK,IAAI,EAAE;QACzI,iEAAiE;QACjE,kEAAkE;QAClE,kEAAkE;QAClE,+DAA+D;QAC/D,gEAAgE;QAChE,oCAAoC;QACpC,EAAE;QACF,mEAAmE;QACnE,+DAA+D;QAC/D,6DAA6D;QAC7D,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,CACrC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpD,KAAK;gBACL,KAAK;gBACL,MAAM,EAAE;oBACN,aAAa,EAAE,CAAC;oBAChB,kBAAkB,EAAE,CAAC;oBACrB,oBAAoB,EAAE,CAAC;iBACxB;aACF,CAAC,CAAC;YACH,MAAM,QAAQ,GAA6B,EAAE,CAAC;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CACjC,UAAU,CAAC,KAAK,CACd,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CACpD,CACF,CAAC;gBACF,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC3D,0DAA0D;gBAC1D,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3B,CAAC;YACD,yDAAyD;YACzD,6BAA6B;YAC7B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;gBAC/C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACvC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;gBACrD,IAAI,CAAC,KAAK,EAAE;oBAAE,MAAM;gBACpB,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAClD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;QACpC,CAAC,CAAC,CACH,CACF,CAAC;QACF,4DAA4D;QAC5D,wCAAwC;QACxC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC;QACD,4DAA4D;QAC5D,8DAA8D;QAC9D,gEAAgE;QAChE,8DAA8D;QAC9D,wDAAwD;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;QAClE,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,8FAA8F,EAAE,GAAG,EAAE;IAC5G,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,+DAA+D;QAC/D,qDAAqD;QACrD,gEAAgE;QAChE,4DAA4D;QAC5D,oDAAoD;QACpD,MAAM,MAAM,CAAC,UAAU,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;gBAClD,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;gBACzB,KAAK;aACN,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,0DAA0D;YAC1D,qDAAqD;YACrD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACtE,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QACrB,CAAC,CAAC,CACH,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,MAAM,CAAC,qCAAqC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,MAAM,CAAC,qCAAqC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CACvE,EAAE,CACH,CAAC;QACF,MAAM,CAAC,qCAAqC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CACnE,MAAM,CACP,CAAC;QACF,MAAM,CAAC,qCAAqC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CACrE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}