@trigger.dev/react-hooks 0.0.0-bun-runtimes-20260909131057

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 (89) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/dist/commonjs/contexts.d.ts +4 -0
  4. package/dist/commonjs/contexts.js +10 -0
  5. package/dist/commonjs/contexts.js.map +1 -0
  6. package/dist/commonjs/hooks/useApiClient.d.ts +47 -0
  7. package/dist/commonjs/hooks/useApiClient.js +57 -0
  8. package/dist/commonjs/hooks/useApiClient.js.map +1 -0
  9. package/dist/commonjs/hooks/useInputStreamSend.d.ts +26 -0
  10. package/dist/commonjs/hooks/useInputStreamSend.js +45 -0
  11. package/dist/commonjs/hooks/useInputStreamSend.js.map +1 -0
  12. package/dist/commonjs/hooks/useRealtime.d.ts +336 -0
  13. package/dist/commonjs/hooks/useRealtime.js +642 -0
  14. package/dist/commonjs/hooks/useRealtime.js.map +1 -0
  15. package/dist/commonjs/hooks/useRun.d.ts +22 -0
  16. package/dist/commonjs/hooks/useRun.js +40 -0
  17. package/dist/commonjs/hooks/useRun.js.map +1 -0
  18. package/dist/commonjs/hooks/useSessionStream.d.ts +131 -0
  19. package/dist/commonjs/hooks/useSessionStream.js +236 -0
  20. package/dist/commonjs/hooks/useSessionStream.js.map +1 -0
  21. package/dist/commonjs/hooks/useSessionStreamChannel.d.ts +86 -0
  22. package/dist/commonjs/hooks/useSessionStreamChannel.js +209 -0
  23. package/dist/commonjs/hooks/useSessionStreamChannel.js.map +1 -0
  24. package/dist/commonjs/hooks/useTaskTrigger.d.ts +107 -0
  25. package/dist/commonjs/hooks/useTaskTrigger.js +139 -0
  26. package/dist/commonjs/hooks/useTaskTrigger.js.map +1 -0
  27. package/dist/commonjs/hooks/useWaitToken.d.ts +35 -0
  28. package/dist/commonjs/hooks/useWaitToken.js +52 -0
  29. package/dist/commonjs/hooks/useWaitToken.js.map +1 -0
  30. package/dist/commonjs/index.d.ts +9 -0
  31. package/dist/commonjs/index.js +26 -0
  32. package/dist/commonjs/index.js.map +1 -0
  33. package/dist/commonjs/package.json +3 -0
  34. package/dist/commonjs/utils/createContextAndHook.d.ts +14 -0
  35. package/dist/commonjs/utils/createContextAndHook.js +38 -0
  36. package/dist/commonjs/utils/createContextAndHook.js.map +1 -0
  37. package/dist/commonjs/utils/throttle.d.ts +6 -0
  38. package/dist/commonjs/utils/throttle.js +50 -0
  39. package/dist/commonjs/utils/throttle.js.map +1 -0
  40. package/dist/commonjs/utils/trigger-swr.d.ts +19 -0
  41. package/dist/commonjs/utils/trigger-swr.js +27 -0
  42. package/dist/commonjs/utils/trigger-swr.js.map +1 -0
  43. package/dist/commonjs/utils/useStableRequestCallback.d.ts +5 -0
  44. package/dist/commonjs/utils/useStableRequestCallback.js +17 -0
  45. package/dist/commonjs/utils/useStableRequestCallback.js.map +1 -0
  46. package/dist/esm/contexts.d.ts +4 -0
  47. package/dist/esm/contexts.js +5 -0
  48. package/dist/esm/contexts.js.map +1 -0
  49. package/dist/esm/hooks/useApiClient.d.ts +47 -0
  50. package/dist/esm/hooks/useApiClient.js +54 -0
  51. package/dist/esm/hooks/useApiClient.js.map +1 -0
  52. package/dist/esm/hooks/useInputStreamSend.d.ts +26 -0
  53. package/dist/esm/hooks/useInputStreamSend.js +39 -0
  54. package/dist/esm/hooks/useInputStreamSend.js.map +1 -0
  55. package/dist/esm/hooks/useRealtime.d.ts +336 -0
  56. package/dist/esm/hooks/useRealtime.js +635 -0
  57. package/dist/esm/hooks/useRealtime.js.map +1 -0
  58. package/dist/esm/hooks/useRun.d.ts +22 -0
  59. package/dist/esm/hooks/useRun.js +37 -0
  60. package/dist/esm/hooks/useRun.js.map +1 -0
  61. package/dist/esm/hooks/useSessionStream.d.ts +131 -0
  62. package/dist/esm/hooks/useSessionStream.js +233 -0
  63. package/dist/esm/hooks/useSessionStream.js.map +1 -0
  64. package/dist/esm/hooks/useSessionStreamChannel.d.ts +86 -0
  65. package/dist/esm/hooks/useSessionStreamChannel.js +206 -0
  66. package/dist/esm/hooks/useSessionStreamChannel.js.map +1 -0
  67. package/dist/esm/hooks/useTaskTrigger.d.ts +107 -0
  68. package/dist/esm/hooks/useTaskTrigger.js +131 -0
  69. package/dist/esm/hooks/useTaskTrigger.js.map +1 -0
  70. package/dist/esm/hooks/useWaitToken.d.ts +35 -0
  71. package/dist/esm/hooks/useWaitToken.js +46 -0
  72. package/dist/esm/hooks/useWaitToken.js.map +1 -0
  73. package/dist/esm/index.d.ts +9 -0
  74. package/dist/esm/index.js +10 -0
  75. package/dist/esm/index.js.map +1 -0
  76. package/dist/esm/package.json +3 -0
  77. package/dist/esm/utils/createContextAndHook.d.ts +14 -0
  78. package/dist/esm/utils/createContextAndHook.js +31 -0
  79. package/dist/esm/utils/createContextAndHook.js.map +1 -0
  80. package/dist/esm/utils/throttle.d.ts +6 -0
  81. package/dist/esm/utils/throttle.js +47 -0
  82. package/dist/esm/utils/throttle.js.map +1 -0
  83. package/dist/esm/utils/trigger-swr.d.ts +19 -0
  84. package/dist/esm/utils/trigger-swr.js +6 -0
  85. package/dist/esm/utils/trigger-swr.js.map +1 -0
  86. package/dist/esm/utils/useStableRequestCallback.d.ts +5 -0
  87. package/dist/esm/utils/useStableRequestCallback.js +14 -0
  88. package/dist/esm/utils/useStableRequestCallback.js.map +1 -0
  89. package/package.json +75 -0
