@sixb/core 0.1.9 → 0.1.10

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 (279) hide show
  1. package/dist/actions/index.js +8 -8
  2. package/dist/agents/index.js +16 -15
  3. package/dist/agents/index.js.map +1 -1
  4. package/dist/bootstrap/index.js +20 -19
  5. package/dist/bootstrap/index.js.map +1 -1
  6. package/dist/broker/in-memory.d.ts +8 -2
  7. package/dist/broker/in-memory.d.ts.map +1 -1
  8. package/dist/broker/index.d.ts +4 -2
  9. package/dist/broker/index.d.ts.map +1 -1
  10. package/dist/broker/index.js +7 -3
  11. package/dist/broker/index.js.map +1 -1
  12. package/dist/broker/retention.d.ts +4 -0
  13. package/dist/broker/retention.d.ts.map +1 -0
  14. package/dist/broker/subscriber.d.ts +10 -0
  15. package/dist/broker/subscriber.d.ts.map +1 -0
  16. package/dist/broker/types.d.ts +14 -1
  17. package/dist/broker/types.d.ts.map +1 -1
  18. package/dist/{chunk-k3cqkkn2.js → chunk-1824gssz.js} +30 -65
  19. package/dist/chunk-1824gssz.js.map +12 -0
  20. package/dist/{chunk-h1gfhhbh.js → chunk-28ja2cjs.js} +1 -1
  21. package/dist/chunk-2c4j899j.js.map +1 -1
  22. package/dist/{chunk-ppytyr6w.js → chunk-358caqf5.js} +4 -4
  23. package/dist/chunk-358caqf5.js.map +12 -0
  24. package/dist/{chunk-kxwa347f.js → chunk-3qms4nax.js} +2 -2
  25. package/dist/{chunk-kxwa347f.js.map → chunk-3qms4nax.js.map} +3 -3
  26. package/dist/{chunk-emyyk7dx.js → chunk-5c7ga8zz.js} +22 -145
  27. package/dist/chunk-5c7ga8zz.js.map +12 -0
  28. package/dist/{chunk-hpr1r6av.js → chunk-5p1v802y.js} +46 -39
  29. package/dist/{chunk-hpr1r6av.js.map → chunk-5p1v802y.js.map} +4 -4
  30. package/dist/{chunk-zcnq6105.js → chunk-85cd7e8c.js} +2 -1
  31. package/dist/chunk-85cd7e8c.js.map +10 -0
  32. package/dist/{chunk-1enhpacz.js → chunk-976rxdpx.js} +5 -5
  33. package/dist/{chunk-3f7veca0.js → chunk-9x8dybsb.js} +3 -3
  34. package/dist/chunk-9x8dybsb.js.map +10 -0
  35. package/dist/{chunk-r29fxdhn.js → chunk-aa6z4a19.js} +160 -44
  36. package/dist/chunk-aa6z4a19.js.map +12 -0
  37. package/dist/{chunk-r4tfx1sf.js → chunk-agbbygvh.js} +4 -4
  38. package/dist/{chunk-jjy0fhrn.js → chunk-b0ec55a1.js} +20 -3
  39. package/dist/chunk-b0ec55a1.js.map +12 -0
  40. package/dist/{chunk-xfbydgzy.js → chunk-bn138h9w.js} +7 -8
  41. package/dist/{chunk-xfbydgzy.js.map → chunk-bn138h9w.js.map} +3 -3
  42. package/dist/{chunk-an5tt9y0.js → chunk-ftv470j8.js} +42 -4
  43. package/dist/{chunk-an5tt9y0.js.map → chunk-ftv470j8.js.map} +7 -7
  44. package/dist/{chunk-0w35wavj.js → chunk-g7knyczr.js} +1 -1
  45. package/dist/{chunk-x57ycxq0.js → chunk-gqh45d2n.js} +42 -3
  46. package/dist/{chunk-x57ycxq0.js.map → chunk-gqh45d2n.js.map} +3 -3
  47. package/dist/{chunk-0rdrecsb.js → chunk-kfee1h52.js} +116 -32
  48. package/dist/chunk-kfee1h52.js.map +13 -0
  49. package/dist/{chunk-ypbtykv6.js → chunk-nmbxcaqx.js} +1 -1
  50. package/dist/{chunk-3tgwrcyh.js → chunk-nt99sxd6.js} +2 -2
  51. package/dist/{chunk-3tgwrcyh.js.map → chunk-nt99sxd6.js.map} +3 -3
  52. package/dist/{chunk-vf691g1r.js → chunk-p5vcsw9c.js} +2 -2
  53. package/dist/{chunk-mjbk2djy.js → chunk-p6a4npdx.js} +211 -106
  54. package/dist/{chunk-mjbk2djy.js.map → chunk-p6a4npdx.js.map} +9 -8
  55. package/dist/{chunk-3frsnm7x.js → chunk-qma80ych.js} +4 -6
  56. package/dist/chunk-qma80ych.js.map +11 -0
  57. package/dist/{chunk-qhcpj9wc.js → chunk-qyeptdyv.js} +96 -2
  58. package/dist/chunk-qyeptdyv.js.map +15 -0
  59. package/dist/{chunk-52hbv0ak.js → chunk-r7fj830t.js} +101 -48
  60. package/dist/chunk-r7fj830t.js.map +36 -0
  61. package/dist/{chunk-xyr8kppc.js → chunk-rtk71jzp.js} +1 -1
  62. package/dist/{chunk-m3z3x9v0.js → chunk-t1f4f1ve.js} +1 -1
  63. package/dist/chunk-v2vcg0w6.js +151 -0
  64. package/dist/chunk-v2vcg0w6.js.map +11 -0
  65. package/dist/connectors/connections/authorizations.d.ts.map +1 -1
  66. package/dist/connectors/connections/contracts.d.ts +3 -0
  67. package/dist/connectors/connections/contracts.d.ts.map +1 -1
  68. package/dist/connectors/connections/internal.js +1 -1
  69. package/dist/connectors/connections/request.d.ts +3 -1
  70. package/dist/connectors/connections/request.d.ts.map +1 -1
  71. package/dist/connectors/connections/runs.d.ts.map +1 -1
  72. package/dist/connectors/connections/tokens.d.ts.map +1 -1
  73. package/dist/connectors/connections/validation.d.ts +5 -1
  74. package/dist/connectors/connections/validation.d.ts.map +1 -1
  75. package/dist/connectors/types.d.ts +19 -4
  76. package/dist/connectors/types.d.ts.map +1 -1
  77. package/dist/events/execution.d.ts +1 -1
  78. package/dist/events/execution.d.ts.map +1 -1
  79. package/dist/events/index.js +1 -1
  80. package/dist/events/service.d.ts +2 -2
  81. package/dist/events/service.d.ts.map +1 -1
  82. package/dist/execution/agent.js +16 -15
  83. package/dist/execution/agent.js.map +1 -1
  84. package/dist/execution/primitive.js +16 -15
  85. package/dist/execution/primitive.js.map +2 -2
  86. package/dist/execution/request.js +16 -15
  87. package/dist/execution/request.js.map +2 -2
  88. package/dist/index.d.ts +3 -3
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +30 -28
  91. package/dist/index.js.map +1 -1
  92. package/dist/lake-storage/changes.d.ts +5 -0
  93. package/dist/lake-storage/changes.d.ts.map +1 -0
  94. package/dist/lake-storage/in-memory.d.ts +2 -1
  95. package/dist/lake-storage/in-memory.d.ts.map +1 -1
  96. package/dist/lake-storage/index.d.ts +2 -1
  97. package/dist/lake-storage/index.d.ts.map +1 -1
  98. package/dist/lake-storage/index.js +4 -2
  99. package/dist/lake-storage/index.js.map +1 -1
  100. package/dist/lake-storage/types.d.ts +36 -0
  101. package/dist/lake-storage/types.d.ts.map +1 -1
  102. package/dist/logging/internal.js +1 -1
  103. package/dist/materialization/index.d.ts +1 -1
  104. package/dist/materialization/index.d.ts.map +1 -1
  105. package/dist/materialization/model.d.ts +12 -1
  106. package/dist/materialization/model.d.ts.map +1 -1
  107. package/dist/materializer/index.d.ts +1 -1
  108. package/dist/materializer/index.d.ts.map +1 -1
  109. package/dist/materializer/index.js +5 -5
  110. package/dist/materializer/materializer.d.ts +5 -1
  111. package/dist/materializer/materializer.d.ts.map +1 -1
  112. package/dist/materializer/projections/entry-validator.d.ts +2 -1
  113. package/dist/materializer/projections/entry-validator.d.ts.map +1 -1
  114. package/dist/materializer/projections/replace.d.ts.map +1 -1
  115. package/dist/materializer/projections/source-materialization.d.ts +4 -3
  116. package/dist/materializer/projections/source-materialization.d.ts.map +1 -1
  117. package/dist/materializer/shared/normalize.d.ts +2 -1
  118. package/dist/materializer/shared/normalize.d.ts.map +1 -1
  119. package/dist/models/execution/index.js +5 -5
  120. package/dist/objects/index.js +9 -9
  121. package/dist/objects/query/index.js +5 -5
  122. package/dist/pipelines/index.js +6 -6
  123. package/dist/pipelines/run-dispatch.d.ts.map +1 -1
  124. package/dist/projections/internal.js +6 -8
  125. package/dist/projections/internal.js.map +1 -1
  126. package/dist/projections/run-dispatch.d.ts.map +1 -1
  127. package/dist/queues/in-memory.d.ts +7 -3
  128. package/dist/queues/in-memory.d.ts.map +1 -1
  129. package/dist/queues/index.js +1 -1
  130. package/dist/queues/indexed-heap.d.ts +15 -0
  131. package/dist/queues/indexed-heap.d.ts.map +1 -0
  132. package/dist/runtime/host.d.ts.map +1 -1
  133. package/dist/runtime/internal.js +1 -1
  134. package/dist/runtime/ontology-mutations.d.ts +3 -1
  135. package/dist/runtime/ontology-mutations.d.ts.map +1 -1
  136. package/dist/shares/internal.js +4 -4
  137. package/dist/storage/connector-connections/in-memory.d.ts.map +1 -1
  138. package/dist/storage/connector-connections/provider/runs.d.ts.map +1 -1
  139. package/dist/storage/connector-connections/provider.js +2 -2
  140. package/dist/storage/connector-connections/provider.js.map +3 -3
  141. package/dist/storage/connector-connections/types.d.ts +3 -2
  142. package/dist/storage/connector-connections/types.d.ts.map +1 -1
  143. package/dist/storage/index.d.ts +1 -1
  144. package/dist/storage/index.d.ts.map +1 -1
  145. package/dist/storage/index.js +4 -4
  146. package/dist/storage/internal.js +1 -1
  147. package/dist/storage/ontology/in-memory/materializations-state.d.ts.map +1 -1
  148. package/dist/storage/ontology/in-memory/materializations.d.ts +1 -1
  149. package/dist/storage/ontology/in-memory/materializations.d.ts.map +1 -1
  150. package/dist/storage/ontology/in-memory/shared-state.d.ts +15 -2
  151. package/dist/storage/ontology/in-memory/shared-state.d.ts.map +1 -1
  152. package/dist/storage/ontology/in-memory/source-roots.d.ts +6 -0
  153. package/dist/storage/ontology/in-memory/source-roots.d.ts.map +1 -0
  154. package/dist/storage/ontology/in-memory/sources.d.ts.map +1 -1
  155. package/dist/storage/ontology/index.d.ts +1 -1
  156. package/dist/storage/ontology/index.d.ts.map +1 -1
  157. package/dist/storage/ontology/provider.d.ts +16 -0
  158. package/dist/storage/ontology/provider.d.ts.map +1 -1
  159. package/dist/storage/ontology/provider.js +4 -2
  160. package/dist/storage/ontology/provider.js.map +1 -1
  161. package/dist/storage/ontology/sources.d.ts +13 -4
  162. package/dist/storage/ontology/sources.d.ts.map +1 -1
  163. package/dist/storage/projection-runs/lifecycle.d.ts.map +1 -1
  164. package/dist/storage/projection-runs/provider.js +2 -2
  165. package/dist/storage/projection-runs/types.d.ts +2 -0
  166. package/dist/storage/projection-runs/types.d.ts.map +1 -1
  167. package/dist/syncs/index.js +8 -7
  168. package/dist/syncs/index.js.map +1 -1
  169. package/dist/syncs/run-dispatch.d.ts.map +1 -1
  170. package/dist/testing/broker-contract.d.ts.map +1 -1
  171. package/dist/testing/connector-connection-storage-contract.d.ts.map +1 -1
  172. package/dist/testing/index.d.ts +1 -0
  173. package/dist/testing/index.d.ts.map +1 -1
  174. package/dist/testing/index.js +1459 -951
  175. package/dist/testing/index.js.map +9 -8
  176. package/dist/testing/lake-changes-contract.d.ts +6 -0
  177. package/dist/testing/lake-changes-contract.d.ts.map +1 -0
  178. package/dist/testing/materializer-storage-contract.d.ts.map +1 -1
  179. package/dist/testing/ontology-storage-contract.d.ts.map +1 -1
  180. package/dist/testing/projection-run-storage-contract.d.ts.map +1 -1
  181. package/dist/webhooks/connections.d.ts +6 -0
  182. package/dist/webhooks/connections.d.ts.map +1 -0
  183. package/dist/webhooks/index.d.ts +1 -1
  184. package/dist/webhooks/index.d.ts.map +1 -1
  185. package/dist/webhooks/internal.d.ts +2 -0
  186. package/dist/webhooks/internal.d.ts.map +1 -1
  187. package/dist/webhooks/internal.js +54 -9
  188. package/dist/webhooks/internal.js.map +4 -3
  189. package/dist/webhooks/registry.d.ts +1 -1
  190. package/dist/webhooks/registry.d.ts.map +1 -1
  191. package/dist/webhooks/types.d.ts +15 -4
  192. package/dist/webhooks/types.d.ts.map +1 -1
  193. package/dist/workflows/index.js +17 -16
  194. package/dist/workflows/index.js.map +1 -1
  195. package/dist/workflows/run-dispatch.d.ts +3 -1
  196. package/dist/workflows/run-dispatch.d.ts.map +1 -1
  197. package/package.json +1 -1
  198. package/src/broker/in-memory.ts +104 -39
  199. package/src/broker/index.ts +4 -1
  200. package/src/broker/retention.ts +28 -0
  201. package/src/broker/subscriber.ts +21 -0
  202. package/src/broker/types.ts +15 -1
  203. package/src/connectors/builders.ts +0 -6
  204. package/src/connectors/connections/authorizations.ts +11 -5
  205. package/src/connectors/connections/contracts.ts +3 -0
  206. package/src/connectors/connections/request.ts +56 -22
  207. package/src/connectors/connections/runs.ts +1 -0
  208. package/src/connectors/connections/tokens.ts +4 -0
  209. package/src/connectors/connections/validation.ts +91 -5
  210. package/src/connectors/types.ts +19 -4
  211. package/src/events/execution.ts +2 -2
  212. package/src/events/service.ts +3 -3
  213. package/src/index.ts +10 -2
  214. package/src/lake-storage/changes.ts +43 -0
  215. package/src/lake-storage/in-memory.ts +73 -0
  216. package/src/lake-storage/index.ts +4 -0
  217. package/src/lake-storage/types.ts +40 -0
  218. package/src/logging/service.ts +1 -1
  219. package/src/materialization/index.ts +2 -0
  220. package/src/materialization/model.ts +14 -1
  221. package/src/materializer/index.ts +2 -0
  222. package/src/materializer/materializer.ts +10 -0
  223. package/src/materializer/projections/entry-validator.ts +19 -1
  224. package/src/materializer/projections/replace.ts +36 -1
  225. package/src/materializer/projections/source-materialization.ts +26 -6
  226. package/src/materializer/shared/normalize.ts +1 -1
  227. package/src/pipelines/run-dispatch.ts +21 -1
  228. package/src/projections/run-dispatch.ts +30 -68
  229. package/src/queues/in-memory.ts +105 -62
  230. package/src/queues/indexed-heap.ts +74 -0
  231. package/src/runtime/host.ts +0 -14
  232. package/src/runtime/ontology-mutations.ts +4 -0
  233. package/src/storage/connector-connections/in-memory.ts +3 -1
  234. package/src/storage/connector-connections/provider/runs.ts +3 -1
  235. package/src/storage/connector-connections/types.ts +3 -2
  236. package/src/storage/index.ts +1 -0
  237. package/src/storage/ontology/in-memory/materializations-state.ts +5 -18
  238. package/src/storage/ontology/in-memory/materializations.ts +73 -92
  239. package/src/storage/ontology/in-memory/shared-state.ts +26 -1
  240. package/src/storage/ontology/in-memory/source-roots.ts +123 -0
  241. package/src/storage/ontology/in-memory/sources.ts +78 -23
  242. package/src/storage/ontology/index.ts +1 -0
  243. package/src/storage/ontology/provider.ts +70 -0
  244. package/src/storage/ontology/sources.ts +14 -3
  245. package/src/storage/projection-runs/lifecycle.ts +5 -2
  246. package/src/storage/projection-runs/types.ts +4 -3
  247. package/src/syncs/run-dispatch.ts +19 -1
  248. package/src/testing/broker-contract.ts +95 -0
  249. package/src/testing/connector-connection-storage-contract.ts +18 -1
  250. package/src/testing/index.ts +1 -0
  251. package/src/testing/lake-changes-contract.ts +240 -0
  252. package/src/testing/materializer-storage-contract.ts +172 -1
  253. package/src/testing/ontology-storage-contract.ts +7 -0
  254. package/src/testing/projection-run-storage-contract.ts +34 -0
  255. package/src/webhooks/connections.ts +56 -0
  256. package/src/webhooks/index.ts +2 -0
  257. package/src/webhooks/internal.ts +2 -0
  258. package/src/webhooks/registry.ts +3 -4
  259. package/src/webhooks/types.ts +17 -4
  260. package/src/workflows/run-dispatch.ts +42 -29
  261. package/dist/chunk-0rdrecsb.js.map +0 -11
  262. package/dist/chunk-3f7veca0.js.map +0 -10
  263. package/dist/chunk-3frsnm7x.js.map +0 -11
  264. package/dist/chunk-52hbv0ak.js.map +0 -36
  265. package/dist/chunk-emyyk7dx.js.map +0 -14
  266. package/dist/chunk-jjy0fhrn.js.map +0 -12
  267. package/dist/chunk-k3cqkkn2.js.map +0 -12
  268. package/dist/chunk-ppytyr6w.js.map +0 -12
  269. package/dist/chunk-qhcpj9wc.js.map +0 -14
  270. package/dist/chunk-r29fxdhn.js.map +0 -11
  271. package/dist/chunk-zcnq6105.js.map +0 -10
  272. /package/dist/{chunk-h1gfhhbh.js.map → chunk-28ja2cjs.js.map} +0 -0
  273. /package/dist/{chunk-1enhpacz.js.map → chunk-976rxdpx.js.map} +0 -0
  274. /package/dist/{chunk-r4tfx1sf.js.map → chunk-agbbygvh.js.map} +0 -0
  275. /package/dist/{chunk-0w35wavj.js.map → chunk-g7knyczr.js.map} +0 -0
  276. /package/dist/{chunk-ypbtykv6.js.map → chunk-nmbxcaqx.js.map} +0 -0
  277. /package/dist/{chunk-vf691g1r.js.map → chunk-p5vcsw9c.js.map} +0 -0
  278. /package/dist/{chunk-xyr8kppc.js.map → chunk-rtk71jzp.js.map} +0 -0
  279. /package/dist/{chunk-m3z3x9v0.js.map → chunk-t1f4f1ve.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/storage/action-runs/in-memory.ts", "../src/agents/message.ts", "../src/storage/agents/in-memory.ts", "../src/storage/ai-cost/errors.ts", "../src/storage/ai-cost/in-memory.ts", "../src/storage/ai-limits/in-memory.ts", "../src/storage/connector-connections/in-memory.ts", "../src/storage/file-upload-sessions/errors.ts", "../src/storage/file-upload-sessions/in-memory.ts", "../src/storage/in-memory/index.ts", "../src/storage/executions/in-memory.ts", "../src/storage/objects/keys.ts", "../src/storage/objects/in-memory/keys.ts", "../src/objects/query/scalar-values.ts", "../src/storage/objects/in-memory/query.ts", "../src/storage/objects/in-memory/read-scope.ts", "../src/storage/objects/in-memory/selected-reader.ts", "../src/storage/objects/in-memory/storage.ts", "../src/storage/ontology/in-memory/shared-state.ts", "../src/storage/ontology/in-memory/commits.ts", "../src/storage/timeseries/store.ts", "../src/storage/ontology/in-memory/materializations-state.ts", "../src/storage/ontology/in-memory/materializations-work.ts", "../src/storage/ontology/in-memory/materializations-finalization.ts", "../src/storage/ontology/in-memory/materializations.ts", "../src/storage/ontology/in-memory/outbox.ts", "../src/storage/ontology/in-memory/sources.ts", "../src/storage/ontology/in-memory/testing.ts", "../src/storage/ontology/in-memory/index.ts", "../src/storage/run-listing.ts", "../src/storage/pipeline-runs/types.ts", "../src/storage/pipeline-runs/in-memory.ts", "../src/storage/projection-runs/in-memory.ts", "../src/storage/rules/in-memory.ts", "../src/storage/share-grants/in-memory.ts", "../src/storage/share-sessions/in-memory.ts", "../src/storage/sync-runs/types.ts", "../src/storage/sync-runs/in-memory.ts", "../src/storage/webhook-runs/types.ts", "../src/storage/webhook-runs/in-memory.ts", "../src/storage/workflow-interventions/errors.ts", "../src/storage/workflow-interventions/in-memory.ts", "../src/storage/workflow-runs/types.ts", "../src/storage/workflow-runs/in-memory.ts", "../src/storage/in-memory/testing.ts", "../src/storage/migrations/migrate-storage.ts", "../src/storage/migrations/check-schema.ts", "../src/storage/migrations/migration-set.ts"],
3
+ "sources": ["../src/storage/action-runs/in-memory.ts", "../src/agents/message.ts", "../src/storage/agents/in-memory.ts", "../src/storage/ai-cost/errors.ts", "../src/storage/ai-cost/in-memory.ts", "../src/storage/ai-limits/in-memory.ts", "../src/storage/connector-connections/in-memory.ts", "../src/storage/file-upload-sessions/errors.ts", "../src/storage/file-upload-sessions/in-memory.ts", "../src/storage/in-memory/index.ts", "../src/storage/executions/in-memory.ts", "../src/storage/objects/keys.ts", "../src/storage/objects/in-memory/keys.ts", "../src/objects/query/scalar-values.ts", "../src/storage/objects/in-memory/query.ts", "../src/storage/objects/in-memory/read-scope.ts", "../src/storage/objects/in-memory/selected-reader.ts", "../src/storage/objects/in-memory/storage.ts", "../src/storage/ontology/in-memory/shared-state.ts", "../src/storage/ontology/in-memory/commits.ts", "../src/storage/timeseries/store.ts", "../src/storage/ontology/in-memory/materializations-state.ts", "../src/storage/ontology/in-memory/materializations-work.ts", "../src/storage/ontology/in-memory/materializations-finalization.ts", "../src/storage/ontology/in-memory/source-roots.ts", "../src/storage/ontology/in-memory/materializations.ts", "../src/storage/ontology/in-memory/outbox.ts", "../src/storage/ontology/in-memory/sources.ts", "../src/storage/ontology/in-memory/testing.ts", "../src/storage/ontology/in-memory/index.ts", "../src/storage/run-listing.ts", "../src/storage/pipeline-runs/types.ts", "../src/storage/pipeline-runs/in-memory.ts", "../src/storage/projection-runs/in-memory.ts", "../src/storage/rules/in-memory.ts", "../src/storage/share-grants/in-memory.ts", "../src/storage/share-sessions/in-memory.ts", "../src/storage/sync-runs/types.ts", "../src/storage/sync-runs/in-memory.ts", "../src/storage/webhook-runs/types.ts", "../src/storage/webhook-runs/in-memory.ts", "../src/storage/workflow-interventions/errors.ts", "../src/storage/workflow-interventions/in-memory.ts", "../src/storage/workflow-runs/types.ts", "../src/storage/workflow-runs/in-memory.ts", "../src/storage/in-memory/testing.ts", "../src/storage/migrations/migrate-storage.ts", "../src/storage/migrations/check-schema.ts", "../src/storage/migrations/migration-set.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { ExecutionStorage } from \"../executions\"\nimport { ActionRunError } from \"./errors\"\nimport { parseActionRunFailure } from \"./failure\"\nimport {\n actionRunPhaseRecordsEqual,\n actionSubjectsEqual,\n canRequeueActionRunAfterEnqueueFailure,\n isTerminalActionRun,\n} from \"./idempotency\"\nimport { assertActionRunExecution } from \"./provider\"\nimport type {\n ActionRunEffectsRecord,\n ActionRunFailure,\n ActionRunParams,\n ActionRunPhase,\n ActionRunRecord,\n ActionRunStorage,\n ActionRunWritebackRecord,\n EnterActionRunPhaseInput,\n FinishActionRunInput,\n ListActionRunsInput,\n ListActionRunsResult,\n LockActionMaterializationRunInput,\n QueueActionRunInput,\n RecordActionEffectsInput,\n RecordActionWritebackInput,\n StartActionRunInput,\n} from \"./types\"\n\ntype RunRootOperation = <T>(run: () => Promise<T> | T) => Promise<T>\n\nconst runDirectly: RunRootOperation = async <T>(run: () => Promise<T> | T): Promise<T> => run()\n\nfunction actionRunKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction assertNonBlank(value: string, fieldName: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new ActionRunError(`[Sixb] Action materialization ${fieldName} must be nonblank.`)\n }\n}\n\nfunction cloneActionRunRecord(record: ActionRunRecord): ActionRunRecord {\n return structuredClone(record)\n}\n\nfunction normalizeParams(params: ActionRunParams): ActionRunParams {\n return structuredClone(params)\n}\n\nfunction normalizeSubject(subject: QueueActionRunInput[\"subject\"]): QueueActionRunInput[\"subject\"] {\n return structuredClone(subject)\n}\n\nfunction normalizeError<TPhase extends ActionRunPhase>(\n error: ActionRunFailure<TPhase>,\n expectedPhase?: TPhase\n): ActionRunFailure<TPhase> {\n return expectedPhase === undefined\n ? (parseActionRunFailure(error) as ActionRunFailure<TPhase>)\n : parseActionRunFailure(error, expectedPhase)\n}\n\nfunction normalizeWriteback(\n input: RecordActionWritebackInput,\n completedAt: Date\n): ActionRunWritebackRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n result: structuredClone(input.result),\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: normalizeError(input.error, \"writeback\"),\n }\n}\n\nfunction normalizeEffects(\n input: RecordActionEffectsInput,\n completedAt: Date\n): ActionRunEffectsRecord {\n if (input.status === \"succeeded\") {\n return {\n status: \"succeeded\",\n completedAt,\n }\n }\n\n return {\n status: \"failed\",\n completedAt,\n error: normalizeError(input.error, \"effects\"),\n }\n}\n\nfunction compareRuns(a: ActionRunRecord, b: ActionRunRecord, order: \"asc\" | \"desc\"): number {\n const leftAt = a.startedAt ?? a.queuedAt\n const rightAt = b.startedAt ?? b.queuedAt\n const delta = leftAt.getTime() - rightAt.getTime()\n if (delta !== 0) {\n return order === \"asc\" ? delta : -delta\n }\n\n if (a.id === b.id) {\n return 0\n }\n\n return order === \"asc\" ? a.id.localeCompare(b.id) : b.id.localeCompare(a.id)\n}\n\nexport class InMemoryActionRunStorage implements ActionRunStorage {\n private readonly rows = new Map<string, ActionRunRecord>()\n private readonly runRootOperation: RunRootOperation\n\n constructor(\n private readonly executions: ExecutionStorage,\n input: { readonly runRootOperation?: RunRootOperation } = {}\n ) {\n this.runRootOperation = input.runRootOperation ?? runDirectly\n }\n\n snapshot(): InMemoryActionRunStorageSnapshot {\n return structuredClone(this.rows)\n }\n\n restore(snapshot: InMemoryActionRunStorageSnapshot): void {\n this.rows.clear()\n for (const [key, record] of structuredClone(snapshot)) {\n this.rows.set(key, record)\n }\n }\n\n async lockForMaterialization(input: LockActionMaterializationRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => cloneActionRunRecord(this.requireMaterializationRun(input)))\n }\n\n async queue(input: QueueActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(async () => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n if (existing && !canRequeueActionRunAfterEnqueueFailure(existing, input)) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already exists for project '${input.projectId}'.`\n )\n }\n if (\n [...this.rows.values()].some(\n (run) =>\n run.projectId === input.projectId &&\n run.id !== input.id &&\n run.executionId === input.executionId\n )\n ) {\n throw new ActionRunError(\n `[Sixb] Execution '${input.executionId}' already belongs to another Action run.`\n )\n }\n await assertActionRunExecution({\n executions: this.executions,\n projectId: input.projectId,\n executionId: input.executionId,\n runId: input.id,\n actionId: input.actionId,\n })\n\n const record: ActionRunRecord = {\n id: input.id,\n projectId: input.projectId,\n executionId: input.executionId,\n actionId: input.actionId,\n subject: normalizeSubject(input.subject),\n status: \"queued\",\n phase: \"request\",\n queuedAt: new Date(input.queuedAt ?? new Date()),\n params: normalizeParams(input.params),\n idempotencyKey: input.idempotencyKey,\n }\n\n if (existing) {\n const next: ActionRunRecord = {\n ...existing,\n status: \"queued\",\n phase: \"request\",\n queuedAt: record.queuedAt,\n startedAt: undefined,\n finishedAt: undefined,\n error: undefined,\n writeback: undefined,\n effects: undefined,\n }\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n }\n\n this.rows.set(key, structuredClone(record))\n return cloneActionRunRecord(record)\n })\n }\n\n async start(input: StartActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (existing.status !== \"queued\") {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' cannot start from status '${existing.status}'.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n status: \"running\",\n phase: input.phase ?? \"validation\",\n startedAt: new Date(input.startedAt ?? new Date()),\n error: undefined,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async enterPhase(input: EnterActionRunPhaseInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"enter phase\")\n const next: ActionRunRecord = {\n ...existing,\n phase: input.phase,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async recordWriteback(input: RecordActionWritebackInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"record writeback\")\n const writeback = normalizeWriteback(input, new Date(input.completedAt ?? new Date()))\n\n if (existing.writeback) {\n if (actionRunPhaseRecordsEqual(existing.writeback, writeback)) {\n return cloneActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already has a different writeback record.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n phase: \"writeback\",\n writeback,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async recordEffects(input: RecordActionEffectsInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.requireRunningRun(key, input.projectId, input.id, \"record effects\")\n const effects = normalizeEffects(input, new Date(input.completedAt ?? new Date()))\n\n if (existing.effects) {\n if (actionRunPhaseRecordsEqual(existing.effects, effects)) {\n return cloneActionRunRecord(existing)\n }\n\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' already has a different effects record.`\n )\n }\n\n const next: ActionRunRecord = {\n ...existing,\n phase: \"effects\",\n effects,\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n async finish(input: FinishActionRunInput): Promise<ActionRunRecord> {\n return this.runRootOperation(() => {\n const key = actionRunKey(input.projectId, input.id)\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' not found for project '${input.projectId}'.`\n )\n }\n\n if (isTerminalActionRun(existing)) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.id}' cannot finish from terminal status '${existing.status}'.`\n )\n }\n\n const phase =\n input.status === \"succeeded\" ? (input.phase ?? existing.phase) : input.error.details.phase\n\n const base: ActionRunRecord = {\n ...existing,\n status: input.status,\n phase,\n finishedAt: new Date(input.finishedAt ?? new Date()),\n }\n\n const next: ActionRunRecord =\n input.status === \"succeeded\"\n ? {\n ...base,\n error: undefined,\n }\n : {\n ...base,\n error: normalizeError(input.error),\n }\n\n this.rows.set(key, structuredClone(next))\n return cloneActionRunRecord(next)\n })\n }\n\n private requireRunningRun(\n key: string,\n projectId: string,\n id: string,\n operation: string\n ): ActionRunRecord {\n const existing = this.rows.get(key)\n\n if (!existing) {\n throw new ActionRunError(`[Sixb] Action run '${id}' not found for project '${projectId}'.`)\n }\n\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[Sixb] Action run '${id}' cannot ${operation} from status '${existing.status}'.`\n )\n }\n\n return existing\n }\n\n async getById(params: { projectId: string; id: string }): Promise<ActionRunRecord | null> {\n return this.runRootOperation(() => {\n const record = this.rows.get(actionRunKey(params.projectId, params.id))\n return record ? cloneActionRunRecord(record) : null\n })\n }\n\n async list(input: ListActionRunsInput): Promise<ListActionRunsResult> {\n return this.runRootOperation(() => {\n if (input.actionIds?.length === 0) {\n return { runs: [], hasMore: false, total: 0 }\n }\n\n const order = input.order ?? \"desc\"\n const offset = input.offset ?? 0\n const limit = input.limit ?? this.rows.size\n const actionIds = input.actionIds ? new Set(input.actionIds) : null\n const objectTypeIds = input.objectTypeIds ? new Set(input.objectTypeIds) : null\n const statuses = input.statuses ? new Set(input.statuses) : null\n\n const filtered = [...this.rows.values()]\n .filter((record) => record.projectId === input.projectId)\n .filter((record) => (input.actionId ? record.actionId === input.actionId : true))\n .filter((record) => (actionIds ? actionIds.has(record.actionId) : true))\n .filter((record) =>\n objectTypeIds\n ? record.subject.kind !== \"object\" || objectTypeIds.has(record.subject.objectTypeId)\n : true\n )\n .filter((record) =>\n input.subject ? actionSubjectsEqual(record.subject, input.subject) : true\n )\n .filter((record) =>\n input.objectTypeId\n ? record.subject.kind === \"object\" && record.subject.objectTypeId === input.objectTypeId\n : true\n )\n .filter((record) =>\n input.primaryId\n ? record.subject.kind === \"object\" && record.subject.primaryId === input.primaryId\n : true\n )\n .filter((record) => (statuses ? statuses.has(record.status) : true))\n .filter((record) =>\n input.startedAfter ? (record.startedAt ?? record.queuedAt) >= input.startedAfter : true\n )\n .filter((record) =>\n input.startedBefore ? (record.startedAt ?? record.queuedAt) <= input.startedBefore : true\n )\n .sort((a, b) => compareRuns(a, b, order))\n\n const total = filtered.length\n const runs = filtered.slice(offset, offset + limit).map(cloneActionRunRecord)\n return { runs, hasMore: offset + runs.length < total, total }\n })\n }\n\n private requireMaterializationRun(input: LockActionMaterializationRunInput): ActionRunRecord {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.runId, \"runId\")\n assertNonBlank(input.actionId, \"actionId\")\n\n const existing = this.rows.get(actionRunKey(input.projectId, input.runId))\n if (!existing) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' not found for project '${input.projectId}'.`\n )\n }\n if (existing.actionId !== input.actionId) {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' does not belong to action '${input.actionId}'.`\n )\n }\n if (existing.status !== \"running\") {\n throw new ActionRunError(\n `[Sixb] Action run '${input.runId}' cannot materialize from status '${existing.status}'.`\n )\n }\n return existing\n }\n}\n\nexport type InMemoryActionRunStorageSnapshot = Map<string, ActionRunRecord>\n",
6
6
  "import type { FileRef } from \"../blob-storage\"\nimport type { JsonValue } from \"../json\"\nimport type { ProviderData } from \"../models\"\nimport type { AgentContextPart } from \"./context/entries\"\n\n/**\n * The agent's own, SDK-independent message. We store messages and threads — not an SDK transport —\n * so a message is just a `role` plus structured `parts` (and optional `metadata`). There is no\n * self-describing wrapper: the storage row owns the message's identity, and `contentVersion` (a\n * column) versions the parts shape so it can be migrated.\n *\n * The part union is intentionally focused on what agent runs actually produce (text, reasoning, step\n * boundaries, tool calls). The model loop validates and normalizes output before its steps are\n * projected into this union; storage validates the durable write contract independently.\n */\nexport const AGENT_MESSAGE_CONTENT_VERSION = 2 as const\n\nexport type AgentMessageRole = \"system\" | \"user\" | \"assistant\"\n\n/** A plain text part (assistant output, user input, or system text). */\nexport interface AgentTextPart {\n readonly type: \"text\"\n readonly text: string\n /** Provider passthrough (kept because some providers require it on the next turn). */\n readonly providerMetadata?: ProviderData\n}\n\n/**\n * A reasoning (\"thinking\") part. `providerMetadata` is load-bearing here: some providers require\n * the reasoning signature back on the following turn, so dropping it would break multi-step loops.\n */\nexport interface AgentReasoningPart {\n readonly type: \"reasoning\"\n readonly text: string\n readonly providerMetadata?: ProviderData\n}\n\n/** A step boundary between assistant loop iterations. */\nexport interface AgentStepStartPart {\n readonly type: \"step-start\"\n}\n\n/** A blob-backed file attached to a user message or produced by an agent/tool. */\nexport interface AgentFilePart {\n readonly type: \"file\"\n readonly fileRef: FileRef\n /** Provider passthrough for future model-specific file handling. */\n readonly providerMetadata?: ProviderData\n}\n\ninterface AgentToolCallBase {\n readonly type: \"tool-call\"\n readonly toolCallId: string\n readonly toolName: string\n /** `true` when the model identifies the call as a dynamic tool. */\n readonly dynamic?: boolean\n /** `true` when the provider executed the tool inline (steers model projection). */\n readonly providerExecuted?: boolean\n readonly input: JsonValue\n readonly providerMetadata?: ProviderData\n}\n\n/** Ordered, hidden provider state required to replay a model response losslessly. */\nexport interface AgentProviderStatePart {\n readonly type: \"provider-state\"\n readonly providerId: string\n readonly data: JsonValue\n}\n\n/**\n * A completed tool call. Only terminal states are modelled — transient states\n * (`input-streaming`, `input-available`, `approval-*`) are never persisted because messages are\n * written only once a run finishes.\n */\nexport type AgentToolCallPart = AgentToolCallBase &\n (\n | { readonly state: \"output-available\"; readonly output: JsonValue }\n | { readonly state: \"output-error\"; readonly errorText: string }\n )\n\nexport type AgentMessagePart =\n | AgentTextPart\n | AgentReasoningPart\n | AgentStepStartPart\n | AgentFilePart\n | AgentContextPart\n | AgentToolCallPart\n | AgentProviderStatePart\n\nexport type AgentMessagePartType = AgentMessagePart[\"type\"]\nexport type AgentToolCallState = AgentToolCallPart[\"state\"]\n\n/** The logical agent message the adapters speak and the store persists (as columns). */\nexport interface AgentMessage {\n readonly role: AgentMessageRole\n readonly parts: readonly AgentMessagePart[]\n /** Optional JSON metadata associated with the message. */\n readonly metadata?: JsonValue\n}\n",
@@ -8,7 +8,7 @@
8
8
  "export type AiCostStorageErrorCode = \"missing_usage\" | \"cost_mismatch\"\n\nexport class AiCostStorageError extends Error {\n readonly name = \"AiCostStorageError\"\n\n constructor(\n readonly code: AiCostStorageErrorCode,\n message: string\n ) {\n super(message)\n }\n}\n",
9
9
  "import type { AiModelCallUsageRecord, InMemoryAiUsageStorageSnapshot } from \"../ai-usage\"\nimport type { AiAccountingRecordSetItem } from \"./analytics\"\nimport { buildAiAccountingOverview, buildAiModelCallAccountingList } from \"./analytics\"\nimport { AiCostStorageError } from \"./errors\"\nimport { type AiAccountingGroupIdentity, buildAiModelCallGroups } from \"./groups\"\nimport type {\n AiAccountingAttribution,\n AiAccountingOverview,\n AiCostStorage,\n AiCostSummary,\n AiModelCallCostRecord,\n AiMoney,\n ListAiModelCallAccountingInput,\n ListAiModelCallAccountingResult,\n ListAiModelCallGroupsInput,\n ListAiModelCallGroupsResult,\n QueryAiAccountingOverviewInput,\n SummarizeAiCostExecutionsInput,\n} from \"./types\"\nimport { aiModelCallCostMatchesUsage, normalizeAiModelCallCostRecord } from \"./validation\"\n\nexport interface InMemoryAiCostStorageSnapshot {\n readonly recordsByUsage: Map<string, AiModelCallCostRecord>\n}\n\ninterface InMemoryAiCostUsageSource {\n snapshot(): InMemoryAiUsageStorageSnapshot\n}\n\nexport interface InMemoryAiAccountingAttributionSource {\n resolveGroup?(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<{ readonly executionId: string; readonly attribution?: AiAccountingAttribution }>\n resolve(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<AiAccountingAttribution | undefined>\n}\n\n/** In-memory immutable model-call costs and accounting reads. */\nexport class InMemoryAiCostStorage implements AiCostStorage {\n private readonly recordsByUsage = new Map<string, AiModelCallCostRecord>()\n\n constructor(\n private readonly usage: InMemoryAiCostUsageSource,\n private readonly attribution?: InMemoryAiAccountingAttributionSource\n ) {}\n\n async recordModelCallCost(input: AiModelCallCostRecord): Promise<void> {\n const record = normalizeAiModelCallCostRecord(input)\n const usage = this.usageRecord(record.projectId, record.usageRecordId)\n if (!usage) throw missingUsage(record)\n if (!aiModelCallCostMatchesUsage(record, usage)) {\n throw new AiCostStorageError(\n \"cost_mismatch\",\n `[Sixb] AI valuation for usage '${record.usageRecordId}' does not match its usage record.`\n )\n }\n const key = usageRecordKey(record.projectId, record.usageRecordId)\n if (!this.recordsByUsage.has(key)) this.recordsByUsage.set(key, structuredClone(record))\n }\n\n async summarizeExecutions(\n input: SummarizeAiCostExecutionsInput\n ): Promise<readonly AiCostSummary[]> {\n assertNonBlank(input.projectId, \"cost summary projectId\")\n for (const id of input.executionIds) assertNonBlank(id, \"cost summary executionId\")\n const requested = new Set(input.executionIds)\n const usageByExecution = new Map(input.executionIds.map((id) => [id, [] as string[]]))\n for (const usage of this.usage.snapshot().records.values()) {\n if (usage.projectId === input.projectId && requested.has(usage.executionId)) {\n usageByExecution.get(usage.executionId)!.push(usage.id)\n }\n }\n return input.executionIds.map((id) =>\n this.summarizeUsageIds(input.projectId, usageByExecution.get(id) ?? [])\n )\n }\n\n async queryProjectOverview(input: QueryAiAccountingOverviewInput): Promise<AiAccountingOverview> {\n return buildAiAccountingOverview(input, await this.accountingItems())\n }\n\n async listModelCalls(\n input: ListAiModelCallAccountingInput\n ): Promise<ListAiModelCallAccountingResult> {\n return buildAiModelCallAccountingList(input, await this.accountingItems())\n }\n\n snapshot(): InMemoryAiCostStorageSnapshot {\n return structuredClone({ recordsByUsage: this.recordsByUsage })\n }\n\n async listModelCallGroups(\n input: ListAiModelCallGroupsInput\n ): Promise<ListAiModelCallGroupsResult> {\n const items = await this.accountingItems()\n const roots = new Map<string, Promise<AiAccountingGroupIdentity>>()\n return buildAiModelCallGroups(\n input,\n await Promise.all(\n items.map(async (item) => {\n const key = usageRecordKey(item.usage.projectId, item.usage.executionId)\n let root = roots.get(key)\n if (!root) {\n root =\n this.attribution?.resolveGroup?.({\n projectId: item.usage.projectId,\n executionId: item.usage.executionId,\n }) ??\n Promise.resolve({\n executionId: item.usage.executionId,\n attribution: item.attribution,\n })\n roots.set(key, root)\n }\n return { ...item, root: await root }\n })\n )\n )\n }\n\n restore(snapshot: InMemoryAiCostStorageSnapshot): void {\n replaceMap(this.recordsByUsage, snapshot.recordsByUsage)\n }\n\n /** @internal Immutable accounting source used by in-memory AI limit enforcement. */\n getRecord(projectId: string, usageRecordId: string): AiModelCallCostRecord | null {\n const record = this.recordsByUsage.get(usageRecordKey(projectId, usageRecordId))\n return record ? structuredClone(record) : null\n }\n\n private usageRecord(projectId: string, id: string): AiModelCallUsageRecord | undefined {\n return [...this.usage.snapshot().records.values()].find(\n (record) => record.projectId === projectId && record.id === id\n )\n }\n\n private async accountingItems(): Promise<readonly AiAccountingRecordSetItem[]> {\n return Promise.all(\n [...this.usage.snapshot().records.values()].map(async (usage) => {\n const cost = this.recordsByUsage.get(usageRecordKey(usage.projectId, usage.id))\n const attribution = await this.attribution?.resolve({\n projectId: usage.projectId,\n executionId: usage.executionId,\n })\n return {\n usage,\n ...(attribution ? { attribution } : {}),\n ...(cost ? { cost } : {}),\n }\n })\n )\n }\n\n private summarizeUsageIds(projectId: string, ids: readonly string[]): AiCostSummary {\n const amounts = new Map<string, bigint>()\n let ratedCallCount = 0\n let unpriceableCallCount = 0\n let unvaluedCallCount = 0\n for (const id of ids) {\n const cost = this.recordsByUsage.get(usageRecordKey(projectId, id))\n if (!cost) unvaluedCallCount += 1\n else if (cost.status === \"unpriceable\") unpriceableCallCount += 1\n else {\n ratedCallCount += 1\n addMoney(amounts, cost.money)\n }\n }\n return {\n amounts: [...amounts]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([currency, amount]) => ({ currency, amountNanos: amount.toString() })),\n ratedCallCount,\n unpriceableCallCount,\n unvaluedCallCount,\n }\n }\n}\n\nfunction missingUsage(record: { readonly projectId: string; readonly usageRecordId: string }) {\n return new AiCostStorageError(\n \"missing_usage\",\n `[Sixb] AI usage '${record.usageRecordId}' does not exist in project '${record.projectId}'.`\n )\n}\n\nfunction addMoney(amounts: Map<string, bigint>, money: AiMoney): void {\n amounts.set(money.currency, (amounts.get(money.currency) ?? 0n) + BigInt(money.amountNanos))\n}\n\nfunction usageRecordKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction assertNonBlank(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`[Sixb] AI ${field} must be nonblank.`)\n }\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n",
10
10
  "import type { AiModelCallCostRecord } from \"../ai-cost\"\nimport type { AiModelCallUsageRecord } from \"../ai-usage\"\nimport type { ExecutionRecord } from \"../executions\"\nimport { AiLimitStorageError } from \"./errors\"\nimport { aiLimitCalendarMonth } from \"./period\"\nimport type { AiLimitAccountingEntry } from \"./provider\"\nimport {\n AiLimitOperationLock,\n aiLimitAccountingEntryAppliesToSubject,\n aiLimitAmountKey,\n aiLimitPolicyDimensionKey,\n aiLimitQuantityFromAmount,\n aiLimitReservationBuckets,\n aiLimitReservationRequestKey,\n aiLimitReservationRequestMatches,\n aiLimitSubjectKey,\n aiLimitSubjectsFromAccountingEntry,\n aiModelCallReservationKey,\n assertAiLimitAccountingMatchesReservation,\n assertNonBlank,\n cloneAiLimitPolicy,\n cloneValidDate,\n type NormalizedAiLimitAmount,\n normalizeAiLimitAmount,\n normalizeAiModelCallReservationIdentity,\n normalizeCreateAiLimitPolicy,\n normalizeReserveAiModelCall,\n normalizeUpdateAiLimitPolicy,\n resolveAiLimitActual,\n} from \"./provider\"\nimport type {\n AiLimitPeriod,\n AiLimitPolicy,\n AiLimitPolicyStatus,\n AiLimitQuantity,\n AiLimitStorage,\n AiLimitSubject,\n AiModelCallReservation,\n CreateAiLimitPolicyInput,\n DeleteAiLimitPolicyInput,\n GetAiLimitPolicyInput,\n ListAiLimitPoliciesInput,\n ListAiLimitPolicyStatusesInput,\n MarkAiModelCallReservationUnknownInput,\n ReconcileAiModelCallInput,\n RecordAiModelCallLimitActualsInput,\n ReserveAiModelCallInput,\n ReserveAiModelCallResult,\n UpdateAiLimitPolicyInput,\n} from \"./types\"\n\ninterface AiLimitPeriodState {\n readonly projectId: string\n readonly subject: AiLimitSubject\n readonly meter: AiLimitQuantity[\"meter\"]\n readonly currency: string\n readonly period: AiLimitPeriod\n actual: bigint\n reserved: bigint\n unknown: bigint\n accountingStatus: \"complete\" | \"unavailable\"\n updatedAt: Date\n}\n\nexport interface InMemoryAiLimitStorageOptions {\n readonly executionExists?: (input: {\n readonly projectId: string\n readonly executionId: string\n }) => boolean | Promise<boolean>\n readonly resolveExecution?: (input: {\n readonly projectId: string\n readonly executionId: string\n }) => ExecutionRecord | null | Promise<ExecutionRecord | null>\n readonly resolveUsageRecord?: (input: {\n readonly projectId: string\n readonly usageRecordId: string\n }) => AiModelCallUsageRecord | null | Promise<AiModelCallUsageRecord | null>\n readonly resolveCostRecord?: (input: {\n readonly projectId: string\n readonly usageRecordId: string\n }) => AiModelCallCostRecord | null | Promise<AiModelCallCostRecord | null>\n readonly listUsageRecords?: (input: {\n readonly projectId: string\n }) => readonly AiModelCallUsageRecord[] | Promise<readonly AiModelCallUsageRecord[]>\n}\n\nexport interface InMemoryAiLimitStorageSnapshot {\n readonly policies: Map<string, AiLimitPolicy>\n readonly policyIdsByDimension: Map<string, string>\n readonly periodStates: Map<string, AiLimitPeriodState>\n readonly reservations: Map<string, AiModelCallReservation>\n}\n\n/** In-memory AI limit provider used by development runtimes and contract tests. */\nexport class InMemoryAiLimitStorage implements AiLimitStorage {\n private readonly policies = new Map<string, AiLimitPolicy>()\n private readonly policyIdsByDimension = new Map<string, string>()\n private readonly periodStates = new Map<string, AiLimitPeriodState>()\n private readonly reservations = new Map<string, AiModelCallReservation>()\n private readonly operations = new AiLimitOperationLock()\n\n constructor(private readonly options: InMemoryAiLimitStorageOptions = {}) {}\n\n /** @internal The root transaction must settle queued work before restoring its snapshot. */\n settleOperations(): Promise<void> {\n return this.operations.settle()\n }\n\n async createPolicy(input: CreateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n return this.operations.run(async () => {\n const policy = normalizeCreateAiLimitPolicy(input)\n const key = policyKey(policy.projectId, policy.id)\n const dimensionKey = aiLimitPolicyDimensionKey(policy)\n if (this.policies.has(key) || this.policyIdsByDimension.has(dimensionKey)) {\n throw new AiLimitStorageError(\n \"duplicate_policy\",\n `[Sixb] An AI limit policy already exists for '${aiLimitSubjectKey(policy.subject)}' and '${aiLimitAmountKey(normalizeAiLimitAmount(policy.limit))}'.`\n )\n }\n this.policies.set(key, structuredClone(policy))\n this.policyIdsByDimension.set(dimensionKey, key)\n return cloneAiLimitPolicy(policy)\n })\n }\n\n async updatePolicy(input: UpdateAiLimitPolicyInput): Promise<AiLimitPolicy> {\n return this.operations.run(async () => {\n const update = normalizeUpdateAiLimitPolicy(input)\n const key = policyKey(update.projectId, update.id)\n const existing = this.policies.get(key)\n if (!existing) throw missingPolicy(update.projectId, update.id)\n if (update.limit !== undefined) {\n const previous = normalizeAiLimitAmount(existing.limit)\n const next = normalizeAiLimitAmount(update.limit)\n if (aiLimitAmountKey(previous) !== aiLimitAmountKey(next)) {\n throw new TypeError(\"[Sixb] AI limit policy meter and cost currency are immutable.\")\n }\n }\n const policy: AiLimitPolicy = {\n ...existing,\n ...(update.limit === undefined ? {} : { limit: update.limit }),\n ...(update.enabled === undefined ? {} : { enabled: update.enabled }),\n updatedAt: update.updatedAt,\n }\n this.policies.set(key, structuredClone(policy))\n return cloneAiLimitPolicy(policy)\n })\n }\n\n async deletePolicy(input: DeleteAiLimitPolicyInput): Promise<boolean> {\n return this.operations.run(async () => {\n validatePolicyIdentity(input)\n const key = policyKey(input.projectId, input.id)\n const existing = this.policies.get(key)\n if (!existing) return false\n this.policies.delete(key)\n this.policyIdsByDimension.delete(aiLimitPolicyDimensionKey(existing))\n return true\n })\n }\n\n async getPolicy(input: GetAiLimitPolicyInput): Promise<AiLimitPolicy | null> {\n validatePolicyIdentity(input)\n const policy = this.policies.get(policyKey(input.projectId, input.id))\n return policy ? cloneAiLimitPolicy(policy) : null\n }\n\n async listPolicies(input: ListAiLimitPoliciesInput): Promise<readonly AiLimitPolicy[]> {\n assertNonBlank(input.projectId, \"projectId\")\n return [...this.policies.values()]\n .filter(\n (policy) =>\n policy.projectId === input.projectId && (input.includeDisabled || policy.enabled)\n )\n .sort((left, right) => left.id.localeCompare(right.id))\n .map(cloneAiLimitPolicy)\n }\n\n async listPolicyStatuses(\n input: ListAiLimitPolicyStatusesInput\n ): Promise<readonly AiLimitPolicyStatus[]> {\n return this.operations.run(async () => {\n assertNonBlank(input.projectId, \"projectId\")\n const period = aiLimitCalendarMonth(input.at ?? new Date())\n const existingGroups =\n input.existingGroupIds === undefined ? undefined : new Set(input.existingGroupIds)\n const policies = await this.listPolicies({\n projectId: input.projectId,\n includeDisabled: input.includeDisabled,\n })\n return Promise.all(\n policies.map((policy) => this.policyStatus(policy, period, existingGroups))\n )\n })\n }\n\n async reserveModelCall(input: ReserveAiModelCallInput): Promise<ReserveAiModelCallResult> {\n return this.operations.run(async () => {\n const request = normalizeReserveAiModelCall(input)\n const reservationKey = aiModelCallReservationKey(request.identity)\n const existing = this.reservations.get(reservationKey)\n if (existing) {\n if (!aiLimitReservationRequestMatches(existing, request)) {\n throw new AiLimitStorageError(\n \"reservation_conflict\",\n `[Sixb] AI model-call reservation '${input.callId}' was replayed with different subjects, estimates, or period.`\n )\n }\n if (existing.state !== \"active\") {\n return { status: \"terminal\", reservation: structuredClone(existing), created: false }\n }\n return { status: \"reserved\", reservation: structuredClone(existing), created: false }\n }\n await this.assertExecutionExists(request.identity.projectId, request.identity.executionId)\n\n const enabledPolicies = [...this.policies.values()].filter(\n (policy) => policy.projectId === request.identity.projectId && policy.enabled\n )\n const subjectKeys = new Set(request.subjects.map(aiLimitSubjectKey))\n const estimates = new Map(\n request.estimates.map((quantity) => {\n const amount = normalizeAiLimitAmount(quantity)\n return [aiLimitAmountKey(amount), amount] as const\n })\n )\n const exhaustedPolicies: AiLimitPolicyStatus[] = []\n const unavailablePolicies: AiLimitPolicyStatus[] = []\n const unavailableReasons = new Set<\"missingEstimate\" | \"incompleteAccounting\">()\n for (const policy of enabledPolicies) {\n if (!subjectKeys.has(aiLimitSubjectKey(policy.subject))) continue\n const limit = normalizeAiLimitAmount(policy.limit)\n const estimate = estimates.get(aiLimitAmountKey(limit))\n const status = await this.policyStatus(policy, request.period)\n if (!estimate || status.accountingStatus === \"unavailable\") {\n unavailablePolicies.push(status)\n if (!estimate) unavailableReasons.add(\"missingEstimate\")\n if (status.accountingStatus === \"unavailable\") {\n unavailableReasons.add(\"incompleteAccounting\")\n }\n continue\n }\n const actual = normalizeAiLimitAmount(status.consumption.actual).amount\n const reserved = normalizeAiLimitAmount(status.consumption.reserved).amount\n const unknown = normalizeAiLimitAmount(status.consumption.unknown).amount\n if (actual + reserved + unknown + estimate.amount > limit.amount) {\n exhaustedPolicies.push(status)\n }\n }\n if (unavailablePolicies.length > 0) {\n unavailablePolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"unavailable\",\n unavailablePolicies,\n reasons: [...unavailableReasons].sort(),\n }\n }\n if (exhaustedPolicies.length > 0) {\n exhaustedPolicies.sort((left, right) => left.policy.id.localeCompare(right.policy.id))\n return {\n status: \"denied\",\n exhaustedPolicies,\n resetAt: new Date(\n Math.min(...exhaustedPolicies.map((status) => status.period.resetAt.getTime()))\n ),\n }\n }\n\n const buckets = aiLimitReservationBuckets(\n enabledPolicies,\n request.subjects,\n request.estimates\n )\n if (buckets.length === 0) return { status: \"notRequired\" }\n for (const bucket of buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n request.identity.projectId,\n bucket.subject,\n amount,\n request.period\n )\n state.reserved += amount.amount\n state.updatedAt = new Date(request.reservedAt)\n }\n const reservation: AiModelCallReservation = {\n ...request.identity,\n buckets,\n requestKey: aiLimitReservationRequestKey(request),\n period: request.period,\n state: \"active\",\n reservedAt: request.reservedAt,\n updatedAt: new Date(request.reservedAt),\n }\n this.reservations.set(reservationKey, structuredClone(reservation))\n return { status: \"reserved\", reservation: structuredClone(reservation), created: true }\n })\n }\n\n async recordModelCallActuals(input: RecordAiModelCallLimitActualsInput): Promise<void> {\n return this.operations.run(async () => {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const recordedAt = cloneValidDate(input.recordedAt ?? new Date(), \"recordedAt\")\n const entry = await this.requireAccountingEntry(input.projectId, input.usageRecordId)\n const period = aiLimitCalendarMonth(entry.occurredAt)\n const subjectKeys = new Set(aiLimitSubjectsFromAccountingEntry(entry).map(aiLimitSubjectKey))\n for (const state of this.periodStates.values()) {\n if (\n state.projectId !== input.projectId ||\n state.period.start.getTime() !== period.start.getTime() ||\n !subjectKeys.has(aiLimitSubjectKey(state.subject))\n ) {\n continue\n }\n const actual = resolveAiLimitActual([entry], state)\n state.actual += actual.amount\n if (actual.accountingStatus === \"unavailable\") state.accountingStatus = \"unavailable\"\n state.updatedAt = new Date(recordedAt)\n }\n })\n }\n\n async reconcileModelCall(input: ReconcileAiModelCallInput): Promise<AiModelCallReservation> {\n return this.operations.run(async () => {\n const identity = normalizeAiModelCallReservationIdentity(input)\n assertNonBlank(input.usageRecordId, \"usageRecordId\")\n const reconciledAt = cloneValidDate(input.reconciledAt ?? new Date(), \"reconciledAt\")\n const key = aiModelCallReservationKey(identity)\n const reservation = this.reservations.get(key)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"reconciled\") {\n if (reservation.usageRecordId === input.usageRecordId) {\n return structuredClone(reservation)\n }\n throw new AiLimitStorageError(\n \"reconciliation_conflict\",\n `[Sixb] AI model-call reservation '${identity.callId}' was reconciled with a different usage record.`\n )\n }\n const accounting = await this.requireAccountingEntry(identity.projectId, input.usageRecordId)\n assertAiLimitAccountingMatchesReservation(reservation, accounting)\n this.reconcileEstimateCounters(reservation, accounting, reconciledAt)\n const reconciled: AiModelCallReservation = {\n ...reservation,\n state: \"reconciled\",\n usageRecordId: input.usageRecordId,\n updatedAt: reconciledAt,\n }\n this.reservations.set(key, structuredClone(reconciled))\n return structuredClone(reconciled)\n })\n }\n\n async markReservationUnknown(\n input: MarkAiModelCallReservationUnknownInput\n ): Promise<AiModelCallReservation> {\n return this.operations.run(async () => {\n const identity = normalizeAiModelCallReservationIdentity(input)\n const markedAt = cloneValidDate(input.markedAt ?? new Date(), \"markedAt\")\n const key = aiModelCallReservationKey(identity)\n const reservation = this.reservations.get(key)\n if (!reservation) throw missingReservation(identity)\n if (reservation.state === \"unknown\") return structuredClone(reservation)\n if (reservation.state !== \"active\") throw invalidState(reservation, \"mark unknown\")\n this.moveEstimateCounter(reservation, \"reserved\", -1n, markedAt)\n this.moveEstimateCounter(reservation, \"unknown\", 1n, markedAt)\n const unknown: AiModelCallReservation = {\n ...reservation,\n state: \"unknown\",\n updatedAt: markedAt,\n }\n this.reservations.set(key, structuredClone(unknown))\n return structuredClone(unknown)\n })\n }\n\n snapshot(): InMemoryAiLimitStorageSnapshot {\n return structuredClone({\n policies: this.policies,\n policyIdsByDimension: this.policyIdsByDimension,\n periodStates: this.periodStates,\n reservations: this.reservations,\n })\n }\n\n restore(snapshot: InMemoryAiLimitStorageSnapshot): void {\n replaceMap(this.policies, snapshot.policies)\n replaceMap(this.policyIdsByDimension, snapshot.policyIdsByDimension)\n replaceMap(this.periodStates, snapshot.periodStates)\n replaceMap(this.reservations, snapshot.reservations)\n }\n\n private async policyStatus(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n existingGroups?: ReadonlySet<string>\n ): Promise<AiLimitPolicyStatus> {\n const limit = normalizeAiLimitAmount(policy.limit)\n const state = await this.ensurePeriodState(policy, period)\n const reserved = state.reserved\n const unknown = state.unknown\n const consumed = state.actual + reserved + unknown\n const remaining = limit.amount > consumed ? limit.amount - consumed : 0n\n const quantity = (amount: bigint): AiLimitQuantity =>\n aiLimitQuantityFromAmount({ ...limit, amount })\n return {\n policy: cloneAiLimitPolicy(policy),\n period: structuredClone(period),\n consumption: {\n actual: quantity(state.actual),\n reserved: quantity(reserved),\n unknown: quantity(unknown),\n remaining: quantity(remaining),\n },\n accountingStatus: state.accountingStatus,\n exhausted: consumed >= limit.amount,\n orphaned:\n policy.subject.type === \"group\" &&\n existingGroups !== undefined &&\n !existingGroups.has(policy.subject.id),\n }\n }\n\n private async ensurePeriodState(\n policy: AiLimitPolicy,\n period: AiLimitPeriod\n ): Promise<AiLimitPeriodState> {\n const amount = normalizeAiLimitAmount(policy.limit)\n const key = periodStateKey(policy.projectId, policy.subject, amount, period)\n const existing = this.periodStates.get(key)\n if (existing?.accountingStatus === \"complete\") return existing\n // A late valuation can repair the ledger after this period was cached as unavailable.\n const actual = await this.resolvePolicyActual(policy, period, amount)\n if (existing) {\n existing.actual = actual.amount\n existing.accountingStatus = actual.accountingStatus\n existing.updatedAt = new Date()\n return existing\n }\n const state: AiLimitPeriodState = {\n projectId: policy.projectId,\n subject: structuredClone(policy.subject),\n meter: amount.meter,\n currency: amount.currency,\n period: structuredClone(period),\n actual: actual.amount,\n reserved: 0n,\n unknown: 0n,\n accountingStatus: actual.accountingStatus,\n updatedAt: new Date(),\n }\n this.periodStates.set(key, state)\n return state\n }\n\n private moveEstimateCounter(\n reservation: AiModelCallReservation,\n counter: \"reserved\" | \"unknown\",\n direction: 1n | -1n,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period\n )\n state[counter] += direction * amount.amount\n if (state[counter] < 0n) {\n throw new Error(`[Sixb] In-memory AI limit ${counter} counter became negative.`)\n }\n state.updatedAt = new Date(updatedAt)\n }\n }\n\n private reconcileEstimateCounters(\n reservation: AiModelCallReservation,\n entry: AiLimitAccountingEntry,\n updatedAt: Date\n ): void {\n for (const bucket of reservation.buckets) {\n const amount = normalizeAiLimitAmount(bucket.estimate)\n const state = this.requirePeriodState(\n reservation.projectId,\n bucket.subject,\n amount,\n reservation.period\n )\n const counter = reservation.state === \"active\" ? \"reserved\" : \"unknown\"\n const actual = resolveAiLimitActual([entry], amount)\n if (actual.accountingStatus === \"complete\") {\n state[counter] -= amount.amount\n } else if (reservation.state === \"active\") {\n state.reserved -= amount.amount\n state.unknown += amount.amount\n }\n if (state.reserved < 0n || state.unknown < 0n) {\n throw new Error(\"[Sixb] In-memory AI limit reservation counter became negative.\")\n }\n state.updatedAt = new Date(updatedAt)\n }\n }\n\n private requirePeriodState(\n projectId: string,\n subject: AiLimitSubject,\n amount: NormalizedAiLimitAmount,\n period: AiLimitPeriod\n ): AiLimitPeriodState {\n const state = this.periodStates.get(periodStateKey(projectId, subject, amount, period))\n if (!state) throw new Error(\"[Sixb] In-memory AI limit period state is inconsistent.\")\n return state\n }\n\n private async assertExecutionExists(projectId: string, executionId: string): Promise<void> {\n if (this.options.resolveExecution) {\n if (await this.options.resolveExecution({ projectId, executionId })) return\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[Sixb] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n if (\n this.options.executionExists &&\n (await this.options.executionExists({ projectId, executionId }))\n ) {\n return\n }\n throw new AiLimitStorageError(\n \"missing_execution\",\n `[Sixb] AI limit execution '${executionId}' does not exist in project '${projectId}'.`\n )\n }\n\n private async resolvePolicyActual(\n policy: AiLimitPolicy,\n period: AiLimitPeriod,\n dimension: NormalizedAiLimitAmount\n ): Promise<ReturnType<typeof resolveAiLimitActual>> {\n if (\n !this.options.listUsageRecords ||\n ((policy.subject.type === \"user\" || policy.subject.type === \"serviceAccount\") &&\n !this.options.resolveExecution)\n ) {\n return { amount: 0n, accountingStatus: \"unavailable\" }\n }\n const records = await this.options.listUsageRecords({ projectId: policy.projectId })\n const entries = await Promise.all(\n records\n .filter(\n (record) =>\n record.occurredAt.getTime() >= period.start.getTime() &&\n record.occurredAt.getTime() < period.end.getTime()\n )\n .map((record) => this.accountingEntry(record))\n )\n return resolveAiLimitActual(\n entries.filter((entry) => aiLimitAccountingEntryAppliesToSubject(entry, policy.subject)),\n dimension\n )\n }\n\n private async requireAccountingEntry(\n projectId: string,\n usageRecordId: string\n ): Promise<AiLimitAccountingEntry> {\n if (!this.options.resolveUsageRecord) {\n throw new AiLimitStorageError(\n \"unavailable_actuals\",\n \"[Sixb] In-memory AI limit storage has no immutable accounting source.\"\n )\n }\n const record = await this.options.resolveUsageRecord({ projectId, usageRecordId })\n if (!record) {\n throw new AiLimitStorageError(\n \"missing_usage_record\",\n `[Sixb] AI usage record '${usageRecordId}' does not exist in project '${projectId}'.`\n )\n }\n return this.accountingEntry(record)\n }\n\n private async accountingEntry(record: AiModelCallUsageRecord): Promise<AiLimitAccountingEntry> {\n const [execution, cost] = await Promise.all([\n this.options.resolveExecution?.({\n projectId: record.projectId,\n executionId: record.executionId,\n }),\n this.options.resolveCostRecord?.({\n projectId: record.projectId,\n usageRecordId: record.id,\n }),\n ])\n const requester = execution?.requestedBy\n return {\n projectId: record.projectId,\n usageRecordId: record.id,\n executionId: record.executionId,\n attempt: record.attempt,\n callId: record.callId,\n occurredAt: new Date(record.occurredAt),\n ...(record.usage.totalTokens === undefined ? {} : { totalTokens: record.usage.totalTokens }),\n requesterGroupIds: [...record.requesterGroupIds],\n ...(requester?.type === \"user\" || requester?.type === \"serviceAccount\"\n ? { requester: { type: requester.type, id: requester.id } }\n : {}),\n ...(cost?.status === \"rated\"\n ? { valuation: { status: \"rated\" as const, money: structuredClone(cost.money) } }\n : cost\n ? { valuation: { status: \"unavailable\" as const } }\n : {}),\n }\n }\n}\n\nfunction policyKey(projectId: string, id: string): string {\n return JSON.stringify([projectId, id])\n}\n\nfunction periodStateKey(\n projectId: string,\n subject: AiLimitSubject,\n amount: Pick<NormalizedAiLimitAmount, \"meter\" | \"currency\">,\n period: AiLimitPeriod\n): string {\n return JSON.stringify([\n projectId,\n aiLimitSubjectKey(subject),\n amount.meter,\n amount.currency,\n period.start.toISOString(),\n ])\n}\n\nfunction validatePolicyIdentity(input: GetAiLimitPolicyInput): void {\n assertNonBlank(input.projectId, \"projectId\")\n assertNonBlank(input.id, \"policy id\")\n}\n\nfunction missingPolicy(projectId: string, id: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_policy\",\n `[Sixb] AI limit policy '${id}' does not exist in project '${projectId}'.`\n )\n}\n\nfunction missingReservation(identity: {\n readonly projectId: string\n readonly executionId: string\n readonly attempt: number\n readonly callId: string\n}): AiLimitStorageError {\n return new AiLimitStorageError(\n \"missing_reservation\",\n `[Sixb] AI model-call reservation '${identity.callId}' does not exist for execution '${identity.executionId}' attempt ${identity.attempt}.`\n )\n}\n\nfunction invalidState(reservation: AiModelCallReservation, operation: string): AiLimitStorageError {\n return new AiLimitStorageError(\n \"invalid_reservation_state\",\n `[Sixb] Cannot ${operation} AI model-call reservation '${reservation.callId}' in state '${reservation.state}'.`\n )\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n",
11
- "import { timingSafeEqual } from \"node:crypto\"\nimport { createSixbError, parseSixbFailure, toSixbFailure } from \"../../errors/internal\"\nimport { ConnectorConnectionStorageError } from \"./errors\"\nimport type {\n AttachConnectorConnectionRunAuthorizationInput,\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorConnectionRunCallbackResult,\n ClaimConnectorCredentialMutationInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationAttemptRecord,\n ConnectorAuthorizationKey,\n ConnectorAuthorizationRecord,\n ConnectorConnectionKey,\n ConnectorConnectionRecord,\n ConnectorConnectionRunAwaitingProviderRecord,\n ConnectorConnectionRunAwaitingSelectionRecord,\n ConnectorConnectionRunProcessingRecord,\n ConnectorConnectionRunRecord,\n ConnectorConnectionRunSucceededRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationFence,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorAuthorizationInput,\n CreateConnectorConnectionRunInput,\n CreateConnectorConnectionSelectionRunInput,\n FinalizeConnectorReauthorizationInput,\n FinishConnectorConnectionRunInput,\n GetConnectorConnectionInput,\n GetConnectorConnectionRunInput,\n InitializeConnectorAuthorizationAccountsInput,\n ListConnectorConnectionsInput,\n MarkConnectorAuthorizationNeedsReauthorizationInput,\n MarkConnectorCredentialMutationExecutingInput,\n PutConnectorConnectionFromRunInput,\n PutConnectorConnectionFromRunResult,\n PutConnectorConnectionInput,\n PutConnectorConnectionResult,\n RecoverExpiredConnectorCredentialMutationInput,\n ReleaseConnectorCredentialMutationInput,\n RenewConnectorCredentialMutationInput,\n StageConnectorCredentialMutationCredentialsInput,\n StageConnectorCredentialMutationRevocationInput,\n WaitForConnectorConnectionRunSelectionInput,\n} from \"./types\"\nimport { CONNECTOR_CONNECTION_RUN_FAILURE_CODES } from \"./types\"\n\nexport interface InMemoryConnectorConnectionStorageSnapshot {\n readonly attempts: Map<string, ConnectorAuthorizationAttemptRecord>\n readonly connectionRuns: Map<string, ConnectorConnectionRunRecord>\n readonly authorizations: Map<string, ConnectorAuthorizationRecord>\n readonly connections: Map<string, ConnectorConnectionRecord>\n}\n\nfunction connectionRunBase(record: ConnectorConnectionRunRecord, updatedAt: Date) {\n return {\n id: record.id,\n projectId: record.projectId,\n connectorId: record.connectorId,\n kind: record.kind,\n owner: structuredClone(record.owner),\n slot: record.slot,\n initiatedByExecutionId: record.initiatedByExecutionId,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(updatedAt),\n }\n}\n\nfunction expireConnectionRun(\n record: Extract<ConnectorConnectionRunRecord, { readonly status: \"waiting\" }>,\n now: Date\n) {\n return {\n ...connectionRunBase(record, now),\n status: \"expired\" as const,\n ...(record.waitingFor === \"account_selection\"\n ? { authorizationId: record.authorizationId }\n : {}),\n finishedAt: new Date(now),\n }\n}\n\nfunction failExpiredProcessingRun(record: ConnectorConnectionRunProcessingRecord, now: Date) {\n return {\n ...connectionRunBase(record, now),\n status: \"failed\" as const,\n ...(record.authorizationId === undefined ? {} : { authorizationId: record.authorizationId }),\n error: toSixbFailure(\n createSixbError(\n \"internal.unexpected\",\n \"[Sixb] Connector callback processing did not complete before its deadline.\"\n ),\n { allowedCodes: CONNECTOR_CONNECTION_RUN_FAILURE_CODES, at: now }\n ),\n finishedAt: new Date(now),\n }\n}\n\nexport interface InMemoryConnectorConnectionStorageOptions {\n /** Storage-authoritative clock. Durable implementations should use their database clock. */\n readonly now?: () => Date\n}\n\nexport class InMemoryConnectorConnectionStorage implements ConnectorConnectionStorage {\n readonly durability = \"ephemeral\" as const\n private readonly attempts = new Map<string, ConnectorAuthorizationAttemptRecord>()\n private readonly connectionRuns = new Map<string, ConnectorConnectionRunRecord>()\n private readonly authorizations = new Map<string, ConnectorAuthorizationRecord>()\n private readonly connections = new Map<string, ConnectorConnectionRecord>()\n\n constructor(private readonly options: InMemoryConnectorConnectionStorageOptions = {}) {}\n\n async createAuthorizationAttempt(\n input: CreateConnectorAuthorizationAttemptInput\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n assertPositiveDuration(input.ttlMs, \"authorization attempt TTL\")\n if (this.attempts.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt already exists.\"\n )\n }\n if (input.connectionRunId !== undefined) {\n const run = this.connectionRuns.get(input.connectionRunId)\n const existingAttempt = this.findAuthorizationAttemptByConnectionRunId(input.connectionRunId)\n if (\n !run ||\n existingAttempt ||\n run.projectId !== input.projectId ||\n run.connectorId !== input.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== input.slot ||\n run.initiatedByExecutionId !== input.initiatedByExecutionId\n ) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt does not match its connection run.\"\n )\n }\n }\n const now = this.now()\n const record: ConnectorAuthorizationAttemptRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n stateHash: input.stateHash,\n codeVerifier: structuredClone(input.codeVerifier),\n redirectUri: input.redirectUri,\n ...(input.connectionRunId === undefined ? {} : { connectionRunId: input.connectionRunId }),\n ...(input.returnTo === undefined ? {} : { returnTo: input.returnTo }),\n ...(input.callbackBindingHash === undefined\n ? {}\n : { callbackBindingHash: input.callbackBindingHash }),\n ...(input.reauthorizationId === undefined\n ? {}\n : { reauthorizationId: input.reauthorizationId }),\n ...(input.reauthorizationRevision === undefined\n ? {}\n : { reauthorizationRevision: input.reauthorizationRevision }),\n ...(input.reauthorizationConnectionIds === undefined\n ? {}\n : { reauthorizationConnectionIds: [...input.reauthorizationConnectionIds] }),\n createdAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.attempts.set(record.id, record)\n return structuredClone(record)\n }\n\n async consumeAuthorizationAttempt(\n input: Parameters<ConnectorConnectionStorage[\"consumeAuthorizationAttempt\"]>[0]\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n const record = this.attempts.get(input.id)\n if (record && record.expiresAt.getTime() <= this.now().getTime()) {\n this.attempts.delete(record.id)\n throw invalidAttempt()\n }\n if (\n !record ||\n record.projectId !== input.projectId ||\n record.connectorId !== input.connectorId ||\n record.redirectUri !== input.redirectUri ||\n !safeEqual(record.stateHash, input.stateHash)\n ) {\n throw invalidAttempt()\n }\n\n this.attempts.delete(input.id)\n return structuredClone(record)\n }\n\n async createConnectionRun(\n input: CreateConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingProviderRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: input.kind,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"provider_authorization\",\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async createConnectionSelectionRun(\n input: CreateConnectorConnectionSelectionRunInput\n ): Promise<ConnectorConnectionRunAwaitingSelectionRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"active\" ||\n authorization.credentialMutation\n ) {\n throw authorizationConflict()\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingSelectionRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: \"connect\",\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"account_selection\",\n authorizationId: input.authorizationId,\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async claimConnectionRunCallback(\n input: ClaimConnectorConnectionRunCallbackInput\n ): Promise<ClaimConnectorConnectionRunCallbackResult | null> {\n assertPositiveDuration(input.processingTtlMs, \"connection run processing TTL\")\n const attempt = this.attempts.get(input.attemptId)\n if (\n !attempt ||\n attempt.projectId !== input.projectId ||\n attempt.connectionRunId === undefined ||\n attempt.returnTo === undefined ||\n attempt.callbackBindingHash === undefined ||\n attempt.redirectUri !== input.redirectUri ||\n !safeEqual(attempt.stateHash, input.stateHash) ||\n !safeEqual(attempt.callbackBindingHash, input.callbackBindingHash)\n ) {\n return null\n }\n\n const run = this.connectionRuns.get(attempt.connectionRunId)\n if (\n !run ||\n run.projectId !== input.projectId ||\n run.connectorId !== attempt.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== attempt.slot ||\n run.initiatedByExecutionId !== attempt.initiatedByExecutionId\n ) {\n return null\n }\n\n const now = this.now()\n this.attempts.delete(attempt.id)\n if (attempt.expiresAt.getTime() <= now.getTime() || run.expiresAt.getTime() <= now.getTime()) {\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return { type: \"expired\", run: structuredClone(expired), returnTo: attempt.returnTo }\n }\n\n const processing: ConnectorConnectionRunProcessingRecord = {\n ...connectionRunBase(run, now),\n status: \"running\" as const,\n processingId: input.processingId,\n callbackStartedAt: now,\n expiresAt: new Date(now.getTime() + input.processingTtlMs),\n ...(attempt.reauthorizationId === undefined\n ? {}\n : { authorizationId: attempt.reauthorizationId }),\n }\n this.connectionRuns.set(run.id, processing)\n return {\n type: \"claimed\",\n run: structuredClone(processing),\n attempt: structuredClone(attempt),\n returnTo: attempt.returnTo,\n }\n }\n\n async attachConnectionRunAuthorization(\n input: AttachConnectorConnectionRunAuthorizationInput\n ): Promise<ConnectorConnectionRunProcessingRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.processingId !== input.processingId ||\n (run.authorizationId !== undefined && run.authorizationId !== input.authorizationId) ||\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"pending_selection\"\n ) {\n return null\n }\n const updated: ConnectorConnectionRunProcessingRecord = {\n ...run,\n authorizationId: input.authorizationId,\n updatedAt: this.now(),\n }\n this.connectionRuns.set(run.id, updated)\n return structuredClone(updated)\n }\n\n async waitForConnectionRunSelection(input: WaitForConnectorConnectionRunSelectionInput) {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.kind !== \"connect\" ||\n run.processingId !== input.processingId ||\n run.authorizationId !== input.authorizationId\n ) {\n return null\n }\n const now = this.now()\n const waiting = {\n ...connectionRunBase(run, now),\n status: \"waiting\" as const,\n waitingFor: \"account_selection\" as const,\n authorizationId: input.authorizationId,\n expiresAt: new Date(input.expiresAt),\n }\n this.connectionRuns.set(run.id, waiting)\n return structuredClone(waiting)\n }\n\n async finishConnectionRun(\n input: FinishConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n if (!sameConnectionRunScope(run, input) || run.status !== \"running\") return null\n if (input.processingId !== run.processingId) return null\n const now = this.now()\n const authorizationId =\n input.status === \"succeeded\"\n ? input.authorizationId\n : input.status === \"failed\"\n ? (input.authorizationId ?? run.authorizationId)\n : run.authorizationId\n if (input.status !== \"succeeded\" && run.kind === \"connect\" && authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, authorizationId, now)\n }\n const base = connectionRunBase(run, now)\n const finished: ConnectorConnectionRunRecord =\n input.status === \"succeeded\"\n ? {\n ...base,\n status: \"succeeded\",\n authorizationId: input.authorizationId,\n ...(input.cleanupAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: input.cleanupAuthorizationId }),\n connections: structuredClone(input.connections),\n finishedAt: now,\n }\n : input.status === \"failed\"\n ? {\n ...base,\n status: \"failed\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n error: parseSixbFailure(input.error, CONNECTOR_CONNECTION_RUN_FAILURE_CODES),\n finishedAt: now,\n }\n : {\n ...base,\n status: \"cancelled\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, finished)\n return structuredClone(finished)\n }\n\n async getConnectionRun(\n input: GetConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n return sameConnectionRunScope(run, input) ? structuredClone(run) : null\n }\n\n async createAuthorization(\n input: CreateConnectorAuthorizationInput\n ): Promise<ConnectorAuthorizationRecord> {\n assertPositiveDuration(input.selectionTtlMs, \"account selection TTL\")\n if (this.authorizations.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorAuthorizationRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n authorizedBy: structuredClone(input.authorizedBy),\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n accounts: structuredClone(input.accounts),\n status: \"pending_selection\",\n selectionExpiresAt: new Date(now.getTime() + input.selectionTtlMs),\n revision: 0,\n createdAt: now,\n updatedAt: now,\n }\n this.authorizations.set(record.id, record)\n return structuredClone(record)\n }\n\n async initializeAuthorizationAccounts(\n input: InitializeConnectorAuthorizationAccountsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n record.status !== \"pending_selection\" ||\n record.credentialMutation\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n accounts: structuredClone(input.accounts),\n revision: record.revision + 1,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async getAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const authorization = this.authorizations.get(input.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async getAuthorizationByConnectionId(\n input: ConnectorConnectionKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const connection = this.connections.get(input.connectionId)\n if (!sameConnectionScope(connection, input)) return null\n const authorization = this.authorizations.get(connection.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async claimCredentialMutation(\n input: ClaimConnectorCredentialMutationInput\n ): Promise<ClaimConnectorCredentialMutationResult | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n assertPositiveDuration(input.operationTimeoutMs, \"credential mutation timeout\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n !canClaimMutation(record.status, input.mutation.kind)\n ) {\n return null\n }\n\n if (record.credentialMutation) {\n const canReplacePrepared =\n record.credentialMutation.phase === \"prepared\" &&\n record.credentialMutation.expiresAt.getTime() <= now.getTime()\n if (!canReplacePrepared) return null\n }\n\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n input.mutation.kind === \"reauthorization\" &&\n !sameIds(\n attached.map((connection) => connection.id),\n input.expectedConnectionIds ?? []\n )\n ) {\n return null\n }\n\n const deadlineAt = new Date(now.getTime() + input.operationTimeoutMs)\n const mutation = {\n ...structuredClone(input.mutation),\n phase: \"prepared\" as const,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, deadlineAt),\n deadlineAt,\n ...(input.mutation.kind === \"reauthorization\"\n ? { expectedConnectionIds: [...(input.expectedConnectionIds ?? [])] }\n : {}),\n }\n const startsRevocation =\n input.mutation.kind === \"revocation\" && record.status !== \"revocation_pending\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: input.mutation.kind === \"revocation\" ? \"revocation_pending\" : record.status,\n selectionExpiresAt:\n input.mutation.kind === \"revocation\" ? undefined : record.selectionExpiresAt,\n revision: startsRevocation ? record.revision + 1 : record.revision,\n credentialMutation: mutation,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n\n const disconnected: ConnectorConnectionRecord[] = []\n if (input.mutation.kind === \"revocation\") {\n for (const connection of attached) {\n const updatedConnection = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, updatedConnection)\n disconnected.push(structuredClone(updatedConnection))\n }\n }\n return { authorization: structuredClone(updated), disconnected }\n }\n\n async markCredentialMutationExecuting(\n input: MarkConnectorCredentialMutationExecutingInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"prepared\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"executing\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async renewCredentialMutation(\n input: RenewConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, record.credentialMutation.deadlineAt),\n },\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationCredentials(\n input: StageConnectorCredentialMutationCredentialsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n mutationExpired(record, now) ||\n record.credentialMutation.kind === \"revocation\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n phase: \"result_staged\",\n stagedCredentials: {\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n },\n },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationRevocation(\n input: StageConnectorCredentialMutationRevocationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n record.credentialMutation.kind !== \"revocation\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"result_staged\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async releaseCredentialMutation(\n input: ReleaseConnectorCredentialMutationInput\n ): Promise<boolean> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\"\n ) {\n return false\n }\n this.authorizations.set(record.id, {\n ...record,\n credentialMutation: undefined,\n updatedAt: this.now(),\n })\n return true\n }\n\n async recoverExpiredCredentialMutation(\n input: RecoverExpiredConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(record, input) || !record.credentialMutation) return null\n if (record.credentialMutation.phase === \"result_staged\") return structuredClone(record)\n\n const now = this.now()\n if (!mutationExpired(record, now)) return null\n const ambiguous = record.credentialMutation.phase === \"executing\"\n const failClosed = ambiguous && record.credentialMutation.kind !== \"revocation\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: failClosed ? \"needs_reauthorization\" : record.status,\n selectionExpiresAt: failClosed ? undefined : record.selectionExpiresAt,\n revision: failClosed ? record.revision + 1 : record.revision,\n credentialMutation: undefined,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async markNeedsReauthorization(\n input: MarkConnectorAuthorizationNeedsReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!matchesMutation(record, input)) return null\n const staged = record.credentialMutation.stagedCredentials\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n ...(staged\n ? {\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined\n ? undefined\n : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n }\n : {}),\n status: \"needs_reauthorization\",\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeRefresh(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"refresh\")\n if (!record || !staged) return null\n const updated = applyStagedCredentials(record, staged, this.now(), {\n status: \"active\",\n accounts: record.accounts,\n })\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeReauthorization(\n input: FinalizeConnectorReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"reauthorization\")\n if (!record || !staged || !record.credentialMutation) return null\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n !sameIds(\n attached.map((connection) => connection.id),\n record.credentialMutation.expectedConnectionIds ?? []\n )\n ) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections attached to the connector authorization changed during reauthorization.\"\n )\n }\n const accountsById = new Map(input.accounts.map((account) => [account.id, account]))\n if (attached.some((connection) => !accountsById.has(connection.account.id))) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Reauthorized connector grant no longer exposes every attached account.\"\n )\n }\n\n const now = this.now()\n const updated = applyStagedCredentials(record, staged, now, {\n status: \"active\",\n accounts: input.accounts,\n })\n this.authorizations.set(record.id, updated)\n for (const connection of attached) {\n this.connections.set(connection.id, {\n ...connection,\n account: structuredClone(accountsById.get(connection.account.id)!),\n updatedAt: now,\n })\n }\n return structuredClone(updated)\n }\n\n async finalizeRevocation(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== \"revocation\" ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: \"revoked\",\n credentials: undefined,\n credentialExpiresAt: undefined,\n scopes: [],\n accounts: [],\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async putConnection(input: PutConnectorConnectionInput): Promise<PutConnectorConnectionResult> {\n return this.putConnectionNow(input, this.now())\n }\n\n async putConnectionFromRun(\n input: PutConnectorConnectionFromRunInput\n ): Promise<PutConnectorConnectionFromRunResult> {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"account_selection\"\n ) {\n throw invalidRun()\n }\n const now = this.now()\n const result = this.putConnectionNow(\n {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: run.owner,\n slot: run.slot,\n authorizationId: run.authorizationId,\n account: input.account,\n replace: input.replace,\n },\n now\n )\n const succeeded: ConnectorConnectionRunSucceededRecord = {\n ...connectionRunBase(run, now),\n status: \"succeeded\",\n authorizationId: run.authorizationId,\n ...(result.revocationPendingAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: result.revocationPendingAuthorizationId }),\n connections: [structuredClone(result.connection)],\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, succeeded)\n return { ...result, run: structuredClone(succeeded) }\n }\n\n private putConnectionNow(\n input: PutConnectorConnectionInput,\n now: Date\n ): PutConnectorConnectionResult {\n let authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n !isSelectable(authorization.status) ||\n authorization.credentialMutation?.kind === \"reauthorization\"\n ) {\n throw authorizationConflict()\n }\n if (\n authorization.status === \"pending_selection\" &&\n authorization.selectionExpiresAt!.getTime() <= now.getTime()\n ) {\n authorization = {\n ...authorization,\n status: \"revocation_pending\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: now,\n }\n this.authorizations.set(authorization.id, authorization)\n throw authorizationConflict()\n }\n const account = authorization.accounts.find((candidate) => candidate.id === input.account.id)\n if (!account) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection account is not exposed by its authorization.\"\n )\n }\n const existing = this.findConnectionRecord(input)\n const sameAccount = existing?.account.id === account.id\n if (existing && !sameAccount && !input.replace) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n `[Sixb] Connector slot '${input.slot}' is already connected to another account; explicit replacement is required.`\n )\n }\n if (!existing && this.connections.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n \"[Sixb] Connector connection id already exists.\"\n )\n }\n\n let revocationPendingAuthorizationId: string | undefined\n if (existing?.status === \"connected\" && existing.authorizationId !== authorization.id) {\n const previous = this.authorizations.get(existing.authorizationId)\n if (!previous) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Existing connector connection references an unavailable authorization.\"\n )\n }\n const remaining = this.connectedConnectionsForAuthorization(previous.id).filter(\n (connection) => connection.id !== existing.id\n )\n this.assertConnectionCanMove(existing, previous, remaining.length === 0)\n if (remaining.length === 0) {\n const pending = markAuthorizationRevocationPending(previous, now)\n this.authorizations.set(previous.id, pending)\n revocationPendingAuthorizationId = previous.id\n }\n } else if (existing?.status === \"connected\") {\n const previous = this.authorizations.get(existing.authorizationId)\n if (previous) this.assertConnectionCanMove(existing, previous, false)\n }\n\n const updatedAuthorization: ConnectorAuthorizationRecord =\n authorization.status === \"pending_selection\"\n ? {\n ...authorization,\n status: \"active\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: now,\n }\n : authorization\n const connection: ConnectorConnectionRecord = existing\n ? {\n ...existing,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n disconnectedAt: undefined,\n updatedAt: now,\n }\n : {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n createdAt: now,\n updatedAt: now,\n }\n\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(updatedAuthorization.id, updatedAuthorization)\n }\n this.connections.set(connection.id, connection)\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(updatedAuthorization),\n ...(revocationPendingAuthorizationId === undefined\n ? {}\n : { revocationPendingAuthorizationId }),\n created: existing === undefined,\n replaced: existing !== undefined && !sameAccount,\n }\n }\n\n async getConnection(\n input: GetConnectorConnectionInput\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.findConnectionRecord(input)\n return connection?.status === \"connected\" ? structuredClone(connection) : null\n }\n\n async getConnectionById(\n input: ConnectorConnectionKey\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.connections.get(input.connectionId)\n return sameConnectionScope(connection, input) ? structuredClone(connection) : null\n }\n\n async listConnections(\n input: ListConnectorConnectionsInput\n ): Promise<readonly ConnectorConnectionRecord[]> {\n return [...this.connections.values()]\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async listConnectionsByAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<readonly ConnectorConnectionRecord[]> {\n const authorization = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) return []\n return this.connectedConnectionsForAuthorization(input.authorizationId)\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async disconnectConnection(input: ConnectorConnectionKey): Promise<{\n readonly connection: ConnectorConnectionRecord\n readonly authorization: ConnectorAuthorizationRecord\n readonly revocationPendingAuthorizationId?: string\n } | null> {\n const connection = this.connections.get(input.connectionId)\n if (\n !connection ||\n connection.projectId !== input.projectId ||\n connection.connectorId !== input.connectorId\n ) {\n return null\n }\n const authorization = this.authorizations.get(connection.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection references an unavailable authorization.\"\n )\n }\n if (connection.status === \"disconnected\") {\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(authorization),\n ...(authorization.status === \"revocation_pending\"\n ? { revocationPendingAuthorizationId: authorization.id }\n : {}),\n }\n }\n\n const now = this.now()\n const remaining = this.connectedConnectionsForAuthorization(authorization.id).filter(\n (candidate) => candidate.id !== connection.id\n )\n this.assertConnectionCanMove(connection, authorization, remaining.length === 0)\n const disconnected = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, disconnected)\n const updatedAuthorization =\n remaining.length === 0\n ? markAuthorizationRevocationPending(authorization, now)\n : authorization\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(authorization.id, updatedAuthorization)\n }\n return {\n connection: structuredClone(disconnected),\n authorization: structuredClone(updatedAuthorization),\n ...(updatedAuthorization.status === \"revocation_pending\" && remaining.length === 0\n ? { revocationPendingAuthorizationId: updatedAuthorization.id }\n : {}),\n }\n }\n\n snapshot(): InMemoryConnectorConnectionStorageSnapshot {\n return {\n attempts: structuredClone(this.attempts),\n connectionRuns: structuredClone(this.connectionRuns),\n authorizations: structuredClone(this.authorizations),\n connections: structuredClone(this.connections),\n }\n }\n\n restore(snapshot: InMemoryConnectorConnectionStorageSnapshot): void {\n replaceMap(this.attempts, snapshot.attempts)\n replaceMap(this.connectionRuns, snapshot.connectionRuns)\n replaceMap(this.authorizations, snapshot.authorizations)\n replaceMap(this.connections, snapshot.connections)\n }\n\n private now(): Date {\n return new Date(this.options.now?.() ?? new Date())\n }\n\n private currentConnectionRun(runId: string): ConnectorConnectionRunRecord | undefined {\n const run = this.connectionRuns.get(runId)\n if (!run || (run.status !== \"waiting\" && run.status !== \"running\")) return run\n\n const now = this.now()\n if (run.expiresAt.getTime() > now.getTime()) return run\n\n if (run.status === \"waiting\" && run.waitingFor === \"provider_authorization\") {\n const attempt = this.findAuthorizationAttemptByConnectionRunId(run.id)\n if (attempt) this.attempts.delete(attempt.id)\n }\n if (run.status === \"waiting\") {\n if (run.kind === \"connect\" && run.waitingFor === \"account_selection\") {\n this.markPendingAuthorizationForCleanup(run.connectorId, run.authorizationId, now)\n }\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return expired\n }\n\n if (run.kind === \"connect\" && run.authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, run.authorizationId, now)\n }\n const failed = failExpiredProcessingRun(run, now)\n this.connectionRuns.set(run.id, failed)\n return failed\n }\n\n private findConnectionRecord(\n input: GetConnectorConnectionInput\n ): ConnectorConnectionRecord | undefined {\n for (const connection of this.connections.values()) {\n if (\n connection.projectId === input.projectId &&\n connection.connectorId === input.connectorId &&\n connection.owner.type === input.owner.type &&\n connection.slot === input.slot\n ) {\n return connection\n }\n }\n return undefined\n }\n\n private findAuthorizationAttemptByConnectionRunId(\n connectionRunId: string\n ): ConnectorAuthorizationAttemptRecord | undefined {\n for (const attempt of this.attempts.values()) {\n if (attempt.connectionRunId === connectionRunId) return attempt\n }\n return undefined\n }\n\n private connectionRecordsForAuthorization(authorizationId: string): ConnectorConnectionRecord[] {\n return [...this.connections.values()].filter(\n (connection) => connection.authorizationId === authorizationId\n )\n }\n\n private connectedConnectionsForAuthorization(\n authorizationId: string\n ): ConnectorConnectionRecord[] {\n return this.connectionRecordsForAuthorization(authorizationId).filter(\n (connection) => connection.status === \"connected\"\n )\n }\n\n private assertConnectionCanMove(\n _connection: ConnectorConnectionRecord,\n authorization: ConnectorAuthorizationRecord,\n removingLastConnection = true\n ): void {\n const mutation = authorization.credentialMutation\n if (mutation?.kind === \"reauthorization\") {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections cannot change while their connector authorization is being reauthorized.\"\n )\n }\n if (removingLastConnection && mutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] The last connector connection cannot be removed while credentials are being mutated.\"\n )\n }\n }\n\n private markPendingAuthorizationForCleanup(\n connectorId: string,\n authorizationId: string,\n now: Date\n ): void {\n const authorization = this.authorizations.get(authorizationId)\n if (\n !authorization ||\n authorization.connectorId !== connectorId ||\n authorization.status !== \"pending_selection\"\n ) {\n return\n }\n this.authorizations.set(\n authorization.id,\n markAuthorizationRevocationPending(authorization, now)\n )\n }\n}\n\nfunction disconnectConnectionRecord(\n connection: ConnectorConnectionRecord,\n now: Date\n): ConnectorConnectionRecord {\n return {\n ...connection,\n status: \"disconnected\",\n disconnectedAt: new Date(now),\n updatedAt: new Date(now),\n }\n}\n\nfunction markAuthorizationRevocationPending(\n authorization: ConnectorAuthorizationRecord,\n now: Date\n): ConnectorAuthorizationRecord {\n if (authorization.status === \"revocation_pending\" || authorization.status === \"revoked\") {\n return authorization\n }\n if (authorization.credentialMutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization cannot begin revocation while credentials are being mutated.\"\n )\n }\n return {\n ...authorization,\n status: \"revocation_pending\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: new Date(now),\n }\n}\n\nfunction safeEqual(left: string, right: string): boolean {\n const leftBytes = Buffer.from(left)\n const rightBytes = Buffer.from(right)\n return leftBytes.length === rightBytes.length && timingSafeEqual(leftBytes, rightBytes)\n}\n\nfunction invalidRun(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"run_invalid\",\n \"[Sixb] Connector connection run is invalid, expired, or already used.\"\n )\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n\nfunction sameIds(left: readonly string[], right: readonly string[]): boolean {\n const leftSorted = [...left].sort()\n const rightSorted = [...right].sort()\n return (\n leftSorted.length === rightSorted.length &&\n leftSorted.every((value, index) => value === rightSorted[index])\n )\n}\n\nfunction invalidAttempt(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"attempt_invalid\",\n \"[Sixb] Connector authorization attempt is invalid, expired, or already used.\"\n )\n}\n\nfunction authorizationConflict(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection requires a selectable authorization from the same project and connector.\"\n )\n}\n\nfunction assertPositiveDuration(value: number, name: string): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new ConnectorConnectionStorageError(\n \"invalid_input\",\n `[Sixb] Connector ${name} must be positive.`\n )\n }\n}\n\nfunction sameAuthorizationScope(\n record: ConnectorAuthorizationRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorAuthorizationRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionScope(\n record: ConnectorConnectionRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionRunScope(\n record: ConnectorConnectionRunRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRunRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction canClaimMutation(\n status: ConnectorAuthorizationRecord[\"status\"],\n kind: ClaimConnectorCredentialMutationInput[\"mutation\"][\"kind\"]\n): boolean {\n if (kind === \"refresh\") return status === \"active\"\n if (kind === \"reauthorization\") {\n return status === \"active\" || status === \"needs_reauthorization\"\n }\n return status !== \"revoked\"\n}\n\nfunction isSelectable(status: ConnectorAuthorizationRecord[\"status\"]): boolean {\n return status === \"pending_selection\" || status === \"active\"\n}\n\nfunction leaseExpiry(now: Date, durationMs: number, deadlineAt: Date): Date {\n return new Date(Math.min(now.getTime() + durationMs, deadlineAt.getTime()))\n}\n\nfunction mutationExpired(record: ConnectorAuthorizationRecord, now: Date): boolean {\n return (\n record.credentialMutation!.expiresAt.getTime() <= now.getTime() ||\n record.credentialMutation!.deadlineAt.getTime() <= now.getTime()\n )\n}\n\nfunction matchesMutation(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n holderId?: string\n): record is ConnectorAuthorizationRecord & {\n readonly credentialMutation: NonNullable<ConnectorAuthorizationRecord[\"credentialMutation\"]>\n} {\n return (\n sameAuthorizationScope(record, input) &&\n record.revision === input.expectedRevision &&\n record.credentialMutation?.id === input.mutationId &&\n (holderId === undefined || record.credentialMutation.holderId === holderId)\n )\n}\n\nfunction stagedCredentials(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n kind: \"refresh\" | \"reauthorization\"\n) {\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== kind ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n return record.credentialMutation.stagedCredentials ?? null\n}\n\nfunction applyStagedCredentials(\n record: ConnectorAuthorizationRecord,\n staged: NonNullable<ReturnType<typeof stagedCredentials>>,\n now: Date,\n input: {\n readonly status: \"active\"\n readonly accounts: readonly ConnectorAuthorizationRecord[\"accounts\"][number][]\n }\n): ConnectorAuthorizationRecord {\n return {\n ...record,\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined ? undefined : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n accounts: structuredClone(input.accounts),\n status: input.status,\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: now,\n }\n}\n",
11
+ "import { timingSafeEqual } from \"node:crypto\"\nimport { createSixbError, parseSixbFailure, toSixbFailure } from \"../../errors/internal\"\nimport { ConnectorConnectionStorageError } from \"./errors\"\nimport type {\n AttachConnectorConnectionRunAuthorizationInput,\n ClaimConnectorConnectionRunCallbackInput,\n ClaimConnectorConnectionRunCallbackResult,\n ClaimConnectorCredentialMutationInput,\n ClaimConnectorCredentialMutationResult,\n ConnectorAuthorizationAttemptRecord,\n ConnectorAuthorizationKey,\n ConnectorAuthorizationRecord,\n ConnectorConnectionKey,\n ConnectorConnectionRecord,\n ConnectorConnectionRunAwaitingProviderRecord,\n ConnectorConnectionRunAwaitingSelectionRecord,\n ConnectorConnectionRunProcessingRecord,\n ConnectorConnectionRunRecord,\n ConnectorConnectionRunSucceededRecord,\n ConnectorConnectionStorage,\n ConnectorCredentialMutationFence,\n CreateConnectorAuthorizationAttemptInput,\n CreateConnectorAuthorizationInput,\n CreateConnectorConnectionRunInput,\n CreateConnectorConnectionSelectionRunInput,\n FinalizeConnectorReauthorizationInput,\n FinishConnectorConnectionRunInput,\n GetConnectorConnectionInput,\n GetConnectorConnectionRunInput,\n InitializeConnectorAuthorizationAccountsInput,\n ListConnectorConnectionsInput,\n MarkConnectorAuthorizationNeedsReauthorizationInput,\n MarkConnectorCredentialMutationExecutingInput,\n PutConnectorConnectionFromRunInput,\n PutConnectorConnectionFromRunResult,\n PutConnectorConnectionInput,\n PutConnectorConnectionResult,\n RecoverExpiredConnectorCredentialMutationInput,\n ReleaseConnectorCredentialMutationInput,\n RenewConnectorCredentialMutationInput,\n StageConnectorCredentialMutationCredentialsInput,\n StageConnectorCredentialMutationRevocationInput,\n WaitForConnectorConnectionRunSelectionInput,\n} from \"./types\"\nimport { CONNECTOR_CONNECTION_RUN_FAILURE_CODES } from \"./types\"\n\nexport interface InMemoryConnectorConnectionStorageSnapshot {\n readonly attempts: Map<string, ConnectorAuthorizationAttemptRecord>\n readonly connectionRuns: Map<string, ConnectorConnectionRunRecord>\n readonly authorizations: Map<string, ConnectorAuthorizationRecord>\n readonly connections: Map<string, ConnectorConnectionRecord>\n}\n\nfunction connectionRunBase(record: ConnectorConnectionRunRecord, updatedAt: Date) {\n return {\n id: record.id,\n projectId: record.projectId,\n connectorId: record.connectorId,\n kind: record.kind,\n owner: structuredClone(record.owner),\n slot: record.slot,\n initiatedByExecutionId: record.initiatedByExecutionId,\n createdAt: new Date(record.createdAt),\n updatedAt: new Date(updatedAt),\n }\n}\n\nfunction expireConnectionRun(\n record: Extract<ConnectorConnectionRunRecord, { readonly status: \"waiting\" }>,\n now: Date\n) {\n return {\n ...connectionRunBase(record, now),\n status: \"expired\" as const,\n ...(record.waitingFor === \"account_selection\"\n ? { authorizationId: record.authorizationId }\n : {}),\n finishedAt: new Date(now),\n }\n}\n\nfunction failExpiredProcessingRun(record: ConnectorConnectionRunProcessingRecord, now: Date) {\n return {\n ...connectionRunBase(record, now),\n status: \"failed\" as const,\n ...(record.authorizationId === undefined ? {} : { authorizationId: record.authorizationId }),\n error: toSixbFailure(\n createSixbError(\n \"internal.unexpected\",\n \"[Sixb] Connector callback processing did not complete before its deadline.\"\n ),\n { allowedCodes: CONNECTOR_CONNECTION_RUN_FAILURE_CODES, at: now }\n ),\n finishedAt: new Date(now),\n }\n}\n\nexport interface InMemoryConnectorConnectionStorageOptions {\n /** Storage-authoritative clock. Durable implementations should use their database clock. */\n readonly now?: () => Date\n}\n\nexport class InMemoryConnectorConnectionStorage implements ConnectorConnectionStorage {\n readonly durability = \"ephemeral\" as const\n private readonly attempts = new Map<string, ConnectorAuthorizationAttemptRecord>()\n private readonly connectionRuns = new Map<string, ConnectorConnectionRunRecord>()\n private readonly authorizations = new Map<string, ConnectorAuthorizationRecord>()\n private readonly connections = new Map<string, ConnectorConnectionRecord>()\n\n constructor(private readonly options: InMemoryConnectorConnectionStorageOptions = {}) {}\n\n async createAuthorizationAttempt(\n input: CreateConnectorAuthorizationAttemptInput\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n assertPositiveDuration(input.ttlMs, \"authorization attempt TTL\")\n if (this.attempts.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt already exists.\"\n )\n }\n if (input.connectionRunId !== undefined) {\n const run = this.connectionRuns.get(input.connectionRunId)\n const existingAttempt = this.findAuthorizationAttemptByConnectionRunId(input.connectionRunId)\n if (\n !run ||\n existingAttempt ||\n run.projectId !== input.projectId ||\n run.connectorId !== input.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== input.slot ||\n run.initiatedByExecutionId !== input.initiatedByExecutionId\n ) {\n throw new ConnectorConnectionStorageError(\n \"attempt_conflict\",\n \"[Sixb] Connector authorization attempt does not match its connection run.\"\n )\n }\n }\n const now = this.now()\n const record: ConnectorAuthorizationAttemptRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n stateHash: input.stateHash,\n ...(input.codeVerifier === undefined\n ? {}\n : { codeVerifier: structuredClone(input.codeVerifier) }),\n redirectUri: input.redirectUri,\n ...(input.connectionRunId === undefined ? {} : { connectionRunId: input.connectionRunId }),\n ...(input.returnTo === undefined ? {} : { returnTo: input.returnTo }),\n ...(input.callbackBindingHash === undefined\n ? {}\n : { callbackBindingHash: input.callbackBindingHash }),\n ...(input.reauthorizationId === undefined\n ? {}\n : { reauthorizationId: input.reauthorizationId }),\n ...(input.reauthorizationRevision === undefined\n ? {}\n : { reauthorizationRevision: input.reauthorizationRevision }),\n ...(input.reauthorizationConnectionIds === undefined\n ? {}\n : { reauthorizationConnectionIds: [...input.reauthorizationConnectionIds] }),\n createdAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.attempts.set(record.id, record)\n return structuredClone(record)\n }\n\n async consumeAuthorizationAttempt(\n input: Parameters<ConnectorConnectionStorage[\"consumeAuthorizationAttempt\"]>[0]\n ): Promise<ConnectorAuthorizationAttemptRecord> {\n const record = this.attempts.get(input.id)\n if (record && record.expiresAt.getTime() <= this.now().getTime()) {\n this.attempts.delete(record.id)\n throw invalidAttempt()\n }\n if (\n !record ||\n record.projectId !== input.projectId ||\n record.connectorId !== input.connectorId ||\n record.redirectUri !== input.redirectUri ||\n !safeEqual(record.stateHash, input.stateHash)\n ) {\n throw invalidAttempt()\n }\n\n this.attempts.delete(input.id)\n return structuredClone(record)\n }\n\n async createConnectionRun(\n input: CreateConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingProviderRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: input.kind,\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"provider_authorization\",\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async createConnectionSelectionRun(\n input: CreateConnectorConnectionSelectionRunInput\n ): Promise<ConnectorConnectionRunAwaitingSelectionRecord> {\n assertPositiveDuration(input.ttlMs, \"connection run TTL\")\n if (this.connectionRuns.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"run_conflict\",\n \"[Sixb] Connector connection run already exists.\"\n )\n }\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"active\" ||\n authorization.credentialMutation\n ) {\n throw authorizationConflict()\n }\n const now = this.now()\n const record: ConnectorConnectionRunAwaitingSelectionRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n kind: \"connect\",\n owner: structuredClone(input.owner),\n slot: input.slot,\n initiatedByExecutionId: input.initiatedByExecutionId,\n status: \"waiting\",\n waitingFor: \"account_selection\",\n authorizationId: input.authorizationId,\n createdAt: now,\n updatedAt: now,\n expiresAt: new Date(now.getTime() + input.ttlMs),\n }\n this.connectionRuns.set(record.id, record)\n return structuredClone(record)\n }\n\n async claimConnectionRunCallback(\n input: ClaimConnectorConnectionRunCallbackInput\n ): Promise<ClaimConnectorConnectionRunCallbackResult | null> {\n assertPositiveDuration(input.processingTtlMs, \"connection run processing TTL\")\n const attempt = this.attempts.get(input.attemptId)\n if (\n !attempt ||\n attempt.projectId !== input.projectId ||\n attempt.connectionRunId === undefined ||\n attempt.returnTo === undefined ||\n attempt.callbackBindingHash === undefined ||\n attempt.redirectUri !== input.redirectUri ||\n !safeEqual(attempt.stateHash, input.stateHash) ||\n !safeEqual(attempt.callbackBindingHash, input.callbackBindingHash)\n ) {\n return null\n }\n\n const run = this.connectionRuns.get(attempt.connectionRunId)\n if (\n !run ||\n run.projectId !== input.projectId ||\n run.connectorId !== attempt.connectorId ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"provider_authorization\" ||\n run.slot !== attempt.slot ||\n run.initiatedByExecutionId !== attempt.initiatedByExecutionId\n ) {\n return null\n }\n\n const now = this.now()\n this.attempts.delete(attempt.id)\n if (attempt.expiresAt.getTime() <= now.getTime() || run.expiresAt.getTime() <= now.getTime()) {\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return { type: \"expired\", run: structuredClone(expired), returnTo: attempt.returnTo }\n }\n\n const processing: ConnectorConnectionRunProcessingRecord = {\n ...connectionRunBase(run, now),\n status: \"running\" as const,\n processingId: input.processingId,\n callbackStartedAt: now,\n expiresAt: new Date(now.getTime() + input.processingTtlMs),\n ...(attempt.reauthorizationId === undefined\n ? {}\n : { authorizationId: attempt.reauthorizationId }),\n }\n this.connectionRuns.set(run.id, processing)\n return {\n type: \"claimed\",\n run: structuredClone(processing),\n attempt: structuredClone(attempt),\n returnTo: attempt.returnTo,\n }\n }\n\n async attachConnectionRunAuthorization(\n input: AttachConnectorConnectionRunAuthorizationInput\n ): Promise<ConnectorConnectionRunProcessingRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n const authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.processingId !== input.processingId ||\n (run.authorizationId !== undefined && run.authorizationId !== input.authorizationId) ||\n !sameAuthorizationScope(authorization, input) ||\n authorization.status !== \"pending_selection\"\n ) {\n return null\n }\n const updated: ConnectorConnectionRunProcessingRecord = {\n ...run,\n authorizationId: input.authorizationId,\n updatedAt: this.now(),\n }\n this.connectionRuns.set(run.id, updated)\n return structuredClone(updated)\n }\n\n async waitForConnectionRunSelection(input: WaitForConnectorConnectionRunSelectionInput) {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"running\" ||\n run.kind !== \"connect\" ||\n run.processingId !== input.processingId ||\n run.authorizationId !== input.authorizationId\n ) {\n return null\n }\n const now = this.now()\n const waiting = {\n ...connectionRunBase(run, now),\n status: \"waiting\" as const,\n waitingFor: \"account_selection\" as const,\n authorizationId: input.authorizationId,\n expiresAt: new Date(input.expiresAt),\n }\n this.connectionRuns.set(run.id, waiting)\n return structuredClone(waiting)\n }\n\n async finishConnectionRun(\n input: FinishConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n if (!sameConnectionRunScope(run, input) || run.status !== \"running\") return null\n if (input.processingId !== run.processingId) return null\n const now = this.now()\n const authorizationId =\n input.status === \"succeeded\"\n ? input.authorizationId\n : input.status === \"failed\"\n ? (input.authorizationId ?? run.authorizationId)\n : run.authorizationId\n if (input.status !== \"succeeded\" && run.kind === \"connect\" && authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, authorizationId, now)\n }\n const base = connectionRunBase(run, now)\n const finished: ConnectorConnectionRunRecord =\n input.status === \"succeeded\"\n ? {\n ...base,\n status: \"succeeded\",\n authorizationId: input.authorizationId,\n ...(input.cleanupAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: input.cleanupAuthorizationId }),\n connections: structuredClone(input.connections),\n finishedAt: now,\n }\n : input.status === \"failed\"\n ? {\n ...base,\n status: \"failed\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n error: parseSixbFailure(input.error, CONNECTOR_CONNECTION_RUN_FAILURE_CODES),\n finishedAt: now,\n }\n : {\n ...base,\n status: \"cancelled\",\n ...(authorizationId === undefined ? {} : { authorizationId }),\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, finished)\n return structuredClone(finished)\n }\n\n async getConnectionRun(\n input: GetConnectorConnectionRunInput\n ): Promise<ConnectorConnectionRunRecord | null> {\n const run = this.currentConnectionRun(input.runId)\n return sameConnectionRunScope(run, input) ? structuredClone(run) : null\n }\n\n async createAuthorization(\n input: CreateConnectorAuthorizationInput\n ): Promise<ConnectorAuthorizationRecord> {\n assertPositiveDuration(input.selectionTtlMs, \"account selection TTL\")\n if (this.authorizations.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization already exists.\"\n )\n }\n const now = this.now()\n const record: ConnectorAuthorizationRecord = {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n authorizedBy: structuredClone(input.authorizedBy),\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n accounts: structuredClone(input.accounts),\n status: \"pending_selection\",\n selectionExpiresAt: new Date(now.getTime() + input.selectionTtlMs),\n revision: 0,\n createdAt: now,\n updatedAt: now,\n }\n this.authorizations.set(record.id, record)\n return structuredClone(record)\n }\n\n async initializeAuthorizationAccounts(\n input: InitializeConnectorAuthorizationAccountsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n record.status !== \"pending_selection\" ||\n record.credentialMutation\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n accounts: structuredClone(input.accounts),\n revision: record.revision + 1,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async getAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const authorization = this.authorizations.get(input.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async getAuthorizationByConnectionId(\n input: ConnectorConnectionKey\n ): Promise<ConnectorAuthorizationRecord | null> {\n const connection = this.connections.get(input.connectionId)\n if (!sameConnectionScope(connection, input)) return null\n const authorization = this.authorizations.get(connection.authorizationId)\n return sameAuthorizationScope(authorization, input) ? structuredClone(authorization) : null\n }\n\n async claimCredentialMutation(\n input: ClaimConnectorCredentialMutationInput\n ): Promise<ClaimConnectorCredentialMutationResult | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n assertPositiveDuration(input.operationTimeoutMs, \"credential mutation timeout\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(record, input) ||\n record.revision !== input.expectedRevision ||\n !canClaimMutation(record.status, input.mutation.kind)\n ) {\n return null\n }\n\n if (record.credentialMutation) {\n const canReplacePrepared =\n record.credentialMutation.phase === \"prepared\" &&\n record.credentialMutation.expiresAt.getTime() <= now.getTime()\n if (!canReplacePrepared) return null\n }\n\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n input.mutation.kind === \"reauthorization\" &&\n !sameIds(\n attached.map((connection) => connection.id),\n input.expectedConnectionIds ?? []\n )\n ) {\n return null\n }\n\n const deadlineAt = new Date(now.getTime() + input.operationTimeoutMs)\n const mutation = {\n ...structuredClone(input.mutation),\n phase: \"prepared\" as const,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, deadlineAt),\n deadlineAt,\n ...(input.mutation.kind === \"reauthorization\"\n ? { expectedConnectionIds: [...(input.expectedConnectionIds ?? [])] }\n : {}),\n }\n const startsRevocation =\n input.mutation.kind === \"revocation\" && record.status !== \"revocation_pending\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: input.mutation.kind === \"revocation\" ? \"revocation_pending\" : record.status,\n selectionExpiresAt:\n input.mutation.kind === \"revocation\" ? undefined : record.selectionExpiresAt,\n revision: startsRevocation ? record.revision + 1 : record.revision,\n credentialMutation: mutation,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n\n const disconnected: ConnectorConnectionRecord[] = []\n if (input.mutation.kind === \"revocation\") {\n for (const connection of attached) {\n const updatedConnection = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, updatedConnection)\n disconnected.push(structuredClone(updatedConnection))\n }\n }\n return { authorization: structuredClone(updated), disconnected }\n }\n\n async markCredentialMutationExecuting(\n input: MarkConnectorCredentialMutationExecutingInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"prepared\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"executing\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async renewCredentialMutation(\n input: RenewConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n assertPositiveDuration(input.leaseDurationMs, \"credential mutation lease duration\")\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n expiresAt: leaseExpiry(now, input.leaseDurationMs, record.credentialMutation.deadlineAt),\n },\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationCredentials(\n input: StageConnectorCredentialMutationCredentialsInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n mutationExpired(record, now) ||\n record.credentialMutation.kind === \"revocation\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: {\n ...record.credentialMutation,\n phase: \"result_staged\",\n stagedCredentials: {\n credentials: structuredClone(input.credentials),\n ...(input.credentialExpiresAt === undefined\n ? {}\n : { credentialExpiresAt: new Date(input.credentialExpiresAt) }),\n scopes: [...input.scopes],\n },\n },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async stageCredentialMutationRevocation(\n input: StageConnectorCredentialMutationRevocationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const now = this.now()\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase !== \"executing\" ||\n record.credentialMutation.kind !== \"revocation\" ||\n mutationExpired(record, now)\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n credentialMutation: { ...record.credentialMutation, phase: \"result_staged\" },\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async releaseCredentialMutation(\n input: ReleaseConnectorCredentialMutationInput\n ): Promise<boolean> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input, input.holderId) ||\n record.credentialMutation.phase === \"result_staged\"\n ) {\n return false\n }\n this.authorizations.set(record.id, {\n ...record,\n credentialMutation: undefined,\n updatedAt: this.now(),\n })\n return true\n }\n\n async recoverExpiredCredentialMutation(\n input: RecoverExpiredConnectorCredentialMutationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(record, input) || !record.credentialMutation) return null\n if (record.credentialMutation.phase === \"result_staged\") return structuredClone(record)\n\n const now = this.now()\n if (!mutationExpired(record, now)) return null\n const ambiguous = record.credentialMutation.phase === \"executing\"\n const failClosed = ambiguous && record.credentialMutation.kind !== \"revocation\"\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: failClosed ? \"needs_reauthorization\" : record.status,\n selectionExpiresAt: failClosed ? undefined : record.selectionExpiresAt,\n revision: failClosed ? record.revision + 1 : record.revision,\n credentialMutation: undefined,\n updatedAt: now,\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async markNeedsReauthorization(\n input: MarkConnectorAuthorizationNeedsReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (!matchesMutation(record, input)) return null\n const staged = record.credentialMutation.stagedCredentials\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n ...(staged\n ? {\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined\n ? undefined\n : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n }\n : {}),\n status: \"needs_reauthorization\",\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeRefresh(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"refresh\")\n if (!record || !staged) return null\n const updated = applyStagedCredentials(record, staged, this.now(), {\n status: \"active\",\n accounts: record.accounts,\n })\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async finalizeReauthorization(\n input: FinalizeConnectorReauthorizationInput\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n const staged = stagedCredentials(record, input, \"reauthorization\")\n if (!record || !staged || !record.credentialMutation) return null\n const attached = this.connectedConnectionsForAuthorization(record.id)\n if (\n !sameIds(\n attached.map((connection) => connection.id),\n record.credentialMutation.expectedConnectionIds ?? []\n )\n ) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections attached to the connector authorization changed during reauthorization.\"\n )\n }\n const accountsById = new Map(input.accounts.map((account) => [account.id, account]))\n if (attached.some((connection) => !accountsById.has(connection.account.id))) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Reauthorized connector grant no longer exposes every attached account.\"\n )\n }\n\n const now = this.now()\n const updated = applyStagedCredentials(record, staged, now, {\n status: \"active\",\n accounts: input.accounts,\n })\n this.authorizations.set(record.id, updated)\n for (const connection of attached) {\n this.connections.set(connection.id, {\n ...connection,\n account: structuredClone(accountsById.get(connection.account.id)!),\n updatedAt: now,\n })\n }\n return structuredClone(updated)\n }\n\n async finalizeRevocation(\n input: ConnectorCredentialMutationFence\n ): Promise<ConnectorAuthorizationRecord | null> {\n const record = this.authorizations.get(input.authorizationId)\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== \"revocation\" ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n const updated: ConnectorAuthorizationRecord = {\n ...record,\n status: \"revoked\",\n credentials: undefined,\n credentialExpiresAt: undefined,\n scopes: [],\n accounts: [],\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: this.now(),\n }\n this.authorizations.set(record.id, updated)\n return structuredClone(updated)\n }\n\n async putConnection(input: PutConnectorConnectionInput): Promise<PutConnectorConnectionResult> {\n return this.putConnectionNow(input, this.now())\n }\n\n async putConnectionFromRun(\n input: PutConnectorConnectionFromRunInput\n ): Promise<PutConnectorConnectionFromRunResult> {\n const run = this.currentConnectionRun(input.runId)\n if (\n !sameConnectionRunScope(run, input) ||\n run.status !== \"waiting\" ||\n run.waitingFor !== \"account_selection\"\n ) {\n throw invalidRun()\n }\n const now = this.now()\n const result = this.putConnectionNow(\n {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: run.owner,\n slot: run.slot,\n authorizationId: run.authorizationId,\n account: input.account,\n replace: input.replace,\n },\n now\n )\n const succeeded: ConnectorConnectionRunSucceededRecord = {\n ...connectionRunBase(run, now),\n status: \"succeeded\",\n authorizationId: run.authorizationId,\n ...(result.revocationPendingAuthorizationId === undefined\n ? {}\n : { cleanupAuthorizationId: result.revocationPendingAuthorizationId }),\n connections: [structuredClone(result.connection)],\n finishedAt: now,\n }\n this.connectionRuns.set(run.id, succeeded)\n return { ...result, run: structuredClone(succeeded) }\n }\n\n private putConnectionNow(\n input: PutConnectorConnectionInput,\n now: Date\n ): PutConnectorConnectionResult {\n let authorization = this.authorizations.get(input.authorizationId)\n if (\n !sameAuthorizationScope(authorization, input) ||\n !isSelectable(authorization.status) ||\n authorization.credentialMutation?.kind === \"reauthorization\"\n ) {\n throw authorizationConflict()\n }\n if (\n authorization.status === \"pending_selection\" &&\n authorization.selectionExpiresAt!.getTime() <= now.getTime()\n ) {\n authorization = {\n ...authorization,\n status: \"revocation_pending\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: now,\n }\n this.authorizations.set(authorization.id, authorization)\n throw authorizationConflict()\n }\n const account = authorization.accounts.find((candidate) => candidate.id === input.account.id)\n if (!account) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection account is not exposed by its authorization.\"\n )\n }\n const existing = this.findConnectionRecord(input)\n const sameAccount = existing?.account.id === account.id\n if (existing && !sameAccount && !input.replace) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n `[Sixb] Connector slot '${input.slot}' is already connected to another account; explicit replacement is required.`\n )\n }\n if (!existing && this.connections.has(input.id)) {\n throw new ConnectorConnectionStorageError(\n \"connection_conflict\",\n \"[Sixb] Connector connection id already exists.\"\n )\n }\n\n let revocationPendingAuthorizationId: string | undefined\n if (existing?.status === \"connected\" && existing.authorizationId !== authorization.id) {\n const previous = this.authorizations.get(existing.authorizationId)\n if (!previous) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Existing connector connection references an unavailable authorization.\"\n )\n }\n const remaining = this.connectedConnectionsForAuthorization(previous.id).filter(\n (connection) => connection.id !== existing.id\n )\n this.assertConnectionCanMove(existing, previous, remaining.length === 0)\n if (remaining.length === 0) {\n const pending = markAuthorizationRevocationPending(previous, now)\n this.authorizations.set(previous.id, pending)\n revocationPendingAuthorizationId = previous.id\n }\n } else if (existing?.status === \"connected\") {\n const previous = this.authorizations.get(existing.authorizationId)\n if (previous) this.assertConnectionCanMove(existing, previous, false)\n }\n\n const updatedAuthorization: ConnectorAuthorizationRecord =\n authorization.status === \"pending_selection\"\n ? {\n ...authorization,\n status: \"active\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: now,\n }\n : authorization\n const connection: ConnectorConnectionRecord = existing\n ? {\n ...existing,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n disconnectedAt: undefined,\n updatedAt: now,\n }\n : {\n id: input.id,\n projectId: input.projectId,\n connectorId: input.connectorId,\n owner: structuredClone(input.owner),\n slot: input.slot,\n authorizationId: input.authorizationId,\n account: structuredClone(account),\n status: \"connected\",\n createdAt: now,\n updatedAt: now,\n }\n\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(updatedAuthorization.id, updatedAuthorization)\n }\n this.connections.set(connection.id, connection)\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(updatedAuthorization),\n ...(revocationPendingAuthorizationId === undefined\n ? {}\n : { revocationPendingAuthorizationId }),\n created: existing === undefined,\n replaced: existing !== undefined && !sameAccount,\n }\n }\n\n async getConnection(\n input: GetConnectorConnectionInput\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.findConnectionRecord(input)\n return connection?.status === \"connected\" ? structuredClone(connection) : null\n }\n\n async getConnectionById(\n input: ConnectorConnectionKey\n ): Promise<ConnectorConnectionRecord | null> {\n const connection = this.connections.get(input.connectionId)\n return sameConnectionScope(connection, input) ? structuredClone(connection) : null\n }\n\n async listConnections(\n input: ListConnectorConnectionsInput\n ): Promise<readonly ConnectorConnectionRecord[]> {\n return [...this.connections.values()]\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async listConnectionsByAuthorization(\n input: ConnectorAuthorizationKey\n ): Promise<readonly ConnectorConnectionRecord[]> {\n const authorization = this.authorizations.get(input.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) return []\n return this.connectedConnectionsForAuthorization(input.authorizationId)\n .filter((connection) => sameConnectionScope(connection, input))\n .map((connection) => structuredClone(connection))\n }\n\n async disconnectConnection(input: ConnectorConnectionKey): Promise<{\n readonly connection: ConnectorConnectionRecord\n readonly authorization: ConnectorAuthorizationRecord\n readonly revocationPendingAuthorizationId?: string\n } | null> {\n const connection = this.connections.get(input.connectionId)\n if (\n !connection ||\n connection.projectId !== input.projectId ||\n connection.connectorId !== input.connectorId\n ) {\n return null\n }\n const authorization = this.authorizations.get(connection.authorizationId)\n if (!sameAuthorizationScope(authorization, input)) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection references an unavailable authorization.\"\n )\n }\n if (connection.status === \"disconnected\") {\n return {\n connection: structuredClone(connection),\n authorization: structuredClone(authorization),\n ...(authorization.status === \"revocation_pending\"\n ? { revocationPendingAuthorizationId: authorization.id }\n : {}),\n }\n }\n\n const now = this.now()\n const remaining = this.connectedConnectionsForAuthorization(authorization.id).filter(\n (candidate) => candidate.id !== connection.id\n )\n this.assertConnectionCanMove(connection, authorization, remaining.length === 0)\n const disconnected = disconnectConnectionRecord(connection, now)\n this.connections.set(connection.id, disconnected)\n const updatedAuthorization =\n remaining.length === 0\n ? markAuthorizationRevocationPending(authorization, now)\n : authorization\n if (updatedAuthorization !== authorization) {\n this.authorizations.set(authorization.id, updatedAuthorization)\n }\n return {\n connection: structuredClone(disconnected),\n authorization: structuredClone(updatedAuthorization),\n ...(updatedAuthorization.status === \"revocation_pending\" && remaining.length === 0\n ? { revocationPendingAuthorizationId: updatedAuthorization.id }\n : {}),\n }\n }\n\n snapshot(): InMemoryConnectorConnectionStorageSnapshot {\n return {\n attempts: structuredClone(this.attempts),\n connectionRuns: structuredClone(this.connectionRuns),\n authorizations: structuredClone(this.authorizations),\n connections: structuredClone(this.connections),\n }\n }\n\n restore(snapshot: InMemoryConnectorConnectionStorageSnapshot): void {\n replaceMap(this.attempts, snapshot.attempts)\n replaceMap(this.connectionRuns, snapshot.connectionRuns)\n replaceMap(this.authorizations, snapshot.authorizations)\n replaceMap(this.connections, snapshot.connections)\n }\n\n private now(): Date {\n return new Date(this.options.now?.() ?? new Date())\n }\n\n private currentConnectionRun(runId: string): ConnectorConnectionRunRecord | undefined {\n const run = this.connectionRuns.get(runId)\n if (!run || (run.status !== \"waiting\" && run.status !== \"running\")) return run\n\n const now = this.now()\n if (run.expiresAt.getTime() > now.getTime()) return run\n\n if (run.status === \"waiting\" && run.waitingFor === \"provider_authorization\") {\n const attempt = this.findAuthorizationAttemptByConnectionRunId(run.id)\n if (attempt) this.attempts.delete(attempt.id)\n }\n if (run.status === \"waiting\") {\n if (run.kind === \"connect\" && run.waitingFor === \"account_selection\") {\n this.markPendingAuthorizationForCleanup(run.connectorId, run.authorizationId, now)\n }\n const expired = expireConnectionRun(run, now)\n this.connectionRuns.set(run.id, expired)\n return expired\n }\n\n if (run.kind === \"connect\" && run.authorizationId) {\n this.markPendingAuthorizationForCleanup(run.connectorId, run.authorizationId, now)\n }\n const failed = failExpiredProcessingRun(run, now)\n this.connectionRuns.set(run.id, failed)\n return failed\n }\n\n private findConnectionRecord(\n input: GetConnectorConnectionInput\n ): ConnectorConnectionRecord | undefined {\n for (const connection of this.connections.values()) {\n if (\n connection.projectId === input.projectId &&\n connection.connectorId === input.connectorId &&\n connection.owner.type === input.owner.type &&\n connection.slot === input.slot\n ) {\n return connection\n }\n }\n return undefined\n }\n\n private findAuthorizationAttemptByConnectionRunId(\n connectionRunId: string\n ): ConnectorAuthorizationAttemptRecord | undefined {\n for (const attempt of this.attempts.values()) {\n if (attempt.connectionRunId === connectionRunId) return attempt\n }\n return undefined\n }\n\n private connectionRecordsForAuthorization(authorizationId: string): ConnectorConnectionRecord[] {\n return [...this.connections.values()].filter(\n (connection) => connection.authorizationId === authorizationId\n )\n }\n\n private connectedConnectionsForAuthorization(\n authorizationId: string\n ): ConnectorConnectionRecord[] {\n return this.connectionRecordsForAuthorization(authorizationId).filter(\n (connection) => connection.status === \"connected\"\n )\n }\n\n private assertConnectionCanMove(\n _connection: ConnectorConnectionRecord,\n authorization: ConnectorAuthorizationRecord,\n removingLastConnection = true\n ): void {\n const mutation = authorization.credentialMutation\n if (mutation?.kind === \"reauthorization\") {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connections cannot change while their connector authorization is being reauthorized.\"\n )\n }\n if (removingLastConnection && mutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] The last connector connection cannot be removed while credentials are being mutated.\"\n )\n }\n }\n\n private markPendingAuthorizationForCleanup(\n connectorId: string,\n authorizationId: string,\n now: Date\n ): void {\n const authorization = this.authorizations.get(authorizationId)\n if (\n !authorization ||\n authorization.connectorId !== connectorId ||\n authorization.status !== \"pending_selection\"\n ) {\n return\n }\n this.authorizations.set(\n authorization.id,\n markAuthorizationRevocationPending(authorization, now)\n )\n }\n}\n\nfunction disconnectConnectionRecord(\n connection: ConnectorConnectionRecord,\n now: Date\n): ConnectorConnectionRecord {\n return {\n ...connection,\n status: \"disconnected\",\n disconnectedAt: new Date(now),\n updatedAt: new Date(now),\n }\n}\n\nfunction markAuthorizationRevocationPending(\n authorization: ConnectorAuthorizationRecord,\n now: Date\n): ConnectorAuthorizationRecord {\n if (authorization.status === \"revocation_pending\" || authorization.status === \"revoked\") {\n return authorization\n }\n if (authorization.credentialMutation) {\n throw new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector authorization cannot begin revocation while credentials are being mutated.\"\n )\n }\n return {\n ...authorization,\n status: \"revocation_pending\",\n selectionExpiresAt: undefined,\n revision: authorization.revision + 1,\n updatedAt: new Date(now),\n }\n}\n\nfunction safeEqual(left: string, right: string): boolean {\n const leftBytes = Buffer.from(left)\n const rightBytes = Buffer.from(right)\n return leftBytes.length === rightBytes.length && timingSafeEqual(leftBytes, rightBytes)\n}\n\nfunction invalidRun(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"run_invalid\",\n \"[Sixb] Connector connection run is invalid, expired, or already used.\"\n )\n}\n\nfunction replaceMap<TKey, TValue>(target: Map<TKey, TValue>, source: Map<TKey, TValue>): void {\n target.clear()\n for (const [key, value] of structuredClone(source)) target.set(key, value)\n}\n\nfunction sameIds(left: readonly string[], right: readonly string[]): boolean {\n const leftSorted = [...left].sort()\n const rightSorted = [...right].sort()\n return (\n leftSorted.length === rightSorted.length &&\n leftSorted.every((value, index) => value === rightSorted[index])\n )\n}\n\nfunction invalidAttempt(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"attempt_invalid\",\n \"[Sixb] Connector authorization attempt is invalid, expired, or already used.\"\n )\n}\n\nfunction authorizationConflict(): ConnectorConnectionStorageError {\n return new ConnectorConnectionStorageError(\n \"authorization_conflict\",\n \"[Sixb] Connector connection requires a selectable authorization from the same project and connector.\"\n )\n}\n\nfunction assertPositiveDuration(value: number, name: string): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new ConnectorConnectionStorageError(\n \"invalid_input\",\n `[Sixb] Connector ${name} must be positive.`\n )\n }\n}\n\nfunction sameAuthorizationScope(\n record: ConnectorAuthorizationRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorAuthorizationRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionScope(\n record: ConnectorConnectionRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction sameConnectionRunScope(\n record: ConnectorConnectionRunRecord | undefined,\n input: { readonly projectId: string; readonly connectorId: string }\n): record is ConnectorConnectionRunRecord {\n return (\n record !== undefined &&\n record.projectId === input.projectId &&\n record.connectorId === input.connectorId\n )\n}\n\nfunction canClaimMutation(\n status: ConnectorAuthorizationRecord[\"status\"],\n kind: ClaimConnectorCredentialMutationInput[\"mutation\"][\"kind\"]\n): boolean {\n if (kind === \"refresh\") return status === \"active\"\n if (kind === \"reauthorization\") {\n return status === \"active\" || status === \"needs_reauthorization\"\n }\n return status !== \"revoked\"\n}\n\nfunction isSelectable(status: ConnectorAuthorizationRecord[\"status\"]): boolean {\n return status === \"pending_selection\" || status === \"active\"\n}\n\nfunction leaseExpiry(now: Date, durationMs: number, deadlineAt: Date): Date {\n return new Date(Math.min(now.getTime() + durationMs, deadlineAt.getTime()))\n}\n\nfunction mutationExpired(record: ConnectorAuthorizationRecord, now: Date): boolean {\n return (\n record.credentialMutation!.expiresAt.getTime() <= now.getTime() ||\n record.credentialMutation!.deadlineAt.getTime() <= now.getTime()\n )\n}\n\nfunction matchesMutation(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n holderId?: string\n): record is ConnectorAuthorizationRecord & {\n readonly credentialMutation: NonNullable<ConnectorAuthorizationRecord[\"credentialMutation\"]>\n} {\n return (\n sameAuthorizationScope(record, input) &&\n record.revision === input.expectedRevision &&\n record.credentialMutation?.id === input.mutationId &&\n (holderId === undefined || record.credentialMutation.holderId === holderId)\n )\n}\n\nfunction stagedCredentials(\n record: ConnectorAuthorizationRecord | undefined,\n input: ConnectorCredentialMutationFence,\n kind: \"refresh\" | \"reauthorization\"\n) {\n if (\n !matchesMutation(record, input) ||\n record.credentialMutation.kind !== kind ||\n record.credentialMutation.phase !== \"result_staged\"\n ) {\n return null\n }\n return record.credentialMutation.stagedCredentials ?? null\n}\n\nfunction applyStagedCredentials(\n record: ConnectorAuthorizationRecord,\n staged: NonNullable<ReturnType<typeof stagedCredentials>>,\n now: Date,\n input: {\n readonly status: \"active\"\n readonly accounts: readonly ConnectorAuthorizationRecord[\"accounts\"][number][]\n }\n): ConnectorAuthorizationRecord {\n return {\n ...record,\n credentials: structuredClone(staged.credentials),\n credentialExpiresAt:\n staged.credentialExpiresAt === undefined ? undefined : new Date(staged.credentialExpiresAt),\n scopes: [...staged.scopes],\n accounts: structuredClone(input.accounts),\n status: input.status,\n selectionExpiresAt: undefined,\n revision: record.revision + 1,\n credentialMutation: undefined,\n updatedAt: now,\n }\n}\n",
12
12
  "/**\n * Transport-agnostic reasons a file upload session operation can fail. Mapping a\n * reason to an HTTP status (or any other transport) is the responsibility of the\n * boundary that surfaces it, not of core.\n */\nexport type FileUploadSessionErrorReason =\n | \"not_found\"\n | \"expired\"\n | \"already_completed\"\n | \"already_aborted\"\n\n/**\n * Error for file upload session invariants and invalid state transitions.\n */\nexport class FileUploadSessionError extends Error {\n readonly name = \"FileUploadSessionError\"\n\n constructor(\n readonly reason: FileUploadSessionErrorReason,\n message: string\n ) {\n super(message)\n }\n}\n",
13
13
  "import type { Principal } from \"../../auth\"\nimport type { FileRef, SignedBlobUploadPart } from \"../../blob-storage\"\nimport { FileUploadSessionError } from \"./errors\"\nimport type {\n CreateFileUploadSessionInput,\n FileUploadSession,\n FileUploadSessionStore,\n} from \"./types\"\nimport {\n createFileUploadId,\n isFileUploadSessionExpired,\n isTerminalFileUploadSessionExpired,\n principalKey,\n shouldDeleteFileUploadSession,\n} from \"./utils\"\n\nexport type InMemoryFileUploadSessionsSnapshot = Map<string, FileUploadSession>\n\n/**\n * In-memory {@link FileUploadSessionStore}.\n *\n * Sessions live only in this process's memory: they do not survive a restart and\n * are not shared across instances. Staged/direct-put uploads therefore require a\n * single-instance deployment for now; a durable (Pg/Sqlite) store is a follow-up.\n * Expired sessions are reaped opportunistically on `create` and on demand via\n * `cleanupExpired` (there is no background sweeper).\n */\nexport class InMemoryFileUploadSessions implements FileUploadSessionStore {\n private readonly sessionsById = new Map<string, FileUploadSession>()\n\n snapshot(): InMemoryFileUploadSessionsSnapshot {\n return structuredClone(this.sessionsById)\n }\n\n restore(snapshot: InMemoryFileUploadSessionsSnapshot): void {\n this.sessionsById.clear()\n for (const [id, session] of snapshot) {\n this.sessionsById.set(id, structuredClone(session))\n }\n }\n\n async create(input: CreateFileUploadSessionInput): Promise<FileUploadSession> {\n await this.cleanupExpired()\n\n const session: FileUploadSession = {\n id: input.id ?? createFileUploadId(),\n projectId: input.projectId,\n principalKey: principalKey(input.principal),\n strategy: input.strategy,\n status: \"pending\",\n ...(input.fileName === undefined ? {} : { fileName: input.fileName }),\n ...(input.mediaType === undefined ? {} : { mediaType: input.mediaType }),\n ...(input.logicalPath === undefined ? {} : { logicalPath: input.logicalPath }),\n ...(input.expectedSizeBytes === undefined\n ? {}\n : { expectedSizeBytes: input.expectedSizeBytes }),\n ...(input.expectedDigest === undefined ? {} : { expectedDigest: input.expectedDigest }),\n ...(input.providerUpload === undefined ? {} : { providerUpload: input.providerUpload }),\n signedParts: [],\n createdAt: new Date(),\n expiresAt: input.expiresAt,\n }\n\n this.sessionsById.set(session.id, session)\n return session\n }\n\n async getForPrincipal(uploadId: string, principal: Principal): Promise<FileUploadSession> {\n const session = this.sessionsById.get(uploadId)\n if (!session || session.principalKey !== principalKey(principal)) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n const nowMs = Date.now()\n if (isFileUploadSessionExpired(session, nowMs)) {\n this.sessionsById.delete(uploadId)\n throw new FileUploadSessionError(\"expired\", \"File upload session has expired.\")\n }\n\n if (isTerminalFileUploadSessionExpired(session, nowMs)) {\n this.sessionsById.delete(uploadId)\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n return session\n }\n\n async markUploaded(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n fileRef,\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async addSignedPart(uploadId: string, part: SignedBlobUploadPart): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n signedParts: [\n ...session.signedParts.filter((candidate) => candidate.partNumber !== part.partNumber),\n part,\n ].sort((left, right) => left.partNumber - right.partNumber),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async complete(uploadId: string, fileRef: FileRef): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n status: \"completed\" as const,\n fileRef,\n completedAt: new Date(),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async abort(uploadId: string): Promise<FileUploadSession> {\n const session = this.requirePending(uploadId)\n const updated = {\n ...session,\n status: \"aborted\" as const,\n abortedAt: new Date(),\n }\n this.sessionsById.set(uploadId, updated)\n return updated\n }\n\n async cleanupExpired(now = new Date()): Promise<number> {\n let deleted = 0\n for (const [id, session] of this.sessionsById) {\n if (shouldDeleteFileUploadSession(session, now.getTime())) {\n this.sessionsById.delete(id)\n deleted += 1\n }\n }\n\n return deleted\n }\n\n private requirePending(uploadId: string): FileUploadSession {\n const session = this.sessionsById.get(uploadId)\n if (!session) {\n throw new FileUploadSessionError(\"not_found\", \"File upload session not found.\")\n }\n\n if (session.status !== \"pending\") {\n throw new FileUploadSessionError(\n session.status === \"completed\" ? \"already_completed\" : \"already_aborted\",\n `File upload session is already ${session.status}.`\n )\n }\n\n return session\n }\n}\n",
14
14
  "import { AsyncLocalStorage } from \"node:async_hooks\"\nimport { InMemoryActionRunStorage } from \"../action-runs\"\nimport { type AgentStorage, InMemoryAgentStorage } from \"../agents\"\nimport { type AiAccountingAttribution, type AiCostStorage, InMemoryAiCostStorage } from \"../ai-cost\"\nimport { directModelCallAttribution } from \"../ai-cost/attribution\"\nimport { type AiLimitStorage, InMemoryAiLimitStorage } from \"../ai-limits\"\nimport { type AiUsageStorage, InMemoryAiUsageStorage } from \"../ai-usage\"\nimport { type AuthStorage, InMemoryAuthStorage } from \"../auth\"\nimport {\n type ConnectorConnectionStorage,\n InMemoryConnectorConnectionStorage,\n} from \"../connector-connections\"\nimport { StorageTransactionError } from \"../errors\"\nimport { InMemoryExecutionStorage } from \"../executions/in-memory\"\nimport type { ExecutionStorage } from \"../executions/types\"\nimport { type FileUploadSessionStore, InMemoryFileUploadSessions } from \"../file-upload-sessions\"\nimport type { ObjectStorage } from \"../objects\"\nimport { InMemoryObjectStorage } from \"../objects/in-memory\"\nimport type { OntologyStorage } from \"../ontology\"\nimport { InMemoryOntologyStorage } from \"../ontology/in-memory\"\nimport { ProviderMaterializationTransactionLifecycle } from \"../ontology/provider\"\nimport {\n createAgentOperationScope,\n createAuthOperationScope,\n createObjectOperationScope,\n createOntologyOperationScope,\n createOperationScopedFacade,\n createStorageOperationScope,\n createWorkflowRunOperationScope,\n} from \"../operation-scope\"\nimport { InMemoryPipelineRunStorage, type PipelineRunStorage } from \"../pipeline-runs\"\nimport { InMemoryProjectionRunStorage } from \"../projection-runs\"\nimport { InMemoryRulesStorage, type RulesStorage } from \"../rules\"\nimport { InMemoryShareGrantStorage, type ShareGrantStorage } from \"../share-grants\"\nimport { InMemoryShareSessionStorage, type ShareSessionStorage } from \"../share-sessions\"\nimport { InMemorySyncRunStorage, type SyncRunStorage } from \"../sync-runs\"\nimport type { TimeseriesStorage } from \"../timeseries\"\nimport { InMemoryTimeseriesStorage } from \"../timeseries/store\"\nimport { createTransactionStorageProxy, throwNestedStorageTransaction } from \"../transaction\"\nimport type { Storage, StorageTransactionOptions } from \"../types\"\nimport { InMemoryWebhookRunStorage, type WebhookRunStorage } from \"../webhook-runs\"\nimport {\n InMemoryWorkflowInterventionStorage,\n type WorkflowInterventionStorage,\n} from \"../workflow-interventions\"\nimport { InMemoryWorkflowRunStorage, type WorkflowRunStorage } from \"../workflow-runs\"\nimport { registerInMemoryStorageTestingAdapter } from \"./testing\"\n\n/**\n * In-memory {@link Storage} used for dev and tests.\n *\n * Every top-level storage call (\"root operation\") serializes against a single promise-chain lock\n * unless a transaction is already active, which is what gives {@link InMemoryStorage.transaction}\n * snapshot/rollback atomicity. The provider owns one operation scope and applies it to every async\n * root capability. Transaction calls reuse the already-active scope and therefore never reacquire\n * its non-reentrant lock.\n */\nexport interface InMemoryStorageOptions {\n readonly connectorConnections?: {\n /** Storage-authoritative clock override for deterministic development and tests. */\n readonly now?: () => Date\n }\n}\n\nexport class InMemoryStorage implements Storage {\n readonly objects: ObjectStorage\n readonly timeseries: TimeseriesStorage\n readonly ontology: OntologyStorage\n private readonly objectStorage = new InMemoryObjectStorage()\n private readonly timeseriesStorage = new InMemoryTimeseriesStorage()\n private readonly ontologyStorage: InMemoryOntologyStorage\n private readonly authStorage = new InMemoryAuthStorage()\n private readonly shareGrantStorage = new InMemoryShareGrantStorage()\n private readonly shareSessionStorage = new InMemoryShareSessionStorage(this.shareGrantStorage)\n private readonly executionStorage = new InMemoryExecutionStorage(this.authStorage, {\n shareSessions: this.shareSessionStorage,\n })\n private readonly agentStorage = new InMemoryAgentStorage(this.executionStorage)\n private readonly aiUsageStorage = new InMemoryAiUsageStorage(this.executionStorage)\n private readonly aiCostStorage = new InMemoryAiCostStorage(this.aiUsageStorage, {\n resolve: (input) => this.resolveAiAccountingAttribution(input),\n resolveGroup: async (input) => {\n const attribution = await this.resolveAiAccountingAttribution(input)\n if (attribution?.kind !== \"subagent\") return { executionId: input.executionId, attribution }\n const parent = await this.agentStorage.runs.getById({\n projectId: input.projectId,\n id: attribution.parentRunId,\n })\n if (!parent) throw new Error(\"[Sixb] Subagent accounting parent is missing.\")\n return {\n executionId: parent.executionId,\n attribution: await this.resolveAiAccountingAttribution({\n ...input,\n executionId: parent.executionId,\n }),\n }\n },\n })\n private readonly aiLimitStorage = new InMemoryAiLimitStorage({\n resolveExecution: ({ projectId, executionId }) =>\n this.executionStorage.getById({ projectId, id: executionId }),\n resolveUsageRecord: ({ projectId, usageRecordId }) =>\n this.aiUsageStorage.getRecord(projectId, usageRecordId),\n resolveCostRecord: ({ projectId, usageRecordId }) =>\n this.aiCostStorage.getRecord(projectId, usageRecordId),\n listUsageRecords: ({ projectId }) => this.aiUsageStorage.listRecords(projectId),\n })\n private readonly actionRunStorage = new InMemoryActionRunStorage(this.executionStorage)\n private readonly syncRunStorage = new InMemorySyncRunStorage(this.executionStorage)\n private readonly pipelineRunStorage = new InMemoryPipelineRunStorage(this.executionStorage)\n private readonly projectionRunStorage = new InMemoryProjectionRunStorage({\n executions: this.executionStorage,\n })\n private readonly workflowRunStorage = new InMemoryWorkflowRunStorage(this.executionStorage)\n private readonly workflowInterventionStorage = new InMemoryWorkflowInterventionStorage()\n private readonly webhookRunStorage = new InMemoryWebhookRunStorage(this.executionStorage)\n private readonly rulesStorage = new InMemoryRulesStorage()\n private readonly fileUploadSessionStorage = new InMemoryFileUploadSessions()\n private readonly connectorConnectionStorage: InMemoryConnectorConnectionStorage\n readonly auth: AuthStorage\n readonly executions: ExecutionStorage\n readonly agents: AgentStorage\n readonly aiUsage: AiUsageStorage\n readonly aiCosts: AiCostStorage\n readonly aiLimits: AiLimitStorage\n readonly actionRuns: InMemoryActionRunStorage\n readonly syncRuns: SyncRunStorage\n readonly pipelineRuns: PipelineRunStorage\n readonly projectionRuns: InMemoryProjectionRunStorage\n readonly workflowRuns: WorkflowRunStorage\n readonly workflowInterventions: WorkflowInterventionStorage\n readonly webhookRuns: WebhookRunStorage\n readonly rules: RulesStorage\n readonly shareGrants: ShareGrantStorage\n readonly shareSessions: ShareSessionStorage\n readonly fileUploadSessions: FileUploadSessionStore\n readonly connectorConnections: ConnectorConnectionStorage\n\n constructor(options: InMemoryStorageOptions = {}) {\n this.connectorConnectionStorage = new InMemoryConnectorConnectionStorage(\n options.connectorConnections\n )\n const scope = createStorageOperationScope(\n (run) => this.withStorageOperation(run),\n () => this.assertRootOperationAvailable()\n )\n this.objects = createObjectOperationScope(this.objectStorage, scope)\n this.timeseries = createOperationScopedFacade(this.timeseriesStorage, scope)\n this.auth = createAuthOperationScope(this.authStorage, scope)\n this.executions = createOperationScopedFacade(this.executionStorage, scope)\n this.agents = createAgentOperationScope(this.agentStorage, scope)\n this.aiUsage = createOperationScopedFacade(this.aiUsageStorage, scope)\n this.aiCosts = createOperationScopedFacade(this.aiCostStorage, scope)\n this.aiLimits = createOperationScopedFacade(this.aiLimitStorage, scope)\n this.actionRuns = createOperationScopedFacade(this.actionRunStorage, scope)\n this.syncRuns = createOperationScopedFacade(this.syncRunStorage, scope)\n this.pipelineRuns = createOperationScopedFacade(this.pipelineRunStorage, scope)\n this.projectionRuns = createOperationScopedFacade(this.projectionRunStorage, scope)\n this.workflowRuns = createWorkflowRunOperationScope(this.workflowRunStorage, scope)\n this.workflowInterventions = createOperationScopedFacade(\n this.workflowInterventionStorage,\n scope\n )\n this.webhookRuns = createOperationScopedFacade(this.webhookRunStorage, scope)\n this.rules = createOperationScopedFacade(this.rulesStorage, scope)\n this.shareGrants = createOperationScopedFacade(this.shareGrantStorage, scope)\n this.shareSessions = createOperationScopedFacade(this.shareSessionStorage, scope)\n this.fileUploadSessions = createOperationScopedFacade(this.fileUploadSessionStorage, scope)\n this.connectorConnections = createOperationScopedFacade(this.connectorConnectionStorage, scope)\n this.ontologyStorage = new InMemoryOntologyStorage(this.objectStorage, this.timeseriesStorage, {\n runRootOperation: async (run) => run(),\n getTransactionToken: () => this.getActiveTransactionToken(),\n getMaterializationLifecycle: () => this.getActiveMaterializationLifecycle(),\n assertSourceMaterializationExecution: (input) =>\n this.projectionRunStorage.assertSourceMaterializationExecutionUnlocked(input),\n executionExists: async (projectId, executionId) =>\n (await this.executionStorage.getById({ projectId, id: executionId })) !== null,\n })\n this.ontology = createOntologyOperationScope(this.ontologyStorage, scope)\n this.ontologyStorage.registerTestingAlias(this.ontology)\n registerInMemoryStorageTestingAdapter(this, { snapshot: () => this.snapshot() })\n }\n\n private async resolveAiAccountingAttribution(input: {\n readonly projectId: string\n readonly executionId: string\n }): Promise<AiAccountingAttribution | undefined> {\n const execution = await this.executionStorage.getById({\n projectId: input.projectId,\n id: input.executionId,\n })\n if (!execution) return undefined\n if (execution.executor.type !== \"agent\") {\n const executor = execution.executor\n return directModelCallAttribution(\n executor.type === \"primitive\" ? executor.kind : executor.type,\n executor.type === \"request\"\n ? executor.requestId\n : executor.type === \"primitive\"\n ? executor.runId\n : null,\n execution.authorizationRef.type === \"trustedPrimitive\"\n ? execution.authorizationRef.primitive.id\n : null\n )\n }\n const directRun = await this.agentStorage.runs.getById({\n projectId: input.projectId,\n id: execution.executor.runId,\n })\n if (directRun?.kind === \"conversation\") {\n return {\n kind: \"agent\",\n agentRunId: directRun.id,\n threadId: directRun.threadId,\n }\n }\n if (directRun?.kind === \"subagent\") {\n return {\n kind: \"subagent\",\n subagentRunId: directRun.id,\n parentRunId: directRun.parentRunId,\n }\n }\n const agentRun = await this.workflowRunStorage.agentNodes.getByNodeRunId({\n projectId: input.projectId,\n nodeRunId: execution.executor.runId,\n })\n if (!agentRun) return undefined\n const node = await this.workflowRunStorage.nodes.getById({\n projectId: input.projectId,\n id: agentRun.nodeRunId,\n })\n if (!node) return undefined\n return {\n kind: \"workflowAgent\",\n agentStepId: node.nodeId,\n nodeRunId: agentRun.nodeRunId,\n workflowId: node.workflowId,\n workflowRunId: node.workflowRunId,\n }\n }\n\n private readonly transactionScope = new AsyncLocalStorage<object>()\n private readonly activeTransactionTokens = new WeakSet<object>()\n private readonly materializationLifecycles = new WeakMap<\n object,\n ProviderMaterializationTransactionLifecycle\n >()\n private transactionTail: Promise<void> = Promise.resolve()\n\n async ping(): Promise<void> {\n await this.withStorageOperation(() => undefined)\n }\n\n /**\n * Run `run` against a transactional view of this storage.\n *\n * Atomicity is achieved by snapshotting every store before the callback and restoring that\n * snapshot if it throws. The snapshot is a full structural clone of the in-memory dataset, so\n * its cost scales with total dataset size rather than changeset size. That is acceptable for the\n * dev/test role of {@link InMemoryStorage} but is the reason it is not intended for large\n * datasets under heavy transactional load — the SQL providers use real database transactions.\n *\n * The `isolation` option is intentionally ignored: the promise-chain lock serializes\n * transactions one at a time, which is at least as strong as `serializable`.\n */\n async transaction<T>(\n run: (tx: Storage) => Promise<T> | T,\n _options: StorageTransactionOptions = {}\n ): Promise<T> {\n const inheritedTransactionToken = this.transactionScope.getStore()\n if (inheritedTransactionToken && this.activeTransactionTokens.has(inheritedTransactionToken)) {\n throwNestedStorageTransaction()\n }\n\n return this.withTransactionLock(async () => {\n const snapshot = this.snapshot()\n let active = true\n const tx = createTransactionStorageProxy(this.createTransactionStorage(), () => active)\n const transactionToken = {}\n const materializationLifecycle = new ProviderMaterializationTransactionLifecycle()\n this.activeTransactionTokens.add(transactionToken)\n this.materializationLifecycles.set(transactionToken, materializationLifecycle)\n\n try {\n const result = await this.transactionScope.run(transactionToken, async () => {\n try {\n return await run(tx)\n } finally {\n await this.aiLimitStorage.settleOperations()\n }\n })\n materializationLifecycle.assertCommittable()\n return result\n } catch (error) {\n // A failed rollback leaves the store in an unknown state. Surface that explicitly instead\n // of letting the restore error silently replace (mask) the original transaction error.\n try {\n this.restore(snapshot)\n } catch (restoreError) {\n throw new StorageTransactionError(\n `[Sixb] In-memory storage failed to roll back after a transaction error; state may be inconsistent. Original transaction error: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { cause: restoreError }\n )\n }\n throw error\n } finally {\n this.ontologyStorage.completeTransaction(transactionToken)\n materializationLifecycle.deactivate()\n this.activeTransactionTokens.delete(transactionToken)\n active = false\n }\n })\n }\n\n private async withStorageOperation<T>(run: () => Promise<T> | T): Promise<T> {\n this.assertRootOperationAvailable()\n return this.withTransactionLock(async () => run())\n }\n\n private assertRootOperationAvailable(): void {\n if (!this.getActiveTransactionToken()) return\n throw new StorageTransactionError(\n \"[Sixb] Root storage cannot be used inside a transaction callback; use the provided tx storage.\"\n )\n }\n\n private getActiveTransactionToken(): object | null {\n const token = this.transactionScope.getStore()\n return token && this.activeTransactionTokens.has(token) ? token : null\n }\n\n private getActiveMaterializationLifecycle(): ProviderMaterializationTransactionLifecycle | null {\n const token = this.getActiveTransactionToken()\n return token ? (this.materializationLifecycles.get(token) ?? null) : null\n }\n\n private async withTransactionLock<T>(run: () => Promise<T>): Promise<T> {\n const previous = this.transactionTail\n let release!: () => void\n this.transactionTail = new Promise<void>((resolve) => {\n release = resolve\n })\n\n await previous\n try {\n return await run()\n } finally {\n release()\n }\n }\n\n private createTransactionStorage(): Storage {\n return {\n objects: this.objectStorage,\n timeseries: this.timeseriesStorage,\n ontology: this.ontologyStorage,\n auth: this.authStorage,\n executions: this.executionStorage,\n agents: this.agentStorage,\n aiUsage: this.aiUsageStorage,\n aiCosts: this.aiCostStorage,\n aiLimits: this.aiLimitStorage,\n actionRuns: this.actionRunStorage,\n syncRuns: this.syncRunStorage,\n pipelineRuns: this.pipelineRunStorage,\n projectionRuns: this.projectionRunStorage,\n workflowRuns: this.workflowRunStorage,\n workflowInterventions: this.workflowInterventionStorage,\n webhookRuns: this.webhookRunStorage,\n rules: this.rulesStorage,\n shareGrants: this.shareGrantStorage,\n shareSessions: this.shareSessionStorage,\n fileUploadSessions: this.fileUploadSessionStorage,\n connectorConnections: this.connectorConnectionStorage,\n ping: async () => undefined,\n transaction: async <T>(): Promise<T> => {\n throwNestedStorageTransaction()\n },\n }\n }\n\n private snapshot(): InMemoryStorageSnapshot {\n return {\n objects: this.objectStorage.snapshot(),\n timeseries: this.timeseriesStorage.snapshot(),\n ontology: this.ontologyStorage.snapshot(),\n auth: this.authStorage.snapshot(),\n executions: this.executionStorage.snapshot(),\n agents: this.agentStorage.snapshot(),\n aiUsage: this.aiUsageStorage.snapshot(),\n aiCosts: this.aiCostStorage.snapshot(),\n aiLimits: this.aiLimitStorage.snapshot(),\n actionRuns: this.actionRunStorage.snapshot(),\n syncRuns: this.syncRunStorage.snapshot(),\n pipelineRuns: this.pipelineRunStorage.snapshot(),\n projectionRuns: this.projectionRunStorage.snapshot(),\n workflowRuns: this.workflowRunStorage.snapshot(),\n workflowInterventions: this.workflowInterventionStorage.snapshot(),\n webhookRuns: this.webhookRunStorage.snapshot(),\n rules: this.rulesStorage.snapshot(),\n shareGrants: this.shareGrantStorage.snapshot(),\n shareSessions: this.shareSessionStorage.snapshot(),\n fileUploadSessions: this.fileUploadSessionStorage.snapshot(),\n connectorConnections: this.connectorConnectionStorage.snapshot(),\n }\n }\n\n private restore(snapshot: InMemoryStorageSnapshot): void {\n this.objectStorage.restore(snapshot.objects)\n this.timeseriesStorage.restore(snapshot.timeseries)\n this.ontologyStorage.restore(snapshot.ontology)\n this.authStorage.restore(snapshot.auth)\n this.executionStorage.restore(snapshot.executions)\n this.agentStorage.restore(snapshot.agents)\n this.aiUsageStorage.restore(snapshot.aiUsage)\n this.aiCostStorage.restore(snapshot.aiCosts)\n this.aiLimitStorage.restore(snapshot.aiLimits)\n this.actionRunStorage.restore(snapshot.actionRuns)\n this.syncRunStorage.restore(snapshot.syncRuns)\n this.pipelineRunStorage.restore(snapshot.pipelineRuns)\n this.projectionRunStorage.restore(snapshot.projectionRuns)\n this.workflowRunStorage.restore(snapshot.workflowRuns)\n this.workflowInterventionStorage.restore(snapshot.workflowInterventions)\n this.webhookRunStorage.restore(snapshot.webhookRuns)\n this.rulesStorage.restore(snapshot.rules)\n this.shareGrantStorage.restore(snapshot.shareGrants)\n this.shareSessionStorage.restore(snapshot.shareSessions)\n this.fileUploadSessionStorage.restore(snapshot.fileUploadSessions)\n this.connectorConnectionStorage.restore(snapshot.connectorConnections)\n }\n}\n\nexport interface InMemoryStorageSnapshot {\n readonly objects: ReturnType<InMemoryObjectStorage[\"snapshot\"]>\n readonly timeseries: ReturnType<InMemoryTimeseriesStorage[\"snapshot\"]>\n readonly ontology: ReturnType<InMemoryOntologyStorage[\"snapshot\"]>\n readonly auth: ReturnType<InMemoryAuthStorage[\"snapshot\"]>\n readonly executions: ReturnType<InMemoryExecutionStorage[\"snapshot\"]>\n readonly agents: ReturnType<InMemoryAgentStorage[\"snapshot\"]>\n readonly aiUsage: ReturnType<InMemoryAiUsageStorage[\"snapshot\"]>\n readonly aiCosts: ReturnType<InMemoryAiCostStorage[\"snapshot\"]>\n readonly aiLimits: ReturnType<InMemoryAiLimitStorage[\"snapshot\"]>\n readonly actionRuns: ReturnType<InMemoryActionRunStorage[\"snapshot\"]>\n readonly syncRuns: ReturnType<InMemorySyncRunStorage[\"snapshot\"]>\n readonly pipelineRuns: ReturnType<InMemoryPipelineRunStorage[\"snapshot\"]>\n readonly projectionRuns: ReturnType<InMemoryProjectionRunStorage[\"snapshot\"]>\n readonly workflowRuns: ReturnType<InMemoryWorkflowRunStorage[\"snapshot\"]>\n readonly workflowInterventions: ReturnType<InMemoryWorkflowInterventionStorage[\"snapshot\"]>\n readonly webhookRuns: ReturnType<InMemoryWebhookRunStorage[\"snapshot\"]>\n readonly rules: ReturnType<InMemoryRulesStorage[\"snapshot\"]>\n readonly shareGrants: ReturnType<InMemoryShareGrantStorage[\"snapshot\"]>\n readonly shareSessions: ReturnType<InMemoryShareSessionStorage[\"snapshot\"]>\n readonly fileUploadSessions: ReturnType<InMemoryFileUploadSessions[\"snapshot\"]>\n readonly connectorConnections: ReturnType<InMemoryConnectorConnectionStorage[\"snapshot\"]>\n}\n",
@@ -20,15 +20,16 @@
20
20
  "import { type ObjectReadExecutionLimits, ObjectReadLimitExceededError } from \"../execution-limits\"\nimport type {\n CompiledObjectReadRoot,\n CompiledObjectReadStep,\n CompiledSelectedObjectReadScope,\n ObjectLinkRow,\n ObjectRow,\n} from \"../types\"\nimport { fullLinkRowKey, rowIdentityKey, rowIdentityKeyParts, sourceLinkBucketKey } from \"./keys\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\nexport interface InMemoryReadUniverse extends InMemoryReadSource {\n readonly objects: ReadonlyMap<string, ObjectRow>\n readonly links: ReadonlyMap<string, ObjectLinkRow>\n readonly linksBySource: ReadonlyMap<string, readonly ObjectLinkRow[]>\n readonly objectProperties: ReadonlyMap<string, ReadonlySet<string>>\n}\n\ninterface InMemoryReadPlan {\n readonly roots: readonly CompiledObjectReadRoot[]\n readonly selectionsByNode: ReadonlyMap<number, ReadonlyMap<string, ReadonlySet<string>>>\n readonly steps: readonly CompiledObjectReadStep[]\n}\n\nexport function prepareReadPlan(scope: CompiledSelectedObjectReadScope): InMemoryReadPlan {\n const selectionsByNode = new Map<number, Map<string, ReadonlySet<string>>>()\n for (const selection of scope.objects) {\n const byType = selectionsByNode.get(selection.nodeId) ?? new Map()\n byType.set(selection.objectTypeId, new Set(selection.propertyIds))\n selectionsByNode.set(selection.nodeId, byType)\n }\n\n // The compiler allocates node ids parent-first. Resolve every step from lower parent ids to\n // higher child ids so a node reached through several concrete definitions is complete before\n // its nested selections run.\n const steps = [...scope.steps].sort(\n (left, right) =>\n left.parentNodeId - right.parentNodeId ||\n left.nodeId - right.nodeId ||\n left.sourceObjectTypeId.localeCompare(right.sourceObjectTypeId) ||\n left.linkId.localeCompare(right.linkId) ||\n left.targetObjectTypeId.localeCompare(right.targetObjectTypeId)\n )\n return {\n roots: scope.roots,\n selectionsByNode,\n steps,\n }\n}\n\nexport function resolveSelectedReadUniverse(\n source: InMemoryReadSource,\n plan: InMemoryReadPlan,\n limits: ObjectReadExecutionLimits\n): InMemoryReadUniverse {\n // Reachability stays path-sensitive until every finite selection step has run. The final\n // object/link universes union exact identities only after that traversal, so the same type\n // reached through another branch cannot inherit nested link authority.\n const reachableByNode = new Map<number, Map<string, ObjectRow>>()\n const rawObjects = new Map<string, ObjectRow>()\n const objectProperties = new Map<string, Set<string>>()\n const authorizedLinks = new Map<\n string,\n { readonly row: ObjectLinkRow; readonly propertyIds: Set<string> }\n >()\n let traversalFacts = 0\n const consumeTraversalFact = (): void => {\n traversalFacts += 1\n if (traversalFacts > limits.maxTraversalFacts) {\n throw new ObjectReadLimitExceededError(\"traversalFacts\", limits.maxTraversalFacts)\n }\n }\n\n const addReachable = (nodeId: number, row: ObjectRow): void => {\n const selectedProperties = plan.selectionsByNode.get(nodeId)?.get(row.objectTypeId)\n if (!selectedProperties) return\n const key = rowIdentityKey(row)\n const reachable = reachableByNode.get(nodeId) ?? new Map<string, ObjectRow>()\n reachable.set(key, row)\n reachableByNode.set(nodeId, reachable)\n rawObjects.set(key, row)\n unionInto(objectProperties, key, selectedProperties)\n }\n\n for (const root of plan.roots) {\n const row = source.getObject(root.objectTypeId, root.primaryId)\n if (row) {\n consumeTraversalFact()\n addReachable(root.nodeId, row)\n }\n }\n\n for (const step of plan.steps) {\n const parents = reachableByNode.get(step.parentNodeId)\n if (!parents) continue\n for (const parent of parents.values()) {\n if (parent.objectTypeId !== step.sourceObjectTypeId) continue\n for (const link of source.outgoingLinks(parent.objectTypeId, parent.primaryId)) {\n if (link.linkId !== step.linkId || link.targetTypeId !== step.targetObjectTypeId) {\n continue\n }\n const target = source.getObject(link.targetTypeId, link.targetId)\n if (!target) continue\n consumeTraversalFact()\n addReachable(step.nodeId, target)\n\n const linkKey = fullLinkRowKey(link)\n const selected = authorizedLinks.get(linkKey)\n if (selected) {\n for (const propertyId of step.propertyIds) selected.propertyIds.add(propertyId)\n } else {\n authorizedLinks.set(linkKey, {\n row: link,\n propertyIds: new Set(step.propertyIds),\n })\n }\n }\n }\n }\n\n const objects = new Map<string, ObjectRow>()\n for (const [key, propertyIds] of objectProperties) {\n const row = rawObjects.get(key)\n if (row) objects.set(key, redactObjectRow(row, propertyIds))\n }\n\n const links = new Map<string, ObjectLinkRow>()\n for (const [key, selected] of authorizedLinks) {\n // Both endpoint identities must remain live and selected. This also prevents a stale link\n // from exposing metadata after its target object disappears.\n if (\n !objects.has(rowIdentityKeyParts(selected.row.sourceTypeId, selected.row.sourceId)) ||\n !objects.has(rowIdentityKeyParts(selected.row.targetTypeId, selected.row.targetId))\n ) {\n continue\n }\n links.set(key, redactLinkRow(selected.row, selected.propertyIds))\n }\n\n return createReadUniverse(source.projectId, objects, links, objectProperties)\n}\n\nfunction createReadUniverse(\n projectId: string,\n objects: ReadonlyMap<string, ObjectRow>,\n links: ReadonlyMap<string, ObjectLinkRow>,\n objectProperties: ReadonlyMap<string, ReadonlySet<string>>\n): InMemoryReadUniverse {\n const linksBySource = new Map<string, ObjectLinkRow[]>()\n for (const link of links.values()) {\n const key = sourceLinkBucketKey(link.projectId, link.sourceTypeId, link.sourceId)\n const bucket = linksBySource.get(key) ?? []\n bucket.push(link)\n linksBySource.set(key, bucket)\n }\n return {\n projectId,\n objects,\n links,\n linksBySource,\n objectProperties,\n objectsOfType: (objectTypeId) =>\n [...objects.values()].filter((row) => row.objectTypeId === objectTypeId),\n getObject: (objectTypeId, primaryId) =>\n objects.get(rowIdentityKeyParts(objectTypeId, primaryId)),\n outgoingLinks: (objectTypeId, primaryId) =>\n linksBySource.get(sourceLinkBucketKey(projectId, objectTypeId, primaryId)) ?? [],\n allLinks: () => links.values(),\n }\n}\n\nfunction unionInto(\n target: Map<string, Set<string>>,\n key: string,\n values: ReadonlySet<string>\n): void {\n const union = target.get(key) ?? new Set<string>()\n for (const value of values) union.add(value)\n target.set(key, union)\n}\n\nfunction redactObjectRow(row: ObjectRow, propertyIds: ReadonlySet<string>): ObjectRow {\n const clone = structuredClone(row)\n delete clone.links\n clone.properties = redactProperties(clone.properties, propertyIds)\n return clone\n}\n\nfunction redactLinkRow(row: ObjectLinkRow, propertyIds: ReadonlySet<string>): ObjectLinkRow {\n const clone = structuredClone(row)\n const properties = redactProperties(clone.properties ?? {}, propertyIds)\n if (Object.keys(properties).length === 0) {\n delete clone.properties\n } else {\n clone.properties = properties\n }\n return clone\n}\n\nfunction redactProperties(\n properties: Readonly<Record<string, unknown>>,\n propertyIds: ReadonlySet<string>\n): Record<string, unknown> {\n // Object.fromEntries uses CreateDataProperty, so valid ontology ids such as `__proto__` remain\n // ordinary own properties without changing the returned object's prototype.\n return Object.fromEntries(\n [...propertyIds]\n .filter((propertyId) => Object.hasOwn(properties, propertyId))\n .map((propertyId) => [propertyId, properties[propertyId]])\n )\n}\n",
21
21
  "import {\n assertObjectReadFacetCount,\n assertObjectReadOutputWithinLimit,\n type ObjectReadExecutionLimits,\n snapshotObjectReadExecutionLimits,\n} from \"../execution-limits\"\nimport { type ObjectBatchKey, objectBatchKey } from \"../keys\"\nimport { assertObjectReaderProject } from \"../read-scope\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n ExistsObjectsInput,\n FacetObjectsInput,\n LinkDirection,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n QueryObjectsInput,\n} from \"../types\"\nimport { fullLinkRowKey, rowIdentityKeyParts, sourceLinkBucketKey } from \"./keys\"\nimport {\n buildFacetResults,\n collectLinksBatch,\n evaluateObjectQuery,\n queryLinksFrom,\n stripOuterRowShape,\n} from \"./query\"\nimport {\n type InMemoryReadUniverse,\n prepareReadPlan,\n resolveSelectedReadUniverse,\n} from \"./read-scope\"\nimport type { InMemoryReadSource } from \"./read-source\"\n\n/** Capture a selection once, then resolve its live data and enforce budgets per operation. */\nexport function createInMemorySelectedReader(\n source: InMemoryReadSource,\n params: {\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n },\n queryCapabilities: () => ObjectQueryCapabilities\n): ObjectReadStorage {\n const projectId = source.projectId\n const plan = prepareReadPlan(params.scope)\n const limits = snapshotObjectReadExecutionLimits(params.limits)\n const assertProject = (actualProjectId: string) =>\n assertObjectReaderProject(projectId, actualProjectId)\n const visible = <T>(value: T): T => {\n assertObjectReadOutputWithinLimit(value, limits)\n return value\n }\n const visibleMap = <TKey, TValue>(value: Map<TKey, TValue>): Map<TKey, TValue> => {\n assertObjectReadOutputWithinLimit([...value.entries()], limits)\n return value\n }\n const selectsObjectProperties: ObjectReadStorage[\"selectsObjectProperties\"] = async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(\n input.items.map((item) => {\n const key = rowIdentityKeyParts(item.objectTypeId, item.primaryId)\n if (!universe.objects.has(key)) return false\n return universe.objectProperties.get(key)?.has(item.propertyId) ?? false\n })\n )\n }\n\n return Object.freeze({\n queryCapabilities,\n queryObjects: async (input: QueryObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const result = evaluateObjectQuery(input.query, universe)\n return visible({\n objects: result.entries.map((entry) => structuredClone(entry.row)),\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n ...(input.includeTotal === false ? {} : { total: result.total }),\n })\n },\n countObjects: async (input: CountObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible({\n count: evaluateObjectQuery(stripOuterRowShape(input.query), universe).total,\n })\n },\n existsObjects: async (input: ExistsObjectsInput) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible({\n exists: evaluateObjectQuery(stripOuterRowShape(input.query), universe).total > 0,\n })\n },\n facetObjects: async (input: FacetObjectsInput) => {\n assertProject(input.projectId)\n assertObjectReadFacetCount(input.facets.length)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const result = evaluateObjectQuery(stripOuterRowShape(input.query), universe)\n return visible(\n structuredClone({\n facets: buildFacetResults(\n result.entries.map((entry) => entry.row),\n input.facets\n ),\n })\n )\n },\n getByPrimaryId: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const row = universe.objects.get(rowIdentityKeyParts(input.objectTypeId, input.primaryId))\n return visible(row ? structuredClone(row) : null)\n },\n selectsObjectProperties,\n listLinks: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(listUniverseLinks(universe, input).map((row) => structuredClone(row)))\n },\n getByPrimaryIdBatch: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n const rows = new Map<ObjectBatchKey, ObjectRow>()\n for (const item of input.items) {\n const row = universe.objects.get(rowIdentityKeyParts(item.objectTypeId, item.primaryId))\n if (row) {\n rows.set(objectBatchKey(item.objectTypeId, item.primaryId), structuredClone(row))\n }\n }\n return visibleMap(rows)\n },\n listLinksBatch: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visibleMap(\n collectLinksBatch(\n {\n all: () => universe.links.values(),\n outgoing: (item) =>\n universe.linksBySource.get(\n sourceLinkBucketKey(projectId, item.objectTypeId, item.objectId)\n ) ?? [],\n },\n input,\n true\n )\n )\n },\n queryLinks: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(\n structuredClone(await queryLinksFrom(input, (item) => listUniverseLinks(universe, item)))\n )\n },\n list: async (input) => {\n assertProject(input.projectId)\n const universe = resolveSelectedReadUniverse(source, plan, limits)\n return visible(listRows(input, [...universe.objects.values()]))\n },\n } satisfies ObjectReadStorage)\n}\n\nfunction listUniverseLinks(\n universe: InMemoryReadUniverse,\n params: {\n readonly projectId: string\n readonly objectTypeId: string\n readonly objectId: string\n readonly linkId?: string\n readonly direction?: LinkDirection\n }\n): ObjectLinkRow[] {\n const direction = params.direction ?? \"outgoing\"\n const matches = (row: ObjectLinkRow) => !params.linkId || row.linkId === params.linkId\n const rows: ObjectLinkRow[] = []\n\n if (direction === \"outgoing\" || direction === \"both\") {\n const outgoing = universe.linksBySource.get(\n sourceLinkBucketKey(params.projectId, params.objectTypeId, params.objectId)\n )\n if (outgoing) rows.push(...outgoing.filter(matches))\n }\n if (direction === \"incoming\" || direction === \"both\") {\n for (const row of universe.links.values()) {\n if (\n row.targetTypeId === params.objectTypeId &&\n row.targetId === params.objectId &&\n matches(row)\n ) {\n rows.push(row)\n }\n }\n }\n\n if (direction !== \"both\") return rows\n return [...new Map(rows.map((row) => [fullLinkRowKey(row), row])).values()]\n}\n\nfunction listRows(\n params: Parameters<ObjectReadStorage[\"list\"]>[0],\n candidates: readonly ObjectRow[]\n): { objects: readonly ObjectRow[]; hasMore: boolean; total: number } {\n const requestedTypes =\n params.objectTypeId === undefined\n ? undefined\n : new Set(\n typeof params.objectTypeId === \"string\" ? [params.objectTypeId] : params.objectTypeId\n )\n let rows = candidates.filter(\n (row) =>\n row.projectId === params.projectId &&\n (!requestedTypes || requestedTypes.has(row.objectTypeId))\n )\n\n rows = rows.filter(\n (row) =>\n (!params.primaryIdPrefix || row.primaryId.startsWith(params.primaryIdPrefix)) &&\n (!params.primaryIdSuffix || row.primaryId.endsWith(params.primaryIdSuffix)) &&\n (!params.updatedAfter || row.updatedAt >= params.updatedAfter) &&\n (!params.updatedBefore || row.updatedAt <= params.updatedBefore) &&\n (!params.createdAfter || row.createdAt >= params.createdAfter) &&\n (!params.createdBefore || row.createdAt <= params.createdBefore)\n )\n\n const total = rows.length\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n rows.sort((left, right) => {\n const comparison =\n orderBy === \"primaryId\"\n ? left.primaryId.localeCompare(right.primaryId)\n : orderBy === \"createdAt\"\n ? left.createdAt.getTime() - right.createdAt.getTime()\n : left.updatedAt.getTime() - right.updatedAt.getTime()\n return order === \"desc\" ? -comparison : comparison\n })\n\n const objects = rows.slice(offset, offset + limit).map((row) => structuredClone(row))\n return {\n objects,\n hasMore: offset + limit < total,\n total,\n }\n}\n",
22
22
  "import type { EffectiveLinkSnapshot, EffectiveObjectSnapshot } from \"../../../materialization/model\"\nimport type { ObjectReadExecutionLimits } from \"../execution-limits\"\nimport { type LinkBatchKey, type ObjectBatchKey, objectBatchKey } from \"../keys\"\nimport type {\n CompiledSelectedObjectReadScope,\n CountObjectsInput,\n CountObjectsResult,\n ExistsObjectsInput,\n ExistsObjectsResult,\n FacetObjectsInput,\n FacetObjectsResult,\n LinkDirection,\n ObjectLinkRow,\n ObjectQueryCapabilities,\n ObjectReadStorage,\n ObjectRow,\n ObjectStorage,\n QueryObjectLinksInput,\n QueryObjectLinksResult,\n QueryObjectsInput,\n QueryObjectsResult,\n} from \"../types\"\nimport {\n compareStrings,\n fullLinkRowKey,\n linkRowKey,\n objectRowKey,\n objectRowProjectPrefix,\n sourceLinkBucketKey,\n} from \"./keys\"\nimport {\n buildFacetResults,\n collectLinksBatch,\n evaluateObjectQuery,\n IN_MEMORY_OBJECT_QUERY_CAPABILITIES,\n queryLinksFrom,\n stripOuterRowShape,\n} from \"./query\"\nimport type { InMemoryReadSource } from \"./read-source\"\nimport { createInMemorySelectedReader } from \"./selected-reader\"\n\nexport interface InMemoryObjectStorageSnapshot {\n readonly rows: Map<string, Map<string, ObjectRow>>\n readonly links: Map<string, Map<string, ObjectLinkRow>>\n}\n\ninterface InMemoryObjectMaterializerAdapter {\n getExactObjectRow(projectId: string, objectTypeId: string, primaryId: string): ObjectRow | null\n getExactLinkRow(\n projectId: string,\n ref: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n }\n ): ObjectLinkRow | null\n applyExactObject(row: EffectiveObjectSnapshot, projectId: string): void\n deleteExactObject(projectId: string, objectTypeId: string, primaryId: string): void\n applyExactLink(row: EffectiveLinkSnapshot, projectId: string): void\n deleteExactLink(row: {\n projectId: string\n sourceTypeId: string\n sourceId: string\n linkId: string\n targetTypeId: string\n targetId: string\n }): void\n visitExactLinks(projectId: string, visit: (row: ObjectLinkRow) => void): void\n visitExactScopeLinks(\n projectId: string,\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n visit: (row: ObjectLinkRow) => void\n ): void\n}\n\nconst materializerAdapters = new WeakMap<InMemoryObjectStorage, InMemoryObjectMaterializerAdapter>()\n\n/** @internal Exact access for the in-memory ontology provider; not exported from package barrels. */\nexport function getInMemoryObjectMaterializerAdapter(\n storage: InMemoryObjectStorage\n): InMemoryObjectMaterializerAdapter {\n const adapter = materializerAdapters.get(storage)\n if (!adapter) throw new Error(\"[Sixb] In-memory object materializer adapter is unavailable.\")\n return adapter\n}\n\nexport class InMemoryObjectStorage implements ObjectStorage {\n private readonly rows = new Map<string, Map<string, ObjectRow>>()\n private readonly links = new Map<string, Map<string, ObjectLinkRow>>()\n\n constructor() {\n materializerAdapters.set(this, {\n getExactObjectRow: (projectId, objectTypeId, primaryId) =>\n this.getExactObjectRow(projectId, objectTypeId, primaryId),\n getExactLinkRow: (projectId, ref) => this.getExactLinkRow(projectId, ref),\n applyExactObject: (row, projectId) => this.applyExactObject(row, projectId),\n deleteExactObject: (projectId, objectTypeId, primaryId) =>\n this.deleteExactObject(projectId, objectTypeId, primaryId),\n applyExactLink: (row, projectId) => this.applyExactLink(row, projectId),\n deleteExactLink: (row) => this.deleteExactLink(row),\n visitExactLinks: (projectId, visit) => {\n for (const bucket of this.links.values()) {\n for (const row of bucket.values()) {\n if (row.projectId === projectId) visit(structuredClone(row))\n }\n }\n },\n visitExactScopeLinks: (projectId, sourceTypeId, sourceId, linkId, visit) => {\n const bucket = this.links.get(sourceLinkBucketKey(projectId, sourceTypeId, sourceId))\n if (!bucket) return\n for (const row of bucket.values()) {\n if (row.linkId === linkId) visit(structuredClone(row))\n }\n },\n })\n }\n\n snapshot(): InMemoryObjectStorageSnapshot {\n return {\n rows: cloneObjectBuckets(this.rows),\n links: cloneLinkBuckets(this.links),\n }\n }\n\n restore(snapshot: InMemoryObjectStorageSnapshot): void {\n this.rows.clear()\n for (const [key, bucket] of cloneObjectBuckets(snapshot.rows)) {\n this.rows.set(key, bucket)\n }\n\n this.links.clear()\n for (const [key, bucket] of cloneLinkBuckets(snapshot.links)) {\n this.links.set(key, bucket)\n }\n }\n\n private getExactObjectRow(\n projectId: string,\n objectTypeId: string,\n primaryId: string\n ): ObjectRow | null {\n const row = this.rows.get(objectRowKey(projectId, objectTypeId))?.get(primaryId)\n return row ? structuredClone(row) : null\n }\n\n private getExactLinkRow(\n projectId: string,\n ref: {\n readonly sourceTypeId: string\n readonly sourceId: string\n readonly linkId: string\n readonly targetTypeId: string\n readonly targetId: string\n }\n ): ObjectLinkRow | null {\n const row = this.links\n .get(sourceLinkBucketKey(projectId, ref.sourceTypeId, ref.sourceId))\n ?.get(linkRowKey(ref.linkId, ref.targetTypeId, ref.targetId))\n return row ? structuredClone(row) : null\n }\n\n private applyExactObject(row: EffectiveObjectSnapshot, projectId: string): void {\n const bucketId = objectRowKey(projectId, row.ref.objectTypeId)\n const bucket = this.rows.get(bucketId) ?? new Map<string, ObjectRow>()\n this.rows.set(bucketId, bucket)\n bucket.set(row.ref.primaryId, {\n projectId,\n objectTypeId: row.ref.objectTypeId,\n primaryId: row.ref.primaryId,\n properties: structuredClone(row.properties) as Record<string, unknown>,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n version: row.version,\n lastCommitId: row.lastCommitId,\n })\n }\n\n private deleteExactObject(projectId: string, objectTypeId: string, primaryId: string): void {\n this.deleteObjectRow(projectId, objectTypeId, primaryId)\n }\n\n private applyExactLink(row: EffectiveLinkSnapshot, projectId: string): void {\n const bucketKey = sourceLinkBucketKey(\n projectId,\n row.ref.source.objectTypeId,\n row.ref.source.primaryId\n )\n const bucket = this.links.get(bucketKey) ?? new Map<string, ObjectLinkRow>()\n this.links.set(bucketKey, bucket)\n bucket.set(linkRowKey(row.ref.linkId, row.ref.target.objectTypeId, row.ref.target.primaryId), {\n projectId,\n sourceTypeId: row.ref.source.objectTypeId,\n sourceId: row.ref.source.primaryId,\n linkId: row.ref.linkId,\n targetTypeId: row.ref.target.objectTypeId,\n targetId: row.ref.target.primaryId,\n properties: row.properties\n ? (structuredClone(row.properties) as Record<string, unknown>)\n : undefined,\n createdAt: new Date(row.createdAt),\n updatedAt: new Date(row.updatedAt),\n lastCommitId: row.lastCommitId,\n })\n }\n\n private deleteExactLink(row: {\n projectId: string\n sourceTypeId: string\n sourceId: string\n linkId: string\n targetTypeId: string\n targetId: string\n }): void {\n this.deleteLinkRow(\n row.projectId,\n row.sourceTypeId,\n row.sourceId,\n row.linkId,\n row.targetTypeId,\n row.targetId\n )\n }\n\n queryCapabilities(): ObjectQueryCapabilities {\n return IN_MEMORY_OBJECT_QUERY_CAPABILITIES\n }\n\n createSelectedReadScope(params: {\n projectId: string\n scope: CompiledSelectedObjectReadScope\n limits: ObjectReadExecutionLimits\n }): ObjectReadStorage {\n return createInMemorySelectedReader(this.readSource(params.projectId), params, () =>\n this.queryCapabilities()\n )\n }\n\n private readSource(projectId: string): InMemoryReadSource {\n // Keep indexed access live across writes and snapshot restores; do not capture individual buckets.\n return {\n projectId,\n objectsOfType: (objectTypeId) => [\n ...(this.rows.get(objectRowKey(projectId, objectTypeId))?.values() ?? []),\n ],\n getObject: (objectTypeId, primaryId) =>\n this.rows.get(objectRowKey(projectId, objectTypeId))?.get(primaryId),\n outgoingLinks: (objectTypeId, primaryId) =>\n this.links.get(sourceLinkBucketKey(projectId, objectTypeId, primaryId))?.values() ?? [],\n allLinks: () => allLinkRows(this.links),\n }\n }\n\n async queryObjects(params: QueryObjectsInput): Promise<QueryObjectsResult> {\n const result = evaluateObjectQuery(params.query, this.readSource(params.projectId))\n return {\n objects: result.entries.map((entry) => entry.row),\n hasMore: result.hasMore,\n nextPageToken: result.nextPageToken,\n ...(params.includeTotal === false ? {} : { total: result.total }),\n }\n }\n\n async countObjects(params: CountObjectsInput): Promise<CountObjectsResult> {\n return {\n count: evaluateObjectQuery(\n stripOuterRowShape(params.query),\n this.readSource(params.projectId)\n ).total,\n }\n }\n\n async existsObjects(params: ExistsObjectsInput): Promise<ExistsObjectsResult> {\n return {\n exists:\n evaluateObjectQuery(stripOuterRowShape(params.query), this.readSource(params.projectId))\n .total > 0,\n }\n }\n\n async facetObjects(params: FacetObjectsInput): Promise<FacetObjectsResult> {\n const result = evaluateObjectQuery(\n stripOuterRowShape(params.query),\n this.readSource(params.projectId)\n )\n return {\n facets: buildFacetResults(\n result.entries.map((entry) => entry.row),\n params.facets\n ),\n }\n }\n\n /**\n * Reads return the *live* stored row by reference (the SQL providers detach a copy via JSON\n * round-trip). Callers must treat read results as immutable: mutating a returned row mutates the\n * store in place — including after the transaction that read it has completed, which escapes the\n * transaction guard. Internal call sites (e.g. the EditBatch planner) already copy before\n * mutating; external callers must do the same.\n */\n async getByPrimaryId(params: {\n projectId: string\n objectTypeId: string\n primaryId: string\n }): Promise<ObjectRow | null> {\n const bucket = this.rows.get(objectRowKey(params.projectId, params.objectTypeId))\n if (!bucket) return null\n return bucket.get(params.primaryId) ?? null\n }\n\n async selectsObjectProperties(\n params: Parameters<ObjectReadStorage[\"selectsObjectProperties\"]>[0]\n ): Promise<readonly boolean[]> {\n return params.items.map(\n (item) =>\n this.rows.get(objectRowKey(params.projectId, item.objectTypeId))?.has(item.primaryId) ??\n false\n )\n }\n\n async listLinks(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n linkId?: string\n direction?: LinkDirection\n }): Promise<readonly ObjectLinkRow[]> {\n const direction = params.direction ?? \"outgoing\"\n const matches = (row: ObjectLinkRow) => !params.linkId || row.linkId === params.linkId\n const rows: ObjectLinkRow[] = []\n\n if (direction === \"outgoing\" || direction === \"both\") {\n const bucket = this.links.get(\n sourceLinkBucketKey(params.projectId, params.objectTypeId, params.objectId)\n )\n if (bucket) rows.push(...[...bucket.values()].filter(matches))\n }\n\n if (direction === \"incoming\" || direction === \"both\") {\n for (const bucket of this.links.values()) {\n for (const row of bucket.values()) {\n if (\n row.projectId === params.projectId &&\n row.targetTypeId === params.objectTypeId &&\n row.targetId === params.objectId &&\n matches(row)\n ) {\n rows.push(row)\n }\n }\n }\n }\n\n if (direction !== \"both\") return rows\n return [...new Map(rows.map((row) => [fullLinkRowKey(row), row])).values()]\n }\n\n async getByPrimaryIdBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; primaryId: string }[]\n }): Promise<Map<ObjectBatchKey, ObjectRow>> {\n const result = new Map<ObjectBatchKey, ObjectRow>()\n for (const item of params.items) {\n const row = await this.getByPrimaryId({\n projectId: params.projectId,\n objectTypeId: item.objectTypeId,\n primaryId: item.primaryId,\n })\n if (row) {\n result.set(objectBatchKey(item.objectTypeId, item.primaryId), row)\n }\n }\n return result\n }\n\n async listLinksBatch(params: {\n projectId: string\n direction?: LinkDirection\n items: readonly { objectTypeId: string; objectId: string; linkId: string }[]\n }): Promise<Map<LinkBatchKey, ObjectLinkRow[]>> {\n return collectLinksBatch(\n {\n all: () => allLinkRows(this.links),\n outgoing: (item) =>\n this.links\n .get(sourceLinkBucketKey(params.projectId, item.objectTypeId, item.objectId))\n ?.values() ?? [],\n },\n params,\n false\n )\n }\n\n async queryLinks(params: QueryObjectLinksInput): Promise<QueryObjectLinksResult> {\n return queryLinksFrom(params, (input) => this.listLinks(input))\n }\n\n async listIncidentLinksBatch(params: {\n projectId: string\n items: readonly { objectTypeId: string; objectId: string }[]\n }): Promise<readonly ObjectLinkRow[]> {\n const deduped = new Map<string, ObjectLinkRow>()\n for (const item of params.items) {\n const rows = await this.listLinks({\n projectId: params.projectId,\n objectTypeId: item.objectTypeId,\n objectId: item.objectId,\n direction: \"both\",\n })\n for (const row of rows) {\n deduped.set(fullLinkRowKey(row), row)\n }\n }\n return [...deduped.values()]\n }\n\n async listByPrimaryIdPage(params: {\n projectId: string\n objectTypeId: string\n afterPrimaryId?: string\n limit: number\n }): Promise<{ objects: readonly ObjectRow[]; nextPrimaryId?: string }> {\n assertReconciliationPageLimit(params.limit)\n const bucket = this.rows.get(objectRowKey(params.projectId, params.objectTypeId))\n const rows = [...(bucket?.values() ?? [])]\n .filter(\n (row) => !params.afterPrimaryId || compareStrings(row.primaryId, params.afterPrimaryId) > 0\n )\n .sort((left, right) => compareStrings(left.primaryId, right.primaryId))\n .slice(0, params.limit + 1)\n const hasMore = rows.length > params.limit\n const objects = rows.slice(0, params.limit).map((row) => structuredClone(row))\n const last = objects.at(-1)\n return {\n objects,\n ...(hasMore && last ? { nextPrimaryId: last.primaryId } : {}),\n }\n }\n\n async list(params: {\n projectId: string\n objectTypeId?: string | readonly string[]\n primaryIdPrefix?: string\n primaryIdSuffix?: string\n updatedAfter?: Date\n updatedBefore?: Date\n createdAfter?: Date\n createdBefore?: Date\n limit?: number\n offset?: number\n orderBy?: \"createdAt\" | \"updatedAt\" | \"primaryId\"\n order?: \"asc\" | \"desc\"\n }): Promise<{ objects: readonly ObjectRow[]; hasMore: boolean; total: number }> {\n let allRows: ObjectRow[] = []\n\n if (params.objectTypeId) {\n const typeIds = Array.isArray(params.objectTypeId)\n ? params.objectTypeId\n : [params.objectTypeId]\n for (const typeId of typeIds) {\n const bucket = this.rows.get(objectRowKey(params.projectId, typeId))\n if (bucket) {\n allRows.push(...bucket.values())\n }\n }\n } else {\n for (const [key, bucket] of this.rows) {\n if (key.startsWith(objectRowProjectPrefix(params.projectId))) {\n allRows.push(...bucket.values())\n }\n }\n }\n\n const {\n primaryIdPrefix,\n primaryIdSuffix,\n updatedAfter,\n updatedBefore,\n createdAfter,\n createdBefore,\n } = params\n if (\n primaryIdPrefix ||\n primaryIdSuffix ||\n updatedAfter ||\n updatedBefore ||\n createdAfter ||\n createdBefore\n ) {\n allRows = allRows.filter(\n (row) =>\n (!primaryIdPrefix || row.primaryId.startsWith(primaryIdPrefix)) &&\n (!primaryIdSuffix || row.primaryId.endsWith(primaryIdSuffix)) &&\n (!updatedAfter || row.updatedAt >= updatedAfter) &&\n (!updatedBefore || row.updatedAt <= updatedBefore) &&\n (!createdAfter || row.createdAt >= createdAfter) &&\n (!createdBefore || row.createdAt <= createdBefore)\n )\n }\n\n const total = allRows.length\n\n const offset = params.offset ?? 0\n const limit = params.limit ?? 50\n if (limit === 0) return { objects: [], hasMore: offset < total, total }\n\n const orderBy = params.orderBy ?? \"updatedAt\"\n const order = params.order ?? \"desc\"\n\n allRows.sort((a, b) => {\n let comparison = 0\n switch (orderBy) {\n case \"primaryId\":\n comparison = a.primaryId.localeCompare(b.primaryId)\n break\n case \"createdAt\":\n comparison = a.createdAt.getTime() - b.createdAt.getTime()\n break\n default:\n comparison = a.updatedAt.getTime() - b.updatedAt.getTime()\n break\n }\n return order === \"desc\" ? -comparison : comparison\n })\n\n const objects = allRows.slice(offset, offset + limit)\n const hasMore = offset + limit < total\n\n return { objects, hasMore, total }\n }\n\n private deleteObjectRow(projectId: string, objectTypeId: string, primaryId: string): void {\n const bucket = this.rows.get(objectRowKey(projectId, objectTypeId))\n bucket?.delete(primaryId)\n }\n\n private deleteLinkRow(\n projectId: string,\n sourceTypeId: string,\n sourceId: string,\n linkId: string,\n targetTypeId: string,\n targetId: string\n ): void {\n const bucket = this.links.get(sourceLinkBucketKey(projectId, sourceTypeId, sourceId))\n bucket?.delete(linkRowKey(linkId, targetTypeId, targetId))\n }\n}\n\nfunction assertReconciliationPageLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error(\"Object reconciliation page limit must be a positive safe integer.\")\n }\n}\n\nfunction cloneObjectBuckets(\n rows: Map<string, Map<string, ObjectRow>>\n): Map<string, Map<string, ObjectRow>> {\n const clone = new Map<string, Map<string, ObjectRow>>()\n for (const [key, bucket] of rows) {\n clone.set(\n key,\n new Map([...bucket.entries()].map(([primaryId, row]) => [primaryId, structuredClone(row)]))\n )\n }\n return clone\n}\n\nfunction cloneLinkBuckets(\n links: Map<string, Map<string, ObjectLinkRow>>\n): Map<string, Map<string, ObjectLinkRow>> {\n const clone = new Map<string, Map<string, ObjectLinkRow>>()\n for (const [key, bucket] of links) {\n clone.set(\n key,\n new Map([...bucket.entries()].map(([linkId, row]) => [linkId, structuredClone(row)]))\n )\n }\n return clone\n}\n\nfunction* allLinkRows(\n buckets: ReadonlyMap<string, ReadonlyMap<string, ObjectLinkRow>>\n): Iterable<ObjectLinkRow> {\n for (const bucket of buckets.values()) yield* bucket.values()\n}\n",
23
- "import { MaterializationValidationError } from \"../../../materialization/errors\"\nimport type {\n LinkSlotOverride,\n OntologyMaterializationOrigin,\n} from \"../../../materialization/model\"\nimport type { OntologyCommitOriginSelector, OntologyCommitRecord } from \"../commits\"\nimport type {\n MaterializationWorkRecord,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n} from \"../materializations\"\nimport type { OntologyOutboxRecord } from \"../outbox\"\nimport type { OntologySourceRecord, StageSourceAssertion } from \"../sources\"\n\nexport interface InMemorySourceMaterialization extends OntologySourceRecord {\n readonly rowsByEntity: Map<string, StageSourceAssertion>\n readonly rootOrdinals: Map<string, number>\n readonly ordinalRoots: Map<number, string>\n}\n\nexport interface InMemoryStoredObjectOverride extends StoredObjectOverride {\n readonly projectId: string\n}\n\nexport interface InMemoryStoredLinkOverride extends StoredLinkOverride {\n readonly projectId: string\n}\n\nexport interface InMemoryStoredLinkSlotOverride extends Omit<StoredLinkSlotOverride, \"value\"> {\n readonly projectId: string\n readonly value: LinkSlotOverride\n}\n\nexport interface InMemoryOntologyState {\n readonly commitsById: Map<string, OntologyCommitRecord>\n readonly commitIdByIdempotency: Map<string, string>\n readonly commitIdByOrigin: Map<string, string>\n readonly sourceMaterializations: Map<string, InMemorySourceMaterialization>\n readonly objectOverrides: Map<string, InMemoryStoredObjectOverride>\n readonly linkOverrides: Map<string, InMemoryStoredLinkOverride>\n readonly linkSlotOverrides: Map<string, InMemoryStoredLinkSlotOverride>\n readonly outbox: Map<string, OntologyOutboxRecord>\n}\n\n/** @internal Test-only failure injection for the in-memory ontology provider. */\nexport interface InMemoryOntologyStorageTestHooks {\n readonly beforeRead?: (boundary: string) => void\n readonly beforeWrite?: (boundary: string, ordinal: number) => void\n readonly observeBuffer?: (boundary: string, rows: number) => void\n readonly observeWork?: (records: readonly MaterializationWorkRecord[]) => void\n}\n\nexport function createInMemoryOntologyState(): InMemoryOntologyState {\n return {\n commitsById: new Map(),\n commitIdByIdempotency: new Map(),\n commitIdByOrigin: new Map(),\n sourceMaterializations: new Map(),\n objectOverrides: new Map(),\n linkOverrides: new Map(),\n linkSlotOverrides: new Map(),\n outbox: new Map(),\n }\n}\n\nexport function projectEntityKey(projectId: string, entityKey: string): string {\n return JSON.stringify([projectId, entityKey])\n}\n\nexport function sourceMaterializationKey(\n projectId: string,\n sourceId: string,\n materializationId: string\n): string {\n return JSON.stringify([projectId, sourceId, materializationId])\n}\n\nexport function sourceMaterializationRecord(\n materialization: InMemorySourceMaterialization\n): OntologySourceRecord {\n const {\n rowsByEntity: _rows,\n rootOrdinals: _roots,\n ordinalRoots: _ordinals,\n ...record\n } = materialization\n return structuredClone(record)\n}\n\nexport function commitKey(projectId: string, commitId: string): string {\n return JSON.stringify([projectId, commitId])\n}\n\nexport function idempotencyKey(projectId: string, key: string): string {\n return JSON.stringify([projectId, key])\n}\n\nexport function ontologyCommitOriginSelector(\n origin: OntologyMaterializationOrigin\n): OntologyCommitOriginSelector | null {\n if (origin.kind === \"action\") return { kind: \"action\", actionRunId: origin.runId }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", projectionRunId: origin.projectionRunId }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n projectionRunId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return null\n}\n\nexport function commitOriginKey(projectId: string, origin: OntologyCommitOriginSelector): string {\n switch (origin.kind) {\n case \"action\":\n return JSON.stringify([projectId, origin.kind, origin.actionRunId])\n case \"projection\":\n return JSON.stringify([projectId, origin.kind, origin.projectionRunId])\n case \"telemetry\":\n return JSON.stringify([projectId, origin.kind, origin.projectionRunId, origin.batchOrdinal])\n }\n}\n\nexport function outboxKey(projectId: string, eventId: string): string {\n return JSON.stringify([projectId, eventId])\n}\n\nexport function cloneOntologyState(state: InMemoryOntologyState): InMemoryOntologyState {\n return structuredClone(state)\n}\n\nexport function restoreOntologyState(\n target: InMemoryOntologyState,\n snapshot: InMemoryOntologyState\n): void {\n for (const key of Object.keys(target) as (keyof InMemoryOntologyState)[]) {\n const targetMap = target[key] as Map<unknown, unknown>\n const sourceMap = structuredClone(snapshot[key]) as Map<unknown, unknown>\n targetMap.clear()\n for (const [entryKey, value] of sourceMap) targetMap.set(entryKey, value)\n }\n}\n\n/** Insert `value` into a sorted, size-bounded accumulator, dropping the largest entry past `limit`. */\nexport function insertBounded<T>(\n values: T[],\n value: T,\n limit: number,\n compare: (left: T, right: T) => number\n): void {\n let index = values.findIndex((candidate) => compare(value, candidate) < 0)\n if (index < 0) index = values.length\n values.splice(index, 0, value)\n if (values.length > limit) values.pop()\n}\n\nexport function assertNonblank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be nonblank.`)\n }\n}\n\nexport function assertTimestamp(value: string, label: string): number {\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {\n throw new MaterializationValidationError(`${label} must be a canonical UTC timestamp.`)\n }\n return milliseconds\n}\n",
23
+ "import { MaterializationValidationError } from \"../../../materialization/errors\"\nimport type {\n LinkSlotOverride,\n OntologyMaterializationOrigin,\n ProjectionEntityRef,\n} from \"../../../materialization/model\"\nimport type { OntologyCommitOriginSelector, OntologyCommitRecord } from \"../commits\"\nimport type {\n MaterializationWorkRecord,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n} from \"../materializations\"\nimport type { OntologyOutboxRecord } from \"../outbox\"\nimport type {\n OntologySourceRecord,\n StageSourceAssertion,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n} from \"../sources\"\n\nexport interface InMemorySourceRoot {\n readonly root: ProjectionEntityRef\n readonly stagingOrdinal: number\n readonly deleted: boolean\n readonly entityKeys: Set<string>\n active: boolean\n retiredAt: string | null\n}\n\nexport interface InMemorySourceMaterialization extends OntologySourceRecord {\n readonly roots: Map<string, InMemorySourceRoot>\n readonly rowsByEntity: Map<string, StageSourceAssertion>\n readonly rootOrdinals: Map<string, number>\n readonly ordinalRoots: Map<number, string>\n}\n\nexport interface InMemoryStoredObjectOverride extends StoredObjectOverride {\n readonly projectId: string\n}\n\nexport interface InMemoryStoredLinkOverride extends StoredLinkOverride {\n readonly projectId: string\n}\n\nexport interface InMemoryStoredLinkSlotOverride extends Omit<StoredLinkSlotOverride, \"value\"> {\n readonly projectId: string\n readonly value: LinkSlotOverride\n}\n\nexport interface InMemoryOntologyState {\n readonly commitsById: Map<string, OntologyCommitRecord>\n readonly commitIdByIdempotency: Map<string, string>\n readonly commitIdByOrigin: Map<string, string>\n readonly sourceMaterializations: Map<string, InMemorySourceMaterialization>\n readonly activeSourceHeads: Map<string, string>\n readonly activeSourceRoots: Map<string, Map<string, string>>\n readonly activeSourceRows: Map<string, Map<string, StoredSourceAssertion>>\n readonly activeSourceLinkScopes: Map<string, Map<string, StoredSourceLinkAssertion>>\n readonly objectOverrides: Map<string, InMemoryStoredObjectOverride>\n readonly linkOverrides: Map<string, InMemoryStoredLinkOverride>\n readonly linkSlotOverrides: Map<string, InMemoryStoredLinkSlotOverride>\n readonly outbox: Map<string, OntologyOutboxRecord>\n}\n\n/** @internal Test-only failure injection for the in-memory ontology provider. */\nexport interface InMemoryOntologyStorageTestHooks {\n readonly beforeRead?: (boundary: string) => void\n readonly beforeWrite?: (boundary: string, ordinal: number) => void\n readonly observeBuffer?: (boundary: string, rows: number) => void\n readonly observeWork?: (records: readonly MaterializationWorkRecord[]) => void\n}\n\nexport function createInMemoryOntologyState(): InMemoryOntologyState {\n return {\n commitsById: new Map(),\n commitIdByIdempotency: new Map(),\n commitIdByOrigin: new Map(),\n sourceMaterializations: new Map(),\n activeSourceHeads: new Map(),\n activeSourceRoots: new Map(),\n activeSourceRows: new Map(),\n activeSourceLinkScopes: new Map(),\n objectOverrides: new Map(),\n linkOverrides: new Map(),\n linkSlotOverrides: new Map(),\n outbox: new Map(),\n }\n}\n\nexport function projectEntityKey(projectId: string, entityKey: string): string {\n return JSON.stringify([projectId, entityKey])\n}\n\nexport function sourceMaterializationKey(\n projectId: string,\n sourceId: string,\n materializationId: string\n): string {\n return JSON.stringify([projectId, sourceId, materializationId])\n}\n\nexport function sourceMaterializationRecord(\n materialization: InMemorySourceMaterialization\n): OntologySourceRecord {\n const {\n rowsByEntity: _rows,\n rootOrdinals: _roots,\n ordinalRoots: _ordinals,\n roots: _sourceRoots,\n ...record\n } = materialization\n return structuredClone(record)\n}\n\nexport function commitKey(projectId: string, commitId: string): string {\n return JSON.stringify([projectId, commitId])\n}\n\nexport function idempotencyKey(projectId: string, key: string): string {\n return JSON.stringify([projectId, key])\n}\n\nexport function ontologyCommitOriginSelector(\n origin: OntologyMaterializationOrigin\n): OntologyCommitOriginSelector | null {\n if (origin.kind === \"action\") return { kind: \"action\", actionRunId: origin.runId }\n if (origin.kind === \"projection\") {\n return { kind: \"projection\", projectionRunId: origin.projectionRunId }\n }\n if (origin.kind === \"telemetry\" && origin.source.kind === \"projection\") {\n return {\n kind: \"telemetry\",\n projectionRunId: origin.source.projectionRunId,\n batchOrdinal: origin.source.batchOrdinal,\n }\n }\n return null\n}\n\nexport function commitOriginKey(projectId: string, origin: OntologyCommitOriginSelector): string {\n switch (origin.kind) {\n case \"action\":\n return JSON.stringify([projectId, origin.kind, origin.actionRunId])\n case \"projection\":\n return JSON.stringify([projectId, origin.kind, origin.projectionRunId])\n case \"telemetry\":\n return JSON.stringify([projectId, origin.kind, origin.projectionRunId, origin.batchOrdinal])\n }\n}\n\nexport function outboxKey(projectId: string, eventId: string): string {\n return JSON.stringify([projectId, eventId])\n}\n\nexport function cloneOntologyState(state: InMemoryOntologyState): InMemoryOntologyState {\n return structuredClone(state)\n}\n\nexport function restoreOntologyState(\n target: InMemoryOntologyState,\n snapshot: InMemoryOntologyState\n): void {\n for (const key of Object.keys(target) as (keyof InMemoryOntologyState)[]) {\n const targetMap = target[key] as Map<unknown, unknown>\n const sourceMap = structuredClone(snapshot[key]) as Map<unknown, unknown>\n targetMap.clear()\n for (const [entryKey, value] of sourceMap) targetMap.set(entryKey, value)\n }\n}\n\n/** Insert `value` into a sorted, size-bounded accumulator, dropping the largest entry past `limit`. */\nexport function insertBounded<T>(\n values: T[],\n value: T,\n limit: number,\n compare: (left: T, right: T) => number\n): void {\n let index = values.findIndex((candidate) => compare(value, candidate) < 0)\n if (index < 0) index = values.length\n values.splice(index, 0, value)\n if (values.length > limit) values.pop()\n}\n\nexport function assertNonblank(value: string, label: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new MaterializationValidationError(`${label} must be nonblank.`)\n }\n}\n\nexport function assertTimestamp(value: string, label: string): number {\n const milliseconds = Date.parse(value)\n if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {\n throw new MaterializationValidationError(`${label} must be a canonical UTC timestamp.`)\n }\n return milliseconds\n}\n",
24
24
  "import type {\n GetOntologyCommitByIdempotencyKeyInput,\n GetOntologyCommitByIdInput,\n GetOntologyCommitByOriginInput,\n ListOntologyCommitsInput,\n ListOntologyCommitsResult,\n OntologyCommitRecord,\n OntologyCommitRunSelector,\n OntologyCommitStorage,\n} from \"../commits\"\nimport {\n commitKey,\n commitOriginKey,\n type InMemoryOntologyState,\n idempotencyKey,\n} from \"./shared-state\"\n\nexport class InMemoryOntologyCommitStorage implements OntologyCommitStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n ) {}\n\n async getByIdempotencyKey(\n input: GetOntologyCommitByIdempotencyKeyInput\n ): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n const id = this.state.commitIdByIdempotency.get(\n idempotencyKey(input.projectId, input.idempotencyKey)\n )\n if (!id) return null\n return structuredClone(this.state.commitsById.get(commitKey(input.projectId, id)) ?? null)\n })\n }\n\n async getById(input: GetOntologyCommitByIdInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() =>\n structuredClone(this.state.commitsById.get(commitKey(input.projectId, input.id)) ?? null)\n )\n }\n\n async getByOrigin(input: GetOntologyCommitByOriginInput): Promise<OntologyCommitRecord | null> {\n return this.runRootOperation(() => {\n assertOriginLookup(input)\n const id = this.state.commitIdByOrigin.get(commitOriginKey(input.projectId, input.origin))\n if (!id) return null\n return structuredClone(this.state.commitsById.get(commitKey(input.projectId, id)) ?? null)\n })\n }\n\n async list(input: ListOntologyCommitsInput): Promise<ListOntologyCommitsResult> {\n return this.runRootOperation(() => {\n if (input.projectId.trim().length === 0 || input.run?.id.trim().length === 0) {\n throw new Error(\"[Sixb] Ontology commit project and run ids must be nonblank.\")\n }\n const offset = input.offset ?? 0\n const limit = input.limit ?? this.state.commitsById.size\n if (\n !Number.isSafeInteger(offset) ||\n offset < 0 ||\n !Number.isSafeInteger(limit) ||\n limit < 0\n ) {\n throw new Error(\n \"[Sixb] Ontology commit list limit and offset must be nonnegative integers.\"\n )\n }\n const direction = input.order === \"desc\" ? -1 : 1\n const commits = [...this.state.commitsById.values()]\n .filter((commit) => commit.projectId === input.projectId)\n .filter((commit) => (input.run ? commitMatchesRun(commit, input.run) : true))\n .sort((left, right) => {\n if (input.run?.kind === \"projection\") {\n const byOrdinal = projectionRunOrdinal(left) - projectionRunOrdinal(right)\n if (byOrdinal !== 0) return byOrdinal * direction\n }\n const byTime = left.committedAt.localeCompare(right.committedAt)\n if (byTime !== 0) return byTime * direction\n return left.id.localeCompare(right.id) * direction\n })\n const total = commits.length\n const page = commits.slice(offset, offset + limit).map((commit) => structuredClone(commit))\n return { commits: page, total, hasMore: offset + page.length < total }\n })\n }\n}\n\nfunction assertOriginLookup(input: GetOntologyCommitByOriginInput): void {\n if (input.projectId.trim().length === 0) {\n throw new Error(\"[Sixb] Ontology commit project id must be nonblank.\")\n }\n const runId =\n input.origin.kind === \"action\" ? input.origin.actionRunId : input.origin.projectionRunId\n if (runId.trim().length === 0) {\n throw new Error(\"[Sixb] Ontology commit origin run id must be nonblank.\")\n }\n if (\n input.origin.kind === \"telemetry\" &&\n (!Number.isSafeInteger(input.origin.batchOrdinal) || input.origin.batchOrdinal < 0)\n ) {\n throw new Error(\"[Sixb] Ontology telemetry commit batch ordinal must be nonnegative.\")\n }\n}\n\nfunction commitMatchesRun(commit: OntologyCommitRecord, run: OntologyCommitRunSelector): boolean {\n if (run.kind === \"action\") {\n return commit.origin.kind === \"action\" && commit.origin.runId === run.id\n }\n if (commit.origin.kind === \"projection\") return commit.origin.projectionRunId === run.id\n return (\n commit.origin.kind === \"telemetry\" &&\n commit.origin.source.kind === \"projection\" &&\n commit.origin.source.projectionRunId === run.id\n )\n}\n\nfunction projectionRunOrdinal(commit: OntologyCommitRecord): number {\n if (commit.origin.kind === \"telemetry\" && commit.origin.source.kind === \"projection\") {\n return commit.origin.source.batchOrdinal\n }\n return 0\n}\n",
25
25
  "import type { TelemetrySeriesRef } from \"../../materialization/model\"\nimport type { StoredTelemetryPoint } from \"../ontology/materializations\"\nimport type { TimeseriesHistoryBatchInput, TimeseriesPoint, TimeseriesStorage } from \"./types\"\n\nfunction pointKey(\n projectId: string,\n objectTypeId: string,\n objectId: string,\n propertyId: string\n): string {\n return JSON.stringify([projectId, objectTypeId, objectId, propertyId])\n}\n\nexport class InMemoryTimeseriesStorage implements TimeseriesStorage {\n // A telemetry point is uniquely identified by (series, at): one value per\n // instant per series. Re-applying the same instant is a last-write-wins\n // upsert, which makes telemetry writes idempotent under replay for free.\n private readonly pointsByKey = new Map<string, Map<number, TimeseriesPoint>>()\n\n constructor() {\n materializerAdapters.set(this, {\n getExactPoint: (projectId, series, at) => this.getExactPoint(projectId, series, at),\n listLatestForObject: (projectId, objectTypeId, objectId) =>\n this.listLatestForObject(projectId, objectTypeId, objectId),\n applyExactPoint: (projectId, point) => this.applyExactPoint(projectId, point),\n })\n }\n\n snapshot(): InMemoryTimeseriesStorageSnapshot {\n return {\n pointsByKey: structuredClone(this.pointsByKey),\n }\n }\n\n restore(snapshot: InMemoryTimeseriesStorageSnapshot): void {\n this.pointsByKey.clear()\n for (const [key, points] of structuredClone(snapshot.pointsByKey)) {\n this.pointsByKey.set(key, points)\n }\n }\n\n private getExactPoint(\n projectId: string,\n series: TelemetrySeriesRef,\n at: string\n ): TimeseriesPoint | null {\n const point =\n this.pointsByKey\n .get(\n pointKey(\n projectId,\n series.object.objectTypeId,\n series.object.primaryId,\n series.propertyId\n )\n )\n ?.get(new Date(at).getTime()) ?? null\n return point ? clonePoint(point) : null\n }\n\n private listLatestForObject(\n projectId: string,\n objectTypeId: string,\n objectId: string\n ): TimeseriesPoint[] {\n const latest: TimeseriesPoint[] = []\n for (const series of this.pointsByKey.values()) {\n let point: TimeseriesPoint | null = null\n for (const candidate of series.values()) {\n if (\n candidate.projectId !== projectId ||\n candidate.objectTypeId !== objectTypeId ||\n candidate.objectId !== objectId\n ) {\n continue\n }\n if (!point || candidate.at > point.at) point = candidate\n }\n if (point) latest.push(clonePoint(point))\n }\n return latest\n }\n\n private applyExactPoint(projectId: string, point: StoredTelemetryPoint): void {\n const key = pointKey(\n projectId,\n point.series.object.objectTypeId,\n point.series.object.primaryId,\n point.series.propertyId\n )\n const series = this.pointsByKey.get(key) ?? new Map<number, TimeseriesPoint>()\n series.set(new Date(point.at).getTime(), {\n projectId,\n objectTypeId: point.series.object.objectTypeId,\n objectId: point.series.object.primaryId,\n propertyId: point.series.propertyId,\n value: structuredClone(point.value),\n ...(point.unit !== undefined ? { unit: point.unit } : {}),\n at: new Date(point.at),\n lastCommitId: point.lastCommitId,\n })\n this.pointsByKey.set(key, series)\n }\n\n async getHistory(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n from?: Date\n to?: Date\n limit?: number\n order?: \"asc\" | \"desc\"\n }): Promise<readonly TimeseriesPoint[]> {\n const key = pointKey(params.projectId, params.objectTypeId, params.objectId, params.propertyId)\n const { from, to } = params\n let points = [...(this.pointsByKey.get(key)?.values() ?? [])]\n if (from || to) {\n points = points.filter((point) => (!from || point.at >= from) && (!to || point.at <= to))\n }\n\n points.sort((a, b) => a.at.getTime() - b.at.getTime())\n if (params.order === \"desc\") {\n points.reverse()\n }\n\n if (params.limit !== undefined) {\n points = points.slice(0, Math.max(0, params.limit))\n }\n\n return points.map(clonePoint)\n }\n\n async getHistoryBatch(input: TimeseriesHistoryBatchInput): Promise<\n readonly {\n objectTypeId: string\n objectId: string\n propertyId: string\n points: readonly TimeseriesPoint[]\n }[]\n > {\n // Start every read before yielding so one batch observes one in-memory snapshot. The SQL\n // providers get the same guarantee from their single query.\n return Promise.all(\n input.series.map(async (series) => ({\n ...series,\n points: await this.getHistory({\n projectId: input.projectId,\n objectTypeId: series.objectTypeId,\n objectId: series.objectId,\n propertyId: series.propertyId,\n from: input.from,\n to: input.to,\n limit: input.limitPerSeries,\n order: input.order,\n }),\n }))\n )\n }\n\n async getLatest(params: {\n projectId: string\n objectTypeId: string\n objectId: string\n propertyId: string\n }): Promise<TimeseriesPoint | null> {\n const series = this.pointsByKey.get(\n pointKey(params.projectId, params.objectTypeId, params.objectId, params.propertyId)\n )\n if (!series || series.size === 0) {\n return null\n }\n\n let latest: TimeseriesPoint | null = null\n for (const point of series.values()) {\n if (!latest || point.at.getTime() > latest.at.getTime()) {\n latest = point\n }\n }\n return latest ? clonePoint(latest) : null\n }\n}\n\ninterface InMemoryTimeseriesMaterializerAdapter {\n getExactPoint(projectId: string, series: TelemetrySeriesRef, at: string): TimeseriesPoint | null\n listLatestForObject(projectId: string, objectTypeId: string, objectId: string): TimeseriesPoint[]\n applyExactPoint(projectId: string, point: StoredTelemetryPoint): void\n}\n\nconst materializerAdapters = new WeakMap<\n InMemoryTimeseriesStorage,\n InMemoryTimeseriesMaterializerAdapter\n>()\n\n/** @internal Exact access for the in-memory ontology provider; not exported from package barrels. */\nexport function getInMemoryTimeseriesMaterializerAdapter(\n storage: InMemoryTimeseriesStorage\n): InMemoryTimeseriesMaterializerAdapter {\n const adapter = materializerAdapters.get(storage)\n if (!adapter) throw new Error(\"[Sixb] In-memory timeseries materializer adapter is unavailable.\")\n return adapter\n}\n\nfunction clonePoint(point: TimeseriesPoint): TimeseriesPoint {\n return {\n ...structuredClone(point),\n value: structuredClone(point.value),\n at: new Date(point.at),\n }\n}\n\nexport interface InMemoryTimeseriesStorageSnapshot {\n readonly pointsByKey: Map<string, Map<number, TimeseriesPoint>>\n}\n",
26
- "import { MaterializationConflictError } from \"../../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n} from \"../../../materialization/model\"\nimport { linkRefKey, linkRefSortKey, linkScopeSortKey } from \"../../../materialization/refs\"\nimport type { ObjectLinkRow, ObjectRow } from \"../../objects/types\"\nimport type { TimeseriesPoint } from \"../../timeseries/types\"\nimport type {\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredTelemetryPoint,\n} from \"../materializations\"\nimport type {\n StageSourceAssertion,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport type { ReplacementSessionState } from \"./materializations\"\nimport type {\n InMemoryOntologyState,\n InMemorySourceMaterialization,\n InMemoryStoredLinkOverride,\n InMemoryStoredLinkSlotOverride,\n InMemoryStoredObjectOverride,\n} from \"./shared-state\"\n\nexport function publicObjectOverride(\n value: InMemoryStoredObjectOverride | undefined\n): StoredObjectOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function publicLinkOverride(\n value: InMemoryStoredLinkOverride | undefined\n): StoredLinkOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function publicLinkSlotOverride(\n value: InMemoryStoredLinkSlotOverride | undefined\n): StoredLinkSlotOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function uniqueBy<T>(values: readonly T[], keyOf: (value: T) => string): T[] {\n return [...new Map(values.map((value) => [keyOf(value), structuredClone(value)])).values()]\n}\n\nexport function objectSnapshot(row: ObjectRow): EffectiveObjectSnapshot {\n if (!row.lastCommitId)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.objectTypeId}:${row.primaryId} lacks materializer provenance.`\n )\n return {\n ref: { objectTypeId: row.objectTypeId, primaryId: row.primaryId },\n properties: structuredClone(row.properties) as EffectiveObjectSnapshot[\"properties\"],\n version: row.version,\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n}\n\nexport function linkSnapshot(row: ObjectLinkRow): EffectiveLinkSnapshot {\n if (!row.lastCommitId)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link lacks materializer provenance.`\n )\n return {\n ref: linkRef(row),\n ...(row.properties\n ? { properties: structuredClone(row.properties) as EffectiveLinkSnapshot[\"properties\"] }\n : {}),\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n}\n\nexport function linkRef(row: ObjectLinkRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.sourceTypeId, primaryId: row.sourceId },\n linkId: row.linkId,\n target: { objectTypeId: row.targetTypeId, primaryId: row.targetId },\n }\n}\n\nexport function storedPoint(point: TimeseriesPoint): StoredTelemetryPoint {\n if (!point.lastCommitId)\n throw new MaterializationConflictError(\n \"timeseries-point\",\n \"Telemetry point lacks materializer provenance.\"\n )\n return {\n series: {\n object: { objectTypeId: point.objectTypeId, primaryId: point.objectId },\n propertyId: point.propertyId,\n },\n value: structuredClone(point.value) as StoredTelemetryPoint[\"value\"],\n ...(point.unit !== undefined ? { unit: point.unit } : {}),\n at: point.at.toISOString(),\n lastCommitId: point.lastCommitId,\n }\n}\n\nexport function findActiveSourceMaterialization(\n state: InMemoryOntologyState,\n projectId: string,\n sourceId: string\n): InMemorySourceMaterialization | undefined {\n let active: InMemorySourceMaterialization | undefined\n for (const materialization of state.sourceMaterializations.values()) {\n if (\n materialization.projectId !== projectId ||\n materialization.source.projectionId !== sourceId ||\n materialization.status !== \"active\"\n ) {\n continue\n }\n if (active) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Source '${sourceId}' has more than one active materialization.`\n )\n }\n active = materialization\n }\n return active\n}\n\nexport function storedSource(\n sourceId: string,\n materializationId: string,\n row: StageSourceAssertion\n): StoredSourceAssertion {\n return {\n source: { projectionId: sourceId },\n materializationId,\n root: structuredClone(row.root),\n assertion: structuredClone(row.assertion),\n stagingOrdinal: row.stagingOrdinal,\n } as StoredSourceAssertion\n}\n\nexport function storedSourceObject(\n sourceId: string,\n materializationId: string | undefined,\n row: StageSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n if (!materializationId || !row || row.assertion.kind !== \"object\") return null\n return storedSource(sourceId, materializationId, row) as StoredSourceObjectAssertion\n}\n\nexport function storedSourceLink(\n sourceId: string,\n materializationId: string | undefined,\n row: StageSourceAssertion | undefined\n): StoredSourceLinkAssertion | null {\n if (!materializationId || !row || row.assertion.kind !== \"link\") return null\n return storedSource(sourceId, materializationId, row) as StoredSourceLinkAssertion\n}\n\nexport function addReplacementLink(\n replacement: ReplacementSessionState,\n ref: OntologyLinkRef,\n diffRequired: boolean\n): void {\n const key = linkRefKey(ref)\n const existing = replacement.links.get(key)\n if (existing) {\n existing.diffRequired ||= diffRequired\n if (diffRequired) replacement.affectedScopes.add(linkScopeSortKey(ref.source, ref.linkId))\n return\n }\n replacement.links.set(key, {\n ref: structuredClone(ref),\n sortKey: linkRefSortKey(ref),\n diffRequired,\n })\n if (diffRequired) replacement.affectedScopes.add(linkScopeSortKey(ref.source, ref.linkId))\n}\n",
26
+ "import { MaterializationConflictError } from \"../../../materialization/errors\"\nimport type {\n EffectiveLinkSnapshot,\n EffectiveObjectSnapshot,\n OntologyLinkRef,\n} from \"../../../materialization/model\"\nimport { linkRefKey, linkRefSortKey, linkScopeSortKey } from \"../../../materialization/refs\"\nimport type { ObjectLinkRow, ObjectRow } from \"../../objects/types\"\nimport type { TimeseriesPoint } from \"../../timeseries/types\"\nimport type {\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n StoredTelemetryPoint,\n} from \"../materializations\"\nimport type {\n StageSourceAssertion,\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport type { ReplacementSessionState } from \"./materializations\"\nimport type {\n InMemoryOntologyState,\n InMemorySourceMaterialization,\n InMemoryStoredLinkOverride,\n InMemoryStoredLinkSlotOverride,\n InMemoryStoredObjectOverride,\n} from \"./shared-state\"\nimport { projectEntityKey, sourceMaterializationKey } from \"./shared-state\"\n\nexport function publicObjectOverride(\n value: InMemoryStoredObjectOverride | undefined\n): StoredObjectOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function publicLinkOverride(\n value: InMemoryStoredLinkOverride | undefined\n): StoredLinkOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function publicLinkSlotOverride(\n value: InMemoryStoredLinkSlotOverride | undefined\n): StoredLinkSlotOverride | null {\n if (!value) return null\n const { projectId: _, ...stored } = value\n return stored\n}\n\nexport function uniqueBy<T>(values: readonly T[], keyOf: (value: T) => string): T[] {\n return [...new Map(values.map((value) => [keyOf(value), structuredClone(value)])).values()]\n}\n\nexport function objectSnapshot(row: ObjectRow): EffectiveObjectSnapshot {\n if (!row.lastCommitId)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective object ${row.objectTypeId}:${row.primaryId} lacks materializer provenance.`\n )\n return {\n ref: { objectTypeId: row.objectTypeId, primaryId: row.primaryId },\n properties: structuredClone(row.properties) as EffectiveObjectSnapshot[\"properties\"],\n version: row.version,\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n}\n\nexport function linkSnapshot(row: ObjectLinkRow): EffectiveLinkSnapshot {\n if (!row.lastCommitId)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Effective link lacks materializer provenance.`\n )\n return {\n ref: linkRef(row),\n ...(row.properties\n ? { properties: structuredClone(row.properties) as EffectiveLinkSnapshot[\"properties\"] }\n : {}),\n createdAt: row.createdAt.toISOString(),\n updatedAt: row.updatedAt.toISOString(),\n lastCommitId: row.lastCommitId,\n }\n}\n\nexport function linkRef(row: ObjectLinkRow): OntologyLinkRef {\n return {\n source: { objectTypeId: row.sourceTypeId, primaryId: row.sourceId },\n linkId: row.linkId,\n target: { objectTypeId: row.targetTypeId, primaryId: row.targetId },\n }\n}\n\nexport function storedPoint(point: TimeseriesPoint): StoredTelemetryPoint {\n if (!point.lastCommitId)\n throw new MaterializationConflictError(\n \"timeseries-point\",\n \"Telemetry point lacks materializer provenance.\"\n )\n return {\n series: {\n object: { objectTypeId: point.objectTypeId, primaryId: point.objectId },\n propertyId: point.propertyId,\n },\n value: structuredClone(point.value) as StoredTelemetryPoint[\"value\"],\n ...(point.unit !== undefined ? { unit: point.unit } : {}),\n at: point.at.toISOString(),\n lastCommitId: point.lastCommitId,\n }\n}\n\nexport function findActiveSourceMaterialization(\n state: InMemoryOntologyState,\n projectId: string,\n sourceId: string\n): InMemorySourceMaterialization | undefined {\n const id = state.activeSourceHeads.get(projectEntityKey(projectId, sourceId))\n return id\n ? state.sourceMaterializations.get(sourceMaterializationKey(projectId, sourceId, id))\n : undefined\n}\n\nexport function storedSource(\n sourceId: string,\n materializationId: string,\n row: StageSourceAssertion\n): StoredSourceAssertion {\n return {\n source: { projectionId: sourceId },\n materializationId,\n root: structuredClone(row.root),\n assertion: structuredClone(row.assertion),\n stagingOrdinal: row.stagingOrdinal,\n } as StoredSourceAssertion\n}\n\nexport function storedSourceObject(\n sourceId: string,\n materializationId: string | undefined,\n row: StageSourceAssertion | undefined\n): StoredSourceObjectAssertion | null {\n if (!materializationId || !row || row.assertion.kind !== \"object\") return null\n return storedSource(sourceId, materializationId, row) as StoredSourceObjectAssertion\n}\n\nexport function storedSourceLink(\n sourceId: string,\n materializationId: string | undefined,\n row: StageSourceAssertion | undefined\n): StoredSourceLinkAssertion | null {\n if (!materializationId || !row || row.assertion.kind !== \"link\") return null\n return storedSource(sourceId, materializationId, row) as StoredSourceLinkAssertion\n}\n\nexport function addReplacementLink(\n replacement: ReplacementSessionState,\n ref: OntologyLinkRef,\n diffRequired: boolean\n): void {\n const key = linkRefKey(ref)\n const existing = replacement.links.get(key)\n if (existing) {\n existing.diffRequired ||= diffRequired\n if (diffRequired) replacement.affectedScopes.add(linkScopeSortKey(ref.source, ref.linkId))\n return\n }\n replacement.links.set(key, {\n ref: structuredClone(ref),\n sortKey: linkRefSortKey(ref),\n diffRequired,\n })\n if (diffRequired) replacement.affectedScopes.add(linkScopeSortKey(ref.source, ref.linkId))\n}\n",
27
27
  "import { stableJsonStringify } from \"../../../json\"\nimport { MaterializationConflictError } from \"../../../materialization/errors\"\nimport type {\n MaterializationPlanChunk,\n StoredLinkOverride,\n StoredLinkSlotOverride,\n StoredObjectOverride,\n} from \"../materializations\"\nimport { invalidCorrelation, materializationPlanItems } from \"../provider-work\"\nimport type { SessionState } from \"./materializations\"\n\nexport * from \"../provider-work\"\n\nexport function assertChunkSequence(session: SessionState, chunk: MaterializationPlanChunk): void {\n const planItems = materializationPlanItems(chunk)\n const applyStream = session.workStreams.apply\n const appliedStart = session.appliedPlanItems.length\n if (\n planItems.length > 0 &&\n (!applyStream.started || appliedStart + planItems.length > applyStream.emittedCount)\n ) {\n invalidCorrelation(\"Materialization plan items cannot be applied before they are streamed.\")\n }\n for (let offset = 0; offset < planItems.length; offset += 1) {\n const expected = session.applyWork[appliedStart + offset]?.item\n if (!expected || stableJsonStringify(planItems[offset]) !== stableJsonStringify(expected)) {\n invalidCorrelation(\"Materialization plan items must be applied in exact streamed order.\")\n }\n }\n\n const eventStream = session.workStreams.event\n const appliedOutboxCount = session.outboxEnvelopes.size\n if (\n chunk.outbox.length > 0 &&\n (!eventStream.started || appliedOutboxCount + chunk.outbox.length > eventStream.emittedCount)\n ) {\n invalidCorrelation(\"Materialization events cannot be applied before they are streamed.\")\n }\n for (let offset = 0; offset < chunk.outbox.length; offset += 1) {\n const expected = session.eventWork[appliedOutboxCount + offset]\n const actual = chunk.outbox[offset]?.envelope\n if (!expected || !actual) {\n invalidCorrelation(\"Materialization outbox events must follow exact streamed order.\")\n }\n const { id: _id, commitOrdinal, ...actualDraft } = actual\n if (\n commitOrdinal !== appliedOutboxCount + offset ||\n stableJsonStringify(actualDraft) !== stableJsonStringify(expected.draft)\n ) {\n invalidCorrelation(\"Materialization outbox events must follow exact streamed order.\")\n }\n }\n}\n\nexport function assertLastCommit(\n value: StoredObjectOverride | StoredLinkOverride | StoredLinkSlotOverride | undefined,\n expected: string | null,\n label: string\n): void {\n if ((value?.lastCommitId ?? null) !== expected) {\n throw new MaterializationConflictError(\"effective-state\", `Expected ${label} changed.`)\n }\n}\n",
28
28
  "import { stableJsonStringify } from \"../../../json\"\nimport { assertPinnedDatasetWatermark } from \"../../../materialization/dataset-watermark\"\nimport { MaterializationConflictError } from \"../../../materialization/errors\"\nimport { createEventId } from \"../../../materialization/identity\"\nimport type {\n EffectiveChangeCounts,\n OntologyObjectRef,\n PinnedDatasetVersion,\n TelemetryCommitResult,\n} from \"../../../materialization/model\"\nimport { linkRefSortKey } from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { MaterializationCardinalityOccupantWorkRecord } from \"../materializations\"\nimport type { SessionState } from \"./materializations\"\nimport { findActiveSourceMaterialization, linkRef } from \"./materializations-state\"\nimport { compareEventWork, invalidCorrelation } from \"./materializations-work\"\nimport { type InMemoryOntologyState, outboxKey, sourceMaterializationKey } from \"./shared-state\"\n\nexport function assertFinalizationCorrelations(\n session: SessionState,\n finalization: import(\"../materializations\").MaterializationPlanFinalization,\n state: InMemoryOntologyState,\n objects: InMemoryObjectStorage\n): void {\n const { commit } = session.header\n const { result, sourceActivations } = finalization\n if (\n result.commitId !== commit.id ||\n result.kind !== commit.intent.kind ||\n result.committedAt !== commit.committedAt ||\n result.created !== true ||\n !Number.isSafeInteger(result.eventCount) ||\n result.eventCount < 0 ||\n result.eventCount !== session.outboxEnvelopes.size\n ) {\n invalidCorrelation(\"Materialization result does not correlate with its commit intent.\")\n }\n for (let ordinal = 0; ordinal < result.eventCount; ordinal += 1) {\n if (!session.outboxEnvelopes.has(ordinal)) {\n invalidCorrelation(\"Outbox event ordinals must be contiguous from zero.\")\n }\n }\n\n if (commit.intent.kind === \"edit\") {\n if (result.kind !== \"edit\" || result.outcomes.length !== commit.intent.operationCount) {\n invalidCorrelation(\"Edit result does not correlate with its operation count.\")\n }\n if (sourceActivations.length !== 0) {\n invalidCorrelation(\"Edit materialization cannot activate a source materialization.\")\n }\n } else if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || sourceActivations.length !== 1) {\n invalidCorrelation(\"Projection result requires exactly one correlated source activation.\")\n }\n } else if (result.kind !== \"telemetry\" || sourceActivations.length !== 0) {\n invalidCorrelation(\"Telemetry result does not correlate with its point intent.\")\n }\n\n for (const activation of sourceActivations) {\n assertSourceActivationCorrelation(activation, session, state)\n }\n if (sourceActivations[0]) {\n assertReplacementFullyStreamed(session, sourceActivations[0])\n }\n assertFinalizedWork(session, state, objects)\n if (commit.intent.kind === \"projection\") {\n if (result.kind !== \"projection\" || !projectionCountsCorrelate(session, result.counts)) {\n invalidCorrelation(\"Projection result counts do not correlate with finalized work.\")\n }\n } else if (\n commit.intent.kind === \"telemetry\" &&\n (result.kind !== \"telemetry\" ||\n !telemetryCountsCorrelate(session, commit.intent.pointCount, result))\n ) {\n invalidCorrelation(\"Telemetry result counts do not correlate with finalized work.\")\n }\n}\n\nfunction projectionCountsCorrelate(session: SessionState, actual: EffectiveChangeCounts): boolean {\n const expected = deriveExpectedProjectionCounts(session)\n if (expected === null) return false\n\n return effectiveChangeCountsMatch(actual, expected)\n}\n\ninterface ClassifiedProjectionCounts {\n objects: number\n links: number\n}\n\ninterface AppliedProjectionChangeCounts {\n objectsCreated: number\n objectsUpdated: number\n objectsDeleted: number\n linksCreated: number\n linksUpdated: number\n linksDeleted: number\n}\n\nconst effectiveChangeCountKeys = [\n \"objectsCreated\",\n \"objectsUpdated\",\n \"objectsDeleted\",\n \"objectsUnchanged\",\n \"linksCreated\",\n \"linksUpdated\",\n \"linksDeleted\",\n \"linksUnchanged\",\n] as const satisfies readonly (keyof EffectiveChangeCounts)[]\n\nfunction deriveExpectedProjectionCounts(session: SessionState): EffectiveChangeCounts | null {\n const classified = countClassifiedProjectionEntities(session)\n const applied = countAppliedProjectionChanges(session)\n const objectsUnchanged = remainingClassifiedCount(\n classified.objects,\n applied.objectsCreated,\n applied.objectsUpdated,\n applied.objectsDeleted\n )\n const linksUnchanged = remainingClassifiedCount(\n classified.links,\n applied.linksCreated,\n applied.linksUpdated,\n applied.linksDeleted\n )\n\n if (objectsUnchanged < 0 || linksUnchanged < 0) return null\n\n return { ...applied, objectsUnchanged, linksUnchanged }\n}\n\nfunction countClassifiedProjectionEntities(session: SessionState): ClassifiedProjectionCounts {\n const counts = { objects: 0, links: 0 }\n\n for (const record of session.work.values()) {\n if (record.kind !== \"classification\") continue\n\n if (record.entityKind === \"object\") counts.objects += 1\n if (record.entityKind === \"link\") counts.links += 1\n }\n\n return counts\n}\n\nfunction countAppliedProjectionChanges(session: SessionState): AppliedProjectionChangeCounts {\n const counts: AppliedProjectionChangeCounts = {\n objectsCreated: 0,\n objectsUpdated: 0,\n objectsDeleted: 0,\n linksCreated: 0,\n linksUpdated: 0,\n linksDeleted: 0,\n }\n\n for (const work of session.applyWork) {\n const { item } = work\n\n switch (item.kind) {\n case \"object-upsert\":\n if (item.value.expected.exists) counts.objectsUpdated += 1\n else counts.objectsCreated += 1\n break\n case \"object-delete\":\n counts.objectsDeleted += 1\n break\n case \"link-upsert\":\n if (item.value.expected.exists) counts.linksUpdated += 1\n else counts.linksCreated += 1\n break\n case \"link-delete\":\n counts.linksDeleted += 1\n break\n }\n }\n\n return counts\n}\n\nfunction remainingClassifiedCount(\n classified: number,\n created: number,\n updated: number,\n deleted: number\n): number {\n return classified - created - updated - deleted\n}\n\nfunction effectiveChangeCountsMatch(\n actual: EffectiveChangeCounts,\n expected: EffectiveChangeCounts\n): boolean {\n return effectiveChangeCountKeys.every((key) => {\n const count = actual[key]\n return Number.isSafeInteger(count) && count >= 0 && count === expected[key]\n })\n}\n\nfunction telemetryCountsCorrelate(\n session: SessionState,\n pointCount: number,\n actual: TelemetryCommitResult\n): boolean {\n let pointsCreated = 0\n let pointsUpdated = 0\n let latestObjectsChanged = 0\n for (const work of session.applyWork) {\n if (work.item.kind === \"point-upsert\") {\n if (work.item.value.expected.lastCommitId === null) pointsCreated += 1\n else pointsUpdated += 1\n } else if (work.item.kind === \"object-upsert\") {\n latestObjectsChanged += 1\n }\n }\n const expected = {\n pointsCreated,\n pointsUpdated,\n pointsUnchanged: pointCount - pointsCreated - pointsUpdated,\n latestObjectsChanged,\n }\n return (\n expected.pointsUnchanged >= 0 &&\n (Object.keys(expected) as (keyof typeof expected)[]).every(\n (key) =>\n Number.isSafeInteger(actual[key]) && actual[key] >= 0 && actual[key] === expected[key]\n )\n )\n}\n\nfunction assertSourceActivationCorrelation(\n activation: import(\"../materializations\").SourceActivationWrite,\n session: SessionState,\n state: InMemoryOntologyState\n): void {\n const { header } = session\n const { commit } = header\n if (\n commit.intent.kind !== \"projection\" ||\n commit.origin.kind !== \"projection\" ||\n activation.source.projectionId !== commit.intent.source.projectionId ||\n activation.source.projectionId !== commit.origin.projectionId ||\n activation.execution.projectionRunId !== commit.origin.projectionRunId ||\n activation.protocol !== \"replacement\" ||\n stableJsonStringify(activation.datasetVersion) !==\n stableJsonStringify(commit.intent.datasetVersion) ||\n activation.projectionRevision !== commit.projectionRevision ||\n activation.ownershipHash !== commit.ownershipHash ||\n activation.ontologyRevision !== commit.ontologyRevision ||\n activation.lastCommitId !== commit.id ||\n activation.updatedAt !== commit.committedAt ||\n !header.expected.sources.some(\n (expected) => stableJsonStringify(expected) === stableJsonStringify(activation.expected)\n )\n ) {\n invalidCorrelation(\"Source activation does not correlate with its projection commit.\")\n }\n const candidate = state.sourceMaterializations.get(\n sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n }\n if (\n candidate.projectionRunId !== activation.execution.projectionRunId ||\n candidate.executionToken !== activation.execution.executionToken ||\n candidate.projectionKind !== activation.projectionKind ||\n candidate.protocol !== activation.protocol ||\n stableJsonStringify(candidate.datasetVersion) !==\n stableJsonStringify(activation.datasetVersion) ||\n candidate.projectionRevision !== activation.projectionRevision ||\n candidate.ownershipHash !== activation.ownershipHash ||\n candidate.ontologyRevision !== activation.ontologyRevision\n ) {\n invalidCorrelation(\"Source activation does not match its ready candidate identity.\")\n }\n if (candidate.readyAt === null) {\n invalidCorrelation(\"Source activation candidate has no ready timestamp.\")\n }\n assertTimestampNotBefore(\n activation.updatedAt,\n candidate.readyAt,\n \"Source activation cannot precede candidate readiness.\"\n )\n const previous = findActiveSourceMaterialization(\n state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n assertSourceDatasetWatermark(previous.datasetVersion, activation.datasetVersion)\n assertTimestampNotBefore(\n activation.updatedAt,\n previous.updatedAt,\n \"Source activation cannot precede the active materialization update.\"\n )\n }\n}\n\nfunction assertSourceDatasetWatermark(\n active: PinnedDatasetVersion,\n next: PinnedDatasetVersion\n): void {\n assertPinnedDatasetWatermark(active, next, \"Source activation\")\n}\n\nfunction assertFinalizedWork(\n session: SessionState,\n state: InMemoryOntologyState,\n objects: InMemoryObjectStorage\n): void {\n const expectedPlanItems = session.applyWork.map((record) => stableJsonStringify(record.item))\n const appliedPlanItems = session.appliedPlanItems\n if (expectedPlanItems.length > 0 && !session.workStreams.apply.completed) {\n invalidCorrelation(\"Materialization plan work was not fully streamed.\")\n }\n if (stableJsonStringify(appliedPlanItems) !== stableJsonStringify(expectedPlanItems)) {\n invalidCorrelation(\"Materialization plan work was not applied exactly once.\")\n }\n if (session.cardinalityWork.length > 0 && !session.workStreams.cardinality.completed) {\n invalidCorrelation(\"Materialization cardinality work was not fully validated.\")\n }\n assertFinalCardinality(session.cardinalityWork, session.header.commit.projectId, objects)\n if (session.header.commit.intent.kind === \"telemetry\") {\n const pointKeys = classificationKeys(session, \"point\")\n if (pointKeys.length !== session.header.commit.intent.pointCount) {\n invalidCorrelation(\n \"Telemetry point classification coverage does not match the commit intent.\"\n )\n }\n }\n\n const expectedEvents = [...session.eventWork].sort(compareEventWork)\n if (expectedEvents.length > 0 && !session.workStreams.event.completed) {\n invalidCorrelation(\"Materialization event work was not fully drained.\")\n }\n if (session.outboxEnvelopes.size !== expectedEvents.length) {\n invalidCorrelation(\"Materialization event work was not fully written to the outbox.\")\n }\n for (let ordinal = 0; ordinal < expectedEvents.length; ordinal += 1) {\n const expected = expectedEvents[ordinal]\n const actual = session.outboxEnvelopes.get(ordinal)\n if (!expected || !actual) {\n invalidCorrelation(\"Materialization event work was not fully written to the outbox.\")\n }\n const { id, commitOrdinal, ...actualDraft } = actual\n if (\n commitOrdinal !== ordinal ||\n id !== createEventId(session.header.commit.projectId, session.header.commit.id, ordinal) ||\n stableJsonStringify(actualDraft) !== stableJsonStringify(expected.draft)\n ) {\n invalidCorrelation(\"Materialization outbox event does not match its staged event work.\")\n }\n const persisted = state.outbox.get(outboxKey(session.header.commit.projectId, actual.id))\n if (!persisted || stableJsonStringify(persisted.envelope) !== stableJsonStringify(actual)) {\n invalidCorrelation(\"Materialization outbox event was not persisted.\")\n }\n }\n}\n\nfunction assertFinalCardinality(\n records: readonly MaterializationCardinalityOccupantWorkRecord[],\n projectId: string,\n objects: InMemoryObjectStorage\n): void {\n const effectiveOccupants = records.filter((record) => record.view === \"effective\")\n const scopes = new Map<\n string,\n {\n readonly source: OntologyObjectRef\n readonly linkId: string\n readonly occupiedLinkKeys: Set<string>\n }\n >()\n let currentScope: string | null = null\n let occupiedCount = 0\n for (const record of effectiveOccupants) {\n if (record.scopeSortKey !== currentScope) {\n currentScope = record.scopeSortKey\n occupiedCount = 0\n }\n const scope = scopes.get(record.scopeSortKey) ?? {\n source: structuredClone(record.ref.source),\n linkId: record.ref.linkId,\n occupiedLinkKeys: new Set<string>(),\n }\n scopes.set(record.scopeSortKey, scope)\n if (record.occupied) {\n occupiedCount += 1\n scope.occupiedLinkKeys.add(record.linkSortKey)\n if (occupiedCount > 1) {\n invalidCorrelation(\"Materialization cardinality work violates cardinality-one.\")\n }\n }\n }\n\n const adapter = getInMemoryObjectMaterializerAdapter(objects)\n for (const scope of scopes.values()) {\n const effectiveLinkKeys: string[] = []\n adapter.visitExactScopeLinks(\n projectId,\n scope.source.objectTypeId,\n scope.source.primaryId,\n scope.linkId,\n (row) => effectiveLinkKeys.push(linkRefSortKey(linkRef(row)))\n )\n effectiveLinkKeys.sort()\n const occupiedLinkKeys = [...scope.occupiedLinkKeys].sort()\n if (stableJsonStringify(effectiveLinkKeys) !== stableJsonStringify(occupiedLinkKeys)) {\n invalidCorrelation(\n \"Materialization cardinality work does not match the final effective link scope.\"\n )\n }\n }\n}\n\nfunction assertReplacementFullyStreamed(\n session: SessionState,\n activation: import(\"../materializations\").SourceActivationWrite\n): void {\n const replacement = session.replacement\n if (\n !replacement ||\n replacement.sourceId !== activation.source.projectionId ||\n replacement.candidateMaterializationId !== activation.materializationId ||\n replacement.candidate.materializationId !== activation.materializationId ||\n replacement.candidate.projectionKind !== activation.projectionKind ||\n replacement.candidate.protocol !== activation.protocol\n ) {\n invalidCorrelation(\n \"Source activation does not match the replacement candidate opened by the session.\"\n )\n }\n if (\n activation.projectionKind === \"object\" &&\n (!replacement.objectStreamCompleted || !replacement.linkStreamCompleted)\n ) {\n invalidCorrelation(\"Object projection replacement state was not fully streamed.\")\n }\n if (activation.projectionKind === \"link\" && !replacement.linkStreamCompleted) {\n invalidCorrelation(\"Link projection replacement state was not fully streamed.\")\n }\n const expectedObjectKeys =\n activation.projectionKind === \"object\" ? [...replacement.objects.keys()].sort() : []\n const expectedLinkKeys = [...replacement.links.entries()]\n .filter(([, value]) => value.diffRequired)\n .map(([key]) => key)\n .sort()\n if (\n stableJsonStringify(classificationKeys(session, \"object\")) !==\n stableJsonStringify(expectedObjectKeys) ||\n stableJsonStringify(classificationKeys(session, \"link\")) !==\n stableJsonStringify(expectedLinkKeys) ||\n classificationKeys(session, \"point\").length > 0\n ) {\n invalidCorrelation(\n \"Projection replacement classification coverage does not match its streamed state.\"\n )\n }\n}\n\nfunction classificationKeys(\n session: SessionState,\n entityKind: import(\"../materializations\").MaterializationWorkEntityKind\n): string[] {\n return [...session.work.values()]\n .filter(\n (record): record is import(\"../materializations\").MaterializationClassificationWorkRecord =>\n record.kind === \"classification\" && record.entityKind === entityKind\n )\n .map((record) => record.identityKey)\n .sort()\n}\n\nfunction assertTimestampNotBefore(value: string, minimum: string, message: string): void {\n if (Date.parse(value) < Date.parse(minimum)) invalidCorrelation(message)\n}\n",
29
- "import { stableJsonStringify } from \"../../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ExpectedLinkRevision,\n ExpectedObjectRevision,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeKey,\n linkScopeSortKey,\n objectRefKey,\n objectRefSortKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { ObjectLinkRow } from \"../../objects/types\"\nimport {\n getInMemoryTimeseriesMaterializerAdapter,\n type InMemoryTimeseriesStorage,\n} from \"../../timeseries/store\"\nimport type { OntologyCommitRecord } from \"../commits\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n ExpectedSourceRevision,\n ExpectedTimeseriesPointRevision,\n FinalizeMaterializationInput,\n MaterializationCardinalityOccupantWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectExistence,\n MaterializationObjectExistenceWorkRecord,\n MaterializationObjectState,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StoredTelemetryPoint,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"../materializations\"\nimport type { OntologyMaterializationEvent } from \"../outbox\"\nimport {\n appendScopeSnapshot,\n assertMaterializationHeader,\n finishScopeAccumulator,\n type ProviderMaterializationTransactionLifecycle,\n startScopeAccumulator,\n uniqueSorted,\n} from \"../provider\"\nimport type {\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport { assertFinalizationCorrelations } from \"./materializations-finalization\"\nimport {\n addReplacementLink,\n findActiveSourceMaterialization,\n linkRef,\n linkSnapshot,\n objectSnapshot,\n publicLinkOverride,\n publicLinkSlotOverride,\n publicObjectOverride,\n storedPoint,\n storedSource,\n storedSourceLink,\n storedSourceObject,\n uniqueBy,\n} from \"./materializations-state\"\nimport {\n assertChunkSequence,\n assertLastCommit,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./materializations-work\"\nimport {\n assertTimestamp,\n commitKey,\n commitOriginKey,\n type InMemoryOntologyState,\n type InMemoryOntologyStorageTestHooks,\n type InMemorySourceMaterialization,\n idempotencyKey,\n ontologyCommitOriginSelector,\n outboxKey,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\n\nexport interface SessionState {\n readonly providerToken: object\n readonly header: MaterializationPlanHeader\n readonly transactionToken: object\n readonly lifecycle: ProviderMaterializationTransactionLifecycle\n active: boolean\n writeOrdinal: number\n readonly work: Map<string, MaterializationWorkRecord>\n readonly workUniqueKeys: Set<string>\n readonly applyWork: MaterializationPlanWorkRecord[]\n readonly cardinalityWork: MaterializationCardinalityOccupantWorkRecord[]\n readonly eventWork: MaterializationEventWorkRecord[]\n readonly appliedPlanItems: string[]\n readonly outboxEnvelopes: Map<number, OntologyMaterializationEvent>\n readonly workStreams: Record<StreamMaterializationWorkInput[\"order\"], WorkStreamState>\n workSealed: boolean\n incidentLinksByObject: Map<string, readonly OntologyLinkRef[]> | null\n linkSlotStates: Map<string, MaterializationLinkScopeState> | null\n readonly objectExistence: Map<string, MaterializationObjectExistenceWorkRecord>\n replacement: ReplacementSessionState | null\n}\n\nexport interface WorkStreamState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport interface ReplacementObjectWork {\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n}\n\nexport interface ReplacementLinkWork {\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n diffRequired: boolean\n}\n\nexport interface ReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly previous: InMemorySourceMaterialization | undefined\n readonly candidate: InMemorySourceMaterialization\n readonly objects: Map<string, ReplacementObjectWork>\n readonly links: Map<string, ReplacementLinkWork>\n orderedObjects: ReplacementObjectWork[]\n orderedLinks: ReplacementLinkWork[] | null\n readonly affectedScopes: Set<string>\n readonly incidentObjects: Map<string, OntologyObjectRef>\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n linksExpanded: boolean\n}\n\nexport class InMemoryOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions = new WeakMap<object, SessionState>()\n private readonly liveSessions = new Set<SessionState>()\n\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly objects: InMemoryObjectStorage,\n private readonly timeseries: InMemoryTimeseriesStorage,\n private readonly getTransactionToken: () => object | null,\n private readonly getMaterializationLifecycle: () => ProviderMaterializationTransactionLifecycle | null,\n private readonly executionExists: (projectId: string, executionId: string) => Promise<boolean>,\n private readonly hooks: InMemoryOntologyStorageTestHooks = {}\n ) {}\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n const transactionToken = this.getTransactionToken()\n const lifecycle = this.getMaterializationLifecycle()\n if (!transactionToken || !lifecycle) {\n throw new MaterializationValidationError(\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n assertMaterializationHeader(input)\n if (!(await this.executionExists(input.commit.projectId, input.commit.executionId))) {\n throw new MaterializationValidationError(\n `Ontology commit execution '${input.commit.executionId}' does not exist in project '${input.commit.projectId}'.`\n )\n }\n this.assertCommitAbsent(input)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects)\n await this.assertObject(expected, input.commit.projectId)\n for (const expected of input.expected.links)\n await this.assertLink(expected, input.commit.projectId)\n const expectedScopeRevisions = new Map<string, MaterializationLinkScopeRevision>()\n for (const expected of input.expected.linkScopes) {\n const key = linkScopeSortKey(expected.source, expected.linkId)\n const current =\n expectedScopeRevisions.get(key) ??\n this.computeEffectiveLinkScope(input.commit.projectId, expected.source, expected.linkId)\n expectedScopeRevisions.set(key, current)\n if (current.fingerprint !== expected.fingerprint) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`\n )\n }\n }\n for (const expected of input.expected.points) this.assertPoint(expected, input.commit.projectId)\n\n const providerToken = {}\n const session = {\n providerToken,\n header: structuredClone(input),\n transactionToken,\n lifecycle,\n active: true,\n writeOrdinal: 0,\n work: new Map<string, MaterializationWorkRecord>(),\n workUniqueKeys: new Set<string>(),\n applyWork: [],\n cardinalityWork: [],\n eventWork: [],\n appliedPlanItems: [],\n outboxEnvelopes: new Map<number, OntologyMaterializationEvent>(),\n workStreams: {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n },\n workSealed: false,\n incidentLinksByObject: null,\n linkSlotStates: new Map(),\n objectExistence: new Map<string, MaterializationObjectExistenceWorkRecord>(),\n replacement: null,\n }\n this.sessions.set(providerToken, session)\n this.liveSessions.add(session)\n lifecycle.register(providerToken)\n return { providerToken }\n }\n\n deactivateTransaction(transactionToken: object): void {\n for (const session of this.liveSessions) {\n if (session.transactionToken !== transactionToken) continue\n this.releaseSession(session)\n }\n }\n\n /** Deactivate a session, drop its transaction-local work, and stop tracking it as live. */\n private releaseSession(session: SessionState): void {\n session.active = false\n session.work.clear()\n session.workUniqueKeys.clear()\n session.applyWork.length = 0\n session.cardinalityWork.length = 0\n session.eventWork.length = 0\n session.appliedPlanItems.length = 0\n session.outboxEnvelopes.clear()\n session.incidentLinksByObject = null\n session.linkSlotStates = null\n session.objectExistence.clear()\n session.replacement = null\n this.liveSessions.delete(session)\n session.lifecycle.complete(session.providerToken)\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n for await (const request of input.requests) {\n this.requireSession(input.session)\n this.hooks.beforeRead?.(\"state.read\")\n const objectRefs = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objectRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const objects: MaterializationObjectState[] = []\n for (const ref of objectRefs.slice(offset, offset + input.pageRows)) {\n objects.push(await this.objectState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.object.page\", objects.length)\n yield { objects, links: [], linkScopes: [], points: [] }\n }\n\n const linkRefs = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < linkRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const links: MaterializationLinkState[] = []\n for (const ref of linkRefs.slice(offset, offset + input.pageRows)) {\n links.push(await this.linkState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n const incidentRefs = this.incidentLinkRefs(session, request.incidentObjects)\n for (let offset = 0; offset < incidentRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const refs = incidentRefs.slice(offset, offset + input.pageRows)\n const links: MaterializationLinkState[] = []\n for (const ref of refs) links.push(await this.linkState(session, ref))\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.incident-link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n for (const scope of uniqueBy(request.linkScopes, (value) =>\n linkScopeSortKey(value.source, value.linkId)\n )) {\n this.requireSession(input.session)\n const value = this.linkSlotState(session, scope.source, scope.linkId)\n // Scope rows are currently only requested for cardinality-one links, so the complete member\n // set is bounded by the ontology invariant. Replacement scope enumeration is flattened in\n // its dedicated stream and never uses this shape.\n yield { objects: [], links: [], linkScopes: [value], points: [] }\n }\n\n const requestedPoints = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < requestedPoints.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const points: StoredTelemetryPoint[] = []\n for (const point of requestedPoints.slice(offset, offset + input.pageRows)) {\n const stored = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n session.header.commit.projectId,\n point.series,\n point.at\n )\n if (stored) points.push(storedPoint(stored))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.point.page\", points.length)\n if (points.length > 0) yield { objects: [], links: [], linkScopes: [], points }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n if (input.entityKind === \"object\") {\n if (replacement.candidate.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n replacement.objectStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.object\")\n for (let offset = 0; offset < replacement.orderedObjects.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedObjects.slice(offset, offset + input.pageRows)\n const objects: SourceReplacementObjectState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"object\", ref: entry.ref })\n const base = await this.objectState(session, entry.ref)\n objects.push({\n ref: base.ref,\n candidateSource: storedSourceObject(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n ),\n override: base.override,\n effective: base.effective,\n latestTelemetry: base.latestTelemetry,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.object.page\", objects.length)\n yield { objects, links: [] }\n }\n this.requireSession(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.candidate.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n replacement.linkStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.link\")\n this.expandReplacementLinks(session, replacement)\n replacement.orderedLinks ??= [...replacement.links.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n for (let offset = 0; offset < replacement.orderedLinks.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedLinks.slice(offset, offset + input.pageRows)\n const links: SourceReplacementLinkState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"link\", ref: entry.ref })\n const base = await this.linkState(session, entry.ref)\n const ownedByReplacement =\n replacement.previous?.rowsByEntity.has(key) || replacement.candidate.rowsByEntity.has(key)\n links.push({\n ref: base.ref,\n candidateSource: ownedByReplacement\n ? storedSourceLink(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n )\n : base.source,\n override: base.override,\n slotOverride: base.slotOverride,\n effective: base.effective,\n diffRequired: entry.diffRequired,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.link.page\", links.length)\n yield { objects: [], links }\n }\n this.requireSession(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n const session = this.requireSession(input.session)\n if (session.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const batchKeys = new Set<string>()\n const batchUniqueKeys = new Set<string>()\n for (const record of input.records) {\n assertWorkRecord(record, session.header)\n const uniqueKey = workUniquenessKey(record)\n if (\n batchKeys.has(record.recordKey) ||\n session.work.has(record.recordKey) ||\n batchUniqueKeys.has(uniqueKey) ||\n session.workUniqueKeys.has(uniqueKey)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate materialization work key '${record.recordKey}'.`\n )\n }\n if (\n record.kind === \"incident-object\" &&\n (!session.replacement || session.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n batchKeys.add(record.recordKey)\n batchUniqueKeys.add(uniqueKey)\n }\n const cloned = input.records.map((record) => structuredClone(record))\n this.hooks.observeWork?.(cloned)\n for (const record of cloned) {\n session.work.set(record.recordKey, record)\n session.workUniqueKeys.add(workUniquenessKey(record))\n if (record.kind === \"plan\") session.applyWork.push(record)\n if (record.kind === \"cardinality\") session.cardinalityWork.push(record)\n if (record.kind === \"event\") session.eventWork.push(record)\n if (record.kind === \"object-existence\") {\n session.objectExistence.set(objectRefKey(record.ref), record)\n }\n if (record.kind === \"incident-object\") {\n const replacement = session.replacement\n if (replacement) {\n replacement.incidentObjects.set(objectRefKey(record.ref), record.ref)\n replacement.linksExpanded = false\n replacement.orderedLinks = null\n }\n }\n }\n this.hooks.observeBuffer?.(\"work.stage\", cloned.length)\n }\n\n async *streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n if (!session.workSealed) {\n session.applyWork.sort(comparePlanWork)\n session.cardinalityWork.sort(compareCardinalityWork)\n session.eventWork.sort(compareEventWork)\n session.workSealed = true\n }\n const records =\n input.order === \"apply\"\n ? session.applyWork\n : input.order === \"cardinality\"\n ? session.cardinalityWork\n : session.eventWork\n for (let offset = 0; offset < records.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = records.slice(offset, offset + input.pageRows)\n this.hooks.observeBuffer?.(`work.${input.order}.page`, selected.length)\n stream.emittedCount = offset + selected.length\n yield { records: structuredClone(selected) }\n }\n this.requireSession(input.session)\n stream.completed = true\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.requireSession(input.session)\n const result: MaterializationObjectExistence[] = []\n for (const ref of input.refs) {\n const record = session.objectExistence.get(objectRefKey(ref))\n if (record) {\n result.push({ ref: structuredClone(record.ref), exists: record.exists })\n }\n }\n return result\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.requireSession(input.session)\n const projectId = session.header.commit.projectId\n assertPlanChunkCorrelations(input.chunk, session.header.commit)\n assertChunkSequence(session, input.chunk)\n this.hooks.observeBuffer?.(\"apply.chunk\", materializationChunkRows(input.chunk))\n const write = (boundary: string, apply: () => void): void => {\n this.hooks.beforeWrite?.(boundary, session.writeOrdinal++)\n apply()\n }\n\n for (const item of input.chunk.overrides.objects.upserts)\n write(\"override.object.upsert\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n editedAt: { ...item.editedAt },\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.objects.deletes)\n write(\"override.object.delete\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.edges.upserts)\n write(\"override.link.upsert\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.edges.deletes)\n write(\"override.link.delete\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.slots.upserts)\n write(\"override.link-slot.upsert\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.slots.deletes)\n write(\"override.link-slot.delete\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.delete(key)\n })\n\n for (const item of input.chunk.effective.linkDeletes)\n write(\"effective.link.delete\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactLink({\n projectId,\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n })\n })\n for (const item of input.chunk.effective.objectDeletes)\n write(\"effective.object.delete\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactObject(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId\n )\n })\n for (const item of input.chunk.effective.objectUpserts)\n write(\"effective.object.upsert\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactObject(item.row, projectId)\n })\n for (const item of input.chunk.effective.linkUpserts)\n write(\"effective.link.upsert\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactLink(item.row, projectId)\n })\n for (const item of input.chunk.timeseries.pointUpserts)\n write(\"timeseries.point.upsert\", () => {\n this.assertPoint(item.expected, projectId)\n getInMemoryTimeseriesMaterializerAdapter(this.timeseries).applyExactPoint(\n projectId,\n item.point\n )\n })\n for (const item of input.chunk.outbox)\n write(\"outbox.insert\", () => {\n const envelope = item.envelope\n if (envelope.projectId !== projectId || envelope.commitId !== session.header.commit.id) {\n throw new MaterializationValidationError(\n \"Outbox event does not correlate with its materialization commit.\"\n )\n }\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n assertTimestamp(envelope.occurredAt, \"Outbox event occurredAt\")\n const key = outboxKey(projectId, envelope.id)\n if (this.state.outbox.has(key)) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate outbox event '${envelope.id}'.`\n )\n }\n if (session.outboxEnvelopes.has(envelope.commitOrdinal))\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Duplicate outbox commit ordinal.\"\n )\n this.state.outbox.set(key, {\n envelope: structuredClone(envelope),\n availableAt: item.availableAt,\n attempts: 0,\n leaseId: null,\n leaseExpiresAt: null,\n publishedAt: null,\n lastFailure: null,\n createdAt: item.createdAt,\n })\n session.outboxEnvelopes.set(envelope.commitOrdinal, structuredClone(envelope))\n })\n for (const item of materializationPlanItems(input.chunk)) {\n session.appliedPlanItems.push(stableJsonStringify(item))\n }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.requireSession(input.session)\n const { commit } = session.header\n // Recheck reservations at the durable boundary: callers may open more than one session in the\n // same transaction before either one finalizes.\n this.assertCommitAbsent(session.header)\n assertFinalizationCorrelations(session, input.finalization, this.state, this.objects)\n this.hooks.beforeWrite?.(\"finalize\", session.writeOrdinal++)\n for (const activation of input.finalization.sourceActivations) {\n this.hooks.beforeWrite?.(\"source.activate\", session.writeOrdinal++)\n assertTimestamp(activation.datasetVersion.createdAt, \"Source dataset version createdAt\")\n assertTimestamp(activation.updatedAt, \"Source activation updatedAt\")\n this.assertSource(activation.expected, commit.projectId)\n const candidateKey = sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n const candidate = this.state.sourceMaterializations.get(candidateKey)\n if (!candidate || candidate.status !== \"ready\")\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n const previous = findActiveSourceMaterialization(\n this.state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n previous.projectId,\n previous.source.projectionId,\n previous.materializationId\n ),\n {\n ...previous,\n status: \"superseded\",\n executionToken: null,\n terminalAt: activation.updatedAt,\n updatedAt: activation.updatedAt,\n }\n )\n }\n this.state.sourceMaterializations.set(candidateKey, {\n ...candidate,\n status: \"active\",\n executionToken: null,\n activatedAt: activation.updatedAt,\n lastCommitId: activation.lastCommitId,\n updatedAt: activation.updatedAt,\n })\n }\n const record = {\n ...structuredClone(commit),\n result: structuredClone(input.finalization.result),\n } as OntologyCommitRecord\n this.state.commitsById.set(commitKey(commit.projectId, commit.id), record)\n this.state.commitIdByIdempotency.set(\n idempotencyKey(commit.projectId, commit.idempotencyKey),\n commit.id\n )\n const origin = ontologyCommitOriginSelector(commit.origin)\n if (origin) {\n this.state.commitIdByOrigin.set(commitOriginKey(commit.projectId, origin), commit.id)\n }\n this.releaseSession(session)\n return { commit: structuredClone(record) }\n }\n\n private requireSession(session: MaterializationSession): SessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.getTransactionToken() ||\n this.getTransactionToken() !== value.transactionToken\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n private requireReplacement(\n session: SessionState,\n input: StreamSourceReplacementStateInput\n ): ReplacementSessionState {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const sourceId = input.source.projectionId\n const candidate = this.state.sourceMaterializations.get(\n sourceMaterializationKey(projectId, sourceId, input.candidateMaterializationId)\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n const previous = findActiveSourceMaterialization(this.state, projectId, sourceId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projectionKind !== candidate.projectionKind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n const replacement: ReplacementSessionState = {\n sourceId,\n candidateMaterializationId: input.candidateMaterializationId,\n previous,\n candidate,\n objects: new Map(),\n links: new Map(),\n orderedObjects: [],\n orderedLinks: null,\n affectedScopes: new Set(),\n incidentObjects: new Map(),\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n linksExpanded: false,\n }\n for (const materialization of [previous, candidate]) {\n if (!materialization) continue\n for (const row of materialization.rowsByEntity.values()) {\n if (row.assertion.kind === \"object\") {\n const ref = row.assertion.ref\n replacement.objects.set(objectRefKey(ref), { ref, sortKey: objectRefSortKey(ref) })\n } else {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n replacement.orderedObjects = [...replacement.objects.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n session.replacement = replacement\n return replacement\n }\n\n private expandReplacementLinks(\n session: SessionState,\n replacement: ReplacementSessionState\n ): void {\n if (replacement.linksExpanded) return\n const projectId = session.header.commit.projectId\n const incident = replacement.incidentObjects\n const touchesIncident = (ref: OntologyLinkRef): boolean =>\n incident.has(objectRefKey(ref.source)) || incident.has(objectRefKey(ref.target))\n\n const adapter = getInMemoryObjectMaterializerAdapter(this.objects)\n adapter.visitExactLinks(projectId, (row) => {\n const ref = linkRef(row)\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n })\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId !== projectId) continue\n if (touchesIncident(override.ref)) addReplacementLink(replacement, override.ref, true)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n const ref = {\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n }\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n }\n for (const active of this.state.sourceMaterializations.values()) {\n if (active.projectId !== projectId || active.status !== \"active\") continue\n for (const row of active.rowsByEntity.values()) {\n if (row.assertion.kind === \"link\" && touchesIncident(row.assertion.ref)) {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n\n adapter.visitExactLinks(projectId, (row) => {\n const ref = linkRef(row)\n if (replacement.affectedScopes.has(linkScopeSortKey(ref.source, ref.linkId))) {\n addReplacementLink(replacement, ref, false)\n }\n })\n for (const override of this.state.linkSlotOverrides.values()) {\n if (\n override.projectId === projectId &&\n replacement.affectedScopes.has(linkScopeSortKey(override.ref.source, override.ref.linkId))\n ) {\n addReplacementLink(\n replacement,\n {\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n },\n false\n )\n }\n }\n replacement.linksExpanded = true\n replacement.orderedLinks = null\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n if (this.state.commitsById.has(commitKey(header.commit.projectId, header.commit.id))) {\n throw new MaterializationConflictError(\n \"idempotency\",\n `Ontology commit '${header.commit.id}' already exists.`\n )\n }\n if (\n this.state.commitIdByIdempotency.has(\n idempotencyKey(header.commit.projectId, header.commit.idempotencyKey)\n )\n ) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology idempotency key already exists.\"\n )\n }\n const origin = ontologyCommitOriginSelector(header.commit.origin)\n if (\n origin &&\n this.state.commitIdByOrigin.has(commitOriginKey(header.commit.projectId, origin))\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n }\n\n private assertSource(expected: ExpectedSourceRevision, projectId: string): void {\n const current = findActiveSourceMaterialization(\n this.state,\n projectId,\n expected.source.projectionId\n )\n if (\n (current?.materializationId ?? null) !== expected.activeMaterializationId ||\n (current?.lastCommitId ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertObject(expected: ExpectedObjectRevision, projectId: string): Promise<void> {\n this.assertObjectSync(expected, projectId)\n }\n\n private assertObjectSync(expected: ExpectedObjectRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactObjectRow(\n projectId,\n expected.ref.objectTypeId,\n expected.ref.primaryId\n )\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.version !== expected.version || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private async assertLink(expected: ExpectedLinkRevision, projectId: string): Promise<void> {\n this.assertLinkSync(expected, projectId)\n }\n\n private assertLinkSync(expected: ExpectedLinkRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: expected.ref.source.objectTypeId,\n sourceId: expected.ref.source.primaryId,\n linkId: expected.ref.linkId,\n targetTypeId: expected.ref.target.objectTypeId,\n targetId: expected.ref.target.primaryId,\n })\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private assertPoint(expected: ExpectedTimeseriesPointRevision, projectId: string): void {\n const point = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n projectId,\n expected.series,\n expected.at\n )\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n\n private async objectState(\n session: SessionState,\n ref: OntologyObjectRef\n ): Promise<MaterializationObjectState> {\n const projectId = session.header.commit.projectId\n const row = await this.objects.getByPrimaryId({\n projectId,\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveObjectSource(projectId, ref),\n override: structuredClone(\n publicObjectOverride(\n this.state.objectOverrides.get(projectEntityKey(projectId, objectRefKey(ref)))\n )\n ),\n effective: row ? objectSnapshot(row) : null,\n latestTelemetry: getInMemoryTimeseriesMaterializerAdapter(this.timeseries)\n .listLatestForObject(projectId, ref.objectTypeId, ref.primaryId)\n .map(storedPoint),\n }\n }\n\n private async linkState(\n session: SessionState,\n ref: OntologyLinkRef\n ): Promise<MaterializationLinkState> {\n const projectId = session.header.commit.projectId\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveLinkSource(projectId, ref),\n override: structuredClone(\n publicLinkOverride(\n this.state.linkOverrides.get(projectEntityKey(projectId, linkRefKey(ref)))\n )\n ),\n slotOverride: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(ref.source, ref.linkId))\n )\n )\n ),\n effective: row ? linkSnapshot(row) : null,\n }\n }\n\n private linkSlotState(\n session: SessionState,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n session.linkSlotStates ??= new Map()\n const key = linkScopeSortKey(source, linkId)\n const existing = session.linkSlotStates.get(key)\n if (existing) return structuredClone(existing)\n const computed = this.computeLinkSlotState(session.header.commit.projectId, source, linkId)\n session.linkSlotStates.set(key, computed)\n return structuredClone(computed)\n }\n\n private computeLinkSlotState(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n const value = this.computeEffectiveLinkScope(projectId, source, linkId)\n return {\n ...value,\n sourceAssertion: this.findActiveLinkScopeSource(projectId, source, linkId),\n override: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(source, linkId))\n )\n )\n ),\n }\n }\n\n private computeEffectiveLinkScope(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeRevision & Pick<MaterializationLinkScopeState, \"effective\"> {\n const rows: ObjectLinkRow[] = []\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactScopeLinks(\n projectId,\n source.objectTypeId,\n source.primaryId,\n linkId,\n (row) => rows.push(row)\n )\n rows.sort((left, right) =>\n linkRefSortKey(linkRef(left)).localeCompare(linkRefSortKey(linkRef(right)))\n )\n const accumulator = startScopeAccumulator(source, linkId)\n for (let offset = 0; offset < rows.length; offset += 1_000) {\n const page = rows.slice(offset, offset + 1_000)\n this.hooks.observeBuffer?.(\"state.link-scope.page\", page.length)\n for (const row of page) {\n appendScopeSnapshot(accumulator, linkSnapshot(row))\n }\n }\n const effective = rows.length === 1 ? linkSnapshot(rows[0]!) : null\n return {\n ...finishScopeAccumulator(accumulator),\n effective,\n }\n }\n\n private findActiveLinkScopeSource(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): StoredSourceLinkAssertion | null {\n let found: StoredSourceLinkAssertion | null = null\n for (const active of this.state.sourceMaterializations.values()) {\n if (active.projectId !== projectId || active.status !== \"active\") continue\n for (const row of active.rowsByEntity.values()) {\n if (\n row.assertion.kind !== \"link\" ||\n objectRefKey(row.assertion.ref.source) !== objectRefKey(source) ||\n row.assertion.ref.linkId !== linkId\n ) {\n continue\n }\n if (found) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active source links assert cardinality-one scope '${source.objectTypeId}.${linkId}'.`\n )\n }\n found = storedSource(\n active.source.projectionId,\n active.materializationId,\n row\n ) as StoredSourceLinkAssertion\n }\n }\n return structuredClone(found)\n }\n\n private findActiveObjectSource(\n projectId: string,\n ref: OntologyObjectRef\n ): StoredSourceObjectAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"object\", ref }))\n return found?.assertion.kind === \"object\" ? (found as StoredSourceObjectAssertion) : null\n }\n\n private findActiveLinkSource(\n projectId: string,\n ref: OntologyLinkRef\n ): StoredSourceLinkAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"link\", ref }))\n return found?.assertion.kind === \"link\" ? (found as StoredSourceLinkAssertion) : null\n }\n\n private findActiveSource(projectId: string, entityKey: string): StoredSourceAssertion | null {\n let found: StoredSourceAssertion | null = null\n for (const active of this.state.sourceMaterializations.values()) {\n if (active.projectId !== projectId || active.status !== \"active\") continue\n const row = active.rowsByEntity.get(entityKey)\n if (!row) continue\n if (found)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${entityKey}.`\n )\n found = storedSource(active.source.projectionId, active.materializationId, row)\n }\n return structuredClone(found)\n }\n\n private incidentLinkRefs(\n session: SessionState,\n objects: readonly OntologyObjectRef[]\n ): readonly OntologyLinkRef[] {\n if (objects.length === 0) return []\n session.incidentLinksByObject ??= this.buildIncidentLinkIndex(session.header.commit.projectId)\n const selected = new Map<string, OntologyLinkRef>()\n for (const object of objects) {\n for (const ref of session.incidentLinksByObject.get(objectRefKey(object)) ?? []) {\n selected.set(linkRefSortKey(ref), ref)\n }\n }\n return [...selected.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n }\n\n private buildIncidentLinkIndex(projectId: string): Map<string, readonly OntologyLinkRef[]> {\n const mutable = new Map<string, Map<string, OntologyLinkRef>>()\n const consider = (ref: OntologyLinkRef): void => {\n const sortKey = linkRefSortKey(ref)\n for (const endpoint of [ref.source, ref.target]) {\n const key = objectRefKey(endpoint)\n const links = mutable.get(key) ?? new Map<string, OntologyLinkRef>()\n links.set(sortKey, structuredClone(ref))\n mutable.set(key, links)\n }\n }\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactLinks(projectId, (row) =>\n consider(linkRef(row))\n )\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId === projectId) consider(override.ref)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n consider({\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n })\n }\n for (const active of this.state.sourceMaterializations.values()) {\n if (active.projectId !== projectId || active.status !== \"active\") continue\n for (const row of active.rowsByEntity.values()) {\n if (row.assertion.kind === \"link\") consider(row.assertion.ref)\n }\n }\n const index = new Map<string, readonly OntologyLinkRef[]>()\n for (const [objectKey, refs] of mutable) {\n index.set(\n objectKey,\n [...refs.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n )\n }\n return index\n }\n}\n",
29
+ "import { MaterializationConflictError } from \"../../../materialization/errors\"\nimport { linkScopeSortKey, projectionEntityKey } from \"../../../materialization/refs\"\nimport type { SourceActivationWrite } from \"../materializations\"\nimport type { StoredSourceAssertion, StoredSourceLinkAssertion } from \"../sources\"\nimport { storedSource } from \"./materializations-state\"\nimport {\n type InMemoryOntologyState,\n type InMemorySourceMaterialization,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\n\nexport function* previousSourceRows(\n state: InMemoryOntologyState,\n candidate: InMemorySourceMaterialization\n): Iterable<StoredSourceAssertion> {\n const sourceKey = projectEntityKey(candidate.projectId, candidate.source.projectionId)\n const active = state.activeSourceRoots.get(sourceKey)\n if (!active) return\n for (const rootKey of candidate.base ? candidate.roots.keys() : active.keys()) {\n const materializationId = active.get(rootKey)\n if (!materializationId) continue\n const materialization = state.sourceMaterializations.get(\n sourceMaterializationKey(\n candidate.projectId,\n candidate.source.projectionId,\n materializationId\n )\n )!\n for (const entityKey of materialization.roots.get(rootKey)!.entityKeys) {\n yield storedSource(\n candidate.source.projectionId,\n materializationId,\n materialization.rowsByEntity.get(entityKey)!\n )\n }\n }\n}\n\nexport function activateSourceRoots(\n state: InMemoryOntologyState,\n candidate: InMemorySourceMaterialization,\n activation: SourceActivationWrite\n): void {\n if (\n candidate.base &&\n (candidate.base.materializationId !== activation.expected.activeMaterializationId ||\n candidate.base.lastCommitId !== activation.expected.lastCommitId)\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n \"Source delta base changed before activation.\"\n )\n }\n const sourceKey = projectEntityKey(candidate.projectId, candidate.source.projectionId)\n const active = state.activeSourceRoots.get(sourceKey) ?? new Map<string, string>()\n for (const key of candidate.base ? candidate.roots.keys() : [...active.keys()]) {\n const materializationId = active.get(key)\n if (!materializationId) continue\n const old = state.sourceMaterializations.get(\n sourceMaterializationKey(\n candidate.projectId,\n candidate.source.projectionId,\n materializationId\n )\n )!\n const root = old.roots.get(key)!\n root.active = false\n root.retiredAt = activation.updatedAt\n active.delete(key)\n for (const entityKey of root.entityKeys) {\n const row = old.rowsByEntity.get(entityKey)!\n const indexKey = projectEntityKey(candidate.projectId, entityKey)\n const sources = state.activeSourceRows.get(indexKey)!\n sources.delete(candidate.source.projectionId)\n if (sources.size === 0) state.activeSourceRows.delete(indexKey)\n if (row.assertion.kind === \"link\") {\n const scopeKey = projectEntityKey(\n candidate.projectId,\n linkScopeSortKey(row.assertion.ref.source, row.assertion.ref.linkId)\n )\n const scope = state.activeSourceLinkScopes.get(scopeKey)!\n scope.delete(JSON.stringify([candidate.source.projectionId, entityKey]))\n if (scope.size === 0) state.activeSourceLinkScopes.delete(scopeKey)\n }\n }\n }\n for (const [rootKey, root] of candidate.roots) {\n root.active = !root.deleted\n root.retiredAt = root.deleted ? activation.updatedAt : null\n if (root.deleted) continue\n active.set(rootKey, candidate.materializationId)\n for (const entityKey of root.entityKeys) {\n // These are internal immutable assertions. Share their payload between indexes;\n // read methods clone returned values and transaction snapshots preserve aliases.\n const row = {\n source: candidate.source,\n materializationId: candidate.materializationId,\n ...candidate.rowsByEntity.get(entityKey)!,\n } as StoredSourceAssertion\n const indexKey = projectEntityKey(candidate.projectId, projectionEntityKey(row.assertion))\n const sources =\n state.activeSourceRows.get(indexKey) ?? new Map<string, StoredSourceAssertion>()\n sources.set(candidate.source.projectionId, row)\n state.activeSourceRows.set(indexKey, sources)\n if (row.assertion.kind === \"link\") {\n const scopeKey = projectEntityKey(\n candidate.projectId,\n linkScopeSortKey(row.assertion.ref.source, row.assertion.ref.linkId)\n )\n const scope =\n state.activeSourceLinkScopes.get(scopeKey) ?? new Map<string, StoredSourceLinkAssertion>()\n scope.set(\n JSON.stringify([candidate.source.projectionId, entityKey]),\n row as StoredSourceLinkAssertion\n )\n state.activeSourceLinkScopes.set(scopeKey, scope)\n }\n }\n }\n state.activeSourceRoots.set(sourceKey, active)\n state.activeSourceHeads.set(sourceKey, candidate.materializationId)\n}\n",
30
+ "import { stableJsonStringify } from \"../../../json\"\nimport {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ExpectedLinkRevision,\n ExpectedObjectRevision,\n OntologyLinkRef,\n OntologyObjectRef,\n} from \"../../../materialization/model\"\nimport {\n linkRefKey,\n linkRefSortKey,\n linkScopeKey,\n linkScopeSortKey,\n objectRefKey,\n objectRefSortKey,\n projectionEntityKey,\n telemetryPointKey,\n telemetryPointSortKey,\n} from \"../../../materialization/refs\"\nimport {\n getInMemoryObjectMaterializerAdapter,\n type InMemoryObjectStorage,\n} from \"../../objects/in-memory\"\nimport type { ObjectLinkRow } from \"../../objects/types\"\nimport {\n getInMemoryTimeseriesMaterializerAdapter,\n type InMemoryTimeseriesStorage,\n} from \"../../timeseries/store\"\nimport type { OntologyCommitRecord } from \"../commits\"\nimport type {\n ApplyMaterializationChunkInput,\n ApplyMaterializationResult,\n ExpectedSourceRevision,\n ExpectedTimeseriesPointRevision,\n FinalizeMaterializationInput,\n MaterializationCardinalityOccupantWorkRecord,\n MaterializationEventWorkRecord,\n MaterializationLinkScopeRevision,\n MaterializationLinkScopeState,\n MaterializationLinkState,\n MaterializationObjectExistence,\n MaterializationObjectExistenceWorkRecord,\n MaterializationObjectState,\n MaterializationPlanHeader,\n MaterializationPlanWorkRecord,\n MaterializationSession,\n MaterializationStatePage,\n MaterializationWorkPage,\n MaterializationWorkRecord,\n OntologyMaterializationStorage,\n ReadMaterializationObjectExistenceInput,\n SourceReplacementLinkState,\n SourceReplacementObjectState,\n SourceReplacementStatePage,\n StageMaterializationWorkInput,\n StoredTelemetryPoint,\n StreamMaterializationStateInput,\n StreamMaterializationWorkInput,\n StreamSourceReplacementStateInput,\n} from \"../materializations\"\nimport type { OntologyMaterializationEvent } from \"../outbox\"\nimport {\n appendScopeSnapshot,\n assertMaterializationHeader,\n finishScopeAccumulator,\n type ProviderMaterializationTransactionLifecycle,\n startScopeAccumulator,\n uniqueSorted,\n} from \"../provider\"\nimport type {\n StoredSourceAssertion,\n StoredSourceLinkAssertion,\n StoredSourceObjectAssertion,\n} from \"../sources\"\nimport { assertFinalizationCorrelations } from \"./materializations-finalization\"\nimport {\n addReplacementLink,\n findActiveSourceMaterialization,\n linkRef,\n linkSnapshot,\n objectSnapshot,\n publicLinkOverride,\n publicLinkSlotOverride,\n publicObjectOverride,\n storedPoint,\n storedSourceLink,\n storedSourceObject,\n uniqueBy,\n} from \"./materializations-state\"\nimport {\n assertChunkSequence,\n assertLastCommit,\n assertPageRows,\n assertPlanChunkCorrelations,\n assertWorkRecord,\n compareCardinalityWork,\n compareEventWork,\n comparePlanWork,\n materializationChunkRows,\n materializationPlanItems,\n workUniquenessKey,\n} from \"./materializations-work\"\nimport {\n assertTimestamp,\n commitKey,\n commitOriginKey,\n type InMemoryOntologyState,\n type InMemoryOntologyStorageTestHooks,\n type InMemorySourceMaterialization,\n idempotencyKey,\n ontologyCommitOriginSelector,\n outboxKey,\n projectEntityKey,\n sourceMaterializationKey,\n} from \"./shared-state\"\nimport { activateSourceRoots, previousSourceRows } from \"./source-roots\"\n\nexport interface SessionState {\n readonly providerToken: object\n readonly header: MaterializationPlanHeader\n readonly transactionToken: object\n readonly lifecycle: ProviderMaterializationTransactionLifecycle\n active: boolean\n writeOrdinal: number\n readonly work: Map<string, MaterializationWorkRecord>\n readonly workUniqueKeys: Set<string>\n readonly applyWork: MaterializationPlanWorkRecord[]\n readonly cardinalityWork: MaterializationCardinalityOccupantWorkRecord[]\n readonly eventWork: MaterializationEventWorkRecord[]\n readonly appliedPlanItems: string[]\n readonly outboxEnvelopes: Map<number, OntologyMaterializationEvent>\n readonly workStreams: Record<StreamMaterializationWorkInput[\"order\"], WorkStreamState>\n workSealed: boolean\n incidentLinksByObject: Map<string, readonly OntologyLinkRef[]> | null\n linkSlotStates: Map<string, MaterializationLinkScopeState> | null\n readonly objectExistence: Map<string, MaterializationObjectExistenceWorkRecord>\n replacement: ReplacementSessionState | null\n}\n\nexport interface WorkStreamState {\n started: boolean\n completed: boolean\n emittedCount: number\n}\n\nexport interface ReplacementObjectWork {\n readonly ref: OntologyObjectRef\n readonly sortKey: string\n}\n\nexport interface ReplacementLinkWork {\n readonly ref: OntologyLinkRef\n readonly sortKey: string\n diffRequired: boolean\n}\n\nexport interface ReplacementSessionState {\n readonly sourceId: string\n readonly candidateMaterializationId: string\n readonly owned: Set<string>\n readonly candidate: InMemorySourceMaterialization\n readonly objects: Map<string, ReplacementObjectWork>\n readonly links: Map<string, ReplacementLinkWork>\n orderedObjects: ReplacementObjectWork[]\n orderedLinks: ReplacementLinkWork[] | null\n readonly affectedScopes: Set<string>\n readonly incidentObjects: Map<string, OntologyObjectRef>\n objectStreamStarted: boolean\n objectStreamCompleted: boolean\n linkStreamStarted: boolean\n linkStreamCompleted: boolean\n linksExpanded: boolean\n}\n\nexport class InMemoryOntologyMaterializationStorage implements OntologyMaterializationStorage {\n private readonly sessions = new WeakMap<object, SessionState>()\n private readonly liveSessions = new Set<SessionState>()\n\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly objects: InMemoryObjectStorage,\n private readonly timeseries: InMemoryTimeseriesStorage,\n private readonly getTransactionToken: () => object | null,\n private readonly getMaterializationLifecycle: () => ProviderMaterializationTransactionLifecycle | null,\n private readonly executionExists: (projectId: string, executionId: string) => Promise<boolean>,\n private readonly hooks: InMemoryOntologyStorageTestHooks = {}\n ) {}\n\n async begin(input: MaterializationPlanHeader): Promise<MaterializationSession> {\n const transactionToken = this.getTransactionToken()\n const lifecycle = this.getMaterializationLifecycle()\n if (!transactionToken || !lifecycle) {\n throw new MaterializationValidationError(\n \"Materialization sessions require an active storage transaction.\"\n )\n }\n assertMaterializationHeader(input)\n if (!(await this.executionExists(input.commit.projectId, input.commit.executionId))) {\n throw new MaterializationValidationError(\n `Ontology commit execution '${input.commit.executionId}' does not exist in project '${input.commit.projectId}'.`\n )\n }\n this.assertCommitAbsent(input)\n for (const expected of input.expected.sources)\n this.assertSource(expected, input.commit.projectId)\n for (const expected of input.expected.objects)\n await this.assertObject(expected, input.commit.projectId)\n for (const expected of input.expected.links)\n await this.assertLink(expected, input.commit.projectId)\n const expectedScopeRevisions = new Map<string, MaterializationLinkScopeRevision>()\n for (const expected of input.expected.linkScopes) {\n const key = linkScopeSortKey(expected.source, expected.linkId)\n const current =\n expectedScopeRevisions.get(key) ??\n this.computeEffectiveLinkScope(input.commit.projectId, expected.source, expected.linkId)\n expectedScopeRevisions.set(key, current)\n if (current.fingerprint !== expected.fingerprint) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`\n )\n }\n }\n for (const expected of input.expected.points) this.assertPoint(expected, input.commit.projectId)\n\n const providerToken = {}\n const session = {\n providerToken,\n header: structuredClone(input),\n transactionToken,\n lifecycle,\n active: true,\n writeOrdinal: 0,\n work: new Map<string, MaterializationWorkRecord>(),\n workUniqueKeys: new Set<string>(),\n applyWork: [],\n cardinalityWork: [],\n eventWork: [],\n appliedPlanItems: [],\n outboxEnvelopes: new Map<number, OntologyMaterializationEvent>(),\n workStreams: {\n apply: { started: false, completed: false, emittedCount: 0 },\n cardinality: { started: false, completed: false, emittedCount: 0 },\n event: { started: false, completed: false, emittedCount: 0 },\n },\n workSealed: false,\n incidentLinksByObject: null,\n linkSlotStates: new Map(),\n objectExistence: new Map<string, MaterializationObjectExistenceWorkRecord>(),\n replacement: null,\n }\n this.sessions.set(providerToken, session)\n this.liveSessions.add(session)\n lifecycle.register(providerToken)\n return { providerToken }\n }\n\n deactivateTransaction(transactionToken: object): void {\n for (const session of this.liveSessions) {\n if (session.transactionToken !== transactionToken) continue\n this.releaseSession(session)\n }\n }\n\n /** Deactivate a session, drop its transaction-local work, and stop tracking it as live. */\n private releaseSession(session: SessionState): void {\n session.active = false\n session.work.clear()\n session.workUniqueKeys.clear()\n session.applyWork.length = 0\n session.cardinalityWork.length = 0\n session.eventWork.length = 0\n session.appliedPlanItems.length = 0\n session.outboxEnvelopes.clear()\n session.incidentLinksByObject = null\n session.linkSlotStates = null\n session.objectExistence.clear()\n session.replacement = null\n this.liveSessions.delete(session)\n session.lifecycle.complete(session.providerToken)\n }\n\n async *streamState(\n input: StreamMaterializationStateInput\n ): AsyncIterable<MaterializationStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n for await (const request of input.requests) {\n this.requireSession(input.session)\n this.hooks.beforeRead?.(\"state.read\")\n const objectRefs = uniqueSorted(request.objects, objectRefKey, objectRefSortKey)\n for (let offset = 0; offset < objectRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const objects: MaterializationObjectState[] = []\n for (const ref of objectRefs.slice(offset, offset + input.pageRows)) {\n objects.push(await this.objectState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.object.page\", objects.length)\n yield { objects, links: [], linkScopes: [], points: [] }\n }\n\n const linkRefs = uniqueSorted(request.links, linkRefKey, linkRefSortKey)\n for (let offset = 0; offset < linkRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const links: MaterializationLinkState[] = []\n for (const ref of linkRefs.slice(offset, offset + input.pageRows)) {\n links.push(await this.linkState(session, ref))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n const incidentRefs = this.incidentLinkRefs(session, request.incidentObjects)\n for (let offset = 0; offset < incidentRefs.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const refs = incidentRefs.slice(offset, offset + input.pageRows)\n const links: MaterializationLinkState[] = []\n for (const ref of refs) links.push(await this.linkState(session, ref))\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.incident-link.page\", links.length)\n yield { objects: [], links, linkScopes: [], points: [] }\n }\n\n for (const scope of uniqueBy(request.linkScopes, (value) =>\n linkScopeSortKey(value.source, value.linkId)\n )) {\n this.requireSession(input.session)\n const value = this.linkSlotState(session, scope.source, scope.linkId)\n // Scope rows are currently only requested for cardinality-one links, so the complete member\n // set is bounded by the ontology invariant. Replacement scope enumeration is flattened in\n // its dedicated stream and never uses this shape.\n yield { objects: [], links: [], linkScopes: [value], points: [] }\n }\n\n const requestedPoints = uniqueSorted(\n request.points,\n (point) => telemetryPointKey(point.series, point.at),\n (point) => telemetryPointSortKey(point.series, point.at)\n )\n for (let offset = 0; offset < requestedPoints.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const points: StoredTelemetryPoint[] = []\n for (const point of requestedPoints.slice(offset, offset + input.pageRows)) {\n const stored = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n session.header.commit.projectId,\n point.series,\n point.at\n )\n if (stored) points.push(storedPoint(stored))\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"state.point.page\", points.length)\n if (points.length > 0) yield { objects: [], links: [], linkScopes: [], points }\n }\n }\n }\n\n async *streamSourceReplacementState(\n input: StreamSourceReplacementStateInput\n ): AsyncIterable<SourceReplacementStatePage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const replacement = this.requireReplacement(session, input)\n if (input.entityKind === \"object\") {\n if (replacement.candidate.projectionKind !== \"object\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Link projection replacement cannot stream object state.\"\n )\n }\n if (replacement.objectStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement object state may only be streamed once per session.\"\n )\n replacement.objectStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.object\")\n for (let offset = 0; offset < replacement.orderedObjects.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedObjects.slice(offset, offset + input.pageRows)\n const objects: SourceReplacementObjectState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"object\", ref: entry.ref })\n const base = await this.objectState(session, entry.ref)\n objects.push({\n ref: base.ref,\n candidateSource: storedSourceObject(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n ),\n override: base.override,\n effective: base.effective,\n latestTelemetry: base.latestTelemetry,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.object.page\", objects.length)\n yield { objects, links: [] }\n }\n this.requireSession(input.session)\n replacement.objectStreamCompleted = true\n return\n }\n\n if (replacement.candidate.projectionKind === \"object\" && !replacement.objectStreamCompleted) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Object projection replacement must fully stream object state before link state.\"\n )\n }\n if (replacement.linkStreamStarted)\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Replacement link state may only be streamed once per session.\"\n )\n replacement.linkStreamStarted = true\n this.hooks.beforeRead?.(\"source-replacement.link\")\n this.expandReplacementLinks(session, replacement)\n replacement.orderedLinks ??= [...replacement.links.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n for (let offset = 0; offset < replacement.orderedLinks.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = replacement.orderedLinks.slice(offset, offset + input.pageRows)\n const links: SourceReplacementLinkState[] = []\n for (const entry of selected) {\n const key = projectionEntityKey({ kind: \"link\", ref: entry.ref })\n const base = await this.linkState(session, entry.ref)\n const ownedByReplacement = replacement.owned.has(key)\n links.push({\n ref: base.ref,\n candidateSource: ownedByReplacement\n ? storedSourceLink(\n input.source.projectionId,\n replacement.candidate.materializationId,\n replacement.candidate.rowsByEntity.get(key)\n )\n : base.source,\n override: base.override,\n slotOverride: base.slotOverride,\n effective: base.effective,\n diffRequired: entry.diffRequired,\n })\n }\n this.requireSession(input.session)\n this.hooks.observeBuffer?.(\"replacement.link.page\", links.length)\n yield { objects: [], links }\n }\n this.requireSession(input.session)\n replacement.linkStreamCompleted = true\n }\n\n async stageWork(input: StageMaterializationWorkInput): Promise<void> {\n const session = this.requireSession(input.session)\n if (session.workSealed) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization work cannot be staged after draining begins.\"\n )\n }\n const batchKeys = new Set<string>()\n const batchUniqueKeys = new Set<string>()\n for (const record of input.records) {\n assertWorkRecord(record, session.header)\n const uniqueKey = workUniquenessKey(record)\n if (\n batchKeys.has(record.recordKey) ||\n session.work.has(record.recordKey) ||\n batchUniqueKeys.has(uniqueKey) ||\n session.workUniqueKeys.has(uniqueKey)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate materialization work key '${record.recordKey}'.`\n )\n }\n if (\n record.kind === \"incident-object\" &&\n (!session.replacement || session.replacement.linkStreamStarted)\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Incident replacement work must be staged before link state is streamed.\"\n )\n }\n batchKeys.add(record.recordKey)\n batchUniqueKeys.add(uniqueKey)\n }\n const cloned = input.records.map((record) => structuredClone(record))\n this.hooks.observeWork?.(cloned)\n for (const record of cloned) {\n session.work.set(record.recordKey, record)\n session.workUniqueKeys.add(workUniquenessKey(record))\n if (record.kind === \"plan\") session.applyWork.push(record)\n if (record.kind === \"cardinality\") session.cardinalityWork.push(record)\n if (record.kind === \"event\") session.eventWork.push(record)\n if (record.kind === \"object-existence\") {\n session.objectExistence.set(objectRefKey(record.ref), record)\n }\n if (record.kind === \"incident-object\") {\n const replacement = session.replacement\n if (replacement) {\n replacement.incidentObjects.set(objectRefKey(record.ref), record.ref)\n replacement.linksExpanded = false\n replacement.orderedLinks = null\n }\n }\n }\n this.hooks.observeBuffer?.(\"work.stage\", cloned.length)\n }\n\n async *streamWork(input: StreamMaterializationWorkInput): AsyncIterable<MaterializationWorkPage> {\n const session = this.requireSession(input.session)\n assertPageRows(input.pageRows)\n const stream = session.workStreams[input.order]\n if (stream.started) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Materialization ${input.order} work may only be streamed once per session.`\n )\n }\n stream.started = true\n if (!session.workSealed) {\n session.applyWork.sort(comparePlanWork)\n session.cardinalityWork.sort(compareCardinalityWork)\n session.eventWork.sort(compareEventWork)\n session.workSealed = true\n }\n const records =\n input.order === \"apply\"\n ? session.applyWork\n : input.order === \"cardinality\"\n ? session.cardinalityWork\n : session.eventWork\n for (let offset = 0; offset < records.length; offset += input.pageRows) {\n this.requireSession(input.session)\n const selected = records.slice(offset, offset + input.pageRows)\n this.hooks.observeBuffer?.(`work.${input.order}.page`, selected.length)\n stream.emittedCount = offset + selected.length\n yield { records: structuredClone(selected) }\n }\n this.requireSession(input.session)\n stream.completed = true\n }\n\n async readObjectExistence(\n input: ReadMaterializationObjectExistenceInput\n ): Promise<readonly MaterializationObjectExistence[]> {\n const session = this.requireSession(input.session)\n const result: MaterializationObjectExistence[] = []\n for (const ref of input.refs) {\n const record = session.objectExistence.get(objectRefKey(ref))\n if (record) {\n result.push({ ref: structuredClone(record.ref), exists: record.exists })\n }\n }\n return result\n }\n\n async applyChunk(input: ApplyMaterializationChunkInput): Promise<void> {\n const session = this.requireSession(input.session)\n const projectId = session.header.commit.projectId\n assertPlanChunkCorrelations(input.chunk, session.header.commit)\n assertChunkSequence(session, input.chunk)\n this.hooks.observeBuffer?.(\"apply.chunk\", materializationChunkRows(input.chunk))\n const write = (boundary: string, apply: () => void): void => {\n this.hooks.beforeWrite?.(boundary, session.writeOrdinal++)\n apply()\n }\n\n for (const item of input.chunk.overrides.objects.upserts)\n write(\"override.object.upsert\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n editedAt: { ...item.editedAt },\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.objects.deletes)\n write(\"override.object.delete\", () => {\n const key = projectEntityKey(projectId, objectRefKey(item.ref))\n assertLastCommit(\n this.state.objectOverrides.get(key),\n item.expectedLastCommitId,\n \"object override\"\n )\n this.state.objectOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.edges.upserts)\n write(\"override.link.upsert\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.edges.deletes)\n write(\"override.link.delete\", () => {\n const key = projectEntityKey(projectId, linkRefKey(item.ref))\n assertLastCommit(\n this.state.linkOverrides.get(key),\n item.expectedLastCommitId,\n \"link edge override\"\n )\n this.state.linkOverrides.delete(key)\n })\n for (const item of input.chunk.overrides.links.slots.upserts)\n write(\"override.link-slot.upsert\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.set(\n key,\n structuredClone({\n projectId,\n ref: item.ref,\n value: item.value,\n lastCommitId: item.lastCommitId,\n updatedAt: item.updatedAt,\n })\n )\n })\n for (const item of input.chunk.overrides.links.slots.deletes)\n write(\"override.link-slot.delete\", () => {\n const key = projectEntityKey(projectId, linkScopeKey(item.ref.source, item.ref.linkId))\n assertLastCommit(\n this.state.linkSlotOverrides.get(key),\n item.expectedLastCommitId,\n \"link slot override\"\n )\n this.state.linkSlotOverrides.delete(key)\n })\n\n for (const item of input.chunk.effective.linkDeletes)\n write(\"effective.link.delete\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactLink({\n projectId,\n sourceTypeId: item.ref.source.objectTypeId,\n sourceId: item.ref.source.primaryId,\n linkId: item.ref.linkId,\n targetTypeId: item.ref.target.objectTypeId,\n targetId: item.ref.target.primaryId,\n })\n })\n for (const item of input.chunk.effective.objectDeletes)\n write(\"effective.object.delete\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).deleteExactObject(\n projectId,\n item.ref.objectTypeId,\n item.ref.primaryId\n )\n })\n for (const item of input.chunk.effective.objectUpserts)\n write(\"effective.object.upsert\", () => {\n this.assertObjectSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactObject(item.row, projectId)\n })\n for (const item of input.chunk.effective.linkUpserts)\n write(\"effective.link.upsert\", () => {\n this.assertLinkSync(item.expected, projectId)\n getInMemoryObjectMaterializerAdapter(this.objects).applyExactLink(item.row, projectId)\n })\n for (const item of input.chunk.timeseries.pointUpserts)\n write(\"timeseries.point.upsert\", () => {\n this.assertPoint(item.expected, projectId)\n getInMemoryTimeseriesMaterializerAdapter(this.timeseries).applyExactPoint(\n projectId,\n item.point\n )\n })\n for (const item of input.chunk.outbox)\n write(\"outbox.insert\", () => {\n const envelope = item.envelope\n if (envelope.projectId !== projectId || envelope.commitId !== session.header.commit.id) {\n throw new MaterializationValidationError(\n \"Outbox event does not correlate with its materialization commit.\"\n )\n }\n assertTimestamp(item.availableAt, \"Outbox availableAt\")\n assertTimestamp(item.createdAt, \"Outbox createdAt\")\n assertTimestamp(envelope.occurredAt, \"Outbox event occurredAt\")\n const key = outboxKey(projectId, envelope.id)\n if (this.state.outbox.has(key)) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Duplicate outbox event '${envelope.id}'.`\n )\n }\n if (session.outboxEnvelopes.has(envelope.commitOrdinal))\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Duplicate outbox commit ordinal.\"\n )\n this.state.outbox.set(key, {\n envelope: structuredClone(envelope),\n availableAt: item.availableAt,\n attempts: 0,\n leaseId: null,\n leaseExpiresAt: null,\n publishedAt: null,\n lastFailure: null,\n createdAt: item.createdAt,\n })\n session.outboxEnvelopes.set(envelope.commitOrdinal, structuredClone(envelope))\n })\n for (const item of materializationPlanItems(input.chunk)) {\n session.appliedPlanItems.push(stableJsonStringify(item))\n }\n }\n\n async finalize(input: FinalizeMaterializationInput): Promise<ApplyMaterializationResult> {\n const session = this.requireSession(input.session)\n const { commit } = session.header\n // Recheck reservations at the durable boundary: callers may open more than one session in the\n // same transaction before either one finalizes.\n this.assertCommitAbsent(session.header)\n assertFinalizationCorrelations(session, input.finalization, this.state, this.objects)\n this.hooks.beforeWrite?.(\"finalize\", session.writeOrdinal++)\n for (const activation of input.finalization.sourceActivations) {\n this.hooks.beforeWrite?.(\"source.activate\", session.writeOrdinal++)\n assertTimestamp(activation.datasetVersion.createdAt, \"Source dataset version createdAt\")\n assertTimestamp(activation.updatedAt, \"Source activation updatedAt\")\n this.assertSource(activation.expected, commit.projectId)\n const candidateKey = sourceMaterializationKey(\n commit.projectId,\n activation.source.projectionId,\n activation.materializationId\n )\n const candidate = this.state.sourceMaterializations.get(candidateKey)\n if (!candidate || candidate.status !== \"ready\")\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source activation candidate is missing or is not ready.\"\n )\n const previous = findActiveSourceMaterialization(\n this.state,\n commit.projectId,\n activation.source.projectionId\n )\n if (previous) {\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n previous.projectId,\n previous.source.projectionId,\n previous.materializationId\n ),\n {\n ...previous,\n status: \"superseded\",\n executionToken: null,\n terminalAt: activation.updatedAt,\n updatedAt: activation.updatedAt,\n }\n )\n }\n activateSourceRoots(this.state, candidate, activation)\n this.state.sourceMaterializations.set(candidateKey, {\n ...candidate,\n status: \"active\",\n executionToken: null,\n activatedAt: activation.updatedAt,\n lastCommitId: activation.lastCommitId,\n updatedAt: activation.updatedAt,\n })\n }\n const record = {\n ...structuredClone(commit),\n result: structuredClone(input.finalization.result),\n } as OntologyCommitRecord\n this.state.commitsById.set(commitKey(commit.projectId, commit.id), record)\n this.state.commitIdByIdempotency.set(\n idempotencyKey(commit.projectId, commit.idempotencyKey),\n commit.id\n )\n const origin = ontologyCommitOriginSelector(commit.origin)\n if (origin) {\n this.state.commitIdByOrigin.set(commitOriginKey(commit.projectId, origin), commit.id)\n }\n this.releaseSession(session)\n return { commit: structuredClone(record) }\n }\n\n private requireSession(session: MaterializationSession): SessionState {\n const value = this.sessions.get(session.providerToken)\n if (\n !value ||\n !value.active ||\n !this.getTransactionToken() ||\n this.getTransactionToken() !== value.transactionToken\n ) {\n throw new MaterializationConflictError(\n \"effective-state\",\n \"Materialization session is inactive.\"\n )\n }\n return value\n }\n\n private requireReplacement(\n session: SessionState,\n input: StreamSourceReplacementStateInput\n ): ReplacementSessionState {\n if (session.replacement) {\n if (\n session.replacement.sourceId !== input.source.projectionId ||\n session.replacement.candidateMaterializationId !== input.candidateMaterializationId\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Materialization session already owns another replacement union.\"\n )\n }\n return session.replacement\n }\n const projectId = session.header.commit.projectId\n const sourceId = input.source.projectionId\n const candidate = this.state.sourceMaterializations.get(\n sourceMaterializationKey(projectId, sourceId, input.candidateMaterializationId)\n )\n if (!candidate || candidate.status !== \"ready\") {\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Candidate source materialization '${input.candidateMaterializationId}' is missing or is not ready.`\n )\n }\n const previous = findActiveSourceMaterialization(this.state, projectId, sourceId)\n if (\n candidate.protocol !== \"replacement\" ||\n (previous &&\n (previous.protocol !== candidate.protocol ||\n previous.projectionKind !== candidate.projectionKind))\n ) {\n throw new MaterializationConflictError(\n \"source-materialization\",\n \"Source replacement kind or protocol does not match its active materialization.\"\n )\n }\n const replacement: ReplacementSessionState = {\n sourceId,\n candidateMaterializationId: input.candidateMaterializationId,\n owned: new Set(),\n candidate,\n objects: new Map(),\n links: new Map(),\n orderedObjects: [],\n orderedLinks: null,\n affectedScopes: new Set(),\n incidentObjects: new Map(),\n objectStreamStarted: false,\n objectStreamCompleted: false,\n linkStreamStarted: false,\n linkStreamCompleted: false,\n linksExpanded: false,\n }\n for (const rows of [\n previousSourceRows(this.state, candidate),\n candidate.rowsByEntity.values(),\n ]) {\n for (const row of rows) {\n replacement.owned.add(projectionEntityKey(row.assertion))\n if (row.assertion.kind === \"object\") {\n const ref = row.assertion.ref\n replacement.objects.set(objectRefKey(ref), { ref, sortKey: objectRefSortKey(ref) })\n } else {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n replacement.orderedObjects = [...replacement.objects.values()].sort((left, right) =>\n left.sortKey.localeCompare(right.sortKey)\n )\n session.replacement = replacement\n return replacement\n }\n\n private expandReplacementLinks(\n session: SessionState,\n replacement: ReplacementSessionState\n ): void {\n if (replacement.linksExpanded) return\n const projectId = session.header.commit.projectId\n const incident = replacement.incidentObjects\n const touchesIncident = (ref: OntologyLinkRef): boolean =>\n incident.has(objectRefKey(ref.source)) || incident.has(objectRefKey(ref.target))\n\n const adapter = getInMemoryObjectMaterializerAdapter(this.objects)\n if (incident.size > 0) {\n adapter.visitExactLinks(projectId, (row) => {\n const ref = linkRef(row)\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n })\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId !== projectId) continue\n if (touchesIncident(override.ref)) addReplacementLink(replacement, override.ref, true)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n const ref = {\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n }\n if (touchesIncident(ref)) addReplacementLink(replacement, ref, true)\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\" && touchesIncident(row.assertion.ref)) {\n addReplacementLink(replacement, row.assertion.ref, true)\n }\n }\n }\n }\n const scopes = new Map<string, { source: OntologyObjectRef; linkId: string }>()\n for (const { ref } of replacement.links.values()) {\n const key = linkScopeSortKey(ref.source, ref.linkId)\n if (replacement.affectedScopes.has(key)) scopes.set(key, ref)\n }\n for (const scope of scopes.values()) {\n adapter.visitExactScopeLinks(\n projectId,\n scope.source.objectTypeId,\n scope.source.primaryId,\n scope.linkId,\n (row) => {\n addReplacementLink(replacement, linkRef(row), false)\n }\n )\n const override = this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(scope.source, scope.linkId))\n )\n if (override)\n addReplacementLink(replacement, { ...scope, target: override.value.target }, false)\n }\n replacement.linksExpanded = true\n replacement.orderedLinks = null\n }\n\n private assertCommitAbsent(header: MaterializationPlanHeader): void {\n if (this.state.commitsById.has(commitKey(header.commit.projectId, header.commit.id))) {\n throw new MaterializationConflictError(\n \"idempotency\",\n `Ontology commit '${header.commit.id}' already exists.`\n )\n }\n if (\n this.state.commitIdByIdempotency.has(\n idempotencyKey(header.commit.projectId, header.commit.idempotencyKey)\n )\n ) {\n throw new MaterializationConflictError(\n \"idempotency\",\n \"Ontology idempotency key already exists.\"\n )\n }\n const origin = ontologyCommitOriginSelector(header.commit.origin)\n if (\n origin &&\n this.state.commitIdByOrigin.has(commitOriginKey(header.commit.projectId, origin))\n ) {\n throw new MaterializationConflictError(\n \"run-correlation\",\n \"Ontology commit origin already has an authoritative commit.\"\n )\n }\n }\n\n private assertSource(expected: ExpectedSourceRevision, projectId: string): void {\n const current = findActiveSourceMaterialization(\n this.state,\n projectId,\n expected.source.projectionId\n )\n if (\n (current?.materializationId ?? null) !== expected.activeMaterializationId ||\n (current?.lastCommitId ?? null) !== expected.lastCommitId\n ) {\n throw new MaterializationConflictError(\n \"projection-fence\",\n `Source '${expected.source.projectionId}' changed.`\n )\n }\n }\n\n private async assertObject(expected: ExpectedObjectRevision, projectId: string): Promise<void> {\n this.assertObjectSync(expected, projectId)\n }\n\n private assertObjectSync(expected: ExpectedObjectRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactObjectRow(\n projectId,\n expected.ref.objectTypeId,\n expected.ref.primaryId\n )\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.version !== expected.version || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected object ${objectRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private async assertLink(expected: ExpectedLinkRevision, projectId: string): Promise<void> {\n this.assertLinkSync(expected, projectId)\n }\n\n private assertLinkSync(expected: ExpectedLinkRevision, projectId: string): void {\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: expected.ref.source.objectTypeId,\n sourceId: expected.ref.source.primaryId,\n linkId: expected.ref.linkId,\n targetTypeId: expected.ref.target.objectTypeId,\n targetId: expected.ref.target.primaryId,\n })\n if (!expected.exists) {\n if (row)\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} to be absent.`\n )\n return\n }\n if (!row || row.lastCommitId !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"effective-state\",\n `Expected link ${linkRefKey(expected.ref)} changed.`\n )\n }\n }\n\n private assertPoint(expected: ExpectedTimeseriesPointRevision, projectId: string): void {\n const point = getInMemoryTimeseriesMaterializerAdapter(this.timeseries).getExactPoint(\n projectId,\n expected.series,\n expected.at\n )\n if ((point?.lastCommitId ?? null) !== expected.lastCommitId) {\n throw new MaterializationConflictError(\n \"timeseries-point\",\n `Telemetry point ${telemetryPointKey(expected.series, expected.at)} changed.`\n )\n }\n }\n\n private async objectState(\n session: SessionState,\n ref: OntologyObjectRef\n ): Promise<MaterializationObjectState> {\n const projectId = session.header.commit.projectId\n const row = await this.objects.getByPrimaryId({\n projectId,\n objectTypeId: ref.objectTypeId,\n primaryId: ref.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveObjectSource(projectId, ref),\n override: structuredClone(\n publicObjectOverride(\n this.state.objectOverrides.get(projectEntityKey(projectId, objectRefKey(ref)))\n )\n ),\n effective: row ? objectSnapshot(row) : null,\n latestTelemetry: getInMemoryTimeseriesMaterializerAdapter(this.timeseries)\n .listLatestForObject(projectId, ref.objectTypeId, ref.primaryId)\n .map(storedPoint),\n }\n }\n\n private async linkState(\n session: SessionState,\n ref: OntologyLinkRef\n ): Promise<MaterializationLinkState> {\n const projectId = session.header.commit.projectId\n const row = getInMemoryObjectMaterializerAdapter(this.objects).getExactLinkRow(projectId, {\n sourceTypeId: ref.source.objectTypeId,\n sourceId: ref.source.primaryId,\n linkId: ref.linkId,\n targetTypeId: ref.target.objectTypeId,\n targetId: ref.target.primaryId,\n })\n return {\n ref: structuredClone(ref),\n source: this.findActiveLinkSource(projectId, ref),\n override: structuredClone(\n publicLinkOverride(\n this.state.linkOverrides.get(projectEntityKey(projectId, linkRefKey(ref)))\n )\n ),\n slotOverride: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(ref.source, ref.linkId))\n )\n )\n ),\n effective: row ? linkSnapshot(row) : null,\n }\n }\n\n private linkSlotState(\n session: SessionState,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n session.linkSlotStates ??= new Map()\n const key = linkScopeSortKey(source, linkId)\n const existing = session.linkSlotStates.get(key)\n if (existing) return structuredClone(existing)\n const computed = this.computeLinkSlotState(session.header.commit.projectId, source, linkId)\n session.linkSlotStates.set(key, computed)\n return structuredClone(computed)\n }\n\n private computeLinkSlotState(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeState {\n const value = this.computeEffectiveLinkScope(projectId, source, linkId)\n return {\n ...value,\n sourceAssertion: this.findActiveLinkScopeSource(projectId, source, linkId),\n override: structuredClone(\n publicLinkSlotOverride(\n this.state.linkSlotOverrides.get(\n projectEntityKey(projectId, linkScopeKey(source, linkId))\n )\n )\n ),\n }\n }\n\n private computeEffectiveLinkScope(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): MaterializationLinkScopeRevision & Pick<MaterializationLinkScopeState, \"effective\"> {\n const rows: ObjectLinkRow[] = []\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactScopeLinks(\n projectId,\n source.objectTypeId,\n source.primaryId,\n linkId,\n (row) => rows.push(row)\n )\n rows.sort((left, right) =>\n linkRefSortKey(linkRef(left)).localeCompare(linkRefSortKey(linkRef(right)))\n )\n const accumulator = startScopeAccumulator(source, linkId)\n for (let offset = 0; offset < rows.length; offset += 1_000) {\n const page = rows.slice(offset, offset + 1_000)\n this.hooks.observeBuffer?.(\"state.link-scope.page\", page.length)\n for (const row of page) {\n appendScopeSnapshot(accumulator, linkSnapshot(row))\n }\n }\n const effective = rows.length === 1 ? linkSnapshot(rows[0]!) : null\n return {\n ...finishScopeAccumulator(accumulator),\n effective,\n }\n }\n\n private findActiveLinkScopeSource(\n projectId: string,\n source: OntologyObjectRef,\n linkId: string\n ): StoredSourceLinkAssertion | null {\n const rows = this.state.activeSourceLinkScopes.get(\n projectEntityKey(projectId, linkScopeSortKey(source, linkId))\n )\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active source links assert cardinality-one scope '${source.objectTypeId}.${linkId}'.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private findActiveObjectSource(\n projectId: string,\n ref: OntologyObjectRef\n ): StoredSourceObjectAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"object\", ref }))\n return found?.assertion.kind === \"object\" ? (found as StoredSourceObjectAssertion) : null\n }\n\n private findActiveLinkSource(\n projectId: string,\n ref: OntologyLinkRef\n ): StoredSourceLinkAssertion | null {\n const found = this.findActiveSource(projectId, projectionEntityKey({ kind: \"link\", ref }))\n return found?.assertion.kind === \"link\" ? (found as StoredSourceLinkAssertion) : null\n }\n\n private findActiveSource(projectId: string, entityKey: string): StoredSourceAssertion | null {\n const rows = this.state.activeSourceRows.get(projectEntityKey(projectId, entityKey))\n if (rows && rows.size > 1)\n throw new MaterializationConflictError(\n \"source-materialization\",\n `Multiple active sources assert ${entityKey}.`\n )\n return structuredClone(rows?.values().next().value ?? null)\n }\n\n private incidentLinkRefs(\n session: SessionState,\n objects: readonly OntologyObjectRef[]\n ): readonly OntologyLinkRef[] {\n if (objects.length === 0) return []\n session.incidentLinksByObject ??= this.buildIncidentLinkIndex(session.header.commit.projectId)\n const selected = new Map<string, OntologyLinkRef>()\n for (const object of objects) {\n for (const ref of session.incidentLinksByObject.get(objectRefKey(object)) ?? []) {\n selected.set(linkRefSortKey(ref), ref)\n }\n }\n return [...selected.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n }\n\n private buildIncidentLinkIndex(projectId: string): Map<string, readonly OntologyLinkRef[]> {\n const mutable = new Map<string, Map<string, OntologyLinkRef>>()\n const consider = (ref: OntologyLinkRef): void => {\n const sortKey = linkRefSortKey(ref)\n for (const endpoint of [ref.source, ref.target]) {\n const key = objectRefKey(endpoint)\n const links = mutable.get(key) ?? new Map<string, OntologyLinkRef>()\n links.set(sortKey, structuredClone(ref))\n mutable.set(key, links)\n }\n }\n getInMemoryObjectMaterializerAdapter(this.objects).visitExactLinks(projectId, (row) =>\n consider(linkRef(row))\n )\n for (const override of this.state.linkOverrides.values()) {\n if (override.projectId === projectId) consider(override.ref)\n }\n for (const override of this.state.linkSlotOverrides.values()) {\n if (override.projectId !== projectId) continue\n consider({\n source: override.ref.source,\n linkId: override.ref.linkId,\n target: override.value.target,\n })\n }\n for (const [scopeKey, rows] of this.state.activeSourceLinkScopes) {\n if (JSON.parse(scopeKey)[0] !== projectId) continue\n for (const row of rows.values()) {\n if (row.assertion.kind === \"link\") consider(row.assertion.ref)\n }\n }\n const index = new Map<string, readonly OntologyLinkRef[]>()\n for (const [objectKey, refs] of mutable) {\n index.set(\n objectKey,\n [...refs.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([, ref]) => ref)\n )\n }\n return index\n }\n}\n",
30
31
  "import {\n MaterializationConflictError,\n MaterializationValidationError,\n} from \"../../../materialization/errors\"\nimport type {\n ClaimedOntologyOutboxRow,\n ClaimOntologyOutboxInput,\n CompleteOntologyOutboxLeaseInput,\n OntologyOutboxRecord,\n OntologyOutboxStorage,\n OntologyOutboxSummary,\n PurgePublishedOntologyOutboxInput,\n RescheduleOntologyOutboxLeaseInput,\n SummarizeOntologyOutboxInput,\n} from \"../outbox\"\nimport {\n assertNonblank,\n assertTimestamp,\n type InMemoryOntologyState,\n insertBounded,\n outboxKey,\n} from \"./shared-state\"\n\nexport class InMemoryOntologyOutboxStorage implements OntologyOutboxStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n ) {}\n\n async claim(input: ClaimOntologyOutboxInput): Promise<readonly ClaimedOntologyOutboxRow[]> {\n return this.runRootOperation(() => this.claimUnlocked(input))\n }\n\n private claimUnlocked(input: ClaimOntologyOutboxInput): readonly ClaimedOntologyOutboxRow[] {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveLimit(input.limit)\n const now = assertTimestamp(input.now, \"Ontology outbox claim time\")\n const leaseExpiresAt = assertTimestamp(input.leaseExpiresAt, \"Ontology outbox lease expiry\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n if (leaseExpiresAt <= now) {\n throw new MaterializationValidationError(\n \"Ontology outbox lease expiry must be later than the claim time.\"\n )\n }\n const rows: OntologyOutboxRecord[] = []\n for (const row of this.state.outbox.values()) {\n if (row.envelope.projectId !== input.projectId) continue\n assertPairedLease(row)\n if (row.publishedAt !== null || Date.parse(row.availableAt) > now) continue\n if (row.leaseExpiresAt !== null && Date.parse(row.leaseExpiresAt) > now) continue\n insertBounded(rows, row, input.limit, compareClaimRows)\n }\n return rows.map((row) => {\n const claimed: ClaimedOntologyOutboxRow = {\n ...row,\n attempts: row.attempts + 1,\n leaseId: input.leaseId,\n leaseExpiresAt: input.leaseExpiresAt,\n }\n this.state.outbox.set(outboxKey(input.projectId, row.envelope.id), structuredClone(claimed))\n return structuredClone(claimed)\n })\n }\n\n async markPublished(input: CompleteOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => this.markPublishedUnlocked(input))\n }\n\n private markPublishedUnlocked(input: CompleteOntologyOutboxLeaseInput): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n assertTimestamp(input.publishedAt, \"Ontology outbox publishedAt\")\n const rows = this.validateLeaseBatch(input.projectId, input.ids, input.leaseId)\n for (const [key, row] of rows) {\n this.state.outbox.set(key, {\n ...row,\n publishedAt: input.publishedAt,\n leaseId: null,\n leaseExpiresAt: null,\n })\n }\n }\n\n async reschedule(input: RescheduleOntologyOutboxLeaseInput): Promise<void> {\n await this.runRootOperation(() => this.rescheduleUnlocked(input))\n }\n\n private rescheduleUnlocked(input: RescheduleOntologyOutboxLeaseInput): void {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertNonblank(input.leaseId, \"Ontology outbox lease id\")\n assertTimestamp(input.availableAt, \"Ontology outbox availableAt\")\n const rows = this.validateLeaseBatch(input.projectId, input.ids, input.leaseId)\n for (const [key, row] of rows) {\n this.state.outbox.set(key, {\n ...row,\n availableAt: input.availableAt,\n lastFailure: input.failure === undefined ? row.lastFailure : structuredClone(input.failure),\n leaseId: null,\n leaseExpiresAt: null,\n })\n }\n }\n\n async purgePublished(input: PurgePublishedOntologyOutboxInput): Promise<number> {\n return this.runRootOperation(() => this.purgePublishedUnlocked(input))\n }\n\n async summarize(input: SummarizeOntologyOutboxInput): Promise<OntologyOutboxSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n let pendingCount = 0\n let oldestPendingAt: string | null = null\n let retryingCount = 0\n let maxAttempts = 0\n\n for (const row of this.state.outbox.values()) {\n if (row.envelope.projectId !== input.projectId || row.publishedAt !== null) continue\n pendingCount += 1\n if (row.attempts > 0) retryingCount += 1\n maxAttempts = Math.max(maxAttempts, row.attempts)\n if (oldestPendingAt === null || row.createdAt < oldestPendingAt) {\n oldestPendingAt = row.createdAt\n }\n }\n\n return { pendingCount, oldestPendingAt, retryingCount, maxAttempts }\n })\n }\n\n private purgePublishedUnlocked(input: PurgePublishedOntologyOutboxInput): number {\n assertNonblank(input.projectId, \"Ontology outbox project id\")\n assertPositiveLimit(input.limit)\n const cutoff = assertTimestamp(input.publishedBefore, \"Ontology outbox purge cutoff\")\n const rows: [string, OntologyOutboxRecord][] = []\n for (const entry of this.state.outbox.entries()) {\n const [, row] = entry\n if (\n row.envelope.projectId !== input.projectId ||\n row.publishedAt === null ||\n Date.parse(row.publishedAt) >= cutoff\n ) {\n continue\n }\n insertBounded(rows, entry, input.limit, ([, left], [, right]) =>\n comparePublishedRows(left, right)\n )\n }\n for (const [key] of rows) this.state.outbox.delete(key)\n return rows.length\n }\n\n private requireLease(key: string, leaseId: string) {\n const row = this.state.outbox.get(key)\n if (!row || row.leaseId !== leaseId || row.leaseExpiresAt === null) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox lease does not match.\"\n )\n }\n return row\n }\n\n private validateLeaseBatch(\n projectId: string,\n ids: readonly string[],\n leaseId: string\n ): readonly (readonly [string, ReturnType<InMemoryOntologyOutboxStorage[\"requireLease\"]>])[] {\n const seen = new Set<string>()\n return ids.map((id) => {\n assertNonblank(id, \"Ontology outbox event id\")\n if (seen.has(id)) {\n throw new MaterializationValidationError(\n `Ontology outbox lease batch repeats event '${id}'.`\n )\n }\n seen.add(id)\n const key = outboxKey(projectId, id)\n return [key, this.requireLease(key, leaseId)] as const\n })\n }\n}\n\n/**\n * Deterministic claim order.\n *\n * Every row of one commit shares `createdAt`, so `commitOrdinal` gives providers a stable batch\n * order. It correlates facts but does not promise broker delivery order: concurrent leases and\n * retries may publish later rows first.\n */\nfunction compareClaimRows(\n left: import(\"../outbox\").OntologyOutboxRecord,\n right: import(\"../outbox\").OntologyOutboxRecord\n): number {\n return (\n left.createdAt.localeCompare(right.createdAt) ||\n left.envelope.commitId.localeCompare(right.envelope.commitId) ||\n left.envelope.commitOrdinal - right.envelope.commitOrdinal\n )\n}\n\nfunction comparePublishedRows(\n left: import(\"../outbox\").OntologyOutboxRecord,\n right: import(\"../outbox\").OntologyOutboxRecord\n): number {\n return (\n (left.publishedAt ?? \"\").localeCompare(right.publishedAt ?? \"\") ||\n left.envelope.id.localeCompare(right.envelope.id)\n )\n}\n\nfunction assertPositiveLimit(limit: number): void {\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new MaterializationValidationError(\"Ontology outbox limit must be positive.\")\n }\n}\n\nfunction assertPairedLease(row: {\n readonly leaseId: string | null\n readonly leaseExpiresAt: string | null\n}): void {\n if ((row.leaseId === null) !== (row.leaseExpiresAt === null)) {\n throw new MaterializationConflictError(\n \"outbox-lease\",\n \"Ontology outbox row has an unpaired lease lifecycle.\"\n )\n }\n}\n",
31
- "import { stableJsonStringify } from \"../../../json\"\nimport { MaterializationValidationError } from \"../../../materialization/errors\"\nimport type { ProjectionExecution } from \"../../../materialization/model\"\nimport { projectionEntityKey } from \"../../../materialization/refs\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertTimestamp as assertCanonicalTimestamp,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceExecutionIdentity,\n assertSourceStagedRow,\n assertSourceWriteIdentity as assertWriteIdentity,\n isExactStagingManifest,\n sourceConflict,\n sourceMaterializationIdentity,\n} from \"../provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecution,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceAssertion,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"../sources\"\nimport {\n assertNonblank,\n type InMemoryOntologyState,\n type InMemorySourceMaterialization,\n insertBounded,\n sourceMaterializationKey,\n sourceMaterializationRecord,\n} from \"./shared-state\"\n\nexport class InMemoryOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>,\n private readonly assertExecution: AssertSourceMaterializationExecution\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertBeginInput(input)\n await this.assertCurrentExecution(input)\n const key = sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n const existing = this.state.sourceMaterializations.get(key)\n if (existing) {\n if (isExactStagingManifest(sourceMaterializationRecord(existing), input)) {\n return sourceMaterializationRecord(existing)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const nonterminal = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (nonterminal.length > 0) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n const materialization: InMemorySourceMaterialization = {\n projectId: input.projectId,\n source: structuredClone(input.source),\n materializationId: input.materializationId,\n projectionRunId: input.execution.projectionRunId,\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n status: \"staging\",\n executionToken: input.execution.executionToken,\n datasetVersion: structuredClone(input.datasetVersion),\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n rootCount: null,\n assertionCount: null,\n createdAt: input.createdAt,\n readyAt: null,\n activatedAt: null,\n terminalAt: null,\n lastCommitId: null,\n updatedAt: input.createdAt,\n rowsByEntity: new Map(),\n rootOrdinals: new Map(),\n ordinalRoots: new Map(),\n }\n this.state.sourceMaterializations.set(key, materialization)\n return sourceMaterializationRecord(materialization)\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${materialization.status}' and cannot accept rows.`\n )\n }\n return stageRowsAtomically(materialization, input.rows)\n })\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n assertCanonicalTimestamp(input.readyAt, \"Source readyAt\")\n assertCount(input.rootCount, \"Source root count\")\n assertCount(input.assertionCount, \"Source assertion count\")\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n\n if (materialization.status === \"ready\") {\n if (\n materialization.rootCount === input.rootCount &&\n materialization.assertionCount === input.assertionCount &&\n materialization.readyAt === input.readyAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'ready'.`\n )\n }\n assertNotBefore(input.readyAt, materialization.createdAt, \"Source readyAt\", \"createdAt\")\n assertReadyCounts(materialization, input.rootCount, input.assertionCount)\n\n const ready: InMemorySourceMaterialization = {\n ...materialization,\n status: \"ready\",\n rootCount: input.rootCount,\n assertionCount: input.assertionCount,\n readyAt: input.readyAt,\n updatedAt: input.readyAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n ),\n ready\n )\n return sourceMaterializationRecord(ready)\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const active = [...this.state.sourceMaterializations.values()].filter(\n (materialization) =>\n materialization.projectId === input.projectId &&\n materialization.source.projectionId === input.source.projectionId &&\n materialization.status === \"active\"\n )\n if (active.length > 1) {\n throw sourceConflict(\n `Source '${input.source.projectionId}' has more than one active materialization.`\n )\n }\n return active[0] ? sourceMaterializationRecord(active[0]) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(async () => {\n assertProjectAndSource(input)\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertCanonicalTimestamp(input.abandonedAt, \"Source abandonedAt\")\n await this.assertCurrentExecution(input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(input)\n : this.abandonForReclaim(input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertCanonicalTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\")\n if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {\n throw new MaterializationValidationError(\n \"Terminal source cleanup limit must be a positive safe integer.\"\n )\n }\n\n const candidates: [string, InMemorySourceMaterialization][] = []\n for (const entry of this.state.sourceMaterializations.entries()) {\n const materialization = entry[1]\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null ||\n materialization.terminalAt >= input.terminalBefore\n ) {\n continue\n }\n insertBounded(candidates, entry, input.limit, compareTerminalMaterializations)\n }\n\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n for (const [key, candidate] of candidates) {\n if (remaining === 0) break\n const current = this.state.sourceMaterializations.get(key)\n if (current !== candidate) continue\n // Terminal manifests never participate in reads or activation again. Release their\n // ingestion-only indexes immediately instead of retaining O(root count) memory until the\n // last child row is removed by a later bounded cleanup pass.\n current.rootOrdinals.clear()\n current.ordinalRoots.clear()\n for (const entityKey of current.rowsByEntity.keys()) {\n if (remaining === 0) break\n current.rowsByEntity.delete(entityKey)\n rowsDeleted += 1\n remaining -= 1\n }\n if (current.rowsByEntity.size === 0 && remaining > 0) {\n this.state.sourceMaterializations.delete(key)\n materializationsDeleted += 1\n remaining -= 1\n }\n }\n return { rowsDeleted, materializationsDeleted }\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n let count = 0\n let oldestTerminalAt: string | null = null\n for (const materialization of this.state.sourceMaterializations.values()) {\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null\n ) {\n continue\n }\n count += 1\n if (oldestTerminalAt === null || materialization.terminalAt < oldestTerminalAt) {\n oldestTerminalAt = materialization.terminalAt\n }\n }\n return { count, oldestTerminalAt }\n })\n }\n\n private async assertCurrentExecution(\n input:\n | BeginSourceMaterializationInput\n | {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly execution: ProjectionExecution\n }\n ): Promise<void> {\n await this.assertExecution({\n projectId: input.projectId,\n source: input.source,\n execution: input.execution,\n ...(\"projectionKind\" in input ? { identity: sourceMaterializationIdentity(input) } : {}),\n })\n }\n\n private requireMaterialization(input: {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly materializationId: string\n }): InMemorySourceMaterialization {\n const materialization = this.state.sourceMaterializations.get(\n sourceMaterializationKey(input.projectId, input.source.projectionId, input.materializationId)\n )\n if (!materialization) {\n throw sourceConflict(`Source materialization '${input.materializationId}' does not exist.`)\n }\n return materialization\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const materialization = this.requireMaterialization(input)\n if (materialization.status === \"abandoned\") {\n if (\n materialization.projectionRunId === input.execution.projectionRunId &&\n materialization.terminalAt === input.abandonedAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\" && materialization.status !== \"ready\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'abandoned'.`\n )\n }\n return this.transitionToAbandoned(materialization, input.abandonedAt)\n }\n\n private abandonForReclaim(input: ReclaimSourceMaterializationInput): OntologySourceRecord | null {\n const candidates = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (\n candidates.some(\n ([, materialization]) => materialization.executionToken === input.execution.executionToken\n )\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n const candidate = candidates[0]?.[1]\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n }\n\n private transitionToAbandoned(\n materialization: InMemorySourceMaterialization,\n abandonedAt: string\n ): OntologySourceRecord {\n assertNotBefore(abandonedAt, materialization.createdAt, \"Source abandonedAt\", \"createdAt\")\n if (materialization.readyAt !== null) {\n assertNotBefore(abandonedAt, materialization.readyAt, \"Source abandonedAt\", \"readyAt\")\n }\n const abandoned: InMemorySourceMaterialization = {\n ...materialization,\n status: \"abandoned\",\n executionToken: null,\n terminalAt: abandonedAt,\n updatedAt: abandonedAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n materialization.projectId,\n materialization.source.projectionId,\n materialization.materializationId\n ),\n abandoned\n )\n return sourceMaterializationRecord(abandoned)\n }\n\n private findRunCandidates(\n projectId: string,\n sourceId: string,\n projectionRunId: string\n ): [string, InMemorySourceMaterialization][] {\n return [...this.state.sourceMaterializations.entries()].filter(\n ([, materialization]) =>\n materialization.projectId === projectId &&\n materialization.source.projectionId === sourceId &&\n materialization.projectionRunId === projectionRunId &&\n (materialization.status === \"staging\" || materialization.status === \"ready\")\n )\n }\n}\n\nfunction stageRowsAtomically(\n materialization: InMemorySourceMaterialization,\n rows: StageSourceRowsInput[\"rows\"]\n): StageSourceRowsResult {\n let inserted = 0\n let unchanged = 0\n const newRows = new Map<string, StageSourceRowsInput[\"rows\"][number]>()\n const newRootOrdinals = new Map<string, number>()\n const newOrdinalRoots = new Map<number, string>()\n for (const row of rows) {\n assertSourceStagedRow(materialization.projectionKind, row)\n\n const rootKey = projectionEntityKey(row.root)\n const existingOrdinal =\n materialization.rootOrdinals.get(rootKey) ?? newRootOrdinals.get(rootKey)\n if (existingOrdinal !== undefined && existingOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const existingRoot =\n materialization.ordinalRoots.get(row.stagingOrdinal) ??\n newOrdinalRoots.get(row.stagingOrdinal)\n if (existingRoot !== undefined && existingRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const entityKey = projectionEntityKey(row.assertion)\n const existing = materialization.rowsByEntity.get(entityKey) ?? newRows.get(entityKey)\n if (existing) {\n if (stableJsonStringify(existing) === stableJsonStringify(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n newRootOrdinals.set(rootKey, row.stagingOrdinal)\n newOrdinalRoots.set(row.stagingOrdinal, rootKey)\n newRows.set(entityKey, structuredClone(row))\n inserted += 1\n }\n\n for (const [rootKey, ordinal] of newRootOrdinals) {\n materialization.rootOrdinals.set(rootKey, ordinal)\n }\n for (const [ordinal, rootKey] of newOrdinalRoots) {\n materialization.ordinalRoots.set(ordinal, rootKey)\n }\n for (const [entityKey, row] of newRows) materialization.rowsByEntity.set(entityKey, row)\n return { inserted, unchanged }\n}\n\nfunction assertReadyCounts(\n materialization: InMemorySourceMaterialization,\n rootCount: number,\n assertionCount: number\n): void {\n if (\n materialization.rootOrdinals.size !== rootCount ||\n materialization.ordinalRoots.size !== rootCount ||\n materialization.rowsByEntity.size !== assertionCount\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n for (let ordinal = 0; ordinal < rootCount; ordinal += 1) {\n if (!materialization.ordinalRoots.has(ordinal)) {\n throw new MaterializationValidationError(\n `Source staging ordinals must be contiguous from zero; missing ${ordinal}.`\n )\n }\n }\n assertReadyTopology(materialization)\n}\n\nfunction assertReadyTopology(materialization: InMemorySourceMaterialization): void {\n const rowsByRoot = new Map<string, StageSourceAssertion[]>()\n for (const row of materialization.rowsByEntity.values()) {\n const rootKey = projectionEntityKey(row.root)\n const rows = rowsByRoot.get(rootKey) ?? []\n rows.push(row)\n rowsByRoot.set(rootKey, rows)\n }\n\n for (const rootKey of materialization.rootOrdinals.keys()) {\n const rows = rowsByRoot.get(rootKey) ?? []\n const first = rows[0]\n if (!first) {\n throw new MaterializationValidationError(`Source root ${rootKey} has no staged assertions.`)\n }\n const root = first.root\n\n if (materialization.projectionKind === \"link\") {\n if (\n rows.length !== 1 ||\n root.kind !== \"link\" ||\n first.assertion.kind !== \"link\" ||\n projectionEntityKey(first.assertion) !== rootKey\n ) {\n throw new MaterializationValidationError(\n `Link projection root ${rootKey} must contain exactly its matching link assertion.`\n )\n }\n continue\n }\n\n if (root.kind !== \"object\") {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must be an object.`\n )\n }\n const matchingObjects = rows.filter(\n (row) => row.assertion.kind === \"object\" && projectionEntityKey(row.assertion) === rootKey\n )\n const hasForeignAssertion = rows.some((row) => {\n if (row.assertion.kind === \"object\") return projectionEntityKey(row.assertion) !== rootKey\n return projectionEntityKey({ kind: \"object\", ref: row.assertion.ref.source }) !== rootKey\n })\n if (matchingObjects.length !== 1 || hasForeignAssertion) {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must contain exactly its matching object assertion plus links sourced from that root.`\n )\n }\n }\n}\n\nfunction assertCount(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nfunction assertNotBefore(\n value: string,\n minimum: string,\n label: string,\n minimumLabel: string\n): void {\n if (value < minimum) {\n throw new MaterializationValidationError(`${label} cannot precede source ${minimumLabel}.`)\n }\n}\n\nfunction compareTerminalMaterializations(\n [, left]: readonly [string, InMemorySourceMaterialization],\n [, right]: readonly [string, InMemorySourceMaterialization]\n): number {\n return (\n (left.terminalAt ?? \"\").localeCompare(right.terminalAt ?? \"\") ||\n left.source.projectionId.localeCompare(right.source.projectionId) ||\n left.materializationId.localeCompare(right.materializationId)\n )\n}\n",
32
+ "import { stableJsonStringify } from \"../../../json\"\nimport { MaterializationValidationError } from \"../../../materialization/errors\"\nimport type { ProjectionExecution } from \"../../../materialization/model\"\nimport { projectionEntityKey } from \"../../../materialization/refs\"\nimport {\n assertSourceBeginInput as assertBeginInput,\n assertTimestamp as assertCanonicalTimestamp,\n assertSourceProject as assertProjectAndSource,\n assertSourceCandidateOwner,\n assertSourceExecutionIdentity,\n assertSourceStagedRow,\n assertSourceWriteIdentity as assertWriteIdentity,\n isExactStagingManifest,\n sourceConflict,\n sourceMaterializationIdentity,\n sourceStageRoots,\n} from \"../provider\"\nimport type {\n AbandonSourceMaterializationCandidateInput,\n AbandonSourceMaterializationInput,\n AssertSourceMaterializationExecution,\n BeginSourceMaterializationInput,\n CleanupTerminalSourceMaterializationsInput,\n CleanupTerminalSourceMaterializationsResult,\n GetActiveOntologySourceInput,\n MarkSourceMaterializationReadyInput,\n OntologySourceRecord,\n OntologySourceStorage,\n ReclaimSourceMaterializationInput,\n StageSourceAssertion,\n StageSourceRowsInput,\n StageSourceRowsResult,\n SummarizeTerminalSourceMaterializationsInput,\n TerminalSourceMaterializationSummary,\n} from \"../sources\"\nimport { findActiveSourceMaterialization } from \"./materializations-state\"\nimport {\n assertNonblank,\n type InMemoryOntologyState,\n type InMemorySourceMaterialization,\n insertBounded,\n sourceMaterializationKey,\n sourceMaterializationRecord,\n} from \"./shared-state\"\n\nexport class InMemoryOntologySourceStorage implements OntologySourceStorage {\n constructor(\n private readonly state: InMemoryOntologyState,\n private readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>,\n private readonly assertExecution: AssertSourceMaterializationExecution\n ) {}\n\n async beginMaterialization(\n input: BeginSourceMaterializationInput\n ): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertBeginInput(input)\n await this.assertCurrentExecution(input)\n const key = sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n )\n const existing = this.state.sourceMaterializations.get(key)\n if (existing) {\n if (isExactStagingManifest(sourceMaterializationRecord(existing), input)) {\n return sourceMaterializationRecord(existing)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' already exists with different identity or state.`\n )\n }\n\n const nonterminal = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (nonterminal.length > 0) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a nonterminal source materialization; reclaim it before beginning another.`\n )\n }\n\n const materialization: InMemorySourceMaterialization = {\n projectId: input.projectId,\n source: structuredClone(input.source),\n materializationId: input.materializationId,\n projectionRunId: input.execution.projectionRunId,\n projectionKind: input.projectionKind,\n protocol: input.protocol,\n status: \"staging\",\n executionToken: input.execution.executionToken,\n datasetVersion: structuredClone(input.datasetVersion),\n projectionRevision: input.projectionRevision,\n ownershipHash: input.ownershipHash,\n ontologyRevision: input.ontologyRevision,\n ...(input.base ? { base: structuredClone(input.base) } : {}),\n rootCount: null,\n assertionCount: null,\n createdAt: input.createdAt,\n readyAt: null,\n activatedAt: null,\n terminalAt: null,\n lastCommitId: null,\n updatedAt: input.createdAt,\n rowsByEntity: new Map(),\n roots: new Map(),\n rootOrdinals: new Map(),\n ordinalRoots: new Map(),\n }\n this.state.sourceMaterializations.set(key, materialization)\n return sourceMaterializationRecord(materialization)\n })\n }\n\n async stageRows(input: StageSourceRowsInput): Promise<StageSourceRowsResult> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' is '${materialization.status}' and cannot accept rows.`\n )\n }\n return stageRowsAtomically(materialization, input)\n })\n }\n\n async markReady(input: MarkSourceMaterializationReadyInput): Promise<OntologySourceRecord> {\n return this.runRootOperation(async () => {\n assertWriteIdentity(input)\n assertCanonicalTimestamp(input.readyAt, \"Source readyAt\")\n assertCount(input.rootCount, \"Source root count\")\n assertCount(input.assertionCount, \"Source assertion count\")\n await this.assertCurrentExecution(input)\n const materialization = this.requireMaterialization(input)\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n\n if (materialization.status === \"ready\") {\n if (\n materialization.rootCount === input.rootCount &&\n materialization.assertionCount === input.assertionCount &&\n materialization.readyAt === input.readyAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was marked ready with different counts or time.`\n )\n }\n if (materialization.status !== \"staging\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'ready'.`\n )\n }\n assertNotBefore(input.readyAt, materialization.createdAt, \"Source readyAt\", \"createdAt\")\n assertReadyCounts(materialization, input.rootCount, input.assertionCount)\n\n const ready: InMemorySourceMaterialization = {\n ...materialization,\n status: \"ready\",\n rootCount: input.rootCount,\n assertionCount: input.assertionCount,\n readyAt: input.readyAt,\n updatedAt: input.readyAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n input.projectId,\n input.source.projectionId,\n input.materializationId\n ),\n ready\n )\n return sourceMaterializationRecord(ready)\n })\n }\n\n async getActive(input: GetActiveOntologySourceInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(() => {\n assertProjectAndSource(input)\n const active = findActiveSourceMaterialization(\n this.state,\n input.projectId,\n input.source.projectionId\n )\n return active ? sourceMaterializationRecord(active) : null\n })\n }\n\n async abandon(input: AbandonSourceMaterializationCandidateInput): Promise<OntologySourceRecord>\n async abandon(input: ReclaimSourceMaterializationInput): Promise<OntologySourceRecord | null>\n async abandon(input: AbandonSourceMaterializationInput): Promise<OntologySourceRecord | null> {\n return this.runRootOperation(async () => {\n assertProjectAndSource(input)\n assertSourceExecutionIdentity(input.execution.projectionRunId, input.execution.executionToken)\n assertCanonicalTimestamp(input.abandonedAt, \"Source abandonedAt\")\n await this.assertCurrentExecution(input)\n return input.kind === \"candidate\"\n ? this.abandonCandidate(input)\n : this.abandonForReclaim(input)\n })\n }\n\n async cleanupTerminal(\n input: CleanupTerminalSourceMaterializationsInput\n ): Promise<CleanupTerminalSourceMaterializationsResult> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source cleanup project id\")\n assertCanonicalTimestamp(input.terminalBefore, \"Terminal source cleanup cutoff\")\n if (!Number.isSafeInteger(input.limit) || input.limit <= 0) {\n throw new MaterializationValidationError(\n \"Terminal source cleanup limit must be a positive safe integer.\"\n )\n }\n\n const candidates: [string, InMemorySourceMaterialization][] = []\n for (const entry of this.state.sourceMaterializations.entries()) {\n const materialization = entry[1]\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null ||\n materialization.terminalAt >= input.terminalBefore\n ) {\n continue\n }\n if (\n materialization.roots.size > 0 &&\n ![...materialization.roots.values()].some(\n (root) =>\n !root.active && root.retiredAt !== null && root.retiredAt < input.terminalBefore\n )\n )\n continue\n insertBounded(candidates, entry, input.limit, compareTerminalMaterializations)\n }\n\n let remaining = input.limit\n let rowsDeleted = 0\n let materializationsDeleted = 0\n for (const [key, candidate] of candidates) {\n if (remaining === 0) break\n const current = this.state.sourceMaterializations.get(key)\n if (current !== candidate) continue\n current.rootOrdinals.clear()\n current.ordinalRoots.clear()\n for (const [rootKey, root] of current.roots) {\n if (remaining === 0) break\n if (root.active || root.retiredAt === null || root.retiredAt >= input.terminalBefore)\n continue\n for (const entityKey of root.entityKeys) {\n if (remaining === 0) break\n current.rowsByEntity.delete(entityKey)\n root.entityKeys.delete(entityKey)\n rowsDeleted += 1\n remaining -= 1\n }\n if (root.entityKeys.size === 0 && remaining > 0) {\n current.roots.delete(rootKey)\n current.rootOrdinals.delete(rootKey)\n current.ordinalRoots.delete(root.stagingOrdinal)\n rowsDeleted += 1\n remaining -= 1\n }\n }\n if (current.roots.size === 0 && current.rowsByEntity.size === 0 && remaining > 0) {\n this.state.sourceMaterializations.delete(key)\n materializationsDeleted += 1\n remaining -= 1\n }\n }\n return { rowsDeleted, materializationsDeleted }\n })\n }\n\n async summarizeTerminal(\n input: SummarizeTerminalSourceMaterializationsInput\n ): Promise<TerminalSourceMaterializationSummary> {\n return this.runRootOperation(() => {\n assertNonblank(input.projectId, \"Terminal source summary project id\")\n let count = 0\n let oldestTerminalAt: string | null = null\n for (const materialization of this.state.sourceMaterializations.values()) {\n if (\n materialization.projectId !== input.projectId ||\n (materialization.status !== \"superseded\" && materialization.status !== \"abandoned\") ||\n materialization.terminalAt === null\n ) {\n continue\n }\n count += 1\n if (oldestTerminalAt === null || materialization.terminalAt < oldestTerminalAt) {\n oldestTerminalAt = materialization.terminalAt\n }\n }\n return { count, oldestTerminalAt }\n })\n }\n\n private async assertCurrentExecution(\n input:\n | BeginSourceMaterializationInput\n | {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly execution: ProjectionExecution\n }\n ): Promise<void> {\n await this.assertExecution({\n projectId: input.projectId,\n source: input.source,\n execution: input.execution,\n ...(\"projectionKind\" in input ? { identity: sourceMaterializationIdentity(input) } : {}),\n })\n }\n\n private requireMaterialization(input: {\n readonly projectId: string\n readonly source: BeginSourceMaterializationInput[\"source\"]\n readonly materializationId: string\n }): InMemorySourceMaterialization {\n const materialization = this.state.sourceMaterializations.get(\n sourceMaterializationKey(input.projectId, input.source.projectionId, input.materializationId)\n )\n if (!materialization) {\n throw sourceConflict(`Source materialization '${input.materializationId}' does not exist.`)\n }\n return materialization\n }\n\n private abandonCandidate(\n input: AbandonSourceMaterializationCandidateInput\n ): OntologySourceRecord {\n const materialization = this.requireMaterialization(input)\n if (materialization.status === \"abandoned\") {\n if (\n materialization.projectionRunId === input.execution.projectionRunId &&\n materialization.terminalAt === input.abandonedAt\n ) {\n return sourceMaterializationRecord(materialization)\n }\n throw sourceConflict(\n `Source materialization '${input.materializationId}' was abandoned by another execution or at another time.`\n )\n }\n assertSourceCandidateOwner(sourceMaterializationRecord(materialization), input.execution)\n if (materialization.status !== \"staging\" && materialization.status !== \"ready\") {\n throw sourceConflict(\n `Source materialization '${input.materializationId}' cannot transition from '${materialization.status}' to 'abandoned'.`\n )\n }\n return this.transitionToAbandoned(materialization, input.abandonedAt)\n }\n\n private abandonForReclaim(input: ReclaimSourceMaterializationInput): OntologySourceRecord | null {\n const candidates = this.findRunCandidates(\n input.projectId,\n input.source.projectionId,\n input.execution.projectionRunId\n )\n if (\n candidates.some(\n ([, materialization]) => materialization.executionToken === input.execution.executionToken\n )\n ) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' already has a source materialization owned by the current execution.`\n )\n }\n if (candidates.length > 1) {\n throw sourceConflict(\n `Projection run '${input.execution.projectionRunId}' has multiple nonterminal source materializations.`\n )\n }\n const candidate = candidates[0]?.[1]\n return candidate ? this.transitionToAbandoned(candidate, input.abandonedAt) : null\n }\n\n private transitionToAbandoned(\n materialization: InMemorySourceMaterialization,\n abandonedAt: string\n ): OntologySourceRecord {\n assertNotBefore(abandonedAt, materialization.createdAt, \"Source abandonedAt\", \"createdAt\")\n if (materialization.readyAt !== null) {\n assertNotBefore(abandonedAt, materialization.readyAt, \"Source abandonedAt\", \"readyAt\")\n }\n for (const root of materialization.roots.values()) root.retiredAt = abandonedAt\n const abandoned: InMemorySourceMaterialization = {\n ...materialization,\n status: \"abandoned\",\n executionToken: null,\n terminalAt: abandonedAt,\n updatedAt: abandonedAt,\n }\n this.state.sourceMaterializations.set(\n sourceMaterializationKey(\n materialization.projectId,\n materialization.source.projectionId,\n materialization.materializationId\n ),\n abandoned\n )\n return sourceMaterializationRecord(abandoned)\n }\n\n private findRunCandidates(\n projectId: string,\n sourceId: string,\n projectionRunId: string\n ): [string, InMemorySourceMaterialization][] {\n return [...this.state.sourceMaterializations.entries()].filter(\n ([, materialization]) =>\n materialization.projectId === projectId &&\n materialization.source.projectionId === sourceId &&\n materialization.projectionRunId === projectionRunId &&\n (materialization.status === \"staging\" || materialization.status === \"ready\")\n )\n }\n}\n\nfunction stageRowsAtomically(\n materialization: InMemorySourceMaterialization,\n input: StageSourceRowsInput\n): StageSourceRowsResult {\n let inserted = 0\n let unchanged = 0\n const newRows = new Map<string, StageSourceRowsInput[\"rows\"][number]>()\n const newRootOrdinals = new Map<string, number>()\n const newOrdinalRoots = new Map<number, string>()\n const roots = sourceStageRoots(materialization.projectionKind, input)\n if (!materialization.base && roots.some((root) => root.deleted)) {\n throw new MaterializationValidationError(\"Root deletions require a source delta base.\")\n }\n for (const root of roots) {\n const previous = materialization.roots.get(root.rootKey)\n const otherRoot = materialization.ordinalRoots.get(root.stagingOrdinal)\n if (\n (previous &&\n (previous.deleted !== root.deleted || previous.stagingOrdinal !== root.stagingOrdinal)) ||\n (otherRoot !== undefined && otherRoot !== root.rootKey)\n ) {\n throw new MaterializationValidationError(\n \"Source materialization repeats root or stream ordinal with different content.\"\n )\n }\n newRootOrdinals.set(root.rootKey, root.stagingOrdinal)\n newOrdinalRoots.set(root.stagingOrdinal, root.rootKey)\n }\n for (const row of input.rows) {\n assertSourceStagedRow(materialization.projectionKind, row)\n\n const rootKey = projectionEntityKey(row.root)\n const existingOrdinal =\n materialization.rootOrdinals.get(rootKey) ?? newRootOrdinals.get(rootKey)\n if (existingOrdinal !== undefined && existingOrdinal !== row.stagingOrdinal) {\n throw new MaterializationValidationError(\n `Source materialization repeats root ${rootKey} at a different stream ordinal.`\n )\n }\n const existingRoot =\n materialization.ordinalRoots.get(row.stagingOrdinal) ??\n newOrdinalRoots.get(row.stagingOrdinal)\n if (existingRoot !== undefined && existingRoot !== rootKey) {\n throw new MaterializationValidationError(\n `Source materialization repeats stream ordinal ${row.stagingOrdinal} for another root.`\n )\n }\n\n const entityKey = projectionEntityKey(row.assertion)\n const existing = materialization.rowsByEntity.get(entityKey) ?? newRows.get(entityKey)\n if (existing) {\n if (stableJsonStringify(existing) === stableJsonStringify(row)) {\n unchanged += 1\n continue\n }\n throw new MaterializationValidationError(\n `Source materialization repeats asserted entity ${entityKey}.`\n )\n }\n\n newRootOrdinals.set(rootKey, row.stagingOrdinal)\n newOrdinalRoots.set(row.stagingOrdinal, rootKey)\n newRows.set(entityKey, structuredClone(row))\n inserted += 1\n }\n\n for (const [rootKey, ordinal] of newRootOrdinals) {\n materialization.rootOrdinals.set(rootKey, ordinal)\n }\n for (const [ordinal, rootKey] of newOrdinalRoots) {\n materialization.ordinalRoots.set(ordinal, rootKey)\n }\n for (const root of roots) {\n if (!materialization.roots.has(root.rootKey))\n materialization.roots.set(root.rootKey, {\n root: structuredClone(root.root),\n stagingOrdinal: root.stagingOrdinal,\n deleted: root.deleted,\n entityKeys: new Set(),\n active: false,\n retiredAt: null,\n })\n }\n for (const [entityKey, row] of newRows) {\n materialization.rowsByEntity.set(entityKey, row)\n materialization.roots.get(projectionEntityKey(row.root))!.entityKeys.add(entityKey)\n }\n return { inserted, unchanged }\n}\n\nfunction assertReadyCounts(\n materialization: InMemorySourceMaterialization,\n rootCount: number,\n assertionCount: number\n): void {\n if (\n materialization.rootOrdinals.size !== rootCount ||\n materialization.ordinalRoots.size !== rootCount ||\n materialization.rowsByEntity.size !== assertionCount\n ) {\n throw new MaterializationValidationError(\n \"Source ready counts do not match the staged roots and assertions.\"\n )\n }\n for (let ordinal = 0; ordinal < rootCount; ordinal += 1) {\n if (!materialization.ordinalRoots.has(ordinal)) {\n throw new MaterializationValidationError(\n `Source staging ordinals must be contiguous from zero; missing ${ordinal}.`\n )\n }\n }\n assertReadyTopology(materialization)\n}\n\nfunction assertReadyTopology(materialization: InMemorySourceMaterialization): void {\n const rowsByRoot = new Map<string, StageSourceAssertion[]>()\n for (const row of materialization.rowsByEntity.values()) {\n const rootKey = projectionEntityKey(row.root)\n const rows = rowsByRoot.get(rootKey) ?? []\n rows.push(row)\n rowsByRoot.set(rootKey, rows)\n }\n\n for (const rootKey of materialization.rootOrdinals.keys()) {\n const rows = rowsByRoot.get(rootKey) ?? []\n if (materialization.roots.get(rootKey)?.deleted) {\n if (rows.length > 0)\n throw new MaterializationValidationError(\"Deleted source roots cannot contain assertions.\")\n continue\n }\n const first = rows[0]\n if (!first) {\n throw new MaterializationValidationError(`Source root ${rootKey} has no staged assertions.`)\n }\n const root = first.root\n\n if (materialization.projectionKind === \"link\") {\n if (\n rows.length !== 1 ||\n root.kind !== \"link\" ||\n first.assertion.kind !== \"link\" ||\n projectionEntityKey(first.assertion) !== rootKey\n ) {\n throw new MaterializationValidationError(\n `Link projection root ${rootKey} must contain exactly its matching link assertion.`\n )\n }\n continue\n }\n\n if (root.kind !== \"object\") {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must be an object.`\n )\n }\n const matchingObjects = rows.filter(\n (row) => row.assertion.kind === \"object\" && projectionEntityKey(row.assertion) === rootKey\n )\n const hasForeignAssertion = rows.some((row) => {\n if (row.assertion.kind === \"object\") return projectionEntityKey(row.assertion) !== rootKey\n return projectionEntityKey({ kind: \"object\", ref: row.assertion.ref.source }) !== rootKey\n })\n if (matchingObjects.length !== 1 || hasForeignAssertion) {\n throw new MaterializationValidationError(\n `Object projection root ${rootKey} must contain exactly its matching object assertion plus links sourced from that root.`\n )\n }\n }\n}\n\nfunction assertCount(value: number, label: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new MaterializationValidationError(`${label} must be a nonnegative safe integer.`)\n }\n}\n\nfunction assertNotBefore(\n value: string,\n minimum: string,\n label: string,\n minimumLabel: string\n): void {\n if (value < minimum) {\n throw new MaterializationValidationError(`${label} cannot precede source ${minimumLabel}.`)\n }\n}\n\nfunction compareTerminalMaterializations(\n [, left]: readonly [string, InMemorySourceMaterialization],\n [, right]: readonly [string, InMemorySourceMaterialization]\n): number {\n return (\n (left.terminalAt ?? \"\").localeCompare(right.terminalAt ?? \"\") ||\n left.source.projectionId.localeCompare(right.source.projectionId) ||\n left.materializationId.localeCompare(right.materializationId)\n )\n}\n",
32
33
  "import type { OntologyStorage } from \"..\"\nimport type { InMemoryOntologyState, InMemoryOntologyStorageTestHooks } from \"./shared-state\"\n\nexport interface InMemoryOntologyStorageTestingAdapter {\n setTestHooks(hooks: InMemoryOntologyStorageTestHooks): void\n snapshot(): InMemoryOntologyState\n}\n\nconst testingAdapters = new WeakMap<object, InMemoryOntologyStorageTestingAdapter>()\n\nexport function registerInMemoryOntologyStorageTestingAdapter(\n storage: OntologyStorage,\n adapter: InMemoryOntologyStorageTestingAdapter\n): void {\n testingAdapters.set(storage, adapter)\n}\n\n/** @internal Relative test-only access; intentionally absent from every package barrel. */\nexport function getInMemoryOntologyStorageTestingAdapter(\n storage: OntologyStorage\n): InMemoryOntologyStorageTestingAdapter {\n const adapter = testingAdapters.get(storage)\n if (!adapter) {\n throw new Error(\"[Sixb] In-memory ontology storage testing adapter is unavailable.\")\n }\n return adapter\n}\n\nexport type { InMemoryOntologyStorageTestHooks } from \"./shared-state\"\n",
33
34
  "import type { InMemoryObjectStorage } from \"../../objects/in-memory\"\nimport type { InMemoryTimeseriesStorage } from \"../../timeseries/store\"\nimport type { OntologyStorage } from \"..\"\nimport type { ProviderMaterializationTransactionLifecycle } from \"../provider\"\nimport type { AssertSourceMaterializationExecution } from \"../sources\"\nimport { InMemoryOntologyCommitStorage } from \"./commits\"\nimport { InMemoryOntologyMaterializationStorage } from \"./materializations\"\nimport { InMemoryOntologyOutboxStorage } from \"./outbox\"\nimport {\n cloneOntologyState,\n createInMemoryOntologyState,\n type InMemoryOntologyState,\n type InMemoryOntologyStorageTestHooks,\n restoreOntologyState,\n} from \"./shared-state\"\nimport { InMemoryOntologySourceStorage } from \"./sources\"\nimport {\n type InMemoryOntologyStorageTestingAdapter,\n registerInMemoryOntologyStorageTestingAdapter,\n} from \"./testing\"\n\nexport type InMemoryOntologyStorageSnapshot = InMemoryOntologyState\n\ninterface InMemoryOntologyStorageOptions {\n readonly runRootOperation: <T>(run: () => Promise<T> | T) => Promise<T>\n readonly getTransactionToken: () => object | null\n readonly getMaterializationLifecycle: () => ProviderMaterializationTransactionLifecycle | null\n readonly assertSourceMaterializationExecution: AssertSourceMaterializationExecution\n readonly executionExists: (projectId: string, executionId: string) => Promise<boolean>\n}\n\nexport class InMemoryOntologyStorage implements OntologyStorage {\n private readonly state = createInMemoryOntologyState()\n readonly commits: InMemoryOntologyCommitStorage\n readonly sources: InMemoryOntologySourceStorage\n readonly materializations: InMemoryOntologyMaterializationStorage\n readonly outbox: InMemoryOntologyOutboxStorage\n private testHooks: InMemoryOntologyStorageTestHooks = {}\n private readonly testingAdapter: InMemoryOntologyStorageTestingAdapter = {\n setTestHooks: (hooks) => this.setTestHooks(hooks),\n snapshot: () => this.snapshot(),\n }\n\n constructor(\n objects: InMemoryObjectStorage,\n timeseries: InMemoryTimeseriesStorage,\n options: InMemoryOntologyStorageOptions\n ) {\n this.commits = new InMemoryOntologyCommitStorage(this.state, options.runRootOperation)\n this.sources = new InMemoryOntologySourceStorage(\n this.state,\n options.runRootOperation,\n options.assertSourceMaterializationExecution\n )\n this.outbox = new InMemoryOntologyOutboxStorage(this.state, options.runRootOperation)\n this.materializations = new InMemoryOntologyMaterializationStorage(\n this.state,\n objects,\n timeseries,\n options.getTransactionToken,\n options.getMaterializationLifecycle,\n options.executionExists,\n {\n beforeRead: (boundary) => this.testHooks.beforeRead?.(boundary),\n beforeWrite: (boundary, ordinal) => this.testHooks.beforeWrite?.(boundary, ordinal),\n observeBuffer: (boundary, rows) => this.testHooks.observeBuffer?.(boundary, rows),\n observeWork: (records) => this.testHooks.observeWork?.(records),\n }\n )\n registerInMemoryOntologyStorageTestingAdapter(this, this.testingAdapter)\n }\n\n /** @internal Test-only failure injection; not part of OntologyStorage. */\n setTestHooks(hooks: InMemoryOntologyStorageTestHooks): void {\n this.testHooks = hooks\n }\n\n /** @internal Register a decorated facade as an alias for the same test adapter. */\n registerTestingAlias(storage: OntologyStorage): void {\n registerInMemoryOntologyStorageTestingAdapter(storage, this.testingAdapter)\n }\n\n snapshot(): InMemoryOntologyStorageSnapshot {\n return cloneOntologyState(this.state)\n }\n\n restore(snapshot: InMemoryOntologyStorageSnapshot): void {\n restoreOntologyState(this.state, snapshot)\n }\n\n completeTransaction(transactionToken: object): void {\n this.materializations.deactivateTransaction(transactionToken)\n }\n}\n\nexport type { InMemoryOntologyStorageTestHooks } from \"./shared-state\"\n",
34
35
  "export type RunListOrder = \"asc\" | \"desc\"\n\nexport type { ListPage as RunListPage, ListWindow as RunListWindow } from \"./pagination\"\nexport { paginate } from \"./pagination\"\n\nexport interface StartedAtRunRecord<TStatus extends string = string> {\n readonly id: string\n readonly status: TStatus\n readonly startedAt?: Date\n readonly queuedAt?: Date\n}\n\nexport function storageKey(projectId: string, id: string): string {\n return `${projectId}:${id}`\n}\n\nexport function cloneRecord<T>(record: T): T {\n return structuredClone(record)\n}\n\nexport function hasEmptyStatuses(input: { readonly statuses?: readonly unknown[] }): boolean {\n return input.statuses !== undefined && input.statuses.length === 0\n}\n\nexport function toStatusSet<TStatus extends string>(\n statuses: readonly TStatus[] | undefined\n): ReadonlySet<TStatus> | null {\n return statuses ? new Set(statuses) : null\n}\n\nexport function matchesRunListDateFilters<TStatus extends string>(\n record: StartedAtRunRecord<TStatus>,\n filters: {\n readonly statuses: ReadonlySet<TStatus> | null\n readonly startedAfter?: Date\n readonly startedBefore?: Date\n }\n): boolean {\n if (filters.statuses && !filters.statuses.has(record.status)) {\n return false\n }\n\n const startedAt = effectiveStartedAt(record)\n\n if (filters.startedAfter && startedAt < filters.startedAfter) {\n return false\n }\n\n if (filters.startedBefore && startedAt > filters.startedBefore) {\n return false\n }\n\n return true\n}\n\nexport function compareStartedAt(\n left: { readonly id: string; readonly startedAt?: Date; readonly queuedAt?: Date },\n right: { readonly id: string; readonly startedAt?: Date; readonly queuedAt?: Date },\n order: RunListOrder\n): number {\n const delta = effectiveStartedAt(left).getTime() - effectiveStartedAt(right).getTime()\n if (delta !== 0) {\n return order === \"asc\" ? delta : -delta\n }\n\n if (left.id === right.id) {\n return 0\n }\n\n return order === \"asc\" ? left.id.localeCompare(right.id) : right.id.localeCompare(left.id)\n}\n\nexport function latestStartedAtByOwnerId<\n TRecord extends { readonly id: string; readonly startedAt?: Date; readonly queuedAt?: Date },\n>(\n records: readonly TRecord[],\n ownerIds: readonly string[],\n ownerIdFor: (record: TRecord) => string\n): readonly TRecord[] {\n const uniqueOwnerIds = [...new Set(ownerIds)]\n if (uniqueOwnerIds.length === 0) {\n return []\n }\n\n const requested = new Set(uniqueOwnerIds)\n const latestByOwnerId = new Map<string, TRecord>()\n\n for (const record of records) {\n const ownerId = ownerIdFor(record)\n if (!requested.has(ownerId)) {\n continue\n }\n\n const current = latestByOwnerId.get(ownerId)\n if (!current || compareStartedAt(record, current, \"desc\") < 0) {\n latestByOwnerId.set(ownerId, record)\n }\n }\n\n return uniqueOwnerIds.flatMap((ownerId) => {\n const record = latestByOwnerId.get(ownerId)\n return record ? [record] : []\n })\n}\n\nfunction effectiveStartedAt(record: {\n readonly id: string\n readonly startedAt?: Date\n readonly queuedAt?: Date\n}): Date {\n const value = record.startedAt ?? record.queuedAt\n if (!value) {\n throw new Error(`[Sixb] Run '${record.id}' has neither startedAt nor queuedAt.`)\n }\n return value\n}\n",
@@ -51,7 +52,7 @@
51
52
  "import type { Storage } from \"../types\"\nimport { isMigrationCapableStorage } from \"./migrate-storage\"\n\nexport interface StorageSchemaCheck {\n readonly ok: boolean\n /**\n * Whether anything was read. False when the storage exposes no migrators: usable on the\n * strength of having no schema rather than of a verified one.\n */\n readonly verified: boolean\n /** Absent only when `ok`. Names the adapter, the state, and what to do about it. */\n readonly reason?: string\n}\n\n/**\n * Reports whether the configured storage's schema is usable, without touching it.\n *\n * Storage with no migrators is usable by definition. Failures are returned rather than thrown,\n * because both callers report instead of aborting: `/ready` and `sixb check`.\n */\nexport async function checkStorageSchema(storage: Storage): Promise<StorageSchemaCheck> {\n if (!isMigrationCapableStorage(storage)) return { ok: true, verified: false }\n\n try {\n // `status()` is the only read-only member of the migrator contract: `migrate()` calls\n // `ensure()` first, so it runs DDL and takes an advisory lock. This serves `/ready`.\n const statuses = await Promise.all(storage.migrators.map((migrator) => migrator.status()))\n const unusable = statuses.filter((status) => status.state !== \"current\")\n\n if (unusable.length === 0) return { ok: true, verified: true }\n\n return {\n ok: false,\n verified: true,\n // Named, because \"could not be verified\" leaves an operator guessing between a missing\n // migration, a schema newer than the build, and no database at all.\n reason: unusable\n .map((status) => `${status.adapterId}: ${status.state} — ${status.reason ?? \"\"}`)\n .join(\"; \"),\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n ok: false,\n verified: false,\n reason: `Storage schema could not be verified: ${message}`,\n }\n }\n}\n",
52
53
  "import type {\n DefineMigrationsOptions,\n MigrationHistoryStore,\n MigrationPlan,\n MigrationRecord,\n MigrationReport,\n MigrationSet,\n MigrationStatus,\n MigrationStep,\n MigrationStepOptions,\n} from \"./types\"\n\nexport interface PlanMigrationSetParams<TContext> {\n readonly migrations: MigrationSet<TContext>\n readonly state: MigrationHistoryStore\n}\n\nexport interface RunMigrationSetParams<TContext> extends PlanMigrationSetParams<TContext> {\n readonly context: TContext\n readonly now?: () => string\n}\n\nexport function step<TContext>(\n id: string,\n up: (context: TContext) => void | Promise<void>,\n options: MigrationStepOptions = {}\n): MigrationStep<TContext> {\n const { version, name } = parseMigrationId(id)\n\n return {\n id,\n version,\n name,\n checksum: options.checksum,\n up,\n }\n}\n\nexport function defineMigrations<TContext>(\n options: DefineMigrationsOptions<TContext>\n): MigrationSet<TContext> {\n const steps = [...options.steps]\n assertValidSteps(options.adapterId, steps)\n\n return {\n adapterId: options.adapterId,\n latestVersion: steps.at(-1)?.version ?? 0,\n steps,\n }\n}\n\nasync function planMigrationSet<TContext>(\n params: PlanMigrationSetParams<TContext>\n): Promise<MigrationPlan<TContext>> {\n await params.state.ensure()\n\n const rows = await params.state.readHistory(params.migrations.adapterId)\n const applied = assertAppliedPrefix(params.migrations, rows)\n\n return {\n adapterId: params.migrations.adapterId,\n latestVersion: params.migrations.latestVersion,\n applied,\n pending: params.migrations.steps.slice(applied.length),\n }\n}\n\nexport async function runMigrationSet<TContext>(\n params: RunMigrationSetParams<TContext>\n): Promise<MigrationReport> {\n const now = params.now ?? (() => new Date().toISOString())\n const plan = await planMigrationSet(params)\n const applied: string[] = []\n\n for (const migration of plan.pending) {\n await params.state.transaction(async () => {\n await params.state.markStarted(plan.adapterId, migration, now())\n await migration.up(params.context)\n await params.state.markApplied(plan.adapterId, migration, now())\n })\n\n applied.push(migration.id)\n }\n\n return {\n adapterId: plan.adapterId,\n latestVersion: plan.latestVersion,\n status: applied.length > 0 ? \"migrated\" : \"current\",\n applied,\n skipped: plan.applied.map((migration) => migration.id),\n }\n}\n\nfunction parseMigrationId(id: string): { version: number; name: string } {\n const match = /^(\\d+)(?:[-_](.+))?$/.exec(id)\n\n if (!match) {\n throw new Error(`[Sixb] Migration id must start with a numeric prefix: ${id}`)\n }\n\n const version = Number(match[1])\n\n if (!Number.isInteger(version) || version < 1) {\n throw new Error(`[Sixb] Migration id must start with a positive version: ${id}`)\n }\n\n return {\n version,\n name: match[2] ?? id,\n }\n}\n\nfunction assertValidSteps<TContext>(\n adapterId: string,\n steps: readonly MigrationStep<TContext>[]\n): void {\n let previousVersion = 0\n\n for (const migration of steps) {\n if (migration.version <= previousVersion) {\n throw new Error(`[${adapterId}] Migrations must be ordered by ascending version.`)\n }\n\n previousVersion = migration.version\n }\n}\n\n/**\n * Classifies migration history without touching the database.\n *\n * The single source of truth for what a history means. `status()` reports the result\n * and `assertAppliedPrefix` throws on it, so the read-only probe and the migration\n * path can never disagree about whether a database is usable.\n *\n * `rows: null` means the history table itself is absent, which a probe must be able to\n * express without creating it.\n */\nexport function describeMigrationHistory<TContext>(params: {\n readonly migrations: MigrationSet<TContext>\n readonly rows: readonly MigrationRecord[] | null\n}): MigrationStatus {\n const { migrations, rows } = params\n const base = { adapterId: migrations.adapterId, latestVersion: migrations.latestVersion }\n\n // An adapter that declares no migrations and has recorded none is as current as it can\n // be. Reading that as `uninitialized` sent an operator to run `sixb db migrate`, which\n // would have applied nothing and reported the same state again. Only the empty history\n // qualifies: an adapter with no steps whose database recorded some is `ahead`, which\n // the walk below still finds.\n if (rows === null) {\n return migrations.steps.length === 0\n ? { ...base, appliedVersion: 0, state: \"current\" }\n : {\n ...base,\n appliedVersion: 0,\n state: \"uninitialized\",\n reason: \"No migration history exists. Run `sixb db migrate`.\",\n }\n }\n\n const applied = [...rows].sort((a, b) => a.version - b.version)\n const appliedVersion = applied.at(-1)?.version ?? 0\n const found = { ...base, appliedVersion }\n const seen = new Set<number>()\n\n for (const row of applied) {\n if (row.adapterId !== migrations.adapterId) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Migration state belongs to a different adapter: ${row.adapterId}`,\n }\n }\n\n if (row.status === \"started\") {\n return {\n ...found,\n state: \"dirty\",\n reason: `Migration '${row.id}' started and never finished. Resolve it by hand before serving traffic.`,\n }\n }\n\n if (row.status !== \"applied\") {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Invalid migration status: ${row.status}`,\n }\n }\n\n if (seen.has(row.version)) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Duplicate applied migration: ${row.version}`,\n }\n }\n\n seen.add(row.version)\n }\n\n for (const [index, row] of applied.entries()) {\n const migration = migrations.steps[index]\n\n if (!migration || row.version > migrations.latestVersion) {\n return {\n ...found,\n state: \"ahead\",\n reason:\n \"Database schema is newer than this Sixb version. Downgrades are not supported; \" +\n \"deploy a build that knows this schema.\",\n }\n }\n\n if (row.version !== migration.version || row.id !== migration.id) {\n return {\n ...found,\n state: \"incompatible\",\n reason: \"Applied migration history does not match declared migrations\",\n }\n }\n\n if ((row.checksum ?? null) !== (migration.checksum ?? null)) {\n return {\n ...found,\n state: \"incompatible\",\n reason: `Applied migration checksum changed: ${row.id}`,\n }\n }\n }\n\n if (applied.length === 0) {\n return migrations.steps.length === 0\n ? { ...found, state: \"current\" }\n : {\n ...found,\n state: \"uninitialized\",\n reason: \"Migration history is empty. Run `sixb db migrate`.\",\n }\n }\n\n const pendingCount = migrations.steps.length - applied.length\n if (pendingCount > 0) {\n return {\n ...found,\n state: \"pending\",\n reason: `${pendingCount} migration(s) are not applied. Run \\`sixb db migrate\\`.`,\n }\n }\n\n return { ...found, state: \"current\" }\n}\n\nfunction assertAppliedPrefix<TContext>(\n migrations: MigrationSet<TContext>,\n rows: readonly MigrationRecord[]\n): readonly MigrationRecord[] {\n const status = describeMigrationHistory({ migrations, rows })\n\n // `uninitialized` and `pending` are the normal inputs to a migration, not failures.\n if (\n status.state !== \"current\" &&\n status.state !== \"uninitialized\" &&\n status.state !== \"pending\"\n ) {\n throw new Error(`[${migrations.adapterId}] ${status.reason}`)\n }\n\n return [...rows].sort((a, b) => a.version - b.version)\n}\n"
53
54
  ],
54
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAM,cAAgC,OAAU,QAA0C,IAAI;AAE9F,SAAS,YAAY,CAAC,WAAmB,IAAoB;AAAA,EAC3D,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AAAA;AAGvC,SAAS,cAAc,CAAC,OAAe,WAAyB;AAAA,EAC9D,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,gBAAe,iCAAiC,6BAA6B;AAAA,EACzF;AAAA;AAGF,SAAS,oBAAoB,CAAC,QAA0C;AAAA,EACtE,OAAO,gBAAgB,MAAM;AAAA;AAG/B,SAAS,eAAe,CAAC,QAA0C;AAAA,EACjE,OAAO,gBAAgB,MAAM;AAAA;AAG/B,SAAS,gBAAgB,CAAC,SAAyE;AAAA,EACjG,OAAO,gBAAgB,OAAO;AAAA;AAGhC,SAAS,cAA6C,CACpD,OACA,eAC0B;AAAA,EAC1B,OAAO,kBAAkB,YACpB,uBAAsB,KAAK,IAC5B,uBAAsB,OAAO,aAAa;AAAA;AAGhD,SAAS,kBAAkB,CACzB,OACA,aAC0B;AAAA,EAC1B,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,MACA,QAAQ,gBAAgB,MAAM,MAAM;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,eAAe,MAAM,OAAO,WAAW;AAAA,EAChD;AAAA;AAGF,SAAS,gBAAgB,CACvB,OACA,aACwB;AAAA,EACxB,IAAI,MAAM,WAAW,aAAa;AAAA,IAChC,OAAO;AAAA,MACL,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,eAAe,MAAM,OAAO,SAAS;AAAA,EAC9C;AAAA;AAGF,SAAS,WAAW,CAAC,GAAoB,GAAoB,OAA+B;AAAA,EAC1F,MAAM,SAAS,EAAE,aAAa,EAAE;AAAA,EAChC,MAAM,UAAU,EAAE,aAAa,EAAE;AAAA,EACjC,MAAM,QAAQ,OAAO,QAAQ,IAAI,QAAQ,QAAQ;AAAA,EACjD,IAAI,UAAU,GAAG;AAAA,IACf,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,EACpC;AAAA,EAEA,IAAI,EAAE,OAAO,EAAE,IAAI;AAAA,IACjB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,QAAQ,EAAE,GAAG,cAAc,EAAE,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,EAAE;AAAA;AAAA;AAGtE,MAAM,0BAAqD;AAAA,EAK7C;AAAA,EAJF,OAAO,IAAI;AAAA,EACX;AAAA,EAEjB,WAAW,CACQ,YACjB,QAA0D,CAAC,GAC3D;AAAA,IAFiB;AAAA,IAGjB,KAAK,mBAAmB,MAAM,oBAAoB;AAAA;AAAA,EAGpD,QAAQ,GAAqC;AAAA,IAC3C,OAAO,gBAAgB,KAAK,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,UAAkD;AAAA,IACxD,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA;AAAA,OAGI,uBAAsB,CAAC,OAAoE;AAAA,IAC/F,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,KAAK,0BAA0B,KAAK,CAAC,CAAC;AAAA;AAAA,OAG1F,MAAK,CAAC,OAAsD;AAAA,IAChE,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAClC,IAAI,YAAY,CAAC,wCAAuC,UAAU,KAAK,GAAG;AAAA,QACxE,MAAM,IAAI,gBACR,sBAAsB,MAAM,mCAAmC,MAAM,aACvE;AAAA,MACF;AAAA,MACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QACC,IAAI,cAAc,MAAM,aACxB,IAAI,OAAO,MAAM,MACjB,IAAI,gBAAgB,MAAM,WAC9B,GACA;AAAA,QACA,MAAM,IAAI,gBACR,qBAAqB,MAAM,qDAC7B;AAAA,MACF;AAAA,MACA,MAAM,0BAAyB;AAAA,QAC7B,YAAY,KAAK;AAAA,QACjB,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,OAAO,MAAM;AAAA,QACb,UAAU,MAAM;AAAA,MAClB,CAAC;AAAA,MAED,MAAM,SAA0B;AAAA,QAC9B,IAAI,MAAM;AAAA,QACV,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,UAAU,MAAM;AAAA,QAChB,SAAS,iBAAiB,MAAM,OAAO;AAAA,QACvC,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,UAAU,IAAI,KAAK,MAAM,YAAY,IAAI,IAAM;AAAA,QAC/C,QAAQ,gBAAgB,MAAM,MAAM;AAAA,QACpC,gBAAgB,MAAM;AAAA,MACxB;AAAA,MAEA,IAAI,UAAU;AAAA,QACZ,MAAM,OAAwB;AAAA,aACzB;AAAA,UACH,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU,OAAO;AAAA,UACjB,WAAW;AAAA,UACX,YAAY;AAAA,UACZ,OAAO;AAAA,UACP,WAAW;AAAA,UACX,SAAS;AAAA,QACX;AAAA,QACA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,QACxC,OAAO,qBAAqB,IAAI;AAAA,MAClC;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,MAC1C,OAAO,qBAAqB,MAAM;AAAA,KACnC;AAAA;AAAA,OAGG,MAAK,CAAC,OAAsD;AAAA,IAChE,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAElC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,sBAAsB,MAAM,8BAA8B,MAAM,aAClE;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,UAAU;AAAA,QAChC,MAAM,IAAI,gBACR,sBAAsB,MAAM,iCAAiC,SAAS,UACxE;AAAA,MACF;AAAA,MAEA,MAAM,OAAwB;AAAA,WACzB;AAAA,QACH,QAAQ;AAAA,QACR,OAAO,MAAM,SAAS;AAAA,QACtB,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,QACjD,OAAO;AAAA,MACT;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,qBAAqB,IAAI;AAAA,KACjC;AAAA;AAAA,OAGG,WAAU,CAAC,OAA2D;AAAA,IAC1E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,kBAAkB,KAAK,MAAM,WAAW,MAAM,IAAI,aAAa;AAAA,MACrF,MAAM,OAAwB;AAAA,WACzB;AAAA,QACH,OAAO,MAAM;AAAA,MACf;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,qBAAqB,IAAI;AAAA,KACjC;AAAA;AAAA,OAGG,gBAAe,CAAC,OAA6D;AAAA,IACjF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,kBAAkB,KAAK,MAAM,WAAW,MAAM,IAAI,kBAAkB;AAAA,MAC1F,MAAM,YAAY,mBAAmB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MAErF,IAAI,SAAS,WAAW;AAAA,QACtB,IAAI,4BAA2B,SAAS,WAAW,SAAS,GAAG;AAAA,UAC7D,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,gBACR,sBAAsB,MAAM,+CAC9B;AAAA,MACF;AAAA,MAEA,MAAM,OAAwB;AAAA,WACzB;AAAA,QACH,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,qBAAqB,IAAI;AAAA,KACjC;AAAA;AAAA,OAGG,cAAa,CAAC,OAA2D;AAAA,IAC7E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,kBAAkB,KAAK,MAAM,WAAW,MAAM,IAAI,gBAAgB;AAAA,MACxF,MAAM,UAAU,iBAAiB,OAAO,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM,CAAC;AAAA,MAEjF,IAAI,SAAS,SAAS;AAAA,QACpB,IAAI,4BAA2B,SAAS,SAAS,OAAO,GAAG;AAAA,UACzD,OAAO,qBAAqB,QAAQ;AAAA,QACtC;AAAA,QAEA,MAAM,IAAI,gBACR,sBAAsB,MAAM,6CAC9B;AAAA,MACF;AAAA,MAEA,MAAM,OAAwB;AAAA,WACzB;AAAA,QACH,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,qBAAqB,IAAI;AAAA,KACjC;AAAA;AAAA,OAGG,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAElC,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,gBACR,sBAAsB,MAAM,8BAA8B,MAAM,aAClE;AAAA,MACF;AAAA,MAEA,IAAI,qBAAoB,QAAQ,GAAG;AAAA,QACjC,MAAM,IAAI,gBACR,sBAAsB,MAAM,2CAA2C,SAAS,UAClF;AAAA,MACF;AAAA,MAEA,MAAM,QACJ,MAAM,WAAW,cAAe,MAAM,SAAS,SAAS,QAAS,MAAM,MAAM,QAAQ;AAAA,MAEvF,MAAM,OAAwB;AAAA,WACzB;AAAA,QACH,QAAQ,MAAM;AAAA,QACd;AAAA,QACA,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,MACrD;AAAA,MAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,WACK;AAAA,QACH,OAAO;AAAA,MACT,IACA;AAAA,WACK;AAAA,QACH,OAAO,eAAe,MAAM,KAAK;AAAA,MACnC;AAAA,MAEN,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,qBAAqB,IAAI;AAAA,KACjC;AAAA;AAAA,EAGK,iBAAiB,CACvB,KACA,WACA,IACA,WACiB;AAAA,IACjB,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAElC,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,gBAAe,sBAAsB,8BAA8B,aAAa;AAAA,IAC5F;AAAA,IAEA,IAAI,SAAS,WAAW,WAAW;AAAA,MACjC,MAAM,IAAI,gBACR,sBAAsB,cAAc,0BAA0B,SAAS,UACzE;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,QAAO,CAAC,QAA4E;AAAA,IACxF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,MACtE,OAAO,SAAS,qBAAqB,MAAM,IAAI;AAAA,KAChD;AAAA;AAAA,OAGG,KAAI,CAAC,OAA2D;AAAA,IACpE,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,IAAI,MAAM,WAAW,WAAW,GAAG;AAAA,QACjC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,MAC9C;AAAA,MAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC7B,MAAM,SAAS,MAAM,UAAU;AAAA,MAC/B,MAAM,QAAQ,MAAM,SAAS,KAAK,KAAK;AAAA,MACvC,MAAM,YAAY,MAAM,YAAY,IAAI,IAAI,MAAM,SAAS,IAAI;AAAA,MAC/D,MAAM,gBAAgB,MAAM,gBAAgB,IAAI,IAAI,MAAM,aAAa,IAAI;AAAA,MAC3E,MAAM,WAAW,MAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,MAE5D,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,WAAW,OAAO,aAAa,MAAM,WAAW,IAAK,EAC/E,OAAO,CAAC,WAAY,YAAY,UAAU,IAAI,OAAO,QAAQ,IAAI,IAAK,EACtE,OAAO,CAAC,WACP,gBACI,OAAO,QAAQ,SAAS,YAAY,cAAc,IAAI,OAAO,QAAQ,YAAY,IACjF,IACN,EACC,OAAO,CAAC,WACP,MAAM,UAAU,qBAAoB,OAAO,SAAS,MAAM,OAAO,IAAI,IACvE,EACC,OAAO,CAAC,WACP,MAAM,eACF,OAAO,QAAQ,SAAS,YAAY,OAAO,QAAQ,iBAAiB,MAAM,eAC1E,IACN,EACC,OAAO,CAAC,WACP,MAAM,YACF,OAAO,QAAQ,SAAS,YAAY,OAAO,QAAQ,cAAc,MAAM,YACvE,IACN,EACC,OAAO,CAAC,WAAY,WAAW,SAAS,IAAI,OAAO,MAAM,IAAI,IAAK,EAClE,OAAO,CAAC,WACP,MAAM,gBAAgB,OAAO,aAAa,OAAO,aAAa,MAAM,eAAe,IACrF,EACC,OAAO,CAAC,WACP,MAAM,iBAAiB,OAAO,aAAa,OAAO,aAAa,MAAM,gBAAgB,IACvF,EACC,KAAK,CAAC,GAAG,MAAM,YAAY,GAAG,GAAG,KAAK,CAAC;AAAA,MAE1C,MAAM,QAAQ,SAAS;AAAA,MACvB,MAAM,OAAO,SAAS,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,oBAAoB;AAAA,MAC5E,OAAO,EAAE,MAAM,SAAS,SAAS,KAAK,SAAS,OAAO,MAAM;AAAA,KAC7D;AAAA;AAAA,EAGK,yBAAyB,CAAC,OAA2D;AAAA,IAC3F,eAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,eAAe,MAAM,OAAO,OAAO;AAAA,IACnC,eAAe,MAAM,UAAU,UAAU;AAAA,IAEzC,MAAM,WAAW,KAAK,KAAK,IAAI,aAAa,MAAM,WAAW,MAAM,KAAK,CAAC;AAAA,IACzE,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,gBACR,sBAAsB,MAAM,iCAAiC,MAAM,aACrE;AAAA,IACF;AAAA,IACA,IAAI,SAAS,aAAa,MAAM,UAAU;AAAA,MACxC,MAAM,IAAI,gBACR,sBAAsB,MAAM,qCAAqC,MAAM,YACzE;AAAA,IACF;AAAA,IACA,IAAI,SAAS,WAAW,WAAW;AAAA,MACjC,MAAM,IAAI,gBACR,sBAAsB,MAAM,0CAA0C,SAAS,UACjF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;;AChbO,IAAM,iCAAgC;;;ACoC7C,SAAS,gBAAgB,CACvB,SAC8C;AAAA,EAC9C,OAAO,UAAU,kBAAiB,SAAS,wBAAuB,IAAI;AAAA;AAGxE,SAAS,GAAG,CAAC,WAAmB,IAAoB;AAAA,EAClD,OAAO,GAAG,aAAa;AAAA;AAGzB,SAAS,KAAQ,CAAC,OAAa;AAAA,EAC7B,OAAO,gBAAgB,KAAK;AAAA;AAG9B,SAAS,aAAa,CACpB,MACA,OACA,QACA,SACA,OACQ;AAAA,EACR,MAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,EAC5D,IAAI,UAAU,GAAG;AAAA,IACf,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,EACpC;AAAA,EACA,IAAI,WAAW,SAAS;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EACA,OAAO,UAAU,QAAQ,OAAO,cAAc,OAAO,IAAI,QAAQ,cAAc,MAAM;AAAA;AASvF,SAAS,WAAc,CAAC,MAAW,SAAS,GAAG,OAA2B;AAAA,EACxE,MAAM,QAAQ,KAAK;AAAA,EACnB,MAAM,MAAM,UAAU,YAAY,QAAQ,SAAS;AAAA,EACnD,MAAM,OAAO,KAAK,MAAM,QAAQ,GAAG;AAAA,EACnC,OAAO,EAAE,MAAM,SAAS,SAAS,KAAK,SAAS,OAAO,MAAM;AAAA;AAAA;AAyB9D,MAAM,yBAAqD;AAAA,EAC5B;AAAA,EAA7B,WAAW,CAAkB,OAAwB;AAAA,IAAxB;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,YAAY,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAC/C,IAAI,KAAK,MAAM,QAAQ,IAAI,SAAS,GAAG;AAAA,MACrC,MAAM,IAAI,mBACR,gBACA,wBAAwB,MAAM,mCAAmC,MAAM,aACzE;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACxD,MAAM,SAA4B;AAAA,MAChC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,gBAAgB,MAAM,MAAM,cAAc;AAAA,SACtC,MAAM,UAAU,YAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;AAAA,MAC1D,QAAQ,MAAM,UAAU;AAAA,MACxB,aAAa;AAAA,MACb,cAAc;AAAA,MACd;AAAA,MACA,WAAW,IAAI,KAAK,MAAM,aAAa,SAAS;AAAA,IAClD;AAAA,IAEA,KAAK,MAAM,QAAQ,IAAI,WAAW,MAAM,MAAM,CAAC;AAAA,IAC/C,OAAO,MAAM,MAAM;AAAA;AAAA,OAGf,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,IAAI,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACtE,OAAO,SAAS,MAAM,MAAM,IAAI;AAAA;AAAA,OAG5B,KAAI,CAAC,OAA+D;AAAA,IACxE,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,MAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC5D,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,OAAO,CAAC,EAC7C,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,WAAW,SAAS,IAAI,OAAO,MAAM,IAAI,IAAK,EAClE,OAAO,CAAC,WACP,MAAM,iBAAiB,iBAAgB,OAAO,gBAAgB,MAAM,cAAc,IAAI,IACxF,EACC,KAAK,CAAC,GAAG,MACR,cACE,EAAE,iBAAiB,EAAE,WACrB,EAAE,iBAAiB,EAAE,WACrB,EAAE,IACF,EAAE,IACF,KACF,CACF;AAAA,IAEF,QAAQ,MAAM,SAAS,UAAU,YAAY,UAAU,MAAM,QAAQ,MAAM,KAAK;AAAA,IAChF,OAAO,EAAE,SAAS,KAAK,IAAI,KAAK,GAAG,SAAS,MAAM;AAAA;AAEtD;AAAA;AAIA,MAAM,sBAA+C;AAAA,EAEhC;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,OACA,YACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,OAAM,CAAC,OAAiE;AAAA,IAC5E,gCAA+B,MAAM,IAAI;AAAA,IACzC,MAAM,yBAAwB;AAAA,MAC5B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAGD,MAAM,YAAY,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,IACrD,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC/C,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,mBACR,oBACA,wBAAwB,MAAM,oCAAoC,MAAM,aAC1E;AAAA,IACF;AAAA,IACA,IAAI,OAAO,gBAAgB,MAAM;AAAA,MAC/B,MAAM,IAAI,mBACR,qBACA,wBAAwB,MAAM,wCAAwC,OAAO,eAC/E;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAC5C,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,GAAG;AAAA,MAC/B,MAAM,IAAI,mBACR,gBACA,qBAAqB,MAAM,mCAAmC,MAAM,aACtE;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,KAC5B,CAAC,QAAQ,IAAI,cAAc,MAAM,aAAa,IAAI,gBAAgB,MAAM,WAC1E,GACA;AAAA,MACA,MAAM,IAAI,mBACR,gBACA,qBAAqB,MAAM,oDAC7B;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACxD,MAAM,MAAkC;AAAA,MACtC,MAAM;AAAA,MACN,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,kBAAkB,MAAM;AAAA,MACxB,MAAM,MAAM,MAAM,IAAI;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT;AAAA,IACF;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,IAEtC,MAAM,gBAAmC;AAAA,SACpC;AAAA,MACH,aAAa,IAAI;AAAA,MACjB,WAAW;AAAA,IACb;AAAA,IACA,KAAK,MAAM,QAAQ,IAAI,WAAW,MAAM,aAAa,CAAC;AAAA,IAEtD,OAAO,MAAM,GAAG;AAAA;AAAA,OAGZ,eAAc,CAAC,OAA2D;AAAA,IAC9E,8BAA6B,KAAK;AAAA,IAClC,MAAM,YAAY,MAAM,yBAAwB;AAAA,MAC9C,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IAED,MAAM,SAAS,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAC5C,MAAM,WAAW,KAAK,MAAM,KAAK,IAAI,MAAM;AAAA,IAC3C,IAAI,UAAU;AAAA,MACZ,IAAI,+BAA8B,UAAU,KAAK;AAAA,QAAG,OAAO,MAAM,QAAQ;AAAA,MACzE,MAAM,IAAI,mBACR,gBACA,wBAAwB,MAAM,qDAChC;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,WAAW,CAAC;AAAA,IAC1E,IAAI,CAAC,UAAU,OAAO,SAAS,gBAAgB;AAAA,MAC7C,MAAM,IAAI,mBACR,iBACA,4BAA4B,MAAM,6BACpC;AAAA,IACF;AAAA,IACA,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,mBACR,iBACA,4BAA4B,OAAO,+BAA+B,OAAO,WAC3E;AAAA,IACF;AAAA,IACA,IACE,UAAU,OAAO,SAAS,eAC1B,UAAU,OAAO,gBAAgB,OAAO,aACxC;AAAA,MACA,MAAM,IAAI,mBACR,iBACA,8BAA8B,UAAU,2CAA2C,OAAO,eAC5F;AAAA,IACF;AAAA,IACA,IAAI,OAAO,WAAW,UAAU,MAAM,sBAAsB;AAAA,MAC1D,MAAM,IAAI,mBACR,kBACA,4BAA4B,OAAO,2CACrC;AAAA,IACF;AAAA,IACA,MAAM,iBAAiB,CAAC,GAAG,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,OACnD,CAAC,QACC,IAAI,SAAS,cACb,IAAI,cAAc,MAAM,aACxB,IAAI,gBAAgB,OAAO,OAC1B,IAAI,WAAW,YAAY,IAAI,WAAW,UAC/C,EAAE;AAAA,IACF,IAAI,kBAAkB,MAAM,mBAAmB;AAAA,MAC7C,MAAM,IAAI,mBACR,sBACA,qBAAqB,OAAO,mBAAmB,kCACjD;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,MAAM,KAAK,OAAO,CAAC,EAAE,KAC5B,CAAC,QAAQ,IAAI,cAAc,MAAM,aAAa,IAAI,gBAAgB,MAAM,WAC1E,GACA;AAAA,MACA,MAAM,IAAI,mBACR,gBACA,qBAAqB,MAAM,oDAC7B;AAAA,IACF;AAAA,IAEA,MAAM,MAAyB;AAAA,MAC7B,MAAM;AAAA,MACN,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB,UAAU,MAAM;AAAA,MAChB,MAAM,MAAM,MAAM,IAAI;AAAA,MACtB,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,QAAQ,MAAM,GAAG,CAAC;AAAA,IACtC,OAAO,MAAM,GAAG;AAAA;AAAA,OAGZ,MAAK,CAAC,OAAoD;AAAA,IAC9D,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,IAClE,MAAM,YAAY,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACxD,MAAM,OAAuB;AAAA,SACxB;AAAA,MACH,QAAQ;AAAA,SACJ,MAAM,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;AAAA,MAChE,SAAS;AAAA,MACT,WAAW,MAAM,MAAM,SAAS;AAAA,MAChC;AAAA,IACF;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,IAC/D,OAAO,MAAM,IAAI;AAAA;AAAA,OAGb,aAAY,CAAC,OAA2D;AAAA,IAC5E,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,IAAI,QAAQ;AAAA,IAClE,MAAM,cAAc,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,IAC5D,MAAM,OAAuB;AAAA,SACxB;AAAA,MACH,QAAQ,MAAM;AAAA,SACV,MAAM,UAAU,YAAY,CAAC,IAAI,EAAE,OAAO,iBAAiB,MAAM,KAAK,EAAE;AAAA,MAC5E;AAAA,IACF;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,IAC/D,KAAK,cAAc,KAAK,WAAW;AAAA,IACnC,OAAO,MAAM,IAAI;AAAA;AAAA,OAGb,QAAO,CAAC,OAAsD;AAAA,IAClE,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IACzD,MAAM,OAAuB;AAAA,SACxB;AAAA,MACH,SAAS,IAAI,UAAU;AAAA,MACvB,WAAW,MAAM,MAAM,SAAS;AAAA,IAClC;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,IAC/D,OAAO,MAAM,IAAI;AAAA;AAAA,OAGb,0BAAyB,CAC7B,OACyB;AAAA,IACzB,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IACzD,IAAI,CAAC,IAAI,aAAa,IAAI,UAAU,UAAU,MAAM,gBAAgB;AAAA,MAClE,MAAM,IAAI,mBACR,kBACA,6DAA6D,MAAM,MACrE;AAAA,IACF;AAAA,IAEA,MAAM,OAAuB;AAAA,SACxB;AAAA,MACH,WAAW;AAAA,WACN,IAAI;AAAA,QACP,qBAAqB,IAAI,KACvB,KAAK,IAAI,IAAI,UAAU,oBAAoB,QAAQ,GAAG,MAAM,oBAAoB,QAAQ,CAAC,CAC3F;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,IAC/D,OAAO,MAAM,IAAI;AAAA;AAAA,OAGb,OAAM,CAAC,OAAqD;AAAA,IAChE,MAAM,MAAM,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IACzD,IAAI,CAAC,IAAI,aAAa,IAAI,UAAU,UAAU,MAAM,gBAAgB;AAAA,MAClE,MAAM,IAAI,mBACR,kBACA,6DAA6D,MAAM,MACrE;AAAA,IACF;AAAA,IACA,IAAI,MAAM,WAAW,eAAe,IAAI,SAAS,YAAY;AAAA,MAC3D,yBAAwB,MAAM,QAAQ,IAAI,EAAE;AAAA,IAC9C;AAAA,IACA,IAAI,MAAM,WAAW,eAAe,IAAI,SAAS,kBAAkB,MAAM,WAAW,WAAW;AAAA,MAC7F,MAAM,IAAI,mBACR,iBACA,oCAAoC,IAAI,uCAC1C;AAAA,IACF;AAAA,IAEA,MAAM,cAAc,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,IAC5D,MAAM,OAAuB;AAAA,SACxB;AAAA,MACH,QAAQ,MAAM;AAAA,SACV,MAAM,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;AAAA,SAC5D,MAAM,iBAAiB,YAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;AAAA,SAC3E,MAAM,gBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,MAAM,MAAM,WAAW,EAAE;AAAA,SAC/E,MAAM,WAAW,eAAe,MAAM,WAAW,YACjD,EAAE,QAAQ,MAAM,MAAM,MAAM,EAAE,IAC9B,CAAC;AAAA,SACD,MAAM,WAAW,eAAe,MAAM,UAAU,YAChD,CAAC,IACD,EAAE,OAAO,iBAAiB,MAAM,KAAK,EAAE;AAAA,MAC3C,WAAW;AAAA,MACX;AAAA,IACF;AAAA,IACA,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,IAE/D,KAAK,cAAc,KAAK,WAAW;AAAA,IAEnC,OAAO,MAAM,IAAI;AAAA;AAAA,OAGb,QAAO,CAAC,QAA2E;AAAA,IACvF,MAAM,SAAS,KAAK,MAAM,KAAK,IAAI,IAAI,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACnE,OAAO,SAAS,MAAM,MAAM,IAAI;AAAA;AAAA,OAG5B,SAAQ,CAAC,QAGwB;AAAA,IACrC,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,GAAG,CAAC,EAC3B,IAAI,CAAC,OAAO,KAAK,MAAM,KAAK,IAAI,IAAI,OAAO,WAAW,EAAE,CAAC,CAAC,EAC1D,OAAO,CAAC,WAAqC,WAAW,SAAS,EACjE,IAAI,KAAK;AAAA;AAAA,OAGR,KAAI,CAAC,OAAyD;AAAA,IAClE,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,MAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC5D,MAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,MAAM,KAAK,IAAI;AAAA,IAEnD,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,KAAK,OAAO,CAAC,EAC1C,OAAO,CAAC,QAAQ,IAAI,cAAc,MAAM,SAAS,EACjD,OAAO,CAAC,QAAS,QAAQ,MAAM,IAAI,IAAI,IAAI,IAAI,IAAK,EACpD,OAAO,CAAC,QACP,MAAM,WAAW,IAAI,SAAS,kBAAkB,IAAI,aAAa,MAAM,WAAW,IACpF,EACC,OAAO,CAAC,QACP,MAAM,cAAc,IAAI,SAAS,cAAc,IAAI,gBAAgB,MAAM,cAAc,IACzF,EACC,OAAO,CAAC,QAAS,WAAW,SAAS,IAAI,IAAI,MAAM,IAAI,IAAK,EAC5D,OAAO,CAAC,QACP,MAAM,gBAAgB,IAAI,aAAa,IAAI,cAAc,MAAM,eAAe,IAChF,EACC,OAAO,CAAC,QACP,MAAM,iBAAiB,IAAI,aAAa,IAAI,cAAc,MAAM,gBAAgB,IAClF,EACC,KAAK,CAAC,GAAG,MACR,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,CACzF;AAAA,IAEF,QAAQ,MAAM,SAAS,UAAU,YAAY,UAAU,MAAM,QAAQ,MAAM,KAAK;AAAA,IAChF,OAAO,EAAE,MAAM,KAAK,IAAI,KAAK,GAAG,SAAS,MAAM;AAAA;AAAA,EAGzC,cAAc,CAAC,WAAmB,IAA4B;AAAA,IACpE,OAAO,KAAK,cAAc,WAAW,IAAI,SAAS;AAAA;AAAA,EAG5C,aAAa,CACnB,WACA,IACA,QACgB;AAAA,IAChB,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,WAAW,EAAE,CAAC;AAAA,IAClD,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,mBACR,iBACA,qBAAqB,8BAA8B,aACrD;AAAA,IACF;AAAA,IACA,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,mBACR,iBACA,qBAAqB,cAAc,mBAAmB,IAAI,WAC5D;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,aAAa,CAAC,KAAqB,aAAyB;AAAA,IAClE,IAAI,IAAI,SAAS;AAAA,MAAgB;AAAA,IACjC,MAAM,YAAY,IAAI,IAAI,WAAW,IAAI,QAAQ;AAAA,IACjD,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC/C,IAAI,UAAU,OAAO,gBAAgB,IAAI,IAAI;AAAA,MAC3C,KAAK,MAAM,QAAQ,IACjB,WACA,MAAM,KAAK,QAAQ,aAAa,MAAM,WAAW,YAAY,CAAC,CAChE;AAAA,IACF;AAAA;AAEJ;AAAA;AAIA,MAAM,0BAAuD;AAAA,EAC9B;AAAA,EAA7B,WAAW,CAAkB,OAAwB;AAAA,IAAxB;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,YAAY,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,IACrD,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC/C,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,mBACR,oBACA,wBAAwB,MAAM,oCAAoC,MAAM,aAC1E;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,IAAI,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,MAAM,SAAS,IAAI,UAAU,GAAG;AAAA,MACvC,MAAM,IAAI,mBACR,gBACA,yBAAyB,MAAM,mCAAmC,MAAM,aAC1E;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,UAAU,QAAQ,CAAC,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,KAAK,CAAC,GAAG;AAAA,MACnF,MAAM,IAAI,mBACR,iBACA,qBAAqB,MAAM,iCAAiC,MAAM,aACpE;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACxD,MAAM,MAAM,KAAK,QAAQ,MAAM,WAAW,MAAM,QAAQ;AAAA,IACxD,MAAM,UAA8B;AAAA,MAClC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,OAAO,MAAM;AAAA,MACb,MAAM,MAAM;AAAA,SACR,MAAM,oBAAoB,YAC1B,CAAC,IACD,EAAE,iBAAiB,MAAM,MAAM,eAAe,EAAE;AAAA,MACpD;AAAA,MACA,OAAO,MAAM,MAAM,KAAK;AAAA,SACpB,MAAM,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,MAAM,MAAM,QAAQ,EAAE;AAAA,MAC1E,gBAAgB;AAAA,MAChB;AAAA,SACI,MAAM,gBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,IAAI,KAAK,MAAM,WAAW,EAAE;AAAA,IACxF;AAAA,IACA,KAAK,MAAM,SAAS,IAAI,YAAY,MAAM,OAAO,CAAC;AAAA,IAElD,KAAK,MAAM,QAAQ,IACjB,WACA,MAAM;AAAA,SACD;AAAA,MACH,cAAc,OAAO,eAAe;AAAA,MACpC,eAAe;AAAA,MACf,WAAW;AAAA,IACb,CAAC,CACH;AAAA,IAEA,OAAO,MAAM,OAAO;AAAA;AAAA,OAGhB,cAAa,CAAC,OAAuD;AAAA,IACzE,MAAM,YAAY,IAAI,MAAM,WAAW,MAAM,QAAQ;AAAA,IACrD,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,SAAS;AAAA,IAC/C,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,mBACR,oBACA,wBAAwB,MAAM,oCAAoC,MAAM,aAC1E;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,SAAS,QAAQ,CAAC,EAAE,OAClD,IAAI,aACF,QAAQ,cAAc,MAAM,aAC5B,QAAQ,aAAa,MAAM,YAC3B,QAAQ,UAAU,MAAM,KAC5B;AAAA,IACA,IAAI,SAAS,WAAW,GAAG;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,IAEA,YAAY,eAAe,UAAU;AAAA,MACnC,KAAK,MAAM,SAAS,OAAO,UAAU;AAAA,IACvC;AAAA,IAEA,MAAM,oBAAoB,CAAC,GAAG,KAAK,MAAM,SAAS,OAAO,CAAC,EACvD,OACC,CAAC,YAAY,QAAQ,cAAc,MAAM,aAAa,QAAQ,aAAa,MAAM,QACnF,EACC,KAAK,CAAC,MAAM,UAAU,MAAM,MAAM,KAAK,GAAG;AAAA,IAC7C,MAAM,gBAAgB,kBAAkB;AAAA,IACxC,MAAM,YAAY,IAAI;AAAA,IACtB,KAAK,MAAM,QAAQ,IACjB,WACA,MAAM;AAAA,SACD;AAAA,MACH,cAAc,kBAAkB;AAAA,MAChC,eAAe,eAAe;AAAA,MAC9B;AAAA,IACF,CAAC,CACH;AAAA,IAEA,OAAO,SAAS;AAAA;AAAA,OAGZ,QAAO,CAAC,QAA+E;AAAA,IAC3F,MAAM,SAAS,KAAK,MAAM,SAAS,IAAI,IAAI,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACvE,OAAO,SAAS,MAAM,MAAM,IAAI;AAAA;AAAA,OAG5B,KAAI,CAAC,OAAiE;AAAA,IAC1E,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,MAAM,KAAK,IAAI;AAAA,IAEnD,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,SAAS,OAAO,CAAC,EAC9C,OAAO,CAAC,YAAY,QAAQ,cAAc,MAAM,SAAS,EACzD,OAAO,CAAC,YAAY,QAAQ,aAAa,MAAM,QAAQ,EACvD,OAAO,CAAC,YAAa,MAAM,aAAa,YAAY,OAAO,QAAQ,MAAM,MAAM,QAAS,EACxF,OAAO,CAAC,YAAa,QAAQ,MAAM,IAAI,QAAQ,IAAI,IAAI,IAAK,EAC5D,KAAK,CAAC,GAAG,MAAO,UAAU,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAI;AAAA,IAEnE,QAAQ,MAAM,SAAS,UAAU,YAAY,UAAU,MAAM,QAAQ,MAAM,KAAK;AAAA,IAChF,OAAO,EAAE,UAAU,KAAK,IAAI,KAAK,GAAG,SAAS,MAAM;AAAA;AAAA,EAG7C,OAAO,CAAC,WAAmB,UAA0B;AAAA,IAC3D,IAAI,MAAM;AAAA,IACV,WAAW,WAAW,KAAK,MAAM,SAAS,OAAO,GAAG;AAAA,MAClD,IAAI,QAAQ,cAAc,aAAa,QAAQ,aAAa,YAAY,QAAQ,MAAM,KAAK;AAAA,QACzF,MAAM,QAAQ;AAAA,MAChB;AAAA,IACF;AAAA,IACA,OAAO,MAAM;AAAA;AAEjB;AAAA;AAIA,MAAM,oCAA2E;AAAA,EAClD;AAAA,EAA7B,WAAW,CAAkB,OAAwB;AAAA,IAAxB;AAAA;AAAA,OAEvB,OAAM,CAAC,OAAiF;AAAA,IAC5F,yCAAwC,KAAK;AAAA,IAG7C,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,WAAW,MAAM,cAAc,CAAC,KAAK;AAAA,IAC/E,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,IAAI,MAAM,WAAW,MAAM,QAAQ,CAAC,KAAK;AAAA,IAC/E,uCAAsC,EAAE,QAAQ,OAAO,KAAK,OAAO,CAAC;AAAA,IAEpE,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,SAAS,OAAO,CAAC,EAAE,OACjD,CAAC,YAAY,QAAQ,cAAc,MAAM,aAAa,QAAQ,aAAa,MAAM,QACnF;AAAA,IACA,MAAM,UAAU,SAAS,OAAO,CAAC,MAAM,YAAY,KAAK,IAAI,MAAM,QAAQ,GAAG,GAAG,CAAC;AAAA,IACjF,MAAM,SAAS,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA,IAE9D,MAAM,iBAAiB,CAAC,GAAG,KAAK,MAAM,YAAY,OAAO,CAAC,EAAE,KAC1D,CAAC,eACC,WAAW,cAAc,MAAM,aAC/B,WAAW,mBAAmB,MAAM,cACxC;AAAA,IACA,IAAI,gBAAgB;AAAA,MAClB,IAAI,0CAAyC,gBAAgB,KAAK,GAAG;AAAA,QACnE,yCAAwC;AAAA,UACtC,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QACF,CAAC;AAAA,QACD,OAAO,MAAM,cAAc;AAAA,MAC7B;AAAA,MACA,MAAM,IAAI,mBACR,iBACA,qBAAqB,MAAM,iEAC7B;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,MAAM,YAAY,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,CAAC,GAAG;AAAA,MAC9D,MAAM,IAAI,mBACR,gBACA,oCAAoC,MAAM,mCAAmC,MAAM,aACrF;AAAA,IACF;AAAA,IAEA,MAAM,gBACJ,SACG,OAAO,CAAC,YAAY,QAAQ,MAAM,MAAM,oBAAoB,EAC5D,KAAK,CAAC,MAAM,UAAU,KAAK,MAAM,MAAM,GAAG,EAAE,MAAM;AAAA,IACvD,qCAAoC;AAAA,MAClC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IAED,MAAM,SAAuC;AAAA,MAC3C,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,SAClB,MAAM,iCAAiC,OACvC,CAAC,IACD,EAAE,sBAAsB,MAAM,6BAA6B;AAAA,MAC/D,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,sBAAsB,MAAM;AAAA,MAC5B,sBAAsB,MAAM;AAAA,MAC5B,iBAAiB,MAAM;AAAA,MACvB,4BAA4B,MAAM;AAAA,MAClC,2BAA2B,MAAM;AAAA,MACjC,gBAAgB,MAAM;AAAA,MACtB,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IACA,KAAK,MAAM,YAAY,IAAI,IAAI,MAAM,WAAW,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC;AAAA,IACxE,OAAO,MAAM,MAAM;AAAA;AAAA,OAGf,UAAS,CAAC,OAGiC;AAAA,IAC/C,MAAM,SAAS,KAAK,WAAW,MAAM,WAAW,MAAM,QAAQ;AAAA,IAC9D,OAAO,SAAS,MAAM,MAAM,IAAI;AAAA;AAAA,OAG5B,YAAW,CAAC,OAGmC;AAAA,IACnD,MAAM,UAAU,IAAI,IAClB,CAAC,GAAG,KAAK,MAAM,YAAY,OAAO,CAAC,EAChC,OAAO,CAAC,eAAe,WAAW,cAAc,MAAM,SAAS,EAC/D,IAAI,CAAC,eAAe,CAAC,WAAW,gBAAgB,UAAU,CAAU,CACzE;AAAA,IACA,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,MAAM,CAAC,EAAE,QAAQ,CAAC,UAAU;AAAA,MACnD,MAAM,aAAa,QAAQ,IAAI,KAAK;AAAA,MACpC,OAAO,aAAa,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC;AAAA,KAC5C;AAAA;AAAA,EAGK,UAAU,CAAC,WAAmB,UAAuD;AAAA,IAC3F,OACE,CAAC,GAAG,KAAK,MAAM,YAAY,OAAO,CAAC,EAChC,OACC,CAAC,eAAe,WAAW,cAAc,aAAa,WAAW,aAAa,QAChF,EACC,KACC,CAAC,MAAM,UACL,MAAM,uBAAuB,KAAK,wBAClC,MAAM,UAAU,QAAQ,IAAI,KAAK,UAAU,QAAQ,KACnD,MAAM,GAAG,cAAc,KAAK,EAAE,CAClC,EAAE,MAAM;AAAA;AAGhB;AAAA;AAEO,MAAM,sBAA6C;AAAA,EACvC,QAAyB;AAAA,IACxC,SAAS,IAAI;AAAA,IACb,MAAM,IAAI;AAAA,IACV,UAAU,IAAI;AAAA,IACd,aAAa,IAAI;AAAA,EACnB;AAAA,EAES;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,YAA8B;AAAA,IACxC,KAAK,UAAU,IAAI,yBAAyB,KAAK,KAAK;AAAA,IACtD,KAAK,OAAO,IAAI,sBAAsB,KAAK,OAAO,UAAU;AAAA,IAC5D,KAAK,WAAW,IAAI,0BAA0B,KAAK,KAAK;AAAA,IACxD,KAAK,cAAc,IAAI,oCAAoC,KAAK,KAAK;AAAA;AAAA,EAGvE,QAAQ,GAAiC;AAAA,IACvC,OAAO;AAAA,MACL,SAAS,gBAAgB,KAAK,MAAM,OAAO;AAAA,MAC3C,MAAM,gBAAgB,KAAK,MAAM,IAAI;AAAA,MACrC,UAAU,gBAAgB,KAAK,MAAM,QAAQ;AAAA,MAC7C,aAAa,gBAAgB,KAAK,MAAM,WAAW;AAAA,IACrD;AAAA;AAAA,EAGF,OAAO,CAAC,UAA8C;AAAA,IACpD,QAAQ,KAAK,MAAM,SAAS,SAAS,OAAO;AAAA,IAC5C,QAAQ,KAAK,MAAM,MAAM,SAAS,IAAI;AAAA,IACtC,QAAQ,KAAK,MAAM,UAAU,SAAS,QAAQ;AAAA,IAC9C,QAAQ,KAAK,MAAM,aAAa,SAAS,WAAW;AAAA;AAExD;AAEA,SAAS,OAAU,CAAC,QAAwB,QAA8B;AAAA,EACxE,OAAO,MAAM;AAAA,EACb,YAAY,GAAG,UAAU,gBAAgB,MAAM,GAAG;AAAA,IAChD,OAAO,IAAI,GAAG,KAAK;AAAA,EACrB;AAAA;;ACrzBK,MAAM,4BAA2B,MAAM;AAAA,EAIjC;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,MACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;;AC8BO,MAAM,uBAA+C;AAAA,EAIvC;AAAA,EACA;AAAA,EAJF,iBAAiB,IAAI;AAAA,EAEtC,WAAW,CACQ,OACA,aACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,oBAAmB,CAAC,OAA6C;AAAA,IACrE,MAAM,SAAS,gCAA+B,KAAK;AAAA,IACnD,MAAM,QAAQ,KAAK,YAAY,OAAO,WAAW,OAAO,aAAa;AAAA,IACrE,IAAI,CAAC;AAAA,MAAO,MAAM,aAAa,MAAM;AAAA,IACrC,IAAI,CAAC,6BAA4B,QAAQ,KAAK,GAAG;AAAA,MAC/C,MAAM,IAAI,oBACR,iBACA,kCAAkC,OAAO,iDAC3C;AAAA,IACF;AAAA,IACA,MAAM,MAAM,eAAe,OAAO,WAAW,OAAO,aAAa;AAAA,IACjE,IAAI,CAAC,KAAK,eAAe,IAAI,GAAG;AAAA,MAAG,KAAK,eAAe,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA;AAAA,OAGnF,oBAAmB,CACvB,OACmC;AAAA,IACnC,gBAAe,MAAM,WAAW,wBAAwB;AAAA,IACxD,WAAW,MAAM,MAAM;AAAA,MAAc,gBAAe,IAAI,0BAA0B;AAAA,IAClF,MAAM,YAAY,IAAI,IAAI,MAAM,YAAY;AAAA,IAC5C,MAAM,mBAAmB,IAAI,IAAI,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAa,CAAC,CAAC;AAAA,IACrF,WAAW,SAAS,KAAK,MAAM,SAAS,EAAE,QAAQ,OAAO,GAAG;AAAA,MAC1D,IAAI,MAAM,cAAc,MAAM,aAAa,UAAU,IAAI,MAAM,WAAW,GAAG;AAAA,QAC3E,iBAAiB,IAAI,MAAM,WAAW,EAAG,KAAK,MAAM,EAAE;AAAA,MACxD;AAAA,IACF;AAAA,IACA,OAAO,MAAM,aAAa,IAAI,CAAC,OAC7B,KAAK,kBAAkB,MAAM,WAAW,iBAAiB,IAAI,EAAE,KAAK,CAAC,CAAC,CACxE;AAAA;AAAA,OAGI,qBAAoB,CAAC,OAAsE;AAAA,IAC/F,OAAO,0BAA0B,OAAO,MAAM,KAAK,gBAAgB,CAAC;AAAA;AAAA,OAGhE,eAAc,CAClB,OAC0C;AAAA,IAC1C,OAAO,+BAA+B,OAAO,MAAM,KAAK,gBAAgB,CAAC;AAAA;AAAA,EAG3E,QAAQ,GAAkC;AAAA,IACxC,OAAO,gBAAgB,EAAE,gBAAgB,KAAK,eAAe,CAAC;AAAA;AAAA,OAG1D,oBAAmB,CACvB,OACsC;AAAA,IACtC,MAAM,QAAQ,MAAM,KAAK,gBAAgB;AAAA,IACzC,MAAM,QAAQ,IAAI;AAAA,IAClB,OAAO,uBACL,OACA,MAAM,QAAQ,IACZ,MAAM,IAAI,OAAO,SAAS;AAAA,MACxB,MAAM,MAAM,eAAe,KAAK,MAAM,WAAW,KAAK,MAAM,WAAW;AAAA,MACvE,IAAI,OAAO,MAAM,IAAI,GAAG;AAAA,MACxB,IAAI,CAAC,MAAM;AAAA,QACT,OACE,KAAK,aAAa,eAAe;AAAA,UAC/B,WAAW,KAAK,MAAM;AAAA,UACtB,aAAa,KAAK,MAAM;AAAA,QAC1B,CAAC,KACD,QAAQ,QAAQ;AAAA,UACd,aAAa,KAAK,MAAM;AAAA,UACxB,aAAa,KAAK;AAAA,QACpB,CAAC;AAAA,QACH,MAAM,IAAI,KAAK,IAAI;AAAA,MACrB;AAAA,MACA,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK;AAAA,KACpC,CACH,CACF;AAAA;AAAA,EAGF,OAAO,CAAC,UAA+C;AAAA,IACrD,WAAW,KAAK,gBAAgB,SAAS,cAAc;AAAA;AAAA,EAIzD,SAAS,CAAC,WAAmB,eAAqD;AAAA,IAChF,MAAM,SAAS,KAAK,eAAe,IAAI,eAAe,WAAW,aAAa,CAAC;AAAA,IAC/E,OAAO,SAAS,gBAAgB,MAAM,IAAI;AAAA;AAAA,EAGpC,WAAW,CAAC,WAAmB,IAAgD;AAAA,IACrF,OAAO,CAAC,GAAG,KAAK,MAAM,SAAS,EAAE,QAAQ,OAAO,CAAC,EAAE,KACjD,CAAC,WAAW,OAAO,cAAc,aAAa,OAAO,OAAO,EAC9D;AAAA;AAAA,OAGY,gBAAe,GAAkD;AAAA,IAC7E,OAAO,QAAQ,IACb,CAAC,GAAG,KAAK,MAAM,SAAS,EAAE,QAAQ,OAAO,CAAC,EAAE,IAAI,OAAO,UAAU;AAAA,MAC/D,MAAM,OAAO,KAAK,eAAe,IAAI,eAAe,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,MAC9E,MAAM,cAAc,MAAM,KAAK,aAAa,QAAQ;AAAA,QAClD,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,MACrB,CAAC;AAAA,MACD,OAAO;AAAA,QACL;AAAA,WACI,cAAc,EAAE,YAAY,IAAI,CAAC;AAAA,WACjC,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,MACzB;AAAA,KACD,CACH;AAAA;AAAA,EAGM,iBAAiB,CAAC,WAAmB,KAAuC;AAAA,IAClF,MAAM,UAAU,IAAI;AAAA,IACpB,IAAI,iBAAiB;AAAA,IACrB,IAAI,uBAAuB;AAAA,IAC3B,IAAI,oBAAoB;AAAA,IACxB,WAAW,MAAM,KAAK;AAAA,MACpB,MAAM,OAAO,KAAK,eAAe,IAAI,eAAe,WAAW,EAAE,CAAC;AAAA,MAClE,IAAI,CAAC;AAAA,QAAM,qBAAqB;AAAA,MAC3B,SAAI,KAAK,WAAW;AAAA,QAAe,wBAAwB;AAAA,MAC3D;AAAA,QACH,kBAAkB;AAAA,QAClB,SAAS,SAAS,KAAK,KAAK;AAAA;AAAA,IAEhC;AAAA,IACA,OAAO;AAAA,MACL,SAAS,CAAC,GAAG,OAAO,EACjB,KAAK,EAAE,QAAQ,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,EAAE,UAAU,aAAa,EAAE,UAAU,aAAa,OAAO,SAAS,EAAE,EAAE;AAAA,MAC7E;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAEJ;AAEA,SAAS,YAAY,CAAC,QAAwE;AAAA,EAC5F,OAAO,IAAI,oBACT,iBACA,oBAAoB,OAAO,6CAA6C,OAAO,aACjF;AAAA;AAGF,SAAS,QAAQ,CAAC,SAA8B,OAAsB;AAAA,EACpE,QAAQ,IAAI,MAAM,WAAW,QAAQ,IAAI,MAAM,QAAQ,KAAK,MAAM,OAAO,MAAM,WAAW,CAAC;AAAA;AAG7F,SAAS,cAAc,CAAC,WAAmB,IAAoB;AAAA,EAC7D,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AAAA;AAGvC,SAAS,eAAc,CAAC,OAAe,OAAqB;AAAA,EAC1D,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,UAAU,aAAa,yBAAyB;AAAA,EAC5D;AAAA;AAGF,SAAS,UAAwB,CAAC,QAA2B,QAAiC;AAAA,EAC5F,OAAO,MAAM;AAAA,EACb,YAAY,KAAK,UAAU,gBAAgB,MAAM;AAAA,IAAG,OAAO,IAAI,KAAK,KAAK;AAAA;;AC9GpE,MAAM,wBAAiD;AAAA,EAO/B;AAAA,EANZ,WAAW,IAAI;AAAA,EACf,uBAAuB,IAAI;AAAA,EAC3B,eAAe,IAAI;AAAA,EACnB,eAAe,IAAI;AAAA,EACnB,aAAa,IAAI;AAAA,EAElC,WAAW,CAAkB,UAAyC,CAAC,GAAG;AAAA,IAA7C;AAAA;AAAA,EAG7B,gBAAgB,GAAkB;AAAA,IAChC,OAAO,KAAK,WAAW,OAAO;AAAA;AAAA,OAG1B,aAAY,CAAC,OAAyD;AAAA,IAC1E,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,MAAM,SAAS,8BAA6B,KAAK;AAAA,MACjD,MAAM,MAAM,UAAU,OAAO,WAAW,OAAO,EAAE;AAAA,MACjD,MAAM,eAAe,2BAA0B,MAAM;AAAA,MACrD,IAAI,KAAK,SAAS,IAAI,GAAG,KAAK,KAAK,qBAAqB,IAAI,YAAY,GAAG;AAAA,QACzE,MAAM,IAAI,qBACR,oBACA,iDAAiD,mBAAkB,OAAO,OAAO,WAAW,kBAAiB,wBAAuB,OAAO,KAAK,CAAC,KACnJ;AAAA,MACF;AAAA,MACA,KAAK,SAAS,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,MAC9C,KAAK,qBAAqB,IAAI,cAAc,GAAG;AAAA,MAC/C,OAAO,oBAAmB,MAAM;AAAA,KACjC;AAAA;AAAA,OAGG,aAAY,CAAC,OAAyD;AAAA,IAC1E,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,MAAM,SAAS,8BAA6B,KAAK;AAAA,MACjD,MAAM,MAAM,UAAU,OAAO,WAAW,OAAO,EAAE;AAAA,MACjD,MAAM,WAAW,KAAK,SAAS,IAAI,GAAG;AAAA,MACtC,IAAI,CAAC;AAAA,QAAU,MAAM,cAAc,OAAO,WAAW,OAAO,EAAE;AAAA,MAC9D,IAAI,OAAO,UAAU,WAAW;AAAA,QAC9B,MAAM,WAAW,wBAAuB,SAAS,KAAK;AAAA,QACtD,MAAM,OAAO,wBAAuB,OAAO,KAAK;AAAA,QAChD,IAAI,kBAAiB,QAAQ,MAAM,kBAAiB,IAAI,GAAG;AAAA,UACzD,MAAM,IAAI,UAAU,+DAA+D;AAAA,QACrF;AAAA,MACF;AAAA,MACA,MAAM,SAAwB;AAAA,WACzB;AAAA,WACC,OAAO,UAAU,YAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;AAAA,WACxD,OAAO,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,OAAO,QAAQ;AAAA,QAClE,WAAW,OAAO;AAAA,MACpB;AAAA,MACA,KAAK,SAAS,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,MAC9C,OAAO,oBAAmB,MAAM;AAAA,KACjC;AAAA;AAAA,OAGG,aAAY,CAAC,OAAmD;AAAA,IACpE,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,uBAAuB,KAAK;AAAA,MAC5B,MAAM,MAAM,UAAU,MAAM,WAAW,MAAM,EAAE;AAAA,MAC/C,MAAM,WAAW,KAAK,SAAS,IAAI,GAAG;AAAA,MACtC,IAAI,CAAC;AAAA,QAAU,OAAO;AAAA,MACtB,KAAK,SAAS,OAAO,GAAG;AAAA,MACxB,KAAK,qBAAqB,OAAO,2BAA0B,QAAQ,CAAC;AAAA,MACpE,OAAO;AAAA,KACR;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,uBAAuB,KAAK;AAAA,IAC5B,MAAM,SAAS,KAAK,SAAS,IAAI,UAAU,MAAM,WAAW,MAAM,EAAE,CAAC;AAAA,IACrE,OAAO,SAAS,oBAAmB,MAAM,IAAI;AAAA;AAAA,OAGzC,aAAY,CAAC,OAAoE;AAAA,IACrF,gBAAe,MAAM,WAAW,WAAW;AAAA,IAC3C,OAAO,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAC9B,OACC,CAAC,WACC,OAAO,cAAc,MAAM,cAAc,MAAM,mBAAmB,OAAO,QAC7E,EACC,KAAK,CAAC,MAAM,UAAU,KAAK,GAAG,cAAc,MAAM,EAAE,CAAC,EACrD,IAAI,mBAAkB;AAAA;AAAA,OAGrB,mBAAkB,CACtB,OACyC;AAAA,IACzC,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,gBAAe,MAAM,WAAW,WAAW;AAAA,MAC3C,MAAM,SAAS,sBAAqB,MAAM,MAAM,IAAI,IAAM;AAAA,MAC1D,MAAM,iBACJ,MAAM,qBAAqB,YAAY,YAAY,IAAI,IAAI,MAAM,gBAAgB;AAAA,MACnF,MAAM,WAAW,MAAM,KAAK,aAAa;AAAA,QACvC,WAAW,MAAM;AAAA,QACjB,iBAAiB,MAAM;AAAA,MACzB,CAAC;AAAA,MACD,OAAO,QAAQ,IACb,SAAS,IAAI,CAAC,WAAW,KAAK,aAAa,QAAQ,QAAQ,cAAc,CAAC,CAC5E;AAAA,KACD;AAAA;AAAA,OAGG,iBAAgB,CAAC,OAAmE;AAAA,IACxF,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,MAAM,UAAU,6BAA4B,KAAK;AAAA,MACjD,MAAM,iBAAiB,2BAA0B,QAAQ,QAAQ;AAAA,MACjE,MAAM,WAAW,KAAK,aAAa,IAAI,cAAc;AAAA,MACrD,IAAI,UAAU;AAAA,QACZ,IAAI,CAAC,kCAAiC,UAAU,OAAO,GAAG;AAAA,UACxD,MAAM,IAAI,qBACR,wBACA,qCAAqC,MAAM,qEAC7C;AAAA,QACF;AAAA,QACA,IAAI,SAAS,UAAU,UAAU;AAAA,UAC/B,OAAO,EAAE,QAAQ,YAAY,aAAa,gBAAgB,QAAQ,GAAG,SAAS,MAAM;AAAA,QACtF;AAAA,QACA,OAAO,EAAE,QAAQ,YAAY,aAAa,gBAAgB,QAAQ,GAAG,SAAS,MAAM;AAAA,MACtF;AAAA,MACA,MAAM,KAAK,sBAAsB,QAAQ,SAAS,WAAW,QAAQ,SAAS,WAAW;AAAA,MAEzF,MAAM,kBAAkB,CAAC,GAAG,KAAK,SAAS,OAAO,CAAC,EAAE,OAClD,CAAC,WAAW,OAAO,cAAc,QAAQ,SAAS,aAAa,OAAO,OACxE;AAAA,MACA,MAAM,cAAc,IAAI,IAAI,QAAQ,SAAS,IAAI,kBAAiB,CAAC;AAAA,MACnE,MAAM,YAAY,IAAI,IACpB,QAAQ,UAAU,IAAI,CAAC,aAAa;AAAA,QAClC,MAAM,SAAS,wBAAuB,QAAQ;AAAA,QAC9C,OAAO,CAAC,kBAAiB,MAAM,GAAG,MAAM;AAAA,OACzC,CACH;AAAA,MACA,MAAM,oBAA2C,CAAC;AAAA,MAClD,MAAM,sBAA6C,CAAC;AAAA,MACpD,MAAM,qBAAqB,IAAI;AAAA,MAC/B,WAAW,UAAU,iBAAiB;AAAA,QACpC,IAAI,CAAC,YAAY,IAAI,mBAAkB,OAAO,OAAO,CAAC;AAAA,UAAG;AAAA,QACzD,MAAM,QAAQ,wBAAuB,OAAO,KAAK;AAAA,QACjD,MAAM,WAAW,UAAU,IAAI,kBAAiB,KAAK,CAAC;AAAA,QACtD,MAAM,SAAS,MAAM,KAAK,aAAa,QAAQ,QAAQ,MAAM;AAAA,QAC7D,IAAI,CAAC,YAAY,OAAO,qBAAqB,eAAe;AAAA,UAC1D,oBAAoB,KAAK,MAAM;AAAA,UAC/B,IAAI,CAAC;AAAA,YAAU,mBAAmB,IAAI,iBAAiB;AAAA,UACvD,IAAI,OAAO,qBAAqB,eAAe;AAAA,YAC7C,mBAAmB,IAAI,sBAAsB;AAAA,UAC/C;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,SAAS,wBAAuB,OAAO,YAAY,MAAM,EAAE;AAAA,QACjE,MAAM,WAAW,wBAAuB,OAAO,YAAY,QAAQ,EAAE;AAAA,QACrE,MAAM,UAAU,wBAAuB,OAAO,YAAY,OAAO,EAAE;AAAA,QACnE,IAAI,SAAS,WAAW,UAAU,SAAS,SAAS,MAAM,QAAQ;AAAA,UAChE,kBAAkB,KAAK,MAAM;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,IAAI,oBAAoB,SAAS,GAAG;AAAA,QAClC,oBAAoB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACvF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,CAAC,GAAG,kBAAkB,EAAE,KAAK;AAAA,QACxC;AAAA,MACF;AAAA,MACA,IAAI,kBAAkB,SAAS,GAAG;AAAA,QAChC,kBAAkB,KAAK,CAAC,MAAM,UAAU,KAAK,OAAO,GAAG,cAAc,MAAM,OAAO,EAAE,CAAC;AAAA,QACrF,OAAO;AAAA,UACL,QAAQ;AAAA,UACR;AAAA,UACA,SAAS,IAAI,KACX,KAAK,IAAI,GAAG,kBAAkB,IAAI,CAAC,WAAW,OAAO,OAAO,QAAQ,QAAQ,CAAC,CAAC,CAChF;AAAA,QACF;AAAA,MACF;AAAA,MAEA,MAAM,UAAU,2BACd,iBACA,QAAQ,UACR,QAAQ,SACV;AAAA,MACA,IAAI,QAAQ,WAAW;AAAA,QAAG,OAAO,EAAE,QAAQ,cAAc;AAAA,MACzD,WAAW,UAAU,SAAS;AAAA,QAC5B,MAAM,SAAS,wBAAuB,OAAO,QAAQ;AAAA,QACrD,MAAM,QAAQ,KAAK,mBACjB,QAAQ,SAAS,WACjB,OAAO,SACP,QACA,QAAQ,MACV;AAAA,QACA,MAAM,YAAY,OAAO;AAAA,QACzB,MAAM,YAAY,IAAI,KAAK,QAAQ,UAAU;AAAA,MAC/C;AAAA,MACA,MAAM,cAAsC;AAAA,WACvC,QAAQ;AAAA,QACX;AAAA,QACA,YAAY,8BAA6B,OAAO;AAAA,QAChD,QAAQ,QAAQ;AAAA,QAChB,OAAO;AAAA,QACP,YAAY,QAAQ;AAAA,QACpB,WAAW,IAAI,KAAK,QAAQ,UAAU;AAAA,MACxC;AAAA,MACA,KAAK,aAAa,IAAI,gBAAgB,gBAAgB,WAAW,CAAC;AAAA,MAClE,OAAO,EAAE,QAAQ,YAAY,aAAa,gBAAgB,WAAW,GAAG,SAAS,KAAK;AAAA,KACvF;AAAA;AAAA,OAGG,uBAAsB,CAAC,OAA0D;AAAA,IACrF,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,gBAAe,MAAM,WAAW,WAAW;AAAA,MAC3C,gBAAe,MAAM,eAAe,eAAe;AAAA,MACnD,MAAM,aAAa,gBAAe,MAAM,cAAc,IAAI,MAAQ,YAAY;AAAA,MAC9E,MAAM,QAAQ,MAAM,KAAK,uBAAuB,MAAM,WAAW,MAAM,aAAa;AAAA,MACpF,MAAM,SAAS,sBAAqB,MAAM,UAAU;AAAA,MACpD,MAAM,cAAc,IAAI,IAAI,oCAAmC,KAAK,EAAE,IAAI,kBAAiB,CAAC;AAAA,MAC5F,WAAW,SAAS,KAAK,aAAa,OAAO,GAAG;AAAA,QAC9C,IACE,MAAM,cAAc,MAAM,aAC1B,MAAM,OAAO,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,KACtD,CAAC,YAAY,IAAI,mBAAkB,MAAM,OAAO,CAAC,GACjD;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,SAAS,sBAAqB,CAAC,KAAK,GAAG,KAAK;AAAA,QAClD,MAAM,UAAU,OAAO;AAAA,QACvB,IAAI,OAAO,qBAAqB;AAAA,UAAe,MAAM,mBAAmB;AAAA,QACxE,MAAM,YAAY,IAAI,KAAK,UAAU;AAAA,MACvC;AAAA,KACD;AAAA;AAAA,OAGG,mBAAkB,CAAC,OAAmE;AAAA,IAC1F,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,MAAM,WAAW,yCAAwC,KAAK;AAAA,MAC9D,gBAAe,MAAM,eAAe,eAAe;AAAA,MACnD,MAAM,eAAe,gBAAe,MAAM,gBAAgB,IAAI,MAAQ,cAAc;AAAA,MACpF,MAAM,MAAM,2BAA0B,QAAQ;AAAA,MAC9C,MAAM,cAAc,KAAK,aAAa,IAAI,GAAG;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU,cAAc;AAAA,QACtC,IAAI,YAAY,kBAAkB,MAAM,eAAe;AAAA,UACrD,OAAO,gBAAgB,WAAW;AAAA,QACpC;AAAA,QACA,MAAM,IAAI,qBACR,2BACA,qCAAqC,SAAS,uDAChD;AAAA,MACF;AAAA,MACA,MAAM,aAAa,MAAM,KAAK,uBAAuB,SAAS,WAAW,MAAM,aAAa;AAAA,MAC5F,2CAA0C,aAAa,UAAU;AAAA,MACjE,KAAK,0BAA0B,aAAa,YAAY,YAAY;AAAA,MACpE,MAAM,aAAqC;AAAA,WACtC;AAAA,QACH,OAAO;AAAA,QACP,eAAe,MAAM;AAAA,QACrB,WAAW;AAAA,MACb;AAAA,MACA,KAAK,aAAa,IAAI,KAAK,gBAAgB,UAAU,CAAC;AAAA,MACtD,OAAO,gBAAgB,UAAU;AAAA,KAClC;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OACiC;AAAA,IACjC,OAAO,KAAK,WAAW,IAAI,YAAY;AAAA,MACrC,MAAM,WAAW,yCAAwC,KAAK;AAAA,MAC9D,MAAM,WAAW,gBAAe,MAAM,YAAY,IAAI,MAAQ,UAAU;AAAA,MACxE,MAAM,MAAM,2BAA0B,QAAQ;AAAA,MAC9C,MAAM,cAAc,KAAK,aAAa,IAAI,GAAG;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAa,MAAM,mBAAmB,QAAQ;AAAA,MACnD,IAAI,YAAY,UAAU;AAAA,QAAW,OAAO,gBAAgB,WAAW;AAAA,MACvE,IAAI,YAAY,UAAU;AAAA,QAAU,MAAM,aAAa,aAAa,cAAc;AAAA,MAClF,KAAK,oBAAoB,aAAa,YAAY,CAAC,IAAI,QAAQ;AAAA,MAC/D,KAAK,oBAAoB,aAAa,WAAW,IAAI,QAAQ;AAAA,MAC7D,MAAM,UAAkC;AAAA,WACnC;AAAA,QACH,OAAO;AAAA,QACP,WAAW;AAAA,MACb;AAAA,MACA,KAAK,aAAa,IAAI,KAAK,gBAAgB,OAAO,CAAC;AAAA,MACnD,OAAO,gBAAgB,OAAO;AAAA,KAC/B;AAAA;AAAA,EAGH,QAAQ,GAAmC;AAAA,IACzC,OAAO,gBAAgB;AAAA,MACrB,UAAU,KAAK;AAAA,MACf,sBAAsB,KAAK;AAAA,MAC3B,cAAc,KAAK;AAAA,MACnB,cAAc,KAAK;AAAA,IACrB,CAAC;AAAA;AAAA,EAGH,OAAO,CAAC,UAAgD;AAAA,IACtD,YAAW,KAAK,UAAU,SAAS,QAAQ;AAAA,IAC3C,YAAW,KAAK,sBAAsB,SAAS,oBAAoB;AAAA,IACnE,YAAW,KAAK,cAAc,SAAS,YAAY;AAAA,IACnD,YAAW,KAAK,cAAc,SAAS,YAAY;AAAA;AAAA,OAGvC,aAAY,CACxB,QACA,QACA,gBAC8B;AAAA,IAC9B,MAAM,QAAQ,wBAAuB,OAAO,KAAK;AAAA,IACjD,MAAM,QAAQ,MAAM,KAAK,kBAAkB,QAAQ,MAAM;AAAA,IACzD,MAAM,WAAW,MAAM;AAAA,IACvB,MAAM,UAAU,MAAM;AAAA,IACtB,MAAM,WAAW,MAAM,SAAS,WAAW;AAAA,IAC3C,MAAM,YAAY,MAAM,SAAS,WAAW,MAAM,SAAS,WAAW;AAAA,IACtE,MAAM,WAAW,CAAC,WAChB,2BAA0B,KAAK,OAAO,OAAO,CAAC;AAAA,IAChD,OAAO;AAAA,MACL,QAAQ,oBAAmB,MAAM;AAAA,MACjC,QAAQ,gBAAgB,MAAM;AAAA,MAC9B,aAAa;AAAA,QACX,QAAQ,SAAS,MAAM,MAAM;AAAA,QAC7B,UAAU,SAAS,QAAQ;AAAA,QAC3B,SAAS,SAAS,OAAO;AAAA,QACzB,WAAW,SAAS,SAAS;AAAA,MAC/B;AAAA,MACA,kBAAkB,MAAM;AAAA,MACxB,WAAW,YAAY,MAAM;AAAA,MAC7B,UACE,OAAO,QAAQ,SAAS,WACxB,mBAAmB,aACnB,CAAC,eAAe,IAAI,OAAO,QAAQ,EAAE;AAAA,IACzC;AAAA;AAAA,OAGY,kBAAiB,CAC7B,QACA,QAC6B;AAAA,IAC7B,MAAM,SAAS,wBAAuB,OAAO,KAAK;AAAA,IAClD,MAAM,MAAM,eAAe,OAAO,WAAW,OAAO,SAAS,QAAQ,MAAM;AAAA,IAC3E,MAAM,WAAW,KAAK,aAAa,IAAI,GAAG;AAAA,IAC1C,IAAI,UAAU,qBAAqB;AAAA,MAAY,OAAO;AAAA,IAEtD,MAAM,SAAS,MAAM,KAAK,oBAAoB,QAAQ,QAAQ,MAAM;AAAA,IACpE,IAAI,UAAU;AAAA,MACZ,SAAS,SAAS,OAAO;AAAA,MACzB,SAAS,mBAAmB,OAAO;AAAA,MACnC,SAAS,YAAY,IAAI;AAAA,MACzB,OAAO;AAAA,IACT;AAAA,IACA,MAAM,QAA4B;AAAA,MAChC,WAAW,OAAO;AAAA,MAClB,SAAS,gBAAgB,OAAO,OAAO;AAAA,MACvC,OAAO,OAAO;AAAA,MACd,UAAU,OAAO;AAAA,MACjB,QAAQ,gBAAgB,MAAM;AAAA,MAC9B,QAAQ,OAAO;AAAA,MACf,UAAU;AAAA,MACV,SAAS;AAAA,MACT,kBAAkB,OAAO;AAAA,MACzB,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,KAAK,aAAa,IAAI,KAAK,KAAK;AAAA,IAChC,OAAO;AAAA;AAAA,EAGD,mBAAmB,CACzB,aACA,SACA,WACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,wBAAuB,OAAO,QAAQ;AAAA,MACrD,MAAM,QAAQ,KAAK,mBACjB,YAAY,WACZ,OAAO,SACP,QACA,YAAY,MACd;AAAA,MACA,MAAM,YAAY,YAAY,OAAO;AAAA,MACrC,IAAI,MAAM,WAAW,IAAI;AAAA,QACvB,MAAM,IAAI,MAAM,6BAA6B,kCAAkC;AAAA,MACjF;AAAA,MACA,MAAM,YAAY,IAAI,KAAK,SAAS;AAAA,IACtC;AAAA;AAAA,EAGM,yBAAyB,CAC/B,aACA,OACA,WACM;AAAA,IACN,WAAW,UAAU,YAAY,SAAS;AAAA,MACxC,MAAM,SAAS,wBAAuB,OAAO,QAAQ;AAAA,MACrD,MAAM,QAAQ,KAAK,mBACjB,YAAY,WACZ,OAAO,SACP,QACA,YAAY,MACd;AAAA,MACA,MAAM,UAAU,YAAY,UAAU,WAAW,aAAa;AAAA,MAC9D,MAAM,SAAS,sBAAqB,CAAC,KAAK,GAAG,MAAM;AAAA,MACnD,IAAI,OAAO,qBAAqB,YAAY;AAAA,QAC1C,MAAM,YAAY,OAAO;AAAA,MAC3B,EAAO,SAAI,YAAY,UAAU,UAAU;AAAA,QACzC,MAAM,YAAY,OAAO;AAAA,QACzB,MAAM,WAAW,OAAO;AAAA,MAC1B;AAAA,MACA,IAAI,MAAM,WAAW,MAAM,MAAM,UAAU,IAAI;AAAA,QAC7C,MAAM,IAAI,MAAM,gEAAgE;AAAA,MAClF;AAAA,MACA,MAAM,YAAY,IAAI,KAAK,SAAS;AAAA,IACtC;AAAA;AAAA,EAGM,kBAAkB,CACxB,WACA,SACA,QACA,QACoB;AAAA,IACpB,MAAM,QAAQ,KAAK,aAAa,IAAI,eAAe,WAAW,SAAS,QAAQ,MAAM,CAAC;AAAA,IACtF,IAAI,CAAC;AAAA,MAAO,MAAM,IAAI,MAAM,yDAAyD;AAAA,IACrF,OAAO;AAAA;AAAA,OAGK,sBAAqB,CAAC,WAAmB,aAAoC;AAAA,IACzF,IAAI,KAAK,QAAQ,kBAAkB;AAAA,MACjC,IAAI,MAAM,KAAK,QAAQ,iBAAiB,EAAE,WAAW,YAAY,CAAC;AAAA,QAAG;AAAA,MACrE,MAAM,IAAI,qBACR,qBACA,8BAA8B,2CAA2C,aAC3E;AAAA,IACF;AAAA,IACA,IACE,KAAK,QAAQ,mBACZ,MAAM,KAAK,QAAQ,gBAAgB,EAAE,WAAW,YAAY,CAAC,GAC9D;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,IAAI,qBACR,qBACA,8BAA8B,2CAA2C,aAC3E;AAAA;AAAA,OAGY,oBAAmB,CAC/B,QACA,QACA,WACkD;AAAA,IAClD,IACE,CAAC,KAAK,QAAQ,qBACZ,OAAO,QAAQ,SAAS,UAAU,OAAO,QAAQ,SAAS,qBAC1D,CAAC,KAAK,QAAQ,kBAChB;AAAA,MACA,OAAO,EAAE,QAAQ,IAAI,kBAAkB,cAAc;AAAA,IACvD;AAAA,IACA,MAAM,UAAU,MAAM,KAAK,QAAQ,iBAAiB,EAAE,WAAW,OAAO,UAAU,CAAC;AAAA,IACnF,MAAM,UAAU,MAAM,QAAQ,IAC5B,QACG,OACC,CAAC,WACC,OAAO,WAAW,QAAQ,KAAK,OAAO,MAAM,QAAQ,KACpD,OAAO,WAAW,QAAQ,IAAI,OAAO,IAAI,QAAQ,CACrD,EACC,IAAI,CAAC,WAAW,KAAK,gBAAgB,MAAM,CAAC,CACjD;AAAA,IACA,OAAO,sBACL,QAAQ,OAAO,CAAC,UAAU,wCAAuC,OAAO,OAAO,OAAO,CAAC,GACvF,SACF;AAAA;AAAA,OAGY,uBAAsB,CAClC,WACA,eACiC;AAAA,IACjC,IAAI,CAAC,KAAK,QAAQ,oBAAoB;AAAA,MACpC,MAAM,IAAI,qBACR,uBACA,uEACF;AAAA,IACF;AAAA,IACA,MAAM,SAAS,MAAM,KAAK,QAAQ,mBAAmB,EAAE,WAAW,cAAc,CAAC;AAAA,IACjF,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,qBACR,wBACA,2BAA2B,6CAA6C,aAC1E;AAAA,IACF;AAAA,IACA,OAAO,KAAK,gBAAgB,MAAM;AAAA;AAAA,OAGtB,gBAAe,CAAC,QAAiE;AAAA,IAC7F,OAAO,WAAW,QAAQ,MAAM,QAAQ,IAAI;AAAA,MAC1C,KAAK,QAAQ,mBAAmB;AAAA,QAC9B,WAAW,OAAO;AAAA,QAClB,aAAa,OAAO;AAAA,MACtB,CAAC;AAAA,MACD,KAAK,QAAQ,oBAAoB;AAAA,QAC/B,WAAW,OAAO;AAAA,QAClB,eAAe,OAAO;AAAA,MACxB,CAAC;AAAA,IACH,CAAC;AAAA,IACD,MAAM,YAAY,WAAW;AAAA,IAC7B,OAAO;AAAA,MACL,WAAW,OAAO;AAAA,MAClB,eAAe,OAAO;AAAA,MACtB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,YAAY,IAAI,KAAK,OAAO,UAAU;AAAA,SAClC,OAAO,MAAM,gBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,OAAO,MAAM,YAAY;AAAA,MAC1F,mBAAmB,CAAC,GAAG,OAAO,iBAAiB;AAAA,SAC3C,WAAW,SAAS,UAAU,WAAW,SAAS,mBAClD,EAAE,WAAW,EAAE,MAAM,UAAU,MAAM,IAAI,UAAU,GAAG,EAAE,IACxD,CAAC;AAAA,SACD,MAAM,WAAW,UACjB,EAAE,WAAW,EAAE,QAAQ,SAAkB,OAAO,gBAAgB,KAAK,KAAK,EAAE,EAAE,IAC9E,OACE,EAAE,WAAW,EAAE,QAAQ,cAAuB,EAAE,IAChD,CAAC;AAAA,IACT;AAAA;AAEJ;AAEA,SAAS,SAAS,CAAC,WAAmB,IAAoB;AAAA,EACxD,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AAAA;AAGvC,SAAS,cAAc,CACrB,WACA,SACA,QACA,QACQ;AAAA,EACR,OAAO,KAAK,UAAU;AAAA,IACpB;AAAA,IACA,mBAAkB,OAAO;AAAA,IACzB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,MAAM,YAAY;AAAA,EAC3B,CAAC;AAAA;AAGH,SAAS,sBAAsB,CAAC,OAAoC;AAAA,EAClE,gBAAe,MAAM,WAAW,WAAW;AAAA,EAC3C,gBAAe,MAAM,IAAI,WAAW;AAAA;AAGtC,SAAS,aAAa,CAAC,WAAmB,IAAiC;AAAA,EACzE,OAAO,IAAI,qBACT,kBACA,2BAA2B,kCAAkC,aAC/D;AAAA;AAGF,SAAS,kBAAkB,CAAC,UAKJ;AAAA,EACtB,OAAO,IAAI,qBACT,uBACA,qCAAqC,SAAS,yCAAyC,SAAS,wBAAwB,SAAS,UACnI;AAAA;AAGF,SAAS,YAAY,CAAC,aAAqC,WAAwC;AAAA,EACjG,OAAO,IAAI,qBACT,6BACA,iBAAiB,wCAAwC,YAAY,qBAAqB,YAAY,SACxG;AAAA;AAGF,SAAS,WAAwB,CAAC,QAA2B,QAAiC;AAAA,EAC5F,OAAO,MAAM;AAAA,EACb,YAAY,KAAK,UAAU,gBAAgB,MAAM;AAAA,IAAG,OAAO,IAAI,KAAK,KAAK;AAAA;;AC7pB3E;AAqDA,SAAS,iBAAiB,CAAC,QAAsC,WAAiB;AAAA,EAChF,OAAO;AAAA,IACL,IAAI,OAAO;AAAA,IACX,WAAW,OAAO;AAAA,IAClB,aAAa,OAAO;AAAA,IACpB,MAAM,OAAO;AAAA,IACb,OAAO,gBAAgB,OAAO,KAAK;AAAA,IACnC,MAAM,OAAO;AAAA,IACb,wBAAwB,OAAO;AAAA,IAC/B,WAAW,IAAI,KAAK,OAAO,SAAS;AAAA,IACpC,WAAW,IAAI,KAAK,SAAS;AAAA,EAC/B;AAAA;AAGF,SAAS,mBAAmB,CAC1B,QACA,KACA;AAAA,EACA,OAAO;AAAA,OACF,kBAAkB,QAAQ,GAAG;AAAA,IAChC,QAAQ;AAAA,OACJ,OAAO,eAAe,sBACtB,EAAE,iBAAiB,OAAO,gBAAgB,IAC1C,CAAC;AAAA,IACL,YAAY,IAAI,KAAK,GAAG;AAAA,EAC1B;AAAA;AAGF,SAAS,wBAAwB,CAAC,QAAgD,KAAW;AAAA,EAC3F,OAAO;AAAA,OACF,kBAAkB,QAAQ,GAAG;AAAA,IAChC,QAAQ;AAAA,OACJ,OAAO,oBAAoB,YAAY,CAAC,IAAI,EAAE,iBAAiB,OAAO,gBAAgB;AAAA,IAC1F,OAAO,eACL,iBACE,uBACA,4EACF,GACA,EAAE,cAAc,yCAAwC,IAAI,IAAI,CAClE;AAAA,IACA,YAAY,IAAI,KAAK,GAAG;AAAA,EAC1B;AAAA;AAAA;AAQK,MAAM,oCAAyE;AAAA,EAOvD;AAAA,EANpB,aAAa;AAAA,EACL,WAAW,IAAI;AAAA,EACf,iBAAiB,IAAI;AAAA,EACrB,iBAAiB,IAAI;AAAA,EACrB,cAAc,IAAI;AAAA,EAEnC,WAAW,CAAkB,UAAqD,CAAC,GAAG;AAAA,IAAzD;AAAA;AAAA,OAEvB,2BAA0B,CAC9B,OAC8C;AAAA,IAC9C,uBAAuB,MAAM,OAAO,2BAA2B;AAAA,IAC/D,IAAI,KAAK,SAAS,IAAI,MAAM,EAAE,GAAG;AAAA,MAC/B,MAAM,IAAI,iCACR,oBACA,wDACF;AAAA,IACF;AAAA,IACA,IAAI,MAAM,oBAAoB,WAAW;AAAA,MACvC,MAAM,MAAM,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,MACzD,MAAM,kBAAkB,KAAK,0CAA0C,MAAM,eAAe;AAAA,MAC5F,IACE,CAAC,OACD,mBACA,IAAI,cAAc,MAAM,aACxB,IAAI,gBAAgB,MAAM,eAC1B,IAAI,WAAW,aACf,IAAI,eAAe,4BACnB,IAAI,SAAS,MAAM,QACnB,IAAI,2BAA2B,MAAM,wBACrC;AAAA,QACA,MAAM,IAAI,iCACR,oBACA,2EACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAA8C;AAAA,MAClD,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,gBAAgB,MAAM,KAAK;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,wBAAwB,MAAM;AAAA,MAC9B,WAAW,MAAM;AAAA,MACjB,cAAc,gBAAgB,MAAM,YAAY;AAAA,MAChD,aAAa,MAAM;AAAA,SACf,MAAM,oBAAoB,YAAY,CAAC,IAAI,EAAE,iBAAiB,MAAM,gBAAgB;AAAA,SACpF,MAAM,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,MAAM,SAAS;AAAA,SAC/D,MAAM,wBAAwB,YAC9B,CAAC,IACD,EAAE,qBAAqB,MAAM,oBAAoB;AAAA,SACjD,MAAM,sBAAsB,YAC5B,CAAC,IACD,EAAE,mBAAmB,MAAM,kBAAkB;AAAA,SAC7C,MAAM,4BAA4B,YAClC,CAAC,IACD,EAAE,yBAAyB,MAAM,wBAAwB;AAAA,SACzD,MAAM,iCAAiC,YACvC,CAAC,IACD,EAAE,8BAA8B,CAAC,GAAG,MAAM,4BAA4B,EAAE;AAAA,MAC5E,WAAW;AAAA,MACX,WAAW,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,KAAK;AAAA,IACjD;AAAA,IACA,KAAK,SAAS,IAAI,OAAO,IAAI,MAAM;AAAA,IACnC,OAAO,gBAAgB,MAAM;AAAA;AAAA,OAGzB,4BAA2B,CAC/B,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,SAAS,IAAI,MAAM,EAAE;AAAA,IACzC,IAAI,UAAU,OAAO,UAAU,QAAQ,KAAK,KAAK,IAAI,EAAE,QAAQ,GAAG;AAAA,MAChE,KAAK,SAAS,OAAO,OAAO,EAAE;AAAA,MAC9B,MAAM,eAAe;AAAA,IACvB;AAAA,IACA,IACE,CAAC,UACD,OAAO,cAAc,MAAM,aAC3B,OAAO,gBAAgB,MAAM,eAC7B,OAAO,gBAAgB,MAAM,eAC7B,CAAC,UAAU,OAAO,WAAW,MAAM,SAAS,GAC5C;AAAA,MACA,MAAM,eAAe;AAAA,IACvB;AAAA,IAEA,KAAK,SAAS,OAAO,MAAM,EAAE;AAAA,IAC7B,OAAO,gBAAgB,MAAM;AAAA;AAAA,OAGzB,oBAAmB,CACvB,OACuC;AAAA,IACvC,uBAAuB,MAAM,OAAO,oBAAoB;AAAA,IACxD,IAAI,KAAK,eAAe,IAAI,MAAM,EAAE,GAAG;AAAA,MACrC,MAAM,IAAI,iCACR,gBACA,iDACF;AAAA,IACF;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAuD;AAAA,MAC3D,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,MAAM,MAAM;AAAA,MACZ,OAAO,gBAAgB,MAAM,KAAK;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,wBAAwB,MAAM;AAAA,MAC9B,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,KAAK;AAAA,IACjD;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,MAAM;AAAA,IACzC,OAAO,gBAAgB,MAAM;AAAA;AAAA,OAGzB,6BAA4B,CAChC,OACwD;AAAA,IACxD,uBAAuB,MAAM,OAAO,oBAAoB;AAAA,IACxD,IAAI,KAAK,eAAe,IAAI,MAAM,EAAE,GAAG;AAAA,MACrC,MAAM,IAAI,iCACR,gBACA,iDACF;AAAA,IACF;AAAA,IACA,MAAM,gBAAgB,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IACnE,IACE,CAAC,uBAAuB,eAAe,KAAK,KAC5C,cAAc,WAAW,YACzB,cAAc,oBACd;AAAA,MACA,MAAM,sBAAsB;AAAA,IAC9B;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAwD;AAAA,MAC5D,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,MAAM;AAAA,MACN,OAAO,gBAAgB,MAAM,KAAK;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,wBAAwB,MAAM;AAAA,MAC9B,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,iBAAiB,MAAM;AAAA,MACvB,WAAW;AAAA,MACX,WAAW;AAAA,MACX,WAAW,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,KAAK;AAAA,IACjD;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,MAAM;AAAA,IACzC,OAAO,gBAAgB,MAAM;AAAA;AAAA,OAGzB,2BAA0B,CAC9B,OAC2D;AAAA,IAC3D,uBAAuB,MAAM,iBAAiB,+BAA+B;AAAA,IAC7E,MAAM,UAAU,KAAK,SAAS,IAAI,MAAM,SAAS;AAAA,IACjD,IACE,CAAC,WACD,QAAQ,cAAc,MAAM,aAC5B,QAAQ,oBAAoB,aAC5B,QAAQ,aAAa,aACrB,QAAQ,wBAAwB,aAChC,QAAQ,gBAAgB,MAAM,eAC9B,CAAC,UAAU,QAAQ,WAAW,MAAM,SAAS,KAC7C,CAAC,UAAU,QAAQ,qBAAqB,MAAM,mBAAmB,GACjE;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,KAAK,eAAe,IAAI,QAAQ,eAAe;AAAA,IAC3D,IACE,CAAC,OACD,IAAI,cAAc,MAAM,aACxB,IAAI,gBAAgB,QAAQ,eAC5B,IAAI,WAAW,aACf,IAAI,eAAe,4BACnB,IAAI,SAAS,QAAQ,QACrB,IAAI,2BAA2B,QAAQ,wBACvC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,KAAK,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC/B,IAAI,QAAQ,UAAU,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,UAAU,QAAQ,KAAK,IAAI,QAAQ,GAAG;AAAA,MAC5F,MAAM,UAAU,oBAAoB,KAAK,GAAG;AAAA,MAC5C,KAAK,eAAe,IAAI,IAAI,IAAI,OAAO;AAAA,MACvC,OAAO,EAAE,MAAM,WAAW,KAAK,gBAAgB,OAAO,GAAG,UAAU,QAAQ,SAAS;AAAA,IACtF;AAAA,IAEA,MAAM,aAAqD;AAAA,SACtD,kBAAkB,KAAK,GAAG;AAAA,MAC7B,QAAQ;AAAA,MACR,cAAc,MAAM;AAAA,MACpB,mBAAmB;AAAA,MACnB,WAAW,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,eAAe;AAAA,SACrD,QAAQ,sBAAsB,YAC9B,CAAC,IACD,EAAE,iBAAiB,QAAQ,kBAAkB;AAAA,IACnD;AAAA,IACA,KAAK,eAAe,IAAI,IAAI,IAAI,UAAU;AAAA,IAC1C,OAAO;AAAA,MACL,MAAM;AAAA,MACN,KAAK,gBAAgB,UAAU;AAAA,MAC/B,SAAS,gBAAgB,OAAO;AAAA,MAChC,UAAU,QAAQ;AAAA,IACpB;AAAA;AAAA,OAGI,iCAAgC,CACpC,OACwD;AAAA,IACxD,MAAM,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,IACjD,MAAM,gBAAgB,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IACnE,IACE,CAAC,uBAAuB,KAAK,KAAK,KAClC,IAAI,WAAW,aACf,IAAI,iBAAiB,MAAM,gBAC1B,IAAI,oBAAoB,aAAa,IAAI,oBAAoB,MAAM,mBACpE,CAAC,uBAAuB,eAAe,KAAK,KAC5C,cAAc,WAAW,qBACzB;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAkD;AAAA,SACnD;AAAA,MACH,iBAAiB,MAAM;AAAA,MACvB,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA,KAAK,eAAe,IAAI,IAAI,IAAI,OAAO;AAAA,IACvC,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,8BAA6B,CAAC,OAAoD;AAAA,IACtF,MAAM,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,IACjD,IACE,CAAC,uBAAuB,KAAK,KAAK,KAClC,IAAI,WAAW,aACf,IAAI,SAAS,aACb,IAAI,iBAAiB,MAAM,gBAC3B,IAAI,oBAAoB,MAAM,iBAC9B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,UAAU;AAAA,SACX,kBAAkB,KAAK,GAAG;AAAA,MAC7B,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,iBAAiB,MAAM;AAAA,MACvB,WAAW,IAAI,KAAK,MAAM,SAAS;AAAA,IACrC;AAAA,IACA,KAAK,eAAe,IAAI,IAAI,IAAI,OAAO;AAAA,IACvC,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,oBAAmB,CACvB,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,IACjD,IAAI,CAAC,uBAAuB,KAAK,KAAK,KAAK,IAAI,WAAW;AAAA,MAAW,OAAO;AAAA,IAC5E,IAAI,MAAM,iBAAiB,IAAI;AAAA,MAAc,OAAO;AAAA,IACpD,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,kBACJ,MAAM,WAAW,cACb,MAAM,kBACN,MAAM,WAAW,WACd,MAAM,mBAAmB,IAAI,kBAC9B,IAAI;AAAA,IACZ,IAAI,MAAM,WAAW,eAAe,IAAI,SAAS,aAAa,iBAAiB;AAAA,MAC7E,KAAK,mCAAmC,IAAI,aAAa,iBAAiB,GAAG;AAAA,IAC/E;AAAA,IACA,MAAM,OAAO,kBAAkB,KAAK,GAAG;AAAA,IACvC,MAAM,WACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,iBAAiB,MAAM;AAAA,SACnB,MAAM,2BAA2B,YACjC,CAAC,IACD,EAAE,wBAAwB,MAAM,uBAAuB;AAAA,MAC3D,aAAa,gBAAgB,MAAM,WAAW;AAAA,MAC9C,YAAY;AAAA,IACd,IACA,MAAM,WAAW,WACf;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,SACJ,oBAAoB,YAAY,CAAC,IAAI,EAAE,gBAAgB;AAAA,MAC3D,OAAO,kBAAiB,MAAM,OAAO,uCAAsC;AAAA,MAC3E,YAAY;AAAA,IACd,IACA;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,SACJ,oBAAoB,YAAY,CAAC,IAAI,EAAE,gBAAgB;AAAA,MAC3D,YAAY;AAAA,IACd;AAAA,IACR,KAAK,eAAe,IAAI,IAAI,IAAI,QAAQ;AAAA,IACxC,OAAO,gBAAgB,QAAQ;AAAA;AAAA,OAG3B,iBAAgB,CACpB,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,IACjD,OAAO,uBAAuB,KAAK,KAAK,IAAI,gBAAgB,GAAG,IAAI;AAAA;AAAA,OAG/D,oBAAmB,CACvB,OACuC;AAAA,IACvC,uBAAuB,MAAM,gBAAgB,uBAAuB;AAAA,IACpE,IAAI,KAAK,eAAe,IAAI,MAAM,EAAE,GAAG;AAAA,MACrC,MAAM,IAAI,iCACR,0BACA,gDACF;AAAA,IACF;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAuC;AAAA,MAC3C,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,cAAc,gBAAgB,MAAM,YAAY;AAAA,MAChD,aAAa,gBAAgB,MAAM,WAAW;AAAA,SAC1C,MAAM,wBAAwB,YAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,MAAM,mBAAmB,EAAE;AAAA,MAC/D,QAAQ,CAAC,GAAG,MAAM,MAAM;AAAA,MACxB,UAAU,gBAAgB,MAAM,QAAQ;AAAA,MACxC,QAAQ;AAAA,MACR,oBAAoB,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,cAAc;AAAA,MACjE,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,MAAM;AAAA,IACzC,OAAO,gBAAgB,MAAM;AAAA;AAAA,OAGzB,gCAA+B,CACnC,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,uBAAuB,QAAQ,KAAK,KACrC,OAAO,aAAa,MAAM,oBAC1B,OAAO,WAAW,uBAClB,OAAO,oBACP;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,UAAU,gBAAgB,MAAM,QAAQ;AAAA,MACxC,UAAU,OAAO,WAAW;AAAA,MAC5B,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,iBAAgB,CACpB,OAC8C;AAAA,IAC9C,MAAM,gBAAgB,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IACnE,OAAO,uBAAuB,eAAe,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAAA;AAAA,OAGnF,+BAA8B,CAClC,OAC8C;AAAA,IAC9C,MAAM,aAAa,KAAK,YAAY,IAAI,MAAM,YAAY;AAAA,IAC1D,IAAI,CAAC,oBAAoB,YAAY,KAAK;AAAA,MAAG,OAAO;AAAA,IACpD,MAAM,gBAAgB,KAAK,eAAe,IAAI,WAAW,eAAe;AAAA,IACxE,OAAO,uBAAuB,eAAe,KAAK,IAAI,gBAAgB,aAAa,IAAI;AAAA;AAAA,OAGnF,wBAAuB,CAC3B,OACwD;AAAA,IACxD,uBAAuB,MAAM,iBAAiB,oCAAoC;AAAA,IAClF,uBAAuB,MAAM,oBAAoB,6BAA6B;AAAA,IAC9E,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,uBAAuB,QAAQ,KAAK,KACrC,OAAO,aAAa,MAAM,oBAC1B,CAAC,iBAAiB,OAAO,QAAQ,MAAM,SAAS,IAAI,GACpD;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,oBAAoB;AAAA,MAC7B,MAAM,qBACJ,OAAO,mBAAmB,UAAU,cACpC,OAAO,mBAAmB,UAAU,QAAQ,KAAK,IAAI,QAAQ;AAAA,MAC/D,IAAI,CAAC;AAAA,QAAoB,OAAO;AAAA,IAClC;AAAA,IAEA,MAAM,WAAW,KAAK,qCAAqC,OAAO,EAAE;AAAA,IACpE,IACE,MAAM,SAAS,SAAS,qBACxB,CAAC,QACC,SAAS,IAAI,CAAC,eAAe,WAAW,EAAE,GAC1C,MAAM,yBAAyB,CAAC,CAClC,GACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,kBAAkB;AAAA,IACpE,MAAM,WAAW;AAAA,SACZ,gBAAgB,MAAM,QAAQ;AAAA,MACjC,OAAO;AAAA,MACP,WAAW,YAAY,KAAK,MAAM,iBAAiB,UAAU;AAAA,MAC7D;AAAA,SACI,MAAM,SAAS,SAAS,oBACxB,EAAE,uBAAuB,CAAC,GAAI,MAAM,yBAAyB,CAAC,CAAE,EAAE,IAClE,CAAC;AAAA,IACP;AAAA,IACA,MAAM,mBACJ,MAAM,SAAS,SAAS,gBAAgB,OAAO,WAAW;AAAA,IAC5D,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,QAAQ,MAAM,SAAS,SAAS,eAAe,uBAAuB,OAAO;AAAA,MAC7E,oBACE,MAAM,SAAS,SAAS,eAAe,YAAY,OAAO;AAAA,MAC5D,UAAU,mBAAmB,OAAO,WAAW,IAAI,OAAO;AAAA,MAC1D,oBAAoB;AAAA,MACpB,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAE1C,MAAM,eAA4C,CAAC;AAAA,IACnD,IAAI,MAAM,SAAS,SAAS,cAAc;AAAA,MACxC,WAAW,cAAc,UAAU;AAAA,QACjC,MAAM,oBAAoB,2BAA2B,YAAY,GAAG;AAAA,QACpE,KAAK,YAAY,IAAI,WAAW,IAAI,iBAAiB;AAAA,QACrD,aAAa,KAAK,gBAAgB,iBAAiB,CAAC;AAAA,MACtD;AAAA,IACF;AAAA,IACA,OAAO,EAAE,eAAe,gBAAgB,OAAO,GAAG,aAAa;AAAA;AAAA,OAG3D,gCAA+B,CACnC,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,KAC9C,OAAO,mBAAmB,UAAU,cACpC,gBAAgB,QAAQ,GAAG,GAC3B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,oBAAoB,KAAK,OAAO,oBAAoB,OAAO,YAAY;AAAA,MACvE,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,wBAAuB,CAC3B,OAC8C;AAAA,IAC9C,uBAAuB,MAAM,iBAAiB,oCAAoC;AAAA,IAClF,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,KAC9C,OAAO,mBAAmB,UAAU,mBACpC,gBAAgB,QAAQ,GAAG,GAC3B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,oBAAoB;AAAA,WACf,OAAO;AAAA,QACV,WAAW,YAAY,KAAK,MAAM,iBAAiB,OAAO,mBAAmB,UAAU;AAAA,MACzF;AAAA,IACF;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,mCAAkC,CACtC,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,KAC9C,OAAO,mBAAmB,UAAU,eACpC,gBAAgB,QAAQ,GAAG,KAC3B,OAAO,mBAAmB,SAAS,cACnC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,oBAAoB;AAAA,WACf,OAAO;AAAA,QACV,OAAO;AAAA,QACP,mBAAmB;AAAA,UACjB,aAAa,gBAAgB,MAAM,WAAW;AAAA,aAC1C,MAAM,wBAAwB,YAC9B,CAAC,IACD,EAAE,qBAAqB,IAAI,KAAK,MAAM,mBAAmB,EAAE;AAAA,UAC/D,QAAQ,CAAC,GAAG,MAAM,MAAM;AAAA,QAC1B;AAAA,MACF;AAAA,MACA,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,kCAAiC,CACrC,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,KAC9C,OAAO,mBAAmB,UAAU,eACpC,OAAO,mBAAmB,SAAS,gBACnC,gBAAgB,QAAQ,GAAG,GAC3B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,oBAAoB,KAAK,OAAO,oBAAoB,OAAO,gBAAgB;AAAA,MAC3E,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,0BAAyB,CAC7B,OACkB;AAAA,IAClB,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,OAAO,MAAM,QAAQ,KAC9C,OAAO,mBAAmB,UAAU,iBACpC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI;AAAA,SAC9B;AAAA,MACH,oBAAoB;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,IACtB,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,OAGH,iCAAgC,CACpC,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IAAI,CAAC,uBAAuB,QAAQ,KAAK,KAAK,CAAC,OAAO;AAAA,MAAoB,OAAO;AAAA,IACjF,IAAI,OAAO,mBAAmB,UAAU;AAAA,MAAiB,OAAO,gBAAgB,MAAM;AAAA,IAEtF,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,IAAI,CAAC,gBAAgB,QAAQ,GAAG;AAAA,MAAG,OAAO;AAAA,IAC1C,MAAM,YAAY,OAAO,mBAAmB,UAAU;AAAA,IACtD,MAAM,aAAa,aAAa,OAAO,mBAAmB,SAAS;AAAA,IACnE,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,QAAQ,aAAa,0BAA0B,OAAO;AAAA,MACtD,oBAAoB,aAAa,YAAY,OAAO;AAAA,MACpD,UAAU,aAAa,OAAO,WAAW,IAAI,OAAO;AAAA,MACpD,oBAAoB;AAAA,MACpB,WAAW;AAAA,IACb;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,yBAAwB,CAC5B,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IAAI,CAAC,gBAAgB,QAAQ,KAAK;AAAA,MAAG,OAAO;AAAA,IAC5C,MAAM,SAAS,OAAO,mBAAmB;AAAA,IACzC,MAAM,UAAwC;AAAA,SACzC;AAAA,SACC,SACA;AAAA,QACE,aAAa,gBAAgB,OAAO,WAAW;AAAA,QAC/C,qBACE,OAAO,wBAAwB,YAC3B,YACA,IAAI,KAAK,OAAO,mBAAmB;AAAA,QACzC,QAAQ,CAAC,GAAG,OAAO,MAAM;AAAA,MAC3B,IACA,CAAC;AAAA,MACL,QAAQ;AAAA,MACR,oBAAoB;AAAA,MACpB,UAAU,OAAO,WAAW;AAAA,MAC5B,oBAAoB;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,gBAAe,CACnB,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,MAAM,SAAS,kBAAkB,QAAQ,OAAO,SAAS;AAAA,IACzD,IAAI,CAAC,UAAU,CAAC;AAAA,MAAQ,OAAO;AAAA,IAC/B,MAAM,UAAU,uBAAuB,QAAQ,QAAQ,KAAK,IAAI,GAAG;AAAA,MACjE,QAAQ;AAAA,MACR,UAAU,OAAO;AAAA,IACnB,CAAC;AAAA,IACD,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,wBAAuB,CAC3B,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,MAAM,SAAS,kBAAkB,QAAQ,OAAO,iBAAiB;AAAA,IACjE,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO;AAAA,MAAoB,OAAO;AAAA,IAC7D,MAAM,WAAW,KAAK,qCAAqC,OAAO,EAAE;AAAA,IACpE,IACE,CAAC,QACC,SAAS,IAAI,CAAC,eAAe,WAAW,EAAE,GAC1C,OAAO,mBAAmB,yBAAyB,CAAC,CACtD,GACA;AAAA,MACA,MAAM,IAAI,iCACR,0BACA,4FACF;AAAA,IACF;AAAA,IACA,MAAM,eAAe,IAAI,IAAI,MAAM,SAAS,IAAI,CAAC,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;AAAA,IACnF,IAAI,SAAS,KAAK,CAAC,eAAe,CAAC,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAC,GAAG;AAAA,MAC3E,MAAM,IAAI,iCACR,0BACA,+EACF;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,UAAU,uBAAuB,QAAQ,QAAQ,KAAK;AAAA,MAC1D,QAAQ;AAAA,MACR,UAAU,MAAM;AAAA,IAClB,CAAC;AAAA,IACD,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,WAAW,cAAc,UAAU;AAAA,MACjC,KAAK,YAAY,IAAI,WAAW,IAAI;AAAA,WAC/B;AAAA,QACH,SAAS,gBAAgB,aAAa,IAAI,WAAW,QAAQ,EAAE,CAAE;AAAA,QACjE,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IACA,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,mBAAkB,CACtB,OAC8C;AAAA,IAC9C,MAAM,SAAS,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IAC5D,IACE,CAAC,gBAAgB,QAAQ,KAAK,KAC9B,OAAO,mBAAmB,SAAS,gBACnC,OAAO,mBAAmB,UAAU,iBACpC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAwC;AAAA,SACzC;AAAA,MACH,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,qBAAqB;AAAA,MACrB,QAAQ,CAAC;AAAA,MACT,UAAU,CAAC;AAAA,MACX,oBAAoB;AAAA,MACpB,UAAU,OAAO,WAAW;AAAA,MAC5B,oBAAoB;AAAA,MACpB,WAAW,KAAK,IAAI;AAAA,IACtB;AAAA,IACA,KAAK,eAAe,IAAI,OAAO,IAAI,OAAO;AAAA,IAC1C,OAAO,gBAAgB,OAAO;AAAA;AAAA,OAG1B,cAAa,CAAC,OAA2E;AAAA,IAC7F,OAAO,KAAK,iBAAiB,OAAO,KAAK,IAAI,CAAC;AAAA;AAAA,OAG1C,qBAAoB,CACxB,OAC8C;AAAA,IAC9C,MAAM,MAAM,KAAK,qBAAqB,MAAM,KAAK;AAAA,IACjD,IACE,CAAC,uBAAuB,KAAK,KAAK,KAClC,IAAI,WAAW,aACf,IAAI,eAAe,qBACnB;AAAA,MACA,MAAM,WAAW;AAAA,IACnB;AAAA,IACA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,SAAS,KAAK,iBAClB;AAAA,MACE,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,IAAI;AAAA,MACX,MAAM,IAAI;AAAA,MACV,iBAAiB,IAAI;AAAA,MACrB,SAAS,MAAM;AAAA,MACf,SAAS,MAAM;AAAA,IACjB,GACA,GACF;AAAA,IACA,MAAM,YAAmD;AAAA,SACpD,kBAAkB,KAAK,GAAG;AAAA,MAC7B,QAAQ;AAAA,MACR,iBAAiB,IAAI;AAAA,SACjB,OAAO,qCAAqC,YAC5C,CAAC,IACD,EAAE,wBAAwB,OAAO,iCAAiC;AAAA,MACtE,aAAa,CAAC,gBAAgB,OAAO,UAAU,CAAC;AAAA,MAChD,YAAY;AAAA,IACd;AAAA,IACA,KAAK,eAAe,IAAI,IAAI,IAAI,SAAS;AAAA,IACzC,OAAO,KAAK,QAAQ,KAAK,gBAAgB,SAAS,EAAE;AAAA;AAAA,EAG9C,gBAAgB,CACtB,OACA,KAC8B;AAAA,IAC9B,IAAI,gBAAgB,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IACjE,IACE,CAAC,uBAAuB,eAAe,KAAK,KAC5C,CAAC,aAAa,cAAc,MAAM,KAClC,cAAc,oBAAoB,SAAS,mBAC3C;AAAA,MACA,MAAM,sBAAsB;AAAA,IAC9B;AAAA,IACA,IACE,cAAc,WAAW,uBACzB,cAAc,mBAAoB,QAAQ,KAAK,IAAI,QAAQ,GAC3D;AAAA,MACA,gBAAgB;AAAA,WACX;AAAA,QACH,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,UAAU,cAAc,WAAW;AAAA,QACnC,WAAW;AAAA,MACb;AAAA,MACA,KAAK,eAAe,IAAI,cAAc,IAAI,aAAa;AAAA,MACvD,MAAM,sBAAsB;AAAA,IAC9B;AAAA,IACA,MAAM,UAAU,cAAc,SAAS,KAAK,CAAC,cAAc,UAAU,OAAO,MAAM,QAAQ,EAAE;AAAA,IAC5F,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,iCACR,0BACA,0EACF;AAAA,IACF;AAAA,IACA,MAAM,WAAW,KAAK,qBAAqB,KAAK;AAAA,IAChD,MAAM,cAAc,UAAU,QAAQ,OAAO,QAAQ;AAAA,IACrD,IAAI,YAAY,CAAC,eAAe,CAAC,MAAM,SAAS;AAAA,MAC9C,MAAM,IAAI,iCACR,uBACA,0BAA0B,MAAM,kFAClC;AAAA,IACF;AAAA,IACA,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,MAAM,EAAE,GAAG;AAAA,MAC/C,MAAM,IAAI,iCACR,uBACA,gDACF;AAAA,IACF;AAAA,IAEA,IAAI;AAAA,IACJ,IAAI,UAAU,WAAW,eAAe,SAAS,oBAAoB,cAAc,IAAI;AAAA,MACrF,MAAM,WAAW,KAAK,eAAe,IAAI,SAAS,eAAe;AAAA,MACjE,IAAI,CAAC,UAAU;AAAA,QACb,MAAM,IAAI,iCACR,0BACA,+EACF;AAAA,MACF;AAAA,MACA,MAAM,YAAY,KAAK,qCAAqC,SAAS,EAAE,EAAE,OACvE,CAAC,eAAe,WAAW,OAAO,SAAS,EAC7C;AAAA,MACA,KAAK,wBAAwB,UAAU,UAAU,UAAU,WAAW,CAAC;AAAA,MACvE,IAAI,UAAU,WAAW,GAAG;AAAA,QAC1B,MAAM,UAAU,mCAAmC,UAAU,GAAG;AAAA,QAChE,KAAK,eAAe,IAAI,SAAS,IAAI,OAAO;AAAA,QAC5C,mCAAmC,SAAS;AAAA,MAC9C;AAAA,IACF,EAAO,SAAI,UAAU,WAAW,aAAa;AAAA,MAC3C,MAAM,WAAW,KAAK,eAAe,IAAI,SAAS,eAAe;AAAA,MACjE,IAAI;AAAA,QAAU,KAAK,wBAAwB,UAAU,UAAU,KAAK;AAAA,IACtE;AAAA,IAEA,MAAM,uBACJ,cAAc,WAAW,sBACrB;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,oBAAoB;AAAA,MACpB,UAAU,cAAc,WAAW;AAAA,MACnC,WAAW;AAAA,IACb,IACA;AAAA,IACN,MAAM,aAAwC,WAC1C;AAAA,SACK;AAAA,MACH,iBAAiB,MAAM;AAAA,MACvB,SAAS,gBAAgB,OAAO;AAAA,MAChC,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,WAAW;AAAA,IACb,IACA;AAAA,MACE,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,gBAAgB,MAAM,KAAK;AAAA,MAClC,MAAM,MAAM;AAAA,MACZ,iBAAiB,MAAM;AAAA,MACvB,SAAS,gBAAgB,OAAO;AAAA,MAChC,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,WAAW;AAAA,IACb;AAAA,IAEJ,IAAI,yBAAyB,eAAe;AAAA,MAC1C,KAAK,eAAe,IAAI,qBAAqB,IAAI,oBAAoB;AAAA,IACvE;AAAA,IACA,KAAK,YAAY,IAAI,WAAW,IAAI,UAAU;AAAA,IAC9C,OAAO;AAAA,MACL,YAAY,gBAAgB,UAAU;AAAA,MACtC,eAAe,gBAAgB,oBAAoB;AAAA,SAC/C,qCAAqC,YACrC,CAAC,IACD,EAAE,iCAAiC;AAAA,MACvC,SAAS,aAAa;AAAA,MACtB,UAAU,aAAa,aAAa,CAAC;AAAA,IACvC;AAAA;AAAA,OAGI,cAAa,CACjB,OAC2C;AAAA,IAC3C,MAAM,aAAa,KAAK,qBAAqB,KAAK;AAAA,IAClD,OAAO,YAAY,WAAW,cAAc,gBAAgB,UAAU,IAAI;AAAA;AAAA,OAGtE,kBAAiB,CACrB,OAC2C;AAAA,IAC3C,MAAM,aAAa,KAAK,YAAY,IAAI,MAAM,YAAY;AAAA,IAC1D,OAAO,oBAAoB,YAAY,KAAK,IAAI,gBAAgB,UAAU,IAAI;AAAA;AAAA,OAG1E,gBAAe,CACnB,OAC+C;AAAA,IAC/C,OAAO,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,EACjC,OAAO,CAAC,eAAe,oBAAoB,YAAY,KAAK,CAAC,EAC7D,IAAI,CAAC,eAAe,gBAAgB,UAAU,CAAC;AAAA;AAAA,OAG9C,+BAA8B,CAClC,OAC+C;AAAA,IAC/C,MAAM,gBAAgB,KAAK,eAAe,IAAI,MAAM,eAAe;AAAA,IACnE,IAAI,CAAC,uBAAuB,eAAe,KAAK;AAAA,MAAG,OAAO,CAAC;AAAA,IAC3D,OAAO,KAAK,qCAAqC,MAAM,eAAe,EACnE,OAAO,CAAC,eAAe,oBAAoB,YAAY,KAAK,CAAC,EAC7D,IAAI,CAAC,eAAe,gBAAgB,UAAU,CAAC;AAAA;AAAA,OAG9C,qBAAoB,CAAC,OAIjB;AAAA,IACR,MAAM,aAAa,KAAK,YAAY,IAAI,MAAM,YAAY;AAAA,IAC1D,IACE,CAAC,cACD,WAAW,cAAc,MAAM,aAC/B,WAAW,gBAAgB,MAAM,aACjC;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IACA,MAAM,gBAAgB,KAAK,eAAe,IAAI,WAAW,eAAe;AAAA,IACxE,IAAI,CAAC,uBAAuB,eAAe,KAAK,GAAG;AAAA,MACjD,MAAM,IAAI,iCACR,0BACA,sEACF;AAAA,IACF;AAAA,IACA,IAAI,WAAW,WAAW,gBAAgB;AAAA,MACxC,OAAO;AAAA,QACL,YAAY,gBAAgB,UAAU;AAAA,QACtC,eAAe,gBAAgB,aAAa;AAAA,WACxC,cAAc,WAAW,uBACzB,EAAE,kCAAkC,cAAc,GAAG,IACrD,CAAC;AAAA,MACP;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,MAAM,YAAY,KAAK,qCAAqC,cAAc,EAAE,EAAE,OAC5E,CAAC,cAAc,UAAU,OAAO,WAAW,EAC7C;AAAA,IACA,KAAK,wBAAwB,YAAY,eAAe,UAAU,WAAW,CAAC;AAAA,IAC9E,MAAM,eAAe,2BAA2B,YAAY,GAAG;AAAA,IAC/D,KAAK,YAAY,IAAI,WAAW,IAAI,YAAY;AAAA,IAChD,MAAM,uBACJ,UAAU,WAAW,IACjB,mCAAmC,eAAe,GAAG,IACrD;AAAA,IACN,IAAI,yBAAyB,eAAe;AAAA,MAC1C,KAAK,eAAe,IAAI,cAAc,IAAI,oBAAoB;AAAA,IAChE;AAAA,IACA,OAAO;AAAA,MACL,YAAY,gBAAgB,YAAY;AAAA,MACxC,eAAe,gBAAgB,oBAAoB;AAAA,SAC/C,qBAAqB,WAAW,wBAAwB,UAAU,WAAW,IAC7E,EAAE,kCAAkC,qBAAqB,GAAG,IAC5D,CAAC;AAAA,IACP;AAAA;AAAA,EAGF,QAAQ,GAA+C;AAAA,IACrD,OAAO;AAAA,MACL,UAAU,gBAAgB,KAAK,QAAQ;AAAA,MACvC,gBAAgB,gBAAgB,KAAK,cAAc;AAAA,MACnD,gBAAgB,gBAAgB,KAAK,cAAc;AAAA,MACnD,aAAa,gBAAgB,KAAK,WAAW;AAAA,IAC/C;AAAA;AAAA,EAGF,OAAO,CAAC,UAA4D;AAAA,IAClE,YAAW,KAAK,UAAU,SAAS,QAAQ;AAAA,IAC3C,YAAW,KAAK,gBAAgB,SAAS,cAAc;AAAA,IACvD,YAAW,KAAK,gBAAgB,SAAS,cAAc;AAAA,IACvD,YAAW,KAAK,aAAa,SAAS,WAAW;AAAA;AAAA,EAG3C,GAAG,GAAS;AAAA,IAClB,OAAO,IAAI,KAAK,KAAK,QAAQ,MAAM,KAAK,IAAI,IAAM;AAAA;AAAA,EAG5C,oBAAoB,CAAC,OAAyD;AAAA,IACpF,MAAM,MAAM,KAAK,eAAe,IAAI,KAAK;AAAA,IACzC,IAAI,CAAC,OAAQ,IAAI,WAAW,aAAa,IAAI,WAAW;AAAA,MAAY,OAAO;AAAA,IAE3E,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,IAAI,IAAI,UAAU,QAAQ,IAAI,IAAI,QAAQ;AAAA,MAAG,OAAO;AAAA,IAEpD,IAAI,IAAI,WAAW,aAAa,IAAI,eAAe,0BAA0B;AAAA,MAC3E,MAAM,UAAU,KAAK,0CAA0C,IAAI,EAAE;AAAA,MACrE,IAAI;AAAA,QAAS,KAAK,SAAS,OAAO,QAAQ,EAAE;AAAA,IAC9C;AAAA,IACA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,IAAI,IAAI,SAAS,aAAa,IAAI,eAAe,qBAAqB;AAAA,QACpE,KAAK,mCAAmC,IAAI,aAAa,IAAI,iBAAiB,GAAG;AAAA,MACnF;AAAA,MACA,MAAM,UAAU,oBAAoB,KAAK,GAAG;AAAA,MAC5C,KAAK,eAAe,IAAI,IAAI,IAAI,OAAO;AAAA,MACvC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,IAAI,SAAS,aAAa,IAAI,iBAAiB;AAAA,MACjD,KAAK,mCAAmC,IAAI,aAAa,IAAI,iBAAiB,GAAG;AAAA,IACnF;AAAA,IACA,MAAM,SAAS,yBAAyB,KAAK,GAAG;AAAA,IAChD,KAAK,eAAe,IAAI,IAAI,IAAI,MAAM;AAAA,IACtC,OAAO;AAAA;AAAA,EAGD,oBAAoB,CAC1B,OACuC;AAAA,IACvC,WAAW,cAAc,KAAK,YAAY,OAAO,GAAG;AAAA,MAClD,IACE,WAAW,cAAc,MAAM,aAC/B,WAAW,gBAAgB,MAAM,eACjC,WAAW,MAAM,SAAS,MAAM,MAAM,QACtC,WAAW,SAAS,MAAM,MAC1B;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA;AAAA;AAAA,EAGM,yCAAyC,CAC/C,iBACiD;AAAA,IACjD,WAAW,WAAW,KAAK,SAAS,OAAO,GAAG;AAAA,MAC5C,IAAI,QAAQ,oBAAoB;AAAA,QAAiB,OAAO;AAAA,IAC1D;AAAA,IACA;AAAA;AAAA,EAGM,iCAAiC,CAAC,iBAAsD;AAAA,IAC9F,OAAO,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,EAAE,OACpC,CAAC,eAAe,WAAW,oBAAoB,eACjD;AAAA;AAAA,EAGM,oCAAoC,CAC1C,iBAC6B;AAAA,IAC7B,OAAO,KAAK,kCAAkC,eAAe,EAAE,OAC7D,CAAC,eAAe,WAAW,WAAW,WACxC;AAAA;AAAA,EAGM,uBAAuB,CAC7B,aACA,eACA,yBAAyB,MACnB;AAAA,IACN,MAAM,WAAW,cAAc;AAAA,IAC/B,IAAI,UAAU,SAAS,mBAAmB;AAAA,MACxC,MAAM,IAAI,iCACR,0BACA,6FACF;AAAA,IACF;AAAA,IACA,IAAI,0BAA0B,UAAU;AAAA,MACtC,MAAM,IAAI,iCACR,0BACA,6FACF;AAAA,IACF;AAAA;AAAA,EAGM,kCAAkC,CACxC,aACA,iBACA,KACM;AAAA,IACN,MAAM,gBAAgB,KAAK,eAAe,IAAI,eAAe;AAAA,IAC7D,IACE,CAAC,iBACD,cAAc,gBAAgB,eAC9B,cAAc,WAAW,qBACzB;AAAA,MACA;AAAA,IACF;AAAA,IACA,KAAK,eAAe,IAClB,cAAc,IACd,mCAAmC,eAAe,GAAG,CACvD;AAAA;AAEJ;AAEA,SAAS,0BAA0B,CACjC,YACA,KAC2B;AAAA,EAC3B,OAAO;AAAA,OACF;AAAA,IACH,QAAQ;AAAA,IACR,gBAAgB,IAAI,KAAK,GAAG;AAAA,IAC5B,WAAW,IAAI,KAAK,GAAG;AAAA,EACzB;AAAA;AAGF,SAAS,kCAAkC,CACzC,eACA,KAC8B;AAAA,EAC9B,IAAI,cAAc,WAAW,wBAAwB,cAAc,WAAW,WAAW;AAAA,IACvF,OAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAc,oBAAoB;AAAA,IACpC,MAAM,IAAI,iCACR,0BACA,6FACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,OACF;AAAA,IACH,QAAQ;AAAA,IACR,oBAAoB;AAAA,IACpB,UAAU,cAAc,WAAW;AAAA,IACnC,WAAW,IAAI,KAAK,GAAG;AAAA,EACzB;AAAA;AAGF,SAAS,SAAS,CAAC,MAAc,OAAwB;AAAA,EACvD,MAAM,YAAY,OAAO,KAAK,IAAI;AAAA,EAClC,MAAM,aAAa,OAAO,KAAK,KAAK;AAAA,EACpC,OAAO,UAAU,WAAW,WAAW,UAAU,gBAAgB,WAAW,UAAU;AAAA;AAGxF,SAAS,UAAU,GAAoC;AAAA,EACrD,OAAO,IAAI,iCACT,eACA,uEACF;AAAA;AAGF,SAAS,WAAwB,CAAC,QAA2B,QAAiC;AAAA,EAC5F,OAAO,MAAM;AAAA,EACb,YAAY,KAAK,UAAU,gBAAgB,MAAM;AAAA,IAAG,OAAO,IAAI,KAAK,KAAK;AAAA;AAG3E,SAAS,OAAO,CAAC,MAAyB,OAAmC;AAAA,EAC3E,MAAM,aAAa,CAAC,GAAG,IAAI,EAAE,KAAK;AAAA,EAClC,MAAM,cAAc,CAAC,GAAG,KAAK,EAAE,KAAK;AAAA,EACpC,OACE,WAAW,WAAW,YAAY,UAClC,WAAW,MAAM,CAAC,OAAO,UAAU,UAAU,YAAY,MAAM;AAAA;AAInE,SAAS,cAAc,GAAoC;AAAA,EACzD,OAAO,IAAI,iCACT,mBACA,8EACF;AAAA;AAGF,SAAS,qBAAqB,GAAoC;AAAA,EAChE,OAAO,IAAI,iCACT,0BACA,sGACF;AAAA;AAGF,SAAS,sBAAsB,CAAC,OAAe,MAAoB;AAAA,EACjE,IAAI,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AAAA,IACzC,MAAM,IAAI,iCACR,iBACA,oBAAoB,wBACtB;AAAA,EACF;AAAA;AAGF,SAAS,sBAAsB,CAC7B,QACA,OACwC;AAAA,EACxC,OACE,WAAW,aACX,OAAO,cAAc,MAAM,aAC3B,OAAO,gBAAgB,MAAM;AAAA;AAIjC,SAAS,mBAAmB,CAC1B,QACA,OACqC;AAAA,EACrC,OACE,WAAW,aACX,OAAO,cAAc,MAAM,aAC3B,OAAO,gBAAgB,MAAM;AAAA;AAIjC,SAAS,sBAAsB,CAC7B,QACA,OACwC;AAAA,EACxC,OACE,WAAW,aACX,OAAO,cAAc,MAAM,aAC3B,OAAO,gBAAgB,MAAM;AAAA;AAIjC,SAAS,gBAAgB,CACvB,QACA,MACS;AAAA,EACT,IAAI,SAAS;AAAA,IAAW,OAAO,WAAW;AAAA,EAC1C,IAAI,SAAS,mBAAmB;AAAA,IAC9B,OAAO,WAAW,YAAY,WAAW;AAAA,EAC3C;AAAA,EACA,OAAO,WAAW;AAAA;AAGpB,SAAS,YAAY,CAAC,QAAyD;AAAA,EAC7E,OAAO,WAAW,uBAAuB,WAAW;AAAA;AAGtD,SAAS,WAAW,CAAC,KAAW,YAAoB,YAAwB;AAAA,EAC1E,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,YAAY,WAAW,QAAQ,CAAC,CAAC;AAAA;AAG5E,SAAS,eAAe,CAAC,QAAsC,KAAoB;AAAA,EACjF,OACE,OAAO,mBAAoB,UAAU,QAAQ,KAAK,IAAI,QAAQ,KAC9D,OAAO,mBAAoB,WAAW,QAAQ,KAAK,IAAI,QAAQ;AAAA;AAInE,SAAS,eAAe,CACtB,QACA,OACA,UAGA;AAAA,EACA,OACE,uBAAuB,QAAQ,KAAK,KACpC,OAAO,aAAa,MAAM,oBAC1B,OAAO,oBAAoB,OAAO,MAAM,eACvC,aAAa,aAAa,OAAO,mBAAmB,aAAa;AAAA;AAItE,SAAS,iBAAiB,CACxB,QACA,OACA,MACA;AAAA,EACA,IACE,CAAC,gBAAgB,QAAQ,KAAK,KAC9B,OAAO,mBAAmB,SAAS,QACnC,OAAO,mBAAmB,UAAU,iBACpC;AAAA,IACA,OAAO;AAAA,EACT;AAAA,EACA,OAAO,OAAO,mBAAmB,qBAAqB;AAAA;AAGxD,SAAS,sBAAsB,CAC7B,QACA,QACA,KACA,OAI8B;AAAA,EAC9B,OAAO;AAAA,OACF;AAAA,IACH,aAAa,gBAAgB,OAAO,WAAW;AAAA,IAC/C,qBACE,OAAO,wBAAwB,YAAY,YAAY,IAAI,KAAK,OAAO,mBAAmB;AAAA,IAC5F,QAAQ,CAAC,GAAG,OAAO,MAAM;AAAA,IACzB,UAAU,gBAAgB,MAAM,QAAQ;AAAA,IACxC,QAAQ,MAAM;AAAA,IACd,oBAAoB;AAAA,IACpB,UAAU,OAAO,WAAW;AAAA,IAC5B,oBAAoB;AAAA,IACpB,WAAW;AAAA,EACb;AAAA;;ACj1CK,MAAM,gCAA+B,MAAM;AAAA,EAIrC;AAAA,EAHF,OAAO;AAAA,EAEhB,WAAW,CACA,QACT,SACA;AAAA,IACA,MAAM,OAAO;AAAA,IAHJ;AAAA;AAKb;;ACIO,MAAM,4BAA6D;AAAA,EACvD,eAAe,IAAI;AAAA,EAEpC,QAAQ,GAAuC;AAAA,IAC7C,OAAO,gBAAgB,KAAK,YAAY;AAAA;AAAA,EAG1C,OAAO,CAAC,UAAoD;AAAA,IAC1D,KAAK,aAAa,MAAM;AAAA,IACxB,YAAY,IAAI,YAAY,UAAU;AAAA,MACpC,KAAK,aAAa,IAAI,IAAI,gBAAgB,OAAO,CAAC;AAAA,IACpD;AAAA;AAAA,OAGI,OAAM,CAAC,OAAiE;AAAA,IAC5E,MAAM,KAAK,eAAe;AAAA,IAE1B,MAAM,UAA6B;AAAA,MACjC,IAAI,MAAM,MAAM,oBAAmB;AAAA,MACnC,WAAW,MAAM;AAAA,MACjB,cAAc,aAAa,MAAM,SAAS;AAAA,MAC1C,UAAU,MAAM;AAAA,MAChB,QAAQ;AAAA,SACJ,MAAM,aAAa,YAAY,CAAC,IAAI,EAAE,UAAU,MAAM,SAAS;AAAA,SAC/D,MAAM,cAAc,YAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;AAAA,SAClE,MAAM,gBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,MAAM,YAAY;AAAA,SACxE,MAAM,sBAAsB,YAC5B,CAAC,IACD,EAAE,mBAAmB,MAAM,kBAAkB;AAAA,SAC7C,MAAM,mBAAmB,YAAY,CAAC,IAAI,EAAE,gBAAgB,MAAM,eAAe;AAAA,SACjF,MAAM,mBAAmB,YAAY,CAAC,IAAI,EAAE,gBAAgB,MAAM,eAAe;AAAA,MACrF,aAAa,CAAC;AAAA,MACd,WAAW,IAAI;AAAA,MACf,WAAW,MAAM;AAAA,IACnB;AAAA,IAEA,KAAK,aAAa,IAAI,QAAQ,IAAI,OAAO;AAAA,IACzC,OAAO;AAAA;AAAA,OAGH,gBAAe,CAAC,UAAkB,WAAkD;AAAA,IACxF,MAAM,UAAU,KAAK,aAAa,IAAI,QAAQ;AAAA,IAC9C,IAAI,CAAC,WAAW,QAAQ,iBAAiB,aAAa,SAAS,GAAG;AAAA,MAChE,MAAM,IAAI,wBAAuB,aAAa,gCAAgC;AAAA,IAChF;AAAA,IAEA,MAAM,QAAQ,KAAK,IAAI;AAAA,IACvB,IAAI,2BAA2B,SAAS,KAAK,GAAG;AAAA,MAC9C,KAAK,aAAa,OAAO,QAAQ;AAAA,MACjC,MAAM,IAAI,wBAAuB,WAAW,kCAAkC;AAAA,IAChF;AAAA,IAEA,IAAI,mCAAmC,SAAS,KAAK,GAAG;AAAA,MACtD,KAAK,aAAa,OAAO,QAAQ;AAAA,MACjC,MAAM,IAAI,wBAAuB,aAAa,gCAAgC;AAAA,IAChF;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,aAAY,CAAC,UAAkB,SAA8C;AAAA,IACjF,MAAM,UAAU,KAAK,eAAe,QAAQ;AAAA,IAC5C,MAAM,UAAU;AAAA,SACX;AAAA,MACH;AAAA,IACF;AAAA,IACA,KAAK,aAAa,IAAI,UAAU,OAAO;AAAA,IACvC,OAAO;AAAA;AAAA,OAGH,cAAa,CAAC,UAAkB,MAAwD;AAAA,IAC5F,MAAM,UAAU,KAAK,eAAe,QAAQ;AAAA,IAC5C,MAAM,UAAU;AAAA,SACX;AAAA,MACH,aAAa;AAAA,QACX,GAAG,QAAQ,YAAY,OAAO,CAAC,cAAc,UAAU,eAAe,KAAK,UAAU;AAAA,QACrF;AAAA,MACF,EAAE,KAAK,CAAC,MAAM,UAAU,KAAK,aAAa,MAAM,UAAU;AAAA,IAC5D;AAAA,IACA,KAAK,aAAa,IAAI,UAAU,OAAO;AAAA,IACvC,OAAO;AAAA;AAAA,OAGH,SAAQ,CAAC,UAAkB,SAA8C;AAAA,IAC7E,MAAM,UAAU,KAAK,eAAe,QAAQ;AAAA,IAC5C,MAAM,UAAU;AAAA,SACX;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA,aAAa,IAAI;AAAA,IACnB;AAAA,IACA,KAAK,aAAa,IAAI,UAAU,OAAO;AAAA,IACvC,OAAO;AAAA;AAAA,OAGH,MAAK,CAAC,UAA8C;AAAA,IACxD,MAAM,UAAU,KAAK,eAAe,QAAQ;AAAA,IAC5C,MAAM,UAAU;AAAA,SACX;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI;AAAA,IACjB;AAAA,IACA,KAAK,aAAa,IAAI,UAAU,OAAO;AAAA,IACvC,OAAO;AAAA;AAAA,OAGH,eAAc,CAAC,MAAM,IAAI,MAAyB;AAAA,IACtD,IAAI,UAAU;AAAA,IACd,YAAY,IAAI,YAAY,KAAK,cAAc;AAAA,MAC7C,IAAI,8BAA8B,SAAS,IAAI,QAAQ,CAAC,GAAG;AAAA,QACzD,KAAK,aAAa,OAAO,EAAE;AAAA,QAC3B,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,cAAc,CAAC,UAAqC;AAAA,IAC1D,MAAM,UAAU,KAAK,aAAa,IAAI,QAAQ;AAAA,IAC9C,IAAI,CAAC,SAAS;AAAA,MACZ,MAAM,IAAI,wBAAuB,aAAa,gCAAgC;AAAA,IAChF;AAAA,IAEA,IAAI,QAAQ,WAAW,WAAW;AAAA,MAChC,MAAM,IAAI,wBACR,QAAQ,WAAW,cAAc,sBAAsB,mBACvD,kCAAkC,QAAQ,SAC5C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;;AChKA;;;ACQA,IAAM,eAAgC,OAAU,QAA0C,IAAI;AAE9F,SAAS,YAAY,CAAC,WAAmB,IAAoB;AAAA,EAC3D,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AAAA;AAAA;AAGhC,MAAM,yBAAqD;AAAA,EAM7C;AAAA,EALF,OAAO,IAAI;AAAA,EACX;AAAA,EACA;AAAA,EAEjB,WAAW,CACQ,MACjB,QAGI,CAAC,GACL;AAAA,IALiB;AAAA,IAMjB,KAAK,mBAAmB,MAAM,oBAAoB;AAAA,IAClD,KAAK,gBAAgB,MAAM;AAAA;AAAA,EAG7B,QAAQ,GAAqC;AAAA,IAC3C,OAAO,gBAAgB,KAAK,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,UAAkD;AAAA,IACxD,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA;AAAA,OAGI,OAAM,CAAC,OAAuD;AAAA,IAClE,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,MAAM,MAAM,aAAa,MAAM,WAAW,MAAM,EAAE;AAAA,MAClD,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG;AAAA,QACtB,MAAM,IAAI,uBACR,uBACA,qBAAqB,MAAM,kCAAkC,MAAM,aACrE;AAAA,MACF;AAAA,MAEA,MAAM,SAAS,MAAM,wBAAuB,OAAO;AAAA,QACjD,MAAM,KAAK;AAAA,QACX,cAAc,SAAS,WAAW,SAAS;AAAA,UACzC,MAAM,WAAW,KAAK,KAAK,IAAI,aAAa,WAAW,EAAE,CAAC;AAAA,UAC1D,OAAO,WAAW,qBAAqB,QAAQ,IAAI;AAAA;AAAA,QAErD,iBAAiB,SAAS,WAAW,SAClC,MAAM,KAAK,eAAe,QAAQ,EAAE,WAAW,GAAG,CAAC,KAAM;AAAA,MAC9D,CAAC;AAAA,MAED,KAAK,KAAK,IAAI,KAAK,qBAAqB,MAAM,CAAC;AAAA,MAC/C,OAAO,qBAAqB,MAAM;AAAA,KACnC;AAAA;AAAA,OAGG,QAAO,CAAC,QAGsB;AAAA,IAClC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,MACtE,OAAO,SAAS,qBAAqB,MAAM,IAAI;AAAA,KAChD;AAAA;AAEL;;;AChEO,SAAS,eAAc,CAAC,cAAsB,WAAmC;AAAA,EACtF,OAAO,KAAK,UAAU,CAAC,cAAc,SAAS,CAAC;AAAA;AAI1C,SAAS,aAAY,CAAC,cAAsB,UAAkB,QAA8B;AAAA,EACjG,OAAO,KAAK,UAAU,CAAC,cAAc,UAAU,MAAM,CAAC;AAAA;AAIjD,SAAS,iBAAgB,CAAC,MAAuC;AAAA,EACtE,OAAO,CAAC,KAAK,cAAc,KAAK,UAAU,KAAK,QAAQ,KAAK,cAAc,KAAK,QAAQ;AAAA;AAGlF,SAAS,wBAAwB,CAAC,MAAwB,OAAiC;AAAA,EAChG,SAAS,QAAQ,EAAG,QAAQ,KAAK,QAAQ,SAAS,GAAG;AAAA,IACnD,IAAI,KAAK,SAAS,MAAM;AAAA,MAAQ,OAAO;AAAA,IACvC,IAAI,KAAK,SAAS,MAAM;AAAA,MAAQ,OAAO;AAAA,EACzC;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAAC,MAAqB,OAA8B;AAAA,EACpF,OAAO,yBAAyB,kBAAiB,IAAI,GAAG,kBAAiB,KAAK,CAAC;AAAA;;;AC/B1E,SAAS,YAAY,CAAC,WAAmB,cAA8B;AAAA,EAC5E,OAAO,KAAK,UAAU,CAAC,WAAW,YAAY,CAAC;AAAA;AAG1C,SAAS,sBAAsB,CAAC,WAA2B;AAAA,EAChE,OAAO,IAAI,KAAK,UAAU,SAAS;AAAA;AAG9B,SAAS,cAAc,CAAC,MAAc,OAAuB;AAAA,EAClE,IAAI,OAAO;AAAA,IAAO,OAAO;AAAA,EACzB,IAAI,OAAO;AAAA,IAAO,OAAO;AAAA,EACzB,OAAO;AAAA;AAGF,SAAS,mBAAmB,CACjC,WACA,cACA,UACQ;AAAA,EACR,OAAO,KAAK,UAAU,CAAC,WAAW,cAAc,QAAQ,CAAC;AAAA;AAGpD,SAAS,UAAU,CAAC,QAAgB,cAAsB,UAA0B;AAAA,EACzF,OAAO,KAAK,UAAU,CAAC,QAAQ,cAAc,QAAQ,CAAC;AAAA;AAGjD,SAAS,cAAc,CAAC,KAA4B;AAAA,EACzD,OAAO,KAAK,UAAU;AAAA,IACpB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACN,CAAC;AAAA;AAGI,SAAS,cAAc,CAAC,KAAwB;AAAA,EACrD,OAAO,oBAAoB,IAAI,cAAc,IAAI,SAAS;AAAA;AAGrD,SAAS,mBAAmB,CAAC,cAAsB,WAA2B;AAAA,EACnF,OAAO,gBAAe,cAAc,SAAS;AAAA;;;ACxCxC,SAAS,wBAAwB,CACtC,MACA,OACA,YACQ;AAAA,EACR,IAAI,SAAS,aAAa,UAAU,aAAa,SAAS,QAAQ,UAAU,MAAM;AAAA,IAChF,OAAO,OAAO;AAAA,EAChB;AAAA,EAEA,IAAI,eAAe;AAAA,IAAW,OAAO,qBAAqB,MAAM,KAAK;AAAA,EAErE,QAAQ;AAAA,SACD;AAAA,SACA;AAAA,MACH,OAAO,OAAO,SAAS,YAAY,OAAO,UAAU,WAChD,gBAAe,MAAM,KAAK,IAC1B,OAAO;AAAA,SACR;AAAA,MACH,OAAO,OAAO,SAAS,aAAa,OAAO,UAAU,YACjD,OAAO,IAAI,IAAI,OAAO,KAAK,IAC3B,OAAO;AAAA,SACR;AAAA,SACA;AAAA,MACH,OAAO,OAAO,SAAS,YAAY,OAAO,UAAU,WAAW,OAAO,QAAQ,OAAO;AAAA,SAClF;AAAA,MACH,OAAO,OAAO,SAAS,YAAY,OAAO,UAAU,WAChD,sBAAqB,MAAM,KAAK,IAChC,OAAO;AAAA,SACR;AAAA,SACA;AAAA,MACH,OAAO,sBAAsB,MAAM,KAAK;AAAA;AAAA;AAKvC,SAAS,sBAAsB,CACpC,MACA,OACA,YACS;AAAA,EACT,IAAI,eAAe,WAAW;AAAA,IAC5B,MAAM,aAAa,yBAAyB,MAAM,OAAO,UAAU;AAAA,IACnE,OAAO,CAAC,OAAO,MAAM,UAAU,KAAK,eAAe;AAAA,EACrD;AAAA,EAEA,IAAI,eAAe,UAAU,eAAe,aAAa;AAAA,IACvD,MAAM,aAAa,sBAAsB,MAAM,KAAK;AAAA,IACpD,OAAO,CAAC,OAAO,MAAM,UAAU,KAAK,eAAe;AAAA,EACrD;AAAA,EAEA,IAAI,eAAe;AAAA,IAAW,OAAO,OAAO,GAAG,MAAM,KAAK;AAAA,EAC1D,OAAO,mBAAmB,MAAM,KAAK;AAAA;AAGvC,SAAS,oBAAoB,CAAC,MAAe,OAAwB;AAAA,EACnE,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO;AAAA,EACzE,IAAI,OAAO,SAAS,YAAY,OAAO,UAAU;AAAA,IAAU,OAAO,gBAAe,MAAM,KAAK;AAAA,EAC5F,IAAI,OAAO,SAAS,aAAa,OAAO,UAAU,WAAW;AAAA,IAC3D,OAAO,OAAO,IAAI,IAAI,OAAO,KAAK;AAAA,EACpC;AAAA,EACA,IAAI,gBAAgB,QAAQ,iBAAiB;AAAA,IAAM,OAAO,sBAAsB,MAAM,KAAK;AAAA,EAC3F,OAAO,OAAO;AAAA;AAGhB,SAAS,kBAAkB,CAAC,MAAe,OAAyB;AAAA,EAClE,IAAI,gBAAgB,QAAQ,iBAAiB,MAAM;AAAA,IACjD,MAAM,aAAa,sBAAsB,MAAM,KAAK;AAAA,IACpD,OAAO,CAAC,OAAO,MAAM,UAAU,KAAK,eAAe;AAAA,EACrD;AAAA,EACA,OAAO,OAAO,GAAG,MAAM,KAAK;AAAA;AAG9B,SAAS,qBAAqB,CAAC,MAAe,OAAwB;AAAA,EACpE,MAAM,WAAW,SAAS,IAAI;AAAA,EAC9B,MAAM,YAAY,SAAS,KAAK;AAAA,EAChC,IAAI,aAAa,QAAQ,cAAc;AAAA,IAAM,OAAO,OAAO;AAAA,EAC3D,OAAO,WAAW;AAAA;AAGpB,SAAS,QAAQ,CAAC,OAA+B;AAAA,EAC/C,IAAI,iBAAiB,MAAM;AAAA,IACzB,MAAM,OAAO,MAAM,QAAQ;AAAA,IAC3B,OAAO,OAAO,MAAM,IAAI,IAAI,OAAO;AAAA,EACrC;AAAA,EACA,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAAA,IAC1D,MAAM,OAAO,IAAI,KAAK,KAAK,EAAE,QAAQ;AAAA,IACrC,OAAO,OAAO,MAAM,IAAI,IAAI,OAAO;AAAA,EACrC;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,eAAc,CAAC,MAAc,OAAuB;AAAA,EAC3D,IAAI,OAAO;AAAA,IAAO,OAAO;AAAA,EACzB,IAAI,OAAO;AAAA,IAAO,OAAO;AAAA,EACzB,OAAO;AAAA;;;ACrEF,IAAM,sCAA+D;AAAA,EAC1E,cAAc;AAAA,EACd,cAAc;AAAA,EACd,eAAe;AAAA,EACf,cAAc;AAAA,EACd,OAAO;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,QAAQ;AAAA,IACR,UAAU;AAAA,EACZ;AAAA,EACA,WAAW;AAAA,IACT,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAAA,EACA,qBAAqB;AAAA,IACnB,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,WAAW;AAAA,IACX,UAAU;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,IAChB,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,SAAS,EAAE,UAAU,KAAK;AAAA,IAC1B,SAAS,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC1C,QAAQ,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACzC,SAAS,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IAC1C,MAAM,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,IACvC,WAAW,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,EAC9C;AAAA,EACA,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,kBAAkB;AAAA,EACpB;AACF;AAeA,IAAM,oBAAoB;AAE1B,SAAS,oBAAoB,CAAC,OAAqB;AAAA,EACjD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AAAA;AAGK,SAAS,mBAAmB,CACjC,OACA,QACiB;AAAA,EACjB,QAAQ,MAAM;AAAA,SACP;AAAA,MACH,OAAO,cAAc,MAAM,cAAc,MAAM;AAAA,SAC5C;AAAA,MACH,OAAO,aAAa,MAAM,MAAM,MAAM;AAAA,SACnC,UAAU;AAAA,MACb,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,UAAU,MAAM,QAAQ,OAAO,CAAC,UAAU,iBAAiB,MAAM,KAAK,MAAM,SAAS,CAAC;AAAA,MAC5F,OAAO,mBAAmB,OAAO;AAAA,IACnC;AAAA,SACK,QAAQ;AAAA,MACX,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,gBAAgB,MAAM,QAAQ,QAAQ,CAAC,UAAU;AAAA,QACrD,MAAM,QAAQ,UAAU,MAAM,KAAK,MAAM,OAAO,MAAM,QAAQ,MAAM,kBAAkB;AAAA,QACtF,OAAO,QAAQ,IAAI,CAAC,KAAK,OAAO,OAAO,MAAM,QAAQ,MAAM,CAAC,IAAI,CAAC;AAAA,OAClE;AAAA,MACD,OAAO,mBAAmB,aAAa;AAAA,IACzC;AAAA,SACK,UAAU;AAAA,MACb,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,gBAAgB,MAAM,QAAQ,QAAQ,CAAC,UAAU;AAAA,QACrD,MAAM,QAAQ,iBAAiB,MAAM,IAAI,WAAW,MAAM,aAAa,MAAM,MAAM;AAAA,QACnF,OAAO,UAAU,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,OAAO,MAAM,QAAQ,MAAM,CAAC;AAAA,OACvE;AAAA,MACD,cAAc,KAAK,yBAAyB;AAAA,MAC5C,MAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,CAAC;AAAA,MACjC,OAAO;AAAA,QACL,SAAS,cAAc,MAAM,GAAG,KAAK;AAAA,QACrC,OAAO,cAAc;AAAA,QACrB,SAAS,QAAQ,cAAc;AAAA,MACjC;AAAA,IACF;AAAA,SACK,YAAY;AAAA,MACf,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,UACJ,MAAM,cAAc,aAChB,iBAAiB,MAAM,SAAS,MAAM,QAAQ,MAAM,IACpD,iBAAiB,MAAM,SAAS,MAAM,QAAQ,MAAM,oBAAoB,MAAM;AAAA,MACpF,OAAO,mBAAmB,OAAO;AAAA,IACnC;AAAA,SACK;AAAA,MACH,OAAO,YAAY,MAAM,IAAI,MAAM,QAAQ,MAAM;AAAA,SAC9C,QAAQ;AAAA,MACX,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,OAAO;AAAA,WACF;AAAA,QACH,SAAS,YAAY,MAAM,SAAS,MAAM,MAAM;AAAA,MAClD;AAAA,IACF;AAAA,SACK,SAAS;AAAA,MACZ,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,QAAQ,KAAK,IAAI,GAAG,MAAM,KAAK;AAAA,MACrC,OAAO;AAAA,QACL,SAAS,MAAM,QAAQ,MAAM,GAAG,KAAK;AAAA,QACrC,OAAO,MAAM,QAAQ;AAAA,QACrB,SAAS,QAAQ,MAAM,QAAQ;AAAA,MACjC;AAAA,IACF;AAAA,SACK,QAAQ;AAAA,MACX,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,MAAM,SAAS,iBAAiB,MAAM,SAAS;AAAA,MAC/C,MAAM,WAAW,KAAK,IAAI,GAAG,MAAM,QAAQ;AAAA,MAC3C,MAAM,aAAa,SAAS;AAAA,MAC5B,MAAM,UAAU,WAAW,KAAK,aAAa,MAAM,QAAQ;AAAA,MAC3D,OAAO;AAAA,QACL,SAAS,MAAM,QAAQ,MAAM,QAAQ,UAAU;AAAA,QAC/C,OAAO,MAAM,QAAQ;AAAA,QACrB;AAAA,QACA,eAAe,UAAU,iBAAiB,UAAU,IAAI;AAAA,MAC1D;AAAA,IACF;AAAA,SACK,WAAW;AAAA,MACd,MAAM,QAAQ,oBAAoB,MAAM,OAAO,MAAM;AAAA,MACrD,IAAI,CAAC,MAAM;AAAA,QAAY,OAAO;AAAA,MAC9B,MAAM,aAAa,MAAM;AAAA,MACzB,OAAO;AAAA,WACF;AAAA,QACH,SAAS,MAAM,QAAQ,IAAI,CAAC,WAAW;AAAA,aAClC;AAAA,UACH,KAAK,WAAW,MAAM,KAAK,UAAU;AAAA,QACvC,EAAE;AAAA,MACJ;AAAA,IACF;AAAA,SACK;AAAA,MAIH,MAAM,IAAI,MAAM,yEAAyE;AAAA;AAAA;AAI/F,SAAS,aAAa,CAAC,cAAsB,QAA6C;AAAA,EACxF,MAAM,OAAO,OAAO,cAAc,YAAY;AAAA,EAC9C,MAAM,UAAU,KAAK,IAAI,CAAC,KAAK,WAAW;AAAA,IACxC;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,EACT,EAAE;AAAA,EACF,OAAO,mBAAmB,OAAO;AAAA;AAGnC,SAAS,YAAY,CACnB,MACA,QACiB;AAAA,EACjB,MAAM,OAAO,IAAI;AAAA,EACjB,MAAM,UAAU,KACb,QAAQ,CAAC,QAAQ;AAAA,IAChB,MAAM,MAAM,KAAK,UAAU,CAAC,IAAI,cAAc,IAAI,SAAS,CAAC;AAAA,IAC5D,IAAI,KAAK,IAAI,GAAG;AAAA,MAAG,OAAO,CAAC;AAAA,IAC3B,KAAK,IAAI,GAAG;AAAA,IACZ,MAAM,MAAM,OAAO,UAAU,IAAI,cAAc,IAAI,SAAS;AAAA,IAC5D,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC;AAAA,GACvB,EACA,KACC,CAAC,MAAM,UACL,eAAe,KAAK,cAAc,MAAM,YAAY,KACpD,eAAe,KAAK,WAAW,MAAM,SAAS,CAClD,EACC,IAAI,CAAC,KAAK,WAAW,EAAE,KAAK,OAAO,GAAG,MAAM,EAAE;AAAA,EAEjD,OAAO,mBAAmB,OAAO;AAAA;AAGnC,SAAS,WAAW,CAClB,IACA,QACA,QACiB;AAAA,EACjB,MAAM,cAAc,OAAO,IAAI,CAAC,UAAU,oBAAoB,OAAO,MAAM,CAAC;AAAA,EAC5E,MAAM,QAAQ,YAAY;AAAA,EAC1B,IAAI,CAAC;AAAA,IAAO,OAAO,mBAAmB,CAAC,CAAC;AAAA,EAExC,IAAI,OAAO,SAAS;AAAA,IAClB,MAAM,eAAe,IAAI;AAAA,IACzB,WAAW,cAAc,aAAa;AAAA,MACpC,WAAW,SAAS,WAAW,SAAS;AAAA,QACtC,YAAY,cAAc,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,IACA,OAAO,mBAAmB,CAAC,GAAG,aAAa,OAAO,CAAC,CAAC;AAAA,EACtD;AAAA,EAEA,IAAI,OAAO,aAAa;AAAA,IACtB,MAAM,eAAe,YAClB,MAAM,CAAC,EACP,IAAI,CAAC,eAAe,IAAI,IAAI,WAAW,QAAQ,IAAI,CAAC,UAAU,eAAe,MAAM,GAAG,CAAC,CAAC,CAAC;AAAA,IAC5F,MAAM,UAAU,MAAM,QAAQ,OAAO,CAAC,UAAU;AAAA,MAC9C,MAAM,MAAM,eAAe,MAAM,GAAG;AAAA,MACpC,OAAO,aAAa,MAAM,CAAC,SAAS,KAAK,IAAI,GAAG,CAAC;AAAA,KAClD;AAAA,IACD,OAAO,mBAAmB,OAAO;AAAA,EACnC;AAAA,EAEA,MAAM,eAAe,IAAI,IACvB,YACG,MAAM,CAAC,EACP,QAAQ,CAAC,eAAe,WAAW,QAAQ,IAAI,CAAC,UAAU,eAAe,MAAM,GAAG,CAAC,CAAC,CACzF;AAAA,EACA,OAAO,mBACL,MAAM,QAAQ,OAAO,CAAC,UAAU,CAAC,aAAa,IAAI,eAAe,MAAM,GAAG,CAAC,CAAC,CAC9E;AAAA;AAGF,SAAS,gBAAgB,CACvB,SACA,QACA,QACc;AAAA,EACd,MAAM,eAAe,IAAI;AAAA,EAEzB,QAAQ,QAAQ,CAAC,OAAO,UAAU;AAAA,IAChC,MAAM,QAAQ,CAAC,GAAG,OAAO,cAAc,MAAM,IAAI,cAAc,MAAM,IAAI,SAAS,CAAC;AAAA,IAEnF,WAAW,QAAQ,OAAO;AAAA,MACxB,IAAI,KAAK,WAAW;AAAA,QAAQ;AAAA,MAC5B,MAAM,SAAS,OAAO,UAAU,KAAK,cAAc,KAAK,QAAQ;AAAA,MAChE,IAAI,CAAC;AAAA,QAAQ;AAAA,MACb,YAAY,cAAc;AAAA,QACxB,KAAK;AAAA,QACL,OAAO,MAAM;AAAA,QACb,OAAO,MAAM,QAAQ,QAAQ;AAAA,MAC/B,CAAC;AAAA,IACH;AAAA,GACD;AAAA,EAED,OAAO,CAAC,GAAG,aAAa,OAAO,CAAC;AAAA;AAGlC,SAAS,gBAAgB,CACvB,SACA,QACA,oBACA,QACc;AAAA,EACd,MAAM,uBAAuB,IAAI,IAAI,QAAQ,IAAI,CAAC,UAAU,CAAC,eAAe,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC;AAAA,EAC/F,MAAM,eAAe,IAAI;AAAA,EAEzB,MAAM,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC;AAAA,EACnC,WAAW,QAAQ,OAAO;AAAA,IACxB,IAAI,KAAK,cAAc,OAAO,aAAa,KAAK,WAAW;AAAA,MAAQ;AAAA,IACnE,IAAI,uBAAuB,aAAa,KAAK,iBAAiB;AAAA,MAAoB;AAAA,IAClF,MAAM,cAAc,qBAAqB,IACvC,oBAAoB,KAAK,cAAc,KAAK,QAAQ,CACtD;AAAA,IACA,IAAI,CAAC;AAAA,MAAa;AAAA,IAElB,MAAM,MAAM,OAAO,UAAU,KAAK,cAAc,KAAK,QAAQ;AAAA,IAC7D,IAAI,CAAC;AAAA,MAAK;AAAA,IACV,YAAY,cAAc;AAAA,MACxB;AAAA,MACA,OAAO,YAAY;AAAA,MACnB,OAAO,YAAY;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,CAAC,GAAG,aAAa,OAAO,CAAC;AAAA;AAGlC,SAAS,kBAAkB,CAAC,SAAwC;AAAA,EAClE,OAAO;AAAA,IACL;AAAA,IACA,OAAO,QAAQ;AAAA,IACf,SAAS;AAAA,EACX;AAAA;AAGF,SAAS,gBAAgB,CAAC,KAAgB,WAA0C;AAAA,EAClF,QAAQ,UAAU;AAAA,SACX;AAAA,MACH,OAAO,UAAU,MAAM,MAAM,CAAC,SAAS,iBAAiB,KAAK,IAAI,CAAC;AAAA,SAC/D;AAAA,MACH,OAAO,UAAU,MAAM,KAAK,CAAC,SAAS,iBAAiB,KAAK,IAAI,CAAC;AAAA,SAC9D;AAAA,MACH,OAAO,CAAC,iBAAiB,KAAK,UAAU,IAAI;AAAA,SACzC;AAAA,MACH,OAAO,uBACL,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ;AAAA,SACG;AAAA,MACH,OAAO,CAAC,uBACN,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ;AAAA,SACG;AAAA,MACH,OACE,yBACE,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ,IAAI;AAAA,SAEH;AAAA,MACH,OACE,yBACE,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ,KAAK;AAAA,SAEJ;AAAA,MACH,OACE,yBACE,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ,IAAI;AAAA,SAEH;AAAA,MACH,OACE,yBACE,IAAI,WAAW,UAAU,aACzB,UAAU,OACV,UAAU,UACZ,KAAK;AAAA,SAEJ;AAAA,MACH,OAAO,UAAU,OAAO,KAAK,CAAC,UAC5B,uBAAuB,IAAI,WAAW,UAAU,aAAa,OAAO,UAAU,UAAU,CAC1F;AAAA,SACG,UAAU;AAAA,MACb,MAAM,SACJ,OAAO,OAAO,IAAI,YAAY,UAAU,UAAU,KAClD,IAAI,WAAW,UAAU,gBAAgB;AAAA,MAC3C,OAAO,UAAU,QAAQ,SAAS,CAAC;AAAA,IACrC;AAAA,SACK;AAAA,MACH,OAAO,cAAc,IAAI,WAAW,UAAU,aAAa,UAAU,KAAK;AAAA;AAAA;AAIhF,SAAS,aAAa,CAAC,QAAiB,UAA4B;AAAA,EAClE,IAAI,OAAO,WAAW,YAAY,OAAO,aAAa,UAAU;AAAA,IAC9D,OAAO,OAAO,SAAS,QAAQ;AAAA,EACjC;AAAA,EAEA,IAAI,MAAM,QAAQ,MAAM,GAAG;AAAA,IACzB,OAAO,OAAO,KAAK,CAAC,SAAS,uBAAuB,MAAM,QAAQ,CAAC;AAAA,EACrE;AAAA,EAEA,IAAI,cAAc,MAAM,KAAK,OAAO,aAAa,UAAU;AAAA,IACzD,OAAO,OAAO,OAAO,QAAQ,QAAQ;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,SAAS,CAChB,KACA,OACA,QACA,oBACQ;AAAA,EACR,MAAM,QAAQ,SAAS,KAAK;AAAA,EAC5B,IAAI,MAAM,WAAW;AAAA,IAAG,OAAO;AAAA,EAE/B,MAAM,eAAe,UAAU,qBAAqB,IAAI;AAAA,EACxD,MAAM,SAAS,SACX,OAAO,QAAQ,CAAC,UAAU,kBAAkB,IAAI,WAAW,MAAM,CAAC,IAClE,eACE,aAAa,QAAQ,CAAC,UAAU,kBAAkB,IAAI,WAAW,MAAM,CAAC,IACxE,CAAC,IAAI,WAAW,GAAG,OAAO,OAAO,IAAI,UAAU,EAAE,QAAQ,iBAAiB,CAAC;AAAA,EACjF,MAAM,WAAW,OAAO,KAAK,GAAG,EAAE,YAAY;AAAA,EAC9C,IAAI,CAAC,MAAM,MAAM,CAAC,SAAS,SAAS,SAAS,IAAI,CAAC;AAAA,IAAG,OAAO;AAAA,EAE5D,MAAM,SAAS,MAAM,KAAK,EAAE,YAAY;AAAA,EACxC,MAAM,cAAc,OAAO,SAAS,KAAK,SAAS,SAAS,MAAM,IAAI,MAAM,SAAS;AAAA,EACpF,OAAO,MAAM,OAAO,CAAC,OAAO,SAAS,QAAQ,iBAAiB,UAAU,IAAI,GAAG,WAAW;AAAA;AAG5F,SAAS,QAAQ,CAAC,OAAyB;AAAA,EACzC,OAAO,MACJ,KAAK,EACL,YAAY,EACZ,MAAM,KAAK,EACX,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC;AAAA;AAGrC,SAAS,iBAAiB,CAAC,OAA0B;AAAA,EACnD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,CAAC,KAAK;AAAA,EAC5C,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,QAAQ,iBAAiB;AAAA,EAChE,OAAO,CAAC;AAAA;AAGV,SAAS,gBAAgB,CAAC,OAAe,QAAwB;AAAA,EAC/D,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,IAAI,QAAQ;AAAA,EACZ,IAAI,QAAQ,MAAM,QAAQ,MAAM;AAAA,EAChC,OAAO,UAAU,IAAI;AAAA,IACnB,SAAS;AAAA,IACT,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,OAAO,MAAM;AAAA,EACrD;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CAAC,QAAiB,UAA4C;AAAA,EACrF,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,SAAS,UAAU,OAAO,WAAW,GAAG;AAAA,IACtF,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,MAAM;AAAA,EACV,IAAI,aAAa;AAAA,EACjB,IAAI,eAAe;AAAA,EACnB,SAAS,QAAQ,EAAG,QAAQ,SAAS,QAAQ,SAAS,GAAG;AAAA,IACvD,MAAM,cAAc,OAAO;AAAA,IAC3B,MAAM,gBAAgB,SAAS;AAAA,IAC/B,IACE,OAAO,gBAAgB,YACvB,OAAO,kBAAkB,YACzB,CAAC,OAAO,SAAS,WAAW,KAC5B,CAAC,OAAO,SAAS,aAAa,GAC9B;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,OAAO,cAAc;AAAA,IACrB,cAAc,cAAc;AAAA,IAC5B,gBAAgB,gBAAgB;AAAA,EAClC;AAAA,EAEA,IAAI,eAAe,KAAK,iBAAiB;AAAA,IAAG,OAAO;AAAA,EACnD,OAAO,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,YAAY;AAAA;AAG9D,SAAS,WAAW,CAClB,SACA,QACc;AAAA,EACd,OAAO,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,UAAU;AAAA,IACxC,WAAW,SAAS,QAAQ;AAAA,MAC1B,MAAM,aAAa,iBAAiB,MAAM,OAAO,KAAK;AAAA,MACtD,IAAI,eAAe;AAAA,QAAG,OAAO;AAAA,IAC/B;AAAA,IACA,OACE,KAAK,QAAQ,MAAM,SAAS,eAAe,KAAK,GAAG,EAAE,cAAc,eAAe,MAAM,GAAG,CAAC;AAAA,GAE/F;AAAA;AAGH,SAAS,gBAAgB,CACvB,MACA,OACA,OACQ;AAAA,EACR,IAAI,MAAM,SAAS,aAAa;AAAA,IAC9B,MAAM,YAAY,MAAM,aAAa;AAAA,IACrC,MAAM,aAAa,MAAM,QAAQ,KAAK;AAAA,IACtC,OAAO,cAAc,SAAS,aAAa,CAAC;AAAA,EAC9C;AAAA,EAEA,MAAM,YAAY,KAAK,IAAI,WAAW,MAAM;AAAA,EAC5C,MAAM,aAAa,MAAM,IAAI,WAAW,MAAM;AAAA,EAC9C,MAAM,cAAc,cAAc,aAAa,cAAc;AAAA,EAC7D,MAAM,eAAe,eAAe,aAAa,eAAe;AAAA,EAChE,IAAI,eAAe;AAAA,IAAc,OAAO;AAAA,EACxC,IAAI;AAAA,IAAa,OAAO;AAAA,EACxB,IAAI;AAAA,IAAc,OAAO;AAAA,EAEzB,MAAM,aAAa,yBAAyB,WAAW,YAAY,MAAM,UAAU;AAAA,EACnF,IAAI,OAAO,MAAM,UAAU;AAAA,IAAG,OAAO;AAAA,EACrC,OAAO,MAAM,cAAc,SAAS,CAAC,aAAa;AAAA;AAGpD,SAAS,yBAAyB,CAAC,MAAkB,OAA2B;AAAA,EAC9E,OACE,MAAM,QAAQ,KAAK,SAAS,eAAe,KAAK,GAAG,EAAE,cAAc,eAAe,MAAM,GAAG,CAAC;AAAA;AAIhG,SAAS,UAAU,CAAC,KAAgB,YAA0C;AAAA,EAC5E,MAAM,YAAqC,CAAC;AAAA,EAC5C,WAAW,cAAc,YAAY;AAAA,IACnC,IAAI,OAAO,OAAO,IAAI,YAAY,UAAU,GAAG;AAAA,MAC7C,UAAU,cAAc,IAAI,WAAW;AAAA,IACzC;AAAA,EACF;AAAA,EACA,OAAO;AAAA,OACF;AAAA,IACH,YAAY;AAAA,EACd;AAAA;AAGK,SAAS,kBAAkB,CAAC,OAAiC;AAAA,EAClE,QAAQ,MAAM;AAAA,SACP;AAAA,SACA;AAAA,SACA;AAAA,SACA;AAAA,SAGA;AAAA,MACH,OAAO,mBAAmB,MAAM,KAAK;AAAA;AAAA,MAErC,OAAO;AAAA;AAAA;AAIN,SAAS,iBAAiB,CAC/B,MACA,QACqB;AAAA,EACrB,OAAO,OAAO,IAAI,CAAC,WAAW;AAAA,IAC5B,YAAY,MAAM;AAAA,IAClB,SAAS,kBAAkB,MAAM,KAAK;AAAA,EACxC,EAAE;AAAA;AAGJ,SAAS,iBAAiB,CACxB,MACA,OAC8B;AAAA,EAC9B,MAAM,UAAU,IAAI;AAAA,EAEpB,WAAW,OAAO,MAAM;AAAA,IACtB,IAAI,CAAC,OAAO,OAAO,IAAI,YAAY,MAAM,UAAU;AAAA,MAAG;AAAA,IACtD,MAAM,QAAQ,IAAI,WAAW,MAAM;AAAA,IACnC,IAAI,UAAU;AAAA,MAAW;AAAA,IACzB,MAAM,MAAM,cAAc,KAAK;AAAA,IAC/B,MAAM,WAAW,QAAQ,IAAI,GAAG;AAAA,IAChC,IAAI,UAAU;AAAA,MACZ,SAAS,SAAS;AAAA,IACpB,EAAO;AAAA,MACL,QAAQ,IAAI,KAAK,EAAE,OAAO,OAAO,EAAE,CAAC;AAAA;AAAA,EAExC;AAAA,EAEA,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC,EACxB,KACC,CAAC,MAAM,UACL,MAAM,QAAQ,KAAK,SACnB,kBAAkB,KAAK,KAAK,EAAE,cAAc,kBAAkB,MAAM,KAAK,CAAC,CAC9E,EACC,MAAM,GAAG,MAAM,KAAK;AAAA;AAGzB,SAAS,aAAa,CAAC,OAAwB;AAAA,EAC7C,OAAO,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;AAAA;AAG9C,SAAS,iBAAiB,CAAC,OAAwB;AAAA,EACjD,OAAO,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK;AAAA;AAG9C,eAAsB,cAAc,CAClC,QACA,WAGiC;AAAA,EACjC,qBAAqB,OAAO,KAAK;AAAA,EACjC,IAAI,OAAO,WAAW,WAAW,KAAK,OAAO,uBAAuB,WAAW,GAAG;AAAA,IAChF,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,MAAM;AAAA,EACrC;AAAA,EAEA,MAAM,eAAe,OAAO,wBACxB,IAAI,IAAI,OAAO,qBAAqB,IACpC;AAAA,EACJ,MAAM,UAAU,IAAI;AAAA,EACpB,WAAW,UAAU,OAAO,YAAY;AAAA,IACtC,MAAM,OAAO,MAAM,UAAU;AAAA,MAC3B,WAAW,OAAO;AAAA,MAClB,cAAc,OAAO;AAAA,MACrB,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,SACd,OAAO,WAAW,YAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjE,CAAC;AAAA,IACD,WAAW,OAAO,MAAM;AAAA,MACtB,IACE,iBACC,CAAC,aAAa,IAAI,IAAI,YAAY,KAAK,CAAC,aAAa,IAAI,IAAI,YAAY,IAC1E;AAAA,QACA;AAAA,MACF;AAAA,MACA,IAAI,OAAO,SAAS,yBAAyB,kBAAiB,GAAG,GAAG,OAAO,KAAK,KAAK,GAAG;AAAA,QACtF;AAAA,MACF;AAAA,MACA,QAAQ,IAAI,eAAe,GAAG,GAAG,GAAG;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,KAAK,kBAAkB,EAAE,MAAM,GAAG,OAAO,QAAQ,CAAC;AAAA,EACrF,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,KAAK,GAAG,SAAS,KAAK,SAAS,OAAO,MAAM;AAAA;AAY5E,SAAS,iBAAiB,CAC/B,QACA,QACA,WACoC;AAAA,EACpC,MAAM,YAAY,OAAO,aAAa;AAAA,EACtC,MAAM,cAAc;AAAA,IAClB,GAAG,IAAI,IACL,OAAO,MAAM,IAAI,CAAC,SAAS,cAAa,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM,CAAC,CACxF;AAAA,EACF;AAAA,EACA,MAAM,gBAAgB,IAAI,IAAI,WAAW;AAAA,EACzC,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,SAAS,CAAC,KAAmB,QAA6B;AAAA,IAC9D,MAAM,SAAS,QAAQ,IAAI,GAAG,KAAK,IAAI;AAAA,IACvC,OAAO,IAAI,eAAe,GAAG,GAAG,GAAG;AAAA,IACnC,QAAQ,IAAI,KAAK,MAAM;AAAA;AAAA,EAGzB,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,IACpD,WAAW,QAAQ,OAAO,OAAO;AAAA,MAC/B,MAAM,MAAM,cAAa,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM;AAAA,MACtE,WAAW,OAAO,OAAO,SAAS,IAAI,GAAG;AAAA,QACvC,IAAI,IAAI,cAAc,OAAO,aAAa,IAAI,WAAW,KAAK;AAAA,UAAQ,OAAO,KAAK,GAAG;AAAA,MACvF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,IACpD,WAAW,OAAO,OAAO,IAAI,GAAG;AAAA,MAC9B,IAAI,IAAI,cAAc,OAAO;AAAA,QAAW;AAAA,MACxC,MAAM,MAAM,cAAa,IAAI,cAAc,IAAI,UAAU,IAAI,MAAM;AAAA,MACnE,IAAI,cAAc,IAAI,GAAG;AAAA,QAAG,OAAO,KAAK,GAAG;AAAA,IAC7C;AAAA,EACF;AAAA,EAEA,OAAO,IAAI,IACT,YAAY,QAAQ,CAAC,QAAQ;AAAA,IAC3B,MAAM,SAAS,QAAQ,IAAI,GAAG;AAAA,IAC9B,IAAI,CAAC;AAAA,MAAQ,OAAO,CAAC;AAAA,IACrB,OAAO;AAAA,MACL,CAAC,KAAK,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,IAAI,CAAC,QAAS,YAAY,gBAAgB,GAAG,IAAI,GAAI,CAAC;AAAA,IACnF;AAAA,GACD,CACH;AAAA;AAGF,SAAS,WAAW,CAAC,cAAuC,OAAyB;AAAA,EACnF,MAAM,MAAM,eAAe,MAAM,GAAG;AAAA,EACpC,MAAM,WAAW,aAAa,IAAI,GAAG;AAAA,EACrC,IAAI,CAAC,UAAU;AAAA,IACb,aAAa,IAAI,KAAK,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,IAAI,MAAM,QAAQ,SAAS,OAAO;AAAA,IAChC,aAAa,IAAI,KAAK;AAAA,SACjB;AAAA,MACH,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,EACH;AAAA;AAGF,SAAS,gBAAgB,CAAC,QAAwB;AAAA,EAChD,OAAO,GAAG,oBAAoB;AAAA;AAGhC,SAAS,gBAAgB,CAAC,OAAmC;AAAA,EAC3D,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,IAAI,CAAC,MAAM,WAAW,iBAAiB,GAAG;AAAA,IACxC,MAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAAA,EAEA,MAAM,SAAS,OAAO,MAAM,MAAM,kBAAkB,MAAM,CAAC;AAAA,EAC3D,IAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,GAAG;AAAA,IAC3C,MAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,OAAkD;AAAA,EACvE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;;;ACxtBrE,SAAS,eAAe,CAAC,OAA0D;AAAA,EACxF,MAAM,mBAAmB,IAAI;AAAA,EAC7B,WAAW,aAAa,MAAM,SAAS;AAAA,IACrC,MAAM,SAAS,iBAAiB,IAAI,UAAU,MAAM,KAAK,IAAI;AAAA,IAC7D,OAAO,IAAI,UAAU,cAAc,IAAI,IAAI,UAAU,WAAW,CAAC;AAAA,IACjE,iBAAiB,IAAI,UAAU,QAAQ,MAAM;AAAA,EAC/C;AAAA,EAKA,MAAM,QAAQ,CAAC,GAAG,MAAM,KAAK,EAAE,KAC7B,CAAC,MAAM,UACL,KAAK,eAAe,MAAM,gBAC1B,KAAK,SAAS,MAAM,UACpB,KAAK,mBAAmB,cAAc,MAAM,kBAAkB,KAC9D,KAAK,OAAO,cAAc,MAAM,MAAM,KACtC,KAAK,mBAAmB,cAAc,MAAM,kBAAkB,CAClE;AAAA,EACA,OAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb;AAAA,IACA;AAAA,EACF;AAAA;AAGK,SAAS,2BAA2B,CACzC,QACA,MACA,QACsB;AAAA,EAItB,MAAM,kBAAkB,IAAI;AAAA,EAC5B,MAAM,aAAa,IAAI;AAAA,EACvB,MAAM,mBAAmB,IAAI;AAAA,EAC7B,MAAM,kBAAkB,IAAI;AAAA,EAI5B,IAAI,iBAAiB;AAAA,EACrB,MAAM,uBAAuB,MAAY;AAAA,IACvC,kBAAkB;AAAA,IAClB,IAAI,iBAAiB,OAAO,mBAAmB;AAAA,MAC7C,MAAM,IAAI,8BAA6B,kBAAkB,OAAO,iBAAiB;AAAA,IACnF;AAAA;AAAA,EAGF,MAAM,eAAe,CAAC,QAAgB,QAAyB;AAAA,IAC7D,MAAM,qBAAqB,KAAK,iBAAiB,IAAI,MAAM,GAAG,IAAI,IAAI,YAAY;AAAA,IAClF,IAAI,CAAC;AAAA,MAAoB;AAAA,IACzB,MAAM,MAAM,eAAe,GAAG;AAAA,IAC9B,MAAM,YAAY,gBAAgB,IAAI,MAAM,KAAK,IAAI;AAAA,IACrD,UAAU,IAAI,KAAK,GAAG;AAAA,IACtB,gBAAgB,IAAI,QAAQ,SAAS;AAAA,IACrC,WAAW,IAAI,KAAK,GAAG;AAAA,IACvB,UAAU,kBAAkB,KAAK,kBAAkB;AAAA;AAAA,EAGrD,WAAW,QAAQ,KAAK,OAAO;AAAA,IAC7B,MAAM,MAAM,OAAO,UAAU,KAAK,cAAc,KAAK,SAAS;AAAA,IAC9D,IAAI,KAAK;AAAA,MACP,qBAAqB;AAAA,MACrB,aAAa,KAAK,QAAQ,GAAG;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,WAAW,QAAQ,KAAK,OAAO;AAAA,IAC7B,MAAM,UAAU,gBAAgB,IAAI,KAAK,YAAY;AAAA,IACrD,IAAI,CAAC;AAAA,MAAS;AAAA,IACd,WAAW,UAAU,QAAQ,OAAO,GAAG;AAAA,MACrC,IAAI,OAAO,iBAAiB,KAAK;AAAA,QAAoB;AAAA,MACrD,WAAW,QAAQ,OAAO,cAAc,OAAO,cAAc,OAAO,SAAS,GAAG;AAAA,QAC9E,IAAI,KAAK,WAAW,KAAK,UAAU,KAAK,iBAAiB,KAAK,oBAAoB;AAAA,UAChF;AAAA,QACF;AAAA,QACA,MAAM,SAAS,OAAO,UAAU,KAAK,cAAc,KAAK,QAAQ;AAAA,QAChE,IAAI,CAAC;AAAA,UAAQ;AAAA,QACb,qBAAqB;AAAA,QACrB,aAAa,KAAK,QAAQ,MAAM;AAAA,QAEhC,MAAM,UAAU,eAAe,IAAI;AAAA,QACnC,MAAM,WAAW,gBAAgB,IAAI,OAAO;AAAA,QAC5C,IAAI,UAAU;AAAA,UACZ,WAAW,cAAc,KAAK;AAAA,YAAa,SAAS,YAAY,IAAI,UAAU;AAAA,QAChF,EAAO;AAAA,UACL,gBAAgB,IAAI,SAAS;AAAA,YAC3B,KAAK;AAAA,YACL,aAAa,IAAI,IAAI,KAAK,WAAW;AAAA,UACvC,CAAC;AAAA;AAAA,MAEL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,IAAI;AAAA,EACpB,YAAY,KAAK,gBAAgB,kBAAkB;AAAA,IACjD,MAAM,MAAM,WAAW,IAAI,GAAG;AAAA,IAC9B,IAAI;AAAA,MAAK,QAAQ,IAAI,KAAK,gBAAgB,KAAK,WAAW,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,QAAQ,IAAI;AAAA,EAClB,YAAY,KAAK,aAAa,iBAAiB;AAAA,IAG7C,IACE,CAAC,QAAQ,IAAI,oBAAoB,SAAS,IAAI,cAAc,SAAS,IAAI,QAAQ,CAAC,KAClF,CAAC,QAAQ,IAAI,oBAAoB,SAAS,IAAI,cAAc,SAAS,IAAI,QAAQ,CAAC,GAClF;AAAA,MACA;AAAA,IACF;AAAA,IACA,MAAM,IAAI,KAAK,cAAc,SAAS,KAAK,SAAS,WAAW,CAAC;AAAA,EAClE;AAAA,EAEA,OAAO,mBAAmB,OAAO,WAAW,SAAS,OAAO,gBAAgB;AAAA;AAG9E,SAAS,kBAAkB,CACzB,WACA,SACA,OACA,kBACsB;AAAA,EACtB,MAAM,gBAAgB,IAAI;AAAA,EAC1B,WAAW,QAAQ,MAAM,OAAO,GAAG;AAAA,IACjC,MAAM,MAAM,oBAAoB,KAAK,WAAW,KAAK,cAAc,KAAK,QAAQ;AAAA,IAChF,MAAM,SAAS,cAAc,IAAI,GAAG,KAAK,CAAC;AAAA,IAC1C,OAAO,KAAK,IAAI;AAAA,IAChB,cAAc,IAAI,KAAK,MAAM;AAAA,EAC/B;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,CAAC,iBACd,CAAC,GAAG,QAAQ,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,iBAAiB,YAAY;AAAA,IACzE,WAAW,CAAC,cAAc,cACxB,QAAQ,IAAI,oBAAoB,cAAc,SAAS,CAAC;AAAA,IAC1D,eAAe,CAAC,cAAc,cAC5B,cAAc,IAAI,oBAAoB,WAAW,cAAc,SAAS,CAAC,KAAK,CAAC;AAAA,IACjF,UAAU,MAAM,MAAM,OAAO;AAAA,EAC/B;AAAA;AAGF,SAAS,SAAS,CAChB,QACA,KACA,QACM;AAAA,EACN,MAAM,QAAQ,OAAO,IAAI,GAAG,KAAK,IAAI;AAAA,EACrC,WAAW,SAAS;AAAA,IAAQ,MAAM,IAAI,KAAK;AAAA,EAC3C,OAAO,IAAI,KAAK,KAAK;AAAA;AAGvB,SAAS,eAAe,CAAC,KAAgB,aAA6C;AAAA,EACpF,MAAM,QAAQ,gBAAgB,GAAG;AAAA,EACjC,OAAO,MAAM;AAAA,EACb,MAAM,aAAa,iBAAiB,MAAM,YAAY,WAAW;AAAA,EACjE,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,KAAoB,aAAiD;AAAA,EAC1F,MAAM,QAAQ,gBAAgB,GAAG;AAAA,EACjC,MAAM,aAAa,iBAAiB,MAAM,cAAc,CAAC,GAAG,WAAW;AAAA,EACvE,IAAI,OAAO,KAAK,UAAU,EAAE,WAAW,GAAG;AAAA,IACxC,OAAO,MAAM;AAAA,EACf,EAAO;AAAA,IACL,MAAM,aAAa;AAAA;AAAA,EAErB,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,YACA,aACyB;AAAA,EAGzB,OAAO,OAAO,YACZ,CAAC,GAAG,WAAW,EACZ,OAAO,CAAC,eAAe,OAAO,OAAO,YAAY,UAAU,CAAC,EAC5D,IAAI,CAAC,eAAe,CAAC,YAAY,WAAW,WAAW,CAAC,CAC7D;AAAA;;;AC7KK,SAAS,4BAA4B,CAC1C,QACA,QAIA,mBACmB;AAAA,EACnB,MAAM,YAAY,OAAO;AAAA,EACzB,MAAM,OAAO,gBAAgB,OAAO,KAAK;AAAA,EACzC,MAAM,SAAS,mCAAkC,OAAO,MAAM;AAAA,EAC9D,MAAM,gBAAgB,CAAC,oBACrB,2BAA0B,WAAW,eAAe;AAAA,EACtD,MAAM,UAAU,CAAI,UAAgB;AAAA,IAClC,mCAAkC,OAAO,MAAM;AAAA,IAC/C,OAAO;AAAA;AAAA,EAET,MAAM,aAAa,CAAe,UAAgD;AAAA,IAChF,mCAAkC,CAAC,GAAG,MAAM,QAAQ,CAAC,GAAG,MAAM;AAAA,IAC9D,OAAO;AAAA;AAAA,EAET,MAAM,0BAAwE,OAAO,UAAU;AAAA,IAC7F,cAAc,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,IACjE,OAAO,QACL,MAAM,MAAM,IAAI,CAAC,SAAS;AAAA,MACxB,MAAM,MAAM,oBAAoB,KAAK,cAAc,KAAK,SAAS;AAAA,MACjE,IAAI,CAAC,SAAS,QAAQ,IAAI,GAAG;AAAA,QAAG,OAAO;AAAA,MACvC,OAAO,SAAS,iBAAiB,IAAI,GAAG,GAAG,IAAI,KAAK,UAAU,KAAK;AAAA,KACpE,CACH;AAAA;AAAA,EAGF,OAAO,OAAO,OAAO;AAAA,IACnB;AAAA,IACA,cAAc,OAAO,UAA6B;AAAA,MAChD,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,MAAM,SAAS,oBAAoB,MAAM,OAAO,QAAQ;AAAA,MACxD,OAAO,QAAQ;AAAA,QACb,SAAS,OAAO,QAAQ,IAAI,CAAC,UAAU,gBAAgB,MAAM,GAAG,CAAC;AAAA,QACjE,SAAS,OAAO;AAAA,QAChB,eAAe,OAAO;AAAA,WAClB,MAAM,iBAAiB,QAAQ,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;AAAA,MAChE,CAAC;AAAA;AAAA,IAEH,cAAc,OAAO,UAA6B;AAAA,MAChD,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,QAAQ;AAAA,QACb,OAAO,oBAAoB,mBAAmB,MAAM,KAAK,GAAG,QAAQ,EAAE;AAAA,MACxE,CAAC;AAAA;AAAA,IAEH,eAAe,OAAO,UAA8B;AAAA,MAClD,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,QAAQ;AAAA,QACb,QAAQ,oBAAoB,mBAAmB,MAAM,KAAK,GAAG,QAAQ,EAAE,QAAQ;AAAA,MACjF,CAAC;AAAA;AAAA,IAEH,cAAc,OAAO,UAA6B;AAAA,MAChD,cAAc,MAAM,SAAS;AAAA,MAC7B,4BAA2B,MAAM,OAAO,MAAM;AAAA,MAC9C,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,MAAM,SAAS,oBAAoB,mBAAmB,MAAM,KAAK,GAAG,QAAQ;AAAA,MAC5E,OAAO,QACL,gBAAgB;AAAA,QACd,QAAQ,kBACN,OAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,GAAG,GACvC,MAAM,MACR;AAAA,MACF,CAAC,CACH;AAAA;AAAA,IAEF,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,MAAM,MAAM,SAAS,QAAQ,IAAI,oBAAoB,MAAM,cAAc,MAAM,SAAS,CAAC;AAAA,MACzF,OAAO,QAAQ,MAAM,gBAAgB,GAAG,IAAI,IAAI;AAAA;AAAA,IAElD;AAAA,IACA,WAAW,OAAO,UAAU;AAAA,MAC1B,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,QAAQ,kBAAkB,UAAU,KAAK,EAAE,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC,CAAC;AAAA;AAAA,IAEtF,qBAAqB,OAAO,UAAU;AAAA,MACpC,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,MAAM,OAAO,IAAI;AAAA,MACjB,WAAW,QAAQ,MAAM,OAAO;AAAA,QAC9B,MAAM,MAAM,SAAS,QAAQ,IAAI,oBAAoB,KAAK,cAAc,KAAK,SAAS,CAAC;AAAA,QACvF,IAAI,KAAK;AAAA,UACP,KAAK,IAAI,gBAAe,KAAK,cAAc,KAAK,SAAS,GAAG,gBAAgB,GAAG,CAAC;AAAA,QAClF;AAAA,MACF;AAAA,MACA,OAAO,WAAW,IAAI;AAAA;AAAA,IAExB,gBAAgB,OAAO,UAAU;AAAA,MAC/B,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,WACL,kBACE;AAAA,QACE,KAAK,MAAM,SAAS,MAAM,OAAO;AAAA,QACjC,UAAU,CAAC,SACT,SAAS,cAAc,IACrB,oBAAoB,WAAW,KAAK,cAAc,KAAK,QAAQ,CACjE,KAAK,CAAC;AAAA,MACV,GACA,OACA,IACF,CACF;AAAA;AAAA,IAEF,YAAY,OAAO,UAAU;AAAA,MAC3B,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,QACL,gBAAgB,MAAM,eAAe,OAAO,CAAC,SAAS,kBAAkB,UAAU,IAAI,CAAC,CAAC,CAC1F;AAAA;AAAA,IAEF,MAAM,OAAO,UAAU;AAAA,MACrB,cAAc,MAAM,SAAS;AAAA,MAC7B,MAAM,WAAW,4BAA4B,QAAQ,MAAM,MAAM;AAAA,MACjE,OAAO,QAAQ,SAAS,OAAO,CAAC,GAAG,SAAS,QAAQ,OAAO,CAAC,CAAC,CAAC;AAAA;AAAA,EAElE,CAA6B;AAAA;AAG/B,SAAS,iBAAiB,CACxB,UACA,QAOiB;AAAA,EACjB,MAAM,YAAY,OAAO,aAAa;AAAA,EACtC,MAAM,UAAU,CAAC,QAAuB,CAAC,OAAO,UAAU,IAAI,WAAW,OAAO;AAAA,EAChF,MAAM,OAAwB,CAAC;AAAA,EAE/B,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,IACpD,MAAM,WAAW,SAAS,cAAc,IACtC,oBAAoB,OAAO,WAAW,OAAO,cAAc,OAAO,QAAQ,CAC5E;AAAA,IACA,IAAI;AAAA,MAAU,KAAK,KAAK,GAAG,SAAS,OAAO,OAAO,CAAC;AAAA,EACrD;AAAA,EACA,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,IACpD,WAAW,OAAO,SAAS,MAAM,OAAO,GAAG;AAAA,MACzC,IACE,IAAI,iBAAiB,OAAO,gBAC5B,IAAI,aAAa,OAAO,YACxB,QAAQ,GAAG,GACX;AAAA,QACA,KAAK,KAAK,GAAG;AAAA,MACf;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,cAAc;AAAA,IAAQ,OAAO;AAAA,EACjC,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA;AAG5E,SAAS,QAAQ,CACf,QACA,YACoE;AAAA,EACpE,MAAM,iBACJ,OAAO,iBAAiB,YACpB,YACA,IAAI,IACF,OAAO,OAAO,iBAAiB,WAAW,CAAC,OAAO,YAAY,IAAI,OAAO,YAC3E;AAAA,EACN,IAAI,OAAO,WAAW,OACpB,CAAC,QACC,IAAI,cAAc,OAAO,cACxB,CAAC,kBAAkB,eAAe,IAAI,IAAI,YAAY,EAC3D;AAAA,EAEA,OAAO,KAAK,OACV,CAAC,SACE,CAAC,OAAO,mBAAmB,IAAI,UAAU,WAAW,OAAO,eAAe,OAC1E,CAAC,OAAO,mBAAmB,IAAI,UAAU,SAAS,OAAO,eAAe,OACxE,CAAC,OAAO,gBAAgB,IAAI,aAAa,OAAO,kBAChD,CAAC,OAAO,iBAAiB,IAAI,aAAa,OAAO,mBACjD,CAAC,OAAO,gBAAgB,IAAI,aAAa,OAAO,kBAChD,CAAC,OAAO,iBAAiB,IAAI,aAAa,OAAO,cACtD;AAAA,EAEA,MAAM,QAAQ,KAAK;AAAA,EACnB,MAAM,SAAS,OAAO,UAAU;AAAA,EAChC,MAAM,QAAQ,OAAO,SAAS;AAAA,EAC9B,IAAI,UAAU;AAAA,IAAG,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,SAAS,OAAO,MAAM;AAAA,EAEtE,MAAM,UAAU,OAAO,WAAW;AAAA,EAClC,MAAM,QAAQ,OAAO,SAAS;AAAA,EAC9B,KAAK,KAAK,CAAC,MAAM,UAAU;AAAA,IACzB,MAAM,aACJ,YAAY,cACR,KAAK,UAAU,cAAc,MAAM,SAAS,IAC5C,YAAY,cACV,KAAK,UAAU,QAAQ,IAAI,MAAM,UAAU,QAAQ,IACnD,KAAK,UAAU,QAAQ,IAAI,MAAM,UAAU,QAAQ;AAAA,IAC3D,OAAO,UAAU,SAAS,CAAC,aAAa;AAAA,GACzC;AAAA,EAED,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC;AAAA,EACpF,OAAO;AAAA,IACL;AAAA,IACA,SAAS,SAAS,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA;;;AC3KF,IAAM,uBAAuB,IAAI;AAG1B,SAAS,oCAAoC,CAClD,SACmC;AAAA,EACnC,MAAM,UAAU,qBAAqB,IAAI,OAAO;AAAA,EAChD,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,8DAA8D;AAAA,EAC5F,OAAO;AAAA;AAAA;AAGF,MAAM,sBAA+C;AAAA,EACzC,OAAO,IAAI;AAAA,EACX,QAAQ,IAAI;AAAA,EAE7B,WAAW,GAAG;AAAA,IACZ,qBAAqB,IAAI,MAAM;AAAA,MAC7B,mBAAmB,CAAC,WAAW,cAAc,cAC3C,KAAK,kBAAkB,WAAW,cAAc,SAAS;AAAA,MAC3D,iBAAiB,CAAC,WAAW,QAAQ,KAAK,gBAAgB,WAAW,GAAG;AAAA,MACxE,kBAAkB,CAAC,KAAK,cAAc,KAAK,iBAAiB,KAAK,SAAS;AAAA,MAC1E,mBAAmB,CAAC,WAAW,cAAc,cAC3C,KAAK,kBAAkB,WAAW,cAAc,SAAS;AAAA,MAC3D,gBAAgB,CAAC,KAAK,cAAc,KAAK,eAAe,KAAK,SAAS;AAAA,MACtE,iBAAiB,CAAC,QAAQ,KAAK,gBAAgB,GAAG;AAAA,MAClD,iBAAiB,CAAC,WAAW,UAAU;AAAA,QACrC,WAAW,UAAU,KAAK,MAAM,OAAO,GAAG;AAAA,UACxC,WAAW,OAAO,OAAO,OAAO,GAAG;AAAA,YACjC,IAAI,IAAI,cAAc;AAAA,cAAW,MAAM,gBAAgB,GAAG,CAAC;AAAA,UAC7D;AAAA,QACF;AAAA;AAAA,MAEF,sBAAsB,CAAC,WAAW,cAAc,UAAU,QAAQ,UAAU;AAAA,QAC1E,MAAM,SAAS,KAAK,MAAM,IAAI,oBAAoB,WAAW,cAAc,QAAQ,CAAC;AAAA,QACpF,IAAI,CAAC;AAAA,UAAQ;AAAA,QACb,WAAW,OAAO,OAAO,OAAO,GAAG;AAAA,UACjC,IAAI,IAAI,WAAW;AAAA,YAAQ,MAAM,gBAAgB,GAAG,CAAC;AAAA,QACvD;AAAA;AAAA,IAEJ,CAAC;AAAA;AAAA,EAGH,QAAQ,GAAkC;AAAA,IACxC,OAAO;AAAA,MACL,MAAM,mBAAmB,KAAK,IAAI;AAAA,MAClC,OAAO,iBAAiB,KAAK,KAAK;AAAA,IACpC;AAAA;AAAA,EAGF,OAAO,CAAC,UAA+C;AAAA,IACrD,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,mBAAmB,SAAS,IAAI,GAAG;AAAA,MAC7D,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA,IAEA,KAAK,MAAM,MAAM;AAAA,IACjB,YAAY,KAAK,WAAW,iBAAiB,SAAS,KAAK,GAAG;AAAA,MAC5D,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,IAC5B;AAAA;AAAA,EAGM,iBAAiB,CACvB,WACA,cACA,WACkB;AAAA,IAClB,MAAM,MAAM,KAAK,KAAK,IAAI,aAAa,WAAW,YAAY,CAAC,GAAG,IAAI,SAAS;AAAA,IAC/E,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,EAG9B,eAAe,CACrB,WACA,KAOsB;AAAA,IACtB,MAAM,MAAM,KAAK,MACd,IAAI,oBAAoB,WAAW,IAAI,cAAc,IAAI,QAAQ,CAAC,GACjE,IAAI,WAAW,IAAI,QAAQ,IAAI,cAAc,IAAI,QAAQ,CAAC;AAAA,IAC9D,OAAO,MAAM,gBAAgB,GAAG,IAAI;AAAA;AAAA,EAG9B,gBAAgB,CAAC,KAA8B,WAAyB;AAAA,IAC9E,MAAM,WAAW,aAAa,WAAW,IAAI,IAAI,YAAY;AAAA,IAC7D,MAAM,SAAS,KAAK,KAAK,IAAI,QAAQ,KAAK,IAAI;AAAA,IAC9C,KAAK,KAAK,IAAI,UAAU,MAAM;AAAA,IAC9B,OAAO,IAAI,IAAI,IAAI,WAAW;AAAA,MAC5B;AAAA,MACA,cAAc,IAAI,IAAI;AAAA,MACtB,WAAW,IAAI,IAAI;AAAA,MACnB,YAAY,gBAAgB,IAAI,UAAU;AAAA,MAC1C,WAAW,IAAI,KAAK,IAAI,SAAS;AAAA,MACjC,WAAW,IAAI,KAAK,IAAI,SAAS;AAAA,MACjC,SAAS,IAAI;AAAA,MACb,cAAc,IAAI;AAAA,IACpB,CAAC;AAAA;AAAA,EAGK,iBAAiB,CAAC,WAAmB,cAAsB,WAAyB;AAAA,IAC1F,KAAK,gBAAgB,WAAW,cAAc,SAAS;AAAA;AAAA,EAGjD,cAAc,CAAC,KAA4B,WAAyB;AAAA,IAC1E,MAAM,YAAY,oBAChB,WACA,IAAI,IAAI,OAAO,cACf,IAAI,IAAI,OAAO,SACjB;AAAA,IACA,MAAM,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,IAAI;AAAA,IAChD,KAAK,MAAM,IAAI,WAAW,MAAM;AAAA,IAChC,OAAO,IAAI,WAAW,IAAI,IAAI,QAAQ,IAAI,IAAI,OAAO,cAAc,IAAI,IAAI,OAAO,SAAS,GAAG;AAAA,MAC5F;AAAA,MACA,cAAc,IAAI,IAAI,OAAO;AAAA,MAC7B,UAAU,IAAI,IAAI,OAAO;AAAA,MACzB,QAAQ,IAAI,IAAI;AAAA,MAChB,cAAc,IAAI,IAAI,OAAO;AAAA,MAC7B,UAAU,IAAI,IAAI,OAAO;AAAA,MACzB,YAAY,IAAI,aACX,gBAAgB,IAAI,UAAU,IAC/B;AAAA,MACJ,WAAW,IAAI,KAAK,IAAI,SAAS;AAAA,MACjC,WAAW,IAAI,KAAK,IAAI,SAAS;AAAA,MACjC,cAAc,IAAI;AAAA,IACpB,CAAC;AAAA;AAAA,EAGK,eAAe,CAAC,KAOf;AAAA,IACP,KAAK,cACH,IAAI,WACJ,IAAI,cACJ,IAAI,UACJ,IAAI,QACJ,IAAI,cACJ,IAAI,QACN;AAAA;AAAA,EAGF,iBAAiB,GAA4B;AAAA,IAC3C,OAAO;AAAA;AAAA,EAGT,uBAAuB,CAAC,QAIF;AAAA,IACpB,OAAO,6BAA6B,KAAK,WAAW,OAAO,SAAS,GAAG,QAAQ,MAC7E,KAAK,kBAAkB,CACzB;AAAA;AAAA,EAGM,UAAU,CAAC,WAAuC;AAAA,IAExD,OAAO;AAAA,MACL;AAAA,MACA,eAAe,CAAC,iBAAiB;AAAA,QAC/B,GAAI,KAAK,KAAK,IAAI,aAAa,WAAW,YAAY,CAAC,GAAG,OAAO,KAAK,CAAC;AAAA,MACzE;AAAA,MACA,WAAW,CAAC,cAAc,cACxB,KAAK,KAAK,IAAI,aAAa,WAAW,YAAY,CAAC,GAAG,IAAI,SAAS;AAAA,MACrE,eAAe,CAAC,cAAc,cAC5B,KAAK,MAAM,IAAI,oBAAoB,WAAW,cAAc,SAAS,CAAC,GAAG,OAAO,KAAK,CAAC;AAAA,MACxF,UAAU,MAAM,YAAY,KAAK,KAAK;AAAA,IACxC;AAAA;AAAA,OAGI,aAAY,CAAC,QAAwD;AAAA,IACzE,MAAM,SAAS,oBAAoB,OAAO,OAAO,KAAK,WAAW,OAAO,SAAS,CAAC;AAAA,IAClF,OAAO;AAAA,MACL,SAAS,OAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,GAAG;AAAA,MAChD,SAAS,OAAO;AAAA,MAChB,eAAe,OAAO;AAAA,SAClB,OAAO,iBAAiB,QAAQ,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;AAAA,IACjE;AAAA;AAAA,OAGI,aAAY,CAAC,QAAwD;AAAA,IACzE,OAAO;AAAA,MACL,OAAO,oBACL,mBAAmB,OAAO,KAAK,GAC/B,KAAK,WAAW,OAAO,SAAS,CAClC,EAAE;AAAA,IACJ;AAAA;AAAA,OAGI,cAAa,CAAC,QAA0D;AAAA,IAC5E,OAAO;AAAA,MACL,QACE,oBAAoB,mBAAmB,OAAO,KAAK,GAAG,KAAK,WAAW,OAAO,SAAS,CAAC,EACpF,QAAQ;AAAA,IACf;AAAA;AAAA,OAGI,aAAY,CAAC,QAAwD;AAAA,IACzE,MAAM,SAAS,oBACb,mBAAmB,OAAO,KAAK,GAC/B,KAAK,WAAW,OAAO,SAAS,CAClC;AAAA,IACA,OAAO;AAAA,MACL,QAAQ,kBACN,OAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,GAAG,GACvC,OAAO,MACT;AAAA,IACF;AAAA;AAAA,OAUI,eAAc,CAAC,QAIS;AAAA,IAC5B,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,OAAO,YAAY,CAAC;AAAA,IAChF,IAAI,CAAC;AAAA,MAAQ,OAAO;AAAA,IACpB,OAAO,OAAO,IAAI,OAAO,SAAS,KAAK;AAAA;AAAA,OAGnC,wBAAuB,CAC3B,QAC6B;AAAA,IAC7B,OAAO,OAAO,MAAM,IAClB,CAAC,SACC,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,KAAK,YAAY,CAAC,GAAG,IAAI,KAAK,SAAS,KACpF,KACJ;AAAA;AAAA,OAGI,UAAS,CAAC,QAMsB;AAAA,IACpC,MAAM,YAAY,OAAO,aAAa;AAAA,IACtC,MAAM,UAAU,CAAC,QAAuB,CAAC,OAAO,UAAU,IAAI,WAAW,OAAO;AAAA,IAChF,MAAM,OAAwB,CAAC;AAAA,IAE/B,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,MACpD,MAAM,SAAS,KAAK,MAAM,IACxB,oBAAoB,OAAO,WAAW,OAAO,cAAc,OAAO,QAAQ,CAC5E;AAAA,MACA,IAAI;AAAA,QAAQ,KAAK,KAAK,GAAG,CAAC,GAAG,OAAO,OAAO,CAAC,EAAE,OAAO,OAAO,CAAC;AAAA,IAC/D;AAAA,IAEA,IAAI,cAAc,cAAc,cAAc,QAAQ;AAAA,MACpD,WAAW,UAAU,KAAK,MAAM,OAAO,GAAG;AAAA,QACxC,WAAW,OAAO,OAAO,OAAO,GAAG;AAAA,UACjC,IACE,IAAI,cAAc,OAAO,aACzB,IAAI,iBAAiB,OAAO,gBAC5B,IAAI,aAAa,OAAO,YACxB,QAAQ,GAAG,GACX;AAAA,YACA,KAAK,KAAK,GAAG;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IAEA,IAAI,cAAc;AAAA,MAAQ,OAAO;AAAA,IACjC,OAAO,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA;AAAA,OAGtE,oBAAmB,CAAC,QAGkB;AAAA,IAC1C,MAAM,SAAS,IAAI;AAAA,IACnB,WAAW,QAAQ,OAAO,OAAO;AAAA,MAC/B,MAAM,MAAM,MAAM,KAAK,eAAe;AAAA,QACpC,WAAW,OAAO;AAAA,QAClB,cAAc,KAAK;AAAA,QACnB,WAAW,KAAK;AAAA,MAClB,CAAC;AAAA,MACD,IAAI,KAAK;AAAA,QACP,OAAO,IAAI,gBAAe,KAAK,cAAc,KAAK,SAAS,GAAG,GAAG;AAAA,MACnE;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,eAAc,CAAC,QAI2B;AAAA,IAC9C,OAAO,kBACL;AAAA,MACE,KAAK,MAAM,YAAY,KAAK,KAAK;AAAA,MACjC,UAAU,CAAC,SACT,KAAK,MACF,IAAI,oBAAoB,OAAO,WAAW,KAAK,cAAc,KAAK,QAAQ,CAAC,GAC1E,OAAO,KAAK,CAAC;AAAA,IACrB,GACA,QACA,KACF;AAAA;AAAA,OAGI,WAAU,CAAC,QAAgE;AAAA,IAC/E,OAAO,eAAe,QAAQ,CAAC,UAAU,KAAK,UAAU,KAAK,CAAC;AAAA;AAAA,OAG1D,uBAAsB,CAAC,QAGS;AAAA,IACpC,MAAM,UAAU,IAAI;AAAA,IACpB,WAAW,QAAQ,OAAO,OAAO;AAAA,MAC/B,MAAM,OAAO,MAAM,KAAK,UAAU;AAAA,QAChC,WAAW,OAAO;AAAA,QAClB,cAAc,KAAK;AAAA,QACnB,UAAU,KAAK;AAAA,QACf,WAAW;AAAA,MACb,CAAC;AAAA,MACD,WAAW,OAAO,MAAM;AAAA,QACtB,QAAQ,IAAI,eAAe,GAAG,GAAG,GAAG;AAAA,MACtC;AAAA,IACF;AAAA,IACA,OAAO,CAAC,GAAG,QAAQ,OAAO,CAAC;AAAA;AAAA,OAGvB,oBAAmB,CAAC,QAK6C;AAAA,IACrE,8BAA8B,OAAO,KAAK;AAAA,IAC1C,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,OAAO,YAAY,CAAC;AAAA,IAChF,MAAM,OAAO,CAAC,GAAI,QAAQ,OAAO,KAAK,CAAC,CAAE,EACtC,OACC,CAAC,QAAQ,CAAC,OAAO,kBAAkB,eAAe,IAAI,WAAW,OAAO,cAAc,IAAI,CAC5F,EACC,KAAK,CAAC,MAAM,UAAU,eAAe,KAAK,WAAW,MAAM,SAAS,CAAC,EACrE,MAAM,GAAG,OAAO,QAAQ,CAAC;AAAA,IAC5B,MAAM,UAAU,KAAK,SAAS,OAAO;AAAA,IACrC,MAAM,UAAU,KAAK,MAAM,GAAG,OAAO,KAAK,EAAE,IAAI,CAAC,QAAQ,gBAAgB,GAAG,CAAC;AAAA,IAC7E,MAAM,OAAO,QAAQ,GAAG,EAAE;AAAA,IAC1B,OAAO;AAAA,MACL;AAAA,SACI,WAAW,OAAO,EAAE,eAAe,KAAK,UAAU,IAAI,CAAC;AAAA,IAC7D;AAAA;AAAA,OAGI,KAAI,CAAC,QAaqE;AAAA,IAC9E,IAAI,UAAuB,CAAC;AAAA,IAE5B,IAAI,OAAO,cAAc;AAAA,MACvB,MAAM,UAAU,MAAM,QAAQ,OAAO,YAAY,IAC7C,OAAO,eACP,CAAC,OAAO,YAAY;AAAA,MACxB,WAAW,UAAU,SAAS;AAAA,QAC5B,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,OAAO,WAAW,MAAM,CAAC;AAAA,QACnE,IAAI,QAAQ;AAAA,UACV,QAAQ,KAAK,GAAG,OAAO,OAAO,CAAC;AAAA,QACjC;AAAA,MACF;AAAA,IACF,EAAO;AAAA,MACL,YAAY,KAAK,WAAW,KAAK,MAAM;AAAA,QACrC,IAAI,IAAI,WAAW,uBAAuB,OAAO,SAAS,CAAC,GAAG;AAAA,UAC5D,QAAQ,KAAK,GAAG,OAAO,OAAO,CAAC;AAAA,QACjC;AAAA,MACF;AAAA;AAAA,IAGF;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE;AAAA,IACJ,IACE,mBACA,mBACA,gBACA,iBACA,gBACA,eACA;AAAA,MACA,UAAU,QAAQ,OAChB,CAAC,SACE,CAAC,mBAAmB,IAAI,UAAU,WAAW,eAAe,OAC5D,CAAC,mBAAmB,IAAI,UAAU,SAAS,eAAe,OAC1D,CAAC,gBAAgB,IAAI,aAAa,kBAClC,CAAC,iBAAiB,IAAI,aAAa,mBACnC,CAAC,gBAAgB,IAAI,aAAa,kBAClC,CAAC,iBAAiB,IAAI,aAAa,cACxC;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,QAAQ;AAAA,IAEtB,MAAM,SAAS,OAAO,UAAU;AAAA,IAChC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAC9B,IAAI,UAAU;AAAA,MAAG,OAAO,EAAE,SAAS,CAAC,GAAG,SAAS,SAAS,OAAO,MAAM;AAAA,IAEtE,MAAM,UAAU,OAAO,WAAW;AAAA,IAClC,MAAM,QAAQ,OAAO,SAAS;AAAA,IAE9B,QAAQ,KAAK,CAAC,GAAG,MAAM;AAAA,MACrB,IAAI,aAAa;AAAA,MACjB,QAAQ;AAAA,aACD;AAAA,UACH,aAAa,EAAE,UAAU,cAAc,EAAE,SAAS;AAAA,UAClD;AAAA,aACG;AAAA,UACH,aAAa,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ;AAAA,UACzD;AAAA;AAAA,UAEA,aAAa,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ;AAAA,UACzD;AAAA;AAAA,MAEJ,OAAO,UAAU,SAAS,CAAC,aAAa;AAAA,KACzC;AAAA,IAED,MAAM,UAAU,QAAQ,MAAM,QAAQ,SAAS,KAAK;AAAA,IACpD,MAAM,UAAU,SAAS,QAAQ;AAAA,IAEjC,OAAO,EAAE,SAAS,SAAS,MAAM;AAAA;AAAA,EAG3B,eAAe,CAAC,WAAmB,cAAsB,WAAyB;AAAA,IACxF,MAAM,SAAS,KAAK,KAAK,IAAI,aAAa,WAAW,YAAY,CAAC;AAAA,IAClE,QAAQ,OAAO,SAAS;AAAA;AAAA,EAGlB,aAAa,CACnB,WACA,cACA,UACA,QACA,cACA,UACM;AAAA,IACN,MAAM,SAAS,KAAK,MAAM,IAAI,oBAAoB,WAAW,cAAc,QAAQ,CAAC;AAAA,IACpF,QAAQ,OAAO,WAAW,QAAQ,cAAc,QAAQ,CAAC;AAAA;AAE7D;AAEA,SAAS,6BAA6B,CAAC,OAAqB;AAAA,EAC1D,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AAAA;AAGF,SAAS,kBAAkB,CACzB,MACqC;AAAA,EACrC,MAAM,QAAQ,IAAI;AAAA,EAClB,YAAY,KAAK,WAAW,MAAM;AAAA,IAChC,MAAM,IACJ,KACA,IAAI,IAAI,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,WAAW,SAAS,CAAC,WAAW,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAC5F;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,OACyC;AAAA,EACzC,MAAM,QAAQ,IAAI;AAAA,EAClB,YAAY,KAAK,WAAW,OAAO;AAAA,IACjC,MAAM,IACJ,KACA,IAAI,IAAI,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,SAAS,CAAC,QAAQ,gBAAgB,GAAG,CAAC,CAAC,CAAC,CACtF;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGT,UAAU,WAAW,CACnB,SACyB;AAAA,EACzB,WAAW,UAAU,QAAQ,OAAO;AAAA,IAAG,OAAO,OAAO,OAAO;AAAA;;ACthBvD,SAAS,2BAA2B,GAA0B;AAAA,EACnE,OAAO;AAAA,IACL,aAAa,IAAI;AAAA,IACjB,uBAAuB,IAAI;AAAA,IAC3B,kBAAkB,IAAI;AAAA,IACtB,wBAAwB,IAAI;AAAA,IAC5B,iBAAiB,IAAI;AAAA,IACrB,eAAe,IAAI;AAAA,IACnB,mBAAmB,IAAI;AAAA,IACvB,QAAQ,IAAI;AAAA,EACd;AAAA;AAGK,SAAS,gBAAgB,CAAC,WAAmB,WAA2B;AAAA,EAC7E,OAAO,KAAK,UAAU,CAAC,WAAW,SAAS,CAAC;AAAA;AAGvC,SAAS,wBAAwB,CACtC,WACA,UACA,mBACQ;AAAA,EACR,OAAO,KAAK,UAAU,CAAC,WAAW,UAAU,iBAAiB,CAAC;AAAA;AAGzD,SAAS,2BAA2B,CACzC,iBACsB;AAAA,EACtB;AAAA,IACE,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,OACX;AAAA,MACD;AAAA,EACJ,OAAO,gBAAgB,MAAM;AAAA;AAGxB,SAAS,SAAS,CAAC,WAAmB,UAA0B;AAAA,EACrE,OAAO,KAAK,UAAU,CAAC,WAAW,QAAQ,CAAC;AAAA;AAGtC,SAAS,cAAc,CAAC,WAAmB,KAAqB;AAAA,EACrE,OAAO,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA;AAGjC,SAAS,4BAA4B,CAC1C,QACqC;AAAA,EACrC,IAAI,OAAO,SAAS;AAAA,IAAU,OAAO,EAAE,MAAM,UAAU,aAAa,OAAO,MAAM;AAAA,EACjF,IAAI,OAAO,SAAS,cAAc;AAAA,IAChC,OAAO,EAAE,MAAM,cAAc,iBAAiB,OAAO,gBAAgB;AAAA,EACvE;AAAA,EACA,IAAI,OAAO,SAAS,eAAe,OAAO,OAAO,SAAS,cAAc;AAAA,IACtE,OAAO;AAAA,MACL,MAAM;AAAA,MACN,iBAAiB,OAAO,OAAO;AAAA,MAC/B,cAAc,OAAO,OAAO;AAAA,IAC9B;AAAA,EACF;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,eAAe,CAAC,WAAmB,QAA8C;AAAA,EAC/F,QAAQ,OAAO;AAAA,SACR;AAAA,MACH,OAAO,KAAK,UAAU,CAAC,WAAW,OAAO,MAAM,OAAO,WAAW,CAAC;AAAA,SAC/D;AAAA,MACH,OAAO,KAAK,UAAU,CAAC,WAAW,OAAO,MAAM,OAAO,eAAe,CAAC;AAAA,SACnE;AAAA,MACH,OAAO,KAAK,UAAU,CAAC,WAAW,OAAO,MAAM,OAAO,iBAAiB,OAAO,YAAY,CAAC;AAAA;AAAA;AAI1F,SAAS,SAAS,CAAC,WAAmB,SAAyB;AAAA,EACpE,OAAO,KAAK,UAAU,CAAC,WAAW,OAAO,CAAC;AAAA;AAGrC,SAAS,kBAAkB,CAAC,OAAqD;AAAA,EACtF,OAAO,gBAAgB,KAAK;AAAA;AAGvB,SAAS,oBAAoB,CAClC,QACA,UACM;AAAA,EACN,WAAW,OAAO,OAAO,KAAK,MAAM,GAAsC;AAAA,IACxE,MAAM,YAAY,OAAO;AAAA,IACzB,MAAM,YAAY,gBAAgB,SAAS,IAAI;AAAA,IAC/C,UAAU,MAAM;AAAA,IAChB,YAAY,UAAU,UAAU;AAAA,MAAW,UAAU,IAAI,UAAU,KAAK;AAAA,EAC1E;AAAA;AAIK,SAAS,aAAgB,CAC9B,QACA,OACA,OACA,SACM;AAAA,EACN,IAAI,QAAQ,OAAO,UAAU,CAAC,cAAc,QAAQ,OAAO,SAAS,IAAI,CAAC;AAAA,EACzE,IAAI,QAAQ;AAAA,IAAG,QAAQ,OAAO;AAAA,EAC9B,OAAO,OAAO,OAAO,GAAG,KAAK;AAAA,EAC7B,IAAI,OAAO,SAAS;AAAA,IAAO,OAAO,IAAI;AAAA;AAGjC,SAAS,cAAc,CAAC,OAAe,OAAqB;AAAA,EACjE,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC1D,MAAM,IAAI,gCAA+B,GAAG,yBAAyB;AAAA,EACvE;AAAA;AAGK,SAAS,eAAe,CAAC,OAAe,OAAuB;AAAA,EACpE,MAAM,eAAe,KAAK,MAAM,KAAK;AAAA,EACrC,IAAI,CAAC,OAAO,SAAS,YAAY,KAAK,IAAI,KAAK,YAAY,EAAE,YAAY,MAAM,OAAO;AAAA,IACpF,MAAM,IAAI,gCAA+B,GAAG,0CAA0C;AAAA,EACxF;AAAA,EACA,OAAO;AAAA;;;ACzJF,MAAM,8BAA+D;AAAA,EAEvD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,OACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,oBAAmB,CACvB,OACsC;AAAA,IACtC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,KAAK,KAAK,MAAM,sBAAsB,IAC1C,eAAe,MAAM,WAAW,MAAM,cAAc,CACtD;AAAA,MACA,IAAI,CAAC;AAAA,QAAI,OAAO;AAAA,MAChB,OAAO,gBAAgB,KAAK,MAAM,YAAY,IAAI,UAAU,MAAM,WAAW,EAAE,CAAC,KAAK,IAAI;AAAA,KAC1F;AAAA;AAAA,OAGG,QAAO,CAAC,OAAyE;AAAA,IACrF,OAAO,KAAK,iBAAiB,MAC3B,gBAAgB,KAAK,MAAM,YAAY,IAAI,UAAU,MAAM,WAAW,MAAM,EAAE,CAAC,KAAK,IAAI,CAC1F;AAAA;AAAA,OAGI,YAAW,CAAC,OAA6E;AAAA,IAC7F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,mBAAmB,KAAK;AAAA,MACxB,MAAM,KAAK,KAAK,MAAM,iBAAiB,IAAI,gBAAgB,MAAM,WAAW,MAAM,MAAM,CAAC;AAAA,MACzF,IAAI,CAAC;AAAA,QAAI,OAAO;AAAA,MAChB,OAAO,gBAAgB,KAAK,MAAM,YAAY,IAAI,UAAU,MAAM,WAAW,EAAE,CAAC,KAAK,IAAI;AAAA,KAC1F;AAAA;AAAA,OAGG,KAAI,CAAC,OAAqE;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,IAAI,MAAM,UAAU,KAAK,EAAE,WAAW,KAAK,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,GAAG;AAAA,QAC5E,MAAM,IAAI,MAAM,8DAA8D;AAAA,MAChF;AAAA,MACA,MAAM,SAAS,MAAM,UAAU;AAAA,MAC/B,MAAM,QAAQ,MAAM,SAAS,KAAK,MAAM,YAAY;AAAA,MACpD,IACE,CAAC,OAAO,cAAc,MAAM,KAC5B,SAAS,KACT,CAAC,OAAO,cAAc,KAAK,KAC3B,QAAQ,GACR;AAAA,QACA,MAAM,IAAI,MACR,4EACF;AAAA,MACF;AAAA,MACA,MAAM,YAAY,MAAM,UAAU,SAAS,KAAK;AAAA,MAChD,MAAM,UAAU,CAAC,GAAG,KAAK,MAAM,YAAY,OAAO,CAAC,EAChD,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,MAAM,iBAAiB,QAAQ,MAAM,GAAG,IAAI,IAAK,EAC3E,KAAK,CAAC,MAAM,UAAU;AAAA,QACrB,IAAI,MAAM,KAAK,SAAS,cAAc;AAAA,UACpC,MAAM,YAAY,qBAAqB,IAAI,IAAI,qBAAqB,KAAK;AAAA,UACzE,IAAI,cAAc;AAAA,YAAG,OAAO,YAAY;AAAA,QAC1C;AAAA,QACA,MAAM,SAAS,KAAK,YAAY,cAAc,MAAM,WAAW;AAAA,QAC/D,IAAI,WAAW;AAAA,UAAG,OAAO,SAAS;AAAA,QAClC,OAAO,KAAK,GAAG,cAAc,MAAM,EAAE,IAAI;AAAA,OAC1C;AAAA,MACH,MAAM,QAAQ,QAAQ;AAAA,MACtB,MAAM,OAAO,QAAQ,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,CAAC,WAAW,gBAAgB,MAAM,CAAC;AAAA,MAC1F,OAAO,EAAE,SAAS,MAAM,OAAO,SAAS,SAAS,KAAK,SAAS,MAAM;AAAA,KACtE;AAAA;AAEL;AAEA,SAAS,kBAAkB,CAAC,OAA6C;AAAA,EACvE,IAAI,MAAM,UAAU,KAAK,EAAE,WAAW,GAAG;AAAA,IACvC,MAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAAA,EACA,MAAM,QACJ,MAAM,OAAO,SAAS,WAAW,MAAM,OAAO,cAAc,MAAM,OAAO;AAAA,EAC3E,IAAI,MAAM,KAAK,EAAE,WAAW,GAAG;AAAA,IAC7B,MAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AAAA,EACA,IACE,MAAM,OAAO,SAAS,gBACrB,CAAC,OAAO,cAAc,MAAM,OAAO,YAAY,KAAK,MAAM,OAAO,eAAe,IACjF;AAAA,IACA,MAAM,IAAI,MAAM,qEAAqE;AAAA,EACvF;AAAA;AAGF,SAAS,gBAAgB,CAAC,QAA8B,KAAyC;AAAA,EAC/F,IAAI,IAAI,SAAS,UAAU;AAAA,IACzB,OAAO,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO,UAAU,IAAI;AAAA,EACxE;AAAA,EACA,IAAI,OAAO,OAAO,SAAS;AAAA,IAAc,OAAO,OAAO,OAAO,oBAAoB,IAAI;AAAA,EACtF,OACE,OAAO,OAAO,SAAS,eACvB,OAAO,OAAO,OAAO,SAAS,gBAC9B,OAAO,OAAO,OAAO,oBAAoB,IAAI;AAAA;AAIjD,SAAS,oBAAoB,CAAC,QAAsC;AAAA,EAClE,IAAI,OAAO,OAAO,SAAS,eAAe,OAAO,OAAO,OAAO,SAAS,cAAc;AAAA,IACpF,OAAO,OAAO,OAAO,OAAO;AAAA,EAC9B;AAAA,EACA,OAAO;AAAA;;;ACpHT,SAAS,QAAQ,CACf,WACA,cACA,UACA,YACQ;AAAA,EACR,OAAO,KAAK,UAAU,CAAC,WAAW,cAAc,UAAU,UAAU,CAAC;AAAA;AAAA;AAGhE,MAAM,0BAAuD;AAAA,EAIjD,cAAc,IAAI;AAAA,EAEnC,WAAW,GAAG;AAAA,IACZ,sBAAqB,IAAI,MAAM;AAAA,MAC7B,eAAe,CAAC,WAAW,QAAQ,OAAO,KAAK,cAAc,WAAW,QAAQ,EAAE;AAAA,MAClF,qBAAqB,CAAC,WAAW,cAAc,aAC7C,KAAK,oBAAoB,WAAW,cAAc,QAAQ;AAAA,MAC5D,iBAAiB,CAAC,WAAW,UAAU,KAAK,gBAAgB,WAAW,KAAK;AAAA,IAC9E,CAAC;AAAA;AAAA,EAGH,QAAQ,GAAsC;AAAA,IAC5C,OAAO;AAAA,MACL,aAAa,gBAAgB,KAAK,WAAW;AAAA,IAC/C;AAAA;AAAA,EAGF,OAAO,CAAC,UAAmD;AAAA,IACzD,KAAK,YAAY,MAAM;AAAA,IACvB,YAAY,KAAK,WAAW,gBAAgB,SAAS,WAAW,GAAG;AAAA,MACjE,KAAK,YAAY,IAAI,KAAK,MAAM;AAAA,IAClC;AAAA;AAAA,EAGM,aAAa,CACnB,WACA,QACA,IACwB;AAAA,IACxB,MAAM,QACJ,KAAK,YACF,IACC,SACE,WACA,OAAO,OAAO,cACd,OAAO,OAAO,WACd,OAAO,UACT,CACF,GACE,IAAI,IAAI,KAAK,EAAE,EAAE,QAAQ,CAAC,KAAK;AAAA,IACrC,OAAO,QAAQ,WAAW,KAAK,IAAI;AAAA;AAAA,EAG7B,mBAAmB,CACzB,WACA,cACA,UACmB;AAAA,IACnB,MAAM,SAA4B,CAAC;AAAA,IACnC,WAAW,UAAU,KAAK,YAAY,OAAO,GAAG;AAAA,MAC9C,IAAI,QAAgC;AAAA,MACpC,WAAW,aAAa,OAAO,OAAO,GAAG;AAAA,QACvC,IACE,UAAU,cAAc,aACxB,UAAU,iBAAiB,gBAC3B,UAAU,aAAa,UACvB;AAAA,UACA;AAAA,QACF;AAAA,QACA,IAAI,CAAC,SAAS,UAAU,KAAK,MAAM;AAAA,UAAI,QAAQ;AAAA,MACjD;AAAA,MACA,IAAI;AAAA,QAAO,OAAO,KAAK,WAAW,KAAK,CAAC;AAAA,IAC1C;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,eAAe,CAAC,WAAmB,OAAmC;AAAA,IAC5E,MAAM,MAAM,SACV,WACA,MAAM,OAAO,OAAO,cACpB,MAAM,OAAO,OAAO,WACpB,MAAM,OAAO,UACf;AAAA,IACA,MAAM,SAAS,KAAK,YAAY,IAAI,GAAG,KAAK,IAAI;AAAA,IAChD,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,EAAE,QAAQ,GAAG;AAAA,MACvC;AAAA,MACA,cAAc,MAAM,OAAO,OAAO;AAAA,MAClC,UAAU,MAAM,OAAO,OAAO;AAAA,MAC9B,YAAY,MAAM,OAAO;AAAA,MACzB,OAAO,gBAAgB,MAAM,KAAK;AAAA,SAC9B,MAAM,SAAS,YAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,MACvD,IAAI,IAAI,KAAK,MAAM,EAAE;AAAA,MACrB,cAAc,MAAM;AAAA,IACtB,CAAC;AAAA,IACD,KAAK,YAAY,IAAI,KAAK,MAAM;AAAA;AAAA,OAG5B,WAAU,CAAC,QASuB;AAAA,IACtC,MAAM,MAAM,SAAS,OAAO,WAAW,OAAO,cAAc,OAAO,UAAU,OAAO,UAAU;AAAA,IAC9F,QAAQ,MAAM,OAAO;AAAA,IACrB,IAAI,SAAS,CAAC,GAAI,KAAK,YAAY,IAAI,GAAG,GAAG,OAAO,KAAK,CAAC,CAAE;AAAA,IAC5D,IAAI,QAAQ,IAAI;AAAA,MACd,SAAS,OAAO,OAAO,CAAC,WAAW,CAAC,QAAQ,MAAM,MAAM,UAAU,CAAC,MAAM,MAAM,MAAM,GAAG;AAAA,IAC1F;AAAA,IAEA,OAAO,KAAK,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,IAAI,EAAE,GAAG,QAAQ,CAAC;AAAA,IACrD,IAAI,OAAO,UAAU,QAAQ;AAAA,MAC3B,OAAO,QAAQ;AAAA,IACjB;AAAA,IAEA,IAAI,OAAO,UAAU,WAAW;AAAA,MAC9B,SAAS,OAAO,MAAM,GAAG,KAAK,IAAI,GAAG,OAAO,KAAK,CAAC;AAAA,IACpD;AAAA,IAEA,OAAO,OAAO,IAAI,UAAU;AAAA;AAAA,OAGxB,gBAAe,CAAC,OAOpB;AAAA,IAGA,OAAO,QAAQ,IACb,MAAM,OAAO,IAAI,OAAO,YAAY;AAAA,SAC/B;AAAA,MACH,QAAQ,MAAM,KAAK,WAAW;AAAA,QAC5B,WAAW,MAAM;AAAA,QACjB,cAAc,OAAO;AAAA,QACrB,UAAU,OAAO;AAAA,QACjB,YAAY,OAAO;AAAA,QACnB,MAAM,MAAM;AAAA,QACZ,IAAI,MAAM;AAAA,QACV,OAAO,MAAM;AAAA,QACb,OAAO,MAAM;AAAA,MACf,CAAC;AAAA,IACH,EAAE,CACJ;AAAA;AAAA,OAGI,UAAS,CAAC,QAKoB;AAAA,IAClC,MAAM,SAAS,KAAK,YAAY,IAC9B,SAAS,OAAO,WAAW,OAAO,cAAc,OAAO,UAAU,OAAO,UAAU,CACpF;AAAA,IACA,IAAI,CAAC,UAAU,OAAO,SAAS,GAAG;AAAA,MAChC,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,SAAiC;AAAA,IACrC,WAAW,SAAS,OAAO,OAAO,GAAG;AAAA,MACnC,IAAI,CAAC,UAAU,MAAM,GAAG,QAAQ,IAAI,OAAO,GAAG,QAAQ,GAAG;AAAA,QACvD,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,OAAO,SAAS,WAAW,MAAM,IAAI;AAAA;AAEzC;AAQA,IAAM,wBAAuB,IAAI;AAM1B,SAAS,wCAAwC,CACtD,SACuC;AAAA,EACvC,MAAM,UAAU,sBAAqB,IAAI,OAAO;AAAA,EAChD,IAAI,CAAC;AAAA,IAAS,MAAM,IAAI,MAAM,kEAAkE;AAAA,EAChG,OAAO;AAAA;AAGT,SAAS,UAAU,CAAC,OAAyC;AAAA,EAC3D,OAAO;AAAA,OACF,gBAAgB,KAAK;AAAA,IACxB,OAAO,gBAAgB,MAAM,KAAK;AAAA,IAClC,IAAI,IAAI,KAAK,MAAM,EAAE;AAAA,EACvB;AAAA;;;AClLK,SAAS,oBAAoB,CAClC,OAC6B;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,QAAQ,WAAW,MAAM,WAAW;AAAA,EACpC,OAAO;AAAA;AAGF,SAAS,kBAAkB,CAChC,OAC2B;AAAA,EAC3B,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,QAAQ,WAAW,MAAM,WAAW;AAAA,EACpC,OAAO;AAAA;AAGF,SAAS,sBAAsB,CACpC,OAC+B;AAAA,EAC/B,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EACnB,QAAQ,WAAW,MAAM,WAAW;AAAA,EACpC,OAAO;AAAA;AAGF,SAAS,QAAW,CAAC,QAAsB,OAAkC;AAAA,EAClF,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,GAAG,gBAAgB,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;AAAA;AAGrF,SAAS,cAAc,CAAC,KAAyC;AAAA,EACtE,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,IAAI,8BACR,mBACA,oBAAoB,IAAI,gBAAgB,IAAI,0CAC9C;AAAA,EACF,OAAO;AAAA,IACL,KAAK,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,UAAU;AAAA,IAChE,YAAY,gBAAgB,IAAI,UAAU;AAAA,IAC1C,SAAS,IAAI;AAAA,IACb,WAAW,IAAI,UAAU,YAAY;AAAA,IACrC,WAAW,IAAI,UAAU,YAAY;AAAA,IACrC,cAAc,IAAI;AAAA,EACpB;AAAA;AAGK,SAAS,YAAY,CAAC,KAA2C;AAAA,EACtE,IAAI,CAAC,IAAI;AAAA,IACP,MAAM,IAAI,8BACR,mBACA,+CACF;AAAA,EACF,OAAO;AAAA,IACL,KAAK,QAAQ,GAAG;AAAA,OACZ,IAAI,aACJ,EAAE,YAAY,gBAAgB,IAAI,UAAU,EAAyC,IACrF,CAAC;AAAA,IACL,WAAW,IAAI,UAAU,YAAY;AAAA,IACrC,WAAW,IAAI,UAAU,YAAY;AAAA,IACrC,cAAc,IAAI;AAAA,EACpB;AAAA;AAGK,SAAS,OAAO,CAAC,KAAqC;AAAA,EAC3D,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,SAAS;AAAA,IAClE,QAAQ,IAAI;AAAA,IACZ,QAAQ,EAAE,cAAc,IAAI,cAAc,WAAW,IAAI,SAAS;AAAA,EACpE;AAAA;AAGK,SAAS,WAAW,CAAC,OAA8C;AAAA,EACxE,IAAI,CAAC,MAAM;AAAA,IACT,MAAM,IAAI,8BACR,oBACA,gDACF;AAAA,EACF,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,QAAQ,EAAE,cAAc,MAAM,cAAc,WAAW,MAAM,SAAS;AAAA,MACtE,YAAY,MAAM;AAAA,IACpB;AAAA,IACA,OAAO,gBAAgB,MAAM,KAAK;AAAA,OAC9B,MAAM,SAAS,YAAY,EAAE,MAAM,MAAM,KAAK,IAAI,CAAC;AAAA,IACvD,IAAI,MAAM,GAAG,YAAY;AAAA,IACzB,cAAc,MAAM;AAAA,EACtB;AAAA;AAGK,SAAS,+BAA+B,CAC7C,OACA,WACA,UAC2C;AAAA,EAC3C,IAAI;AAAA,EACJ,WAAW,mBAAmB,MAAM,uBAAuB,OAAO,GAAG;AAAA,IACnE,IACE,gBAAgB,cAAc,aAC9B,gBAAgB,OAAO,iBAAiB,YACxC,gBAAgB,WAAW,UAC3B;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI,QAAQ;AAAA,MACV,MAAM,IAAI,8BACR,0BACA,WAAW,qDACb;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EACA,OAAO;AAAA;AAGF,SAAS,YAAY,CAC1B,UACA,mBACA,KACuB;AAAA,EACvB,OAAO;AAAA,IACL,QAAQ,EAAE,cAAc,SAAS;AAAA,IACjC;AAAA,IACA,MAAM,gBAAgB,IAAI,IAAI;AAAA,IAC9B,WAAW,gBAAgB,IAAI,SAAS;AAAA,IACxC,gBAAgB,IAAI;AAAA,EACtB;AAAA;AAGK,SAAS,kBAAkB,CAChC,UACA,mBACA,KACoC;AAAA,EACpC,IAAI,CAAC,qBAAqB,CAAC,OAAO,IAAI,UAAU,SAAS;AAAA,IAAU,OAAO;AAAA,EAC1E,OAAO,aAAa,UAAU,mBAAmB,GAAG;AAAA;AAG/C,SAAS,gBAAgB,CAC9B,UACA,mBACA,KACkC;AAAA,EAClC,IAAI,CAAC,qBAAqB,CAAC,OAAO,IAAI,UAAU,SAAS;AAAA,IAAQ,OAAO;AAAA,EACxE,OAAO,aAAa,UAAU,mBAAmB,GAAG;AAAA;AAG/C,SAAS,kBAAkB,CAChC,aACA,KACA,cACM;AAAA,EACN,MAAM,MAAM,YAAW,GAAG;AAAA,EAC1B,MAAM,WAAW,YAAY,MAAM,IAAI,GAAG;AAAA,EAC1C,IAAI,UAAU;AAAA,IACZ,SAAS,iBAAiB;AAAA,IAC1B,IAAI;AAAA,MAAc,YAAY,eAAe,IAAI,kBAAiB,IAAI,QAAQ,IAAI,MAAM,CAAC;AAAA,IACzF;AAAA,EACF;AAAA,EACA,YAAY,MAAM,IAAI,KAAK;AAAA,IACzB,KAAK,gBAAgB,GAAG;AAAA,IACxB,SAAS,gBAAe,GAAG;AAAA,IAC3B;AAAA,EACF,CAAC;AAAA,EACD,IAAI;AAAA,IAAc,YAAY,eAAe,IAAI,kBAAiB,IAAI,QAAQ,IAAI,MAAM,CAAC;AAAA;;;AClLpF,SAAS,mBAAmB,CAAC,SAAuB,OAAuC;AAAA,EAChG,MAAM,YAAY,0BAAyB,KAAK;AAAA,EAChD,MAAM,cAAc,QAAQ,YAAY;AAAA,EACxC,MAAM,eAAe,QAAQ,iBAAiB;AAAA,EAC9C,IACE,UAAU,SAAS,MAClB,CAAC,YAAY,WAAW,eAAe,UAAU,SAAS,YAAY,eACvE;AAAA,IACA,oBAAmB,wEAAwE;AAAA,EAC7F;AAAA,EACA,SAAS,SAAS,EAAG,SAAS,UAAU,QAAQ,UAAU,GAAG;AAAA,IAC3D,MAAM,WAAW,QAAQ,UAAU,eAAe,SAAS;AAAA,IAC3D,IAAI,CAAC,YAAY,qBAAoB,UAAU,OAAO,MAAM,qBAAoB,QAAQ,GAAG;AAAA,MACzF,oBAAmB,qEAAqE;AAAA,IAC1F;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,QAAQ,YAAY;AAAA,EACxC,MAAM,qBAAqB,QAAQ,gBAAgB;AAAA,EACnD,IACE,MAAM,OAAO,SAAS,MACrB,CAAC,YAAY,WAAW,qBAAqB,MAAM,OAAO,SAAS,YAAY,eAChF;AAAA,IACA,oBAAmB,oEAAoE;AAAA,EACzF;AAAA,EACA,SAAS,SAAS,EAAG,SAAS,MAAM,OAAO,QAAQ,UAAU,GAAG;AAAA,IAC9D,MAAM,WAAW,QAAQ,UAAU,qBAAqB;AAAA,IACxD,MAAM,SAAS,MAAM,OAAO,SAAS;AAAA,IACrC,IAAI,CAAC,YAAY,CAAC,QAAQ;AAAA,MACxB,oBAAmB,iEAAiE;AAAA,IACtF;AAAA,IACA,QAAQ,IAAI,KAAK,kBAAkB,gBAAgB;AAAA,IACnD,IACE,kBAAkB,qBAAqB,UACvC,qBAAoB,WAAW,MAAM,qBAAoB,SAAS,KAAK,GACvE;AAAA,MACA,oBAAmB,iEAAiE;AAAA,IACtF;AAAA,EACF;AAAA;AAGK,SAAS,gBAAgB,CAC9B,OACA,UACA,OACM;AAAA,EACN,KAAK,OAAO,gBAAgB,UAAU,UAAU;AAAA,IAC9C,MAAM,IAAI,8BAA6B,mBAAmB,YAAY,gBAAgB;AAAA,EACxF;AAAA;;;ACxCK,SAAS,8BAA8B,CAC5C,SACA,cACA,OACA,SACM;AAAA,EACN,QAAQ,WAAW,QAAQ;AAAA,EAC3B,QAAQ,QAAQ,sBAAsB;AAAA,EACtC,IACE,OAAO,aAAa,OAAO,MAC3B,OAAO,SAAS,OAAO,OAAO,QAC9B,OAAO,gBAAgB,OAAO,eAC9B,OAAO,YAAY,QACnB,CAAC,OAAO,cAAc,OAAO,UAAU,KACvC,OAAO,aAAa,KACpB,OAAO,eAAe,QAAQ,gBAAgB,MAC9C;AAAA,IACA,oBAAmB,mEAAmE;AAAA,EACxF;AAAA,EACA,SAAS,UAAU,EAAG,UAAU,OAAO,YAAY,WAAW,GAAG;AAAA,IAC/D,IAAI,CAAC,QAAQ,gBAAgB,IAAI,OAAO,GAAG;AAAA,MACzC,oBAAmB,qDAAqD;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,OAAO,SAAS,QAAQ;AAAA,IACjC,IAAI,OAAO,SAAS,UAAU,OAAO,SAAS,WAAW,OAAO,OAAO,gBAAgB;AAAA,MACrF,oBAAmB,0DAA0D;AAAA,IAC/E;AAAA,IACA,IAAI,kBAAkB,WAAW,GAAG;AAAA,MAClC,oBAAmB,gEAAgE;AAAA,IACrF;AAAA,EACF,EAAO,SAAI,OAAO,OAAO,SAAS,cAAc;AAAA,IAC9C,IAAI,OAAO,SAAS,gBAAgB,kBAAkB,WAAW,GAAG;AAAA,MAClE,oBAAmB,sEAAsE;AAAA,IAC3F;AAAA,EACF,EAAO,SAAI,OAAO,SAAS,eAAe,kBAAkB,WAAW,GAAG;AAAA,IACxE,oBAAmB,4DAA4D;AAAA,EACjF;AAAA,EAEA,WAAW,cAAc,mBAAmB;AAAA,IAC1C,kCAAkC,YAAY,SAAS,KAAK;AAAA,EAC9D;AAAA,EACA,IAAI,kBAAkB,IAAI;AAAA,IACxB,+BAA+B,SAAS,kBAAkB,EAAE;AAAA,EAC9D;AAAA,EACA,oBAAoB,SAAS,OAAO,OAAO;AAAA,EAC3C,IAAI,OAAO,OAAO,SAAS,cAAc;AAAA,IACvC,IAAI,OAAO,SAAS,gBAAgB,CAAC,0BAA0B,SAAS,OAAO,MAAM,GAAG;AAAA,MACtF,oBAAmB,gEAAgE;AAAA,IACrF;AAAA,EACF,EAAO,SACL,OAAO,OAAO,SAAS,gBACtB,OAAO,SAAS,eACf,CAAC,yBAAyB,SAAS,OAAO,OAAO,YAAY,MAAM,IACrE;AAAA,IACA,oBAAmB,+DAA+D;AAAA,EACpF;AAAA;AAGF,SAAS,yBAAyB,CAAC,SAAuB,QAAwC;AAAA,EAChG,MAAM,WAAW,+BAA+B,OAAO;AAAA,EACvD,IAAI,aAAa;AAAA,IAAM,OAAO;AAAA,EAE9B,OAAO,2BAA2B,QAAQ,QAAQ;AAAA;AAiBpD,IAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,SAAS,8BAA8B,CAAC,SAAqD;AAAA,EAC3F,MAAM,aAAa,kCAAkC,OAAO;AAAA,EAC5D,MAAM,UAAU,8BAA8B,OAAO;AAAA,EACrD,MAAM,mBAAmB,yBACvB,WAAW,SACX,QAAQ,gBACR,QAAQ,gBACR,QAAQ,cACV;AAAA,EACA,MAAM,iBAAiB,yBACrB,WAAW,OACX,QAAQ,cACR,QAAQ,cACR,QAAQ,YACV;AAAA,EAEA,IAAI,mBAAmB,KAAK,iBAAiB;AAAA,IAAG,OAAO;AAAA,EAEvD,OAAO,KAAK,SAAS,kBAAkB,eAAe;AAAA;AAGxD,SAAS,iCAAiC,CAAC,SAAmD;AAAA,EAC5F,MAAM,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;AAAA,EAEtC,WAAW,UAAU,QAAQ,KAAK,OAAO,GAAG;AAAA,IAC1C,IAAI,OAAO,SAAS;AAAA,MAAkB;AAAA,IAEtC,IAAI,OAAO,eAAe;AAAA,MAAU,OAAO,WAAW;AAAA,IACtD,IAAI,OAAO,eAAe;AAAA,MAAQ,OAAO,SAAS;AAAA,EACpD;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,6BAA6B,CAAC,SAAsD;AAAA,EAC3F,MAAM,SAAwC;AAAA,IAC5C,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;AAAA,EAEA,WAAW,QAAQ,QAAQ,WAAW;AAAA,IACpC,QAAQ,SAAS;AAAA,IAEjB,QAAQ,KAAK;AAAA,WACN;AAAA,QACH,IAAI,KAAK,MAAM,SAAS;AAAA,UAAQ,OAAO,kBAAkB;AAAA,QACpD;AAAA,iBAAO,kBAAkB;AAAA,QAC9B;AAAA,WACG;AAAA,QACH,OAAO,kBAAkB;AAAA,QACzB;AAAA,WACG;AAAA,QACH,IAAI,KAAK,MAAM,SAAS;AAAA,UAAQ,OAAO,gBAAgB;AAAA,QAClD;AAAA,iBAAO,gBAAgB;AAAA,QAC5B;AAAA,WACG;AAAA,QACH,OAAO,gBAAgB;AAAA,QACvB;AAAA;AAAA,EAEN;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAC/B,YACA,SACA,SACA,SACQ;AAAA,EACR,OAAO,aAAa,UAAU,UAAU;AAAA;AAG1C,SAAS,0BAA0B,CACjC,QACA,UACS;AAAA,EACT,OAAO,yBAAyB,MAAM,CAAC,QAAQ;AAAA,IAC7C,MAAM,QAAQ,OAAO;AAAA,IACrB,OAAO,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,UAAU,SAAS;AAAA,GACxE;AAAA;AAGH,SAAS,wBAAwB,CAC/B,SACA,YACA,QACS;AAAA,EACT,IAAI,gBAAgB;AAAA,EACpB,IAAI,gBAAgB;AAAA,EACpB,IAAI,uBAAuB;AAAA,EAC3B,WAAW,QAAQ,QAAQ,WAAW;AAAA,IACpC,IAAI,KAAK,KAAK,SAAS,gBAAgB;AAAA,MACrC,IAAI,KAAK,KAAK,MAAM,SAAS,iBAAiB;AAAA,QAAM,iBAAiB;AAAA,MAChE;AAAA,yBAAiB;AAAA,IACxB,EAAO,SAAI,KAAK,KAAK,SAAS,iBAAiB;AAAA,MAC7C,wBAAwB;AAAA,IAC1B;AAAA,EACF;AAAA,EACA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA,iBAAiB,aAAa,gBAAgB;AAAA,IAC9C;AAAA,EACF;AAAA,EACA,OACE,SAAS,mBAAmB,KAC3B,OAAO,KAAK,QAAQ,EAAgC,MACnD,CAAC,QACC,OAAO,cAAc,OAAO,IAAI,KAAK,OAAO,QAAQ,KAAK,OAAO,SAAS,SAAS,IACtF;AAAA;AAIJ,SAAS,iCAAiC,CACxC,YACA,SACA,OACM;AAAA,EACN,QAAQ,WAAW;AAAA,EACnB,QAAQ,WAAW;AAAA,EACnB,IACE,OAAO,OAAO,SAAS,gBACvB,OAAO,OAAO,SAAS,gBACvB,WAAW,OAAO,iBAAiB,OAAO,OAAO,OAAO,gBACxD,WAAW,OAAO,iBAAiB,OAAO,OAAO,gBACjD,WAAW,UAAU,oBAAoB,OAAO,OAAO,mBACvD,WAAW,aAAa,iBACxB,qBAAoB,WAAW,cAAc,MAC3C,qBAAoB,OAAO,OAAO,cAAc,KAClD,WAAW,uBAAuB,OAAO,sBACzC,WAAW,kBAAkB,OAAO,iBACpC,WAAW,qBAAqB,OAAO,oBACvC,WAAW,iBAAiB,OAAO,MACnC,WAAW,cAAc,OAAO,eAChC,CAAC,OAAO,SAAS,QAAQ,KACvB,CAAC,aAAa,qBAAoB,QAAQ,MAAM,qBAAoB,WAAW,QAAQ,CACzF,GACA;AAAA,IACA,oBAAmB,kEAAkE;AAAA,EACvF;AAAA,EACA,MAAM,YAAY,MAAM,uBAAuB,IAC7C,yBACE,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,iBACb,CACF;AAAA,EACA,IAAI,CAAC,aAAa,UAAU,WAAW,SAAS;AAAA,IAC9C,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,EACF;AAAA,EACA,IACE,UAAU,oBAAoB,WAAW,UAAU,mBACnD,UAAU,mBAAmB,WAAW,UAAU,kBAClD,UAAU,mBAAmB,WAAW,kBACxC,UAAU,aAAa,WAAW,YAClC,qBAAoB,UAAU,cAAc,MAC1C,qBAAoB,WAAW,cAAc,KAC/C,UAAU,uBAAuB,WAAW,sBAC5C,UAAU,kBAAkB,WAAW,iBACvC,UAAU,qBAAqB,WAAW,kBAC1C;AAAA,IACA,oBAAmB,gEAAgE;AAAA,EACrF;AAAA,EACA,IAAI,UAAU,YAAY,MAAM;AAAA,IAC9B,oBAAmB,qDAAqD;AAAA,EAC1E;AAAA,EACA,yBACE,WAAW,WACX,UAAU,SACV,uDACF;AAAA,EACA,MAAM,WAAW,gCACf,OACA,OAAO,WACP,WAAW,OAAO,YACpB;AAAA,EACA,IAAI,UAAU;AAAA,IACZ,6BAA6B,SAAS,gBAAgB,WAAW,cAAc;AAAA,IAC/E,yBACE,WAAW,WACX,SAAS,WACT,qEACF;AAAA,EACF;AAAA;AAGF,SAAS,4BAA4B,CACnC,QACA,MACM;AAAA,EACN,8BAA6B,QAAQ,MAAM,mBAAmB;AAAA;AAGhE,SAAS,mBAAmB,CAC1B,SACA,OACA,SACM;AAAA,EACN,MAAM,oBAAoB,QAAQ,UAAU,IAAI,CAAC,WAAW,qBAAoB,OAAO,IAAI,CAAC;AAAA,EAC5F,MAAM,mBAAmB,QAAQ;AAAA,EACjC,IAAI,kBAAkB,SAAS,KAAK,CAAC,QAAQ,YAAY,MAAM,WAAW;AAAA,IACxE,oBAAmB,mDAAmD;AAAA,EACxE;AAAA,EACA,IAAI,qBAAoB,gBAAgB,MAAM,qBAAoB,iBAAiB,GAAG;AAAA,IACpF,oBAAmB,yDAAyD;AAAA,EAC9E;AAAA,EACA,IAAI,QAAQ,gBAAgB,SAAS,KAAK,CAAC,QAAQ,YAAY,YAAY,WAAW;AAAA,IACpF,oBAAmB,2DAA2D;AAAA,EAChF;AAAA,EACA,uBAAuB,QAAQ,iBAAiB,QAAQ,OAAO,OAAO,WAAW,OAAO;AAAA,EACxF,IAAI,QAAQ,OAAO,OAAO,OAAO,SAAS,aAAa;AAAA,IACrD,MAAM,YAAY,mBAAmB,SAAS,OAAO;AAAA,IACrD,IAAI,UAAU,WAAW,QAAQ,OAAO,OAAO,OAAO,YAAY;AAAA,MAChE,oBACE,2EACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,CAAC,GAAG,QAAQ,SAAS,EAAE,KAAK,iBAAgB;AAAA,EACnE,IAAI,eAAe,SAAS,KAAK,CAAC,QAAQ,YAAY,MAAM,WAAW;AAAA,IACrE,oBAAmB,mDAAmD;AAAA,EACxE;AAAA,EACA,IAAI,QAAQ,gBAAgB,SAAS,eAAe,QAAQ;AAAA,IAC1D,oBAAmB,iEAAiE;AAAA,EACtF;AAAA,EACA,SAAS,UAAU,EAAG,UAAU,eAAe,QAAQ,WAAW,GAAG;AAAA,IACnE,MAAM,WAAW,eAAe;AAAA,IAChC,MAAM,SAAS,QAAQ,gBAAgB,IAAI,OAAO;AAAA,IAClD,IAAI,CAAC,YAAY,CAAC,QAAQ;AAAA,MACxB,oBAAmB,iEAAiE;AAAA,IACtF;AAAA,IACA,QAAQ,IAAI,kBAAkB,gBAAgB;AAAA,IAC9C,IACE,kBAAkB,WAClB,OAAO,eAAc,QAAQ,OAAO,OAAO,WAAW,QAAQ,OAAO,OAAO,IAAI,OAAO,KACvF,qBAAoB,WAAW,MAAM,qBAAoB,SAAS,KAAK,GACvE;AAAA,MACA,oBAAmB,oEAAoE;AAAA,IACzF;AAAA,IACA,MAAM,YAAY,MAAM,OAAO,IAAI,UAAU,QAAQ,OAAO,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACxF,IAAI,CAAC,aAAa,qBAAoB,UAAU,QAAQ,MAAM,qBAAoB,MAAM,GAAG;AAAA,MACzF,oBAAmB,iDAAiD;AAAA,IACtE;AAAA,EACF;AAAA;AAGF,SAAS,sBAAsB,CAC7B,SACA,WACA,SACM;AAAA,EACN,MAAM,qBAAqB,QAAQ,OAAO,CAAC,WAAW,OAAO,SAAS,WAAW;AAAA,EACjF,MAAM,SAAS,IAAI;AAAA,EAQnB,IAAI,eAA8B;AAAA,EAClC,IAAI,gBAAgB;AAAA,EACpB,WAAW,UAAU,oBAAoB;AAAA,IACvC,IAAI,OAAO,iBAAiB,cAAc;AAAA,MACxC,eAAe,OAAO;AAAA,MACtB,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,QAAQ,OAAO,IAAI,OAAO,YAAY,KAAK;AAAA,MAC/C,QAAQ,gBAAgB,OAAO,IAAI,MAAM;AAAA,MACzC,QAAQ,OAAO,IAAI;AAAA,MACnB,kBAAkB,IAAI;AAAA,IACxB;AAAA,IACA,OAAO,IAAI,OAAO,cAAc,KAAK;AAAA,IACrC,IAAI,OAAO,UAAU;AAAA,MACnB,iBAAiB;AAAA,MACjB,MAAM,iBAAiB,IAAI,OAAO,WAAW;AAAA,MAC7C,IAAI,gBAAgB,GAAG;AAAA,QACrB,oBAAmB,4DAA4D;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,qCAAqC,OAAO;AAAA,EAC5D,WAAW,SAAS,OAAO,OAAO,GAAG;AAAA,IACnC,MAAM,oBAA8B,CAAC;AAAA,IACrC,QAAQ,qBACN,WACA,MAAM,OAAO,cACb,MAAM,OAAO,WACb,MAAM,QACN,CAAC,QAAQ,kBAAkB,KAAK,gBAAe,QAAQ,GAAG,CAAC,CAAC,CAC9D;AAAA,IACA,kBAAkB,KAAK;AAAA,IACvB,MAAM,mBAAmB,CAAC,GAAG,MAAM,gBAAgB,EAAE,KAAK;AAAA,IAC1D,IAAI,qBAAoB,iBAAiB,MAAM,qBAAoB,gBAAgB,GAAG;AAAA,MACpF,oBACE,iFACF;AAAA,IACF;AAAA,EACF;AAAA;AAGF,SAAS,8BAA8B,CACrC,SACA,YACM;AAAA,EACN,MAAM,cAAc,QAAQ;AAAA,EAC5B,IACE,CAAC,eACD,YAAY,aAAa,WAAW,OAAO,gBAC3C,YAAY,+BAA+B,WAAW,qBACtD,YAAY,UAAU,sBAAsB,WAAW,qBACvD,YAAY,UAAU,mBAAmB,WAAW,kBACpD,YAAY,UAAU,aAAa,WAAW,UAC9C;AAAA,IACA,oBACE,mFACF;AAAA,EACF;AAAA,EACA,IACE,WAAW,mBAAmB,aAC7B,CAAC,YAAY,yBAAyB,CAAC,YAAY,sBACpD;AAAA,IACA,oBAAmB,6DAA6D;AAAA,EAClF;AAAA,EACA,IAAI,WAAW,mBAAmB,UAAU,CAAC,YAAY,qBAAqB;AAAA,IAC5E,oBAAmB,2DAA2D;AAAA,EAChF;AAAA,EACA,MAAM,qBACJ,WAAW,mBAAmB,WAAW,CAAC,GAAG,YAAY,QAAQ,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACrF,MAAM,mBAAmB,CAAC,GAAG,YAAY,MAAM,QAAQ,CAAC,EACrD,OAAO,IAAI,WAAW,MAAM,YAAY,EACxC,IAAI,EAAE,SAAS,GAAG,EAClB,KAAK;AAAA,EACR,IACE,qBAAoB,mBAAmB,SAAS,QAAQ,CAAC,MACvD,qBAAoB,kBAAkB,KACxC,qBAAoB,mBAAmB,SAAS,MAAM,CAAC,MACrD,qBAAoB,gBAAgB,KACtC,mBAAmB,SAAS,OAAO,EAAE,SAAS,GAC9C;AAAA,IACA,oBACE,mFACF;AAAA,EACF;AAAA;AAGF,SAAS,kBAAkB,CACzB,SACA,YACU;AAAA,EACV,OAAO,CAAC,GAAG,QAAQ,KAAK,OAAO,CAAC,EAC7B,OACC,CAAC,WACC,OAAO,SAAS,oBAAoB,OAAO,eAAe,UAC9D,EACC,IAAI,CAAC,WAAW,OAAO,WAAW,EAClC,KAAK;AAAA;AAGV,SAAS,wBAAwB,CAAC,OAAe,SAAiB,SAAuB;AAAA,EACvF,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,MAAM,OAAO;AAAA,IAAG,oBAAmB,OAAO;AAAA;;;AClTlE,MAAM,uCAAiF;AAAA,EAKzE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAVF,WAAW,IAAI;AAAA,EACf,eAAe,IAAI;AAAA,EAEpC,WAAW,CACQ,OACA,SACA,YACA,qBACA,6BACA,iBACA,QAA0C,CAAC,GAC5D;AAAA,IAPiB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,MAAK,CAAC,OAAmE;AAAA,IAC7E,MAAM,mBAAmB,KAAK,oBAAoB;AAAA,IAClD,MAAM,YAAY,KAAK,4BAA4B;AAAA,IACnD,IAAI,CAAC,oBAAoB,CAAC,WAAW;AAAA,MACnC,MAAM,IAAI,gCACR,iEACF;AAAA,IACF;AAAA,IACA,6BAA4B,KAAK;AAAA,IACjC,IAAI,CAAE,MAAM,KAAK,gBAAgB,MAAM,OAAO,WAAW,MAAM,OAAO,WAAW,GAAI;AAAA,MACnF,MAAM,IAAI,gCACR,8BAA8B,MAAM,OAAO,2CAA2C,MAAM,OAAO,aACrG;AAAA,IACF;AAAA,IACA,KAAK,mBAAmB,KAAK;AAAA,IAC7B,WAAW,YAAY,MAAM,SAAS;AAAA,MACpC,KAAK,aAAa,UAAU,MAAM,OAAO,SAAS;AAAA,IACpD,WAAW,YAAY,MAAM,SAAS;AAAA,MACpC,MAAM,KAAK,aAAa,UAAU,MAAM,OAAO,SAAS;AAAA,IAC1D,WAAW,YAAY,MAAM,SAAS;AAAA,MACpC,MAAM,KAAK,WAAW,UAAU,MAAM,OAAO,SAAS;AAAA,IACxD,MAAM,yBAAyB,IAAI;AAAA,IACnC,WAAW,YAAY,MAAM,SAAS,YAAY;AAAA,MAChD,MAAM,MAAM,kBAAiB,SAAS,QAAQ,SAAS,MAAM;AAAA,MAC7D,MAAM,UACJ,uBAAuB,IAAI,GAAG,KAC9B,KAAK,0BAA0B,MAAM,OAAO,WAAW,SAAS,QAAQ,SAAS,MAAM;AAAA,MACzF,uBAAuB,IAAI,KAAK,OAAO;AAAA,MACvC,IAAI,QAAQ,gBAAgB,SAAS,aAAa;AAAA,QAChD,MAAM,IAAI,8BACR,mBACA,mCAAmC,SAAS,OAAO,gBAAgB,SAAS,OAAO,aAAa,SAAS,SAC3G;AAAA,MACF;AAAA,IACF;AAAA,IACA,WAAW,YAAY,MAAM,SAAS;AAAA,MAAQ,KAAK,YAAY,UAAU,MAAM,OAAO,SAAS;AAAA,IAE/F,MAAM,gBAAgB,CAAC;AAAA,IACvB,MAAM,UAAU;AAAA,MACd;AAAA,MACA,QAAQ,gBAAgB,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,MAAM,IAAI;AAAA,MACV,gBAAgB,IAAI;AAAA,MACpB,WAAW,CAAC;AAAA,MACZ,iBAAiB,CAAC;AAAA,MAClB,WAAW,CAAC;AAAA,MACZ,kBAAkB,CAAC;AAAA,MACnB,iBAAiB,IAAI;AAAA,MACrB,aAAa;AAAA,QACX,OAAO,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,QAC3D,aAAa,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,QACjE,OAAO,EAAE,SAAS,OAAO,WAAW,OAAO,cAAc,EAAE;AAAA,MAC7D;AAAA,MACA,YAAY;AAAA,MACZ,uBAAuB;AAAA,MACvB,gBAAgB,IAAI;AAAA,MACpB,iBAAiB,IAAI;AAAA,MACrB,aAAa;AAAA,IACf;AAAA,IACA,KAAK,SAAS,IAAI,eAAe,OAAO;AAAA,IACxC,KAAK,aAAa,IAAI,OAAO;AAAA,IAC7B,UAAU,SAAS,aAAa;AAAA,IAChC,OAAO,EAAE,cAAc;AAAA;AAAA,EAGzB,qBAAqB,CAAC,kBAAgC;AAAA,IACpD,WAAW,WAAW,KAAK,cAAc;AAAA,MACvC,IAAI,QAAQ,qBAAqB;AAAA,QAAkB;AAAA,MACnD,KAAK,eAAe,OAAO;AAAA,IAC7B;AAAA;AAAA,EAIM,cAAc,CAAC,SAA6B;AAAA,IAClD,QAAQ,SAAS;AAAA,IACjB,QAAQ,KAAK,MAAM;AAAA,IACnB,QAAQ,eAAe,MAAM;AAAA,IAC7B,QAAQ,UAAU,SAAS;AAAA,IAC3B,QAAQ,gBAAgB,SAAS;AAAA,IACjC,QAAQ,UAAU,SAAS;AAAA,IAC3B,QAAQ,iBAAiB,SAAS;AAAA,IAClC,QAAQ,gBAAgB,MAAM;AAAA,IAC9B,QAAQ,wBAAwB;AAAA,IAChC,QAAQ,iBAAiB;AAAA,IACzB,QAAQ,gBAAgB,MAAM;AAAA,IAC9B,QAAQ,cAAc;AAAA,IACtB,KAAK,aAAa,OAAO,OAAO;AAAA,IAChC,QAAQ,UAAU,SAAS,QAAQ,aAAa;AAAA;AAAA,SAG3C,WAAW,CAChB,OACyC;AAAA,IACzC,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,gBAAe,MAAM,QAAQ;AAAA,IAC7B,iBAAiB,WAAW,MAAM,UAAU;AAAA,MAC1C,KAAK,eAAe,MAAM,OAAO;AAAA,MACjC,KAAK,MAAM,aAAa,YAAY;AAAA,MACpC,MAAM,aAAa,cAAa,QAAQ,SAAS,eAAc,iBAAgB;AAAA,MAC/E,SAAS,SAAS,EAAG,SAAS,WAAW,QAAQ,UAAU,MAAM,UAAU;AAAA,QACzE,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,UAAwC,CAAC;AAAA,QAC/C,WAAW,OAAO,WAAW,MAAM,QAAQ,SAAS,MAAM,QAAQ,GAAG;AAAA,UACnE,QAAQ,KAAK,MAAM,KAAK,YAAY,SAAS,GAAG,CAAC;AAAA,QACnD;AAAA,QACA,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,KAAK,MAAM,gBAAgB,qBAAqB,QAAQ,MAAM;AAAA,QAC9D,MAAM,EAAE,SAAS,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MACzD;AAAA,MAEA,MAAM,WAAW,cAAa,QAAQ,OAAO,aAAY,eAAc;AAAA,MACvE,SAAS,SAAS,EAAG,SAAS,SAAS,QAAQ,UAAU,MAAM,UAAU;AAAA,QACvE,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,QAAoC,CAAC;AAAA,QAC3C,WAAW,OAAO,SAAS,MAAM,QAAQ,SAAS,MAAM,QAAQ,GAAG;AAAA,UACjE,MAAM,KAAK,MAAM,KAAK,UAAU,SAAS,GAAG,CAAC;AAAA,QAC/C;AAAA,QACA,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,KAAK,MAAM,gBAAgB,mBAAmB,MAAM,MAAM;AAAA,QAC1D,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MACzD;AAAA,MAEA,MAAM,eAAe,KAAK,iBAAiB,SAAS,QAAQ,eAAe;AAAA,MAC3E,SAAS,SAAS,EAAG,SAAS,aAAa,QAAQ,UAAU,MAAM,UAAU;AAAA,QAC3E,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,OAAO,aAAa,MAAM,QAAQ,SAAS,MAAM,QAAQ;AAAA,QAC/D,MAAM,QAAoC,CAAC;AAAA,QAC3C,WAAW,OAAO;AAAA,UAAM,MAAM,KAAK,MAAM,KAAK,UAAU,SAAS,GAAG,CAAC;AAAA,QACrE,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,KAAK,MAAM,gBAAgB,4BAA4B,MAAM,MAAM;AAAA,QACnE,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE;AAAA,MACzD;AAAA,MAEA,WAAW,SAAS,SAAS,QAAQ,YAAY,CAAC,UAChD,kBAAiB,MAAM,QAAQ,MAAM,MAAM,CAC7C,GAAG;AAAA,QACD,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,QAAQ,KAAK,cAAc,SAAS,MAAM,QAAQ,MAAM,MAAM;AAAA,QAIpE,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,QAAQ,CAAC,EAAE;AAAA,MAClE;AAAA,MAEA,MAAM,kBAAkB,cACtB,QAAQ,QACR,CAAC,UAAU,mBAAkB,MAAM,QAAQ,MAAM,EAAE,GACnD,CAAC,UAAU,uBAAsB,MAAM,QAAQ,MAAM,EAAE,CACzD;AAAA,MACA,SAAS,SAAS,EAAG,SAAS,gBAAgB,QAAQ,UAAU,MAAM,UAAU;AAAA,QAC9E,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,SAAiC,CAAC;AAAA,QACxC,WAAW,SAAS,gBAAgB,MAAM,QAAQ,SAAS,MAAM,QAAQ,GAAG;AAAA,UAC1E,MAAM,SAAS,yCAAyC,KAAK,UAAU,EAAE,cACvE,QAAQ,OAAO,OAAO,WACtB,MAAM,QACN,MAAM,EACR;AAAA,UACA,IAAI;AAAA,YAAQ,OAAO,KAAK,YAAY,MAAM,CAAC;AAAA,QAC7C;AAAA,QACA,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,KAAK,MAAM,gBAAgB,oBAAoB,OAAO,MAAM;AAAA,QAC5D,IAAI,OAAO,SAAS;AAAA,UAAG,MAAM,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,OAAO;AAAA,MAChF;AAAA,IACF;AAAA;AAAA,SAGK,4BAA4B,CACjC,OAC2C;AAAA,IAC3C,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,gBAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,cAAc,KAAK,mBAAmB,SAAS,KAAK;AAAA,IAC1D,IAAI,MAAM,eAAe,UAAU;AAAA,MACjC,IAAI,YAAY,UAAU,mBAAmB,UAAU;AAAA,QACrD,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,MACF;AAAA,MACA,IAAI,YAAY;AAAA,QACd,MAAM,IAAI,8BACR,mBACA,iEACF;AAAA,MACF,YAAY,sBAAsB;AAAA,MAClC,KAAK,MAAM,aAAa,2BAA2B;AAAA,MACnD,SAAS,SAAS,EAAG,SAAS,YAAY,eAAe,QAAQ,UAAU,MAAM,UAAU;AAAA,QACzF,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,MAAM,WAAW,YAAY,eAAe,MAAM,QAAQ,SAAS,MAAM,QAAQ;AAAA,QACjF,MAAM,UAA0C,CAAC;AAAA,QACjD,WAAW,SAAS,UAAU;AAAA,UAC5B,MAAM,MAAM,qBAAoB,EAAE,MAAM,UAAU,KAAK,MAAM,IAAI,CAAC;AAAA,UAClE,MAAM,OAAO,MAAM,KAAK,YAAY,SAAS,MAAM,GAAG;AAAA,UACtD,QAAQ,KAAK;AAAA,YACX,KAAK,KAAK;AAAA,YACV,iBAAiB,mBACf,MAAM,OAAO,cACb,YAAY,UAAU,mBACtB,YAAY,UAAU,aAAa,IAAI,GAAG,CAC5C;AAAA,YACA,UAAU,KAAK;AAAA,YACf,WAAW,KAAK;AAAA,YAChB,iBAAiB,KAAK;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,QACA,KAAK,eAAe,MAAM,OAAO;AAAA,QACjC,KAAK,MAAM,gBAAgB,2BAA2B,QAAQ,MAAM;AAAA,QACpE,MAAM,EAAE,SAAS,OAAO,CAAC,EAAE;AAAA,MAC7B;AAAA,MACA,KAAK,eAAe,MAAM,OAAO;AAAA,MACjC,YAAY,wBAAwB;AAAA,MACpC;AAAA,IACF;AAAA,IAEA,IAAI,YAAY,UAAU,mBAAmB,YAAY,CAAC,YAAY,uBAAuB;AAAA,MAC3F,MAAM,IAAI,8BACR,mBACA,iFACF;AAAA,IACF;AAAA,IACA,IAAI,YAAY;AAAA,MACd,MAAM,IAAI,8BACR,mBACA,+DACF;AAAA,IACF,YAAY,oBAAoB;AAAA,IAChC,KAAK,MAAM,aAAa,yBAAyB;AAAA,IACjD,KAAK,uBAAuB,SAAS,WAAW;AAAA,IAChD,YAAY,iBAAiB,CAAC,GAAG,YAAY,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,UACvE,KAAK,QAAQ,cAAc,MAAM,OAAO,CAC1C;AAAA,IACA,SAAS,SAAS,EAAG,SAAS,YAAY,aAAa,QAAQ,UAAU,MAAM,UAAU;AAAA,MACvF,KAAK,eAAe,MAAM,OAAO;AAAA,MACjC,MAAM,WAAW,YAAY,aAAa,MAAM,QAAQ,SAAS,MAAM,QAAQ;AAAA,MAC/E,MAAM,QAAsC,CAAC;AAAA,MAC7C,WAAW,SAAS,UAAU;AAAA,QAC5B,MAAM,MAAM,qBAAoB,EAAE,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,QAChE,MAAM,OAAO,MAAM,KAAK,UAAU,SAAS,MAAM,GAAG;AAAA,QACpD,MAAM,qBACJ,YAAY,UAAU,aAAa,IAAI,GAAG,KAAK,YAAY,UAAU,aAAa,IAAI,GAAG;AAAA,QAC3F,MAAM,KAAK;AAAA,UACT,KAAK,KAAK;AAAA,UACV,iBAAiB,qBACb,iBACE,MAAM,OAAO,cACb,YAAY,UAAU,mBACtB,YAAY,UAAU,aAAa,IAAI,GAAG,CAC5C,IACA,KAAK;AAAA,UACT,UAAU,KAAK;AAAA,UACf,cAAc,KAAK;AAAA,UACnB,WAAW,KAAK;AAAA,UAChB,cAAc,MAAM;AAAA,QACtB,CAAC;AAAA,MACH;AAAA,MACA,KAAK,eAAe,MAAM,OAAO;AAAA,MACjC,KAAK,MAAM,gBAAgB,yBAAyB,MAAM,MAAM;AAAA,MAChE,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM;AAAA,IAC7B;AAAA,IACA,KAAK,eAAe,MAAM,OAAO;AAAA,IACjC,YAAY,sBAAsB;AAAA;AAAA,OAG9B,UAAS,CAAC,OAAqD;AAAA,IACnE,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,IAAI,QAAQ,YAAY;AAAA,MACtB,MAAM,IAAI,8BACR,mBACA,8DACF;AAAA,IACF;AAAA,IACA,MAAM,YAAY,IAAI;AAAA,IACtB,MAAM,kBAAkB,IAAI;AAAA,IAC5B,WAAW,UAAU,MAAM,SAAS;AAAA,MAClC,kBAAiB,QAAQ,QAAQ,MAAM;AAAA,MACvC,MAAM,YAAY,mBAAkB,MAAM;AAAA,MAC1C,IACE,UAAU,IAAI,OAAO,SAAS,KAC9B,QAAQ,KAAK,IAAI,OAAO,SAAS,KACjC,gBAAgB,IAAI,SAAS,KAC7B,QAAQ,eAAe,IAAI,SAAS,GACpC;AAAA,QACA,MAAM,IAAI,8BACR,mBACA,uCAAuC,OAAO,aAChD;AAAA,MACF;AAAA,MACA,IACE,OAAO,SAAS,sBACf,CAAC,QAAQ,eAAe,QAAQ,YAAY,oBAC7C;AAAA,QACA,MAAM,IAAI,8BACR,mBACA,yEACF;AAAA,MACF;AAAA,MACA,UAAU,IAAI,OAAO,SAAS;AAAA,MAC9B,gBAAgB,IAAI,SAAS;AAAA,IAC/B;AAAA,IACA,MAAM,SAAS,MAAM,QAAQ,IAAI,CAAC,WAAW,gBAAgB,MAAM,CAAC;AAAA,IACpE,KAAK,MAAM,cAAc,MAAM;AAAA,IAC/B,WAAW,UAAU,QAAQ;AAAA,MAC3B,QAAQ,KAAK,IAAI,OAAO,WAAW,MAAM;AAAA,MACzC,QAAQ,eAAe,IAAI,mBAAkB,MAAM,CAAC;AAAA,MACpD,IAAI,OAAO,SAAS;AAAA,QAAQ,QAAQ,UAAU,KAAK,MAAM;AAAA,MACzD,IAAI,OAAO,SAAS;AAAA,QAAe,QAAQ,gBAAgB,KAAK,MAAM;AAAA,MACtE,IAAI,OAAO,SAAS;AAAA,QAAS,QAAQ,UAAU,KAAK,MAAM;AAAA,MAC1D,IAAI,OAAO,SAAS,oBAAoB;AAAA,QACtC,QAAQ,gBAAgB,IAAI,cAAa,OAAO,GAAG,GAAG,MAAM;AAAA,MAC9D;AAAA,MACA,IAAI,OAAO,SAAS,mBAAmB;AAAA,QACrC,MAAM,cAAc,QAAQ;AAAA,QAC5B,IAAI,aAAa;AAAA,UACf,YAAY,gBAAgB,IAAI,cAAa,OAAO,GAAG,GAAG,OAAO,GAAG;AAAA,UACpE,YAAY,gBAAgB;AAAA,UAC5B,YAAY,eAAe;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,MAAM,gBAAgB,cAAc,OAAO,MAAM;AAAA;AAAA,SAGjD,UAAU,CAAC,OAA+E;AAAA,IAC/F,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,gBAAe,MAAM,QAAQ;AAAA,IAC7B,MAAM,SAAS,QAAQ,YAAY,MAAM;AAAA,IACzC,IAAI,OAAO,SAAS;AAAA,MAClB,MAAM,IAAI,8BACR,mBACA,mBAAmB,MAAM,mDAC3B;AAAA,IACF;AAAA,IACA,OAAO,UAAU;AAAA,IACjB,IAAI,CAAC,QAAQ,YAAY;AAAA,MACvB,QAAQ,UAAU,KAAK,gBAAe;AAAA,MACtC,QAAQ,gBAAgB,KAAK,uBAAsB;AAAA,MACnD,QAAQ,UAAU,KAAK,iBAAgB;AAAA,MACvC,QAAQ,aAAa;AAAA,IACvB;AAAA,IACA,MAAM,UACJ,MAAM,UAAU,UACZ,QAAQ,YACR,MAAM,UAAU,gBACd,QAAQ,kBACR,QAAQ;AAAA,IAChB,SAAS,SAAS,EAAG,SAAS,QAAQ,QAAQ,UAAU,MAAM,UAAU;AAAA,MACtE,KAAK,eAAe,MAAM,OAAO;AAAA,MACjC,MAAM,WAAW,QAAQ,MAAM,QAAQ,SAAS,MAAM,QAAQ;AAAA,MAC9D,KAAK,MAAM,gBAAgB,QAAQ,MAAM,cAAc,SAAS,MAAM;AAAA,MACtE,OAAO,eAAe,SAAS,SAAS;AAAA,MACxC,MAAM,EAAE,SAAS,gBAAgB,QAAQ,EAAE;AAAA,IAC7C;AAAA,IACA,KAAK,eAAe,MAAM,OAAO;AAAA,IACjC,OAAO,YAAY;AAAA;AAAA,OAGf,oBAAmB,CACvB,OACoD;AAAA,IACpD,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,MAAM,SAA2C,CAAC;AAAA,IAClD,WAAW,OAAO,MAAM,MAAM;AAAA,MAC5B,MAAM,SAAS,QAAQ,gBAAgB,IAAI,cAAa,GAAG,CAAC;AAAA,MAC5D,IAAI,QAAQ;AAAA,QACV,OAAO,KAAK,EAAE,KAAK,gBAAgB,OAAO,GAAG,GAAG,QAAQ,OAAO,OAAO,CAAC;AAAA,MACzE;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,OAGH,WAAU,CAAC,OAAsD;AAAA,IACrE,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,6BAA4B,MAAM,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC9D,oBAAoB,SAAS,MAAM,KAAK;AAAA,IACxC,KAAK,MAAM,gBAAgB,eAAe,0BAAyB,MAAM,KAAK,CAAC;AAAA,IAC/E,MAAM,QAAQ,CAAC,UAAkB,UAA4B;AAAA,MAC3D,KAAK,MAAM,cAAc,UAAU,QAAQ,cAAc;AAAA,MACzD,MAAM;AAAA;AAAA,IAGR,WAAW,QAAQ,MAAM,MAAM,UAAU,QAAQ;AAAA,MAC/C,MAAM,0BAA0B,MAAM;AAAA,QACpC,MAAM,MAAM,iBAAiB,WAAW,cAAa,KAAK,GAAG,CAAC;AAAA,QAC9D,iBACE,KAAK,MAAM,gBAAgB,IAAI,GAAG,GAClC,KAAK,sBACL,iBACF;AAAA,QACA,KAAK,MAAM,gBAAgB,IACzB,KACA,gBAAgB;AAAA,UACd;AAAA,UACA,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK,KAAK,SAAS;AAAA,UAC7B,cAAc,KAAK;AAAA,UACnB,WAAW,KAAK;AAAA,QAClB,CAAC,CACH;AAAA,OACD;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU,QAAQ;AAAA,MAC/C,MAAM,0BAA0B,MAAM;AAAA,QACpC,MAAM,MAAM,iBAAiB,WAAW,cAAa,KAAK,GAAG,CAAC;AAAA,QAC9D,iBACE,KAAK,MAAM,gBAAgB,IAAI,GAAG,GAClC,KAAK,sBACL,iBACF;AAAA,QACA,KAAK,MAAM,gBAAgB,OAAO,GAAG;AAAA,OACtC;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,MACnD,MAAM,wBAAwB,MAAM;AAAA,QAClC,MAAM,MAAM,iBAAiB,WAAW,YAAW,KAAK,GAAG,CAAC;AAAA,QAC5D,iBACE,KAAK,MAAM,cAAc,IAAI,GAAG,GAChC,KAAK,sBACL,oBACF;AAAA,QACA,KAAK,MAAM,cAAc,IACvB,KACA,gBAAgB;AAAA,UACd;AAAA,UACA,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,UACZ,cAAc,KAAK;AAAA,UACnB,WAAW,KAAK;AAAA,QAClB,CAAC,CACH;AAAA,OACD;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,MACnD,MAAM,wBAAwB,MAAM;AAAA,QAClC,MAAM,MAAM,iBAAiB,WAAW,YAAW,KAAK,GAAG,CAAC;AAAA,QAC5D,iBACE,KAAK,MAAM,cAAc,IAAI,GAAG,GAChC,KAAK,sBACL,oBACF;AAAA,QACA,KAAK,MAAM,cAAc,OAAO,GAAG;AAAA,OACpC;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,MACnD,MAAM,6BAA6B,MAAM;AAAA,QACvC,MAAM,MAAM,iBAAiB,WAAW,aAAa,KAAK,IAAI,QAAQ,KAAK,IAAI,MAAM,CAAC;AAAA,QACtF,iBACE,KAAK,MAAM,kBAAkB,IAAI,GAAG,GACpC,KAAK,sBACL,oBACF;AAAA,QACA,KAAK,MAAM,kBAAkB,IAC3B,KACA,gBAAgB;AAAA,UACd;AAAA,UACA,KAAK,KAAK;AAAA,UACV,OAAO,KAAK;AAAA,UACZ,cAAc,KAAK;AAAA,UACnB,WAAW,KAAK;AAAA,QAClB,CAAC,CACH;AAAA,OACD;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU,MAAM,MAAM;AAAA,MACnD,MAAM,6BAA6B,MAAM;AAAA,QACvC,MAAM,MAAM,iBAAiB,WAAW,aAAa,KAAK,IAAI,QAAQ,KAAK,IAAI,MAAM,CAAC;AAAA,QACtF,iBACE,KAAK,MAAM,kBAAkB,IAAI,GAAG,GACpC,KAAK,sBACL,oBACF;AAAA,QACA,KAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,OACxC;AAAA,IAEH,WAAW,QAAQ,MAAM,MAAM,UAAU;AAAA,MACvC,MAAM,yBAAyB,MAAM;AAAA,QACnC,KAAK,eAAe,KAAK,UAAU,SAAS;AAAA,QAC5C,qCAAqC,KAAK,OAAO,EAAE,gBAAgB;AAAA,UACjE;AAAA,UACA,cAAc,KAAK,IAAI,OAAO;AAAA,UAC9B,UAAU,KAAK,IAAI,OAAO;AAAA,UAC1B,QAAQ,KAAK,IAAI;AAAA,UACjB,cAAc,KAAK,IAAI,OAAO;AAAA,UAC9B,UAAU,KAAK,IAAI,OAAO;AAAA,QAC5B,CAAC;AAAA,OACF;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU;AAAA,MACvC,MAAM,2BAA2B,MAAM;AAAA,QACrC,KAAK,iBAAiB,KAAK,UAAU,SAAS;AAAA,QAC9C,qCAAqC,KAAK,OAAO,EAAE,kBACjD,WACA,KAAK,IAAI,cACT,KAAK,IAAI,SACX;AAAA,OACD;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU;AAAA,MACvC,MAAM,2BAA2B,MAAM;AAAA,QACrC,KAAK,iBAAiB,KAAK,UAAU,SAAS;AAAA,QAC9C,qCAAqC,KAAK,OAAO,EAAE,iBAAiB,KAAK,KAAK,SAAS;AAAA,OACxF;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,UAAU;AAAA,MACvC,MAAM,yBAAyB,MAAM;AAAA,QACnC,KAAK,eAAe,KAAK,UAAU,SAAS;AAAA,QAC5C,qCAAqC,KAAK,OAAO,EAAE,eAAe,KAAK,KAAK,SAAS;AAAA,OACtF;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM,WAAW;AAAA,MACxC,MAAM,2BAA2B,MAAM;AAAA,QACrC,KAAK,YAAY,KAAK,UAAU,SAAS;AAAA,QACzC,yCAAyC,KAAK,UAAU,EAAE,gBACxD,WACA,KAAK,KACP;AAAA,OACD;AAAA,IACH,WAAW,QAAQ,MAAM,MAAM;AAAA,MAC7B,MAAM,iBAAiB,MAAM;AAAA,QAC3B,MAAM,WAAW,KAAK;AAAA,QACtB,IAAI,SAAS,cAAc,aAAa,SAAS,aAAa,QAAQ,OAAO,OAAO,IAAI;AAAA,UACtF,MAAM,IAAI,gCACR,kEACF;AAAA,QACF;AAAA,QACA,gBAAgB,KAAK,aAAa,oBAAoB;AAAA,QACtD,gBAAgB,KAAK,WAAW,kBAAkB;AAAA,QAClD,gBAAgB,SAAS,YAAY,yBAAyB;AAAA,QAC9D,MAAM,MAAM,UAAU,WAAW,SAAS,EAAE;AAAA,QAC5C,IAAI,KAAK,MAAM,OAAO,IAAI,GAAG,GAAG;AAAA,UAC9B,MAAM,IAAI,8BACR,mBACA,2BAA2B,SAAS,MACtC;AAAA,QACF;AAAA,QACA,IAAI,QAAQ,gBAAgB,IAAI,SAAS,aAAa;AAAA,UACpD,MAAM,IAAI,8BACR,mBACA,kCACF;AAAA,QACF,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,UACzB,UAAU,gBAAgB,QAAQ;AAAA,UAClC,aAAa,KAAK;AAAA,UAClB,UAAU;AAAA,UACV,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,aAAa;AAAA,UACb,aAAa;AAAA,UACb,WAAW,KAAK;AAAA,QAClB,CAAC;AAAA,QACD,QAAQ,gBAAgB,IAAI,SAAS,eAAe,gBAAgB,QAAQ,CAAC;AAAA,OAC9E;AAAA,IACH,WAAW,QAAQ,0BAAyB,MAAM,KAAK,GAAG;AAAA,MACxD,QAAQ,iBAAiB,KAAK,qBAAoB,IAAI,CAAC;AAAA,IACzD;AAAA;AAAA,OAGI,SAAQ,CAAC,OAA0E;AAAA,IACvF,MAAM,UAAU,KAAK,eAAe,MAAM,OAAO;AAAA,IACjD,QAAQ,WAAW,QAAQ;AAAA,IAG3B,KAAK,mBAAmB,QAAQ,MAAM;AAAA,IACtC,+BAA+B,SAAS,MAAM,cAAc,KAAK,OAAO,KAAK,OAAO;AAAA,IACpF,KAAK,MAAM,cAAc,YAAY,QAAQ,cAAc;AAAA,IAC3D,WAAW,cAAc,MAAM,aAAa,mBAAmB;AAAA,MAC7D,KAAK,MAAM,cAAc,mBAAmB,QAAQ,cAAc;AAAA,MAClE,gBAAgB,WAAW,eAAe,WAAW,kCAAkC;AAAA,MACvF,gBAAgB,WAAW,WAAW,6BAA6B;AAAA,MACnE,KAAK,aAAa,WAAW,UAAU,OAAO,SAAS;AAAA,MACvD,MAAM,eAAe,yBACnB,OAAO,WACP,WAAW,OAAO,cAClB,WAAW,iBACb;AAAA,MACA,MAAM,YAAY,KAAK,MAAM,uBAAuB,IAAI,YAAY;AAAA,MACpE,IAAI,CAAC,aAAa,UAAU,WAAW;AAAA,QACrC,MAAM,IAAI,8BACR,0BACA,yDACF;AAAA,MACF,MAAM,WAAW,gCACf,KAAK,OACL,OAAO,WACP,WAAW,OAAO,YACpB;AAAA,MACA,IAAI,UAAU;AAAA,QACZ,KAAK,MAAM,uBAAuB,IAChC,yBACE,SAAS,WACT,SAAS,OAAO,cAChB,SAAS,iBACX,GACA;AAAA,aACK;AAAA,UACH,QAAQ;AAAA,UACR,gBAAgB;AAAA,UAChB,YAAY,WAAW;AAAA,UACvB,WAAW,WAAW;AAAA,QACxB,CACF;AAAA,MACF;AAAA,MACA,KAAK,MAAM,uBAAuB,IAAI,cAAc;AAAA,WAC/C;AAAA,QACH,QAAQ;AAAA,QACR,gBAAgB;AAAA,QAChB,aAAa,WAAW;AAAA,QACxB,cAAc,WAAW;AAAA,QACzB,WAAW,WAAW;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,IACA,MAAM,SAAS;AAAA,SACV,gBAAgB,MAAM;AAAA,MACzB,QAAQ,gBAAgB,MAAM,aAAa,MAAM;AAAA,IACnD;AAAA,IACA,KAAK,MAAM,YAAY,IAAI,UAAU,OAAO,WAAW,OAAO,EAAE,GAAG,MAAM;AAAA,IACzE,KAAK,MAAM,sBAAsB,IAC/B,eAAe,OAAO,WAAW,OAAO,cAAc,GACtD,OAAO,EACT;AAAA,IACA,MAAM,SAAS,6BAA6B,OAAO,MAAM;AAAA,IACzD,IAAI,QAAQ;AAAA,MACV,KAAK,MAAM,iBAAiB,IAAI,gBAAgB,OAAO,WAAW,MAAM,GAAG,OAAO,EAAE;AAAA,IACtF;AAAA,IACA,KAAK,eAAe,OAAO;AAAA,IAC3B,OAAO,EAAE,QAAQ,gBAAgB,MAAM,EAAE;AAAA;AAAA,EAGnC,cAAc,CAAC,SAA+C;AAAA,IACpE,MAAM,QAAQ,KAAK,SAAS,IAAI,QAAQ,aAAa;AAAA,IACrD,IACE,CAAC,SACD,CAAC,MAAM,UACP,CAAC,KAAK,oBAAoB,KAC1B,KAAK,oBAAoB,MAAM,MAAM,kBACrC;AAAA,MACA,MAAM,IAAI,8BACR,mBACA,sCACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,kBAAkB,CACxB,SACA,OACyB;AAAA,IACzB,IAAI,QAAQ,aAAa;AAAA,MACvB,IACE,QAAQ,YAAY,aAAa,MAAM,OAAO,gBAC9C,QAAQ,YAAY,+BAA+B,MAAM,4BACzD;AAAA,QACA,MAAM,IAAI,8BACR,0BACA,iEACF;AAAA,MACF;AAAA,MACA,OAAO,QAAQ;AAAA,IACjB;AAAA,IACA,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,WAAW,MAAM,OAAO;AAAA,IAC9B,MAAM,YAAY,KAAK,MAAM,uBAAuB,IAClD,yBAAyB,WAAW,UAAU,MAAM,0BAA0B,CAChF;AAAA,IACA,IAAI,CAAC,aAAa,UAAU,WAAW,SAAS;AAAA,MAC9C,MAAM,IAAI,8BACR,0BACA,qCAAqC,MAAM,yDAC7C;AAAA,IACF;AAAA,IACA,MAAM,WAAW,gCAAgC,KAAK,OAAO,WAAW,QAAQ;AAAA,IAChF,IACE,UAAU,aAAa,iBACtB,aACE,SAAS,aAAa,UAAU,YAC/B,SAAS,mBAAmB,UAAU,iBAC1C;AAAA,MACA,MAAM,IAAI,8BACR,0BACA,gFACF;AAAA,IACF;AAAA,IACA,MAAM,cAAuC;AAAA,MAC3C;AAAA,MACA,4BAA4B,MAAM;AAAA,MAClC;AAAA,MACA;AAAA,MACA,SAAS,IAAI;AAAA,MACb,OAAO,IAAI;AAAA,MACX,gBAAgB,CAAC;AAAA,MACjB,cAAc;AAAA,MACd,gBAAgB,IAAI;AAAA,MACpB,iBAAiB,IAAI;AAAA,MACrB,qBAAqB;AAAA,MACrB,uBAAuB;AAAA,MACvB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,eAAe;AAAA,IACjB;AAAA,IACA,WAAW,mBAAmB,CAAC,UAAU,SAAS,GAAG;AAAA,MACnD,IAAI,CAAC;AAAA,QAAiB;AAAA,MACtB,WAAW,OAAO,gBAAgB,aAAa,OAAO,GAAG;AAAA,QACvD,IAAI,IAAI,UAAU,SAAS,UAAU;AAAA,UACnC,MAAM,MAAM,IAAI,UAAU;AAAA,UAC1B,YAAY,QAAQ,IAAI,cAAa,GAAG,GAAG,EAAE,KAAK,SAAS,kBAAiB,GAAG,EAAE,CAAC;AAAA,QACpF,EAAO;AAAA,UACL,mBAAmB,aAAa,IAAI,UAAU,KAAK,IAAI;AAAA;AAAA,MAE3D;AAAA,IACF;AAAA,IACA,YAAY,iBAAiB,CAAC,GAAG,YAAY,QAAQ,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,UACzE,KAAK,QAAQ,cAAc,MAAM,OAAO,CAC1C;AAAA,IACA,QAAQ,cAAc;AAAA,IACtB,OAAO;AAAA;AAAA,EAGD,sBAAsB,CAC5B,SACA,aACM;AAAA,IACN,IAAI,YAAY;AAAA,MAAe;AAAA,IAC/B,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,WAAW,YAAY;AAAA,IAC7B,MAAM,kBAAkB,CAAC,QACvB,SAAS,IAAI,cAAa,IAAI,MAAM,CAAC,KAAK,SAAS,IAAI,cAAa,IAAI,MAAM,CAAC;AAAA,IAEjF,MAAM,UAAU,qCAAqC,KAAK,OAAO;AAAA,IACjE,QAAQ,gBAAgB,WAAW,CAAC,QAAQ;AAAA,MAC1C,MAAM,MAAM,QAAQ,GAAG;AAAA,MACvB,IAAI,gBAAgB,GAAG;AAAA,QAAG,mBAAmB,aAAa,KAAK,IAAI;AAAA,KACpE;AAAA,IACD,WAAW,YAAY,KAAK,MAAM,cAAc,OAAO,GAAG;AAAA,MACxD,IAAI,SAAS,cAAc;AAAA,QAAW;AAAA,MACtC,IAAI,gBAAgB,SAAS,GAAG;AAAA,QAAG,mBAAmB,aAAa,SAAS,KAAK,IAAI;AAAA,IACvF;AAAA,IACA,WAAW,YAAY,KAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,MAC5D,IAAI,SAAS,cAAc;AAAA,QAAW;AAAA,MACtC,MAAM,MAAM;AAAA,QACV,QAAQ,SAAS,IAAI;AAAA,QACrB,QAAQ,SAAS,IAAI;AAAA,QACrB,QAAQ,SAAS,MAAM;AAAA,MACzB;AAAA,MACA,IAAI,gBAAgB,GAAG;AAAA,QAAG,mBAAmB,aAAa,KAAK,IAAI;AAAA,IACrE;AAAA,IACA,WAAW,UAAU,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,MAC/D,IAAI,OAAO,cAAc,aAAa,OAAO,WAAW;AAAA,QAAU;AAAA,MAClE,WAAW,OAAO,OAAO,aAAa,OAAO,GAAG;AAAA,QAC9C,IAAI,IAAI,UAAU,SAAS,UAAU,gBAAgB,IAAI,UAAU,GAAG,GAAG;AAAA,UACvE,mBAAmB,aAAa,IAAI,UAAU,KAAK,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,QAAQ,gBAAgB,WAAW,CAAC,QAAQ;AAAA,MAC1C,MAAM,MAAM,QAAQ,GAAG;AAAA,MACvB,IAAI,YAAY,eAAe,IAAI,kBAAiB,IAAI,QAAQ,IAAI,MAAM,CAAC,GAAG;AAAA,QAC5E,mBAAmB,aAAa,KAAK,KAAK;AAAA,MAC5C;AAAA,KACD;AAAA,IACD,WAAW,YAAY,KAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,MAC5D,IACE,SAAS,cAAc,aACvB,YAAY,eAAe,IAAI,kBAAiB,SAAS,IAAI,QAAQ,SAAS,IAAI,MAAM,CAAC,GACzF;AAAA,QACA,mBACE,aACA;AAAA,UACE,QAAQ,SAAS,IAAI;AAAA,UACrB,QAAQ,SAAS,IAAI;AAAA,UACrB,QAAQ,SAAS,MAAM;AAAA,QACzB,GACA,KACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY,gBAAgB;AAAA,IAC5B,YAAY,eAAe;AAAA;AAAA,EAGrB,kBAAkB,CAAC,QAAyC;AAAA,IAClE,IAAI,KAAK,MAAM,YAAY,IAAI,UAAU,OAAO,OAAO,WAAW,OAAO,OAAO,EAAE,CAAC,GAAG;AAAA,MACpF,MAAM,IAAI,8BACR,eACA,oBAAoB,OAAO,OAAO,qBACpC;AAAA,IACF;AAAA,IACA,IACE,KAAK,MAAM,sBAAsB,IAC/B,eAAe,OAAO,OAAO,WAAW,OAAO,OAAO,cAAc,CACtE,GACA;AAAA,MACA,MAAM,IAAI,8BACR,eACA,0CACF;AAAA,IACF;AAAA,IACA,MAAM,SAAS,6BAA6B,OAAO,OAAO,MAAM;AAAA,IAChE,IACE,UACA,KAAK,MAAM,iBAAiB,IAAI,gBAAgB,OAAO,OAAO,WAAW,MAAM,CAAC,GAChF;AAAA,MACA,MAAM,IAAI,8BACR,mBACA,6DACF;AAAA,IACF;AAAA;AAAA,EAGM,YAAY,CAAC,UAAkC,WAAyB;AAAA,IAC9E,MAAM,UAAU,gCACd,KAAK,OACL,WACA,SAAS,OAAO,YAClB;AAAA,IACA,KACG,SAAS,qBAAqB,UAAU,SAAS,4BACjD,SAAS,gBAAgB,UAAU,SAAS,cAC7C;AAAA,MACA,MAAM,IAAI,8BACR,oBACA,WAAW,SAAS,OAAO,wBAC7B;AAAA,IACF;AAAA;AAAA,OAGY,aAAY,CAAC,UAAkC,WAAkC;AAAA,IAC7F,KAAK,iBAAiB,UAAU,SAAS;AAAA;AAAA,EAGnC,gBAAgB,CAAC,UAAkC,WAAyB;AAAA,IAClF,MAAM,MAAM,qCAAqC,KAAK,OAAO,EAAE,kBAC7D,WACA,SAAS,IAAI,cACb,SAAS,IAAI,SACf;AAAA,IACA,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,MAAM,IAAI,8BACR,mBACA,mBAAmB,cAAa,SAAS,GAAG,iBAC9C;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,OAAO,IAAI,YAAY,SAAS,WAAW,IAAI,iBAAiB,SAAS,cAAc;AAAA,MAC1F,MAAM,IAAI,8BACR,mBACA,mBAAmB,cAAa,SAAS,GAAG,YAC9C;AAAA,IACF;AAAA;AAAA,OAGY,WAAU,CAAC,UAAgC,WAAkC;AAAA,IACzF,KAAK,eAAe,UAAU,SAAS;AAAA;AAAA,EAGjC,cAAc,CAAC,UAAgC,WAAyB;AAAA,IAC9E,MAAM,MAAM,qCAAqC,KAAK,OAAO,EAAE,gBAAgB,WAAW;AAAA,MACxF,cAAc,SAAS,IAAI,OAAO;AAAA,MAClC,UAAU,SAAS,IAAI,OAAO;AAAA,MAC9B,QAAQ,SAAS,IAAI;AAAA,MACrB,cAAc,SAAS,IAAI,OAAO;AAAA,MAClC,UAAU,SAAS,IAAI,OAAO;AAAA,IAChC,CAAC;AAAA,IACD,IAAI,CAAC,SAAS,QAAQ;AAAA,MACpB,IAAI;AAAA,QACF,MAAM,IAAI,8BACR,mBACA,iBAAiB,YAAW,SAAS,GAAG,iBAC1C;AAAA,MACF;AAAA,IACF;AAAA,IACA,IAAI,CAAC,OAAO,IAAI,iBAAiB,SAAS,cAAc;AAAA,MACtD,MAAM,IAAI,8BACR,mBACA,iBAAiB,YAAW,SAAS,GAAG,YAC1C;AAAA,IACF;AAAA;AAAA,EAGM,WAAW,CAAC,UAA2C,WAAyB;AAAA,IACtF,MAAM,QAAQ,yCAAyC,KAAK,UAAU,EAAE,cACtE,WACA,SAAS,QACT,SAAS,EACX;AAAA,IACA,KAAK,OAAO,gBAAgB,UAAU,SAAS,cAAc;AAAA,MAC3D,MAAM,IAAI,8BACR,oBACA,mBAAmB,mBAAkB,SAAS,QAAQ,SAAS,EAAE,YACnE;AAAA,IACF;AAAA;AAAA,OAGY,YAAW,CACvB,SACA,KACqC;AAAA,IACrC,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,MAAM,MAAM,KAAK,QAAQ,eAAe;AAAA,MAC5C;AAAA,MACA,cAAc,IAAI;AAAA,MAClB,WAAW,IAAI;AAAA,IACjB,CAAC;AAAA,IACD,OAAO;AAAA,MACL,KAAK,gBAAgB,GAAG;AAAA,MACxB,QAAQ,KAAK,uBAAuB,WAAW,GAAG;AAAA,MAClD,UAAU,gBACR,qBACE,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,WAAW,cAAa,GAAG,CAAC,CAAC,CAC/E,CACF;AAAA,MACA,WAAW,MAAM,eAAe,GAAG,IAAI;AAAA,MACvC,iBAAiB,yCAAyC,KAAK,UAAU,EACtE,oBAAoB,WAAW,IAAI,cAAc,IAAI,SAAS,EAC9D,IAAI,WAAW;AAAA,IACpB;AAAA;AAAA,OAGY,UAAS,CACrB,SACA,KACmC;AAAA,IACnC,MAAM,YAAY,QAAQ,OAAO,OAAO;AAAA,IACxC,MAAM,MAAM,qCAAqC,KAAK,OAAO,EAAE,gBAAgB,WAAW;AAAA,MACxF,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,MACrB,QAAQ,IAAI;AAAA,MACZ,cAAc,IAAI,OAAO;AAAA,MACzB,UAAU,IAAI,OAAO;AAAA,IACvB,CAAC;AAAA,IACD,OAAO;AAAA,MACL,KAAK,gBAAgB,GAAG;AAAA,MACxB,QAAQ,KAAK,qBAAqB,WAAW,GAAG;AAAA,MAChD,UAAU,gBACR,mBACE,KAAK,MAAM,cAAc,IAAI,iBAAiB,WAAW,YAAW,GAAG,CAAC,CAAC,CAC3E,CACF;AAAA,MACA,cAAc,gBACZ,uBACE,KAAK,MAAM,kBAAkB,IAC3B,iBAAiB,WAAW,aAAa,IAAI,QAAQ,IAAI,MAAM,CAAC,CAClE,CACF,CACF;AAAA,MACA,WAAW,MAAM,aAAa,GAAG,IAAI;AAAA,IACvC;AAAA;AAAA,EAGM,aAAa,CACnB,SACA,QACA,QAC+B;AAAA,IAC/B,QAAQ,mBAAmB,IAAI;AAAA,IAC/B,MAAM,MAAM,kBAAiB,QAAQ,MAAM;AAAA,IAC3C,MAAM,WAAW,QAAQ,eAAe,IAAI,GAAG;AAAA,IAC/C,IAAI;AAAA,MAAU,OAAO,gBAAgB,QAAQ;AAAA,IAC7C,MAAM,WAAW,KAAK,qBAAqB,QAAQ,OAAO,OAAO,WAAW,QAAQ,MAAM;AAAA,IAC1F,QAAQ,eAAe,IAAI,KAAK,QAAQ;AAAA,IACxC,OAAO,gBAAgB,QAAQ;AAAA;AAAA,EAGzB,oBAAoB,CAC1B,WACA,QACA,QAC+B;AAAA,IAC/B,MAAM,QAAQ,KAAK,0BAA0B,WAAW,QAAQ,MAAM;AAAA,IACtE,OAAO;AAAA,SACF;AAAA,MACH,iBAAiB,KAAK,0BAA0B,WAAW,QAAQ,MAAM;AAAA,MACzE,UAAU,gBACR,uBACE,KAAK,MAAM,kBAAkB,IAC3B,iBAAiB,WAAW,aAAa,QAAQ,MAAM,CAAC,CAC1D,CACF,CACF;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAC/B,WACA,QACA,QACqF;AAAA,IACrF,MAAM,OAAwB,CAAC;AAAA,IAC/B,qCAAqC,KAAK,OAAO,EAAE,qBACjD,WACA,OAAO,cACP,OAAO,WACP,QACA,CAAC,QAAQ,KAAK,KAAK,GAAG,CACxB;AAAA,IACA,KAAK,KAAK,CAAC,MAAM,UACf,gBAAe,QAAQ,IAAI,CAAC,EAAE,cAAc,gBAAe,QAAQ,KAAK,CAAC,CAAC,CAC5E;AAAA,IACA,MAAM,cAAc,uBAAsB,QAAQ,MAAM;AAAA,IACxD,SAAS,SAAS,EAAG,SAAS,KAAK,QAAQ,UAAU,MAAO;AAAA,MAC1D,MAAM,OAAO,KAAK,MAAM,QAAQ,SAAS,IAAK;AAAA,MAC9C,KAAK,MAAM,gBAAgB,yBAAyB,KAAK,MAAM;AAAA,MAC/D,WAAW,OAAO,MAAM;AAAA,QACtB,qBAAoB,aAAa,aAAa,GAAG,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,IACA,MAAM,YAAY,KAAK,WAAW,IAAI,aAAa,KAAK,EAAG,IAAI;AAAA,IAC/D,OAAO;AAAA,SACF,wBAAuB,WAAW;AAAA,MACrC;AAAA,IACF;AAAA;AAAA,EAGM,yBAAyB,CAC/B,WACA,QACA,QACkC;AAAA,IAClC,IAAI,QAA0C;AAAA,IAC9C,WAAW,UAAU,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,MAC/D,IAAI,OAAO,cAAc,aAAa,OAAO,WAAW;AAAA,QAAU;AAAA,MAClE,WAAW,OAAO,OAAO,aAAa,OAAO,GAAG;AAAA,QAC9C,IACE,IAAI,UAAU,SAAS,UACvB,cAAa,IAAI,UAAU,IAAI,MAAM,MAAM,cAAa,MAAM,KAC9D,IAAI,UAAU,IAAI,WAAW,QAC7B;AAAA,UACA;AAAA,QACF;AAAA,QACA,IAAI,OAAO;AAAA,UACT,MAAM,IAAI,8BACR,0BACA,8DAA8D,OAAO,gBAAgB,UACvF;AAAA,QACF;AAAA,QACA,QAAQ,aACN,OAAO,OAAO,cACd,OAAO,mBACP,GACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,gBAAgB,KAAK;AAAA;AAAA,EAGtB,sBAAsB,CAC5B,WACA,KACoC;AAAA,IACpC,MAAM,QAAQ,KAAK,iBAAiB,WAAW,qBAAoB,EAAE,MAAM,UAAU,IAAI,CAAC,CAAC;AAAA,IAC3F,OAAO,OAAO,UAAU,SAAS,WAAY,QAAwC;AAAA;AAAA,EAG/E,oBAAoB,CAC1B,WACA,KACkC;AAAA,IAClC,MAAM,QAAQ,KAAK,iBAAiB,WAAW,qBAAoB,EAAE,MAAM,QAAQ,IAAI,CAAC,CAAC;AAAA,IACzF,OAAO,OAAO,UAAU,SAAS,SAAU,QAAsC;AAAA;AAAA,EAG3E,gBAAgB,CAAC,WAAmB,WAAiD;AAAA,IAC3F,IAAI,QAAsC;AAAA,IAC1C,WAAW,UAAU,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,MAC/D,IAAI,OAAO,cAAc,aAAa,OAAO,WAAW;AAAA,QAAU;AAAA,MAClE,MAAM,MAAM,OAAO,aAAa,IAAI,SAAS;AAAA,MAC7C,IAAI,CAAC;AAAA,QAAK;AAAA,MACV,IAAI;AAAA,QACF,MAAM,IAAI,8BACR,0BACA,kCAAkC,YACpC;AAAA,MACF,QAAQ,aAAa,OAAO,OAAO,cAAc,OAAO,mBAAmB,GAAG;AAAA,IAChF;AAAA,IACA,OAAO,gBAAgB,KAAK;AAAA;AAAA,EAGtB,gBAAgB,CACtB,SACA,SAC4B;AAAA,IAC5B,IAAI,QAAQ,WAAW;AAAA,MAAG,OAAO,CAAC;AAAA,IAClC,QAAQ,0BAA0B,KAAK,uBAAuB,QAAQ,OAAO,OAAO,SAAS;AAAA,IAC7F,MAAM,WAAW,IAAI;AAAA,IACrB,WAAW,UAAU,SAAS;AAAA,MAC5B,WAAW,OAAO,QAAQ,sBAAsB,IAAI,cAAa,MAAM,CAAC,KAAK,CAAC,GAAG;AAAA,QAC/E,SAAS,IAAI,gBAAe,GAAG,GAAG,GAAG;AAAA,MACvC;AAAA,IACF;AAAA,IACA,OAAO,CAAC,GAAG,SAAS,QAAQ,CAAC,EAC1B,KAAK,EAAE,QAAQ,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,IAAI,SAAS,GAAG;AAAA;AAAA,EAGjB,sBAAsB,CAAC,WAA4D;AAAA,IACzF,MAAM,UAAU,IAAI;AAAA,IACpB,MAAM,WAAW,CAAC,QAA+B;AAAA,MAC/C,MAAM,UAAU,gBAAe,GAAG;AAAA,MAClC,WAAW,YAAY,CAAC,IAAI,QAAQ,IAAI,MAAM,GAAG;AAAA,QAC/C,MAAM,MAAM,cAAa,QAAQ;AAAA,QACjC,MAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK,IAAI;AAAA,QACtC,MAAM,IAAI,SAAS,gBAAgB,GAAG,CAAC;AAAA,QACvC,QAAQ,IAAI,KAAK,KAAK;AAAA,MACxB;AAAA;AAAA,IAEF,qCAAqC,KAAK,OAAO,EAAE,gBAAgB,WAAW,CAAC,QAC7E,SAAS,QAAQ,GAAG,CAAC,CACvB;AAAA,IACA,WAAW,YAAY,KAAK,MAAM,cAAc,OAAO,GAAG;AAAA,MACxD,IAAI,SAAS,cAAc;AAAA,QAAW,SAAS,SAAS,GAAG;AAAA,IAC7D;AAAA,IACA,WAAW,YAAY,KAAK,MAAM,kBAAkB,OAAO,GAAG;AAAA,MAC5D,IAAI,SAAS,cAAc;AAAA,QAAW;AAAA,MACtC,SAAS;AAAA,QACP,QAAQ,SAAS,IAAI;AAAA,QACrB,QAAQ,SAAS,IAAI;AAAA,QACrB,QAAQ,SAAS,MAAM;AAAA,MACzB,CAAC;AAAA,IACH;AAAA,IACA,WAAW,UAAU,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,MAC/D,IAAI,OAAO,cAAc,aAAa,OAAO,WAAW;AAAA,QAAU;AAAA,MAClE,WAAW,OAAO,OAAO,aAAa,OAAO,GAAG;AAAA,QAC9C,IAAI,IAAI,UAAU,SAAS;AAAA,UAAQ,SAAS,IAAI,UAAU,GAAG;AAAA,MAC/D;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,IAAI;AAAA,IAClB,YAAY,WAAW,SAAS,SAAS;AAAA,MACvC,MAAM,IACJ,WACA,CAAC,GAAG,KAAK,QAAQ,CAAC,EACf,KAAK,EAAE,QAAQ,WAAW,KAAK,cAAc,KAAK,CAAC,EACnD,IAAI,IAAI,SAAS,GAAG,CACzB;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAEX;;;ACvxCO,MAAM,8BAA+D;AAAA,EAEvD;AAAA,EACA;AAAA,EAFnB,WAAW,CACQ,OACA,kBACjB;AAAA,IAFiB;AAAA,IACA;AAAA;AAAA,OAGb,MAAK,CAAC,OAA+E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA;AAAA,EAGtD,aAAa,CAAC,OAAsE;AAAA,IAC1F,eAAe,MAAM,WAAW,4BAA4B;AAAA,IAC5D,oBAAoB,MAAM,KAAK;AAAA,IAC/B,MAAM,MAAM,gBAAgB,MAAM,KAAK,4BAA4B;AAAA,IACnE,MAAM,iBAAiB,gBAAgB,MAAM,gBAAgB,8BAA8B;AAAA,IAC3F,eAAe,MAAM,SAAS,0BAA0B;AAAA,IACxD,IAAI,kBAAkB,KAAK;AAAA,MACzB,MAAM,IAAI,gCACR,iEACF;AAAA,IACF;AAAA,IACA,MAAM,OAA+B,CAAC;AAAA,IACtC,WAAW,OAAO,KAAK,MAAM,OAAO,OAAO,GAAG;AAAA,MAC5C,IAAI,IAAI,SAAS,cAAc,MAAM;AAAA,QAAW;AAAA,MAChD,kBAAkB,GAAG;AAAA,MACrB,IAAI,IAAI,gBAAgB,QAAQ,KAAK,MAAM,IAAI,WAAW,IAAI;AAAA,QAAK;AAAA,MACnE,IAAI,IAAI,mBAAmB,QAAQ,KAAK,MAAM,IAAI,cAAc,IAAI;AAAA,QAAK;AAAA,MACzE,cAAc,MAAM,KAAK,MAAM,OAAO,gBAAgB;AAAA,IACxD;AAAA,IACA,OAAO,KAAK,IAAI,CAAC,QAAQ;AAAA,MACvB,MAAM,UAAoC;AAAA,WACrC;AAAA,QACH,UAAU,IAAI,WAAW;AAAA,QACzB,SAAS,MAAM;AAAA,QACf,gBAAgB,MAAM;AAAA,MACxB;AAAA,MACA,KAAK,MAAM,OAAO,IAAI,UAAU,MAAM,WAAW,IAAI,SAAS,EAAE,GAAG,gBAAgB,OAAO,CAAC;AAAA,MAC3F,OAAO,gBAAgB,OAAO;AAAA,KAC/B;AAAA;AAAA,OAGG,cAAa,CAAC,OAAwD;AAAA,IAC1E,MAAM,KAAK,iBAAiB,MAAM,KAAK,sBAAsB,KAAK,CAAC;AAAA;AAAA,EAG7D,qBAAqB,CAAC,OAA+C;AAAA,IAC3E,eAAe,MAAM,WAAW,4BAA4B;AAAA,IAC5D,eAAe,MAAM,SAAS,0BAA0B;AAAA,IACxD,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,IAChE,MAAM,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,KAAK,MAAM,OAAO;AAAA,IAC9E,YAAY,KAAK,QAAQ,MAAM;AAAA,MAC7B,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,WACtB;AAAA,QACH,aAAa,MAAM;AAAA,QACnB,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA;AAAA,OAGI,WAAU,CAAC,OAA0D;AAAA,IACzE,MAAM,KAAK,iBAAiB,MAAM,KAAK,mBAAmB,KAAK,CAAC;AAAA;AAAA,EAG1D,kBAAkB,CAAC,OAAiD;AAAA,IAC1E,eAAe,MAAM,WAAW,4BAA4B;AAAA,IAC5D,eAAe,MAAM,SAAS,0BAA0B;AAAA,IACxD,gBAAgB,MAAM,aAAa,6BAA6B;AAAA,IAChE,MAAM,OAAO,KAAK,mBAAmB,MAAM,WAAW,MAAM,KAAK,MAAM,OAAO;AAAA,IAC9E,YAAY,KAAK,QAAQ,MAAM;AAAA,MAC7B,KAAK,MAAM,OAAO,IAAI,KAAK;AAAA,WACtB;AAAA,QACH,aAAa,MAAM;AAAA,QACnB,aAAa,MAAM,YAAY,YAAY,IAAI,cAAc,gBAAgB,MAAM,OAAO;AAAA,QAC1F,SAAS;AAAA,QACT,gBAAgB;AAAA,MAClB,CAAC;AAAA,IACH;AAAA;AAAA,OAGI,eAAc,CAAC,OAA2D;AAAA,IAC9E,OAAO,KAAK,iBAAiB,MAAM,KAAK,uBAAuB,KAAK,CAAC;AAAA;AAAA,OAGjE,UAAS,CAAC,OAAqE;AAAA,IACnF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,4BAA4B;AAAA,MAC5D,IAAI,eAAe;AAAA,MACnB,IAAI,kBAAiC;AAAA,MACrC,IAAI,gBAAgB;AAAA,MACpB,IAAI,cAAc;AAAA,MAElB,WAAW,OAAO,KAAK,MAAM,OAAO,OAAO,GAAG;AAAA,QAC5C,IAAI,IAAI,SAAS,cAAc,MAAM,aAAa,IAAI,gBAAgB;AAAA,UAAM;AAAA,QAC5E,gBAAgB;AAAA,QAChB,IAAI,IAAI,WAAW;AAAA,UAAG,iBAAiB;AAAA,QACvC,cAAc,KAAK,IAAI,aAAa,IAAI,QAAQ;AAAA,QAChD,IAAI,oBAAoB,QAAQ,IAAI,YAAY,iBAAiB;AAAA,UAC/D,kBAAkB,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,MAEA,OAAO,EAAE,cAAc,iBAAiB,eAAe,YAAY;AAAA,KACpE;AAAA;AAAA,EAGK,sBAAsB,CAAC,OAAkD;AAAA,IAC/E,eAAe,MAAM,WAAW,4BAA4B;AAAA,IAC5D,oBAAoB,MAAM,KAAK;AAAA,IAC/B,MAAM,SAAS,gBAAgB,MAAM,iBAAiB,8BAA8B;AAAA,IACpF,MAAM,OAAyC,CAAC;AAAA,IAChD,WAAW,SAAS,KAAK,MAAM,OAAO,QAAQ,GAAG;AAAA,MAC/C,SAAS,OAAO;AAAA,MAChB,IACE,IAAI,SAAS,cAAc,MAAM,aACjC,IAAI,gBAAgB,QACpB,KAAK,MAAM,IAAI,WAAW,KAAK,QAC/B;AAAA,QACA;AAAA,MACF;AAAA,MACA,cAAc,MAAM,OAAO,MAAM,OAAO,IAAI,UAAU,WACpD,qBAAqB,MAAM,KAAK,CAClC;AAAA,IACF;AAAA,IACA,YAAY,QAAQ;AAAA,MAAM,KAAK,MAAM,OAAO,OAAO,GAAG;AAAA,IACtD,OAAO,KAAK;AAAA;AAAA,EAGN,YAAY,CAAC,KAAa,SAAiB;AAAA,IACjD,MAAM,MAAM,KAAK,MAAM,OAAO,IAAI,GAAG;AAAA,IACrC,IAAI,CAAC,OAAO,IAAI,YAAY,WAAW,IAAI,mBAAmB,MAAM;AAAA,MAClE,MAAM,IAAI,8BACR,gBACA,uCACF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,kBAAkB,CACxB,WACA,KACA,SAC2F;AAAA,IAC3F,MAAM,OAAO,IAAI;AAAA,IACjB,OAAO,IAAI,IAAI,CAAC,OAAO;AAAA,MACrB,eAAe,IAAI,0BAA0B;AAAA,MAC7C,IAAI,KAAK,IAAI,EAAE,GAAG;AAAA,QAChB,MAAM,IAAI,gCACR,8CAA8C,MAChD;AAAA,MACF;AAAA,MACA,KAAK,IAAI,EAAE;AAAA,MACX,MAAM,MAAM,UAAU,WAAW,EAAE;AAAA,MACnC,OAAO,CAAC,KAAK,KAAK,aAAa,KAAK,OAAO,CAAC;AAAA,KAC7C;AAAA;AAEL;AASA,SAAS,gBAAgB,CACvB,MACA,OACQ;AAAA,EACR,OACE,KAAK,UAAU,cAAc,MAAM,SAAS,KAC5C,KAAK,SAAS,SAAS,cAAc,MAAM,SAAS,QAAQ,KAC5D,KAAK,SAAS,gBAAgB,MAAM,SAAS;AAAA;AAIjD,SAAS,oBAAoB,CAC3B,MACA,OACQ;AAAA,EACR,QACG,KAAK,eAAe,IAAI,cAAc,MAAM,eAAe,EAAE,KAC9D,KAAK,SAAS,GAAG,cAAc,MAAM,SAAS,EAAE;AAAA;AAIpD,SAAS,mBAAmB,CAAC,OAAqB;AAAA,EAChD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAAA,IAC9C,MAAM,IAAI,gCAA+B,yCAAyC;AAAA,EACpF;AAAA;AAGF,SAAS,iBAAiB,CAAC,KAGlB;AAAA,EACP,IAAK,IAAI,YAAY,UAAW,IAAI,mBAAmB,OAAO;AAAA,IAC5D,MAAM,IAAI,8BACR,gBACA,sDACF;AAAA,EACF;AAAA;;;ACtLK,MAAM,8BAA+D;AAAA,EAEvD;AAAA,EACA;AAAA,EACA;AAAA,EAHnB,WAAW,CACQ,OACA,kBACA,iBACjB;AAAA,IAHiB;AAAA,IACA;AAAA,IACA;AAAA;AAAA,OAGb,qBAAoB,CACxB,OAC+B;AAAA,IAC/B,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,wBAAiB,KAAK;AAAA,MACtB,MAAM,KAAK,uBAAuB,KAAK;AAAA,MACvC,MAAM,MAAM,yBACV,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR;AAAA,MACA,MAAM,WAAW,KAAK,MAAM,uBAAuB,IAAI,GAAG;AAAA,MAC1D,IAAI,UAAU;AAAA,QACZ,IAAI,wBAAuB,4BAA4B,QAAQ,GAAG,KAAK,GAAG;AAAA,UACxE,OAAO,4BAA4B,QAAQ;AAAA,QAC7C;AAAA,QACA,MAAM,gBACJ,2BAA2B,MAAM,qEACnC;AAAA,MACF;AAAA,MAEA,MAAM,cAAc,KAAK,kBACvB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,UAAU,eAClB;AAAA,MACA,IAAI,YAAY,SAAS,GAAG;AAAA,QAC1B,MAAM,gBACJ,mBAAmB,MAAM,UAAU,yGACrC;AAAA,MACF;AAAA,MAEA,MAAM,kBAAiD;AAAA,QACrD,WAAW,MAAM;AAAA,QACjB,QAAQ,gBAAgB,MAAM,MAAM;AAAA,QACpC,mBAAmB,MAAM;AAAA,QACzB,iBAAiB,MAAM,UAAU;AAAA,QACjC,gBAAgB,MAAM;AAAA,QACtB,UAAU,MAAM;AAAA,QAChB,QAAQ;AAAA,QACR,gBAAgB,MAAM,UAAU;AAAA,QAChC,gBAAgB,gBAAgB,MAAM,cAAc;AAAA,QACpD,oBAAoB,MAAM;AAAA,QAC1B,eAAe,MAAM;AAAA,QACrB,kBAAkB,MAAM;AAAA,QACxB,WAAW;AAAA,QACX,gBAAgB;AAAA,QAChB,WAAW,MAAM;AAAA,QACjB,SAAS;AAAA,QACT,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,WAAW,MAAM;AAAA,QACjB,cAAc,IAAI;AAAA,QAClB,cAAc,IAAI;AAAA,QAClB,cAAc,IAAI;AAAA,MACpB;AAAA,MACA,KAAK,MAAM,uBAAuB,IAAI,KAAK,eAAe;AAAA,MAC1D,OAAO,4BAA4B,eAAe;AAAA,KACnD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA6D;AAAA,IAC3E,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,2BAAoB,KAAK;AAAA,MACzB,MAAM,KAAK,uBAAuB,KAAK;AAAA,MACvC,MAAM,kBAAkB,KAAK,uBAAuB,KAAK;AAAA,MACzD,4BAA2B,4BAA4B,eAAe,GAAG,MAAM,SAAS;AAAA,MACxF,IAAI,gBAAgB,WAAW,WAAW;AAAA,QACxC,MAAM,gBACJ,2BAA2B,MAAM,0BAA0B,gBAAgB,iCAC7E;AAAA,MACF;AAAA,MACA,OAAO,oBAAoB,iBAAiB,MAAM,IAAI;AAAA,KACvD;AAAA;AAAA,OAGG,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,2BAAoB,KAAK;AAAA,MACzB,iBAAyB,MAAM,SAAS,gBAAgB;AAAA,MACxD,YAAY,MAAM,WAAW,mBAAmB;AAAA,MAChD,YAAY,MAAM,gBAAgB,wBAAwB;AAAA,MAC1D,MAAM,KAAK,uBAAuB,KAAK;AAAA,MACvC,MAAM,kBAAkB,KAAK,uBAAuB,KAAK;AAAA,MACzD,4BAA2B,4BAA4B,eAAe,GAAG,MAAM,SAAS;AAAA,MAExF,IAAI,gBAAgB,WAAW,SAAS;AAAA,QACtC,IACE,gBAAgB,cAAc,MAAM,aACpC,gBAAgB,mBAAmB,MAAM,kBACzC,gBAAgB,YAAY,MAAM,SAClC;AAAA,UACA,OAAO,4BAA4B,eAAe;AAAA,QACpD;AAAA,QACA,MAAM,gBACJ,2BAA2B,MAAM,oEACnC;AAAA,MACF;AAAA,MACA,IAAI,gBAAgB,WAAW,WAAW;AAAA,QACxC,MAAM,gBACJ,2BAA2B,MAAM,8CAA8C,gBAAgB,qBACjG;AAAA,MACF;AAAA,MACA,gBAAgB,MAAM,SAAS,gBAAgB,WAAW,kBAAkB,WAAW;AAAA,MACvF,kBAAkB,iBAAiB,MAAM,WAAW,MAAM,cAAc;AAAA,MAExE,MAAM,QAAuC;AAAA,WACxC;AAAA,QACH,QAAQ;AAAA,QACR,WAAW,MAAM;AAAA,QACjB,gBAAgB,MAAM;AAAA,QACtB,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,MACnB;AAAA,MACA,KAAK,MAAM,uBAAuB,IAChC,yBACE,MAAM,WACN,MAAM,OAAO,cACb,MAAM,iBACR,GACA,KACF;AAAA,MACA,OAAO,4BAA4B,KAAK;AAAA,KACzC;AAAA;AAAA,OAGG,UAAS,CAAC,OAA2E;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,qBAAuB,KAAK;AAAA,MAC5B,MAAM,SAAS,CAAC,GAAG,KAAK,MAAM,uBAAuB,OAAO,CAAC,EAAE,OAC7D,CAAC,oBACC,gBAAgB,cAAc,MAAM,aACpC,gBAAgB,OAAO,iBAAiB,MAAM,OAAO,gBACrD,gBAAgB,WAAW,QAC/B;AAAA,MACA,IAAI,OAAO,SAAS,GAAG;AAAA,QACrB,MAAM,gBACJ,WAAW,MAAM,OAAO,yDAC1B;AAAA,MACF;AAAA,MACA,OAAO,OAAO,KAAK,4BAA4B,OAAO,EAAE,IAAI;AAAA,KAC7D;AAAA;AAAA,OAKG,QAAO,CAAC,OAAgF;AAAA,IAC5F,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,qBAAuB,KAAK;AAAA,MAC5B,+BAA8B,MAAM,UAAU,iBAAiB,MAAM,UAAU,cAAc;AAAA,MAC7F,iBAAyB,MAAM,aAAa,oBAAoB;AAAA,MAChE,MAAM,KAAK,uBAAuB,KAAK;AAAA,MACvC,OAAO,MAAM,SAAS,cAClB,KAAK,iBAAiB,KAAK,IAC3B,KAAK,kBAAkB,KAAK;AAAA,KACjC;AAAA;AAAA,OAGG,gBAAe,CACnB,OACsD;AAAA,IACtD,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,iBAAyB,MAAM,gBAAgB,gCAAgC;AAAA,MAC/E,IAAI,CAAC,OAAO,cAAc,MAAM,KAAK,KAAK,MAAM,SAAS,GAAG;AAAA,QAC1D,MAAM,IAAI,gCACR,gEACF;AAAA,MACF;AAAA,MAEA,MAAM,aAAwD,CAAC;AAAA,MAC/D,WAAW,SAAS,KAAK,MAAM,uBAAuB,QAAQ,GAAG;AAAA,QAC/D,MAAM,kBAAkB,MAAM;AAAA,QAC9B,IACE,gBAAgB,cAAc,MAAM,aACnC,gBAAgB,WAAW,gBAAgB,gBAAgB,WAAW,eACvE,gBAAgB,eAAe,QAC/B,gBAAgB,cAAc,MAAM,gBACpC;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAc,YAAY,OAAO,MAAM,OAAO,+BAA+B;AAAA,MAC/E;AAAA,MAEA,IAAI,YAAY,MAAM;AAAA,MACtB,IAAI,cAAc;AAAA,MAClB,IAAI,0BAA0B;AAAA,MAC9B,YAAY,KAAK,cAAc,YAAY;AAAA,QACzC,IAAI,cAAc;AAAA,UAAG;AAAA,QACrB,MAAM,UAAU,KAAK,MAAM,uBAAuB,IAAI,GAAG;AAAA,QACzD,IAAI,YAAY;AAAA,UAAW;AAAA,QAI3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,QAAQ,aAAa,MAAM;AAAA,QAC3B,WAAW,aAAa,QAAQ,aAAa,KAAK,GAAG;AAAA,UACnD,IAAI,cAAc;AAAA,YAAG;AAAA,UACrB,QAAQ,aAAa,OAAO,SAAS;AAAA,UACrC,eAAe;AAAA,UACf,aAAa;AAAA,QACf;AAAA,QACA,IAAI,QAAQ,aAAa,SAAS,KAAK,YAAY,GAAG;AAAA,UACpD,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,UAC5C,2BAA2B;AAAA,UAC3B,aAAa;AAAA,QACf;AAAA,MACF;AAAA,MACA,OAAO,EAAE,aAAa,wBAAwB;AAAA,KAC/C;AAAA;AAAA,OAGG,kBAAiB,CACrB,OAC+C;AAAA,IAC/C,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,eAAe,MAAM,WAAW,oCAAoC;AAAA,MACpE,IAAI,QAAQ;AAAA,MACZ,IAAI,mBAAkC;AAAA,MACtC,WAAW,mBAAmB,KAAK,MAAM,uBAAuB,OAAO,GAAG;AAAA,QACxE,IACE,gBAAgB,cAAc,MAAM,aACnC,gBAAgB,WAAW,gBAAgB,gBAAgB,WAAW,eACvE,gBAAgB,eAAe,MAC/B;AAAA,UACA;AAAA,QACF;AAAA,QACA,SAAS;AAAA,QACT,IAAI,qBAAqB,QAAQ,gBAAgB,aAAa,kBAAkB;AAAA,UAC9E,mBAAmB,gBAAgB;AAAA,QACrC;AAAA,MACF;AAAA,MACA,OAAO,EAAE,OAAO,iBAAiB;AAAA,KAClC;AAAA;AAAA,OAGW,uBAAsB,CAClC,OAOe;AAAA,IACf,MAAM,KAAK,gBAAgB;AAAA,MACzB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,WAAW,MAAM;AAAA,SACb,oBAAoB,QAAQ,EAAE,UAAU,+BAA8B,KAAK,EAAE,IAAI,CAAC;AAAA,IACxF,CAAC;AAAA;AAAA,EAGK,sBAAsB,CAAC,OAIG;AAAA,IAChC,MAAM,kBAAkB,KAAK,MAAM,uBAAuB,IACxD,yBAAyB,MAAM,WAAW,MAAM,OAAO,cAAc,MAAM,iBAAiB,CAC9F;AAAA,IACA,IAAI,CAAC,iBAAiB;AAAA,MACpB,MAAM,gBAAe,2BAA2B,MAAM,oCAAoC;AAAA,IAC5F;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,gBAAgB,CACtB,OACsB;AAAA,IACtB,MAAM,kBAAkB,KAAK,uBAAuB,KAAK;AAAA,IACzD,IAAI,gBAAgB,WAAW,aAAa;AAAA,MAC1C,IACE,gBAAgB,oBAAoB,MAAM,UAAU,mBACpD,gBAAgB,eAAe,MAAM,aACrC;AAAA,QACA,OAAO,4BAA4B,eAAe;AAAA,MACpD;AAAA,MACA,MAAM,gBACJ,2BAA2B,MAAM,2EACnC;AAAA,IACF;AAAA,IACA,4BAA2B,4BAA4B,eAAe,GAAG,MAAM,SAAS;AAAA,IACxF,IAAI,gBAAgB,WAAW,aAAa,gBAAgB,WAAW,SAAS;AAAA,MAC9E,MAAM,gBACJ,2BAA2B,MAAM,8CAA8C,gBAAgB,yBACjG;AAAA,IACF;AAAA,IACA,OAAO,KAAK,sBAAsB,iBAAiB,MAAM,WAAW;AAAA;AAAA,EAG9D,iBAAiB,CAAC,OAAuE;AAAA,IAC/F,MAAM,aAAa,KAAK,kBACtB,MAAM,WACN,MAAM,OAAO,cACb,MAAM,UAAU,eAClB;AAAA,IACA,IACE,WAAW,KACT,IAAI,qBAAqB,gBAAgB,mBAAmB,MAAM,UAAU,cAC9E,GACA;AAAA,MACA,MAAM,gBACJ,mBAAmB,MAAM,UAAU,uFACrC;AAAA,IACF;AAAA,IACA,IAAI,WAAW,SAAS,GAAG;AAAA,MACzB,MAAM,gBACJ,mBAAmB,MAAM,UAAU,oEACrC;AAAA,IACF;AAAA,IACA,MAAM,YAAY,WAAW,KAAK;AAAA,IAClC,OAAO,YAAY,KAAK,sBAAsB,WAAW,MAAM,WAAW,IAAI;AAAA;AAAA,EAGxE,qBAAqB,CAC3B,iBACA,aACsB;AAAA,IACtB,gBAAgB,aAAa,gBAAgB,WAAW,sBAAsB,WAAW;AAAA,IACzF,IAAI,gBAAgB,YAAY,MAAM;AAAA,MACpC,gBAAgB,aAAa,gBAAgB,SAAS,sBAAsB,SAAS;AAAA,IACvF;AAAA,IACA,MAAM,YAA2C;AAAA,SAC5C;AAAA,MACH,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AAAA,IACA,KAAK,MAAM,uBAAuB,IAChC,yBACE,gBAAgB,WAChB,gBAAgB,OAAO,cACvB,gBAAgB,iBAClB,GACA,SACF;AAAA,IACA,OAAO,4BAA4B,SAAS;AAAA;AAAA,EAGtC,iBAAiB,CACvB,WACA,UACA,iBAC2C;AAAA,IAC3C,OAAO,CAAC,GAAG,KAAK,MAAM,uBAAuB,QAAQ,CAAC,EAAE,OACtD,IAAI,qBACF,gBAAgB,cAAc,aAC9B,gBAAgB,OAAO,iBAAiB,YACxC,gBAAgB,oBAAoB,oBACnC,gBAAgB,WAAW,aAAa,gBAAgB,WAAW,QACxE;AAAA;AAEJ;AAEA,SAAS,mBAAmB,CAC1B,iBACA,MACuB;AAAA,EACvB,IAAI,WAAW;AAAA,EACf,IAAI,YAAY;AAAA,EAChB,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,kBAAkB,IAAI;AAAA,EAC5B,MAAM,kBAAkB,IAAI;AAAA,EAC5B,WAAW,OAAO,MAAM;AAAA,IACtB,uBAAsB,gBAAgB,gBAAgB,GAAG;AAAA,IAEzD,MAAM,UAAU,qBAAoB,IAAI,IAAI;AAAA,IAC5C,MAAM,kBACJ,gBAAgB,aAAa,IAAI,OAAO,KAAK,gBAAgB,IAAI,OAAO;AAAA,IAC1E,IAAI,oBAAoB,aAAa,oBAAoB,IAAI,gBAAgB;AAAA,MAC3E,MAAM,IAAI,gCACR,uCAAuC,wCACzC;AAAA,IACF;AAAA,IACA,MAAM,eACJ,gBAAgB,aAAa,IAAI,IAAI,cAAc,KACnD,gBAAgB,IAAI,IAAI,cAAc;AAAA,IACxC,IAAI,iBAAiB,aAAa,iBAAiB,SAAS;AAAA,MAC1D,MAAM,IAAI,gCACR,iDAAiD,IAAI,kCACvD;AAAA,IACF;AAAA,IAEA,MAAM,YAAY,qBAAoB,IAAI,SAAS;AAAA,IACnD,MAAM,WAAW,gBAAgB,aAAa,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS;AAAA,IACrF,IAAI,UAAU;AAAA,MACZ,IAAI,qBAAoB,QAAQ,MAAM,qBAAoB,GAAG,GAAG;AAAA,QAC9D,aAAa;AAAA,QACb;AAAA,MACF;AAAA,MACA,MAAM,IAAI,gCACR,kDAAkD,YACpD;AAAA,IACF;AAAA,IAEA,gBAAgB,IAAI,SAAS,IAAI,cAAc;AAAA,IAC/C,gBAAgB,IAAI,IAAI,gBAAgB,OAAO;AAAA,IAC/C,QAAQ,IAAI,WAAW,gBAAgB,GAAG,CAAC;AAAA,IAC3C,YAAY;AAAA,EACd;AAAA,EAEA,YAAY,SAAS,YAAY,iBAAiB;AAAA,IAChD,gBAAgB,aAAa,IAAI,SAAS,OAAO;AAAA,EACnD;AAAA,EACA,YAAY,SAAS,YAAY,iBAAiB;AAAA,IAChD,gBAAgB,aAAa,IAAI,SAAS,OAAO;AAAA,EACnD;AAAA,EACA,YAAY,WAAW,QAAQ;AAAA,IAAS,gBAAgB,aAAa,IAAI,WAAW,GAAG;AAAA,EACvF,OAAO,EAAE,UAAU,UAAU;AAAA;AAG/B,SAAS,iBAAiB,CACxB,iBACA,WACA,gBACM;AAAA,EACN,IACE,gBAAgB,aAAa,SAAS,aACtC,gBAAgB,aAAa,SAAS,aACtC,gBAAgB,aAAa,SAAS,gBACtC;AAAA,IACA,MAAM,IAAI,gCACR,mEACF;AAAA,EACF;AAAA,EACA,SAAS,UAAU,EAAG,UAAU,WAAW,WAAW,GAAG;AAAA,IACvD,IAAI,CAAC,gBAAgB,aAAa,IAAI,OAAO,GAAG;AAAA,MAC9C,MAAM,IAAI,gCACR,iEAAiE,UACnE;AAAA,IACF;AAAA,EACF;AAAA,EACA,oBAAoB,eAAe;AAAA;AAGrC,SAAS,mBAAmB,CAAC,iBAAsD;AAAA,EACjF,MAAM,aAAa,IAAI;AAAA,EACvB,WAAW,OAAO,gBAAgB,aAAa,OAAO,GAAG;AAAA,IACvD,MAAM,UAAU,qBAAoB,IAAI,IAAI;AAAA,IAC5C,MAAM,OAAO,WAAW,IAAI,OAAO,KAAK,CAAC;AAAA,IACzC,KAAK,KAAK,GAAG;AAAA,IACb,WAAW,IAAI,SAAS,IAAI;AAAA,EAC9B;AAAA,EAEA,WAAW,WAAW,gBAAgB,aAAa,KAAK,GAAG;AAAA,IACzD,MAAM,OAAO,WAAW,IAAI,OAAO,KAAK,CAAC;AAAA,IACzC,MAAM,QAAQ,KAAK;AAAA,IACnB,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,IAAI,gCAA+B,eAAe,mCAAmC;AAAA,IAC7F;AAAA,IACA,MAAM,OAAO,MAAM;AAAA,IAEnB,IAAI,gBAAgB,mBAAmB,QAAQ;AAAA,MAC7C,IACE,KAAK,WAAW,KAChB,KAAK,SAAS,UACd,MAAM,UAAU,SAAS,UACzB,qBAAoB,MAAM,SAAS,MAAM,SACzC;AAAA,QACA,MAAM,IAAI,gCACR,wBAAwB,2DAC1B;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,SAAS,UAAU;AAAA,MAC1B,MAAM,IAAI,gCACR,0BAA0B,4BAC5B;AAAA,IACF;AAAA,IACA,MAAM,kBAAkB,KAAK,OAC3B,CAAC,QAAQ,IAAI,UAAU,SAAS,YAAY,qBAAoB,IAAI,SAAS,MAAM,OACrF;AAAA,IACA,MAAM,sBAAsB,KAAK,KAAK,CAAC,QAAQ;AAAA,MAC7C,IAAI,IAAI,UAAU,SAAS;AAAA,QAAU,OAAO,qBAAoB,IAAI,SAAS,MAAM;AAAA,MACnF,OAAO,qBAAoB,EAAE,MAAM,UAAU,KAAK,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM;AAAA,KACnF;AAAA,IACD,IAAI,gBAAgB,WAAW,KAAK,qBAAqB;AAAA,MACvD,MAAM,IAAI,gCACR,0BAA0B,+FAC5B;AAAA,IACF;AAAA,EACF;AAAA;AAGF,SAAS,WAAW,CAAC,OAAe,OAAqB;AAAA,EACvD,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC7C,MAAM,IAAI,gCAA+B,GAAG,2CAA2C;AAAA,EACzF;AAAA;AAGF,SAAS,eAAe,CACtB,OACA,SACA,OACA,cACM;AAAA,EACN,IAAI,QAAQ,SAAS;AAAA,IACnB,MAAM,IAAI,gCAA+B,GAAG,+BAA+B,eAAe;AAAA,EAC5F;AAAA;AAGF,SAAS,+BAA+B,IACnC,UACA,QACK;AAAA,EACR,QACG,KAAK,cAAc,IAAI,cAAc,MAAM,cAAc,EAAE,KAC5D,KAAK,OAAO,aAAa,cAAc,MAAM,OAAO,YAAY,KAChE,KAAK,kBAAkB,cAAc,MAAM,iBAAiB;AAAA;;;AC3iBhE,IAAM,kBAAkB,IAAI;AAErB,SAAS,6CAA6C,CAC3D,SACA,SACM;AAAA,EACN,gBAAgB,IAAI,SAAS,OAAO;AAAA;;;ACiB/B,MAAM,wBAAmD;AAAA,EAC7C,QAAQ,4BAA4B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACD,YAA8C,CAAC;AAAA,EACtC,iBAAwD;AAAA,IACvE,cAAc,CAAC,UAAU,KAAK,aAAa,KAAK;AAAA,IAChD,UAAU,MAAM,KAAK,SAAS;AAAA,EAChC;AAAA,EAEA,WAAW,CACT,SACA,YACA,SACA;AAAA,IACA,KAAK,UAAU,IAAI,8BAA8B,KAAK,OAAO,QAAQ,gBAAgB;AAAA,IACrF,KAAK,UAAU,IAAI,8BACjB,KAAK,OACL,QAAQ,kBACR,QAAQ,oCACV;AAAA,IACA,KAAK,SAAS,IAAI,8BAA8B,KAAK,OAAO,QAAQ,gBAAgB;AAAA,IACpF,KAAK,mBAAmB,IAAI,uCAC1B,KAAK,OACL,SACA,YACA,QAAQ,qBACR,QAAQ,6BACR,QAAQ,iBACR;AAAA,MACE,YAAY,CAAC,aAAa,KAAK,UAAU,aAAa,QAAQ;AAAA,MAC9D,aAAa,CAAC,UAAU,YAAY,KAAK,UAAU,cAAc,UAAU,OAAO;AAAA,MAClF,eAAe,CAAC,UAAU,SAAS,KAAK,UAAU,gBAAgB,UAAU,IAAI;AAAA,MAChF,aAAa,CAAC,YAAY,KAAK,UAAU,cAAc,OAAO;AAAA,IAChE,CACF;AAAA,IACA,8CAA8C,MAAM,KAAK,cAAc;AAAA;AAAA,EAIzE,YAAY,CAAC,OAA+C;AAAA,IAC1D,KAAK,YAAY;AAAA;AAAA,EAInB,oBAAoB,CAAC,SAAgC;AAAA,IACnD,8CAA8C,SAAS,KAAK,cAAc;AAAA;AAAA,EAG5E,QAAQ,GAAoC;AAAA,IAC1C,OAAO,mBAAmB,KAAK,KAAK;AAAA;AAAA,EAGtC,OAAO,CAAC,UAAiD;AAAA,IACvD,qBAAqB,KAAK,OAAO,QAAQ;AAAA;AAAA,EAG3C,mBAAmB,CAAC,kBAAgC;AAAA,IAClD,KAAK,iBAAiB,sBAAsB,gBAAgB;AAAA;AAEhE;;ACjFO,SAAS,UAAU,CAAC,WAAmB,IAAoB;AAAA,EAChE,OAAO,GAAG,aAAa;AAAA;AAGlB,SAAS,WAAc,CAAC,QAAc;AAAA,EAC3C,OAAO,gBAAgB,MAAM;AAAA;AAGxB,SAAS,gBAAgB,CAAC,OAA4D;AAAA,EAC3F,OAAO,MAAM,aAAa,aAAa,MAAM,SAAS,WAAW;AAAA;AAG5D,SAAS,WAAmC,CACjD,UAC6B;AAAA,EAC7B,OAAO,WAAW,IAAI,IAAI,QAAQ,IAAI;AAAA;AAGjC,SAAS,yBAAiD,CAC/D,QACA,SAKS;AAAA,EACT,IAAI,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,OAAO,MAAM,GAAG;AAAA,IAC5D,OAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,mBAAmB,MAAM;AAAA,EAE3C,IAAI,QAAQ,gBAAgB,YAAY,QAAQ,cAAc;AAAA,IAC5D,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAAQ,iBAAiB,YAAY,QAAQ,eAAe;AAAA,IAC9D,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGF,SAAS,gBAAgB,CAC9B,MACA,OACA,OACQ;AAAA,EACR,MAAM,QAAQ,mBAAmB,IAAI,EAAE,QAAQ,IAAI,mBAAmB,KAAK,EAAE,QAAQ;AAAA,EACrF,IAAI,UAAU,GAAG;AAAA,IACf,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,EACpC;AAAA,EAEA,IAAI,KAAK,OAAO,MAAM,IAAI;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,QAAQ,KAAK,GAAG,cAAc,MAAM,EAAE,IAAI,MAAM,GAAG,cAAc,KAAK,EAAE;AAAA;AAGpF,SAAS,wBAEf,CACC,SACA,UACA,YACoB;AAAA,EACpB,MAAM,iBAAiB,CAAC,GAAG,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC5C,IAAI,eAAe,WAAW,GAAG;AAAA,IAC/B,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,YAAY,IAAI,IAAI,cAAc;AAAA,EACxC,MAAM,kBAAkB,IAAI;AAAA,EAE5B,WAAW,UAAU,SAAS;AAAA,IAC5B,MAAM,UAAU,WAAW,MAAM;AAAA,IACjC,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG;AAAA,MAC3B;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,gBAAgB,IAAI,OAAO;AAAA,IAC3C,IAAI,CAAC,WAAW,iBAAiB,QAAQ,SAAS,MAAM,IAAI,GAAG;AAAA,MAC7D,gBAAgB,IAAI,SAAS,MAAM;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,OAAO,eAAe,QAAQ,CAAC,YAAY;AAAA,IACzC,MAAM,SAAS,gBAAgB,IAAI,OAAO;AAAA,IAC1C,OAAO,SAAS,CAAC,MAAM,IAAI,CAAC;AAAA,GAC7B;AAAA;AAGH,SAAS,kBAAkB,CAAC,QAInB;AAAA,EACP,MAAM,QAAQ,OAAO,aAAa,OAAO;AAAA,EACzC,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,eAAe,OAAO,yCAAyC;AAAA,EACjF;AAAA,EACA,OAAO;AAAA;;;AC5GF,IAAM,8BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACwBA,SAAS,eAAc,CACrB,OACiD;AAAA,EACjD,OAAO,QAAQ,kBAAiB,OAAO,2BAA0B,IAAI;AAAA;AAGvE,SAAS,wBAAwB,CAAC,OAA2B,WAAyB;AAAA,EACpF,IAAI,UAAU,cAAc,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI;AAAA,IAClE,MAAM,IAAI,kBAAiB,uBAAuB,2CAA2C;AAAA,EAC/F;AAAA;AAAA;AAGK,MAAM,4BAAyD;AAAA,EAIvC;AAAA,EAHZ,OAAO,IAAI;AAAA,EACX,QAAQ,IAAI;AAAA,EAE7B,WAAW,CAAkB,YAA8B;AAAA,IAA9B;AAAA;AAAA,EAE7B,QAAQ,GAAuC;AAAA,IAC7C,OAAO;AAAA,MACL,MAAM,gBAAgB,KAAK,IAAI;AAAA,MAC/B,OAAO,gBAAgB,KAAK,KAAK;AAAA,IACnC;AAAA;AAAA,EAGF,OAAO,CAAC,UAAoD;AAAA,IAC1D,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,SAAS,IAAI,GAAG;AAAA,MAC1D,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA,IAEA,KAAK,MAAM,MAAM;AAAA,IACjB,YAAY,KAAK,WAAW,gBAAgB,SAAS,KAAK,GAAG;AAAA,MAC3D,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,IAC5B;AAAA;AAAA,OAGI,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAClC,IAAI,YAAY,CAAC,0CAAyC,UAAU,KAAK,GAAG;AAAA,MAC1E,MAAM,IAAI,kBACR,wBAAwB,MAAM,mCAAmC,MAAM,aACzE;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QACC,IAAI,cAAc,MAAM,aACxB,IAAI,OAAO,MAAM,MACjB,IAAI,gBAAgB,MAAM,WAC9B,GACA;AAAA,MACA,MAAM,IAAI,kBACR,qBAAqB,MAAM,uDAC7B;AAAA,IACF;AAAA,IACA,MAAM,4BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,MAAM,WAAW,IAAI,KAAK,MAAM,YAAY,IAAI,IAAM;AAAA,IACtD,IAAI,UAAU;AAAA,MACZ,MAAM,OAA0B;AAAA,WAC3B;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,OAAO;AAAA,MACT;AAAA,MACA,KAAK,KAAK,IAAI,KAAK,YAAY,IAAI,CAAC;AAAA,MACpC,OAAO,YAAY,IAAI;AAAA,IACzB;AAAA,IAEA,MAAM,SAA4B;AAAA,MAChC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,YAAY,MAAM;AAAA,MAClB,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACtC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAClC,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,kBACR,wBAAwB,MAAM,8BAA8B,MAAM,aACpE;AAAA,IACF;AAAA,IACA,IAAI,SAAS,WAAW,UAAU;AAAA,MAChC,MAAM,IAAI,kBACR,wBAAwB,MAAM,iCAAiC,SAAS,UAC1E;AAAA,IACF;AAAA,IAEA,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK,IAAI,KAAK,YAAY,IAAI,CAAC;AAAA,IACpC,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,IAC1E,MAAM,iBAAiB,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,IACzE,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,MACA,MAAM,IAAI,kBACR,wBAAwB,MAAM,kCAAkC,SAAS,UAC3E;AAAA,IACF;AAAA,IACA,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,IACrD;AAAA,IAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,QAAQ,MAAM,SAAS,YAAY,MAAM,MAAM,IAAI;AAAA,MACnD,OAAO;AAAA,IACT,IACA;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,gBAAe,MAAM,KAAK;AAAA,IACnC;AAAA,IAEN,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,UAAS,CAAC,OAAkE;AAAA,IAChF,MAAM,cAAc,KAAK,0BAA0B,MAAM,WAAW,MAAM,aAAa;AAAA,IACvF,IAAI,YAAY,eAAe,MAAM,YAAY;AAAA,MAC/C,MAAM,IAAI,kBACR,6BAA6B,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,cACtJ;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG;AAAA,MACvB,MAAM,IAAI,kBACR,6BAA6B,MAAM,mCAAmC,MAAM,aAC9E;AAAA,IACF;AAAA,IAEA,MAAM,SAAgC;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,eAAe,MAAM;AAAA,MACrB,YAAY,MAAM;AAAA,MAClB,QAAQ,MAAM;AAAA,MACd,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,QAAQ,YAAY,MAAM,MAAM;AAAA,IAClC;AAAA,IAEA,KAAK,MAAM,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACvC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,WAAU,CAAC,OAAmE;AAAA,IAClF,yBAAyB,MAAM,aAAa,aAAa;AAAA,IAEzD,MAAM,WAAW,KAAK,sBAAsB,MAAM,WAAW,MAAM,EAAE;AAAA,IAErE,IAAI,MAAM,WAAW,eAAe,MAAM,OAAO,cAAc,SAAS,WAAW;AAAA,MACjF,MAAM,IAAI,kBACR,6BAA6B,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,aAChH;AAAA,IACF;AAAA,IAEA,MAAM,OAA8B;AAAA,SAC/B;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,MACnD,aAAa,MAAM,eAAe,SAAS;AAAA,IAC7C;AAAA,IAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,QAAQ,YAAY,MAAM,MAAM;AAAA,MAChC,OAAO;AAAA,IACT,IACA;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,gBAAe,MAAM,KAAK;AAAA,IACnC;AAAA,IAEN,KAAK,MAAM,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACvE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACpE,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,cAAc,MAAM,cAAc,IAAI,IAAI,MAAM,WAAW,IAAI;AAAA,IACrE,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,IAAK,EACrF,OAAO,CAAC,WAAY,cAAc,YAAY,IAAI,OAAO,UAAU,IAAI,IAAK,EAC5E,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,WAAW;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBACX,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,GAC/E,MAAM,aACN,CAAC,WAAW,OAAO,UACrB;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,WAAW;AAAA,IAC5B;AAAA;AAAA,OAGI,UAAS,CAAC,OAAuE;AAAA,IACrF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,EACrC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WACP,MAAM,gBAAgB,OAAO,kBAAkB,MAAM,gBAAgB,IACvE,EACC,OAAO,CAAC,WAAY,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,IAAK,EACrF,OAAO,CAAC,WAAY,MAAM,SAAS,OAAO,WAAW,MAAM,SAAS,IAAK,EACzE,OAAO,CAAC,WAAY,MAAM,YAAY,OAAO,cAAc,MAAM,YAAY,IAAK,EAClF,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,WAAW;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,0BAA0B,CAAC,WAAmB,IAA+B;AAAA,IACnF,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACtD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,kBACR,wBAAwB,8BAA8B,aACxD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAAC,WAAmB,IAA+B;AAAA,IAClF,MAAM,SAAS,KAAK,2BAA2B,WAAW,EAAE;AAAA,IAC5D,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,kBACR,wBAAwB,oBAAoB,iCAC9C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,qBAAqB,CAAC,WAAmB,IAAmC;AAAA,IAClF,MAAM,SAAS,KAAK,MAAM,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACvD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,kBACR,6BAA6B,8BAA8B,aAC7D;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,kBACR,6BAA6B,oBAAoB,iCACnD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;;AC7XA;AAwDA,IAAM,eAAgC,OAAU,QAA0C,IAAI;AAE9F,SAAS,gBAAgB,CAAC,WAAmB,IAAoB;AAAA,EAC/D,OAAO,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC;AAAA;AAGvC,SAAS,YAAW,CAAC,GAAwB,GAAwB,OAAuB;AAAA,EAC1F,OAAO,iBAAiB,GAAG,GAAG,KAAK;AAAA;AAAA;AAG9B,MAAM,8BAA6D;AAAA,EACvD,OAAO,IAAI;AAAA,EAEX,uBAAuB,IAAI;AAAA,EAC3B;AAAA,EACA;AAAA,EAEjB,WAAW,CAAC,OAIT;AAAA,IACD,KAAK,aAAa,MAAM;AAAA,IACxB,KAAK,mBAAmB,MAAM,oBAAoB;AAAA,IAClD,KAAK,uBAAuB,MAAM,kBAAkB;AAAA;AAAA,EAGrC;AAAA,EAEjB,QAAQ,GAAyC;AAAA,IAC/C,OAAO,gBAAgB;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,sBAAsB,KAAK;AAAA,IAC7B,CAAC;AAAA;AAAA,EAGH,OAAO,CAAC,UAAsD;AAAA,IAC5D,KAAK,KAAK,MAAM;AAAA,IAChB,KAAK,qBAAqB,MAAM;AAAA,IAChC,YAAY,KAAK,WAAW,gBAAgB,SAAS,IAAI;AAAA,MAAG,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IACrF,YAAY,KAAK,WAAW,gBAAgB,SAAS,oBAAoB,GAAG;AAAA,MAC1E,KAAK,qBAAqB,IAAI,KAAK,MAAM;AAAA,IAC3C;AAAA;AAAA,OAGI,MAAK,CAAC,OAA8D;AAAA,IACxE,OAAO,KAAK,iBAAiB,YAAY;AAAA,MACvC,+BAA8B,KAAK;AAAA,MACnC,KAAK,gCAAgC,KAAK;AAAA,MAC1C,MAAM,MAAM,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MACtD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAClC,IAAI,YAAY,CAAC,4CAA2C,UAAU,KAAK,GAAG;AAAA,QAC5E,MAAM,IAAI,oBACR,0BAA0B,MAAM,mCAAmC,MAAM,aAC3E;AAAA,MACF;AAAA,MACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QACC,IAAI,cAAc,MAAM,aACxB,IAAI,OAAO,MAAM,MACjB,IAAI,gBAAgB,MAAM,WAC9B,GACA;AAAA,QACA,MAAM,IAAI,oBACR,qBAAqB,MAAM,yDAC7B;AAAA,MACF;AAAA,MACA,MAAM,qCAAoC;AAAA,QACxC,YAAY,KAAK;AAAA,QACjB,WAAW,MAAM;AAAA,QACjB,aAAa,MAAM;AAAA,QACnB,OAAO,MAAM;AAAA,QACb,cAAc,MAAM,SAAS;AAAA,QAC7B,WAAW,MAAM,SAAS,eAAe;AAAA,QACzC,kBAAkB,MAAM,SAAS,eAAe;AAAA,MAClD,CAAC;AAAA,MACD,MAAM,SAAS,2BAA0B,KAAK;AAAA,MAC9C,KAAK,KAAK,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,MAC1C,OAAO,2BAA0B,MAAM;AAAA,KACxC;AAAA;AAAA,OAGG,eAAc,CAAC,OAAsE;AAAA,IACzF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,+BAA8B,KAAK;AAAA,MACnC,MAAM,MAAM,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MACtD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAClC,IAAI,CAAC;AAAA,QAAU,MAAM,uBAAsB,MAAM,WAAW,MAAM,EAAE;AAAA,MACpE,MAAM,UAAU,0BAAyB,UAAU,KAAK,EAAE;AAAA,MAC1D,MAAM,iBAAiB,KAAK,oBAAoB,KAAK,MAAM,IAAI,SAAS,cAAc;AAAA,MACtF,MAAM,SAAoC;AAAA,WACrC;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,QACA,WAAW,SAAS,aAAa,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,QACvE,YAAY;AAAA,QACZ,OAAO;AAAA,MACT;AAAA,MAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,MAC1C,OAAO,0BAAyB,MAAM;AAAA,KACvC;AAAA;AAAA,OAGG,YAAW,CAAC,OAAoE;AAAA,IACpF,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,MAAM,iBAAiB,MAAM,WAAW,MAAM,EAAE;AAAA,MACtD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,MAClC,IAAI,CAAC;AAAA,QAAU,MAAM,uBAAsB,MAAM,WAAW,MAAM,EAAE;AAAA,MACpE,MAAM,OAAO,0BAAyB,UAAU,KAAK;AAAA,MACrD,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,2BAA0B,IAAI;AAAA,KACtC;AAAA;AAAA,OAGG,uBAAsB,CAC1B,OAC8B;AAAA,IAC9B,OAAO,KAAK,iBAAiB,MAAM,2BAA0B,KAAK,iBAAiB,KAAK,CAAC,CAAC;AAAA;AAAA,EAI5F,4CAA4C,CAC1C,OACM;AAAA,IACN,6BAA4B,MAAM,OAAO,cAAc,cAAc;AAAA,IACrE,6BAA4B,MAAM,UAAU,gBAAgB,gBAAgB;AAAA,IAC5E,MAAM,SAAS,KAAK,eAAe,MAAM,WAAW,MAAM,UAAU,eAAe;AAAA,IACnF,IACE,OAAO,SAAS,iBAAiB,MAAM,OAAO,gBAC9C,OAAO,SAAS,aAAa,eAC7B;AAAA,MACA,MAAM,IAAI,oBACR,0BAA0B,OAAO,wCAAwC,MAAM,OAAO,gBACxF;AAAA,IACF;AAAA,IACA,IAAI,OAAO,mBAAmB,MAAM,UAAU,gBAAgB;AAAA,MAC5D,MAAM,6BAA4B,OAAO,EAAE;AAAA,IAC7C;AAAA,IACA,IAAI,MAAM,UAAU;AAAA,MAClB,oCAAmC,QAAQ;AAAA,QACzC,cAAc,MAAM,OAAO;AAAA,WACxB,MAAM;AAAA,MACX,CAAC;AAAA,IACH;AAAA;AAAA,OAGI,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,WAAW,KAAK,iBAAiB,KAAK;AAAA,MAC5C,8CAA6C,UAAU,MAAM,QAAQ;AAAA,MACrE,MAAM,OAAO;AAAA,WACR;AAAA,QACH,UAAU,4BAA2B,SAAS,UAAU,MAAM,QAAQ;AAAA,MACxE;AAAA,MACA,KAAK,KAAK,IAAI,iBAAiB,MAAM,WAAW,MAAM,EAAE,GAAG,gBAAgB,IAAI,CAAC;AAAA,MAChF,OAAO,2BAA0B,IAAI;AAAA,KACtC;AAAA;AAAA,OAEG,2BAA0B,CAC9B,OACuC;AAAA,IACvC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,WAAW,KAAK,0BAA0B,KAAK;AAAA,MACrD,MAAM,UAAU,4BAA2B,UAAU,KAAK;AAAA,MAC1D,MAAM,OAA2E;AAAA,WAC5E;AAAA,QACH,UAAU,QAAQ;AAAA,QAClB,qBAAqB,QAAQ;AAAA,QAC7B,eAAe;AAAA,MACjB;AAAA,MACA,KAAK,KAAK,IAAI,iBAAiB,MAAM,WAAW,MAAM,EAAE,GAAG,gBAAgB,IAAI,CAAC;AAAA,MAChF,OAAO,2BAA0B,IAAI;AAAA,KACtC;AAAA;AAAA,OAGG,oBAAmB,CACvB,OACuC;AAAA,IACvC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,WAAW,KAAK,0BAA0B,KAAK;AAAA,MACrD,MAAM,OAA2E;AAAA,WAC5E;AAAA,QACH,eAAe,+BAA8B,UAAU,MAAM,aAAa;AAAA,MAC5E;AAAA,MACA,KAAK,KAAK,IAAI,iBAAiB,MAAM,WAAW,MAAM,EAAE,GAAG,gBAAgB,IAAI,CAAC;AAAA,MAChF,OAAO,2BAA0B,IAAI;AAAA,KACtC;AAAA;AAAA,OAGG,OAAM,CAAC,OAA+D;AAAA,IAC1E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,WAAW,KAAK,iBAAiB,KAAK;AAAA,MAC5C,MAAM,OAAO,2BAA0B,UAAU,KAAK;AAAA,MACtD,KAAK,KAAK,IAAI,iBAAiB,MAAM,WAAW,MAAM,EAAE,GAAG,gBAAgB,IAAI,CAAC;AAAA,MAChF,OAAO,2BAA0B,IAAI;AAAA,KACtC;AAAA;AAAA,OAGG,QAAO,CAAC,QAAgF;AAAA,IAC5F,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,SAAS,KAAK,KAAK,IAAI,iBAAiB,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,MAC1E,OAAO,SAAS,2BAA0B,MAAM,IAAI;AAAA,KACrD;AAAA;AAAA,OAGG,KAAI,CAAC,OAAmE;AAAA,IAC5E,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,6BAA4B,MAAM,WAAW,WAAW;AAAA,MACxD,+BAA8B,MAAM,OAAO,OAAO;AAAA,MAClD,+BAA8B,MAAM,QAAQ,QAAQ;AAAA,MACpD,IAAI,MAAM,UAAU,WAAW;AAAA,QAAG,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,MAE9E,MAAM,QAAQ,MAAM,SAAS;AAAA,MAC7B,MAAM,SAAS,MAAM,UAAU;AAAA,MAC/B,MAAM,QAAQ,MAAM,SAAS,KAAK,KAAK;AAAA,MACvC,MAAM,WAAW,MAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,MAC5D,MAAM,gBAAgB,MAAM,gBAAgB,IAAI,IAAI,MAAM,aAAa,IAAI;AAAA,MAC3E,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WACP,MAAM,eAAe,OAAO,SAAS,iBAAiB,MAAM,eAAe,IAC7E,EACC,OAAO,CAAC,WACP,MAAM,iBAAiB,OAAO,SAAS,mBAAmB,MAAM,iBAAiB,IACnF,EACC,OAAO,CAAC,WACP,MAAM,YAAY,OAAO,SAAS,eAAe,cAAc,MAAM,YAAY,IACnF,EACC,OAAO,CAAC,WACP,MAAM,mBACF,OAAO,SAAS,eAAe,cAAc,MAAM,mBACnD,IACN,EACC,OAAO,CAAC,WACP,gBACI,iCAAgC,QAAQ,CAAC,OAAO,cAAc,IAAI,EAAE,CAAC,IACrE,IACN,EACC,OAAO,CAAC,WAAY,WAAW,SAAS,IAAI,OAAO,MAAM,IAAI,IAAK,EAClE,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,QAChC;AAAA,QACA,cAAc,MAAM;AAAA,QACpB,eAAe,MAAM;AAAA,MACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,aAAY,MAAM,OAAO,KAAK,CAAC;AAAA,MAExD,MAAM,QAAQ,SAAS;AAAA,MACvB,MAAM,OAAO,SAAS,MAAM,QAAQ,SAAS,KAAK,EAAE,IAAI,0BAAyB;AAAA,MACjF,OAAO,EAAE,MAAM,SAAS,SAAS,KAAK,SAAS,OAAO,MAAM;AAAA,KAC7D;AAAA;AAAA,OAGG,0BAAyB,CAC7B,OACyC;AAAA,IACzC,OAAO,KAAK,iBAAiB,MAAM;AAAA,MACjC,MAAM,OAAO,yBACX,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,GAC/E,MAAM,eACN,CAAC,WAAW,OAAO,SAAS,YAC9B;AAAA,MACA,OAAO,EAAE,MAAM,KAAK,IAAI,0BAAyB,EAAE;AAAA,KACpD;AAAA;AAAA,EAGK,+BAA+B,CAAC,OAAsC;AAAA,IAC5E,WAAW,aAAa,KAAK,KAAK,OAAO,GAAG;AAAA,MAC1C,IACE,UAAU,cAAc,MAAM,aAC9B,UAAU,OAAO,MAAM,MACvB,UAAU,SAAS,eAAe,cAAc,MAAM,SAAS,eAAe,aAC9E,UAAU,SAAS,eAAe,cAAc,MAAM,SAAS,eAAe,aAC9E,UAAU,SAAS,eAAe,cAAc,MAAM,SAAS,eAAe,WAC9E;AAAA,QACA,MAAM,iCAAgC,MAAM,QAAQ;AAAA,MACtD;AAAA,IACF;AAAA;AAAA,EAGM,mBAAmB,CACzB,KACA,OACA,cACQ;AAAA,IACR,MAAM,iBAAiB,KAAK,qBAAqB;AAAA,IACjD,6BAA4B,gBAAgB,gBAAgB;AAAA,IAC5D,MAAM,aAAa,KAAK,qBAAqB,IAAI,GAAG,KAAK,IAAI;AAAA,IAC7D,IAAI;AAAA,MAAc,WAAW,IAAI,YAAY;AAAA,IAC7C,IAAI,WAAW,IAAI,cAAc,GAAG;AAAA,MAClC,MAAM,IAAI,oBACR,0BAA0B,0CAC5B;AAAA,IACF;AAAA,IACA,WAAW,IAAI,cAAc;AAAA,IAC7B,KAAK,qBAAqB,IAAI,KAAK,UAAU;AAAA,IAC7C,OAAO;AAAA;AAAA,EAGD,gBAAgB,CACtB,OACiE;AAAA,IACjE,MAAM,SAAS,KAAK,eAAe,MAAM,WAAW,MAAM,EAAE;AAAA,IAC5D,4BAA2B,QAAQ,KAAK;AAAA,IACxC,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAC/B,OACoE;AAAA,IACpE,MAAM,SAAS,KAAK,iBAAiB,KAAK;AAAA,IAC1C,OAAO,+BAA8B,MAAM;AAAA;AAAA,EAGrC,cAAc,CAAC,WAAmB,IAAuC;AAAA,IAC/E,6BAA4B,WAAW,WAAW;AAAA,IAClD,6BAA4B,IAAI,IAAI;AAAA,IACpC,MAAM,SAAS,KAAK,KAAK,IAAI,iBAAiB,WAAW,EAAE,CAAC;AAAA,IAC5D,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,uBAAsB,WAAW,EAAE;AAAA,IAC3C;AAAA,IACA,4BAA2B,MAAM;AAAA,IACjC,OAAO;AAAA;AAEX;;AChXA,SAAS,QAAQ,CAAC,QAIP;AAAA,EACT,OAAO,KAAK,UAAU;AAAA,IACpB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ;AAAA,IACf,OAAO,QAAQ;AAAA,EACjB,CAAC;AAAA;AAGH,SAAS,oBAAoB,CAAC,QAA0C;AAAA,EACtE,OAAO,gBAAgB,MAAM;AAAA;AAG/B,SAAS,uBAAuB,CAC9B,MACA,OACA,OACQ;AAAA,EACR,MAAM,YAAY,UAAU,QAAQ,IAAI;AAAA,EACxC,MAAM,SAAS;AAAA,IACb,KAAK,YAAY,cAAc,MAAM,WAAW;AAAA,IAChD,KAAK,OAAO,cAAc,MAAM,MAAM;AAAA,IACtC,KAAK,QAAQ,aAAa,cAAc,MAAM,QAAQ,YAAY;AAAA,IAClE,KAAK,QAAQ,UAAU,cAAc,MAAM,QAAQ,SAAS;AAAA,EAC9D;AAAA,EAEA,WAAW,SAAS,QAAQ;AAAA,IAC1B,IAAI,UAAU,GAAG;AAAA,MACf,OAAO,QAAQ;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,wBAAwB,CAAC,MAAuB,OAAgC;AAAA,EACvF,OACE,KAAK,OAAO,cAAc,MAAM,MAAM,KACtC,KAAK,QAAQ,aAAa,cAAc,MAAM,QAAQ,YAAY,KAClE,KAAK,QAAQ,UAAU,cAAc,MAAM,QAAQ,SAAS;AAAA;AAIhE,SAAS,aAAa,CAAC,QAAyB,QAAiC;AAAA,EAC/E,OACE,OAAO,OAAO,cAAc,OAAO,MAAM,KACzC,OAAO,QAAQ,aAAa,cAAc,OAAO,YAAY,KAC7D,OAAO,QAAQ,UAAU,cAAc,OAAO,SAAS;AAAA;AAAA;AAIpD,MAAM,sBAA6C;AAAA,EACvC,SAAS,IAAI;AAAA,EAE9B,QAAQ,GAAiC;AAAA,IACvC,OAAO,gBAAgB,KAAK,MAAM;AAAA;AAAA,EAGpC,OAAO,CAAC,UAA8C;AAAA,IACpD,KAAK,OAAO,MAAM;AAAA,IAClB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,OAAO,IAAI,KAAK,MAAM;AAAA,IAC7B;AAAA;AAAA,OAGI,UAAS,CAAC,QAIoB;AAAA,IAClC,MAAM,SAAS,KAAK,OAAO,IAAI,SAAS,MAAM,CAAC;AAAA,IAC/C,OAAO,SAAS,qBAAqB,MAAM,IAAI;AAAA;AAAA,OAG3C,eAAc,CAAC,QAGmB;AAAA,IACtC,OAAO,OAAO,MAAM,QAAQ,CAAC,SAAS;AAAA,MACpC,MAAM,SAAS,KAAK,OAAO,IAAI,SAAS,EAAE,WAAW,OAAO,cAAc,KAAK,CAAC,CAAC;AAAA,MACjF,OAAO,SAAS,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC;AAAA,KACnD;AAAA;AAAA,OAGG,WAAU,CAAC,OAAuE;AAAA,IACtF,IAAI,MAAM,eAAe,WAAW,GAAG;AAAA,MACrC,OAAO,EAAE,QAAQ,CAAC,GAAG,SAAS,OAAO,OAAO,EAAE;AAAA,IAChD;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,SAAS,MAAM,UAAU;AAAA,IAC/B,MAAM,gBAAgB,MAAM,gBAAgB,IAAI,IAAI,MAAM,aAAa,IAAI;AAAA,IAC3E,MAAM,SAAS,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAW,CAAC,MAAM,UAAU,OAAO,WAAW,MAAM,MAAM,EAClE,OAAO,CAAC,WAAW,CAAC,MAAM,gBAAgB,OAAO,QAAQ,iBAAiB,MAAM,YAAY,EAC5F,OAAO,CAAC,WAAY,gBAAgB,cAAc,IAAI,OAAO,QAAQ,YAAY,IAAI,IAAK,EAC1F,OAAO,CAAC,WAAW,CAAC,MAAM,aAAa,OAAO,QAAQ,cAAc,MAAM,SAAS,EACnF,KAAK,CAAC,MAAM,UAAU,wBAAwB,MAAM,OAAO,KAAK,CAAC;AAAA,IAEpE,MAAM,QAAQ,OAAO;AAAA,IACrB,MAAM,WACJ,MAAM,UAAU,YAAY,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,QAAQ,SAAS,MAAM,KAAK;AAAA,IAE9F,OAAO;AAAA,MACL,QAAQ,SAAS,IAAI,oBAAoB;AAAA,MACzC,SAAS,SAAS,SAAS,SAAS;AAAA,MACpC;AAAA,IACF;AAAA;AAAA,OAGI,uBAAsB,CAC1B,OACiD;AAAA,IACjD,MAAM,OAAO,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC,EAClC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAW,OAAO,QAAQ,SAAS,QAAQ,EACnD,OAAO,CAAC,WAAW,CAAC,MAAM,SAAS,cAAc,QAAQ,MAAM,KAAK,IAAI,CAAC,EACzE,KAAK,wBAAwB,EAC7B,MAAM,GAAG,MAAM,QAAQ,CAAC;AAAA,IAC3B,MAAM,UAAU,KAAK,SAAS,MAAM;AAAA,IACpC,MAAM,SAAS,KAAK,MAAM,GAAG,MAAM,KAAK,EAAE,IAAI,oBAAoB;AAAA,IAClE,MAAM,OAAO,OAAO,GAAG,EAAE;AAAA,IACzB,OAAO;AAAA,MACL;AAAA,SACI,WAAW,OACX;AAAA,QACE,MAAM;AAAA,UACJ,QAAQ,KAAK;AAAA,UACb,cAAc,KAAK,QAAQ;AAAA,UAC3B,WAAW,KAAK,QAAQ;AAAA,QAC1B;AAAA,MACF,IACA,CAAC;AAAA,IACP;AAAA;AAAA,OAGI,eAAc,CAAC,OAAgD;AAAA,IACnE,MAAM,SAA0B;AAAA,MAC9B,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,QAAQ;AAAA,MACtB,SAAS,gBAAgB,MAAM,QAAQ,OAAO;AAAA,MAC9C,aAAa,MAAM,QAAQ;AAAA,IAC7B;AAAA,IAEA,KAAK,OAAO,IAAI,SAAS,MAAM,GAAG,qBAAqB,MAAM,CAAC;AAAA;AAAA,OAG1D,cAAa,CAAC,OAA+C;AAAA,IACjE,KAAK,OAAO,OACV,SAAS;AAAA,MACP,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM,QAAQ;AAAA,MACtB,SAAS,MAAM,QAAQ;AAAA,IACzB,CAAC,CACH;AAAA;AAAA,OAGI,iBAAgB,CAAC,QAA4D;AAAA,IACjF,WAAW,SAAS,QAAQ;AAAA,MAC1B,IAAI,MAAM,SAAS,kBAAkB;AAAA,QACnC,MAAM,KAAK,eAAe,KAAK;AAAA,MACjC,EAAO;AAAA,QACL,MAAM,KAAK,cAAc,KAAK;AAAA;AAAA,IAElC;AAAA;AAEJ;;ACzKO,MAAM,2BAAuD;AAAA,EAC1D,OAAO,IAAI;AAAA,OAEb,OAAM,CAAC,OAAyD;AAAA,IACpE,MAAM,SAAS,2BAA0B,KAAK;AAAA,IAC9C,MAAM,MAAM,OAAO,OAAO,WAAW,OAAO,EAAE;AAAA,IAC9C,MAAM,qBAAqB,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACjD,CAAC,YAAY,QAAQ,cAAc,OAAO,aAAa,QAAQ,cAAc,OAAO,SACtF;AAAA,IACA,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,oBAAoB;AAAA,MAC5C,MAAM,IAAI,wBACR,aACA,uBAAuB,OAAO,wCAChC;AAAA,IACF;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IACzB,OAAO,uBAAsB,MAAM;AAAA;AAAA,OAG/B,QAAO,CAAC,OAAiE;AAAA,IAC7E,MAAM,aAAa,iCAAgC,KAAK;AAAA,IACxD,MAAM,SAAS,KAAK,KAAK,IAAI,OAAO,WAAW,WAAW,WAAW,EAAE,CAAC;AAAA,IACxE,OAAO,SAAS,uBAAsB,MAAM,IAAI;AAAA;AAAA,OAG5C,KAAI,CAAC,OAA6D;AAAA,IACtE,MAAM,aAAa,+BAA8B,KAAK;AAAA,IACtD,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OACC,CAAC,WACC,OAAO,cAAc,WAAW,cAC/B,WAAW,iBAAiB,aAC3B,OAAO,iBAAiB,WAAW,kBACpC,WAAW,WAAW,aACpB,OAAO,OAAO,iBAAiB,WAAW,OAAO,gBAChD,OAAO,OAAO,cAAc,WAAW,OAAO,eACjD,WAAW,kBAAkB,OAAO,cAAc,eAClD,WAAW,kBAAkB,OAAO,UAAU,QAAQ,IAAI,WAAW,IAAI,QAAQ,EACtF,EACC,KAAK,kBAAkB;AAAA,IAE1B,MAAM,QAAQ,SAAS;AAAA,IACvB,MAAM,SAAS,SACZ,MAAM,WAAW,QAAQ,WAAW,SAAS,WAAW,KAAK,EAC7D,IAAI,sBAAqB;AAAA,IAC5B,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,WAAW,SAAS,OAAO,SAAS;AAAA,IAC/C;AAAA;AAAA,OAGI,OAAM,CAAC,OAAgE;AAAA,IAC3E,MAAM,aAAa,gCAA+B,KAAK;AAAA,IACvD,MAAM,MAAM,OAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IACtD,MAAM,UAAU,KAAK,KAAK,IAAI,GAAG;AAAA,IACjC,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IACrB,IAAI,QAAQ;AAAA,MAAW,OAAO,uBAAsB,OAAO;AAAA,IAE3D,MAAM,aAAa,gCAA+B,YAAY,QAAQ,SAAS;AAAA,IAC/E,MAAM,UAA4B;AAAA,SAC7B;AAAA,MACH,WAAW,IAAI,KAAK,WAAW,SAAS;AAAA,MACxC,WAAW,KAAK,WAAW,UAAU;AAAA,IACvC;AAAA,IACA,KAAK,KAAK,IAAI,KAAK,OAAO;AAAA,IAC1B,OAAO,uBAAsB,OAAO;AAAA;AAAA,EAGtC,QAAQ,GAA0C;AAAA,IAChD,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,KAAK,uBAAsB,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA,EAG5F,OAAO,CAAC,UAAuD;AAAA,IAC7D,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,KAAK,uBAAsB,MAAM,CAAC,CAAC,CAAC;AAAA;AAElG;AAEA,SAAS,kBAAkB,CAAC,MAAwB,OAAiC;AAAA,EACnF,MAAM,UAAU,MAAM,UAAU,QAAQ,IAAI,KAAK,UAAU,QAAQ;AAAA,EACnE,IAAI,YAAY;AAAA,IAAG,OAAO;AAAA,EAC1B,OAAO,KAAK,OAAO,MAAM,KAAK,IAAI,KAAK,KAAK,MAAM,KAAK,IAAI;AAAA;AAG7D,SAAS,MAAM,CAAC,WAAmB,IAAoB;AAAA,EACrD,OAAO,GAAG,gBAAc;AAAA;;ACtFnB,MAAM,6BAA2D;AAAA,EAGzC;AAAA,EAFrB,OAAO,IAAI;AAAA,EAEnB,WAAW,CAAkB,QAA4C;AAAA,IAA5C;AAAA;AAAA,OAEvB,OAAM,CAAC,OAA6D;AAAA,IACxE,MAAM,SAAS,6BAA4B,KAAK;AAAA,IAChD,MAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,EAAE,WAAW,OAAO,WAAW,IAAI,OAAO,QAAQ,CAAC;AAAA,IAC3F,IAAI,CAAC,OAAO;AAAA,MACV,MAAM,IAAI,0BACR,iBACA,uBAAuB,OAAO,uCAAuC,OAAO,aAC9E;AAAA,IACF;AAAA,IACA,MAAM,MAAM,QAAO,OAAO,WAAW,OAAO,EAAE;AAAA,IAC9C,MAAM,qBAAqB,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACjD,CAAC,YAAY,QAAQ,cAAc,OAAO,aAAa,QAAQ,cAAc,OAAO,SACtF;AAAA,IACA,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,oBAAoB;AAAA,MAC5C,MAAM,IAAI,0BACR,aACA,yBAAyB,OAAO,wCAClC;AAAA,IACF;AAAA,IACA,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IACzB,OAAO,yBAAwB,MAAM;AAAA;AAAA,OAGjC,QAAO,CAAC,OAAqE;AAAA,IACjF,MAAM,aAAa,mCAAkC,KAAK;AAAA,IAC1D,MAAM,SAAS,KAAK,KAAK,IAAI,QAAO,WAAW,WAAW,WAAW,EAAE,CAAC;AAAA,IACxE,OAAO,SAAS,yBAAwB,MAAM,IAAI;AAAA;AAAA,OAG9C,aAAY,CAAC,OAA0E;AAAA,IAC3F,MAAM,aAAa,wCAAuC,KAAK;AAAA,IAC/D,MAAM,MAAM,QAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IACtD,MAAM,UAAU,KAAK,KAAK,IAAI,GAAG;AAAA,IACjC,IACE,CAAC,WACD,QAAQ,YAAY,WAAW,WAC/B,QAAQ,cAAc,WAAW,aACjC,QAAQ,cAAc,aACtB,QAAQ,UAAU,QAAQ,IAAI,WAAW,IAAI,QAAQ,KACrD,QAAQ,UAAU,QAAQ,KAAK,WAAW,IAAI,QAAQ,KACtD,QAAQ,kBAAkB,QAAQ,KAAK,WAAW,IAAI,QAAQ,GAC9D;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,aAAa,KAAK,IACtB,QAAQ,kBAAkB,QAAQ,GAClC,KAAK,IAAI,QAAQ,UAAU,QAAQ,GAAG,WAAW,UAAU,QAAQ,CAAC,CACtE;AAAA,IACA,MAAM,UAAU,KAAK,SAAS,WAAW,IAAI,KAAK,UAAU,EAAE;AAAA,IAC9D,KAAK,KAAK,IAAI,KAAK,OAAO;AAAA,IAC1B,OAAO,yBAAwB,OAAO;AAAA;AAAA,OAGlC,OAAM,CAAC,OAAoE;AAAA,IAC/E,MAAM,aAAa,kCAAiC,KAAK;AAAA,IACzD,MAAM,MAAM,QAAO,WAAW,WAAW,WAAW,EAAE;AAAA,IACtD,MAAM,UAAU,KAAK,KAAK,IAAI,GAAG;AAAA,IACjC,IAAI,CAAC;AAAA,MAAS,OAAO;AAAA,IACrB,IAAI,QAAQ;AAAA,MAAW,OAAO,yBAAwB,OAAO;AAAA,IAE7D,MAAM,aAAa,kCAAiC,YAAY,QAAQ,SAAS;AAAA,IACjF,MAAM,UAAU,KAAK,SAAS,WAAW,IAAI,KAAK,WAAW,SAAS,EAAE;AAAA,IACxE,KAAK,KAAK,IAAI,KAAK,OAAO;AAAA,IAC1B,OAAO,yBAAwB,OAAO;AAAA;AAAA,EAGxC,QAAQ,GAA4C;AAAA,IAClD,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,KAAK,yBAAwB,MAAM,CAAC,CAAC,CAAC;AAAA;AAAA,EAG9F,OAAO,CAAC,UAAyD;AAAA,IAC/D,KAAK,OAAO,IAAI,IACd,CAAC,GAAG,QAAQ,EAAE,IAAI,EAAE,KAAK,YAAY,CAAC,KAAK,yBAAwB,MAAM,CAAC,CAAC,CAC7E;AAAA;AAEJ;AAEA,SAAS,OAAM,CAAC,WAAmB,IAAoB;AAAA,EACrD,OAAO,GAAG,gBAAc;AAAA;;AC/FnB,IAAM,0BAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;ACgBA,SAAS,UAAU,CAAC,WAAmB,IAAoB;AAAA,EACzD,OAAO,GAAG,aAAa;AAAA;AAGzB,SAAS,kBAAkB,CAAC,QAAsC;AAAA,EAChE,OAAO,gBAAgB,MAAM;AAAA;AAG/B,SAAS,mBAAmB,CAAC,YAA0D;AAAA,EACrF,OAAO,eAAe,YAAY,gBAAe,UAAU,IAAI;AAAA;AAGjE,SAAS,eAAc,CACrB,OAC6C;AAAA,EAC7C,OAAO,QAAQ,kBAAiB,OAAO,uBAAsB,IAAI;AAAA;AAAA;AAG5D,MAAM,wBAAiD;AAAA,EAG/B;AAAA,EAFZ,OAAO,IAAI;AAAA,EAE5B,WAAW,CAAkB,YAA8B;AAAA,IAA9B;AAAA;AAAA,EAE7B,QAAQ,GAAmC;AAAA,IACzC,OAAO,gBAAgB,KAAK,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,UAAgD;AAAA,IACtD,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA;AAAA,OAGI,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAClC,IAAI,YAAY,CAAC,sCAAqC,UAAU,KAAK,GAAG;AAAA,MACtE,MAAM,IAAI,cACR,oBAAoB,MAAM,mCAAmC,MAAM,aACrE;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QACC,IAAI,cAAc,MAAM,aACxB,IAAI,OAAO,MAAM,MACjB,IAAI,gBAAgB,MAAM,WAC9B,GACA;AAAA,MACA,MAAM,IAAI,cACR,qBAAqB,MAAM,mDAC7B;AAAA,IACF;AAAA,IACA,MAAM,wBAAuB;AAAA,MAC3B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,IAED,MAAM,WAAW,IAAI,KAAK,MAAM,YAAY,IAAI,IAAM;AAAA,IACtD,IAAI,UAAU;AAAA,MACZ,MAAM,OAAsB;AAAA,WACvB;AAAA,QACH,QAAQ;AAAA,QACR;AAAA,QACA,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,MACA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACxC,OAAO,mBAAmB,IAAI;AAAA,IAChC;AAAA,IAEA,MAAM,SAAwB;AAAA,MAC5B,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,QAAQ,MAAM;AAAA,MACd,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,QAAQ;AAAA,MACR;AAAA,MACA,yBAAyB,MAAM;AAAA,MAC/B,eAAe,MAAM;AAAA,IACvB;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,gBAAgB,MAAM,CAAC;AAAA,IAC1C,OAAO,mBAAmB,MAAM;AAAA;AAAA,OAG5B,MAAK,CAAC,OAAkD;AAAA,IAC5D,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAClC,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,cACR,oBAAoB,MAAM,8BAA8B,MAAM,aAChE;AAAA,IACF;AAAA,IACA,IAAI,SAAS,WAAW,UAAU;AAAA,MAChC,MAAM,IAAI,cACR,oBAAoB,MAAM,iCAAiC,SAAS,UACtE;AAAA,IACF;AAAA,IAEA,MAAM,OAAsB;AAAA,SACvB;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,IACxC,OAAO,mBAAmB,IAAI;AAAA;AAAA,OAG1B,OAAM,CAAC,OAAmD;AAAA,IAC9D,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAElC,IAAI,CAAC,UAAU;AAAA,MACb,MAAM,IAAI,cACR,oBAAoB,MAAM,8BAA8B,MAAM,aAChE;AAAA,IACF;AAAA,IAEA,MAAM,iBAAiB,MAAM,WAAW,YAAY,MAAM,MAAM,SAAS;AAAA,IACzE,IACG,kBAAkB,SAAS,WAAW,YACtC,CAAC,kBAAkB,SAAS,WAAW,WACxC;AAAA,MACA,MAAM,IAAI,cACR,oBAAoB,MAAM,kCAAkC,SAAS,UACvE;AAAA,IACF;AAAA,IAEA,IAAI,MAAM,WAAW,aAAa;AAAA,MAChC,IAAI,MAAM,UAAU,MAAM,OAAO,cAAc,SAAS,WAAW;AAAA,QACjE,MAAM,IAAI,cACR,oBAAoB,MAAM,uBAAuB,MAAM,OAAO,8BAA8B,SAAS,aACvG;AAAA,MACF;AAAA,MACA,IAAI,CAAC,MAAM,UAAU,MAAM,aAAa,KAAK,SAAS,SAAS,SAAS;AAAA,QACtE,MAAM,IAAI,cACR,oBAAoB,MAAM,yEAC5B;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,OAAsB;AAAA,SACvB;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,IACrD;AAAA,IAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM,SAAS,gBAAgB,MAAM,MAAM,IAAI;AAAA,MACvD,OAAO;AAAA,MACP,YAAY,oBAAoB,MAAM,UAAU;AAAA,IAClD,IACA;AAAA,SACK;AAAA,MACH,UAAU,MAAM,YAAY,SAAS;AAAA,MACrC,QAAQ;AAAA,MACR,OAAO,gBAAe,MAAM,KAAK;AAAA,MACjC,YAAY;AAAA,IACd;AAAA,IAEN,KAAK,KAAK,IAAI,KAAK,gBAAgB,IAAI,CAAC;AAAA,IACxC,OAAO,mBAAmB,IAAI;AAAA;AAAA,OAG1B,QAAO,CAAC,QAA0E;AAAA,IACtF,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACpE,OAAO,SAAS,mBAAmB,MAAM,IAAI;AAAA;AAAA,OAGzC,KAAI,CAAC,OAAuD;AAAA,IAChE,IAAI,iBAAiB,KAAK,KAAK,MAAM,SAAS,WAAW,GAAG;AAAA,MAC1D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,UAAU,MAAM,UAAU,IAAI,IAAI,MAAM,OAAO,IAAI;AAAA,IAEzD,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,SAAS,OAAO,WAAW,MAAM,SAAS,IAAK,EACzE,OAAO,CAAC,WAAY,UAAU,QAAQ,IAAI,OAAO,MAAM,IAAI,IAAK,EAChE,OAAO,CAAC,WAAY,MAAM,YAAY,OAAO,cAAc,MAAM,YAAY,IAAK,EAClF,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,MACjC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,oBAAmB,CAAC,OAAmE;AAAA,IAC3F,MAAM,OAAO,yBACX,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,GAC/E,MAAM,SACN,CAAC,WAAW,OAAO,MACrB;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,kBAAkB;AAAA,IACnC;AAAA;AAEJ;;AC/PO,IAAM,6BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF;AAiGO,SAAS,mBAAkB,CAAC,KAAgC;AAAA,EACjE,OAAO,IAAI,WAAW,YAAY,IAAI,OAAO,cAAc;AAAA;;;ACpFtD,MAAM,2BAAuD;AAAA,EAGrC;AAAA,EAFZ,OAAO,IAAI;AAAA,EAE5B,WAAW,CAAkB,YAA8B;AAAA,IAA9B;AAAA;AAAA,EAE7B,QAAQ,GAAsC;AAAA,IAC5C,OAAO,gBAAgB,KAAK,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,UAAmD;AAAA,IACzD,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA;AAAA,OAGI,MAAK,CAAC,OAAwD;AAAA,IAClE,MAAM,2BAA0B;AAAA,MAC9B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,IACf,CAAC;AAAA,IACD,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,eAAe,KAAK,GAAG;AAAA,MACpD,MAAM,IAAI,iBACR,uBAAuB,MAAM,mDAAmD,MAAM,eACtF,eACF;AAAA,IACF;AAAA,IAEA,MAAM,SAA2B;AAAA,MAC/B,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,QAAQ;AAAA,MACR,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,MACb,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,kBAAkB,MAAM;AAAA,MACxB,mBAAmB,MAAM;AAAA,MACzB,gBAAgB,MAAM;AAAA,IACxB;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACtC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,QAAO,CAAC,OAA0D;AAAA,IACtE,MAAM,WAAW,KAAK,kBAAkB,MAAM,WAAW,MAAM,EAAE;AAAA,IACjE,IAAI,CAAC,oBAAmB,QAAQ,GAAG;AAAA,MACjC,MAAM,IAAI,iBACR,uBAAuB,MAAM,mCAAmC,SAAS,YACzE,oBACF;AAAA,IACF;AAAA,IACA,MAAM,OAAyB;AAAA,SAC1B;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,OAAO;AAAA,IACT;AAAA,IACA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAAyD;AAAA,IACpE,MAAM,WAAW,KAAK,yBAAyB,MAAM,WAAW,MAAM,EAAE;AAAA,IACxE,MAAM,OAAyB;AAAA,SAC1B;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,MACnD,gBAAgB,MAAM;AAAA,MACtB,OACE,MAAM,WAAW,WACb,kBAAiB,MAAM,OAAO,0BAAyB,IACvD;AAAA,IACR;AAAA,IAEA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,QAA6E;AAAA,IACzF,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACpE,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,cAAa,CAAC,OAKiB;AAAA,IACnC,MAAM,SAAS,KAAK,eAAe,KAAK;AAAA,IACxC,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAA6D;AAAA,IACtE,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,cAAc,OAAO,gBAAgB,MAAM,cAAc,IAAK,EACxF,OAAO,CAAC,WAAY,MAAM,YAAY,OAAO,cAAc,MAAM,YAAY,IAAK,EAClF,OAAO,CAAC,WACP,MAAM,iBAAiB,OAAO,mBAAmB,MAAM,iBAAiB,IAC1E,EACC,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,WAAW;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,iBAAiB,CAAC,WAAmB,IAA8B;AAAA,IACzE,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACtD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,iBACR,uBAAuB,8BAA8B,eACrD,WACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,wBAAwB,CAAC,WAAmB,IAA8B;AAAA,IAChF,MAAM,SAAS,KAAK,kBAAkB,WAAW,EAAE;AAAA,IAEnD,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,iBACR,uBAAuB,oBAAoB,mCAC3C,oBACF;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,cAAc,CAAC,OAKU;AAAA,IAC/B,IAAI,MAAM,mBAAmB;AAAA,MAAW;AAAA,IACxC,OAAO,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KAC7B,CAAC,QACC,IAAI,cAAc,MAAM,aACxB,IAAI,gBAAgB,MAAM,eAC1B,IAAI,cAAc,MAAM,aACxB,IAAI,mBAAmB,MAAM,cACjC;AAAA;AAEJ;;ACxMO,MAAM,mCAAkC,MAAM;AAAA,EAC1C,OAAO;AAClB;;ACQA,SAAS,yBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,2BACR,gCAAgC,2CAClC;AAAA,EACF;AAAA;AAAA;AAGK,MAAM,qCAA2E;AAAA,EACrE,gBAAgB,IAAI;AAAA,EAErC,QAAQ,GAAgD;AAAA,IACtD,OAAO,gBAAgB,KAAK,aAAa;AAAA;AAAA,EAG3C,OAAO,CAAC,UAA6D;AAAA,IACnE,KAAK,cAAc,MAAM;AAAA,IACzB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,cAAc,IAAI,KAAK,MAAM;AAAA,IACpC;AAAA;AAAA,OAGI,OAAM,CAAC,OAA6E;AAAA,IACxF,0BAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,cAAc,IAAI,GAAG,GAAG;AAAA,MAC/B,MAAM,IAAI,2BACR,iCAAiC,MAAM,mCAAmC,MAAM,aAClF;AAAA,IACF;AAAA,IAEA,MAAM,SAAqC;AAAA,MACzC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,YAAY,MAAM;AAAA,MAClB,eAAe,MAAM;AAAA,MACrB,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,gBAAgB,MAAM;AAAA,MACtB,OAAO,YAAY,MAAM,KAAK;AAAA,MAC9B,iBAAiB,YAAY,MAAM,eAAe;AAAA,MAClD,QAAQ;AAAA,MACR,aAAa,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,MACrD,WAAW,MAAM,YAAY,IAAI,KAAK,MAAM,SAAS,IAAI;AAAA,IAC3D;AAAA,IAEA,KAAK,cAAc,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IAC/C,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,IAC1E,MAAM,OAAmC;AAAA,SACpC;AAAA,MACH,QAAQ;AAAA,MACR,aAAa,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,MACrD,aAAa,MAAM,cAAc,YAAY,MAAM,WAAW,IAAI;AAAA,MAClE,UAAU,YAAY,MAAM,QAAQ;AAAA,IACtC;AAAA,IAEA,KAAK,cAAc,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IAC/E,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,IAC1E,MAAM,OAAmC;AAAA,SACpC;AAAA,MACH,QAAQ;AAAA,MACR,aAAa,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,MACrD,aAAa,MAAM,cAAc,YAAY,MAAM,WAAW,IAAI;AAAA,IACpE;AAAA,IAEA,KAAK,cAAc,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IAC/E,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,WAAW,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,IAC1E,MAAM,OAAmC;AAAA,SACpC;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IAEA,KAAK,cAAc,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IAC/E,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,QAGiC;AAAA,IAC7C,MAAM,SAAS,KAAK,cAAc,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IAC7E,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAAiF;AAAA,IAC1F,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,eAAe,CAAC;AAAA,QAChB,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,cAAc,MAAM,cAAc,IAAI,IAAI,MAAM,WAAW,IAAI;AAAA,IACrE,MAAM,WAAW,CAAC,GAAG,KAAK,cAAc,OAAO,CAAC,EAC7C,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,WAAW,SAAS,IAAI,OAAO,MAAM,IAAI,IAAK,EAClE,OAAO,CAAC,WAAY,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,IAAK,EACrF,OAAO,CAAC,WAAY,cAAc,YAAY,IAAI,OAAO,UAAU,IAAI,IAAK,EAC5E,OAAO,CAAC,WACP,MAAM,gBAAgB,OAAO,kBAAkB,MAAM,gBAAgB,IACvE,EACC,OAAO,CAAC,WAAY,MAAM,YAAY,OAAO,cAAc,MAAM,YAAY,IAAK,EAClF,OAAO,CAAC,WAAY,MAAM,SAAS,OAAO,WAAW,MAAM,SAAS,IAAK,EACzE,OAAO,CAAC,WAAY,MAAM,UAAU,OAAO,YAAY,MAAM,UAAU,IAAK,EAC5E,OAAO,CAAC,WACP,MAAM,iBAAiB,OAAO,mBAAmB,MAAM,iBAAiB,IAC1E,EACC,OAAO,CAAC,WACP,MAAM,iBAAiB,OAAO,eAAe,MAAM,iBAAiB,IACtE,EACC,OAAO,CAAC,WACP,MAAM,kBAAkB,OAAO,eAAe,MAAM,kBAAkB,IACxE,EACC,KAAK,CAAC,MAAM,UAAU,mBAAmB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE/D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,eAAe,KAAK,IAAI,WAAW;AAAA,MACnC;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,0BAA0B,CAAC,WAAmB,IAAwC;AAAA,IAC5F,MAAM,SAAS,KAAK,cAAc,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IAC/D,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,2BACR,iCAAiC,8BAA8B,aACjE;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,2BACR,iCAAiC,oBAAoB,4BACvD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAEX;AAIA,SAAS,kBAAkB,CACzB,MACA,OACA,OACQ;AAAA,EACR,MAAM,QAAQ,KAAK,YAAY,QAAQ,IAAI,MAAM,YAAY,QAAQ;AAAA,EACrE,IAAI,UAAU,GAAG;AAAA,IACf,OAAO,UAAU,QAAQ,QAAQ,CAAC;AAAA,EACpC;AAAA,EAEA,IAAI,KAAK,OAAO,MAAM,IAAI;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO,UAAU,QAAQ,KAAK,GAAG,cAAc,MAAM,EAAE,IAAI,MAAM,GAAG,cAAc,KAAK,EAAE;AAAA;;AC3KpF,IAAM,8BAA6B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AC2BA,SAAS,iBAAgB,CACvB,SACiD;AAAA,EACjD,OAAO,UAAU,kBAAiB,SAAS,2BAA0B,IAAI;AAAA;AAG3E,SAAS,qBAAqB,CAC5B,SAC8C;AAAA,EAC9C,OAAO,UAAU,kBAAiB,SAAS,wBAAuB,IAAI;AAAA;AAGxE,SAAS,yBAAwB,CAAC,OAAe,WAAyB;AAAA,EACxE,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAA,IACzC,MAAM,IAAI,kBAAiB,uBAAuB,2CAA2C;AAAA,EAC/F;AAAA;AAAA;AAGK,MAAM,4BAAyD;AAAA,EAMvC;AAAA,EALpB;AAAA,EACA;AAAA,EAEQ,OAAO,IAAI;AAAA,EAE5B,WAAW,CAAkB,YAA8B;AAAA,IAA9B;AAAA,IAC3B,KAAK,QAAQ,IAAI,gCAA+B;AAAA,MAC9C,2BAA2B,CAAC,WAAW,OAAO,KAAK,0BAA0B,WAAW,EAAE;AAAA,MAC1F,0BAA0B,CAAC,WAAW,OAAO,KAAK,yBAAyB,WAAW,EAAE;AAAA,MACxF,0BAA0B,CAAC,WAAW,IAAI,UACxC,KAAK,yBAAyB,WAAW,IAAI,KAAK;AAAA,IACtD,CAAC;AAAA,IACD,KAAK,aAAa,IAAI,qCACpB;AAAA,MACE,qBAAqB,CAAC,WAAW,OAAO,KAAK,MAAM,oBAAoB,WAAW,EAAE;AAAA,MACpF,oBAAoB,CAAC,WAAW,OAAO,KAAK,2BAA2B,WAAW,EAAE;AAAA,IACtF,GACA,KAAK,UACP;AAAA;AAAA,EAGF,QAAQ,GAAuC;AAAA,IAC7C,OAAO;AAAA,MACL,MAAM,gBAAgB,KAAK,IAAI;AAAA,MAC/B,OAAO,KAAK,MAAM,SAAS;AAAA,MAC3B,YAAY,KAAK,WAAW,SAAS;AAAA,IACvC;AAAA;AAAA,EAGF,OAAO,CAAC,UAAoD;AAAA,IAC1D,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,SAAS,IAAI,GAAG;AAAA,MAC1D,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA,IAC3B;AAAA,IACA,KAAK,MAAM,QAAQ,SAAS,KAAK;AAAA,IACjC,KAAK,WAAW,QAAQ,SAAS,UAAU;AAAA;AAAA,OAGvC,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG;AAAA,MACtB,MAAM,IAAI,kBACR,wBAAwB,MAAM,mCAAmC,MAAM,aACzE;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QAAQ,IAAI,cAAc,MAAM,aAAa,IAAI,gBAAgB,MAAM,WAC1E,GACA;AAAA,MACA,MAAM,IAAI,kBACR,qBAAqB,MAAM,uDAC7B;AAAA,IACF;AAAA,IACA,MAAM,4BAA2B;AAAA,MAC/B,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,MACb,YAAY,MAAM;AAAA,IACpB,CAAC;AAAA,IAED,MAAM,WAAW,IAAI,KAAK,MAAM,YAAY,IAAI,IAAM;AAAA,IACtD,MAAM,SAA4B;AAAA,MAChC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,YAAY,MAAM;AAAA,MAClB,QAAQ;AAAA,MACR,OAAO,YAAY,MAAM,KAAK;AAAA,MAC9B;AAAA,MACA,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACtC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,MAAK,CAAC,OAA0D;AAAA,IACpE,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,MAAM,WAAW,KAAK,KAAK,IAAI,GAAG;AAAA,IAClC,IAAI,CAAC,YAAY,SAAS,WAAW,UAAU;AAAA,MAC7C,MAAM,IAAI,kBACR,WACI,wBAAwB,MAAM,iCAAiC,SAAS,aACxE,wBAAwB,MAAM,8BAA8B,MAAM,aACxE;AAAA,IACF;AAAA,IAEA,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ;AAAA,MACR,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,MACjD,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS,SAAS,UAAU;AAAA,MAC5B,WAAW,MAAM,YAAY,YAAY,MAAM,SAAS,IAAI;AAAA,IAC9D;AAAA,IAEA,KAAK,KAAK,IAAI,KAAK,YAAY,IAAI,CAAC;AAAA,IACpC,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,WAAW,KAAK,6BAA6B,KAAK;AAAA,IACxD,KAAK,+BAA+B,UAAU,MAAM,cAAc;AAAA,IAClE,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,MACnD,WAAW;AAAA,IACb;AAAA,IAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,QAAQ,YAAY,MAAM,MAAM;AAAA,MAChC,OAAO;AAAA,IACT,IACA;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,kBAAiB,MAAM,KAAK;AAAA,IACrC;AAAA,IAEN,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,KAAI,CAAC,OAAyD;AAAA,IAClE,MAAM,WAAW,KAAK,0BAA0B,MAAM,WAAW,MAAM,EAAE;AAAA,IACzE,KAAK,+BAA+B,UAAU,MAAM,cAAc;AAAA,IAClE,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,WAAW;AAAA,IACb;AAAA,IAEA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,OAAM,CAAC,OAA2D;AAAA,IACtE,MAAM,WAAW,KAAK,0BAA0B,MAAM,WAAW,MAAM,EAAE;AAAA,IACzE,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS,SAAS,UAAU;AAAA,MAC5B,WAAW,MAAM,YAAY,YAAY,MAAM,SAAS,IAAI;AAAA,IAC9D;AAAA,IAEA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,OAA4D;AAAA,IACxE,MAAM,WAAW,KAAK,0BAA0B,MAAM,WAAW,MAAM,EAAE;AAAA,IACzE,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,SAAS,SAAS,UAAU;AAAA,MAC5B,WAAW,YAAY,MAAM,SAAS;AAAA,IACxC;AAAA,IACA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,0BAAyB,CAC7B,OAC4B;AAAA,IAC5B,MAAM,WAAW,KAAK,0BAA0B,MAAM,WAAW,MAAM,EAAE;AAAA,IACzE,KAAK,+BAA+B,UAAU,MAAM,cAAc;AAAA,IAClE,MAAM,OAA0B;AAAA,SAC3B;AAAA,MACH,WAAW;AAAA,QACT,OAAO,MAAM;AAAA,QACb,qBAAqB,IAAI,KACvB,KAAK,IACH,SAAS,UAAW,oBAAoB,QAAQ,GAChD,MAAM,oBAAoB,QAAQ,CACpC,CACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,KAAK,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACtE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,QAA8E;AAAA,IAC1F,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACpE,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAA+D;AAAA,IACxE,IAAI,iBAAiB,KAAK,KAAK,MAAM,aAAa,WAAW,GAAG;AAAA,MAC9D,OAAO;AAAA,QACL,MAAM,CAAC;AAAA,QACP,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,cAAc,MAAM,cAAc,IAAI,IAAI,MAAM,WAAW,IAAI;AAAA,IACrE,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WAAY,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,IAAK,EACrF,OAAO,CAAC,WAAY,cAAc,YAAY,IAAI,OAAO,UAAU,IAAI,IAAK,EAC5E,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,WAAW;AAAA,MAC1B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,OAGI,wBAAuB,CAC3B,OACuC;AAAA,IACvC,MAAM,OAAO,yBACX,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,GAC/E,MAAM,aACN,CAAC,WAAW,OAAO,UACrB;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,KAAK,IAAI,WAAW;AAAA,IAC5B;AAAA;AAAA,EAGM,0BAA0B,CAAC,WAAmB,IAA+B;AAAA,IACnF,MAAM,SAAS,KAAK,KAAK,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACtD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,kBACR,wBAAwB,8BAA8B,aACxD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAAC,WAAmB,IAA+B;AAAA,IAClF,MAAM,SAAS,KAAK,2BAA2B,WAAW,EAAE;AAAA,IAC5D,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,kBACR,wBAAwB,oBAAoB,6BAC9C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,yBAAyB,CAAC,WAAmB,IAA+B;AAAA,IAClF,MAAM,SAAS,KAAK,2BAA2B,WAAW,EAAE;AAAA,IAC5D,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,kBACR,wBAAwB,oBAAoB,6BAC9C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,wBAAwB,CAAC,WAAmB,IAA+B;AAAA,IACjF,MAAM,SAAS,KAAK,2BAA2B,WAAW,EAAE;AAAA,IAC5D,IAAI,OAAO,WAAW,aAAa,OAAO,WAAW,WAAW;AAAA,MAC9D,MAAM,IAAI,kBACR,wBAAwB,oBAAoB,iCAC9C;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,4BAA4B,CAAC,OAAkD;AAAA,IACrF,MAAM,SAAS,KAAK,2BAA2B,MAAM,WAAW,MAAM,EAAE;AAAA,IACxE,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,WAAW,aAAa,MAAM,WAAW,aAAa;AAAA,MAC/D,OAAO;AAAA,IACT;AAAA,IAEA,IAAI,OAAO,WAAW,YAAY,MAAM,WAAW,aAAa;AAAA,MAC9D,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,IAAI,kBACR,wBAAwB,MAAM,oBAAoB,MAAM,8CAA8C,OAAO,UAC/G;AAAA;AAAA,EAGM,wBAAwB,CAAC,WAAmB,IAAY,OAAsB;AAAA,IACpF,KAAK,+BAA+B,KAAK,2BAA2B,WAAW,EAAE,GAAG,KAAK;AAAA;AAAA,EAGnF,8BAA8B,CAAC,QAA2B,OAAsB;AAAA,IACtF,IAAI,OAAO,WAAW,UAAU,OAAO;AAAA,MACrC,MAAM,IAAI,kBACR,gEAAgE,OAAO,MACzE;AAAA,IACF;AAAA;AAEJ;AAAA;AAEO,MAAM,gCAAiE;AAAA,EAIzD;AAAA,EAHF,QAAQ,IAAI;AAAA,EAE7B,WAAW,CACQ,cAKjB;AAAA,IALiB;AAAA;AAAA,EAOnB,QAAQ,GAA2C;AAAA,IACjD,OAAO,gBAAgB,KAAK,KAAK;AAAA;AAAA,EAGnC,OAAO,CAAC,UAAwD;AAAA,IAC9D,KAAK,MAAM,MAAM;AAAA,IACjB,YAAY,KAAK,WAAW,gBAAgB,QAAQ,GAAG;AAAA,MACrD,KAAK,MAAM,IAAI,KAAK,MAAM;AAAA,IAC5B;AAAA;AAAA,OAGI,MAAK,CAAC,OAAkE;AAAA,IAC5E,0BAAyB,MAAM,WAAW,WAAW;AAAA,IAErD,MAAM,cAAc,KAAK,aAAa,0BACpC,MAAM,WACN,MAAM,aACR;AAAA,IACA,KAAK,aAAa,yBAChB,MAAM,WACN,MAAM,eACN,MAAM,cACR;AAAA,IACA,IAAI,YAAY,eAAe,MAAM,YAAY;AAAA,MAC/C,MAAM,IAAI,kBACR,6BAA6B,MAAM,iBAAiB,MAAM,4CAA4C,MAAM,4BAA4B,YAAY,cACtJ;AAAA,IACF;AAAA,IAEA,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,EAAE;AAAA,IAChD,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG;AAAA,MACvB,MAAM,IAAI,kBACR,6BAA6B,MAAM,mCAAmC,MAAM,aAC9E;AAAA,IACF;AAAA,IAEA,MAAM,SAAgC;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,WAAW,MAAM;AAAA,MACjB,eAAe,MAAM;AAAA,MACrB,YAAY,MAAM;AAAA,MAClB,WAAW,MAAM;AAAA,MACjB,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd,SAAS,MAAM;AAAA,MACf,QAAQ;AAAA,MACR,OAAO,YAAY,MAAM,KAAK;AAAA,MAC9B,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IAEA,KAAK,MAAM,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACvC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,OAAM,CAAC,OAAmE;AAAA,IAC9E,MAAM,WAAW,KAAK,qBAAqB,MAAM,WAAW,MAAM,EAAE;AAAA,IACpE,KAAK,aAAa,yBAChB,MAAM,WACN,SAAS,eACT,MAAM,cACR;AAAA,IACA,MAAM,OAA8B;AAAA,SAC/B;AAAA,MACH,QAAQ,MAAM;AAAA,MACd,YAAY,IAAI,KAAK,MAAM,cAAc,IAAI,IAAM;AAAA,IACrD;AAAA,IAEA,MAAM,OACJ,MAAM,WAAW,cACb;AAAA,SACK;AAAA,MACH,QAAQ,MAAM,SAAS,YAAY,MAAM,MAAM,IAAI;AAAA,MACnD,OAAO;AAAA,IACT,IACA;AAAA,SACK;AAAA,MACH,QAAQ;AAAA,MACR,OAAO,kBAAiB,MAAM,KAAK;AAAA,IACrC;AAAA,IAEN,KAAK,MAAM,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACvE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,KAAI,CAAC,OAAiE;AAAA,IAC1E,MAAM,WAAW,KAAK,sBAAsB,MAAM,WAAW,MAAM,EAAE;AAAA,IACrE,KAAK,aAAa,yBAAyB,MAAM,WAAW,SAAS,aAAa;AAAA,IAClF,KAAK,aAAa,yBAChB,MAAM,WACN,SAAS,eACT,MAAM,cACR;AAAA,IAEA,MAAM,OAA8B;AAAA,SAC/B;AAAA,MACH,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,QAAQ;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IAEA,KAAK,MAAM,IAAI,WAAW,MAAM,WAAW,MAAM,EAAE,GAAG,YAAY,IAAI,CAAC;AAAA,IACvE,OAAO,YAAY,IAAI;AAAA;AAAA,OAGnB,QAAO,CAAC,QAAkF;AAAA,IAC9F,MAAM,SAAS,KAAK,MAAM,IAAI,WAAW,OAAO,WAAW,OAAO,EAAE,CAAC;AAAA,IACrE,OAAO,SAAS,YAAY,MAAM,IAAI;AAAA;AAAA,OAGlC,KAAI,CAAC,OAAuE;AAAA,IAChF,IAAI,iBAAiB,KAAK,GAAG;AAAA,MAC3B,OAAO;AAAA,QACL,OAAO,CAAC;AAAA,QACR,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,YAAY,MAAM,QAAQ;AAAA,IAC3C,MAAM,WAAW,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,EACrC,OAAO,CAAC,WAAW,OAAO,cAAc,MAAM,SAAS,EACvD,OAAO,CAAC,WACP,MAAM,gBAAgB,OAAO,kBAAkB,MAAM,gBAAgB,IACvE,EACC,OAAO,CAAC,WAAY,MAAM,aAAa,OAAO,eAAe,MAAM,aAAa,IAAK,EACrF,OAAO,CAAC,WAAY,MAAM,WAAW,OAAO,aAAa,MAAM,WAAW,IAAK,EAC/E,OAAO,CAAC,WAAY,MAAM,SAAS,OAAO,WAAW,MAAM,SAAS,IAAK,EACzE,OAAO,CAAC,WAAY,MAAM,UAAU,OAAO,YAAY,MAAM,UAAU,IAAK,EAC5E,OAAO,CAAC,WACP,0BAA0B,QAAQ;AAAA,MAChC;AAAA,MACA,cAAc,MAAM;AAAA,MACpB,eAAe,MAAM;AAAA,IACvB,CAAC,CACH,EACC,KAAK,CAAC,MAAM,UAAU,iBAAiB,MAAM,OAAO,KAAK,CAAC;AAAA,IAE7D,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IAEzD,OAAO;AAAA,MACL,OAAO,KAAK,IAAI,WAAW;AAAA,MAC3B;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGM,qBAAqB,CAAC,WAAmB,IAAmC;AAAA,IAClF,MAAM,SAAS,KAAK,MAAM,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACvD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,kBACR,6BAA6B,8BAA8B,aAC7D;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,WAAW,WAAW;AAAA,MAC/B,MAAM,IAAI,kBACR,6BAA6B,oBAAoB,6BACnD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGD,oBAAoB,CAAC,WAAmB,IAAmC;AAAA,IACjF,MAAM,SAAS,KAAK,MAAM,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACvD,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,kBACR,6BAA6B,8BAA8B,aAC7D;AAAA,IACF;AAAA,IAEA,IAAI,OAAO,WAAW,aAAa,OAAO,WAAW,WAAW;AAAA,MAC9D,MAAM,IAAI,kBACR,6BAA6B,oBAAoB,iCACnD;AAAA,IACF;AAAA,IAEA,OAAO;AAAA;AAAA,EAGT,mBAAmB,CAAC,WAAmB,IAAmC;AAAA,IACxE,MAAM,OAAO,KAAK,MAAM,IAAI,WAAW,WAAW,EAAE,CAAC;AAAA,IACrD,IAAI,CAAC,MAAM;AAAA,MACT,MAAM,IAAI,kBACR,6BAA6B,8BAA8B,aAC7D;AAAA,IACF;AAAA,IACA,IAAI,KAAK,aAAa,SAAS;AAAA,MAC7B,MAAM,IAAI,kBAAiB,6BAA6B,2BAA2B;AAAA,IACrF;AAAA,IACA,OAAO;AAAA;AAEX;AAAA;AAEO,MAAM,qCAA2E;AAAA,EAInE;AAAA,EAIA;AAAA,EAPF,OAAO,IAAI;AAAA,EAE5B,WAAW,CACQ,OAIA,YACjB;AAAA,IALiB;AAAA,IAIA;AAAA;AAAA,EAGnB,QAAQ,GAAgD;AAAA,IACtD,OAAO,gBAAgB,KAAK,IAAI;AAAA;AAAA,EAGlC,OAAO,CAAC,UAA6D;AAAA,IACnE,KAAK,KAAK,MAAM;AAAA,IAChB,YAAY,KAAK,WAAW,gBAAgB,QAAQ;AAAA,MAAG,KAAK,KAAK,IAAI,KAAK,MAAM;AAAA;AAAA,OAG5E,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,OAAO,KAAK,MAAM,oBAAoB,MAAM,WAAW,MAAM,SAAS;AAAA,IAC5E,MAAM,cAAc,KAAK,MAAM,mBAAmB,MAAM,WAAW,KAAK,aAAa;AAAA,IACrF,MAAM,qCAAoC;AAAA,MACxC,YAAY,KAAK;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,qBAAqB,YAAY;AAAA,IACnC,CAAC;AAAA,IACD,IAAI,KAAK,WAAW,WAAW;AAAA,MAC7B,MAAM,IAAI,kBACR,mCAAmC,MAAM,yCAC3C;AAAA,IACF;AAAA,IACA,MAAM,MAAM,WAAW,MAAM,WAAW,MAAM,SAAS;AAAA,IACvD,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG;AAAA,MACtB,MAAM,IAAI,kBACR,gEAAgE,MAAM,aACxE;AAAA,IACF;AAAA,IACA,IACE,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EAAE,KACtB,CAAC,QAAQ,IAAI,cAAc,MAAM,aAAa,IAAI,gBAAgB,MAAM,WAC1E,GACA;AAAA,MACA,MAAM,IAAI,kBACR,qBAAqB,MAAM,kEAC7B;AAAA,IACF;AAAA,IACA,MAAM,SAAqC;AAAA,MACzC,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,aAAa,MAAM;AAAA,MACnB,SAAS,MAAM;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ,MAAM;AAAA,MACd,SAAS;AAAA,MACT,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IACA,KAAK,KAAK,IAAI,KAAK,YAAY,MAAM,CAAC;AAAA,IACtC,OAAO,YAAY,MAAM;AAAA;AAAA,OAGrB,MAAK,CAAC,OAA4E;AAAA,IACtF,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,QAAQ;AAAA,IACzE,MAAM,OAAmC;AAAA,SACpC;AAAA,MACH,QAAQ;AAAA,SACJ,MAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,IAAI,CAAC;AAAA,MAClD,SAAS;AAAA,MACT,WAAW,YAAY,MAAM,SAAS;AAAA,MACtC,WAAW,IAAI,KAAK,MAAM,aAAa,IAAI,IAAM;AAAA,IACnD;AAAA,IACA,OAAO,KAAK,KAAK,IAAI;AAAA;AAAA,OAGjB,QAAO,CAAC,OAA8E;AAAA,IAC1F,MAAM,MAAM,KAAK,cAAc,MAAM,WAAW,MAAM,WAAW,SAAS;AAAA,IAC1E,OAAO,KAAK,KAAK,KAAK,KAAK,SAAS,IAAI,UAAU,GAAG,WAAW,YAAY,MAAM,SAAS,EAAE,CAAC;AAAA;AAAA,OAG1F,0BAAyB,CAC7B,OACqC;AAAA,IACrC,MAAM,MAAM,KAAK,aAAa,MAAM,WAAW,MAAM,WAAW,MAAM,cAAc;AAAA,IACpF,OAAO,KAAK,KAAK;AAAA,SACZ;AAAA,MACH,WAAW;AAAA,QACT,OAAO,MAAM;AAAA,QACb,qBAAqB,IAAI,KACvB,KAAK,IACH,IAAI,UAAW,oBAAoB,QAAQ,GAC3C,MAAM,oBAAoB,QAAQ,CACpC,CACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA;AAAA,OAGG,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,MAAM,KAAK,aAAa,MAAM,WAAW,MAAM,WAAW,MAAM,cAAc;AAAA,IACpF,OAAO,KAAK,KAAK;AAAA,SACZ;AAAA,MACH,QAAQ,MAAM;AAAA,SACV,MAAM,YAAY,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,QAAQ;AAAA,SAC5D,MAAM,iBAAiB,YAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;AAAA,SAC3E,MAAM,UAAU,YAAY,CAAC,IAAI,EAAE,OAAO,YAAY,MAAM,KAAK,EAAE;AAAA,SACnE,MAAM,gBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,YAAY,MAAM,WAAW,EAAE;AAAA,SACrF,MAAM,WAAW,eAAe,MAAM,UAAU,YAChD,CAAC,IACD,EAAE,OAAO,sBAAsB,MAAM,KAAK,EAAE;AAAA,MAChD,WAAW;AAAA,MACX,aAAa,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,IACvD,CAAC;AAAA;AAAA,OAGG,OAAM,CAAC,OAA6E;AAAA,IACxF,MAAM,MAAM,KAAK,gBAAgB,MAAM,WAAW,MAAM,SAAS;AAAA,IACjE,IAAI,IAAI,WAAW,YAAY,IAAI,WAAW,WAAW;AAAA,MACvD,MAAM,IAAI,kBACR,mCAAmC,MAAM,+CAA+C,IAAI,UAC9F;AAAA,IACF;AAAA,IACA,OAAO,KAAK,KAAK;AAAA,SACZ;AAAA,MACH,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,OAAO,sBAAsB,MAAM,KAAK;AAAA,MACxC,aAAa,IAAI,KAAK,MAAM,eAAe,IAAI,IAAM;AAAA,IACvD,CAAC;AAAA;AAAA,OAGG,eAAc,CAAC,QAG0B;AAAA,IAC7C,MAAM,MAAM,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,SAAS,CAAC;AAAA,IACxE,OAAO,MAAM,YAAY,GAAG,IAAI;AAAA;AAAA,OAG5B,KAAI,CAAC,OAAiF;AAAA,IAC1F,MAAM,WAAW,MAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC5D,MAAM,QAAQ,MAAM,SAAS;AAAA,IAC7B,MAAM,WAAW,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,EACpC,OAAO,CAAC,QAAQ,IAAI,cAAc,MAAM,SAAS,EACjD,OAAO,CAAC,QAAS,MAAM,UAAU,IAAI,YAAY,MAAM,UAAU,IAAK,EACtE,OAAO,CAAC,QAAS,WAAW,SAAS,IAAI,IAAI,MAAM,IAAI,IAAK,EAC5D,KAAK,CAAC,GAAG,MACR,UAAU,QACN,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ,IAC5C,EAAE,UAAU,QAAQ,IAAI,EAAE,UAAU,QAAQ,CAClD;AAAA,IACF,QAAQ,MAAM,OAAO,YAAY,SAAS,UAAU,KAAK;AAAA,IACzD,OAAO,EAAE,MAAM,KAAK,IAAI,WAAW,GAAG,OAAO,QAAQ;AAAA;AAAA,EAG/C,aAAa,CACnB,WACA,WACA,QAC4B;AAAA,IAC5B,MAAM,MAAM,KAAK,KAAK,IAAI,WAAW,WAAW,SAAS,CAAC;AAAA,IAC1D,IAAI,CAAC;AAAA,MAAK,MAAM,IAAI,kBAAiB,mCAAmC,uBAAuB;AAAA,IAC/F,IAAI,IAAI,WAAW,QAAQ;AAAA,MACzB,MAAM,IAAI,kBACR,mCAAmC,sBAAsB,mBAAmB,IAAI,WAClF;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,eAAe,CAAC,WAAmB,WAA+C;AAAA,IACxF,MAAM,MAAM,KAAK,KAAK,IAAI,WAAW,WAAW,SAAS,CAAC;AAAA,IAC1D,IAAI,CAAC,KAAK;AAAA,MACR,MAAM,IAAI,kBACR,mCAAmC,qCAAqC,aAC1E;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,YAAY,CAClB,WACA,WACA,OAC4B;AAAA,IAC5B,MAAM,MAAM,KAAK,cAAc,WAAW,WAAW,SAAS;AAAA,IAC9D,IAAI,IAAI,WAAW,UAAU,OAAO;AAAA,MAClC,MAAM,IAAI,kBACR,2EAA2E,aAC7E;AAAA,IACF;AAAA,IACA,OAAO;AAAA;AAAA,EAGD,IAAI,CAAC,QAAgE;AAAA,IAC3E,KAAK,KAAK,IAAI,WAAW,OAAO,WAAW,OAAO,SAAS,GAAG,YAAY,MAAM,CAAC;AAAA,IACjF,OAAO,YAAY,MAAM;AAAA;AAE7B;;AC3xBA,IAAM,mBAAkB,IAAI;AAErB,SAAS,qCAAqC,CACnD,SACA,SACM;AAAA,EACN,iBAAgB,IAAI,SAAS,OAAO;AAAA;;;AnCoD/B,MAAM,iBAAmC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACQ,gBAAgB,IAAI;AAAA,EACpB,oBAAoB,IAAI;AAAA,EACxB;AAAA,EACA,cAAc,IAAI;AAAA,EAClB,oBAAoB,IAAI;AAAA,EACxB,sBAAsB,IAAI,6BAA4B,KAAK,iBAAiB;AAAA,EAC5E,mBAAmB,IAAI,yBAAyB,KAAK,aAAa;AAAA,IACjF,eAAe,KAAK;AAAA,EACtB,CAAC;AAAA,EACgB,eAAe,IAAI,sBAAqB,KAAK,gBAAgB;AAAA,EAC7D,iBAAiB,IAAI,wBAAuB,KAAK,gBAAgB;AAAA,EACjE,gBAAgB,IAAI,uBAAsB,KAAK,gBAAgB;AAAA,IAC9E,SAAS,CAAC,UAAU,KAAK,+BAA+B,KAAK;AAAA,IAC7D,cAAc,OAAO,UAAU;AAAA,MAC7B,MAAM,cAAc,MAAM,KAAK,+BAA+B,KAAK;AAAA,MACnE,IAAI,aAAa,SAAS;AAAA,QAAY,OAAO,EAAE,aAAa,MAAM,aAAa,YAAY;AAAA,MAC3F,MAAM,SAAS,MAAM,KAAK,aAAa,KAAK,QAAQ;AAAA,QAClD,WAAW,MAAM;AAAA,QACjB,IAAI,YAAY;AAAA,MAClB,CAAC;AAAA,MACD,IAAI,CAAC;AAAA,QAAQ,MAAM,IAAI,MAAM,+CAA+C;AAAA,MAC5E,OAAO;AAAA,QACL,aAAa,OAAO;AAAA,QACpB,aAAa,MAAM,KAAK,+BAA+B;AAAA,aAClD;AAAA,UACH,aAAa,OAAO;AAAA,QACtB,CAAC;AAAA,MACH;AAAA;AAAA,EAEJ,CAAC;AAAA,EACgB,iBAAiB,IAAI,wBAAuB;AAAA,IAC3D,kBAAkB,GAAG,WAAW,kBAC9B,KAAK,iBAAiB,QAAQ,EAAE,WAAW,IAAI,YAAY,CAAC;AAAA,IAC9D,oBAAoB,GAAG,WAAW,oBAChC,KAAK,eAAe,UAAU,WAAW,aAAa;AAAA,IACxD,mBAAmB,GAAG,WAAW,oBAC/B,KAAK,cAAc,UAAU,WAAW,aAAa;AAAA,IACvD,kBAAkB,GAAG,gBAAgB,KAAK,eAAe,YAAY,SAAS;AAAA,EAChF,CAAC;AAAA,EACgB,mBAAmB,IAAI,0BAAyB,KAAK,gBAAgB;AAAA,EACrE,iBAAiB,IAAI,wBAAuB,KAAK,gBAAgB;AAAA,EACjE,qBAAqB,IAAI,4BAA2B,KAAK,gBAAgB;AAAA,EACzE,uBAAuB,IAAI,8BAA6B;AAAA,IACvE,YAAY,KAAK;AAAA,EACnB,CAAC;AAAA,EACgB,qBAAqB,IAAI,4BAA2B,KAAK,gBAAgB;AAAA,EACzE,8BAA8B,IAAI;AAAA,EAClC,oBAAoB,IAAI,2BAA0B,KAAK,gBAAgB;AAAA,EACvE,eAAe,IAAI;AAAA,EACnB,2BAA2B,IAAI;AAAA,EAC/B;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,WAAW,CAAC,UAAkC,CAAC,GAAG;AAAA,IAChD,KAAK,6BAA6B,IAAI,oCACpC,QAAQ,oBACV;AAAA,IACA,MAAM,QAAQ,6BACZ,CAAC,QAAQ,KAAK,qBAAqB,GAAG,GACtC,MAAM,KAAK,6BAA6B,CAC1C;AAAA,IACA,KAAK,UAAU,4BAA2B,KAAK,eAAe,KAAK;AAAA,IACnE,KAAK,aAAa,6BAA4B,KAAK,mBAAmB,KAAK;AAAA,IAC3E,KAAK,OAAO,0BAAyB,KAAK,aAAa,KAAK;AAAA,IAC5D,KAAK,aAAa,6BAA4B,KAAK,kBAAkB,KAAK;AAAA,IAC1E,KAAK,SAAS,2BAA0B,KAAK,cAAc,KAAK;AAAA,IAChE,KAAK,UAAU,6BAA4B,KAAK,gBAAgB,KAAK;AAAA,IACrE,KAAK,UAAU,6BAA4B,KAAK,eAAe,KAAK;AAAA,IACpE,KAAK,WAAW,6BAA4B,KAAK,gBAAgB,KAAK;AAAA,IACtE,KAAK,aAAa,6BAA4B,KAAK,kBAAkB,KAAK;AAAA,IAC1E,KAAK,WAAW,6BAA4B,KAAK,gBAAgB,KAAK;AAAA,IACtE,KAAK,eAAe,6BAA4B,KAAK,oBAAoB,KAAK;AAAA,IAC9E,KAAK,iBAAiB,6BAA4B,KAAK,sBAAsB,KAAK;AAAA,IAClF,KAAK,eAAe,iCAAgC,KAAK,oBAAoB,KAAK;AAAA,IAClF,KAAK,wBAAwB,6BAC3B,KAAK,6BACL,KACF;AAAA,IACA,KAAK,cAAc,6BAA4B,KAAK,mBAAmB,KAAK;AAAA,IAC5E,KAAK,QAAQ,6BAA4B,KAAK,cAAc,KAAK;AAAA,IACjE,KAAK,cAAc,6BAA4B,KAAK,mBAAmB,KAAK;AAAA,IAC5E,KAAK,gBAAgB,6BAA4B,KAAK,qBAAqB,KAAK;AAAA,IAChF,KAAK,qBAAqB,6BAA4B,KAAK,0BAA0B,KAAK;AAAA,IAC1F,KAAK,uBAAuB,6BAA4B,KAAK,4BAA4B,KAAK;AAAA,IAC9F,KAAK,kBAAkB,IAAI,wBAAwB,KAAK,eAAe,KAAK,mBAAmB;AAAA,MAC7F,kBAAkB,OAAO,QAAQ,IAAI;AAAA,MACrC,qBAAqB,MAAM,KAAK,0BAA0B;AAAA,MAC1D,6BAA6B,MAAM,KAAK,kCAAkC;AAAA,MAC1E,sCAAsC,CAAC,UACrC,KAAK,qBAAqB,6CAA6C,KAAK;AAAA,MAC9E,iBAAiB,OAAO,WAAW,gBAChC,MAAM,KAAK,iBAAiB,QAAQ,EAAE,WAAW,IAAI,YAAY,CAAC,MAAO;AAAA,IAC9E,CAAC;AAAA,IACD,KAAK,WAAW,8BAA6B,KAAK,iBAAiB,KAAK;AAAA,IACxE,KAAK,gBAAgB,qBAAqB,KAAK,QAAQ;AAAA,IACvD,sCAAsC,MAAM,EAAE,UAAU,MAAM,KAAK,SAAS,EAAE,CAAC;AAAA;AAAA,OAGnE,+BAA8B,CAAC,OAGI;AAAA,IAC/C,MAAM,YAAY,MAAM,KAAK,iBAAiB,QAAQ;AAAA,MACpD,WAAW,MAAM;AAAA,MACjB,IAAI,MAAM;AAAA,IACZ,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAW;AAAA,IAChB,IAAI,UAAU,SAAS,SAAS,SAAS;AAAA,MACvC,MAAM,WAAW,UAAU;AAAA,MAC3B,OAAO,4BACL,SAAS,SAAS,cAAc,SAAS,OAAO,SAAS,MACzD,SAAS,SAAS,YACd,SAAS,YACT,SAAS,SAAS,cAChB,SAAS,QACT,MACN,UAAU,iBAAiB,SAAS,qBAChC,UAAU,iBAAiB,UAAU,KACrC,IACN;AAAA,IACF;AAAA,IACA,MAAM,YAAY,MAAM,KAAK,aAAa,KAAK,QAAQ;AAAA,MACrD,WAAW,MAAM;AAAA,MACjB,IAAI,UAAU,SAAS;AAAA,IACzB,CAAC;AAAA,IACD,IAAI,WAAW,SAAS,gBAAgB;AAAA,MACtC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,YAAY,UAAU;AAAA,QACtB,UAAU,UAAU;AAAA,MACtB;AAAA,IACF;AAAA,IACA,IAAI,WAAW,SAAS,YAAY;AAAA,MAClC,OAAO;AAAA,QACL,MAAM;AAAA,QACN,eAAe,UAAU;AAAA,QACzB,aAAa,UAAU;AAAA,MACzB;AAAA,IACF;AAAA,IACA,MAAM,WAAW,MAAM,KAAK,mBAAmB,WAAW,eAAe;AAAA,MACvE,WAAW,MAAM;AAAA,MACjB,WAAW,UAAU,SAAS;AAAA,IAChC,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAU;AAAA,IACf,MAAM,OAAO,MAAM,KAAK,mBAAmB,MAAM,QAAQ;AAAA,MACvD,WAAW,MAAM;AAAA,MACjB,IAAI,SAAS;AAAA,IACf,CAAC;AAAA,IACD,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,OAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,KAAK;AAAA,MAClB,WAAW,SAAS;AAAA,MACpB,YAAY,KAAK;AAAA,MACjB,eAAe,KAAK;AAAA,IACtB;AAAA;AAAA,EAGe,mBAAmB,IAAI;AAAA,EACvB,0BAA0B,IAAI;AAAA,EAC9B,4BAA4B,IAAI;AAAA,EAIzC,kBAAiC,QAAQ,QAAQ;AAAA,OAEnD,KAAI,GAAkB;AAAA,IAC1B,MAAM,KAAK,qBAAqB,MAAG;AAAA,MAAG;AAAA,KAAS;AAAA;AAAA,OAe3C,YAAc,CAClB,KACA,WAAsC,CAAC,GAC3B;AAAA,IACZ,MAAM,4BAA4B,KAAK,iBAAiB,SAAS;AAAA,IACjE,IAAI,6BAA6B,KAAK,wBAAwB,IAAI,yBAAyB,GAAG;AAAA,MAC5F,+BAA8B;AAAA,IAChC;AAAA,IAEA,OAAO,KAAK,oBAAoB,YAAY;AAAA,MAC1C,MAAM,WAAW,KAAK,SAAS;AAAA,MAC/B,IAAI,SAAS;AAAA,MACb,MAAM,KAAK,+BAA8B,KAAK,yBAAyB,GAAG,MAAM,MAAM;AAAA,MACtF,MAAM,mBAAmB,CAAC;AAAA,MAC1B,MAAM,2BAA2B,IAAI;AAAA,MACrC,KAAK,wBAAwB,IAAI,gBAAgB;AAAA,MACjD,KAAK,0BAA0B,IAAI,kBAAkB,wBAAwB;AAAA,MAE7E,IAAI;AAAA,QACF,MAAM,SAAS,MAAM,KAAK,iBAAiB,IAAI,kBAAkB,YAAY;AAAA,UAC3E,IAAI;AAAA,YACF,OAAO,MAAM,IAAI,EAAE;AAAA,oBACnB;AAAA,YACA,MAAM,KAAK,eAAe,iBAAiB;AAAA;AAAA,SAE9C;AAAA,QACD,yBAAyB,kBAAkB;AAAA,QAC3C,OAAO;AAAA,QACP,OAAO,OAAO;AAAA,QAGd,IAAI;AAAA,UACF,KAAK,QAAQ,QAAQ;AAAA,UACrB,OAAO,cAAc;AAAA,UACrB,MAAM,IAAI,yBACR,kIACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,KAEvD,EAAE,OAAO,aAAa,CACxB;AAAA;AAAA,QAEF,MAAM;AAAA,gBACN;AAAA,QACA,KAAK,gBAAgB,oBAAoB,gBAAgB;AAAA,QACzD,yBAAyB,WAAW;AAAA,QACpC,KAAK,wBAAwB,OAAO,gBAAgB;AAAA,QACpD,SAAS;AAAA;AAAA,KAEZ;AAAA;AAAA,OAGW,qBAAuB,CAAC,KAAuC;AAAA,IAC3E,KAAK,6BAA6B;AAAA,IAClC,OAAO,KAAK,oBAAoB,YAAY,IAAI,CAAC;AAAA;AAAA,EAG3C,4BAA4B,GAAS;AAAA,IAC3C,IAAI,CAAC,KAAK,0BAA0B;AAAA,MAAG;AAAA,IACvC,MAAM,IAAI,yBACR,gGACF;AAAA;AAAA,EAGM,yBAAyB,GAAkB;AAAA,IACjD,MAAM,QAAQ,KAAK,iBAAiB,SAAS;AAAA,IAC7C,OAAO,SAAS,KAAK,wBAAwB,IAAI,KAAK,IAAI,QAAQ;AAAA;AAAA,EAG5D,iCAAiC,GAAuD;AAAA,IAC9F,MAAM,QAAQ,KAAK,0BAA0B;AAAA,IAC7C,OAAO,QAAS,KAAK,0BAA0B,IAAI,KAAK,KAAK,OAAQ;AAAA;AAAA,OAGzD,oBAAsB,CAAC,KAAmC;AAAA,IACtE,MAAM,WAAW,KAAK;AAAA,IACtB,IAAI;AAAA,IACJ,KAAK,kBAAkB,IAAI,QAAc,CAAC,YAAY;AAAA,MACpD,UAAU;AAAA,KACX;AAAA,IAED,MAAM;AAAA,IACN,IAAI;AAAA,MACF,OAAO,MAAM,IAAI;AAAA,cACjB;AAAA,MACA,QAAQ;AAAA;AAAA;AAAA,EAIJ,wBAAwB,GAAY;AAAA,IAC1C,OAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,SAAS,KAAK;AAAA,MACd,SAAS,KAAK;AAAA,MACd,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,MACf,cAAc,KAAK;AAAA,MACnB,gBAAgB,KAAK;AAAA,MACrB,cAAc,KAAK;AAAA,MACnB,uBAAuB,KAAK;AAAA,MAC5B,aAAa,KAAK;AAAA,MAClB,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,eAAe,KAAK;AAAA,MACpB,oBAAoB,KAAK;AAAA,MACzB,sBAAsB,KAAK;AAAA,MAC3B,MAAM,YAAS;AAAA,QAAG;AAAA;AAAA,MAClB,aAAa,YAA2B;AAAA,QACtC,+BAA8B;AAAA;AAAA,IAElC;AAAA;AAAA,EAGM,QAAQ,GAA4B;AAAA,IAC1C,OAAO;AAAA,MACL,SAAS,KAAK,cAAc,SAAS;AAAA,MACrC,YAAY,KAAK,kBAAkB,SAAS;AAAA,MAC5C,UAAU,KAAK,gBAAgB,SAAS;AAAA,MACxC,MAAM,KAAK,YAAY,SAAS;AAAA,MAChC,YAAY,KAAK,iBAAiB,SAAS;AAAA,MAC3C,QAAQ,KAAK,aAAa,SAAS;AAAA,MACnC,SAAS,KAAK,eAAe,SAAS;AAAA,MACtC,SAAS,KAAK,cAAc,SAAS;AAAA,MACrC,UAAU,KAAK,eAAe,SAAS;AAAA,MACvC,YAAY,KAAK,iBAAiB,SAAS;AAAA,MAC3C,UAAU,KAAK,eAAe,SAAS;AAAA,MACvC,cAAc,KAAK,mBAAmB,SAAS;AAAA,MAC/C,gBAAgB,KAAK,qBAAqB,SAAS;AAAA,MACnD,cAAc,KAAK,mBAAmB,SAAS;AAAA,MAC/C,uBAAuB,KAAK,4BAA4B,SAAS;AAAA,MACjE,aAAa,KAAK,kBAAkB,SAAS;AAAA,MAC7C,OAAO,KAAK,aAAa,SAAS;AAAA,MAClC,aAAa,KAAK,kBAAkB,SAAS;AAAA,MAC7C,eAAe,KAAK,oBAAoB,SAAS;AAAA,MACjD,oBAAoB,KAAK,yBAAyB,SAAS;AAAA,MAC3D,sBAAsB,KAAK,2BAA2B,SAAS;AAAA,IACjE;AAAA;AAAA,EAGM,OAAO,CAAC,UAAyC;AAAA,IACvD,KAAK,cAAc,QAAQ,SAAS,OAAO;AAAA,IAC3C,KAAK,kBAAkB,QAAQ,SAAS,UAAU;AAAA,IAClD,KAAK,gBAAgB,QAAQ,SAAS,QAAQ;AAAA,IAC9C,KAAK,YAAY,QAAQ,SAAS,IAAI;AAAA,IACtC,KAAK,iBAAiB,QAAQ,SAAS,UAAU;AAAA,IACjD,KAAK,aAAa,QAAQ,SAAS,MAAM;AAAA,IACzC,KAAK,eAAe,QAAQ,SAAS,OAAO;AAAA,IAC5C,KAAK,cAAc,QAAQ,SAAS,OAAO;AAAA,IAC3C,KAAK,eAAe,QAAQ,SAAS,QAAQ;AAAA,IAC7C,KAAK,iBAAiB,QAAQ,SAAS,UAAU;AAAA,IACjD,KAAK,eAAe,QAAQ,SAAS,QAAQ;AAAA,IAC7C,KAAK,mBAAmB,QAAQ,SAAS,YAAY;AAAA,IACrD,KAAK,qBAAqB,QAAQ,SAAS,cAAc;AAAA,IACzD,KAAK,mBAAmB,QAAQ,SAAS,YAAY;AAAA,IACrD,KAAK,4BAA4B,QAAQ,SAAS,qBAAqB;AAAA,IACvE,KAAK,kBAAkB,QAAQ,SAAS,WAAW;AAAA,IACnD,KAAK,aAAa,QAAQ,SAAS,KAAK;AAAA,IACxC,KAAK,kBAAkB,QAAQ,SAAS,WAAW;AAAA,IACnD,KAAK,oBAAoB,QAAQ,SAAS,aAAa;AAAA,IACvD,KAAK,yBAAyB,QAAQ,SAAS,kBAAkB;AAAA,IACjE,KAAK,2BAA2B,QAAQ,SAAS,oBAAoB;AAAA;AAEzE;;AoC/aO,SAAS,0BAAyB,CAAC,SAAsD;AAAA,EAC9F,OAAO,MAAM,QAAS,QAAoC,SAAS;AAAA;AAIrE,eAAsB,eAAc,CAAC,SAAmD;AAAA,EACtF,IAAI,CAAC,2BAA0B,OAAO,KAAK,QAAQ,UAAU,WAAW,GAAG;AAAA,IACzE,OAAO,EAAE,QAAQ,WAAW,SAAS,CAAC,EAAE;AAAA,EAC1C;AAAA,EAEA,MAAM,UAA6B,CAAC;AAAA,EAEpC,WAAW,YAAY,QAAQ,WAAW;AAAA,IACxC,QAAQ,KAAK,MAAM,SAAS,QAAQ,CAAC;AAAA,EACvC;AAAA,EAEA,OAAO;AAAA,IACL,QAAQ,QAAQ,KAAK,CAAC,WAAW,OAAO,WAAW,UAAU,IAAI,aAAa;AAAA,IAC9E;AAAA,EACF;AAAA;;;ACFF,eAAsB,mBAAkB,CAAC,SAA+C;AAAA,EACtF,IAAI,CAAC,2BAA0B,OAAO;AAAA,IAAG,OAAO,EAAE,IAAI,MAAM,UAAU,MAAM;AAAA,EAE5E,IAAI;AAAA,IAGF,MAAM,WAAW,MAAM,QAAQ,IAAI,QAAQ,UAAU,IAAI,CAAC,aAAa,SAAS,OAAO,CAAC,CAAC;AAAA,IACzF,MAAM,WAAW,SAAS,OAAO,CAAC,WAAW,OAAO,UAAU,SAAS;AAAA,IAEvE,IAAI,SAAS,WAAW;AAAA,MAAG,OAAO,EAAE,IAAI,MAAM,UAAU,KAAK;AAAA,IAE7D,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,MAGV,QAAQ,SACL,IAAI,CAAC,WAAW,GAAG,OAAO,cAAc,OAAO,gBAAW,OAAO,UAAU,IAAI,EAC/E,KAAK,IAAI;AAAA,IACd;AAAA,IACA,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,OAAO;AAAA,MACL,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,QAAQ,yCAAyC;AAAA,IACnD;AAAA;AAAA;;ACxBG,SAAS,KAAc,CAC5B,IACA,IACA,UAAgC,CAAC,GACR;AAAA,EACzB,QAAQ,SAAS,SAAS,iBAAiB,EAAE;AAAA,EAE7C,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,QAAQ;AAAA,IAClB;AAAA,EACF;AAAA;AAGK,SAAS,iBAA0B,CACxC,SACwB;AAAA,EACxB,MAAM,QAAQ,CAAC,GAAG,QAAQ,KAAK;AAAA,EAC/B,iBAAiB,QAAQ,WAAW,KAAK;AAAA,EAEzC,OAAO;AAAA,IACL,WAAW,QAAQ;AAAA,IACnB,eAAe,MAAM,GAAG,EAAE,GAAG,WAAW;AAAA,IACxC;AAAA,EACF;AAAA;AAGF,eAAe,gBAA0B,CACvC,QACkC;AAAA,EAClC,MAAM,OAAO,MAAM,OAAO;AAAA,EAE1B,MAAM,OAAO,MAAM,OAAO,MAAM,YAAY,OAAO,WAAW,SAAS;AAAA,EACvE,MAAM,UAAU,oBAAoB,OAAO,YAAY,IAAI;AAAA,EAE3D,OAAO;AAAA,IACL,WAAW,OAAO,WAAW;AAAA,IAC7B,eAAe,OAAO,WAAW;AAAA,IACjC;AAAA,IACA,SAAS,OAAO,WAAW,MAAM,MAAM,QAAQ,MAAM;AAAA,EACvD;AAAA;AAGF,eAAsB,gBAAyB,CAC7C,QAC0B;AAAA,EAC1B,MAAM,MAAM,OAAO,QAAQ,MAAM,IAAI,KAAK,EAAE,YAAY;AAAA,EACxD,MAAM,OAAO,MAAM,iBAAiB,MAAM;AAAA,EAC1C,MAAM,UAAoB,CAAC;AAAA,EAE3B,WAAW,aAAa,KAAK,SAAS;AAAA,IACpC,MAAM,OAAO,MAAM,YAAY,YAAY;AAAA,MACzC,MAAM,OAAO,MAAM,YAAY,KAAK,WAAW,WAAW,IAAI,CAAC;AAAA,MAC/D,MAAM,UAAU,GAAG,OAAO,OAAO;AAAA,MACjC,MAAM,OAAO,MAAM,YAAY,KAAK,WAAW,WAAW,IAAI,CAAC;AAAA,KAChE;AAAA,IAED,QAAQ,KAAK,UAAU,EAAE;AAAA,EAC3B;AAAA,EAEA,OAAO;AAAA,IACL,WAAW,KAAK;AAAA,IAChB,eAAe,KAAK;AAAA,IACpB,QAAQ,QAAQ,SAAS,IAAI,aAAa;AAAA,IAC1C;AAAA,IACA,SAAS,KAAK,QAAQ,IAAI,CAAC,cAAc,UAAU,EAAE;AAAA,EACvD;AAAA;AAGF,SAAS,gBAAgB,CAAC,IAA+C;AAAA,EACvE,MAAM,QAAQ,uBAAuB,KAAK,EAAE;AAAA,EAE5C,IAAI,CAAC,OAAO;AAAA,IACV,MAAM,IAAI,MAAM,yDAAyD,IAAI;AAAA,EAC/E;AAAA,EAEA,MAAM,UAAU,OAAO,MAAM,EAAE;AAAA,EAE/B,IAAI,CAAC,OAAO,UAAU,OAAO,KAAK,UAAU,GAAG;AAAA,IAC7C,MAAM,IAAI,MAAM,2DAA2D,IAAI;AAAA,EACjF;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,IACA,MAAM,MAAM,MAAM;AAAA,EACpB;AAAA;AAGF,SAAS,gBAA0B,CACjC,WACA,OACM;AAAA,EACN,IAAI,kBAAkB;AAAA,EAEtB,WAAW,aAAa,OAAO;AAAA,IAC7B,IAAI,UAAU,WAAW,iBAAiB;AAAA,MACxC,MAAM,IAAI,MAAM,IAAI,6DAA6D;AAAA,IACnF;AAAA,IAEA,kBAAkB,UAAU;AAAA,EAC9B;AAAA;AAaK,SAAS,yBAAkC,CAAC,QAG/B;AAAA,EAClB,QAAQ,YAAY,SAAS;AAAA,EAC7B,MAAM,OAAO,EAAE,WAAW,WAAW,WAAW,eAAe,WAAW,cAAc;AAAA,EAOxF,IAAI,SAAS,MAAM;AAAA,IACjB,OAAO,WAAW,MAAM,WAAW,IAC/B,KAAK,MAAM,gBAAgB,GAAG,OAAO,UAAU,IAC/C;AAAA,SACK;AAAA,MACH,gBAAgB;AAAA,MAChB,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACN;AAAA,EAEA,MAAM,UAAU,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AAAA,EAC9D,MAAM,iBAAiB,QAAQ,GAAG,EAAE,GAAG,WAAW;AAAA,EAClD,MAAM,QAAQ,KAAK,MAAM,eAAe;AAAA,EACxC,MAAM,OAAO,IAAI;AAAA,EAEjB,WAAW,OAAO,SAAS;AAAA,IACzB,IAAI,IAAI,cAAc,WAAW,WAAW;AAAA,MAC1C,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,mDAAmD,IAAI;AAAA,MACjE;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,cAAc,IAAI;AAAA,MAC5B;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,WAAW,WAAW;AAAA,MAC5B,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,6BAA6B,IAAI;AAAA,MAC3C;AAAA,IACF;AAAA,IAEA,IAAI,KAAK,IAAI,IAAI,OAAO,GAAG;AAAA,MACzB,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,gCAAgC,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,KAAK,IAAI,IAAI,OAAO;AAAA,EACtB;AAAA,EAEA,YAAY,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AAAA,IAC5C,MAAM,YAAY,WAAW,MAAM;AAAA,IAEnC,IAAI,CAAC,aAAa,IAAI,UAAU,WAAW,eAAe;AAAA,MACxD,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QACE,oFACA;AAAA,MACJ;AAAA,IACF;AAAA,IAEA,IAAI,IAAI,YAAY,UAAU,WAAW,IAAI,OAAO,UAAU,IAAI;AAAA,MAChE,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IAEA,KAAK,IAAI,YAAY,WAAW,UAAU,YAAY,OAAO;AAAA,MAC3D,OAAO;AAAA,WACF;AAAA,QACH,OAAO;AAAA,QACP,QAAQ,uCAAuC,IAAI;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ,WAAW,GAAG;AAAA,IACxB,OAAO,WAAW,MAAM,WAAW,IAC/B,KAAK,OAAO,OAAO,UAAU,IAC7B;AAAA,SACK;AAAA,MACH,OAAO;AAAA,MACP,QAAQ;AAAA,IACV;AAAA,EACN;AAAA,EAEA,MAAM,eAAe,WAAW,MAAM,SAAS,QAAQ;AAAA,EACvD,IAAI,eAAe,GAAG;AAAA,IACpB,OAAO;AAAA,SACF;AAAA,MACH,OAAO;AAAA,MACP,QAAQ,GAAG;AAAA,IACb;AAAA,EACF;AAAA,EAEA,OAAO,KAAK,OAAO,OAAO,UAAU;AAAA;AAGtC,SAAS,mBAA6B,CACpC,YACA,MAC4B;AAAA,EAC5B,MAAM,SAAS,0BAAyB,EAAE,YAAY,KAAK,CAAC;AAAA,EAG5D,IACE,OAAO,UAAU,aACjB,OAAO,UAAU,mBACjB,OAAO,UAAU,WACjB;AAAA,IACA,MAAM,IAAI,MAAM,IAAI,WAAW,cAAc,OAAO,QAAQ;AAAA,EAC9D;AAAA,EAEA,OAAO,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO;AAAA;",
55
- "debugId": "D6580203ED9CA7F564756E2164756E21",
55
+ "mappings": "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",
56
+ "debugId": "E15B3DF7CD823E3C64756E2164756E21",
56
57
  "names": []
57
58
  }