telnyx 6.41.0 → 6.42.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 (278) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/client.d.mts +2 -2
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +2 -2
  5. package/client.d.ts.map +1 -1
  6. package/client.js +11 -0
  7. package/client.js.map +1 -1
  8. package/client.mjs +11 -0
  9. package/client.mjs.map +1 -1
  10. package/core/EventEmitter.d.mts +11 -0
  11. package/core/EventEmitter.d.mts.map +1 -1
  12. package/core/EventEmitter.d.ts +11 -0
  13. package/core/EventEmitter.d.ts.map +1 -1
  14. package/core/EventEmitter.js +15 -1
  15. package/core/EventEmitter.js.map +1 -1
  16. package/core/EventEmitter.mjs +13 -0
  17. package/core/EventEmitter.mjs.map +1 -1
  18. package/core/pagination.d.mts.map +1 -1
  19. package/core/pagination.d.ts.map +1 -1
  20. package/internal/detect-platform.js +1 -1
  21. package/internal/detect-platform.js.map +1 -1
  22. package/internal/detect-platform.mjs +1 -1
  23. package/internal/detect-platform.mjs.map +1 -1
  24. package/internal/types.d.mts +6 -6
  25. package/internal/types.d.mts.map +1 -1
  26. package/internal/types.d.ts +6 -6
  27. package/internal/types.d.ts.map +1 -1
  28. package/internal/utils/env.js +2 -2
  29. package/internal/utils/env.js.map +1 -1
  30. package/internal/utils/env.mjs +2 -2
  31. package/internal/utils/env.mjs.map +1 -1
  32. package/internal/ws-adapter-browser.d.mts +34 -0
  33. package/internal/ws-adapter-browser.d.mts.map +1 -0
  34. package/internal/ws-adapter-browser.d.ts +34 -0
  35. package/internal/ws-adapter-browser.d.ts.map +1 -0
  36. package/internal/ws-adapter-browser.js +88 -0
  37. package/internal/ws-adapter-browser.js.map +1 -0
  38. package/internal/ws-adapter-browser.mjs +84 -0
  39. package/internal/ws-adapter-browser.mjs.map +1 -0
  40. package/internal/ws-adapter-node.d.mts +27 -0
  41. package/internal/ws-adapter-node.d.mts.map +1 -0
  42. package/internal/ws-adapter-node.d.ts +27 -0
  43. package/internal/ws-adapter-node.d.ts.map +1 -0
  44. package/internal/ws-adapter-node.js +90 -0
  45. package/internal/ws-adapter-node.js.map +1 -0
  46. package/internal/ws-adapter-node.mjs +86 -0
  47. package/internal/ws-adapter-node.mjs.map +1 -0
  48. package/internal/ws-adapter.d.mts +24 -0
  49. package/internal/ws-adapter.d.mts.map +1 -0
  50. package/internal/ws-adapter.d.ts +24 -0
  51. package/internal/ws-adapter.d.ts.map +1 -0
  52. package/internal/ws-adapter.js +11 -0
  53. package/internal/ws-adapter.js.map +1 -0
  54. package/internal/ws-adapter.mjs +8 -0
  55. package/internal/ws-adapter.mjs.map +1 -0
  56. package/internal/ws.d.mts +80 -0
  57. package/internal/ws.d.mts.map +1 -0
  58. package/internal/ws.d.ts +80 -0
  59. package/internal/ws.d.ts.map +1 -0
  60. package/internal/ws.js +153 -0
  61. package/internal/ws.js.map +1 -0
  62. package/internal/ws.mjs +147 -0
  63. package/internal/ws.mjs.map +1 -0
  64. package/lib/text-to-speech-ws-base.d.mts +106 -0
  65. package/lib/text-to-speech-ws-base.d.mts.map +1 -0
  66. package/lib/text-to-speech-ws-base.d.ts +106 -0
  67. package/lib/text-to-speech-ws-base.d.ts.map +1 -0
  68. package/lib/text-to-speech-ws-base.js +475 -0
  69. package/lib/text-to-speech-ws-base.js.map +1 -0
  70. package/lib/text-to-speech-ws-base.mjs +471 -0
  71. package/lib/text-to-speech-ws-base.mjs.map +1 -0
  72. package/lib/text-to-speech-ws-internal.d.mts +71 -0
  73. package/lib/text-to-speech-ws-internal.d.mts.map +1 -0
  74. package/lib/text-to-speech-ws-internal.d.ts +71 -0
  75. package/lib/text-to-speech-ws-internal.d.ts.map +1 -0
  76. package/lib/text-to-speech-ws-internal.js +47 -0
  77. package/lib/text-to-speech-ws-internal.js.map +1 -0
  78. package/lib/text-to-speech-ws-internal.mjs +41 -0
  79. package/lib/text-to-speech-ws-internal.mjs.map +1 -0
  80. package/lib/text-to-speech-ws.d.mts +13 -0
  81. package/lib/text-to-speech-ws.d.mts.map +1 -0
  82. package/lib/text-to-speech-ws.d.ts +13 -0
  83. package/lib/text-to-speech-ws.d.ts.map +1 -0
  84. package/lib/text-to-speech-ws.js +30 -0
  85. package/lib/text-to-speech-ws.js.map +1 -0
  86. package/lib/text-to-speech-ws.mjs +25 -0
  87. package/lib/text-to-speech-ws.mjs.map +1 -0
  88. package/lib/webhooks.d.mts +6 -0
  89. package/lib/webhooks.d.mts.map +1 -1
  90. package/lib/webhooks.d.ts +6 -0
  91. package/lib/webhooks.d.ts.map +1 -1
  92. package/lib/webhooks.js +16 -0
  93. package/lib/webhooks.js.map +1 -1
  94. package/lib/webhooks.mjs +14 -0
  95. package/lib/webhooks.mjs.map +1 -1
  96. package/package.json +1 -1
  97. package/resources/ai/assistants/assistants.d.mts +901 -51
  98. package/resources/ai/assistants/assistants.d.mts.map +1 -1
  99. package/resources/ai/assistants/assistants.d.ts +901 -51
  100. package/resources/ai/assistants/assistants.d.ts.map +1 -1
  101. package/resources/ai/assistants/assistants.js +0 -1
  102. package/resources/ai/assistants/assistants.js.map +1 -1
  103. package/resources/ai/assistants/assistants.mjs +0 -1
  104. package/resources/ai/assistants/assistants.mjs.map +1 -1
  105. package/resources/ai/assistants/versions.d.mts +563 -25
  106. package/resources/ai/assistants/versions.d.mts.map +1 -1
  107. package/resources/ai/assistants/versions.d.ts +563 -25
  108. package/resources/ai/assistants/versions.d.ts.map +1 -1
  109. package/resources/ai/conversations/conversations.d.mts +2 -2
  110. package/resources/ai/conversations/conversations.d.mts.map +1 -1
  111. package/resources/ai/conversations/conversations.d.ts +2 -2
  112. package/resources/ai/conversations/conversations.d.ts.map +1 -1
  113. package/resources/ai/conversations/conversations.js.map +1 -1
  114. package/resources/ai/conversations/conversations.mjs +1 -1
  115. package/resources/ai/conversations/conversations.mjs.map +1 -1
  116. package/resources/ai/conversations/index.d.mts +1 -1
  117. package/resources/ai/conversations/index.d.mts.map +1 -1
  118. package/resources/ai/conversations/index.d.ts +1 -1
  119. package/resources/ai/conversations/index.d.ts.map +1 -1
  120. package/resources/ai/conversations/index.js.map +1 -1
  121. package/resources/ai/conversations/index.mjs +1 -1
  122. package/resources/ai/conversations/index.mjs.map +1 -1
  123. package/resources/ai/conversations/messages.d.mts +46 -48
  124. package/resources/ai/conversations/messages.d.mts.map +1 -1
  125. package/resources/ai/conversations/messages.d.ts +46 -48
  126. package/resources/ai/conversations/messages.d.ts.map +1 -1
  127. package/resources/ai/conversations/messages.js +9 -6
  128. package/resources/ai/conversations/messages.js.map +1 -1
  129. package/resources/ai/conversations/messages.mjs +9 -6
  130. package/resources/ai/conversations/messages.mjs.map +1 -1
  131. package/resources/calls/actions.d.mts +114 -6
  132. package/resources/calls/actions.d.mts.map +1 -1
  133. package/resources/calls/actions.d.ts +114 -6
  134. package/resources/calls/actions.d.ts.map +1 -1
  135. package/resources/calls/actions.js +4 -0
  136. package/resources/calls/actions.js.map +1 -1
  137. package/resources/calls/actions.mjs +4 -0
  138. package/resources/calls/actions.mjs.map +1 -1
  139. package/resources/calls/calls.d.mts +168 -8
  140. package/resources/calls/calls.d.mts.map +1 -1
  141. package/resources/calls/calls.d.ts +168 -8
  142. package/resources/calls/calls.d.ts.map +1 -1
  143. package/resources/calls/calls.js +4 -0
  144. package/resources/calls/calls.js.map +1 -1
  145. package/resources/calls/calls.mjs +4 -0
  146. package/resources/calls/calls.mjs.map +1 -1
  147. package/resources/index.d.mts +2 -3
  148. package/resources/index.d.mts.map +1 -1
  149. package/resources/index.d.ts +2 -3
  150. package/resources/index.d.ts.map +1 -1
  151. package/resources/index.js +2 -7
  152. package/resources/index.js.map +1 -1
  153. package/resources/index.mjs +1 -2
  154. package/resources/index.mjs.map +1 -1
  155. package/resources/inexplicit-number-orders.d.mts.map +1 -1
  156. package/resources/inexplicit-number-orders.d.ts.map +1 -1
  157. package/resources/messages/messages.d.mts +4 -0
  158. package/resources/messages/messages.d.mts.map +1 -1
  159. package/resources/messages/messages.d.ts +4 -0
  160. package/resources/messages/messages.d.ts.map +1 -1
  161. package/resources/messages/messages.js.map +1 -1
  162. package/resources/messages/messages.mjs.map +1 -1
  163. package/resources/networks/networks.d.mts.map +1 -1
  164. package/resources/networks/networks.d.ts.map +1 -1
  165. package/resources/networks/networks.js.map +1 -1
  166. package/resources/networks/networks.mjs.map +1 -1
  167. package/resources/session-analysis/session-analysis.d.mts +3 -13
  168. package/resources/session-analysis/session-analysis.d.mts.map +1 -1
  169. package/resources/session-analysis/session-analysis.d.ts +3 -13
  170. package/resources/session-analysis/session-analysis.d.ts.map +1 -1
  171. package/resources/session-analysis/session-analysis.js.map +1 -1
  172. package/resources/session-analysis/session-analysis.mjs.map +1 -1
  173. package/resources/texml/accounts/calls/calls.d.mts +45 -0
  174. package/resources/texml/accounts/calls/calls.d.mts.map +1 -1
  175. package/resources/texml/accounts/calls/calls.d.ts +45 -0
  176. package/resources/texml/accounts/calls/calls.d.ts.map +1 -1
  177. package/resources/texml/accounts/calls/calls.js.map +1 -1
  178. package/resources/texml/accounts/calls/calls.mjs.map +1 -1
  179. package/resources/text-to-speech/index.d.mts +2 -1
  180. package/resources/text-to-speech/index.d.mts.map +1 -1
  181. package/resources/text-to-speech/index.d.ts +2 -1
  182. package/resources/text-to-speech/index.d.ts.map +1 -1
  183. package/resources/text-to-speech/index.js.map +1 -1
  184. package/resources/text-to-speech/index.mjs.map +1 -1
  185. package/resources/text-to-speech/internal-base.d.mts +1 -48
  186. package/resources/text-to-speech/internal-base.d.mts.map +1 -1
  187. package/resources/text-to-speech/internal-base.d.ts +1 -48
  188. package/resources/text-to-speech/internal-base.d.ts.map +1 -1
  189. package/resources/text-to-speech/internal-base.js +5 -48
  190. package/resources/text-to-speech/internal-base.js.map +1 -1
  191. package/resources/text-to-speech/internal-base.mjs +1 -44
  192. package/resources/text-to-speech/internal-base.mjs.map +1 -1
  193. package/resources/text-to-speech/text-to-speech.d.mts +28 -3
  194. package/resources/text-to-speech/text-to-speech.d.mts.map +1 -1
  195. package/resources/text-to-speech/text-to-speech.d.ts +28 -3
  196. package/resources/text-to-speech/text-to-speech.d.ts.map +1 -1
  197. package/resources/text-to-speech/text-to-speech.js +1 -1
  198. package/resources/text-to-speech/text-to-speech.mjs +1 -1
  199. package/resources/text-to-speech/ws-base.d.mts +2 -0
  200. package/resources/text-to-speech/ws-base.d.mts.map +1 -0
  201. package/resources/text-to-speech/ws-base.d.ts +2 -0
  202. package/resources/text-to-speech/ws-base.d.ts.map +1 -0
  203. package/resources/text-to-speech/ws-base.js +7 -0
  204. package/resources/text-to-speech/ws-base.js.map +1 -0
  205. package/resources/text-to-speech/ws-base.mjs +3 -0
  206. package/resources/text-to-speech/ws-base.mjs.map +1 -0
  207. package/resources/text-to-speech/ws.d.mts +2 -41
  208. package/resources/text-to-speech/ws.d.mts.map +1 -1
  209. package/resources/text-to-speech/ws.d.ts +2 -41
  210. package/resources/text-to-speech/ws.d.ts.map +1 -1
  211. package/resources/text-to-speech/ws.js +2 -182
  212. package/resources/text-to-speech/ws.js.map +1 -1
  213. package/resources/text-to-speech/ws.mjs +1 -180
  214. package/resources/text-to-speech/ws.mjs.map +1 -1
  215. package/resources/verify-profiles.d.mts +97 -121
  216. package/resources/verify-profiles.d.mts.map +1 -1
  217. package/resources/verify-profiles.d.ts +97 -121
  218. package/resources/verify-profiles.d.ts.map +1 -1
  219. package/resources/virtual-cross-connects.d.mts.map +1 -1
  220. package/resources/virtual-cross-connects.d.ts.map +1 -1
  221. package/resources/webhooks.d.mts +642 -7
  222. package/resources/webhooks.d.mts.map +1 -1
  223. package/resources/webhooks.d.ts +642 -7
  224. package/resources/webhooks.d.ts.map +1 -1
  225. package/resources/webhooks.js +4 -10
  226. package/resources/webhooks.js.map +1 -1
  227. package/resources/webhooks.mjs +5 -11
  228. package/resources/webhooks.mjs.map +1 -1
  229. package/resources/whatsapp/phone-numbers/profile/profile.d.mts +5 -0
  230. package/resources/whatsapp/phone-numbers/profile/profile.d.mts.map +1 -1
  231. package/resources/whatsapp/phone-numbers/profile/profile.d.ts +5 -0
  232. package/resources/whatsapp/phone-numbers/profile/profile.d.ts.map +1 -1
  233. package/resources/whatsapp/phone-numbers/profile/profile.js.map +1 -1
  234. package/resources/whatsapp/phone-numbers/profile/profile.mjs.map +1 -1
  235. package/resources/wireguard-interfaces.d.mts.map +1 -1
  236. package/resources/wireguard-interfaces.d.ts.map +1 -1
  237. package/src/client.ts +22 -0
  238. package/src/core/EventEmitter.ts +16 -0
  239. package/src/core/pagination.ts +3 -3
  240. package/src/internal/detect-platform.ts +1 -1
  241. package/src/internal/types.ts +6 -8
  242. package/src/internal/utils/env.ts +2 -2
  243. package/src/internal/ws-adapter-browser.ts +123 -0
  244. package/src/internal/ws-adapter-node.ts +105 -0
  245. package/src/internal/ws-adapter.ts +30 -0
  246. package/src/internal/ws.ts +193 -0
  247. package/src/lib/text-to-speech-ws-base.ts +618 -0
  248. package/src/lib/text-to-speech-ws-internal.ts +111 -0
  249. package/src/lib/text-to-speech-ws.ts +40 -0
  250. package/src/lib/webhooks.ts +27 -0
  251. package/src/resources/ai/assistants/assistants.ts +1025 -51
  252. package/src/resources/ai/assistants/versions.ts +639 -25
  253. package/src/resources/ai/conversations/conversations.ts +12 -2
  254. package/src/resources/ai/conversations/index.ts +6 -1
  255. package/src/resources/ai/conversations/messages.ts +67 -54
  256. package/src/resources/calls/actions.ts +184 -4
  257. package/src/resources/calls/calls.ts +191 -4
  258. package/src/resources/index.ts +6 -12
  259. package/src/resources/inexplicit-number-orders.ts +2 -1
  260. package/src/resources/messages/messages.ts +5 -0
  261. package/src/resources/networks/networks.ts +2 -1
  262. package/src/resources/session-analysis/session-analysis.ts +3 -16
  263. package/src/resources/texml/accounts/calls/calls.ts +54 -0
  264. package/src/resources/text-to-speech/index.ts +2 -1
  265. package/src/resources/text-to-speech/internal-base.ts +6 -95
  266. package/src/resources/text-to-speech/text-to-speech.ts +33 -3
  267. package/src/resources/text-to-speech/ws-base.ts +7 -0
  268. package/src/resources/text-to-speech/ws.ts +2 -201
  269. package/src/resources/verify-profiles.ts +109 -142
  270. package/src/resources/virtual-cross-connects.ts +2 -1
  271. package/src/resources/webhooks.ts +886 -45
  272. package/src/resources/whatsapp/phone-numbers/profile/profile.ts +7 -0
  273. package/src/resources/wireguard-interfaces.ts +2 -1
  274. package/src/version.ts +1 -1
  275. package/version.d.mts +1 -1
  276. package/version.d.ts +1 -1
  277. package/version.js +1 -1
  278. package/version.mjs +1 -1