@@ -0,0 +1,635 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useId, useRef, useState } from "react";
3
+ import { useSWR } from "../utils/trigger-swr.js";
4
+ import { useApiClient } from "./useApiClient.js";
5
+ import { createThrottledQueue } from "../utils/throttle.js";
6
+ import { useStableRequestCallback } from "../utils/useStableRequestCallback.js";
7
+ /**
8
+ * Hook to subscribe to realtime updates of a task run.
9
+ *
10
+ * @template TTask - The type of the task
11
+ * @param {string} [runId] - The unique identifier of the run to subscribe to
12
+ * @param {UseRealtimeSingleRunOptions} [options] - Configuration options for the subscription
13
+ * @returns {UseRealtimeRunInstance<TTask>} An object containing the current state of the run, error handling, and control methods
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * import type { myTask } from './path/to/task';
18
+ * const { run, error } = useRealtimeRun<typeof myTask>('run-id-123');
19
+ * ```
20
+ */
21
+ export function useRealtimeRun(runId, options) {
22
+ const hookId = useId();
23
+ const idKey = options?.id ?? hookId;
24
+ // Store the streams state in SWR, using the idKey as the key to share states.
25
+ const { data: run, mutate: mutateRun } = useSWR([idKey, "run"], null);
26
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, "error"], null);
27
+ // Add state to track when the subscription is complete
28
+ const { data: isComplete = false, mutate: setIsComplete } = useSWR([idKey, "complete"], null);
29
+ // Abort controller to cancel the current API call.
30
+ const abortControllerRef = useRef(null);
31
+ const stop = useCallback(() => {
32
+ if (abortControllerRef.current) {
33
+ abortControllerRef.current.abort();
34
+ abortControllerRef.current = null;
35
+ }
36
+ }, []);
37
+ const apiClient = useApiClient(options);
38
+ const onComplete = options?.onComplete;
39
+ const skipColumns = options?.skipColumns;
40
+ const stopOnCompletion = options?.stopOnCompletion;
41
+ const triggerRequest = useCallback(async () => {
42
+ try {
43
+ if (!runId || !apiClient) {
44
+ return;
45
+ }
46
+ const abortController = new AbortController();
47
+ abortControllerRef.current = abortController;
48
+ await processRealtimeRun(runId, { skipColumns }, apiClient, mutateRun, setError, abortControllerRef, typeof stopOnCompletion === "boolean" ? stopOnCompletion : true);
49
+ }
50
+ catch (err) {
51
+ // Ignore abort errors as they are expected.
52
+ if (err.name === "AbortError") {
53
+ abortControllerRef.current = null;
54
+ return;
55
+ }
56
+ setError(err);
57
+ }
58
+ finally {
59
+ if (abortControllerRef.current) {
60
+ abortControllerRef.current = null;
61
+ }
62
+ // Mark the subscription as complete
63
+ setIsComplete(true);
64
+ }
65
+ }, [runId, apiClient, mutateRun, setError, setIsComplete, skipColumns, stopOnCompletion]);
66
+ const requestSubscription = useStableRequestCallback(triggerRequest);
67
+ const hasCalledOnCompleteRef = useRef(false);
68
+ // Effect to handle onComplete callback
69
+ // Only call onComplete when the run has actually finished (has finishedAt),
70
+ // not just when the subscription stream ends (which can happen due to network issues)
71
+ useEffect(() => {
72
+ if (isComplete && run?.finishedAt && onComplete && !hasCalledOnCompleteRef.current) {
73
+ onComplete(run, error);
74
+ hasCalledOnCompleteRef.current = true;
75
+ }
76
+ }, [isComplete, run, error, onComplete]);
77
+ useEffect(() => {
78
+ if (typeof options?.enabled === "boolean" && !options.enabled) {
79
+ return;
80
+ }
81
+ if (!runId) {
82
+ return;
83
+ }
84
+ requestSubscription().finally(() => { });
85
+ return () => {
86
+ stop();
87
+ };
88
+ }, [runId, stop, options?.enabled, requestSubscription]);
89
+ useEffect(() => {
90
+ if (run?.finishedAt) {
91
+ setIsComplete(true);
92
+ }
93
+ }, [run, setIsComplete]);
94
+ return { run, error, stop };
95
+ }
96
+ /**
97
+ * Hook to subscribe to realtime updates of a task run with associated data streams.
98
+ *
99
+ * @template TTask - The type of the task
100
+ * @template TStreams - The type of the streams data
101
+ * @param {string} [runId] - The unique identifier of the run to subscribe to
102
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
103
+ * @returns {UseRealtimeRunWithStreamsInstance<TTask, TStreams>} An object containing the current state of the run, streams data, and error handling
104
+ *
105
+ * @example
106
+ * ```ts
107
+ * import type { myTask } from './path/to/task';
108
+ * const { run, streams, error } = useRealtimeRunWithStreams<typeof myTask, {
109
+ * output: string;
110
+ * }>('run-id-123');
111
+ * ```
112
+ */
113
+ export function useRealtimeRunWithStreams(runId, options) {
114
+ const hookId = useId();
115
+ const idKey = options?.id ?? hookId;
116
+ const [initialStreamsFallback] = useState({});
117
+ // Store the streams state in SWR, using the idKey as the key to share states.
118
+ const { data: streams, mutate: mutateStreams } = useSWR([idKey, "streams"], null, {
119
+ fallbackData: initialStreamsFallback,
120
+ });
121
+ // Keep the latest streams in a ref.
122
+ const streamsRef = useRef(streams ?? {});
123
+ useEffect(() => {
124
+ streamsRef.current = streams || {};
125
+ }, [streams]);
126
+ // Store the streams state in SWR, using the idKey as the key to share states.
127
+ const { data: run, mutate: mutateRun } = useSWR([idKey, "run"], null);
128
+ // Add state to track when the subscription is complete
129
+ const { data: isComplete = false, mutate: setIsComplete } = useSWR([idKey, "complete"], null);
130
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, "error"], null);
131
+ // Abort controller to cancel the current API call.
132
+ const abortControllerRef = useRef(null);
133
+ const stop = useCallback(() => {
134
+ if (abortControllerRef.current) {
135
+ abortControllerRef.current.abort();
136
+ abortControllerRef.current = null;
137
+ }
138
+ }, []);
139
+ const apiClient = useApiClient(options);
140
+ const onComplete = options?.onComplete;
141
+ const skipColumns = options?.skipColumns;
142
+ const stopOnCompletion = options?.stopOnCompletion;
143
+ const throttleInMs = options?.throttleInMs;
144
+ const triggerRequest = useCallback(async () => {
145
+ try {
146
+ if (!runId || !apiClient) {
147
+ return;
148
+ }
149
+ const abortController = new AbortController();
150
+ abortControllerRef.current = abortController;
151
+ await processRealtimeRunWithStreams(runId, { skipColumns }, apiClient, mutateRun, mutateStreams, streamsRef, setError, abortControllerRef, typeof stopOnCompletion === "boolean" ? stopOnCompletion : true, throttleInMs ?? 16);
152
+ }
153
+ catch (err) {
154
+ // Ignore abort errors as they are expected.
155
+ if (err.name === "AbortError") {
156
+ abortControllerRef.current = null;
157
+ return;
158
+ }
159
+ setError(err);
160
+ }
161
+ finally {
162
+ if (abortControllerRef.current) {
163
+ abortControllerRef.current = null;
164
+ }
165
+ // Mark the subscription as complete
166
+ setIsComplete(true);
167
+ }
168
+ }, [
169
+ runId,
170
+ apiClient,
171
+ mutateRun,
172
+ mutateStreams,
173
+ setError,
174
+ setIsComplete,
175
+ skipColumns,
176
+ stopOnCompletion,
177
+ throttleInMs,
178
+ ]);
179
+ const requestSubscription = useStableRequestCallback(triggerRequest);
180
+ const hasCalledOnCompleteRef = useRef(false);
181
+ // Effect to handle onComplete callback
182
+ // Only call onComplete when the run has actually finished (has finishedAt),
183
+ // not just when the subscription stream ends (which can happen due to network issues)
184
+ useEffect(() => {
185
+ if (isComplete && run?.finishedAt && onComplete && !hasCalledOnCompleteRef.current) {
186
+ onComplete(run, error);
187
+ hasCalledOnCompleteRef.current = true;
188
+ }
189
+ }, [isComplete, run, error, onComplete]);
190
+ useEffect(() => {
191
+ if (typeof options?.enabled === "boolean" && !options.enabled) {
192
+ return;
193
+ }
194
+ if (!runId) {
195
+ return;
196
+ }
197
+ requestSubscription().finally(() => { });
198
+ return () => {
199
+ stop();
200
+ };
201
+ }, [runId, stop, options?.enabled, requestSubscription]);
202
+ useEffect(() => {
203
+ if (run?.finishedAt) {
204
+ setIsComplete(true);
205
+ }
206
+ }, [run, setIsComplete]);
207
+ return { run, streams: streams ?? initialStreamsFallback, error, stop };
208
+ }
209
+ /**
210
+ * Hook to subscribe to realtime updates of task runs filtered by tag(s).
211
+ *
212
+ * @template TTask - The type of the task
213
+ * @param {string | string[]} tag - The tag or array of tags to filter runs by
214
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
215
+ * @returns {UseRealtimeRunsInstance<TTask>} An object containing the current state of the runs and any error encountered
216
+ *
217
+ * @example
218
+ * ```ts
219
+ * import type { myTask } from './path/to/task';
220
+ * const { runs, error } = useRealtimeRunsWithTag<typeof myTask>('my-tag');
221
+ * // Or with multiple tags
222
+ * const { runs, error } = useRealtimeRunsWithTag<typeof myTask>(['tag1', 'tag2']);
223
+ * // Or with a createdAt filter
224
+ * const { runs, error } = useRealtimeRunsWithTag<typeof myTask>('my-tag', { createdAt: '1h' });
225
+ * ```
226
+ */
227
+ export function useRealtimeRunsWithTag(tag, options) {
228
+ const normalizedTag = (Array.isArray(tag) ? tag : [tag]).join("-");
229
+ const hookId = useId();
230
+ const idKey = options?.id ?? hookId;
231
+ // Store the streams state in SWR, using the idKey as the key to share states.
232
+ const { data: runs, mutate: mutateRuns } = useSWR([idKey, "run"], null, {
233
+ fallbackData: [],
234
+ });
235
+ // Keep the latest streams in a ref.
236
+ const runsRef = useRef([]);
237
+ useEffect(() => {
238
+ runsRef.current = runs ?? [];
239
+ }, [runs]);
240
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, "error"], null);
241
+ // Abort controller to cancel the current API call.
242
+ const abortControllerRef = useRef(null);
243
+ const stop = useCallback(() => {
244
+ if (abortControllerRef.current) {
245
+ abortControllerRef.current.abort();
246
+ abortControllerRef.current = null;
247
+ }
248
+ }, []);
249
+ const apiClient = useApiClient(options);
250
+ const createdAt = options?.createdAt;
251
+ const skipColumns = options?.skipColumns;
252
+ const triggerRequest = useCallback(async () => {
253
+ try {
254
+ if (!apiClient) {
255
+ return;
256
+ }
257
+ const abortController = new AbortController();
258
+ abortControllerRef.current = abortController;
259
+ await processRealtimeRunsWithTag(tag, { createdAt, skipColumns }, apiClient, mutateRuns, runsRef, setError, abortControllerRef);
260
+ }
261
+ catch (err) {
262
+ // Ignore abort errors as they are expected.
263
+ if (err.name === "AbortError") {
264
+ abortControllerRef.current = null;
265
+ return;
266
+ }
267
+ setError(err);
268
+ }
269
+ finally {
270
+ if (abortControllerRef.current) {
271
+ abortControllerRef.current = null;
272
+ }
273
+ }
274
+ }, [tag, createdAt, skipColumns, apiClient, mutateRuns, setError]);
275
+ const requestSubscription = useStableRequestCallback(triggerRequest);
276
+ useEffect(() => {
277
+ if (typeof options?.enabled === "boolean" && !options.enabled) {
278
+ return;
279
+ }
280
+ requestSubscription().finally(() => { });
281
+ return () => {
282
+ stop();
283
+ };
284
+ }, [normalizedTag, stop, options?.enabled, requestSubscription]);
285
+ return { runs: runs ?? [], error, stop };
286
+ }
287
+ /**
288
+ * Hook to subscribe to realtime updates of a batch of task runs.
289
+ *
290
+ * @template TTask - The type of the task
291
+ * @param {string} batchId - The unique identifier of the batch to subscribe to
292
+ * @param {UseRealtimeRunOptions} [options] - Configuration options for the subscription
293
+ * @returns {UseRealtimeRunsInstance<TTask>} An object containing the current state of the runs, error handling, and control methods
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * import type { myTask } from './path/to/task';
298
+ * const { runs, error } = useRealtimeBatch<typeof myTask>('batch-id-123');
299
+ * ```
300
+ */
301
+ export function useRealtimeBatch(batchId, options) {
302
+ const hookId = useId();
303
+ const idKey = options?.id ?? hookId;
304
+ // Store the streams state in SWR, using the idKey as the key to share states.
305
+ const { data: runs, mutate: mutateRuns } = useSWR([idKey, "run"], null, {
306
+ fallbackData: [],
307
+ });
308
+ // Keep the latest streams in a ref.
309
+ const runsRef = useRef([]);
310
+ useEffect(() => {
311
+ runsRef.current = runs ?? [];
312
+ }, [runs]);
313
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, "error"], null);
314
+ // Abort controller to cancel the current API call.
315
+ const abortControllerRef = useRef(null);
316
+ const stop = useCallback(() => {
317
+ if (abortControllerRef.current) {
318
+ abortControllerRef.current.abort();
319
+ abortControllerRef.current = null;
320
+ }
321
+ }, []);
322
+ const apiClient = useApiClient(options);
323
+ const triggerRequest = useCallback(async () => {
324
+ try {
325
+ if (!apiClient) {
326
+ return;
327
+ }
328
+ const abortController = new AbortController();
329
+ abortControllerRef.current = abortController;
330
+ await processRealtimeBatch(batchId, apiClient, mutateRuns, runsRef, setError, abortControllerRef);
331
+ }
332
+ catch (err) {
333
+ // Ignore abort errors as they are expected.
334
+ if (err.name === "AbortError") {
335
+ abortControllerRef.current = null;
336
+ return;
337
+ }
338
+ setError(err);
339
+ }
340
+ finally {
341
+ if (abortControllerRef.current) {
342
+ abortControllerRef.current = null;
343
+ }
344
+ }
345
+ }, [batchId, mutateRuns, runsRef, abortControllerRef, apiClient, setError]);
346
+ const requestSubscription = useStableRequestCallback(triggerRequest);
347
+ useEffect(() => {
348
+ if (typeof options?.enabled === "boolean" && !options.enabled) {
349
+ return;
350
+ }
351
+ requestSubscription().finally(() => { });
352
+ return () => {
353
+ stop();
354
+ };
355
+ }, [batchId, stop, options?.enabled, requestSubscription]);
356
+ return { runs: runs ?? [], error, stop };
357
+ }
358
+ export function useRealtimeStream(runIdOrDefinedStream, streamKeyOrOptionsOrRunId, options) {
359
+ let runId;
360
+ let streamKey;
361
+ let resolvedOptions;
362
+ if (typeof runIdOrDefinedStream === "string") {
363
+ runId = runIdOrDefinedStream;
364
+ streamKey =
365
+ typeof streamKeyOrOptionsOrRunId === "string" ? streamKeyOrOptionsOrRunId : "default";
366
+ resolvedOptions =
367
+ typeof streamKeyOrOptionsOrRunId === "string" ? options : streamKeyOrOptionsOrRunId;
368
+ }
369
+ else {
370
+ if (typeof streamKeyOrOptionsOrRunId !== "string") {
371
+ throw new Error("Invalid second argument to useRealtimeStream. When using a defined stream instance, the second argument to useRealtimeStream must be a run ID.");
372
+ }
373
+ runId = streamKeyOrOptionsOrRunId;
374
+ streamKey = runIdOrDefinedStream.id;
375
+ resolvedOptions = options;
376
+ }
377
+ return useRealtimeStreamImplementation(runId, streamKey, resolvedOptions);
378
+ }
379
+ function useRealtimeStreamImplementation(runId, streamKey, options) {
380
+ const hookId = useId();
381
+ const idKey = options?.id ?? hookId;
382
+ const [initialPartsFallback] = useState([]);
383
+ // Store the streams state in SWR, using the idKey as the key to share states.
384
+ const { data: parts, mutate: mutateParts } = useSWR([idKey, runId, streamKey, "parts"], null, {
385
+ fallbackData: initialPartsFallback,
386
+ });
387
+ // Keep the latest streams in a ref.
388
+ const partsRef = useRef(parts ?? []);
389
+ useEffect(() => {
390
+ partsRef.current = parts || [];
391
+ }, [parts]);
392
+ const { data: persistedLastEventId, mutate: mutateLastEventId } = useSWR([idKey, runId, streamKey, "lastEventId"], null);
393
+ const lastEventIdRef = useRef(persistedLastEventId);
394
+ const streamIdentityRef = useRef(`${idKey}:${runId}:${streamKey}`);
395
+ useEffect(() => {
396
+ const identity = `${idKey}:${runId}:${streamKey}`;
397
+ if (streamIdentityRef.current !== identity) {
398
+ streamIdentityRef.current = identity;
399
+ lastEventIdRef.current = persistedLastEventId;
400
+ }
401
+ }, [idKey, runId, streamKey, persistedLastEventId]);
402
+ // Add state to track when the subscription is complete
403
+ const { data: _isComplete = false, mutate: setIsComplete } = useSWR([idKey, runId, streamKey, "complete"], null);
404
+ const { data: error = undefined, mutate: setError } = useSWR([idKey, runId, streamKey, "error"], null);
405
+ // Abort controller to cancel the current API call.
406
+ const abortControllerRef = useRef(null);
407
+ const stop = useCallback(() => {
408
+ if (abortControllerRef.current) {
409
+ abortControllerRef.current.abort();
410
+ abortControllerRef.current = null;
411
+ }
412
+ }, []);
413
+ const onDataCallback = options?.onData;
414
+ const onData = useCallback((data) => {
415
+ if (onDataCallback) {
416
+ onDataCallback(data);
417
+ }
418
+ }, [onDataCallback]);
419
+ const onPartsCallback = options?.onParts;
420
+ const onParts = useCallback((partsBatch) => {
421
+ if (onPartsCallback) {
422
+ onPartsCallback(partsBatch);
423
+ }
424
+ }, [onPartsCallback]);
425
+ const apiClient = useApiClient(options);
426
+ const timeoutInSeconds = options?.timeoutInSeconds;
427
+ const startIndex = options?.startIndex;
428
+ const startEventId = options?.lastEventId;
429
+ const throttleInMs = options?.throttleInMs;
430
+ const from = options?.from;
431
+ const maxParts = options?.maxParts;
432
+ useEffect(() => {
433
+ if (maxParts != null && maxParts >= 0) {
434
+ const current = partsRef.current;
435
+ if (current.length > maxParts) {
436
+ mutateParts(current.slice(current.length - maxParts));
437
+ }
438
+ }
439
+ }, [maxParts, mutateParts]);
440
+ const triggerRequest = useCallback(async () => {
441
+ try {
442
+ if (!runId || !apiClient) {
443
+ return;
444
+ }
445
+ const abortController = new AbortController();
446
+ abortControllerRef.current = abortController;
447
+ await processRealtimeStream(runId, streamKey, apiClient, mutateParts, partsRef, setError, onData, abortControllerRef, timeoutInSeconds, startIndex, throttleInMs ?? 16, from, maxParts, lastEventIdRef, (id) => mutateLastEventId(id, false), startEventId !== undefined ? String(startEventId) : undefined, onParts);
448
+ }
449
+ catch (err) {
450
+ // Ignore abort errors as they are expected.
451
+ if (err.name === "AbortError") {
452
+ abortControllerRef.current = null;
453
+ return;
454
+ }
455
+ setError(err);
456
+ }
457
+ finally {
458
+ if (abortControllerRef.current) {
459
+ abortControllerRef.current = null;
460
+ }
461
+ // Mark the subscription as complete
462
+ setIsComplete(true);
463
+ }
464
+ }, [
465
+ runId,
466
+ streamKey,
467
+ apiClient,
468
+ mutateParts,
469
+ setError,
470
+ setIsComplete,
471
+ onData,
472
+ onParts,
473
+ timeoutInSeconds,
474
+ startIndex,
475
+ startEventId,
476
+ throttleInMs,
477
+ from,
478
+ maxParts,
479
+ mutateLastEventId,
480
+ ]);
481
+ const requestSubscription = useStableRequestCallback(triggerRequest);
482
+ useEffect(() => {
483
+ if (typeof options?.enabled === "boolean" && !options.enabled) {
484
+ return;
485
+ }
486
+ if (!runId) {
487
+ return;
488
+ }
489
+ requestSubscription().finally(() => { });
490
+ return () => {
491
+ stop();
492
+ };
493
+ }, [runId, stop, options?.enabled, requestSubscription]);
494
+ return { parts: parts ?? initialPartsFallback, lastEventId: persistedLastEventId, error, stop };
495
+ }
496
+ async function processRealtimeBatch(batchId, apiClient, mutateRunsData, existingRunsRef, onError, abortControllerRef) {
497
+ const subscription = apiClient.subscribeToBatch(batchId, {
498
+ signal: abortControllerRef.current?.signal,
499
+ onFetchError: onError,
500
+ });
501
+ for await (const part of subscription) {
502
+ mutateRunsData(insertRunShapeInOrder(existingRunsRef.current, part));
503
+ }
504
+ }
505
+ // Inserts and then orders by the run createdAt timestamp, and ensures that the run is not duplicated
506
+ function insertRunShapeInOrder(previousRuns, run) {
507
+ const existingRun = previousRuns.find((r) => r.id === run.id);
508
+ if (existingRun) {
509
+ return previousRuns.map((r) => (r.id === run.id ? run : r));
510
+ }
511
+ const runCreatedAt = run.createdAt;
512
+ const index = previousRuns.findIndex((r) => r.createdAt > runCreatedAt);
513
+ if (index === -1) {
514
+ return [...previousRuns, run];
515
+ }
516
+ return [...previousRuns.slice(0, index), run, ...previousRuns.slice(index)];
517
+ }
518
+ async function processRealtimeRunsWithTag(tag, filters, apiClient, mutateRunsData, existingRunsRef, onError, abortControllerRef) {
519
+ const subscription = apiClient.subscribeToRunsWithTag(tag, filters, {
520
+ signal: abortControllerRef.current?.signal,
521
+ onFetchError: onError,
522
+ });
523
+ for await (const part of subscription) {
524
+ mutateRunsData(insertRunShape(existingRunsRef.current, part));
525
+ }
526
+ }
527
+ // Replaces or inserts a run shape, ordered by the createdAt timestamp
528
+ function insertRunShape(previousRuns, run) {
529
+ const existingRun = previousRuns.find((r) => r.id === run.id);
530
+ if (existingRun) {
531
+ return previousRuns.map((r) => (r.id === run.id ? run : r));
532
+ }
533
+ const createdAt = run.createdAt;
534
+ const index = previousRuns.findIndex((r) => r.createdAt > createdAt);
535
+ if (index === -1) {
536
+ return [...previousRuns, run];
537
+ }
538
+ return [...previousRuns.slice(0, index), run, ...previousRuns.slice(index)];
539
+ }
540
+ async function processRealtimeRunWithStreams(runId, filters, apiClient, mutateRunData, mutateStreamData, existingDataRef, onError, abortControllerRef, stopOnCompletion = true, throttleInMs) {
541
+ const subscription = apiClient.subscribeToRun(runId, {
542
+ signal: abortControllerRef.current?.signal,
543
+ closeOnComplete: stopOnCompletion,
544
+ onFetchError: onError,
545
+ skipColumns: filters.skipColumns,
546
+ });
547
+ const streamQueue = createThrottledQueue(async (updates) => {
548
+ const nextStreamData = { ...existingDataRef.current };
549
+ // Group updates by type
550
+ const updatesByType = updates.reduce((acc, update) => {
551
+ if (!acc[update.type]) {
552
+ acc[update.type] = [];
553
+ }
554
+ acc[update.type].push(update.chunk);
555
+ return acc;
556
+ }, {});
557
+ // Apply all updates
558
+ for (const [type, chunks] of Object.entries(updatesByType)) {
559
+ // @ts-ignore
560
+ nextStreamData[type] = [...(existingDataRef.current[type] || []), ...chunks];
561
+ }
562
+ mutateStreamData(nextStreamData);
563
+ }, throttleInMs);
564
+ for await (const part of subscription.withStreams()) {
565
+ if (part.type === "run") {
566
+ mutateRunData(part.run);
567
+ }
568
+ else {
569
+ streamQueue.add({
570
+ type: part.type,
571
+ // @ts-ignore
572
+ chunk: part.chunk,
573
+ });
574
+ }
575
+ }
576
+ }
577
+ async function processRealtimeRun(runId, filters, apiClient, mutateRunData, onError, abortControllerRef, stopOnCompletion = true) {
578
+ const subscription = apiClient.subscribeToRun(runId, {
579
+ signal: abortControllerRef.current?.signal,
580
+ closeOnComplete: stopOnCompletion,
581
+ onFetchError: onError,
582
+ skipColumns: filters.skipColumns,
583
+ });
584
+ for await (const part of subscription) {
585
+ mutateRunData(part);
586
+ }
587
+ }
588
+ async function processRealtimeStream(runId, streamKey, apiClient, mutatePartsData, existingPartsRef, onError, onData, abortControllerRef, timeoutInSeconds, startIndex, throttleInMs, from, maxParts, lastEventIdRef, persistLastEventId, userLastEventId, onParts) {
589
+ try {
590
+ const resumeFromEventId = lastEventIdRef?.current ??
591
+ userLastEventId ??
592
+ (startIndex ? (startIndex - 1).toString() : undefined);
593
+ const partsQueue = createThrottledQueue(async (batch) => {
594
+ const combined = [...existingPartsRef.current, ...batch.map((part) => part.chunk)];
595
+ const bounded = maxParts != null && maxParts >= 0 && combined.length > maxParts
596
+ ? combined.slice(combined.length - maxParts)
597
+ : combined;
598
+ existingPartsRef.current = bounded;
599
+ mutatePartsData(bounded);
600
+ if (persistLastEventId && lastEventIdRef?.current) {
601
+ persistLastEventId(lastEventIdRef.current);
602
+ }
603
+ onParts?.(batch);
604
+ }, throttleInMs);
605
+ const stream = await apiClient.fetchStream(runId, streamKey, {
606
+ signal: abortControllerRef.current?.signal,
607
+ timeoutInSeconds,
608
+ lastEventId: resumeFromEventId,
609
+ from: startIndex !== undefined ? undefined : from,
610
+ onPart: (part) => {
611
+ if (part.id && lastEventIdRef) {
612
+ lastEventIdRef.current = part.id;
613
+ }
614
+ partsQueue.add(part);
615
+ },
616
+ });
617
+ for await (const part of stream) {
618
+ onData(part);
619
+ }
620
+ await partsQueue.flush();
621
+ }
622
+ catch (err) {
623
+ if (err.name === "AbortError") {
624
+ return;
625
+ }
626
+ if (err instanceof Error) {
627
+ onError(err);
628
+ }
629
+ else {
630
+ onError(new Error(String(err)));
631
+ }
632
+ throw err;
633
+ }
634
+ }
635
+ //# sourceMappingURL=useRealtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useRealtime.js","sourceRoot":"","sources":["../../../src/hooks/useRealtime.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAYb,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAkDhF;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,cAAc,CAC5B,KAAc,EACd,OAA4C;IAE5C,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;IAEpC,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1F,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAC1D,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,IAAI,CACL,CAAC;IAEF,uDAAuD;IACvD,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAChE,CAAC,KAAK,EAAE,UAAU,CAAC,EACnB,IAAI,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;IAEnD,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE7C,MAAM,kBAAkB,CACtB,KAAK,EACL,EAAE,WAAW,EAAE,EACf,SAAS,EACT,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,OAAO,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAChE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4CAA4C;YAC5C,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,oCAAoC;YACpC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC1F,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAErE,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,uCAAuC;IACvC,4EAA4E;IAC5E,sFAAsF;IACtF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,UAAU,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACnF,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvB,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;QACxC,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzB,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC9B,CAAC;AAsBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,yBAAyB,CAIvC,KAAc,EACd,OAA4C;IAE5C,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;IAEpC,MAAM,CAAC,sBAAsB,CAAC,GAAG,QAAQ,CAAC,EAA6B,CAAC,CAAC;IAEzE,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CACrD,CAAC,KAAK,EAAE,SAAS,CAAC,EAClB,IAAI,EACJ;QACE,YAAY,EAAE,sBAAsB;KACrC,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,UAAU,GAAG,MAAM,CAA0B,OAAO,IAAK,EAA8B,CAAC,CAAC;IAC/F,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,OAAO,GAAG,OAAO,IAAK,EAA8B,CAAC;IAClE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IAE1F,uDAAuD;IACvD,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAChE,CAAC,KAAK,EAAE,UAAU,CAAC,EACnB,IAAI,CACL,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAC1D,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,IAAI,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;IACzC,MAAM,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;IACnD,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAE3C,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE7C,MAAM,6BAA6B,CACjC,KAAK,EACL,EAAE,WAAW,EAAE,EACf,SAAS,EACT,SAAS,EACT,aAAa,EACb,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,OAAO,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAC/D,YAAY,IAAI,EAAE,CACnB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4CAA4C;YAC5C,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,oCAAoC;YACpC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE;QACD,KAAK;QACL,SAAS;QACT,SAAS;QACT,aAAa;QACb,QAAQ;QACR,aAAa;QACb,WAAW;QACX,gBAAgB;QAChB,YAAY;KACb,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAErE,MAAM,sBAAsB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,uCAAuC;IACvC,4EAA4E;IAC5E,sFAAsF;IACtF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,IAAI,GAAG,EAAE,UAAU,IAAI,UAAU,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;YACnF,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACvB,sBAAsB,CAAC,OAAO,GAAG,IAAI,CAAC;QACxC,CAAC;IACH,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC1E,CAAC;AAuCD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAsB,EACtB,OAAuC;IAEvC,MAAM,aAAa,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;IAEpC,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;QAC5F,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAuB,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAC1D,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,IAAI,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;IAEzC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE7C,MAAM,0BAA0B,CAC9B,GAAG,EACH,EAAE,SAAS,EAAE,WAAW,EAAE,EAC1B,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4CAA4C;YAC5C,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEjE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,OAA+B;IAE/B,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;IAEpC,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;QAC5F,YAAY,EAAE,EAAE;KACjB,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,OAAO,GAAG,MAAM,CAAuB,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAC1D,CAAC,KAAK,EAAE,OAAO,CAAC,EAChB,IAAI,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAExC,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE7C,MAAM,oBAAoB,CACxB,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,kBAAkB,CACnB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4CAA4C;YAC5C,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC5E,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE3D,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC3C,CAAC;AA8MD,MAAM,UAAU,iBAAiB,CAC/B,oBAA2D,EAC3D,yBAAoE,EACpE,OAAyC;IAEzC,IAAI,KAAa,CAAC;IAClB,IAAI,SAAiB,CAAC;IACtB,IAAI,eAA4D,CAAC;IAEjE,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE,CAAC;QAC7C,KAAK,GAAG,oBAAoB,CAAC;QAC7B,SAAS;YACP,OAAO,yBAAyB,KAAK,QAAQ,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,eAAe;YACb,OAAO,yBAAyB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,yBAAyB,KAAK,QAAQ,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,gJAAgJ,CACjJ,CAAC;QACJ,CAAC;QAED,KAAK,GAAG,yBAAyB,CAAC;QAClC,SAAS,GAAG,oBAAoB,CAAC,EAAE,CAAC;QACpC,eAAe,GAAG,OAAO,CAAC;IAC5B,CAAC;IAED,OAAO,+BAA+B,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAa,EACb,SAAiB,EACjB,OAAyC;IAEzC,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,OAAO,EAAE,EAAE,IAAI,MAAM,CAAC;IAEpC,MAAM,CAAC,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAkB,CAAC,CAAC;IAE5D,8EAA8E;IAC9E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CACjD,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAClC,IAAI,EACJ;QACE,YAAY,EAAE,oBAAoB;KACnC,CACF,CAAC;IAEF,oCAAoC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAe,KAAK,IAAK,EAAmB,CAAC,CAAC;IACrE,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,KAAK,IAAK,EAAmB,CAAC;IACnD,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,CACtE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,EACxC,IAAI,CACL,CAAC;IACF,MAAM,cAAc,GAAG,MAAM,CAAqB,oBAAoB,CAAC,CAAC;IACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC;IACnE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,KAAK,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QAClD,IAAI,iBAAiB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC3C,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAC;YACrC,cAAc,CAAC,OAAO,GAAG,oBAAoB,CAAC;QAChD,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAEpD,uDAAuD;IACvD,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CACjE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,EACrC,IAAI,CACL,CAAC;IAEF,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAC1D,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAClC,IAAI,CACL,CAAC;IAEF,mDAAmD;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAC/B,kBAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;QACpC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,OAAO,EAAE,MAAM,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,CACxB,CAAC,IAAW,EAAE,EAAE;QACd,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,eAAe,GAAG,OAAO,EAAE,OAAO,CAAC;IACzC,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,UAAuC,EAAE,EAAE;QAC1C,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,OAAO,EAAE,gBAAgB,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACvC,MAAM,YAAY,GAAG,OAAO,EAAE,WAAW,CAAC;IAC1C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;IAC3B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;IAE5B,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;YAC9C,kBAAkB,CAAC,OAAO,GAAG,eAAe,CAAC;YAE7C,MAAM,qBAAqB,CACzB,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,YAAY,IAAI,EAAE,EAClB,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,EACpC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,EAC7D,OAAO,CACR,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,4CAA4C;YAC5C,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;gBAClC,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,GAAY,CAAC,CAAC;QACzB,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC/B,kBAAkB,CAAC,OAAO,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,oCAAoC;YACpC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE;QACD,KAAK;QACL,SAAS;QACT,SAAS;QACT,WAAW;QACX,QAAQ;QACR,aAAa;QACb,MAAM;QACN,OAAO;QACP,gBAAgB;QAChB,UAAU;QACV,YAAY;QACZ,YAAY;QACZ,IAAI;QACJ,QAAQ;QACR,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;QACT,CAAC;QAED,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAExC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAEzD,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClG,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAAe,EACf,SAAoB,EACpB,cAAkD,EAClD,eAA6D,EAC7D,OAA2B,EAC3B,kBAAkE;IAElE,MAAM,YAAY,GAAG,SAAS,CAAC,gBAAgB,CAAuB,OAAO,EAAE;QAC7E,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;QAC1C,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACtC,cAAc,CAAC,qBAAqB,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,SAAS,qBAAqB,CAC5B,YAAkC,EAClC,GAAuB;IAEvB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC;IACnC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC,CAAC;IACxE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,0BAA0B,CACvC,GAAsB,EACtB,OAAqE,EACrE,SAAoB,EACpB,cAAkD,EAClD,eAA6D,EAC7D,OAA2B,EAC3B,kBAAkE;IAElE,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,CAAuB,GAAG,EAAE,OAAO,EAAE;QACxF,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;QAC1C,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACtC,cAAc,CAAC,cAAc,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,SAAS,cAAc,CACrB,YAAkC,EAClC,GAAuB;IAEvB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAEhC,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;IAErE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,YAAY,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,6BAA6B,CAI1C,KAAa,EACb,OAAiD,EACjD,SAAoB,EACpB,aAA+C,EAC/C,gBAAuD,EACvD,eAAgE,EAChE,OAA2B,EAC3B,kBAAkE,EAClE,gBAAgB,GAAY,IAAI,EAChC,YAAqB;IAErB,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAuB,KAAK,EAAE;QACzE,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;QAC1C,eAAe,EAAE,gBAAgB;QACjC,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IAOH,MAAM,WAAW,GAAG,oBAAoB,CAAe,KAAK,EAAE,OAAO,EAAE,EAAE;QACvE,MAAM,cAAc,GAAG,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,CAAC;QAEtD,wBAAwB;QACxB,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACxB,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,GAAG,CAAC;QACb,CAAC,EACD,EAAmC,CACpC,CAAC;QAEF,oBAAoB;QACpB,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3D,aAAa;YACb,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;QAC/E,CAAC;QAED,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,CAAC,WAAW,EAAY,EAAE,CAAC;QAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,GAAG,CAAC;gBACd,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa;gBACb,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAa,EACb,OAAiD,EACjD,SAAoB,EACpB,aAA+C,EAC/C,OAA2B,EAC3B,kBAAkE,EAClE,gBAAgB,GAAY,IAAI;IAEhC,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAuB,KAAK,EAAE;QACzE,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;QAC1C,eAAe,EAAE,gBAAgB;QACjC,YAAY,EAAE,OAAO;QACrB,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC,CAAC;IAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACtC,aAAa,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,KAAa,EACb,SAAiB,EACjB,SAAoB,EACpB,eAA2C,EAC3C,gBAAsD,EACtD,OAA2B,EAC3B,MAA6B,EAC7B,kBAAkE,EAClE,gBAAyB,EACzB,UAAmB,EACnB,YAAqB,EACrB,IAA6B,EAC7B,QAAiB,EACjB,cAA2D,EAC3D,kBAAyC,EACzC,eAAwB,EACxB,OAAsD;IAEtD,IAAI,CAAC;QACH,MAAM,iBAAiB,GACrB,cAAc,EAAE,OAAO;YACvB,eAAe;YACf,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,oBAAoB,CAAuB,KAAK,EAAE,KAAK,EAAE,EAAE;YAC5E,MAAM,QAAQ,GAAG,CAAC,GAAG,gBAAgB,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACnF,MAAM,OAAO,GACX,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ;gBAC7D,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC;gBAC5C,CAAC,CAAC,QAAQ,CAAC;YACf,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC;YACnC,eAAe,CAAC,OAAO,CAAC,CAAC;YACzB,IAAI,kBAAkB,IAAI,cAAc,EAAE,OAAO,EAAE,CAAC;gBAClD,kBAAkB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,EAAE,YAAY,CAAC,CAAC;QAEjB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,WAAW,CAAQ,KAAK,EAAE,SAAS,EAAE;YAClE,MAAM,EAAE,kBAAkB,CAAC,OAAO,EAAE,MAAM;YAC1C,gBAAgB;YAChB,WAAW,EAAE,iBAAiB;YAC9B,IAAI,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YACjD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACf,IAAI,IAAI,CAAC,EAAE,IAAI,cAAc,EAAE,CAAC;oBAC9B,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;gBACnC,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;SACF,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC;QAED,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QAED,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}