@@ -0,0 +1,106 @@
1
+ import { TextToSpeechEmitter, TextToSpeechStreamMessage } from "./text-to-speech-ws-internal.js";
2
+ import { type WebSocketLike } from "../internal/ws-adapter.js";
3
+ import { type RawWebSocketData, type ReconnectingEvent, type ReconnectingOverrides } from "../internal/ws.js";
4
+ import * as TextToSpeechAPI from "../resources/text-to-speech/text-to-speech.js";
5
+ import { Telnyx } from "../client.js";
6
+ export interface TextToSpeechWSReconnectOptions {
7
+ /**
8
+ * Called before each reconnect attempt. Return an object with
9
+ * `parameters` to override query parameters for the next connection.
10
+ */
11
+ onReconnecting(event: ReconnectingEvent<Record<string, unknown>>): ReconnectingOverrides<Record<string, unknown>> | void;
12
+ /**
13
+ * Maximum number of reconnection attempts. Default: 5.
14
+ * Set to 0 to disable reconnection entirely.
15
+ */
16
+ maxRetries?: number;
17
+ /**
18
+ * Initial backoff delay in milliseconds. Default: 500.
19
+ */
20
+ initialDelay?: number;
21
+ /**
22
+ * Maximum backoff delay in milliseconds. Default: 8000.
23
+ */
24
+ maxDelay?: number;
25
+ }
26
+ export interface TextToSpeechWSBaseOptions {
27
+ /**
28
+ * Options for automatic reconnection on recoverable close codes.
29
+ * Automatic reconnection is only enabled when this has a non-null value.
30
+ */
31
+ reconnect?: TextToSpeechWSReconnectOptions | null | undefined;
32
+ /**
33
+ * Maximum size of the outgoing message queue in bytes.
34
+ * Messages queued while the socket is connecting or reconnecting are held
35
+ * in memory up to this limit. Once the limit is reached, new messages are
36
+ * discarded and an `error` event is emitted.
37
+ * Default: 1 MB
38
+ */
39
+ maxQueueSize?: number | undefined;
40
+ }
41
+ export declare abstract class TextToSpeechWSBase<TSocket extends WebSocketLike> extends TextToSpeechEmitter {
42
+ url: URL;
43
+ socket: TSocket;
44
+ protected _client: Telnyx;
45
+ protected _parameters: Record<string, unknown> | null | undefined;
46
+ private _reconnectOptions;
47
+ private _sendQueue;
48
+ private _isReconnecting;
49
+ private _intentionallyClosed;
50
+ private _closeCode;
51
+ private _closeReason;
52
+ private _lastCloseCode;
53
+ private _lastCloseReason;
54
+ private _internalEvents;
55
+ constructor(client: Telnyx, parameters?: Record<string, unknown> | undefined, options?: TextToSpeechWSBaseOptions | undefined);
56
+ /** Establishes the initial WebSocket connection. */
57
+ protected _connectInitial(): void;
58
+ /** Creates a platform-specific WebSocket for the given URL and auth headers. */
59
+ protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
60
+ send(event: TextToSpeechAPI.StreamClientEvent): void;
61
+ sendRaw(data: RawWebSocketData): void;
62
+ close(props?: {
63
+ code: number;
64
+ reason: string;
65
+ }): void;
66
+ /**
67
+ * Returns an async iterator over WebSocket lifecycle and message events,
68
+ * providing an alternative to the event-based `.on()` API.
69
+ * The iterator will exit if the socket closes but exiting the iterator
70
+ * does not close the socket.
71
+ *
72
+ * @example
73
+ * ```ts
74
+ * for await (const event of client.stream()) {
75
+ * switch (event.type) {
76
+ * case 'message':
77
+ * console.log('received:', event.message);
78
+ * break;
79
+ * case 'error':
80
+ * console.error(event.error);
81
+ * break;
82
+ * case 'close':
83
+ * console.log('connection closed');
84
+ * break;
85
+ * }
86
+ * }
87
+ * ```
88
+ */
89
+ stream(): AsyncIterableIterator<TextToSpeechStreamMessage>;
90
+ [Symbol.asyncIterator](): AsyncIterableIterator<TextToSpeechStreamMessage>;
91
+ private _connect;
92
+ private _canReconnect;
93
+ private _reconnect;
94
+ /**
95
+ * Resolves once the socket is open, rejects if it errors or closes first
96
+ */
97
+ private _awaitOpen;
98
+ private _flushSendQueue;
99
+ /**
100
+ * Emits the public `close` event with unsent messages and the internal
101
+ * `close` event used by the async iterator.
102
+ */
103
+ private _emitPermanentClose;
104
+ protected _authHeaders(): Record<string, string>;
105
+ }
106
+ //# sourceMappingURL=text-to-speech-ws-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-to-speech-ws-base.d.ts","sourceRoot":"","sources":["../src/lib/text-to-speech-ws-base.ts"],"names":[],"mappings":"OAAO,EACL,mBAAmB,EACnB,yBAAyB,EAG1B;OAGM,EAAE,KAAK,aAAa,EAAc;OAClC,EAIL,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAE3B;OACM,KAAK,eAAe;OACpB,EAAE,MAAM,EAAE;AAGjB,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,cAAc,CACZ,KAAK,EAAE,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAChD,qBAAqB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzD;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC;;;OAGG;IACH,SAAS,CAAC,EAAE,8BAA8B,GAAG,IAAI,GAAG,SAAS,CAAC;IAE9D;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,8BAAsB,kBAAkB,CAAC,OAAO,SAAS,aAAa,CAAE,SAAQ,mBAAmB;IACjG,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,OAAO,CAAC;IAEjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,OAAO,CAAC,iBAAiB,CAAwC;IACjE,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,gBAAgB,CAAc;IAGtC,OAAO,CAAC,eAAe,CAKlB;gBAGH,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,OAAO,CAAC,EAAE,yBAAyB,GAAG,SAAS;IASjD,oDAAoD;IACpD,SAAS,CAAC,eAAe,IAAI,IAAI;IAKjC,gFAAgF;IAChF,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAExF,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,iBAAiB;IAsB7C,OAAO,CAAC,IAAI,EAAE,gBAAgB;IAsB9B,KAAK,CAAC,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAe9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAI1D,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,qBAAqB,CAAC,yBAAyB,CAAC;IAwJ1E,OAAO,CAAC,QAAQ;IA2DhB,OAAO,CAAC,aAAa;YAQP,UAAU;IA+IxB;;OAEG;IACH,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,eAAe;IAYvB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAU3B,SAAS,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAMjD"}
@@ -0,0 +1,475 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TextToSpeechWSBase = void 0;
4
+ const text_to_speech_ws_internal_1 = require("./text-to-speech-ws-internal.js");
5
+ const EventEmitter_1 = require("../core/EventEmitter.js");
6
+ const sleep_1 = require("../internal/utils/sleep.js");
7
+ const ws_adapter_1 = require("../internal/ws-adapter.js");
8
+ const ws_1 = require("../internal/ws.js");
9
+ const error_1 = require("../core/error.js");
10
+ class TextToSpeechWSBase extends text_to_speech_ws_internal_1.TextToSpeechEmitter {
11
+ constructor(client, parameters, options) {
12
+ super();
13
+ this._isReconnecting = false;
14
+ this._intentionallyClosed = false;
15
+ this._closeCode = 1000;
16
+ this._closeReason = 'OK';
17
+ this._lastCloseCode = 1006;
18
+ this._lastCloseReason = '';
19
+ // Necessary to keep the public event interface clean while we manage reconnecting
20
+ this._internalEvents = new EventEmitter_1.InternalEventEmitter();
21
+ this._client = client;
22
+ this._parameters = undefined;
23
+ this._reconnectOptions = options?.reconnect ?? null;
24
+ this._sendQueue = new ws_1.SendQueue(options?.maxQueueSize);
25
+ }
26
+ /** Establishes the initial WebSocket connection. */
27
+ _connectInitial() {
28
+ this.url = (0, text_to_speech_ws_internal_1.buildURL)(this._client, this._parameters ?? {});
29
+ this.socket = this._connect();
30
+ }
31
+ send(event) {
32
+ if (!this.socket) {
33
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
34
+ }
35
+ if (this._isReconnecting || this.socket.readyState === ws_adapter_1.ReadyState.CONNECTING) {
36
+ if (!this._sendQueue.enqueue(event)) {
37
+ this._onError(null, 'send queue is full, message discarded', undefined);
38
+ }
39
+ return;
40
+ }
41
+ if (this.socket.readyState !== ws_adapter_1.ReadyState.OPEN) {
42
+ this._onError(null, 'cannot send on a closed WebSocket', undefined);
43
+ return;
44
+ }
45
+ try {
46
+ this.socket.send(JSON.stringify(event));
47
+ }
48
+ catch (err) {
49
+ this._onError(null, 'could not send data', err);
50
+ }
51
+ }
52
+ sendRaw(data) {
53
+ if (!this.socket) {
54
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
55
+ }
56
+ if (this._isReconnecting || this.socket.readyState === ws_adapter_1.ReadyState.CONNECTING) {
57
+ if (!this._sendQueue.enqueueRaw(data)) {
58
+ this._onError(null, 'send queue is full, message discarded', undefined);
59
+ }
60
+ return;
61
+ }
62
+ if (this.socket.readyState !== ws_adapter_1.ReadyState.OPEN) {
63
+ this._onError(null, 'cannot send on a closed WebSocket', undefined);
64
+ return;
65
+ }
66
+ try {
67
+ this.socket.send((0, ws_1.flattenRawData)(data));
68
+ }
69
+ catch (err) {
70
+ this._onError(null, 'could not send data', err);
71
+ }
72
+ }
73
+ close(props) {
74
+ if (!this.socket) {
75
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
76
+ }
77
+ this._intentionallyClosed = true;
78
+ this._closeCode = props?.code ?? 1000;
79
+ this._closeReason = props?.reason ?? 'OK';
80
+ try {
81
+ this.socket.close(this._closeCode, this._closeReason);
82
+ }
83
+ catch (err) {
84
+ this._onError(null, 'could not close the connection', err);
85
+ }
86
+ }
87
+ /**
88
+ * Returns an async iterator over WebSocket lifecycle and message events,
89
+ * providing an alternative to the event-based `.on()` API.
90
+ * The iterator will exit if the socket closes but exiting the iterator
91
+ * does not close the socket.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * for await (const event of client.stream()) {
96
+ * switch (event.type) {
97
+ * case 'message':
98
+ * console.log('received:', event.message);
99
+ * break;
100
+ * case 'error':
101
+ * console.error(event.error);
102
+ * break;
103
+ * case 'close':
104
+ * console.log('connection closed');
105
+ * break;
106
+ * }
107
+ * }
108
+ * ```
109
+ */
110
+ stream() {
111
+ return this[Symbol.asyncIterator]();
112
+ }
113
+ [Symbol.asyncIterator]() {
114
+ if (!this.socket) {
115
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
116
+ }
117
+ // Two-queue async iterator: `queue` buffers incoming messages,
118
+ // `resolvers` buffers waiting next() calls. A push wakes the
119
+ // oldest next(); a next() drains the oldest message.
120
+ const queue = [];
121
+ const resolvers = [];
122
+ let done = false;
123
+ let currentSocket = this.socket;
124
+ const push = (msg) => {
125
+ queue.push(msg);
126
+ resolvers.shift()?.();
127
+ };
128
+ const onEvent = (event) => {
129
+ if (event.type === 'error')
130
+ return; // handled by onEmitterError
131
+ push({ type: 'message', message: event });
132
+ };
133
+ const onRaw = (data) => {
134
+ push({ type: 'raw', data });
135
+ };
136
+ // All errors (API + socket) funnel through _onError → 'error' event
137
+ const onEmitterError = (err) => {
138
+ push({ type: 'error', error: err });
139
+ };
140
+ const onOpen = () => {
141
+ push({ type: 'open' });
142
+ };
143
+ const onReconnecting = (evt) => {
144
+ push({ type: 'reconnecting', reconnect: evt });
145
+ };
146
+ const onReconnected = () => {
147
+ push({ type: 'reconnected' });
148
+ };
149
+ const flushResolvers = () => {
150
+ for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
151
+ resolver();
152
+ }
153
+ };
154
+ const onClose = (code, reason, unsent) => {
155
+ push({ type: 'close', code, reason, unsent });
156
+ done = true;
157
+ flushResolvers();
158
+ cleanup();
159
+ };
160
+ const onSocketSwap = (oldSocket, newSocket) => {
161
+ oldSocket.off('open', onOpen);
162
+ newSocket.on('open', onOpen);
163
+ currentSocket = newSocket;
164
+ };
165
+ const cleanup = () => {
166
+ this.off('event', onEvent);
167
+ this.off('raw', onRaw);
168
+ this.off('error', onEmitterError);
169
+ currentSocket.off('open', onOpen);
170
+ this._internalEvents.off('close', onClose);
171
+ this._internalEvents.off('socketSwap', onSocketSwap);
172
+ this._internalEvents.off('reconnecting', onReconnecting);
173
+ this._internalEvents.off('reconnected', onReconnected);
174
+ };
175
+ this.on('event', onEvent);
176
+ this.on('raw', onRaw);
177
+ this.on('error', onEmitterError);
178
+ this.socket.on('open', onOpen);
179
+ this._internalEvents.on('close', onClose);
180
+ this._internalEvents.on('socketSwap', onSocketSwap);
181
+ this._internalEvents.on('reconnecting', onReconnecting);
182
+ this._internalEvents.on('reconnected', onReconnected);
183
+ if (this._isReconnecting) {
184
+ // A reconnect is already in flight. The socket may be CLOSED but the
185
+ // instance is still alive. Emit 'reconnecting' so the iterator stays
186
+ // open and receives the upcoming reconnected/message events.
187
+ push({
188
+ type: 'reconnecting',
189
+ reconnect: { attempt: 0, maxAttempts: 0, delay: 0, closeCode: 0, parameters: undefined },
190
+ });
191
+ }
192
+ else {
193
+ switch (this.socket.readyState) {
194
+ case ws_adapter_1.ReadyState.CONNECTING:
195
+ push({ type: 'connecting' });
196
+ break;
197
+ case ws_adapter_1.ReadyState.OPEN:
198
+ push({ type: 'open' });
199
+ break;
200
+ case ws_adapter_1.ReadyState.CLOSING:
201
+ push({ type: 'closing' });
202
+ break;
203
+ case ws_adapter_1.ReadyState.CLOSED:
204
+ push({
205
+ type: 'close',
206
+ code: this._lastCloseCode,
207
+ reason: this._lastCloseReason,
208
+ unsent: this._sendQueue.drain(),
209
+ });
210
+ done = true;
211
+ cleanup();
212
+ break;
213
+ }
214
+ }
215
+ const resolve = (res) => {
216
+ if (queue.length > 0) {
217
+ res({ value: queue.shift(), done: false });
218
+ }
219
+ else if (done) {
220
+ res({ value: undefined, done: true });
221
+ }
222
+ else {
223
+ return false;
224
+ }
225
+ return true;
226
+ };
227
+ const next = () => new Promise((res) => {
228
+ if (resolve(res))
229
+ return;
230
+ resolvers.push(() => {
231
+ resolve(res);
232
+ });
233
+ });
234
+ return {
235
+ next,
236
+ return: () => {
237
+ done = true;
238
+ cleanup();
239
+ flushResolvers();
240
+ return Promise.resolve({ value: undefined, done: true });
241
+ },
242
+ [Symbol.asyncIterator]() {
243
+ return this;
244
+ },
245
+ };
246
+ }
247
+ _connect() {
248
+ this.url = (0, text_to_speech_ws_internal_1.buildURL)(this._client, this._parameters ?? {});
249
+ const socket = this._createSocket(this.url, this._authHeaders());
250
+ socket.on('message', (data, isBinary) => {
251
+ if (isBinary) {
252
+ this._emit('raw', data);
253
+ return;
254
+ }
255
+ // Coerce to string in case the adapter delivers a typed-array for text frames.
256
+ const text = typeof data === 'string' ? data : String(data);
257
+ let event;
258
+ try {
259
+ event = JSON.parse(text);
260
+ }
261
+ catch {
262
+ this._emit('raw', data);
263
+ return;
264
+ }
265
+ this._emit('event', event);
266
+ if (event.type === 'error') {
267
+ this._onError(event);
268
+ }
269
+ else {
270
+ // @ts-ignore TS isn't smart enough to get the relationship right here
271
+ this._emit(event.type, event);
272
+ }
273
+ });
274
+ socket.on('error', (err) => {
275
+ // Suppress transient errors during reconnection — the retry loop
276
+ // already handles them and will surface a close if retries exhaust.
277
+ if (this._isReconnecting)
278
+ return;
279
+ this._onError(null, err.message, err);
280
+ });
281
+ socket.on('open', () => {
282
+ this._flushSendQueue();
283
+ });
284
+ socket.on('close', (code, reason) => {
285
+ // Ignore close events from superseded sockets — a stale socket's
286
+ // late close must not kick off a second reconnect loop.
287
+ if (socket !== this.socket)
288
+ return;
289
+ if (!this._intentionallyClosed && this._canReconnect(code)) {
290
+ this._reconnect(code);
291
+ }
292
+ else if (!this._isReconnecting) {
293
+ this._emitPermanentClose(code, reason);
294
+ }
295
+ });
296
+ return socket;
297
+ }
298
+ // Reconnect is opt-in via onReconnecting so callers can pass
299
+ // state (e.g. session IDs) into the new connection.
300
+ _canReconnect(code) {
301
+ if (this._intentionallyClosed)
302
+ return false;
303
+ if (!this._reconnectOptions)
304
+ return false;
305
+ if (this._reconnectOptions.maxRetries === 0)
306
+ return false;
307
+ if (!this._reconnectOptions.onReconnecting)
308
+ return false;
309
+ return (0, ws_1.isRecoverableClose)(code);
310
+ }
311
+ async _reconnect(closeCode) {
312
+ if (!this.socket) {
313
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
314
+ }
315
+ if (this._isReconnecting || !this._reconnectOptions)
316
+ return;
317
+ this._isReconnecting = true;
318
+ const maxRetries = this._reconnectOptions.maxRetries ?? 5;
319
+ const initialDelay = this._reconnectOptions.initialDelay ?? 500;
320
+ const maxDelay = this._reconnectOptions.maxDelay ?? 8000;
321
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
322
+ if (!this._canReconnect(closeCode)) {
323
+ this._isReconnecting = false;
324
+ if (!this._intentionallyClosed) {
325
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
326
+ }
327
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
328
+ return;
329
+ }
330
+ const baseDelay = Math.min(initialDelay * Math.pow(2, attempt - 1), maxDelay);
331
+ // Jitter: rand [0.75, 1.0] to spread out connection attempts without over-delaying
332
+ const jitter = 0.75 + Math.random() * 0.25;
333
+ const actualDelay = Math.round(baseDelay * jitter);
334
+ let reconnectingEvent = {
335
+ attempt,
336
+ maxAttempts: maxRetries,
337
+ delay: actualDelay,
338
+ closeCode,
339
+ parameters: this._parameters ? { ...this._parameters } : undefined,
340
+ };
341
+ let overrides;
342
+ try {
343
+ overrides = this._reconnectOptions.onReconnecting(reconnectingEvent);
344
+ }
345
+ catch (err) {
346
+ this._isReconnecting = false;
347
+ this._onError(null, 'onReconnecting callback threw', err);
348
+ this._emitPermanentClose(closeCode, 'onReconnecting callback threw');
349
+ return;
350
+ }
351
+ if (overrides && 'abort' in overrides && overrides.abort) {
352
+ this._isReconnecting = false;
353
+ this._emitPermanentClose(closeCode, 'reconnect aborted by handler');
354
+ return;
355
+ }
356
+ if (overrides && 'parameters' in overrides) {
357
+ this._parameters = overrides.parameters;
358
+ reconnectingEvent = { ...reconnectingEvent, parameters: this._parameters };
359
+ }
360
+ try {
361
+ this._emit('reconnecting', reconnectingEvent);
362
+ }
363
+ catch (err) {
364
+ this._onError(null, 'onReconnecting callback threw', err);
365
+ }
366
+ this._internalEvents._emit('reconnecting', reconnectingEvent);
367
+ if (!this._canReconnect(closeCode)) {
368
+ this._isReconnecting = false;
369
+ if (!this._intentionallyClosed) {
370
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
371
+ }
372
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
373
+ return;
374
+ }
375
+ await (0, sleep_1.sleep)(actualDelay);
376
+ if (!this._canReconnect(closeCode)) {
377
+ this._isReconnecting = false;
378
+ if (!this._intentionallyClosed) {
379
+ this._onError(null, `WebSocket reconnect aborted: non-recoverable close code ${closeCode}`, undefined);
380
+ }
381
+ this._emitPermanentClose(this._intentionallyClosed ? this._closeCode : closeCode, this._intentionallyClosed ? this._closeReason : 'reconnect aborted');
382
+ return;
383
+ }
384
+ let closeCodePromise;
385
+ try {
386
+ const oldSocket = this.socket;
387
+ this.socket = this._connect();
388
+ // Registered synchronously after _connect() and before any
389
+ // await so the code is captured even when ws emits 'close'
390
+ // in the same tick as 'error' (e.g. abortHandshake).
391
+ closeCodePromise = new Promise((resolve) => {
392
+ this.socket.once('close', resolve);
393
+ });
394
+ await this._awaitOpen(this.socket);
395
+ this._internalEvents._emit('socketSwap', oldSocket, this.socket);
396
+ this._isReconnecting = false;
397
+ this._flushSendQueue();
398
+ this._emit('reconnected');
399
+ this._internalEvents._emit('reconnected');
400
+ return;
401
+ }
402
+ catch {
403
+ if (closeCodePromise) {
404
+ // ws may emit 'error' before 'close', so await the code
405
+ // rather than reading it synchronously.
406
+ closeCode = await closeCodePromise;
407
+ }
408
+ }
409
+ }
410
+ // All retries exhausted — surface an error so consumers can
411
+ // distinguish retry failure from a clean close.
412
+ this._isReconnecting = false;
413
+ this._onError(null, `WebSocket reconnect failed after ${maxRetries} attempts (close code: ${closeCode})`, undefined);
414
+ this._emitPermanentClose(closeCode, `reconnect failed after ${maxRetries} attempts`);
415
+ }
416
+ /**
417
+ * Resolves once the socket is open, rejects if it errors or closes first
418
+ */
419
+ _awaitOpen(socket) {
420
+ return new Promise((resolve, reject) => {
421
+ const cleanup = () => {
422
+ socket.off('open', onOpen);
423
+ socket.off('error', onError);
424
+ socket.off('close', onFail);
425
+ };
426
+ const onOpen = () => {
427
+ cleanup();
428
+ resolve();
429
+ };
430
+ const onError = (err) => {
431
+ cleanup();
432
+ reject(err);
433
+ };
434
+ const onFail = () => {
435
+ cleanup();
436
+ reject(new Error('socket closed before open'));
437
+ };
438
+ socket.once('open', onOpen);
439
+ socket.once('error', onError);
440
+ socket.once('close', onFail);
441
+ });
442
+ }
443
+ _flushSendQueue() {
444
+ if (!this.socket) {
445
+ throw new error_1.TelnyxError('Internal error: failed to initialize socket. Please report this issue.');
446
+ }
447
+ try {
448
+ this._sendQueue.flush((data) => this.socket.send((0, ws_1.flattenRawData)(data)));
449
+ }
450
+ catch (err) {
451
+ this._onError(null, 'could not send queued data', err);
452
+ }
453
+ }
454
+ /**
455
+ * Emits the public `close` event with unsent messages and the internal
456
+ * `close` event used by the async iterator.
457
+ */
458
+ _emitPermanentClose(code, reason) {
459
+ this._lastCloseCode = code;
460
+ this._lastCloseReason = reason;
461
+ const unsent = this._sendQueue.drain();
462
+ // Internal close fires first so the async iterator is guaranteed to
463
+ // terminate even if a public 'close' listener throws.
464
+ this._internalEvents._emit('close', code, reason, unsent);
465
+ this._emit('close', code, reason, unsent);
466
+ }
467
+ _authHeaders() {
468
+ if (this._client.apiKey) {
469
+ return { Authorization: `Bearer ${this._client.apiKey}` };
470
+ }
471
+ return {};
472
+ }
473
+ }
474
+ exports.TextToSpeechWSBase = TextToSpeechWSBase;
475
+ //# sourceMappingURL=text-to-speech-ws-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-to-speech-ws-base.js","sourceRoot":"","sources":["../src/lib/text-to-speech-ws-base.ts"],"names":[],"mappings":";;;AAAA,gFAKsC;AACtC,0DAA4D;AAC5D,sDAAgD;AAChD,0DAAwE;AACxE,0CAQwB;AAGxB,4CAA4C;AA6C5C,MAAsB,kBAAkD,SAAQ,gDAAmB;IAuBjG,YACE,MAAc,EACd,UAAgD,EAChD,OAA+C;QAE/C,KAAK,EAAE,CAAC;QApBF,oBAAe,GAAY,KAAK,CAAC;QACjC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,eAAU,GAAW,IAAI,CAAC;QAC1B,iBAAY,GAAW,IAAI,CAAC;QAC5B,mBAAc,GAAW,IAAI,CAAC;QAC9B,qBAAgB,GAAW,EAAE,CAAC;QAEtC,kFAAkF;QAC1E,oBAAe,GAAG,IAAI,mCAAoB,EAK9C,CAAC;QAQH,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,cAAS,CAAoC,OAAO,EAAE,YAAY,CAAC,CAAC;IAC5F,CAAC;IAED,oDAAoD;IAC1C,eAAe;QACvB,IAAI,CAAC,GAAG,GAAG,IAAA,qCAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAChC,CAAC;IAKD,IAAI,CAAC,KAAwC;QAC3C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,uBAAU,CAAC,UAAU,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,uCAAuC,EAAE,SAAS,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,uBAAU,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,mCAAmC,EAAE,SAAS,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAsB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,uBAAU,CAAC,UAAU,EAAE,CAAC;YAC7E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,uCAAuC,EAAE,SAAS,CAAC,CAAC;YAC1E,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,uBAAU,CAAC,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,mCAAmC,EAAE,SAAS,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,mBAAc,EAAC,IAAI,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAwC;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,gCAAgC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,CAAC,MAAM,CAAC,aAAa,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,+DAA+D;QAC/D,6DAA6D;QAC7D,qDAAqD;QACrD,MAAM,KAAK,GAAgC,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAEhC,MAAM,IAAI,GAAG,CAAC,GAA8B,EAAE,EAAE;YAC9C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC;QACxB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,KAAwC,EAAE,EAAE;YAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,OAAO,CAAC,4BAA4B;YAChE,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,CAAC,IAAsB,EAAE,EAAE;YACvC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;QAEF,oEAAoE;QACpE,MAAM,cAAc,GAAG,CAAC,GAAmB,EAAE,EAAE;YAC7C,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,GAAG,EAAE;YAClB,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,CAAC,GAA+C,EAAE,EAAE;YACzE,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,GAAG,EAAE;YAC1B,KAAK,IAAI,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;gBAC9E,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CACd,IAAY,EACZ,MAAc,EACd,MAA0D,EAC1D,EAAE;YACF,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,CAAC;YACZ,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,CAAC,SAAkB,EAAE,SAAkB,EAAE,EAAE;YAC9D,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7B,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAClC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YACrD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QACxD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,qEAAqE;YACrE,qEAAqE;YACrE,6DAA6D;YAC7D,IAAI,CAAC;gBACH,IAAI,EAAE,cAAc;gBACpB,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE;aACzF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC/B,KAAK,uBAAU,CAAC,UAAU;oBACxB,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,uBAAU,CAAC,IAAI;oBAClB,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvB,MAAM;gBACR,KAAK,uBAAU,CAAC,OAAO;oBACrB,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,uBAAU,CAAC,MAAM;oBACpB,IAAI,CAAC;wBACH,IAAI,EAAE,OAAO;wBACb,IAAI,EAAE,IAAI,CAAC,cAAc;wBACzB,MAAM,EAAE,IAAI,CAAC,gBAAgB;wBAC7B,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;qBAChC,CAAC,CAAC;oBACH,IAAI,GAAG,IAAI,CAAC;oBACZ,OAAO,EAAE,CAAC;oBACV,MAAM;YACV,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,GAA+D,EAAE,EAAE;YAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,IAAI,GAAG,GAAuD,EAAE,CACpE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClB,IAAI,OAAO,CAAC,GAAG,CAAC;gBAAE,OAAO;YACzB,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEL,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,GAA6C,EAAE;gBACrD,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO,EAAE,CAAC;gBACV,cAAc,EAAE,CAAC;gBACjB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,GAAG,GAAG,IAAA,qCAAQ,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAEjE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAA4C,EAAE,QAAiB,EAAE,EAAE;YACvF,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,+EAA+E;YAC/E,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE5D,IAAI,KAAwC,CAAC;YAC7C,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsC,CAAC;YAChE,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,sEAAsE;gBACtE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,iEAAiE;YACjE,oEAAoE;YACpE,IAAI,IAAI,CAAC,eAAe;gBAAE,OAAO;YACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;YAClD,iEAAiE;YACjE,wDAAwD;YACxD,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM;gBAAE,OAAO;YACnC,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACzC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6DAA6D;IAC7D,oDAAoD;IAC5C,aAAa,CAAC,IAAY;QAChC,IAAI,IAAI,CAAC,oBAAoB;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QAC1C,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc;YAAE,OAAO,KAAK,CAAC;QACzD,OAAO,IAAA,uBAAkB,EAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,SAAiB;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAC5D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAI,GAAG,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,IAAI,IAAI,CAAC;QAEzD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,2DAA2D,SAAS,EAAE,EACtE,SAAS,CACV,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACvD,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CACpE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAC9E,mFAAmF;YACnF,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;YAEnD,IAAI,iBAAiB,GAA+C;gBAClE,OAAO;gBACP,WAAW,EAAE,UAAU;gBACvB,KAAK,EAAE,WAAW;gBAClB,SAAS;gBACT,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;aACnE,CAAC;YAEF,IAAI,SAAgE,CAAC;YACrE,IAAI,CAAC;gBACH,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YACvE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;gBAC1D,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;gBACrE,OAAO;YACT,CAAC;YAED,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBACzD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;gBACpE,OAAO;YACT,CAAC;YAED,IAAI,SAAS,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;gBAC3C,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC;gBACxC,iBAAiB,GAAG,EAAE,GAAG,iBAAiB,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7E,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,+BAA+B,EAAE,GAAG,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;YAE9D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,2DAA2D,SAAS,EAAE,EACtE,SAAS,CACV,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACvD,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CACpE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,MAAM,IAAA,aAAK,EAAC,WAAW,CAAC,CAAC;YAEzB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC/B,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,2DAA2D,SAAS,EAAE,EACtE,SAAS,CACV,CAAC;gBACJ,CAAC;gBACD,IAAI,CAAC,mBAAmB,CACtB,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EACvD,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,mBAAmB,CACpE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,gBAA6C,CAAC;YAClD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,2DAA2D;gBAC3D,2DAA2D;gBAC3D,qDAAqD;gBACrD,gBAAgB,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;oBACjD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEnC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,gBAAgB,EAAE,CAAC;oBACrB,wDAAwD;oBACxD,wCAAwC;oBACxC,SAAS,GAAG,MAAM,gBAAgB,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAED,4DAA4D;QAC5D,gDAAgD;QAChD,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,QAAQ,CACX,IAAI,EACJ,oCAAoC,UAAU,0BAA0B,SAAS,GAAG,EACpF,SAAS,CACV,CAAC;QACF,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,0BAA0B,UAAU,WAAW,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,MAAe;QAChC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC9B,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,CAAC,GAAU,EAAE,EAAE;gBAC7B,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YACF,MAAM,MAAM,GAAG,GAAG,EAAE;gBAClB,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACjD,CAAC,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,mBAAW,CAAC,wEAAwE,CAAC,CAAC;QAClG,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,mBAAc,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,4BAA4B,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,IAAY,EAAE,MAAc;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACvC,oEAAoE;QACpE,sDAAsD;QACtD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAES,YAAY;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACxB,OAAO,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAxiBD,gDAwiBC"}