@visuno/angular 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/LICENSE +24 -0
  2. package/README.md +56 -2
  3. package/account-table/account-table.component.d.ts +72 -0
  4. package/action-log/action-log.component.d.ts +41 -0
  5. package/activity-heatmap/activity-heatmap.component.d.ts +67 -0
  6. package/agent-inbox/agent-inbox.component.d.ts +75 -0
  7. package/agent-lanes/agent-lanes.component.d.ts +152 -0
  8. package/agent-phases/agent-phases.component.d.ts +62 -0
  9. package/agent-run-timeline/agent-run-timeline.component.d.ts +113 -0
  10. package/agent-tree/agent-tree.component.d.ts +80 -0
  11. package/answer-action-bar/answer-action-bar.component.d.ts +110 -0
  12. package/artifact-card/artifact-card.component.d.ts +145 -0
  13. package/attachment-tray/attachment-tray.component.d.ts +84 -0
  14. package/badge/badge.component.d.ts +25 -0
  15. package/bar-chart/bar-chart.component.d.ts +87 -0
  16. package/browser-session/browser-session.component.d.ts +70 -0
  17. package/buttons/buttons.component.d.ts +63 -0
  18. package/card/card.component.d.ts +21 -0
  19. package/change-review/change-review.component.d.ts +97 -0
  20. package/citation-hover-card/citation-hover-card.component.d.ts +95 -0
  21. package/code-viewer/code-viewer.component.d.ts +86 -0
  22. package/composer/composer.component.d.ts +114 -0
  23. package/context-meter/context-meter.component.d.ts +60 -0
  24. package/core/icon.component.d.ts +10 -0
  25. package/core/reduced-motion.service.d.ts +15 -0
  26. package/decision-prompt/decision-prompt.component.d.ts +56 -0
  27. package/design-review/design-review.component.d.ts +108 -0
  28. package/design-tuner/design-tuner.component.d.ts +75 -0
  29. package/details-panel/details-panel.component.d.ts +150 -0
  30. package/donut-chart/donut-chart.component.d.ts +63 -0
  31. package/draft-review/draft-review.component.d.ts +128 -0
  32. package/error-recovery/error-recovery.component.d.ts +59 -0
  33. package/esm2022/account-table/account-table.component.mjs +399 -0
  34. package/esm2022/action-log/action-log.component.mjs +177 -0
  35. package/esm2022/activity-heatmap/activity-heatmap.component.mjs +285 -0
  36. package/esm2022/agent-inbox/agent-inbox.component.mjs +284 -0
  37. package/esm2022/agent-lanes/agent-lanes.component.mjs +600 -0
  38. package/esm2022/agent-phases/agent-phases.component.mjs +300 -0
  39. package/esm2022/agent-run-timeline/agent-run-timeline.component.mjs +412 -0
  40. package/esm2022/agent-tree/agent-tree.component.mjs +393 -0
  41. package/esm2022/answer-action-bar/answer-action-bar.component.mjs +636 -0
  42. package/esm2022/artifact-card/artifact-card.component.mjs +916 -0
  43. package/esm2022/attachment-tray/attachment-tray.component.mjs +402 -0
  44. package/esm2022/badge/badge.component.mjs +97 -0
  45. package/esm2022/bar-chart/bar-chart.component.mjs +300 -0
  46. package/esm2022/browser-session/browser-session.component.mjs +352 -0
  47. package/esm2022/buttons/buttons.component.mjs +215 -0
  48. package/esm2022/card/card.component.mjs +107 -0
  49. package/esm2022/change-review/change-review.component.mjs +398 -0
  50. package/esm2022/citation-hover-card/citation-hover-card.component.mjs +360 -0
  51. package/esm2022/code-viewer/code-viewer.component.mjs +291 -0
  52. package/esm2022/composer/composer.component.mjs +743 -0
  53. package/esm2022/context-meter/context-meter.component.mjs +275 -0
  54. package/esm2022/core/icon.component.mjs +111 -0
  55. package/esm2022/core/reduced-motion.service.mjs +34 -0
  56. package/esm2022/decision-prompt/decision-prompt.component.mjs +259 -0
  57. package/esm2022/design-review/design-review.component.mjs +428 -0
  58. package/esm2022/design-tuner/design-tuner.component.mjs +341 -0
  59. package/esm2022/details-panel/details-panel.component.mjs +537 -0
  60. package/esm2022/donut-chart/donut-chart.component.mjs +240 -0
  61. package/esm2022/draft-review/draft-review.component.mjs +549 -0
  62. package/esm2022/error-recovery/error-recovery.component.mjs +231 -0
  63. package/esm2022/eval-results/eval-results.component.mjs +368 -0
  64. package/esm2022/feedback-sheet/feedback-sheet.component.mjs +411 -0
  65. package/esm2022/field-extraction/field-extraction.component.mjs +368 -0
  66. package/esm2022/funnel-chart/funnel-chart.component.mjs +258 -0
  67. package/esm2022/grid/grid.component.mjs +66 -0
  68. package/esm2022/health-score/health-score.component.mjs +420 -0
  69. package/esm2022/human-handoff/human-handoff.component.mjs +676 -0
  70. package/esm2022/image-generation/image-generation.component.mjs +1028 -0
  71. package/esm2022/inline-text-diff/inline-text-diff.component.mjs +390 -0
  72. package/esm2022/launch-checklist/launch-checklist.component.mjs +229 -0
  73. package/esm2022/line-chart/line-chart.component.mjs +417 -0
  74. package/esm2022/live-answer/live-answer.component.mjs +411 -0
  75. package/esm2022/metric-insight/metric-insight.component.mjs +511 -0
  76. package/esm2022/modal/modal.component.mjs +202 -0
  77. package/esm2022/model-picker/model-picker.component.mjs +491 -0
  78. package/esm2022/permission-gate/permission-gate.component.mjs +498 -0
  79. package/esm2022/plan-review/plan-review.component.mjs +432 -0
  80. package/esm2022/progress/progress.component.mjs +503 -0
  81. package/esm2022/prompt-library/prompt-library.component.mjs +453 -0
  82. package/esm2022/prompt-starters/prompt-starters.component.mjs +272 -0
  83. package/esm2022/proposal-card/proposal-card.component.mjs +402 -0
  84. package/esm2022/public-api.mjs +88 -0
  85. package/esm2022/radar-chart/radar-chart.component.mjs +500 -0
  86. package/esm2022/radial-goals/radial-goals.component.mjs +418 -0
  87. package/esm2022/reasoning-trail/reasoning-trail.component.mjs +284 -0
  88. package/esm2022/response-versions/response-versions.component.mjs +288 -0
  89. package/esm2022/rewrite-toolbar/rewrite-toolbar.component.mjs +397 -0
  90. package/esm2022/rich-text-editor/rich-text-editor.component.mjs +1755 -0
  91. package/esm2022/run-cost/run-cost.component.mjs +215 -0
  92. package/esm2022/run-queue/run-queue.component.mjs +481 -0
  93. package/esm2022/run-summary/run-summary.component.mjs +331 -0
  94. package/esm2022/scatter-chart/scatter-chart.component.mjs +705 -0
  95. package/esm2022/score-breakdown/score-breakdown.component.mjs +460 -0
  96. package/esm2022/segmented-control/segmented-control.component.mjs +180 -0
  97. package/esm2022/source-stack/source-stack.component.mjs +245 -0
  98. package/esm2022/stat-cards/stat-cards.component.mjs +258 -0
  99. package/esm2022/status-pill/status-pill.component.mjs +305 -0
  100. package/esm2022/steering/steering.component.mjs +343 -0
  101. package/esm2022/step-loader/step-loader.component.mjs +209 -0
  102. package/esm2022/task-table/task-table.component.mjs +534 -0
  103. package/esm2022/terminal-stream/terminal-stream.component.mjs +583 -0
  104. package/esm2022/thinking/thinking.component.mjs +276 -0
  105. package/esm2022/thinking-states/thinking-states.component.mjs +333 -0
  106. package/esm2022/thread-panel/thread-panel.component.mjs +271 -0
  107. package/esm2022/toast/toast.component.mjs +195 -0
  108. package/esm2022/toast-stack/toast-stack.component.mjs +301 -0
  109. package/esm2022/tool-call/tool-call.component.mjs +273 -0
  110. package/esm2022/tooltip/tooltip.component.mjs +417 -0
  111. package/esm2022/top-pages/top-pages.component.mjs +240 -0
  112. package/esm2022/trace-view/trace-view.component.mjs +440 -0
  113. package/esm2022/visuno-angular.mjs +5 -0
  114. package/esm2022/voice-capture/voice-capture.component.mjs +650 -0
  115. package/esm2022/voice-orb/voice-orb.component.mjs +538 -0
  116. package/esm2022/web-search/web-search.component.mjs +374 -0
  117. package/eval-results/eval-results.component.d.ts +67 -0
  118. package/feedback-sheet/feedback-sheet.component.d.ts +74 -0
  119. package/fesm2022/visuno-angular.mjs +31992 -0
  120. package/fesm2022/visuno-angular.mjs.map +1 -0
  121. package/field-extraction/field-extraction.component.d.ts +82 -0
  122. package/funnel-chart/funnel-chart.component.d.ts +70 -0
  123. package/grid/grid.component.d.ts +22 -0
  124. package/health-score/health-score.component.d.ts +87 -0
  125. package/human-handoff/human-handoff.component.d.ts +125 -0
  126. package/image-generation/image-generation.component.d.ts +253 -0
  127. package/index.d.ts +5 -0
  128. package/inline-text-diff/inline-text-diff.component.d.ts +76 -0
  129. package/launch-checklist/launch-checklist.component.d.ts +46 -0
  130. package/line-chart/line-chart.component.d.ts +89 -0
  131. package/live-answer/live-answer.component.d.ts +110 -0
  132. package/metric-insight/metric-insight.component.d.ts +110 -0
  133. package/modal/modal.component.d.ts +37 -0
  134. package/model-picker/model-picker.component.d.ts +97 -0
  135. package/package.json +51 -4
  136. package/permission-gate/permission-gate.component.d.ts +100 -0
  137. package/plan-review/plan-review.component.d.ts +86 -0
  138. package/progress/progress.component.d.ts +91 -0
  139. package/prompt-library/prompt-library.component.d.ts +121 -0
  140. package/prompt-starters/prompt-starters.component.d.ts +65 -0
  141. package/proposal-card/proposal-card.component.d.ts +101 -0
  142. package/public-api.d.ts +82 -0
  143. package/radar-chart/radar-chart.component.d.ts +110 -0
  144. package/radial-goals/radial-goals.component.d.ts +90 -0
  145. package/reasoning-trail/reasoning-trail.component.d.ts +73 -0
  146. package/response-versions/response-versions.component.d.ts +54 -0
  147. package/rewrite-toolbar/rewrite-toolbar.component.d.ts +92 -0
  148. package/rich-text-editor/rich-text-editor.component.d.ts +180 -0
  149. package/run-cost/run-cost.component.d.ts +43 -0
  150. package/run-queue/run-queue.component.d.ts +93 -0
  151. package/run-summary/run-summary.component.d.ts +81 -0
  152. package/scatter-chart/scatter-chart.component.d.ts +139 -0
  153. package/score-breakdown/score-breakdown.component.d.ts +107 -0
  154. package/segmented-control/segmented-control.component.d.ts +44 -0
  155. package/source-stack/source-stack.component.d.ts +60 -0
  156. package/stat-cards/stat-cards.component.d.ts +86 -0
  157. package/status-pill/status-pill.component.d.ts +64 -0
  158. package/steering/steering.component.d.ts +75 -0
  159. package/step-loader/step-loader.component.d.ts +40 -0
  160. package/styles.css +424 -0
  161. package/task-table/task-table.component.d.ts +114 -0
  162. package/terminal-stream/terminal-stream.component.d.ts +110 -0
  163. package/thinking/thinking.component.d.ts +63 -0
  164. package/thinking-states/thinking-states.component.d.ts +51 -0
  165. package/thread-panel/thread-panel.component.d.ts +75 -0
  166. package/toast/toast.component.d.ts +56 -0
  167. package/toast-stack/toast-stack.component.d.ts +72 -0
  168. package/tokens.css +424 -0
  169. package/tool-call/tool-call.component.d.ts +61 -0
  170. package/tooltip/tooltip.component.d.ts +89 -0
  171. package/top-pages/top-pages.component.d.ts +75 -0
  172. package/trace-view/trace-view.component.d.ts +95 -0
  173. package/voice-capture/voice-capture.component.d.ts +103 -0
  174. package/voice-orb/voice-orb.component.d.ts +78 -0
  175. package/web-search/web-search.component.d.ts +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visuno-angular.mjs","sources":["../../core/icon.component.ts","../../core/reduced-motion.service.ts","../../account-table/account-table.component.ts","../../action-log/action-log.component.ts","../../activity-heatmap/activity-heatmap.component.ts","../../agent-inbox/agent-inbox.component.ts","../../agent-lanes/agent-lanes.component.ts","../../agent-phases/agent-phases.component.ts","../../agent-run-timeline/agent-run-timeline.component.ts","../../agent-tree/agent-tree.component.ts","../../answer-action-bar/answer-action-bar.component.ts","../../artifact-card/artifact-card.component.ts","../../attachment-tray/attachment-tray.component.ts","../../badge/badge.component.ts","../../bar-chart/bar-chart.component.ts","../../browser-session/browser-session.component.ts","../../buttons/buttons.component.ts","../../card/card.component.ts","../../change-review/change-review.component.ts","../../citation-hover-card/citation-hover-card.component.ts","../../code-viewer/code-viewer.component.ts","../../composer/composer.component.ts","../../context-meter/context-meter.component.ts","../../decision-prompt/decision-prompt.component.ts","../../design-review/design-review.component.ts","../../design-tuner/design-tuner.component.ts","../../details-panel/details-panel.component.ts","../../donut-chart/donut-chart.component.ts","../../draft-review/draft-review.component.ts","../../error-recovery/error-recovery.component.ts","../../eval-results/eval-results.component.ts","../../feedback-sheet/feedback-sheet.component.ts","../../field-extraction/field-extraction.component.ts","../../funnel-chart/funnel-chart.component.ts","../../grid/grid.component.ts","../../health-score/health-score.component.ts","../../human-handoff/human-handoff.component.ts","../../image-generation/image-generation.component.ts","../../inline-text-diff/inline-text-diff.component.ts","../../launch-checklist/launch-checklist.component.ts","../../line-chart/line-chart.component.ts","../../live-answer/live-answer.component.ts","../../metric-insight/metric-insight.component.ts","../../modal/modal.component.ts","../../model-picker/model-picker.component.ts","../../permission-gate/permission-gate.component.ts","../../plan-review/plan-review.component.ts","../../progress/progress.component.ts","../../prompt-library/prompt-library.component.ts","../../prompt-starters/prompt-starters.component.ts","../../proposal-card/proposal-card.component.ts","../../radar-chart/radar-chart.component.ts","../../radial-goals/radial-goals.component.ts","../../reasoning-trail/reasoning-trail.component.ts","../../response-versions/response-versions.component.ts","../../rewrite-toolbar/rewrite-toolbar.component.ts","../../rich-text-editor/rich-text-editor.component.ts","../../run-cost/run-cost.component.ts","../../run-queue/run-queue.component.ts","../../run-summary/run-summary.component.ts","../../scatter-chart/scatter-chart.component.ts","../../score-breakdown/score-breakdown.component.ts","../../segmented-control/segmented-control.component.ts","../../source-stack/source-stack.component.ts","../../stat-cards/stat-cards.component.ts","../../status-pill/status-pill.component.ts","../../steering/steering.component.ts","../../step-loader/step-loader.component.ts","../../task-table/task-table.component.ts","../../terminal-stream/terminal-stream.component.ts","../../thinking/thinking.component.ts","../../thinking-states/thinking-states.component.ts","../../thread-panel/thread-panel.component.ts","../../toast/toast.component.ts","../../toast-stack/toast-stack.component.ts","../../tool-call/tool-call.component.ts","../../tooltip/tooltip.component.ts","../../top-pages/top-pages.component.ts","../../trace-view/trace-view.component.ts","../../voice-capture/voice-capture.component.ts","../../voice-orb/voice-orb.component.ts","../../web-search/web-search.component.ts","../../public-api.ts","../../visuno-angular.ts"],"sourcesContent":["// framework/angular/core/icon.component.ts\n//\n// Minimal icon component for the Angular port. Renders the same geometric\n// SVG glyphs as the Vanilla core (<symbol id=\"i-*\">) / the React icons (Phosphor, MIT).\n// Add further glyphs to GLYPHS as needed (path data from\n// framework/react/lib/icons.tsx or framework/vanilla/core/core.js).\n\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\n\nexport type VoIconName =\n | 'minus' | 'plus' | 'x' | 'check'\n | 'chev-r' | 'chev-l' | 'chev-d' | 'chev-u'\n | 'spark' | 'lock' | 'copy' | 'play' | 'pause' | 'refresh'\n | 'ok' | 'alert' | 'warn' | 'info' | 'clock' | 'eye' | 'search'\n | 'users' | 'coins'\n | 'ext' | 'undo' | 'redo' | 'stop' | 'trash' | 'edit' | 'more' | 'comment'\n | 'file-text' | 'term' | 'pr' | 'figma' | 'globe' | 'cpu' | 'hand';\n\n/** Path markup per glyph (viewBox 0 0 24 24, drawn as stroke). */\nconst GLYPHS: Record<VoIconName, string> = {\n 'minus': '<path d=\"M5 12h14\"/>',\n 'plus': '<path d=\"M12 5v14M5 12h14\"/>',\n 'x': '<path d=\"M6 6l12 12M18 6 6 18\"/>',\n 'check': '<path d=\"m5 12.5 4.5 4.5L19 7.5\"/>',\n 'chev-r': '<path d=\"m9 6 6 6-6 6\"/>',\n 'chev-l': '<path d=\"m15 6-6 6 6 6\"/>',\n 'chev-d': '<path d=\"m6 9 6 6 6-6\"/>',\n 'chev-u': '<path d=\"m6 15 6-6 6 6\"/>',\n 'spark': '<path d=\"M12 3.5c.6 4.3 2.2 5.9 6.5 6.5-4.3.6-5.9 2.2-6.5 6.5-.6-4.3-2.2-5.9-6.5-6.5 4.3-.6 5.9-2.2 6.5-6.5zM18.5 15c.3 2 1 2.7 3 3-2 .3-2.7 1-3 3-.3-2-1-2.7-3-3 2-.3 2.7-1 3-3z\"/>',\n 'lock': '<rect x=\"5\" y=\"10.5\" width=\"14\" height=\"10\" rx=\"2\"/><path d=\"M8 10.5V8a4 4 0 0 1 8 0v2.5\"/>',\n 'copy': '<rect x=\"8.5\" y=\"8.5\" width=\"11\" height=\"11\" rx=\"2\"/><path d=\"M15.5 8.5V6a2 2 0 0 0-2-2h-7a2 2 0 0 0-2 2v7a2 2 0 0 0 2 2h2\"/>',\n 'play': '<path d=\"M7 5v14l12-7z\"/>',\n 'pause': '<path d=\"M8 5v14M16 5v14\"/>',\n 'refresh': '<path d=\"M20 12a8 8 0 1 1-2.4-5.7M20 4v4.5h-4.5\"/>',\n 'ok': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"m8.2 12.3 2.6 2.6 5-5.2\"/>',\n 'alert': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7.5V13M12 16.5v.01\"/>',\n 'warn': '<path d=\"M12 4 2.8 19.5h18.4z\"/><path d=\"M12 10v4M12 17v.01\"/>',\n 'info': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 11v5M12 8v.01\"/>',\n 'clock': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 7v5l3 2\"/>',\n 'eye': '<path d=\"M2.5 12S6 5.5 12 5.5 21.5 12 21.5 12 18 18.5 12 18.5 2.5 12 2.5 12z\"/><circle cx=\"12\" cy=\"12\" r=\"3\"/>',\n 'search': '<circle cx=\"11\" cy=\"11\" r=\"6.5\"/><path d=\"m20 20-4-4\"/>',\n 'users': '<circle cx=\"9\" cy=\"8.5\" r=\"3.5\"/><path d=\"M2.8 19.5c1-3.3 3.4-5 6.2-5s5.2 1.7 6.2 5M16 5.2a3.4 3.4 0 0 1 0 6.6M17.6 14.6c1.8.6 3 2.2 3.6 4.9\"/>',\n 'coins': '<ellipse cx=\"9\" cy=\"7\" rx=\"5.5\" ry=\"2.5\"/><path d=\"M3.5 7v4c0 1.4 2.5 2.5 5.5 2.5s5.5-1.1 5.5-2.5V7\"/><path d=\"M9.5 15.8c.9 1 2.9 1.7 5 1.7 3 0 5.5-1.1 5.5-2.5v-4c0-1.2-1.8-2.2-4.3-2.4\"/>',\n 'ext': '<path d=\"M14 4h6v6M20 4l-9 9M18 14v4a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4\"/>',\n 'undo': '<path d=\"M9 14 4 9l5-5\"/><path d=\"M4 9h10.5a5.5 5.5 0 0 1 0 11H11\"/>',\n 'redo': '<path d=\"m15 14 5-5-5-5\"/><path d=\"M20 9H9.5a5.5 5.5 0 0 0 0 11H13\"/>',\n 'stop': '<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/>',\n 'trash': '<path d=\"M4.5 7h15M10 4h4M6.5 7l1 13h9l1-13M10 11v5M14 11v5\"/>',\n 'edit': '<path d=\"M4 20h4L19 9a2.8 2.8 0 0 0-4-4L4 16z\"/><path d=\"m13.5 6.5 4 4\"/>',\n 'more': '<circle cx=\"6\" cy=\"12\" r=\"1.2\"/><circle cx=\"12\" cy=\"12\" r=\"1.2\"/><circle cx=\"18\" cy=\"12\" r=\"1.2\"/>',\n 'comment': '<path d=\"M5.5 5h13A1.5 1.5 0 0 1 20 6.5v8a1.5 1.5 0 0 1-1.5 1.5H11l-4.2 3.3V16H5.5A1.5 1.5 0 0 1 4 14.5v-8A1.5 1.5 0 0 1 5.5 5z\"/>',\n 'file-text': '<path d=\"M6 3h8l4 4v14H6z\"/><path d=\"M14 3v4h4M9 13h6M9 16.5h6\"/>',\n 'term': '<rect x=\"3\" y=\"4.5\" width=\"18\" height=\"15\" rx=\"2\"/><path d=\"m7 10 3 2.5L7 15M12.5 15.5H17\"/>',\n 'pr': '<circle cx=\"6\" cy=\"6\" r=\"2.2\"/><circle cx=\"6\" cy=\"18\" r=\"2.2\"/><circle cx=\"18\" cy=\"18\" r=\"2.2\"/><path d=\"M6 8.2v7.6M18 15.8V9a3 3 0 0 0-3-3h-4m2-2-2 2 2 2\"/>',\n 'figma': '<path d=\"M9 3h3v6H9a3 3 0 0 1 0-6zM12 3h3a3 3 0 0 1 0 6h-3zM9 9h3v6H9a3 3 0 0 1 0-6zM15 9a3 3 0 1 1 0 6 3 3 0 0 1 0-6zM9 15h3v3a3 3 0 1 1-3-3z\"/>',\n 'globe': '<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M3 12h18M12 3c2.6 3 2.6 15 0 18M12 3c-2.6 3-2.6 15 0 18\"/>',\n 'cpu': '<rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\"/><rect x=\"9.5\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"1\"/><path d=\"M9 3v3M15 3v3M9 18v3M15 18v3M3 9h3M3 15h3M18 9h3M18 15h3\"/>',\n 'hand': '<path d=\"M8.2 13V7.6a1.25 1.25 0 0 1 2.5 0v4.2M10.7 11.6V5.6a1.25 1.25 0 0 1 2.5 0v6M13.2 11.6V6.6a1.25 1.25 0 0 1 2.5 0v5.2M15.7 12V9a1.25 1.25 0 0 1 2.5 0v5c0 3.6-2.5 6-5.8 6-2.2 0-3.7-.9-5-2.7l-2.3-3.3a1.3 1.3 0 0 1 2.1-1.6l1 1.3\"/>',\n};\n\n/** Size classes as in the core: xs=14, sm=16, md=20, lg=24. */\nconst SIZES: Record<string, number> = { xs: 14, sm: 16, md: 20, lg: 24 };\n\n@Component({\n selector: 'vo-icon',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <svg\n class=\"vo-i\"\n [class.vo-xs]=\"size === 'xs'\"\n [attr.width]=\"px\"\n [attr.height]=\"px\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n [innerHTML]=\"markup\"\n ></svg>\n `,\n})\nexport class VoIconComponent {\n @Input({ required: true }) name!: VoIconName;\n @Input() size: 'xs' | 'sm' | 'md' | 'lg' = 'md';\n\n get px(): number {\n return SIZES[this.size] ?? 20;\n }\n\n // Note: glyph markup comes from the own static GLYPHS table (no\n // user input), so innerHTML is uncritical here.\n get markup(): string {\n return GLYPHS[this.name] ?? '';\n }\n}\n","// framework/angular/core/reduced-motion.service.ts\n//\n// Angular equivalent of the React hook `useReducedMotion` from the Vanilla/React source.\n// Components query `reduce()` before animating, and can re-render via the\n// `prefersReduced` signal. Respects the media query\n// (prefers-reduced-motion: reduce) and updates on change.\n\nimport { Injectable, OnDestroy, signal } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ReducedMotionService implements OnDestroy {\n /** Reactive signal: true when the user prefers reduced motion. */\n readonly prefersReduced = signal<boolean>(this.query());\n\n private mq: MediaQueryList | null =\n typeof matchMedia === 'function' ? matchMedia('(prefers-reduced-motion: reduce)') : null;\n\n private readonly onChange = () => this.prefersReduced.set(this.query());\n\n constructor() {\n this.mq?.addEventListener?.('change', this.onChange);\n }\n\n /** Imperative access for setup code outside the template. */\n reduce(): boolean {\n return this.prefersReduced();\n }\n\n private query(): boolean {\n return this.mq?.matches ?? false;\n }\n\n ngOnDestroy(): void {\n this.mq?.removeEventListener?.('change', this.onChange);\n }\n}\n","// framework/angular/account-table/account-table.component.ts\n//\n// Native Angular port of framework/react/account-table/AccountTable.tsx.\n// Accounts you can search and filter by plan; a row opens to show what the agent\n// noticed, with an optional action button (Draft email) that spins while its\n// promise settles. The rows stagger in whenever the search or the filter changes.\n// Inputs mirror the React props; React callbacks become @Output EventEmitters.\n//\n// Icons: search (field), spark (the note's glyph) and check (the done state) — all\n// present in the Angular icon set, so no substitution was needed.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** The tag colours a plan can take. */\nexport type AccountTableTone =\n | 'blue'\n | 'purple'\n | 'green'\n | 'orange'\n | 'red'\n | 'yellow'\n | 'pink'\n | 'teal';\n\n/** One account row. */\nexport interface AccountTableAccount {\n /** Also the account's key, and its first letter makes the logo. */\n name: string;\n /** The logo's colour, like 'var(--vo-av-b)'. Takes white ink for the letter. */\n color: string;\n plan: string;\n seats: number;\n /** 0 to 100. Green from 80, amber from 60, red below. */\n health: number;\n /** Already formatted, like \"$14,400\". */\n mrr: string;\n /** What the agent noticed, shown when the row opens. */\n note?: string;\n}\n\n/** A button in the open row's note, like Draft email. */\nexport interface AccountTableAction {\n label: string;\n doneLabel?: string;\n /** Return a promise and it spins until it settles, then shows `doneLabel`. */\n onClick: (account: AccountTableAccount) => void | Promise<unknown>;\n}\n\nconst TONE: Record<AccountTableTone, string> = {\n blue: 'b',\n purple: 'l',\n green: 'm',\n orange: 'p',\n red: 'r',\n yellow: 'y',\n pink: 'k',\n teal: 't',\n};\nconst TONES: Record<string, AccountTableTone> = {\n Enterprise: 'purple',\n Pro: 'blue',\n Team: 'teal',\n};\n\n@Component({\n selector: 'vo-account-table',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"atb panel\">\n <div class=\"atb-h\">\n <label class=\"atb-s\">\n <vo-icon name=\"search\"></vo-icon>\n <input\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"placeholder\"\n [value]=\"text\"\n (input)=\"onText($any($event.target).value)\"\n />\n </label>\n <div class=\"atb-fl\" role=\"group\" aria-label=\"Plan\">\n @for (p of tabs(); track p) {\n <button\n type=\"button\"\n class=\"chip sm\"\n [class.on]=\"filter === p\"\n [attr.aria-pressed]=\"filter === p\"\n (click)=\"setFilter(p)\"\n >\n {{ p || 'All' }}\n </button>\n }\n </div>\n </div>\n <div class=\"atb-sc\">\n <table>\n <thead>\n <tr>\n <th>Account</th>\n <th>Plan</th>\n <th>Seats</th>\n <th>Health</th>\n <th class=\"r\">MRR</th>\n </tr>\n </thead>\n <tbody>\n @if (rows().length) {\n @for (a of rows(); track a.name; let i = $index) {\n <tr\n class=\"row\"\n [class.open]=\"opened === a.name\"\n [class.enter]=\"animate\"\n [style.animation-delay]=\"animate ? i * 35 + 'ms' : null\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"opened === a.name\"\n (click)=\"toggle(a.name)\"\n (keydown)=\"onRowKey($event, a.name)\"\n >\n <td>\n <span class=\"nm\">\n <span class=\"lg\" [style.background]=\"a.color\">{{ a.name[0] }}</span\n >{{ a.name }}\n </span>\n </td>\n <td>\n <span class=\"tag\" [class]=\"'tag ' + toneClass(a.plan)\">{{ a.plan }}</span>\n </td>\n <td class=\"num\">{{ a.seats }}</td>\n <td>\n <span class=\"hb\"\n ><i\n ><b [style.width]=\"a.health + '%'\" [style.background]=\"healthColor(a.health)\"></b></i\n ><span class=\"num\">{{ a.health }}</span></span\n >\n </td>\n <td class=\"r num\">{{ a.mrr }}</td>\n </tr>\n @if (opened === a.name) {\n <tr class=\"det\">\n <td colspan=\"5\">\n <div class=\"fold\">\n <div>\n <div class=\"atb-note enter\">\n <vo-icon name=\"spark\"></vo-icon>\n <span>{{ a.note }}</span>\n @if (action) {\n <button\n type=\"button\"\n class=\"pill soft sm\"\n [attr.aria-busy]=\"draft === 'busy' ? true : null\"\n (click)=\"runAction($event, a)\"\n >\n @if (draft === 'busy') {\n <span class=\"spin\" aria-hidden=\"true\"></span>\n } @else if (draft === 'done') {\n <vo-icon name=\"check\"></vo-icon>{{ action.doneLabel ?? 'Done' }}\n } @else {\n {{ action.label }}\n }\n </button>\n }\n </div>\n </div>\n </div>\n </td>\n </tr>\n }\n }\n } @else {\n <tr class=\"atb-empty\">\n <td colspan=\"5\">{{ emptyLabel }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n `,\n styleUrl: './account-table.css',\n})\nexport class AccountTableComponent implements OnChanges {\n @Input() accounts: AccountTableAccount[] = [];\n /** The plan filters after All. Defaults to the plans in `accounts`, in first-seen order. */\n @Input() plans?: string[];\n /** The tag colour for each plan. Defaults to Enterprise purple, Pro blue, Team teal. */\n @Input() planTones: Record<string, AccountTableTone> = TONES;\n\n /** The plan filter, or '' for All. Leave undefined to let the chips drive it. */\n @Input() plan?: string;\n @Input() defaultPlan = '';\n @Output() planChange = new EventEmitter<string>();\n\n /** The search text. Matches account names. */\n @Input() query?: string;\n @Input() defaultQuery = '';\n @Output() queryChange = new EventEmitter<string>();\n\n /** The account whose row is open, or null. */\n @Input() open?: string | null;\n @Input() defaultOpen: string | null = null;\n @Output() openChange = new EventEmitter<string | null>();\n\n /** A button in the open row's note. */\n @Input() action?: AccountTableAction;\n @Input() placeholder = 'Search accounts';\n /** Shown when nothing matches the search and filter. */\n @Input() emptyLabel = 'No accounts match';\n\n private readonly motion = inject(ReducedMotionService);\n\n filter = this.defaultPlan;\n text = this.defaultQuery;\n opened: string | null = this.defaultOpen;\n draft: 'idle' | 'busy' | 'done' = 'idle';\n /** Replays the stagger whenever the search or filter changes. */\n animate = !this.motion.reduce();\n\n private draftFor: string | null = this.opened;\n private alive = true;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['plan'] && this.plan !== undefined) this.filter = this.plan;\n if (changes['query'] && this.query !== undefined) this.text = this.query;\n if (changes['open'] && this.open !== undefined) this.opened = this.open;\n if (changes['defaultPlan'] && this.plan === undefined) this.filter = this.defaultPlan;\n if (changes['defaultQuery'] && this.query === undefined) this.text = this.defaultQuery;\n if (changes['defaultOpen'] && this.open === undefined) this.opened = this.defaultOpen;\n // the action button resets whenever another row opens\n if (this.draftFor !== this.opened) {\n this.draftFor = this.opened;\n this.draft = 'idle';\n }\n }\n\n tabs(): string[] {\n if (this.plans) return this.plans;\n return [...new Set(this.accounts.map((a) => a.plan))];\n }\n\n rows(): AccountTableAccount[] {\n const s = this.text.trim().toLowerCase();\n return this.accounts.filter(\n (a) => (!this.filter || a.plan === this.filter) && (!s || a.name.toLowerCase().includes(s)),\n );\n }\n\n toneClass(plan: string): string {\n const tone = this.planTones[plan];\n return tone ? TONE[tone] : '';\n }\n\n healthColor(h: number): string {\n return h >= 80 ? 'var(--vo-atb-ok)' : h >= 60 ? 'var(--vo-atb-warn)' : 'var(--vo-atb-bad)';\n }\n\n onText(value: string): void {\n this.replay();\n if (this.query === undefined) this.text = value;\n this.queryChange.emit(value);\n }\n\n setFilter(p: string): void {\n this.replay();\n if (this.plan === undefined) this.filter = p;\n this.planChange.emit(p);\n }\n\n toggle(name: string): void {\n const next = this.opened === name ? null : name;\n if (this.open === undefined) {\n this.opened = next;\n if (this.draftFor !== this.opened) {\n this.draftFor = this.opened;\n this.draft = 'idle';\n }\n }\n this.openChange.emit(next);\n }\n\n onRowKey(e: KeyboardEvent, name: string): void {\n if ((e.key === 'Enter' || e.key === ' ') && e.target === e.currentTarget) {\n e.preventDefault();\n this.toggle(name);\n }\n }\n\n runAction(e: Event, a: AccountTableAccount): void {\n e.stopPropagation();\n if (!this.action || this.draft === 'busy') return;\n const r = this.action.onClick(a);\n if (r && typeof (r as Promise<unknown>).then === 'function') {\n this.draft = 'busy';\n (r as Promise<unknown>).then(\n () => {\n if (this.alive) this.draft = 'done';\n },\n () => {\n if (this.alive) this.draft = 'idle';\n },\n );\n } else {\n this.draft = 'done';\n }\n }\n\n // the rows restart their stagger for one pass after a search or filter change\n private replay(): void {\n if (this.motion.reduce()) return;\n this.animate = false;\n setTimeout(() => (this.animate = true));\n }\n}\n","// framework/angular/action-log/action-log.component.ts\n//\n// Native Angular port of framework/react/action-log/ActionLog.tsx.\n// Every tool call the agent makes, as a list that grows while it works. Each row\n// opens to show its output. Inputs mirror the React props; callbacks become\n// @Output EventEmitters. The header shows a spinner while running and a green dot\n// once done, as in the vanilla JS (action-log.js).\n\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\n/** One tool call in the log. */\nexport interface Action {\n /** The tool's icon, like 'file-text', 'search', 'edit', 'term' or 'pr'. */\n icon: VoIconName;\n /** What the agent did. HTML is allowed (wrap file names in <code>). */\n title: string;\n /** The quiet line under it, like \"src/pages, 212 lines\". HTML is allowed. */\n detail?: string;\n /** running shows a spinner, done a check and the time. */\n state: 'running' | 'done';\n /** How long it took, like \"0.4s\". Shown once the action is done. */\n time?: string;\n /** What opens under the row, like a diff or test output. HTML is allowed;\n * lines in <span class=\"vo-a\"> or \"vo-x\" read as added or removed. */\n output?: string;\n}\n\n@Component({\n selector: 'vo-action-log',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-alg\"\n [class.vo-panel]=\"!bare\"\n [style.padding-inline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-alg-h\">\n <span class=\"vo-alg-t\">{{ title }}</span>\n @if (running) {\n <span class=\"vo-alg-st\">\n <span class=\"vo-spin\"></span>\n <span class=\"vo-sw vo-alg-sum\">{{ words }}</span>\n </span>\n } @else {\n <span class=\"vo-alg-st vo-enter\">\n <span class=\"vo-dot\" style=\"color:var(--vo-ok)\"></span>\n <span>{{ words }}</span>\n </span>\n }\n </div>\n <ol class=\"vo-alg-list\">\n @for (a of actions; track $index) {\n <li class=\"vo-alg-it vo-enter\">\n <button\n type=\"button\"\n class=\"vo-alg-row\"\n [attr.aria-expanded]=\"a.output ? isOpen($index) : null\"\n (click)=\"toggle($index)\"\n >\n <span class=\"vo-alg-ic\"><vo-icon [name]=\"a.icon\" size=\"sm\"></vo-icon></span>\n <span class=\"vo-alg-tx\">\n <b [innerHTML]=\"a.title\"></b>\n @if (a.detail) {\n <span class=\"vo-d\" [innerHTML]=\"a.detail\"></span>\n }\n </span>\n <span class=\"vo-alg-r\">\n <span class=\"vo-num vo-ms\">{{ a.state === 'done' ? a.time : '' }}</span>\n <span class=\"vo-g\">\n @if (a.state === 'done') {\n <span class=\"vo-enter\" style=\"color:var(--vo-ok)\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n } @else {\n <span class=\"vo-spin\" style=\"width:10px;height:10px\"></span>\n }\n </span>\n </span>\n </button>\n @if (a.output) {\n <div class=\"vo-fold vo-alg-det\" [class.vo-shut]=\"!isOpen($index)\" [attr.inert]=\"isOpen($index) ? null : ''\" [attr.aria-hidden]=\"!isOpen($index)\">\n <div><pre [innerHTML]=\"a.output\"></pre></div>\n </div>\n }\n </li>\n }\n </ol>\n </div>\n `,\n styleUrl: './action-log.css',\n})\nexport class ActionLogComponent {\n /** The tool calls, newest at the end. */\n @Input() actions: Action[] = [];\n @Input() title = 'Agent activity';\n /** Shows a spinner in the header while true, and a green dot once false. */\n @Input() running = true;\n /** The words beside it. Defaults to \"Running step N\", then \"N steps, Xs\". */\n @Input() status?: string;\n /** Sits flat in a chat thread (the default). Set false to give it a card. */\n @Input() bare = true;\n\n /** Emitted when a row opens or closes, with its index and the new open state. */\n @Output() toggleRow = new EventEmitter<{ index: number; open: boolean }>();\n\n private readonly open = new Set<number>();\n\n isOpen(i: number): boolean {\n return this.open.has(i);\n }\n\n toggle(i: number): void {\n const next = !this.open.has(i);\n if (next) this.open.add(i);\n else this.open.delete(i);\n this.toggleRow.emit({ index: i, open: next });\n }\n\n get words(): string {\n if (this.status) return this.status;\n if (this.running) {\n return this.actions.length ? `Running step ${this.actions.length}` : 'Running';\n }\n const total = this.actions.reduce((s, a) => s + (parseFloat(a.time ?? '') || 0), 0);\n return `${this.actions.length} steps${total ? `, ${total.toFixed(1)}s` : ''}`;\n }\n}\n","// framework/angular/activity-heatmap/activity-heatmap.component.ts\n//\n// Native Angular port of framework/react/activity-heatmap/ActivityHeatmap.tsx.\n// When the agent or the team is busy, by day and hour, as a 7x24 grid of cells\n// tinted from the accent by their value. The cells fill in as a wave from the\n// top left; a switch (shown with two or more series) sweeps a new series in the\n// same way. In a narrow card (a phone) the grid shows half the day at a time in\n// bigger cells, scrolls sideways and starts at the latest hours. Inputs mirror\n// the React props; the fill-in, the switch and the scroll edges are ported from\n// the vanilla JS (activity-heatmap.js).\n//\n// Icons: none of this component's chrome uses an icon (the switch is text), so\n// no VoIconComponent is needed.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One series: a switch option with its 168 hourly values. */\nexport interface ActivityHeatmapSeries {\n key: string;\n /** The switch label, like \"Agent\". */\n label: string;\n /** 168 values from 0 to 1, one an hour, Monday 12am first. */\n values: number[];\n /** What a full cell counts, for the tips, like 40. */\n max: number;\n /** What it counts, for the tips, like \"runs\". */\n unit: string;\n /** The line under the title while this series shows, like \"Busiest overnight, when the queue runs\". */\n note?: string;\n}\n\nconst DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\nconst LEGEND = [0.08, 0.3, 0.55, 0.85];\n// every three hours; the ones between the four on a wide card only show on a phone\nconst HOURS = ['12am', '3am', '6am', '9am', '12pm', '3pm', '6pm', '9pm'];\nconst DAY_LABELS = ['Mon', '', 'Wed', '', 'Fri', '', 'Sun'];\n\nconst hour = (h: number): string => (h % 12 || 12) + (h < 12 ? 'am' : 'pm');\n\n/** One cell's render state: its tint, its per-cell transition and its tip. */\ninterface Cell {\n alpha: number;\n transition: string;\n tip: string;\n}\n\n@Component({\n selector: 'vo-activity-heatmap',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-hmx vo-panel\" [class]=\"className\">\n <div class=\"vo-hmx-h\">\n <div>\n <b>{{ title }}</b>\n <span class=\"vo-sw vo-muted vo-hmx-st\" [class.vo-out]=\"stOut\">{{ stText }}</span>\n </div>\n @if (series.length > 1) {\n <div class=\"vo-seg2 vo-hmx-sg\" role=\"group\" aria-label=\"Who\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (s of series; track s.key) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"s.key === key\"\n (click)=\"select(s.key)\"\n >{{ s.label }}</button>\n }\n </div>\n }\n </div>\n <div class=\"vo-hmx-wrap\">\n <div #sc class=\"vo-hmx-sc\">\n <div class=\"vo-hmx-days vo-muted\" aria-hidden=\"true\">\n @for (d of dayLabels; track $index) {\n <span>{{ d }}</span>\n }\n </div>\n <div class=\"vo-hmx-grid\" role=\"img\" [attr.aria-label]=\"gridLabel\">\n @for (cell of cells; track $index) {\n <i\n [style.--vo-a]=\"cell.alpha\"\n [style.transition]=\"cell.transition\"\n [attr.data-tip]=\"cell.tip || null\"\n ></i>\n }\n </div>\n <div class=\"vo-hmx-f vo-muted\" aria-hidden=\"true\">\n @for (t of hours; track t; let i = $index) {\n <span class=\"vo-hmx-ax\" [class.vo-x]=\"i % 2 === 1\">{{ t }}</span>\n }\n </div>\n </div>\n </div>\n <div class=\"vo-hmx-lg vo-muted\" aria-hidden=\"true\">\n Less@for (a of legend; track a) {<i [style.--vo-a]=\"a\"></i>}More\n </div>\n </div>\n `,\n styleUrl: './activity-heatmap.css',\n})\nexport class ActivityHeatmapComponent implements AfterViewInit, OnDestroy {\n /** One or more series; the switch shows when there are two or more. */\n @Input({ required: true }) series: ActivityHeatmapSeries[] = [];\n /** The series on show, by key. Leave it out to let the switch pick it. */\n @Input() set value(v: string | undefined) {\n this.controlled = v !== undefined;\n if (v !== undefined && v !== this.key) {\n this.key = v;\n if (this.ready) {\n this.placeKnob();\n this.draw();\n }\n }\n }\n @Input() defaultValue?: string;\n /** Header text. */\n @Input() title = 'Activity';\n /** The line under the title before the cells fill in, and when a series has no note. */\n @Input() period = 'Last 4 weeks';\n @Input() className = '';\n\n @Output() valueChange = new EventEmitter<string>();\n\n @ViewChild('sc') sc!: ElementRef<HTMLDivElement>;\n\n readonly dayLabels = DAY_LABELS;\n readonly hours = HOURS;\n readonly legend = LEGEND;\n\n key = '';\n cells: Cell[] = Array.from({ length: 168 }, () => ({ alpha: 0, transition: '', tip: '' }));\n stText = '';\n stOut = false;\n knobLeft = 0;\n knobWidth = 0;\n\n private controlled = false;\n private ready = false;\n private drawn = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private ro?: ResizeObserver;\n private moved = false;\n\n get current(): ActivityHeatmapSeries | undefined {\n return this.series.find((s) => s.key === this.key) ?? this.series[0];\n }\n\n get gridLabel(): string {\n return `${this.title}, ${this.current?.note ?? this.period}`;\n }\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled && !this.key) {\n this.key = this.defaultValue ?? this.series[0]?.key ?? '';\n }\n this.stText = this.period;\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n this.setupScroll();\n // the cells start empty and fill in a moment after the card appears\n this.later(() => {\n this.drawn = true;\n this.draw();\n }, 150);\n }\n\n select(key: string): void {\n if (!this.controlled) {\n this.key = key;\n this.placeKnob();\n this.draw();\n }\n this.valueChange.emit(key);\n }\n\n private draw(): void {\n const s = this.current;\n const reduce = this.reduced.reduce();\n // the line under the title blurs out and back in when the series changes\n const note = this.drawn ? s?.note ?? this.period : this.period;\n if (note !== this.stText) {\n this.stOut = true;\n this.later(() => {\n this.stText = note;\n this.stOut = false;\n this.cdr.markForCheck();\n }, reduce ? 0 : 170);\n }\n for (let i = 0; i < 168; i++) {\n const d = Math.floor(i / 24);\n const h = i % 24;\n const v = s?.values[i] ?? 0;\n // each cell changes a beat after the one before it, so a new series sweeps in from the top left\n const delay = reduce ? 0 : (h + d) * 14;\n this.cells[i].alpha = this.drawn ? +(v * 0.9).toFixed(2) : 0;\n this.cells[i].transition = `background .5s var(--vo-ease) ${delay}ms, transform .2s`;\n this.cells[i].tip = this.drawn && s ? `${DAYS[d]} ${hour(h)}: ${Math.round(v * s.max)} ${s.unit}` : '';\n }\n this.cdr.markForCheck();\n }\n\n private placeKnob(): void {\n if (this.series.length < 2) return;\n const btns = this.sc?.nativeElement\n ? (this.sc.nativeElement.closest('.vo-hmx')?.querySelectorAll<HTMLElement>('.vo-hmx-sg button') ?? [])\n : [];\n const at = this.series.findIndex((s) => s.key === this.key);\n const b = btns[at < 0 ? 0 : at];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n // on a phone the grid scrolls sideways: it starts at the latest hours, and fades out on whichever side has more to see\n private setupScroll(): void {\n const el = this.sc?.nativeElement;\n if (!el) return;\n const edges = () => {\n const m = el.scrollWidth - el.clientWidth;\n el.classList.toggle('vo-ml', m > 1 && el.scrollLeft > 1);\n el.classList.toggle('vo-mr', m > 1 && el.scrollLeft < m - 1);\n };\n // it stays on the latest hours as the card settles its size, until the person scrolls it themselves\n const fit = () => {\n if (!this.moved) el.scrollLeft = el.scrollWidth;\n edges();\n };\n const move = () => {\n this.moved = true;\n };\n el.addEventListener('scroll', edges, { passive: true });\n (['pointerdown', 'wheel', 'touchstart', 'keydown'] as const).forEach((e) =>\n el.addEventListener(e, move, { passive: true }),\n );\n if (typeof ResizeObserver === 'function') {\n this.ro = new ResizeObserver(fit);\n this.ro.observe(el);\n const grid = el.querySelector('.vo-hmx-grid');\n if (grid) this.ro.observe(grid);\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.timers = [];\n this.ro?.disconnect();\n }\n}\n","// framework/angular/agent-inbox/agent-inbox.component.ts\n//\n// Native Angular port of framework/react/agent-inbox/AgentInbox.tsx.\n// Every agent run in one list, grouped as Needs you, Running and Done, with live\n// clocks on the running ones. Approve starts a run that waits for you and Retry\n// tries a failed one again; a run that changes group glides to its place.\n// Inputs mirror the React props; callback props become @Output EventEmitters.\n// The per-second clock tick and the FLIP glide are ported from the React logic\n// and the vanilla JS (agent-inbox.js). Reduced motion is respected via the shared\n// ReducedMotionService.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Which part of the inbox a run sits in. */\nexport type InboxGroup = 'needs' | 'running' | 'done';\n\n/** One agent run in the inbox. */\nexport interface InboxRun {\n id: string;\n /** What the run is for, like \"Publish the pricing page\". */\n title: string;\n /** Which agent runs it. Its first letter marks the row, and a finished run shows it under the title. */\n agent: string;\n /** The mark's fill, like 'var(--vo-av-l)'. An avatar colour brings its own ink, any other colour takes white initials. Defaults to the accent. */\n color?: string;\n group: InboxGroup;\n /** The line under the title: why it needs you, or what it is doing now. A finished run shows its agent instead. */\n detail?: string;\n /** Marks a run that needs you because it failed: its row turns red and offers Retry instead of Approve. */\n failed?: boolean;\n /** More on the failure, in a tooltip on its detail line. */\n why?: string;\n /** How long a running run has been going, in seconds. Its clock counts on from here. */\n seconds?: number;\n /** When a finished run ended, like \"12m ago\". */\n ended?: string;\n}\n\nconst GROUPS: [InboxGroup, string][] = [\n ['needs', 'Needs you'],\n ['running', 'Running'],\n ['done', 'Done'],\n];\n\nconst clock = (s: number) => `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\n/** The ink for initials on an avatar colour: the eight avatar colours each bring their own. */\nconst avatarInk = (color: string): string | undefined =>\n /^var\\(--vo-av-[a-z]\\)$/.test(color) ? color.replace(')', '-ink)') : undefined;\n\n/** A view-model row the template renders, derived from an InboxRun for one group. */\ninterface Row {\n run: InboxRun;\n group: InboxGroup;\n fail: boolean;\n col: string;\n ink: string;\n detail: string;\n initial: string;\n seconds: number;\n}\n\n@Component({\n selector: 'vo-agent-inbox',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"'vo-aib vo-panel' + (className ? ' ' + className : '')\">\n <div class=\"vo-aib-h\">\n <b>{{ title }}</b>\n <span aria-live=\"polite\"><span class=\"vo-sw vo-muted vo-aib-st\" [class.vo-out]=\"stOut\">{{ stShown }}</span></span>\n </div>\n <div #list>\n @for (g of visibleGroups; track g[0]) {\n <section class=\"vo-aib-g\" [attr.aria-label]=\"g[1]\">\n <div class=\"vo-aib-gh\" [attr.data-k]=\"'h:' + g[0]\"><span>{{ g[1] }}</span><span class=\"vo-n\">{{ rowsOf(g[0]).length }}</span></div>\n <div class=\"vo-aib-gl\" role=\"list\">\n @for (row of rowsOf(g[0]); track row.run.id) {\n <div [attr.data-k]=\"row.run.id\" class=\"vo-aib-i\" [class.vo-fail]=\"row.fail\" role=\"listitem\">\n <span class=\"vo-aib-av\" [style.background]=\"row.col\" [style.color]=\"row.ink\" aria-hidden=\"true\">{{ row.initial }}</span>\n <span class=\"vo-aib-t\">\n <b>{{ row.run.title }}</b>\n <span\n class=\"vo-sw\"\n [attr.title]=\"row.fail && row.run.why ? row.run.why : null\"\n >{{ row.detail }}</span>\n </span>\n <span class=\"vo-aib-r\">\n @if (row.group === 'needs') {\n @if (row.fail) {\n <button type=\"button\" class=\"vo-pill vo-sm vo-aib-go\" [attr.aria-label]=\"'Retry ' + row.run.title\" (click)=\"retry.emit(row.run.id)\">\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Retry\n </button>\n } @else {\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-aib-go\" [attr.aria-label]=\"'Approve ' + row.run.title\" (click)=\"approve.emit(row.run.id)\">Approve</button>\n }\n } @else if (row.group === 'running') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span><span class=\"vo-num\">{{ fmt(row.seconds) }}</span>\n } @else {\n <span class=\"vo-ok\"><vo-icon name=\"ok\" size=\"xs\"></vo-icon></span><span>{{ row.run.ended }}</span>\n }\n </span>\n </div>\n }\n </div>\n </section>\n }\n </div>\n </div>\n `,\n styleUrl: './agent-inbox.css',\n})\nexport class AgentInboxComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The runs to show. */\n @Input({ required: true }) runs: InboxRun[] = [];\n /** Defaults to \"Inbox\". */\n @Input() title = 'Inbox';\n /** The line beside the title. Defaults to \"2 need you\", then \"2 running\", then \"All clear · 4 done today\". */\n @Input() status?: string;\n /** An extra class on the panel. */\n @Input() className?: string;\n\n /** Emitted by Approve on a run that needs you and hasn't failed. */\n @Output() approve = new EventEmitter<string>();\n /** Emitted by Retry on a failed run. */\n @Output() retry = new EventEmitter<string>();\n\n @ViewChild('list') private list?: ElementRef<HTMLElement>;\n\n private readonly reduced = inject(ReducedMotionService);\n\n // the status line crossfades when it changes, like the React <Swap>\n stShown = '';\n stOut = false;\n private stTimer?: ReturnType<typeof setTimeout>;\n\n // one tick a second drives every running clock: each counts on from the seconds it had when last given\n private tick = 0;\n private base = new Map<string, { s: number; at: number }>();\n private ticker?: ReturnType<typeof setInterval>;\n\n // the FLIP glide: the tops of rows and group titles are measured after each move and eased from where they were\n private where = new Map<string, number>();\n private groupOf = new Map<string, InboxGroup>();\n private firstMeasure = true;\n private moveTimers = new Set<ReturnType<typeof setTimeout>>();\n\n get visibleGroups(): [InboxGroup, string][] {\n // a group with nothing in it goes away\n return GROUPS.filter(([g]) => this.runs.some((r) => r.group === g));\n }\n\n rowsOf(g: InboxGroup): Row[] {\n return this.runs\n .filter((r) => r.group === g)\n .map((run) => {\n const col = run.color ?? 'var(--vo-accent)';\n const fail = g === 'needs' && !!run.failed;\n return {\n run,\n group: g,\n fail,\n col,\n ink: avatarInk(col) ?? (run.color ? '#fff' : 'var(--vo-on-accent)'),\n detail: g === 'done' ? run.agent : run.detail ?? '',\n initial: run.agent.charAt(0),\n seconds: g === 'running' ? this.secs(run) : 0,\n };\n });\n }\n\n fmt(s: number): string {\n return clock(s);\n }\n\n private secs(r: InboxRun): number {\n const b = this.base.get(r.id);\n const s = r.seconds ?? 0;\n if (!b || b.s !== s) {\n this.base.set(r.id, { s, at: this.tick });\n return s;\n }\n return b.s + this.tick - b.at;\n }\n\n private line(): string {\n const need = this.runs.filter((r) => r.group === 'needs').length;\n const running = this.runs.filter((r) => r.group === 'running').length;\n const done = this.runs.filter((r) => r.group === 'done').length;\n return (\n this.status ??\n (need\n ? `${need} need${need > 1 ? '' : 's'} you`\n : running\n ? `${running} running`\n : `All clear · ${done} done today`)\n );\n }\n\n private setLine(): void {\n const next = this.line();\n if (!this.stShown) {\n this.stShown = next;\n return;\n }\n if (next === this.stShown) return;\n this.stOut = true;\n clearTimeout(this.stTimer);\n this.stTimer = setTimeout(\n () => {\n this.stShown = next;\n this.stOut = false;\n },\n this.reduced.reduce() ? 0 : 170,\n );\n }\n\n ngAfterViewInit(): void {\n this.measure();\n this.ticker = setInterval(() => {\n // only advance the shared clock while something is running\n if (this.runs.some((r) => r.group === 'running') && !this.reduced.reduce()) this.tick += 1;\n }, 1000);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['runs']) return;\n // drop clock bases for runs no longer running\n for (const id of [...this.base.keys()]) {\n if (!this.runs.some((r) => r.id === id && r.group === 'running')) this.base.delete(id);\n }\n this.setLine();\n // the layout has not updated yet; glide on the next frame\n if (!this.firstMeasure) {\n requestAnimationFrame(() => this.measure());\n }\n }\n\n // measure every visible row and group title, and ease each from where it last was\n private measure(): void {\n const box = this.list?.nativeElement;\n if (!box) return;\n const top = box.getBoundingClientRect().top;\n const next = new Map<string, number>();\n const ease = getComputedStyle(box).getPropertyValue('--vo-ease').trim() || 'ease';\n const reduce = this.reduced.reduce();\n box.querySelectorAll<HTMLElement>('[data-k]').forEach((el) => {\n const k = el.dataset['k']!;\n const y = el.getBoundingClientRect().top - top;\n const was = this.where.get(k);\n next.set(k, y);\n if (reduce || this.firstMeasure) return;\n if (was === undefined) {\n // a group or row that comes back fades in\n el.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 260 });\n return;\n }\n if (Math.abs(was - y) > 1) {\n el.animate(\n [{ transform: `translateY(${was - y}px)` }, { transform: 'none' }],\n { duration: 420, easing: ease },\n );\n }\n // the moving row rides above the rest while it travels\n const moved = this.groupOf.get(k);\n const now = this.runs.find((r) => r.id === k)?.group;\n if (moved && now && moved !== now) {\n el.classList.add('vo-mv');\n const t = setTimeout(() => {\n el.classList.remove('vo-mv');\n this.moveTimers.delete(t);\n }, 440);\n this.moveTimers.add(t);\n }\n });\n this.where = next;\n this.groupOf = new Map(this.runs.map((r) => [r.id, r.group]));\n this.firstMeasure = false;\n }\n\n ngOnDestroy(): void {\n if (this.ticker) clearInterval(this.ticker);\n clearTimeout(this.stTimer);\n this.moveTimers.forEach((t) => clearTimeout(t));\n this.moveTimers.clear();\n }\n}\n","// framework/angular/agent-lanes/agent-lanes.component.ts\n//\n// Native Angular port of framework/react/agent-lanes/AgentLanes.tsx.\n// Several agents working side by side, each in its own lane and hue, handing work\n// to one another down a relay line. A working lane breathes, shimmers and fills\n// its next step; a hand-off opens a line between two lanes and runs a light down\n// the relay line from the sender's badge to the taker's, and the stretch it\n// crossed stays lit. Inputs mirror the React props; callback props become\n// @Output() EventEmitters.\n//\n// The relay-line strokes are positioned from badge to badge with a ResizeObserver\n// (ported from the React useLayoutEffect / the vanilla place()). Reduced motion is\n// respected via the shared ReducedMotionService.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nexport type LaneStatus = 'queued' | 'waiting' | 'working' | 'paused' | 'done';\nexport type LaneTone =\n | 'blue'\n | 'purple'\n | 'green'\n | 'orange'\n | 'red'\n | 'yellow'\n | 'pink'\n | 'teal';\n\n/** One entry in a lane's log, shown when the lane is opened. */\nexport interface LaneLog {\n text: string;\n time?: string;\n}\n\n/** One agent's lane: its name, hue, status, the step track and its log. */\nexport interface AgentLane {\n key: string;\n /** Like \"Researcher\". */\n name: string;\n icon: VoIconName;\n /** The lane's hue: its badge, its track, its Working tag and its stretch of the relay line. Defaults to blue. */\n tone?: LaneTone;\n /** working breathes, shimmers and fills the next step, paused holds it, done fills the badge with its hue. */\n status: LaneStatus;\n /** What the agent is doing now, or what it is waiting for. It crossfades when it changes, and shimmers while the agent works. */\n activity: string;\n /** How many steps the track is cut into. Defaults to 3. */\n steps?: number;\n /** How many steps are finished. The next one fills while the agent works. */\n done?: number;\n /** How far the agent is through the step in hand, from 0 to 1. Leave it out and that step fills part way. */\n progress?: number;\n /** What the agent did, shown when the lane is opened. New entries slide in. */\n log?: LaneLog[];\n}\n\n/** One agent passing work to another: a light runs down the relay line between their badges. */\nexport interface AgentHandoff {\n /** Key of the lane handing over. */\n from: string;\n /** Key of the lane taking it. */\n to: string;\n /** What changes hands, like \"the brief\". */\n what: string;\n}\n\nconst TONE: Record<LaneTone, string> = {\n blue: 'pb',\n purple: 'pl',\n green: 'pm',\n orange: 'pp',\n red: 'pr',\n yellow: 'py',\n pink: 'pk',\n teal: 'pt',\n};\nconst hueOf = (l?: AgentLane): string => TONE[l?.tone ?? 'blue'];\nconst clamp01 = (n: number): number => Math.max(0, Math.min(1, n));\nconst clock = (s: number): string =>\n `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\n/** A lane prepared for the template. */\ninterface LaneView {\n lane: AgentLane;\n status: LaneStatus;\n tone: string;\n live: boolean;\n sent: boolean;\n got: boolean;\n ping: boolean;\n open: boolean;\n bars: BarView[];\n}\n\n/** One segment of a lane's step track. */\ninterface BarView {\n on: boolean;\n run: boolean;\n ind: boolean;\n progress?: number;\n}\n\n/** The hand-off line kept on screen (with its exit state while it leaves). */\ninterface HandView {\n key: string;\n from: string;\n to: string;\n what: string;\n fromName: string;\n toName: string;\n fromTone: string;\n toTone: string;\n open: boolean;\n leaving: boolean;\n lit: boolean;\n}\n\n/** A lit stretch of the relay line, drawn from one badge down to the next. */\ninterface StrokeView {\n key: string;\n from: string;\n to: string;\n fromTone: string;\n toTone: string;\n}\n\n/** Several agents working in parallel, each in its own lane and hue, with hand-offs down a relay line. */\n@Component({\n selector: 'vo-agent-lanes',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-aln\"\n [class.vo-panel]=\"!bare\"\n [class.vo-fin]=\"finished\"\n [style.padding-inline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-aln-h\">\n <span class=\"vo-aln-ic\">\n @if (finished) {\n <span class=\"vo-enter\" style=\"display:grid\"><vo-icon name=\"ok\"></vo-icon></span>\n } @else {\n <vo-icon name=\"users\"></vo-icon>\n }\n </span>\n <span class=\"vo-sw vo-aln-t\">{{ head }}</span>\n <span class=\"vo-aln-m vo-muted vo-num\">{{ clockText }}</span>\n <span class=\"vo-sw vo-aln-ct vo-num\">{{ stepsDone }} of {{ total }} steps</span>\n @if (pauseWired && !finished) {\n <button type=\"button\" class=\"vo-pill vo-soft vo-sm\" (click)=\"togglePaused()\">\n <vo-icon [name]=\"isPaused ? 'play' : 'pause'\" size=\"xs\"></vo-icon>\n {{ isPaused ? 'Resume' : 'Pause all' }}\n </button>\n }\n </div>\n\n <div class=\"vo-aln-rows\" #rows>\n @for (v of views; track v.lane.key) {\n @if (handFor(v.lane.key); as h) {\n <div\n class=\"vo-fold vo-aln-hf\"\n [class.vo-shut]=\"!(h.open && !h.leaving)\"\n [class.vo-lit]=\"h.lit\"\n [attr.inert]=\"h.open && !h.leaving ? null : ''\"\n [attr.aria-hidden]=\"h.open && !h.leaving ? null : 'true'\"\n [style.--vo-from]=\"'var(--vo-' + h.fromTone + ')'\"\n [style.--vo-to]=\"'var(--vo-' + h.toTone + ')'\"\n >\n <div>\n <div class=\"vo-aln-hand vo-enter\">\n <b class=\"vo-f\">{{ h.fromName }}</b> handed {{ h.what }} to <b class=\"vo-t\">{{ h.toName }}</b>\n </div>\n </div>\n </div>\n }\n <div\n class=\"vo-aln-lane\"\n [class.vo-sent]=\"v.sent\"\n [class.vo-got]=\"v.got\"\n [attr.data-s]=\"v.status\"\n [attr.data-lane]=\"v.lane.key\"\n [style.--vo-c]=\"'var(--vo-' + v.tone + ')'\"\n [style.--vo-cb]=\"'var(--vo-' + v.tone + '-bg)'\"\n [style.--vo-cm]=\"'var(--vo-aln-' + v.tone + ',var(--vo-' + v.tone + '))'\"\n >\n <button\n type=\"button\"\n class=\"vo-aln-row\"\n [attr.aria-expanded]=\"v.open\"\n (click)=\"toggleLane(v.lane.key)\"\n >\n <span class=\"vo-aln-av\" [class.vo-ping]=\"v.ping\">\n <vo-icon [name]=\"v.lane.icon\"></vo-icon>\n </span>\n <span class=\"vo-aln-who\">\n <span class=\"vo-aln-n\">{{ v.lane.name }}</span>\n <span class=\"vo-sw vo-aln-a\" [class.vo-live]=\"v.live\" [class.vo-shim]=\"v.status === 'working'\">{{ v.lane.activity }}</span>\n </span>\n <span class=\"vo-aln-tr\" aria-hidden=\"true\">\n @for (b of v.bars; track $index) {\n <i\n [class.vo-on]=\"b.on\"\n [class.vo-run]=\"b.run\"\n [class.vo-ind]=\"b.ind\"\n [style.--vo-p]=\"b.progress ?? null\"\n ></i>\n }\n </span>\n <span class=\"vo-aln-st\">\n @switch (v.status) {\n @case ('working') {\n <span class=\"vo-tag vo-aln-tg\"><span class=\"vo-spin\" aria-hidden=\"true\"></span>Working</span>\n }\n @case ('paused') {\n <span class=\"vo-tag vo-warn\">Paused</span>\n }\n @case ('done') {\n <span class=\"vo-tag vo-ok\"><vo-icon name=\"check\" size=\"xs\"></vo-icon>Done</span>\n }\n @case ('waiting') {\n <span class=\"vo-tag\"><vo-icon name=\"clock\" size=\"xs\"></vo-icon>Waiting</span>\n }\n @default {\n <span class=\"vo-tag\">Queued</span>\n }\n }\n </span>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!v.open\" [attr.inert]=\"v.open ? null : ''\">\n <div>\n <div class=\"vo-aln-det\">\n @for (l of v.lane.log ?? []; track $index) {\n <div class=\"vo-enter\">\n <span>{{ l.text }}</span>\n @if (l.time) {\n <span class=\"vo-muted\">{{ l.time }}</span>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n @for (s of strokes; track s.key) {\n <span\n class=\"vo-aln-pk\"\n [attr.data-k]=\"s.key\"\n aria-hidden=\"true\"\n [style.--vo-from]=\"'var(--vo-aln-' + s.fromTone + ',var(--vo-' + s.fromTone + '))'\"\n [style.--vo-to]=\"'var(--vo-aln-' + s.toTone + ',var(--vo-' + s.toTone + '))'\"\n ></span>\n }\n </div>\n </div>\n `,\n styleUrl: './agent-lanes.css',\n})\nexport class AgentLanesComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() lanes: AgentLane[] = [];\n /** Header text. Defaults to \"N agents working\", \"All agents paused\" or \"All N agents finished\". */\n @Input() title?: string;\n /** Seconds to show as m:ss. Leave it out to let the header count while agents work. */\n @Input() seconds?: number;\n /** Whether every agent is paused. Working lanes then show Paused and the clock stops. */\n @Input() set paused(value: boolean | undefined) {\n this.pausedControlled = value !== undefined;\n if (value !== undefined) this.innerPaused = value;\n }\n @Input() defaultPaused = false;\n /** Adds the Pause all / Resume button, until every lane is done (React: onPausedChange wired). */\n @Input() pauseWired = false;\n /** The handoff to show. Set it back to undefined and its line slides away; the stretch it crossed stays lit. */\n @Input() handoff?: AgentHandoff;\n /** Keys of the lanes that are open. Leave it out to let each row toggle itself. */\n @Input() set expanded(value: string[] | undefined) {\n this.expandedControlled = value !== undefined;\n if (value !== undefined) this.innerExpanded = value;\n }\n @Input() defaultExpanded: string[] = [];\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n @Output() pausedChange = new EventEmitter<boolean>();\n @Output() expandedChange = new EventEmitter<string[]>();\n\n @ViewChild('rows') private rowsRef?: ElementRef<HTMLElement>;\n\n private pausedControlled = false;\n private expandedControlled = false;\n private innerPaused = false;\n private innerExpanded: string[] = [];\n private counted = 0;\n private tick?: ReturnType<typeof setInterval>;\n\n // the hand-off kept on screen, so it can play its exit after `handoff` is cleared\n private kept?: AgentHandoff;\n private keptTimer?: ReturnType<typeof setTimeout>;\n private handOpen = false;\n private openFrame?: number;\n private handRaf?: number;\n\n // the hand-offs whose light has arrived: their stretch of relay line stays lit\n private relayed: string[] = [];\n private drawing?: string;\n private pinged?: string;\n private drawTimer?: ReturnType<typeof setTimeout>;\n private pingTimer?: ReturnType<typeof setTimeout>;\n private lastHandKey = '';\n\n private ro?: ResizeObserver;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n // ----- controllable state -----\n\n get isPaused(): boolean {\n return this.innerPaused;\n }\n\n private get expandedKeys(): string[] {\n return this.innerExpanded;\n }\n\n togglePaused(): void {\n const next = !this.isPaused;\n if (!this.pausedControlled) this.innerPaused = next;\n this.pausedChange.emit(next);\n }\n\n toggleLane(key: string): void {\n const open = this.expandedKeys.includes(key);\n const next = open ? this.expandedKeys.filter((k) => k !== key) : [...this.expandedKeys, key];\n if (!this.expandedControlled) this.innerExpanded = next;\n this.expandedChange.emit(next);\n }\n\n // ----- derived view state -----\n\n get finished(): boolean {\n return this.lanes.length > 0 && this.lanes.every((l) => l.status === 'done');\n }\n\n get head(): string {\n if (this.title !== undefined) return this.title;\n if (this.finished) return `All ${this.lanes.length} agents finished`;\n if (this.isPaused) return 'All agents paused';\n return `${this.lanes.length} agents working`;\n }\n\n get clockText(): string {\n return clock(this.seconds ?? this.counted);\n }\n\n get total(): number {\n return this.lanes.reduce((n, l) => n + (l.steps ?? 3), 0);\n }\n\n get stepsDone(): number {\n return this.lanes.reduce((n, l) => n + Math.min(l.done ?? 0, l.steps ?? 3), 0);\n }\n\n get views(): LaneView[] {\n return this.lanes.map((lane) => {\n const status: LaneStatus = this.isPaused && lane.status === 'working' ? 'paused' : lane.status;\n const steps = lane.steps ?? 3;\n const done = lane.done ?? 0;\n const live = status === 'working' || status === 'paused';\n const bars: BarView[] = Array.from({ length: steps }, (_, i) => {\n const run = i === done && live;\n return {\n on: i < done,\n run,\n ind: run && lane.progress === undefined,\n progress: run && lane.progress !== undefined ? clamp01(lane.progress) : undefined,\n };\n });\n return {\n lane,\n status,\n tone: hueOf(lane),\n live,\n sent: this.relayed.some((k) => k.startsWith(lane.key + '>')),\n got: this.relayed.some((k) => k.endsWith('>' + lane.key)),\n ping: this.pinged === lane.key,\n open: this.expandedKeys.includes(lane.key),\n bars,\n };\n });\n }\n\n private nameOf(key: string): string {\n return this.lanes.find((l) => l.key === key)?.name ?? key;\n }\n\n private toneOf(key: string): string {\n return hueOf(this.lanes.find((l) => l.key === key));\n }\n\n /** The hand-off line to render before the lane it is handed to, or undefined. */\n handFor(laneKey: string): HandView | undefined {\n const h = this.kept;\n if (!h || h.to !== laneKey) return undefined;\n const key = `${h.from}>${h.to}`;\n return {\n key,\n from: h.from,\n to: h.to,\n what: h.what,\n fromName: this.nameOf(h.from),\n toName: this.nameOf(h.to),\n fromTone: this.toneOf(h.from),\n toTone: this.toneOf(h.to),\n open: this.handOpen,\n leaving: this.handoff === undefined,\n lit: this.relayed.includes(key),\n };\n }\n\n get strokes(): StrokeView[] {\n const keys =\n this.drawing && !this.relayed.includes(this.drawing)\n ? [...this.relayed, this.drawing]\n : this.relayed;\n return keys.map((key) => {\n const [from, to] = key.split('>');\n return { key, from, to, fromTone: this.toneOf(from), toTone: this.toneOf(to) };\n });\n }\n\n // ----- lifecycle -----\n\n ngAfterViewInit(): void {\n if (!this.pausedControlled) this.innerPaused = this.defaultPaused;\n if (!this.expandedControlled && this.innerExpanded.length === 0) {\n this.innerExpanded = [...this.defaultExpanded];\n }\n this.startCounter();\n const box = this.rowsRef?.nativeElement;\n if (box && typeof ResizeObserver === 'function') {\n this.ro = new ResizeObserver(() => this.placeStrokes());\n this.ro.observe(box);\n }\n this.placeStrokes();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['seconds'] || changes['paused'] || changes['lanes']) this.startCounter();\n if (changes['handoff']) this.onHandoffChange();\n if (changes['lanes']) queueMicrotask(() => this.placeStrokes());\n }\n\n private onHandoffChange(): void {\n const h = this.handoff;\n if (h) {\n // bring the line in: mount shut, then open on the next frame so the lanes below glide down\n this.kept = h;\n if (this.keptTimer) {\n clearTimeout(this.keptTimer);\n this.keptTimer = undefined;\n }\n this.handOpen = false;\n this.scheduleOpen();\n const key = `${h.from}>${h.to}`;\n this.lastHandKey = key;\n if (!this.relayed.includes(key)) {\n if (this.drawTimer) clearTimeout(this.drawTimer);\n this.drawTimer = setTimeout(() => this.startDraw(key), this.reduced.reduce() ? 0 : 500);\n }\n } else {\n // keep the last one on screen while it plays its exit\n this.handOpen = false;\n if (this.kept && !this.keptTimer) {\n this.keptTimer = setTimeout(() => {\n this.kept = undefined;\n this.keptTimer = undefined;\n }, this.reduced.reduce() ? 0 : 700);\n }\n }\n }\n\n private scheduleOpen(): void {\n if (this.handRaf) cancelAnimationFrame(this.handRaf);\n if (this.openFrame) cancelAnimationFrame(this.openFrame);\n const raf =\n typeof requestAnimationFrame === 'function'\n ? requestAnimationFrame\n : (cb: FrameRequestCallback) => setTimeout(() => cb(0), 16) as unknown as number;\n this.handRaf = raf(() => {\n this.openFrame = raf(() => {\n this.handOpen = true;\n this.placeStrokes();\n });\n });\n }\n\n private startDraw(key: string): void {\n if (this.relayed.includes(key)) return;\n this.drawing = key;\n this.placeStrokes();\n const to = key.split('>')[1];\n const arrive = (): void => {\n if (!this.relayed.includes(key)) this.relayed = [...this.relayed, key];\n if (this.drawing === key) this.drawing = undefined;\n this.pinged = to;\n if (this.pingTimer) clearTimeout(this.pingTimer);\n this.pingTimer = setTimeout(() => {\n if (this.pinged === to) this.pinged = undefined;\n }, 950);\n this.placeStrokes();\n };\n // the stroke draws itself from the sender's badge down to the taker's\n const pk = this.rowsRef?.nativeElement.querySelector<HTMLElement>(\n `:scope>.vo-aln-pk[data-k=\"${CSS.escape(key)}\"]`,\n );\n if (!pk || this.reduced.reduce()) {\n arrive();\n return;\n }\n const an = pk.animate([{ transform: 'scaleY(0)' }, { transform: 'scaleY(1)' }], {\n duration: 800,\n easing: 'cubic-bezier(.65,0,.35,1)',\n });\n an.finished.then(arrive, () => {});\n }\n\n /** Lay each lit stroke from the sender's badge down to the taker's, in the gap between them. */\n private placeStrokes(): void {\n const box = this.rowsRef?.nativeElement;\n if (!box) return;\n const rr = box.getBoundingClientRect();\n box.querySelectorAll<HTMLElement>(':scope>.vo-aln-pk').forEach((pk) => {\n const [f, g] = (pk.dataset['k'] ?? '').split('>');\n const a = box.querySelector(`[data-lane=\"${CSS.escape(f)}\"] .vo-aln-av`);\n const b = box.querySelector(`[data-lane=\"${CSS.escape(g)}\"] .vo-aln-av`);\n if (!a || !b) return;\n const y0 = a.getBoundingClientRect().bottom - rr.top + 4;\n const y1 = b.getBoundingClientRect().top - rr.top - 4;\n pk.style.top = y0 + 'px';\n pk.style.height = Math.max(0, y1 - y0) + 'px';\n });\n }\n\n private startCounter(): void {\n const shouldCount =\n this.seconds === undefined && !this.isPaused && !this.finished && !this.reduced.reduce();\n if (shouldCount && !this.tick) {\n this.tick = setInterval(() => (this.counted += 1), 1000);\n } else if (!shouldCount && this.tick) {\n clearInterval(this.tick);\n this.tick = undefined;\n }\n }\n\n ngOnDestroy(): void {\n if (this.tick) clearInterval(this.tick);\n if (this.keptTimer) clearTimeout(this.keptTimer);\n if (this.drawTimer) clearTimeout(this.drawTimer);\n if (this.pingTimer) clearTimeout(this.pingTimer);\n if (this.handRaf) cancelAnimationFrame(this.handRaf);\n if (this.openFrame) cancelAnimationFrame(this.openFrame);\n this.ro?.disconnect();\n }\n}\n","// framework/angular/agent-phases/agent-phases.component.ts\n//\n// Native Angular port of framework/react/agent-phases/AgentPhases.tsx.\n// One line for which phase the agent is in, from thinking to done: it stops to\n// ask you, says when it is slow or failed, and folds to how long it took. A\n// track of six short segments under it fills phase by phase.\n// Inputs mirror the React props; callbacks become @Output EventEmitters.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\nexport type AgentPhase =\n | 'thinking' | 'searching' | 'reading' | 'waiting' | 'writing' | 'done';\n\n/** A step that failed: the line turns red and says so, with Retry. */\nexport interface AgentPhasesError {\n text: string;\n detail?: string;\n onRetry: () => void;\n}\n\n/** Shown while the phase takes long: \"Still working…\", with Stop. */\nexport interface AgentPhasesSlow {\n text: string;\n onStop?: () => void;\n}\n\n/** What the agent waits for in the waiting phase, with Approve and Not now. */\nexport interface AgentPhasesAsk {\n text: string;\n approveLabel?: string;\n onApprove: () => void;\n onDecline?: () => void;\n}\n\nconst ORDER: AgentPhase[] = ['thinking', 'searching', 'reading', 'waiting', 'writing', 'done'];\nconst NAME: Record<AgentPhase, string> = {\n thinking: 'Thinking', searching: 'Searching', reading: 'Reading',\n waiting: 'Waiting for you', writing: 'Writing', done: 'Done',\n};\nconst KEY: Record<AgentPhase, string> = {\n thinking: 'think', searching: 'search', reading: 'read',\n waiting: 'wait', writing: 'write', done: 'done',\n};\n\n/** One line for which phase the agent is in, from thinking to done. */\n@Component({\n selector: 'vo-agent-phases',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [attr.data-p]=\"p\" class=\"vo-aph\">\n <button\n type=\"button\"\n class=\"vo-aph-h\"\n [attr.aria-expanded]=\"done && isOpen\"\n [attr.aria-disabled]=\"done ? null : 'true'\"\n (click)=\"toggle()\"\n >\n <span class=\"vo-aph-g\" [attr.data-g]=\"p\">\n <span class=\"vo-enter\" style=\"display:grid\">\n @if (error) {\n <vo-icon name=\"alert\"></vo-icon>\n } @else {\n @switch (phase) {\n @case ('thinking') { <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span> }\n @case ('searching') { <span class=\"vo-radar\" aria-hidden=\"true\"></span> }\n @default { <vo-icon [name]=\"phaseIcon\"></vo-icon> }\n }\n }\n </span>\n </span>\n <span class=\"vo-aph-l vo-sw\" [class.vo-shim]=\"!done && !error && phase !== 'waiting'\">{{ line }}</span>\n <span class=\"vo-aph-t vo-num\">{{ done ? '' : secs + 's' }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\" class=\"vo-aph-chev\"></vo-icon>\n </button>\n\n <div class=\"vo-aph-tr\" aria-hidden=\"true\">\n @for (ph of order; track ph; let j = $index) {\n <i [class.vo-now]=\"j === at && !done\">@if (j <= at) { <b></b> }</i>\n }\n </div>\n\n <div class=\"vo-aph-x\">\n @if (error) {\n <div class=\"vo-aph-n vo-err vo-enter\">\n <vo-icon name=\"alert\" size=\"xs\"></vo-icon>\n <span>{{ error.detail ?? error.text }}</span>\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" (click)=\"error.onRetry()\">\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Retry\n </button>\n </div>\n } @else if (phase === 'waiting' && ask) {\n <div class=\"vo-aph-n vo-ask vo-enter\">\n <span>{{ ask.text }}</span>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"ask.onApprove()\">{{ ask.approveLabel ?? 'Approve' }}</button>\n @if (ask.onDecline) {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"ask.onDecline()\">Not now</button>\n }\n </div>\n } @else if (slow && !done) {\n <div class=\"vo-aph-n vo-enter\">\n <vo-icon name=\"clock\" size=\"xs\"></vo-icon>\n <span>{{ slow.text }}</span>\n @if (slow.onStop) {\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" (click)=\"slow.onStop()\">\n <vo-icon name=\"stop\" size=\"xs\"></vo-icon>Stop\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"vo-fold\" [class.vo-shut]=\"!(done && isOpen)\">\n <div>\n <ol class=\"vo-aph-list\">\n @for (ph of listPhases; track ph) {\n <li><vo-icon name=\"check\" size=\"xs\"></vo-icon><span>{{ name(ph) }}</span><span class=\"vo-num\">{{ took[ph] }}s</span></li>\n }\n </ol>\n </div>\n </div>\n\n <p class=\"vo-aph-sr\" role=\"status\">{{ said }}</p>\n </div>\n `,\n styleUrl: './agent-phases.css',\n})\nexport class AgentPhasesComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() phase: AgentPhase = 'thinking';\n /** What the line says. Defaults to the phase's name; once done, \"Thought for 12s\". */\n @Input() label?: string;\n /** Seconds so far. Counts by itself while left out (and stops while waiting). */\n @Input() seconds?: number;\n @Input() error?: AgentPhasesError;\n @Input() slow?: AgentPhasesSlow;\n @Input() ask?: AgentPhasesAsk;\n /** Seconds each phase took, by phase, for the list a finished line opens to. */\n @Input() took: Partial<Record<AgentPhase, number>> = {};\n /** Whether the finished line is open. Leave it out to let the header toggle it. */\n @Input() open?: boolean;\n @Input() defaultOpen = false;\n\n @Output() openChange = new EventEmitter<boolean>();\n\n readonly order = ORDER;\n isOpen = false;\n said = '';\n\n private counted = 0;\n private secondTimer?: ReturnType<typeof setInterval>;\n private lastSaid = '';\n private viewReady = false;\n\n get done(): boolean {\n return this.phase === 'done';\n }\n\n get at(): number {\n return ORDER.indexOf(this.phase);\n }\n\n get p(): string {\n return this.error ? 'err' : KEY[this.phase];\n }\n\n get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get line(): string {\n if (this.error) return this.error.text;\n if (this.label !== undefined) return this.label;\n return this.done ? `Thought for ${this.secs}s` : NAME[this.phase];\n }\n\n get phaseIcon(): VoIconName {\n const map: Record<string, VoIconName> = {\n reading: 'file-text', waiting: 'hand', writing: 'edit', done: 'ok',\n };\n return map[this.phase] ?? 'file-text';\n }\n\n get listPhases(): AgentPhase[] {\n return ORDER.slice(0, 5).filter((ph) => this.took[ph] !== undefined);\n }\n\n name(ph: AgentPhase): string {\n return NAME[ph];\n }\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n this.isOpen = this.open ?? this.defaultOpen;\n this.startSeconds();\n this.announce();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] && this.open !== undefined) {\n this.isOpen = this.open;\n }\n if (!this.viewReady) {\n this.isOpen = this.open ?? this.defaultOpen;\n return;\n }\n if (changes['phase'] || changes['seconds'] || changes['error']) {\n this.startSeconds();\n }\n if (changes['phase'] || changes['error']) {\n this.announce();\n }\n }\n\n toggle(): void {\n if (!this.done) return;\n if (this.open !== undefined) {\n this.openChange.emit(!this.isOpen);\n return;\n }\n this.isOpen = !this.isOpen;\n this.openChange.emit(this.isOpen);\n }\n\n // the clock counts while a phase runs, but not while done, waiting, or failed\n private startSeconds(): void {\n clearInterval(this.secondTimer);\n this.secondTimer = undefined;\n if (this.seconds !== undefined || this.done || this.phase === 'waiting' || this.error) {\n return;\n }\n this.secondTimer = setInterval(() => {\n this.counted++;\n }, 1000);\n }\n\n // only a change of phase is announced to a screen reader\n private announce(): void {\n const t = this.error\n ? 'Error: ' + this.error.text\n : this.done\n ? `Done, thought for ${this.secs}s`\n : NAME[this.phase];\n if (t !== this.lastSaid) {\n this.lastSaid = t;\n this.said = t;\n }\n }\n\n ngOnDestroy(): void {\n clearInterval(this.secondTimer);\n }\n}\n","// framework/angular/agent-run-timeline/agent-run-timeline.component.ts\n//\n// Native Angular port of framework/react/agent-run-timeline/AgentRunTimeline.tsx.\n// One agent run drawn as a Gantt chart: every step — the model thinking or\n// writing (purple), a tool like a file read or a test run (teal), or an app the\n// agent works in such as Figma or GitHub (orange) — is a bar in its kind's colour\n// on a shared time axis. A playhead marks now while the run streams, the lanes it\n// has passed take a faint wash, and once the run is done it stops at the finish\n// and turns green. A step at work breathes a ring round its icon and its bar\n// carries a passing light; a failed step hatches red and tags the label, and a\n// retry hangs a dashed line off the end of the step it retries. The key under the\n// title counts how long each kind has run, and the footer counts total time,\n// cost, steps and retries.\n//\n// Inputs mirror the React props; the component is purely driven by `time`, as the\n// React component is (the docs example animates it). CSS is the vo-prefixed port\n// of the Vanilla reference, mirroring the React variant 1:1.\n\nimport {\n Component,\n Input,\n ViewChild,\n ElementRef,\n ViewEncapsulation,\n AfterViewChecked,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** What a step is: the model thinking or writing (purple), a tool like a file\n read or a test run (teal), or an app the agent works in, like Figma or GitHub\n (orange). */\nexport type StepKind = 'model' | 'tool' | 'app';\n\n/** An app's own mark in place of the icon. */\nexport type BrandName = 'figma' | 'github' | 'slack';\n\nexport interface TimelineStep {\n label: string;\n icon?: VoIconName;\n /** An app's own mark in place of the icon, like 'figma', 'github' or 'slack'. */\n brand?: BrandName;\n /** Colours the step's bar, icon and live time, and counts it in the key. */\n kind?: StepKind;\n /** Seconds into the run when the step started. */\n start: number;\n /** How long it took, in seconds. */\n duration: number;\n /** Bar colour, any CSS colour. Defaults to the kind's colour, or chart blue. */\n color?: string;\n /** What the step cost, in dollars. */\n cost?: number;\n /** Hatches the bar red and tags the label, for a step that failed. */\n failed?: boolean;\n /** The tag on a failed step, like \"2 failed\". Defaults to \"Failed\". */\n tag?: string;\n /** Added to the bar's tooltip, like \"2 tests failed\". */\n note?: string;\n /** A retry of the failed step just before it: a dashed line joins them. */\n retry?: boolean;\n}\n\nexport interface TimelineStat {\n /** Like \"11.4s\". */\n value: string;\n /** Like \"total\". */\n label: string;\n icon?: VoIconName;\n}\n\ntype State = 'wait' | 'run' | 'done' | 'fail';\n\n/** A rendered row, with everything the template needs for one step. */\ninterface Row {\n s: TimelineStep;\n i: number;\n state: State;\n color: string;\n kt: string;\n kb: string;\n left: string;\n width: string;\n tip: string;\n dur: string;\n bump: boolean;\n link?: { left: string; width: string };\n}\n\n/** A key entry: one kind with its colour and how long it has run. */\ninterface KeyItem {\n kind: StepKind;\n label: string;\n color: string;\n per: string;\n}\n\n// each kind's name, bar colour (a chart colour — teal and orange take a little of\n// their text slot, so the bars keep 3:1 on a light stage) and palette slot (its\n// icon tint and live time).\nconst KIND: Record<StepKind, [string, string, string]> = {\n model: ['Model', 'var(--vo-c2)', 'pl'],\n tool: ['Tools', 'color-mix(in srgb,var(--vo-c6) 70%,var(--vo-pt))', 'pt'],\n app: ['Apps', 'color-mix(in srgb,var(--vo-c4) 75%,var(--vo-pp))', 'pp'],\n};\nconst KINDS: StepKind[] = ['model', 'tool', 'app'];\n\nconst pct = (n: number): string => n * 100 + '%';\nconst secs = (n: number): string => String(+n.toFixed(1));\n\n/** One agent run drawn as a Gantt chart. */\n@Component({\n selector: 'vo-agent-run-timeline',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-art\"\n [class.vo-panel]=\"!bare\"\n [class.vo-fin]=\"done\"\n [class.vo-live]=\"!done\"\n [style.paddingInline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-art-h\">\n <div class=\"vo-art-hd\">\n <div class=\"vo-art-t\">{{ title }}</div>\n <div class=\"vo-art-s vo-num\" [class.vo-muted]=\"done\" [class.vo-shim]=\"!done\">{{ line }}</div>\n </div>\n @if (done) {\n <span class=\"vo-art-tag vo-tag vo-ok\"><vo-icon name=\"check\" size=\"xs\"></vo-icon>Done</span>\n } @else {\n <span class=\"vo-art-tag vo-tag\"><span class=\"vo-spin\" aria-hidden=\"true\"></span>Running</span>\n }\n </div>\n\n @if (keyItems.length > 0) {\n <div class=\"vo-art-key vo-num\" role=\"list\" aria-label=\"Time by kind of step\">\n @for (k of keyItems; track k.kind) {\n <span role=\"listitem\" [style.--vo-k]=\"k.color\"><i></i>{{ k.label }}<b>{{ k.per }}</b></span>\n }\n </div>\n }\n\n <div class=\"vo-art-grid\" #grid [style.--vo-p]=\"playhead\">\n <div class=\"vo-art-axis\" aria-hidden=\"true\">\n <span></span>\n <div class=\"vo-art-ticks\">\n @for (v of tickValues; track v) {\n <span [style.left]=\"pctOf(v / axisSpan)\">{{ secOf(v) }}s</span>\n }\n </div>\n <span></span>\n </div>\n <div class=\"vo-art-past\" aria-hidden=\"true\"></div>\n <div class=\"vo-art-rows\">\n @for (row of rows; track row.i) {\n <div\n class=\"vo-art-row\"\n [class.vo-bump]=\"row.bump\"\n [attr.data-k]=\"row.s.kind || null\"\n [attr.data-s]=\"row.state\"\n [style.--vo-k]=\"row.color\"\n [style.--vo-kt]=\"row.kt\"\n [style.--vo-kb]=\"row.kb\"\n >\n <span class=\"vo-art-lab\">\n <span class=\"vo-art-ic\" aria-hidden=\"true\">\n @if (row.s.brand) {\n <svg class=\"vo-brand\" [attr.viewBox]=\"brandBox(row.s.brand)\" aria-hidden=\"true\" focusable=\"false\" [innerHTML]=\"brandShape(row.s.brand)\"></svg>\n } @else if (row.s.icon) {\n <vo-icon [name]=\"row.s.icon\" size=\"xs\"></vo-icon>\n }\n </span>\n <span class=\"vo-t\">{{ row.s.label }}</span>\n @if (row.state === 'fail') {\n <span class=\"vo-tag vo-bad vo-enter\">{{ row.s.tag || 'Failed' }}</span>\n }\n </span>\n <span class=\"vo-art-lane\">\n @if (row.link) {\n <span class=\"vo-art-link\" aria-hidden=\"true\" [style.left]=\"row.link.left\" [style.width]=\"row.link.width\"></span>\n }\n <span class=\"vo-art-bar\" [attr.data-tip]=\"row.tip\" [style.left]=\"row.left\" [style.width]=\"row.width\"><i></i></span>\n </span>\n <span class=\"vo-art-d vo-num\">{{ row.dur }}</span>\n </div>\n }\n </div>\n <div class=\"vo-art-head\" aria-hidden=\"true\">\n <i></i>\n <span class=\"vo-art-now vo-num\">\n @if (done) {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>\n }\n {{ nowText }}\n </span>\n </div>\n </div>\n\n <div class=\"vo-art-f vo-muted vo-num\">\n @for (f of figures; track $index) {\n <span>\n @if (f.icon) {\n <vo-icon [name]=\"f.icon\" size=\"xs\"></vo-icon>\n }\n <span><b>{{ f.value }}</b> {{ f.label }}</span>\n </span>\n }\n </div>\n </div>\n `,\n styleUrl: './agent-run-timeline.css',\n})\nexport class AgentRunTimelineComponent implements AfterViewChecked {\n /** Like \"Run 4821, update the pricing page\". */\n @Input() title = '';\n @Input() steps: TimelineStep[] = [];\n /** Seconds into the run. Bars grow to it; the playhead sits on it. Leave it out\n once the run has finished. */\n @Input() time?: number;\n /** Seconds the axis covers. Defaults to the end of the last step, rounded up to\n a multiple of 4. */\n @Input() span?: number;\n /** Labels on the axis, in seconds. Defaults to quarters of the span. */\n @Input() ticks?: number[];\n /** The line under the title. */\n @Input() status?: string;\n /** The figures in the footer once the run is done. */\n @Input() stats?: TimelineStat[];\n /** The names of the kinds in the key. Defaults to Model, Tools and Apps. */\n @Input() kindLabels?: Partial<Record<StepKind, string>>;\n /** Sits flat in a chat thread (the default). Set false for a card of its own. */\n @Input() bare = true;\n\n @ViewChild('grid') private gridRef?: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n private lastLive = '';\n private seenRunning = new Set<number>();\n\n readonly pctOf = pct;\n readonly secOf = secs;\n\n // ---- derived geometry ----\n get end(): number {\n return Math.max(0, ...this.steps.map((s) => s.start + s.duration));\n }\n\n get axisSpan(): number {\n return this.span ?? Math.max(4, Math.ceil(this.end / 4) * 4);\n }\n\n get done(): boolean {\n return this.time === undefined || this.time >= this.axisSpan;\n }\n\n get t(): number {\n return this.done ? this.end : Math.max(0, this.time ?? 0);\n }\n\n get playhead(): string {\n return (this.t / this.axisSpan).toFixed(4);\n }\n\n get nowText(): string {\n return this.t.toFixed(1) + 's';\n }\n\n get tickValues(): number[] {\n return this.ticks ?? [0, 1, 2, 3, 4].map((k) => (this.axisSpan * k) / 4);\n }\n\n private state(s: TimelineStep): State {\n const t = this.t;\n if (t < s.start) return 'wait';\n if (t < s.start + s.duration && !this.done) return 'run';\n return s.failed ? 'fail' : 'done';\n }\n\n private ran(s: TimelineStep): number {\n return Math.max(0, Math.min(s.duration, this.t - s.start));\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n const now = this.steps\n .filter((s) => this.state(s) === 'run')\n .map((s) => s.label)\n .join(', ');\n if (now) this.lastLive = now;\n if (this.done) {\n const retries = this.steps.filter((s) => s.failed).length;\n return `Finished in ${this.end.toFixed(1)}s${\n this.steps.some((s) => s.failed) ? `, ${retries} ${retries === 1 ? 'retry' : 'retries'}` : ''\n }`;\n }\n return now || this.lastLive || 'Starting';\n }\n\n get keyItems(): KeyItem[] {\n return KINDS.filter((k) => this.steps.some((s) => s.kind === k)).map((k) => ({\n kind: k,\n label: this.kindLabels?.[k] ?? KIND[k][0],\n color: KIND[k][1],\n per: this.steps\n .filter((s) => s.kind === k)\n .reduce((sum, s) => sum + this.ran(s), 0)\n .toFixed(1) + 's',\n }));\n }\n\n get rows(): Row[] {\n const t = this.t;\n return this.steps.map((s, i) => {\n const st = this.state(s);\n if (st === 'run') this.seenRunning.add(i);\n const w = this.ran(s);\n const k = s.kind ? KIND[s.kind] : null;\n const prev = this.steps[i - 1];\n const tip = `${s.label}: ${s.duration.toFixed(1)}s${\n s.cost !== undefined ? `, $${s.cost.toFixed(2)}` : ''\n }${s.note ? `, ${s.note}` : ''}`;\n return {\n s,\n i,\n state: st,\n color: s.color ?? (k ? k[1] : 'var(--vo-c1)'),\n kt: k ? `var(--vo-${k[2]})` : 'var(--vo-fg2)',\n kb: k ? `var(--vo-${k[2]}-bg)` : 'var(--vo-chip)',\n left: pct(s.start / this.axisSpan),\n width: pct(w / this.axisSpan),\n tip,\n dur: st === 'wait' ? '' : `${w.toFixed(1)}s`,\n bump: st === 'done' && this.seenRunning.has(i),\n link:\n s.retry && prev?.failed\n ? {\n left: pct((prev.start + prev.duration) / this.axisSpan),\n width: pct((s.start - prev.start - prev.duration) / this.axisSpan),\n }\n : undefined,\n };\n });\n }\n\n get figures(): TimelineStat[] {\n if (this.done && this.stats) return this.stats;\n const t = this.t;\n const started = this.steps.filter((s) => t >= s.start);\n const n = started.length;\n const hasRetries = this.steps.some((s) => s.failed);\n const retries = this.steps.filter((s) => s.failed && t >= s.start + s.duration).length;\n const cost = started.reduce((sum, s) => sum + (s.cost ?? 0) * (this.ran(s) / (s.duration || 1)), 0);\n return [\n { value: `${Math.min(t, this.end).toFixed(1)}s`, label: 'total', icon: 'clock' },\n ...(this.steps.some((s) => s.cost !== undefined)\n ? [{ value: `$${cost.toFixed(2)}`, label: 'cost', icon: 'coins' as VoIconName }]\n : []),\n { value: String(n), label: n === 1 ? 'step' : 'steps', icon: 'file-text' as VoIconName },\n ...(hasRetries\n ? [{ value: String(retries), label: retries === 1 ? 'retry' : 'retries', icon: 'refresh' as VoIconName }]\n : []),\n ];\n }\n\n // ---- brand marks (figma, github, slack) ----\n brandBox(name: BrandName): string {\n return BRANDS[name].box;\n }\n brandShape(name: BrandName): string {\n return BRANDS[name].shape;\n }\n\n // the time on the playhead covers the axis labels it passes\n ngAfterViewChecked(): void {\n const g = this.gridRef?.nativeElement;\n if (!g) return;\n const now = g.querySelector('.vo-art-now')?.getBoundingClientRect();\n if (!now) return;\n g.querySelectorAll<HTMLElement>('.vo-art-ticks span').forEach((el) => {\n const x = el.getBoundingClientRect();\n el.classList.toggle('vo-hid', x.right > now.left - 4 && x.left < now.right + 4);\n });\n }\n}\n\n// the official marks for the apps this component names, drawn into the icon tile.\nconst BRANDS: Record<BrandName, { box: string; shape: string }> = {\n figma: {\n box: '0 0 128 128',\n shape:\n '<path fill=\"#0acf83\" d=\"M45.5 129c11.9 0 21.5-9.6 21.5-21.5V86H45.5C33.6 86 24 95.6 24 107.5S33.6 129 45.5 129zm0 0\"/><path fill=\"#a259ff\" d=\"M24 64.5C24 52.6 33.6 43 45.5 43H67v43H45.5C33.6 86 24 76.4 24 64.5zm0 0\"/><path fill=\"#f24e1e\" d=\"M24 21.5C24 9.6 33.6 0 45.5 0H67v43H45.5C33.6 43 24 33.4 24 21.5zm0 0\"/><path fill=\"#ff7262\" d=\"M67 0h21.5C100.4 0 110 9.6 110 21.5S100.4 43 88.5 43H67zm0 0\"/><path fill=\"#1abcfe\" d=\"M110 64.5c0 11.9-9.6 21.5-21.5 21.5S67 76.4 67 64.5 76.6 43 88.5 43 110 52.6 110 64.5zm0 0\"/>',\n },\n github: {\n box: '0 0 24 24',\n shape:\n '<path fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"/>',\n },\n slack: {\n box: '0 0 128 128',\n shape:\n '<path d=\"M27.255 80.719c0 7.33-5.978 13.317-13.309 13.317C6.616 94.036.63 88.049.63 80.719s5.987-13.317 13.317-13.317h13.309zm6.709 0c0-7.33 5.987-13.317 13.317-13.317s13.317 5.986 13.317 13.317v33.335c0 7.33-5.986 13.317-13.317 13.317-7.33 0-13.317-5.987-13.317-13.317zm0 0\" fill=\"#de1c59\"/><path d=\"M47.281 27.255c-7.33 0-13.317-5.978-13.317-13.309C33.964 6.616 39.951.63 47.281.63s13.317 5.987 13.317 13.317v13.309zm0 6.709c7.33 0 13.317 5.987 13.317 13.317s-5.986 13.317-13.317 13.317H13.946C6.616 60.598.63 54.612.63 47.281c0-7.33 5.987-13.317 13.317-13.317zm0 0\" fill=\"#35c5f0\"/><path d=\"M100.745 47.281c0-7.33 5.978-13.317 13.309-13.317 7.33 0 13.317 5.987 13.317 13.317s-5.987 13.317-13.317 13.317h-13.309zm-6.709 0c0 7.33-5.987 13.317-13.317 13.317s-13.317-5.986-13.317-13.317V13.946C67.402 6.616 73.388.63 80.719.63c7.33 0 13.317 5.987 13.317 13.317zm0 0\" fill=\"#2eb57d\"/><path d=\"M80.719 100.745c7.33 0 13.317 5.978 13.317 13.309 0 7.33-5.987 13.317-13.317 13.317s-13.317-5.987-13.317-13.317v-13.309zm0-6.709c-7.33 0-13.317-5.987-13.317-13.317s5.986-13.317 13.317-13.317h33.335c7.33 0 13.317 5.986 13.317 13.317 0 7.33-5.987 13.317-13.317 13.317zm0 0\" fill=\"#ebb02e\"/>',\n },\n};\n","// framework/angular/agent-tree/agent-tree.component.ts\n//\n// Native Angular port of framework/react/agent-tree/AgentTree.tsx.\n// An orchestrator and its sub-agents as a tree: a chevron folds a branch, each\n// row shows its task, status and cost, and a branch's cost is its own plus\n// everything under it. The arrow keys move through it as in any tree view.\n// Inputs mirror the React props; the collapsed set is controllable and the\n// seconds clock counts up until the root is done, as in the vanilla JS.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** The state of an agent or one of its steps. */\nexport type AgentNodeStatus = 'queued' | 'running' | 'done' | 'failed';\n\n/** A way out of a failed step, shown as a button under its task. */\nexport interface AgentNodeFix {\n label: string;\n onClick: () => void;\n}\n\n/** An orchestrator, an agent, or one of its steps. */\nexport interface AgentNode {\n id: string;\n /** Like \"Design agent\", or a step's name. */\n name: string;\n /** Its task, or what it is doing now. It crossfades when it changes. */\n task: string;\n status: AgentNodeStatus;\n /** What this node spent on its own, in dollars. A branch shows this plus everything under it. */\n cost?: number;\n /** A way out of a failed step, shown as a button under its task. */\n fix?: AgentNodeFix;\n children?: AgentNode[];\n}\n\n/** A node laid out with its level and parent, for walking and keyboard moves. */\ninterface Flat {\n n: AgentNode;\n lv: number;\n parent?: AgentNode;\n}\n\nconst CLS: Record<AgentNodeStatus, string> = {\n queued: 'vo-queued',\n running: 'vo-run',\n done: 'vo-done',\n failed: 'vo-fail',\n};\n\nconst clock = (s: number): string =>\n `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\nconst total = (n: AgentNode): number =>\n (n.cost ?? 0) + (n.children ?? []).reduce((a, k) => a + total(k), 0);\n\nconst branch = (n: AgentNode): boolean => !!n.children?.length;\n\n@Component({\n selector: 'vo-agent-tree',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgClass, NgTemplateOutlet],\n template: `\n <div data-vo=\"\" class=\"vo-atr vo-panel\" [ngClass]=\"className\">\n <div class=\"vo-atr-h\">\n <div class=\"vo-atr-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-atr-st\">\n <span aria-live=\"polite\">{{ line }}</span> ·\n <span class=\"vo-num\">{{ clockText }}</span>\n </span>\n </div>\n <span class=\"vo-atr-tot vo-num\">{{ money(rootTotal) }}</span>\n </div>\n <div #tree class=\"vo-atr-tree\" role=\"tree\" aria-label=\"Agents\" (keydown)=\"onKey($event)\">\n <ng-container [ngTemplateOutlet]=\"nodeTpl\" [ngTemplateOutletContext]=\"{ n: root, lv: 0 }\" />\n </div>\n @if (showSummary) {\n <div class=\"vo-atr-sum\">\n <vo-icon name=\"ok\" size=\"xs\" />\n <span>{{ summaryText }}</span>\n </div>\n }\n </div>\n\n <ng-template #nodeTpl let-n=\"n\" let-lv=\"lv\">\n <div role=\"none\" [style.--vo-lv]=\"lv\">\n <div\n [attr.data-id]=\"n.id\"\n class=\"vo-atr-n\"\n [ngClass]=\"cls(n.status)\"\n role=\"treeitem\"\n [attr.aria-level]=\"lv + 1\"\n [attr.aria-expanded]=\"isBranch(n) ? isOpen(n) : null\"\n [tabindex]=\"focus === n.id ? 0 : -1\"\n (click)=\"onRowClick(n, $event)\"\n >\n @if (isBranch(n)) {\n <span class=\"vo-atr-tg\" aria-hidden=\"true\"><vo-icon name=\"chev-d\" size=\"xs\" /></span>\n } @else {\n <span class=\"vo-atr-sp\"></span>\n }\n <span class=\"vo-atr-g\" aria-hidden=\"true\">\n @switch (n.status) {\n @case ('running') { <span class=\"vo-spin\"></span> }\n @case ('done') { <vo-icon name=\"ok\" size=\"xs\" /> }\n @case ('failed') { <vo-icon name=\"alert\" size=\"xs\" /> }\n @default { <span class=\"vo-dot\"></span> }\n }\n </span>\n <span class=\"vo-atr-t\">\n <b>{{ n.name }}</b><span>{{ n.task }}</span>\n @if (n.status === 'failed' && n.fix) {\n <button type=\"button\" class=\"vo-pill vo-sm vo-atr-fix\" (click)=\"runFix(n, $event)\">{{ n.fix.label }}</button>\n }\n </span>\n @if (isBranch(n)) {\n <span\n class=\"vo-atr-c vo-num\"\n [attr.data-tip]=\"tip(n, lv)\"\n >{{ costText(n) }}</span>\n } @else {\n <span class=\"vo-atr-c vo-num\">{{ costText(n) }}</span>\n }\n </div>\n @if (isBranch(n)) {\n <div class=\"vo-fold vo-atr-kids\" [class.vo-shut]=\"!isOpen(n)\" [attr.inert]=\"isOpen(n) ? null : ''\" role=\"group\">\n <div>\n @for (c of n.children; track c.id) {\n <ng-container [ngTemplateOutlet]=\"nodeTpl\" [ngTemplateOutletContext]=\"{ n: c, lv: lv + 1 }\" />\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n `,\n styleUrl: './agent-tree.css',\n})\nexport class AgentTreeComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The orchestrator, with its agents and their steps as children. */\n @Input({ required: true }) root!: AgentNode;\n\n /** The run's goal, like \"Redesign the pricing page\". */\n @Input({ required: true }) title!: string;\n\n /** The line under the title. Defaults to \"Running\", \"1 step failed\" or \"Done\", then the clock. */\n @Input() status?: string;\n\n /** Seconds to show as m:ss. Leave it out to let the clock count until the root is done. */\n @Input() seconds?: number;\n\n /** Shown under the tree once the root is done. Defaults to \"Done in 0:14 · 3 agents · $0.66\"; false hides it. */\n @Input() summary?: string | false;\n\n /** Ids of the folded branches. Leave it out to let each branch fold itself. */\n @Input() collapsed?: string[];\n\n /** Ids folded to begin with, when `collapsed` is not controlled. */\n @Input() defaultCollapsed: string[] = [];\n\n /** Writes a cost. Defaults to dollars and cents, like \"$0.12\". */\n @Input() formatCost?: (dollars: number) => string;\n\n @Input() className = '';\n\n /** Emitted when a branch folds or unfolds, with the ids now folded. */\n @Output() collapsedChange = new EventEmitter<string[]>();\n\n @ViewChild('tree') private treeRef?: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** The focused node's id (tree holds one tab stop). */\n focus = '';\n // the folded set when uncontrolled\n private shutInner: string[] = [];\n private counted = 0;\n private timer?: ReturnType<typeof setInterval>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['root'] && !this.focus) this.focus = this.root.id;\n if (changes['defaultCollapsed'] && this.collapsed === undefined) {\n this.shutInner = [...this.defaultCollapsed];\n }\n // the clock stops once the root is done\n if (changes['root'] || changes['seconds']) this.syncClock();\n }\n\n ngAfterViewInit(): void {\n this.shutInner = [...this.defaultCollapsed];\n if (!this.focus) this.focus = this.root.id;\n this.syncClock();\n }\n\n ngOnDestroy(): void {\n this.stopClock();\n }\n\n // ----- the clock under the title -----\n private get finished(): boolean {\n return this.root.status === 'done';\n }\n\n private syncClock(): void {\n if (this.seconds !== undefined || this.finished || this.motion.reduce()) {\n this.stopClock();\n return;\n }\n if (this.timer) return;\n this.timer = setInterval(() => (this.counted += 1), 1000);\n }\n\n private stopClock(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get clockText(): string {\n return clock(this.secs);\n }\n\n // ----- derived text -----\n private get flat(): Flat[] {\n const all: Flat[] = [];\n (function walk(n: AgentNode, lv: number, parent?: AgentNode) {\n all.push({ n, lv, parent });\n n.children?.forEach((k) => walk(k, lv + 1, n));\n })(this.root, 0);\n return all;\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n if (this.finished) return 'Done';\n const failed = this.flat.filter((x) => x.n.status === 'failed').length;\n if (failed) return `${failed} step${failed > 1 ? 's' : ''} failed`;\n return 'Running';\n }\n\n get rootTotal(): number {\n return total(this.root);\n }\n\n private get agents(): number {\n return this.root.children?.length ?? 0;\n }\n\n get summaryText(): string {\n if (this.summary === undefined || this.summary === false) {\n return `Done in ${clock(this.secs)} · ${this.agents} agent${this.agents === 1 ? '' : 's'} · ${this.money(this.rootTotal)}`;\n }\n return this.summary;\n }\n\n get showSummary(): boolean {\n return this.finished && this.summary !== false;\n }\n\n money(v: number): string {\n return (this.formatCost ?? ((d: number) => '$' + d.toFixed(2)))(v);\n }\n\n isBranch(n: AgentNode): boolean {\n return branch(n);\n }\n\n cls(status: AgentNodeStatus): string {\n return CLS[status];\n }\n\n costText(n: AgentNode): string {\n const sum = total(n);\n const own = n.cost ?? 0;\n const v = branch(n) ? sum : own;\n return n.status === 'queued' && !v ? '–' : this.money(v);\n }\n\n tip(n: AgentNode, lv: number): string {\n const own = n.cost ?? 0;\n const sum = total(n);\n const k = n.children?.length ?? 0;\n const what = lv ? (k > 1 ? 'steps' : 'step') : k > 1 ? 'agents' : 'agent';\n return `Its own ${this.money(own)}, ${k} ${what} ${this.money(sum - own)}`;\n }\n\n // ----- folding -----\n private get shut(): string[] {\n return this.collapsed ?? this.shutInner;\n }\n\n isOpen(n: AgentNode): boolean {\n return !this.shut.includes(n.id);\n }\n\n toggle(n: AgentNode, open = !this.isOpen(n)): void {\n if (!branch(n)) return;\n const next = open ? this.shut.filter((id) => id !== n.id) : [...this.shut, n.id];\n if (this.collapsed === undefined) this.shutInner = next;\n this.collapsedChange.emit(next);\n }\n\n onRowClick(n: AgentNode, e: Event): void {\n if ((e.target as Element).closest('.vo-atr-fix')) return;\n this.focus = n.id;\n this.toggle(n);\n }\n\n runFix(n: AgentNode, e: Event): void {\n e.stopPropagation();\n n.fix?.onClick();\n }\n\n // ----- keyboard, as in any tree view -----\n private get visible(): Flat[] {\n const all = this.flat;\n return all.filter((x) => {\n for (let p = x.parent; p; p = all.find((y) => y.n === p)?.parent) {\n if (!this.isOpen(p)) return false;\n }\n return true;\n });\n }\n\n private go(n?: AgentNode): void {\n if (!n) return;\n this.focus = n.id;\n const sel = `[data-id=\"${CSS.escape(n.id)}\"]`;\n this.treeRef?.nativeElement.querySelector<HTMLElement>(sel)?.focus({ preventScroll: true });\n }\n\n onKey(e: KeyboardEvent): void {\n const v = this.visible;\n const i = v.findIndex((x) => x.n.id === this.focus);\n if (i < 0) return;\n const { n, parent } = v[i];\n const open = branch(n) && this.isOpen(n);\n if (e.key === 'ArrowDown') this.go(v[i + 1]?.n);\n else if (e.key === 'ArrowUp') this.go(v[i - 1]?.n);\n else if (e.key === 'ArrowRight') {\n if (branch(n) && !open) this.toggle(n, true);\n else if (open) this.go(n.children![0]);\n } else if (e.key === 'ArrowLeft') {\n if (open) this.toggle(n, false);\n else this.go(parent);\n } else if (e.key === 'Enter' || e.key === ' ') this.toggle(n);\n else if (e.key === 'Home') this.go(v[0].n);\n else if (e.key === 'End') this.go(v[v.length - 1].n);\n else return;\n e.preventDefault();\n }\n}\n","// framework/angular/answer-action-bar/answer-action-bar.component.ts\n//\n// Native Angular port of framework/react/answer-action-bar/AnswerActionBar.tsx.\n// Every action on an answer in one raised rail under it: copy, regenerate with\n// its versions, thumbs with a reason, and read aloud, which widens into a\n// progress bar and a clock and lights each word as it reads it.\n// Inputs mirror the React props; callback props become @Output EventEmitters.\n// The word/changed-phrase split, the version pager, the thumbs-down reason fold,\n// the copy feedback and the read-aloud clock follow the React logic and the\n// vanilla JS (answer-action-bar.js). Reduced motion is respected via the shared\n// ReducedMotionService.\n//\n// The thumbs up/down glyphs are not in the Angular icon set; like the live-answer\n// port they reuse the `hand` glyph, flipped 180° for the down thumb.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A rating given with the thumbs up/down buttons. */\nexport type AnswerBarRating = 'up' | 'down' | null;\n\n/** Read aloud: playing lights each word in turn, paused keeps the place. */\nexport type ReadingState = 'idle' | 'playing' | 'paused';\n\n/** One version of the answer. */\nexport interface AnswerVersion {\n text: string;\n /** A phrase in the text that changed from the version before, like \"21%, or $60 a year\". It's highlighted. */\n changed?: string;\n /** Quiet text after the bar, like \"Sonnet 5.5 · 6.2s\". */\n meta?: string;\n /** Its rating. Leave it out to let the thumbs hold their own, one per version. */\n rating?: AnswerBarRating;\n}\n\n/** A word of the answer, marked when it sits inside the changed phrase. */\ninterface Word {\n w: string;\n nw: boolean;\n}\n\nconst REASONS = ['Wrong numbers', 'Too long', 'Not our tone', 'Missed the brief'];\nconst clock = (s: number): string =>\n Math.floor(s / 60) + ':' + String(Math.floor(s) % 60).padStart(2, '0');\n\n@Component({\n selector: 'vo-answer-action-bar',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n [class]=\"'vo-aab' + (bare ? '' : ' vo-panel') + (className ? ' ' + className : '')\"\n [style.padding]=\"bare ? null : '16px'\"\n >\n @if (question) {\n <div class=\"vo-bub\">{{ question }}</div>\n }\n <p class=\"vo-msg vo-aab-t\" aria-live=\"polite\">\n @for (word of words; track at + ':' + $index; let k = $index) {\n <span\n >@if (k > 0) {<span [class]=\"word.nw && words[k - 1].nw ? 'vo-nw' : ''\">{{ ' ' }}</span>}<span\n [class]=\"\n 'vo-w vo-in' +\n (word.nw ? ' vo-nw' : '') +\n (k === lit ? ' vo-rd' : '')\n \"\n [style.animation-delay]=\"\n !streaming && !reduce() ? k * 10 + 'ms' : null\n \"\n >{{ word.w }}</span\n ></span\n >\n }\n </p>\n <div class=\"vo-aab-row\">\n <div\n class=\"vo-aab-bar\"\n role=\"toolbar\"\n aria-label=\"Answer actions\"\n (keydown)=\"onToolbarKey($event)\"\n >\n <button\n type=\"button\"\n [class]=\"'vo-ib vo-aab-cp' + (copied ? ' vo-copied' : '')\"\n [attr.title]=\"copied ? 'Copied to clipboard' : 'Copy'\"\n aria-label=\"Copy\"\n (click)=\"copy()\"\n >\n <vo-icon [name]=\"copied ? 'check' : 'copy'\"></vo-icon>\n </button>\n @if (showRegenerate) {\n <button\n type=\"button\"\n [class]=\"'vo-ib vo-aab-re' + (spin ? ' vo-go' : '')\"\n title=\"Regenerate\"\n aria-label=\"Regenerate\"\n [disabled]=\"streaming\"\n (click)=\"regenerate()\"\n >\n <vo-icon name=\"refresh\"></vo-icon>\n </button>\n }\n <span\n [class]=\"'vo-aab-pg' + (versions.length > 1 ? ' vo-on' : '')\"\n [attr.inert]=\"versions.length < 2 ? '' : null\"\n >\n <button\n type=\"button\"\n class=\"vo-ib\"\n title=\"Previous version\"\n aria-label=\"Previous version\"\n [disabled]=\"at === 0 || streaming\"\n (click)=\"setCur(at - 1)\"\n >\n <vo-icon name=\"chev-l\" size=\"xs\"></vo-icon>\n </button>\n <span class=\"vo-aab-n vo-num\" aria-live=\"polite\"\n >{{ at + 1 }} / {{ max1(versions.length) }}</span\n >\n <button\n type=\"button\"\n class=\"vo-ib\"\n title=\"Next version\"\n aria-label=\"Next version\"\n [disabled]=\"at === last || streaming\"\n (click)=\"setCur(at + 1)\"\n >\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n </button>\n </span>\n <span class=\"vo-aab-sep\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n class=\"vo-ib vo-aab-up\"\n title=\"Good answer\"\n aria-label=\"Good answer\"\n [attr.aria-pressed]=\"rating === 'up'\"\n (click)=\"rate('up')\"\n >\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n <button\n type=\"button\"\n class=\"vo-ib vo-aab-dn\"\n title=\"Bad answer\"\n aria-label=\"Bad answer\"\n [attr.aria-pressed]=\"rating === 'down'\"\n (click)=\"rate('down')\"\n >\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n <span class=\"vo-aab-sep\" aria-hidden=\"true\"></span>\n <button\n type=\"button\"\n [class]=\"\n 'vo-aab-rd' +\n (read !== 'idle' ? ' vo-on' : '') +\n (read === 'paused' ? ' vo-paused' : '')\n \"\n [attr.aria-pressed]=\"read === 'playing'\"\n [attr.aria-label]=\"\n read === 'playing'\n ? 'Pause reading'\n : read === 'paused'\n ? 'Resume reading'\n : 'Read aloud'\n \"\n [attr.title]=\"\n read === 'playing'\n ? 'Pause'\n : read === 'paused'\n ? 'Resume'\n : 'Read aloud'\n \"\n [disabled]=\"streaming || !words.length\"\n (click)=\"toggleRead()\"\n >\n <span class=\"vo-ic\"\n ><vo-icon\n [name]=\"\n read === 'playing'\n ? 'pause'\n : read === 'paused'\n ? 'play'\n : 'play'\n \"\n size=\"xs\"\n ></vo-icon\n ></span>\n <span class=\"vo-aab-pr\" aria-hidden=\"true\"\n ><i [style.width]=\"progress + '%'\"></i\n ></span>\n <span class=\"vo-aab-tm vo-num\"\n >{{ clockOf(pos * secondsPerWord) }} /\n {{ clockOf(words.length * secondsPerWord) }}</span\n >\n </button>\n </div>\n <span class=\"vo-aab-meta vo-muted vo-num\">{{ metaText }}</span>\n </div>\n <div\n [class]=\"'vo-fold vo-aab-why' + (why ? '' : ' vo-shut')\"\n [attr.inert]=\"why ? null : ''\"\n [attr.aria-hidden]=\"!why\"\n >\n <div>\n <div class=\"vo-aab-wy\">\n <span class=\"vo-aab-wq\">What was off?</span>\n <div class=\"vo-aab-ch\">\n @for (r of reasons; track r) {\n <button type=\"button\" class=\"vo-chip vo-sm\" (click)=\"pickReason(r)\">\n {{ r }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n <p\n [class]=\"'vo-aab-st vo-muted' + (statusTone ? ' vo-' + statusTone : '')\"\n aria-live=\"polite\"\n >\n @if (statusTone === 'ok' && status) {\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon><span class=\"vo-enter\">{{ status }}</span>\n } @else {\n <span [class]=\"streaming && status ? 'vo-shim' : ''\">{{ status }}</span>\n }\n </p>\n </div>\n `,\n styleUrl: './answer-action-bar.css',\n})\nexport class AnswerActionBarComponent implements OnChanges, OnDestroy {\n /** The person's message the answer replies to, shown as a bubble above it. */\n @Input() question?: string;\n /** Every version of the answer so far, oldest first. */\n @Input() versions: AnswerVersion[] = [];\n /** Which version is showing. Leave it out to let the arrows page through them. */\n @Input() version?: number;\n @Input() defaultVersion = 0;\n /** The newest version is still being written: paging and reading wait. */\n @Input() streaming = false;\n /** Shows the regenerate button. */\n @Input() regenerateable = true;\n /** The reasons a thumbs down offers. */\n @Input() reasons: string[] = REASONS;\n /** The quiet line under the bar. It shimmers while streaming. */\n @Input() status = '';\n /** warn turns the status amber; ok gives it a green check. */\n @Input() statusTone?: 'warn' | 'ok';\n /** Read aloud. Leave it out to let the button play and pause. */\n @Input() reading?: ReadingState;\n @Input() defaultReading: ReadingState = 'idle';\n /** How long the built-in reading clock gives each word. Defaults to 0.28s. */\n @Input() secondsPerWord = 0.28;\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n @Input() className = '';\n\n @Output() versionChange = new EventEmitter<number>();\n /** Called by the regenerate button. Add a version and show it to answer it. */\n @Output() regenerateClick = new EventEmitter<void>();\n /** Called with the plain text after it is copied. */\n @Output() copyText = new EventEmitter<string>();\n /** Called when a thumb is pressed or pressed again to clear it. */\n @Output() rateChange = new EventEmitter<{ index: number; rating: AnswerBarRating }>();\n /** Called with the reason picked after a thumbs down. */\n @Output() reason = new EventEmitter<{ index: number; reason: string }>();\n @Output() readingChange = new EventEmitter<ReadingState>();\n\n // the current version, the current reading state, and per-version own state\n private curOwn = 0;\n private readOwn: ReadingState = 'idle';\n private ownRating: Record<number, AnswerBarRating> = {};\n private asked: Record<number, string> = {};\n copied = false;\n spin = false;\n pos = 0;\n\n words: Word[] = [];\n\n private copyTimer?: ReturnType<typeof setTimeout>;\n private spinTimer?: ReturnType<typeof setTimeout>;\n private timer?: ReturnType<typeof setInterval>;\n\n constructor(private readonly reduced: ReducedMotionService) {\n this.curOwn = this.defaultVersion;\n this.readOwn = this.defaultReading;\n }\n\n reduce(): boolean {\n return this.reduced.reduce();\n }\n\n get showRegenerate(): boolean {\n return this.regenerateable;\n }\n\n get last(): number {\n return Math.max(0, this.versions.length - 1);\n }\n\n /** The version showing now, clamped into range. */\n get at(): number {\n const cur = this.version !== undefined ? this.version : this.curOwn;\n return Math.min(Math.max(cur, 0), this.last);\n }\n\n private get v(): AnswerVersion | undefined {\n return this.versions[this.at];\n }\n\n get rating(): AnswerBarRating {\n const v = this.v;\n return v?.rating !== undefined ? v.rating : this.ownRating[this.at] ?? null;\n }\n\n get read(): ReadingState {\n return this.reading !== undefined ? this.reading : this.readOwn;\n }\n\n get metaText(): string {\n return this.v?.meta ?? '';\n }\n\n /** The thumbs-down reason fold is open while the answer is rated down and no reason is picked yet. */\n get why(): boolean {\n return this.rating === 'down' && !this.asked[this.at];\n }\n\n /** The word the reading clock has reached, or -1 when idle. */\n get lit(): number {\n return this.read === 'idle'\n ? -1\n : Math.min(this.words.length - 1, Math.floor(this.pos));\n }\n\n get progress(): number {\n return Math.min(100, (this.pos / Math.max(this.words.length, 1)) * 100);\n }\n\n max1(n: number): number {\n return Math.max(n, 1);\n }\n\n clockOf(s: number): string {\n return clock(s);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['versions'] || changes['version']) {\n this.words = this.splitWords();\n }\n if (changes['version'] && this.read !== 'idle') {\n // paging resets the reading place\n this.pos = 0;\n this.setRead('idle');\n }\n }\n\n // the words, with the changed phrase marked\n private splitWords(): Word[] {\n const text = this.v?.text ?? '';\n const changed = this.v?.changed ?? '';\n const from = changed ? text.indexOf(changed) : -1;\n const to = from < 0 ? -1 : from + changed.length;\n let p = 0;\n return text\n .split(' ')\n .filter(Boolean)\n .map((w) => {\n const a = text.indexOf(w, p);\n p = a + w.length;\n return { w, nw: from >= 0 && a < to && a + w.length > from };\n });\n }\n\n setCur(i: number): void {\n const next = Math.min(Math.max(i, 0), this.last);\n this.pos = 0;\n if (this.read !== 'idle') this.setRead('idle');\n if (this.version === undefined) this.curOwn = next;\n this.words = this.splitWords();\n this.versionChange.emit(next);\n }\n\n private setRead(state: ReadingState): void {\n if (this.reading === undefined) this.readOwn = state;\n this.stopTimer();\n if (state === 'playing') this.startTimer();\n this.readingChange.emit(state);\n }\n\n private startTimer(): void {\n if (this.reduce()) return;\n this.timer = setInterval(() => {\n this.pos += 0.1 / this.secondsPerWord;\n if (this.pos >= this.words.length) {\n this.pos = 0;\n this.setRead('idle');\n }\n }, 100);\n }\n\n private stopTimer(): void {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n toggleRead(): void {\n this.setRead(this.read === 'playing' ? 'paused' : 'playing');\n }\n\n rate(r: 'up' | 'down'): void {\n const next: AnswerBarRating = this.rating === r ? null : r;\n this.ownRating = { ...this.ownRating, [this.at]: next };\n if (next !== 'down') this.asked = { ...this.asked, [this.at]: '' };\n this.rateChange.emit({ index: this.at, rating: next });\n }\n\n pickReason(r: string): void {\n this.asked = { ...this.asked, [this.at]: r };\n this.reason.emit({ index: this.at, reason: r });\n }\n\n regenerate(): void {\n if (this.streaming) return;\n this.pos = 0;\n if (this.read !== 'idle') this.setRead('idle');\n this.spin = true;\n if (this.spinTimer) clearTimeout(this.spinTimer);\n this.spinTimer = setTimeout(() => (this.spin = false), this.reduce() ? 0 : 700);\n this.regenerateClick.emit();\n }\n\n copy(): void {\n const text = this.v?.text ?? '';\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.writeText(text).catch(() => undefined);\n }\n this.copyText.emit(text);\n this.copied = true;\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.copyTimer = setTimeout(() => (this.copied = false), this.reduce() ? 0 : 1400);\n }\n\n // Left and Right move between the toolbar's buttons, skipping any that are switched off\n onToolbarKey(e: KeyboardEvent): void {\n const k = ({ ArrowRight: 1, ArrowLeft: -1 } as Record<string, number>)[e.key];\n if (!k) return;\n const bar = e.currentTarget as HTMLElement;\n const bs = [...bar.querySelectorAll('button')].filter(\n (b) => !(b as HTMLButtonElement).disabled && !b.closest('[inert]'),\n ) as HTMLButtonElement[];\n const i = bs.indexOf(document.activeElement as HTMLButtonElement);\n if (i < 0) return;\n e.preventDefault();\n bs[(i + k + bs.length) % bs.length].focus();\n }\n\n ngOnDestroy(): void {\n this.stopTimer();\n if (this.copyTimer) clearTimeout(this.copyTimer);\n if (this.spinTimer) clearTimeout(this.spinTimer);\n }\n}\n","// framework/angular/artifact-card/artifact-card.component.ts\n//\n// Native Angular port of framework/react/artifact-card/ArtifactCard.tsx.\n// A file the agent made, shown four ways: a compact row, a card with its first\n// page, a chip inside a message, or a stack of its versions. Each plays a\n// writing state, then opens in a reader, switches versions, copies and\n// downloads the same way. Inputs mirror the React props; React callbacks become\n// @Output() EventEmitters.\n//\n// Icon notes: the Angular core glyph set has no download/panel/maximize/layers/\n// history glyphs, so the closest available names are substituted — Open uses\n// `ext` (open out), Download uses `chev-d` (a downward arrow), and the Versions\n// buttons use `clock` (history).\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One version of the file. */\nexport interface ArtifactVersion {\n /** The file's name in this version, like \"Pricing page review\". */\n title: string;\n /** When this version was made, like \"edited 2 hours ago\". */\n meta: string;\n /** What changed in this version, like \"Added a competitor price check\". */\n note?: string;\n /** The file itself, as Markdown (or CSV when `ext` is \"csv\"). */\n content: string;\n /** The text on the preview's first page. Defaults to the first paragraph of `content`. */\n summary?: string;\n}\n\n/** How the card shows the file. */\nexport type ArtifactVariant = 'compact' | 'preview' | 'inline' | 'stack';\n\n/** Whether the agent is still making the file. */\nexport type ArtifactState = 'writing' | 'ready';\n\nconst MIME: Record<string, string> = {\n md: 'text/markdown',\n csv: 'text/csv',\n json: 'application/json',\n html: 'text/html',\n};\nconst slug = (s: string) =>\n s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '');\nconst ago = (meta: string) => meta.replace(/^edited\\s+/i, '');\nconst firstPara = (content: string) =>\n content\n .split(/\\n\\s*\\n/)\n .map((b) => b.trim())\n .find((b) => b && !/^(#|[-*] |\\d+\\. |v\\d+,)/.test(b)) ?? '';\n\n/** A block of the reader's rendered body. */\ninterface Block {\n kind: 'h3' | 'p' | 'ul' | 'ol';\n text?: string;\n items?: string[];\n}\n\n/** One drawn line on a stack sheet: p a paragraph, b a bullet, n a numbered fix, s a gap. */\ninterface Line {\n t: 'p' | 'b' | 'n' | 's';\n w?: number;\n}\n\nconst LINES: Line[][] = [\n [{ t: 'p', w: 94 }, { t: 'p', w: 72 }, { t: 's' }, { t: 'b', w: 82 }, { t: 'b', w: 74 }, { t: 'b', w: 66 }, { t: 'b', w: 78 }, { t: 's' }, { t: 'p', w: 88 }, { t: 'p', w: 52 }],\n [{ t: 'p', w: 92 }, { t: 'p', w: 86 }, { t: 'p', w: 56 }, { t: 's' }, { t: 'b', w: 80 }, { t: 'b', w: 72 }, { t: 'b', w: 86 }, { t: 'b', w: 64 }, { t: 's' }, { t: 'p', w: 70 }],\n [{ t: 'p', w: 90 }, { t: 'p', w: 78 }, { t: 's' }, { t: 'n', w: 84 }, { t: 'n', w: 70 }, { t: 'n', w: 78 }, { t: 's' }, { t: 'b', w: 76 }, { t: 'b', w: 68 }, { t: 'b', w: 82 }],\n];\n// the preview's lines, a little different for each version so drafts are easy to tell apart\nconst WIDTHS = [[96, 88, 70, 82], [92, 84, 90, 64], [90, 78, 86, 72]];\n\n/** A view the reader is showing, or null when closed. */\ninterface Reading {\n kind: 'view' | 'page';\n src: HTMLElement | null;\n opener: HTMLElement | null;\n}\n\n@Component({\n selector: 'vo-artifact-card',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgTemplateOutlet],\n template: `\n <div data-vo=\"\" class=\"vo-afx\" [class]=\"className\">\n <!-- compact: an icon, the name, one line of meta and Open -->\n @if (variant === 'compact') {\n <div class=\"vo-afx-w\">\n <div class=\"vo-afx-cp-card vo-afx-card\" [class.vo-is-writing]=\"writing\">\n <span class=\"vo-afx-ic\"><span class=\"vo-spin\" aria-hidden=\"true\"></span><vo-icon [name]=\"icon\"></vo-icon></span>\n <div class=\"vo-afx-cp-tx\"><div class=\"vo-afx-cp-t\">{{ v.title }}</div>\n <ng-container [ngTemplateOutlet]=\"metaLine\"></ng-container>\n </div>\n <div class=\"vo-afx-cp-act\">\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n <button type=\"button\" class=\"vo-pill vo-sm vo-accent vo-afx-open\" [attr.aria-label]=\"openLabel ?? 'Open ' + v.title\"\n [disabled]=\"writing\" (click)=\"open('view', $any($event.currentTarget), null)\"><vo-icon name=\"ext\"></vo-icon><span class=\"vo-afx-lbl\">Open</span></button>\n </div>\n @if (writing) {\n <span class=\"vo-afx-cp-bar\" aria-hidden=\"true\" [style.transform]=\"'scaleX(' + clamp(progress) + ')'\"></span>\n }\n </div>\n <ng-container [ngTemplateOutlet]=\"versionsMenu\"></ng-container>\n </div>\n }\n\n <!-- preview: the same card with the first page showing -->\n @if (variant === 'preview') {\n <div class=\"vo-afx-w vo-afx-pv\">\n <div class=\"vo-afx-pv-card vo-afx-card\" [class.vo-is-writing]=\"writing\">\n <div class=\"vo-afx-pv-prev\" aria-hidden=\"true\">\n <div class=\"vo-afx-pv-page\" #pvPage>\n <div class=\"vo-afx-pv-k\"><span class=\"vo-afx-wr\">Writing…</span><span class=\"vo-afx-fin\">{{ kind }} · v{{ i + 1 }}</span></div>\n <div class=\"vo-afx-pv-h\">{{ v.title }}</div>\n <p class=\"vo-afx-pv-p\">{{ summary }}@if (writing) {<span class=\"vo-afx-caret\"></span>}</p>\n <div class=\"vo-afx-pv-ls\">\n @for (w of previewWidths; track $index) {\n <i [style.--vo-w]=\"w + '%'\"></i>\n }\n </div>\n </div>\n </div>\n <div class=\"vo-afx-pv-meta\">\n <span class=\"vo-afx-ic\"><span class=\"vo-spin\" aria-hidden=\"true\"></span><vo-icon [name]=\"icon\"></vo-icon></span>\n <div class=\"vo-afx-pv-tx\"><div class=\"vo-afx-pv-t\">{{ v.title }}</div>\n <ng-container [ngTemplateOutlet]=\"metaLine\"></ng-container>\n </div>\n <div class=\"vo-afx-pv-act\">\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n <button type=\"button\" class=\"vo-ib vo-afx-open\" [attr.aria-label]=\"openLabel ?? 'Open ' + v.title\"\n [disabled]=\"writing\" (click)=\"open('page', $any($event.currentTarget), pvPage)\"><vo-icon name=\"ext\"></vo-icon></button>\n </div>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"versionsMenu\"></ng-container>\n </div>\n }\n\n <!-- inline: one line inside the message; versions and actions fold out on hover or focus -->\n @if (variant === 'inline') {\n <div class=\"vo-afx-w\">\n <span class=\"vo-afx-chip\" [class.vo-is-writing]=\"writing\" [class.vo-pin]=\"menuOpen\">\n <button type=\"button\" class=\"vo-afx-in-main\" [disabled]=\"writing\" (click)=\"open('view', $any($event.currentTarget), null)\">\n <span class=\"vo-afx-in-ic\"><span class=\"vo-spin\" aria-hidden=\"true\"></span><vo-icon [name]=\"icon\" size=\"sm\"></vo-icon></span>\n <span class=\"vo-afx-in-t\"><span class=\"vo-afx-sr\">Open </span>{{ v.title }}</span>\n <span class=\"vo-afx-in-m\"><span class=\"vo-afx-wr vo-shim\">{{ status }}</span>\n <span class=\"vo-afx-fin\" [class.vo-enter]=\"settled\"><span class=\"vo-afx-v\">v{{ i + 1 }}</span><span class=\"vo-afx-msep\" aria-hidden=\"true\">·</span><span class=\"vo-afx-when\" [innerHTML]=\"whenHtml(v.meta)\"></span></span></span>\n </button>\n <span class=\"vo-afx-tray\"><span>\n <span class=\"vo-afx-tsep\" aria-hidden=\"true\"></span>\n @if (n > 1) {\n <button type=\"button\" class=\"vo-ib vo-afx-vb3\" aria-label=\"Versions\" aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen\" (click)=\"toggleMenu($any($event.currentTarget))\" (keydown)=\"triggerKeys($event)\"><vo-icon name=\"clock\" size=\"sm\"></vo-icon></button>\n }\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n </span></span>\n </span>\n <ng-container [ngTemplateOutlet]=\"versionsMenu\"></ng-container>\n </div>\n }\n\n <!-- stack: the report as a stack of paper; Versions lays the sheets out to pick one -->\n @if (variant === 'stack') {\n <div class=\"vo-afx-w vo-afx-st\" [class.vo-is-writing]=\"writing\" [class.vo-fan]=\"fanned\">\n <div class=\"vo-afx-desk\" #desk>\n <div class=\"vo-afx-stack\" role=\"menu\" [attr.aria-label]=\"'Versions of ' + v.title\" [attr.aria-hidden]=\"!fanned\" (keydown)=\"deskKeys($event)\">\n @for (x of versions; track shIdx; let shIdx = $index) {\n <button type=\"button\" class=\"vo-afx-sh\" [class.vo-blank]=\"writing && shIdx === last\" role=\"menuitemradio\"\n [attr.data-i]=\"shIdx\" [attr.aria-checked]=\"shIdx === i\" [attr.tabindex]=\"fanned && shIdx === i ? 0 : -1\"\n [attr.aria-label]=\"'v' + (shIdx + 1) + ', ' + x.meta + (x.note ? ': ' + x.note : '')\" [style]=\"sheetStyle(shIdx)\"\n (click)=\"sheetClick(shIdx, $any($event.currentTarget))\"\n (pointerenter)=\"fanned && setPeek(shIdx)\" (pointerleave)=\"fanned && setPeek(null)\"\n (focus)=\"fanned && setPeek(shIdx)\" (blur)=\"fanned && setPeek(null)\">\n <span class=\"vo-afx-pg\" aria-hidden=\"true\">\n <span class=\"vo-afx-st-k\"><span>{{ writing && shIdx === last ? 'Writing…' : 'v' + (shIdx + 1) }}</span></span>\n <span class=\"vo-afx-st-h\">{{ writing && shIdx === last ? typedTitle : x.title }}</span>\n <span class=\"vo-afx-st-ls\">\n @for (ln of stackLines(shIdx); track lnIdx; let lnIdx = $index) {\n @if (ln.t === 's') {\n <span class=\"vo-afx-gap\"></span>\n } @else {\n <span class=\"vo-afx-r\" [class.vo-n]=\"ln.t === 'n'\">@if (ln.t !== 'p') {<b></b>}<i [style.--vo-w]=\"ln.w + '%'\"></i></span>\n }\n }\n </span>\n @if (shIdx === last) {<span class=\"vo-afx-pen\"></span>}\n </span>\n <span class=\"vo-afx-tab\" aria-hidden=\"true\"><vo-icon name=\"check\" size=\"xs\"></vo-icon><span>v{{ shIdx + 1 }}</span><span class=\"vo-afx-ta\"> · {{ shortMeta(x.meta) }}</span></span>\n </button>\n }\n </div>\n </div>\n <div class=\"vo-afx-cap\">\n <div class=\"vo-afx-st-t\">{{ v.title }}</div>\n <div class=\"vo-afx-meta vo-afx-st-m\"><span class=\"vo-afx-wr vo-shim\">{{ status }}</span>\n <span class=\"vo-afx-fin\" [class.vo-enter]=\"settled\"><span>{{ kind }}</span><span aria-hidden=\"true\">·</span><span class=\"vo-afx-v\">v{{ shown + 1 }}</span><span aria-hidden=\"true\">·</span><span class=\"vo-afx-when\" [innerHTML]=\"whenHtml(versions[shown].meta)\"></span></span>\n </div>\n <div class=\"vo-fold vo-afx-nw\" [class.vo-shut]=\"!fanned\"><div><div class=\"vo-afx-note\">{{ versions[shown].note }}</div></div></div>\n </div>\n <div class=\"vo-afx-st-act\">\n @if (n > 1) {\n <button type=\"button\" class=\"vo-pill vo-sm vo-line vo-afx-fan\" #fanBtn aria-haspopup=\"menu\" [attr.aria-expanded]=\"fanned\" (click)=\"fan(!fanned, true)\"><vo-icon name=\"clock\"></vo-icon><span>Versions</span></button>\n }\n <ng-container [ngTemplateOutlet]=\"actions\"></ng-container>\n <button type=\"button\" class=\"vo-pill vo-sm vo-accent vo-afx-open\" [attr.aria-label]=\"openLabel ?? 'Open ' + v.title\"\n [disabled]=\"writing\" (click)=\"openStack($any($event.currentTarget))\"><vo-icon name=\"ext\"></vo-icon><span class=\"vo-afx-lbl\">Open</span></button>\n </div>\n </div>\n }\n\n <!-- the opened file: a modal reader over the card's nearest positioned ancestor -->\n @if (reading) {\n <div class=\"vo-afx-sheet\" #sheet (keydown)=\"readerKeys($event)\">\n <div class=\"vo-afx-scrim\" #scrim (click)=\"closeReader()\"></div>\n <div class=\"vo-afx-pan\" [class.vo-afx-page]=\"reading.kind === 'page'\" [class.vo-afx-view]=\"reading.kind === 'view'\"\n role=\"dialog\" aria-modal=\"true\" [attr.aria-label]=\"v.title\" tabindex=\"-1\" #pan>\n <div class=\"vo-afx-ph\">\n <span class=\"vo-afx-ic\" aria-hidden=\"true\"><vo-icon [name]=\"icon\"></vo-icon></span>\n <div class=\"vo-afx-ptx\"><div class=\"vo-afx-pt\">{{ v.title }}</div><div class=\"vo-afx-pm\">{{ kind }} · v{{ i + 1 }} · {{ v.meta }}</div></div>\n <button type=\"button\" class=\"vo-ib vo-afx-x\" aria-label=\"Close\" #closeBtn (click)=\"closeReader()\"><vo-icon name=\"x\"></vo-icon></button>\n </div>\n <div class=\"vo-afx-pb\" tabindex=\"0\" role=\"region\" [attr.aria-label]=\"v.title + ', v' + (i + 1)\">\n @if (ext === 'csv') {\n <table class=\"vo-afx-tb\">\n <thead><tr>@for (h of csvRows[0]; track $index) {<th scope=\"col\" [class.vo-num]=\"$index\">{{ h }}</th>}</tr></thead>\n <tbody>@for (row of csvRows.slice(1); track $index) {\n <tr>@for (cell of row; track $index) {\n @if ($index) {<td class=\"vo-num\">{{ cell }}</td>} @else {<th scope=\"row\">{{ cell }}</th>}\n }</tr>\n }</tbody>\n </table>\n } @else {\n @for (b of bodyBlocks; track $index) {\n @switch (b.kind) {\n @case ('h3') { <h3>{{ b.text }}</h3> }\n @case ('ul') { <ul>@for (li of b.items; track $index) {<li>{{ li }}</li>}</ul> }\n @case ('ol') { <ol>@for (li of b.items; track $index) {<li>{{ li }}</li>}</ol> }\n @default { <p>{{ b.text }}</p> }\n }\n }\n }\n </div>\n <div class=\"vo-afx-pf\">\n <button type=\"button\" class=\"vo-pill vo-sm vo-line vo-afx-copy\" [class.vo-copied]=\"flashed === 'rcopy'\" (click)=\"copy('rcopy')\"><vo-icon [name]=\"flashed === 'rcopy' ? 'check' : 'copy'\" size=\"sm\"></vo-icon><span class=\"vo-afx-lbl\">{{ flashed === 'rcopy' ? 'Copied' : 'Copy' }}</span></button>\n <button type=\"button\" class=\"vo-pill vo-sm vo-line vo-afx-dl\" [class.vo-copied]=\"flashed === 'rdl'\" (click)=\"download('rdl')\"><vo-icon [name]=\"flashed === 'rdl' ? 'check' : 'chev-d'\" size=\"sm\"></vo-icon><span class=\"vo-afx-lbl\">{{ flashed === 'rdl' ? 'Downloaded' : 'Download' }}</span></button>\n </div>\n </div>\n </div>\n }\n\n <!-- the versions menu, shared by the compact, preview and inline variants -->\n <ng-template #versionsMenu>\n @if (n > 1) {\n <div class=\"vo-pop vo-afx-menu\" [class.vo-open]=\"menuOpen\" role=\"menu\" [attr.aria-label]=\"'Versions of ' + v.title\"\n #menuEl [attr.inert]=\"menuOpen ? null : ''\" [style.left.px]=\"menuLeft\" [style.top.px]=\"menuTop\" (keydown)=\"menuKeys($event)\">\n <div class=\"vo-ph\" aria-hidden=\"true\">Versions</div>\n @for (n2 of reversed; track n2) {\n <button type=\"button\" class=\"vo-mi\" role=\"menuitemradio\" tabindex=\"-1\" [attr.aria-checked]=\"n2 === i\" [attr.data-i]=\"n2\"\n (click)=\"pickFromMenu(n2)\">\n <span class=\"vo-afx-mb\"><span>v{{ n2 + 1 }}<span class=\"vo-afx-mw\"> · {{ shortMeta(versions[n2].meta) }}</span></span>@if (versions[n2].note) {<span class=\"vo-d\">{{ versions[n2].note }}</span>}</span>\n <vo-icon name=\"check\" class=\"vo-ck\" size=\"sm\"></vo-icon>\n </button>\n }\n </div>\n }\n </ng-template>\n\n <!-- the meta line, shared by the compact and preview variants -->\n <ng-template #metaLine>\n <div class=\"vo-afx-meta\">\n <span class=\"vo-afx-wr vo-shim\">{{ status }}</span>\n <span class=\"vo-afx-fin\" [class.vo-enter]=\"settled\">\n <span>{{ kind }}</span><span aria-hidden=\"true\">·</span>\n @if (n > 1) {\n <button type=\"button\" class=\"vo-afx-vb\" aria-haspopup=\"menu\" [attr.aria-expanded]=\"menuOpen\"\n [attr.aria-label]=\"'v' + (i + 1) + ' of ' + n + ' versions'\" (click)=\"toggleMenu($any($event.currentTarget))\" (keydown)=\"triggerKeys($event)\"><span class=\"vo-afx-vt\">v{{ i + 1 }}</span><vo-icon name=\"chev-d\" size=\"xs\"></vo-icon></button>\n } @else {\n <span class=\"vo-afx-v\">v1</span>\n }\n <span aria-hidden=\"true\">·</span><span class=\"vo-afx-when\" [innerHTML]=\"whenHtml(v.meta)\"></span>\n </span>\n </div>\n </ng-template>\n\n <!-- Copy and Download, shared by every variant -->\n <ng-template #actions>\n <button type=\"button\" class=\"vo-ib vo-afx-copy\" [class.vo-copied]=\"flashed === 'copy'\" [attr.aria-label]=\"'Copy ' + v.title\" (click)=\"copy('copy')\"><vo-icon [name]=\"flashed === 'copy' ? 'check' : 'copy'\" [size]=\"actionSize\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib vo-afx-dl\" [class.vo-copied]=\"flashed === 'dl'\" [attr.aria-label]=\"'Download ' + v.title\" (click)=\"download('dl')\"><vo-icon [name]=\"flashed === 'dl' ? 'check' : 'chev-d'\" [size]=\"actionSize\"></vo-icon></button>\n </ng-template>\n\n <div class=\"vo-afx-sr\" role=\"status\" aria-live=\"polite\">{{ said }}</div>\n </div>\n `,\n styleUrl: './artifact-card.css',\n})\nexport class ArtifactCardComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** How the card shows the file. */\n @Input() variant: ArtifactVariant = 'compact';\n /** The versions, oldest first. */\n @Input() versions: ArtifactVersion[] = [];\n /** Index of the version shown. Leave it out to let the versions menu change it. */\n @Input() version?: number;\n /** Defaults to the latest version. */\n @Input() defaultVersion?: number;\n /** 'writing' while the agent is still making the file; 'ready' once it is done. */\n @Input() state: ArtifactState = 'ready';\n /** The line shown while writing, like \"Reading the page…\". */\n @Input() status = 'Writing…';\n /** How far the writing has got, from 0 to 1 (the compact card draws it along its bottom edge). */\n @Input() progress?: number;\n /** The kind of file on the meta line, like \"Report\" or \"Table\". */\n @Input() kind = 'Report';\n /** The file's icon. */\n @Input() icon: VoIconName = 'file-text';\n /** The name Download saves under, before \"-v3.md\". Defaults to the title in lowercase, with dashes. */\n @Input() fileName?: string;\n /** The extension Download saves with. \"csv\" also shows the content as a table in the reader. */\n @Input() ext = 'md';\n /** The Open button's tip, like \"Open beside the chat\". Its label stays \"Open\". */\n @Input() openLabel?: string;\n @Input() className = '';\n\n /** Emitted when the shown version changes. */\n @Output() versionChange = new EventEmitter<number>();\n /** Emitted when the file is opened, with the version shown. With a listener, Open does not show the card's own reader. */\n @Output() opened = new EventEmitter<number>();\n /** Emitted after Copy has put the version's content on the clipboard. */\n @Output() copied = new EventEmitter<number>();\n /** Emitted after Download has saved the version's content as a file. */\n @Output() downloaded = new EventEmitter<number>();\n\n @ViewChild('menuEl') private menuEl?: ElementRef<HTMLElement>;\n @ViewChild('desk') private desk?: ElementRef<HTMLElement>;\n @ViewChild('fanBtn') private fanBtn?: ElementRef<HTMLButtonElement>;\n @ViewChild('pan') private pan?: ElementRef<HTMLElement>;\n @ViewChild('closeBtn') private closeBtn?: ElementRef<HTMLButtonElement>;\n\n private readonly host: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly motion = inject(ReducedMotionService);\n\n // which version is shown (uncontrolled unless `version` is set)\n private curIndex = 0;\n private controlled = false;\n flashed: string | null = null;\n private flashTimer?: ReturnType<typeof setTimeout>;\n said = '';\n private sayTimer?: ReturnType<typeof setTimeout>;\n settled = false;\n private wasWriting = false;\n reading: Reading | null = null;\n private openerEl: HTMLElement | null = null;\n\n // versions menu\n menuOpen = false;\n menuLeft = 0;\n menuTop = 0;\n private openerTrigger?: HTMLElement;\n\n // stack\n fanned = false;\n peek: number | null = null;\n typedTitle = '';\n private stackTimers: ReturnType<typeof setTimeout>[] = [];\n private stackAnims: Animation[] = [];\n\n private onDocPointer = (e: PointerEvent) => {\n const t = e.target as Node;\n if (this.menuOpen && !this.menuEl?.nativeElement.contains(t) && !this.openerTrigger?.contains(t)) {\n this.closeMenu();\n }\n if (this.fanned && !this.desk?.nativeElement.contains(t) && !this.fanBtn?.nativeElement.contains(t)) {\n this.fan(false);\n }\n };\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['version']) {\n this.controlled = this.version !== undefined;\n if (this.version !== undefined) this.curIndex = this.version;\n }\n if (changes['defaultVersion'] && !this.controlled && this.defaultVersion !== undefined) {\n this.curIndex = this.defaultVersion;\n }\n if (changes['versions'] && !this.controlled && this.defaultVersion === undefined) {\n this.curIndex = Math.max(0, this.versions.length - 1);\n }\n if (changes['state']) {\n const writing = this.state === 'writing';\n if (this.wasWriting && !writing) {\n this.settled = true;\n this.say(`${this.v.title} is ready, v${this.i + 1}`);\n }\n this.wasWriting = writing;\n }\n if (changes['variant'] || changes['state']) this.restartStack();\n }\n\n ngAfterViewInit(): void {\n this.wasWriting = this.state === 'writing';\n document.addEventListener('pointerdown', this.onDocPointer);\n this.restartStack();\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onDocPointer);\n clearTimeout(this.flashTimer);\n clearTimeout(this.sayTimer);\n this.clearStack();\n }\n\n // ---- derived state ----\n get n(): number { return this.versions.length; }\n get last(): number { return this.n - 1; }\n get i(): number { return Math.max(0, Math.min(this.last, this.curIndex)); }\n get v(): ArtifactVersion { return this.versions[this.i] ?? { title: '', meta: '', content: '' }; }\n get writing(): boolean { return this.state === 'writing'; }\n get shown(): number { return this.fanned && this.peek != null ? this.peek : this.i; }\n get reversed(): number[] { return this.versions.map((_, k) => k).reverse(); }\n get actionSize(): 'sm' | 'md' { return this.variant === 'inline' || this.variant === 'preview' ? 'sm' : 'md'; }\n get summary(): string { return this.v.summary ?? firstPara(this.v.content); }\n get previewWidths(): number[] { return WIDTHS[this.i % 3]; }\n\n clamp(x?: number): number { return Math.max(0, Math.min(1, x ?? 0)); }\n shortMeta(meta: string): string { return ago(meta); }\n whenHtml(meta: string): string {\n const short = ago(meta);\n return short === meta ? meta : `<span class=\"vo-afx-ed\">edited </span>${short}`;\n }\n stackLines(n: number): Line[] { return LINES[n === this.last ? 2 : n % 2]; }\n\n get csvRows(): string[][] {\n return this.v.content.trim().split('\\n').map((r) => r.split(','));\n }\n get bodyBlocks(): Block[] {\n const out: Block[] = [];\n this.v.content.split(/\\n\\s*\\n/).map((b) => b.trim()).filter(Boolean).forEach((b) => {\n const lines = b.split('\\n');\n if (/^# /.test(b)) return;\n if (/^#{2,} /.test(b)) out.push({ kind: 'h3', text: b.replace(/^#+ /, '') });\n else if (lines.every((l) => /^[-*] /.test(l))) out.push({ kind: 'ul', items: lines.map((l) => l.slice(2)) });\n else if (lines.every((l) => /^\\d+\\. /.test(l))) out.push({ kind: 'ol', items: lines.map((l) => l.replace(/^\\d+\\. /, '')) });\n else out.push({ kind: 'p', text: b });\n });\n return out;\n }\n\n // ---- announcements and feedback ----\n private say(msg: string): void {\n this.said = '';\n clearTimeout(this.sayTimer);\n this.sayTimer = setTimeout(() => (this.said = msg), 60);\n }\n private flash(key: string): void {\n this.flashed = key;\n clearTimeout(this.flashTimer);\n this.flashTimer = setTimeout(() => (this.flashed = null), 1600);\n }\n\n // ---- actions ----\n private pick(nn: number): void {\n if (nn === this.i) return;\n if (!this.controlled) this.curIndex = nn;\n this.versionChange.emit(nn);\n this.say(`Showing v${nn + 1}, ${this.versions[nn].meta}`);\n }\n copy(key: string): void {\n try { navigator.clipboard?.writeText(this.v.content).catch(() => {}); } catch { /* the page may not write to the clipboard */ }\n this.flash(key);\n this.say(`Copied ${this.v.title}, v${this.i + 1}, to the clipboard`);\n this.copied.emit(this.i);\n }\n download(key: string): void {\n const name = `${this.fileName ?? slug(this.v.title)}-v${this.i + 1}.${this.ext}`;\n const url = URL.createObjectURL(new Blob([this.v.content], { type: MIME[this.ext] ?? 'text/plain' }));\n const a = document.createElement('a');\n a.href = url; a.download = name; a.hidden = true;\n document.body.append(a); a.click(); a.remove();\n setTimeout(() => URL.revokeObjectURL(url), 5000);\n this.flash(key);\n this.say(`Downloaded ${name}`);\n this.downloaded.emit(this.i);\n }\n open(kindOf: 'view' | 'page', opener: HTMLElement | null, src: HTMLElement | null): void {\n if (this.writing) return;\n if (this.opened.observed) { this.opened.emit(this.i); return; }\n this.openerEl = opener;\n this.reading = { kind: kindOf, src, opener };\n this.say(`Opened ${this.v.title}, v${this.i + 1}`);\n // move focus into the dialog once it renders\n setTimeout(() => this.closeBtn?.nativeElement.focus({ preventScroll: true }));\n }\n closeReader(): void {\n this.reading = null;\n this.openerEl?.focus({ preventScroll: true });\n }\n readerKeys(e: KeyboardEvent): void {\n if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); this.closeReader(); return; }\n if (e.key !== 'Tab' || !this.pan) return;\n const f = [...this.pan.nativeElement.querySelectorAll<HTMLElement>('button,[tabindex=\"0\"]')];\n const first = f[0], lastEl = f[f.length - 1];\n if (e.shiftKey && (document.activeElement === first || document.activeElement === this.pan.nativeElement)) { e.preventDefault(); lastEl?.focus(); }\n else if (!e.shiftKey && document.activeElement === lastEl) { e.preventDefault(); first?.focus(); }\n }\n\n // ---- versions menu ----\n toggleMenu(trigger: HTMLElement): void {\n this.menuOpen ? this.closeMenu() : this.openMenu(trigger);\n }\n private openMenu(trigger: HTMLElement): void {\n this.openerTrigger = trigger;\n this.menuOpen = true;\n setTimeout(() => {\n this.placeMenu(trigger);\n const menu = this.menuEl?.nativeElement;\n const b = menu?.querySelector<HTMLElement>('[aria-checked=\"true\"]') ?? menu?.querySelector<HTMLElement>('.vo-mi');\n b?.focus({ preventScroll: true });\n });\n }\n closeMenu(): void { this.menuOpen = false; }\n private placeMenu(trigger: HTMLElement): void {\n const menu = this.menuEl?.nativeElement, host = this.host.nativeElement as HTMLElement;\n if (!menu) return;\n const hr = host.getBoundingClientRect(), br = trigger.getBoundingClientRect();\n this.menuLeft = Math.round(br.left - hr.left - 6);\n this.menuTop = Math.round(br.bottom - hr.top + 6);\n }\n pickFromMenu(nn: number): void {\n this.pick(nn);\n this.closeMenu();\n this.openerTrigger?.focus({ preventScroll: true });\n }\n triggerKeys(e: KeyboardEvent): void {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.openMenu(e.currentTarget as HTMLElement);\n }\n }\n menuKeys(e: KeyboardEvent): void {\n const menu = this.menuEl?.nativeElement;\n const it = [...(menu?.querySelectorAll<HTMLElement>('.vo-mi') ?? [])];\n const k = it.indexOf(document.activeElement as HTMLElement);\n if (e.key === 'ArrowDown') { e.preventDefault(); it[(k + 1) % it.length]?.focus(); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); it[(k - 1 + it.length) % it.length]?.focus(); }\n else if (e.key === 'Home') { e.preventDefault(); it[0]?.focus(); }\n else if (e.key === 'End') { e.preventDefault(); it[it.length - 1]?.focus(); }\n else if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); this.closeMenu(); this.openerTrigger?.focus({ preventScroll: true }); }\n else if (e.key === 'Tab') { this.closeMenu(); }\n }\n\n // ---- stack ----\n setPeek(nn: number | null): void { this.peek = nn; }\n sheetStyle(nn: number): Record<string, string | number> {\n if (this.fanned) {\n const o = nn - this.last / 2;\n return {\n transform: `translate(calc(${o} * var(--vo-fx)),${Math.abs(o) * 6 + (this.peek === nn ? -8 : 0)}px) rotate(${o * 6}deg)`,\n 'z-index': this.peek === nn ? 9 : nn + 1,\n };\n }\n const behind = this.versions.map((_, k) => k).reverse().filter((k) => k !== this.i);\n const d = nn === this.i ? 0 : behind.indexOf(nn) + 1;\n return { '--vo-d': d, 'z-index': this.n - d };\n }\n fan(on: boolean, focus = false): void {\n if (this.writing) return;\n this.fanned = on; this.peek = null;\n if (on && focus) {\n setTimeout(() => this.desk?.nativeElement.querySelector<HTMLElement>(`[data-i=\"${this.i}\"]`)?.focus({ preventScroll: true }));\n }\n }\n sheetClick(nn: number, el: HTMLElement): void {\n if (this.writing) return;\n if (this.fanned) { this.pick(nn); this.fan(false); this.fanBtn?.nativeElement.focus({ preventScroll: true }); }\n else this.open('page', this.host.nativeElement.querySelector<HTMLElement>('.vo-afx-open'), el);\n }\n openStack(opener: HTMLElement): void {\n if (this.writing) return;\n if (this.fanned) this.fan(false);\n this.open('page', opener, this.desk?.nativeElement.querySelector<HTMLElement>(`[data-i=\"${this.i}\"]`) ?? null);\n }\n deskKeys(e: KeyboardEvent): void {\n if (!this.fanned) return;\n const sheets = [...(this.desk?.nativeElement.querySelectorAll<HTMLElement>('.vo-afx-sh') ?? [])];\n const k = sheets.indexOf(document.activeElement as HTMLElement);\n let nn: number | null = null;\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') nn = Math.min(this.last, k + 1);\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') nn = Math.max(0, k - 1);\n else if (e.key === 'Home') nn = 0;\n else if (e.key === 'End') nn = this.last;\n else if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); this.fan(false); this.fanBtn?.nativeElement.focus({ preventScroll: true }); return; }\n else if (e.key === 'Tab') { this.fan(false); return; }\n if (nn != null) { e.preventDefault(); sheets[nn]?.focus(); }\n }\n\n // writing: a blank sheet drops onto the stack, the title is typed, and a pen draws each line of the new page\n private restartStack(): void {\n this.clearStack();\n if (this.variant !== 'stack' || !this.writing) return;\n setTimeout(() => this.runStack());\n }\n private clearStack(): void {\n this.stackTimers.forEach(clearTimeout);\n this.stackTimers = [];\n this.stackAnims.forEach((a) => a.cancel());\n this.stackAnims = [];\n this.typedTitle = '';\n }\n private runStack(): void {\n const sh = this.desk?.nativeElement.querySelector<HTMLElement>(`[data-i=\"${this.last}\"]`);\n if (!sh) return;\n let alive = true;\n const onDone = () => (alive = false);\n this.stackTimers.push(setTimeout(onDone, 60_000));\n const sleep = (ms: number) => new Promise<void>((res, rej) => this.stackTimers.push(setTimeout(() => (alive ? res() : rej(new Error('stop'))), ms)));\n const motion = !this.motion.reduce();\n const E = getComputedStyle(sh).getPropertyValue('--vo-ease').trim() || 'ease';\n const T = this.versions[this.last]?.title ?? '';\n void (async () => {\n if (motion) this.stackAnims.push(sh.animate([{ transform: 'translateY(-36px)', opacity: 0 }, { transform: 'none', opacity: 1 }], { duration: 700, easing: E, composite: 'add' }));\n this.typedTitle = '';\n await sleep(300);\n if (!motion) this.typedTitle = T;\n else for (let k = 1; k <= T.length; k++) { this.typedTitle = T.slice(0, k); await sleep(40); }\n await sleep(motion ? 250 : 0);\n const pen = sh.querySelector<HTMLElement>('.vo-afx-pen');\n const rows = [...sh.querySelectorAll<HTMLElement>('.vo-afx-r')].filter((x) => x.offsetParent);\n for (const x of rows) {\n const line = x.querySelector('i')!, dot = x.querySelector('b');\n if (!motion) { this.stackAnims.push(line.animate([{ transform: 'none' }], { fill: 'forwards' })); if (dot) this.stackAnims.push(dot.animate([{ transform: 'none' }], { fill: 'forwards' })); await sleep(150); continue; }\n const x0 = x.offsetLeft + line.offsetLeft, x1 = x0 + line.offsetWidth, y = x.offsetTop + x.offsetHeight / 2 - 3.5, ms = 260 + line.offsetWidth * 1.4;\n if (dot) this.stackAnims.push(dot.animate([{ transform: 'scaleX(0)' }, { transform: 'none' }], { duration: 120, fill: 'forwards' }));\n this.stackAnims.push(line.animate([{ transform: 'scaleX(0)' }, { transform: 'scaleX(1)' }], { duration: ms, easing: 'cubic-bezier(.4,0,.3,1)', fill: 'forwards' }));\n if (pen) this.stackAnims.push(pen.animate([{ transform: `translate(${x0 - 3}px,${y}px)`, opacity: 1 }, { transform: `translate(${x1 - 3}px,${y}px)`, opacity: 1 }], { duration: ms, easing: 'cubic-bezier(.4,0,.3,1)', fill: 'forwards' }));\n await sleep(ms + 70);\n }\n pen?.getAnimations().forEach((a) => a.cancel());\n })().catch(() => {});\n }\n}\n","// framework/angular/attachment-tray/attachment-tray.component.ts\n//\n// Native Angular port of framework/react/attachment-tray/AttachmentTray.tsx.\n// A drop zone, then the files as plain rows. Each file wears its type's hue: its\n// badge, its ring and the wash that fills its row from the left as it uploads.\n// Once it is up the agent reads it (the line shimmers) and says what it found.\n// Inputs mirror the React props; onFiles/onRemove map to @Output EventEmitters.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One file in the tray, from upload through to what the agent read in it. */\nexport interface Attachment {\n id: string;\n name: string;\n /** In bytes. */\n size: number;\n /** 0 to 100. The ring closes and the row fills with the file type's colour; at 100 the ring turns into a check. */\n progress: number;\n /** After the upload, while the agent reads the file: a spinner, and \"Reading\" shimmering after the size. */\n reading?: boolean;\n /** What the agent found once it has read the file, like \"12 pages\", shown after the size. */\n detail?: string;\n}\n\n/** A link after \"or\" in the drop zone, like \"add sample files\". */\nexport interface AttachmentAction {\n label: string;\n onClick: () => void;\n}\n\n/** The badge for a file type: its letters, its colour and its background. */\nfunction kind(name: string): [string, string, string] {\n const e = (name.split('.').pop() || '').toLowerCase();\n if (e === 'pdf') return ['PDF', 'var(--vo-pr)', 'var(--vo-pr-bg)'];\n if (/png|jpg|jpeg|gif|webp|fig/.test(e)) return [e.toUpperCase().slice(0, 3), 'var(--vo-pl)', 'var(--vo-pl-bg)'];\n if (/csv|xlsx/.test(e)) return ['CSV', 'var(--vo-pm)', 'var(--vo-pm-bg)'];\n return [e.toUpperCase().slice(0, 3) || 'TXT', 'var(--vo-pb)', 'var(--vo-pb-bg)'];\n}\nconst bytes = (b: number) => (b > 1e6 ? (b / 1e6).toFixed(1) + ' MB' : Math.max(1, Math.round(b / 1e3)) + ' KB');\nconst RING = 50.3;\n\n/** A file row with everything the template needs computed from its Attachment. */\ninterface Row {\n file: Attachment;\n delay: number;\n label: string;\n fg: string;\n bg: string;\n p: number;\n up: boolean;\n meta: string;\n dashoffset: number;\n leaving: boolean;\n}\n\n/** The dashed edge of the drop zone, as a rect whose dashes march around the corners. */\ninterface Ants {\n w: number;\n h: number;\n rx: number;\n ap: number;\n ag: number;\n}\n\n@Component({\n selector: 'vo-attachment-tray',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-atx\" [class]=\"className\">\n <label\n #drop\n class=\"vo-atx-drop\"\n [class.vo-over]=\"over || dragging\"\n (dragenter)=\"hold($event)\"\n (dragover)=\"hold($event)\"\n (dragleave)=\"over = false\"\n (drop)=\"onDrop($event)\"\n >\n <input\n type=\"file\"\n multiple\n [attr.accept]=\"accept || null\"\n class=\"vo-atx-file\"\n aria-label=\"Choose files\"\n (change)=\"onChange($event)\"\n />\n <svg class=\"vo-atx-ants\" aria-hidden=\"true\">\n @if (ants) {\n <rect\n [attr.x]=\"0.75\"\n [attr.y]=\"0.75\"\n [attr.width]=\"ants.w\"\n [attr.height]=\"ants.h\"\n [attr.rx]=\"ants.rx\"\n [style.--vo-ap.px]=\"ants.ap\"\n [style.--vo-ag.px]=\"ants.ag\"\n />\n }\n </svg>\n <span class=\"vo-atx-ic\"><vo-icon name=\"chev-u\"></vo-icon></span>\n <b>{{ title }}</b>\n @if (action) {\n <span class=\"vo-muted\"\n >or <button type=\"button\" class=\"vo-atx-sample\" (click)=\"action.onClick()\">{{ action.label }}</button></span\n >\n }\n </label>\n\n <div class=\"vo-atx-list\">\n @for (row of rows; track row.file.id) {\n <div\n class=\"vo-atx-it\"\n [class.vo-up]=\"row.up\"\n [class.vo-leave]=\"row.leaving\"\n [class.vo-enter]=\"!row.leaving\"\n [style.--vo-c]=\"row.fg\"\n [style.--vo-cb]=\"row.bg\"\n [style.--vo-p]=\"(row.p * 100).toFixed(1) + '%'\"\n [style.animation-delay]=\"row.leaving ? null : row.delay + 'ms'\"\n >\n <span class=\"vo-atx-ti\">{{ row.label }}</span>\n <span class=\"vo-atx-n\">\n <span class=\"vo-atx-nm\">{{ row.file.name }}</span>\n @if (!row.up) {\n <span class=\"vo-atx-m vo-num\">{{ row.meta }}</span>\n } @else if (row.file.reading) {\n <span class=\"vo-atx-m\"><span class=\"vo-shim\">{{ bytesOf(row.file.size) }} · Reading</span></span>\n } @else {\n <span class=\"vo-atx-m\">{{ row.meta }}</span>\n }\n </span>\n\n @if (row.up) {\n @if (row.file.reading) {\n <span class=\"vo-atx-rd\"><span class=\"vo-spin\" aria-hidden=\"true\"></span></span>\n } @else {\n <span class=\"vo-atx-ok\"><vo-icon name=\"ok\"></vo-icon></span>\n }\n } @else {\n <svg\n class=\"vo-atx-ring\"\n viewBox=\"0 0 22 22\"\n role=\"progressbar\"\n [attr.aria-label]=\"'Uploading ' + row.file.name\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"round(row.p * 100)\"\n >\n <circle cx=\"11\" cy=\"11\" r=\"8\" fill=\"none\" stroke=\"var(--vo-line)\" stroke-width=\"2\" />\n <circle\n cx=\"11\"\n cy=\"11\"\n r=\"8\"\n fill=\"none\"\n [attr.stroke]=\"row.fg\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n [attr.stroke-dasharray]=\"RING\"\n transform=\"rotate(-90 11 11)\"\n [style.stroke-dashoffset]=\"row.dashoffset\"\n />\n </svg>\n }\n\n @if (showRemove) {\n <button\n type=\"button\"\n class=\"vo-ib\"\n [attr.aria-label]=\"'Remove ' + row.file.name\"\n [attr.data-tip]=\"'Remove'\"\n [disabled]=\"row.leaving\"\n (click)=\"remove(row)\"\n >\n <vo-icon name=\"x\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n }\n </div>\n\n <div class=\"vo-atx-sum vo-muted\">{{ line }}</div>\n </div>\n `,\n styleUrl: './attachment-tray.css',\n})\nexport class AttachmentTrayComponent implements AfterViewInit, OnDestroy {\n /** The files in the tray. */\n @Input() files: Attachment[] = [];\n /** The drop zone's heading. */\n @Input() title = 'Drop files here';\n /** A link after \"or\" in the drop zone, like \"add sample files\". */\n @Input() action: AttachmentAction | null = null;\n /** Passed to the file input, like \"image/*,.pdf\". */\n @Input() accept?: string;\n /** The line under the list. Defaults to how many files the agent can read. */\n @Input() summary?: string;\n /** Shows the drop zone as if a file were being dragged over it, for a scripted demo. */\n @Input() dragging = false;\n @Input() className = '';\n\n /** Files the person dropped on the tray or picked with the file dialog. */\n @Output() filesPicked = new EventEmitter<File[]>();\n /** Emitted once a removed file has animated out. Its presence also adds a remove button. */\n @Output() remove$ = new EventEmitter<string>();\n\n @ViewChild('drop', { static: true }) dropRef!: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n readonly RING = RING;\n over = false;\n ants: Ants | null = null;\n\n // files that arrive together come in one after another\n private delays = new Map<string, number>();\n private seen = new Set<string>();\n private leaving = new Set<string>();\n private removeTimers = new Map<string, ReturnType<typeof setTimeout>>();\n private ro?: ResizeObserver;\n\n bytesOf = bytes;\n round = Math.round;\n\n get showRemove(): boolean {\n return this.remove$.observed;\n }\n\n get rows(): Row[] {\n let k = 0;\n const out: Row[] = [];\n for (const file of this.files) {\n if (!this.seen.has(file.id)) {\n this.seen.add(file.id);\n this.delays.set(file.id, k++ * 80);\n }\n const [label, fg, bg] = kind(file.name);\n const p = Math.max(0, Math.min(100, file.progress)) / 100;\n const up = p >= 1;\n const meta = !up\n ? `${bytes(file.size)} · ${Math.round(p * 100)}%`\n : file.detail && !file.reading\n ? `${bytes(file.size)} · ${file.detail}`\n : bytes(file.size);\n out.push({\n file,\n delay: this.delays.get(file.id) ?? 0,\n label,\n fg,\n bg,\n p,\n up,\n meta,\n dashoffset: RING * (1 - p),\n leaving: this.leaving.has(file.id),\n });\n }\n return out;\n }\n\n get line(): string {\n if (this.summary !== undefined) return this.summary;\n const read = this.files.filter((f) => f.progress >= 100 && !f.reading).length;\n return read ? `The agent can read ${read} ${read > 1 ? 'files' : 'file'} now` : '';\n }\n\n ngAfterViewInit(): void {\n // the dashed edge follows the drop zone's size and corners, with the dashes spaced to meet evenly all the way round\n const el = this.dropRef.nativeElement;\n const fit = () => {\n const w = el.offsetWidth;\n const h = el.offsetHeight;\n if (!w || !h) return;\n const k = 0.75;\n const rx = Math.max(0, Math.min(parseFloat(getComputedStyle(el).borderTopLeftRadius) || 0, w / 2, h / 2) - k);\n const per = 2 * (w + h - 4 * k) - (8 - 2 * Math.PI) * rx;\n const step = per / Math.max(8, Math.round(per / 11));\n this.ants = { w: w - 2 * k, h: h - 2 * k, rx, ap: step, ag: step - 4.5 };\n };\n fit();\n this.ro = new ResizeObserver(fit);\n this.ro.observe(el);\n }\n\n hold(e: DragEvent): void {\n e.preventDefault();\n this.over = true;\n }\n\n onDrop(e: DragEvent): void {\n e.preventDefault();\n this.over = false;\n const list = e.dataTransfer?.files;\n if (list && list.length) this.filesPicked.emit(Array.from(list));\n }\n\n onChange(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) this.filesPicked.emit(Array.from(input.files));\n input.value = '';\n }\n\n remove(row: Row): void {\n if (row.leaving) return;\n const id = row.file.id;\n this.leaving.add(id);\n const t = setTimeout(\n () => {\n this.leaving.delete(id);\n this.removeTimers.delete(id);\n this.remove$.emit(id);\n },\n this.motion.reduce() ? 0 : 320,\n );\n this.removeTimers.set(id, t);\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n this.removeTimers.forEach((t) => clearTimeout(t));\n this.removeTimers.clear();\n }\n}\n","// framework/angular/badge/badge.component.ts\n//\n// Native Angular port of framework/react/badge/Badge.tsx.\n// A small label for plan, environment or status, with an optional dot or icon\n// and an optional remove button. Inputs mirror the React props.\n\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\n/** Color of the badge: neutral, accent tint, the three states or one of the eight tag colors. */\nexport type BadgeTone =\n | 'neutral' | 'accent' | 'success' | 'warning' | 'danger'\n | 'blue' | 'violet' | 'green' | 'orange' | 'red' | 'yellow' | 'pink' | 'teal';\n\n@Component({\n selector: 'vo-badge',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <span\n class=\"vo-bdg\"\n [class.vo-sm]=\"size === 'sm'\"\n [class.vo-live]=\"live\"\n [attr.data-tone]=\"tone === 'neutral' ? null : tone\"\n >\n @if (dot) {\n <span class=\"vo-bdg-dot\" aria-hidden=\"true\"></span>\n }\n @if (icon) {\n <vo-icon [name]=\"icon\" size=\"xs\"></vo-icon>\n }\n <span class=\"vo-t\"><ng-content></ng-content></span>\n @if (removable) {\n <button\n type=\"button\"\n class=\"vo-bdg-x\"\n [attr.aria-label]=\"removeLabel ?? 'Remove'\"\n (click)=\"remove.emit()\"\n >\n <vo-icon name=\"x\" size=\"xs\"></vo-icon>\n </button>\n }\n </span>\n `,\n styleUrl: './badge.css',\n})\nexport class BadgeComponent {\n /** Color as text on its own tint. Neutral by default. */\n @Input() tone: BadgeTone = 'neutral';\n /** 'sm' = 20px tall, 'md' = 24px (default). */\n @Input() size: 'sm' | 'md' = 'md';\n /** Dot in badge color before the label (status like \"Running\"). */\n @Input() dot = false;\n /** Pulsing dot for running states (.live). */\n @Input() live = false;\n /** Icon before the label (name from the icon set). */\n @Input() icon?: VoIconName;\n /** Shows a remove button after the label. */\n @Input() removable = false;\n /** Label of the remove button for screen readers. */\n @Input() removeLabel?: string;\n\n /** Emitted when the remove button is clicked. */\n @Output() remove = new EventEmitter<void>();\n}\n","// framework/angular/bar-chart/bar-chart.component.ts\n//\n// Native Angular port of framework/react/bar-chart/BarChart.tsx.\n// Bars that grow in one after another, with a readout on hover that breaks each\n// one down by series, and a switch between ranges. Inputs mirror the React\n// props; the staggered grow-in, the total's roll and the range switch are\n// ported from the vanilla JS (bar-chart.js). The range switch reuses the shared\n// .vo-seg2 / .vo-knob helpers from the core, like the Stat cards port.\n//\n// No icons are used by this component, so VoIconComponent is not imported.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One part of a bar: names it in the readout and, when stacked, in the legend. */\nexport interface BarChartSeries {\n /** Names the part in the hover readout and, when stacked, in the legend, like \"Needed review\". */\n label: string;\n /** How the hover readout names it, like \"reviewed\". Defaults to the label in lower case. */\n tipLabel?: string;\n /** When stacked. Defaults to the chart palette: blue, purple, then orange. */\n color?: string;\n}\n\n/** One bar: a label under it and one value per series, stacked from the bottom. */\nexport interface BarChartBar {\n /** Under the bar, like \"Mon\". */\n label: string;\n /** One value per series, stacked from the bottom. */\n values: number[];\n}\n\n/** One set of bars for a range. With more than one, a switch picks between them. */\nexport interface BarChartRange {\n key: string;\n /** On the switch, like \"Week\". */\n label: string;\n bars: BarChartBar[];\n}\n\n/** One rendered part of a bar. */\ninterface Seg {\n height: number;\n color: string;\n}\n\n/** Internal per-bar render state. */\ninterface BarView {\n index: number;\n label: string;\n tipTotal: string;\n tipParts: string;\n segs: Seg[];\n}\n\n// the colours of a stack's parts, in order (--vo-c1..c6 from the core)\nconst PALETTE = [\n 'var(--vo-c1)',\n 'var(--vo-c2)',\n 'var(--vo-c4)',\n 'var(--vo-c3)',\n 'var(--vo-c5)',\n 'var(--vo-c6)',\n];\n\n@Component({\n selector: 'vo-bar-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-bcx vo-panel\" [class]=\"className\">\n <div class=\"vo-bcx-h\">\n <div>\n <span class=\"vo-muted\">{{ label }}</span>\n <b class=\"vo-num vo-bcx-v\">{{ format(total) }}</b>\n </div>\n @if (ranges.length > 1) {\n <div class=\"vo-seg2 vo-bcx-rg\" role=\"group\" aria-label=\"Range\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (r of ranges; track r.key) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"r.key === cur\"\n (click)=\"select(r.key)\"\n >{{ r.label }}</button>\n }\n </div>\n }\n </div>\n <div class=\"vo-bcx-ch\" #chart>\n @for (b of bars; track b.index) {\n <div class=\"vo-bcx-b\">\n <div class=\"vo-bcx-tt\">\n <b class=\"vo-num\">{{ b.tipTotal }}</b>\n <span>{{ b.tipParts }}</span>\n </div>\n <div class=\"vo-bcx-st\">\n @for (s of b.segs; track $index) {\n <i [style.height.px]=\"s.height\" [style.background]=\"s.color\"></i>\n }\n </div>\n <div class=\"vo-bcx-l\">{{ b.label }}</div>\n </div>\n }\n </div>\n @if (stacked) {\n <div class=\"vo-bcx-lg vo-muted\">\n @for (s of series; track $index) {\n <span><i [style.background]=\"color($index)\"></i>{{ s.label }}</span>\n }\n </div>\n }\n </div>\n `,\n styleUrl: './bar-chart.css',\n})\nexport class BarChartComponent implements AfterViewInit, OnDestroy {\n /** The name over the big number, like \"Agent runs\". */\n @Input({ required: true }) label = '';\n /** What each part of a bar means, in order. The hover readout breaks each bar down by these. */\n @Input({ required: true }) series: BarChartSeries[] = [];\n /** One set of bars per range. With more than one, a switch picks between them. */\n @Input({ required: true }) ranges: BarChartRange[] = [];\n /** Draws each bar as a stack of its parts in the palette's colours, with a legend. Off by\n default: one bar in the accent, with the breakdown in the hover readout. */\n @Input() stacked = false;\n /** Key of the range shown. Leave it out to let the switch change it. */\n @Input() set range(value: string | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.cur) {\n this.cur = value;\n if (this.ready) {\n this.placeKnob();\n this.draw(value);\n }\n }\n }\n /** Defaults to the first range. */\n @Input() defaultRange?: string;\n /** What the values count, like \"runs\" in \"66 runs\". */\n @Input() unit?: string;\n /** Writes a value. Defaults to whole numbers like 1,240. */\n @Input() format: (n: number) => string = (n) => Math.round(n).toLocaleString('en-US');\n @Input() className = '';\n\n @Output() rangeChange = new EventEmitter<string>();\n\n cur = '';\n total = 0;\n bars: BarView[] = [];\n knobLeft = 0;\n knobWidth = 0;\n\n private controlled = false;\n private ready = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n color(index: number): string {\n return this.series[index]?.color ?? PALETTE[index % PALETTE.length];\n }\n\n ngAfterViewInit(): void {\n if (!this.controlled) {\n this.cur = this.defaultRange ?? this.ranges[0]?.key ?? '';\n }\n const count = Math.max(0, ...this.ranges.map((r) => r.bars.length));\n // one bar slot per column; its parts and label fill in when a range draws\n this.bars = Array.from({ length: count }, (_, i) => ({\n index: i,\n label: '',\n tipTotal: '',\n tipParts: '',\n segs: [],\n }));\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n // the bars draw a moment after the chart appears, then redraw on every switch\n this.later(() => this.draw(this.cur), 280);\n }\n\n select(key: string): void {\n if (!this.controlled) {\n this.cur = key;\n this.placeKnob();\n this.draw(key);\n }\n this.rangeChange.emit(key);\n }\n\n private sum(bar?: BarChartBar): number {\n return bar ? bar.values.reduce((a, v) => a + v, 0) : 0;\n }\n\n private byKey(key: string): BarChartRange | undefined {\n return this.ranges.find((r) => r.key === key);\n }\n\n private draw(key: string): void {\n const r = this.byKey(key);\n if (!r) return;\n const room = this.room();\n const top = Math.max(1, ...r.bars.map((b) => this.sum(b))) * 1.08;\n\n this.bars.forEach((view, i) => {\n const bar = r.bars[i];\n // the readout breaks the bar down by series\n view.label = bar?.label ?? '';\n if (bar) {\n const s = this.sum(bar);\n view.tipTotal = this.format(s) + (this.unit ? ' ' + this.unit : '');\n view.tipParts = bar.values\n .map((v, j) => `${this.format(v)} ${this.series[j]?.tipLabel ?? this.series[j]?.label.toLowerCase() ?? ''}`)\n .join(', ');\n } else {\n view.tipTotal = '';\n view.tipParts = '';\n }\n\n // compute the target heights, then let them grow in left to right\n const targets = this.stacked\n ? this.series.map((_, j) => {\n const v = bar?.values[j] ?? 0;\n return bar ? Math.max(v ? 3 : 0, (v / top) * room) : 0;\n })\n : [bar ? Math.max(this.sum(bar) ? 3 : 0, (this.sum(bar) / top) * room) : 0];\n const colors = this.stacked ? this.series.map((_, j) => this.color(j)) : [this.color(0)];\n\n // keep the segment list in place (so the CSS height transition runs) and set heights to 0 first\n view.segs = targets.map((_, j) => ({ height: 0, color: colors[j] }));\n this.cdr.markForCheck();\n this.later(() => {\n view.segs = targets.map((h, j) => ({ height: h, color: colors[j] }));\n this.cdr.markForCheck();\n }, this.reduced.reduce() ? 0 : i * 45);\n });\n\n const t = r.bars.reduce((a, b) => a + this.sum(b), 0);\n this.roll(t);\n this.cdr.markForCheck();\n }\n\n // eases the total to `target` over 900ms, so the counter rolls instead of jumping\n private roll(target: number): void {\n const from = this.total;\n if (this.reduced.reduce()) {\n this.total = target;\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const dur = 900;\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.total = from + (target - from) * (1 - Math.pow(1 - p, 3));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private room(): number {\n const el = this.host.nativeElement.querySelector<HTMLElement>('.vo-bcx-ch');\n // the room the bars have, less the label under them\n return Math.max(0, (el?.clientHeight ?? 150) - 22);\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-bcx-rg button');\n const i = this.ranges.findIndex((r) => r.key === this.cur);\n const b = btns[i];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/browser-session/browser-session.component.ts\n//\n// Native Angular port of framework/react/browser-session/BrowserSession.tsx.\n// The agent browsing the web for the person: a small browser frame with the\n// page it is on, the steps it takes under it, and Pause and Take over. When a\n// step waits for the person, it shows why and a button to let the agent go on.\n// Inputs mirror the React props; the paused / in-control state can be left\n// uncontrolled (defaultPaused / defaultInControl) or driven from the parent.\n\nimport {\n Component,\n ContentChild,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { VoIconComponent } from '../core/icon.component';\n\nexport type BrowserStepState = 'queued' | 'running' | 'waiting' | 'done';\n\n/** One step the agent takes, with its state and an optional quiet detail line. */\nexport interface BrowserStep {\n /** What the agent does, like 'Click \"Pricing\"'. */\n label: string;\n state: BrowserStepState;\n /** A quiet line under the step. On a waiting step it says what is in the way, in amber. */\n detail?: string;\n}\n\n/** The agent's own pointer, in pixels from the page's top left. */\nexport interface BrowserCursor {\n x: number;\n y: number;\n down?: boolean;\n}\n\n/** While a step waits: the button that lets the agent go on, like \"Allow closing it\". */\nexport interface BrowserAsk {\n label: string;\n onAllow: () => void;\n}\n\nconst CLS: Record<BrowserStepState, string> = {\n queued: 'vo-queued', running: 'vo-run', waiting: 'vo-wait', done: 'vo-done',\n};\nconst clock = (s: number) => `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\n/** The agent browsing the web for the person, with Pause and Take over. */\n@Component({\n selector: 'vo-browser-session',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgTemplateOutlet],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-bws vo-panel\"\n [class.vo-you]=\"mine\"\n [class.vo-paused]=\"isPaused && !mine\"\n >\n <div class=\"vo-bws-h\">\n <div class=\"vo-bws-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-bws-st\">\n <span aria-live=\"polite\"><span class=\"vo-sw\">{{ line }}</span></span> ·\n <span class=\"vo-num\">{{ clockText }}</span>\n </span>\n </div>\n <div class=\"vo-bws-ctl\">\n <button\n type=\"button\"\n class=\"vo-ib vo-bws-pause\"\n [attr.aria-label]=\"isPaused ? 'Resume' : 'Pause'\"\n [attr.title]=\"isPaused ? 'Resume' : 'Pause'\"\n [disabled]=\"mine || done\"\n (click)=\"togglePaused()\"\n >\n <vo-icon [name]=\"isPaused ? 'play' : 'pause'\"></vo-icon>\n </button>\n <button\n type=\"button\"\n class=\"vo-pill vo-line vo-sm vo-bws-take\"\n [attr.aria-pressed]=\"mine\"\n [disabled]=\"done\"\n (click)=\"take()\"\n >{{ mine ? 'Hand back' : 'Take over' }}</button>\n </div>\n </div>\n\n <div class=\"vo-bws-win\">\n <div class=\"vo-bws-bar\">\n <span class=\"vo-bws-dots\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\n <div class=\"vo-bws-url\">\n <vo-icon [name]=\"search ? 'search' : 'lock'\" size=\"xs\"></vo-icon>\n <span class=\"vo-sw\">{{ url }}</span>\n </div>\n </div>\n <!-- while the agent drives, the page is a picture of its browser; with Take over it is the person's to use -->\n <div class=\"vo-bws-vp\" [attr.inert]=\"mine ? null : ''\">\n @if (page) {\n <ng-container [ngTemplateOutlet]=\"page\"></ng-container>\n }\n <span\n class=\"vo-bws-cur\"\n [class.vo-on]=\"cursor && !mine\"\n [class.vo-down]=\"cursor?.down\"\n [style.transform]=\"cursor ? 'translate(' + cursor.x + 'px,' + cursor.y + 'px)' : null\"\n aria-hidden=\"true\"\n >\n <svg viewBox=\"0 0 14 14\"><path d=\"M2 1.5l9.5 5-4.2 1.2-2 4.3z\"/></svg>\n </span>\n </div>\n </div>\n\n <ol class=\"vo-bws-steps\" aria-label=\"Steps\">\n @for (s of steps; track $index) {\n <li\n class=\"vo-bws-s\"\n [class]=\"cls(s.state)\"\n [attr.aria-current]=\"s.state === 'running' || s.state === 'waiting' ? 'step' : null\"\n >\n <span class=\"vo-g\" aria-hidden=\"true\">\n @switch (s.state) {\n @case ('running') { <span class=\"vo-spin\"></span> }\n @case ('done') { <vo-icon name=\"ok\" size=\"xs\"></vo-icon> }\n @case ('waiting') { <vo-icon name=\"alert\" size=\"xs\"></vo-icon> }\n @default { <span class=\"vo-dot\"></span> }\n }\n </span>\n <span class=\"vo-bws-t\">\n <span>{{ s.label }}</span>\n @if (s.detail) {\n <span class=\"vo-d vo-sw\">{{ s.detail }}</span>\n }\n @if (s.state === 'waiting' && ask && !mine) {\n <div class=\"vo-bws-ask vo-enter\">\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"ask.onAllow()\">{{ ask.label }}</button>\n <button type=\"button\" class=\"vo-pill vo-soft vo-sm\" (click)=\"take()\">Take over</button>\n </div>\n }\n </span>\n </li>\n }\n </ol>\n\n @if (done && summary) {\n <div class=\"vo-bws-sum vo-enter\">\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon><span>{{ summary }}</span>\n </div>\n }\n </div>\n `,\n styleUrl: './browser-session.css',\n})\nexport class BrowserSessionComponent implements OnChanges, OnDestroy {\n /** What the agent is browsing for, like \"Pricing research\". */\n @Input() title = '';\n /** The address bar: the page's address, or the search being typed. */\n @Input() url = '';\n /** Marks `url` as a search, with a magnifier instead of the padlock. */\n @Input() search = false;\n /** The agent's own pointer. Hidden while the person has control. */\n @Input() cursor?: BrowserCursor | null;\n @Input() steps: BrowserStep[] = [];\n @Input() ask?: BrowserAsk;\n /** Pause holds the agent where it is. Leave it out to let the button toggle it. */\n @Input() paused?: boolean;\n @Input() defaultPaused = false;\n /** Take over hands the page to the person. Leave it out to let the button toggle it. */\n @Input() inControl?: boolean;\n @Input() defaultInControl = false;\n /** Seconds to show as m:ss. Leave it out to let the clock count while browsing. */\n @Input() seconds?: number;\n /** The line under the title. Defaults to a status word, then the clock. */\n @Input() status?: string;\n /** Shown under the steps once every step is done. */\n @Input() summary?: string;\n\n @Output() pausedChange = new EventEmitter<boolean>();\n @Output() inControlChange = new EventEmitter<boolean>();\n\n /** The wireframe page to draw in the viewport, passed as a <ng-template>. */\n @ContentChild('page') page?: TemplateRef<unknown>;\n\n private innerPaused = false;\n private innerMine = false;\n private counted = 0;\n private secondTimer?: ReturnType<typeof setInterval>;\n\n get isPaused(): boolean {\n return this.paused ?? this.innerPaused;\n }\n\n get mine(): boolean {\n return this.inControl ?? this.innerMine;\n }\n\n get done(): boolean {\n return this.steps.length > 0 && this.steps.every((s) => s.state === 'done');\n }\n\n get waiting(): boolean {\n return this.steps.some((s) => s.state === 'waiting');\n }\n\n get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get clockText(): string {\n return clock(this.secs);\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n if (this.done) return 'Done';\n if (this.mine) return 'You have control';\n if (this.isPaused) return 'Paused';\n if (this.waiting) return 'Needs you';\n return 'Browsing';\n }\n\n cls(state: BrowserStepState): string {\n return CLS[state];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['paused'] && this.paused !== undefined) this.innerPaused = this.paused;\n if (changes['inControl'] && this.inControl !== undefined) this.innerMine = this.inControl;\n if (changes['defaultPaused'] && this.paused === undefined) this.innerPaused = this.defaultPaused;\n if (changes['defaultInControl'] && this.inControl === undefined) this.innerMine = this.defaultInControl;\n this.updateClock();\n }\n\n togglePaused(): void {\n const next = !this.isPaused;\n if (this.paused === undefined) this.innerPaused = next;\n this.pausedChange.emit(next);\n this.updateClock();\n }\n\n take(): void {\n const next = !this.mine;\n if (this.inControl === undefined) this.innerMine = next;\n this.inControlChange.emit(next);\n // taking over also lifts a pause\n if (next && this.isPaused) {\n if (this.paused === undefined) this.innerPaused = false;\n this.pausedChange.emit(false);\n }\n this.updateClock();\n }\n\n // the clock counts while the agent is browsing on its own\n private updateClock(): void {\n const running =\n this.seconds === undefined && !this.done && !this.waiting && !this.isPaused && !this.mine;\n if (running && !this.secondTimer) {\n this.secondTimer = setInterval(() => {\n this.counted++;\n }, 1000);\n } else if (!running && this.secondTimer) {\n clearInterval(this.secondTimer);\n this.secondTimer = undefined;\n }\n }\n\n ngOnDestroy(): void {\n clearInterval(this.secondTimer);\n }\n}\n","// framework/angular/buttons/buttons.component.ts\n//\n// Native Angular port of the Button from framework/react/buttons/Buttons.tsx.\n// A pill button in one of five styles and three sizes, with busy, done and\n// pressed states. An async click handler drives the busy -> done face itself.\n// Inputs mirror the React ButtonProps; the label comes via content projection\n// (or the `label` input), callbacks become an @Output() click.\n//\n// The optional round icon button (ButtonIcon) and the copy button (ButtonCopy)\n// are ported in the same file for completeness.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** primary is the main action, on the accent. ink is the old name for primary and still works. */\nexport type ButtonVariant = 'primary' | 'accent' | 'soft' | 'line' | 'ghost' | 'ink';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n/** The class for a variant: ink, the old name, draws as primary. */\nconst variantClass = (v?: ButtonVariant): string | null =>\n v ? 'vo-' + (v === 'ink' ? 'primary' : v) : null;\n\n/** A pill button in one of the site's five styles and three sizes, with busy, done and pressed states. */\n@Component({\n selector: 'vo-button',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <span data-vo=\"\" style=\"display:contents\">\n <button\n type=\"button\"\n class=\"vo-pill\"\n [class.vo-sm]=\"size === 'sm'\"\n [class.vo-btx-lg]=\"size === 'lg'\"\n [class.vo-busy]=\"isBusy\"\n [class.vo-done]=\"isDone\"\n [class.vo-btx-load]=\"isDone && success\"\n [class.vo-ok]=\"isDone && success\"\n [class]=\"variantCls\"\n [attr.aria-busy]=\"isBusy ? true : null\"\n [attr.aria-pressed]=\"pressed ?? null\"\n (click)=\"onClick($event)\"\n >\n <span class=\"vo-sw\" [class.vo-out]=\"out\" style=\"display:inline-flex;align-items:center;gap:7px\">\n @if (isBusy) {\n @if (think) {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <span class=\"vo-shim\">{{ shownLabel }}</span>\n } @else {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n <span>{{ shownLabel }}</span>\n }\n } @else if (isDone) {\n @if (doneIcon) {\n <span class=\"vo-enter\" style=\"display:inline-flex;align-items:center;gap:7px\">\n <vo-icon [name]=\"doneIcon\" size=\"xs\"></vo-icon>\n </span>\n } @else {\n <vo-icon name=\"check\" size=\"xs\" class=\"vo-enter\"></vo-icon>\n }\n <span>{{ shownLabel }}</span>\n } @else {\n @if (icon) {\n <vo-icon [name]=\"icon\" size=\"xs\"></vo-icon>\n }\n <span><ng-content></ng-content>{{ label }}</span>\n }\n </span>\n </button>\n </span>\n `,\n styleUrl: './buttons.css',\n})\nexport class ButtonComponent implements OnDestroy {\n /** primary/accent for the main action, soft and line for the rest, ghost for the quietest. */\n @Input() variant?: ButtonVariant;\n @Input() size: ButtonSize = 'md';\n /** An icon before the label. */\n @Input() icon?: VoIconName;\n /** The label (alternative to projected content). */\n @Input() label?: string;\n /** Shows the busy face: a spinner (or thinking dots) and busyLabel. Clicks are ignored. */\n @Input() busy?: boolean;\n /** Shows the done face: a check that pops in and doneLabel. Clicks are ignored. */\n @Input() done?: boolean;\n /** The label while busy, like \"Publishing\". Defaults to the label. */\n @Input() busyLabel?: string;\n /** The label once done, like \"Published\". Defaults to the label. */\n @Input() doneLabel?: string;\n /** The icon on the done face. Defaults to a check that pops in. */\n @Input() doneIcon?: VoIconName;\n /** spin, or think: the agent's four turning dots with a shimmering label. */\n @Input() busyGlyph: 'spin' | 'think' = 'spin';\n /** The done face turns green. */\n @Input() success?: boolean;\n /** How long the done face stays when the button runs itself. */\n @Input() doneFor = 1800;\n /** Going back from done to the label blurs across (the default) instead of switching at once. */\n @Input() fadeBack = true;\n /** For a toggle: whether it is on, as aria-pressed. */\n @Input() pressed?: boolean;\n\n /**\n * A plain click. Return a Promise (resolve with any value) and the button\n * runs by itself: busy until it settles, then done for `doneFor` ms.\n */\n @Input() handler?: () => void | Promise<unknown>;\n\n /** Emitted on a plain click (when not busy/done). */\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n // an async handler that returns a promise drives the button itself\n private auto: 'idle' | 'busy' | 'done' = 'idle';\n private alive = true;\n private timer?: ReturnType<typeof setTimeout>;\n private swapTimer?: ReturnType<typeof setTimeout>;\n /** True while the face blurs out before it is swapped. */\n out = false;\n\n constructor(private readonly motion: ReducedMotionService) {}\n\n get isBusy(): boolean {\n return this.busy ?? this.auto === 'busy';\n }\n get isDone(): boolean {\n return !this.isBusy && (this.done ?? this.auto === 'done');\n }\n get think(): boolean {\n return this.isBusy && this.busyGlyph === 'think';\n }\n get variantCls(): string | null {\n return variantClass(this.variant);\n }\n\n get shownLabel(): string | undefined {\n if (this.isBusy) return this.busyLabel ?? this.label;\n if (this.isDone) return this.doneLabel ?? this.label;\n return this.label;\n }\n\n onClick(e: MouseEvent): void {\n if (this.isBusy || this.isDone) return;\n this.clicked.emit(e);\n const r = this.handler?.();\n if (!r || typeof (r as Promise<unknown>).then !== 'function') return;\n this.auto = 'busy';\n (r as Promise<unknown>).then(\n () => {\n if (!this.alive) return;\n this.auto = 'done';\n this.timer = setTimeout(() => this.back(), this.doneFor);\n },\n () => {\n if (this.alive) this.auto = 'idle';\n },\n );\n }\n\n /** Blurs the done face out before it becomes the idle label again (fadeBack). */\n private back(): void {\n if (!this.fadeBack) {\n this.auto = 'idle';\n return;\n }\n this.out = true;\n this.swapTimer = setTimeout(\n () => {\n this.auto = 'idle';\n this.out = false;\n },\n this.motion.reduce() ? 0 : 170,\n );\n }\n\n ngOnDestroy(): void {\n this.alive = false;\n clearTimeout(this.timer);\n clearTimeout(this.swapTimer);\n }\n}\n","// framework/angular/card/card.component.ts\n//\n// Native Angular port of framework/react/card/Card.tsx.\n// A surface you drop other components onto, with an optional header, body and\n// footer. Inputs mirror the React props; content is projected via <ng-content>\n// with named slots for the header end and the footer.\n\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\n/** How much the card insets its header, body and footer. */\nexport type CardPad = 'none' | 'sm' | 'md';\n\n@Component({\n selector: 'vo-card',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n class=\"vo-crd\"\n [attr.data-pad]=\"pad === 'md' ? null : pad\"\n [attr.data-interactive]=\"interactive ? 'true' : null\"\n [attr.role]=\"interactive ? 'button' : null\"\n [attr.tabindex]=\"interactive ? 0 : null\"\n (click)=\"interactive && clicked.emit()\"\n (keydown)=\"onKeyDown($event)\"\n >\n @if (title || subtitle) {\n <div class=\"vo-crd-h\">\n <div class=\"vo-crd-hl\">\n @if (title) {\n <span class=\"vo-crd-t\">{{ title }}</span>\n }\n @if (subtitle) {\n <span class=\"vo-crd-sub vo-muted\">{{ subtitle }}</span>\n }\n </div>\n <ng-content select=\"[card-action]\"></ng-content>\n </div>\n }\n <div class=\"vo-crd-b\">\n <ng-content></ng-content>\n </div>\n <div class=\"vo-crd-f\" [attr.data-align]=\"footerAlign === 'end' ? null : footerAlign\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n `,\n styleUrl: './card.css',\n})\nexport class CardComponent {\n /** A title shown in the header. */\n @Input() title?: string;\n /** A subtitle under the title. */\n @Input() subtitle?: string;\n /** How the footer's actions align. 'end' by default. */\n @Input() footerAlign: 'start' | 'end' | 'between' = 'end';\n /** Inset for header/body/footer. 'md' by default. */\n @Input() pad: CardPad = 'md';\n /** Makes the whole card a hit target: lifts on hover, takes focus, fires (clicked) on Enter/Space. */\n @Input() interactive = false;\n\n /** Emitted when an interactive card is activated (click or Enter/Space). */\n @Output() clicked = new EventEmitter<void>();\n\n onKeyDown(e: KeyboardEvent): void {\n if (!this.interactive) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.clicked.emit();\n }\n }\n}\n","// framework/angular/change-review/change-review.component.ts\n//\n// Native Angular port of framework/react/change-review/ChangeReview.tsx.\n// A diff to review hunk by hunk: pick a file in the list, then keep or undo each\n// change, or ask the agent about a line. Keep all walks to the next file; the\n// hunks replay their entrance when a file is shown afresh. Inputs mirror the\n// React props; React callbacks become @Output() EventEmitters.\n//\n// Icons: the React/Vanilla source shows the agent icon (\"at\") on a sent comment.\n// The Angular icon set has no \"at\" glyph, so the closest available one,\n// \"comment\", is substituted for the sent-comment marker. All other icons\n// (spark, plus, check, undo) map one-to-one.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChildren,\n QueryList,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A single diff line. add and del lines are coloured; ctx lines are unchanged context. */\nexport interface DiffLine {\n /** add and del lines are coloured; ctx lines are unchanged context. */\n kind: 'add' | 'del' | 'ctx';\n /** The line number shown in the gutter. */\n line: number;\n text: string;\n}\n\n/** One change to review, keep or undo on its own. */\nexport interface Hunk {\n /** Identifies the hunk in `decisions`. Defaults to \"<file name>#<index>\". */\n key?: string;\n /** What the change does, like \"Use the shared button\". */\n title: string;\n lines: DiffLine[];\n}\n\n/** A changed file, shown in the list and opened in the diff. */\nexport interface ChangedFile {\n /** Like \"PricingCard.tsx\". Its extension becomes the type label. */\n name: string;\n /** Shown above the diff, like \"src/PricingCard.tsx\". Defaults to the name. */\n path?: string;\n hunks: Hunk[];\n}\n\n/** Whether a hunk was kept or undone. */\nexport type HunkDecision = 'kept' | 'undone';\n\n/** Payload emitted when the person asks the agent about a line. */\nexport interface LineComment {\n file: ChangedFile;\n hunk: Hunk;\n line: DiffLine;\n text: string;\n}\n\n/** A file row's rolled-up state across its hunks. */\ntype FileState = 'kept' | 'undone' | 'some' | '';\n\n/** Live state for one line's comment box. */\ninterface CommentBox {\n draft: string;\n sent?: string;\n}\n\nconst keyOf = (f: ChangedFile, h: Hunk, k: number) => h.key ?? `${f.name}#${k}`;\nconst ext = (name: string) => name.split('.').pop() ?? '';\n\n@Component({\n selector: 'vo-change-review',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-crx vo-panel\">\n <div class=\"vo-crx-side\">\n <div class=\"vo-crx-sh\">\n <b>{{ title ?? defaultTitle() }}</b>\n <span class=\"vo-muted vo-crx-tot vo-num\">\n <span style=\"color:var(--vo-ok)\">+{{ added }}</span>\n <span style=\"color:var(--vo-bad)\">−{{ removed }}</span>\n </span>\n </div>\n <div class=\"vo-crx-files\">\n @for (x of files; track $index) {\n <button\n type=\"button\"\n class=\"vo-crx-f\"\n [class.vo-on]=\"$index === at\"\n [class.vo-kept]=\"fileState(x) === 'kept'\"\n [class.vo-undone]=\"fileState(x) === 'undone'\"\n (click)=\"show($index)\"\n >\n <span class=\"vo-ft\" [class.vo-re]=\"ext(x.name) === 'tsx'\">{{ ext(x.name).toUpperCase() }}</span>\n <span class=\"vo-nm\">{{ x.name }}</span>\n <span class=\"vo-st\">\n @switch (fileState(x)) {\n @case ('kept') {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>\n }\n @case ('undone') {\n <vo-icon name=\"undo\" size=\"xs\"></vo-icon>\n }\n @case ('some') {\n <span class=\"vo-dot\" style=\"color:var(--vo-accent)\"></span>\n }\n @default {\n <span class=\"vo-dot\"></span>\n }\n }\n </span>\n </button>\n }\n </div>\n </div>\n <div class=\"vo-crx-main\">\n <div class=\"vo-crx-mh\">\n <span class=\"vo-crx-fn vo-num\">{{ current().path ?? current().name }}</span>\n <span class=\"vo-crx-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-crx-rej\" (click)=\"bulk('undone')\">Undo all</button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-crx-ok\" (click)=\"bulk('kept')\">Keep all</button>\n </div>\n <div #diff class=\"vo-crx-diff\">\n @for (h of current().hunks; track keyOf(current(), h, $index); let k = $index) {\n <div\n class=\"vo-crx-hk vo-enter\"\n [class.vo-kept]=\"decisionFor(current(), h, k) === 'kept'\"\n [class.vo-undone]=\"decisionFor(current(), h, k) === 'undone'\"\n [style.animation-delay.ms]=\"motion.reduce() ? 0 : k * 70\"\n >\n <div class=\"vo-crx-hh\">\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>\n <span>{{ h.title }}</span>\n <span class=\"vo-sp\"></span>\n <button\n type=\"button\"\n class=\"vo-pill vo-ghost vo-hk-u\"\n [attr.aria-pressed]=\"decisionFor(current(), h, k) === 'undone'\"\n (click)=\"decide(keyOf(current(), h, k), 'undone')\"\n >Undo</button>\n <button\n type=\"button\"\n class=\"vo-pill vo-hk-k\"\n [attr.aria-pressed]=\"decisionFor(current(), h, k) === 'kept'\"\n (click)=\"decide(keyOf(current(), h, k), 'kept')\"\n >Keep</button>\n </div>\n @for (l of h.lines; track $index; let j = $index) {\n <div class=\"vo-crx-l\" [class.vo-add]=\"l.kind === 'add'\" [class.vo-del]=\"l.kind === 'del'\" [class.vo-ctx]=\"l.kind === 'ctx'\">\n <span class=\"vo-ln\">{{ l.line }}</span>\n <span class=\"vo-c\">{{ l.text }}</span>\n <button\n type=\"button\"\n class=\"vo-cm\"\n aria-label=\"Comment on line\"\n (click)=\"openComment(k, j)\"\n ><vo-icon name=\"plus\" size=\"xs\"></vo-icon></button>\n </div>\n @if (boxes[boxId(k, j)]; as b) {\n @if (b.sent !== undefined) {\n <div class=\"vo-crx-cmt vo-sent vo-enter\">\n <vo-icon name=\"comment\" size=\"xs\"></vo-icon>\n <span>{{ b.sent }}</span>\n </div>\n } @else {\n <div class=\"vo-crx-cmt vo-enter\">\n <input\n #cmt\n placeholder=\"Ask the agent about this line\"\n aria-label=\"Ask the agent about this line\"\n [value]=\"b.draft\"\n (input)=\"b.draft = cmt.value\"\n (keydown.enter)=\"send(boxId(k, j), h, l)\"\n (keydown.escape)=\"closeComment(boxId(k, j))\"\n />\n <button type=\"button\" class=\"vo-pill vo-accent vo-sm\" (click)=\"send(boxId(k, j), h, l)\">Send</button>\n </div>\n }\n }\n }\n </div>\n }\n </div>\n </div>\n </div>\n `,\n styleUrl: './change-review.css',\n})\nexport class ChangeReviewComponent implements OnChanges, OnDestroy {\n /** The files to review. */\n @Input() files: ChangedFile[] = [];\n /** The file shown on the right, by index. Leave it out to let the list pick it. */\n @Input() file?: number;\n @Input() defaultFile = 0;\n /** Kept or undone, by hunk key. Leave it out to let the buttons keep track. */\n @Input() decisions?: Record<string, HunkDecision>;\n @Input() defaultDecisions: Record<string, HunkDecision> = {};\n /** Header over the file list. Defaults to \"N files changed\". */\n @Input() title?: string;\n\n /** Emitted when the shown file changes. */\n @Output() fileChange = new EventEmitter<number>();\n /** Emitted when any hunk's decision changes. */\n @Output() decisionsChange = new EventEmitter<Record<string, HunkDecision>>();\n /** Emitted when the person asks the agent about a line. Without a question it sends \"Why this change?\". */\n @Output() comment = new EventEmitter<LineComment>();\n\n @ViewChildren('cmt') private commentInputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n readonly motion = inject(ReducedMotionService);\n readonly keyOf = keyOf;\n readonly ext = ext;\n\n /** Uncontrolled fallbacks; the matching @Input, when set, wins (controlled). */\n private curInner = 0;\n private decInner: Record<string, HunkDecision> = {};\n /** Per-line comment boxes, by \"<file>:<hunk>:<line>\". */\n boxes: Record<string, CommentBox> = {};\n\n added = 0;\n removed = 0;\n\n // the Keep-all auto-advance to the next file, cleared on destroy\n private advance?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultFile'] && this.file === undefined) {\n this.curInner = this.defaultFile;\n }\n if (changes['defaultDecisions'] && this.decisions === undefined) {\n this.decInner = { ...this.defaultDecisions };\n }\n if (changes['files']) this.countChanges();\n }\n\n private countChanges(): void {\n let added = 0, removed = 0;\n this.files.forEach((x) =>\n x.hunks.forEach((h) =>\n h.lines.forEach((l) => {\n if (l.kind === 'add') added++;\n if (l.kind === 'del') removed++;\n })\n )\n );\n this.added = added;\n this.removed = removed;\n }\n\n private get cur(): number {\n return this.file ?? this.curInner;\n }\n\n private get dec(): Record<string, HunkDecision> {\n return this.decisions ?? this.decInner;\n }\n\n /** The clamped index of the shown file. */\n get at(): number {\n return Math.max(0, Math.min(this.files.length - 1, this.cur));\n }\n\n /** The shown file, or an empty stand-in while the list is empty. */\n current(): ChangedFile {\n return this.files[this.at] ?? { name: '', hunks: [] };\n }\n\n defaultTitle(): string {\n const n = this.files.length;\n return `${n} ${n === 1 ? 'file' : 'files'} changed`;\n }\n\n boxId(k: number, j: number): string {\n return `${this.at}:${k}:${j}`;\n }\n\n decisionFor(f: ChangedFile, h: Hunk, k: number): HunkDecision | '' {\n return this.dec[keyOf(f, h, k)] ?? '';\n }\n\n fileState(x: ChangedFile): FileState {\n const all = (s: HunkDecision) => x.hunks.every((h, k) => this.dec[keyOf(x, h, k)] === s);\n if (all('kept')) return 'kept';\n if (all('undone')) return 'undone';\n return x.hunks.some((h, k) => this.dec[keyOf(x, h, k)]) ? 'some' : '';\n }\n\n /** Show file i; the diff's entrance replays through the fresh [animation-delay]. */\n show(i: number): void {\n if (this.file === undefined) this.curInner = i;\n this.fileChange.emit(i);\n }\n\n private setDec(next: Record<string, HunkDecision>): void {\n if (this.decisions === undefined) this.decInner = next;\n this.decisionsChange.emit(next);\n }\n\n decide(key: string, s: HunkDecision): void {\n const d = { ...this.dec };\n if (d[key] === s) delete d[key];\n else d[key] = s;\n this.setDec(d);\n }\n\n bulk(s: HunkDecision): void {\n const f = this.current();\n const d = { ...this.dec };\n f.hunks.forEach((h, k) => {\n d[keyOf(f, h, k)] = s;\n });\n this.setDec(d);\n clearTimeout(this.advance);\n if (s === 'kept' && this.at < this.files.length - 1) {\n const next = this.at + 1;\n this.advance = setTimeout(() => this.show(next), this.motion.reduce() ? 0 : 500);\n }\n }\n\n openComment(k: number, j: number): void {\n const id = this.boxId(k, j);\n if (this.boxes[id]) return;\n this.boxes[id] = { draft: '' };\n // focus the freshly opened input next tick, once it is in the DOM\n setTimeout(() => this.commentInputs?.last?.nativeElement.focus({ preventScroll: true }));\n }\n\n send(id: string, h: Hunk, l: DiffLine): void {\n const text = (this.boxes[id]?.draft ?? '').trim() || 'Why this change?';\n this.boxes[id] = { draft: '', sent: text };\n this.comment.emit({ file: this.current(), hunk: h, line: l, text });\n }\n\n closeComment(id: string): void {\n delete this.boxes[id];\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.advance);\n }\n}\n","// framework/angular/citation-hover-card/citation-hover-card.component.ts\n//\n// Native Angular port of framework/react/citation-hover-card/CitationHoverCard.tsx.\n// An answer with numbered citations: hovering, focusing or tapping one shows its\n// source in a small card underneath that rises in place. Inputs mirror the React\n// props; React callbacks become @Output() EventEmitters. The hover/focus/tap and\n// positioning behaviour is ported from the Vanilla citation-hover-card.js and kept\n// inside the component (setup in ngAfterViewInit, cleanup in ngOnDestroy).\n//\n// Icons: the card's link uses the 'ext' icon (open external), as in the source.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\n\n/** One source behind a citation. */\nexport interface CitationHoverCardSource {\n /** One or two letters on the source's coloured mark, like \"B\". */\n mark: string;\n /** The mark's colour, like '#4a5a8a' or 'var(--vo-pm)'. */\n color: string;\n /** Where it comes from, like \"baymard.com\" or \"Drive\". */\n site: string;\n title: string;\n /** The passage the answer relies on. Wrap the part that matters in <mark>…</mark>. */\n quote: string;\n /** The quiet line in the corner, like \"Read 4 days ago\". */\n meta?: string;\n /** Opens in a new tab from the card's link. */\n href?: string;\n}\n\n/** The parsed pieces of one paragraph: text runs and citation numbers. */\ninterface Part {\n cite: boolean;\n /** The text for a plain run, or the citation number for a cite. */\n text: string;\n /** The source index (number − 1) for a cite, or −1 when there is no such source. */\n i: number;\n}\n\n/** The card kept on screen, with its restart key and placement. */\ninterface Shown {\n i: number;\n x: number;\n y: number;\n n: number;\n}\n\n/** An answer with numbered citations. Hovering, focusing or tapping one shows its source in a small card underneath. */\n@Component({\n selector: 'vo-citation-hover-card',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" #box class=\"vo-chx\" [class]=\"className\">\n @for (p of paragraphs; track $index) {\n <p class=\"vo-msg vo-chx-p\">@for (part of p; track $index) {@if (part.cite) {<button\n type=\"button\"\n class=\"vo-chx-c\"\n [class.vo-on]=\"isOpen && at!.i === part.i\"\n [attr.data-i]=\"part.i\"\n [attr.aria-label]=\"label(part)\"\n (pointerenter)=\"enter(part.i, $event)\"\n (pointerleave)=\"leave($event)\"\n (focus)=\"onFocus(part.i, $event)\"\n (blur)=\"onBlur($event)\"\n (click)=\"onClick(part.i, $event)\"\n >{{ part.text }}</button>} @else {{{ part.text }}}}</p>\n }\n\n <div\n #card\n class=\"vo-chx-card vo-panel\"\n [class.vo-show]=\"isOpen\"\n role=\"dialog\"\n aria-label=\"Source\"\n [style.left.px]=\"at?.x ?? 0\"\n [style.top.px]=\"at?.y ?? 0\"\n (pointerenter)=\"cardEnter()\"\n (pointerleave)=\"cardLeave($event)\"\n (focusout)=\"cardFocusOut($event)\"\n >\n @if (shownSource; as s) {\n <div class=\"vo-chx-in\">\n <div class=\"vo-chx-sh\">\n <span class=\"vo-fv\" [style.background]=\"s.color\">{{ s.mark }}</span>\n <span>{{ s.site }}</span>\n </div>\n <div class=\"vo-chx-t\">{{ s.title }}</div>\n <div class=\"vo-chx-q\" [innerHTML]=\"s.quote\"></div>\n <div class=\"vo-chx-f\">\n <span>{{ s.meta }}</span>\n <a\n [attr.href]=\"s.href ?? '#'\"\n [attr.target]=\"s.href ? '_blank' : null\"\n rel=\"noreferrer\"\n (click)=\"follow(s, $event)\"\n >{{ openLabel }} <vo-icon name=\"ext\" size=\"xs\"></vo-icon></a\n >\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './citation-hover-card.css',\n})\nexport class CitationHoverCardComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The answer. `[n]` cites source n; a blank line starts a new paragraph. */\n @Input() text = '';\n @Input() sources: CitationHoverCardSource[] = [];\n /** The link in the card's corner. */\n @Input() openLabel = 'Open source';\n @Input() className?: string;\n\n private _open: number | null | undefined;\n /** Opens a source's card from outside (0 is the first source), or closes it with null. */\n @Input()\n set open(v: number | null | undefined) {\n this._open = v;\n this.applyOpen();\n }\n get open(): number | null | undefined {\n return this._open;\n }\n\n /** Called when the card's link is clicked, with the source and its index. */\n @Output() openSource = new EventEmitter<{ source: CitationHoverCardSource; index: number }>();\n /** Called when a card opens or closes, with the source's index, or null. */\n @Output() openChange = new EventEmitter<number | null>();\n\n @ViewChild('box') boxRef!: ElementRef<HTMLDivElement>;\n @ViewChild('card') cardRef!: ElementRef<HTMLDivElement>;\n\n /** Parsed paragraphs for the template. */\n paragraphs: Part[][] = [];\n /** The card kept on screen, or null. */\n at: Shown | null = null;\n // `cur` is the open citation; `last` keeps the content while it fades out\n private cur: number | null = null;\n private last = 0;\n private curEl: HTMLElement | null = null;\n // the first citation button of each source, which a card opened from outside sits under\n private marks = new Map<number, HTMLButtonElement>();\n private showT?: ReturnType<typeof setTimeout>;\n private hideT?: ReturnType<typeof setTimeout>;\n // whether the card should take the focus once it shows (Enter or Space), and\n // whether a focus coming back to the citation (from Escape) should leave it shut\n private focusLink = false;\n private back = false;\n private ready = false;\n\n private readonly onDown = (e: PointerEvent) => {\n const t = e.target as Element;\n if (!this.cardRef?.nativeElement.contains(t) && !t.closest?.('.vo-chx-c')) this.hide(true);\n };\n private readonly onKey = (e: KeyboardEvent) => {\n const b = this.boxRef?.nativeElement;\n if (e.key === 'Escape' && this.cur !== null && b && (b.contains(document.activeElement) || b.matches(':hover'))) {\n e.preventDefault();\n const to = this.cardRef?.nativeElement.contains(document.activeElement) ? this.curEl : null;\n this.hide(true);\n if (to) {\n this.back = true;\n to.focus({ preventScroll: true });\n }\n }\n };\n private readonly onResize = () => this.hide(true);\n\n /** True while a card is shown (as opposed to fading out). */\n get isOpen(): boolean {\n return !!this.at && this.at.i >= 0;\n }\n\n /** The source whose content the card shows: the open one, or the last while it fades. */\n get shownSource(): CitationHoverCardSource | undefined {\n return this.sources[this.at && this.at.i >= 0 ? this.at.i : this.last];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['text'] || changes['sources']) this.parse();\n }\n\n ngAfterViewInit(): void {\n this.ready = true;\n // record the first citation button for each source\n const buttons = this.boxRef.nativeElement.querySelectorAll<HTMLButtonElement>('.vo-chx-c');\n buttons.forEach((b) => {\n const i = Number(b.dataset['i']);\n if (!Number.isNaN(i) && !this.marks.has(i)) this.marks.set(i, b);\n });\n document.addEventListener('pointerdown', this.onDown);\n document.addEventListener('keydown', this.onKey);\n addEventListener('resize', this.onResize);\n this.applyOpen();\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.hideT);\n clearTimeout(this.showT);\n document.removeEventListener('pointerdown', this.onDown);\n document.removeEventListener('keydown', this.onKey);\n removeEventListener('resize', this.onResize);\n }\n\n private parse(): void {\n this.paragraphs = this.text.split(/\\n\\s*\\n/).map((p) =>\n p.split(/\\[(\\d+)\\]/).map((seg, j): Part => {\n if (j % 2) {\n const n = Number(seg);\n const i = n - 1;\n return this.sources[i]\n ? { cite: true, text: String(n), i }\n : { cite: false, text: `[${n}]`, i: -1 };\n }\n return { cite: false, text: seg, i: -1 };\n }),\n );\n }\n\n label(part: Part): string {\n const s = this.sources[part.i];\n return s ? `Source ${part.i + 1}: ${s.title}` : '';\n }\n\n private show(i: number, el: HTMLElement): void {\n clearTimeout(this.hideT);\n if (this.cur === i) return;\n const b = this.boxRef?.nativeElement;\n const c = this.cardRef?.nativeElement;\n if (!b || !c) return;\n const br = b.getBoundingClientRect();\n const cr = el.getBoundingClientRect();\n const x = Math.max(0, Math.min(cr.left - br.left - 24, br.width - c.offsetWidth));\n this.cur = i;\n this.curEl = el;\n this.last = i;\n this.openChange.emit(i);\n // a new key restarts the entrance, so the card always rises in place instead of sliding across\n const wasOpen = this.isOpen;\n this.at = { i, x, y: cr.bottom - br.top + 8, n: (this.at?.n ?? 0) + 1 };\n // when moving straight from one citation to another the vo-show class stays on,\n // so remove it and force a reflow before it goes back on to replay the entrance\n if (wasOpen) {\n c.classList.remove('vo-show');\n void c.offsetWidth;\n c.classList.add('vo-show');\n }\n // opened with Enter or Space, the card takes the focus on its link once it shows\n if (this.focusLink) {\n this.focusLink = false;\n requestAnimationFrame(() =>\n this.cardRef?.nativeElement.querySelector<HTMLElement>('a')?.focus({ preventScroll: true }),\n );\n }\n }\n\n private hide(now = false): void {\n clearTimeout(this.hideT);\n clearTimeout(this.showT);\n const go = () => {\n if (this.cur !== null) this.openChange.emit(null);\n this.cur = null;\n if (this.at) this.at = { ...this.at, i: -1 };\n };\n if (now) go();\n else this.hideT = setTimeout(go, 140);\n }\n\n private applyOpen(): void {\n if (!this.ready || this._open === undefined) return;\n if (this._open === null) {\n if (this.cur !== null) this.hide(true);\n return;\n }\n const el = this.marks.get(this._open);\n if (el && this.cur !== this._open) this.show(this._open, el);\n }\n\n /* ---------- citation events ---------- */\n\n enter(i: number, e: PointerEvent): void {\n if (e.pointerType === 'touch') return;\n const el = e.currentTarget as HTMLElement;\n clearTimeout(this.showT);\n clearTimeout(this.hideT);\n this.showT = setTimeout(() => this.show(i, el), this.cur !== null ? 0 : 90);\n }\n\n leave(e: PointerEvent): void {\n if (e.pointerType === 'touch') return;\n clearTimeout(this.showT);\n this.hide();\n }\n\n onFocus(i: number, e: FocusEvent): void {\n if (this.back) {\n this.back = false;\n return;\n }\n this.show(i, e.currentTarget as HTMLElement);\n }\n\n onBlur(e: FocusEvent): void {\n if (!this.cardRef?.nativeElement.contains(e.relatedTarget as Node)) this.hide();\n }\n\n // touch has no hover: a tap shows the card, the next tap anywhere else hides it.\n // Enter or Space (a click with no pointer) also puts the focus on the card's link.\n onClick(i: number, e: MouseEvent): void {\n const key = e.detail === 0;\n if (this.cur !== i) {\n this.focusLink = key;\n this.show(i, e.currentTarget as HTMLElement);\n } else if (key) {\n this.cardRef?.nativeElement.querySelector<HTMLElement>('a')?.focus({ preventScroll: true });\n }\n }\n\n /* ---------- card events ---------- */\n\n cardEnter(): void {\n clearTimeout(this.hideT);\n }\n\n cardLeave(e: PointerEvent): void {\n if (e.pointerType !== 'touch') this.hide();\n }\n\n cardFocusOut(e: FocusEvent): void {\n const t = e.relatedTarget as Node | null;\n if (this.cur !== null && !this.cardRef?.nativeElement.contains(t) && t !== this.curEl) this.hide();\n }\n\n follow(s: CitationHoverCardSource, e: MouseEvent): void {\n if (!s.href) e.preventDefault();\n this.openSource.emit({ source: s, index: this.sources.indexOf(s) });\n }\n}\n","// framework/angular/code-viewer/code-viewer.component.ts\n//\n// Native Angular port of framework/react/code-viewer/CodeViewer.tsx.\n// The code the agent wrote, with the lines it changed marked. Tabs switch the\n// file; the \"+N changed\" count follows. Click a line and the agent explains it:\n// a note folds open under the line, reads for a moment, then crossfades to what\n// it says. The copy button copies the open file's text. Inputs mirror the React\n// props; the open file and open line are controllable or self-managed.\n//\n// Icons: 'spark' (the note marker) and 'copy'/'check' (the copy button) are all\n// in the Angular icon set, so no substitution was needed.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** k keyword, s string, f function, cm comment, tg tag, at attribute. */\nexport type CodeToken = 'k' | 's' | 'f' | 'cm' | 'tg' | 'at';\n\n/** Plain text, or `[token, text]` for a highlighted piece. */\nexport type CodePiece = string | [CodeToken, string];\n\n/** One line of code, optionally changed by the agent and carrying a note. */\nexport interface CodeLine {\n /** The line as plain text, or as pieces to highlight. */\n code: string | CodePiece[];\n /** The agent changed this line: its number turns green and the line gets a wash. */\n changed?: boolean;\n /** What the agent says about the line when you click it. */\n note?: string;\n}\n\n/** One file shown on a tab. */\nexport interface CodeFile {\n /** Shown on the tab, like \"PlanCard.tsx\". */\n name: string;\n lines: CodeLine[];\n}\n\n/** A rendered piece of a line: a class for a highlighted token, or '' for plain. */\ninterface Piece {\n cls: string;\n text: string;\n}\n\n/** The three phases a note moves through while it \"reads\" then answers. */\ntype NotePhase = 'reading' | 'out' | 'said';\n\nconst TOKEN: Record<CodeToken, string> = {\n k: 'vo-k',\n s: 'vo-s',\n f: 'vo-f',\n cm: 'vo-cm',\n tg: 'vo-tg',\n at: 'vo-at',\n};\n\n/** The plain text of a line, joining its pieces. */\nfunction lineText(code: CodeLine['code']): string {\n return typeof code === 'string'\n ? code\n : code.map((p) => (typeof p === 'string' ? p : p[1])).join('');\n}\n\n@Component({\n selector: 'vo-code-viewer',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-cvx vo-panel\" [class]=\"className\">\n <div class=\"vo-cvx-h\">\n <div class=\"vo-cvx-tabs\" role=\"tablist\">\n @for (f of files; track f.name) {\n <button\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"f === cur\"\n class=\"vo-cvx-tab\"\n [class.vo-on]=\"f === cur\"\n (click)=\"pick(f.name)\"\n >\n {{ f.name }}\n </button>\n }\n </div>\n <span class=\"vo-cvx-meta vo-num\"><b>+{{ changed }}</b> changed</span>\n <button\n type=\"button\"\n class=\"vo-ib\"\n [class.vo-copied]=\"copied\"\n aria-label=\"Copy file\"\n (click)=\"copyFile()\"\n >\n <vo-icon [name]=\"copied ? 'check' : 'copy'\"></vo-icon>\n </button>\n </div>\n <div class=\"vo-cvx-body\">\n <pre class=\"vo-cvx-code\">\n @for (l of cur?.lines ?? []; track trackLine($index); let k = $index) {\n <div\n class=\"vo-cvx-l vo-enter\"\n [class.vo-new]=\"l.changed\"\n [class.vo-on]=\"open === k\"\n [style.animation-delay.ms]=\"motion.reduce() ? 0 : k * 18\"\n role=\"button\"\n tabindex=\"0\"\n [attr.aria-expanded]=\"open === k\"\n (click)=\"ask(k)\"\n (keydown)=\"key($event, k)\"\n ><span class=\"vo-n\">{{ k + 1 }}</span><span class=\"vo-c\">@if (pieces(l.code).length) {@for (p of pieces(l.code); track $index) {@if (p.cls) {<span [class]=\"p.cls\">{{ p.text }}</span>} @else {{{ p.text }}}}} @else { }</span></div>\n @if (open === k) {\n <div class=\"vo-cvx-note\" aria-live=\"polite\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon><span class=\"vo-sw\" [class.vo-out]=\"phase === 'out'\">@if (phase === 'said') {{{ noteText(l) }}} @else {<span class=\"vo-shim\">Reading the line</span>}</span></div>\n }\n }\n </pre>\n </div>\n </div>\n `,\n styleUrl: './code-viewer.css',\n})\nexport class CodeViewerComponent implements OnChanges, OnDestroy {\n /** The files the agent changed. */\n @Input() files: CodeFile[] = [];\n\n /** The open file, by name. Leave it out to let the tabs switch it. */\n @Input() file?: string;\n\n /** The file open at first when `file` is not controlled. */\n @Input() defaultFile?: string;\n\n /** Emitted with the name of the file the tabs switch to. */\n @Output() fileChange = new EventEmitter<string>();\n\n /** The line whose note is open (0 is the first line), or null. Leave it out to let a click open it. */\n @Input() line?: number | null;\n\n /** The line open at first when `line` is not controlled. */\n @Input() defaultLine: number | null = null;\n\n /** Emitted with the line whose note opened, or null when it closed. */\n @Output() lineChange = new EventEmitter<number | null>();\n\n /** How long a note says \"Reading the line\" before it answers, in ms. */\n @Input() delay = 600;\n\n /** The note for a line the agent didn't change and has nothing to say about. */\n @Input() unchangedNote = 'Unchanged. The agent kept this line as it was.';\n\n /** Emitted with the file's text when it is copied. */\n @Output() copy = new EventEmitter<string>();\n\n @Input() className = '';\n\n readonly motion = inject(ReducedMotionService);\n\n /** The note's phase: reads for a moment, crossfades, then says what it knows. */\n phase: NotePhase = 'reading';\n\n /** Whether the copy button is showing its \"copied\" check. */\n copied = false;\n\n // self-managed open file/line, used when the matching input is not provided\n private nameKey = '';\n private openKey: number | null = null;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['files'] || changes['defaultFile']) {\n if (this.file === undefined && !this.nameKey) {\n this.nameKey = this.defaultFile ?? this.files[0]?.name ?? '';\n }\n }\n if (changes['defaultLine'] && this.line === undefined && this.openKey === null) {\n this.openKey = this.defaultLine;\n }\n if (changes['line'] || changes['file']) {\n // a controlled open line restarts the note's reading phase\n this.startNote();\n }\n }\n\n /** The name of the open file. */\n get name(): string {\n return this.file ?? this.nameKey;\n }\n\n /** The index of the open line, or null. */\n get open(): number | null {\n return this.line ?? this.openKey;\n }\n\n /** The open file, falling back to the first one. */\n get cur(): CodeFile | undefined {\n return this.files.find((f) => f.name === this.name) ?? this.files[0];\n }\n\n /** How many lines of the open file the agent changed. */\n get changed(): number {\n return this.cur?.lines.filter((l) => l.changed).length ?? 0;\n }\n\n /** Track lines by the file name and index, so a new file remounts them. */\n trackLine(k: number): string {\n return (this.cur?.name ?? '') + k;\n }\n\n /** The highlighted pieces of a line, or an empty list for a blank line. */\n pieces(code: CodeLine['code']): Piece[] {\n if (typeof code === 'string') {\n return code ? [{ cls: '', text: code }] : [];\n }\n return code.map((p) =>\n typeof p === 'string' ? { cls: '', text: p } : { cls: TOKEN[p[0]], text: p[1] }\n );\n }\n\n /** The text of a line's note, or the fallback for an unchanged line. */\n noteText(l: CodeLine): string {\n return l.note ?? this.unchangedNote;\n }\n\n pick(n: string): void {\n if (n === this.name) return;\n if (this.file === undefined) this.nameKey = n;\n this.fileChange.emit(n);\n this.setOpen(null);\n }\n\n ask(k: number): void {\n this.setOpen(this.open === k ? null : k);\n }\n\n key(e: KeyboardEvent, k: number): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.ask(k);\n }\n }\n\n copyFile(): void {\n const cur = this.cur;\n if (!cur) return;\n const t = cur.lines.map((l) => lineText(l.code)).join('\\n');\n navigator.clipboard?.writeText(t).catch(() => {});\n this.copy.emit(t);\n this.copied = true;\n const back = setTimeout(() => {\n this.copied = false;\n this.timers.delete(back);\n }, 1200);\n this.timers.add(back);\n }\n\n private setOpen(k: number | null): void {\n if (this.line === undefined) this.openKey = k;\n this.lineChange.emit(k);\n this.startNote();\n }\n\n // the note reads for `delay` ms, blurs out, then says what the agent knows\n private startNote(): void {\n this.clearTimers();\n if (this.open === null) return;\n this.phase = 'reading';\n const reduce = this.motion.reduce();\n const a = setTimeout(() => {\n this.phase = 'out';\n this.timers.delete(a);\n }, this.delay);\n const b = setTimeout(() => {\n this.phase = 'said';\n this.timers.delete(b);\n }, this.delay + (reduce ? 0 : 170));\n this.timers.add(a);\n this.timers.add(b);\n }\n\n private clearTimers(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n\n ngOnDestroy(): void {\n this.clearTimers();\n }\n}\n","// framework/angular/composer/composer.component.ts\n//\n// Native Angular port of framework/react/composer/Composer.tsx.\n// The message box: text that grows as you type, attachments that load, what the\n// agent works on, what it may do, dictation and send. Inputs mirror the React\n// props; React callbacks become @Output() EventEmitters. Uncontrolled inputs\n// (value/attachments/context/mode) keep their own state when the matching Input\n// is left undefined.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A file or frame added to the message, shown as a chip above the text. */\nexport interface ComposerAttachment {\n key: string;\n label: string;\n /** Defaults to a paper clip. */\n icon?: VoIconName;\n /** loading shows a spinner and holds Send until it's ready; error shows the chip in red with a Try again button. */\n status?: 'loading' | 'error' | 'ready';\n}\n\n/** An option in one of the composer's menus. */\nexport interface ComposerOption {\n value: string;\n /** Defaults to the value. */\n label?: string;\n /** The quiet line under the label. */\n detail?: string;\n icon?: VoIconName;\n}\n\n/** The message sent up when the person presses Send. */\nexport interface ComposerMessage {\n text: string;\n attachments: ComposerAttachment[];\n}\n\ntype PopName = 'plus' | 'ctx' | 'mode';\n\nconst ADD: ComposerOption[] = [\n { value: 'file', label: 'Upload a file', detail: 'Images, PDFs or code', icon: 'file-text' },\n { value: 'figma', label: 'Link a Figma frame', detail: 'From any file you can open', icon: 'figma' },\n { value: 'shot', label: 'Add a screenshot', detail: \"Of the window you're in\", icon: 'eye' },\n];\nconst MODES: ComposerOption[] = [\n { value: 'ask', label: 'Ask', detail: 'Answer only, change nothing', icon: 'eye' },\n { value: 'edit', label: 'Edit', detail: 'Change frames on a new page', icon: 'edit' },\n { value: 'plan', label: 'Plan', detail: 'Propose steps before it starts', icon: 'file-text' },\n];\nconst PLACEHOLDER = 'Ask the design agent, or attach a frame';\n\nconst clock = (s: number): string =>\n Math.floor(s / 60) + ':' + String(s % 60).padStart(2, '0');\n\n@Component({\n selector: 'vo-composer',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-cpx\" [class]=\"className\">\n <div class=\"vo-cpx-thread\" aria-live=\"polite\"><ng-content></ng-content></div>\n <div #box class=\"vo-cpx-box\" [attr.data-mode]=\"dictating ? 'voice' : 'idle'\">\n <div class=\"vo-cpx-att\">\n @for (f of files; track f.key) {\n <span\n class=\"vo-fchip\"\n [class.vo-ld]=\"f.status === 'loading'\"\n [class.vo-err]=\"f.status === 'error'\"\n [class.vo-leave]=\"leaving.includes(f.key)\"\n [class.vo-enter]=\"!leaving.includes(f.key)\"\n >\n <span class=\"vo-ic\" style=\"display:grid\">\n @if (f.status === 'loading') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon [name]=\"f.status === 'error' ? 'alert' : (f.icon ?? 'plus')\" size=\"xs\"></vo-icon>\n }\n </span>\n <span class=\"vo-n\">{{ f.label }}</span>\n @if (f.status === 'error') {\n <button\n type=\"button\"\n class=\"vo-rt\"\n aria-label=\"Try again\"\n data-tip=\"Try again\"\n (click)=\"retry.emit(f.key)\"\n >\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>\n </button>\n }\n <button\n type=\"button\"\n class=\"vo-x\"\n [attr.aria-label]=\"'Remove ' + f.label\"\n (click)=\"removeAttachment(f.key)\"\n >\n <vo-icon name=\"x\" size=\"xs\"></vo-icon>\n </button>\n </span>\n }\n </div>\n\n <textarea\n #ta\n class=\"vo-cpx-ta\"\n rows=\"1\"\n aria-label=\"Message\"\n [placeholder]=\"dictating ? 'Listening…' : placeholder\"\n [value]=\"text\"\n (input)=\"onInput($event)\"\n (keydown)=\"onKey($event)\"\n ></textarea>\n\n <div class=\"vo-cpx-rows\">\n <div class=\"vo-cpx-bar\" [attr.inert]=\"dictating ? '' : null\">\n <button\n type=\"button\"\n class=\"vo-ib vo-cpx-add\"\n aria-label=\"Attach\"\n data-tip=\"Attach a file or a frame\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"pop === 'plus'\"\n (click)=\"toggle('plus')\"\n >\n <vo-icon name=\"plus\"></vo-icon>\n </button>\n @if (ctxOpt(); as co) {\n <button\n type=\"button\"\n class=\"vo-chip vo-cpx-ctx\"\n data-tip=\"What the agent works on\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"pop === 'ctx'\"\n (click)=\"toggle('ctx')\"\n >\n <vo-icon [name]=\"co.icon ?? 'figma'\"></vo-icon>\n <span class=\"vo-cpx-ctx-n\">{{ co.label ?? co.value }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n }\n <span class=\"vo-sp\"></span>\n @if (mdOpt(); as mo) {\n <button\n type=\"button\"\n class=\"vo-chip vo-cpx-mode\"\n data-tip=\"What the agent may do\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"pop === 'mode'\"\n (click)=\"toggle('mode')\"\n >\n <vo-icon [name]=\"mo.icon ?? 'edit'\"></vo-icon>\n <span class=\"vo-cpx-mode-n\">{{ mo.label ?? mo.value }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n }\n @if (showDictate) {\n <button\n type=\"button\"\n class=\"vo-ib vo-cpx-mic\"\n aria-label=\"Dictate\"\n data-tip=\"Dictate\"\n (click)=\"dictate.emit()\"\n >\n <vo-icon name=\"comment\"></vo-icon>\n </button>\n }\n @if (busy) {\n <button\n type=\"button\"\n class=\"vo-cpx-send\"\n aria-label=\"Stop\"\n data-tip=\"Stop\"\n (click)=\"stop.emit()\"\n >\n <vo-icon name=\"stop\"></vo-icon>\n </button>\n } @else {\n <button\n type=\"button\"\n class=\"vo-cpx-send\"\n aria-label=\"Send\"\n data-tip=\"Send\"\n data-tip-k=\"↵\"\n [disabled]=\"!canSend()\"\n (click)=\"submit()\"\n >\n <vo-icon name=\"chev-u\"></vo-icon>\n </button>\n }\n </div>\n <div class=\"vo-cpx-voice\" [attr.inert]=\"dictating ? null : ''\">\n <span class=\"vo-cpx-rec\"><span class=\"vo-cpx-dot\"></span>Listening</span>\n <span class=\"vo-cpx-tm vo-num vo-muted\">{{ clock(dictationSeconds ?? counted) }}</span>\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-cpx-cancel\" (click)=\"endDictation(false)\">Cancel</button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-cpx-ok\" (click)=\"endDictation(true)\">Done</button>\n </div>\n </div>\n\n <div\n #popPlus\n role=\"menu\"\n aria-label=\"Attach\"\n class=\"vo-pop vo-pp-plus\"\n [class.vo-open]=\"pop === 'plus'\"\n [attr.inert]=\"pop !== 'plus' ? '' : null\"\n >\n @for (o of addOptions; track o.value) {\n <button type=\"button\" role=\"menuitem\" class=\"vo-mi\" (click)=\"choose('plus', o)\">\n <vo-icon [name]=\"o.icon ?? 'plus'\"></vo-icon>\n <span>{{ o.label ?? o.value }}@if (o.detail) {<span class=\"vo-d\">{{ o.detail }}</span>}</span>\n </button>\n }\n </div>\n\n @if (contexts && contexts.length > 0) {\n <div\n #popCtx\n role=\"menu\"\n aria-label=\"Working on\"\n class=\"vo-pop vo-pp-ctx\"\n [class.vo-open]=\"pop === 'ctx'\"\n [attr.inert]=\"pop !== 'ctx' ? '' : null\"\n >\n <div class=\"vo-ph\">Working on</div>\n @for (o of contexts; track o.value) {\n <button\n type=\"button\"\n role=\"menuitemradio\"\n class=\"vo-mi\"\n [attr.aria-checked]=\"o.value === ctx\"\n (click)=\"choose('ctx', o)\"\n >\n <vo-icon [name]=\"o.icon ?? 'figma'\"></vo-icon>\n <span>{{ o.label ?? o.value }}@if (o.detail) {<span class=\"vo-d\">{{ o.detail }}</span>}</span>\n <span class=\"vo-ck\"><vo-icon name=\"check\"></vo-icon></span>\n </button>\n }\n </div>\n }\n\n <div\n #popMode\n role=\"menu\"\n aria-label=\"The agent may\"\n class=\"vo-pop vo-pp-mode\"\n [class.vo-open]=\"pop === 'mode'\"\n [attr.inert]=\"pop !== 'mode' ? '' : null\"\n >\n <div class=\"vo-ph\">The agent may</div>\n @for (o of modes; track o.value) {\n <button\n type=\"button\"\n role=\"menuitemradio\"\n class=\"vo-mi\"\n [attr.aria-checked]=\"o.value === md\"\n (click)=\"choose('mode', o)\"\n >\n <vo-icon [name]=\"o.icon ?? 'edit'\"></vo-icon>\n <span>{{ o.label ?? o.value }}@if (o.detail) {<span class=\"vo-d\">{{ o.detail }}</span>}</span>\n <span class=\"vo-ck\"><vo-icon name=\"check\"></vo-icon></span>\n </button>\n }\n </div>\n </div>\n </div>\n `,\n styleUrl: './composer.css',\n})\nexport class ComposerComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The text in the box. Leave it out (undefined) to let the composer keep it. */\n @Input() value?: string;\n @Input() defaultValue = '';\n @Output() valueChange = new EventEmitter<string>();\n @Input() placeholder = PLACEHOLDER;\n /** Emitted with the message when the person sends it. The box clears itself afterwards. */\n @Output() send = new EventEmitter<ComposerMessage>();\n /** The agent is answering: send turns into stop. */\n @Input() busy = false;\n /** Emitted by the stop button while busy. */\n @Output() stop = new EventEmitter<void>();\n\n /** Files and frames added to the message. Leave it out to let the composer keep them. */\n @Input() attachments?: ComposerAttachment[];\n @Input() defaultAttachments: ComposerAttachment[] = [];\n @Output() attachmentsChange = new EventEmitter<ComposerAttachment[]>();\n /** What the attach menu offers. Defaults to a file, a Figma frame and a screenshot. */\n @Input() addOptions: ComposerOption[] = ADD;\n /** Emitted with the option's value when the person picks one from the attach menu. */\n @Output() add = new EventEmitter<string>();\n /** Emitted by Try again on an attachment that failed to load. */\n @Output() retry = new EventEmitter<string>();\n\n /** What the agent can work on. The chip only shows when there are some. */\n @Input() contexts?: ComposerOption[];\n @Input() context?: string;\n @Input() defaultContext?: string;\n @Output() contextChange = new EventEmitter<string>();\n /** What the agent may do. Defaults to Ask, Edit and Plan. */\n @Input() modes: ComposerOption[] = MODES;\n @Input() mode?: string;\n @Input() defaultMode?: string;\n @Output() modeChange = new EventEmitter<string>();\n\n /** Emitted by the microphone button. The mic button only shows when dictate has a listener. */\n @Output() dictate = new EventEmitter<void>();\n /** Swaps the toolbar for a red dot, a clock, Cancel and Done. */\n @Input() dictating = false;\n /** Seconds to show while dictating. Leave it out to let it count. */\n @Input() dictationSeconds?: number;\n /** Emitted by Cancel (false, text goes back) or Done (true, text stays). */\n @Output() dictationEnd = new EventEmitter<boolean>();\n\n @Input() className = '';\n\n @ViewChild('box') box!: ElementRef<HTMLDivElement>;\n @ViewChild('ta') ta!: ElementRef<HTMLTextAreaElement>;\n @ViewChild('popPlus') popPlus?: ElementRef<HTMLDivElement>;\n @ViewChild('popCtx') popCtx?: ElementRef<HTMLDivElement>;\n @ViewChild('popMode') popMode?: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n // uncontrolled state (used when the matching Input is undefined)\n private textState = '';\n private filesState: ComposerAttachment[] = [];\n private ctxState = '';\n private mdState = '';\n\n pop: PopName | null = null;\n leaving: string[] = [];\n counted = 0;\n\n // the mic button shows when a dictate listener is attached\n get showDictate(): boolean {\n return this.dictate.observed;\n }\n\n get text(): string {\n return this.value ?? this.textState;\n }\n get files(): ComposerAttachment[] {\n return this.attachments ?? this.filesState;\n }\n get ctx(): string {\n return this.context ?? this.ctxState;\n }\n get md(): string {\n return this.mode ?? this.mdState;\n }\n\n private before = '';\n private wasDictating = false;\n private countTimer?: ReturnType<typeof setInterval>;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private onDocClick = (e: MouseEvent): void => {\n if (!this.pop) return;\n const el = this.popEl(this.pop)?.nativeElement;\n const t = e.target as Node;\n if (el && !el.contains(t) && !this.box?.nativeElement.contains(t)) {\n // a click on the trigger is handled by toggle(); outside closes\n if (!this.triggerContains(t)) this.pop = null;\n }\n };\n\n clock = clock;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.ctxState === '') {\n this.ctxState = this.defaultContext ?? this.contexts?.[0]?.value ?? '';\n }\n if (this.mdState === '') {\n this.mdState = this.defaultMode ?? this.modes[0]?.value ?? '';\n }\n if (changes['defaultValue'] && this.textState === '') this.textState = this.defaultValue;\n if (changes['defaultAttachments'] && this.filesState.length === 0) {\n this.filesState = [...this.defaultAttachments];\n }\n if (changes['dictating']) this.syncDictation();\n if (changes['dictationSeconds'] || changes['dictating']) this.syncCounter();\n if (changes['value'] || changes['dictating']) this.grow();\n }\n\n ngAfterViewInit(): void {\n this.textState = this.defaultValue;\n this.filesState = [...this.defaultAttachments];\n this.ctxState = this.defaultContext ?? this.contexts?.[0]?.value ?? '';\n this.mdState = this.defaultMode ?? this.modes[0]?.value ?? '';\n document.addEventListener('click', this.onDocClick);\n this.syncCounter();\n this.grow();\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('click', this.onDocClick);\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n if (this.countTimer) clearInterval(this.countTimer);\n }\n\n ctxOpt(): ComposerOption | undefined {\n return this.contexts?.find((o) => o.value === this.ctx);\n }\n mdOpt(): ComposerOption | undefined {\n return this.modes.find((o) => o.value === this.md) ?? this.modes[0];\n }\n\n // the text box grows with its text, up to 160px\n private grow(): void {\n const t = this.ta?.nativeElement;\n if (!t) return;\n t.style.height = 'auto';\n t.style.height = Math.min(t.scrollHeight, 160) + 'px';\n }\n\n onInput(e: Event): void {\n const v = (e.target as HTMLTextAreaElement).value;\n if (this.value === undefined) this.textState = v;\n this.valueChange.emit(v);\n this.grow();\n }\n\n onKey(e: KeyboardEvent): void {\n if (e.key === 'Enter' && !e.shiftKey && !this.dictating) {\n e.preventDefault();\n this.submit();\n }\n if (e.key === 'Escape' && this.dictating) this.endDictation(false);\n }\n\n // send waits for text or a file, and for every file to finish loading\n canSend(): boolean {\n const hasInput = this.text.trim().length > 0 || this.files.length > 0;\n const pending = this.files.some((f) => f.status === 'loading' || f.status === 'error');\n return hasInput && !pending;\n }\n\n submit(): void {\n if (!this.canSend() || this.busy) return;\n this.send.emit({ text: this.text.trim(), attachments: this.files });\n if (this.value === undefined) this.textState = '';\n this.valueChange.emit('');\n if (this.attachments === undefined) this.filesState = [];\n this.attachmentsChange.emit([]);\n this.grow();\n }\n\n /* ---------- attachments leave with a short fade before they go ---------- */\n removeAttachment(key: string): void {\n this.leaving = [...this.leaving, key];\n const delay = this.motion.reduce() ? 0 : 300;\n const t = setTimeout(() => {\n this.leaving = this.leaving.filter((k) => k !== key);\n const next = this.files.filter((f) => f.key !== key);\n if (this.attachments === undefined) this.filesState = next;\n this.attachmentsChange.emit(next);\n this.timers.delete(t);\n }, delay);\n this.timers.add(t);\n }\n\n /* ---------- menus ---------- */\n toggle(name: PopName): void {\n this.pop = this.pop === name ? null : name;\n }\n\n choose(name: PopName, o: ComposerOption): void {\n if (name === 'plus') {\n this.add.emit(o.value);\n } else if (name === 'ctx') {\n if (this.context === undefined) this.ctxState = o.value;\n this.contextChange.emit(o.value);\n } else {\n if (this.mode === undefined) this.mdState = o.value;\n this.modeChange.emit(o.value);\n }\n const t = setTimeout(() => {\n this.pop = null;\n this.timers.delete(t);\n }, 120);\n this.timers.add(t);\n }\n\n /* ---------- dictation: what was there comes back on cancel ---------- */\n private syncDictation(): void {\n if (this.dictating && !this.wasDictating) {\n this.before = this.text;\n if (this.value === undefined) this.textState = '';\n this.valueChange.emit('');\n }\n this.wasDictating = this.dictating;\n }\n\n private syncCounter(): void {\n if (this.countTimer) {\n clearInterval(this.countTimer);\n this.countTimer = undefined;\n }\n if (this.dictating && this.dictationSeconds === undefined) {\n this.counted = 0;\n this.countTimer = setInterval(() => (this.counted += 1), 1000);\n }\n }\n\n endDictation(keep: boolean): void {\n if (!keep) {\n if (this.value === undefined) this.textState = this.before;\n this.valueChange.emit(this.before);\n }\n this.dictationEnd.emit(keep);\n this.ta?.nativeElement.focus({ preventScroll: true });\n this.grow();\n }\n\n private popEl(name: PopName): ElementRef<HTMLDivElement> | undefined {\n return name === 'plus' ? this.popPlus : name === 'ctx' ? this.popCtx : this.popMode;\n }\n\n private triggerContains(t: Node): boolean {\n const bar = this.box?.nativeElement.querySelector('.vo-cpx-bar');\n return !!bar && bar.contains(t);\n }\n}\n","// framework/angular/context-meter/context-meter.component.ts\n//\n// Native Angular port of framework/react/context-meter/ContextMeter.tsx.\n// How full the context is and what fills it: a pill with a ring that opens one\n// bar split by kind, a legend whose rows list what is in them, and Compact.\n// Inputs mirror the React props; callback props become @Output EventEmitters.\n// Escape closes the panel while the pointer or focus is on the meter, and the\n// legend lights its share of the bar on hover, as in the vanilla JS.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\n\n/** One kind of thing in the context. */\nexport interface ContextPart {\n key: string;\n /** Like \"Files\", \"Tool output\" or \"Chat\". */\n label: string;\n /** How many tokens it takes. */\n tokens: number;\n /** Its colour in the bar and the legend. Defaults to blue, teal, violet, grey. */\n color?: string;\n /** What is in it, shown on hover, like \"PricingCard.tsx 18.2k, tokens.css 6.1k\". */\n items?: string;\n}\n\nconst PALETTE = ['var(--vo-pb)', 'var(--vo-pt)', 'var(--vo-pl)', 'var(--vo-faint)'];\nconst k = (n: number) => (n / 1000).toFixed(1) + 'k';\n\n@Component({\n selector: 'vo-context-meter',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n #root\n data-vo=\"\"\n class=\"vo-ctm\"\n [class.vo-hot]=\"share >= warnAt\"\n [attr.data-open]=\"isOpen ? '1' : '0'\"\n >\n <button\n #toggle\n type=\"button\"\n class=\"vo-ctm-tg\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-label]=\"'Context, ' + pct + '% used'\"\n (click)=\"setOpen(!isOpen)\"\n >\n <span class=\"vo-ctm-ring\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 20 20\">\n <circle class=\"vo-tr\" cx=\"10\" cy=\"10\" r=\"7.5\"></circle>\n <circle class=\"vo-fl\" cx=\"10\" cy=\"10\" r=\"7.5\" pathLength=\"100\" [style.stroke-dasharray]=\"pct + ' 100'\"></circle>\n </svg>\n </span>\n <span><span class=\"vo-ctm-pc vo-num\">{{ pct }}%</span> of context used</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n <div class=\"vo-ctm-pop vo-panel\" role=\"region\" aria-label=\"What fills the context\" [attr.inert]=\"isOpen ? null : ''\">\n <div class=\"vo-ctm-ph\"><span>In context</span><span class=\"vo-num\"><b class=\"vo-ctm-tot\">{{ totK }}</b> of {{ limitK }} tokens</span></div>\n <div class=\"vo-ctm-bar\" [class.vo-hl]=\"lit\" aria-hidden=\"true\">\n @for (p of parts; track p.key; let i = $index) {\n <i [class.vo-on]=\"lit === p.key\" [style.width.%]=\"p.tokens / limit * 100\" [style.--vo-c]=\"p.color ?? palette(i)\"></i>\n }\n </div>\n <div class=\"vo-ctm-leg\" (pointerleave)=\"lit = null\">\n @for (p of parts; track p.key; let i = $index) {\n <div\n class=\"vo-ctm-l\"\n [style.--vo-c]=\"p.color ?? palette(i)\"\n [attr.title]=\"p.items ?? null\"\n [attr.tabindex]=\"p.items ? 0 : null\"\n (pointerenter)=\"lit = p.key\"\n (focus)=\"lit = p.key\"\n (blur)=\"lit = null\"\n >\n <span class=\"vo-sw\"></span>{{ p.label }}<span class=\"vo-v vo-num\">{{ partK(p) }}</span>\n </div>\n }\n </div>\n <div class=\"vo-ctm-msg\" [class.vo-on]=\"!!message\" [class]=\"message ? 'vo-' + messageTone : ''\" aria-live=\"polite\">\n <span>\n @if (message) {\n <vo-icon [name]=\"messageTone === 'warn' ? 'warn' : 'ok'\" size=\"xs\"></vo-icon>\n <span class=\"vo-sw\">{{ message }}</span>\n }\n </span>\n </div>\n @if (showFooter) {\n <div class=\"vo-ctm-f\">\n <span class=\"vo-sw vo-ctm-hint\">{{ hint }}</span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-ctm-go\" [disabled]=\"busy\" (click)=\"onCompactClick()\">\n @if (busy) {\n <span class=\"vo-spin\"></span>Compacting\n } @else {\n {{ compacted ? 'Undo' : 'Compact' }}\n }\n </button>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './context-meter.css',\n})\nexport class ContextMeterComponent {\n @Input() parts: ContextPart[] = [];\n /** The size of the context window, in tokens, like 200000. */\n @Input() limit = 200000;\n /** From this share of the limit (0 to 1) the ring turns orange. Defaults to 0.85. */\n @Input() warnAt = 0.85;\n /** A line under the legend. Crossfades when it changes. */\n @Input() message?: string;\n /** warn shows the message in orange with a warning sign, ok in green with a check. */\n @Input() messageTone: 'warn' | 'ok' = 'ok';\n /** Set once the context is compacted: the button turns into Undo. */\n @Input() compacted = false;\n /** The quiet line beside the button. Defaults to what Compact does. */\n @Input() hint = 'Summarises older turns';\n /** Whether the panel is open. Leave it out to let the pill toggle it. */\n @Input() open?: boolean;\n /** Shows the footer with the Compact / Undo button. */\n @Input() showCompact = true;\n\n /** Called by Compact. Return nothing or a promise; the button spins until it settles. */\n @Output() compact = new EventEmitter<void>();\n @Output() undo = new EventEmitter<void>();\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('root') root?: ElementRef<HTMLDivElement>;\n @ViewChild('toggle') toggle?: ElementRef<HTMLButtonElement>;\n\n /** Which legend row is lit (its share of the bar is highlighted). */\n lit: string | null = null;\n /** True while a compact run is in flight (shows the spinner). */\n busy = false;\n\n private innerOpen = true;\n\n get isOpen(): boolean {\n return this.open ?? this.innerOpen;\n }\n\n get total(): number {\n return this.parts.reduce((t, p) => t + p.tokens, 0);\n }\n\n get share(): number {\n return this.total / this.limit;\n }\n\n get pct(): number {\n return Math.round(this.share * 100);\n }\n\n get totK(): string {\n return k(this.total);\n }\n\n get limitK(): string {\n return Math.round(this.limit / 1000) + 'k';\n }\n\n get showFooter(): boolean {\n return this.showCompact;\n }\n\n palette(i: number): string {\n return PALETTE[i % PALETTE.length];\n }\n\n partK(p: ContextPart): string {\n return k(p.tokens);\n }\n\n setOpen(o: boolean): void {\n this.innerOpen = o;\n this.openChange.emit(o);\n }\n\n onCompactClick(): void {\n if (this.busy) return;\n if (this.compacted) {\n this.undo.emit();\n return;\n }\n this.compact.emit();\n }\n\n /** Call from the host when a compact run begins/ends, to show the spinner. */\n setBusy(b: boolean): void {\n this.busy = b;\n }\n\n // Escape shuts the panel while the pointer or the focus is on the meter\n @HostListener('document:keydown', ['$event'])\n onKeydown(e: KeyboardEvent): void {\n if (e.key !== 'Escape' || !this.isOpen) return;\n const el = this.root?.nativeElement;\n if (!el) return;\n const inside = el.contains(document.activeElement);\n if (inside || el.matches(':hover')) {\n this.setOpen(false);\n if (inside) this.toggle?.nativeElement.focus({ preventScroll: true });\n }\n }\n}\n","// framework/angular/decision-prompt/decision-prompt.component.ts\n//\n// Native Angular port of framework/react/decision-prompt/DecisionPrompt.tsx.\n// The agent asks a few quick questions before it starts: one question at a time,\n// number keys pick an option, Enter continues and Skip lets the agent decide.\n// Once every question is answered the body settles into a summary with a line\n// that says the agent is getting going. Inputs mirror the React props; the React\n// callbacks become @Output EventEmitters, and the keyboard / stagger behaviour is\n// ported from the vanilla source (decision-prompt.js).\n//\n// Icon substitution: the React summary uses the Phosphor \"check\" glyph for the\n// started line; the Angular icon set has `check`, so it is used unchanged.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\n\n/** One option in a question: its label and an optional quiet detail at the end of the row. */\nexport interface DecisionOption {\n label: string;\n /** Quiet text at the end of the row, like \"3 frames\" or \"Recommended\". */\n detail?: string;\n}\n\n/** One question the agent asks, with a short name for the summary and its options. */\nexport interface DecisionQuestion {\n question: string;\n /** A short name for the question in the summary, like \"Scope\". */\n label: string;\n options: DecisionOption[];\n}\n\n/** The agent asks a few quick questions before it starts. Number keys pick, Enter continues. */\n@Component({\n selector: 'vo-decision-prompt',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-dpx\"\n [class.vo-panel]=\"!bare\"\n tabindex=\"0\"\n (keydown)=\"onKey($event)\"\n >\n <div class=\"vo-dpx-h\">\n <span class=\"vo-dpx-k vo-muted vo-num\">{{ done ? 'All set' : 'Question ' + (at + 1) + ' of ' + n }}</span>\n <div class=\"vo-dpx-dots\" aria-hidden=\"true\">\n @for (q of questions; track $index) {\n <i [class.vo-on]=\"!done && $index === at\" [class.vo-done]=\"done || $index < at\"></i>\n }\n </div>\n </div>\n <!-- keyed by question, so each one plays its entrance -->\n @if (done) {\n <div class=\"vo-dpx-body\" aria-live=\"polite\">\n <div class=\"vo-dpx-sum\">\n @for (x of questions; track $index) {\n <div class=\"vo-dpx-sr vo-enter\" [style.animationDelay.ms]=\"$index * 70\">\n <span>{{ x.label }}</span>{{ summaryAnswer($index) }}\n </div>\n }\n <div class=\"vo-dpx-run vo-enter\" [style.animationDelay.ms]=\"n * 70\">\n @if (started) {\n <span style=\"color:var(--vo-ok)\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n <span>{{ startedLabel ?? startLabel }}</span>\n } @else {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <span class=\"vo-shim\">{{ startLabel }}</span>\n }\n </div>\n </div>\n </div>\n } @else {\n <div class=\"vo-dpx-body\" aria-live=\"polite\">\n <div class=\"vo-dpx-q vo-enter\">{{ current.question }}</div>\n <div role=\"radiogroup\" [attr.aria-label]=\"current.question\">\n @for (o of current.options; track $index) {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"$index === sel\"\n class=\"vo-dpx-o vo-enter\"\n [class.vo-on]=\"$index === sel\"\n [style.animationDelay.ms]=\"60 + $index * 50\"\n (click)=\"sel = $index\"\n (dblclick)=\"next()\"\n >\n <span class=\"vo-kbd\">{{ $index + 1 }}</span>{{ o.label }}\n @if (o.detail) {\n <span class=\"vo-d\">{{ o.detail }}</span>\n }\n </button>\n }\n </div>\n </div>\n }\n <div class=\"vo-dpx-f\" [class.vo-leave]=\"done\" [attr.inert]=\"done ? '' : null\">\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-dpx-skip\" (click)=\"next(true)\">Skip</button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-dpx-go\" (click)=\"next()\">\n Continue <span class=\"vo-kbd\">↵</span>\n </button>\n </div>\n </div>\n `,\n styleUrl: './decision-prompt.css',\n})\nexport class DecisionPromptComponent implements OnChanges {\n /** The questions the agent asks, in order. */\n @Input() questions: DecisionQuestion[] = [];\n /** The answers so far, an option's index or null for a skipped question. Leave it out to let Continue and Skip fill it. */\n @Input() answers?: (number | null)[];\n /** The answers the prompt starts with when uncontrolled. */\n @Input() defaultAnswers: (number | null)[] = [];\n /** What the summary says for a skipped question. */\n @Input() skippedLabel = 'Agent decides';\n /** The line under the summary while the agent gets going. */\n @Input() startLabel = 'Starting';\n /** The agent has got going: the line under the summary settles with a check. */\n @Input() started = false;\n /** What that line says once started. Defaults to startLabel. */\n @Input() startedLabel?: string;\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n /** Emitted whenever the answers change (a pick, or a skip). */\n @Output() answersChange = new EventEmitter<(number | null)[]>();\n /** Emitted once every question is answered, with the picked option's index for each, or null where the person skipped. */\n @Output() complete = new EventEmitter<(number | null)[]>();\n\n /** The highlighted option for the current question. */\n sel = 0;\n // the internal answer list used when `answers` is not provided\n private internal: (number | null)[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultAnswers'] && this.answers === undefined) {\n this.internal = [...this.defaultAnswers];\n }\n }\n\n private get list(): (number | null)[] {\n return this.answers ?? (this.internal.length ? this.internal : (this.internal = [...this.defaultAnswers]));\n }\n\n /** How many questions there are. */\n get n(): number {\n return this.questions.length;\n }\n\n /** How many have been answered so far. */\n get at(): number {\n return this.list.length;\n }\n\n /** Every question has an answer. */\n get done(): boolean {\n return this.at >= this.n;\n }\n\n /** The question being asked now. */\n get current(): DecisionQuestion {\n return this.questions[Math.min(this.at, this.n - 1)];\n }\n\n summaryAnswer(i: number): string {\n const a = this.list[i];\n return a === null || a === undefined\n ? this.skippedLabel\n : this.questions[i]?.options[a]?.label ?? this.skippedLabel;\n }\n\n next(skipped = false): void {\n if (this.done) return;\n const all = [...this.list, skipped ? null : this.sel];\n if (this.answers === undefined) this.internal = all;\n this.sel = 0;\n this.answersChange.emit(all);\n if (all.length >= this.n) this.complete.emit(all);\n }\n\n onKey(e: KeyboardEvent): void {\n if (this.done) return;\n const count = this.current.options.length;\n if (/^[1-9]$/.test(e.key) && +e.key <= count) {\n this.sel = +e.key - 1;\n e.preventDefault();\n } else if (e.key === 'Enter') {\n this.next();\n e.preventDefault();\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n this.sel = (this.sel + (e.key === 'ArrowDown' ? 1 : count - 1)) % count;\n e.preventDefault();\n }\n }\n}\n","// framework/angular/design-review/design-review.component.ts\n//\n// Native Angular port of framework/react/design-review/DesignReview.tsx.\n// Something an agent made, on its way out: checks run down one column, a teammate\n// reviews and the agent answers in the other, and you pick how it ships from the\n// menu beside the Ship button. The phase drives the header tag, the Ship button's\n// lock, and the footer (status + buttons, or the final \"done\" line).\n// Inputs mirror the React props; React callbacks become @Output EventEmitters.\n//\n// Icon note: the React default icon is `palette`, which the Angular icon set does\n// not carry. The closest available design mark is `figma`, used as the default here\n// (any VoIconName may be passed via [icon]).\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\n/** A check's state: wait (not run yet), run (running now), ok or bad. */\nexport type ReviewCheckState = 'wait' | 'run' | 'ok' | 'bad';\n\n/** One row in the Checks column. */\nexport interface ReviewCheck {\n /** What is checked, like \"Visual diff\". */\n label: string;\n /** wait (not run yet), run (running now), ok or bad. */\n state: ReviewCheckState;\n /** The result on the right, like \"2 of 6 screens changed\". */\n note?: string;\n}\n\n/** Who wrote a review message. `agent` draws the agent's mark instead of an avatar. */\nexport interface ReviewAuthor {\n name: string;\n initials?: string;\n color?: string;\n agent?: boolean;\n}\n\n/** The tag beside the name, like Changes requested or Approved. `busy` puts a spinner in it. */\nexport interface ReviewVerdict {\n label: string;\n tone?: 'ok' | 'warn' | 'bad' | 'neutral';\n icon?: VoIconName;\n busy?: boolean;\n}\n\n/** One message in the review: who, a verdict tag, and what they said. */\nexport interface ReviewMessage {\n author: ReviewAuthor;\n verdict?: ReviewVerdict;\n /** What they said, under the name. */\n text?: string;\n}\n\n/** One way it can ship, picked from the menu beside the button. */\nexport interface ShipOption {\n key: string;\n /** The button's label when it is picked, like \"Ship to 10% first\". */\n label: string;\n /** The quiet line under it in the menu. */\n detail?: string;\n}\n\n/** Where it is: in review, approved (Ship turns on), shipping, then live or scheduled. */\nexport type ReviewPhase = 'review' | 'approved' | 'shipping' | 'live' | 'scheduled';\n\n/** Overridable copy for the fixed labels. */\nexport interface ReviewLabels {\n checks?: string;\n review?: string;\n inReview?: string;\n approved?: string;\n live?: string;\n scheduled?: string;\n shipping?: string;\n}\n\nconst SHIP: ShipOption[] = [\n { key: 'all', label: 'Ship to everyone', detail: 'Every visitor sees it now' },\n { key: 'some', label: 'Ship to 10% first', detail: 'Everyone else after a day' },\n { key: 'later', label: 'Ship on Monday', detail: 'At 09:00 your time' },\n];\n\nconst DEFAULT_LABELS: Required<ReviewLabels> = {\n checks: 'Checks',\n review: 'Review',\n inReview: 'In review',\n approved: 'Approved',\n live: 'Live',\n scheduled: 'Scheduled',\n shipping: 'Shipping',\n};\n\n@Component({\n selector: 'vo-design-review',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-drv-box\"\n [class]=\"className\"\n style=\"container-type: inline-size; width: 100%\"\n >\n <div class=\"vo-drv vo-panel\" [class.vo-live]=\"phase === 'live'\">\n <div class=\"vo-drv-h\">\n <span class=\"vo-drv-ic\"><vo-icon [name]=\"icon\"></vo-icon></span>\n <div class=\"vo-drv-ht\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n <span class=\"vo-tag vo-drv-tag\" [class]=\"tag().tone\">{{ tag().label }}</span>\n </div>\n\n <div class=\"vo-drv-b\">\n <div class=\"vo-drv-col\">\n <span class=\"vo-drv-lb\">{{ L.checks }}</span>\n <div class=\"vo-drv-checks\">\n @for (c of checks; track $index) {\n <div class=\"vo-drv-c\">\n <span class=\"vo-g\">\n @switch (c.state) {\n @case ('run') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('ok') {\n <span style=\"color: var(--vo-ok); display: grid\"><vo-icon name=\"ok\" size=\"xs\"></vo-icon></span>\n }\n @case ('bad') {\n <span style=\"color: var(--vo-bad); display: grid\"><vo-icon name=\"alert\" size=\"xs\"></vo-icon></span>\n }\n @default {\n <span class=\"vo-drv-ring\"></span>\n }\n }\n </span>\n <span class=\"vo-t\">{{ c.label }}</span>\n <span class=\"vo-d\">{{ c.note ?? (c.state === 'run' ? 'Running' : '') }}</span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"vo-drv-col\">\n <span class=\"vo-drv-lb\">{{ L.review }}</span>\n <div class=\"vo-drv-rv\" aria-live=\"polite\">\n @if (messages.length) {\n @for (m of messages; track $index) {\n <div class=\"vo-drv-m vo-enter\">\n @if (m.author.agent) {\n <span class=\"vo-drv-ag\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon></span>\n } @else {\n <span\n class=\"vo-av vo-drv-av\"\n [style.background]=\"m.author.color ?? 'var(--vo-av-l)'\"\n >{{ initials(m.author) }}</span>\n }\n <div class=\"vo-drv-mb\">\n <span class=\"vo-drv-mn\">\n <b>{{ m.author.name }}</b>\n @if (m.verdict; as v) {\n <span class=\"vo-tag\" [class]=\"verdictClass(v)\">\n @if (v.busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else if (v.icon) {\n <vo-icon [name]=\"v.icon\" size=\"xs\"></vo-icon>\n }\n {{ v.label }}\n </span>\n }\n </span>\n @if (m.text) {\n <p>{{ m.text }}</p>\n }\n </div>\n </div>\n }\n } @else {\n <span class=\"vo-muted vo-drv-wt\">{{ waitingLabel }}</span>\n }\n </div>\n </div>\n </div>\n\n <div class=\"vo-drv-f\">\n @if (done()) {\n <span class=\"vo-drv-done vo-enter\">\n <vo-icon [name]=\"phase === 'scheduled' ? 'clock' : 'ok'\"></vo-icon>\n <span>{{ doneLabel ?? chosen().label }}</span>\n </span>\n } @else {\n <span class=\"vo-muted vo-drv-st\">{{ note ?? '' }}</span>\n <div class=\"vo-drv-mg\" [class.vo-enter]=\"!locked()\">\n <button\n type=\"button\"\n class=\"vo-pill vo-accent vo-sm vo-drv-go\"\n [disabled]=\"locked()\"\n (click)=\"ship()\"\n >\n {{ phase === 'shipping' ? L.shipping : chosen().label }}\n </button>\n <button\n type=\"button\"\n class=\"vo-pill vo-accent vo-sm vo-drv-dd\"\n aria-label=\"How it ships\"\n [disabled]=\"locked()\"\n (click)=\"toggleMenu()\"\n >\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n </div>\n @if (menuOpen) {\n <div class=\"vo-pop vo-drv-pop vo-open\" role=\"menu\">\n @for (o of options; track o.key) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"o.key === chosen().key\"\n (click)=\"pickOption(o)\"\n >\n <span>{{ o.label }}@if (o.detail) {<span class=\"vo-d\">{{ o.detail }}</span>}</span>\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n `,\n styleUrl: './design-review.css',\n})\nexport class DesignReviewComponent implements OnChanges {\n /** What is up for review, like \"Pricing page v4\". */\n @Input({ required: true }) title!: string;\n /** The line under the title. */\n @Input() subtitle?: string;\n /** Header mark. Defaults to `figma` (the React `palette` glyph is not in the set). */\n @Input() icon: VoIconName = 'figma';\n /** The Checks column, top to bottom. */\n @Input() checks: ReviewCheck[] = [];\n /** The review so far, oldest first. */\n @Input() messages: ReviewMessage[] = [];\n /** Where it is: review, approved, shipping, live or scheduled. */\n @Input({ required: true }) phase!: ReviewPhase;\n /** The line beside the Ship button, like \"Waiting on Maya\". */\n @Input() note?: string;\n /** Shown in the review column before anyone has written. */\n @Input() waitingLabel = 'The review starts once the checks pass';\n /** The ways it can ship, picked from the menu beside the button. */\n @Input() options: ShipOption[] = SHIP;\n /** Controlled picked option key. */\n @Input() option?: string;\n /** Uncontrolled starting option key. */\n @Input() defaultOption?: string;\n /** The line that replaces the buttons once it is live or scheduled. */\n @Input() doneLabel?: string;\n /** Overridable fixed copy. */\n @Input() labels: ReviewLabels = {};\n @Input() className = '';\n\n /** The picked ship option changed. */\n @Output() optionChange = new EventEmitter<string>();\n /** The Ship button was pressed, with the chosen option. */\n @Output() shipClick = new EventEmitter<ShipOption>();\n\n /** Internal pick for the uncontrolled case. */\n private innerPick?: string;\n menuOpen = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['option'] && this.option !== undefined) {\n this.innerPick = this.option;\n }\n }\n\n get L(): Required<ReviewLabels> {\n return { ...DEFAULT_LABELS, ...this.labels };\n }\n\n private pick(): string {\n return this.option ?? this.innerPick ?? this.defaultOption ?? this.options[0]?.key;\n }\n\n chosen(): ShipOption {\n return this.options.find((o) => o.key === this.pick()) ?? this.options[0];\n }\n\n done(): boolean {\n return this.phase === 'live' || this.phase === 'scheduled';\n }\n\n locked(): boolean {\n return this.phase !== 'approved';\n }\n\n tag(): { tone: string; label: string } {\n switch (this.phase) {\n case 'review':\n return { tone: 'vo-b', label: this.L.inReview };\n case 'live':\n return { tone: 'vo-ok', label: this.L.live };\n case 'scheduled':\n return { tone: 'vo-b', label: this.L.scheduled };\n default:\n return { tone: 'vo-ok', label: this.L.approved };\n }\n }\n\n verdictClass(v: ReviewVerdict): string {\n const cls: string[] = [];\n if (v.busy) cls.push('vo-drv-wk');\n if (v.tone && v.tone !== 'neutral') cls.push('vo-' + v.tone);\n return cls.join(' ');\n }\n\n initials(a: ReviewAuthor): string {\n return (\n a.initials ??\n a.name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n );\n }\n\n toggleMenu(): void {\n if (this.locked()) return;\n this.menuOpen = !this.menuOpen;\n }\n\n pickOption(o: ShipOption): void {\n if (this.option === undefined) this.innerPick = o.key;\n this.optionChange.emit(o.key);\n this.menuOpen = false;\n }\n\n ship(): void {\n if (this.locked()) return;\n this.shipClick.emit(this.chosen());\n }\n}\n","// framework/angular/design-tuner/design-tuner.component.ts\n//\n// Native Angular port of framework/react/design-tuner/DesignTuner.tsx.\n// A live preview beside a few sliders, with a button that hands the tuning to the\n// agent. Drag a slider (or arrow-key it) to tweak the sample card by hand, or press\n// the button to let the agent tween every value to a target, drop a note on what it\n// changed, and flip the targets for the next run. Inputs mirror the React props.\n//\n// Icons: the React source uses a \"wand\" glyph for the agent button; the Angular\n// icon set has no wand, so the closest magic/agent glyph \"spark\" is substituted.\n// \"check\" is used unchanged for the sample card's feature list.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One slider: names a value and the CSS variable it sets on the preview, `--vo-<key>`. */\nexport interface TunerParam {\n /** Names the value and the CSS variable it sets on the preview, `--vo-<key>`. */\n key: string;\n /** Shown beside the slider, like \"Radius\". */\n label: string;\n min: number;\n max: number;\n /** Where the slider starts when you don't pass values. */\n value: number;\n /** Added after whole numbers, like \"px\". Leave it out for plain numbers. */\n unit?: string;\n /** Shows and sets the value with this many decimals instead of rounding, like 2 for a shadow strength. */\n decimals?: number;\n}\n\nconst PARAMS: TunerParam[] = [\n { key: 'rad', label: 'Radius', min: 0, max: 28, value: 16, unit: 'px' },\n { key: 'pad', label: 'Padding', min: 8, max: 32, value: 18, unit: 'px' },\n { key: 'gap', label: 'Spacing', min: 4, max: 24, value: 12, unit: 'px' },\n { key: 'sh', label: 'Shadow', min: 0, max: 0.2, value: 0.08, decimals: 2 },\n];\n\n// the agent's first target per key, and the value it flips to on the next run\nconst TARGETS: Record<string, [number, number]> = {\n rad: [20, 12],\n pad: [24, 20],\n gap: [14, 10],\n sh: [0.05, 0.1],\n};\n\nconst clamp = (p: TunerParam, v: number) => Math.max(p.min, Math.min(p.max, v));\n\n/** A slider plus its live, shown and css-ready value. */\ninterface Row {\n param: TunerParam;\n value: number;\n pct: number;\n shown: string;\n drag: boolean;\n hot: boolean;\n target: number;\n}\n\n@Component({\n selector: 'vo-design-tuner',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <!-- the site lays this out by the width of its card, so the box around it is the container its query measures -->\n <div data-vo=\"\" class=\"vo-dtx-box\" [style.container-type]=\"'inline-size'\" [style.width]=\"'100%'\">\n <div class=\"vo-dtx\">\n <div class=\"vo-dtx-prev\">\n <div class=\"vo-dtx-card\" [style]=\"vars\">\n <span class=\"vo-tag vo-b vo-dtx-tg\">Pro</span>\n <div class=\"vo-dtx-pr\"><b class=\"vo-num\">$24</b><span class=\"vo-muted\">per editor, monthly</span></div>\n <div class=\"vo-dtx-li\">\n @for (f of features; track f) {\n <span><vo-icon name=\"check\" size=\"xs\"></vo-icon>{{ f }}</span>\n }\n </div>\n <button type=\"button\" class=\"vo-pill vo-accent vo-dtx-cta\">Start free trial</button>\n </div>\n </div>\n <div class=\"vo-dtx-insp vo-panel\">\n <div class=\"vo-dtx-ih\"><b>{{ title }}</b><span class=\"vo-muted vo-dtx-st\">{{ status }}</span></div>\n <div class=\"vo-dtx-rows\">\n @for (row of rows; track row.param.key) {\n <div class=\"vo-dtx-r\" [class.vo-hot]=\"row.hot\">\n <span>{{ row.param.label }}</span>\n <div\n class=\"vo-dtx-sl\"\n [class.vo-drag]=\"row.drag\"\n role=\"slider\"\n tabindex=\"0\"\n [attr.aria-label]=\"row.param.label\"\n [attr.aria-valuemin]=\"row.param.min\"\n [attr.aria-valuemax]=\"row.param.max\"\n [attr.aria-valuenow]=\"valueNow(row)\"\n [attr.aria-valuetext]=\"row.shown\"\n (pointerdown)=\"down(row, $event)\"\n (pointermove)=\"move(row, $event)\"\n (pointerup)=\"up(row)\"\n (pointercancel)=\"up(row)\"\n (keydown)=\"key(row, $event)\"\n >\n <span class=\"vo-f\" [style.width.%]=\"row.pct\"></span>\n <span class=\"vo-k\" [style.left.%]=\"row.pct\"></span>\n </div>\n <span class=\"vo-v vo-num\">{{ row.shown }}</span>\n </div>\n }\n </div>\n @if (note) {\n <div class=\"vo-dtx-note vo-enter\">{{ note }}</div>\n }\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-dtx-go\"\n [class.vo-busy]=\"tuning\"\n [attr.aria-busy]=\"tuning ? true : null\"\n (click)=\"tune()\"\n >\n @if (tuning) {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>Tuning\n } @else {\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>{{ actionLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n `,\n styleUrl: './design-tuner.css',\n})\nexport class DesignTunerComponent implements AfterViewInit, OnDestroy {\n /** The sliders. Defaults to radius, padding, spacing and shadow for the sample card. */\n @Input() params: TunerParam[] = PARAMS;\n /** The value of each slider by key. Leave it out to let the sliders keep their own. */\n @Input() values?: Record<string, number>;\n /** What is being tuned, like \"Pricing card\". */\n @Input() title = 'Pricing card';\n /** Quiet line beside the title, like \"Edited by you\" or \"Agent is tuning\". */\n @Input() status = 'Edited by you';\n /** The button's label, like \"Tune with agent\" or \"Tune again\". */\n @Input() actionLabel = 'Tune with agent';\n /** The preview lets the agent tune once on its own after a beat. Set false to turn that off. */\n @Input() auto = true;\n\n /** Emitted with the values by key whenever a slider or the agent moves one. */\n @Output() valuesChange = new EventEmitter<Record<string, number>>();\n /** Emitted when the agent-tune button is pressed. */\n @Output() tune_ = new EventEmitter<void>();\n\n private readonly motion = inject(ReducedMotionService);\n\n rows: Row[] = [];\n /** The agent is tuning: the button thinks and stops taking clicks. */\n tuning = false;\n /** What the agent changed and why, shown above the button. */\n note = '';\n /** The sample card's feature list. */\n readonly features = ['Unlimited frames', 'Agent reviews', 'Shared tokens'];\n\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private frame?: ReturnType<typeof requestAnimationFrame>;\n private touched = false;\n\n ngAfterViewInit(): void {\n this.rows = this.params.map((p) => {\n const v = clamp(p, this.values?.[p.key] ?? p.value);\n return { param: p, value: v, pct: 0, shown: '', drag: false, hot: false, target: TARGETS[p.key]?.[0] ?? p.max };\n });\n this.rows.forEach((r) => this.set(r, r.value));\n // the preview lets the agent tune once on its own, unless you reach for a slider or the button first\n if (this.auto && !this.motion.reduce()) {\n const t = setTimeout(() => {\n this.timers.delete(t);\n if (!this.touched) this.tune();\n }, 1600);\n this.timers.add(t);\n }\n }\n\n /** The css-ready `--vo-<key>` variables the preview card reads. */\n get vars(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const r of this.rows) {\n out['--vo-' + r.param.key] = r.param.decimals\n ? String(+r.value.toFixed(r.param.decimals))\n : Math.round(r.value) + (r.param.unit ?? '');\n }\n return out;\n }\n\n valueNow(r: Row): number {\n return r.param.decimals ? +r.value.toFixed(r.param.decimals) : Math.round(r.value);\n }\n\n private set(r: Row, v: number): void {\n r.value = clamp(r.param, v);\n r.pct = ((r.value - r.param.min) / (r.param.max - r.param.min)) * 100;\n r.shown = r.param.decimals ? r.value.toFixed(r.param.decimals) : Math.round(r.value) + (r.param.unit ?? '');\n this.emit();\n }\n\n private emit(): void {\n const out: Record<string, number> = {};\n for (const r of this.rows) out[r.param.key] = r.value;\n this.valuesChange.emit(out);\n }\n\n down(r: Row, e: PointerEvent): void {\n (e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n r.drag = true;\n this.touched = true;\n this.status = 'Edited by you';\n this.at(r, e);\n }\n\n move(r: Row, e: PointerEvent): void {\n if (r.drag) this.at(r, e);\n }\n\n up(r: Row): void {\n r.drag = false;\n }\n\n private at(r: Row, e: PointerEvent): void {\n const b = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const t = Math.max(0, Math.min(1, (e.clientX - b.left) / b.width));\n this.set(r, r.param.min + (r.param.max - r.param.min) * t);\n }\n\n key(r: Row, e: KeyboardEvent): void {\n const dir = ({ ArrowRight: 1, ArrowUp: 1, ArrowLeft: -1, ArrowDown: -1 } as Record<string, number>)[e.key];\n if (!dir) return;\n e.preventDefault();\n this.touched = true;\n this.status = 'Edited by you';\n this.set(r, r.value + dir * (r.param.decimals ? Math.pow(10, -r.param.decimals) : 1));\n }\n\n tune(): void {\n if (this.tuning) return;\n this.touched = true;\n this.tune_.emit();\n this.tuning = true;\n this.status = 'Agent is tuning';\n this.note = '';\n void this.run();\n }\n\n private async run(): Promise<void> {\n for (const r of this.rows) {\n r.hot = true;\n await this.tween(r, r.value, r.target);\n await this.wait(120);\n r.hot = false;\n }\n this.note = 'Matched the 4px grid and your card tokens. Softer shadow so the CTA leads.';\n this.tuning = false;\n this.status = 'Tuned by agent';\n this.actionLabel = 'Tune again';\n // flip each target so the next run tweaks the card the other way\n for (const r of this.rows) {\n const [a, b] = TARGETS[r.param.key] ?? [r.param.max, r.param.min];\n r.target = r.target === a ? b : a;\n }\n }\n\n private tween(r: Row, from: number, to: number): Promise<void> {\n if (this.motion.reduce()) {\n this.set(r, to);\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n const start = performance.now();\n const dur = 650;\n const step = (now: number) => {\n const t = Math.min(1, (now - start) / dur);\n const e = 1 - Math.pow(1 - t, 3); // ease-out-cubic ~ cubic-bezier(.22,1,.36,1)\n this.set(r, from + (to - from) * e);\n if (t < 1) this.frame = requestAnimationFrame(step);\n else resolve();\n };\n this.frame = requestAnimationFrame(step);\n });\n }\n\n private wait(ms: number): Promise<void> {\n if (this.motion.reduce()) return Promise.resolve();\n return new Promise((resolve) => {\n const t = setTimeout(() => {\n this.timers.delete(t);\n resolve();\n }, ms);\n this.timers.add(t);\n });\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n if (this.frame) cancelAnimationFrame(this.frame);\n }\n}\n","// framework/angular/details-panel/details-panel.component.ts\n//\n// Native Angular port of framework/react/details-panel/DetailsPanel.tsx.\n// A record's properties in folding sections, edited in place from small menus:\n// a status or owner picked from a dot/avatar menu, a model picked from a chevron\n// menu, numbers that roll to a new value (tokens, cost), and labels with an add\n// button. The accent flashes behind a value when it changes. Inputs mirror the\n// React props; React callbacks become @Output EventEmitters.\n//\n// Icon note: React uses a \"link\" glyph for the copy button; the Angular icon set\n// has no \"link\", so the closest available glyph, \"copy\", is substituted. The\n// copied state still swaps to \"check\" as in the original.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One choice in a select row's menu. */\nexport interface DetailsPanelOption {\n value: string;\n label: string;\n /** A quieter line under the label in the menu, like \"Best for design\". */\n detail?: string;\n /** A coloured dot before the label, like 'var(--vo-ok)'. */\n color?: string;\n /** An avatar before the label instead of a dot. */\n avatar?: { initials: string; color: string };\n}\n\nexport type DetailsPanelTone =\n | 'blue' | 'purple' | 'green' | 'orange' | 'red' | 'yellow' | 'pink' | 'teal';\n\nexport interface DetailsPanelTag {\n label: string;\n tone?: DetailsPanelTone;\n}\n\n/** A plain value, like a date or a duration. */\nexport interface DetailsPanelTextRow {\n key: string;\n label: string;\n type?: 'text';\n value: string | number;\n}\n\n/** A value picked from a menu. */\nexport interface DetailsPanelSelectRow {\n key: string;\n label: string;\n type: 'select';\n options: DetailsPanelOption[];\n value?: string;\n defaultValue?: string;\n /** Shows a chevron after the value. Defaults to true when the options have no dots or avatars. */\n chevron?: boolean;\n}\n\n/** A number that rolls to its new value, like tokens or cost. */\nexport interface DetailsPanelNumberRow {\n key: string;\n label: string;\n type: 'number';\n value: number;\n /** Turns the number into text. Defaults to a rounded number with thousands separators. */\n format?: (n: number) => string;\n}\n\n/** Labels, with an optional add button. */\nexport interface DetailsPanelTagsRow {\n key: string;\n label: string;\n type: 'tags';\n tags: DetailsPanelTag[];\n addLabel?: string;\n /** Present to show the add button; emits through (add). */\n canAdd?: boolean;\n}\n\nexport type DetailsPanelRow =\n | DetailsPanelTextRow\n | DetailsPanelSelectRow\n | DetailsPanelNumberRow\n | DetailsPanelTagsRow;\n\nexport interface DetailsPanelSection {\n key: string;\n title: string;\n rows: DetailsPanelRow[];\n}\n\nconst TONE: Record<DetailsPanelTone, string> = {\n blue: 'vo-b', purple: 'vo-l', green: 'vo-m', orange: 'vo-p',\n red: 'vo-r', yellow: 'vo-y', pink: 'vo-k', teal: 'vo-t',\n};\n\nconst count = (n: number): string => Math.round(n).toLocaleString('en-US');\n\n/** A row's live state carried in the template. */\ninterface RowView {\n row: DetailsPanelRow;\n /** select: the picked value. */\n value: string;\n /** select: whether to draw the trailing chevron. */\n chevron: boolean;\n /** select/owner-avatar flash after a change. */\n flash: boolean;\n /** avatar should play its entrance on the next change. */\n changed: boolean;\n /** number: the currently shown (tweened) value. */\n shown: number;\n /** the popover for a select row is open. */\n open: boolean;\n /** tags present when the panel first showed, so later ones enter. */\n initialTags: Set<string>;\n}\n\n/** A record's properties in folding sections, edited in place from small menus. */\n@Component({\n selector: 'vo-details-panel',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div #root data-vo=\"\" class=\"vo-dtp vo-panel\" [class]=\"className\">\n <div class=\"vo-dtp-h\">\n @if (kind) {\n <span class=\"vo-ft\">{{ kind }}</span>\n }\n <b>{{ title }}</b>\n @if (copyValue !== undefined) {\n <button\n type=\"button\"\n class=\"vo-ib vo-dtp-cp\"\n [class.vo-copied]=\"copied\"\n [attr.aria-label]=\"copyLabel\"\n [attr.data-tip]=\"copied ? 'Copied to clipboard' : copyLabel\"\n (click)=\"copy()\"\n >\n <vo-icon [name]=\"copied ? 'check' : copyIcon\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n\n @for (s of sections; track s.key) {\n <div class=\"vo-dtp-sec\">\n <button\n type=\"button\"\n class=\"vo-dtp-sh\"\n [attr.aria-expanded]=\"isOpen(s.key)\"\n (click)=\"toggle(s.key)\"\n >\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon><span>{{ s.title }}</span>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!isOpen(s.key)\" [attr.inert]=\"isOpen(s.key) ? null : ''\">\n <div>\n <div class=\"vo-dtp-rows\">\n @for (v of views[s.key]; track v.row.key) {\n <div class=\"vo-dtp-r\">\n <span class=\"vo-k\">{{ v.row.label }}</span>\n\n @switch (v.row.type) {\n @case ('select') {\n <button\n type=\"button\"\n class=\"vo-dtp-v\"\n [class.vo-flash]=\"v.flash\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"v.open\"\n (click)=\"openMenu(v)\"\n (animationend)=\"onFlashEnd(v, $event)\"\n >\n @if (mark(v); as m) {\n @if (m.avatar) {\n <span\n class=\"vo-av\"\n [class.vo-enter]=\"v.changed\"\n [style.background]=\"m.avatar.color\"\n >{{ m.avatar.initials }}</span>\n } @else if (m.color) {\n <span class=\"vo-dot\" [style.color]=\"m.color\"></span>\n }\n }\n <span class=\"vo-sw\">{{ picked(v)?.label }}</span>\n @if (v.chevron) {\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n }\n </button>\n }\n @case ('number') {\n <span class=\"vo-dtp-v vo-num\">{{ format(v) }}</span>\n }\n @case ('tags') {\n <span class=\"vo-dtp-tags\">\n @for (t of tagsOf(v.row); track t.label) {\n <span\n class=\"vo-tag\"\n [class]=\"t.tone ? tone(t.tone) : ''\"\n [class.vo-enter]=\"!v.initialTags.has(t.label)\"\n >{{ t.label }}</span>\n }\n @if (canAdd(v.row)) {\n <button\n type=\"button\"\n class=\"vo-dtp-add\"\n [attr.aria-label]=\"addLabel(v.row)\"\n [attr.data-tip]=\"addLabel(v.row)\"\n (click)=\"add(v.row)\"\n >\n <vo-icon name=\"plus\" size=\"xs\"></vo-icon>\n </button>\n }\n </span>\n }\n @default {\n <span class=\"vo-dtp-v vo-num\">{{ textValue(v.row) }}</span>\n }\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n }\n\n <!-- the menus sit on the panel itself, so the folding sections can't clip them -->\n @for (s of sections; track s.key) {\n @for (v of views[s.key]; track v.row.key) {\n @if (v.row.type === 'select') {\n <div\n class=\"vo-pop\"\n [class.vo-open]=\"v.open\"\n role=\"menu\"\n [attr.aria-label]=\"v.row.label\"\n >\n @for (o of selectOptions(v.row); track o.value) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitem\"\n (click)=\"choose(v, o)\"\n >\n @if (o.avatar) {\n <span class=\"vo-av\" [style.background]=\"o.avatar.color\">{{ o.avatar.initials }}</span>\n } @else if (o.color) {\n <span class=\"vo-dot\" [style.color]=\"o.color\"></span>\n }\n @if (o.detail) {\n <span>{{ o.label }}<span class=\"vo-d\">{{ o.detail }}</span></span>\n } @else {\n <span>{{ o.label }}</span>\n }\n </button>\n }\n </div>\n }\n }\n }\n </div>\n `,\n styleUrl: './details-panel.css',\n})\nexport class DetailsPanelComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The title at the top, like \"Pricing page redesign\". */\n @Input({ required: true }) title!: string;\n /** A short type tag before the title, like \"RUN\". */\n @Input() kind?: string;\n /** Adds a copy button that copies this, like a run ID. */\n @Input() copyValue?: string;\n /** The copy button's tooltip. */\n @Input() copyLabel = 'Copy run ID';\n /** The sections of rows. */\n @Input() sections: DetailsPanelSection[] = [];\n /** Keys of the open sections. Leave it out to let the headers toggle them; every section starts open. */\n @Input() open?: string[];\n @Input() defaultOpen?: string[];\n /** An extra class on the panel. */\n @Input() className = '';\n\n /** Emitted when a select row's value changes. */\n @Output() valueChange = new EventEmitter<{ key: string; value: string }>();\n /** Emitted when the open sections change. */\n @Output() openChange = new EventEmitter<string[]>();\n /** Emitted when a tags row's add button is pressed. */\n @Output() add_ = new EventEmitter<string>();\n\n @ViewChild('root') private root!: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** React uses a \"link\" glyph; the Angular set substitutes \"copy\". */\n readonly copyIcon: VoIconName = 'copy';\n\n /** Per-section row view state, keyed by section key. */\n views: Record<string, RowView[]> = {};\n copied = false;\n\n private shownState: string[] = [];\n private copyTimer?: ReturnType<typeof setTimeout>;\n private tweenTimers = new Set<ReturnType<typeof setTimeout>>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] || changes['defaultOpen'] || changes['sections']) {\n this.shownState = this.open ?? this.defaultOpen ?? this.sections.map((s) => s.key);\n }\n if (changes['sections']) this.buildViews();\n else if (changes['open'] || changes['defaultOpen']) {\n /* keep existing view state */\n }\n }\n\n ngAfterViewInit(): void {\n document.addEventListener('pointerdown', this.onOutside, true);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onOutside, true);\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.tweenTimers.forEach((t) => clearTimeout(t));\n this.tweenTimers.clear();\n }\n\n // ----- sections / fold -----\n\n isOpen(key: string): boolean {\n return (this.open ?? this.shownState).includes(key);\n }\n\n toggle(key: string): void {\n const cur = this.open ?? this.shownState;\n const next = cur.includes(key) ? cur.filter((k) => k !== key) : [...cur, key];\n if (this.open === undefined) this.shownState = next;\n this.openChange.emit(next);\n }\n\n // ----- views -----\n\n private buildViews(): void {\n const next: Record<string, RowView[]> = {};\n for (const s of this.sections) {\n next[s.key] = s.rows.map((row) => {\n if (row.type === 'select') {\n const value = row.value ?? row.defaultValue ?? row.options[0]?.value ?? '';\n const chevron = row.chevron ?? !row.options.some((o) => o.color || o.avatar);\n return this.blank(row, { value, chevron });\n }\n if (row.type === 'number') return this.blank(row, { shown: row.value });\n if (row.type === 'tags') {\n return this.blank(row, { initialTags: new Set(row.tags.map((t) => t.label)) });\n }\n return this.blank(row, {});\n });\n }\n this.views = next;\n }\n\n private blank(row: DetailsPanelRow, over: Partial<RowView>): RowView {\n return {\n row, value: '', chevron: false, flash: false, changed: false,\n shown: 0, open: false, initialTags: new Set<string>(), ...over,\n };\n }\n\n // ----- select rows -----\n\n selectOptions(row: DetailsPanelRow): DetailsPanelOption[] {\n return row.type === 'select' ? row.options : [];\n }\n\n picked(v: RowView): DetailsPanelOption | undefined {\n if (v.row.type !== 'select') return undefined;\n return v.row.options.find((o) => o.value === v.value) ?? v.row.options[0];\n }\n\n mark(v: RowView): DetailsPanelOption | undefined {\n const p = this.picked(v);\n return p && (p.color || p.avatar) ? p : undefined;\n }\n\n openMenu(v: RowView): void {\n const was = v.open;\n this.closeAll();\n v.open = !was;\n }\n\n choose(v: RowView, o: DetailsPanelOption): void {\n if (v.row.type !== 'select') return;\n if (o.value !== v.value) {\n v.changed = true;\n v.flash = false;\n // restart the flash on the next frame, as the React version does\n requestAnimationFrame(() => (v.flash = true));\n if (v.row.value === undefined) v.value = o.value;\n this.valueChange.emit({ key: v.row.key, value: o.value });\n }\n this.closeSoon(v);\n }\n\n onFlashEnd(v: RowView, e: AnimationEvent): void {\n // only its own flash: the avatar's entrance bubbles up here too\n if (e.target === e.currentTarget) v.flash = false;\n }\n\n // ----- number rows -----\n\n format(v: RowView): string {\n if (v.row.type !== 'number') return '';\n return (v.row.format ?? count)(v.shown);\n }\n\n // ----- text rows -----\n\n textValue(row: DetailsPanelRow): string | number {\n return row.type === 'text' || row.type === undefined ? (row as DetailsPanelTextRow).value : '';\n }\n\n // ----- tag rows -----\n\n tagsOf(row: DetailsPanelRow): DetailsPanelTag[] {\n return row.type === 'tags' ? row.tags : [];\n }\n\n canAdd(row: DetailsPanelRow): boolean {\n return row.type === 'tags' && !!row.canAdd;\n }\n\n addLabel(row: DetailsPanelRow): string {\n return (row.type === 'tags' && row.addLabel) || 'Add label';\n }\n\n tone(t: DetailsPanelTone): string {\n return TONE[t];\n }\n\n add(row: DetailsPanelRow): void {\n if (row.type === 'tags') this.add_.emit(row.key);\n }\n\n // ----- copy -----\n\n copy(): void {\n if (this.copyValue === undefined) return;\n try {\n void navigator.clipboard?.writeText(this.copyValue);\n } catch {\n /* clipboard may be unavailable; still show the copied state */\n }\n this.copied = true;\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.copyTimer = setTimeout(() => (this.copied = false), 1400);\n }\n\n // ----- public: push a new number value so it rolls -----\n\n /** Rolls a number row to a new value over ~800ms (respecting reduced motion). */\n setNumber(sectionKey: string, rowKey: string, value: number): void {\n const v = this.views[sectionKey]?.find((x) => x.row.key === rowKey);\n if (!v || v.row.type !== 'number') return;\n this.tween(v.shown, value, (x) => (v.shown = x));\n }\n\n private tween(from: number, to: number, apply: (v: number) => void): void {\n if (this.motion.reduce()) {\n apply(to);\n return;\n }\n const start = performance.now();\n const dur = 800;\n const step = (now: number): void => {\n const t = Math.min(1, (now - start) / dur);\n // easeOutCubic, matching cubic-bezier(.22,1,.36,1)\n const e = 1 - Math.pow(1 - t, 3);\n apply(from + (to - from) * e);\n if (t < 1) requestAnimationFrame(step);\n };\n requestAnimationFrame(step);\n }\n\n // ----- popover housekeeping -----\n\n private closeAll(): void {\n for (const key of Object.keys(this.views)) {\n for (const v of this.views[key]) v.open = false;\n }\n }\n\n private closeSoon(v: RowView): void {\n const t = setTimeout(() => {\n v.open = false;\n this.tweenTimers.delete(t);\n }, this.motion.reduce() ? 0 : 120);\n this.tweenTimers.add(t);\n }\n\n private readonly onOutside = (e: PointerEvent): void => {\n const el = this.root?.nativeElement;\n if (!el) return;\n const t = e.target as Node;\n // a click on a value trigger is handled by openMenu; only close when outside the panel\n if (!el.contains(t)) this.closeAll();\n };\n}\n","// framework/angular/donut-chart/donut-chart.component.ts\n//\n// Native Angular port of framework/react/donut-chart/DonutChart.tsx.\n// A ring of segments that draw in one by one, with a legend; hovering either a\n// segment or its legend row highlights both and shows that segment in the\n// middle. Inputs mirror the React props; the sweep draw-in, the count-up of the\n// total, and the hover highlight are ported from the vanilla JS (donut-chart.js).\n//\n// Icons: none — this component uses no icon glyphs, so it does not import\n// VoIconComponent (the colour swatches are plain CSS squares).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One segment of the ring. */\nexport interface DonutChartSegment {\n /** Like \"Design reviews\". */\n label: string;\n value: number;\n /** Defaults to the chart palette (--vo-c1..c6), in order. */\n color?: string;\n}\n\nconst R = 48;\nconst C = 2 * Math.PI * R;\nconst GAP = 2;\n\n/** Internal per-segment render state. */\ninterface Arc {\n seg: DonutChartSegment;\n index: number;\n color: string;\n /** Length of the drawn part of this arc (value share minus the gap). */\n len: number;\n /** Negative start offset around the ring. */\n at: number;\n /** Whether this arc has swept in yet. */\n drawn: boolean;\n enterDelay: number;\n percent: number;\n}\n\n@Component({\n selector: 'vo-donut-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-dnx vo-panel\">\n <div class=\"vo-dnx-ring\" [class.vo-hov]=\"hl !== null\">\n <svg viewBox=\"0 0 120 120\" aria-hidden=\"true\">\n @for (a of arcs; track a.index) {\n <circle\n cx=\"60\"\n cy=\"60\"\n [attr.r]=\"R\"\n [class.vo-hl]=\"hl === a.index\"\n [style.stroke]=\"a.color\"\n [attr.stroke-dasharray]=\"(a.drawn ? a.len : 0) + ' ' + C\"\n [attr.stroke-dashoffset]=\"-a.at\"\n (mouseenter)=\"highlight(a.index)\"\n (mouseleave)=\"highlight(null)\"\n ></circle>\n }\n </svg>\n <div class=\"vo-dnx-c\">\n <b class=\"vo-num\">{{ centerValue }}{{ unit }}</b>\n <span class=\"vo-muted\">{{ centerLabel }}</span>\n </div>\n </div>\n <div class=\"vo-dnx-lg\">\n @for (a of arcs; track a.index) {\n <div\n class=\"vo-dnx-r vo-enter\"\n [class.vo-hl]=\"hl === a.index\"\n [style.animationDelay.ms]=\"a.enterDelay\"\n (mouseenter)=\"highlight(a.index)\"\n (mouseleave)=\"highlight(null)\"\n >\n <i [style.background]=\"a.color\"></i>\n <span class=\"vo-t\">{{ a.seg.label }}</span>\n <span class=\"vo-v vo-num\">{{ format(a.seg.value) }}{{ unit }} · {{ a.percent }}%</span>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './donut-chart.css',\n})\nexport class DonutChartComponent implements AfterViewInit, OnDestroy {\n @Input({ required: true }) segments: DonutChartSegment[] = [];\n /** Under the total in the middle, like \"Agent time\". */\n @Input() label = 'Total';\n /** After every value, like \"h\" in \"14.2h\". */\n @Input() unit = '';\n /** Writes a value. Defaults to one decimal, like 14.2. */\n @Input() format: (n: number) => string = (n) => n.toFixed(1);\n /**\n * Index of the highlighted segment, or null. Leave it out to let hovering a\n * segment or its row highlight it.\n */\n @Input() set active(value: number | null | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.hl) {\n this.hl = value;\n this.updateCenter();\n }\n }\n @Input() defaultActive: number | null = null;\n\n @Output() activeChange = new EventEmitter<number | null>();\n\n // exposed to the template\n readonly R = R;\n readonly C = C;\n\n arcs: Arc[] = [];\n hl: number | null = null;\n centerValue = '';\n centerLabel = '';\n\n private total = 0;\n private controlled = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.hl = this.defaultActive;\n this.total = this.segments.reduce((a, s) => a + s.value, 0);\n const safe = this.total || 1;\n let off = 0;\n this.arcs = this.segments.map((seg, index) => {\n const len = (seg.value / safe) * C;\n const at = off;\n off += len;\n return {\n seg,\n index,\n color: seg.color ?? `var(--vo-c${(index % 6) + 1})`,\n len: len - GAP,\n at,\n drawn: false,\n enterDelay: 150 + index * 60,\n percent: Math.round((seg.value / safe) * 100),\n };\n });\n\n this.centerLabel = this.hl !== null ? this.segments[this.hl].label : this.label;\n this.centerValue = this.format(0);\n this.cdr.detectChanges();\n\n if (this.reduced.reduce()) {\n this.arcs.forEach((a) => (a.drawn = true));\n this.updateCenter();\n this.cdr.markForCheck();\n return;\n }\n\n // a moment after the ring appears, the arcs sweep in one after another and\n // the total counts up\n this.later(() => {\n this.arcs.forEach((a, i) => this.later(() => {\n a.drawn = true;\n this.cdr.markForCheck();\n }, i * 90));\n this.count(this.total);\n }, 260);\n }\n\n highlight(index: number | null): void {\n if (!this.controlled) {\n this.hl = index;\n this.updateCenter();\n }\n this.activeChange.emit(index);\n }\n\n private updateCenter(): void {\n if (this.hl !== null && this.segments[this.hl]) {\n const s = this.segments[this.hl];\n this.centerValue = this.format(s.value);\n this.centerLabel = s.label;\n } else {\n this.centerValue = this.format(this.total);\n this.centerLabel = this.label;\n }\n this.cdr.markForCheck();\n }\n\n // eases the centre number up to the total over 1200ms, matching the vanilla tween\n private count(target: number): void {\n if (this.hl !== null) {\n this.updateCenter();\n return;\n }\n const t0 = performance.now();\n const dur = 1200;\n const step = (t: number) => {\n if (this.hl !== null) return; // a hover takes over the centre\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.centerValue = this.format(target * (1 - Math.pow(1 - p, 3)));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/draft-review/draft-review.component.ts\n//\n// Native Angular port of framework/react/draft-review/DraftReview.tsx.\n// An email the agent drafted, laid out like the email it is, to check and edit\n// before it goes: send now or later, or discard it. A warning can stop it before\n// it sends, and after sending there is a short window to undo. The phase drives\n// what the footer shows (draft, sending, undo, sent, scheduled, discarded).\n// Inputs mirror the React props; callbacks become @Output EventEmitters.\n//\n// Icon note: the React/Vanilla source uses \"send\" and \"clip\" glyphs that are not\n// in the Angular icon set. \"send\" is substituted with \"chev-r\" (a forward arrow\n// reading as \"send off\"), and the attachment action uses \"file-text\" in place of\n// the paperclip \"clip\". All other glyphs (spark, alert, check, chev-d, clock, ok,\n// trash) map directly.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Someone the draft is addressed to. */\nexport interface DraftRecipient {\n name: string;\n /** The avatar's letters. Defaults to the first letters of the name. */\n initials?: string;\n /** The avatar's colour, like 'var(--vo-av-l)'. */\n color?: string;\n}\n\n/** A file on the draft. */\nexport interface DraftAttachment {\n name: string;\n /** Shown beside the name, like \"240 KB\". */\n size?: string;\n /** Still uploading: a spinner in place of the size. */\n loading?: boolean;\n}\n\n/** One button in the warning notice. */\nexport interface DraftWarningAction {\n label: string;\n onClick: () => void;\n primary?: boolean;\n}\n\n/** A problem to settle before it sends, like an attachment the message mentions but nothing attached. */\nexport interface DraftWarning {\n text: string;\n actions: DraftWarningAction[];\n}\n\n/** One option in the \"when to send\" menu. */\nexport interface SendOption {\n /** `now` sends straight away; any other key schedules it. */\n key: string;\n /** Like \"Tomorrow at 09:00\". */\n label: string;\n /** The quiet line under it in the menu. */\n detail?: string;\n}\n\n/** draft (being checked), sending, undo (sent, with a window to take it back), sent, scheduled or discarded. */\nexport type DraftPhase = 'draft' | 'sending' | 'undo' | 'sent' | 'scheduled' | 'discarded';\n\n/** The words on the controls, each overridable. */\nexport interface DraftLabels {\n send?: string;\n schedule?: string;\n sending?: string;\n scheduling?: string;\n discard?: string;\n notSent?: string;\n sent?: string;\n scheduled?: string;\n delivered?: string;\n discarded?: string;\n nothingSent?: string;\n undo?: string;\n cancel?: string;\n}\n\nconst WHEN: SendOption[] = [\n { key: 'now', label: 'Send now' },\n { key: 'tomorrow', label: 'Tomorrow at 09:00', detail: 'The start of their day' },\n { key: 'monday', label: 'Monday at 09:00', detail: 'The start of next week' },\n];\n\nconst DEFAULT_LABELS: Required<DraftLabels> = {\n send: 'Send',\n schedule: 'Schedule',\n sending: 'Sending',\n scheduling: 'Scheduling',\n discard: 'Discard',\n notSent: 'Not sent',\n sent: 'Sent',\n scheduled: 'Scheduled',\n delivered: 'Delivered just now',\n discarded: 'Draft discarded',\n nothingSent: 'Nothing was sent',\n undo: 'Undo',\n cancel: 'Cancel',\n};\n\n/** The outcome row that takes the footer's place while the draft is not a draft. */\ninterface DoneRow {\n icon: VoIconName;\n small: boolean;\n cls: string;\n t: string;\n sub: string;\n btn?: string;\n}\n\n/** An email the agent drafted, to check and edit before it sends. */\n@Component({\n selector: 'vo-draft-review',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"className\" style=\"width:100%\" (keydown)=\"onKeydown($event)\">\n <div class=\"vo-drf vo-panel\" [class.vo-sent]=\"done\">\n <div class=\"vo-drf-h\">\n <span class=\"vo-drf-ag\"><vo-icon name=\"spark\"></vo-icon></span>\n <div class=\"vo-drf-ht\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n <span class=\"vo-tag vo-drf-tag\" [class.vo-ok]=\"phase === 'sent'\" [class.vo-b]=\"phase === 'scheduled'\">{{\n tagLabel\n }}</span>\n </div>\n\n <div class=\"vo-drf-fs\" [attr.inert]=\"done ? '' : null\">\n <div class=\"vo-drf-r\">\n <span class=\"vo-drf-l\">To</span>\n @for (p of to; track p.name) {\n <span class=\"vo-drf-p\"\n ><span class=\"vo-av\" [style.background]=\"p.color ?? 'var(--vo-av-l)'\">{{ initials(p) }}</span\n >{{ p.name }}</span\n >\n }\n </div>\n <label class=\"vo-drf-r\">\n <span class=\"vo-drf-l\">Subject</span>\n <input\n class=\"vo-drf-s\"\n [value]=\"subject\"\n [readOnly]=\"!editable\"\n (input)=\"onSubjectInput($event)\"\n aria-label=\"Subject\"\n />\n </label>\n </div>\n\n <div\n #body\n class=\"vo-drf-b\"\n [attr.contenteditable]=\"done ? null : 'true'\"\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label=\"Message\"\n spellcheck=\"false\"\n style=\"white-space:pre-wrap\"\n [attr.inert]=\"done ? '' : null\"\n (input)=\"onBodyInput()\"\n ></div>\n\n <div class=\"vo-drf-att\" [attr.inert]=\"done ? '' : null\">\n @for (a of attachments; track a.name) {\n <span class=\"vo-drf-file vo-enter\"\n ><vo-icon name=\"file-text\" size=\"xs\"></vo-icon><span>{{ a.name }}</span\n ><span class=\"vo-muted vo-drf-fz\">\n @if (a.loading) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n {{ a.size }}\n }\n </span></span\n >\n }\n </div>\n\n <div class=\"vo-fold vo-drf-wf\" [class.vo-shut]=\"!showWarning\" [attr.inert]=\"showWarning ? null : ''\">\n <div>\n <div class=\"vo-drf-w\">\n <p><vo-icon name=\"alert\" size=\"xs\"></vo-icon><span>{{ warning?.text }}</span></p>\n <div class=\"vo-drf-wa\">\n @for (a of warning?.actions ?? []; track a.label) {\n <button\n type=\"button\"\n class=\"vo-pill vo-sm\"\n [class.vo-primary]=\"a.primary\"\n [class.vo-ghost]=\"!a.primary\"\n (click)=\"a.onClick()\"\n >\n {{ a.label }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n\n @if (row; as r) {\n <div class=\"vo-drf-done vo-enter\" [class.vo-bin]=\"r.cls === 'vo-bin'\" [class.vo-later]=\"r.cls === 'vo-later'\">\n <vo-icon [name]=\"r.icon\" [size]=\"r.small ? 'xs' : 'md'\"></vo-icon>\n <span class=\"vo-t\">{{ r.t }}<span class=\"vo-muted vo-drf-sub\">{{ r.sub }}</span></span>\n @if (r.btn) {\n <button type=\"button\" class=\"vo-pill vo-sm\" (click)=\"undo.emit()\">{{ r.btn }}</button>\n }\n </div>\n } @else {\n <div class=\"vo-drf-f\">\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-drf-x\" [disabled]=\"busy\" (click)=\"discard.emit()\">\n <vo-icon name=\"trash\" size=\"xs\"></vo-icon>{{ L.discard }}\n </button>\n <span class=\"vo-sp\"></span>\n <span class=\"vo-muted vo-drf-when\">{{ later ? chosen.label : '' }}</span>\n <div class=\"vo-drf-mg\">\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-drf-go\"\n [disabled]=\"busy\"\n (click)=\"send.emit(chosen)\"\n >\n @if (busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>{{ later ? L.scheduling : L.sending }}\n } @else {\n <vo-icon [name]=\"later ? 'clock' : 'chev-r'\" size=\"xs\"></vo-icon>{{ later ? L.schedule : L.send }}\n }\n </button>\n <button\n #ddBtn\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-drf-dd\"\n aria-label=\"When to send\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen\"\n [disabled]=\"busy\"\n (click)=\"toggleMenu()\"\n >\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n </div>\n <div\n #pop\n class=\"vo-pop vo-drf-pop\"\n [class.vo-open]=\"menuOpen\"\n role=\"menu\"\n aria-label=\"When to send\"\n >\n @for (o of sendOptions; track o.key) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"o.key === chosen.key\"\n (click)=\"pick(o.key)\"\n >\n <span\n >{{ o.label }}@if (o.detail) {\n <span class=\"vo-d\">{{ o.detail }}</span>\n }</span\n >\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './draft-review.css',\n})\nexport class DraftReviewComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input() title = 'Draft from the agent';\n /** The line under the title, like \"After the pricing review with Maya\". */\n @Input() subtitle?: string;\n @Input() to: DraftRecipient[] = [];\n @Input() subject = '';\n /** The message as the agent wrote it. It stays editable; read edits from bodyChange. */\n @Input() body = '';\n @Input() attachments: DraftAttachment[] = [];\n /** A problem to settle before it sends. */\n @Input() warning: DraftWarning | null = null;\n @Input() phase: DraftPhase = 'draft';\n /** When to send, picked from the menu beside the button. */\n @Input() sendOptions: SendOption[] = WHEN;\n @Input() sendOption?: string;\n @Input() defaultSendOption?: string;\n /** Seconds left to undo, shown while the phase is undo. */\n @Input() undoLeft = 5;\n @Input() labels: DraftLabels = {};\n @Input() className?: string;\n\n @Output() subjectChange = new EventEmitter<string>();\n @Output() bodyChange = new EventEmitter<string>();\n @Output() sendOptionChange = new EventEmitter<string>();\n @Output() send = new EventEmitter<SendOption>();\n @Output() discard = new EventEmitter<void>();\n /** Takes it back: undoes a send in its window, cancels a scheduled one, or brings back a discarded draft. */\n @Output() undo = new EventEmitter<void>();\n\n @ViewChild('body') private bodyEl!: ElementRef<HTMLElement>;\n @ViewChild('ddBtn') private ddBtn?: ElementRef<HTMLButtonElement>;\n @ViewChild('pop') private pop?: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n menuOpen = false;\n // the body is written once and left to the browser while it is edited, so the caret stays where it is\n private bodyWritten = false;\n // internal pick holds its own when sendOption is left out (uncontrolled)\n private pickState = '';\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['sendOption'] || changes['defaultSendOption'] || changes['sendOptions']) {\n this.pickState =\n this.sendOption ?? this.defaultSendOption ?? this.sendOptions[0]?.key ?? this.pickState ?? '';\n }\n }\n\n ngAfterViewInit(): void {\n this.writeBody();\n document.addEventListener('pointerdown', this.onOutside, true);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onOutside, true);\n }\n\n private writeBody(): void {\n if (this.bodyWritten || !this.bodyEl) return;\n this.bodyEl.nativeElement.innerText = this.body;\n this.bodyWritten = true;\n }\n\n get L(): Required<DraftLabels> {\n return { ...DEFAULT_LABELS, ...this.labels };\n }\n\n get busy(): boolean {\n return this.phase === 'sending';\n }\n\n get done(): boolean {\n return this.phase !== 'draft' && this.phase !== 'sending';\n }\n\n get editable(): boolean {\n return !this.done && this.subjectChange.observed;\n }\n\n get pickedKey(): string {\n return this.sendOption ?? this.pickState;\n }\n\n get chosen(): SendOption {\n return this.sendOptions.find((o) => o.key === this.pickedKey) ?? this.sendOptions[0];\n }\n\n get later(): boolean {\n return this.chosen?.key !== 'now';\n }\n\n private get names(): string {\n return this.to.map((p) => p.name).join(', ');\n }\n\n get showWarning(): boolean {\n return !!this.warning && this.phase === 'draft';\n }\n\n get tagLabel(): string {\n return this.phase === 'sent' ? this.L.sent : this.phase === 'scheduled' ? this.L.scheduled : this.L.notSent;\n }\n\n get row(): DoneRow | null {\n const L = this.L;\n switch (this.phase) {\n case 'undo':\n return { icon: 'ok', small: false, cls: '', t: `${L.sent} to ${this.names}`, sub: `You can undo for ${this.undoLeft}s`, btn: L.undo };\n case 'sent':\n return { icon: 'ok', small: false, cls: '', t: `${L.sent} to ${this.names}`, sub: L.delivered };\n case 'scheduled':\n return {\n icon: 'clock',\n small: false,\n cls: 'vo-later',\n t: `${L.scheduled} for ${this.chosen.label.replace(/^\\w/, (c) => c.toLowerCase())}`,\n sub: `To ${this.names}`,\n btn: L.cancel,\n };\n case 'discarded':\n return { icon: 'trash', small: true, cls: 'vo-bin', t: L.discarded, sub: L.nothingSent, btn: L.undo };\n default:\n return null;\n }\n }\n\n initials(p: DraftRecipient): string {\n return (\n p.initials ??\n p.name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n );\n }\n\n onSubjectInput(e: Event): void {\n this.subjectChange.emit((e.target as HTMLInputElement).value);\n }\n\n onBodyInput(): void {\n this.bodyChange.emit(this.bodyEl.nativeElement.innerText);\n }\n\n pick(key: string): void {\n if (this.sendOption === undefined) this.pickState = key;\n this.sendOptionChange.emit(key);\n this.closeMenuSoon();\n }\n\n toggleMenu(): void {\n this.menuOpen = !this.menuOpen;\n }\n\n private closeMenuSoon(): void {\n setTimeout(() => (this.menuOpen = false), this.motion.reduce() ? 0 : 120);\n }\n\n onKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.menuOpen) {\n this.menuOpen = false;\n this.ddBtn?.nativeElement.focus({ preventScroll: true });\n }\n }\n\n private readonly onOutside = (e: PointerEvent): void => {\n if (!this.menuOpen) return;\n const t = e.target as Node;\n if (this.pop?.nativeElement.contains(t) || this.ddBtn?.nativeElement.contains(t)) return;\n this.menuOpen = false;\n };\n}\n","// framework/angular/error-recovery/error-recovery.component.ts\n//\n// Native Angular port of framework/react/error-recovery/ErrorRecovery.tsx.\n// A run that hit an error, with the steps around it and a choice of how the\n// agent should carry on. Each step carries a state (done, fail, run, wait,\n// skip or hand) that picks its glyph; the note under a step crossfades when it\n// changes. The choices fold away once Continue is pressed. Inputs mirror the\n// React props; React callbacks become @Output() EventEmitters.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** The state of one recovery step: picks its glyph and tone. */\nexport type RecoveryStepState = 'done' | 'fail' | 'run' | 'wait' | 'skip' | 'hand';\n\n/** One step in the run, around the one that failed. */\nexport interface RecoveryStep {\n label: string;\n /** done, fail (red note), run (spinner), wait (not started), skip (struck through) or hand (passed to a person) */\n state: RecoveryStepState;\n /** The quiet line under the step, like \"Done in 8s\" or the error. Crossfades when it changes */\n note?: string;\n}\n\n/** One of the ways the agent can carry on. */\nexport interface RecoveryOption {\n value: string;\n label: string;\n}\n\ninterface GlyphStyle {\n icon: VoIconName | null;\n color: string | null;\n}\n\n@Component({\n selector: 'vo-error-recovery',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-erx\"\n [class.vo-panel]=\"!bare\"\n [style.padding-inline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-erx-h\">\n <span class=\"vo-erx-t\">{{ title }}</span>\n @if (status !== undefined) {\n <span class=\"vo-erx-s vo-muted\">{{ status }}</span>\n }\n </div>\n <div class=\"vo-erx-list\">\n @for (s of steps; track $index) {\n <div class=\"vo-erx-row\" [class]=\"'vo-' + s.state\">\n <span class=\"vo-g\">\n @if (glyph(s.state).icon; as ic) {\n <span [style.color]=\"glyph(s.state).color\" style=\"display:grid\">\n <vo-icon [name]=\"ic\" size=\"xs\"></vo-icon>\n </span>\n } @else if (s.state === 'run') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"vo-dot\" style=\"color:var(--vo-faint)\" aria-hidden=\"true\"></span>\n }\n </span>\n <span class=\"vo-tx\"\n >{{ s.label }}<span class=\"vo-d\">{{ s.note ?? '' }}</span></span\n >\n </div>\n }\n </div>\n @if (isOpen) {\n <div class=\"vo-erx-box\">\n <div class=\"vo-erx-in\">\n <div class=\"vo-erx-q\">{{ question }}</div>\n <div class=\"vo-erx-opts\" role=\"radiogroup\" [attr.aria-label]=\"question\">\n @for (o of options; track o.value) {\n <button\n type=\"button\"\n class=\"vo-erx-o\"\n [class.vo-on]=\"o.value === pick\"\n role=\"radio\"\n [attr.aria-checked]=\"o.value === pick\"\n (click)=\"select(o.value)\"\n >\n <i></i><span>{{ o.label }}</span>\n </button>\n }\n </div>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-erx-go\" (click)=\"go()\">\n {{ continueLabel }}\n </button>\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './error-recovery.css',\n})\nexport class ErrorRecoveryComponent implements OnChanges {\n /** What the agent was doing, like \"Sync the pipeline to Sheets\". */\n @Input({ required: true }) title!: string;\n /** Where the run stands, like \"Stopped at step 2\". Crossfades when it changes. */\n @Input() status?: string;\n @Input({ required: true }) steps: RecoveryStep[] = [];\n /** The question above the choices. */\n @Input() question = 'How should the agent continue?';\n /** The ways the agent can carry on. */\n @Input({ required: true }) options: RecoveryOption[] = [];\n /** The chosen option. Leave it out to let the choices hold their own selection. */\n @Input() value?: string;\n /** Defaults to the first option. */\n @Input() defaultValue?: string;\n @Input() continueLabel = 'Continue';\n /** Whether the choices show. Leave it out and they fold away once Continue is pressed. */\n @Input() open?: boolean;\n @Input() defaultOpen = true;\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n @Output() valueChange = new EventEmitter<string>();\n /** Emitted with the chosen option when Continue is pressed. */\n @Output() continue = new EventEmitter<string>();\n @Output() openChange = new EventEmitter<boolean>();\n\n // reduced-motion is respected; the fold has no JS timer so there is nothing to shorten\n private readonly motion = inject(ReducedMotionService);\n\n pick = '';\n isOpen = true;\n private pickSet = false;\n private openSet = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] && this.value !== undefined) {\n this.pick = this.value;\n this.pickSet = true;\n } else if (!this.pickSet) {\n this.pick = this.defaultValue ?? this.options[0]?.value ?? '';\n }\n\n if (changes['open'] && this.open !== undefined) {\n this.isOpen = this.open;\n this.openSet = true;\n } else if (!this.openSet) {\n this.isOpen = this.defaultOpen;\n }\n }\n\n glyph(state: RecoveryStepState): GlyphStyle {\n switch (state) {\n case 'done':\n return { icon: 'check', color: 'var(--vo-ok)' };\n case 'fail':\n return { icon: 'alert', color: 'var(--vo-bad)' };\n case 'skip':\n return { icon: 'chev-r', color: null };\n case 'hand':\n return { icon: 'users', color: 'var(--vo-pl)' };\n default:\n // run (spinner) and wait (dot) have no icon\n return { icon: null, color: null };\n }\n }\n\n select(value: string): void {\n if (this.value === undefined) this.pick = value;\n this.valueChange.emit(value);\n }\n\n go(): void {\n if (this.open === undefined) this.isOpen = false;\n this.openChange.emit(false);\n this.continue.emit(this.pick);\n }\n}\n","// framework/angular/eval-results/eval-results.component.ts\n//\n// Native Angular port of framework/react/eval-results/EvalResults.tsx.\n// An eval suite's latest run: one bar segment per case, the pass count against\n// the run before, and the cases, all or only the failed ones. A failed case\n// opens to show what was expected and what came back, with a fix. Inputs mirror\n// the React props; callbacks become @Output EventEmitters.\n//\n// Icons: the case glyphs reuse the shared set — a passing case uses `ok`, a\n// failed one uses `alert` (as in the React source), and the run button uses\n// `play`; the chevron is `chev-d`. All are in the available icon list.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nexport type EvalStatus = 'queued' | 'running' | 'pass' | 'fail';\nexport type EvalFilter = 'all' | 'fail';\n\n/** A fix button under a failed case's details, like \"Use $24 and rerun\". */\nexport interface EvalFix {\n label: string;\n onClick: () => void;\n}\n\n/** One eval case: what it checks, how it did, and (for a failure) the details. */\nexport interface EvalCase {\n id: string;\n /** What it checks, like \"Prices match the billing table\". */\n name: string;\n status: EvalStatus;\n /** How long it took, like \"0.9s\", shown once it has a result. */\n time?: string;\n /** For a failed case: what should have come back. */\n expected?: string;\n /** For a failed case: what came back instead. */\n got?: string;\n /** For a failed case: where the expected answer comes from. */\n source?: string;\n /** For a failed case: a white button under its details, like \"Use $24 and rerun\". */\n fix?: EvalFix;\n}\n\n/** An eval suite's latest run: a bar per case, a pass count, and the cases. */\n@Component({\n selector: 'vo-eval-results',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgTemplateOutlet],\n template: `\n <div data-vo=\"\" class=\"vo-evr vo-panel\">\n <div class=\"vo-evr-h\">\n <div class=\"vo-evr-ht\">\n <b>{{ title }}</b>\n @if (subtitle !== undefined) {\n <span class=\"vo-sw vo-muted vo-evr-st\">{{ subtitle }}</span>\n }\n </div>\n @if (run.observed) {\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-evr-run\"\n [disabled]=\"running\"\n (click)=\"run.emit()\"\n >\n @if (running) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>Running\n } @else {\n <vo-icon name=\"play\" size=\"xs\"></vo-icon>{{ runLabel }}\n }\n </button>\n }\n </div>\n\n <div class=\"vo-evr-sum\">\n <div class=\"vo-evr-segs\" aria-hidden=\"true\">\n @for (k of cases; track k.id) {\n <i [class]=\"seg(k.status)\"></i>\n }\n </div>\n <div class=\"vo-evr-nums\">\n <span aria-live=\"polite\"><span class=\"vo-sw vo-evr-pass vo-num\">{{ count }}</span></span>\n @if (delta) {\n <span class=\"vo-tag vo-evr-dl vo-enter\" [class.vo-bad]=\"belowPrevious\" [class.vo-ok]=\"!belowPrevious\">{{ delta }}</span>\n }\n </div>\n </div>\n\n <div class=\"vo-evr-tabs\">\n <div class=\"vo-seg2\" role=\"group\" aria-label=\"Show\">\n <span class=\"vo-knob\" [class.vo-knob-r]=\"show === 'fail'\"></span>\n <button type=\"button\" [attr.aria-pressed]=\"show === 'all'\" (click)=\"pick('all')\">\n All <span class=\"vo-n vo-num\">{{ cases.length }}</span>\n </button>\n <button type=\"button\" [attr.aria-pressed]=\"show === 'fail'\" (click)=\"pick('fail')\">\n Failed <span class=\"vo-n vo-num\">{{ failed }}</span>\n </button>\n </div>\n </div>\n\n <div class=\"vo-evr-list\" role=\"list\" aria-label=\"Cases\">\n @for (k of cases; track k.id) {\n <div\n class=\"vo-fold vo-evr-w\"\n [class.vo-shut]=\"!(show === 'all' || k.status === 'fail')\"\n [attr.inert]=\"show === 'all' || k.status === 'fail' ? null : ''\"\n [attr.aria-hidden]=\"show === 'all' || k.status === 'fail' ? null : 'true'\"\n >\n <div>\n <div class=\"vo-evr-i\" [class]=\"'vo-evr-i vo-' + k.status\" role=\"listitem\">\n @if (k.status === 'fail') {\n <button type=\"button\" class=\"vo-evr-r\" [attr.aria-expanded]=\"isOpen(k)\" (click)=\"toggle(k)\">\n <ng-container [ngTemplateOutlet]=\"meta\" [ngTemplateOutletContext]=\"{ k: k }\"></ng-container>\n <span class=\"vo-evr-ch\"><vo-icon name=\"chev-d\" size=\"xs\"></vo-icon></span>\n </button>\n <div\n class=\"vo-fold vo-evr-d\"\n [class.vo-shut]=\"!isOpen(k)\"\n [attr.inert]=\"isOpen(k) ? null : ''\"\n [attr.aria-hidden]=\"isOpen(k) ? null : 'true'\"\n >\n <div>\n <div class=\"vo-evr-dd\">\n @if (k.expected) {\n <span class=\"vo-evr-kv\"><span class=\"vo-k\">Expected</span><span>{{ k.expected }}</span></span>\n }\n @if (k.got) {\n <span class=\"vo-evr-kv\"><span class=\"vo-k\">Got</span><span class=\"vo-bad\">{{ k.got }}</span></span>\n }\n @if (k.source) {\n <span class=\"vo-evr-kv\"><span class=\"vo-k\">Source</span><span>{{ k.source }}</span></span>\n }\n @if (k.fix) {\n <button type=\"button\" class=\"vo-pill vo-sm vo-evr-fix\" (click)=\"k.fix.onClick()\">{{ k.fix.label }}</button>\n }\n </div>\n </div>\n </div>\n } @else {\n <div class=\"vo-evr-r\">\n <ng-container [ngTemplateOutlet]=\"meta\" [ngTemplateOutletContext]=\"{ k: k }\"></ng-container>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (show === 'fail' && !failed) {\n <p class=\"vo-evr-none\">No failed cases</p>\n }\n </div>\n\n <ng-template #meta let-k=\"k\">\n <span class=\"vo-evr-g vo-enter\" aria-hidden=\"true\">\n @switch (k.status) {\n @case ('running') { <span class=\"vo-spin\"></span> }\n @case ('pass') { <vo-icon name=\"ok\" size=\"xs\"></vo-icon> }\n @case ('fail') { <vo-icon name=\"alert\" size=\"xs\"></vo-icon> }\n @default { <span class=\"vo-dot\"></span> }\n }\n </span>\n <span class=\"vo-evr-n\">{{ k.name }}</span>\n <span class=\"vo-evr-tm vo-num\">{{ k.status === 'pass' || k.status === 'fail' ? (k.time ?? '') : '' }}</span>\n </ng-template>\n `,\n styleUrl: './eval-results.css',\n})\nexport class EvalResultsComponent implements OnChanges, OnDestroy {\n /** Like \"Pricing copy evals\". */\n @Input() title = '';\n /** The line under the title, like \"Copy agent · 8 cases · run 2h ago\". */\n @Input() subtitle?: string;\n @Input() cases: EvalCase[] = [];\n /** Whether the whole suite is running: the button spins and the count reads \"Running 3 of 8\". */\n @Input() running = false;\n /** Defaults to \"Run evals\". */\n @Input() runLabel = 'Run evals';\n /** How many passed the run before. Once the run settles, a tag compares with it. */\n @Input() previousPassed?: number;\n /** Which cases show: all of them, or only the failed ones. */\n @Input() filter?: EvalFilter;\n @Input() defaultFilter: EvalFilter = 'all';\n /** Ids of the failed cases that are open. Leave it out to let each one open itself. */\n @Input() open?: string[];\n @Input() defaultOpen: string[] = [];\n\n /** Emitted by the run button. */\n @Output() run = new EventEmitter<void>();\n @Output() filterChange = new EventEmitter<EvalFilter>();\n @Output() openChange = new EventEmitter<string[]>();\n\n // NgTemplateOutlet is used by the inline template above.\n // (It is part of CommonModule; the directive is referenced structurally.)\n\n private readonly motion = inject(ReducedMotionService);\n\n show: EvalFilter = 'all';\n opened: string[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultFilter'] || changes['filter']) {\n this.show = this.filter ?? this.defaultFilter;\n }\n if (changes['defaultOpen'] || changes['open']) {\n this.opened = this.open ?? this.defaultOpen;\n }\n // the motion service is read so reduced-motion users get instant transitions via CSS\n void this.motion;\n }\n\n get failed(): number {\n return this.cases.filter((k) => k.status === 'fail').length;\n }\n\n private get passed(): number {\n return this.cases.filter((k) => k.status === 'pass').length;\n }\n\n private get settled(): boolean {\n return this.cases.every((k) => k.status === 'pass' || k.status === 'fail');\n }\n\n get count(): string {\n if (this.settled) return `${this.passed} of ${this.cases.length} passed`;\n if (this.running) return `Running ${this.passed + this.failed + 1} of ${this.cases.length}`;\n return 'Running the case again';\n }\n\n get belowPrevious(): boolean {\n return this.passed < (this.previousPassed ?? 0);\n }\n\n get delta(): string {\n if (!this.settled || this.running || this.previousPassed === undefined) return '';\n if (this.passed === this.cases.length) return 'All passing';\n if (this.passed < this.previousPassed) return `${this.previousPassed - this.passed} fewer than the last run`;\n if (this.passed > this.previousPassed) return `${this.passed - this.previousPassed} more than the last run`;\n return '';\n }\n\n seg(status: EvalStatus): string {\n return status === 'queued' ? '' : 'vo-' + status;\n }\n\n isOpen(k: EvalCase): boolean {\n return k.status === 'fail' && this.opened.includes(k.id);\n }\n\n pick(v: EvalFilter): void {\n if (this.filter === undefined) this.show = v;\n this.filterChange.emit(v);\n }\n\n toggle(k: EvalCase): void {\n const next = this.isOpen(k)\n ? this.opened.filter((id) => id !== k.id)\n : [...this.opened, k.id];\n if (this.open === undefined) this.opened = next;\n this.openChange.emit(next);\n }\n\n ngOnDestroy(): void {\n // no timers held by this component\n }\n}\n","// framework/angular/feedback-sheet/feedback-sheet.component.ts\n//\n// Native Angular port of framework/react/feedback-sheet/FeedbackSheet.tsx.\n// Rate an answer with the thumbs; thumbs down opens a sheet to say what missed,\n// with quick reasons and a free-text box. Send shows a spinner, then the sheet\n// folds away and a thank-you line enters. Thumbs up just notes it. Inputs mirror\n// the React props; React callbacks become @Output() EventEmitters.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Whether the answer was rated good or bad. */\nexport type FeedbackRating = 'up' | 'down' | null;\n\n/** What was picked and written when the sheet is sent. */\nexport interface Feedback {\n reasons: string[];\n comment: string;\n}\n\nconst REASONS = ['Wrong spacing', 'Ignored my tokens', 'Too many changes', 'Broke the layout'];\n\n@Component({\n selector: 'vo-feedback-sheet',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-fbx\"\n [class.vo-panel]=\"!bare\"\n [style.padding]=\"bare ? null : '16px'\"\n >\n @if (message) {\n <p class=\"vo-msg\">{{ message }}</p>\n }\n <div class=\"vo-fbx-bar\">\n <button\n type=\"button\"\n class=\"vo-ib vo-fbx-up\"\n [class.vo-on]=\"rate === 'up'\"\n aria-label=\"Good answer\"\n title=\"Good answer\"\n [attr.aria-pressed]=\"rate === 'up'\"\n (click)=\"up()\"\n >\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n <button\n type=\"button\"\n class=\"vo-ib vo-fbx-dn\"\n [class.vo-on]=\"rate === 'down'\"\n aria-label=\"Bad answer\"\n title=\"Bad answer\"\n [attr.aria-pressed]=\"rate === 'down'\"\n (click)=\"down(true)\"\n >\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n <span aria-live=\"polite\"\n ><span class=\"vo-sw vo-fbx-st vo-muted\" [class.vo-out]=\"stOut\">{{ stShown }}</span></span\n >\n </div>\n <div class=\"vo-fold vo-fbx-box\" [class.vo-shut]=\"!isOpen\">\n <div>\n <div class=\"vo-fbx-in vo-panel\">\n <div class=\"vo-fbx-q\">{{ question }}</div>\n @if (reasons.length > 0) {\n <div class=\"vo-fbx-ch\">\n @for (r of reasons; track r) {\n <button\n type=\"button\"\n class=\"vo-chip vo-sm\"\n [class.vo-on]=\"picked.includes(r)\"\n [attr.aria-pressed]=\"picked.includes(r)\"\n (click)=\"toggle(r)\"\n >\n {{ r }}\n </button>\n }\n </div>\n }\n <textarea\n #box\n class=\"vo-fbx-ta\"\n rows=\"2\"\n [placeholder]=\"placeholder\"\n [value]=\"comment\"\n (input)=\"onComment(box.value)\"\n ></textarea>\n <div class=\"vo-fbx-f\">\n <span class=\"vo-muted vo-fbx-n\">{{ note }}</span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-fbx-x\" (click)=\"cancel()\">\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-fbx-go\"\n [disabled]=\"!(picked.length || comment.trim())\"\n [attr.aria-busy]=\"sending ? true : null\"\n (click)=\"send()\"\n >\n @if (sending) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n Send\n }\n </button>\n </div>\n </div>\n </div>\n </div>\n @if (sent) {\n <div class=\"vo-fbx-thx vo-enter\" role=\"status\">\n <vo-icon name=\"ok\" size=\"sm\"></vo-icon>\n <span>{{ thanksLine }}</span>\n </div>\n }\n </div>\n `,\n styleUrl: './feedback-sheet.css',\n})\nexport class FeedbackSheetComponent implements OnChanges, OnDestroy {\n /** The answer being rated, shown above the thumbs. */\n @Input() message?: string;\n\n /** Whether the answer was rated good or bad. Leave it out to let the thumbs set it. */\n @Input() rating?: FeedbackRating;\n @Input() defaultRating: FeedbackRating = null;\n\n /** Whether the reasons sheet is open. Leave it out and thumbs down opens it. */\n @Input() open?: boolean;\n @Input() defaultOpen = false;\n\n /** The reasons picked. Leave it out to let the chips keep it. */\n @Input() selected?: string[];\n @Input() defaultSelected: string[] = [];\n\n /** What is written in the box. Leave it out to let the box keep it. */\n @Input() comment = '';\n @Input() defaultComment = '';\n\n /** Shows the spinner on Send, for a scripted demo. */\n @Input() sending = false;\n\n /** The heading of the sheet that opens on thumbs down. */\n @Input() question = 'What went wrong?';\n /** Quick reasons to pick from. */\n @Input() reasons: string[] = REASONS;\n @Input() placeholder = 'Anything else the agent should know';\n /** A quiet note beside the buttons, like who sees the feedback. */\n @Input() note = 'Shared with the agent for this project';\n\n /** What was sent, which shows the thank-you line. Leave it out and Send sets it. */\n @Input() sent: Feedback | null = null;\n\n /** Sits flat under a message in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n @Output() ratingChange = new EventEmitter<FeedbackRating>();\n @Output() openChange = new EventEmitter<boolean>();\n @Output() selectedChange = new EventEmitter<string[]>();\n @Output() commentChange = new EventEmitter<string>();\n @Output() sentChange = new EventEmitter<Feedback | null>();\n /** Called with what the person picked and wrote when Send is pressed. */\n @Output() submit = new EventEmitter<Feedback>();\n\n @ViewChild('box') private boxRef?: ElementRef<HTMLTextAreaElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n rate: FeedbackRating = null;\n isOpen = false;\n picked: string[] = [];\n\n // crossfading status line, like the React <Swap>\n stShown = '';\n stOut = false;\n\n private rateSet = false;\n private openSet = false;\n private selSet = false;\n private busy = false;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n\n get thanksLine(): string {\n const n = this.sent?.reasons.length ?? 0;\n return `Thanks. The agent will ${n ? 'avoid this' : 'use this'} next time in this project.`;\n }\n\n private get status(): string {\n return this.sent ? 'Feedback sent' : this.rate === 'up' ? 'Thanks, noted' : '';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['rating'] && this.rating !== undefined) {\n this.rate = this.rating;\n this.rateSet = true;\n } else if (!this.rateSet) {\n this.rate = this.defaultRating;\n }\n\n if (changes['open'] && this.open !== undefined) {\n this.isOpen = this.open;\n this.openSet = true;\n } else if (!this.openSet) {\n this.isOpen = this.defaultOpen;\n }\n\n if (changes['selected'] && this.selected !== undefined) {\n this.picked = [...this.selected];\n this.selSet = true;\n } else if (!this.selSet) {\n this.picked = [...this.defaultSelected];\n }\n\n if (changes['comment'] && this.comment === undefined) this.comment = this.defaultComment;\n\n this.swap(this.status);\n }\n\n private later(ms: number, fn: () => void): void {\n const t = setTimeout(() => {\n this.timers.delete(t);\n fn();\n }, this.motion.reduce() ? 0 : ms);\n this.timers.add(t);\n }\n\n /** Crossfade the status line to the next text. */\n private swap(next: string): void {\n if (next === this.stShown) return;\n if (!this.stShown || this.motion.reduce()) {\n this.stShown = next;\n return;\n }\n this.stOut = true;\n this.later(200, () => {\n this.stShown = next;\n this.stOut = false;\n });\n }\n\n private setRate(next: FeedbackRating): void {\n if (this.rating === undefined) this.rate = next;\n this.ratingChange.emit(next);\n this.swap(this.status);\n }\n\n private setOpen(next: boolean): void {\n if (this.open === undefined) this.isOpen = next;\n this.openChange.emit(next);\n }\n\n up(): void {\n const on = this.rate !== 'up';\n this.setRate(on ? 'up' : null);\n this.setOpen(false);\n }\n\n down(focus: boolean): void {\n const on = this.rate !== 'down';\n this.setRate(on ? 'down' : null);\n this.setOpen(on);\n // the sheet opens first, then the cursor goes to the box\n if (on && focus) this.later(350, () => this.boxRef?.nativeElement.focus({ preventScroll: true }));\n }\n\n toggle(reason: string): void {\n const next = this.picked.includes(reason)\n ? this.picked.filter((x) => x !== reason)\n : [...this.picked, reason];\n if (this.selected === undefined) this.picked = next;\n this.selectedChange.emit(next);\n }\n\n onComment(value: string): void {\n if (this.comment === undefined) this.comment = value;\n this.commentChange.emit(value);\n }\n\n cancel(): void {\n this.setOpen(false);\n this.setRate(null);\n }\n\n send(): void {\n if (this.sending || this.busy) return;\n const f: Feedback = { reasons: this.picked, comment: this.comment.trim() };\n this.busy = true;\n this.submit.emit(f);\n // a scripted demo drives the spinner via [sending]; the local flow folds away\n this.later(800, () => {\n this.busy = false;\n this.setOpen(false);\n this.later(300, () => {\n if (this.sent === null) this.sent = f;\n this.sentChange.emit(f);\n this.swap(this.status);\n });\n });\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/field-extraction/field-extraction.component.ts\n//\n// Native Angular port of framework/react/field-extraction/FieldExtraction.tsx.\n// The agent reads fields off a document on the left and lists them on the right,\n// each with how sure it is. A field it is unsure of asks the person to check it:\n// they type the value into the field itself and confirm with Enter or by clicking\n// away. A new field lights its source zone for a moment; each time `reading` turns\n// true a scan line passes down the page. Send waits until every field is sure or\n// checked. Inputs mirror the React props; React callbacks become @Output emitters.\n//\n// The source zones are projected content: wrap the parts of the page a field comes\n// from in `<div vo-field-zone field=\"...\">` (VoFieldZoneComponent). The zone lights\n// up while its field is being read, hovered or checked. The CSS is copied unchanged\n// from the Vanilla field-extraction.css (via the shared --vo-* tokens).\n//\n// Icon substitutions: the React source uses the Phosphor \"edit\" (pencil) glyph on\n// the Check button and \"check\" on the sent button; both exist in the Angular icon\n// set, so no substitution was needed.\n\nimport {\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A field the agent read off the page, with how sure it is. */\nexport interface ExtractedField {\n /** Ties the field to the zone it was read from. */\n key: string;\n /** Like \"Invoice no.\" */\n label: string;\n value: string;\n /** 0 to 1. Under 0.6 the field asks the person to check it. */\n confidence: number;\n /** What the value starts as when the person checks it, like the value without its unsure digit. */\n suggestion?: string;\n /** The person has checked it. Shows \"Fixed\" with a full bar. */\n fixed?: boolean;\n}\n\n/** idle shows sendLabel, sending a spinner, sent a check and sentLabel. */\nexport type FieldSendState = 'idle' | 'sending' | 'sent';\n\n/**\n * A part of the page a field was read from. It lights up while its field is read,\n * hovered or checked. Host element carries the zone classes so projected markup\n * keeps its own structure.\n */\n@Component({\n selector: '[vo-field-zone]',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `<ng-content></ng-content>`,\n host: {\n class: 'vo-fex-z',\n '[class.vo-scan]': 'scan',\n '[class.vo-warn]': 'warn',\n '[class.vo-hl]': 'lit',\n },\n})\nexport class VoFieldZoneComponent {\n /** The field key this zone belongs to. */\n @Input('field') field = '';\n\n scan = false;\n warn = false;\n lit = false;\n}\n\n@Component({\n selector: 'vo-field-extraction',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-fex\" [class]=\"classMap\">\n <div class=\"vo-fex-doc\" #doc>\n <div class=\"vo-fex-pg\"><ng-content></ng-content></div>\n @if (passes > 0) {\n <div class=\"vo-fex-beam vo-go\" [attr.data-pass]=\"passes\" aria-hidden=\"true\"></div>\n }\n </div>\n <div class=\"vo-fex-side vo-panel\">\n <div class=\"vo-fex-sh\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-fex-st\">{{ editing ? checkHint : status }}</span>\n </div>\n <div class=\"vo-fex-list\">\n @for (f of fields; track f.key) {\n <div\n class=\"vo-fex-r vo-enter\"\n [class.vo-warn]=\"needsCheck(f)\"\n (mouseenter)=\"hover = f.key; sync()\"\n (mouseleave)=\"onLeave(f.key)\"\n >\n <span class=\"vo-k\">{{ f.label }}</span>\n @if (editing === f.key) {\n <span\n #edit\n class=\"vo-v vo-num\"\n contenteditable=\"true\"\n role=\"textbox\"\n aria-label=\"Value\"\n (keydown)=\"onKey($event, f)\"\n (blur)=\"finish(f)\"\n ></span>\n } @else {\n <span class=\"vo-v vo-num\">{{ f.value }}</span>\n }\n @if (needsCheck(f)) {\n <span class=\"vo-fex-cf\">\n <button\n type=\"button\"\n class=\"vo-fex-fix\"\n [attr.data-tip]=\"pct(f) + '% sure, check it'\"\n (click)=\"startCheck(f)\"\n >\n <vo-icon name=\"edit\" size=\"xs\"></vo-icon>Check\n </button>\n </span>\n } @else {\n <span class=\"vo-fex-cf\" [class.vo-enter]=\"f.fixed\">\n <i><b [style.width.%]=\"f.fixed ? 100 : pct(f)\"></b></i>{{ f.fixed ? 'Fixed' : pct(f) + '%' }}\n </span>\n }\n </div>\n }\n </div>\n <div class=\"vo-fex-f\">\n <button\n type=\"button\"\n class=\"vo-pill vo-sm\"\n [class.vo-soft]=\"sendState === 'sent'\"\n [class.vo-primary]=\"sendState !== 'sent'\"\n [disabled]=\"!ready\"\n (click)=\"send()\"\n >\n @if (sendState === 'sending') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else if (sendState === 'sent') {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>{{ sentLabel }}\n } @else {\n {{ sendLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n `,\n styleUrl: './field-extraction.css',\n})\nexport class FieldExtractionComponent implements OnChanges, OnDestroy {\n /** The fields found so far, in order. Each new one slides in and its zone lights up for a moment. */\n @Input() fields: ExtractedField[] = [];\n /** A scan line passes down the page each time this turns true, and Send waits while it is true. */\n @Input() reading = false;\n /** The quiet line by the title, like \"Reading page 1\". */\n @Input() status = '';\n /** Replaces the status while a field is being checked. */\n @Input() checkHint = 'Type the value you see';\n @Input() title = 'Extracted fields';\n /** The button under the fields. It waits until every field is sure or checked. */\n @Input() sendLabel = 'Send';\n /** idle shows sendLabel, sending a spinner, sent a check and sentLabel. */\n @Input() sendState: FieldSendState = 'idle';\n @Input() sentLabel = 'Sent';\n @Input() className = '';\n\n /** Called when a checked field is confirmed with Enter or by clicking away. */\n @Output() fix = new EventEmitter<{ key: string; value: string }>();\n @Output() onSend = new EventEmitter<void>();\n\n @ContentChildren(VoFieldZoneComponent) zones!: QueryList<VoFieldZoneComponent>;\n @ViewChild('edit') editEl?: ElementRef<HTMLSpanElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n hover: string | null = null;\n editing: string | null = null;\n /** A scan line pass count; each new value restarts the beam animation. */\n passes = 0;\n\n // a new field lights its zone for half a second\n private scan: string[] = [];\n private known = new Set<string>();\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private finished = false;\n\n /** Extra classes from `className`, merged onto the static `vo-fex`. */\n get classMap(): Record<string, boolean> {\n const map: Record<string, boolean> = {};\n for (const c of this.className.split(/\\s+/).filter(Boolean)) map[c] = true;\n return map;\n }\n\n needsCheck(f: ExtractedField): boolean {\n return f.confidence < 0.6 && !f.fixed;\n }\n\n pct(f: ExtractedField): number {\n return Math.round(f.confidence * 100);\n }\n\n get ready(): boolean {\n return !this.reading && this.fields.length > 0 && !this.fields.some((f) => this.needsCheck(f));\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['fields']) {\n const fresh = this.fields.map((f) => f.key).filter((k) => !this.known.has(k));\n if (fresh.length) {\n fresh.forEach((k) => this.known.add(k));\n this.scan = [...this.scan, ...fresh];\n const t = setTimeout(\n () => {\n this.scan = this.scan.filter((k) => !fresh.includes(k));\n this.timers.delete(t);\n this.sync();\n },\n this.motion.reduce() ? 0 : 500\n );\n this.timers.add(t);\n }\n }\n if (changes['reading']) {\n const prev = changes['reading'].previousValue;\n if (this.reading && !prev && !changes['reading'].firstChange) this.passes += 1;\n else if (this.reading && changes['reading'].firstChange) this.passes = 1;\n }\n this.sync();\n }\n\n /** Push the current lit/scan/warn state onto the projected zones. */\n sync(): void {\n if (!this.zones) return;\n const lit = this.editing ?? this.hover;\n const warn = this.fields.filter((f) => this.needsCheck(f)).map((f) => f.key);\n this.zones.forEach((z) => {\n z.lit = z.field === lit;\n z.scan = this.scan.includes(z.field);\n z.warn = warn.includes(z.field);\n });\n }\n\n onLeave(key: string): void {\n if (this.hover === key) this.hover = null;\n this.sync();\n }\n\n startCheck(f: ExtractedField): void {\n this.editing = f.key;\n this.finished = false;\n this.sync();\n // place the caret at the end of the suggestion once the field renders\n const t = setTimeout(() => {\n const v = this.editEl?.nativeElement;\n if (!v) return;\n v.textContent = f.suggestion ?? f.value;\n v.focus({ preventScroll: true });\n const s = getSelection();\n s?.selectAllChildren(v);\n s?.collapseToEnd();\n this.timers.delete(t);\n });\n this.timers.add(t);\n }\n\n onKey(e: KeyboardEvent, f: ExtractedField): void {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.finish(f);\n }\n }\n\n finish(f: ExtractedField): void {\n if (this.editing !== f.key || this.finished) return;\n this.finished = true;\n const value = this.editEl?.nativeElement.textContent ?? f.suggestion ?? f.value;\n this.editing = null;\n this.sync();\n this.fix.emit({ key: f.key, value });\n }\n\n send(): void {\n if (this.sendState === 'idle') this.onSend.emit();\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/funnel-chart/funnel-chart.component.ts\n//\n// Native Angular port of framework/react/funnel-chart/FunnelChart.tsx.\n// How many people reach each stage, with the biggest drop marked and a note\n// from the agent. The bars draw a moment after the funnel appears, then redraw\n// top to bottom on every view switch; the note crossfades on a switch. Inputs\n// mirror the React props. Behaviour ported from the vanilla JS (funnel-chart.js):\n// a staggered glide of each bar's width (and its count's position), the worst\n// drop marked, and a blur-swap note.\n//\n// Icon: uses `spark` (the only available match for the React `spark` glyph).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One set of numbers, picked by the switch. */\nexport interface FunnelChartView {\n key: string;\n /** On the switch, like \"Teams\". */\n label: string;\n /** How many reached each stage, in order. */\n values: number[];\n /** The agent's note under the funnel for this view. */\n insight?: string;\n}\n\n/** Internal per-stage render state. */\ninterface RowView {\n stage: string;\n index: number;\n fc: string;\n width: number;\n count: string;\n out: boolean;\n drop: boolean;\n change: string;\n tip: string;\n}\n\n@Component({\n selector: 'vo-funnel-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-fnx vo-panel\">\n <div class=\"vo-fnx-h\">\n <b>{{ title }}</b>\n @if (views.length > 1) {\n <div class=\"vo-seg2 vo-fnx-sg\" role=\"group\" aria-label=\"Segment\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (v of views; track v.key) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"v.key === cur\"\n (click)=\"select(v.key)\"\n >{{ v.label }}</button>\n }\n </div>\n }\n </div>\n <div class=\"vo-fnx-rows\">\n @for (r of rows; track r.index) {\n <div class=\"vo-fnx-r\" [class.vo-drop]=\"r.drop\" [style.--vo-fc]=\"r.fc\" [attr.title]=\"r.tip\">\n <span class=\"vo-k\">{{ r.stage }}</span>\n <div class=\"vo-tr\">\n <div class=\"vo-bar\" [style.width.%]=\"r.width\"></div>\n <span\n class=\"vo-n vo-num\"\n [class.vo-out]=\"r.out\"\n [style.left]=\"r.out ? 'calc(' + r.width + '% + 8px)' : '10px'\"\n >{{ r.count }}</span>\n </div>\n <span class=\"vo-v vo-num\">{{ r.change }}</span>\n </div>\n }\n </div>\n @if (hasInsight) {\n <div class=\"vo-fnx-ins\">\n <span class=\"vo-fnx-ic\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon></span>\n <span class=\"vo-sw vo-fnx-t\" [class.vo-out]=\"noteOut\">{{ note }}</span>\n </div>\n }\n </div>\n `,\n styleUrl: './funnel-chart.css',\n})\nexport class FunnelChartComponent implements AfterViewInit, OnDestroy {\n /** Like \"Signup to paid\". */\n @Input({ required: true }) title = '';\n /** The stages in order, like \"Signed up\" then \"Opened a file\". */\n @Input({ required: true }) stages: string[] = [];\n /** One set of numbers per view. With more than one, a switch picks between them. */\n @Input({ required: true }) views: FunnelChartView[] = [];\n /** Key of the view shown. Leave it out to let the switch change it. */\n @Input() set view(value: string | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.cur) {\n this.cur = value;\n if (this.ready) {\n this.placeKnob();\n this.draw(this.cur);\n }\n }\n }\n /** Defaults to the first view. */\n @Input() defaultView?: string;\n /** Ends a stage's tip, like \"of signups\" in \"51.8% of signups\". */\n @Input() shareLabel = 'of the first stage';\n /** The first stage's tip. */\n @Input() startLabel = 'Starting point';\n /** Writes a count. Defaults to whole numbers like 12,400. */\n @Input() format: (n: number) => string = (n) => Math.round(n).toLocaleString('en-US');\n\n @Output() viewChange = new EventEmitter<string>();\n\n cur = '';\n rows: RowView[] = [];\n knobLeft = 0;\n knobWidth = 0;\n note = '';\n noteOut = false;\n hasInsight = false;\n\n private controlled = false;\n private ready = false;\n private noteId = 0;\n private timers: ReturnType<typeof setTimeout>[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.cur = this.defaultView ?? this.views[0]?.key ?? '';\n this.hasInsight = this.views.some((v) => v.insight !== undefined);\n const last = Math.max(1, this.stages.length - 1);\n this.rows = this.stages.map((stage, index) => ({\n stage,\n index,\n fc: `color-mix(in oklab,var(--vo-c1) ${Math.round(100 - (index * 100) / last)}%,var(--vo-c2))`,\n width: 0,\n count: '',\n out: false,\n drop: false,\n change: '',\n tip: '',\n }));\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n // the first draw starts a moment after the funnel appears, and its note fades in after it\n this.later(() => this.draw(this.cur), 280);\n this.note = this.byKey(this.cur)?.insight ?? '';\n }\n\n select(key: string): void {\n if (!this.controlled) {\n this.cur = key;\n this.placeKnob();\n this.draw(key);\n }\n this.viewChange.emit(key);\n }\n\n private byKey(key: string): FunnelChartView | undefined {\n return this.views.find((v) => v.key === key);\n }\n\n private draw(key: string): void {\n const shown = this.byKey(key);\n const d = shown?.values ?? [];\n // the stage that loses the largest share of the one before it\n let worst = -1;\n let ratio = 1;\n d.forEach((n, i) => {\n if (i && n / d[i - 1] < ratio) {\n ratio = n / d[i - 1];\n worst = i;\n }\n });\n this.rows.forEach((row, i) => {\n const w = d.length ? Math.max(6, (d[i] / d[0]) * 100) : 0;\n row.width = w;\n row.out = w < 24;\n row.count = shown ? this.format(d[i]) : '';\n row.change = shown ? (i ? '−' + Math.round((1 - d[i] / d[i - 1]) * 100) + '%' : '100%') : '';\n row.drop = i === worst;\n row.tip = shown\n ? i\n ? `${Math.round((d[i] / d[0]) * 1000) / 10}% ${this.shareLabel}`\n : this.startLabel\n : '';\n });\n this.say(shown?.insight ?? '');\n this.cdr.markForCheck();\n }\n\n // the note crossfades on a switch; the newest note is the one that lands\n private say(text: string): void {\n const id = ++this.noteId;\n if (this.note === text && !this.noteOut) return;\n this.noteOut = true;\n this.later(() => {\n if (id !== this.noteId) return;\n this.note = text;\n this.noteOut = false;\n this.cdr.markForCheck();\n }, this.reduced.reduce() ? 0 : 170);\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-fnx-sg button');\n const idx = this.views.findIndex((v) => v.key === this.cur);\n const b = btns[idx];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.timers = [];\n }\n}\n","// framework/angular/grid/grid.component.ts\n//\n// Native Angular port of framework/react/grid/Grid.tsx.\n// A responsive grid you drop cards or any other components into. Inputs mirror\n// the React props. Use the `voGridItem` directive on a child to span columns.\n//\n// The grid class and CSS vars live on the host element itself (not a wrapper),\n// so projected children are direct children of `.vo-grd` and the `>` span\n// selectors apply.\n\nimport { Component, Directive, Input, ViewEncapsulation } from '@angular/core';\n\n/** A core spacing token (1–8) for the gutter, or a raw CSS length. */\nexport type GridGap = 1 | 2 | 3 | 4 | 5 | 6 | 8 | string;\n\n@Component({\n selector: 'vo-grid',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'vo-grd',\n '[attr.data-fit]': \"fit ? 'true' : null\",\n '[style.--grd-cols]': 'cols',\n '[style.--grd-gap]': 'gapVar',\n '[style.--grd-min]': 'min',\n },\n template: `<ng-content></ng-content>`,\n styleUrl: './grid.css',\n})\nexport class GridComponent {\n /** A fixed column count. Ignored when `fit` is set. 3 by default. */\n @Input() cols = 3;\n /** Pack as many columns as fit at `min` width, reflowing with no column count. */\n @Input() fit = false;\n /** Minimum column width when `fit` is set. '200px' by default. */\n @Input() min = '200px';\n /** The gutter: a core spacing step (1–8) or a raw CSS length. 4 by default. */\n @Input() gap: GridGap = 4;\n\n get gapVar(): string {\n return typeof this.gap === 'number' ? `var(--vo-s-${this.gap})` : this.gap;\n }\n}\n\n/** A grid child that spans more than one column (2, 3, 4) or the full row ('full'). */\n@Directive({\n selector: '[voGridItem]',\n standalone: true,\n host: { '[attr.data-span]': 'span || null' },\n})\nexport class GridItemDirective {\n @Input('voGridItem') span: 2 | 3 | 4 | 'full' | '' = '';\n}\n","// framework/angular/health-score/health-score.component.ts\n//\n// Native Angular port of framework/react/health-score/HealthScore.tsx.\n// One score for a design system, with the checks behind it. A half-gauge shows\n// the overall score; open a check to see why (and Fix it from there). Pointing\n// at a check — or tabbing to it — swings the gauge to that check's score and\n// names it; leaving the list swings back. Inputs mirror the React props; the\n// gauge roll, the staggered bar fill and the swap/fold follow the vanilla JS\n// (health-score.js).\n//\n// Icons: the chevron is `chev-r` (available). The Fix button uses `spark` in\n// place of the upstream `wand` glyph, which is not in the Angular icon set.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One check behind the score. */\nexport interface HealthScoreCheck {\n /** Identifies the check. Defaults to its label. */\n key?: string;\n /** Like \"Contrast\". */\n label: string;\n /** 0 to 100. From 90 it is green, from 80 the accent, below that red. */\n score: number;\n /** One line under the check when it is open, like \"2 text pairs below AA on the pricing page\". */\n detail: string;\n /** Adds a Fix button to the open check. */\n fixable?: boolean;\n}\n\nconst ARC = 157;\nconst tone = (v: number): string =>\n v >= 90 ? 'var(--vo-hs-ok)' : v >= 80 ? 'var(--vo-accent)' : 'var(--vo-hs-bad)';\nconst keyOf = (c: HealthScoreCheck): string => c.key ?? c.label;\n\n/** Per-check render state. */\ninterface CheckView {\n check: HealthScoreCheck;\n index: number;\n key: string;\n open: boolean;\n /** The bar has filled (staggered in after the card appears). */\n filled: boolean;\n /** The rolling number shown in the row. */\n shown: number;\n busy: boolean;\n}\n\n@Component({\n selector: 'vo-health-score',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-hsx vo-panel\">\n <div class=\"vo-hsx-top\">\n <div\n class=\"vo-hsx-g\"\n role=\"meter\"\n [attr.aria-label]=\"hot ? hot.check.label : title\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"value\"\n >\n <svg viewBox=\"0 0 120 70\" aria-hidden=\"true\">\n <path d=\"M10 64a50 50 0 0 1 100 0\" class=\"vo-tr\"></path>\n <path\n d=\"M10 64a50 50 0 0 1 100 0\"\n class=\"vo-fl\"\n [style.stroke-dashoffset]=\"drawn ? arcOffset : null\"\n [style.stroke]=\"drawn ? tone(value) : null\"\n ></path>\n </svg>\n <div class=\"vo-hsx-v\">\n <b class=\"vo-num\">{{ round(dial) }}</b><span class=\"vo-muted\">of 100</span>\n </div>\n </div>\n <div class=\"vo-hsx-s\">\n <b><span class=\"vo-sw\" [class.vo-out]=\"titleOut\">{{ titleText }}</span></b>\n <span class=\"vo-muted vo-hsx-st vo-sw\" [class.vo-out]=\"lineOut\">{{ lineText }}</span>\n </div>\n </div>\n <div\n class=\"vo-hsx-list\"\n (pointerleave)=\"onListLeave()\"\n (focusout)=\"onFocusOut($event)\"\n >\n @for (v of views; track v.key) {\n <div\n class=\"vo-hsx-c\"\n [class.vo-open]=\"v.open\"\n (pointerenter)=\"onPoint(v, $event)\"\n (focusin)=\"onPoint(v, null)\"\n >\n <button\n type=\"button\"\n class=\"vo-hsx-ch\"\n [attr.aria-expanded]=\"v.open\"\n (click)=\"toggle(v)\"\n >\n <span class=\"vo-t\">{{ v.check.label }}</span>\n <span class=\"vo-bar\">\n <i [style.width]=\"v.filled ? v.check.score + '%' : '0'\"\n [style.background]=\"v.filled ? tone(v.check.score) : null\"></i>\n </span>\n <span class=\"vo-v vo-num\">{{ round(v.shown) }}</span>\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!v.open\">\n <div>\n <div class=\"vo-hsx-d\">\n <span class=\"vo-sw\">{{ v.check.detail }}</span>\n @if (v.check.fixable && hasFix) {\n <button\n type=\"button\"\n class=\"vo-pill vo-soft vo-sm\"\n [attr.aria-busy]=\"v.busy ? true : null\"\n (click)=\"runFix(v)\"\n >\n @if (v.busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>Fix\n }\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './health-score.css',\n})\nexport class HealthScoreComponent implements AfterViewInit, OnDestroy {\n /** The checks behind the score. */\n @Input({ required: true })\n set checks(value: HealthScoreCheck[]) {\n this._checks = value ?? [];\n this.rebuild();\n }\n get checks(): HealthScoreCheck[] {\n return this._checks;\n }\n\n /** Beside the gauge, like \"Design system health\". */\n @Input() title = 'Design system health';\n /** The score in the gauge. Defaults to the average of the checks. */\n @Input() score?: number;\n /** The line under the title. Defaults to \"Good, 2 checks need work\" from the checks. */\n @Input() status?: string;\n\n /** The open checks, by key. Leave it out to let each row toggle itself. */\n @Input()\n set open(value: string[] | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) {\n this.opened = value;\n this.syncOpen();\n }\n }\n @Input() defaultOpen: string[] = [];\n\n /** Emitted when the set of open checks changes. */\n @Output() openChange = new EventEmitter<string[]>();\n\n /** Called by a check's Fix button. Return a promise and the button spins\n * until it settles; then update the check's score and detail. */\n @Input() onFix?: (check: HealthScoreCheck, index: number) => void | Promise<unknown>;\n\n tone = tone;\n\n views: CheckView[] = [];\n opened: string[] = [];\n\n // gauge state\n drawn = false;\n dial = 0;\n value = 0;\n arcOffset = ARC;\n\n // the title/status lines, with their blur-swap flag\n titleText = '';\n titleOut = false;\n lineText = '';\n lineOut = false;\n\n hot: CheckView | null = null;\n\n private _checks: HealthScoreCheck[] = [];\n private controlled = false;\n private ready = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n get hasFix(): boolean {\n return !!this.onFix;\n }\n\n ngAfterViewInit(): void {\n this.opened = this.controlled ? this.opened : [...this.defaultOpen];\n this.ready = true;\n this.rebuild();\n this.total(false);\n this.titleText = this.title;\n // the gauge and the bars fill a moment after the card appears, the bars one after another\n this.later(() => this.total(true), 200);\n this.views.forEach((v, i) =>\n this.later(() => {\n v.filled = true;\n this.cdr.markForCheck();\n }, 300 + i * 80),\n );\n this.cdr.detectChanges();\n }\n\n private rebuild(): void {\n this.views = this._checks.map((check, index) => {\n const prev = this.views.find((p) => p.key === keyOf(check));\n return {\n check,\n index,\n key: keyOf(check),\n open: this.opened.includes(keyOf(check)),\n filled: prev?.filled ?? false,\n shown: prev?.shown ?? check.score,\n busy: prev?.busy ?? false,\n };\n });\n if (this.ready) {\n this.total(false);\n this.cdr.markForCheck();\n }\n }\n\n private syncOpen(): void {\n this.views.forEach((v) => (v.open = this.opened.includes(v.key)));\n this.cdr.markForCheck();\n }\n\n private get total_(): number {\n const avg = this._checks.length\n ? this._checks.reduce((a, c) => a + c.score, 0) / this._checks.length\n : 0;\n return Math.round(this.score ?? avg);\n }\n\n round(n: number): number {\n return Math.round(n);\n }\n\n toggle(v: CheckView): void {\n const next = v.open\n ? this.opened.filter((x) => x !== v.key)\n : [...this.opened, v.key];\n if (!this.controlled) {\n this.opened = next;\n this.syncOpen();\n }\n this.openChange.emit(next);\n }\n\n onPoint(v: CheckView, e: PointerEvent | null): void {\n if (e && e.pointerType === 'touch') return;\n this.show(v);\n }\n\n onListLeave(): void {\n this.show(null);\n }\n\n onFocusOut(e: FocusEvent): void {\n const list = (e.currentTarget as HTMLElement) ?? null;\n const to = e.relatedTarget as Node | null;\n if (list && to && list.contains(to)) return;\n if (list && list.matches(':hover')) return;\n this.show(null);\n }\n\n // the gauge shows one value at a time: the overall score, or the check under the pointer/focus\n private show(v: CheckView | null): void {\n if (this.hot === v) return;\n this.hot = v;\n if (!v) return this.total(this.ready);\n this.gauge(v.check.score, this.ready);\n this.swap(\n (t) => (this.titleText = t),\n v.check.label,\n (o) => (this.titleOut = o),\n );\n this.swap(\n (t) => (this.lineText = t),\n v.check.detail,\n (o) => (this.lineOut = o),\n );\n this.cdr.markForCheck();\n }\n\n private total(animate: boolean): void {\n if (this.hot) return;\n const t = this.total_;\n this.gauge(t, animate);\n const title = this.title;\n const weak = this._checks.filter((c) => c.score < 90).length;\n const line =\n this.status ??\n (weak\n ? `${t >= 85 ? 'Good' : 'Fair'}, ${weak} ${weak > 1 ? 'checks need' : 'check needs'} work`\n : 'Excellent, all checks pass');\n if (!this.ready || !animate) {\n this.titleText = title;\n this.lineText = line;\n } else {\n this.swap((x) => (this.titleText = x), title, (o) => (this.titleOut = o));\n this.swap((x) => (this.lineText = x), line, (o) => (this.lineOut = o));\n }\n this.cdr.markForCheck();\n }\n\n // swing the half-gauge to a value and roll the big number up to it\n private gauge(v: number, animate: boolean): void {\n this.drawn = true;\n this.value = v;\n this.arcOffset = ARC * (1 - v / 100);\n const from = this.dial;\n if (!animate || this.reduced.reduce()) {\n this.dial = v;\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const dur = 700;\n const step = (t: number): void => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.dial = from + (v - from) * (1 - Math.pow(1 - p, 3));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n async runFix(v: CheckView): Promise<void> {\n if (v.busy || !this.onFix) return;\n v.busy = true;\n this.cdr.markForCheck();\n try {\n await this.onFix(v.check, v.index);\n } finally {\n v.busy = false;\n // roll the row number to the (possibly updated) score and resettle the gauge\n v.filled = true;\n if (this.hot === v) this.gauge(v.check.score, true);\n else this.total(true);\n this.cdr.markForCheck();\n }\n }\n\n // blur the line out, set the new text, blur it back in (unless reduced motion)\n private swap(set: (value: string) => void, value: string, out: (on: boolean) => void): void {\n if (!this.ready || this.reduced.reduce()) {\n set(value);\n return;\n }\n out(true);\n this.later(() => {\n set(value);\n out(false);\n this.cdr.markForCheck();\n }, 170);\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/human-handoff/human-handoff.component.ts\n//\n// Native Angular port of framework/react/human-handoff/HumanHandoff.tsx.\n// The agent passes a conversation to a person: why, who has it (with Reassign),\n// when the reply is due, the context they need to pick it up, and what the\n// customer was told — with a row at the foot that says where it stands. Inputs\n// mirror the React props; callbacks become @Output EventEmitters.\n//\n// Icon substitutions (the Angular icon set has no \"user\" or \"link\"): the header\n// badge uses \"users\" in place of the single-person \"user\" glyph, and the\n// conversation link uses \"ext\" in place of \"link\". All other icons (chev-d,\n// clock, edit, check, alert, ok) map 1:1.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A person the conversation can go to. */\nexport interface HandoffPerson {\n /** Used as the key, so keep it unique. */\n name: string;\n initials?: string;\n /** The avatar's colour, like 'var(--vo-av-m)'. */\n color?: string;\n /** Like \"Billing\". */\n team?: string;\n /** Whether they can take it now, like \"Available\", \"In a call\" or \"Out until 2pm\". */\n presence?: string;\n /** ok puts a green dot before the presence, warn turns it orange. */\n tone?: 'ok' | 'warn';\n}\n\n/** One key fact passed along, as a label and value row. */\nexport interface HandoffFact {\n label: string;\n value: string;\n}\n\n/** A link to the whole conversation. */\nexport interface HandoffLink {\n label: string;\n href?: string;\n onClick?: () => void;\n tip?: string;\n}\n\n/** The two lines shown while no one has it yet. */\nexport interface HandoffFinding {\n title: string;\n detail?: string;\n}\n\n/** The row at the foot that says where it stands. */\nexport interface HandoffStatus {\n /** wait is neutral with a spinner, warn orange with an alert, ok green. */\n tone?: 'wait' | 'warn' | 'ok';\n title: string;\n detail?: string;\n /** Shown in place of the icon, like the person who just joined. */\n person?: HandoffPerson;\n}\n\n/** Overridable labels. */\nexport interface HandoffLabels {\n assignedTo?: string;\n context?: string;\n reassign?: string;\n reassignTo?: string;\n target?: string;\n edit?: string;\n save?: string;\n cancel?: string;\n edited?: string;\n}\n\nconst initialsOf = (p: HandoffPerson): string =>\n p.initials ??\n p.name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2);\n\n/** The agent hands a conversation to a person, with what they need to pick it up. */\n@Component({\n selector: 'vo-human-handoff',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n #root\n data-vo=\"\"\n [class]=\"className\"\n style=\"width:100%;container-type:inline-size\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"vo-hox vo-panel\">\n <div class=\"vo-hox-h\">\n <span class=\"vo-hox-ic\"><vo-icon name=\"users\"></vo-icon></span>\n <div class=\"vo-hox-ht\">\n <b>{{ title }}</b><span class=\"vo-muted\">{{ reason }}</span>\n </div>\n </div>\n\n <div class=\"vo-hox-b\">\n <div class=\"vo-hox-col\">\n <span class=\"vo-hox-lb\">{{ L.assignedTo }}</span>\n <div class=\"vo-hox-who\">\n <span class=\"vo-hox-av\">\n @if (assignee) {\n <span\n class=\"vo-av vo-enter\"\n [style.background]=\"assignee.color ?? 'var(--vo-av-l)'\"\n >{{ initials(assignee) }}</span\n >\n } @else {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n </span>\n <span class=\"vo-hox-wt\">\n <b>{{ assignee ? assignee.name : finding.title }}</b>\n @if (assignee) {\n <span\n class=\"vo-hox-wd vo-enter\"\n [class.vo-ok]=\"assignee.tone === 'ok'\"\n [class.vo-warn]=\"assignee.tone === 'warn'\"\n >\n @if (assignee.presence) {\n <span class=\"vo-dot\"></span>\n }\n <span>{{ whoLine(assignee) }}</span>\n </span>\n } @else {\n <span class=\"vo-hox-wd\"><span>{{ finding.detail }}</span></span>\n }\n </span>\n @if (people) {\n <button\n #reassignBtn\n type=\"button\"\n class=\"vo-hox-rb\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen\"\n [disabled]=\"!assignee\"\n (click)=\"toggleMenu()\"\n >\n {{ L.reassign }}<vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n\n <div\n class=\"vo-hox-sla\"\n [class.vo-warn]=\"slaTone === 'vo-warn'\"\n [class.vo-bad]=\"slaTone === 'vo-bad'\"\n >\n <div class=\"vo-hox-sl\">\n <vo-icon name=\"clock\"></vo-icon>\n <span class=\"vo-hox-due vo-num\">{{ due }}</span>\n <span class=\"vo-muted\">{{ L.target }}</span>\n </div>\n <div\n class=\"vo-hox-bar\"\n role=\"progressbar\"\n aria-label=\"Time left to reply\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"targetSeconds\"\n [attr.aria-valuenow]=\"left\"\n >\n <i [style.width.%]=\"barWidth\"></i>\n </div>\n </div>\n\n <div class=\"vo-hox-ms\">\n <div class=\"vo-hox-mh\">\n <span class=\"vo-hox-lb\">{{\n edited ? messageLabel + ' · ' + L.edited : messageLabel\n }}</span>\n <span class=\"vo-sp\"></span>\n @if (hasMessageChange && editing) {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"cancelEdit()\">\n {{ L.cancel }}\n </button>\n }\n @if (hasMessageChange) {\n @if (editing) {\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"save()\">\n {{ L.save }}\n </button>\n } @else {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"startEdit()\">\n <vo-icon name=\"edit\" size=\"xs\"></vo-icon>{{ L.edit }}\n </button>\n }\n }\n </div>\n <div\n #box\n class=\"vo-hox-mb\"\n [attr.contenteditable]=\"editing ? 'true' : null\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-readonly]=\"!editing\"\n [attr.aria-label]=\"messageLabel\"\n spellcheck=\"false\"\n >\n {{ message }}\n </div>\n </div>\n </div>\n\n <div class=\"vo-hox-col\">\n <span class=\"vo-hox-lb\">{{ L.context }}</span>\n <p class=\"vo-hox-sum\">{{ summary }}</p>\n @if (facts.length > 0) {\n <div class=\"vo-hox-facts\">\n @for (f of facts; track f.label) {\n <div class=\"vo-hox-f\">\n <span class=\"vo-k\">{{ f.label }}</span>\n <span class=\"vo-v vo-num\">{{ f.value }}</span>\n </div>\n }\n </div>\n }\n @if (link) {\n @if (link.href) {\n <a\n class=\"vo-fchip vo-lnk vo-hox-lnk\"\n [href]=\"link.href\"\n [attr.data-tip]=\"link.tip\"\n (click)=\"link.onClick && link.onClick()\"\n >\n <vo-icon name=\"ext\" size=\"xs\"></vo-icon><span>{{ link.label }}</span>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"vo-fchip vo-lnk vo-hox-lnk\"\n [attr.data-tip]=\"link.tip\"\n (click)=\"link.onClick && link.onClick()\"\n >\n <vo-icon name=\"ext\" size=\"xs\"></vo-icon><span>{{ link.label }}</span>\n </button>\n }\n }\n </div>\n </div>\n\n <div\n class=\"vo-hox-st\"\n [class.vo-warn]=\"st === 'warn'\"\n [class.vo-ok]=\"st === 'ok'\"\n aria-live=\"polite\"\n >\n <span class=\"vo-g\">\n @if (status.person; as p) {\n <span class=\"vo-av\" [style.background]=\"p.color ?? 'var(--vo-av-l)'\">{{\n initials(p)\n }}</span>\n } @else if (st === 'wait') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon [name]=\"st === 'warn' ? 'alert' : 'ok'\"></vo-icon>\n }\n </span>\n <span class=\"vo-t\">\n <b>{{ status.title }}</b>\n @if (status.detail) {\n <span>{{ status.detail }}</span>\n }\n </span>\n </div>\n\n @if (people) {\n <div\n #pop\n class=\"vo-pop vo-hox-pop\"\n [class.vo-open]=\"menuOpen\"\n role=\"menu\"\n [attr.aria-label]=\"L.reassignTo\"\n style=\"right:0;--vo-origin:top right\"\n >\n <div class=\"vo-ph\">{{ L.reassignTo }}</div>\n @for (p of people; track p.name) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"p.name === assignee?.name\"\n (click)=\"choose(p)\"\n >\n <span class=\"vo-av\" [style.background]=\"p.color ?? 'var(--vo-av-l)'\">{{\n initials(p)\n }}</span>\n <span\n >{{ p.name }}<span class=\"vo-d\">{{ metaLine(p) }}</span></span\n >\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './human-handoff.css',\n})\nexport class HumanHandoffComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The card's heading. */\n @Input() title = 'Handed off to a person';\n /** Why the agent handed off, like \"Refund over $500 needs a person\". */\n @Input() reason = '';\n /** Who has it, or null while the agent is still finding someone. */\n @Input() assignee: HandoffPerson | null = null;\n /** The two lines shown while assignee is null. */\n @Input() finding: HandoffFinding = { title: 'Finding someone' };\n /** The people it can go to instead. Leave it out to hide Reassign. */\n @Input() people?: HandoffPerson[];\n /** Seconds left until the reply is due. Whole minutes; orange under five; overdue at 0 or less. */\n @Input() secondsLeft = 0;\n /** The whole window, for the bar and the line beside it (\"15 min target\"). */\n @Input() targetSeconds = 900;\n /** What the person needs to pick it up. */\n @Input() summary = '';\n /** A few key facts, as label and value rows. */\n @Input() facts: HandoffFact[] = [];\n /** A link to the whole conversation. */\n @Input() link?: HandoffLink;\n /** What the agent told the customer. */\n @Input() message = '';\n /** The label over the message, like \"Sent to Dana\". */\n @Input() messageLabel = 'Sent to the customer';\n /** Set to true to add Edit: the message turns editable, and Save emits messageChange. */\n @Input() editable = false;\n /** Adds \"· edited\" to the label. */\n @Input() edited = false;\n /** The row at the foot that says where it stands. */\n @Input() status: HandoffStatus = { title: '' };\n /** Overridable labels. */\n @Input() labels: HandoffLabels = {};\n\n @Input() className?: string;\n\n /** Emitted when a row is picked in Reassign. */\n @Output() reassign = new EventEmitter<HandoffPerson>();\n /** Emitted by Save with the new message text (only when editable). */\n @Output() messageChange = new EventEmitter<string>();\n\n @ViewChild('box') private box!: ElementRef<HTMLDivElement>;\n @ViewChild('reassignBtn') private reassignBtn?: ElementRef<HTMLButtonElement>;\n @ViewChild('pop') private pop?: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n editing = false;\n menuOpen = false;\n private closeTimer?: ReturnType<typeof setTimeout>;\n\n // resolved labels, recomputed when inputs change\n L: Required<HandoffLabels> = this.resolveLabels();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['labels'] || changes['targetSeconds']) {\n this.L = this.resolveLabels();\n }\n // the box is drawn afresh each render in React; here we only overwrite its\n // text when we are not editing, so what is typed is never clobbered\n if (changes['message'] && !this.editing && this.box) {\n this.box.nativeElement.textContent = this.message;\n }\n }\n\n ngAfterViewInit(): void {\n document.addEventListener('pointerdown', this.onOutside, true);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onOutside, true);\n if (this.closeTimer) clearTimeout(this.closeTimer);\n }\n\n private resolveLabels(): Required<HandoffLabels> {\n return {\n assignedTo: 'Assigned to',\n context: 'Context passed along',\n reassign: 'Reassign',\n reassignTo: 'Reassign to',\n target: `${Math.round(this.targetSeconds / 60)} min target`,\n edit: 'Edit',\n save: 'Save',\n cancel: 'Cancel',\n edited: 'edited',\n ...this.labels,\n };\n }\n\n initials(p: HandoffPerson): string {\n return initialsOf(p);\n }\n\n whoLine(p: HandoffPerson): string {\n return [p.team, p.presence].filter(Boolean).join(' · ');\n }\n\n metaLine(p: HandoffPerson): string {\n return [p.team, p.presence].filter(Boolean).join(' · ');\n }\n\n get hasMessageChange(): boolean {\n return this.editable;\n }\n\n get left(): number {\n return Math.max(0, this.secondsLeft);\n }\n\n get due(): string {\n const s = this.secondsLeft;\n const m = Math.floor(s / 60);\n return s <= 0\n ? 'Reply overdue'\n : m < 1\n ? 'Reply due in under a minute'\n : `Reply due in ${m} min`;\n }\n\n get slaTone(): string {\n return this.secondsLeft <= 0 ? 'vo-bad' : this.secondsLeft < 300 ? 'vo-warn' : '';\n }\n\n get barWidth(): number {\n return Math.min(100, (this.left / this.targetSeconds) * 100);\n }\n\n get st(): 'wait' | 'warn' | 'ok' {\n return this.status.tone ?? 'wait';\n }\n\n // ---- reassign menu ----\n toggleMenu(): void {\n this.menuOpen = !this.menuOpen;\n }\n\n choose(p: HandoffPerson): void {\n if (p.name !== this.assignee?.name) this.reassign.emit(p);\n this.closeMenuSoon();\n }\n\n private closeMenuSoon(): void {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n this.closeTimer = setTimeout(() => (this.menuOpen = false), this.motion.reduce() ? 0 : 120);\n }\n\n // ---- in-place edit of the message ----\n startEdit(): void {\n this.editing = true;\n const focus = () => {\n const b = this.box?.nativeElement;\n if (!b) return;\n b.focus();\n const s = getSelection();\n s?.selectAllChildren(b);\n s?.collapseToEnd();\n };\n if (this.motion.reduce()) focus();\n else requestAnimationFrame(focus);\n }\n\n save(): void {\n const t = (this.box?.nativeElement.innerText ?? '').trim();\n if (t && t !== this.message) this.messageChange.emit(t);\n this.editing = false;\n }\n\n cancelEdit(): void {\n this.editing = false;\n if (this.box) this.box.nativeElement.textContent = this.message;\n }\n\n onKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n if (this.menuOpen) {\n this.menuOpen = false;\n this.reassignBtn?.nativeElement.focus({ preventScroll: true });\n } else if (this.editing) {\n this.cancelEdit();\n }\n }\n }\n\n private readonly onOutside = (e: PointerEvent): void => {\n if (!this.menuOpen) return;\n const t = e.target as Node;\n if (this.pop?.nativeElement.contains(t) || this.reassignBtn?.nativeElement.contains(t)) return;\n this.menuOpen = false;\n };\n}\n","// framework/angular/image-generation/image-generation.component.ts\n//\n// Native Angular port of framework/react/image-generation/ImageGeneration.tsx.\n// A prompt with style chips, a shape and how many pictures, and a model; the\n// pictures it makes, each resolving from grain into dots, then detail under a\n// sweeping scan line, then sharp (Blueprint: square cells and a hard scan, no\n// blur); each can fail with Retry, and a finished one can be upscaled, varied,\n// downloaded, opened larger or used as a reference. Beside it, a gallery of\n// earlier pictures and style presets; narrower, they take the feed's place under\n// a Create / Gallery / Styles switch. `generate` makes the pictures and reports\n// how far each has come. Inputs mirror the React props; React callbacks become\n// @Output() EventEmitters. Uncontrolled inputs keep their own state when the\n// matching Input is left undefined.\n//\n// Icon substitutions (the shared Angular icon set is smaller than the site's):\n// image -> eye, wand -> spark, max -> plus, layers -> redo, down -> chev-d,\n// clip -> copy, up-thumb / down-thumb -> hand.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A picture: one made by your model, or an earlier one in the gallery. */\nexport interface GeneratedImage {\n key: string;\n /** The picture. Without it, `placeholder` stands in. */\n src?: string;\n /** What the picture shows, for screen readers. */\n alt: string;\n /** A CSS background drawn under the picture while it loads (or instead of it), like a gradient of its colours. */\n placeholder?: string;\n /** Its width over its height, like 0.75 for 3:4 (1 by default). */\n ratio?: number;\n /** The prompt it was made from, shown in the larger view. */\n prompt?: string;\n /** The styles it was made with. */\n styles?: string[];\n}\n\nexport type ImageShape = '1:1' | '3:4' | '16:9';\n\n/** What Generate asks your model for. */\nexport interface GenerateRequest {\n prompt: string;\n /** The style chips that are on. */\n styles: string[];\n shape: ImageShape;\n /** How many pictures, 1 to 4. */\n count: number;\n /** The model's key. */\n model: string;\n /** Pictures added with Use as reference. */\n references: GeneratedImage[];\n /** Set for Vary: the picture to make a variation of (count is 1). */\n variationOf?: GeneratedImage;\n /** Set for Retry: which picture of the run is being made again (count is 1, updates go to slot 0). */\n retry?: number;\n}\n\n/** What your model reports for one picture. */\nexport interface GenerationUpdate {\n progress?: number;\n image?: GeneratedImage;\n error?: string;\n}\n\n/** A style preset: a picture and the style chips it turns on. */\nexport interface ImageStylePreset {\n key: string;\n label: string;\n description?: string;\n /** The style chips it turns on (the others go off). */\n styles: string[];\n image?: GeneratedImage;\n}\n\nexport interface ImageModel {\n key: string;\n label: string;\n /** Like \"Most detail, about 6s a picture\". */\n description?: string;\n icon?: VoIconName;\n}\n\nexport type ImageAction = 'upscale' | 'download' | 'reference' | 'like' | 'dislike' | 'copy';\n\n/** The callback that makes the pictures: call `update(slot, …)` for each one. */\nexport type GenerateFn = (\n request: GenerateRequest,\n update: (slot: number, update: GenerationUpdate) => void,\n) => void | Promise<void>;\n\ntype Status = 'wait' | 'gen' | 'done' | 'fail';\ninterface Slot {\n key: string;\n progress: number;\n image?: GeneratedImage;\n error?: string;\n el?: HTMLElement;\n}\ninterface Run {\n id: number;\n request: GenerateRequest;\n ratio: number;\n slots: Slot[];\n t0: number;\n done?: number;\n}\n\nconst STYLES = ['Editorial', 'Poster', 'Surreal', '35mm'];\nconst SHAPES: Record<ImageShape, number> = { '1:1': 1, '3:4': 3 / 4, '16:9': 16 / 9 };\nconst STAGES = ['Composing', 'Adding detail', 'Upscaling'];\nconst CROPS = ['30% 35%', '70% 40%', '45% 70%', '60% 25%'];\n\nconst shapeName = (r: number): string =>\n ({ 1: '1:1', 0.75: '3:4', 0.8: '4:5', 0.667: '2:3', 1.333: '4:3', 1.5: '3:2', 1.778: '16:9' } as Record<number, string>)[\n Math.round(r * 1000) / 1000\n ] || '';\nconst bg = (im?: GeneratedImage): string | undefined =>\n [im?.src && `url(\"${im.src}\")`, im?.placeholder].filter(Boolean).join(', ') || undefined;\nconst statusOf = (s: Slot): Status =>\n s.error ? 'fail' : s.progress >= 1 && s.image ? 'done' : s.image || s.progress > 0 ? 'gen' : 'wait';\n\n/** A grain tile, drawn once on a canvas. */\nlet grain = '';\nfunction makeGrain(off: boolean): string {\n if (off) return '';\n if (grain) return grain;\n try {\n const n = 96;\n const cv = document.createElement('canvas');\n cv.width = cv.height = n;\n const x = cv.getContext('2d');\n if (!x) return '';\n const d = x.createImageData(n, n);\n for (let i = 0; i < d.data.length; i += 4) {\n const c = Math.random() < 0.5 ? 20 : 245;\n d.data[i] = d.data[i + 1] = d.data[i + 2] = c;\n d.data[i + 3] = 40 + Math.random() * 150;\n }\n x.putImageData(d, 0, 0);\n grain = `url(\"${cv.toDataURL()}\")`;\n return grain;\n } catch {\n return '';\n }\n}\n\n@Component({\n selector: 'vo-image-generation',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n #root\n data-vo=\"\"\n class=\"vo-igx\"\n [class]=\"className\"\n role=\"region\"\n aria-label=\"Image generation\"\n [style.--vo-noise]=\"noise || null\"\n >\n <div class=\"vo-igx-in\" [attr.data-view]=\"view\">\n <div class=\"vo-igx-main\" role=\"group\" aria-label=\"Create\">\n <div class=\"vo-igx-h\">\n <span class=\"vo-igx-cr\"><span>{{ section }}</span><vo-icon name=\"chev-r\"></vo-icon><b>{{ title }}</b></span>\n <div class=\"vo-seg2 vo-igx-vw\" role=\"group\" aria-label=\"Show\">\n @for (o of viewOpts; track o.value) {\n <button type=\"button\" [attr.aria-pressed]=\"view === o.value\" (click)=\"showView(o.value)\">{{ o.label }}</button>\n }\n </div>\n </div>\n <div class=\"vo-igx-feed\">\n @if (run) {\n <div class=\"vo-bub vo-igx-ask\">{{ run.request.prompt }}</div>\n } @else {\n <div class=\"vo-igx-empty\">\n <div class=\"vo-igx-ef\" aria-hidden=\"true\"><span><vo-icon name=\"eye\"></vo-icon></span><span><vo-icon name=\"eye\"></vo-icon></span><span><vo-icon name=\"eye\"></vo-icon></span></div>\n <span>Describe a picture and press Generate</span>\n </div>\n }\n @if (run) {\n <div class=\"vo-igx-run\">\n <div class=\"vo-igx-rh\">\n <span class=\"vo-igx-rt\">\n @if (busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span><span>Generating {{ pics }}</span>\n } @else if (nBad) {\n <vo-icon name=\"alert\"></vo-icon><span>{{ nDone }} of {{ n }} ready, {{ nBad }} failed</span>\n } @else {\n <vo-icon name=\"eye\"></vo-icon><span>{{ n === 1 ? 'Picture' : capPics }} ready in {{ secs }}s</span>\n }\n </span>\n <span class=\"vo-igx-steps\" aria-hidden=\"true\">\n @for (s of STAGES; track s; let k = $index) {\n <span [class.vo-done]=\"k < stage\" [class.vo-on]=\"k === stage\"><i></i><vo-icon name=\"check\"></vo-icon>{{ s }}</span>\n }\n </span>\n <span class=\"vo-igx-pc vo-num\" aria-hidden=\"true\">{{ busy ? pctTotal + '%' : '' }}</span>\n </div>\n <div\n #tiles\n class=\"vo-igx-tiles\"\n role=\"group\"\n aria-label=\"Pictures\"\n [style.--vo-cols]=\"grid.cols\"\n [style.--vo-rows]=\"grid.rows\"\n >\n @for (s of run.slots; track s.key; let i = $index) {\n <figure\n class=\"vo-igx-t\"\n [class.vo-up]=\"s.image && upped[s.image.key] === 'upping'\"\n [attr.data-st]=\"statusOf(s)\"\n [style]=\"look(s)\"\n >\n <button\n type=\"button\"\n class=\"vo-igx-o\"\n aria-haspopup=\"dialog\"\n [disabled]=\"statusOf(s) !== 'done'\"\n [attr.aria-label]=\"statusOf(s) === 'done' ? 'Open picture ' + (i + 1) + ': ' + s.image?.alt : 'Picture ' + (i + 1) + ', ' + (statusOf(s) === 'fail' ? 'failed' : 'being made')\"\n (click)=\"openFromTile(s, $event)\"\n >\n <span class=\"vo-igx-ly vo-igx-b\" [style.background-image]=\"imgBg(s.image)\"></span>\n <span class=\"vo-igx-ly vo-igx-s\" [style.background-image]=\"imgBg(s.image)\"></span>\n <span class=\"vo-igx-n\"></span>\n <span class=\"vo-igx-l\"><span></span><span></span></span>\n </button>\n @if (s.image && upped[s.image.key] === 'up') {\n <span class=\"vo-tag vo-igx-tg\">2×</span>\n }\n <span class=\"vo-igx-tp vo-num\" aria-hidden=\"true\">{{ pct(s) }}%</span>\n <div class=\"vo-igx-f\">\n <vo-icon name=\"alert\"></vo-icon><b>Couldn't finish</b><span>{{ s.error }}</span>\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" [attr.aria-label]=\"'Retry picture ' + (i + 1)\" (click)=\"retry(i)\"><vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Retry</button>\n </div>\n @if (doneImg(s); as im) {\n <div class=\"vo-igx-q\">\n <button type=\"button\" class=\"vo-ib\" [attr.aria-label]=\"'Vary picture ' + (i + 1)\" data-tip=\"Vary\" (click)=\"vary(im)\"><vo-icon name=\"redo\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib\" [attr.aria-label]=\"'Upscale picture ' + (i + 1)\" data-tip=\"Upscale\" (click)=\"upscale(im)\"><vo-icon name=\"plus\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib\" [attr.aria-label]=\"'Download picture ' + (i + 1)\" [attr.data-tip]=\"flash?.id === 't' + i ? flash?.label : 'Download'\" (click)=\"download(im, 't' + i)\"><vo-icon [name]=\"flashed('t' + i, 'chev-d')\"></vo-icon></button>\n </div>\n }\n </figure>\n }\n </div>\n <div class=\"vo-igx-acts\" role=\"toolbar\" aria-label=\"Rate and copy\">\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Good pictures\" [attr.aria-pressed]=\"runRate === 1\" data-tip=\"Good pictures\" (click)=\"rateRun(1)\"><vo-icon name=\"hand\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Bad pictures\" [attr.aria-pressed]=\"runRate === -1\" data-tip=\"Bad pictures\" (click)=\"rateRun(-1)\"><vo-icon name=\"hand\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Copy prompt\" [attr.data-tip]=\"copied ? 'Prompt copied' : 'Copy prompt'\" (click)=\"copyPrompt()\"><vo-icon [name]=\"copied ? 'check' : 'copy'\"></vo-icon></button>\n <span class=\"vo-igx-meta\">{{ runMeta }}</span>\n </div>\n </div>\n }\n <p class=\"vo-igx-sr\" aria-live=\"polite\">{{ said }}</p>\n </div>\n <form class=\"vo-igx-cmp\" (submit)=\"submit($event)\">\n @if (refs.length) {\n <div class=\"vo-igx-refs\" role=\"group\" aria-label=\"References\">\n @for (im of refs; track im.key; let i = $index) {\n <span class=\"vo-igx-ref\"><span class=\"vo-igx-rp\"><span class=\"vo-igx-ly\" [style.background-image]=\"imgBg(im)\"></span></span>Reference {{ i + 1 }}\n <button type=\"button\" class=\"vo-ib\" [attr.aria-label]=\"'Remove reference ' + (i + 1)\" data-tip=\"Remove\" (click)=\"removeRef(im)\"><vo-icon name=\"x\" size=\"xs\"></vo-icon></button>\n </span>\n }\n </div>\n }\n <textarea\n #ta\n class=\"vo-igx-ta\"\n rows=\"2\"\n aria-label=\"Prompt\"\n placeholder=\"Describe the picture you want\"\n [value]=\"prompt\"\n (input)=\"onPrompt($event)\"\n (keydown)=\"onKey($event)\"\n ></textarea>\n @if (styles.length) {\n <div class=\"vo-igx-sty\" role=\"group\" aria-label=\"Styles\">\n @for (s of styles; track s) {\n <button type=\"button\" class=\"vo-igx-sc\" [class.vo-hl]=\"hl.includes(s)\" [attr.aria-pressed]=\"picked.includes(s)\" (click)=\"toggleStyle(s)\"><vo-icon name=\"check\"></vo-icon>{{ s }}</button>\n }\n </div>\n }\n <div class=\"vo-igx-bar\">\n <button type=\"button\" class=\"vo-chip vo-igx-set\" aria-haspopup=\"dialog\" [attr.aria-expanded]=\"pop === 'set'\" data-tip=\"Shape and number\" [attr.aria-label]=\"'Shape ' + shape + ', ' + (count === 1 ? '1 picture' : count + ' pictures')\" (click)=\"togglePop('set')\"><vo-icon name=\"eye\"></vo-icon><span>{{ shape }} · {{ count }}</span><vo-icon name=\"chev-d\"></vo-icon></button>\n @if (models?.length) {\n <button type=\"button\" class=\"vo-chip vo-igx-mdl\" aria-haspopup=\"menu\" [attr.aria-expanded]=\"pop === 'model'\" data-tip=\"Image model\" (click)=\"togglePop('model')\"><vo-icon [name]=\"modelIcon\"></vo-icon><span>{{ modelLabel }}</span><vo-icon name=\"chev-d\"></vo-icon></button>\n }\n <span class=\"vo-sp\"></span>\n <button type=\"submit\" class=\"vo-pill vo-primary vo-igx-go\" aria-label=\"Generate\" [attr.data-tip]=\"busy ? 'Generating' : 'Generate'\" data-tip-k=\"↵\" [disabled]=\"!prompt.trim() || busy\"><vo-icon name=\"spark\"></vo-icon><span>Generate</span></button>\n </div>\n @if (pop === 'set') {\n <div class=\"vo-pop vo-igx-pp-set\" role=\"dialog\" aria-label=\"Shape and number\">\n <div class=\"vo-ph\">Shape</div>\n <div class=\"vo-seg2 vo-igx-ars\" role=\"group\" aria-label=\"Shape\">\n @for (v of shapeOpts; track v) {\n <button type=\"button\" [attr.aria-pressed]=\"shape === v\" (click)=\"setShape(v)\">{{ v }}</button>\n }\n </div>\n <div class=\"vo-ph\">Pictures</div>\n <div class=\"vo-seg2 vo-igx-cts\" role=\"group\" aria-label=\"Pictures\">\n @for (v of countOpts; track v) {\n <button type=\"button\" [attr.aria-pressed]=\"count === v\" (click)=\"setCount(v)\">{{ v }}</button>\n }\n </div>\n </div>\n }\n @if (pop === 'model' && models?.length) {\n <div class=\"vo-pop vo-igx-pp-m\" role=\"menu\" aria-label=\"Image model\">\n <div class=\"vo-ph\">Image model</div>\n @for (m of models; track m.key) {\n <button type=\"button\" class=\"vo-mi\" role=\"menuitemradio\" [attr.aria-checked]=\"m.key === model\" (click)=\"pickModel(m.key)\"><vo-icon [name]=\"m.icon ?? 'spark'\"></vo-icon><span>{{ m.label }}@if (m.description) {<span class=\"vo-d\">{{ m.description }}</span>}</span><span class=\"vo-ck\"><vo-icon name=\"check\"></vo-icon></span></button>\n }\n </div>\n }\n </form>\n </div>\n <div class=\"vo-igx-side\" role=\"group\" aria-label=\"Library\">\n <div class=\"vo-igx-sh\">\n <div class=\"vo-seg2 vo-igx-tb\" role=\"group\" aria-label=\"Show\">\n @for (o of tabOpts; track o.value) {\n <button type=\"button\" [attr.aria-pressed]=\"tab === o.value\" (click)=\"showTab(o.value)\">{{ o.label }}</button>\n }\n </div>\n <span class=\"vo-sp\"></span><span class=\"vo-muted vo-num\">{{ all.length }}</span>\n </div>\n <div class=\"vo-igx-pane\" role=\"group\" aria-label=\"Gallery\" [hidden]=\"tab !== 'gallery'\">\n <div class=\"vo-igx-gal\">\n @for (col of cols; track $index) {\n <div class=\"vo-igx-col\">\n @for (im of col; track im.key) {\n <button type=\"button\" class=\"vo-igx-g\" [class.vo-new]=\"fresh.has(im.key)\" aria-haspopup=\"dialog\" [attr.aria-label]=\"im.alt\" [style.--vo-ar]=\"im.ratio ?? 1\" (click)=\"openGallery(im, $event)\">\n <span class=\"vo-igx-ly\" [style.background-image]=\"imgBg(im)\"></span>\n </button>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"vo-igx-pane\" role=\"group\" aria-label=\"Style presets\" [hidden]=\"tab !== 'styles'\">\n <div class=\"vo-igx-prs\">\n @for (p of presets; track p.key) {\n <button type=\"button\" class=\"vo-igx-pr\" [attr.aria-pressed]=\"presetOn(p)\" (click)=\"pickPreset(p)\">\n <span class=\"vo-igx-prp\"><span class=\"vo-igx-ly\" [style.background-image]=\"imgBg(p.image)\"></span></span>\n <span class=\"vo-igx-prt\"><b>{{ p.label }}</b>@if (p.description) {<span class=\"vo-muted\">{{ p.description }}</span>}</span>\n </button>\n }\n </div>\n </div>\n </div>\n @if (lb && lbImg) {\n <div\n #lbEl\n class=\"vo-igx-lb vo-open\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"'Picture ' + (lbAt + 1) + ' of ' + lb.list.length\"\n (keydown)=\"lbKeys($event)\"\n >\n <div class=\"vo-igx-lbh\">\n <div class=\"vo-igx-lbt\"><b>{{ lbImg.prompt ?? lbImg.alt }}</b><span class=\"vo-muted\">{{ metaOf(lbImg) }}</span></div>\n <span class=\"vo-muted vo-num\">{{ lbAt + 1 }} of {{ lb.list.length }}</span>\n <button type=\"button\" class=\"vo-ib vo-igx-lbx\" aria-label=\"Close\" data-tip=\"Close\" data-tip-k=\"Esc\" (click)=\"closeLb(true)\"><vo-icon name=\"x\"></vo-icon></button>\n </div>\n <div class=\"vo-igx-lbb\">\n <button type=\"button\" class=\"vo-pill vo-line vo-igx-lbn\" aria-label=\"Previous picture\" data-tip=\"Previous\" [disabled]=\"lbAt <= 0\" (click)=\"step(-1)\"><vo-icon name=\"chev-l\"></vo-icon></button>\n <div class=\"vo-igx-lbs\">\n <figure class=\"vo-igx-t\" [class.vo-up]=\"upped[lbImg.key] === 'upping'\" data-st=\"done\" [style.--vo-ar]=\"lbImg.ratio ?? 1\" [style.--vo-art]=\"lbImg.placeholder ?? 'none'\">\n <span class=\"vo-igx-ly vo-igx-b\" [style.background-image]=\"imgBg(lbImg)\"></span>\n <span class=\"vo-igx-ly vo-igx-s\" role=\"img\" [attr.aria-label]=\"lbImg.alt\" [style.background-image]=\"imgBg(lbImg)\"></span>\n <span class=\"vo-igx-l\" aria-hidden=\"true\"><span></span><span></span></span>\n @if (upped[lbImg.key] === 'up') {\n <span class=\"vo-tag vo-igx-tg\">2×</span>\n }\n </figure>\n </div>\n <button type=\"button\" class=\"vo-pill vo-line vo-igx-lbn\" aria-label=\"Next picture\" data-tip=\"Next\" [disabled]=\"lbAt >= lb.list.length - 1\" (click)=\"step(1)\"><vo-icon name=\"chev-r\"></vo-icon></button>\n </div>\n <div class=\"vo-igx-lbf\" role=\"toolbar\" aria-label=\"Picture actions\">\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" aria-label=\"Upscale\" data-tip=\"Upscale to twice the size\" (click)=\"upscale(lbImg)\"><vo-icon name=\"plus\" size=\"xs\"></vo-icon><span class=\"vo-igx-lbl\">Upscale</span></button>\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" aria-label=\"Vary\" data-tip=\"Make a variation\" (click)=\"vary(lbImg)\"><vo-icon name=\"redo\" size=\"xs\"></vo-icon><span class=\"vo-igx-lbl\">Vary</span></button>\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" aria-label=\"Use as reference\" data-tip=\"Use as reference\" (click)=\"useAsRef(lbImg)\"><vo-icon name=\"copy\" size=\"xs\"></vo-icon><span class=\"vo-igx-lbl\">Use as reference</span></button>\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" aria-label=\"Download\" [attr.data-tip]=\"flash?.id === 'lb' ? flash?.label : 'Download'\" (click)=\"download(lbImg, 'lb')\"><vo-icon [name]=\"flashed('lb', 'chev-d')\" size=\"xs\"></vo-icon><span class=\"vo-igx-lbl\">Download</span></button>\n <span class=\"vo-igx-sep\" aria-hidden=\"true\"></span>\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Good picture\" [attr.aria-pressed]=\"rating[lbImg.key] === 1\" data-tip=\"Good picture\" (click)=\"rate(lbImg, 1)\"><vo-icon name=\"hand\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Bad picture\" [attr.aria-pressed]=\"rating[lbImg.key] === -1\" data-tip=\"Bad picture\" (click)=\"rate(lbImg, -1)\"><vo-icon name=\"hand\"></vo-icon></button>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './image-generation.css',\n})\nexport class ImageGenerationComponent implements AfterViewInit, OnDestroy {\n /** The project, shown after \"Images\" in the header, like \"Spring lookbook\". */\n @Input() title = 'Untitled';\n /** The first part of the header. Defaults to \"Images\". */\n @Input() section = 'Images';\n /** The style chips under the prompt. */\n @Input() styles: string[] = STYLES;\n /** The models in the model menu. Leave it out to hide the menu. */\n @Input() models?: ImageModel[];\n /** Earlier pictures, newest first. Pictures made here join them at the top. */\n @Input() gallery: GeneratedImage[] = [];\n /** The Styles tab. Picking one sets the style chips. */\n @Input() presets: ImageStylePreset[] = [];\n @Input() className = '';\n\n // controllable inputs (undefined => the component keeps its own state)\n @Input() set prompt(v: string | undefined) { if (v !== undefined) this.promptState = v; }\n get prompt(): string { return this.promptState; }\n @Input() defaultPrompt = '';\n @Input() set selectedStyles(v: string[] | undefined) { if (v !== undefined) this.pickedState = v; }\n @Input() defaultSelectedStyles: string[] = [];\n @Input() set shape(v: ImageShape | undefined) { if (v !== undefined) this.shapeState = v; }\n get shape(): ImageShape { return this.shapeState; }\n @Input() defaultShape: ImageShape = '3:4';\n @Input() set count(v: number | undefined) { if (v !== undefined) this.countState = v; }\n get count(): number { return this.countState; }\n @Input() defaultCount = 4;\n @Input() set model(v: string | undefined) { if (v !== undefined) this.modelState = v; }\n get model(): string { return this.modelState; }\n @Input() defaultModel?: string;\n @Input() set tab(v: 'gallery' | 'styles' | undefined) { if (v !== undefined) this.tabState = v; }\n get tab(): 'gallery' | 'styles' { return this.tabState; }\n @Input() defaultTab: 'gallery' | 'styles' = 'gallery';\n\n /** Makes the pictures: call `update(slot, …)` for each one as it goes. */\n @Input() generate?: GenerateFn;\n\n @Output() promptChange = new EventEmitter<string>();\n @Output() selectedStylesChange = new EventEmitter<string[]>();\n @Output() shapeChange = new EventEmitter<ImageShape>();\n @Output() countChange = new EventEmitter<number>();\n @Output() modelChange = new EventEmitter<string>();\n @Output() tabChange = new EventEmitter<'gallery' | 'styles'>();\n /** Called for each action on a picture. For 'upscale', return a promise. */\n @Output() action = new EventEmitter<{ action: ImageAction; image: GeneratedImage }>();\n\n @ViewChild('root') root!: ElementRef<HTMLElement>;\n @ViewChild('tiles') tiles?: ElementRef<HTMLElement>;\n @ViewChild('ta') ta?: ElementRef<HTMLTextAreaElement>;\n @ViewChild('lbEl') lbEl?: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n readonly STAGES = STAGES;\n readonly shapeOpts: ImageShape[] = ['1:1', '3:4', '16:9'];\n readonly countOpts = [1, 2, 3, 4];\n readonly viewOpts = [\n { value: 'create' as const, label: 'Create' },\n { value: 'gallery' as const, label: 'Gallery' },\n { value: 'styles' as const, label: 'Styles' },\n ];\n readonly statusOf = statusOf;\n\n // state\n promptState = '';\n pickedState: string[] = [];\n shapeState: ImageShape = '3:4';\n countState = 4;\n modelState = '';\n tabState: 'gallery' | 'styles' = 'gallery';\n\n view: 'create' | 'gallery' | 'styles' = 'create';\n run: Run | null = null;\n made: GeneratedImage[] = [];\n fresh = new Set<string>();\n refs: GeneratedImage[] = [];\n rating: Record<string, 1 | -1> = {};\n upped: Record<string, 'up' | 'upping'> = {};\n lb: { list: GeneratedImage[]; key: string; from: HTMLElement | null; mine: boolean } | null = null;\n said = '';\n runRate: 0 | 1 | -1 = 0;\n hl: string[] = [];\n flash: { id: string; label: string } | null = null;\n copied = false;\n pop: 'set' | 'model' | null = null;\n grid = { cols: 1, rows: 1 };\n noise = '';\n\n private runs = 0;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private ro?: ResizeObserver;\n private pendingLbFocus = false;\n\n get picked(): string[] { return this.pickedState; }\n\n ngAfterViewInit(): void {\n this.promptState = this.promptState || this.defaultPrompt;\n if (!this.pickedState.length) this.pickedState = [...this.defaultSelectedStyles];\n this.shapeState = this.shapeState ?? this.defaultShape;\n this.countState = this.countState ?? this.defaultCount;\n this.modelState = this.modelState || this.defaultModel || this.models?.[0]?.key || '';\n this.tabState = this.tabState ?? this.defaultTab;\n this.noise = makeGrain(this.motion.reduce());\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n this.ro?.disconnect();\n }\n\n private after(ms: number, fn: () => void): void {\n const t = setTimeout(() => { this.timers.delete(t); fn(); }, this.motion.reduce() ? Math.min(ms, 30) : ms);\n this.timers.add(t);\n }\n\n // ----- derived -----\n get busy(): boolean {\n return !!this.run && this.run.slots.some((s) => { const st = statusOf(s); return st === 'wait' || st === 'gen'; });\n }\n get all(): GeneratedImage[] { return [...this.made, ...this.gallery]; }\n get n(): number { return this.run?.slots.length ?? 0; }\n get nDone(): number { return this.run?.slots.filter((s) => statusOf(s) === 'done').length ?? 0; }\n get nBad(): number { return this.run?.slots.filter((s) => s.error).length ?? 0; }\n get pics(): string { return this.n === 1 ? 'picture' : `${this.n} pictures`; }\n get capPics(): string { return this.pics[0].toUpperCase() + this.pics.slice(1); }\n get live(): Slot[] { return this.run ? this.run.slots.filter((s) => !s.error) : []; }\n get total(): number { return this.live.length ? this.live.reduce((a, s) => a + Math.min(1, s.progress), 0) / this.live.length : 0; }\n get pctTotal(): number { return Math.round(this.total * 100); }\n get stage(): number { return !this.busy ? 3 : this.total < 0.3 ? 0 : this.total < 0.8 ? 1 : 2; }\n get secs(): number { return this.run ? Math.max(1, Math.round(((this.run.done ?? performance.now()) - this.run.t0) / 1000)) : 0; }\n get modelLabel(): string { return this.models?.find((m) => m.key === this.model)?.label ?? ''; }\n get modelIcon(): VoIconName { return this.models?.find((m) => m.key === this.model)?.icon ?? 'spark'; }\n get runMeta(): string {\n if (!this.run) return '';\n return [this.modelLabel, shapeName(this.run.ratio), this.run.request.styles.join(', ') || 'No style'].filter(Boolean).join(' · ');\n }\n get doneList(): GeneratedImage[] {\n if (!this.run) return [];\n const r = this.run;\n return r.slots.filter((s) => statusOf(s) === 'done' && s.image).map((s) => ({\n ...s.image!, ratio: r.ratio, prompt: s.image!.prompt ?? r.request.prompt, styles: s.image!.styles ?? r.request.styles,\n }));\n }\n get cols(): GeneratedImage[][] {\n const cols: GeneratedImage[][] = [[], []], hgt = [0, 0];\n this.all.forEach((im) => { const k = hgt[0] <= hgt[1] ? 0 : 1; cols[k].push(im); hgt[k] += 1 / (im.ratio ?? 1) + 0.06; });\n return cols;\n }\n get tabOpts(): { value: 'gallery' | 'styles'; label: string }[] {\n return [{ value: 'gallery', label: 'Gallery' }, ...(this.presets.length ? [{ value: 'styles' as const, label: 'Styles' }] : [])];\n }\n get lbAt(): number { return this.lb ? this.lb.list.findIndex((x) => x.key === this.lb!.key) : -1; }\n get lbImg(): GeneratedImage | undefined { return this.lb ? this.lb.list[this.lbAt] : undefined; }\n\n imgBg(im?: GeneratedImage): string | null { return bg(im) ?? null; }\n pct(s: Slot): number { return Math.round((Math.floor(Math.min(1, s.progress) * 30) / 30) * 100); }\n metaOf(im: GeneratedImage): string {\n return [shapeName(im.ratio ?? 1), (im.styles ?? []).join(', ') || 'No style', this.upped[im.key] === 'up' ? 'Upscaled 2×' : ''].filter(Boolean).join(' · ');\n }\n flashed(id: string, icon: VoIconName): VoIconName { return this.flash?.id === id ? 'check' : icon; }\n presetOn(p: ImageStylePreset): boolean { return p.styles.length === this.picked.length && p.styles.every((s) => this.picked.includes(s)); }\n doneImg(s: Slot): GeneratedImage | undefined { return s.image ? this.doneList.find((x) => x.key === s.image!.key) : undefined; }\n\n /* the effect, from how far a picture has come. Progress moves in the steps an image model takes (30 of them). */\n look(s: Slot): Record<string, string | number> {\n const r = this.run; if (!r) return {};\n const st = statusOf(s), p = Math.floor(Math.min(1, s.progress) * 30) / 30;\n const v: Record<string, string | number> = { '--vo-ar': r.ratio, '--vo-art': s.image?.placeholder ?? 'none' };\n if (st === 'wait') Object.assign(v, { '--vo-sc': 0, '--vo-gr': 0.5 });\n if (st === 'gen' || st === 'fail') {\n const a = Math.min(1, p / 0.3), b = Math.max(0, Math.min(1, (p - 0.3) / 0.52)), sc = Math.max(0, Math.min(1, (p - 0.34) / 0.46)), u = Math.max(0, Math.min(1, (p - 0.8) / 0.2));\n Object.assign(v, {\n '--vo-cell': '12px', '--vo-dot': `${a >= 1 ? 12 : 1 + a * 7.5}px`, '--vo-sq': `${a >= 1 ? 12 : 2 + a * 9}px`, '--vo-bl': `${18 - b * 14}px`,\n '--vo-sc': sc, '--vo-lo': sc > 0 && sc < 1 ? 1 : 0, '--vo-sb': `${3 * (1 - u)}px`, '--vo-gr': 0.5 * (1 - p), '--vo-stp': '200ms',\n });\n }\n if (st === 'done') Object.assign(v, { '--vo-sc': 1, '--vo-sb': '0px', '--vo-gr': 0, '--vo-lo': 0, '--vo-stp': '450ms' });\n return v;\n }\n\n // ----- controllable setters -----\n private setPrompt(v: string): void { if (this.promptState !== v) { this.promptState = v; this.promptChange.emit(v); } }\n private setPicked(v: string[]): void { this.pickedState = v; this.selectedStylesChange.emit(v); }\n setShape(v: ImageShape): void { this.shapeState = v; this.shapeChange.emit(v); }\n setCount(v: number): void { this.countState = v; this.countChange.emit(v); }\n pickModel(key: string): void { this.modelState = key; this.modelChange.emit(key); this.pop = null; }\n showTab(t: 'gallery' | 'styles'): void { this.tabState = t; this.tabChange.emit(t); }\n showView(v: 'create' | 'gallery' | 'styles'): void { this.view = v; if (v !== 'create') this.showTab(v); }\n\n onPrompt(e: Event): void { this.setPrompt((e.target as HTMLTextAreaElement).value); }\n onKey(e: KeyboardEvent): void {\n if (e.key === 'Enter' && !e.shiftKey && !(e as unknown as { isComposing: boolean }).isComposing) { e.preventDefault(); this.doGenerate(); }\n }\n submit(e: Event): void { e.preventDefault(); this.doGenerate(); }\n togglePop(p: 'set' | 'model'): void { this.pop = this.pop === p ? null : p; }\n\n // ----- the run -----\n private update(id: number, map: (slot: number) => number): (slot: number, u: GenerationUpdate) => void {\n return (slot, u) => {\n const r = this.run; if (!r || r.id !== id) return;\n const i = map(slot), s = r.slots[i]; if (!s) return;\n if (u.progress != null) s.progress = Math.max(0, Math.min(1, u.progress));\n if (u.image) s.image = u.image;\n if (u.error) s.error = u.error;\n this.afterUpdate();\n };\n }\n private afterUpdate(): void {\n const r = this.run; if (!r) return;\n // a finished picture joins the gallery, at the top\n const ready = r.slots.filter((s) => statusOf(s) === 'done' && s.image && !this.made.some((m) => m.key === s.image!.key))\n .map((s) => ({ ...s.image!, ratio: r.ratio, prompt: s.image!.prompt ?? r.request.prompt, styles: s.image!.styles ?? r.request.styles }));\n if (ready.length) { this.made = [...ready, ...this.made]; this.fresh = new Set(ready.map((x) => x.key)); this.after(700, () => { this.fresh = new Set(); }); }\n if (!this.busy && r.slots.length && !r.done) r.done = performance.now();\n this.announce();\n }\n private announce(): void {\n if (!this.run) return;\n this.said = this.stage < 3 ? `${STAGES[this.stage]}, ${this.pics}`\n : this.nBad ? `${this.nDone} of ${this.n} ready, ${this.nBad} failed. Retry is on the failed one`\n : `${this.n === 1 ? 'Picture' : this.pics} ready`;\n }\n\n private start(request: GenerateRequest, ratio: number): void {\n this.pop = null; this.lb = null;\n const id = ++this.runs;\n this.run = { id, request, ratio, slots: Array.from({ length: request.count }, (_, i) => ({ key: `${id}-${i}`, progress: 0 })), t0: performance.now() };\n this.runRate = 0;\n this.announce();\n this.observeTiles();\n void Promise.resolve(this.generate?.(request, this.update(id, (s) => s))).catch(() => {});\n }\n private doGenerate(): void {\n const text = this.prompt.trim(); if (!text || this.busy) return;\n this.start({ prompt: text, styles: this.picked, shape: this.shape, count: this.count, model: this.model, references: this.refs }, SHAPES[this.shape]);\n }\n retry(i: number): void {\n const r = this.run; if (!r) return;\n const s = r.slots[i]; s.progress = 0; s.error = undefined;\n this.said = `Making picture ${i + 1} again`;\n void Promise.resolve(this.generate?.({ ...r.request, count: 1, retry: i }, this.update(r.id, () => i))).catch(() => {});\n }\n vary(im: GeneratedImage): void {\n this.said = 'Making a variation';\n this.start({ prompt: im.prompt ?? this.prompt, styles: im.styles ?? this.picked, shape: this.shape, count: 1, model: this.model, references: this.refs, variationOf: im }, im.ratio ?? SHAPES[this.shape]);\n }\n upscale(im: GeneratedImage): void {\n this.upped = { ...this.upped, [im.key]: 'upping' }; this.said = 'Upscaling';\n this.action.emit({ action: 'upscale', image: im });\n this.after(1700, () => { this.upped = { ...this.upped, [im.key]: 'up' }; this.said = 'Upscaled to twice the size'; });\n }\n private note(id: string, label: string): void {\n this.flash = { id, label }; this.said = label;\n this.after(1600, () => { if (this.flash?.id === id) this.flash = null; });\n }\n download(im: GeneratedImage, id: string): void {\n if (im.src) { const a = document.createElement('a'); a.href = im.src; a.download = ''; document.body.appendChild(a); a.click(); a.remove(); }\n this.action.emit({ action: 'download', image: im });\n this.note(id, im.src ? 'Downloading' : 'No file to download');\n }\n private reference(im: GeneratedImage, mine: boolean): void {\n if (!this.refs.includes(im)) this.refs = [...this.refs.slice(-2), im];\n this.said = 'Added as a reference'; this.action.emit({ action: 'reference', image: im });\n if (mine) this.after(0, () => this.ta?.nativeElement.focus({ preventScroll: true }));\n }\n useAsRef(im: GeneratedImage): void { this.closeLb(false); this.reference(im, true); }\n removeRef(im: GeneratedImage): void { this.refs = this.refs.filter((x) => x !== im); this.said = 'Reference removed'; this.ta?.nativeElement.focus({ preventScroll: true }); }\n rate(im: GeneratedImage, v: 1 | -1): void {\n const on = this.rating[im.key] !== v;\n const x = { ...this.rating }; if (on) x[im.key] = v; else delete x[im.key]; this.rating = x;\n this.said = on ? (v === 1 ? 'Marked as good' : 'Marked as bad') : 'Rating removed';\n if (on) this.action.emit({ action: v === 1 ? 'like' : 'dislike', image: im });\n }\n rateRun(v: 1 | -1): void {\n const on = this.runRate !== v; this.runRate = on ? v : 0;\n this.said = on ? (v === 1 ? 'Marked as good' : 'Marked as bad') : 'Rating removed';\n }\n copyPrompt(): void {\n if (!this.run) return;\n void navigator.clipboard?.writeText(this.run.request.prompt).catch(() => {});\n this.action.emit({ action: 'copy', image: this.run.slots[0]?.image ?? { key: '', alt: '' } });\n this.copied = true; this.said = 'Prompt copied';\n this.after(1600, () => { this.copied = false; });\n }\n toggleStyle(s: string): void { this.setPicked(this.picked.includes(s) ? this.picked.filter((x) => x !== s) : [...this.picked, s]); }\n pickPreset(p: ImageStylePreset): void {\n const changed = this.styles.filter((s) => this.picked.includes(s) !== p.styles.includes(s));\n this.setPicked(this.styles.filter((s) => p.styles.includes(s))); this.hl = changed; this.after(700, () => { this.hl = []; });\n this.said = `${p.label}: ${p.styles.join(' and ')}`;\n if (this.view !== 'create') this.showView('create');\n }\n\n // ----- the larger view -----\n openFromTile(s: Slot, e: Event): void {\n if (statusOf(s) !== 'done' || !s.image) return;\n const im = this.doneList.find((x) => x.key === s.image!.key); if (!im) return;\n this.open(this.doneList, im.key, e.currentTarget as HTMLElement, e.isTrusted);\n }\n openGallery(im: GeneratedImage, e: Event): void { this.open(this.all, im.key, e.currentTarget as HTMLElement, true); }\n private open(list: GeneratedImage[], key: string, from: HTMLElement | null, mine: boolean): void {\n this.pop = null; this.lb = { list, key, from, mine };\n if (mine) { this.pendingLbFocus = true; this.after(0, () => this.focusLb()); }\n }\n private focusLb(): void {\n if (!this.pendingLbFocus) return; this.pendingLbFocus = false;\n this.lbEl?.nativeElement.querySelector<HTMLElement>('.vo-igx-lbx')?.focus({ preventScroll: true });\n }\n closeLb(back: boolean): void {\n const from = this.lb?.from; this.lb = null;\n if (back && from?.isConnected) from.focus({ preventScroll: true });\n }\n step(d: number): void {\n if (!this.lb) return; const i = this.lbAt + d;\n if (i >= 0 && i < this.lb.list.length) this.lb = { ...this.lb, key: this.lb.list[i].key };\n }\n lbKeys(e: KeyboardEvent): void {\n if (!this.lb) return;\n if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); this.closeLb(true); return; }\n if ((e.key === 'ArrowLeft' || e.key === 'ArrowRight') && !(e.target as HTMLElement).closest('.vo-igx-lbf')) { e.preventDefault(); this.step(e.key === 'ArrowLeft' ? -1 : 1); return; }\n if (e.key === 'Tab') {\n const f = Array.from(this.lbEl?.nativeElement.querySelectorAll<HTMLButtonElement>('button:not(:disabled)') ?? []), a = f[0], z = f[f.length - 1];\n if (e.shiftKey && document.activeElement === a) { e.preventDefault(); z?.focus(); }\n else if (!e.shiftKey && document.activeElement === z) { e.preventDefault(); a?.focus(); }\n }\n }\n\n // the pictures share the room, as large as their shape and number allow\n private observeTiles(): void {\n this.ro?.disconnect();\n this.after(0, () => {\n const el = this.tiles?.nativeElement; if (!el) return;\n const fit = (): void => {\n const r = this.run; if (!r) return;\n const W = el.clientWidth, H = el.clientHeight, k = r.slots.length, g = 8;\n let best = { cols: 1, rows: 1, w: -1, gap: k };\n for (let cols = 1; cols <= k; cols++) {\n const rows = Math.ceil(k / cols), w = Math.min((W - (cols - 1) * g) / cols, (H - (rows - 1) * g) / rows * r.ratio), gap = cols * rows - k;\n if (w > best.w + 0.5 || (w > best.w - 0.5 && gap <= best.gap)) best = { cols, rows, w, gap };\n }\n if (this.grid.cols !== best.cols || this.grid.rows !== best.rows) this.grid = { cols: best.cols, rows: best.rows };\n };\n fit();\n this.ro = new ResizeObserver(fit); this.ro.observe(el);\n });\n }\n}\n","// framework/angular/inline-text-diff/inline-text-diff.component.ts\n//\n// Native Angular port of framework/react/inline-text-diff/InlineTextDiff.tsx.\n// A piece of copy with the agent's edits marked inline, struck and added. Each\n// edit opens a small toolbar to accept or reject it; the header takes the rest\n// all at once, and an edit the agent isn't sure of says why. Inputs mirror the\n// React props; the toolbar's position is measured in ngAfterViewInit-style\n// effects after the current edit changes.\n//\n// Icons: check, x, alert, ok — all present in the Angular core glyph table, so\n// no substitutions were needed.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One of the agent's edits to the copy. */\nexport interface TextEdit {\n key: string;\n /** The words the copy has now, shown struck. */\n from: string;\n /** The words the agent suggests instead. */\n to: string;\n /** Why the agent isn't sure of this one. The edit is marked and the note shows above its buttons. */\n note?: string;\n}\n\n/** A run of the copy as it stands, or one of the agent's edits to it. */\nexport type TextPart = string | TextEdit;\n\n/** What was decided for an edit. */\nexport type EditDecision = 'accepted' | 'rejected';\n\n/** Optional button label overrides. */\nexport interface InlineTextDiffLabels {\n accept?: string;\n reject?: string;\n acceptAll?: string;\n rejectAll?: string;\n}\n\nconst isEdit = (p: TextPart): p is TextEdit => typeof p !== 'string';\n\n@Component({\n selector: 'vo-inline-text-diff',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n [class]=\"className\"\n style=\"width:100%\"\n (keydown)=\"onRootKeydown($event)\"\n >\n <div\n #root\n class=\"vo-itd vo-panel\"\n [class.vo-held]=\"held !== null\"\n [style.minHeight.px]=\"held\"\n >\n <div class=\"vo-itd-h\">\n <div class=\"vo-itd-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-itd-st\">{{ status }}</span>\n </div>\n @if (left > 0) {\n <div class=\"vo-itd-a\">\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-itd-no\" (click)=\"all('rejected')\">\n {{ L.rejectAll }}\n </button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-itd-ok\" (click)=\"all('accepted')\">\n {{ L.acceptAll }}\n </button>\n </div>\n }\n </div>\n <p class=\"vo-itd-t\">\n @for (p of parts; track $index) {\n @if (asEdit(p); as e) {\n <span\n #chunk\n class=\"vo-itd-c\"\n [class.vo-unsure]=\"!!e.note\"\n [class.vo-on]=\"cur === e.key\"\n [class.vo-acc]=\"dec[e.key] === 'accepted'\"\n [class.vo-rej]=\"dec[e.key] === 'rejected'\"\n [attr.data-edit]=\"e.key\"\n role=\"button\"\n tabindex=\"0\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"cur === e.key\"\n [attr.aria-label]=\"editLabel(e)\"\n (click)=\"toggle(e.key)\"\n (keydown)=\"onChunkKeydown($event, e.key)\"\n ><del>{{ e.from }}</del><ins>{{ e.to }}</ins></span>\n } @else {\n {{ p }}\n }\n }\n </p>\n <p class=\"vo-itd-f vo-muted\" aria-live=\"polite\">\n @if (left === 0) {\n <span class=\"vo-enter\" style=\"display:inline-flex;align-items:center;gap:6px\">\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon><span>{{ doneLabel }}</span>\n </span>\n }\n </p>\n <div\n #bar\n class=\"vo-itd-bar\"\n [class.vo-open]=\"!!open\"\n role=\"dialog\"\n aria-label=\"Edit\"\n [attr.inert]=\"open ? null : ''\"\n [style.left.px]=\"at.left\"\n [style.top.px]=\"at.top\"\n (keydown)=\"onBarKeydown($event)\"\n >\n @if (lastNote) {\n <p class=\"vo-itd-why\"><vo-icon name=\"alert\" size=\"xs\"></vo-icon><span>{{ lastNote }}</span></p>\n }\n <div class=\"vo-itd-bb\">\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-itd-acc\" (click)=\"decide('accepted')\">\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>{{ L.accept }}\n </button>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-itd-rej\" (click)=\"decide('rejected')\">\n <vo-icon name=\"x\" size=\"xs\"></vo-icon>{{ L.reject }}\n </button>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrl: './inline-text-diff.css',\n})\nexport class InlineTextDiffComponent implements AfterViewInit, OnDestroy {\n /** What the copy is, like \"Pricing intro\". */\n @Input({ required: true }) title!: string;\n\n /** The copy in order: plain strings, with the edits between them. */\n @Input({ required: true }) parts: TextPart[] = [];\n\n /** The initial decisions by edit key; edits left out wait for a decision. */\n @Input() defaultDecisions: Record<string, EditDecision> = {};\n\n /** The line that replaces the buttons once every edit is decided. */\n @Input() doneLabel = 'Every edit reviewed';\n\n /** Button label overrides. */\n @Input()\n set labels(v: InlineTextDiffLabels) {\n this.L = { accept: 'Accept', reject: 'Reject', acceptAll: 'Accept all', rejectAll: 'Reject all', ...v };\n }\n\n /** Extra class on the root wrapper. */\n @Input() className = '';\n\n /** Emitted whenever the decisions change, with the full map by key. */\n @Output() decisionsChange = new EventEmitter<Record<string, EditDecision>>();\n\n @ViewChild('root') root!: ElementRef<HTMLDivElement>;\n @ViewChild('bar') bar!: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n L: Required<InlineTextDiffLabels> = {\n accept: 'Accept',\n reject: 'Reject',\n acceptAll: 'Accept all',\n rejectAll: 'Reject all',\n };\n\n dec: Record<string, EditDecision> = {};\n cur: string | null = null;\n at = { left: 0, top: 0 };\n /** The card keeps the height it had with every edit open once decisions begin. */\n held: number | null = null;\n /** The toolbar keeps the last edit's note while it fades out. */\n lastNote = '';\n\n private openHeight: number | undefined;\n private onDocDown = (ev: PointerEvent) => {\n const t = ev.target as Element;\n if (this.cur && !this.bar?.nativeElement.contains(t) && !t.closest?.('.vo-itd-c')) {\n this.cur = null;\n }\n };\n\n ngAfterViewInit(): void {\n this.dec = { ...this.defaultDecisions };\n // measure the open height once, before any edit is folded away\n queueMicrotask(() => {\n if (this.fresh && this.root) this.openHeight = this.root.nativeElement.offsetHeight;\n });\n document.addEventListener('pointerdown', this.onDocDown);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onDocDown);\n }\n\n get edits(): TextEdit[] {\n return this.parts.filter(isEdit);\n }\n\n get left(): number {\n return this.edits.filter((e) => !this.dec[e.key]).length;\n }\n\n get fresh(): boolean {\n return this.left === this.edits.length;\n }\n\n get open(): TextEdit | undefined {\n return this.edits.find((e) => e.key === this.cur);\n }\n\n get status(): string {\n const edits = this.edits;\n const left = this.left;\n const yes = edits.filter((e) => this.dec[e.key] === 'accepted').length;\n return left === edits.length\n ? `${left} edits to review`\n : left\n ? `${left} of ${edits.length} left`\n : `${yes} accepted, ${edits.length - yes} rejected`;\n }\n\n asEdit(p: TextPart): TextEdit | null {\n return isEdit(p) ? p : null;\n }\n\n editLabel(e: TextEdit): string {\n const n = this.edits.indexOf(e);\n return `Edit ${n + 1} of ${this.edits.length}: ${e.from}, suggested ${e.to}`;\n }\n\n toggle(key: string): void {\n this.cur = this.cur === key ? null : key;\n this.position();\n }\n\n onChunkKeydown(ev: KeyboardEvent, key: string): void {\n if (ev.key === 'Enter' || ev.key === ' ') {\n ev.preventDefault();\n const wasOpen = this.cur === key;\n this.toggle(key);\n // as a dialog takes the focus, open with the focus on Accept\n if (!wasOpen && this.cur === key) {\n queueMicrotask(() =>\n this.bar?.nativeElement.querySelector<HTMLElement>('.vo-itd-acc')?.focus({ preventScroll: true }),\n );\n }\n }\n }\n\n // the left and right arrows move between Accept and Reject\n onBarKeydown(ev: KeyboardEvent): void {\n const bs = Array.from(this.bar?.nativeElement.querySelectorAll<HTMLElement>('button') ?? []);\n const j = bs.indexOf(document.activeElement as HTMLElement);\n if (j < 0) return;\n const d = ({ ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 } as Record<string, number>)[ev.key];\n const to = d\n ? bs[(j + d + bs.length) % bs.length]\n : ev.key === 'Home'\n ? bs[0]\n : ev.key === 'End'\n ? bs[bs.length - 1]\n : null;\n if (to) {\n ev.preventDefault();\n to.focus({ preventScroll: true });\n }\n }\n\n onRootKeydown(ev: KeyboardEvent): void {\n if (ev.key === 'Escape' && this.cur) {\n const el = this.chunkEl(this.cur);\n this.cur = null;\n el?.focus({ preventScroll: true });\n }\n }\n\n decide(s: EditDecision): void {\n if (!this.cur) return;\n const key = this.cur;\n const back = this.bar?.nativeElement.contains(document.activeElement);\n const el = this.chunkEl(key);\n this.cur = null;\n this.set(key, s);\n if (back) el?.focus({ preventScroll: true });\n }\n\n all(s: EditDecision): void {\n this.cur = null;\n const next = { ...this.dec };\n for (const e of this.edits) if (!next[e.key]) next[e.key] = s;\n this.commit(next);\n }\n\n private set(key: string, s: EditDecision): void {\n this.commit({ ...this.dec, [key]: s });\n }\n\n // each decision folds an edit into plain text: from the first one the card\n // keeps the height it had with every edit open, and centres what is left in it\n private commit(next: Record<string, EditDecision>): void {\n this.dec = next;\n if (this.held === null && !this.fresh) this.held = this.openHeight ?? null;\n this.decisionsChange.emit({ ...next });\n }\n\n // the toolbar opens under the edit's last line; inside a scaled preview the\n // offsets are divided by its scale\n private position(): void {\n const n = this.open;\n if (n) this.lastNote = n.note ?? '';\n queueMicrotask(() => {\n const r = this.root?.nativeElement;\n const b = this.bar?.nativeElement;\n const el = this.cur ? this.chunkEl(this.cur) : null;\n if (!r || !b || !el) return;\n const rb = r.getBoundingClientRect();\n const k = rb.width / r.offsetWidth || 1;\n const rs = el.getClientRects();\n const cr = rs[rs.length - 1] ?? el.getBoundingClientRect();\n this.at = {\n left: Math.max(12, Math.min((cr.left - rb.left) / k, r.offsetWidth - b.offsetWidth - 12)),\n top: (cr.bottom - rb.top) / k + 6,\n };\n });\n }\n\n private chunkEl(key: string): HTMLElement | null {\n return this.root?.nativeElement.querySelector<HTMLElement>(`[data-edit=\"${key}\"]`) ?? null;\n }\n}\n","// framework/angular/launch-checklist/launch-checklist.component.ts\n//\n// Native Angular port of framework/react/launch-checklist/LaunchChecklist.tsx.\n// Pre-flight checks before something ships: a progress bar of one segment per\n// check, and a list of rows that each carry a glyph (waiting ring, spinner, ok\n// or alert), a label and a quiet note. A failed check shows a Fix button. Inputs\n// mirror the React props; the Fix button is surfaced as an @Output.\n//\n// Icon substitutions (Angular core glyph set vs. the React source):\n// - action icon \"play\" / \"refresh\" exist and are used as-is.\n// - the React \"wand\" (Fix) glyph is not in the Angular set -> uses \"spark\".\n// - the React \"rocket\" (Ship it) glyph is not in the Angular set -> uses \"spark\".\n// The action icon is caller-provided (VoIconName), so callers pick any available glyph.\n\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\n/** The state of one check: waiting, running (checking or fixing), passed or failed. */\nexport type CheckState = 'wait' | 'run' | 'ok' | 'bad';\n\n/** One row in the checklist. */\nexport interface LaunchCheck {\n /** What is checked, like \"Contrast meets AA\". */\n label: string;\n /** wait (not run yet), run (checking or fixing now), ok or bad. */\n state: CheckState;\n /** The quiet line under the label, like \"All 14 text pairs pass\" or what is wrong. */\n note?: string;\n /** When true on a failed check, a Fix button is shown (emits `fix` with the index). */\n canFix?: boolean;\n}\n\n/** The button beside the title, like Run checks, Run again or Ship it. */\nexport interface LaunchAction {\n label: string;\n icon?: VoIconName;\n /** The accent (ship) colour, for the step that ships. */\n accent?: boolean;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'vo-launch-checklist',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-lcx\"\n [class.vo-panel]=\"!bare\"\n [class.vo-bare]=\"bare\"\n >\n <div class=\"vo-lcx-h\">\n <div>\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-lcx-st\">{{ status ?? summary() }}</span>\n </div>\n @if (action) {\n <button\n type=\"button\"\n class=\"vo-pill vo-sm vo-lcx-run\"\n [class.vo-accent]=\"action.accent\"\n [class.vo-primary]=\"!action.accent\"\n [disabled]=\"action.disabled\"\n (click)=\"run.emit()\"\n >\n @if (action.icon) {\n <vo-icon [name]=\"action.icon\" size=\"xs\"></vo-icon>\n }\n {{ action.label }}\n </button>\n }\n </div>\n\n <div\n class=\"vo-lcx-bar\"\n role=\"progressbar\"\n [attr.aria-label]=\"title\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"checks.length\"\n [attr.aria-valuenow]=\"done()\"\n >\n @for (c of checks; track $index) {\n <i [class]=\"c.state === 'wait' ? '' : 'vo-' + c.state\"></i>\n }\n </div>\n\n <div class=\"vo-lcx-list\">\n @for (c of checks; track $index) {\n <div class=\"vo-lcx-r\" [class]=\"'vo-lcx-r vo-' + c.state\">\n <span class=\"vo-g\">\n @switch (c.state) {\n @case ('run') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('ok') {\n <span class=\"vo-enter\" style=\"display:grid;color:var(--vo-ok)\">\n <vo-icon name=\"ok\"></vo-icon>\n </span>\n }\n @case ('bad') {\n <span class=\"vo-enter\" style=\"display:grid;color:var(--vo-bad)\">\n <vo-icon name=\"alert\"></vo-icon>\n </span>\n }\n @default {\n <span class=\"vo-lcx-ring\"></span>\n }\n }\n </span>\n <span class=\"vo-t\"\n >{{ c.label }}<span class=\"vo-d\">{{ c.note ?? '' }}</span></span\n >\n @if (c.state === 'bad' && c.canFix) {\n <button\n type=\"button\"\n class=\"vo-pill vo-soft vo-sm vo-enter\"\n (click)=\"fix.emit($index)\"\n >\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>Fix\n </button>\n }\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './launch-checklist.css',\n})\nexport class LaunchChecklistComponent {\n /** Like \"Ready to ship pricing?\". */\n @Input() title = 'Ready to ship?';\n\n /** The checks, one row (and one bar segment) each. */\n @Input() checks: LaunchCheck[] = [];\n\n /** The line under the title. Defaults to a count, \"Checking\" while one runs, then what is left to fix. */\n @Input() status?: string;\n\n /** The button beside the title; omit for no button. */\n @Input() action: LaunchAction | null = null;\n\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n /** Emitted when the action button is clicked (Run checks / Run again / Ship it). */\n @Output() run = new EventEmitter<void>();\n\n /** Emitted with the check index when its Fix button is clicked. */\n @Output() fix = new EventEmitter<number>();\n\n /** The default status line, mirroring the React summary(). */\n summary(): string {\n if (this.checks.some((c) => c.state === 'run')) return 'Checking';\n if (this.checks.every((c) => c.state === 'wait')) {\n return `${this.checks.length} checks`;\n }\n const bad = this.checks.filter((c) => c.state === 'bad').length;\n return bad ? `${bad} to fix before shipping` : 'All clear, ready to ship';\n }\n\n /** Checks that have a result, for the progress bar's aria-valuenow. */\n done(): number {\n return this.checks.filter((c) => c.state === 'ok' || c.state === 'bad').length;\n }\n}\n","// framework/angular/line-chart/line-chart.component.ts\n//\n// Native Angular port of framework/react/line-chart/LineChart.tsx.\n// Two series over time: the first is a solid line with a soft fill, the rest\n// dashed to compare against. The lines draw in from the left while the big\n// number counts up; a pointer readout follows the cursor and the legend toggles\n// the series (one always stays on). Inputs mirror the React props; the draw-in,\n// the count-up and the pointer readout are ported from the vanilla JS\n// (line-chart.js). Tokens only — no color literals.\n//\n// No icons are used by this component, so core/icon.component is not imported.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One series of the chart. */\nexport interface LineChartSeries {\n /** Names the series in `visible`. */\n key: string;\n /** The legend's label, like \"This year\". */\n label: string;\n /** One value per point, oldest first. */\n values: number[];\n /** Defaults to the chart palette: the accent for the first series, then violet, green and so on. */\n color?: string;\n}\n\nconst W = 320, H = 140;\n\n// a smooth line through the points, eased halfway between each pair, as the site draws it\nfunction smooth(p: [number, number][]): string {\n return p\n .map((q, i) => {\n if (!i) return `M${q[0]} ${q[1]}`;\n const a = p[i - 1], m = (q[0] - a[0]) / 2;\n return `C${a[0] + m} ${a[1]} ${q[0] - m} ${q[1]} ${q[0]} ${q[1]}`;\n })\n .join(' ');\n}\n\n/** The default whole-number format, like 1,620. */\nfunction formatCount(n: number): string {\n return Math.round(n).toLocaleString('en-US');\n}\n\n/** Internal per-series render state. */\ninterface SeriesView {\n series: LineChartSeries;\n index: number;\n d: string;\n points: [number, number][];\n color: string;\n dash: string | null;\n shown: boolean;\n ptLeft: number;\n ptTop: number;\n}\n\n@Component({\n selector: 'vo-line-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-lnx vo-panel\">\n <div class=\"vo-lnx-h\">\n <div>\n <span class=\"vo-muted\">{{ label }}</span>\n <b class=\"vo-num vo-lnx-v\">{{ format(value) }}</b>\n </div>\n <div class=\"vo-lnx-lg\">\n @for (s of views; track s.series.key) {\n <button\n type=\"button\"\n class=\"vo-lnx-k\"\n [class.vo-on]=\"s.shown\"\n [attr.aria-pressed]=\"s.shown\"\n (click)=\"toggle(s.index)\"\n >\n <i [style.background]=\"s.color\"></i>{{ s.series.label }}\n </button>\n }\n </div>\n </div>\n <div\n #chart\n class=\"vo-lnx-ch\"\n (pointermove)=\"move($event)\"\n (pointerleave)=\"leave()\"\n >\n <svg\n class=\"vo-lnx-svg\"\n [attr.viewBox]=\"'0 0 ' + W + ' ' + H\"\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n >\n <defs>\n <linearGradient [attr.id]=\"ids + 'g'\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0\" [attr.stop-color]=\"leadColor\" stop-opacity=\".16\"></stop>\n <stop offset=\"1\" [attr.stop-color]=\"leadColor\" stop-opacity=\"0\"></stop>\n </linearGradient>\n <clipPath [attr.id]=\"ids + 'c'\">\n <rect x=\"0\" y=\"-10\" [attr.width]=\"clip\" height=\"160\"></rect>\n </clipPath>\n </defs>\n @for (g of grid; track g) {\n <line class=\"vo-gl\" x1=\"0\" [attr.x2]=\"W\" [attr.y1]=\"g\" [attr.y2]=\"g\"></line>\n }\n <g [attr.clip-path]=\"'url(#' + ids + 'c)'\">\n <path\n class=\"vo-ar\"\n [attr.d]=\"areaD\"\n [attr.fill]=\"'url(#' + ids + 'g)'\"\n [style.opacity]=\"views[0]?.shown ? 1 : 0\"\n ></path>\n <!-- the main line goes on top -->\n @for (s of drawOrder; track s.series.key) {\n <path\n class=\"vo-ln\"\n [class.vo-off]=\"!s.shown\"\n [attr.d]=\"s.d\"\n [style.stroke]=\"s.color\"\n [attr.stroke-dasharray]=\"s.dash\"\n ></path>\n }\n </g>\n </svg>\n <div class=\"vo-lnx-x\" [style.left.px]=\"at ? px : null\"></div>\n <div class=\"vo-lnx-tt\" [style.left.px]=\"at ? ttLeft : null\">\n <b class=\"vo-num\">{{ ttValue }}</b>\n <span>{{ ttLabel }}</span>\n </div>\n @for (s of views; track s.series.key) {\n <span\n class=\"vo-lnx-pt\"\n [class.vo-on]=\"s.shown\"\n [style.color]=\"s.color\"\n [style.left.px]=\"at ? s.ptLeft : null\"\n [style.top.px]=\"at ? s.ptTop : null\"\n ></span>\n }\n </div>\n <div class=\"vo-lnx-ax vo-muted vo-num\">\n @for (t of ticks; track $index) {\n <span>{{ t }}</span>\n }\n </div>\n </div>\n `,\n styleUrl: './line-chart.css',\n})\nexport class LineChartComponent implements AfterViewInit, OnDestroy {\n /** The name over the big number, like \"Active editors\". */\n @Input({ required: true }) label = '';\n /** The first series is the main one; the others are dashed, to compare against. */\n @Input({ required: true }) series: LineChartSeries[] = [];\n /** One name per point, shown in the hover readout, like the months. */\n @Input({ required: true }) points: string[] = [];\n /** Labels spread along the bottom. Defaults to every other point. */\n @Input() axis?: string[];\n /** The values at the bottom and top of the chart. Defaults to the data's range with a little room. */\n @Input() range?: [number, number];\n /** What the values count, like \"editors\" in \"1,620 editors\". */\n @Input() unit?: string;\n /** Ends the readout's comparison of the first two series, like \"vs last year\". */\n @Input() compareLabel?: string;\n /** Writes a value. Defaults to whole numbers like 1,620. */\n @Input() format: (n: number) => string = formatCount;\n /** Keys of the series shown. Leave it out to let the legend toggle them. One always stays on. */\n @Input() set visible(value: string[] | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) {\n this.on = this.series.map((s) => value.includes(s.key));\n if (this.ready) this.apply();\n }\n }\n @Input() defaultVisible?: string[];\n\n @Output() visibleChange = new EventEmitter<string[]>();\n\n @ViewChild('chart') private chart!: ElementRef<HTMLElement>;\n\n readonly W = W;\n readonly H = H;\n readonly grid = [35, 70, 105];\n ids = 'lnx' + Math.random().toString(36).slice(2, 8);\n\n views: SeriesView[] = [];\n drawOrder: SeriesView[] = [];\n ticks: string[] = [];\n areaD = '';\n leadColor = 'var(--vo-accent)';\n\n clip = 0;\n value = 0;\n at = false;\n px = 0;\n ttLeft = 0;\n ttValue = '';\n ttLabel = '';\n\n private on: boolean[] = [];\n private lo = 0;\n private hi = 1;\n private last = 1;\n private controlled = false;\n private ready = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n private color(k: number): string {\n return this.series[k].color ?? (k ? `var(--vo-c${(k % 6) + 1})` : 'var(--vo-accent)');\n }\n\n private y(d: number): number {\n return 136 - ((d - this.lo) / (this.hi - this.lo || 1)) * 128;\n }\n\n ngAfterViewInit(): void {\n const n = this.points.length;\n this.last = Math.max(1, n - 1);\n const all = this.series.flatMap((s) => s.values);\n const min = Math.min(...all), max = Math.max(...all);\n [this.lo, this.hi] = this.range ?? [min - (max - min) * 0.11, max + (max - min) * 0.08];\n this.ticks = this.axis ?? this.points.filter((_, i) => i % 2 === 0);\n\n if (!this.controlled) {\n const def = this.defaultVisible ?? this.series.map((s) => s.key);\n this.on = this.series.map((s) => def.includes(s.key));\n }\n\n this.views = this.series.map((s, index) => {\n const pts = s.values.map((d, i): [number, number] => [(i / this.last) * W, this.y(d)]);\n return {\n series: s,\n index,\n points: pts,\n d: smooth(pts),\n color: this.color(index),\n dash: index ? '4 4' : null,\n shown: this.on[index],\n ptLeft: 0,\n ptTop: 0,\n };\n });\n // the main line is drawn last so it sits on top of the dashed ones\n this.drawOrder = [...this.views.slice(1).reverse(), ...this.views.slice(0, 1)];\n this.areaD = `${this.views[0]?.d ?? ''} L${W} ${H} L0 ${H} Z`;\n\n this.apply();\n this.ready = true;\n\n const lead = Math.max(0, this.on.indexOf(true));\n const target = this.series[lead]?.values[n - 1] ?? 0;\n this.cdr.detectChanges();\n\n // the lines draw in from the left while the big number counts up\n if (this.reduced.reduce()) {\n this.clip = W;\n this.value = target;\n this.cdr.markForCheck();\n } else {\n this.later(() => {\n this.tween(0, W, 1300, (w) => (this.clip = w), true);\n this.tween(0, target, 1300, (n2) => (this.value = n2), true);\n }, 260);\n }\n }\n\n private apply(): void {\n for (const v of this.views) v.shown = this.on[v.index];\n this.areaD = `${this.views[0]?.d ?? ''} L${W} ${H} L0 ${H} Z`;\n this.leadColor = this.views[0]?.color ?? 'var(--vo-accent)';\n this.cdr.markForCheck();\n }\n\n toggle(k: number): void {\n const onCount = this.on.filter(Boolean).length;\n if (this.on[k] && onCount === 1) return;\n if (!this.controlled) {\n this.on = this.on.map((v, j) => (j === k ? !v : v));\n this.apply();\n // the big number rolls to the latest value of the leading line that is showing\n const lead = Math.max(0, this.on.indexOf(true));\n const to = this.series[lead].values[this.points.length - 1];\n const from = this.value;\n if (from !== to) {\n if (this.reduced.reduce()) this.value = to;\n else this.tween(from, to, 600, (n) => (this.value = n), false);\n }\n }\n this.visibleChange.emit(this.series.filter((_, j) => (j === k ? !this.on[j] : this.on[j])).map((s) => s.key));\n }\n\n move(e: PointerEvent): void {\n const b = this.chart.nativeElement.getBoundingClientRect();\n const i = Math.max(0, Math.min(this.last, Math.round(((e.clientX - b.left) / b.width) * this.last)));\n this.at = true;\n this.px = (i / this.last) * b.width;\n this.ttLeft = Math.max(50, Math.min(this.px, b.width - 50));\n for (const v of this.views) {\n v.ptLeft = this.px;\n v.ptTop = (v.points[i][1] / H) * b.height;\n }\n const lead = Math.max(0, this.on.indexOf(true));\n this.ttValue = this.format(this.series[lead].values[i]) + (this.unit ? ' ' + this.unit : '');\n const both = this.on[0] && this.on[1];\n if (this.compareLabel && both && this.series[1]) {\n const pct = Math.round((this.series[0].values[i] / this.series[1].values[i] - 1) * 100);\n this.ttLabel = `${this.points[i]}, ${pct < 0 ? '−' : '+'}${Math.abs(pct)}% ${this.compareLabel}`;\n } else {\n this.ttLabel = this.points[i];\n }\n this.value = this.series[lead].values[i];\n this.cdr.markForCheck();\n }\n\n leave(): void {\n this.at = false;\n const lead = Math.max(0, this.on.indexOf(true));\n this.value = this.series[lead].values[this.points.length - 1];\n this.cdr.markForCheck();\n }\n\n // eases from `from` to `to` over `dur`; `easeInOut` uses the cubic in-out from the vanilla draw\n private tween(from: number, to: number, dur: number, set: (n: number) => void, easeInOut: boolean): void {\n const t0 = performance.now();\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n const e = easeInOut\n ? p < 0.5\n ? 4 * p * p * p\n : 1 - Math.pow(-2 * p + 2, 3) / 2\n : 1 - Math.pow(1 - p, 3);\n set(from + (to - from) * e);\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/live-answer/live-answer.component.ts\n//\n// Native Angular port of framework/react/live-answer/LiveAnswer.tsx.\n// A question and an answer that streams in word by word, with numbered\n// citations, a sources list and suggested follow-ups, then more turns below it.\n// Inputs mirror the React props; callback props become @Output EventEmitters.\n// The word/citation split, the thoughts and sources folds, the hover/pin\n// highlight, the rating and the copy are ported from the React logic and the\n// vanilla JS (live-answer.js). The seconds counter runs while a turn is\n// thinking; reduced motion is respected via the shared ReducedMotionService.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A source the answer can cite. */\nexport interface AnswerSource {\n /** The number its citations use: [1] in the text cites source 1. */\n n: number;\n /** Like \"Funnel data\". */\n title: string;\n /** Where it came from, shown in the list, like \"Amplitude, last 30 days\". */\n detail?: string;\n /** Shown when you hover a citation. Defaults to the title and detail. */\n tip?: string;\n /** The letter on its badge. Defaults to the title's first letter. */\n mark?: string;\n /** Badge colour, any CSS colour. */\n color?: string;\n}\n\n/** waiting shows nothing yet, thinking shows the Thinking line, answering streams the text, done adds sources and actions. */\nexport type AnswerState = 'waiting' | 'thinking' | 'answering' | 'done';\n\n/** One question-and-answer turn in the thread. */\nexport interface AnswerTurn {\n /** Keeps each turn in place when turns are added. Defaults to its index. */\n key?: string | number;\n /** What the person asked, shown as a bubble above the answer. Leave it out when the bubble is shown elsewhere, like in a chat. */\n question?: string;\n /** waiting shows nothing yet, thinking shows the Thinking line, answering streams the text, done adds sources and actions. */\n state: AnswerState;\n /** The answer so far. Each new word fades in as it arrives. [1] after a word cites source 1, a blank line starts a new paragraph. */\n text?: string;\n /** What the agent did before it answered, listed under a toggle that counts them, like \"3 steps · 2s\". */\n thoughts?: string[];\n /** Seconds it thought for. Leave it out to count while thinking. */\n thoughtFor?: number;\n sources?: AnswerSource[];\n}\n\n/** A rating given with the thumbs up/down buttons. */\nexport type AnswerRating = 'good' | 'bad' | null;\n\n/** A word with any [n] citations that hung on it. */\ninterface Cite {\n n: number;\n rest: string;\n}\ninterface Word {\n text: string;\n cites: Cite[];\n}\n\n/** A paragraph as its words, plus whether its last word carries a citation. */\ntype Paragraph = Word[];\n\n/** The per-turn interactive state kept by the component. */\ninterface TurnView {\n turn: AnswerTurn;\n index: number;\n /** Bumped whenever the turn goes back from done to answering, so it starts afresh. */\n round: number;\n seenState: AnswerState;\n thoughtsOpen: boolean;\n listOpen: boolean;\n hover: number | null;\n pin: number | null;\n rating: AnswerRating;\n copied: boolean;\n counted: number;\n}\n\n/** Splits a paragraph into words, hanging each [n] citation on the word before it. */\nfunction words(par: string, streaming: boolean): Word[] {\n const toks = par.split(' ').filter(Boolean);\n // a citation still arriving, like \"[\" or \"[2\", waits until it is complete\n if (streaming && /^\\[\\d*$/.test(toks[toks.length - 1] ?? '')) toks.pop();\n const out: Word[] = [];\n for (const tok of toks) {\n const m = tok.match(/^\\[(\\d+)\\](.*)$/);\n if (m && out.length) out[out.length - 1].cites.push({ n: +m[1], rest: m[2] });\n else out.push({ text: tok, cites: [] });\n }\n return out;\n}\n\nconst plain = (text: string) =>\n text.replace(/\\s*\\[\\d+\\]/g, '').replace(/\\s+/g, ' ').trim();\n\n@Component({\n selector: 'vo-live-answer',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-lva\" [class]=\"className\">\n @if (turns.length > 0 && turns[0].question) {\n <div class=\"vo-lva-q\"><div class=\"vo-bub\">{{ turns[0].question }}</div></div>\n }\n <div class=\"vo-lva-a\">\n @for (v of views; track v.turn.key ?? v.index) {\n @if (v.index > 0 && v.turn.question) {\n <div class=\"vo-lva-q vo-enter\"><div class=\"vo-bub\">{{ v.turn.question }}</div></div>\n }\n <div class=\"vo-lva-turn\">\n @if (v.turn.state === 'thinking') {\n <div class=\"vo-lva-th vo-enter\">\n <span style=\"color:var(--vo-fg2);display:grid\" class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <span class=\"vo-shim\">Thinking</span>\n </div>\n }\n @if ((v.turn.state === 'answering' || v.turn.state === 'done') && v.turn.thoughts?.length) {\n <button type=\"button\" class=\"vo-lva-th vo-lva-tb\" [attr.aria-expanded]=\"v.thoughtsOpen\" (click)=\"v.thoughtsOpen = !v.thoughtsOpen\">\n <span>{{ v.turn.thoughts!.length }} {{ v.turn.thoughts!.length === 1 ? 'step' : 'steps' }} · {{ v.turn.thoughtFor ?? max1(v.counted) }}s</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!v.thoughtsOpen\" [attr.inert]=\"v.thoughtsOpen ? null : ''\" [attr.aria-hidden]=\"!v.thoughtsOpen\">\n <div>\n <ul class=\"vo-lva-tlist\">\n @for (t of v.turn.thoughts; track $index) {<li>{{ t }}</li>}\n </ul>\n </div>\n </div>\n }\n @if (v.turn.state === 'answering' || v.turn.state === 'done') {\n @for (par of paragraphs(v.turn); track $index) {\n <p class=\"vo-lva-p\">\n @for (w of par; track $index) {\n <span class=\"vo-w\" [style.white-space]=\"w.cites.length ? 'nowrap' : null\">\n {{ w.text }}\n @for (c of w.cites; track $index) {\n <span\n class=\"vo-cite\"\n [class.vo-on]=\"active(v) === c.n\"\n [style.cursor]=\"v.turn.state === 'done' ? 'pointer' : null\"\n [attr.title]=\"v.turn.state === 'done' ? tipOf(v.turn, c.n) : null\"\n (mouseenter)=\"v.turn.state === 'done' && (v.hover = c.n)\"\n (mouseleave)=\"v.turn.state === 'done' && (v.hover = null)\"\n (click)=\"v.turn.state === 'done' && pick(v, c.n)\"\n >{{ c.n }}</span>{{ c.rest }}\n }\n {{ ' ' }}\n </span>\n }\n </p>\n }\n }\n @if (v.turn.state === 'done') {\n <div class=\"vo-lva-src vo-enter\">\n <span class=\"vo-lva-acts\">\n <button type=\"button\" class=\"vo-ib\" [class.vo-copied]=\"v.copied\" [attr.title]=\"v.copied ? 'Copied to clipboard' : 'Copy'\" aria-label=\"Copy\" (click)=\"copy(v)\">\n <vo-icon [name]=\"v.copied ? 'check' : 'copy'\"></vo-icon>\n </button>\n <button type=\"button\" class=\"vo-ib\" [class.vo-on]=\"v.rating === 'good'\" [attr.aria-pressed]=\"v.rating === 'good'\" aria-label=\"Good answer\" title=\"Good answer\" (click)=\"rate(v, 'good')\">\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n <button type=\"button\" class=\"vo-ib vo-down\" [class.vo-on]=\"v.rating === 'bad'\" [attr.aria-pressed]=\"v.rating === 'bad'\" aria-label=\"Bad answer\" title=\"Bad answer\" (click)=\"rate(v, 'bad')\">\n <vo-icon name=\"hand\"></vo-icon>\n </button>\n @if (retryOn) {\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Try again\" title=\"Try again\" (click)=\"retry.emit(v.index)\">\n <vo-icon name=\"refresh\"></vo-icon>\n </button>\n }\n </span>\n @if (sourcesOf(v.turn).length > 0) {\n <button type=\"button\" class=\"vo-lva-sb\" [attr.aria-expanded]=\"v.listOpen\" (click)=\"v.listOpen = !v.listOpen\">\n <span class=\"vo-lva-fav\">\n @for (s of sourcesOf(v.turn); track s.n) {\n <span [style.background-color]=\"s.color ?? 'var(--vo-c1, var(--vo-accent))'\">{{ s.mark ?? s.title.charAt(0) }}</span>\n }\n </span>\n {{ sourcesOf(v.turn).length }} {{ sourcesOf(v.turn).length === 1 ? 'source' : 'sources' }}<vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n @if (sourcesOf(v.turn).length > 0) {\n <div class=\"vo-fold\" [class.vo-shut]=\"!v.listOpen\" [attr.inert]=\"v.listOpen ? null : ''\" [attr.aria-hidden]=\"!v.listOpen\">\n <div>\n <div class=\"vo-lva-ll\">\n @for (s of sourcesOf(v.turn); track s.n) {\n <button\n type=\"button\"\n class=\"vo-lva-s\"\n [class.vo-on]=\"active(v) === s.n\"\n (mouseenter)=\"v.hover = s.n\"\n (mouseleave)=\"v.hover = null\"\n (click)=\"pick(v, s.n); sourceClick.emit(s)\"\n >\n <span class=\"vo-n\">{{ s.n }}</span><span>{{ s.title }}</span><span class=\"vo-d\">{{ s.detail }}</span>\n <vo-icon name=\"ext\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n </div>\n </div>\n }\n @if (v.index === lastIndex && followUps?.length) {\n <div class=\"vo-lva-fu\">\n @for (q of followUps; track q) {\n <button type=\"button\" class=\"vo-enter\" [style.animation-delay.ms]=\"$index * 90\" (click)=\"followUp.emit(q)\">\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>{{ q }}\n </button>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './live-answer.css',\n})\nexport class LiveAnswerComponent implements OnChanges, OnDestroy {\n @Input() turns: AnswerTurn[] = [];\n /** Suggested next questions, shown under the last answer once it is done. */\n @Input() followUps?: string[];\n /** Adds a Try again button under each answer; emit is via the `retry` output. */\n @Input() retryable = false;\n @Input() className = '';\n\n @Output() followUp = new EventEmitter<string>();\n @Output() retry = new EventEmitter<number>();\n @Output() rateChange = new EventEmitter<{ index: number; rating: AnswerRating }>();\n /** Called after an answer is copied, with its text without the citations. */\n @Output() copyText = new EventEmitter<{ index: number; text: string }>();\n /** Called when a source in the list is clicked, besides pinning it. */\n @Output() sourceClick = new EventEmitter<AnswerSource>();\n\n /** Whether a Try again button is shown. */\n get retryOn(): boolean {\n return this.retryable;\n }\n\n /** The per-turn interactive state, rebuilt from the turns input. */\n views: TurnView[] = [];\n private tick?: ReturnType<typeof setInterval>;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n get lastIndex(): number {\n return this.turns.length - 1;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['turns']) this.sync();\n }\n\n /** Keeps each turn's view state across input changes, restarting one that goes back from done to answering. */\n private sync(): void {\n const next: TurnView[] = this.turns.map((turn, index) => {\n const prev = this.views.find((v) => (v.turn.key ?? v.index) === (turn.key ?? index));\n if (!prev) {\n return this.fresh(turn, index, 0);\n }\n if (prev.seenState !== turn.state) {\n const round = prev.round + (prev.seenState === 'done' ? 1 : 0);\n if (round !== prev.round) return this.fresh(turn, index, round);\n prev.seenState = turn.state;\n }\n prev.turn = turn;\n prev.index = index;\n return prev;\n });\n this.views = next;\n this.startCounter();\n }\n\n private fresh(turn: AnswerTurn, index: number, round: number): TurnView {\n return {\n turn,\n index,\n round,\n seenState: turn.state,\n thoughtsOpen: false,\n listOpen: false,\n hover: null,\n pin: null,\n rating: null,\n copied: false,\n counted: 0,\n };\n }\n\n active(v: TurnView): number | null {\n return v.hover ?? v.pin;\n }\n\n max1(n: number): number {\n return Math.max(1, n);\n }\n\n paragraphs(turn: AnswerTurn): Paragraph[] {\n const done = turn.state === 'done';\n return (turn.text ?? '').split(/\\n{2,}/).map((par) => words(par, !done));\n }\n\n sourcesOf(turn: AnswerTurn): AnswerSource[] {\n return turn.sources ?? [];\n }\n\n tipOf(turn: AnswerTurn, n: number): string {\n const s = (turn.sources ?? []).find((x) => x.n === n);\n return s ? s.tip ?? [s.title, s.detail].filter(Boolean).join(', ') : `Source ${n}`;\n }\n\n // hovering a citation or a source previews it, a click pins it until the next click\n pick(v: TurnView, n: number): void {\n const next = v.pin === n ? null : n;\n v.pin = next;\n if (next !== null) v.listOpen = true;\n }\n\n rate(v: TurnView, r: 'good' | 'bad'): void {\n const next: AnswerRating = v.rating === r ? null : r;\n v.rating = next;\n this.rateChange.emit({ index: v.index, rating: next });\n }\n\n copy(v: TurnView): void {\n const out = plain(v.turn.text ?? '');\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.writeText(out).catch(() => undefined);\n }\n this.copyText.emit({ index: v.index, text: out });\n v.copied = true;\n setTimeout(() => (v.copied = false), this.reduced.reduce() ? 0 : 1400);\n }\n\n private startCounter(): void {\n const counting = this.views.some(\n (v) => v.turn.state === 'thinking' && v.turn.thoughtFor === undefined,\n );\n if (counting && !this.tick && !this.reduced.reduce()) {\n this.tick = setInterval(() => {\n this.views.forEach((v) => {\n if (v.turn.state === 'thinking' && v.turn.thoughtFor === undefined) v.counted += 1;\n });\n }, 1000);\n } else if (!counting && this.tick) {\n clearInterval(this.tick);\n this.tick = undefined;\n }\n }\n\n ngOnDestroy(): void {\n if (this.tick) clearInterval(this.tick);\n }\n}\n","// framework/angular/metric-insight/metric-insight.component.ts\n//\n// Native Angular port of framework/react/metric-insight/MetricInsight.tsx.\n// A metric with its trend line, a one-line read on why it moved, and a\n// breakdown of what moved it. A range switch re-rolls the big number and the\n// change tag and redraws the line in place; a pointer readout follows the\n// cursor across the chart; a marker fades in late where a release happened; and\n// \"Why did it move?\" opens a staggered breakdown of drivers. Inputs mirror the\n// React props; the draw-in, the count-up, the pointer readout and the fold are\n// ported from the vanilla JS (metric-insight.js). Tokens only — no colour\n// literals. The only icon used is `spark`, via core/icon.component.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One range of the metric, like the last 30 days. */\nexport interface MetricRange {\n /** Identifies the range, like '30'. */\n key: string;\n /** The switch label, like \"30d\". */\n label: string;\n /** The values over the range, oldest first. */\n points: number[];\n /** The number in large type, which rolls to it. */\n value: number;\n /** The change over the range, in the tag beside it. */\n change: number;\n /** One line on what happened, like \"Jumped after the pricing page update on Sep 18.\" */\n insight: string;\n /** A marker on the chart, like a release: `at` is 0 to 1 across, `label` shows on hover. */\n marker?: { at: number; label: string };\n}\n\n/** One contributor to the change, shown under \"Why did it move?\". */\nexport interface MetricDriver {\n label: string;\n /** Its share of the change, 0 to 100. */\n percent: number;\n /** Any CSS colour, like 'var(--vo-accent)'. Defaults to the accent. */\n color?: string;\n}\n\nconst W = 300, H = 90;\n\n/** Internal per-point render state: on-screen x/y plus the raw value. */\ninterface Point {\n x: number;\n y: number;\n v: number;\n}\n\n@Component({\n selector: 'vo-metric-insight',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-mix vo-panel\">\n <div class=\"vo-mix-h\">\n <span class=\"vo-muted\">{{ label }}</span>\n <div class=\"vo-seg2 vo-mix-rg\" role=\"group\" aria-label=\"Range\" #seg>\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (r of ranges; track r.key) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"r.key === current\"\n [attr.data-v]=\"r.key\"\n (click)=\"select(r.key)\"\n >\n {{ r.label }}\n </button>\n }\n </div>\n </div>\n <div class=\"vo-mix-v\">\n <b class=\"vo-num vo-mix-n\">{{ format(hover ? hover.v : value) }}</b>\n <span class=\"vo-tag vo-mix-d vo-num\" [class.vo-bad]=\"rangeDelta < 0\" [class.vo-ok]=\"rangeDelta >= 0\">\n {{ formatChange(change) }}\n </span>\n </div>\n <div\n #chart\n class=\"vo-mix-ch\"\n [class.vo-in]=\"drawn\"\n (pointermove)=\"move($event)\"\n (pointerleave)=\"hover = null\"\n >\n <svg class=\"vo-mix-svg\" [attr.viewBox]=\"'0 0 ' + W + ' ' + H\" preserveAspectRatio=\"none\" aria-hidden=\"true\">\n <defs>\n <linearGradient [attr.id]=\"ids + 'g'\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\n <stop offset=\"0\" stop-color=\"var(--vo-accent-mark,var(--vo-accent))\" stop-opacity=\".18\"></stop>\n <stop offset=\"1\" stop-color=\"var(--vo-accent-mark,var(--vo-accent))\" stop-opacity=\"0\"></stop>\n </linearGradient>\n </defs>\n <path class=\"vo-mix-a\" [attr.fill]=\"'url(#' + ids + 'g)'\" [attr.d]=\"areaD\"></path>\n <path\n class=\"vo-mix-l\"\n [attr.d]=\"lineD\"\n fill=\"none\"\n stroke=\"var(--vo-accent-mark,var(--vo-accent))\"\n stroke-width=\"2\"\n vector-effect=\"non-scaling-stroke\"\n stroke-linejoin=\"round\"\n [style.stroke-dasharray]=\"dash\"\n [style.--vo-len]=\"len\"\n ></path>\n <line\n class=\"vo-mix-x\"\n [attr.x1]=\"hover?.x ?? 0\"\n [attr.x2]=\"hover?.x ?? 0\"\n y1=\"0\"\n y2=\"90\"\n stroke=\"var(--vo-faint)\"\n stroke-dasharray=\"2 3\"\n vector-effect=\"non-scaling-stroke\"\n [style.opacity]=\"hover ? 1 : null\"\n ></line>\n </svg>\n <span\n class=\"vo-mix-dot\"\n [style.left.px]=\"hover ? hover.px : null\"\n [style.top.px]=\"hover ? hover.py : null\"\n [style.opacity]=\"hover ? 1 : null\"\n ></span>\n @if (currentRange?.marker; as mk) {\n <span class=\"vo-mix-mk\" [style.left]=\"mk.at * 100 + '%'\">\n <b [title]=\"mk.label\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon>{{ mk.label }}</b>\n </span>\n }\n </div>\n <div class=\"vo-mix-ins\">\n <span class=\"vo-mix-ic\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon></span>\n <span class=\"vo-sw vo-mix-t\" [class.vo-out]=\"insightOut\">{{ shownInsight }}</span>\n </div>\n @if (drivers) {\n <button\n type=\"button\"\n class=\"vo-pill vo-soft vo-sm vo-mix-why\"\n [attr.aria-expanded]=\"shown\"\n (click)=\"toggle()\"\n >\n @if (explaining) {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n }\n <span class=\"vo-sw\" [class.vo-out]=\"whyOut\">{{ whyLabel }}</span>\n </button>\n <div class=\"vo-fold vo-mix-box\" [class.vo-shut]=\"!shown\" [attr.inert]=\"!shown ? '' : null\" [attr.aria-hidden]=\"!shown\">\n <div>\n <div class=\"vo-mix-rs\">\n @for (q of drivers; track q.label; let i = $index) {\n <div class=\"vo-mix-r vo-enter\" [style.animation-delay]=\"i * 60 + 'ms'\">\n <span class=\"vo-dot\" [style.color]=\"q.color ?? 'var(--vo-accent)'\"></span>\n <span class=\"vo-t\">{{ q.label }}</span>\n <span class=\"vo-bar\"><i [style.width]=\"q.percent + '%'\" [style.background]=\"q.color ?? 'var(--vo-accent)'\"></i></span>\n <span class=\"vo-v vo-num\">{{ q.percent }}%</span>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './metric-insight.css',\n})\nexport class MetricInsightComponent implements AfterViewInit, OnDestroy {\n /** The metric's name, like \"Trial to paid\". */\n @Input({ required: true }) label = '';\n /** The ranges to switch between. */\n @Input({ required: true }) ranges: MetricRange[] = [];\n /** The range on show, by key. Leave it out to let the switch pick it. */\n @Input() set range(value: string | undefined) {\n this.rangeControlled = value !== undefined;\n if (value !== undefined && value !== this.current) {\n this.current = value;\n if (this.ready) this.draw(true);\n }\n }\n @Input() defaultRange?: string;\n /** Formats the large number and the hovered point. Defaults to one decimal and a %. */\n @Input() format: (value: number) => string = (v) => v.toFixed(1) + '%';\n /** Formats the change. Defaults to \"+8.1 pts\". */\n @Input() formatChange: (change: number) => string = (v) => (v < 0 ? '−' : '+') + Math.abs(v).toFixed(1) + ' pts';\n /** What moved the number, shown under \"Why did it move?\". Leave it out to hide the button. */\n @Input() drivers?: MetricDriver[];\n /** Shows \"Looking into it\" on the button and keeps the breakdown shut, while you fetch the drivers. */\n @Input() explaining = false;\n /** Whether the breakdown is open. Leave it out to let the button toggle it. */\n @Input() set open(value: boolean | undefined) {\n this.openControlled = value !== undefined;\n if (value !== undefined) this.isOpen = value;\n }\n @Input() defaultOpen = false;\n\n @Output() rangeChange = new EventEmitter<string>();\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('chart') private chartEl!: ElementRef<HTMLElement>;\n @ViewChild('seg') private segEl!: ElementRef<HTMLElement>;\n\n readonly W = W;\n readonly H = H;\n ids = 'mix' + Math.random().toString(36).slice(2, 8);\n\n current = '';\n value = 0;\n change = 0;\n rangeChangeValue = 0;\n lineD = '';\n areaD = '';\n dash: string | null = null;\n len = 0;\n drawn = false;\n hover: { x: number; y: number; px: number; py: number; v: number } | null = null;\n knobLeft = 0;\n knobWidth = 0;\n\n shownInsight = '';\n insightOut = false;\n whyLabel = 'Why did it move?';\n whyOut = false;\n\n private isOpen = false;\n private rangeControlled = false;\n private openControlled = false;\n private ready = false;\n private pts: Point[] = [];\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n /** The change of the range on show, used to tint the tag green or red.\n * Named `rangeDelta` to avoid colliding with the `rangeChange` output. */\n get rangeDelta(): number {\n return this.rangeChangeValue;\n }\n\n get currentRange(): MetricRange | undefined {\n return this.ranges.find((r) => r.key === this.current) ?? this.ranges[0];\n }\n\n /** The breakdown is on screen only when open, not explaining, and there are drivers. */\n get shown(): boolean {\n return this.isOpen && !this.explaining && !!this.drivers?.length;\n }\n\n ngAfterViewInit(): void {\n if (!this.current) {\n this.current = this.rangeControlled\n ? this.current\n : this.defaultRange ?? this.ranges[0]?.key ?? '';\n }\n this.shownInsight = this.currentRange?.insight ?? '';\n this.whyLabel = this.labelFor();\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n // the numbers roll and the line draws in a moment after the card appears\n this.later(() => this.draw(false), 400);\n }\n\n select(key: string): void {\n if (key === this.current) return;\n if (!this.rangeControlled) {\n this.current = key;\n this.draw(true);\n }\n this.rangeChange.emit(key);\n }\n\n toggle(): void {\n if (this.explaining) return;\n const next = !this.isOpen;\n if (!this.openControlled) {\n this.isOpen = next;\n this.swapWhy();\n }\n this.openChange.emit(next);\n }\n\n private labelFor(): string {\n if (this.explaining) return 'Looking into it';\n return this.shown ? 'Hide the breakdown' : 'Why did it move?';\n }\n\n // crossfade the button's label the way the <Swap> does\n private swapWhy(): void {\n const to = this.labelFor();\n if (to === this.whyLabel) return;\n if (this.reduced.reduce()) {\n this.whyLabel = to;\n this.cdr.markForCheck();\n return;\n }\n this.whyOut = true;\n this.cdr.markForCheck();\n this.later(() => {\n this.whyLabel = to;\n this.whyOut = false;\n this.cdr.markForCheck();\n }, 170);\n }\n\n private placeKnob(): void {\n const el = this.segEl?.nativeElement;\n if (!el) return;\n const btn = el.querySelector<HTMLElement>('[aria-pressed=\"true\"]');\n if (btn) {\n this.knobLeft = btn.offsetLeft;\n this.knobWidth = btn.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n // builds the path for the current range, then draws it in; a range change\n // redraws in place (the dashes reset without a transition, then run)\n private draw(redraw: boolean): void {\n const r = this.currentRange;\n if (!r) return;\n const d = r.points;\n const lo = Math.min(...d) - 1, hi = Math.max(...d) + 1;\n this.pts = d.map((v, i): Point => ({\n x: d.length > 1 ? (i / (d.length - 1)) * W : 0,\n y: 86 - ((v - lo) / (hi - lo || 1)) * 80,\n v,\n }));\n this.lineD = this.pts.map((q, i) => (i ? 'L' : 'M') + q.x.toFixed(1) + ' ' + q.y.toFixed(1)).join(' ');\n this.areaD = this.lineD ? this.lineD + ` L${W} ${H} L0 ${H} Z` : '';\n this.rangeChangeValue = r.change;\n this.swapInsight(r.insight);\n this.whyLabel = this.labelFor();\n this.placeKnob();\n\n const el = this.chartEl?.nativeElement;\n if (this.reduced.reduce() || !el) {\n this.drawn = true;\n this.dash = 'none';\n this.value = r.value;\n this.change = r.change;\n this.cdr.markForCheck();\n return;\n }\n\n // the stroke doesn't scale with the stretched chart, so its dashes are\n // measured on screen: use the line's on-screen length\n const sx = el.clientWidth / W, sy = el.clientHeight / H;\n const len = this.pts.reduce((t, q, i) => (i ? t + Math.hypot((q.x - this.pts[i - 1].x) * sx, (q.y - this.pts[i - 1].y) * sy) : 0), 0);\n this.len = Math.ceil(len) + 2;\n this.dash = null;\n if (redraw) this.drawn = false;\n this.cdr.markForCheck();\n // next frame, flip the class so the dash-offset transition runs\n this.frames.push(requestAnimationFrame(() => {\n this.drawn = true;\n this.cdr.markForCheck();\n }));\n\n this.tween(this.value, r.value, 900, (v) => (this.value = v));\n this.tween(this.change, r.change, 900, (v) => (this.change = v));\n }\n\n private swapInsight(to: string): void {\n if (to === this.shownInsight) return;\n if (this.reduced.reduce()) {\n this.shownInsight = to;\n this.cdr.markForCheck();\n return;\n }\n this.insightOut = true;\n this.cdr.markForCheck();\n this.later(() => {\n this.shownInsight = to;\n this.insightOut = false;\n this.cdr.markForCheck();\n }, 170);\n }\n\n move(e: PointerEvent): void {\n if (!this.pts.length) return;\n const b = this.chartEl.nativeElement.getBoundingClientRect();\n const fx = ((e.clientX - b.left) / b.width) * W;\n let best = this.pts[0];\n for (const q of this.pts) if (Math.abs(q.x - fx) < Math.abs(best.x - fx)) best = q;\n this.hover = {\n x: best.x,\n y: best.y,\n px: (best.x / W) * b.width,\n py: (best.y / H) * b.height,\n v: best.v,\n };\n this.cdr.markForCheck();\n }\n\n private tween(from: number, to: number, dur: number, set: (n: number) => void): void {\n if (from === to) {\n set(to);\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n const e = 1 - Math.pow(1 - p, 3);\n set(from + (to - from) * e);\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/modal/modal.component.ts\n//\n// Native Angular port of framework/react/modal/Modal.tsx.\n// A centred dialog over a dimmed backdrop: closes on the backdrop, the close\n// button or Escape, locks the page scroll while open and returns focus on close.\n// Content is projected: [vo-modal-title], [vo-modal-subtitle], the default slot\n// for the body, and [vo-modal-footer] for the pinned button row.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nlet openCount = 0;\n\n/** A centred dialog over a dimmed backdrop. */\n@Component({\n selector: 'vo-modal',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n @if (open) {\n <div\n data-vo=\"\"\n class=\"vo-mdl-scrim\"\n [class.vo-no-anim]=\"reduced.reduce()\"\n (mousedown)=\"onBackdrop($event)\"\n >\n <div\n #panel\n class=\"vo-mdl vo-mdl-{{ size }}\"\n [class]=\"className\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"hasTitle ? null : ariaLabel\"\n tabindex=\"-1\"\n (keydown)=\"onKeyDown($event)\"\n >\n @if (hasTitle || !hideClose) {\n <div class=\"vo-mdl-h\">\n <div class=\"vo-mdl-ht\">\n <h2 class=\"vo-mdl-t\" [hidden]=\"!hasTitle\"><ng-content select=\"[vo-modal-title]\" /></h2>\n <div class=\"vo-mdl-s vo-muted\"><ng-content select=\"[vo-modal-subtitle]\" /></div>\n </div>\n @if (!hideClose) {\n <button type=\"button\" class=\"vo-ib vo-mdl-x\" aria-label=\"Close\" (click)=\"close.emit()\">\n <vo-icon name=\"x\" />\n </button>\n }\n </div>\n }\n <div class=\"vo-mdl-body\"><ng-content /></div>\n <div class=\"vo-mdl-f\" [hidden]=\"!hasFooter\"><ng-content select=\"[vo-modal-footer]\" /></div>\n </div>\n </div>\n }\n `,\n styleUrl: './modal.css',\n})\nexport class ModalComponent implements OnChanges, OnDestroy {\n readonly reduced = inject(ReducedMotionService);\n\n /** Whether the modal is on screen. */\n @Input() open = false;\n /** How wide the panel may grow. */\n @Input() size: 'sm' | 'md' | 'lg' = 'md';\n /** Hide the corner close button (Escape and the backdrop still close it). */\n @Input() hideClose = false;\n /** Keep the modal open when the backdrop is clicked. */\n @Input() disableBackdropClose = false;\n /** For screen readers when there is no projected title. */\n @Input() ariaLabel?: string;\n /** Whether a title was projected (set by the host, defaults to true for the header). */\n @Input() hasTitle = true;\n /** Whether a footer was projected. */\n @Input() hasFooter = false;\n @Input() className = '';\n\n /** Called when the person asks to close it. */\n @Output() close = new EventEmitter<void>();\n\n @ViewChild('panel') panel?: ElementRef<HTMLElement>;\n\n private returnTo: HTMLElement | null = null;\n private prevOverflow = '';\n private locked = false;\n\n @HostListener('document:keydown.escape', ['$event'])\n onEscape(e: KeyboardEvent): void {\n if (!this.open) return;\n e.stopPropagation();\n this.close.emit();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['open']) return;\n if (this.open) this.lock();\n else this.unlock();\n }\n\n private lock(): void {\n if (this.locked) return;\n this.locked = true;\n this.returnTo = document.activeElement as HTMLElement | null;\n openCount++;\n this.prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n // focus the first focusable thing in the panel, after it renders\n setTimeout(() => {\n const el = this.panel?.nativeElement;\n const focusable = el?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n (focusable ?? el)?.focus();\n });\n }\n\n private unlock(): void {\n if (!this.locked) return;\n this.locked = false;\n openCount = Math.max(0, openCount - 1);\n if (openCount === 0) document.body.style.overflow = this.prevOverflow;\n this.returnTo?.focus?.();\n }\n\n onBackdrop(e: MouseEvent): void {\n if (!this.disableBackdropClose && e.target === e.currentTarget) this.close.emit();\n }\n\n onKeyDown(e: KeyboardEvent): void {\n if (e.key !== 'Tab' || !this.panel) return;\n const items = Array.from(\n this.panel.nativeElement.querySelectorAll<HTMLElement>(\n 'button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n )\n ).filter((el) => el.offsetParent !== null);\n if (!items.length) return;\n const first = items[0];\n const last = items[items.length - 1];\n const active = document.activeElement;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n }\n\n ngOnDestroy(): void {\n this.unlock();\n }\n}\n","// framework/angular/model-picker/model-picker.component.ts\n//\n// Native Angular port of framework/react/model-picker/ModelPicker.tsx.\n// A trigger names the picked model and how hard it thinks; it opens the list of\n// models, each with speed, quality and cost as five-step meters (the real numbers\n// on hover), and the thinking effort under them as a small dropdown. A busy model\n// can offer a way out — a short notice with its own buttons. Inputs mirror the\n// React props; callbacks become @Output EventEmitters.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One model in the list. */\nexport interface ModelOption {\n id: string;\n /** Like \"Sonnet 5.5\". */\n name: string;\n /** The letter in its coloured tile. Defaults to the first letter of the name. */\n mark?: string;\n /** The tile's colour, like \"var(--vo-c1)\". */\n color?: string;\n /** The letter colour that reads on the tile, like \"var(--vo-on-accent)\". */\n markText?: string;\n /** The quiet line under the name, like \"Balanced, the default for design work\". */\n note?: string;\n /** Speed, quality and cost, each from 1 to 5. For cost, 5 is the most expensive. */\n speed: number;\n quality: number;\n cost: number;\n /** What each meter shows on hover, like \"74 tokens a second\". */\n speedDetail?: string;\n qualityDetail?: string;\n costDetail?: string;\n /** checking spins beside the name; busy turns the row amber. Both replace the note with statusText. */\n status?: 'ready' | 'checking' | 'busy';\n /** Like \"At capacity, about 20s wait\". */\n statusText?: string;\n}\n\n/** A thinking effort: its label, and the line shown under \"Thinking\" when it is picked. */\nexport interface ThinkingEffort {\n label: string;\n detail?: string;\n}\n\n/** One button in the suggestion notice. The last one is filled. */\nexport interface SuggestionAction {\n label: string;\n onClick: () => void;\n}\n\n/** A way out when the picked model can't take the request: a short text and its buttons. */\nexport interface Suggestion {\n text: string;\n actions: SuggestionAction[];\n}\n\nconst EFFORTS: ThinkingEffort[] = [\n { label: 'Off', detail: 'Answers straight away' },\n { label: 'Low', detail: 'Up to 2k thinking tokens' },\n { label: 'Medium', detail: 'Up to 8k thinking tokens' },\n { label: 'High', detail: 'Up to 24k thinking tokens' },\n];\n\n/** Choose the model for a chat by speed, quality and cost, and how hard it thinks. */\n@Component({\n selector: 'vo-model-picker',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n #root\n data-vo=\"\"\n class=\"vo-mpk\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"vo-mpk-top\">\n <span class=\"vo-muted vo-mpk-lb\">{{ label }}</span>\n <button\n #trigger\n type=\"button\"\n class=\"vo-mpk-tr\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggleOpen()\"\n >\n <span class=\"vo-mpk-mk\" [style.--vo-mc]=\"picked?.color\" [style.--vo-mt]=\"picked?.markText\">\n {{ picked?.mark ?? picked?.name?.[0] }}\n </span>\n <span class=\"vo-mpk-nm\">{{ picked?.name ?? '' }}</span>\n <span class=\"vo-mpk-ef vo-muted\">{{ eff }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n </div>\n\n <div class=\"vo-fold vo-mpk-fold\" [class.vo-shut]=\"!isOpen\" [attr.inert]=\"isOpen ? null : ''\">\n <div>\n <div class=\"vo-mpk-p vo-panel\">\n <div class=\"vo-mpk-hd\" aria-hidden=\"true\">\n <span></span><span></span><span>Speed</span><span>Quality</span><span>Cost</span>\n </div>\n\n <div class=\"vo-mpk-list\" role=\"radiogroup\" aria-label=\"Model\">\n @for (m of models; track m.id; let i = $index) {\n <button\n type=\"button\"\n role=\"radio\"\n [attr.aria-checked]=\"m.id === picked?.id\"\n [tabIndex]=\"m.id === picked?.id ? 0 : -1\"\n class=\"vo-mpk-o\"\n [class.vo-busy]=\"m.status === 'busy'\"\n (click)=\"pick(i)\"\n >\n <span class=\"vo-mpk-mk\" [style.--vo-mc]=\"m.color\" [style.--vo-mt]=\"m.markText\">\n {{ m.mark ?? m.name[0] }}\n </span>\n <span class=\"vo-t\">\n <b\n >{{ m.name\n }}<span class=\"vo-ck\">\n @if (m.status === 'checking') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>\n }\n </span></b\n >\n <span class=\"vo-d\">{{ rowNote(m) }}</span>\n </span>\n <span class=\"vo-mpk-m\" [attr.data-tip]=\"m.speedDetail\" [attr.aria-hidden]=\"m.speedDetail ? null : true\">\n @for (k of bars; track k) {\n <i [class.vo-on]=\"k <= m.speed\"></i>\n }\n </span>\n <span class=\"vo-mpk-m\" [attr.data-tip]=\"m.qualityDetail\" [attr.aria-hidden]=\"m.qualityDetail ? null : true\">\n @for (k of bars; track k) {\n <i [class.vo-on]=\"k <= m.quality\"></i>\n }\n </span>\n <span class=\"vo-mpk-m\" [attr.data-tip]=\"m.costDetail\" [attr.aria-hidden]=\"m.costDetail ? null : true\">\n @for (k of bars; track k) {\n <i [class.vo-on]=\"k <= m.cost\"></i>\n }\n </span>\n </button>\n }\n </div>\n\n <div class=\"vo-fold\" [class.vo-shut]=\"!suggestion\" [attr.inert]=\"suggestion ? null : ''\">\n <div>\n <div class=\"vo-mpk-sg\" aria-live=\"polite\">\n <p class=\"vo-mpk-sgt\">{{ suggestion?.text }}</p>\n <div class=\"vo-mpk-sga\">\n @for (a of suggestion?.actions ?? []; track a.label; let last = $last) {\n <button\n type=\"button\"\n class=\"vo-pill vo-sm\"\n [class.vo-primary]=\"last\"\n [class.vo-ghost]=\"!last\"\n (click)=\"a.onClick()\"\n >\n {{ a.label }}\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"vo-mpk-th\">\n <div class=\"vo-mpk-thh\">\n <b><vo-icon name=\"cpu\" size=\"xs\"></vo-icon>Thinking</b>\n <span class=\"vo-muted vo-mpk-thd\">{{ effortDetail }}</span>\n </div>\n <button\n #effBtn\n type=\"button\"\n class=\"vo-mpk-eb\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"effOpen\"\n aria-label=\"Thinking effort\"\n (click)=\"toggleEff()\"\n >\n <span class=\"vo-mpk-ev\">{{ eff }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div #pop class=\"vo-pop vo-mpk-pop\" [class.vo-open]=\"effOpen\" role=\"menu\" aria-label=\"Thinking effort\">\n @for (e of efforts; track e.label) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"e.label === eff\"\n (click)=\"chooseEffort(e.label)\"\n >\n <span\n >{{ e.label }}@if (e.detail) {\n <span class=\"vo-d\">{{ e.detail }}</span>\n }</span\n >\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n\n <p class=\"vo-mpk-note vo-muted\" aria-live=\"polite\">\n @if (note) {\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon><span>{{ note }}</span>\n }\n </p>\n </div>\n `,\n styleUrl: './model-picker.css',\n})\nexport class ModelPickerComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** The models to choose from. */\n @Input() models: ModelOption[] = [];\n /** The picked model's id. Leave it out to let the list hold its own. */\n @Input() value?: string;\n @Input() defaultValue?: string;\n /** The thinking efforts. Defaults to Off, Low, Medium and High. */\n @Input() efforts: ThinkingEffort[] = EFFORTS;\n @Input() effort?: string;\n @Input() defaultEffort?: string;\n /** A way out when the picked model can't take the request. */\n @Input() suggestion: Suggestion | null = null;\n /** The confirmation under the picker, shown with a green check. */\n @Input() note = '';\n /** The label beside the trigger. Defaults to \"Model for this chat\". */\n @Input() label = 'Model for this chat';\n /** Whether the list is open. Leave it out to let the trigger and Escape open and close it. */\n @Input() open?: boolean;\n @Input() defaultOpen = true;\n\n /** Emitted when a row is picked, busy or not, so you can check the model first. */\n @Output() valueChange = new EventEmitter<string>();\n @Output() effortChange = new EventEmitter<string>();\n @Output() openChange = new EventEmitter<boolean>();\n\n @ViewChild('trigger') private trigger!: ElementRef<HTMLButtonElement>;\n @ViewChild('effBtn') private effBtn!: ElementRef<HTMLButtonElement>;\n @ViewChild('pop') private pop!: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** The five meter steps. */\n readonly bars = [1, 2, 3, 4, 5];\n\n // internal state holds its own when the matching input is left out (uncontrolled)\n private curId = '';\n private effLabel = '';\n private openState = true;\n effOpen = false;\n private closeTimer?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value'] || changes['defaultValue'] || changes['models']) {\n this.curId = this.value ?? this.defaultValue ?? this.models[0]?.id ?? this.curId ?? '';\n }\n if (changes['effort'] || changes['defaultEffort'] || changes['efforts']) {\n this.effLabel =\n this.effort ??\n this.defaultEffort ??\n this.efforts[Math.min(2, this.efforts.length - 1)]?.label ??\n this.effLabel ??\n '';\n }\n if (changes['open'] || changes['defaultOpen']) {\n this.openState = this.open ?? this.defaultOpen;\n }\n }\n\n ngAfterViewInit(): void {\n // close the effort menu on an outside click\n document.addEventListener('pointerdown', this.onOutside, true);\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onOutside, true);\n if (this.closeTimer) clearTimeout(this.closeTimer);\n }\n\n get picked(): ModelOption | undefined {\n return this.models.find((m) => m.id === this.curId) ?? this.models[0];\n }\n\n get eff(): string {\n return this.effLabel;\n }\n\n get isOpen(): boolean {\n return this.open ?? this.openState;\n }\n\n get effortDetail(): string {\n return this.efforts.find((e) => e.label === this.eff)?.detail ?? '';\n }\n\n rowNote(m: ModelOption): string {\n return (m.status && m.status !== 'ready' && m.statusText) || m.note || '';\n }\n\n pick(i: number): void {\n const id = this.models[i]?.id;\n if (id === undefined) return;\n if (this.value === undefined) this.curId = id;\n this.valueChange.emit(id);\n }\n\n chooseEffort(label: string): void {\n if (this.effort === undefined) this.effLabel = label;\n this.effortChange.emit(label);\n this.closeEffSoon();\n }\n\n toggleOpen(): void {\n this.setOpen(!this.isOpen);\n }\n\n private setOpen(v: boolean): void {\n if (this.open === undefined) this.openState = v;\n this.openChange.emit(v);\n }\n\n toggleEff(): void {\n this.effOpen = !this.effOpen;\n }\n\n private closeEffSoon(): void {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n this.closeTimer = setTimeout(() => (this.effOpen = false), this.motion.reduce() ? 0 : 120);\n }\n\n onKeydown(e: KeyboardEvent): void {\n // Escape closes the open list and gives the trigger the focus back\n if (e.key === 'Escape') {\n if (this.effOpen) {\n this.effOpen = false;\n this.effBtn?.nativeElement.focus({ preventScroll: true });\n return;\n }\n if (this.isOpen) {\n this.setOpen(false);\n this.trigger?.nativeElement.focus({ preventScroll: true });\n }\n return;\n }\n // arrow keys move through the models, as in any radio group\n const target = e.target as HTMLElement | null;\n const row = target?.closest<HTMLButtonElement>('.vo-mpk-o');\n if (!row) return;\n const step = ({ ArrowDown: 1, ArrowRight: 1, ArrowUp: -1, ArrowLeft: -1 } as Record<string, number>)[e.key];\n if (!step) return;\n e.preventDefault();\n const rows = Array.from(row.parentElement?.querySelectorAll<HTMLButtonElement>('.vo-mpk-o') ?? []);\n const from = rows.indexOf(row);\n const i = (from + step + this.models.length) % this.models.length;\n rows[i]?.focus({ preventScroll: true });\n this.pick(i);\n }\n\n private readonly onOutside = (e: PointerEvent): void => {\n if (!this.effOpen) return;\n const t = e.target as Node;\n if (this.pop?.nativeElement.contains(t) || this.effBtn?.nativeElement.contains(t)) return;\n this.effOpen = false;\n };\n}\n","// framework/angular/permission-gate/permission-gate.component.ts\n//\n// Native Angular port of framework/react/permission-gate/PermissionGate.tsx.\n// The agent asks before it acts: a card with the question, the scopes to tick,\n// and a footer with how long the grant lasts and the two answers (Allow /\n// decline). Once allowed it gives way to a shorter result row (a spinner while\n// the agent works, a green check when done) with a Revoke button; declining\n// shows an undoable notice. A follow-up ask mid-run turns the icon tile amber.\n// Inputs mirror the React props; React callbacks become @Output EventEmitters.\n//\n// Icon note: the React default tile icon is a shield, which is not in the\n// Angular core glyph set. The default here is `figma` (as in the Vanilla demo);\n// pass any VoIconName via [iconName] to override. Available glyphs: see\n// VoIconName in ../core/icon.component.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Something the agent is asking to be allowed to do. */\nexport interface PermissionScope {\n key: string;\n /** Like \"Edit frames\". */\n label: string;\n /** The quiet line under it, like \"Only on a new page\". */\n detail?: string;\n /** A warning tag after it, like \"Risky\". */\n risk?: string;\n /** What the risk tag reveals on hover, like \"Checkout and Docs use this library\". */\n riskDetail?: string;\n}\n\n/** asking, allowed or declined. */\nexport type PermissionStatus = 'asking' | 'allowed' | 'declined';\n\n/** The agent asks before it acts: pick the scopes and how long they last, then allow or decline. */\n@Component({\n selector: 'vo-permission-gate',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-pgx\"\n [class.vo-panel]=\"!bare\"\n [class.vo-esc]=\"followUp && state === 'asking'\"\n [class.vo-held]=\"held !== null\"\n [style.minHeight.px]=\"held !== null ? held : null\"\n >\n <div class=\"vo-pgx-h\">\n <span class=\"vo-pgx-ic\"><vo-icon [name]=\"iconName\"></vo-icon></span>\n <div class=\"vo-pgx-ht\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n </div>\n\n @if (state === 'asking') {\n <div class=\"vo-pgx-sc\" [class.vo-enter]=\"back > 0\">\n @for (s of scopes; track s.key) {\n <label class=\"vo-pgx-o\">\n <input\n type=\"checkbox\"\n [checked]=\"ticked.includes(s.key)\"\n (change)=\"toggle(s.key)\"\n />\n <span class=\"vo-bx\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n <span class=\"vo-t\"\n >{{ s.label }}@if (s.detail) {<span class=\"vo-d\">{{ s.detail }}</span>}</span\n >\n @if (s.risk) {\n <span class=\"vo-tag vo-warn\" [attr.title]=\"s.riskDetail ?? null\">{{ s.risk }}</span>\n }\n </label>\n }\n </div>\n <div class=\"vo-pgx-f\" [class.vo-enter]=\"back > 0\">\n <button\n type=\"button\"\n class=\"vo-pgx-db\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen\"\n aria-label=\"How long\"\n (click)=\"toggleMenu()\"\n >\n <span class=\"vo-pgx-dv\">{{ durLabel(dur) }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-pgx-no\" (click)=\"decline()\">\n {{ declineLabel }}\n </button>\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-pgx-ok\"\n [disabled]=\"!n || waiting\"\n (click)=\"allow()\"\n >\n @if (waiting) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n {{ n ? 'Allow ' + n + (n > 1 ? ' scopes' : ' scope') : 'Pick a scope' }}\n }\n </button>\n </div>\n }\n\n <div\n class=\"vo-pop vo-pgx-pop\"\n role=\"menu\"\n aria-label=\"How long\"\n [hidden]=\"!menuOpen\"\n >\n @for (d of durations; track d) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"d === dur\"\n (click)=\"pickDuration(d)\"\n >\n <span\n >{{ durLabel(d) }}@if (durationDetails[d]) {<span class=\"vo-d\">{{\n durationDetails[d]\n }}</span>}</span\n >\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n\n @if (state === 'allowed') {\n <div\n class=\"vo-pgx-done\"\n [class.vo-run]=\"working\"\n [class.vo-ok]=\"!working\"\n [class.vo-leave]=\"leaving\"\n [class.vo-enter]=\"!leaving\"\n >\n <span class=\"vo-g\">\n @if (working) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon name=\"ok\"></vo-icon>\n }\n </span>\n <span class=\"vo-t\">\n <b class=\"vo-pgx-a\">{{\n allowedTitle ??\n 'Allowed ' +\n (granted || n) +\n ((granted || n) > 1 ? ' scopes ' : ' scope ') +\n durSpan(dur)\n }}</b>\n @if (allowedDetail !== undefined) {\n <span class=\"vo-pgx-d\">{{ allowedDetail }}</span>\n }\n </span>\n @if (meta !== undefined) {\n <span class=\"vo-pgx-tm vo-num\">{{ meta }}</span>\n }\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"revoke()\">Revoke</button>\n </div>\n }\n\n @if (state === 'declined') {\n <div class=\"vo-pgx-done vo-enter\" style=\"background:var(--vo-chip)\">\n <vo-icon name=\"info\"></vo-icon>\n <span class=\"vo-t\"\n >{{ declinedTitle }}@if (declinedDetail) {<span>{{ declinedDetail }}</span>}</span\n >\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"undo()\">Undo</button>\n </div>\n }\n </div>\n `,\n styleUrl: './permission-gate.css',\n})\nexport class PermissionGateComponent implements OnChanges {\n /** The question, like \"Allow the agent to edit Figma?\". */\n @Input() title = '';\n /** Why it asks. */\n @Input() subtitle?: string;\n /** The glyph in the tile beside the question. Defaults to figma (React uses a shield). */\n @Input() iconName: VoIconName = 'figma';\n @Input() scopes: PermissionScope[] = [];\n\n /** Keys of the ticked scopes. Leave it out to let the checkboxes hold their own. */\n @Input() value?: string[];\n @Input() defaultValue: string[] = [];\n @Output() valueChange = new EventEmitter<string[]>();\n\n /** How long the permission lasts, picked from a small dropdown in the footer. */\n @Input() durations: string[] = ['This task', 'Today', 'Always'];\n /** The quiet line under each duration in its menu, by duration. */\n @Input() durationDetails: Record<string, string> = {\n 'This task': 'Until the task is done',\n Today: 'Until midnight',\n Always: 'Until you revoke it',\n };\n @Input() duration?: string;\n @Input() defaultDuration?: string;\n @Output() durationChange = new EventEmitter<string>();\n\n /** asking, allowed or declined. Leave it out to let the buttons move it. */\n @Input() status?: PermissionStatus;\n @Input() defaultStatus: PermissionStatus = 'asking';\n @Output() statusChange = new EventEmitter<PermissionStatus>();\n\n /** Called with the ticked scopes and the duration. Return a promise and the button spins until it settles. */\n @Output() allowEvent = new EventEmitter<{ keys: string[]; duration: string }>();\n @Output() declineEvent = new EventEmitter<void>();\n /** Called by Revoke, after allowing. */\n @Output() revokeEvent = new EventEmitter<void>();\n /** Called by Undo, after declining. */\n @Output() undoEvent = new EventEmitter<void>();\n\n /** The line under \"Allowed …\", like \"Applying the pricing fixes now\". */\n @Input() allowedDetail?: string;\n /** Replaces \"Allowed 2 scopes for this task\", like \"Done. 6 frames edited\". */\n @Input() allowedTitle?: string;\n /** The agent is still working under the permission: a spinner instead of the green check. */\n @Input() working = false;\n /** Quiet text at the end of the allowed row, like an elapsed time \"0:04\". */\n @Input() meta?: string;\n /** A follow-up ask in the middle of a run, for one more scope: the icon tile turns amber. */\n @Input() followUp = false;\n /** The decline button. Defaults to \"Not now\"; a follow-up ask might say \"Skip this frame\". */\n @Input() declineLabel = 'Not now';\n /** Shown after Not now. */\n @Input() declinedTitle = 'The agent will skip these changes';\n @Input() declinedDetail?: string;\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** Internal state when the matching input is left uncontrolled. */\n private innerTicked: string[] = [];\n private innerDur?: string;\n private innerStatus: PermissionStatus = 'asking';\n\n menuOpen = false;\n waiting = false;\n // a revoked permission fades out before the scopes come back\n leaving = false;\n // the scopes play their entrance when they come back, not when the card first appears\n back = 0;\n granted = 0;\n // the scopes give way to a shorter result row: the gate keeps the height it had and centres the row\n held: number | null = null;\n private leaveTimer?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultValue'] && this.value === undefined && !this.innerTicked.length) {\n this.innerTicked = [...this.defaultValue];\n }\n if (changes['defaultStatus'] && this.status === undefined) {\n this.innerStatus = this.defaultStatus;\n }\n }\n\n get ticked(): string[] {\n return this.value ?? (this.innerTicked.length ? this.innerTicked : this.defaultValue);\n }\n\n get dur(): string {\n return this.duration ?? this.innerDur ?? this.defaultDuration ?? this.durations[0] ?? '';\n }\n\n get state(): PermissionStatus {\n return this.status ?? this.innerStatus;\n }\n\n get n(): number {\n return this.ticked.length;\n }\n\n // \"For this task\" in the menu and \"for this task\" after Allowed; Always reads as it is\n durLabel(d: string): string {\n return /^always$/i.test(d) ? d : 'For ' + d.toLowerCase();\n }\n durSpan(d: string): string {\n return /^always$/i.test(d) ? 'always' : 'for ' + d.toLowerCase();\n }\n\n private setTicked(keys: string[]): void {\n if (this.value === undefined) this.innerTicked = keys;\n this.valueChange.emit(keys);\n }\n private setStatus(s: PermissionStatus): void {\n if (this.status === undefined) this.innerStatus = s;\n this.statusChange.emit(s);\n }\n\n toggle(key: string): void {\n const next = this.ticked.includes(key)\n ? this.ticked.filter((k) => k !== key)\n : this.scopes.map((s) => s.key).filter((k) => k === key || this.ticked.includes(k));\n this.setTicked(next);\n }\n\n toggleMenu(): void {\n this.menuOpen = !this.menuOpen;\n }\n\n pickDuration(d: string): void {\n if (this.duration === undefined) this.innerDur = d;\n this.durationChange.emit(d);\n this.menuOpen = false;\n }\n\n private hold(): void {\n if (this.held === null) this.held = 0;\n }\n\n async allow(): Promise<void> {\n if (!this.n || this.waiting) return;\n this.waiting = true;\n this.granted = this.n;\n this.allowEvent.emit({ keys: this.ticked, duration: this.dur });\n // the Allow button spins briefly, as the React port awaits onAllow\n await new Promise((r) => setTimeout(r, this.motion.reduce() ? 0 : 500));\n this.waiting = false;\n this.hold();\n this.setStatus('allowed');\n }\n\n decline(): void {\n this.hold();\n this.setStatus('declined');\n this.declineEvent.emit();\n }\n\n revoke(): void {\n this.leaving = true;\n clearTimeout(this.leaveTimer);\n this.leaveTimer = setTimeout(\n () => {\n this.leaving = false;\n this.held = null;\n this.setStatus('asking');\n this.back += 1;\n this.revokeEvent.emit();\n },\n this.motion.reduce() ? 0 : 300,\n );\n }\n\n undo(): void {\n this.held = null;\n this.setStatus('asking');\n this.back += 1;\n this.undoEvent.emit();\n }\n}\n","// framework/angular/plan-review/plan-review.component.ts\n//\n// Native Angular port of framework/react/plan-review/PlanReview.tsx.\n// A plan the agent proposes before it starts: edit a step inline, skip it (it\n// stays, struck through), add one, then approve. In `running` the rows turn to\n// spinners, checks and a retry clock; in `done` the footer offers \"See changes\".\n// Inputs mirror the React props; the React callbacks become @Output()s.\n//\n// Icons: the React source uses check / clock / plus / x / undo / stop / eye,\n// all of which exist in the Angular icon set, so no substitutions were needed.\n// The thinking \"mark\" (<Think>) and the step spinner reuse the shared\n// .vo-think / .vo-spin glyphs carried over into plan-review.css.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One step in the plan. */\nexport interface PlanReviewStep {\n id: string;\n text: string;\n /** Left out of the plan; it stays in the list, struck through. */\n skipped?: boolean;\n /** Marks a step the person rewrote. */\n edited?: boolean;\n /** run while the agent works on it, retry while it waits out a problem (a rate limit, a timeout), done once it has. */\n state?: 'run' | 'retry' | 'done';\n /** The line the step reports, under it: what it found, or what it waits on. Opens and crossfades when it changes. */\n detail?: string;\n}\n\n/** review (steps can be edited), running (the agent works through them) or done. */\nexport type PlanPhase = 'review' | 'running' | 'done';\n\nconst NOTE: Record<PlanPhase, string> = {\n review: 'Click a step to edit it',\n running: 'Running the approved plan',\n done: '',\n};\n\nlet added = 0;\n\n@Component({\n selector: 'vo-plan-review',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"'vo-plx' + (bare ? '' : ' vo-panel') + (className ? ' ' + className : '')\">\n <div class=\"vo-plx-h\">\n <span class=\"vo-think vo-plx-mk\" [class.vo-on]=\"phase === 'running'\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <div class=\"vo-plx-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-sw vo-muted vo-plx-st\" [class.vo-out]=\"stOut\">{{ stShown }}</span>\n </div>\n @if (meta !== undefined && meta !== null) {\n <span class=\"vo-plx-tm vo-num\">{{ meta }}</span>\n }\n </div>\n\n <ol class=\"vo-plx-list\" #list>\n @for (s of steps; track s.id; let i = $index) {\n <li\n [class]=\"rowClass(s)\"\n [style.animationDelay]=\"entered.has(s.id) ? null : enterDelay(s.id, i)\"\n (animationend)=\"onRowEntered($event, s.id)\"\n >\n <span class=\"vo-n\">\n @if (s.state === 'done') {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>\n } @else if (s.state === 'run') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else if (s.state === 'retry') {\n <vo-icon name=\"clock\" size=\"xs\"></vo-icon>\n } @else {\n {{ num(s) }}\n }\n </span>\n <span class=\"vo-b\">\n <span\n class=\"vo-t\"\n [class.vo-shim]=\"s.state === 'run'\"\n [attr.contenteditable]=\"editable ? 'true' : null\"\n spellcheck=\"false\"\n [attr.role]=\"editable ? 'textbox' : null\"\n [attr.aria-label]=\"editable ? 'Step ' + num(s) : null\"\n (keydown)=\"onKeydown($event)\"\n (blur)=\"onBlur($event, s)\"\n >{{ s.text }}</span>\n <span class=\"vo-d\" [class.vo-on]=\"!!s.detail\" [class.vo-warn]=\"s.state === 'retry'\">\n <span class=\"vo-sw\" [class.vo-out]=\"detailOut.has(s.id)\">{{ s.detail ?? '' }}</span>\n </span>\n </span>\n @if (editable) {\n <button\n type=\"button\"\n class=\"vo-ib vo-plx-x\"\n [attr.aria-label]=\"s.skipped ? 'Include step' : 'Skip step'\"\n (click)=\"toggleSkip(s)\"\n >\n <vo-icon [name]=\"s.skipped ? 'undo' : 'x'\" size=\"xs\"></vo-icon>\n </button>\n }\n </li>\n }\n </ol>\n\n @if (editable) {\n <button type=\"button\" class=\"vo-plx-add\" (click)=\"addStep()\">\n <vo-icon name=\"plus\" size=\"xs\"></vo-icon>Add a step\n </button>\n }\n\n <div class=\"vo-plx-f\">\n <span class=\"vo-sw vo-muted vo-plx-n\" [class.vo-out]=\"noteOut\">{{ noteShown }}</span>\n @if (phase === 'review') {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-plx-chg\" (click)=\"requestChanges.emit()\">Ask for changes</button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-plx-go\" (click)=\"approve.emit()\">Approve plan</button>\n } @else if (phase === 'running') {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-plx-stop vo-enter\" style=\"animation-delay:50ms\" (click)=\"stop.emit()\">\n <vo-icon name=\"stop\" size=\"xs\"></vo-icon>Stop\n </button>\n } @else {\n <button type=\"button\" class=\"vo-pill vo-soft vo-sm vo-enter\" (click)=\"seeChanges.emit()\">\n <vo-icon name=\"eye\" size=\"xs\"></vo-icon>See changes\n </button>\n }\n </div>\n </div>\n `,\n styleUrl: './plan-review.css',\n})\nexport class PlanReviewComponent {\n /** Like \"Plan: redesign the pricing page\". */\n @Input({ required: true }) title!: string;\n\n /** The quiet text at the end of the header, like an elapsed time \"0:04\". */\n @Input() meta?: string | number | null;\n\n /** review (steps can be edited), running (the agent works through them) or done. */\n @Input()\n set phase(value: PlanPhase) {\n this._phase = value;\n this.refreshNote();\n }\n get phase(): PlanPhase {\n return this._phase;\n }\n private _phase: PlanPhase = 'review';\n\n /** The line under the title. Defaults to how many steps are left in and roughly how long they take. */\n @Input()\n set status(value: string | undefined) {\n this._status = value;\n this.refreshStatus();\n }\n get status(): string | undefined {\n return this._status;\n }\n private _status?: string;\n\n /** The quiet line in the footer. Defaults to a hint for each phase. */\n @Input()\n set note(value: string | undefined) {\n this._note = value;\n this.refreshNote();\n }\n get note(): string | undefined {\n return this._note;\n }\n private _note?: string;\n\n /** Controlled steps. Leave `steps` out (and set `defaultSteps`) to let the person edit, skip and add steps on their own. */\n @Input()\n set steps(value: PlanReviewStep[] | undefined) {\n if (value) {\n this._controlled = true;\n this._list = value;\n this.rememberOriginals();\n this.refreshStatus();\n }\n }\n get steps(): PlanReviewStep[] {\n return this._list;\n }\n private _list: PlanReviewStep[] = [];\n private _controlled = false;\n\n /** The initial steps when uncontrolled. */\n @Input()\n set defaultSteps(value: PlanReviewStep[]) {\n if (!this._controlled && !this._seeded) {\n this._seeded = true;\n this._list = value.map((s) => ({ ...s }));\n this.rememberOriginals();\n this.refreshStatus();\n }\n }\n private _seeded = false;\n\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n /** Extra classes for the root element. */\n @Input() className?: string;\n\n /** Emitted whenever the list changes (edit, skip, add). */\n @Output() stepsChange = new EventEmitter<PlanReviewStep[]>();\n @Output() approve = new EventEmitter<void>();\n @Output() requestChanges = new EventEmitter<void>();\n @Output() stop = new EventEmitter<void>();\n @Output() seeChanges = new EventEmitter<void>();\n\n @ViewChild('list') private listRef?: ElementRef<HTMLOListElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n // each step remembers the words it came with, so \"edited\" shows only when they really changed\n private readonly original = new Map<string, string>();\n // the rows stagger in once; after that the entrance comes off so a skipped step can fade\n readonly entered = new Set<string>();\n private readonly first = new Set<string>();\n // ids whose detail/status/note line is mid-crossfade (blur out, then swap)\n readonly detailOut = new Set<string>();\n stOut = false;\n noteOut = false;\n stShown = '';\n noteShown = '';\n private focusId: string | null = null;\n private seeded = false;\n\n get editable(): boolean {\n return this.phase === 'review';\n }\n\n private get included(): PlanReviewStep[] {\n return this._list.filter((s) => !s.skipped);\n }\n\n num(s: PlanReviewStep): string {\n if (s.skipped) return '–';\n let n = 0;\n for (const step of this._list) {\n if (!step.skipped) {\n n++;\n if (step === s) return String(n);\n }\n }\n return String(n);\n }\n\n rowClass(s: PlanReviewStep): string {\n const entering = !this.entered.has(s.id);\n return [\n 'vo-plx-s',\n entering ? 'vo-enter' : '',\n s.skipped ? 'vo-off' : '',\n s.state ? 'vo-' + s.state : '',\n s.edited ? 'vo-edited' : '',\n ]\n .filter(Boolean)\n .join(' ');\n }\n\n enterDelay(id: string, i: number): string | null {\n if (this.motion.reduce()) return '0ms';\n return (this.first.has(id) ? 100 + i * 60 : 0) + 'ms';\n }\n\n onRowEntered(e: AnimationEvent, id: string): void {\n if (e.target === e.currentTarget) this.entered.add(id);\n }\n\n onKeydown(e: KeyboardEvent): void {\n if (e.key === 'Enter') {\n e.preventDefault();\n (e.currentTarget as HTMLElement).blur();\n }\n }\n\n onBlur(e: FocusEvent, s: PlanReviewStep): void {\n const text = (e.currentTarget as HTMLElement).textContent ?? '';\n if (text !== s.text) {\n this.update(s.id, { text, edited: text.trim() !== this.original.get(s.id) });\n }\n }\n\n toggleSkip(s: PlanReviewStep): void {\n this.update(s.id, { skipped: !s.skipped });\n }\n\n addStep(): void {\n const id = `new-${++added}`;\n this.focusId = id;\n this.setList([...this._list, { id, text: 'New step' }]);\n this.rememberOriginals();\n }\n\n // the focus lands on a freshly added step, selecting its text, after it renders\n ngAfterViewChecked(): void {\n const id = this.focusId;\n if (!id) return;\n const el = this.listRef?.nativeElement.querySelector<HTMLElement>(\n `li:last-child .vo-t`\n );\n if (!el) return;\n this.focusId = null;\n el.focus({ preventScroll: true });\n getSelection()?.selectAllChildren(el);\n }\n\n private update(id: string, change: Partial<PlanReviewStep>): void {\n this.setList(this._list.map((s) => (s.id === id ? { ...s, ...change } : s)));\n }\n\n private setList(next: PlanReviewStep[]): void {\n if (!this._controlled) this._list = next;\n this.refreshStatus();\n this.stepsChange.emit(next);\n }\n\n private rememberOriginals(): void {\n for (const s of this._list) {\n if (!this.original.has(s.id)) this.original.set(s.id, s.text);\n if (!this.seeded) this.first.add(s.id);\n }\n this.seeded = true;\n }\n\n private refreshStatus(): void {\n const n = this.included.length;\n const next =\n this._status ?? `${n} steps, about ${Math.max(1, Math.round(n * 0.8))} min`;\n this.swapStatus(next);\n }\n\n private refreshNote(): void {\n const next = this._note ?? NOTE[this._phase];\n this.swapNote(next);\n }\n\n private swapStatus(next: string): void {\n if (next === this.stShown) return;\n if (!this.stShown) {\n this.stShown = next;\n return;\n }\n this.stOut = true;\n setTimeout(\n () => {\n this.stShown = next;\n this.stOut = false;\n },\n this.motion.reduce() ? 0 : 170\n );\n }\n\n private swapNote(next: string): void {\n if (next === this.noteShown) {\n return;\n }\n if (this.noteShown === '' && next === NOTE.review) {\n this.noteShown = next;\n return;\n }\n this.noteOut = true;\n setTimeout(\n () => {\n this.noteShown = next;\n this.noteOut = false;\n },\n this.motion.reduce() ? 0 : 170\n );\n }\n\n ngOnInit(): void {\n if (!this.stShown) this.refreshStatus();\n this.noteShown = this._note ?? NOTE[this._phase];\n }\n}\n","// framework/angular/progress/progress.component.ts\n//\n// Native Angular port of framework/react/progress/Progress.tsx.\n// A run's progress three ways (a ring for the whole run, segments for its steps,\n// a bar for the step in hand), with state colours (running = accent, paused =\n// grey, error = red + Retry, complete = green) and an optional credits meter\n// that warns in words as it fills. Inputs mirror the React props; callbacks\n// become @Output() EventEmitters.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nexport type ProgressState = 'indeterminate' | 'running' | 'paused' | 'error' | 'complete';\n\nexport interface ProgressStep {\n /** Like \"Indexing files\". */\n label: string;\n /** What the step counts, like \"Files\". */\n unit: string;\n /** How many there are to count, like 2000. */\n total: number;\n}\n\nexport interface ProgressMeter {\n /** Like \"Credits this month\". */\n label: string;\n value: number;\n max: number;\n /** The unit in the meter's spoken value, like \"credits\". */\n unit?: string;\n /** Share of max where it says \"Running low\" (0.75). */\n warnAt?: number;\n /** Share of max where it warns more strongly (0.9). */\n dangerAt?: number;\n /** The words for the stronger warning (\"Almost out\"). */\n dangerLabel?: string;\n /** Quiet text at the right under the meter, like \"Resets Dec 1\". */\n note?: string;\n}\n\nconst CODE: Record<ProgressState, string> = {\n indeterminate: 'ind',\n running: 'run',\n paused: 'paused',\n error: 'err',\n complete: 'done',\n};\nconst TAG: Record<ProgressState, [string, string]> = {\n indeterminate: ['Starting', ''],\n running: ['Running', 'vo-run'],\n paused: ['Paused', ''],\n error: ['Failed', 'vo-bad'],\n complete: ['Done', 'vo-ok'],\n};\nconst fmt = (n: number): string => Math.round(n).toLocaleString('en-US');\n\n/** A run's progress three ways, with an optional meter that warns as it fills. */\n@Component({\n selector: 'vo-progress',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [attr.data-s]=\"code\" class=\"vo-prg vo-panel\">\n <div class=\"vo-prg-h\">\n <span\n class=\"vo-prg-ring\"\n role=\"progressbar\"\n aria-label=\"Run progress\"\n [attr.aria-valuemin]=\"ind ? null : 0\"\n [attr.aria-valuemax]=\"ind ? null : 100\"\n [attr.aria-valuenow]=\"ind ? null : pct\"\n [attr.aria-valuetext]=\"ind ? 'Preparing the run' : pct + '% of the run'\"\n >\n <svg viewBox=\"0 0 36 36\" aria-hidden=\"true\">\n <circle class=\"vo-tr\" cx=\"18\" cy=\"18\" r=\"15\"></circle>\n <circle\n class=\"vo-fl\"\n cx=\"18\"\n cy=\"18\"\n r=\"15\"\n pathLength=\"100\"\n [style.stroke-dasharray]=\"ind ? null : all * 100 + ' 100'\"\n ></circle>\n </svg>\n <span class=\"vo-prg-pc vo-num\">\n @if (done) {\n <vo-icon name=\"check\" size=\"xs\" class=\"vo-enter\"></vo-icon>\n } @else if (!ind) {\n {{ pct }}%\n }\n </span>\n </span>\n <div class=\"vo-prg-t\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-prg-vt\">{{ words }}</span>\n </div>\n <span class=\"vo-tag vo-prg-st\" [class]=\"tagClass\">\n <span class=\"vo-sw\" [class.vo-out]=\"tagOut\">{{ shownTag }}</span>\n </span>\n @if (btn.on) {\n <button\n type=\"button\"\n class=\"vo-ib vo-prg-btn\"\n [attr.aria-label]=\"btn.label\"\n (click)=\"btn.on!.emit()\"\n [disabled]=\"state === 'error' || ind\"\n [style.visibility]=\"state === 'error' ? 'hidden' : null\"\n >\n <vo-icon [name]=\"btn.icon\"></vo-icon>\n </button>\n }\n </div>\n\n <div\n class=\"vo-prg-seg\"\n role=\"progressbar\"\n aria-label=\"Steps\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"n\"\n [attr.aria-valuenow]=\"done ? n : at\"\n [attr.aria-valuetext]=\"done ? 'All ' + n + ' steps done' : ind ? 'Not started' : 'Step ' + (at + 1) + ' of ' + n\"\n >\n @for (s of steps; track $index; let j = $index) {\n <i><b [style.--vo-f]=\"segFill(j)\"></b></i>\n }\n </div>\n\n <div class=\"vo-prg-ll\">\n @if (state === 'error') {\n <span class=\"vo-e vo-enter\">\n <vo-icon name=\"alert\" size=\"xs\"></vo-icon>\n <span>{{ error }}</span>\n </span>\n @if (retryWired) {\n <button type=\"button\" class=\"vo-pill vo-line vo-sm\" (click)=\"onRetry.emit()\">\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Retry\n </button>\n }\n } @else if (ind) {\n <span>Getting ready</span><span class=\"vo-n\">Counting</span>\n } @else {\n <span>{{ cur.unit }}</span>\n <span class=\"vo-n vo-num\">{{ fmtN(sub * cur.total) }} of {{ fmtN(cur.total) }}</span>\n }\n </div>\n\n <div\n class=\"vo-prg-lin\"\n [class.vo-ind]=\"ind\"\n role=\"progressbar\"\n aria-label=\"This step\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"ind ? null : subPct\"\n [attr.aria-valuetext]=\"ind ? 'Working out how much there is' : fmtN(sub * cur.total) + ' of ' + fmtN(cur.total) + ' ' + cur.unit.toLowerCase()\"\n >\n <i [style.width]=\"ind ? null : sub * 100 + '%'\"></i>\n </div>\n\n @if (meter) {\n <div class=\"vo-prg-meter\">\n <div class=\"vo-prg-mh\">\n <span>{{ meter.label }}</span>\n <span class=\"vo-num vo-muted\"\n ><b class=\"vo-prg-mv\">{{ fmtN(meter.value) }}</b> of {{ fmtN(meter.max) }}</span\n >\n </div>\n <div\n class=\"vo-prg-mb\"\n [class.vo-warn]=\"band === 1\"\n [class.vo-bad]=\"band === 2\"\n role=\"meter\"\n [attr.aria-label]=\"meter.label\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"meter.max\"\n [attr.aria-valuenow]=\"meterNow\"\n [attr.aria-valuetext]=\"meterValueText\"\n >\n <i class=\"vo-fl\" [style.width]=\"meterFillPct + '%'\"></i>\n <i class=\"vo-th\" [style.left]=\"warnAt * 100 + '%'\"></i>\n <i class=\"vo-th\" [style.left]=\"dangerAt * 100 + '%'\"></i>\n </div>\n <div class=\"vo-prg-ml\">\n <span [class.vo-enter]=\"band > 0\">\n @if (band === 2) {\n <span class=\"vo-tag vo-bad\"\n ><vo-icon name=\"alert\" size=\"xs\"></vo-icon>{{ meter.dangerLabel ?? 'Almost out' }}</span\n >\n } @else if (band === 1) {\n <span class=\"vo-tag vo-warn\"><vo-icon name=\"warn\" size=\"xs\"></vo-icon>Running low</span>\n } @else {\n <span class=\"vo-muted\">On track</span>\n }\n </span>\n @if (meter.note) {\n <span class=\"vo-muted\">{{ meter.note }}</span>\n }\n </div>\n </div>\n }\n\n <p class=\"vo-prg-sr\" aria-live=\"polite\">{{ said }}</p>\n </div>\n `,\n styleUrl: './progress.css',\n})\nexport class ProgressComponent implements OnChanges, OnDestroy {\n /** Like \"Indexing the docs\". */\n @Input() title = '';\n @Input() state: ProgressState = 'running';\n @Input() steps: ProgressStep[] = [];\n /** The step in hand, from 0. */\n @Input() step = 0;\n /** How far the step in hand is, 0 to 1. */\n @Input() stepProgress = 0;\n /** The line under the title. Defaults to \"Step 3 of 5, indexing files\". */\n @Input() valueText?: string;\n /** What failed, shown over the bar with a Retry button while state is \"error\". */\n @Input() error = 'The step failed';\n @Input() meter?: ProgressMeter;\n\n @Output() onPause = new EventEmitter<void>();\n @Output() onResume = new EventEmitter<void>();\n @Output() onRetry = new EventEmitter<void>();\n @Output() onRestart = new EventEmitter<void>();\n\n /** Whether the respective callbacks are wired (so their controls show). */\n @Input() pauseWired = true;\n @Input() resumeWired = true;\n @Input() retryWired = true;\n @Input() restartWired = true;\n\n said = '';\n tagOut = false;\n private was?: ProgressState;\n private saidTimer?: ReturnType<typeof setTimeout>;\n private tagTimer?: ReturnType<typeof setTimeout>;\n shownTag = '';\n\n constructor(private readonly motion: ReducedMotionService) {}\n\n /* ---------- derived values ---------- */\n get n(): number {\n return this.steps.length;\n }\n get at(): number {\n return Math.max(0, Math.min(this.step, this.n - 1));\n }\n get cur(): ProgressStep {\n return this.steps[this.at] ?? { label: '', unit: '', total: 0 };\n }\n get done(): boolean {\n return this.state === 'complete';\n }\n get ind(): boolean {\n return this.state === 'indeterminate';\n }\n get sub(): number {\n return this.done ? 1 : Math.max(0, Math.min(1, this.stepProgress));\n }\n get all(): number {\n return this.done ? 1 : (this.at + this.sub) / this.n;\n }\n get pct(): number {\n return Math.round(this.all * 100);\n }\n get subPct(): number {\n return Math.round(this.sub * 100);\n }\n get code(): string {\n return CODE[this.state];\n }\n get tagClass(): string {\n return 'vo-prg-st ' + TAG[this.state][1];\n }\n get words(): string {\n if (this.valueText !== undefined) return this.valueText;\n const at = this.at;\n const n = this.n;\n if (this.ind) return 'Preparing the run';\n if (this.state === 'paused') return `Paused at step ${at + 1} of ${n}`;\n if (this.state === 'error') return `Failed at step ${at + 1} of ${n}`;\n if (this.done) return `All ${n} steps done`;\n return `Step ${at + 1} of ${n}, ${this.cur.label.toLowerCase()}`;\n }\n get btn(): { icon: 'play' | 'pause' | 'refresh'; label: string; on: EventEmitter<void> | null } {\n if (this.state === 'paused')\n return { icon: 'play', label: 'Resume', on: this.resumeWired ? this.onResume : null };\n if (this.done)\n return { icon: 'refresh', label: 'Run again', on: this.restartWired ? this.onRestart : null };\n return { icon: 'pause', label: 'Pause', on: this.pauseWired ? this.onPause : null };\n }\n\n /* ---------- meter ---------- */\n get warnAt(): number {\n return this.meter?.warnAt ?? 0.75;\n }\n get dangerAt(): number {\n return this.meter?.dangerAt ?? 0.9;\n }\n get m(): number {\n return this.meter ? this.meter.value / this.meter.max : 0;\n }\n get band(): 0 | 1 | 2 {\n if (!this.meter) return 0;\n return this.m >= this.dangerAt ? 2 : this.m >= this.warnAt ? 1 : 0;\n }\n get meterFillPct(): number {\n return Math.min(100, this.m * 100);\n }\n get meterNow(): number {\n return Math.round(this.meter?.value ?? 0);\n }\n get meterValueText(): string {\n if (!this.meter) return '';\n const base = `${fmt(this.meter.value)} of ${fmt(this.meter.max)} ${this.meter.unit ?? ''}`.trim();\n const tail = ['', ', running low', ', ' + (this.meter.dangerLabel ?? 'almost out').toLowerCase()][\n this.band\n ];\n return base + tail;\n }\n\n segFill(j: number): number {\n if (this.done || j < this.at) return 1;\n if (j === this.at && !this.ind) return this.sub;\n return 0;\n }\n\n fmtN(n: number): string {\n return fmt(n);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.was === undefined) {\n this.was = this.state;\n this.shownTag = TAG[this.state][0];\n return;\n }\n if (changes['state'] && this.was !== this.state) {\n this.was = this.state;\n // announce only a change of state, never every percent\n const msg: Record<ProgressState, string> = {\n indeterminate: 'Starting',\n running: 'Running',\n paused: 'Paused',\n error: `Step ${this.at + 1} failed: ${this.error}`,\n complete: 'Done. ' + this.words,\n };\n clearTimeout(this.saidTimer);\n this.saidTimer = setTimeout(() => (this.said = msg[this.state]));\n // the tag text blurs out and back in on a state change (Swap)\n this.tagOut = true;\n clearTimeout(this.tagTimer);\n this.tagTimer = setTimeout(\n () => {\n this.shownTag = TAG[this.state][0];\n this.tagOut = false;\n },\n this.motion.reduce() ? 0 : 170,\n );\n }\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.saidTimer);\n clearTimeout(this.tagTimer);\n }\n}\n","// framework/angular/prompt-library/prompt-library.component.ts\n//\n// Native Angular port of framework/react/prompt-library/PromptLibrary.tsx.\n// The studio's saved prompts, each with blanks like {page}. Opening one lays its\n// blanks out as fields, the prompt fills in as they change, and it can't be used\n// until every blank has a value. Inputs mirror the React props; callbacks become\n// @Output EventEmitters.\n\nimport {\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One blank in a prompt — typed in, or picked from a short list. */\nexport interface PromptBlank {\n /** The field's label, like \"Section\". Lowercased, it also stands in the prompt while the blank is empty. */\n label: string;\n /** For a typed blank: the hint in the empty field. */\n placeholder?: string;\n /** For a picked blank: the choices, in a dropdown that starts on the first. */\n options?: string[];\n /** What the field says when the prompt is used with it empty. Defaults to \"Fill in the <label>\". */\n error?: string;\n}\n\n/** One saved prompt, its template and the blanks keyed by {key}. */\nexport interface SavedPrompt {\n id: string;\n title: string;\n /** The prompt, with each blank written as {key}, like \"Rewrite {section} on {page}\". */\n template: string;\n blanks: Record<string, PromptBlank>;\n}\n\n/** Overridable labels for the back button, footer note, use button and the used notice. */\nexport interface PromptLibraryLabels {\n back?: string;\n note?: string;\n use?: string;\n usedTitle?: string;\n usedDetail?: string;\n undo?: string;\n blank?: string;\n blanks?: string;\n}\n\nconst DEFAULT_LABELS: Required<PromptLibraryLabels> = {\n back: 'All prompts',\n note: 'Fills in as you go',\n use: 'Use prompt',\n usedTitle: 'Added to your message',\n usedDetail: 'Ready to send to the agent',\n undo: 'Undo',\n blank: 'blank',\n blanks: 'blanks',\n};\n\nconst cap = (s: string): string => s.charAt(0).toUpperCase() + s.slice(1);\n\n/** A span of the template: a literal string, or a blank by its key. */\ntype Part = { text: string } | { key: string };\n\n/** Split a template into its literal spans and {key} blanks. */\nconst parts = (t: string): Part[] =>\n t\n .split(/(\\{\\w+\\})/)\n .filter((p) => p !== '')\n .map((p) => (/^\\{\\w+\\}$/.test(p) ? { key: p.slice(1, -1) } : { text: p }));\n\n/** A picked blank laid out for the template, with whether it takes the full row. */\ninterface PickField {\n key: string;\n blank: PromptBlank;\n wide: boolean;\n}\n\n/** A typed blank laid out for the template. */\ninterface TypedField {\n key: string;\n blank: PromptBlank;\n}\n\n/**\n * The studio's saved prompts, each with blanks like {page}. Opening one lays its\n * blanks out as fields, the prompt fills in as they change, and it can't be used\n * until every blank has a value.\n */\n@Component({\n selector: 'vo-prompt-library',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div #root data-vo=\"\" [class]=\"className\" style=\"width:100%\" (keydown)=\"onKeydown($event)\">\n <div class=\"vo-plb vo-panel\">\n @if (!cur) {\n <div class=\"vo-plb-list vo-enter\">\n <div class=\"vo-plb-h\">\n <div class=\"vo-plb-ht\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n </div>\n <div class=\"vo-plb-rows\">\n @for (x of prompts; track x.id) {\n <button type=\"button\" class=\"vo-plb-row\" [attr.data-prompt]=\"x.id\" (click)=\"go(x.id)\">\n <span class=\"vo-plb-ic\"><vo-icon name=\"file-text\"></vo-icon></span>\n <span class=\"vo-plb-rt\"><b>{{ x.title }}</b><span>{{ x.template }}</span></span>\n <span class=\"vo-plb-n\">{{ count(x) }}</span>\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n </button>\n }\n </div>\n </div>\n } @else {\n <div class=\"vo-plb-one vo-enter\" [class.vo-used]=\"used\">\n <div class=\"vo-plb-h\">\n <button type=\"button\" class=\"vo-ib vo-plb-back\" [attr.aria-label]=\"L.back\" (click)=\"go(null)\">\n <vo-icon name=\"chev-l\"></vo-icon>\n </button>\n <div class=\"vo-plb-ht\"><b>{{ cur.title }}</b><span class=\"vo-muted\">{{ count(cur) }}</span></div>\n </div>\n\n <p class=\"vo-plb-tp\" aria-live=\"polite\">\n @for (q of templateParts; track $index) {\n @if (asText(q); as t) {\n {{ t.text }}\n } @else {\n <span\n class=\"vo-plb-s\"\n [class.vo-empty]=\"!filledValue($any(q).key)\"\n [class.vo-bad]=\"tried && !filledValue($any(q).key)\"\n >{{ filledValue($any(q).key) || cur.blanks[$any(q).key].label.toLowerCase() }}</span\n >\n }\n }\n </p>\n\n <div class=\"vo-plb-vars\" [attr.inert]=\"used ? '' : null\">\n @for (f of typedFields; track f.key) {\n <label class=\"vo-plb-fd vo-wide\" [class.vo-bad]=\"isBad(f.key)\" [attr.data-k]=\"f.key\">\n <span>{{ f.blank.label }}</span>\n <input\n class=\"vo-plb-in\"\n [value]=\"vals[f.key] ?? ''\"\n [attr.placeholder]=\"f.blank.placeholder ?? null\"\n [attr.aria-invalid]=\"isBad(f.key) ? true : null\"\n [attr.aria-describedby]=\"uid + '-' + f.key + '-e'\"\n (input)=\"setVal(f.key, $any($event.target).value)\"\n />\n <span class=\"vo-plb-er\" [id]=\"uid + '-' + f.key + '-e'\" [hidden]=\"!isBad(f.key)\">\n {{ isBad(f.key) ? (f.blank.error ?? 'Fill in the ' + f.blank.label.toLowerCase()) : '' }}\n </span>\n </label>\n }\n @for (f of pickFields; track f.key) {\n <div class=\"vo-plb-fd\" [class.vo-wide]=\"f.wide\" [attr.data-k]=\"f.key\">\n <span [id]=\"uid + '-' + f.key + '-l'\">{{ f.blank.label }}</span>\n <button\n type=\"button\"\n class=\"vo-plb-sel\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"openPick === f.key\"\n [attr.aria-labelledby]=\"uid + '-' + f.key + '-l ' + uid + '-' + f.key + '-v'\"\n (click)=\"togglePick(f.key)\"\n >\n <span class=\"vo-v\" [id]=\"uid + '-' + f.key + '-v'\">{{ cap(filledValue(f.key)) }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n <div\n #pop\n class=\"vo-pop vo-plb-pop\"\n [class.vo-open]=\"openPick === f.key\"\n [attr.data-k]=\"f.key\"\n role=\"menu\"\n [attr.aria-label]=\"f.blank.label\"\n >\n @for (o of f.blank.options ?? []; track o) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitemradio\"\n [attr.aria-checked]=\"o === filledValue(f.key)\"\n (click)=\"choose(f.key, o)\"\n >\n <span>{{ cap(o) }}</span>\n <span class=\"vo-ck\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n @if (used) {\n <div class=\"vo-plb-done vo-enter\">\n <vo-icon name=\"ok\"></vo-icon>\n <span class=\"vo-t\">{{ L.usedTitle }}<span class=\"vo-muted\">{{ L.usedDetail }}</span></span>\n <button type=\"button\" class=\"vo-pill vo-sm\" (click)=\"undo()\">{{ L.undo }}</button>\n </div>\n } @else {\n <div class=\"vo-plb-f\">\n <span class=\"vo-muted vo-plb-note\">{{ L.note }}</span>\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-plb-use\" (click)=\"use()\">{{ L.use }}</button>\n </div>\n }\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './prompt-library.css',\n})\nexport class PromptLibraryComponent implements OnChanges, OnDestroy {\n /** The saved prompts to list. */\n @Input() prompts: SavedPrompt[] = [];\n /** The list's heading. */\n @Input() title = 'Prompt library';\n /** The line under the title, like \"Shared with Visuno Studio\". */\n @Input() subtitle?: string;\n /** The open prompt's id, or null for the list. Leave it out to let the component hold its own. */\n @Input() open?: string | null;\n @Input() defaultOpen: string | null = null;\n /** The open prompt's blanks, by key. A picked blank left out starts on its first option. */\n @Input() values?: Record<string, string>;\n @Input() defaultValues: Record<string, string> = {};\n /** Overridable labels. */\n @Input() labels: PromptLibraryLabels = {};\n @Input() className?: string;\n\n /** Emitted when a prompt opens or the list comes back (null). */\n @Output() openChange = new EventEmitter<string | null>();\n /** Emitted whenever a blank's value changes. */\n @Output() valuesChange = new EventEmitter<Record<string, string>>();\n /** Emitted with the filled prompt once every blank has a value. */\n @Output() usePrompt = new EventEmitter<{ text: string; prompt: SavedPrompt; values: Record<string, string> }>();\n @Output() undoUse = new EventEmitter<void>();\n\n @ViewChild('root') private root!: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** A stable id for this instance's field ids. */\n readonly uid = 'plb-' + Math.random().toString(36).slice(2, 7);\n readonly cap = cap;\n\n // internal state holds its own when the matching input is left out (uncontrolled)\n private curId: string | null = null;\n vals: Record<string, string> = {};\n tried = false;\n used = false;\n openPick: string | null = null;\n private closeTimer?: ReturnType<typeof setTimeout>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] || changes['defaultOpen']) {\n this.curId = this.open !== undefined ? this.open : this.defaultOpen;\n }\n if (changes['values'] || changes['defaultValues']) {\n this.vals = { ...(this.values ?? this.defaultValues) };\n }\n }\n\n ngOnDestroy(): void {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n }\n\n get L(): Required<PromptLibraryLabels> {\n return { ...DEFAULT_LABELS, ...this.labels };\n }\n\n /** The open prompt, or undefined for the list. */\n get cur(): SavedPrompt | undefined {\n const id = this.open !== undefined ? this.open : this.curId;\n return this.prompts.find((x) => x.id === id);\n }\n\n get templateParts(): Part[] {\n return this.cur ? parts(this.cur.template) : [];\n }\n\n get typedFields(): TypedField[] {\n const p = this.cur;\n if (!p) return [];\n return Object.keys(p.blanks)\n .filter((k) => !p.blanks[k].options)\n .map((k) => ({ key: k, blank: p.blanks[k] }));\n }\n\n get pickFields(): PickField[] {\n const p = this.cur;\n if (!p) return [];\n // picked blanks sit two to a row, and an odd one out takes the row\n const picked = Object.keys(p.blanks).filter((k) => p.blanks[k].options);\n return picked.map((k, i) => ({\n key: k,\n blank: p.blanks[k],\n wide: picked.length % 2 === 1 && i === picked.length - 1,\n }));\n }\n\n asText(q: Part): { text: string } | null {\n return 'text' in q ? q : null;\n }\n\n count(p: SavedPrompt): string {\n const n = Object.keys(p.blanks).length;\n return `${n} ${n === 1 ? this.L.blank : this.L.blanks}`;\n }\n\n /** Every blank's value: what was typed or picked, or a picked blank's first option. */\n filledValue(key: string): string {\n const p = this.cur;\n const b = p?.blanks[key];\n return (this.vals[key] ?? b?.options?.[0] ?? '').trim();\n }\n\n isBad(key: string): boolean {\n return this.tried && !this.filledValue(key);\n }\n\n go(id: string | null): void {\n if (this.open === undefined) this.curId = id;\n this.setVals({});\n this.tried = false;\n this.used = false;\n this.openPick = null;\n this.openChange.emit(id);\n }\n\n setVal(key: string, value: string): void {\n this.setVals({ ...this.vals, [key]: value.trim() });\n }\n\n private setVals(next: Record<string, string>): void {\n if (this.values === undefined) this.vals = next;\n this.valuesChange.emit(next);\n }\n\n togglePick(key: string): void {\n this.openPick = this.openPick === key ? null : key;\n }\n\n choose(key: string, value: string): void {\n this.setVal(key, value);\n this.closePickSoon();\n }\n\n private closePickSoon(): void {\n if (this.closeTimer) clearTimeout(this.closeTimer);\n this.closeTimer = setTimeout(() => (this.openPick = null), this.motion.reduce() ? 0 : 120);\n }\n\n /** A prompt can't be used with a blank left empty: the blank says what it needs. */\n use(): void {\n const p = this.cur;\n if (!p) return;\n const empty = Object.keys(p.blanks).filter((k) => !this.filledValue(k));\n if (empty.length) {\n this.tried = true;\n return;\n }\n this.used = true;\n const text = p.template.replace(/\\{(\\w+)\\}/g, (m, k: string) => this.filledValue(k) || m);\n const values = Object.fromEntries(Object.keys(p.blanks).map((k) => [k, this.filledValue(k)]));\n this.usePrompt.emit({ text, prompt: p, values });\n }\n\n undo(): void {\n this.used = false;\n this.undoUse.emit();\n }\n\n onKeydown(e: KeyboardEvent): void {\n // Escape closes an open dropdown\n if (e.key === 'Escape' && this.openPick) {\n e.stopPropagation();\n this.openPick = null;\n }\n }\n}\n","// framework/angular/prompt-starters/prompt-starters.component.ts\n//\n// Native Angular port of framework/react/prompt-starters/PromptStarters.tsx.\n// Suggested first prompts as cards, two to a row. Picking one writes its prompt\n// into the field word by word; Send clears it with a sent line; Shuffle swaps\n// in another set. Inputs mirror the React props; onValueChange/onSend/onShuffle\n// become @Output EventEmitters.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Tone that colours a starter's icon. */\nexport type StarterTone =\n | 'blue'\n | 'purple'\n | 'green'\n | 'orange'\n | 'red'\n | 'yellow'\n | 'pink'\n | 'teal';\n\n/** One suggested starter card. */\nexport interface Starter {\n icon: VoIconName;\n /** Colours the icon. */\n tone?: StarterTone;\n /** A few words, like \"Audit a page\". */\n title: string;\n /** One quiet line under the title. */\n description: string;\n /** The full prompt it writes into the field when picked. */\n prompt: string;\n}\n\nconst TONE: Record<StarterTone, string> = {\n blue: 'pb',\n purple: 'pl',\n green: 'pm',\n orange: 'pp',\n red: 'pr',\n yellow: 'py',\n pink: 'pk',\n teal: 'pt',\n};\n\n@Component({\n selector: 'vo-prompt-starters',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-psx\">\n <div class=\"vo-psx-grid\">\n @for (s of starters; track s.title) {\n <button\n type=\"button\"\n class=\"vo-psx-c\"\n [class.vo-on]=\"picked === s.title\"\n [attr.aria-pressed]=\"picked === s.title\"\n (click)=\"pick(s)\"\n >\n <span class=\"vo-psx-ic\" [style.color]=\"toneColor(s.tone)\">\n <vo-icon [name]=\"s.icon\"></vo-icon>\n </span>\n <b>{{ s.title }}</b>\n <span class=\"vo-d\">{{ s.description }}</span>\n </button>\n }\n </div>\n <div class=\"vo-psx-in\" [class.vo-has]=\"field !== null\">\n <span class=\"vo-psx-ph\">{{ placeholder }}</span>\n <span class=\"vo-psx-tx\">\n @if (field) {\n @for (w of visibleWords; track $index) {\n <span class=\"vo-w\">{{ w }}{{ field.sent ? '' : ' ' }}</span>\n }\n }\n </span>\n <button\n type=\"button\"\n class=\"vo-psx-go\"\n aria-label=\"Send\"\n [attr.data-tip]=\"'Send'\"\n [disabled]=\"!ready\"\n (click)=\"send()\"\n >\n <vo-icon name=\"chev-u\"></vo-icon>\n </button>\n </div>\n @if (hasShuffle) {\n <button\n type=\"button\"\n class=\"vo-pill vo-ghost vo-sm vo-psx-sh\"\n (click)=\"shuffle.emit()\"\n >\n <vo-icon name=\"refresh\"></vo-icon>Shuffle\n </button>\n }\n </div>\n `,\n styleUrl: './prompt-starters.css',\n})\nexport class PromptStartersComponent implements OnChanges, OnDestroy {\n /** The starters to show, two to a row. Pass a new set to stagger them in again. */\n @Input() starters: Starter[] = [];\n\n /** The title of the picked starter. Leave it out to let the cards pick it. */\n @Input() value?: string | null;\n\n /** Initial picked title when value is uncontrolled. */\n @Input() defaultValue: string | null = null;\n\n @Input() placeholder = 'Pick a starter or type your own';\n\n /** Shown in the field once the prompt is sent. */\n @Input() sentLabel = 'Sent to the agent';\n\n /** Adds a Shuffle button under the field. */\n @Input() set onShuffle(enabled: boolean) {\n this.hasShuffle = enabled;\n }\n\n /** Emitted with the picked starter's title, or null when cleared. */\n @Output() valueChange = new EventEmitter<string | null>();\n\n /** Emitted with the prompt when Send is pressed. */\n @Output() send$ = new EventEmitter<string>();\n\n /** Emitted when Shuffle is pressed; swap in another set of starters. */\n @Output() shuffle = new EventEmitter<void>();\n\n private readonly motion = inject(ReducedMotionService);\n\n hasShuffle = false;\n /** The picked starter's title, or null. */\n picked: string | null = null;\n /** The field's current content, or null when empty. */\n field: { words: string[]; sent: boolean } | null = null;\n /** How many words have been typed so far. */\n typed = 0;\n\n private controlled = false;\n private timer?: ReturnType<typeof setTimeout>;\n private shownKey = '';\n\n get visibleWords(): string[] {\n if (!this.field) return [];\n return this.field.sent ? this.field.words : this.field.words.slice(0, this.typed);\n }\n\n get ready(): boolean {\n return !!this.field && !this.field.sent && this.picked !== null;\n }\n\n toneColor(tone?: StarterTone): string | null {\n return tone ? `var(--vo-${TONE[tone]})` : null;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['value']) {\n this.controlled = this.value !== undefined;\n if (this.controlled) this.applyPicked(this.value ?? null);\n }\n if (changes['defaultValue'] && !this.controlled && this.picked === null) {\n this.applyPicked(this.defaultValue);\n }\n if (changes['starters']) {\n const key = this.starters.map((s) => s.title).join('\\u0000');\n if (key !== this.shownKey) {\n // a new set of starters clears the field and drops a stale pick\n this.shownKey = key;\n this.clearField();\n if (this.picked !== null && !this.starters.some((s) => s.title === this.picked)) {\n this.setPicked(null);\n }\n }\n }\n }\n\n pick(s: Starter): void {\n this.setPicked(s.title);\n if (!this.controlled) this.fill(s);\n }\n\n send(): void {\n const s = this.starters.find((x) => x.title === this.picked);\n if (!s || !this.field || this.field.sent) return;\n this.send$.emit(s.prompt);\n this.stopTyping();\n this.field = { words: [this.sentLabel], sent: true };\n this.setPicked(null);\n }\n\n private setPicked(title: string | null): void {\n if (this.picked === title) return;\n this.picked = title;\n this.valueChange.emit(title);\n }\n\n // value changed from outside: mirror the pick and fill the field like a click does\n private applyPicked(title: string | null): void {\n if (this.picked === title) return;\n this.picked = title;\n const s = title === null ? undefined : this.starters.find((x) => x.title === title);\n if (s) this.fill(s);\n else this.clearField();\n }\n\n private fill(s: Starter): void {\n this.stopTyping();\n this.field = { words: s.prompt.split(' '), sent: false };\n this.typed = 0;\n this.typeNext();\n }\n\n // reveal a word every 40ms (first word at once), or all at once when reduced\n private typeNext(): void {\n if (!this.field || this.field.sent || this.typed >= this.field.words.length) return;\n if (this.motion.reduce()) {\n this.typed = this.field.words.length;\n return;\n }\n const delay = this.typed === 0 ? 0 : 40;\n this.timer = setTimeout(() => {\n this.typed += 1;\n this.typeNext();\n }, delay);\n }\n\n private clearField(): void {\n this.stopTyping();\n this.field = null;\n this.typed = 0;\n }\n\n private stopTyping(): void {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n\n ngOnDestroy(): void {\n this.stopTyping();\n }\n}\n","// framework/angular/proposal-card/proposal-card.component.ts\n//\n// Native Angular port of framework/react/proposal-card/ProposalCard.tsx.\n// A change the agent proposes: a from -> to colour diff, a confidence meter that\n// fills in a moment after the card appears, a fold of other options, and Accept /\n// Not now with an Undo. Inputs mirror the React props; callbacks are @Outputs.\n//\n// Icon substitutions (the Angular core icon set has no 'wand' or 'right'):\n// wand -> 'spark' (the AI-suggestion glint)\n// right -> 'chev-r' (the from -> to arrow)\n// 'chev-r' (fold toggle), 'ok' (accepted) and 'undo' are used as-is.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Colours the tag after a value. */\nexport type ProposalTone = 'ok' | 'warn' | 'bad';\n\n/** One side of the change: a swatch, its value and a tag, like #C9CFD8 with \"2.1 : 1\". */\nexport interface ProposalValue {\n /** Any CSS colour, shown in the swatch. */\n color: string;\n /** Like \"#C9CFD8\". */\n label: string;\n /** A short tag after the value, like a contrast ratio. */\n badge?: string;\n /** Colours the tag. The current value defaults to bad, the options to ok. */\n tone?: ProposalTone;\n}\n\n/** A change the agent can make. The first one is its suggestion, the others show under \"other options\". */\nexport interface ProposalOption extends ProposalValue {\n /** Like \"Suggested\" or \"Darker\". */\n name: string;\n /** The quiet line beside it in the list, like \"Balanced with the primary\". */\n description?: string;\n /** How sure the agent is, 0 to 100. */\n confidence: number;\n}\n\n/** open, accepted or dismissed. */\nexport type ProposalStatus = 'open' | 'accepted' | 'dismissed';\n\nconst STEPS = 5;\n\n@Component({\n selector: 'vo-proposal-card',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-prx\" [class.vo-panel]=\"!bare\">\n <div class=\"vo-prx-h\">\n <span class=\"vo-prx-ic\"><vo-icon [name]=\"icon\"></vo-icon></span>\n <div class=\"vo-prx-ht\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n </div>\n <div class=\"vo-prx-diff\">\n <div class=\"vo-prx-sw\">\n <span class=\"vo-prx-c\" [style.background]=\"from.color\"></span>\n <span class=\"vo-num\">{{ from.label }}</span>\n @if (from.badge) {\n <span class=\"vo-tag\" [class]=\"'vo-' + (from.tone ?? 'bad')\">{{ from.badge }}</span>\n }\n </div>\n <span class=\"vo-prx-ar\"><vo-icon name=\"chev-r\" size=\"xs\"></vo-icon></span>\n @if (opt(); as o) {\n <div class=\"vo-prx-sw vo-prx-new\">\n <span class=\"vo-prx-c\" [style.background]=\"o.color\"></span>\n <span class=\"vo-num\">{{ o.label }}</span>\n @if (o.badge) {\n <span class=\"vo-tag\" [class]=\"'vo-' + (o.tone ?? 'ok')\"><span class=\"vo-prx-rt\">{{ o.badge }}</span></span>\n }\n </div>\n }\n </div>\n <div class=\"vo-prx-cf\">\n <span class=\"vo-muted\">{{ confidenceLabel }}</span>\n <div\n class=\"vo-prx-seg\"\n role=\"meter\"\n [attr.aria-label]=\"confidenceLabel\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"opt()?.confidence ?? 0\"\n >\n @for (i of segIndexes; track i) {\n <i [class.vo-on]=\"conf >= (i + 1) * 20 - 10\"></i>\n }\n </div>\n <span class=\"vo-num vo-prx-pc\">{{ roundConf }}%</span>\n </div>\n @if (others().length > 0) {\n <button\n type=\"button\"\n class=\"vo-prx-alt-t\"\n [class.vo-open]=\"isOpen\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggleOpen()\"\n >\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n <span>{{ others().length }} other {{ others().length > 1 ? 'options' : 'option' }}</span>\n </button>\n <div class=\"vo-fold vo-prx-alt\" [class.vo-shut]=\"!isOpen\">\n <div>\n <div class=\"vo-prx-alts\">\n @for (x of others(); track x.i) {\n <button\n type=\"button\"\n class=\"vo-prx-a\"\n [class.vo-enter]=\"picked\"\n [style.animation-delay.ms]=\"picked ? x.k * 50 : null\"\n (click)=\"choose(x.i)\"\n >\n <span class=\"vo-prx-c\" [style.background]=\"x.o.color\"></span>\n <span>{{ x.o.name }}{{ x.o.badge ? ', ' + x.o.badge : '' }}</span>\n @if (x.o.description) {\n <span class=\"vo-d\">{{ x.o.description }}</span>\n }\n </button>\n }\n </div>\n </div>\n </div>\n }\n <div class=\"vo-prx-f\">\n @if (state === 'open') {\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-prx-no\" (click)=\"dismiss()\">Not now</button>\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-prx-ok\" (click)=\"accept()\">Accept</button>\n } @else if (state === 'accepted') {\n <span class=\"vo-prx-done vo-enter\"><vo-icon name=\"ok\"></vo-icon><span>{{ acceptedLabel }}</span></span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-prx-un vo-enter\" [style.animation-delay.ms]=\"60\" (click)=\"undo()\">\n <vo-icon name=\"undo\" size=\"xs\"></vo-icon>Undo\n </button>\n } @else {\n <span class=\"vo-prx-done vo-muted vo-enter\" style=\"color:var(--vo-muted)\">{{ dismissedLabel }}</span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-prx-un vo-enter\" [style.animation-delay.ms]=\"60\" (click)=\"undo()\">Undo</button>\n }\n </div>\n </div>\n `,\n styleUrl: './proposal-card.css',\n})\nexport class ProposalCardComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** What the agent wants to change. */\n @Input({ required: true }) title!: string;\n /** Where, like \"Pricing, frame 2 of 3\". */\n @Input() subtitle?: string;\n /** The icon in the orange tile. Defaults to a wand (substituted with 'spark'). */\n @Input() icon: VoIconName = 'spark';\n /** How it is now. */\n @Input({ required: true }) from!: ProposalValue;\n /** The changes on offer, the agent's pick first. */\n @Input({ required: true }) options: ProposalOption[] = [];\n /** Index of the option shown as the change. Leave it out to let the list pick it. */\n @Input() value?: number;\n /** Defaults to 0, the agent's pick. */\n @Input() defaultValue = 0;\n @Output() valueChange = new EventEmitter<number>();\n /** Whether the other options are listed. Leave it out to let their toggle open them. */\n @Input() open?: boolean;\n @Input() defaultOpen = false;\n @Output() openChange = new EventEmitter<boolean>();\n /** open, accepted or dismissed. Leave it out to let Accept, Not now and Undo move it. */\n @Input() status?: ProposalStatus;\n @Input() defaultStatus: ProposalStatus = 'open';\n @Output() statusChange = new EventEmitter<ProposalStatus>();\n /** Called with the chosen option when Accept is pressed. */\n @Output() accepted = new EventEmitter<{ option: ProposalOption; index: number }>();\n @Output() dismissed = new EventEmitter<void>();\n @Output() undone = new EventEmitter<void>();\n /** Shown once accepted, like \"Applied to 3 buttons\". */\n @Input() acceptedLabel = 'Applied';\n /** Shown once dismissed. */\n @Input() dismissedLabel = 'Dismissed. The agent will not suggest this again.';\n @Input() confidenceLabel = 'Confidence';\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n private readonly motion = inject(ReducedMotionService);\n\n readonly segIndexes = Array.from({ length: STEPS }, (_, i) => i);\n\n // controllable state: an input, when set, drives; otherwise the internal value does\n private selInner = 0;\n private openInner = false;\n private stateInner: ProposalStatus = 'open';\n\n /** The tweened confidence shown in the meter, 0..100. */\n conf = 0;\n picked = false;\n private ready = false;\n private readyTimer?: ReturnType<typeof setTimeout>;\n private tweenRaf?: number;\n\n get sel(): number {\n return this.value ?? this.selInner;\n }\n get isOpen(): boolean {\n return this.open ?? this.openInner;\n }\n get state(): ProposalStatus {\n return this.status ?? this.stateInner;\n }\n get roundConf(): number {\n return Math.round(this.conf);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultValue'] && this.value === undefined) this.selInner = this.defaultValue;\n if (changes['defaultOpen'] && this.open === undefined) this.openInner = this.defaultOpen;\n if (changes['defaultStatus'] && this.status === undefined) this.stateInner = this.defaultStatus;\n // keep the meter following the chosen option once the card is ready\n if ((changes['value'] || changes['options']) && this.ready) this.tweenTo(this.opt()?.confidence ?? 0);\n }\n\n ngAfterViewInit(): void {\n // the confidence fills in a moment after the card appears (400ms), as in the source\n const delay = this.motion.reduce() ? 0 : 400;\n this.readyTimer = setTimeout(() => {\n this.ready = true;\n this.tweenTo(this.opt()?.confidence ?? 0);\n }, delay);\n }\n\n /** The chosen option, clamped to the list. */\n opt(): ProposalOption | undefined {\n if (!this.options.length) return undefined;\n const i = Math.max(0, Math.min(this.options.length - 1, this.sel));\n return this.options[i];\n }\n\n /** The options other than the chosen one, with their list index and stagger key. */\n others(): { o: ProposalOption; i: number; k: number }[] {\n const sel = this.sel;\n const out: { o: ProposalOption; i: number; k: number }[] = [];\n this.options.forEach((o, i) => {\n if (i !== sel) out.push({ o, i, k: out.length });\n });\n return out;\n }\n\n choose(i: number): void {\n this.picked = true;\n if (this.value === undefined) this.selInner = i;\n this.valueChange.emit(i);\n if (this.ready) this.tweenTo(this.opt()?.confidence ?? 0);\n }\n\n toggleOpen(): void {\n const next = !this.isOpen;\n if (this.open === undefined) this.openInner = next;\n this.openChange.emit(next);\n }\n\n accept(): void {\n if (this.open === undefined) this.openInner = false;\n this.openChange.emit(false);\n this.setState('accepted');\n const o = this.opt();\n if (o) this.accepted.emit({ option: o, index: this.sel });\n }\n\n dismiss(): void {\n this.setState('dismissed');\n this.dismissed.emit();\n }\n\n undo(): void {\n this.setState('open');\n this.undone.emit();\n }\n\n private setState(s: ProposalStatus): void {\n if (this.status === undefined) this.stateInner = s;\n this.statusChange.emit(s);\n }\n\n // a small rAF tween so the meter counts up to its target, like the source's tween()\n private tweenTo(target: number): void {\n if (this.tweenRaf) cancelAnimationFrame(this.tweenRaf);\n if (this.motion.reduce() || typeof requestAnimationFrame !== 'function') {\n this.conf = target;\n return;\n }\n const from = this.conf;\n const start = performance.now();\n const dur = 700;\n const step = (now: number) => {\n const t = Math.min(1, (now - start) / dur);\n const eased = 1 - Math.pow(1 - t, 3); // easeOutCubic\n this.conf = from + (target - from) * eased;\n if (t < 1) this.tweenRaf = requestAnimationFrame(step);\n };\n this.tweenRaf = requestAnimationFrame(step);\n }\n\n ngOnDestroy(): void {\n if (this.readyTimer) clearTimeout(this.readyTimer);\n if (this.tweenRaf) cancelAnimationFrame(this.tweenRaf);\n }\n}\n","// framework/angular/radar-chart/radar-chart.component.ts\n//\n// Native Angular port of framework/react/radar-chart/RadarChart.tsx.\n// Compares a run with its baseline on a handful of eval scores: the baseline as\n// an outline, this run filled over it on grey scale rings, weak axes flagged in\n// words. Each axis is a label you can point at, tab to, or walk with the arrow\n// keys; the legend shows and hides either series (one always stays). Inputs\n// mirror the React props; the baseline draws itself, this run grows out of the\n// middle, then the note lands, following the vanilla JS (radar-chart.js). The\n// geometry follows the chart's size via a ResizeObserver, so the labels always\n// sit outside the rings.\n//\n// Icons: the note uses `spark` (the one icon in the source). All other marks are\n// plain CSS/SVG, so no substitution was needed.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One axis of the radar: a score for this run against its baseline. */\nexport interface RadarAxis {\n /** Like \"Instruction following\". */\n label: string;\n /** Shown instead of the label on a narrow card, like \"Instructions\". */\n short?: string;\n /** This run's score, 0 to 100. */\n value: number;\n /** The baseline's score, 0 to 100. */\n baseline: number;\n}\n\n/** Per-axis render state (position, side, geometry). */\ninterface AxisView {\n axis: RadarAxis;\n index: number;\n /** Text to show now (full label or short on a narrow card). */\n text: string;\n /** Score change against the baseline. */\n delta: number;\n weak: boolean;\n side: 'l' | 'm' | 'r';\n left: number;\n top: number;\n tabIndex: number;\n hot: boolean;\n pulse: boolean;\n}\n\n@Component({\n selector: 'vo-radar-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"'vo-rdx vo-panel ' + (className ?? '')\">\n <div class=\"vo-rdx-h\">\n <div class=\"vo-rdx-t\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n <div class=\"vo-rdx-lg\">\n <button type=\"button\" class=\"vo-rdx-k\" [attr.aria-pressed]=\"on.cur\" (click)=\"toggle('cur')\">\n <i class=\"vo-c\"></i>{{ seriesLabels[0] }}\n </button>\n <button type=\"button\" class=\"vo-rdx-k\" [attr.aria-pressed]=\"on.base\" (click)=\"toggle('base')\">\n <i class=\"vo-b\"></i>{{ seriesLabels[1] }}\n </button>\n </div>\n </div>\n\n <div\n #ch\n class=\"vo-rdx-ch\"\n role=\"group\"\n aria-label=\"Scores by axis. Left and Right move between axes\"\n (keydown)=\"keys($event)\"\n (pointerleave)=\"leave()\"\n (focusout)=\"focusOut($event)\"\n >\n @if (W > 0) {\n <svg class=\"vo-rdx-svg\" [attr.viewBox]=\"'0 0 ' + W + ' ' + H\" aria-hidden=\"true\">\n @for (ring of rings; track ring.v) {\n <polygon [class]=\"'vo-ring' + (ring.v === 100 ? ' vo-out' : '')\" [attr.points]=\"ringPoints(ring.v)\"></polygon>\n }\n @for (a of viewAxes; track a.index) {\n <line\n [class]=\"'vo-sp' + (a.index === hot ? ' vo-on' : '')\"\n [attr.x1]=\"cx\"\n [attr.y1]=\"cy\"\n [attr.x2]=\"spoke(a.index).x\"\n [attr.y2]=\"spoke(a.index).y\"\n ></line>\n }\n <polygon\n [class]=\"'vo-base' + (on.base ? '' : ' vo-off')\"\n [attr.pathLength]=\"100\"\n [style.stroke-dasharray]=\"drawn + ' 100'\"\n [attr.points]=\"basePoints()\"\n ></polygon>\n <polygon [class]=\"'vo-cur' + (on.cur ? '' : ' vo-off')\" [attr.points]=\"curPoints()\"></polygon>\n @for (a of viewAxes; track a.index) {\n <circle\n [class]=\"'vo-pt vo-b' + (on.base && drawn >= 100 ? '' : ' vo-off')\"\n r=\"2.5\"\n [attr.cx]=\"pt(a.index, a.axis.baseline).x\"\n [attr.cy]=\"pt(a.index, a.axis.baseline).y\"\n ></circle>\n <circle\n [class]=\"'vo-pt vo-c' + (on.cur && grow > 0.98 ? '' : ' vo-off') + (a.index === hot ? ' vo-on' : '')\"\n r=\"3\"\n [attr.cx]=\"pt(a.index, a.axis.value * grow).x\"\n [attr.cy]=\"pt(a.index, a.axis.value * grow).y\"\n ></circle>\n }\n </svg>\n }\n\n <span class=\"vo-rdx-avg vo-num\"><b>{{ avg }}</b><span class=\"vo-muted\">average</span></span>\n\n @for (a of viewAxes; track a.index) {\n <button\n type=\"button\"\n [class]=\"axClass(a)\"\n [attr.tabindex]=\"a.tabIndex\"\n [attr.aria-label]=\"axLabel(a)\"\n [style.left.px]=\"a.left\"\n [style.top.px]=\"a.top\"\n [style.visibility]=\"W ? null : 'hidden'\"\n (pointerenter)=\"enter($event, a.index)\"\n (focus)=\"focus(a.index)\"\n (click)=\"show(a.index)\"\n >\n <span class=\"vo-n\">{{ a.text }}</span>\n <span class=\"vo-v vo-num\"\n ><b>{{ a.axis.value }}</b\n ><span>{{ a.delta >= 0 ? '+' : '−' }}{{ abs(a.delta) }}</span>\n @if (a.weak) {\n <span class=\"vo-tag vo-warn\">Weak</span>\n }\n </span>\n </button>\n }\n </div>\n\n <div class=\"vo-rdx-ro\" aria-live=\"polite\">\n @if (hotAxis(); as r) {\n <span\n ><b>{{ r.label }}</b> {{ r.value }} now, {{ r.baseline }} before,\n <span [class]=\"r.value < r.baseline ? 'vo-dn' : 'vo-up'\"\n >{{ r.value < r.baseline ? '−' : '+' }}{{ abs(r.value - r.baseline) }}</span\n >{{ r.value < weakBelow ? ', below ' + weakBelow : '' }}</span\n >\n } @else {\n <span>\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>\n <span>{{ note ?? defaultNote() }}</span>\n </span>\n }\n </div>\n </div>\n `,\n styleUrl: './radar-chart.css',\n})\nexport class RadarChartComponent implements AfterViewInit, OnDestroy {\n /** Five to seven axes, clockwise from the top. */\n @Input({ required: true }) axes: RadarAxis[] = [];\n @Input() title = 'Eval scores';\n @Input() subtitle?: string;\n /** The legend's names for the two series. */\n @Input() seriesLabels: [string, string] = ['This run', 'Baseline'];\n /** A score under this is flagged \"Weak\". */\n @Input() weakBelow = 70;\n /** The note under the chart, shown while no axis is pointed at. */\n @Input() note?: string;\n /** An axis to call out: its label pulses (by index). */\n @Input() pulse?: number;\n @Input() className?: string;\n\n @ViewChild('ch', { static: false }) private chRef?: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n readonly rings = [{ v: 25 }, { v: 50 }, { v: 75 }, { v: 100 }];\n\n // geometry, recomputed on resize\n W = 0;\n H = 0;\n private side = 92;\n // animation state\n drawn = 0;\n grow = 0;\n avg = 0;\n // interaction state\n on = { cur: true, base: true };\n hot = -1;\n private focusAt = 0;\n\n private ro?: ResizeObserver;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private rafs = new Set<number>();\n private live = true;\n\n get N(): number {\n return this.axes.length;\n }\n get cx(): number {\n return this.W / 2;\n }\n get cy(): number {\n return this.H / 2;\n }\n get R(): number {\n return Math.max(40, Math.min(this.H / 2 - 46, this.W / 2 - this.side - 14));\n }\n private get narrow(): boolean {\n return this.W > 0 && this.W < 380;\n }\n\n abs(n: number): number {\n return Math.abs(n);\n }\n\n private mean(k: 'value' | 'baseline'): number {\n return Math.round(this.axes.reduce((t, a) => t + a[k], 0) / this.N);\n }\n\n defaultNote(): string {\n const v = this.mean('value');\n const b = this.mean('baseline');\n return `This run averages ${v}, ${v >= b ? 'up' : 'down'} ${Math.abs(v - b)} on the baseline.`;\n }\n\n private ang(i: number): number {\n return -Math.PI / 2 + (i * 2 * Math.PI) / this.N;\n }\n\n pt(i: number, v: number): { x: number; y: number } {\n return {\n x: this.cx + (Math.cos(this.ang(i)) * this.R * v) / 100,\n y: this.cy + (Math.sin(this.ang(i)) * this.R * v) / 100,\n };\n }\n\n spoke(i: number): { x: number; y: number } {\n return this.pt(i, 100);\n }\n\n ringPoints(v: number): string {\n return this.axes.map((_, i) => `${this.pt(i, v).x},${this.pt(i, v).y}`).join(' ');\n }\n\n private poly(f: (a: RadarAxis) => number): string {\n return this.axes\n .map((a, i) => {\n const p = this.pt(i, f(a));\n return `${p.x.toFixed(1)},${p.y.toFixed(1)}`;\n })\n .join(' ');\n }\n\n basePoints(): string {\n return this.poly((a) => a.baseline);\n }\n curPoints(): string {\n return this.poly((a) => a.value * this.grow);\n }\n\n /** The per-axis label views, positioned outside the rings. */\n get axesView(): AxisView[] {\n return this.axes.map((a, i) => {\n const an = this.ang(i);\n const cs = Math.cos(an);\n const sn = Math.sin(an);\n const side: 'l' | 'm' | 'r' = Math.abs(cs) < 0.2 ? 'm' : cs < 0 ? 'l' : 'r';\n const x = this.cx + cs * (this.R + 12);\n const y = this.cy + sn * (this.R + 12);\n const el = this.labelEls[i];\n const w = el?.offsetWidth ?? 0;\n const h = el?.offsetHeight ?? 0;\n return {\n axis: a,\n index: i,\n text: this.narrow && a.short ? a.short : a.label,\n delta: a.value - a.baseline,\n weak: a.value < this.weakBelow,\n side,\n left: side === 'm' ? x - w / 2 : side === 'l' ? x - w : x,\n top: Math.abs(sn) > 0.9 ? (sn < 0 ? y - h : y) : y - h / 2,\n tabIndex: i === this.focusAt ? 0 : -1,\n hot: i === this.hot,\n pulse: i === this.pulse && this.grow > 0.98,\n };\n });\n }\n\n /** The per-axis views the template iterates. */\n get viewAxes(): AxisView[] {\n return this.axesView;\n }\n\n private labelEls: (HTMLElement | null)[] = [];\n\n axClass(a: AxisView): string {\n return (\n 'vo-rdx-ax vo-' +\n a.side +\n (a.hot ? ' vo-on' : '') +\n (a.pulse ? ' vo-hot' : '')\n );\n }\n\n axLabel(a: AxisView): string {\n return `${a.axis.label}: ${a.axis.value}, baseline ${a.axis.baseline}, ${a.delta >= 0 ? 'up' : 'down'} ${Math.abs(a.delta)}${a.weak ? ', weak' : ''}`;\n }\n\n hotAxis(): RadarAxis | null {\n return this.hot >= 0 ? this.axes[this.hot] : null;\n }\n\n toggle(s: 'cur' | 'base'): void {\n const o = s === 'cur' ? 'base' : 'cur';\n if (this.on[s] && !this.on[o]) return;\n this.on = { ...this.on, [s]: !this.on[s] };\n }\n\n show(i: number): void {\n this.hot = i;\n }\n\n enter(e: PointerEvent, i: number): void {\n if (e.pointerType !== 'touch') this.hot = i;\n }\n\n focus(i: number): void {\n this.hot = i;\n this.focusAt = i;\n }\n\n leave(): void {\n const el = this.chRef?.nativeElement;\n if (el && !el.contains(document.activeElement)) this.hot = -1;\n }\n\n focusOut(e: FocusEvent): void {\n const el = this.chRef?.nativeElement;\n if (el && !el.contains(e.relatedTarget as Node)) this.hot = -1;\n }\n\n keys(e: KeyboardEvent): void {\n const i = this.focusAt;\n const to = (\n { ArrowRight: i + 1, ArrowDown: i + 1, ArrowLeft: i - 1, ArrowUp: i - 1, Home: 0, End: this.N - 1 } as Record<\n string,\n number\n >\n )[e.key];\n if (to == null) return;\n e.preventDefault();\n const j = (to + this.N) % this.N;\n this.focusAt = j;\n this.labelEls[j]?.focus();\n }\n\n ngAfterViewInit(): void {\n const el = this.chRef?.nativeElement;\n if (!el) return;\n this.collectLabels();\n const measure = () => {\n this.collectLabels();\n const side = Math.max(\n 0,\n ...this.labelEls\n .filter((l, i) => l && Math.abs(Math.cos(this.ang(i))) >= 0.2)\n .map((l) => l!.offsetWidth),\n );\n this.W = el.clientWidth;\n this.H = el.clientHeight;\n this.side = side;\n this.cdr.detectChanges();\n };\n measure();\n this.ro = new ResizeObserver(() => measure());\n this.ro.observe(el);\n\n // the baseline draws itself, then this run grows out of the middle\n const reduce = this.motion.reduce();\n this.schedule(() => {\n if (!this.live) return;\n this.tween(900, (t) => (this.drawn = t * 100), reduce).then(() => {\n this.schedule(() => {\n if (!this.live) return;\n this.tween(1100, (t) => (this.avg = Math.round(t * this.mean('value'))), reduce);\n this.tween(1100, (t) => (this.grow = t), reduce);\n }, 250);\n });\n }, 300);\n }\n\n private collectLabels(): void {\n const el = this.chRef?.nativeElement;\n if (!el) return;\n this.labelEls = Array.from(el.querySelectorAll<HTMLElement>('.vo-rdx-ax'));\n }\n\n private tween(ms: number, step: (t: number) => void, reduce: boolean): Promise<void> {\n return new Promise<void>((res) => {\n const t0 = performance.now();\n const f = (t: number) => {\n const p = Math.min(1, (t - t0) / (reduce ? 1 : ms));\n step(1 - Math.pow(1 - p, 3));\n this.cdr.detectChanges();\n if (p < 1) {\n const id = requestAnimationFrame(f);\n this.rafs.add(id);\n } else res();\n };\n const id = requestAnimationFrame(f);\n this.rafs.add(id);\n });\n }\n\n private schedule(fn: () => void, ms: number): void {\n const t = setTimeout(() => {\n this.timers.delete(t);\n fn();\n }, ms);\n this.timers.add(t);\n }\n\n ngOnDestroy(): void {\n this.live = false;\n this.ro?.disconnect();\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n this.rafs.forEach((id) => cancelAnimationFrame(id));\n this.rafs.clear();\n }\n}\n","// framework/angular/radial-goals/radial-goals.component.ts\n//\n// Native Angular port of framework/react/radial-goals/RadialGoals.tsx.\n// Concentric rings, one per agent, each its share of its own target; past the\n// target a ring goes round again from the top with a marker where it ends. The\n// middle reads the overall share, or the focused ring. Hovering or focusing a\n// ring (or its legend row) dims the rest and rolls the middle to that share.\n// A period switch (Week / Month) repaints every ring. Inputs mirror the React\n// props; the ring geometry, the lap marker and the centre tween follow the\n// vanilla JS (radial-goals.js).\n//\n// Icons: none of this component's chrome needs a glyph, so the shared\n// VoIconComponent is not used here (the \"on target\" state is a text chip).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One agent's goal: what it did against its own target. */\nexport interface RadialGoal {\n key: string;\n /** Like \"Support agent\". */\n label: string;\n /** What it counts, like \"tickets\". */\n unit: string;\n value: number;\n target: number;\n /** Defaults to the chart palette in order. */\n color?: string;\n}\n\n/** One entry in the period switch, like Week and Month. */\nexport interface RadialGoalRange {\n value: string;\n label: string;\n}\n\nconst PAL = ['var(--vo-c1)', 'var(--vo-c3)', 'var(--vo-c4)', 'var(--vo-c2)', 'var(--vo-c5)'];\nconst pc = (x: number) => Math.round(x * 100) + '%';\n\n/** Per-ring render state (geometry and dash values). */\ninterface RingView {\n goal: RadialGoal;\n index: number;\n color: string;\n radius: number;\n share: number;\n lap: boolean;\n flDash: string;\n ovDash: string;\n ovbDash: string;\n ovbOffset: number;\n markerR: number;\n markerCx: number;\n markerCy: number;\n rowPercent: string;\n onTarget: boolean;\n rowValue: string;\n rowLabel: string;\n}\n\n@Component({\n selector: 'vo-radial-goals',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-rgx vo-panel\">\n <div class=\"vo-rgx-h\">\n <div class=\"vo-rgx-t\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-sw vo-rgx-sub\" [class.vo-out]=\"subOut\">{{ subText }}</span>\n </div>\n @if (ranges && ranges.length > 1) {\n <div class=\"vo-seg2 vo-rgx-sg\" role=\"group\" aria-label=\"Range\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (rg of ranges; track rg.value) {\n <button\n type=\"button\"\n [attr.data-v]=\"rg.value\"\n [attr.aria-pressed]=\"rg.value === current\"\n (click)=\"selectRange(rg.value)\"\n >{{ rg.label }}</button>\n }\n </div>\n }\n </div>\n\n <div class=\"vo-rgx-b\">\n <div class=\"vo-rgx-ring\" [class.vo-hov]=\"focus >= 0\">\n <svg viewBox=\"0 0 180 180\" aria-hidden=\"true\" [style.--vo-rw]=\"width\">\n @for (r of rings; track r.goal.key) {\n <g\n [class.vo-on]=\"r.index === focus\"\n [class.vo-lap]=\"r.lap\"\n [style.stroke]=\"r.color\"\n (pointerenter)=\"onPointerEnter(r.index, $event)\"\n (pointerleave)=\"onPointerLeave()\"\n >\n <circle class=\"vo-tr\" [attr.cx]=\"90\" [attr.cy]=\"90\" [attr.r]=\"r.radius\"></circle>\n <circle class=\"vo-fl\" [attr.cx]=\"90\" [attr.cy]=\"90\" [attr.r]=\"r.radius\"\n [attr.pathLength]=\"100\" [attr.stroke-dasharray]=\"r.flDash\"></circle>\n <circle class=\"vo-ovb\" [attr.cx]=\"90\" [attr.cy]=\"90\" [attr.r]=\"r.radius\"\n [attr.pathLength]=\"100\" [attr.stroke-dasharray]=\"r.ovbDash\"\n [attr.stroke-dashoffset]=\"r.ovbOffset\"></circle>\n <circle class=\"vo-ov\" [attr.cx]=\"90\" [attr.cy]=\"90\" [attr.r]=\"r.radius\"\n [attr.pathLength]=\"100\" [attr.stroke-dasharray]=\"r.ovDash\"></circle>\n <circle class=\"vo-mk\" [attr.r]=\"r.markerR\" [attr.cx]=\"r.markerCx\" [attr.cy]=\"r.markerCy\"\n [style.stroke]=\"r.color\"></circle>\n </g>\n }\n </svg>\n <div class=\"vo-rgx-c\">\n <b class=\"vo-num\">{{ midText }}</b>\n <span class=\"vo-muted vo-sw\" [class.vo-out]=\"midLabelOut\">{{ midLabel }}</span>\n </div>\n </div>\n\n <div class=\"vo-rgx-lg\">\n @for (r of rings; track r.goal.key) {\n <div\n class=\"vo-rgx-r\"\n [class.vo-on]=\"r.index === focus\"\n tabindex=\"0\"\n [attr.aria-label]=\"r.goal.label + ': ' + r.goal.value + ' of ' + r.goal.target + ' ' + r.goal.unit + ', ' + r.rowPercent + ' of target'\"\n (pointerenter)=\"onPointerEnter(r.index, $event)\"\n (pointerleave)=\"onRowPointerLeave()\"\n (focus)=\"setFocus(r.index)\"\n (blur)=\"setFocus(-1)\"\n >\n <i [style.background]=\"r.color\"></i>\n <span class=\"vo-n\">{{ r.goal.label }}</span>\n <span class=\"vo-p vo-num\">\n @if (r.onTarget) {\n <span class=\"vo-tag vo-ok\">{{ r.rowPercent }}</span>\n } @else {\n {{ r.rowPercent }}\n }\n </span>\n <span class=\"vo-v vo-num\">{{ r.rowValue }}</span>\n </div>\n }\n </div>\n </div>\n\n <div class=\"vo-rgx-sr\">\n <table>\n <caption>{{ title }}</caption>\n <thead><tr><th>Agent</th><th>Done</th><th>Target</th><th>Share</th></tr></thead>\n <tbody>\n @for (r of rings; track r.goal.key) {\n <tr>\n <th>{{ r.goal.label }}</th>\n <td>{{ r.goal.value }} {{ r.goal.unit }}</td>\n <td>{{ r.goal.target }}</td>\n <td>{{ r.rowPercent }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n `,\n styleUrl: './radial-goals.css',\n})\nexport class RadialGoalsComponent implements AfterViewInit, OnDestroy {\n /** Two to five goals, outermost first. Three read best: the fewer the rings, the thicker they are. */\n @Input({ required: true }) goals: RadialGoal[] = [];\n @Input() title = 'Agent goals';\n /** The line under the title. Defaults to \"N of M on target\". */\n @Input() subtitle?: string;\n /** A switch for the period, like Week and Month. Leave out for no switch. */\n @Input() ranges?: RadialGoalRange[];\n /** Controlled selected range value. Leave out for uncontrolled (first range). */\n @Input() set range(value: string | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.current) {\n this.current = value;\n if (this.ready) {\n this.placeKnob();\n this.build();\n }\n }\n }\n\n /** Emitted when the selected range changes. */\n @Output() rangeChange = new EventEmitter<string>();\n\n rings: RingView[] = [];\n width = 14;\n focus = -1;\n current = '';\n\n midText = '0%';\n midLabel = 'of targets';\n midLabelOut = false;\n subText = '';\n subOut = false;\n knobLeft = 0;\n knobWidth = 0;\n\n private controlled = false;\n private ready = false;\n private shown = 0;\n private frames: number[] = [];\n private timers: ReturnType<typeof setTimeout>[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled && this.ranges?.length) {\n this.current = this.current || this.ranges[0].value;\n }\n this.ready = true;\n this.build(true);\n this.cdr.detectChanges();\n this.placeKnob();\n // the rings fill in a moment after they come in\n this.later(() => this.build(), 260);\n }\n\n selectRange(value: string): void {\n if (value === this.current) return;\n if (!this.controlled) {\n this.current = value;\n this.placeKnob();\n this.build();\n }\n this.rangeChange.emit(value);\n }\n\n onPointerEnter(index: number, e: PointerEvent): void {\n if (e.pointerType !== 'touch') this.setFocus(index);\n }\n\n onPointerLeave(): void {\n if (!this.host.nativeElement.querySelector('.vo-rgx-lg')?.contains(document.activeElement)) {\n this.setFocus(-1);\n }\n }\n\n onRowPointerLeave(): void {\n if (!this.host.nativeElement.querySelector('.vo-rgx-lg')?.contains(document.activeElement)) {\n this.setFocus(-1);\n }\n }\n\n setFocus(index: number): void {\n if (this.focus === index) return;\n this.focus = index;\n this.centre(this.ready);\n this.cdr.markForCheck();\n }\n\n private share(g: RadialGoal): number {\n return g.target ? g.value / g.target : 0;\n }\n\n private overall(): number {\n return this.goals.reduce((t, g) => t + this.share(g), 0) / Math.max(1, this.goals.length);\n }\n\n // build every ring's geometry and legend text for the current period\n private build(initial = false): void {\n const n = this.goals.length;\n // the rings share the band from the outer edge (85) to the readout in the middle\n // with a 4 unit gap between them; three goals get rings 14 units wide, never wider than 16\n this.width = Math.min(16, (51 - 4 * (n - 1)) / Math.max(1, n));\n this.rings = this.goals.map((goal, i) => {\n const radius = 85 - this.width / 2 - i * (this.width + 4);\n const s = this.share(goal);\n // past the target the ring goes round again from the top, and a marker sits where it ends\n const lap = Math.max(0, (s - 1) * 100);\n const cut = Math.min(3, lap);\n const an = (s > 1 ? s - 1 : s) * 2 * Math.PI;\n return {\n goal,\n index: i,\n color: goal.color ?? PAL[i % PAL.length],\n radius,\n share: s,\n lap: s > 1,\n // (a hair short of the share: a dash that ends exactly on a quarter draws a stray notch in Chrome)\n flDash: `${Math.max(0, Math.min(1, s) * 100 - 0.01)} 100`,\n ovDash: `${lap} 100`,\n // under the lap's end only, a band of the surface a little wider than the ring\n ovbDash: `${cut} 100`,\n ovbOffset: -(lap - cut),\n markerR: Math.max(2.5, this.width * 0.29),\n markerCx: 90 + Math.cos(an) * radius,\n markerCy: 90 + Math.sin(an) * radius,\n rowPercent: pc(s),\n onTarget: s >= 1,\n rowValue: `${goal.value.toLocaleString('en-US')} / ${goal.target.toLocaleString('en-US')} ${goal.unit}`,\n rowLabel: goal.label,\n };\n });\n\n const on = this.goals.filter((g) => this.share(g) >= 1).length;\n const next = this.subtitle ?? `${on} of ${this.goals.length} on target`;\n if (initial) {\n this.subText = next;\n } else {\n this.swap((v) => (this.subText = v), next, (out) => (this.subOut = out));\n }\n this.centre(!initial);\n this.cdr.markForCheck();\n }\n\n // the middle shows the overall share, or the agent in focus, and rolls to it\n private centre(animate: boolean): void {\n const target = this.focus < 0 ? this.overall() : this.share(this.goals[this.focus]);\n const label = this.focus < 0 ? 'of targets' : this.goals[this.focus].label.replace(/ agent$/, '');\n this.swap((v) => (this.midLabel = v), label, (out) => (this.midLabelOut = out));\n const from = this.shown;\n this.shown = target;\n if (!animate || this.reduced.reduce()) {\n this.midText = pc(target);\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const dur = 600;\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.midText = pc(from + (target - from) * (1 - Math.pow(1 - p, 3)));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n // blur the line out, set the new text, blur it back in (unless reduced motion)\n private swap(set: (value: string) => void, value: string, out: (on: boolean) => void): void {\n if (this.reduced.reduce()) {\n set(value);\n return;\n }\n out(true);\n this.later(() => {\n set(value);\n out(false);\n this.cdr.markForCheck();\n }, 170);\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-rgx-sg button');\n const i = this.ranges?.findIndex((r) => r.value === this.current) ?? -1;\n const b = i >= 0 ? btns[i] : undefined;\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/reasoning-trail/reasoning-trail.component.ts\n//\n// Native Angular port of framework/react/reasoning-trail/ReasoningTrail.tsx.\n// The agent's plan, notes, sources or edits, under a header it can fold away.\n// Inputs mirror the React props; callback props become @Output EventEmitters.\n// The seconds counter (while running), the fold toggle and the view switch are\n// ported from the React logic and the vanilla JS (reasoning-trail.js). Reduced\n// motion is respected via the shared ReducedMotionService.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A step in the agent's plan. */\nexport interface PlanStep {\n label: string;\n /** Shown under a finished step, like \"4 frames\". */\n detail?: string;\n state: 'done' | 'now' | 'next';\n}\n\n/** A changed file, with the removed and added lines. */\nexport interface Edit {\n file: string;\n /** Like \"2 lines\". */\n detail?: string;\n removed?: string[];\n added?: string[];\n}\n\n/** The kind of a source chip: picks the mark in front of the label. */\nexport type SourceKind = 'figma' | 'web' | 'ts' | 'tsx' | 'css' | 'csv' | 'pdf';\n\n/** A file or link the agent read. */\nexport interface Source {\n label: string;\n kind?: SourceKind;\n tip?: string;\n}\n\n/** Which part of the trail it shows. */\nexport type ReasoningTrailView = 'plan' | 'notes' | 'sources' | 'edits';\n\nconst VIEWS: ReasoningTrailView[] = ['plan', 'notes', 'sources', 'edits'];\nconst FT: Record<string, string> = { tsx: 'vo-re', csv: 'vo-csv', pdf: 'vo-pdf' };\n\n@Component({\n selector: 'vo-reasoning-trail',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-rtr\"\n [class.vo-panel]=\"!bare\"\n [style.padding-inline]=\"bare ? '0' : null\"\n >\n <button\n type=\"button\"\n class=\"vo-rtr-h\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggle()\"\n (keydown)=\"onHeadKey($event)\"\n >\n <span class=\"vo-think vo-rtr-mark\" [class.vo-on]=\"running\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <span class=\"vo-sw vo-rtr-title\" [class.vo-shim]=\"running\">{{ head }}</span>\n <span class=\"vo-rtr-time vo-num vo-muted\">{{ running ? secs + 's' : '' }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\" class=\"vo-rtr-chev\"></vo-icon>\n </button>\n <div class=\"vo-fold vo-rtr-fold\" [class.vo-shut]=\"!isOpen\" [attr.inert]=\"isOpen ? null : ''\" [attr.aria-hidden]=\"!isOpen\">\n <div>\n <div class=\"vo-rtr-body\">\n @switch (tab) {\n @case ('plan') {\n @for (p of plan; track $index) {\n <div class=\"vo-rtr-li vo-enter\" [class.vo-now]=\"p.state === 'now'\" [style.animation-delay.ms]=\"$index * 50\">\n <span class=\"vo-g\">\n @if (p.state === 'done') {\n <span style=\"color:var(--vo-ok);display:grid\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n } @else if (p.state === 'now') {\n <span class=\"vo-pulse\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"vo-dot\" style=\"color:var(--vo-faint)\" aria-hidden=\"true\"></span>\n }\n </span>\n <span>{{ p.label }}<span class=\"vo-d\">{{ p.state === 'done' ? (p.detail ?? 'Done') : p.state === 'now' ? 'Working' : 'Next' }}</span></span>\n </div>\n }\n }\n @case ('notes') {\n @for (t of notes; track $index) {\n <div class=\"vo-rtr-li vo-enter\" [style.animation-delay.ms]=\"$index * 50\">\n <span class=\"vo-g\"><span class=\"vo-dot\" style=\"color:var(--vo-faint)\" aria-hidden=\"true\"></span></span>\n <span>{{ t }}</span>\n </div>\n }\n }\n @case ('sources') {\n <div class=\"vo-rtr-src vo-enter\">\n @for (s of sources; track $index) {\n <button type=\"button\" class=\"vo-fchip vo-lnk\" [attr.title]=\"s.tip ?? null\">\n @if (s.kind === 'figma') {\n <vo-icon name=\"figma\" size=\"xs\"></vo-icon>\n } @else if (s.kind === 'web') {\n <vo-icon name=\"globe\" size=\"xs\"></vo-icon>\n } @else if (s.kind) {\n <span class=\"vo-ft\" [class]=\"ftClass(s.kind)\">{{ s.kind.toUpperCase() }}</span>\n }\n {{ s.label }}\n </button>\n }\n </div>\n }\n @case ('edits') {\n @for (e of edits; track $index) {\n <div class=\"vo-enter\" [style.animation-delay.ms]=\"$index * 50\">\n <div class=\"vo-rtr-li\"><span class=\"vo-g\"><vo-icon name=\"edit\" size=\"xs\"></vo-icon></span><span>{{ e.file }}@if (e.detail) {<span class=\"vo-d\">{{ e.detail }}</span>}</span></div>\n <div class=\"vo-rtr-edit\">\n @for (l of e.removed; track $index) {<div class=\"vo-x\">{{ l }}</div>}\n @for (l of e.added; track $index) {<div class=\"vo-a\">{{ l }}</div>}\n </div>\n </div>\n }\n }\n }\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrl: './reasoning-trail.css',\n})\nexport class ReasoningTrailComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** Shimmers and counts seconds while true. */\n @Input() running = false;\n /** Seconds to show. Leave it out to let the trail count while it runs. */\n @Input() seconds?: number;\n /** Header text. Defaults to \"Reasoning\" while running and \"Reasoned for Ns\" after. */\n @Input() title?: string;\n @Input() plan?: PlanStep[];\n @Input() notes?: string[];\n @Input() sources?: Source[];\n @Input() edits?: Edit[];\n /** Which part of the trail it shows. Leave it out to start on the first one there is. */\n @Input() view?: ReasoningTrailView;\n /** Whether the trail is open. Defaults to open. */\n @Input() open?: boolean;\n /** Sits flat in a chat thread (the default). Set false to give it a card. */\n @Input() bare = true;\n\n @Output() viewChange = new EventEmitter<ReasoningTrailView>();\n @Output() openChange = new EventEmitter<boolean>();\n\n /** Internal open state when `open` is not controlled. */\n private innerOpen = true;\n /** Internal view when `view` is not controlled. */\n private innerView?: ReasoningTrailView;\n /** Counted seconds while running (used when `seconds` is undefined). */\n private counted = 0;\n private tick?: ReturnType<typeof setInterval>;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n get isOpen(): boolean {\n return this.open ?? this.innerOpen;\n }\n\n private get has(): Record<ReasoningTrailView, boolean> {\n return {\n plan: !!this.plan?.length,\n notes: !!this.notes?.length,\n sources: !!this.sources?.length,\n edits: !!this.edits?.length,\n };\n }\n\n get tab(): ReasoningTrailView {\n const picked = this.view ?? this.innerView ?? VIEWS.find((v) => this.has[v]) ?? 'plan';\n // a view with nothing in it falls back to the first one that has something\n return this.has[picked] ? picked : VIEWS.find((v) => this.has[v]) ?? picked;\n }\n\n get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get head(): string {\n if (this.title) return this.title;\n return this.running ? 'Reasoning' : `Reasoned for ${Math.max(this.secs, 1)}s`;\n }\n\n ftClass(kind: SourceKind): string {\n return FT[kind] ?? '';\n }\n\n /** Select a view. Updates the internal state when `view` is not controlled. */\n select(v: ReasoningTrailView): void {\n this.innerView = v;\n this.viewChange.emit(v);\n }\n\n toggle(): void {\n const next = !this.isOpen;\n this.innerOpen = next;\n this.openChange.emit(next);\n }\n\n // Enter and Space open and fold it as a click does\n onHeadKey(e: KeyboardEvent): void {\n if ((e.key !== 'Enter' && e.key !== ' ') || e.altKey || e.ctrlKey || e.metaKey) return;\n e.preventDefault();\n if (!e.repeat) this.toggle();\n }\n\n ngAfterViewInit(): void {\n this.startCounter();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['running'] || changes['seconds']) this.startCounter();\n }\n\n private startCounter(): void {\n const shouldCount = this.running && this.seconds === undefined && !this.reduced.reduce();\n if (shouldCount && !this.tick) {\n this.tick = setInterval(() => (this.counted += 1), 1000);\n } else if (!this.running && this.tick) {\n clearInterval(this.tick);\n this.tick = undefined;\n }\n }\n\n ngOnDestroy(): void {\n if (this.tick) clearInterval(this.tick);\n }\n}\n","// framework/angular/response-versions/response-versions.component.ts\n//\n// Native Angular port of framework/react/response-versions/ResponseVersions.tsx.\n// An answer with its earlier versions a click away, plus regenerate and copy.\n// The arrows page through the versions; a different version fades the old text\n// out first, then a finished one comes in all at once word by word, while one\n// still being written shows its words as they arrive. Inputs mirror the React\n// props; callback props become @Output EventEmitters. Reduced motion is\n// respected via the shared ReducedMotionService.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n@Component({\n selector: 'vo-response-versions',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n [class]=\"cls()\"\n [style.padding]=\"bare ? null : '16px'\"\n >\n @if (prompt) {\n <div class=\"vo-bub\">{{ prompt }}</div>\n }\n <div class=\"vo-rvx-a\">\n <p class=\"vo-msg vo-rvx-t\" [class.vo-out]=\"out\" aria-live=\"polite\">\n @for (w of words; track shown + ':' + $index) {\n <span class=\"vo-w\" [style.animation-delay]=\"jump ? $index * 12 + 'ms' : null\">{{ w }} </span>\n }\n </p>\n <div class=\"vo-rvx-bar\">\n <div class=\"vo-rvx-pg\">\n <button\n type=\"button\"\n class=\"vo-ib\"\n aria-label=\"Previous version\"\n title=\"Previous\"\n [disabled]=\"at === 0 || streaming\"\n (click)=\"go(at - 1)\"\n >\n <vo-icon name=\"chev-l\" size=\"sm\"></vo-icon>\n </button>\n <span class=\"vo-rvx-n vo-num\">{{ at + 1 }} / {{ count }}</span>\n <button\n type=\"button\"\n class=\"vo-ib\"\n aria-label=\"Next version\"\n title=\"Next\"\n [disabled]=\"at === last || streaming\"\n (click)=\"go(at + 1)\"\n >\n <vo-icon name=\"chev-r\" size=\"sm\"></vo-icon>\n </button>\n </div>\n @if (regenerateOn) {\n <button\n type=\"button\"\n class=\"vo-ib vo-rvx-re\"\n [class.vo-go]=\"spin\"\n aria-label=\"Regenerate\"\n title=\"Regenerate\"\n (click)=\"regenerate()\"\n >\n <vo-icon name=\"refresh\" size=\"sm\"></vo-icon>\n </button>\n }\n <button\n type=\"button\"\n class=\"vo-ib\"\n [class.vo-copied]=\"copied\"\n [attr.aria-label]=\"copied ? 'Copied to clipboard' : 'Copy'\"\n [attr.title]=\"copied ? 'Copied to clipboard' : 'Copy'\"\n (click)=\"copy()\"\n >\n <vo-icon [name]=\"copied ? 'check' : 'copy'\" size=\"sm\"></vo-icon>\n </button>\n <span class=\"vo-rvx-st vo-muted\" [class.vo-shim]=\"streaming && !!status\">{{ status }}</span>\n </div>\n </div>\n </div>\n `,\n styleUrl: './response-versions.css',\n})\nexport class ResponseVersionsComponent implements OnChanges, OnDestroy {\n /** The person's message the answer replies to, shown as a bubble above it. */\n @Input() prompt?: string;\n /** Every version of the answer so far, oldest first. */\n @Input() versions: string[] = [];\n /** Which version is showing. Leave it out to let the arrows page through them. */\n @Input() version?: number;\n @Input() defaultVersion = 0;\n /** The version showing is still being written. New words fade in as they arrive and paging waits. */\n @Input() streaming = false;\n /** Quiet text beside the buttons, like \"Writing a new version\". It shimmers while streaming. */\n @Input() status = '';\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n @Input() className = '';\n /** Whether a regenerate button is shown (set when a listener is attached). */\n @Input() regenerateEnabled = true;\n\n @Output() versionChange = new EventEmitter<number>();\n /** Called by the regenerate button. Add a version and show it to answer it. */\n @Output() regenerateClick = new EventEmitter<void>();\n /** Called with the text after it is copied to the clipboard. */\n @Output() copyText = new EventEmitter<string>();\n\n private cur = 0;\n /** The version whose words are rendered now (lags `at` while the old text fades). */\n shown = 0;\n out = false;\n jump = false;\n spin = false;\n copied = false;\n\n private controlled = false;\n private outTimer?: ReturnType<typeof setTimeout>;\n private spinTimer?: ReturnType<typeof setTimeout>;\n private copyTimer?: ReturnType<typeof setTimeout>;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n get regenerateOn(): boolean {\n return this.regenerateEnabled;\n }\n\n get last(): number {\n return Math.max(0, this.versions.length - 1);\n }\n\n get count(): number {\n return Math.max(this.versions.length, 1);\n }\n\n /** The clamped index actually on show. */\n get at(): number {\n return Math.min(Math.max(this.cur, 0), this.last);\n }\n\n get words(): string[] {\n return (this.versions[this.shown] ?? '').split(' ').filter(Boolean);\n }\n\n cls(): string {\n const parts = ['vo-rvx'];\n if (!this.bare) parts.push('vo-panel');\n if (this.className) parts.push(this.className);\n return parts.join(' ');\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['version']) {\n this.controlled = this.version !== undefined;\n if (this.version !== undefined) this.cur = this.version;\n }\n if (changes['defaultVersion'] && !this.controlled && this.version === undefined) {\n this.cur = this.defaultVersion;\n }\n // a different version fades the old text out first\n if (this.at !== this.shown) this.transition();\n }\n\n private transition(): void {\n const target = this.at;\n this.out = true;\n if (this.outTimer) clearTimeout(this.outTimer);\n this.outTimer = setTimeout(\n () => {\n this.shown = target;\n this.jump = !this.streaming;\n this.out = false;\n },\n this.reduced.reduce() ? 0 : 240,\n );\n }\n\n go(i: number): void {\n const next = Math.min(Math.max(i, 0), this.last);\n if (!this.controlled) this.cur = next;\n this.versionChange.emit(next);\n if (this.controlled && this.at !== this.shown) this.transition();\n }\n\n regenerate(): void {\n if (this.streaming) return;\n this.spin = true;\n if (this.spinTimer) clearTimeout(this.spinTimer);\n this.spinTimer = setTimeout(() => (this.spin = false), this.reduced.reduce() ? 0 : 700);\n this.regenerateClick.emit();\n }\n\n copy(): void {\n const t = this.versions[this.at] ?? '';\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n void navigator.clipboard.writeText(t).catch(() => undefined);\n }\n this.copyText.emit(t);\n this.copied = true;\n if (this.copyTimer) clearTimeout(this.copyTimer);\n this.copyTimer = setTimeout(() => (this.copied = false), this.reduced.reduce() ? 0 : 1400);\n }\n\n ngOnDestroy(): void {\n if (this.outTimer) clearTimeout(this.outTimer);\n if (this.spinTimer) clearTimeout(this.spinTimer);\n if (this.copyTimer) clearTimeout(this.copyTimer);\n }\n}\n","// framework/angular/rewrite-toolbar/rewrite-toolbar.component.ts\n//\n// Native Angular port of framework/react/rewrite-toolbar/RewriteToolbar.tsx.\n// Click a sentence and a small toolbar offers rewrites; the new text is written\n// in beside the old one, word by word, to accept or undo. The toolbar sits above\n// the sentence's first line, or under its last when above would cover the header.\n// Inputs mirror the React props; React callbacks become @Output() EventEmitters,\n// and the React ref handle (rewrite/accept/undo) becomes public methods so a\n// shortcut, command menu or scripted demo can drive it.\n//\n// Icon note: the React source ends the toolbar with a `wand` glyph for \"Ask the\n// agent\". The Angular core icon set has no `wand`; `spark` is the closest magic\n// glyph and is used here (it is also the first action's icon). The checkmark on\n// the \"Rewritten\" label uses `check`.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A button in the toolbar, like Clearer or Shorter. */\nexport interface RewriteAction {\n key: string;\n label: string;\n icon?: VoIconName;\n}\n\nconst ACTIONS: RewriteAction[] = [\n { key: 'clear', label: 'Clearer', icon: 'spark' },\n { key: 'short', label: 'Shorter' },\n { key: 'warm', label: 'Friendlier' },\n];\n\n/** The phase the toolbar shows: the menu of rewrites, the working label, or the review controls. */\ntype View = 'menu' | 'working' | 'review';\n\n@Component({\n selector: 'vo-rewrite-toolbar',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" #root class=\"vo-rwx vo-panel\">\n <div #head class=\"vo-rwx-h\">\n <span class=\"vo-ft\">{{ kind }}</span>\n <span>{{ title }}</span>\n <span class=\"vo-muted vo-rwx-st vo-sw\" [class.vo-out]=\"statusOut\">{{ shownStatus }}</span>\n </div>\n <div class=\"vo-rwx-doc\">\n @for (s of text; track $index; let i = $index) {\n @if (i > 0) {<span> </span>}<span\n #span\n class=\"vo-rwx-s\"\n [class.vo-sel]=\"sel === i\"\n (click)=\"pick(i, $event)\"\n >@if (job && job.index === i) {<del>{{ job.old }}</del> <ins>@for (w of job.words; track $index; let k = $index) {<span class=\"vo-w\" [class.vo-on]=\"k < job.shown\">{{ w }} </span>}</ins>} @else {{{ s }}}</span\n >\n }\n </div>\n <div\n #bar\n class=\"vo-rwx-tb\"\n [class.vo-show]=\"sel !== null\"\n [class.vo-act]=\"view !== 'menu'\"\n role=\"toolbar\"\n aria-label=\"Rewrite\"\n [attr.inert]=\"sel === null ? '' : null\"\n [style.left.px]=\"at.left\"\n [style.top.px]=\"at.top\"\n >\n @switch (view) {\n @case ('menu') {\n @for (a of actions; track a.key) {\n <button type=\"button\" class=\"vo-rwx-b\" (click)=\"rewrite(a.key)\">\n @if (a.icon) {<vo-icon [name]=\"a.icon\" size=\"xs\"></vo-icon>}{{ a.label }}\n </button>\n }\n <span class=\"vo-rwx-sep\"></span>\n <button\n type=\"button\"\n class=\"vo-rwx-b vo-ic\"\n [attr.aria-label]=\"askLabel\"\n [attr.data-tip]=\"askLabel\"\n [attr.data-tip-k]=\"askShortcut\"\n (click)=\"ask()\"\n >\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>\n </button>\n }\n @case ('working') {\n <span class=\"vo-lbl\"\n ><span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span\n >Rewriting</span\n >\n }\n @case ('review') {\n <span class=\"vo-lbl\"><vo-icon name=\"check\" size=\"xs\"></vo-icon>Rewritten</span>\n <button type=\"button\" class=\"vo-rwx-b vo-rwx-un\" (click)=\"finish(false)\">Undo</button>\n <button type=\"button\" class=\"vo-pill vo-accent vo-sm vo-rwx-ok\" (click)=\"finish(true)\">\n Accept\n </button>\n }\n }\n </div>\n </div>\n `,\n styleUrl: './rewrite-toolbar.css',\n})\nexport class RewriteToolbarComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The document's name. */\n @Input() title = '';\n /** The file type tag in front of the name. Defaults to DOC. */\n @Input() kind = 'DOC';\n /** The text, one sentence each, so a click picks a sentence. */\n @Input() sentences: string[] = [];\n /** Index of the sentence with the toolbar on it, or null. */\n @Input() selected: number | null = null;\n /** Defaults to Clearer, Shorter and Friendlier. */\n @Input() actions: RewriteAction[] = ACTIONS;\n /**\n * Writes the new sentence. While it works the toolbar says Rewriting; the answer is then\n * written in word by word. Return a Promise or a string; if it rejects, the sentence is left\n * as it was. Leave it out to echo the old sentence.\n */\n @Input() onRewrite?: (sentence: string, action: string, index: number) => Promise<string> | string;\n /** The tip on the wand. */\n @Input() askLabel = 'Ask the agent';\n /** The shortcut shown in that tip. */\n @Input() askShortcut = '⌘K';\n\n /** Emitted with every sentence once a rewrite is accepted. */\n @Output() sentencesChange = new EventEmitter<string[]>();\n /** Emitted when the selected sentence changes (a click, a dismiss or after a finish). */\n @Output() selectedChange = new EventEmitter<number | null>();\n /** Emitted by the wand when no onRewrite-free ask is wanted; falls back to the first action. */\n @Output() ask$ = new EventEmitter<{ sentence: string; index: number }>();\n\n @ViewChild('root') root!: ElementRef<HTMLDivElement>;\n @ViewChild('head') head!: ElementRef<HTMLDivElement>;\n @ViewChild('bar') bar!: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** The working copy of the sentences. */\n text: string[] = [];\n /** The selected sentence's index, or null. */\n sel: number | null = null;\n /** The rewrite in flight: its index, the old text, the streamed words and how many are shown. */\n job: { index: number; old: string; words: string[]; shown: number } | null = null;\n status = 'Click a sentence';\n shownStatus = 'Click a sentence';\n statusOut = false;\n at: { left: number; top: number } = { left: 0, top: 0 };\n\n private ready = false;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private readonly onDown = (e: PointerEvent) => {\n // a click anywhere else puts the toolbar away, unless a rewrite is waiting on an answer\n if (!this.busy && !this.root?.nativeElement.contains(e.target as Node)) this.select(null);\n };\n\n get busy(): boolean {\n return this.job !== null;\n }\n\n get view(): View {\n if (!this.job) return 'menu';\n return this.job.shown > this.job.words.length ? 'review' : 'working';\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['sentences']) this.text = [...this.sentences];\n if (changes['selected'] && this.selected !== this.sel) {\n this.sel = this.selected;\n if (this.sel !== null && !this.busy) this.setStatus('Pick a rewrite');\n this.schedulePlace();\n }\n }\n\n ngAfterViewInit(): void {\n this.ready = true;\n document.addEventListener('pointerdown', this.onDown);\n this.schedulePlace();\n }\n\n /** Picks a sentence as a click on it does. */\n pick(i: number, e?: Event): void {\n e?.stopPropagation();\n if (this.busy || this.job?.index === i) return;\n this.select(i);\n this.setStatus('Pick a rewrite');\n }\n\n private select(i: number | null): void {\n if (this.sel === i) return;\n this.sel = i;\n this.selectedChange.emit(i);\n if (i === null) this.setStatus('Click a sentence');\n this.schedulePlace();\n }\n\n /** Rewrites the selected sentence with one of the actions, as a click on that action does. */\n async rewrite(action: string): Promise<void> {\n if (this.sel === null || this.busy) return;\n const index = this.sel;\n const old = this.text[index];\n this.job = { index, old, words: [], shown: 0 };\n this.schedulePlace();\n let out: string;\n try {\n out = await (this.onRewrite ? this.onRewrite(old, action, index) : old);\n } catch {\n // if the rewrite fails, the sentence goes back as it was and the toolbar offers the rewrites again\n this.job = null;\n return;\n }\n if (!this.job || this.job.index !== index) return;\n this.job = { ...this.job, words: out.split(' ') };\n this.schedulePlace();\n this.stream();\n }\n\n /** The wand: asks the agent, or rewrites with the first action when nobody listens. */\n ask(): void {\n if (this.sel === null) return;\n if (this.ask$.observed) this.ask$.emit({ sentence: this.text[this.sel], index: this.sel });\n else void this.rewrite(this.actions[0].key);\n }\n\n /** Keeps (accept) or drops (undo) the rewrite that is waiting for review. */\n finish(keep: boolean): void {\n const job = this.job;\n if (!job || job.shown <= job.words.length) return;\n if (keep) {\n this.text = this.text.map((s, i) => (i === job.index ? job.words.join(' ') : s));\n this.sentencesChange.emit(this.text);\n }\n this.job = null;\n this.select(null);\n this.setStatus(keep ? 'Saved' : 'Click a sentence');\n }\n\n /** Keeps the rewrite that is waiting for review (ref-handle equivalent). */\n accept(): void {\n this.finish(true);\n }\n /** Puts the sentence back as it was (ref-handle equivalent). */\n undo(): void {\n this.finish(false);\n }\n\n // the answer is written in a word at a time; reduced motion drops it all in at once\n private stream(): void {\n const step = () => {\n const job = this.job;\n if (!job || job.shown > job.words.length) return;\n const t = setTimeout(\n () => {\n this.timers.delete(t);\n if (!this.job) return;\n this.job = {\n ...this.job,\n shown: this.motion.reduce() ? this.job.words.length + 1 : this.job.shown + 1,\n };\n this.schedulePlace();\n step();\n },\n job.shown === 0 ? 0 : 55,\n );\n this.timers.add(t);\n };\n step();\n }\n\n private setStatus(next: string): void {\n if (next === this.status) return;\n this.status = next;\n // crossfade the status line, as the Swap helper does on the site\n if (this.motion.reduce()) {\n this.shownStatus = next;\n return;\n }\n this.statusOut = true;\n const t = setTimeout(() => {\n this.timers.delete(t);\n this.shownStatus = next;\n this.statusOut = false;\n }, 200);\n this.timers.add(t);\n }\n\n // place after the view settles, so the toolbar and the new sentence are measured\n private schedulePlace(): void {\n if (!this.ready) return;\n requestAnimationFrame(() => this.place());\n }\n\n private place(): void {\n const box = this.root?.nativeElement;\n const tb = this.bar?.nativeElement;\n if (!box || !tb || this.sel === null) return;\n const spans = box.querySelectorAll<HTMLElement>('.vo-rwx-s');\n const el = spans[this.sel];\n if (!el) return;\n const br = box.getBoundingClientRect();\n const rects = el.getClientRects();\n const f = rects[0];\n if (!f) return;\n const left = Math.max(8, Math.min(f.left - br.left, br.width - tb.offsetWidth - 8));\n let top = f.top - br.top - tb.offsetHeight - 8;\n const headBottom = this.head?.nativeElement\n ? this.head.nativeElement.getBoundingClientRect().bottom - br.top\n : 4;\n // above the sentence, unless that would cover the header: then under its last line\n if (top < headBottom) top = rects[rects.length - 1].bottom - br.top + 8;\n this.at = { left, top };\n }\n\n ngOnDestroy(): void {\n document.removeEventListener('pointerdown', this.onDown);\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/rich-text-editor/rich-text-editor.component.ts\n//\n// Native Angular port of framework/react/rich-text-editor/RichTextEditor.tsx\n// (engine from framework/vanilla/rich-text-editor/rich-text-editor.js).\n//\n// A minimal editor for a draft an agent helps with: a formatting toolbar, a\n// native contenteditable body, and a quiet foot with the word count and undo.\n// Select text and press Ask AI (or Mod+J, or type / on a new line), and a\n// suggestion streams in beside the text — the old words struck through, the new\n// ones arriving word by word — to accept with Tab/Enter or discard with Escape.\n//\n// The editing engine is ported verbatim from the React `createEngine` into the\n// `RteEngine` class below; the component drives a native contenteditable div via\n// @ViewChild/ElementRef exactly as the React code drives its `ed` ref. Setup in\n// ngAfterViewInit, cleanup in ngOnDestroy. Reduced motion via ReducedMotionService.\n//\n// Icon substitutions (the shared Angular icon set has no heading/bold/italic/\n// code/link/list/quote/wand glyphs, so the closest available are used):\n// heading -> file-text bold -> edit italic -> pr code -> term\n// link -> ext bulleted list -> more numbered list -> more\n// quote -> comment wand (Improve) -> spark\n// The remaining icons (spark, minus, check, edit, undo, redo, trash) map 1:1.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A formatting command, as the toolbar and the shortcuts apply it. `p` turns lines back into plain paragraphs */\nexport type RichTextFormat = 'h2' | 'b' | 'i' | 'code' | 'ul' | 'ol' | 'quote' | 'p';\n\n/** An item in the AI menu */\nexport interface RichTextAiAction {\n key: string;\n label: string;\n icon?: VoIconName;\n /** `swap` (the default) replaces the selection or the caret's paragraph; `add` writes on after it */\n kind?: 'swap' | 'add';\n}\n\n/** What the AI is asked to do. `text` is what it acts on (empty for an `add`), `before`/`after` the text around it */\nexport interface RichTextAiRequest {\n action: string;\n text: string;\n before: string;\n after: string;\n document: string;\n signal: AbortSignal;\n}\n\n/** Writes a suggestion: a string, a promise of one, or an async iterable of chunks to stream it in */\nexport type RichTextAi = (request: RichTextAiRequest) => AsyncIterable<string> | Promise<string> | string;\n\n/** The result reported when a suggestion is accepted or discarded */\nexport interface RichTextSuggestionResult {\n action: string;\n text: string;\n accepted: boolean;\n}\n\ntype Range2 = { s: number; e: number };\ntype Line = { t: string; frag: DocumentFragment; len: number };\n\nconst LEAF = 'p,h2,blockquote,li';\nconst BLOCK = /^(P|DIV|H[1-6]|LI|BLOCKQUOTE|PRE|TR|DT|DD|SECTION|ARTICLE|HEADER|FOOTER|ASIDE|MAIN|NAV|FIGURE|FIGCAPTION|UL|OL|DL|TABLE|TBODY|THEAD|TFOOT|ADDRESS|HR)$/;\nconst SKIP = /^(SCRIPT|STYLE|TEMPLATE|HEAD|META|LINK|TITLE|IFRAME|OBJECT|EMBED|SVG|MATH|IMG|PICTURE|VIDEO|AUDIO|CANVAS|NOSCRIPT|BUTTON|INPUT|SELECT|TEXTAREA|OPTION)$/;\nconst isMac = () => typeof navigator !== 'undefined' && /Mac|iP(hone|ad|od)/.test(navigator.platform || navigator.userAgent);\nconst safeUrl = (h: string | null) => { const v = (h || '').trim(); return /^(https?:\\/\\/|mailto:)/i.test(v) ? v : null; };\n\ninterface Hooks { change?: () => void; select?: () => void; input?: (e: InputEvent) => void; key?: (e: KeyboardEvent) => boolean }\n\n/* ---------- the editing engine ----------\n The text is a list of lines (paragraphs, a heading, list items and quote lines) holding bold, italic, inline code and links,\n and every change goes through it: Enter, Backspace at a line's start, formats, paste and drop, so pasted or browser-made\n markup is cleaned into those few tags. Undo and redo step through its own history. A selection is kept as two numbers, the\n characters before each end with a line break counting one, so it survives every rebuild, and the editor works the same with\n or without the focus (a story types into it without taking the focus from the page). Ported verbatim from the React engine. */\nclass RteEngine {\n private readonly ed: HTMLElement;\n private readonly hook: Hooks;\n private offs: (() => void)[] = [];\n private caret: Range2 | null = null;\n private pend: { at: number; m: Record<string, boolean> } | null = null;\n private rev: { o: Range2; kind: 'swap' | 'add'; olds: HTMLElement[]; nw: HTMLElement } | null = null;\n private H = { list: [] as { html: string; sel: Range2; pre: Range2 | null }[], at: 0, dirty: false, pre: null as Range2 | null, t: 0 as ReturnType<typeof setTimeout> | 0 };\n\n constructor(ed: HTMLElement, hook: Hooks) {\n this.ed = ed; this.hook = hook;\n const on = <K extends keyof HTMLElementEventMap>(el: HTMLElement | Document, ev: K | string, fn: (e: HTMLElementEventMap[K]) => void) => { el.addEventListener(ev, fn as EventListener); this.offs.push(() => el.removeEventListener(ev, fn as EventListener)); };\n\n on(ed, 'beforeinput', (e: InputEvent) => this.onBeforeInput(e));\n on(ed, 'input', ((e: InputEvent) => { if (this.rev) return; if (this.messy()) this.clean(); this.typed(this.H.pre); this.hook.input?.(e); }) as (e: Event) => void);\n on(ed, 'paste', (e: ClipboardEvent) => {\n e.preventDefault(); if (this.rev || !e.clipboardData) return;\n const h = e.clipboardData.getData('text/html'), s = e.clipboardData.getData('text/plain');\n let items = h ? this.parse(new DOMParser().parseFromString(h, 'text/html').body, false) : [];\n if (!items.length) items = this.plain(s); if (!items.length) return;\n this.flush(); const o = this.get(), at = this.insertLines(items, o); this.set({ s: at, e: at }); this.commit(o);\n });\n on(ed, 'cut', (e: ClipboardEvent) => {\n e.preventDefault(); if (this.rev || !e.clipboardData) return; const o = this.get(); if (o.s === o.e) return;\n const g = this.live(); e.clipboardData.setData('text/plain', this.text(o)); if (g) { const d = document.createElement('div'); d.appendChild(g.cloneContents()); e.clipboardData.setData('text/html', d.innerHTML); }\n this.flush(); const p = this.del(o); this.set(p); this.commit(o);\n });\n on(ed, 'dragstart', (e: DragEvent) => e.preventDefault());\n on(ed, 'drop', (e: DragEvent) => this.onDrop(e));\n on(ed, 'keydown', (e: KeyboardEvent) => this.onKeyDown(e));\n on(document, 'selectionchange', () => {\n if (!this.live() || this.rev) return;\n this.caret = this.get(); if (this.pend && (this.caret.s !== this.pend.at || this.caret.e !== this.pend.at)) this.pend = null;\n this.hook.select?.();\n });\n\n this.tidy(); this.H.list = [{ html: ed.innerHTML, sel: { s: 0, e: 0 }, pre: null }];\n }\n\n // ---- lines and offsets ----\n private lines() { return [...this.ed.querySelectorAll<HTMLElement>(LEAF)]; }\n typeOf(b: Element): string { return b.tagName === 'LI' ? (b.parentNode as Element).tagName.toLowerCase() : b.tagName === 'BLOCKQUOTE' ? 'quote' : b.tagName.toLowerCase(); }\n private lineOf(n: Node | null): HTMLElement | null { for (let x = n; x && x !== this.ed; x = x.parentNode) if (x.nodeType === 1 && (x as Element).matches(LEAF)) return x as HTMLElement; return null; }\n private len(b: Node) { return (b.textContent || '').length; }\n total() { return this.lines().reduce((n, b, i) => n + this.len(b) + (i ? 1 : 0), 0); }\n private startOf(i: number) { return this.lines().slice(0, i).reduce((n, b) => n + this.len(b) + 1, 0); }\n private lineAt(at: number) { const all = this.lines(); let n = 0; for (let i = 0; i < all.length; i++) { if (at <= n + this.len(all[i])) return i; n += this.len(all[i]) + 1; } return all.length - 1; }\n text(o: Range2) { return this.lines().map(b => b.textContent).join('\\n').slice(o.s, o.e); }\n private up(n: Node | null, tag: string): Element | null { for (let x = n && n.nodeType === 3 ? n.parentNode : n; x && x !== this.ed && x.nodeType === 1 && !(x as Element).matches(LEAF); x = x.parentNode) if ((x as Element).tagName === tag) return x as Element; return null; }\n private wrap(n: Node, tag: string, href?: string | null) { const w = document.createElement(tag.toLowerCase()); if (href) w.setAttribute('href', href); (n as ChildNode).replaceWith(w); w.appendChild(n); return w; }\n private unwrap(el: Element) { el.replaceWith(...el.childNodes); }\n\n private offsetOf(node: Node, off: number): number {\n let b = this.lineOf(node);\n if (!b) {\n if (!this.ed.contains(node)) return 0;\n const after = node.childNodes[off], first = after && after.nodeType === 1 ? ((after as Element).matches(LEAF) ? after as HTMLElement : (after as Element).querySelector<HTMLElement>(LEAF)) : null;\n if (!first) return this.total();\n b = first; node = first; off = 0;\n }\n let n = 0; for (const x of this.lines()) { if (x === b) break; n += this.len(x) + 1; }\n const rg = document.createRange(); rg.setStart(b, 0); rg.setEnd(node, off);\n return n + rg.toString().length;\n }\n private pointAt(at: number, late = false): [Node, number] {\n const all = this.lines(); let n = Math.max(0, at);\n for (let i = 0; i < all.length; i++) {\n const b = all[i];\n if (n <= this.len(b) || i === all.length - 1) {\n n = Math.min(n, this.len(b));\n const w = document.createTreeWalker(b, NodeFilter.SHOW_TEXT); let t: Text | null, last: Text | null = null;\n while ((t = w.nextNode() as Text | null)) { if (late ? n < t.data.length : n <= t.data.length) return [t, n]; n -= t.data.length; last = t; }\n return last ? [last, last.data.length] : [b, 0];\n }\n n -= this.len(b) + 1;\n }\n return [this.ed, 0];\n }\n range(o: Range2) { const [a, ao] = this.pointAt(o.s, o.s !== o.e), [b, bo] = this.pointAt(o.e); const rg = document.createRange(); rg.setStart(a, ao); rg.setEnd(b, bo); return rg; }\n private showRange(x: Element | Range) {\n const r = x.getBoundingClientRect(), b = this.ed.getBoundingClientRect(); if (!r.height) return;\n if (r.bottom > b.bottom - 12) this.ed.scrollTop += Math.min(r.bottom - b.bottom + 12, r.top - b.top - 12);\n else if (r.top < b.top + 12) this.ed.scrollTop -= b.top + 12 - r.top;\n }\n\n // ---- selection ----\n private live() { const s = getSelection(); if (!s || !s.rangeCount) return null; const g = s.getRangeAt(0); return this.ed.contains(g.startContainer) && this.ed.contains(g.endContainer) ? g : null; }\n get(): Range2 {\n const g = this.live();\n if (g) { const a = this.offsetOf(g.startContainer, g.startOffset), b = this.offsetOf(g.endContainer, g.endOffset); return { s: Math.min(a, b), e: Math.max(a, b) }; }\n if (!this.caret) { const t = this.total(); this.caret = { s: t, e: t }; }\n return { s: this.caret.s, e: this.caret.e };\n }\n set(o: Range2, focus = false) {\n this.caret = { s: o.s, e: o.e };\n if (focus && document.activeElement !== this.ed) this.ed.focus({ preventScroll: true });\n if (document.activeElement !== this.ed) return;\n const s = getSelection(); if (!s) return; s.removeAllRanges(); s.addRange(this.range(o));\n }\n\n // ---- tidying ----\n private tidy() {\n for (const el of this.ed.querySelectorAll('b,i,code,a')) {\n if (!el.isConnected) continue;\n if (!el.textContent) { el.remove(); continue; }\n if (this.up(el.parentNode, el.tagName)) this.unwrap(el);\n }\n for (const el of this.ed.querySelectorAll('b,i,code,a')) {\n if (!el.isConnected) continue;\n for (;;) {\n let nx = el.nextSibling;\n while (nx && nx.nodeType === 3 && !(nx as Text).data) { const d = nx; nx = nx.nextSibling; d.remove(); }\n if (!nx || nx.nodeType !== 1 || (nx as Element).tagName !== el.tagName || (nx as Element).getAttribute('href') !== el.getAttribute('href')) break;\n el.append(...nx.childNodes); nx.remove();\n }\n }\n for (const b of this.lines()) { const br = [...b.querySelectorAll('br')]; if (b.textContent) br.forEach(x => x.remove()); else if (!br.length) b.appendChild(document.createElement('br')); else br.slice(1).forEach(x => x.remove()); }\n if (!this.lines().length) { const p = document.createElement('p'); p.appendChild(document.createElement('br')); this.ed.replaceChildren(p); }\n this.ed.normalize();\n }\n private rebuild(spec: [string, Node][]) {\n const frag = document.createDocumentFragment(); let list: HTMLElement | null = null;\n for (const [t, b] of spec) {\n const el = document.createElement(t === 'quote' ? 'blockquote' : t === 'ul' || t === 'ol' ? 'li' : t);\n el.append(...b.childNodes);\n if (t === 'ul' || t === 'ol') { if (!list || list.tagName.toLowerCase() !== t) frag.appendChild(list = document.createElement(t)); list.appendChild(el); }\n else { list = null; frag.appendChild(el); }\n }\n this.ed.replaceChildren(frag); this.tidy();\n }\n private specOf(): [string, Node][] { return this.lines().map(b => [this.typeOf(b), b]); }\n private messy() {\n for (const n of this.ed.childNodes) {\n if (n.nodeType === 3 ? (n as Text).data.trim() : n.nodeType === 1 && !/^(P|H2|BLOCKQUOTE|UL|OL)$/.test((n as Element).tagName)) return true;\n if (n.nodeType === 1 && /^(UL|OL)$/.test((n as Element).tagName) && [...n.childNodes].some(x => x.nodeType !== 1 || (x as Element).tagName !== 'LI')) return true;\n }\n return !!this.ed.querySelector('[style],[class],span,font,div,a:not([href]),:is(p,h2,blockquote,li) :not(b,i,code,a,br)');\n }\n\n // ---- parse ----\n private parse(root: Node, keep: boolean): Line[] {\n const out: { t: string; frag: DocumentFragment }[] = []; let cur: { t: string; frag: DocumentFragment } | null = null;\n const walk = (node: Node, t: string, pre: boolean, marks: [string, string?][]) => {\n for (const n of node.childNodes) {\n if (n.nodeType === 3) {\n const d = (n as Text).data;\n let s = keep ? d : pre ? d.replace(/\\r\\n?/g, '\\n') : d.replace(/[\\s ]+/g, ' ');\n if (!keep) s = s.replace(/ /g, ' ');\n if (!cur && !s.trim() && (node === root || /^(UL|OL|DL|TABLE|TBODY|THEAD|TFOOT|TR)$/.test((node as Element).tagName))) continue;\n (pre && !keep ? s.split('\\n') : [s]).forEach((p, i) => {\n if (i) cur = null;\n if (!p || (!cur && !keep && !p.trim())) return;\n if (!cur) out.push(cur = { t, frag: document.createDocumentFragment() });\n let x: Node = document.createTextNode(p);\n for (let m = marks.length - 1; m >= 0; m--) { const w = document.createElement(marks[m][0].toLowerCase()); if (marks[m][1]) w.setAttribute('href', marks[m][1]!); w.appendChild(x); x = w; }\n cur.frag.appendChild(x);\n });\n continue;\n }\n if (n.nodeType !== 1) continue;\n const el = n as Element, tg = el.tagName;\n if (SKIP.test(tg) || el.classList.contains('vo-rte-new')) continue;\n const css = (el.getAttribute('style') || '').toLowerCase();\n if (tg === 'BR') { cur = null; continue; }\n if (BLOCK.test(tg)) {\n const nt = /^H[1-6]$/.test(tg) ? 'h2' : tg === 'LI' ? (el.parentElement && el.parentElement.tagName === 'OL' ? 'ol' : 'ul') : tg === 'BLOCKQUOTE' ? 'quote' : t;\n cur = null; const was = out.length;\n walk(el, nt, pre || tg === 'PRE', marks);\n if (keep && out.length === was && !el.querySelector('p,div,h1,h2,h3,h4,h5,h6,li,blockquote,pre,ul,ol')) out.push({ t: nt, frag: document.createDocumentFragment() });\n cur = null; continue;\n }\n let m = marks; const add = (tag: string, href?: string) => { if (!m.some(x => x[0] === tag)) m = [...m, [tag, href]]; };\n if (tg === 'B' || tg === 'STRONG' ? !/font-weight\\s*:\\s*(normal|[1-4]00)/.test(css) : /font-weight\\s*:\\s*(bold|[6-9]00)/.test(css)) add('B');\n if (tg === 'I' || tg === 'EM' || /font-style\\s*:\\s*italic/.test(css)) add('I');\n if (/^(CODE|KBD|SAMP|TT)$/.test(tg)) add('CODE');\n if (tg === 'A') { const h = safeUrl(el.getAttribute('href')); if (h) add('A', h); }\n walk(el, t, pre, m);\n }\n };\n walk(root, 'p', false, []);\n if (!keep) for (const x of out) {\n const ts: Text[] = [], w = document.createTreeWalker(x.frag, NodeFilter.SHOW_TEXT); let t: Text | null; while ((t = w.nextNode() as Text | null)) ts.push(t);\n if (ts.length) { ts[0].data = ts[0].data.replace(/^\\s+/, ''); ts[ts.length - 1].data = ts[ts.length - 1].data.replace(/\\s+$/, ''); }\n }\n return out.filter(x => keep || x.frag.textContent).map(x => ({ ...x, len: (x.frag.textContent || '').length }));\n }\n private plain(s: string): Line[] { return s.replace(/\\r\\n?/g, '\\n').split('\\n').filter(l => l.trim()).map(l => { const frag = document.createDocumentFragment(); frag.append(l); return { t: 'p', frag, len: l.length }; }); }\n private clean() { const o = this.get(); this.rebuild(this.parse(this.ed, true).map(x => [x.t, x.frag])); this.set(o); }\n\n // ---- history ----\n private changed() { this.hook.change?.(); }\n private commit(pre?: Range2) {\n clearTimeout(this.H.t); const html = this.ed.innerHTML, top = this.H.list[this.H.at], before = this.H.pre || pre || null;\n this.H.dirty = false; this.H.pre = null;\n if (!top || top.html !== html) { this.H.list.splice(this.H.at + 1); this.H.list.push({ html, sel: this.get(), pre: before }); if (this.H.list.length > 300) this.H.list.shift(); this.H.at = this.H.list.length - 1; }\n this.changed();\n }\n flush() { if (this.H.dirty) this.commit(); }\n private typed(pre?: Range2 | null) { if (!this.H.dirty) { this.H.pre = pre || null; this.H.list.splice(this.H.at + 1); } this.H.dirty = true; clearTimeout(this.H.t); this.H.t = setTimeout(() => this.commit(), 700); this.changed(); }\n private restore(html: string, sel: Range2 | null) { this.ed.innerHTML = html; this.pend = null; this.set(sel || { s: 0, e: 0 }); this.changed(); }\n undo() { this.flush(); if (this.H.at <= 0) return; const cur = this.H.list[this.H.at]; this.H.at--; this.restore(this.H.list[this.H.at].html, cur.pre || this.H.list[this.H.at].sel); }\n redo() { this.flush(); if (this.H.at >= this.H.list.length - 1) return; this.H.at++; this.restore(this.H.list[this.H.at].html, this.H.list[this.H.at].sel); }\n load(html: string) {\n const t = document.createElement('template'); t.innerHTML = html || '';\n this.rebuild(this.parse(t.content, false).map(x => [x.t, x.frag])); this.caret = null; this.pend = null; this.rev = null;\n this.H.list = [{ html: this.ed.innerHTML, sel: { s: 0, e: 0 }, pre: null }]; this.H.at = 0; this.H.dirty = false; clearTimeout(this.H.t); this.changed();\n }\n\n // ---- edits ----\n private texts() { const out: [Text, number][] = []; let n = 0; this.lines().forEach((b, i) => { if (i) n++; const w = document.createTreeWalker(b, NodeFilter.SHOW_TEXT); let t: Text | null; while ((t = w.nextNode() as Text | null)) { out.push([t, n]); n += t.data.length; } }); return out; }\n private cut(at: number) { for (const [t, n] of this.texts()) if (at > n && at < n + t.data.length) { t.splitText(at - n); return; } }\n private covered(o: Range2) { this.cut(o.e); this.cut(o.s); return this.texts().filter(([t, n]) => t.data.length && n >= o.s && n + t.data.length <= o.e).map(x => x[0]); }\n private has(tag: string, o: Range2) {\n if (o.s === o.e) {\n if (this.pend && this.pend.at === o.s && tag in this.pend.m) return this.pend.m[tag];\n const g = this.live(); return !!this.up(g && g.collapsed ? g.startContainer : this.pointAt(o.s)[0], tag);\n }\n const ts = this.texts().filter(([t, n]) => t.data.length && n < o.e && n + t.data.length > o.s);\n return ts.length > 0 && ts.every(([t]) => this.up(t, tag));\n }\n inline(tag: string, href?: string | null, o = this.get()) {\n if (o.s === o.e) {\n if (tag === 'A') return;\n if (!this.pend || this.pend.at !== o.s) this.pend = { at: o.s, m: {} };\n this.pend.m[tag] = !this.has(tag, o); this.changed(); return;\n }\n this.flush();\n const ts = this.covered(o); if (!ts.length) return;\n const add = href !== undefined ? href !== null : !ts.every(t => this.up(t, tag));\n if (add) ts.forEach(t => { const had = this.up(t, tag); if (!had) this.wrap(t, tag, href); else if (href) had.setAttribute('href', href); });\n else new Set(ts.map(t => this.up(t, tag))).forEach(el => {\n if (!el) return;\n const keep: Text[] = [], w = document.createTreeWalker(el, NodeFilter.SHOW_TEXT), h = el.getAttribute('href'); let t: Text | null;\n while ((t = w.nextNode() as Text | null)) if (!ts.includes(t)) keep.push(t);\n this.unwrap(el); keep.forEach(x => this.wrap(x, tag, h));\n });\n this.tidy(); this.set(o); this.commit(o);\n }\n private typeStyled(s: string) {\n const o = this.get(), m = this.pend!.m; this.pend = null;\n const g = this.live(), [n, k] = g && g.collapsed ? [g.startContainer, g.startOffset] as [Node, number] : this.pointAt(o.s);\n const rg = document.createRange(); rg.setStart(n, k); rg.collapse(true);\n for (const tag of Object.keys(m)) if (!m[tag]) {\n const el = this.up(rg.startContainer, tag); if (!el) continue;\n const tail = document.createRange(); tail.setStart(rg.startContainer, rg.startOffset); tail.setEndAfter(el);\n el.after(tail.extractContents()); rg.setStartAfter(el); rg.collapse(true);\n }\n let x: Node = document.createTextNode(s);\n for (const tag of Object.keys(m)) if (m[tag] && !this.up(rg.startContainer, tag)) { const w = document.createElement(tag.toLowerCase()); w.appendChild(x); x = w; }\n rg.insertNode(x); this.tidy(); this.set({ s: o.s + s.length, e: o.s + s.length }); this.typed(o);\n }\n block(type: string, o = this.get()) {\n this.flush(); const all = this.lines(), a = this.lineAt(o.s), z = this.lineAt(o.e);\n const to = all.slice(a, z + 1).every(b => this.typeOf(b) === type) ? 'p' : type;\n this.rebuild(all.map((b, i): [string, Node] => [i >= a && i <= z ? to : this.typeOf(b), b])); this.set(o); this.commit(o);\n }\n private del(o: Range2): Range2 {\n const all = this.lines(), i = this.lineAt(o.s), j = this.lineAt(o.e), [a, ao] = this.pointAt(o.s, true), [b, bo] = this.pointAt(o.e);\n if (i === j) { const rg = document.createRange(); rg.setStart(a, ao); rg.setEnd(b, bo); rg.deleteContents(); this.tidy(); return { s: o.s, e: o.s }; }\n const head = document.createRange(); head.setStart(a, ao); head.setEnd(all[i], all[i].childNodes.length); head.deleteContents();\n const tail = document.createRange(); tail.setStart(all[j], 0); tail.setEnd(b, bo); tail.deleteContents();\n all[i].append(...all[j].childNodes);\n this.rebuild(all.filter((_, k) => k <= i || k > j).map((x): [string, Node] => [this.typeOf(x), x]));\n return { s: o.s, e: o.s };\n }\n split(o = this.get()) {\n this.flush(); const pre = o; if (o.s !== o.e) o = this.del(o);\n const all = this.lines(), i = this.lineAt(o.s), b = all[i], t = this.typeOf(b), spec = this.specOf(), next = t === 'h2' ? 'p' : t;\n if (!this.len(b) && t !== 'p') { spec[i][0] = 'p'; this.rebuild(spec); this.set(o); this.commit(pre); return; }\n if (this.len(b) && o.s === this.startOf(i)) { spec.splice(i, 0, [next, document.createElement('p')]); this.rebuild(spec); this.set({ s: o.s + 1, e: o.s + 1 }); this.commit(pre); return; }\n const [n, k] = this.pointAt(o.s), rg = document.createRange(); rg.setStart(n, k); rg.setEnd(b, b.childNodes.length);\n const nb = document.createElement('p'); nb.appendChild(rg.extractContents());\n spec.splice(i + 1, 0, [next, nb]); this.rebuild(spec); this.set({ s: o.s + 1, e: o.s + 1 }); this.commit(pre);\n }\n private joinBack(o: Range2) {\n const all = this.lines(), i = this.lineAt(o.s), spec = this.specOf();\n if (spec[i][0] !== 'p') { spec[i][0] = 'p'; this.rebuild(spec); this.set(o); this.commit(o); return; }\n if (!i) return;\n all[i - 1].append(...all[i].childNodes); spec.splice(i, 1); this.rebuild(spec); this.set({ s: o.s - 1, e: o.s - 1 }); this.commit(o);\n }\n private joinNext(o: Range2) {\n const all = this.lines(), i = this.lineAt(o.s), spec = this.specOf(); if (i >= all.length - 1) return;\n all[i].append(...all[i + 1].childNodes); spec.splice(i + 1, 1); this.rebuild(spec); this.set(o); this.commit(o);\n }\n private insert(s: string, o: Range2) {\n const [n, k] = this.pointAt(o.s);\n if (n.nodeType === 3) (n as Text).insertData(k, s); else n.insertBefore(document.createTextNode(s), n.childNodes[k] || null);\n this.tidy(); return o.s + s.length;\n }\n private insertLines(items: Line[], o: Range2) {\n if (!items.length) return o.s;\n if (o.s !== o.e) o = this.del(o);\n const all = this.lines(), i = this.lineAt(o.s), b = all[i], [n, k] = this.pointAt(o.s), spec = this.specOf();\n const rg = document.createRange(); rg.setStart(n, k); rg.setEnd(b, b.childNodes.length); const tail = rg.extractContents();\n if (!b.textContent && items[0].t !== 'p') spec[i][0] = items[0].t;\n let at = o.s + items[0].len; b.append(items[0].frag);\n const rest = items.slice(1).map((x): [string, Node] => { const p = document.createElement('p'); p.append(x.frag); at += 1 + x.len; return [x.t, p]; });\n spec.splice(i + 1, 0, ...rest); (rest.length ? rest[rest.length - 1][1] as HTMLElement : b).append(tail);\n this.rebuild(spec); return at;\n }\n link(o: Range2, href: string | null) {\n this.flush();\n if (!href) { const rg = this.range(o); [...this.ed.querySelectorAll('a')].filter(a => rg.intersectsNode(a)).forEach(a => this.unwrap(a)); this.tidy(); this.set(o); this.commit(o); return; }\n if (o.s !== o.e) return this.inline('A', href, o);\n const a = this.up(this.pointAt(o.s)[0], 'A');\n if (a) { a.setAttribute('href', href); this.set(o); this.commit(o); return; }\n const label = href.replace(/^mailto:/i, ''), end = this.insert(label, o);\n this.covered({ s: o.s, e: end }).forEach(t => this.wrap(t, 'A', href)); this.tidy(); this.set({ s: end, e: end }); this.commit(o);\n }\n\n // ---- suggestion ----\n suggest(o: Range2, kind: 'swap' | 'add') {\n this.flush(); this.pend = null;\n const nw = document.createElement('span'); nw.className = 'vo-rte-new'; nw.contentEditable = 'false';\n const olds: HTMLElement[] = [];\n if (kind === 'swap') {\n const all = this.lines(), a = this.lineAt(o.s), z = this.lineAt(o.e);\n for (let i = z; i >= a; i--) {\n const s = Math.max(o.s, this.startOf(i)), e = Math.min(o.e, this.startOf(i) + this.len(all[i])); if (e <= s) continue;\n const rg = this.range({ s, e }), sp = document.createElement('span'); sp.className = 'vo-rte-old';\n sp.appendChild(rg.extractContents()); rg.insertNode(sp); olds.unshift(sp);\n }\n }\n if (olds.length) olds[olds.length - 1].after(nw); else this.range({ s: o.e, e: o.e }).insertNode(nw);\n this.rev = { o, kind, olds, nw };\n return (s: string) => { if (this.rev && this.rev.nw === nw) { const w = document.createElement('span'); w.className = 'vo-w'; w.textContent = s; nw.appendChild(w); this.showRange(w); } };\n }\n private drop() { if (!this.rev) return null; const r = this.rev; r.olds.forEach(x => this.unwrap(x)); r.nw.remove(); this.rev = null; this.tidy(); return r; }\n accept() {\n const s = this.rev ? this.rev.nw.textContent || '' : ''; const r = this.drop(); if (!r) return;\n const items = s.split(/\\n+/).filter(Boolean).map(l => { const frag = document.createDocumentFragment(); frag.append(l); return { t: 'p', frag, len: l.length }; });\n const at = this.insertLines(items, r.kind === 'swap' ? r.o : { s: r.o.e, e: r.o.e });\n this.set({ s: at, e: at }); this.commit(r.o);\n }\n discard() { const r = this.drop(); if (r) this.set(r.o); this.changed(); }\n newText(): string { return this.rev ? this.rev.nw.textContent || '' : ''; }\n\n // ---- browser events, routed through the edits ----\n private onBeforeInput(e: InputEvent) {\n const t = e.inputType;\n if (this.rev) { e.preventDefault(); return; }\n if (t === 'historyUndo' || t === 'historyRedo') { e.preventDefault(); if (t === 'historyUndo') this.undo(); else this.redo(); return; }\n if (t.startsWith('format')) { e.preventDefault(); if (t === 'formatBold') this.inline('B'); else if (t === 'formatItalic') this.inline('I'); return; }\n if (t === 'insertParagraph' || t === 'insertLineBreak') { e.preventDefault(); this.split(); return; }\n if (t === 'insertFromPaste' || t === 'insertFromDrop' || t === 'deleteByDrag' || t === 'deleteByCut') return;\n const o = this.get(), i = this.lineAt(o.s);\n if (t === 'insertText' && e.data && this.pend && o.s === o.e && this.pend.at === o.s) { e.preventDefault(); this.typeStyled(e.data); return; }\n if (o.s === o.e && /^delete.*Backward$/.test(t) && o.s === this.startOf(i)) { e.preventDefault(); this.flush(); this.joinBack(o); return; }\n if (o.s === o.e && /^delete.*Forward$/.test(t) && o.s === this.startOf(i) + this.len(this.lines()[i])) { e.preventDefault(); this.flush(); this.joinNext(o); return; }\n if (o.s !== o.e && i !== this.lineAt(o.e) && (t.startsWith('delete') || t === 'insertText' || t === 'insertReplacementText')) {\n e.preventDefault(); this.flush(); const p = this.del(o); let at = p.s;\n const s = e.data || (e.dataTransfer && e.dataTransfer.getData('text/plain')) || '';\n if (s && t.startsWith('insert')) at = this.insert(s.replace(/\\s*\\n\\s*/g, ' '), p);\n this.set({ s: at, e: at }); this.commit(o); return;\n }\n if (!this.H.dirty) this.H.pre = o;\n }\n private onDrop(e: DragEvent) {\n e.preventDefault(); if (this.rev || !e.dataTransfer) return;\n const items = this.plain(e.dataTransfer.getData('text/plain')); if (!items.length) return;\n const doc = document as Document & { caretRangeFromPoint?: (x: number, y: number) => Range | null; caretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null };\n let at: [Node, number] | null = null;\n if (doc.caretPositionFromPoint) { const pp = doc.caretPositionFromPoint(e.clientX, e.clientY); if (pp) at = [pp.offsetNode, pp.offset]; }\n else if (doc.caretRangeFromPoint) { const r = doc.caretRangeFromPoint(e.clientX, e.clientY); if (r) at = [r.startContainer, r.startOffset]; }\n if (!at || !this.ed.contains(at[0])) return;\n this.flush(); const a0 = this.offsetOf(at[0], at[1]), end = this.insertLines(items, { s: a0, e: a0 }); this.set({ s: end, e: end }, true); this.commit({ s: a0, e: a0 });\n }\n private onKeyDown(e: KeyboardEvent) {\n if (e.isComposing || this.hook.key?.(e)) return;\n if (this.rev) return;\n const mod = isMac() ? e.metaKey && !e.ctrlKey : e.ctrlKey && !e.metaKey;\n if (!mod) return;\n const k = e.key.toLowerCase(), c = e.code;\n const act = e.altKey ? (c === 'Digit1' ? () => this.block('h2') : c === 'Digit0' ? () => this.block('p') : null)\n : e.shiftKey ? (c === 'Digit7' ? () => this.block('ol') : c === 'Digit8' ? () => this.block('ul') : c === 'Digit9' ? () => this.block('quote') : k === 'z' ? () => this.redo() : null)\n : k === 'b' ? () => this.inline('B') : k === 'i' ? () => this.inline('I') : k === 'e' ? () => this.inline('CODE') : k === 'z' ? () => this.undo() : k === 'y' ? () => this.redo() : null;\n if (act) { e.preventDefault(); e.stopPropagation(); act(); }\n }\n\n // ---- public helpers used by the component ----\n focus() { this.set(this.get(), true); }\n html() { return this.ed.innerHTML; }\n reviewing() { return !!this.rev; }\n canUndo() { return this.H.at > 0 || this.H.dirty; }\n canRedo() { return this.H.at < this.H.list.length - 1; }\n empty() { const all = this.lines(); return all.length === 1 && !this.len(all[0]) && this.typeOf(all[0]) === 'p'; }\n words() { const s = this.lines().map(b => b.textContent).join(' ').trim(); return s ? s.split(/\\s+/).length : 0; }\n line(at: number): Range2 { const i = this.lineAt(at), s = this.startOf(i); return { s, e: s + this.len(this.lines()[i]) }; }\n state() {\n const o = this.get(), all = this.lines(), ts = all.slice(this.lineAt(o.s), this.lineAt(o.e) + 1).map(b => this.typeOf(b)), g = this.live();\n const a = this.up(o.s === o.e && g ? g.startContainer : this.pointAt(o.s, o.s !== o.e)[0], 'A');\n return { B: this.has('B', o), I: this.has('I', o), CODE: this.has('CODE', o), A: o.s === o.e ? !!a : this.has('A', o), href: a ? a.getAttribute('href') : null, block: ts.every(t => t === ts[0]) ? ts[0] : null };\n }\n remove(o: Range2) { this.flush(); this.set(this.del(o)); this.commit(o); }\n type(s: string) { const o = this.get(); this.flush(); const at = this.insert(s, o); this.set({ s: at, e: at }); this.typed(o); this.showRange(this.range({ s: at, e: at })); }\n show(o: Range2) { this.showRange(this.range(o)); }\n destroy() { clearTimeout(this.H.t); this.offs.forEach(f => f()); this.offs = []; }\n}\n\n/* ---------- the demo's writer: canned rewrites for the preview's draft, and simple rules for anything else ---------- */\nconst CANNED: Record<string, Record<string, string>> = {\n 'We know pricing changes can feel like a lot, so we want to make sure everyone has plenty of time to look at the new plans and ask us questions before anything changes.':\n { shorter: \"We're giving everyone time to review the new plans and ask questions before anything changes.\", improve: 'Pricing changes can feel like a lot, so everyone gets plenty of time to review the new plans and ask questions before anything changes.' },\n 'New pricing goes live on March 3.': { improve: 'Our new pricing goes live on March 3.', shorter: 'New pricing starts March 3.' },\n 'Starter teams get two more seats for free, and every plan now includes the agent.': { improve: 'Starter teams get two extra seats at no cost, and every plan now includes the agent.', shorter: 'Starter teams get two free seats, and every plan includes the agent.' },\n};\nconst TYPO: Record<string, string> = { teh: 'the', recieve: 'receive', seperate: 'separate', definately: 'definitely', alot: 'a lot', dont: \"don't\", cant: \"can't\", wont: \"won't\", im: \"I'm\", ive: \"I've\", thier: 'their', untill: 'until', occured: 'occurred', wich: 'which', becuase: 'because', youre: \"you're\", doesnt: \"doesn't\", isnt: \"isn't\", tommorow: 'tomorrow', accross: 'across' };\nconst FILLER: [RegExp, string][] = [[/\\b(really|very|just|actually|basically|quite|simply|definitely|certainly|literally|totally)\\s+/gi, ''], [/\\bin order to\\b/gi, 'to'], [/\\bmake sure (that )?/gi, 'ensure '], [/\\bdue to the fact that\\b/gi, 'because'], [/\\bat this point in time\\b/gi, 'now'], [/\\ba lot of\\b/gi, 'many'], [/\\bplenty of\\b/gi, 'enough'], [/\\bis able to\\b/gi, 'can']];\nconst BETTER: [RegExp, string][] = [[/\\bwe will\\b/gi, \"we'll\"], [/\\bwe are\\b/gi, \"we're\"], [/\\bit is\\b/gi, \"it's\"], [/\\bdo not\\b/gi, \"don't\"], [/\\bcannot\\b/gi, \"can't\"], [/\\bvery important\\b/gi, 'essential'], [/\\bgood\\b/gi, 'strong'], [/\\bbig\\b/gi, 'major'], [/\\bstuff\\b/gi, 'details'], [/\\bkind of\\s+/gi, ''], [/\\bat no extra cost\\b/gi, 'free']];\n/** The demo's stand-in for a model: canned rewrites for the preview's draft about a pricing launch, and simple rules for anything else */\nexport function demoWrite(action: string, text: string, doc: string): string {\n const fix = (s: string) => s.replace(/[ \\t]{2,}/g, ' ').replace(/\\s+([,.!?;:])/g, '$1').replace(/\\bi\\b/g, 'I')\n .replace(/\\b[a-z]+\\b/gi, w => { const f = TYPO[w.toLowerCase()]; return f ? (w[0] === w[0].toUpperCase() ? f[0].toUpperCase() + f.slice(1) : f) : w; })\n .replace(/(^|[.!?]\\s+)([a-z])/g, (_, a: string, b: string) => a + b.toUpperCase()).replace(/([a-z0-9])\\s*$/i, (m, a: string) => s.trim().split(/\\s+/).length > 3 ? a + '.' : m);\n if (action === 'continue') {\n const next = /pric|plan|seat|launch/i.test(doc)\n ? ['Current customers keep their price until their next renewal, and every admin gets an email that sums up what changes for their team.', 'If anything is unclear, reply to this email and we will walk you through it.']\n : ['Next, we will share a short summary so everyone knows what changes and when.', 'Reply with any questions and we will get back to you within a day.'];\n return next.find(x => !doc.includes(x)) || next[next.length - 1];\n }\n if (action === 'grammar') return fix(text);\n const rules = (s: string, list: [RegExp, string][]) => list.reduce((x, [a, b]) => x.replace(a, b), s);\n return (text.match(/[^]*?(?:[.!?]+(?=\\s|$)|$)\\s*/g) || [text]).filter(Boolean).map(s => {\n const k = s.trim(), hit = CANNED[k] && CANNED[k][action]; if (hit) return s.replace(k, hit);\n let x = fix(rules(s, action === 'shorter' ? FILLER : [...FILLER.slice(0, 2), ...BETTER]));\n if (action === 'shorter' && x.trim().length > 60 && x.length > s.length * .85 && x.includes(', ')) x = x.slice(0, x.indexOf(', ')) + '.' + (/\\s$/.test(s) ? ' ' : '');\n return x;\n }).join('');\n}\n/** The default `ai`: demoWrite's answer, streamed a word at a time after a short pause, as a model would */\nexport const demoAi: RichTextAi = async function* ({ action, text, document: doc, signal }) {\n const wait = (ms: number) => new Promise<void>(res => setTimeout(res, ms));\n const reduce = typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n const out = demoWrite(action, text, doc);\n if (reduce) { yield out; return; }\n await wait(450);\n for (const w of out.match(/\\S+\\s*|\\s+/g) || []) { if (signal.aborted) return; yield w; await wait(48); }\n};\n\nconst ACTIONS: RichTextAiAction[] = [\n { key: 'improve', label: 'Improve writing', icon: 'spark' },\n { key: 'shorter', label: 'Make shorter', icon: 'minus' },\n { key: 'grammar', label: 'Fix grammar', icon: 'check' },\n { key: 'continue', label: 'Continue writing', icon: 'edit', kind: 'add' },\n];\nconst keysOf = (k: string, mac: boolean) => k === 'redo' ? (mac ? '⇧⌘Z' : 'Ctrl+Y')\n : k.split(' ').map(x => (({ mod: mac ? '⌘' : 'Ctrl', alt: mac ? '⌥' : 'Alt', shift: mac ? '⇧' : 'Shift' }) as Record<string, string>)[x] || x).join(mac ? '' : '+');\nconst TOOLS: { f: RichTextFormat | 'a'; label: string; icon: VoIconName; k: string }[] = [\n { f: 'h2', label: 'Heading', icon: 'file-text', k: 'mod alt 1' }, { f: 'b', label: 'Bold', icon: 'edit', k: 'mod B' }, { f: 'i', label: 'Italic', icon: 'pr', k: 'mod I' },\n { f: 'code', label: 'Inline code', icon: 'term', k: 'mod E' }, { f: 'a', label: 'Link', icon: 'ext', k: 'mod K' },\n { f: 'ul', label: 'Bulleted list', icon: 'more', k: 'mod shift 8' }, { f: 'ol', label: 'Numbered list', icon: 'more', k: 'mod shift 7' }, { f: 'quote', label: 'Quote', icon: 'comment', k: 'mod shift 9' },\n];\ntype Job = { o: Range2; t: Range2; slash: number | null; sel: boolean; btn?: boolean };\n\n/** A minimal editor for a draft an agent helps with. Select text and press Ask AI (or Mod+J, or type / on a new line), and a\n suggestion streams in beside the text, the old words struck through, to accept with Tab/Enter or discard with Escape. */\n@Component({\n selector: 'vo-rich-text-editor',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n #root\n class=\"vo-rte\"\n [attr.data-st]=\"review ? 'review' : 'edit'\"\n (keydown)=\"onRootKey($event)\"\n (pointerdown)=\"onRootPointerDown($event)\"\n >\n <div\n #tb\n class=\"vo-rte-tb\"\n role=\"toolbar\"\n aria-label=\"Formatting\"\n (mousedown)=\"keepFocus($event)\"\n (keydown)=\"tbKey($event)\"\n >\n @for (t of tools; track t.f; let i = $index) {\n @if (i === 5) {\n <span class=\"vo-rte-sep\" aria-hidden=\"true\"></span>\n }\n <button\n type=\"button\"\n class=\"vo-rte-b\"\n [class.vo-on]=\"t.f === 'a' && t.on && !review\"\n [attr.data-f]=\"t.f\"\n [attr.aria-label]=\"t.label\"\n [attr.title]=\"t.label + ' · ' + t.kbd\"\n [disabled]=\"!!review\"\n [tabIndex]=\"focusTb === i ? 0 : -1\"\n [attr.aria-haspopup]=\"t.f === 'a' ? 'dialog' : null\"\n [attr.aria-expanded]=\"t.f === 'a' ? !!lk : null\"\n [attr.aria-pressed]=\"t.f !== 'a' ? (!review && t.on) : null\"\n (click)=\"apply(t.f, $event)\"\n >\n <vo-icon [name]=\"t.icon\" size=\"md\"></vo-icon>\n </button>\n }\n <span class=\"vo-sp\"></span>\n @if (ai !== false) {\n <button\n type=\"button\"\n class=\"vo-rte-ai\"\n aria-label=\"Ask AI\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"!!job\"\n [attr.title]=\"'Edit or write with AI · ' + aiKbd\"\n [disabled]=\"!!review\"\n [tabIndex]=\"focusTb === tools.length ? 0 : -1\"\n (click)=\"onAiButton($event)\"\n >\n <vo-icon name=\"spark\"></vo-icon><span>Ask AI</span>\n </button>\n }\n </div>\n\n <div\n #body\n class=\"vo-rte-body\"\n [class.vo-empty]=\"empty && !review\"\n contenteditable=\"true\"\n role=\"textbox\"\n aria-multiline=\"true\"\n [attr.aria-label]=\"label\"\n [attr.aria-placeholder]=\"placeholder\"\n [attr.data-placeholder]=\"placeholder\"\n spellcheck=\"true\"\n ></div>\n\n <div class=\"vo-rte-ft\">\n <div class=\"vo-rte-idle\" (mousedown)=\"keepFocus($event)\">\n <span class=\"vo-rte-wc vo-num\">{{ words === 1 ? '1 word' : words + ' words' }}</span>\n @if (ai !== false && hint) {\n <span class=\"vo-rte-hint\">{{ hint }}</span>\n }\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-ib vo-rte-un\" aria-label=\"Undo\" [attr.title]=\"'Undo · ' + undoKbd\" [disabled]=\"!!review || !canUndo\" (click)=\"doUndo($event)\"><vo-icon name=\"undo\"></vo-icon></button>\n <button type=\"button\" class=\"vo-ib vo-rte-re\" aria-label=\"Redo\" [attr.title]=\"'Redo · ' + redoKbd\" [disabled]=\"!!review || !canRedo\" (click)=\"doRedo($event)\"><vo-icon name=\"redo\"></vo-icon></button>\n </div>\n <div class=\"vo-rte-rev\" (mousedown)=\"keepFocus($event)\">\n <span class=\"vo-rte-st\">\n @if (review && !review.ready) {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n <span class=\"vo-shim\">{{ reviewLabel }}</span>\n } @else if (review) {\n <vo-icon name=\"spark\"></vo-icon><span>Suggestion ready</span>\n }\n </span>\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-rte-no\" (click)=\"finish(false, $event.isTrusted)\">Discard<span class=\"vo-kbd\">Esc</span></button>\n <button type=\"button\" class=\"vo-pill vo-accent vo-sm vo-rte-ok\" [disabled]=\"!review?.ready\" (click)=\"finish(true, $event.isTrusted)\">Accept<span class=\"vo-kbd\">Tab</span></button>\n </div>\n </div>\n\n @if (ai !== false) {\n <button\n #askEl\n type=\"button\"\n class=\"vo-rte-ask\"\n [class.vo-show]=\"bubble\"\n tabindex=\"-1\"\n aria-label=\"Ask AI about the selection\"\n (mousedown)=\"$event.preventDefault()\"\n (click)=\"onAskButton($event)\"\n >\n <vo-icon name=\"spark\"></vo-icon><span>Ask AI</span>\n </button>\n\n <div\n #menuEl\n class=\"vo-pop vo-rte-menu\"\n [class.vo-open]=\"!!job\"\n role=\"menu\"\n [attr.aria-labelledby]=\"uid + '-ph'\"\n [attr.inert]=\"job ? null : ''\"\n (keydown)=\"menuKey($event)\"\n (mousedown)=\"$event.preventDefault()\"\n >\n <div class=\"vo-ph\" [id]=\"uid + '-ph'\">{{ menuHeading }}</div>\n @for (a of items; track a.key) {\n <button\n type=\"button\"\n class=\"vo-mi\"\n role=\"menuitem\"\n tabindex=\"-1\"\n [attr.data-a]=\"a.key\"\n [attr.aria-disabled]=\"a.off\"\n (click)=\"onMenuItem(a, $event)\"\n >\n @if (a.icon) { <vo-icon [name]=\"a.icon\"></vo-icon> }\n <span>{{ a.label }}</span>\n </button>\n }\n </div>\n }\n\n <div\n #lnkEl\n class=\"vo-pop vo-rte-lnk\"\n [class.vo-open]=\"!!lk\"\n role=\"dialog\"\n aria-label=\"Link\"\n [attr.inert]=\"lk ? null : ''\"\n (keydown)=\"lnkKey($event)\"\n (focusout)=\"lnkBlur($event)\"\n >\n <input\n #urlEl\n class=\"vo-rte-url\"\n type=\"url\"\n placeholder=\"Paste or type a link\"\n aria-label=\"Link address\"\n autocomplete=\"off\"\n spellcheck=\"false\"\n [value]=\"url\"\n [attr.aria-invalid]=\"bad ? 'true' : null\"\n (input)=\"onUrlInput($event)\"\n />\n <button type=\"button\" class=\"vo-pill vo-accent vo-sm vo-rte-lok\" (click)=\"applyLink('')\">Apply</button>\n @if (hasHref && lk) {\n <button type=\"button\" class=\"vo-ib vo-rte-lrm\" aria-label=\"Remove link\" title=\"Remove link\" (click)=\"applyLink(null)\"><vo-icon name=\"trash\"></vo-icon></button>\n }\n </div>\n\n <p class=\"vo-rte-live\" aria-live=\"polite\">{{ say }}</p>\n </div>\n `,\n styleUrl: './rich-text-editor.css',\n})\nexport class RichTextEditorComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The text as HTML: paragraphs, one heading level (`h2`), lists, quotes and inside them bold/italic/code/links. */\n @Input() value?: string;\n @Input() defaultValue = '';\n @Input() placeholder = 'Write a draft, or type / on a new line for AI';\n @Input() label = 'Draft';\n @Input() hint: string | null = 'Select text to ask AI';\n /** Writes the AI's suggestions. Defaults to the demo writer; pass your model call, or false to hide the AI */\n @Input() ai: RichTextAi | false = demoAi;\n /** The AI menu. Defaults to Improve writing, Make shorter, Fix grammar and Continue writing */\n @Input() aiActions: RichTextAiAction[] = ACTIONS;\n\n /** Called with the HTML after each change the person makes */\n @Output() valueChange = new EventEmitter<string>();\n /** Called when a suggestion is accepted or discarded */\n @Output() suggestion = new EventEmitter<RichTextSuggestionResult>();\n\n @ViewChild('root') private rootRef!: ElementRef<HTMLDivElement>;\n @ViewChild('tb') private tbRef!: ElementRef<HTMLDivElement>;\n @ViewChild('body') private bodyRef!: ElementRef<HTMLDivElement>;\n @ViewChild('askEl') private askRef?: ElementRef<HTMLButtonElement>;\n @ViewChild('menuEl') private menuRef?: ElementRef<HTMLDivElement>;\n @ViewChild('lnkEl') private lnkRef!: ElementRef<HTMLDivElement>;\n @ViewChild('urlEl') private urlRef!: ElementRef<HTMLInputElement>;\n\n private readonly motion = inject(ReducedMotionService);\n private eng: RteEngine | null = null;\n private emitted: string | null = null;\n private quiet = false;\n private picked: Range | null = null;\n private runToken: { ctl: AbortController; action: string } | null = null;\n private down?: (e: PointerEvent) => void;\n private resize?: () => void;\n\n readonly uid = 'rte-' + Math.random().toString(36).slice(2, 7);\n mac = false;\n tools = TOOLS.map(t => ({ ...t, on: false, kbd: '' }));\n items = this.aiActions.map(a => ({ ...a, off: false }));\n focusTb = 0;\n words = 0; empty = true; canUndo = false; canRedo = false; hasHref = false;\n job: Job | null = null;\n lk: { o: Range2; btn?: boolean } | null = null;\n url = ''; bad = false; bubble = false;\n review: { action: string; ready: boolean } | null = null;\n say = '';\n aiKbd = ''; undoKbd = ''; redoKbd = '';\n\n private get bodyEl() { return this.bodyRef.nativeElement; }\n\n get menuHeading(): string {\n if (this.job?.sel) return 'Edit the selection';\n return this.items.some(x => !x.off && (x.kind || 'swap') === 'swap') ? 'Edit this paragraph' : 'Write with AI';\n }\n get reviewLabel(): string { return this.aiActions.find(a => a.key === this.review?.action)?.label || ''; }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['aiActions']) this.items = this.aiActions.map(a => ({ ...a, off: false }));\n if (changes['value'] && this.eng && this.value !== undefined && this.value !== this.emitted) {\n if (this.eng.reviewing()) { this.runToken?.ctl.abort(); this.runToken = null; this.review = null; }\n this.load(this.value);\n }\n }\n\n ngAfterViewInit(): void {\n this.mac = isMac();\n this.aiKbd = keysOf('mod J', this.mac); this.undoKbd = keysOf('mod Z', this.mac); this.redoKbd = keysOf('redo', this.mac);\n this.tools = TOOLS.map(t => ({ ...t, on: false, kbd: keysOf(t.k, this.mac) }));\n const E = new RteEngine(this.bodyEl, {\n change: () => this.paint(),\n select: () => { this.paint(); this.showBubble(); },\n input: e => { if (e.inputType === 'insertText' && e.data === '/') { const o = E.get(); if (o.s === o.e && E.line(o.s).s === o.s - 1) this.openMenu('slash'); } },\n key: e => this.engineKey(e),\n });\n this.eng = E;\n this.load(this.value ?? this.defaultValue);\n\n this.down = (e: PointerEvent) => {\n const t = e.target as Node;\n if (this.job && !this.menuRef?.nativeElement.contains(t) && !this.askRef?.nativeElement.contains(t) && !(t as Element).closest?.('.vo-rte-ai')) this.closeMenu(false);\n if (this.lk && !this.lnkRef.nativeElement.contains(t) && !(t as Element).closest?.('[data-f=\"a\"]')) this.closeLink(false);\n if (e.isTrusted && !this.askRef?.nativeElement.contains(t) && !this.job) { this.bubble = false; if (!this.rootRef.nativeElement.contains(t)) this.pick(null); }\n };\n this.resize = () => { this.closeMenu(false); this.closeLink(false); this.bubble = false; };\n document.addEventListener('pointerdown', this.down); addEventListener('resize', this.resize);\n this.paint();\n }\n\n ngOnDestroy(): void {\n this.runToken?.ctl.abort(); this.runToken = null; this.pick(null); this.eng?.destroy(); this.eng = null;\n if (this.down) document.removeEventListener('pointerdown', this.down);\n if (this.resize) removeEventListener('resize', this.resize);\n }\n\n private reduce() { return this.motion.reduce(); }\n private announce(t: string) { this.say = ''; setTimeout(() => { this.say = t; }, 60); }\n\n private paint() {\n const E = this.eng; if (!E) return;\n const s = E.state();\n this.tools = this.tools.map(t => ({ ...t, on: t.f === 'a' ? s.A : /^(h2|ul|ol|quote)$/.test(t.f) ? s.block === t.f : !!(s as unknown as Record<string, boolean>)[t.f.toUpperCase()] }));\n this.hasHref = !!s.href;\n this.words = E.words(); this.empty = E.empty(); this.canUndo = E.canUndo(); this.canRedo = E.canRedo();\n this.items = this.items.map(a => ({ ...a, off: (a.kind || 'swap') === 'swap' && !!this.job && !(E.text(this.job.t).trim()) }));\n if (!E.reviewing() && !this.quiet) { const html = E.html(); if (html !== this.emitted) { this.emitted = html; this.valueChange.emit(html); } }\n }\n\n private load(html: string) { const E = this.eng; if (!E) return; this.quiet = true; E.load(html); this.quiet = false; this.emitted = E.html(); this.paint(); }\n\n // ---- placement of the popovers inside the editor ----\n private rectsOf(o: Range2): [DOMRect, DOMRect] {\n const E = this.eng!, rs = [...E.range(o).getClientRects()].filter(x => x.width || x.height);\n if (rs.length) return [rs[0], rs[rs.length - 1]];\n const n = E.range(E.line(o.s)).startContainer, el = (n.nodeType === 3 ? n.parentElement : n) as Element, rr = el.getBoundingClientRect();\n return [rr, rr];\n }\n private place(el: HTMLElement | undefined, o: Range2, above = false) {\n const box = this.rootRef?.nativeElement; if (!el || !box) return;\n const b = box.getBoundingClientRect(), w = el.offsetWidth, h = el.offsetHeight, top = (this.tbRef.nativeElement.offsetHeight || 44) - 2, [f, l] = this.rectsOf(o);\n const over = f.top - b.top - h - 6, under = l.bottom - b.top + 6;\n const y = above ? (over >= top ? over : under) : under + h <= b.height - 4 || over < top ? under : over;\n el.style.left = Math.round(Math.max(6, Math.min((above ? f : l).left - b.left - (above ? 0 : 8), b.width - w - 6))) + 'px';\n el.style.top = Math.round(Math.max(4, Math.min(y, b.height - h - 4))) + 'px';\n }\n private pick(o: Range2 | null) {\n const reg = typeof CSS !== 'undefined' ? (CSS as unknown as { highlights?: Map<string, Set<Range>> }).highlights : undefined;\n const HL = typeof window !== 'undefined' ? (window as unknown as { Highlight?: new () => Set<Range> }).Highlight : undefined;\n if (!reg || !HL) return;\n let h = reg.get('rte-pick'); if (!h) { h = new HL(); reg.set('rte-pick', h); }\n if (this.picked) h.delete(this.picked);\n this.picked = o && o.s !== o.e && this.eng ? this.eng.range(o) : null;\n if (this.picked) h.add(this.picked);\n }\n private showBubble(o?: Range2) {\n const E = this.eng; if (!E) return;\n const g = getSelection(), sel = o || (document.activeElement === this.bodyEl && g && g.rangeCount && !g.isCollapsed ? E.get() : null);\n if (!sel || E.reviewing() || this.job || this.lk || this.ai === false || !E.text(sel).trim()) { this.bubble = false; return; }\n this.place(this.askRef?.nativeElement, sel, true); this.bubble = true;\n }\n\n // ---- toolbar ----\n keepFocus(e: MouseEvent) { if ((e.target as Element).closest('button')) e.preventDefault(); }\n private tbButtons() { return [...(this.tbRef.nativeElement.querySelectorAll<HTMLButtonElement>('button:not(:disabled)'))]; }\n tbKey(e: KeyboardEvent) {\n const all = this.tbButtons(), i = all.indexOf(document.activeElement as HTMLButtonElement); if (i < 0) return;\n const go = ({ ArrowRight: all[(i + 1) % all.length], ArrowLeft: all[(i - 1 + all.length) % all.length], Home: all[0], End: all[all.length - 1] } as Record<string, HTMLButtonElement | undefined>)[e.key];\n if (go) { e.preventDefault(); go.focus(); this.focusTb = this.tbButtonIndex(go); }\n }\n private tbButtonIndex(b: HTMLButtonElement) { return [...this.tbRef.nativeElement.querySelectorAll('button')].indexOf(b); }\n apply(f: RichTextFormat | 'a', e: MouseEvent) {\n const E = this.eng; if (!E || E.reviewing()) return;\n const mine = e.isTrusted, key = e.detail === 0;\n if (f === 'a') { if (this.lk) this.closeLink(true); else this.openLink(mine, mine && key); return; }\n if (f === 'b' || f === 'i' || f === 'code') E.inline(f.toUpperCase()); else E.block(f);\n if (mine) E.focus();\n }\n doUndo(e: MouseEvent) { this.eng?.undo(); if (e.isTrusted) this.eng?.focus(); }\n doRedo(e: MouseEvent) { this.eng?.redo(); if (e.isTrusted) this.eng?.focus(); }\n onAiButton(e: MouseEvent) { this.openMenu(e.isTrusted ? (e.detail ? 'click' : 'button') : 'script'); }\n onAskButton(e: MouseEvent) { this.openMenu(e.isTrusted ? 'click' : 'script'); }\n\n // ---- the AI menu ----\n private menuItemEls() { return [...(this.menuRef?.nativeElement.querySelectorAll<HTMLButtonElement>('[role=\"menuitem\"]') || [])].filter(m => m.getAttribute('aria-disabled') !== 'true'); }\n private focusItem(m?: HTMLButtonElement) { if (!m) return; this.menuItemEls().forEach(x => { x.tabIndex = x === m ? 0 : -1; }); m.focus({ preventScroll: true }); }\n openMenu(how: 'key' | 'button' | 'click' | 'slash' | 'script') {\n const E = this.eng; if (!E || E.reviewing() || this.ai === false) return;\n this.closeLink(false); E.flush();\n if (this.job) { this.closeMenu(how !== 'script'); return; }\n const o = E.get(), slash = how === 'slash' ? o.s - 1 : null, sel = o.s !== o.e;\n let t = sel ? o : E.line(o.s); if (slash !== null) t = { s: slash + 1, e: t.e };\n this.job = { o, t, slash, sel, btn: how === 'button' };\n this.bubble = false; this.pick(sel ? o : null); this.paint();\n requestAnimationFrame(() => { this.place(this.menuRef?.nativeElement, o); if (how !== 'script') this.focusItem(this.menuItemEls()[0]); });\n }\n closeMenu(back: boolean) {\n const j = this.job; if (!j) return;\n this.job = null; this.pick(null); this.paint();\n if (back && j.btn) { this.eng?.set(j.o); this.rootRef.nativeElement.querySelector<HTMLElement>('.vo-rte-ai')?.focus({ preventScroll: true }); }\n else if (back) this.eng?.set(j.o, true);\n }\n menuKey(e: KeyboardEvent) {\n const all = this.menuItemEls(), i = all.indexOf(document.activeElement as HTMLButtonElement);\n const go = ({ ArrowDown: all[(i + 1) % all.length], ArrowUp: all[(i - 1 + all.length) % all.length], Home: all[0], End: all[all.length - 1] } as Record<string, HTMLButtonElement | undefined>)[e.key];\n if (go) { e.preventDefault(); this.focusItem(go); }\n else if (e.key === 'Escape' || e.key === 'Tab') { e.preventDefault(); e.stopPropagation(); this.closeMenu(true); }\n else if (e.key.length === 1 && /\\S/.test(e.key) && !e.metaKey && !e.ctrlKey) { const k = e.key.toLowerCase(), hit = [...all.slice(i + 1), ...all.slice(0, i + 1)].find(m => (m.textContent || '').trim().toLowerCase().startsWith(k)); if (hit) this.focusItem(hit); }\n }\n onMenuItem(a: { key: string; off: boolean }, e: MouseEvent) { if (!a.off) this.ask(a.key, e.isTrusted); }\n\n private here(E: RteEngine): Job { const o = E.get(), sel = o.s !== o.e; return { o, t: sel ? o : E.line(o.s), slash: null, sel }; }\n ask(key: string, mine: boolean) {\n const E = this.eng, j = this.job || (E && this.here(E));\n const act = this.aiActions.find(a => a.key === key), writer = this.ai;\n if (!E || !j || !act || writer === false || E.reviewing()) return;\n this.closeMenu(false);\n let t = j.t, end = j.o.e;\n if (j.slash !== null) { const sl = j.slash; E.remove({ s: sl, e: sl + 1 }); const back = (x: number) => x > sl ? x - 1 : x; t = { s: back(t.s), e: back(t.e) }; end = back(end); }\n const kind = act.kind || 'swap';\n if (kind === 'add') t = { s: end, e: end };\n else if (!E.text(t).trim()) return;\n const doc = E.text({ s: 0, e: E.total() }), before = E.text({ s: 0, e: t.s }), after = E.text({ s: t.e, e: E.total() }), said = E.text(t);\n const write = E.suggest(t, kind), ctl = new AbortController(), me = { ctl, action: key };\n this.runToken = me; let got = '', first = true;\n const put = (s: string) => { if (first && kind === 'add' && before && !/\\s$/.test(before) && !/^\\s/.test(s)) s = ' ' + s; first = false; got += s; write(s); };\n this.review = { action: key, ready: false }; this.bubble = false; this.paint();\n this.announce(`${act.label}: writing a suggestion`);\n if (mine) E.focus();\n (async () => {\n try {\n const res = writer({ action: key, text: kind === 'add' ? '' : said, before, after, document: doc, signal: ctl.signal });\n if (typeof res === 'string' || res instanceof Promise) {\n const s = await res; if (this.runToken !== me) return;\n if (this.reduce()) put(s);\n else for (const w of s.match(/\\S+\\s*|\\s+/g) || []) { if (this.runToken !== me) return; put(w); await new Promise(r => setTimeout(r, 48)); }\n } else for await (const chunk of res) { if (this.runToken !== me) return; put(chunk); }\n } catch (err) { if (this.runToken !== me) return; console.error(err); }\n if (this.runToken !== me) return;\n if (!got.trim()) { this.finish(false, true); return; }\n this.review = { action: key, ready: true }; this.paint();\n const s = got.trim(); this.announce(`Suggestion: ${s}${/[.!?]$/.test(s) ? '' : '.'} Press Tab or Enter to accept, or Escape to discard.`);\n })();\n }\n finish(keep: boolean, mine: boolean) {\n const E = this.eng, r = this.runToken; if (!E || !E.reviewing() || !r) return;\n if (keep && !this.review?.ready) return;\n const said = E.newText();\n this.runToken = null; r.ctl.abort();\n if (keep) E.accept(); else E.discard();\n this.review = null; this.paint(); this.announce(keep ? 'Suggestion accepted' : 'Suggestion discarded');\n this.suggestion.emit({ action: r.action, text: said, accepted: keep });\n if (mine) E.focus();\n }\n\n // ---- the link field ----\n openLink(mine: boolean, btn = false) {\n const E = this.eng; if (!E || E.reviewing()) return;\n this.closeMenu(false); E.flush();\n const o = E.get(), s = E.state();\n this.lk = { o, btn }; this.url = s.href || ''; this.bad = false; this.bubble = false; this.hasHref = !!s.href; this.pick(o);\n requestAnimationFrame(() => { this.place(this.lnkRef.nativeElement, o); if (mine) this.urlRef.nativeElement.focus({ preventScroll: true }); });\n }\n closeLink(back: boolean) {\n const j = this.lk; if (!j) return;\n this.lk = null; this.pick(null);\n if (back && j.btn) { this.eng?.set(j.o); this.tbRef.nativeElement.querySelector<HTMLElement>('[data-f=\"a\"]')?.focus({ preventScroll: true }); }\n else if (back) this.eng?.set(j.o, true);\n }\n private toUrl(v: string) { v = v.trim(); if (!v) return null; if (/^(https?:\\/\\/|mailto:)/i.test(v)) return v; if (/^[^\\s@/]+@[^\\s@]+\\.[^\\s@]+$/.test(v)) return 'mailto:' + v; if (/^[\\w-]+(\\.[\\w-]+)+(:\\d+)?([/?#]\\S*)?$/.test(v)) return 'https://' + v; return null; }\n applyLink(href: string | null) {\n const E = this.eng, j = this.lk; if (!E || !j) return;\n if (href === '') { const h = this.toUrl(this.url); if (!h) { this.bad = true; this.urlRef.nativeElement.focus({ preventScroll: true }); return; } href = h; }\n this.closeLink(false); E.set(j.o); E.link(j.o, href); E.focus();\n }\n onUrlInput(e: Event) { this.url = (e.target as HTMLInputElement).value; this.bad = false; }\n lnkKey(e: KeyboardEvent) { if (e.key === 'Enter' && e.target === this.urlRef.nativeElement) { e.preventDefault(); this.applyLink(''); } else if (e.key === 'Escape') { e.preventDefault(); e.stopPropagation(); this.closeLink(true); } }\n lnkBlur(e: FocusEvent) { if (this.lk && e.relatedTarget && !this.lnkRef.nativeElement.contains(e.relatedTarget as Node)) this.closeLink(false); }\n\n // ---- root-level keys ----\n private engineKey(e: KeyboardEvent): boolean {\n const E = this.eng!;\n if (E.reviewing()) {\n if ((e.key === 'Tab' || e.key === 'Enter') && !e.shiftKey && !e.altKey && !e.metaKey && !e.ctrlKey) { e.preventDefault(); this.finish(true, true); return true; }\n if (e.key === 'Escape' || ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'z')) { e.preventDefault(); e.stopPropagation(); this.finish(false, true); return true; }\n return false;\n }\n const mod = isMac() ? e.metaKey && !e.ctrlKey : e.ctrlKey && !e.metaKey, k = e.key.toLowerCase();\n if (mod && !e.altKey && !e.shiftKey && (k === 'k' || (k === 'j' && this.ai !== false))) { e.preventDefault(); e.stopPropagation(); if (k === 'k') this.openLink(true); else this.openMenu('key'); return true; }\n if (e.key === 'Escape') { this.bubble = false; return false; }\n return false;\n }\n onRootKey(e: KeyboardEvent) { if (e.key === 'Escape' && this.review && !this.bodyEl.contains(e.target as Node)) { e.preventDefault(); e.stopPropagation(); this.finish(false, true); } }\n onRootPointerDown(e: PointerEvent) { if (e.isTrusted && !this.job) this.pick(null); }\n\n // ---- imperative handle, for scripted demos ----\n focus() { this.eng?.focus(); }\n getHTML() { return this.eng?.html() || ''; }\n getText() { const E = this.eng; return E ? E.text({ s: 0, e: E.total() }) : ''; }\n setHTML(html: string) { this.load(html); }\n select(s: string): boolean {\n const E = this.eng; if (!E) return false;\n const at = E.text({ s: 0, e: E.total() }).indexOf(s); if (at < 0 || !s) return false;\n const o = { s: at, e: at + s.length }; E.set(o); E.show(o); this.pick(o); this.showBubble(o); this.paint(); return true;\n }\n typeText(s: string) { this.eng?.type(s); }\n newLine() { this.eng?.split(); }\n format(f: RichTextFormat) { const E = this.eng; if (!E || E.reviewing()) return; if (f === 'b' || f === 'i' || f === 'code') E.inline(f.toUpperCase()); else E.block(f); }\n openAi() { this.openMenu('script'); }\n askAi(a: string) { this.ask(a, false); }\n accept() { this.finish(true, false); }\n discard() { this.finish(false, false); }\n undo() { this.eng?.undo(); }\n redo() { this.eng?.redo(); }\n}\n","// framework/angular/run-cost/run-cost.component.ts\n//\n// Native Angular port of framework/react/run-cost/RunCost.tsx.\n// Credits a run has used against its budget, with a cap the agent pauses at and\n// the tokens behind the number. Inputs mirror the React props; callback props\n// become @Output EventEmitters. The bar colour, the status tag and the cap\n// marker follow the React logic and the vanilla JS (run-cost.js).\n\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\n\nexport type RunCostStatus = 'idle' | 'running' | 'stopped' | 'paused' | 'spent';\n\n/** One line in the breakdown under the bar, like \"Input tokens\". */\nexport interface RunCostRow {\n label: string;\n value: number;\n}\n\nconst TONE: Partial<Record<RunCostStatus, string>> = {\n running: 'vo-b',\n paused: 'vo-warn',\n spent: 'vo-bad',\n};\nconst ACTION: Record<RunCostStatus, string> = {\n idle: 'Start run',\n running: 'Stop',\n stopped: 'Resume',\n paused: 'Raise cap',\n spent: 'Start over',\n};\n\n@Component({\n selector: 'vo-run-cost',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n data-vo=\"\"\n class=\"vo-rc\"\n [class.vo-panel]=\"!bare\"\n [style.padding-inline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-rc-h\">\n <span class=\"vo-muted\">{{ title }}</span>\n <span class=\"vo-rc-st vo-tag\" [class]=\"toneClass\">\n <span class=\"vo-dot\"></span>\n <span class=\"vo-sw vo-rc-stt\">{{ label }}</span>\n </span>\n </div>\n <div class=\"vo-rc-big\">\n <span class=\"vo-rc-n vo-num\">{{ fmt(used) }}</span>\n <span class=\"vo-muted\"> / {{ fmt(budget) }}</span>\n </div>\n <div\n class=\"vo-rc-track\"\n role=\"meter\"\n [attr.aria-label]=\"title\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"budget\"\n [attr.aria-valuenow]=\"roundedUsed\"\n >\n <div class=\"vo-rc-fill\" [style.width.%]=\"fillPct\" [style.background]=\"fillColor\"></div>\n <div class=\"vo-rc-cap\" [style.left.%]=\"capAt\" [style.opacity]=\"cap ? 1 : 0.2\" [attr.title]=\"'The agent pauses here'\"></div>\n </div>\n @if (rows?.length) {\n <div class=\"vo-rc-rows\">\n @for (r of rows; track r.label) {\n <div><span>{{ r.label }}</span><span class=\"vo-num\">{{ fmt(r.value) }}</span></div>\n }\n </div>\n }\n <div class=\"vo-rc-f\">\n <label class=\"vo-rc-cap-t\" (click)=\"onCapToggle($event)\">\n <button type=\"button\" class=\"vo-toggle\" role=\"switch\" [attr.aria-checked]=\"cap\" [attr.aria-label]=\"'Pause at ' + capAt + ' percent'\"></button>\n <span>Pause at {{ capAt }}%</span>\n </label>\n <button\n type=\"button\"\n class=\"vo-pill vo-sm vo-rc-go\"\n [class.vo-soft]=\"status === 'running' || status === 'stopped'\"\n [class.vo-primary]=\"status !== 'running' && status !== 'stopped'\"\n (click)=\"action.emit()\"\n >\n <span class=\"vo-sw\">{{ actionWords }}</span>\n </button>\n </div>\n </div>\n `,\n styleUrl: './run-cost.css',\n})\nexport class RunCostComponent {\n /** Credits used so far. */\n @Input() used = 0;\n /** The whole budget, like 2000. */\n @Input() budget = 2000;\n /** Where the agent pauses, as a percentage of the budget. Defaults to 90. */\n @Input() capAt = 90;\n /** Whether the agent pauses at the cap. Defaults to on. */\n @Input() capOn?: boolean;\n /** running is blue, paused (at the cap) amber, spent (the whole budget) red. */\n @Input() status: RunCostStatus = 'idle';\n /** Words in the status tag. Defaults to Idle, Running, Stopped, \"Paused at N%\" or \"Budget used\". */\n @Input() statusLabel?: string;\n /** The breakdown under the bar. */\n @Input() rows?: RunCostRow[];\n /** Words on the button. Defaults by status. */\n @Input() actionLabel?: string;\n @Input() title = 'Credits used';\n /** Sits flat in a chat thread (the default). Set false to give it a card. */\n @Input() bare = true;\n\n @Output() action = new EventEmitter<void>();\n @Output() capChange = new EventEmitter<boolean>();\n\n private innerCap = true;\n\n get cap(): boolean {\n return this.capOn ?? this.innerCap;\n }\n\n fmt(n: number): string {\n return Math.round(n).toLocaleString('en-US');\n }\n\n get roundedUsed(): number {\n return Math.round(this.used);\n }\n\n get fillPct(): number {\n return Math.max(0, Math.min(100, (this.used / this.budget) * 100));\n }\n\n get fillColor(): string {\n return this.status === 'paused'\n ? 'var(--vo-warn-mark)'\n : 'var(--vo-accent-mark, var(--vo-accent))';\n }\n\n get toneClass(): string {\n return TONE[this.status] ?? '';\n }\n\n get label(): string {\n if (this.statusLabel) return this.statusLabel;\n const map: Record<RunCostStatus, string> = {\n idle: 'Idle',\n running: 'Running',\n stopped: 'Stopped',\n paused: `Paused at ${this.capAt}%`,\n spent: 'Budget used',\n };\n return map[this.status];\n }\n\n get actionWords(): string {\n return this.actionLabel ?? ACTION[this.status];\n }\n\n onCapToggle(e: Event): void {\n e.preventDefault();\n const next = !this.cap;\n this.innerCap = next;\n this.capChange.emit(next);\n }\n}\n","// framework/angular/run-queue/run-queue.component.ts\n//\n// Native Angular port of framework/react/run-queue/RunQueue.tsx.\n// A queue of agent jobs in three parts: the one running (raised, with its steps,\n// progress and time left), the ones up next, and the ones done. A compact switch\n// folds the running job's steps away; a failed step turns its job red and offers\n// Retry; when every job is done a summary takes the running job's place. Inputs\n// mirror the React props; callbacks become @Output() EventEmitters.\n//\n// The segmented density switch is reproduced inline (a sliding knob placed over\n// the pressed button), as stat-cards.component.ts does for its period switch.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { NgTemplateOutlet } from '@angular/common';\n\nexport type RunState = 'queued' | 'running' | 'failed' | 'done';\n\nexport interface RunStep {\n label: string;\n state: RunState;\n /** What the step came to, shown once it is done, like \"3 of 3\" or \"4 articles\". */\n meta?: string;\n}\n\nexport interface RunJob {\n /** Keeps the job's row when the list changes order. Defaults to the title. */\n id?: string;\n /** What the job is, like \"Draft the launch email\". */\n title: string;\n /** Who does it, like \"Copy agent\", under the title. */\n agent?: string;\n /** The icon on the job's badge. Defaults to a spark. */\n icon?: VoIconName;\n state: RunState;\n /** How far the job is, 0 to 1. Defaults to the share of its steps that are done. */\n progress?: number;\n /** The time at the end of the row, like \"in ~4s\", \"12s left\" or \"4.2s\". */\n time?: string;\n /** The line after the agent while it runs. Defaults to the step running or failed. */\n note?: string;\n steps?: RunStep[];\n}\n\nexport type RunQueueDensity = 'detailed' | 'compact';\n\nconst liveState = (s: RunState): boolean => s === 'running' || s === 'failed';\nconst shareOf = (j: RunJob): number =>\n j.progress ??\n (j.steps?.length\n ? j.steps.filter((s) => s.state === 'done').length / j.steps.length\n : j.state === 'done'\n ? 1\n : 0);\nconst clamp01 = (n: number): number => Math.max(0, Math.min(1, n));\n\n/** Internal per-job render state. */\ninterface JobView {\n job: RunJob;\n index: number;\n key: string;\n part: 'run' | 'next' | 'done';\n dataS: 'run' | 'fail' | 'done' | 'wait';\n progress: number;\n note?: string;\n showSteps: boolean;\n}\n\n/** A queue of agent jobs: running, up next, and done, with per-row progress and a compact toggle. */\n@Component({\n selector: 'vo-run-queue',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgTemplateOutlet],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-rq\"\n [class.vo-panel]=\"!bare\"\n [class.vo-keep]=\"!bare\"\n [class.vo-fin]=\"fin\"\n [style.paddingInline]=\"bare ? '0' : null\"\n >\n <div class=\"vo-rq-h\">\n <div class=\"vo-rq-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-rq-st vo-num vo-sw\">{{ line }}</span>\n </div>\n <div class=\"vo-seg2 vo-rq-sg\" role=\"group\" aria-label=\"Density\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (o of densityOptions; track o.value) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"dens === o.value\"\n (click)=\"setDensity(o.value)\"\n >{{ o.label }}</button>\n }\n </div>\n </div>\n\n <div class=\"vo-rq-tot\" aria-hidden=\"true\">\n @for (v of views; track v.key) {\n <i [class.vo-fail]=\"v.job.state === 'failed'\"><b [style.--vo-p]=\"v.progress\"></b></i>\n }\n </div>\n\n <div class=\"vo-rq-b\">\n <div class=\"vo-fold vo-rq-ff\" [class.vo-shut]=\"!fin\" [attr.inert]=\"fin ? null : ''\">\n <div>\n <div class=\"vo-rq-sec\">\n <div class=\"vo-rq-fin\" [class.vo-enter]=\"fin\">\n <span class=\"vo-rq-av\" aria-hidden=\"true\"><vo-icon name=\"ok\"></vo-icon></span>\n <span class=\"vo-rq-jt\">\n <b class=\"vo-rq-ft\">All {{ jobs.length }} jobs done</b>\n @if (summary) {\n <span class=\"vo-rq-js\">{{ summary }}</span>\n }\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"vo-fold vo-rq-rf\" [class.vo-shut]=\"fin\" [attr.inert]=\"fin ? '' : null\">\n <div>\n <div class=\"vo-rq-sec\">\n <span class=\"vo-rq-l\">Running</span>\n <ul class=\"vo-rq-run\" aria-label=\"Running\">\n @for (v of runViews; track v.key) {\n <ng-container [ngTemplateOutlet]=\"jobRow\" [ngTemplateOutletContext]=\"{ $implicit: v }\"></ng-container>\n }\n </ul>\n </div>\n </div>\n </div>\n\n <div class=\"vo-fold vo-rq-nf\" [class.vo-shut]=\"fin\" [attr.inert]=\"fin ? '' : null\">\n <div>\n <div class=\"vo-rq-sec\">\n <span class=\"vo-rq-l\">Up next</span>\n <ol class=\"vo-rq-next\" aria-label=\"Up next\">\n @for (v of nextViews; track v.key) {\n <ng-container [ngTemplateOutlet]=\"jobRow\" [ngTemplateOutletContext]=\"{ $implicit: v }\"></ng-container>\n }\n </ol>\n <p class=\"vo-rq-none\">Nothing waiting</p>\n </div>\n </div>\n </div>\n\n <div class=\"vo-fold vo-rq-df\">\n <div>\n <div class=\"vo-rq-sec\">\n <span class=\"vo-rq-l\">Done <span class=\"vo-num\">{{ doneCount }}</span></span>\n <ul class=\"vo-rq-done\" aria-label=\"Done\">\n @for (v of doneViews; track v.key) {\n <ng-container [ngTemplateOutlet]=\"jobRow\" [ngTemplateOutletContext]=\"{ $implicit: v }\"></ng-container>\n }\n </ul>\n <p class=\"vo-rq-none\">Nothing done yet</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #jobRow let-v>\n <li class=\"vo-rq-j\" [attr.data-s]=\"v.dataS\" [attr.data-k]=\"v.key\" [attr.data-p]=\"v.part\">\n <div class=\"vo-rq-jh\">\n <span class=\"vo-rq-av\" aria-hidden=\"true\"><vo-icon [name]=\"v.job.icon ?? 'spark'\"></vo-icon></span>\n <span class=\"vo-rq-jt\">\n <b>{{ v.job.title }}</b>\n <span class=\"vo-rq-js vo-sw\">{{ subLine(v) }}</span>\n </span>\n <span class=\"vo-rq-jm vo-num\">\n @if (v.job.time) {\n <span>{{ v.job.time }}</span>\n }\n @if (v.job.state === 'done') {\n <span class=\"vo-ok\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n }\n </span>\n </div>\n <div class=\"vo-rq-jb\" aria-hidden=\"true\">\n <div class=\"vo-rq-bar\"><i [style.--vo-p]=\"v.progress\"></i></div>\n <span class=\"vo-rq-pc vo-num\">{{ pctText(v) }}%</span>\n </div>\n <div class=\"vo-fold vo-rq-sf\" [class.vo-shut]=\"!v.showSteps\" [attr.inert]=\"v.showSteps ? null : ''\">\n <div>\n <ul class=\"vo-rq-steps\">\n @for (st of v.job.steps ?? []; track $index; let si = $index) {\n <li class=\"vo-rq-sp\" [class]=\"stepClass(st)\">\n <span class=\"vo-g\">\n @switch (st.state) {\n @case ('running') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('failed') {\n <vo-icon name=\"x\" size=\"xs\"></vo-icon>\n }\n @case ('done') {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>\n }\n @default {\n <span class=\"vo-dot\" aria-hidden=\"true\"></span>\n }\n }\n </span>\n <span>{{ st.label }}</span>\n <span class=\"vo-m\">\n @if (st.state === 'failed' && retryWired) {\n <button type=\"button\" class=\"vo-rq-retry vo-enter\" (click)=\"retry.emit({ job: v.index, step: si })\">Retry</button>\n } @else if (st.state === 'done' && st.meta) {\n <span class=\"vo-sw\">{{ st.meta }}</span>\n }\n </span>\n </li>\n }\n </ul>\n </div>\n </div>\n </li>\n </ng-template>\n `,\n styleUrl: './run-queue.css',\n})\nexport class RunQueueComponent implements AfterViewInit, OnChanges {\n @Input() jobs: RunJob[] = [];\n /** The queue's name over its status line. */\n @Input() title = 'Run queue';\n /** Overrides the status line. */\n @Input() status?: string;\n /** The line under \"All N jobs done\" once every job is done. */\n @Input() summary?: string;\n /** detailed lists the running job's steps, compact folds them away. */\n @Input() set density(value: RunQueueDensity | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.dens) {\n this.dens = value;\n if (this.ready) this.placeKnob();\n }\n }\n @Input() defaultDensity: RunQueueDensity = 'detailed';\n /** Whether the Retry button shows on a failed step (React: onRetry wired). */\n @Input() retryWired = true;\n /** Sits flat in a chat thread, with no card. */\n @Input() bare = false;\n\n @Output() densityChange = new EventEmitter<RunQueueDensity>();\n @Output() retry = new EventEmitter<{ job: number; step: number }>();\n\n readonly densityOptions: { value: RunQueueDensity; label: string }[] = [\n { value: 'detailed', label: 'Detailed' },\n { value: 'compact', label: 'Compact' },\n ];\n\n dens: RunQueueDensity = 'detailed';\n knobLeft = 0;\n knobWidth = 0;\n\n private controlled = false;\n private ready = false;\n\n constructor(\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n private keyOf(j: RunJob): string {\n return j.id ?? j.title;\n }\n\n private partOf(s: RunState): 'run' | 'next' | 'done' {\n return liveState(s) ? 'run' : s === 'done' ? 'done' : 'next';\n }\n\n get views(): JobView[] {\n return this.jobs.map((job, index) => {\n const dataS: JobView['dataS'] =\n job.state === 'running'\n ? 'run'\n : job.state === 'failed'\n ? 'fail'\n : job.state === 'done'\n ? 'done'\n : 'wait';\n const at = job.steps?.find((x) => x.state === 'failed') ?? job.steps?.find((x) => x.state === 'running');\n const note = liveState(job.state) ? (job.note ?? at?.label) : undefined;\n return {\n job,\n index,\n key: this.keyOf(job),\n part: this.partOf(job.state),\n dataS,\n progress: clamp01(shareOf(job)),\n note,\n showSteps: this.dens === 'detailed' && liveState(job.state) && !!job.steps?.length,\n };\n });\n }\n\n get runViews(): JobView[] {\n return this.views.filter((v) => v.part === 'run');\n }\n get nextViews(): JobView[] {\n return this.views.filter((v) => v.part === 'next');\n }\n get doneViews(): JobView[] {\n return this.views.filter((v) => v.part === 'done');\n }\n\n get doneCount(): number {\n return this.jobs.filter((j) => j.state === 'done').length;\n }\n\n get fin(): boolean {\n return this.jobs.length > 0 && this.doneCount === this.jobs.length;\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n if (this.fin) return `All ${this.jobs.length} done`;\n if (this.jobs.some((j) => j.state === 'failed')) return '1 step failed, waiting for Retry';\n return `${this.doneCount} of ${this.jobs.length} done`;\n }\n\n subLine(v: JobView): string {\n return [v.job.agent, v.note].filter(Boolean).join(' · ');\n }\n\n pctText(v: JobView): number {\n return Math.round(v.progress * 100);\n }\n\n stepClass(st: RunStep): string {\n return st.state === 'queued'\n ? 'vo-wait'\n : st.state === 'running'\n ? 'vo-run'\n : st.state === 'failed'\n ? 'vo-fail'\n : 'vo-done';\n }\n\n setDensity(value: RunQueueDensity): void {\n if (!this.controlled) {\n this.dens = value;\n this.placeKnob();\n }\n this.densityChange.emit(value);\n }\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.dens = this.defaultDensity;\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n }\n\n ngOnChanges(): void {\n if (this.ready) {\n // the knob may need to move if the pressed button's width changed\n queueMicrotask(() => this.placeKnob());\n }\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-rq-sg button');\n const i = this.densityOptions.findIndex((o) => o.value === this.dens);\n const b = btns[i];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n}\n","// framework/angular/run-summary/run-summary.component.ts\n//\n// Native Angular port of framework/react/run-summary/RunSummary.tsx.\n// What an agent run did, what it cost and what still needs the person, once it\n// finishes. The stats count up from zero and the rows come in one after another;\n// \"Undo all\" greys out the changes and swaps the glyph, and a need's action can\n// swap its label for a spinner. Inputs mirror the React props; callbacks become\n// @Output EventEmitters. Behaviour follows the vanilla JS (run-summary.js).\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One stat in the row under the title, like \"files\" or \"cost\". */\nexport interface RunStat {\n /** Like \"files\" or \"cost\". */\n label: string;\n /** Counts up from 0 when the summary appears. */\n value: number;\n /** Before the number, like \"$\". */\n prefix?: string;\n /** After the number, like \"k\". */\n suffix?: string;\n /** Decimal places, like 2 for a cost. */\n decimals?: number;\n}\n\n/** One file the run changed, under \"What changed\". */\nexport interface RunChange {\n file: string;\n added: number;\n removed: number;\n}\n\n/** The button at the end of a need, like Review. */\nexport interface RunNeedAction {\n label: string;\n onClick: () => void;\n /** Swaps the label for a spinner. */\n busy?: boolean;\n}\n\n/** One item left for the person, under \"Needs you\". */\nexport interface RunNeed {\n key: string;\n /** What needs the person. Crossfades when it changes. */\n text: string;\n action?: RunNeedAction;\n}\n\n@Component({\n selector: 'vo-run-summary',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-rsu\"\n [class.vo-panel]=\"!bare\"\n [class.vo-undone]=\"isUndone\"\n [style.padding-inline]=\"bare ? '0' : null\"\n #root\n >\n <div class=\"vo-rsu-h\">\n <span\n class=\"vo-rsu-g\"\n [style.background]=\"isUndone ? 'var(--vo-chip)' : null\"\n [style.color]=\"isUndone ? 'var(--vo-fg2)' : null\"\n >\n <vo-icon [name]=\"isUndone ? 'undo' : 'check'\" size=\"sm\" [class.vo-enter]=\"moved\"></vo-icon>\n </span>\n <div>\n <div class=\"vo-rsu-t vo-sw\">{{ isUndone ? undoneTitle : title }}</div>\n @if (subtitle) {\n <div class=\"vo-rsu-s vo-muted\">{{ subtitle }}</div>\n }\n </div>\n @if (details.observed) {\n <button\n type=\"button\"\n class=\"vo-ib vo-rsu-more\"\n aria-label=\"More\"\n data-tip=\"Run details\"\n (click)=\"details.emit()\"\n >\n <vo-icon name=\"more\" size=\"sm\"></vo-icon>\n </button>\n }\n </div>\n @if (summary) {\n <p class=\"vo-rsu-title\">{{ summary }}</p>\n }\n @if (stats?.length) {\n <div class=\"vo-rsu-stats\">\n @for (s of stats; track s.label) {\n <span><b class=\"vo-num\">{{ display(s) }}</b> {{ s.label }}</span>\n }\n </div>\n }\n @if (changes?.length) {\n <div class=\"vo-rsu-sec\">\n <div class=\"vo-rsu-l\">What changed</div>\n @for (c of changes; track c.file) {\n <div class=\"vo-rsu-it\">\n <span class=\"vo-mono\">{{ c.file }}</span>\n <span class=\"vo-num\"\n ><i [class]=\"c.added ? 'vo-a' : 'vo-z'\">+{{ c.added }}</i>\n <i [class]=\"c.removed ? 'vo-x' : 'vo-z'\">−{{ c.removed }}</i></span\n >\n </div>\n }\n </div>\n }\n @if (needs?.length) {\n <div class=\"vo-rsu-sec\">\n <div class=\"vo-rsu-l\">Needs you</div>\n @for (n of needs; track n.key) {\n <div class=\"vo-rsu-it vo-rsu-need\">\n <span class=\"vo-dot\" style=\"color:var(--vo-warn-mark)\"></span>\n <span class=\"vo-rsu-nt vo-sw\">{{ n.text }}</span>\n @if (n.action; as a) {\n <button\n type=\"button\"\n class=\"vo-pill vo-soft vo-sm vo-rsu-fix\"\n [attr.aria-busy]=\"a.busy ? true : null\"\n (click)=\"runNeed(a)\"\n >\n @if (a.busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n {{ a.label }}\n }\n </button>\n }\n </div>\n }\n </div>\n }\n <div class=\"vo-rsu-acts\">\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"openChanges.emit()\">\n Open changes\n </button>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm vo-rsu-undo\" (click)=\"toggleUndone()\">\n <span class=\"vo-sw\">{{ isUndone ? 'Redo' : 'Undo all' }}</span>\n </button>\n </div>\n </div>\n `,\n styleUrl: './run-summary.css',\n})\nexport class RunSummaryComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** Defaults to \"Run complete\". */\n @Input() title = 'Run complete';\n /** The title once the changes are undone. */\n @Input() undoneTitle = 'Changes undone';\n /** The quiet line under the title, like \"Finished in 12m 40s\". */\n @Input() subtitle?: string;\n /** One line on what the run did. */\n @Input() summary?: string;\n @Input() stats?: RunStat[];\n /** The files the run changed, under \"What changed\". */\n @Input() changes?: RunChange[];\n /** What is left for the person, under \"Needs you\". */\n @Input() needs?: RunNeed[];\n /** Whether the changes are undone. Leave it out to let \"Undo all\" toggle it. */\n @Input() undone?: boolean;\n @Input() defaultUndone = false;\n /** Sits flat in a chat thread (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n\n /** Adds a button in the corner that opens the run's details. */\n @Output() details = new EventEmitter<void>();\n /** The main button, \"Open changes\". */\n @Output() openChanges = new EventEmitter<void>();\n @Output() undoneChange = new EventEmitter<boolean>();\n\n @ViewChild('root') private root!: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n private innerUndone = false;\n /** Whether the glyph should play its entrance (only after undone changes). */\n moved = false;\n /** The live counted-up value per stat label; null until its tween starts. */\n private counts = new Map<string, number>();\n private timers = new Set<ReturnType<typeof setTimeout>>();\n private frames = new Set<number>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultUndone'] && this.undone === undefined) {\n this.innerUndone = this.defaultUndone;\n }\n }\n\n get isUndone(): boolean {\n return this.undone ?? this.innerUndone;\n }\n\n ngAfterViewInit(): void {\n this.innerUndone = this.defaultUndone;\n if (this.motion.reduce()) {\n // skip the entrance: numbers land at their final value, rows stay put\n return;\n }\n // each stat counts up a beat after the one before it\n (this.stats ?? []).forEach((s, i) => {\n this.after(200 + i * 90, () => this.tween(s, 1100));\n });\n // the change/need rows and the actions come in one after another\n const rows = Array.from(\n this.root.nativeElement.querySelectorAll<HTMLElement>('.vo-rsu-it,.vo-rsu-acts'),\n );\n rows.forEach((el, i) => {\n el.classList.add('vo-pre');\n this.after(300 + i * 70, () => {\n el.classList.add('vo-enter');\n el.classList.remove('vo-pre');\n });\n });\n }\n\n /** The text shown for a stat: its live count while rolling, else its final value. */\n display(s: RunStat): string {\n const reduced = this.motion.reduce();\n const v = reduced ? s.value : this.counts.get(s.label) ?? 0;\n return (s.prefix ?? '') + v.toFixed(s.decimals ?? 0) + (s.suffix ?? '');\n }\n\n toggleUndone(): void {\n const next = !this.isUndone;\n if (this.undone === undefined) this.innerUndone = next;\n this.moved = true;\n this.undoneChange.emit(next);\n }\n\n runNeed(a: RunNeedAction): void {\n if (!a.busy) a.onClick();\n }\n\n private tween(s: RunStat, ms: number): void {\n const start = performance.now();\n const step = (now: number) => {\n const t = Math.min(1, (now - start) / ms);\n // easeOutCubic, matching cubic-bezier(.22,1,.36,1) closely enough\n const eased = 1 - Math.pow(1 - t, 3);\n this.counts.set(s.label, s.value * eased);\n if (t < 1) {\n const f = requestAnimationFrame(step);\n this.frames.add(f);\n }\n };\n const f = requestAnimationFrame(step);\n this.frames.add(f);\n }\n\n private after(ms: number, fn: () => void): void {\n const t = setTimeout(() => {\n fn();\n this.timers.delete(t);\n }, ms);\n this.timers.add(t);\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n this.frames.forEach((f) => cancelAnimationFrame(f));\n this.frames.clear();\n }\n}\n","// framework/angular/scatter-chart/scatter-chart.component.ts\n//\n// Native Angular port of framework/react/scatter-chart/ScatterChart.tsx.\n// Every run is a dot by cost (along) and eval score (up), sized by tokens, with\n// a colour and a shape per series. Dashed median lines cut the plot into four\n// named quadrants; pointing snaps to the nearest run and a drag draws a box that\n// selects the runs in it. Inputs mirror the React props; React callbacks become\n// @Output EventEmitters. The plot measures itself with a ResizeObserver set up\n// in ngAfterViewInit and torn down in ngOnDestroy, mirroring the vanilla JS\n// (scatter-chart.js). Styling flows only through the --vo-* tokens.\n//\n// Icons: only the \"spark\" glyph is used (the note and the \"Ask the agent why\"\n// button), via VoIconComponent — the same glyph the React/Vanilla originals use.\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A shape for a series, so it reads without colour too. */\nexport type ScatterShape = 'circle' | 'square' | 'triangle';\n\n/** One run: a dot on the chart. */\nexport interface ScatterRun {\n id: string | number;\n /** Which series it belongs to, by key. */\n series: string;\n /** Along the bottom, like cost per run in dollars. */\n x: number;\n /** Up the side, like an eval score in %. */\n y: number;\n /** Its dot's size, like thousands of tokens. */\n size: number;\n}\n\n/** One series: a colour and a shape, with a legend label. */\nexport interface ScatterSeries {\n key: string;\n label: string;\n /** Defaults to the chart palette in order: --vo-c1, --vo-c2, --vo-c3. */\n color?: string;\n /** Each series has a shape as well as a colour, so it reads without colour too. */\n shape?: ScatterShape;\n}\n\n/** Internal per-dot render data. */\ninterface DotView {\n run: ScatterRun;\n index: number;\n cls: string;\n fill: string;\n shape: ScatterShape;\n cx: number;\n cy: number;\n r: number;\n}\n\nconst PAL = [\n 'var(--vo-c1)',\n 'var(--vo-c2)',\n 'var(--vo-c3)',\n 'var(--vo-c4)',\n 'var(--vo-c5)',\n 'var(--vo-c6)',\n];\nconst SHAPES: ScatterShape[] = ['circle', 'square', 'triangle'];\n\nconst median = (a: number[]): number => {\n if (!a.length) return 0;\n const s = [...a].sort((p, q) => p - q);\n const m = s.length >> 1;\n return s.length % 2 ? s[m] : (s[m - 1] + s[m]) / 2;\n};\n\n@Component({\n selector: 'vo-scatter-chart',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-cvq vo-panel\" [class]=\"className\">\n <div class=\"vo-cvq-h\">\n <div class=\"vo-cvq-t\">\n <b>{{ title }}</b>\n @if (subtitle) {\n <span class=\"vo-muted\">{{ subtitle }}</span>\n }\n </div>\n <div class=\"vo-cvq-lg\">\n @for (s of series; track s.key) {\n <button\n type=\"button\"\n class=\"vo-cvq-k\"\n [attr.aria-pressed]=\"!off.includes(s.key)\"\n (click)=\"toggle(s.key)\"\n >\n <svg viewBox=\"-6 -6 12 12\" [style.fill]=\"colorOf(s.key)\" aria-hidden=\"true\">\n @switch (shapeOf(s.key)) {\n @case ('circle') { <circle [attr.cx]=\"0\" [attr.cy]=\"0\" [attr.r]=\"4.5\" /> }\n @case ('square') { <rect [attr.x]=\"-4.05\" [attr.y]=\"-4.05\" [attr.width]=\"8.1\" [attr.height]=\"8.1\" [attr.rx]=\"1.125\" /> }\n @default { <path [attr.d]=\"triPath(0, 0, 4.5)\" /> }\n }\n </svg>{{ s.label }}\n </button>\n }\n </div>\n </div>\n\n <div\n #plot\n class=\"vo-cvq-pl\"\n tabindex=\"0\"\n role=\"group\"\n aria-roledescription=\"scatter chart\"\n [attr.aria-label]=\"title + '. Arrow keys step through the runs'\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerup)=\"onPointerUp()\"\n (pointercancel)=\"onPointerCancel()\"\n (pointerleave)=\"onPointerLeave()\"\n (blur)=\"onBlur()\"\n (keydown)=\"onKeyDown($event)\"\n >\n @if (W > 0) {\n <svg class=\"vo-cvq-svg\" [attr.viewBox]=\"'0 0 ' + W + ' ' + H\" aria-hidden=\"true\">\n <!-- a few light gridlines and quiet tick labels; the axis titles sit well clear of the ticks -->\n @for (v of yt; track v) {\n <g>\n <line class=\"vo-gl\" [attr.x1]=\"l\" [attr.x2]=\"W - rr\" [attr.y1]=\"Y(v)\" [attr.y2]=\"Y(v)\" />\n <text [attr.x]=\"l - 6\" [attr.y]=\"Y(v) + 3.5\" text-anchor=\"end\">{{ v }}</text>\n </g>\n }\n @for (v of xt; track $index) {\n <text\n [attr.x]=\"X(v)\"\n [attr.y]=\"H - b + 15\"\n [attr.text-anchor]=\"$index === 0 ? 'start' : $index === xt.length - 1 ? 'end' : 'middle'\"\n >{{ formatX(v) }}</text>\n }\n <line class=\"vo-ax\" [attr.x1]=\"l\" [attr.x2]=\"W - rr\" [attr.y1]=\"H - b\" [attr.y2]=\"H - b\" />\n <text class=\"vo-at\" [attr.x]=\"W - rr\" [attr.y]=\"H - 1\" text-anchor=\"end\">{{ xTitle }}</text>\n <text class=\"vo-at\" [attr.x]=\"-t\" [attr.y]=\"9\" transform=\"rotate(-90)\" text-anchor=\"end\">{{ yTitle }}</text>\n <line class=\"vo-md\" [attr.x1]=\"X(mx)\" [attr.x2]=\"X(mx)\" [attr.y1]=\"t\" [attr.y2]=\"H - b\" />\n <line class=\"vo-md\" [attr.x1]=\"l\" [attr.x2]=\"W - rr\" [attr.y1]=\"Y(my)\" [attr.y2]=\"Y(my)\" />\n @if (!narrow) {\n <text class=\"vo-q\" [attr.x]=\"l + 6\" [attr.y]=\"t + 11\">{{ quadrants[0] }}</text>\n <text class=\"vo-q\" [attr.x]=\"W - rr - 4\" [attr.y]=\"t + 11\" text-anchor=\"end\">{{ quadrants[1] }}</text>\n <text class=\"vo-q\" [attr.x]=\"W - rr - 4\" [attr.y]=\"H - b - 6\" text-anchor=\"end\">{{ quadrants[2] }}</text>\n <text class=\"vo-q\" [attr.x]=\"l + 6\" [attr.y]=\"H - b - 6\">{{ quadrants[3] }}</text>\n }\n @for (d of dots; track d.run.id) {\n <g [class]=\"d.cls\" [style.fill]=\"d.fill\">\n @switch (d.shape) {\n @case ('circle') { <circle [attr.cx]=\"d.cx\" [attr.cy]=\"d.cy\" [attr.r]=\"d.r\" /> }\n @case ('square') { <rect [attr.x]=\"d.cx - d.r * 0.9\" [attr.y]=\"d.cy - d.r * 0.9\" [attr.width]=\"d.r * 1.8\" [attr.height]=\"d.r * 1.8\" [attr.rx]=\"d.r * 0.25\" /> }\n @default { <path [attr.d]=\"triPath(d.cx, d.cy, d.r)\" /> }\n }\n </g>\n }\n @for (d of ringDots; track d.run.id) {\n <circle class=\"vo-ring\" [attr.cx]=\"d.cx\" [attr.cy]=\"d.cy\" [attr.r]=\"d.r + 6\" />\n }\n @if (box) {\n <rect\n class=\"vo-box\"\n [attr.x]=\"min(box[0], box[2])\"\n [attr.y]=\"min(box[1], box[3])\"\n [attr.width]=\"abs(box[2] - box[0])\"\n [attr.height]=\"abs(box[3] - box[1])\"\n [attr.rx]=\"3\"\n />\n }\n </svg>\n }\n <div #tip class=\"vo-cvq-tt\" [class.vo-on]=\"hr\" [style.left.px]=\"ttX\" [style.top.px]=\"ttY\">\n @if (hr) {\n <b class=\"vo-num\">{{ formatX(hr.x) }} · {{ formatY(hr.y) }}</b>\n <span>Run {{ hr.id }}, {{ labelOf(hr.series) }}, {{ formatSize(hr.size) }}</span>\n }\n </div>\n </div>\n\n <div class=\"vo-cvq-ft\" aria-live=\"polite\">\n @if (hr && focused) {\n <span class=\"vo-cvq-msg\">\n <span><b>Run {{ hr.id }}</b>, {{ labelOf(hr.series) }}: {{ formatX(hr.x) }}, {{ formatY(hr.y) }}, {{ formatSize(hr.size) }}. {{ order.indexOf(hot) + 1 }} of {{ order.length }}</span>\n </span>\n } @else if (answer) {\n <span class=\"vo-cvq-msg\">\n <vo-icon class=\"vo-i\" name=\"spark\" size=\"xs\"></vo-icon>\n <span [class.vo-shim]=\"answer.busy\">{{ answer.busy ? 'Looking at ' + selectedRuns.length + ' runs' : answer.text }}</span>\n </span>\n } @else if (selectedRuns.length) {\n <span class=\"vo-cvq-msg\">\n <span><b>{{ selectedRuns.length }} runs selected</b>, {{ formatX(avgX) }} and {{ formatY(avgY) }} on average</span>\n </span>\n @if (ask.observed) {\n <button type=\"button\" class=\"vo-pill vo-soft vo-sm\" (click)=\"runAsk()\">\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>Ask the agent why\n </button>\n }\n } @else {\n <span class=\"vo-cvq-msg\">\n <vo-icon class=\"vo-i\" name=\"spark\" size=\"xs\"></vo-icon>\n <span>{{ note ?? defaultNote }}</span>\n </span>\n }\n </div>\n </div>\n `,\n styleUrl: './scatter-chart.css',\n})\nexport class ScatterChartComponent implements AfterViewInit, OnDestroy {\n @Input({ required: true }) runs: ScatterRun[] = [];\n @Input({ required: true }) series: ScatterSeries[] = [];\n @Input() className = '';\n @Input() title = 'Cost vs quality';\n @Input() subtitle?: string;\n /** [min, max] of each axis. */\n @Input() xDomain: [number, number] = [0, 0.6];\n @Input() yDomain: [number, number] = [60, 100];\n /** Where the labels go along the bottom. A narrow chart keeps the two ends and the middle. */\n @Input() xTicks: number[] = [0, 0.2, 0.4, 0.6];\n /** Where the gridlines and their labels go up the side. A narrow chart keeps the two ends and the middle. */\n @Input() yTicks: number[] = [60, 80, 100];\n @Input() xTitle = 'Cost per run (USD)';\n @Input() yTitle = 'Eval score (%)';\n @Input() formatX: (x: number) => string = (x) => '$' + x.toFixed(2);\n @Input() formatY: (y: number) => string = (y) => Math.round(y) + '%';\n @Input() formatSize: (s: number) => string = (s) => Math.round(s) + 'k tokens';\n /** The four quadrants the medians make, from the top left, clockwise. A narrow chart keeps the median lines and leaves the names out. */\n @Input() quadrants: [string, string, string, string] = [\n 'Cheap, good',\n 'Costly, good',\n 'Costly, weaker',\n 'Cheap, weaker',\n ];\n /** Runs to ring, like outliers the agent found. */\n @Input() ringed: (string | number)[] = [];\n /** The line under the chart while nothing is selected or in focus. */\n @Input() note?: string;\n /** The selected runs, by id. Leave it out to let the chart hold the selection. */\n @Input() set selected(value: (string | number)[] | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) {\n this.sel = value;\n this.asked++;\n this.answer = null;\n if (this.ready) this.draw();\n }\n }\n\n @Output() selectedChange = new EventEmitter<(string | number)[]>();\n /** Adds \"Ask the agent why\" to a selection. Return the answer and it streams in. */\n @Output() ask = new EventEmitter<ScatterRun[]>();\n\n @ViewChild('plot') plotRef!: ElementRef<HTMLDivElement>;\n @ViewChild('tip') tipRef!: ElementRef<HTMLDivElement>;\n\n private readonly reduced = inject(ReducedMotionService);\n private readonly cdr = inject(ChangeDetectorRef);\n\n // measured geometry\n W = 0;\n H = 0;\n narrow = false;\n l = 44;\n b = 40;\n t = 6;\n rr = 8;\n\n // render state\n dots: DotView[] = [];\n ringDots: DotView[] = [];\n xt: number[] = [];\n yt: number[] = [];\n mx = 0;\n my = 0;\n hot = -1;\n hr: ScatterRun | null = null;\n box: number[] | null = null;\n ttX = 0;\n ttY = 0;\n focused = false;\n order: number[] = [];\n selectedRuns: ScatterRun[] = [];\n avgX = 0;\n avgY = 0;\n answer: { text: string; busy: boolean } | null = null;\n\n off: string[] = [];\n private sel: (string | number)[] = [];\n private controlled = false;\n private ready = false;\n private asked = 0;\n private drag: { x: number; y: number; id: number; moved: boolean } | null = null;\n private ro?: ResizeObserver;\n private timers: ReturnType<typeof setTimeout>[] = [];\n\n // template helpers\n readonly min = Math.min;\n readonly abs = Math.abs;\n\n get defaultNote(): string {\n return `Medians split the runs: ${this.formatX(this.mx)} and ${this.formatY(this.my)}. Drag across the chart to select runs.`;\n }\n\n ngAfterViewInit(): void {\n const el = this.plotRef.nativeElement;\n this.ro = new ResizeObserver(() => {\n this.W = el.clientWidth;\n this.H = el.clientHeight;\n this.draw();\n });\n this.ro.observe(el);\n this.ready = true;\n this.W = el.clientWidth;\n this.H = el.clientHeight;\n this.draw();\n this.cdr.detectChanges();\n }\n\n // ----- series look-ups -----\n private si(key: string): number {\n return Math.max(0, this.series.findIndex((s) => s.key === key));\n }\n colorOf(key: string): string {\n return this.series[this.si(key)]?.color ?? PAL[this.si(key) % PAL.length];\n }\n shapeOf(key: string): ScatterShape {\n return this.series[this.si(key)]?.shape ?? SHAPES[this.si(key) % SHAPES.length];\n }\n labelOf(key: string): string {\n return this.series[this.si(key)]?.label ?? '';\n }\n\n /** The triangle mark's path, so a dot reads without colour too. */\n triPath(x: number, y: number, s: number): string {\n return `M${x} ${y - s * 1.15}L${x + s * 1.05} ${y + s * 0.75}L${x - s * 1.05} ${y + s * 0.75}Z`;\n }\n\n // ----- geometry -----\n X(v: number): number {\n return this.l + ((v - this.xDomain[0]) / (this.xDomain[1] - this.xDomain[0])) * (this.W - this.l - this.rr);\n }\n Y(v: number): number {\n return this.t + (1 - (v - this.yDomain[0]) / (this.yDomain[1] - this.yDomain[0])) * (this.H - this.t - this.b);\n }\n private R(run: ScatterRun): number {\n const sMin = Math.min(...this.runs.map((r) => r.size));\n const sMax = Math.max(...this.runs.map((r) => r.size));\n return (3 + ((run.size - sMin) / Math.max(1, sMax - sMin)) * 4.5) * (this.narrow ? 0.85 : 1);\n }\n\n private shownIdx(): number[] {\n return this.runs.map((_, i) => i).filter((i) => !this.off.includes(this.runs[i].series));\n }\n\n // ----- draw: recompute every view model, mirroring the React render -----\n draw(): void {\n if (!this.ready || this.W <= 0) {\n this.cdr.markForCheck();\n return;\n }\n this.narrow = this.W > 0 && this.W <= 340;\n this.l = this.narrow ? 38 : 44;\n\n const ends = (a: number[], d: [number, number]): number[] =>\n this.narrow && a.length > 3 ? [a[0], (d[0] + d[1]) / 2, a[a.length - 1]] : a;\n this.xt = ends(this.xTicks, this.xDomain);\n this.yt = ends(this.yTicks, this.yDomain);\n\n const shown = this.shownIdx();\n this.mx = median(shown.map((i) => this.runs[i].x));\n this.my = median(shown.map((i) => this.runs[i].y));\n\n const sel = this.sel;\n this.dots = this.runs.map((run, i) => {\n const off = this.off.includes(run.series);\n const dim = this.hr != null && this.hr.series !== run.series && !off;\n const cls = ['vo-d', off ? 'vo-off' : '', dim ? 'vo-dim' : '', i === this.hot ? 'vo-on' : '', sel.includes(run.id) ? 'vo-sel' : '']\n .filter(Boolean)\n .join(' ');\n return {\n run,\n index: i,\n cls,\n fill: this.colorOf(run.series),\n shape: this.shapeOf(run.series),\n cx: +this.X(run.x).toFixed(1),\n cy: +this.Y(run.y).toFixed(1),\n r: +this.R(run).toFixed(1),\n };\n });\n\n this.ringDots = this.runs\n .filter((run) => this.ringed.includes(run.id) && !this.off.includes(run.series))\n .map((run) => ({\n run,\n index: this.runs.indexOf(run),\n cls: '',\n fill: this.colorOf(run.series),\n shape: this.shapeOf(run.series),\n cx: this.X(run.x),\n cy: this.Y(run.y),\n r: this.R(run),\n }));\n\n this.order = [...shown].sort((a, c) => this.runs[a].x - this.runs[c].x || this.runs[c].y - this.runs[a].y);\n\n this.hr = this.hot >= 0 ? this.runs[this.hot] : null;\n if (this.hr && this.tipRef) {\n const w = this.tipRef.nativeElement.offsetWidth;\n this.ttX = Math.max(w / 2, Math.min(this.W - w / 2, this.X(this.hr.x)));\n this.ttY = this.Y(this.hr.y) - this.R(this.hr);\n }\n\n this.selectedRuns = this.runs.filter((r) => sel.includes(r.id));\n if (this.selectedRuns.length) {\n this.avgX = this.selectedRuns.reduce((a, r) => a + r.x, 0) / this.selectedRuns.length;\n this.avgY = this.selectedRuns.reduce((a, r) => a + r.y, 0) / this.selectedRuns.length;\n }\n this.cdr.markForCheck();\n }\n\n // ----- legend -----\n toggle(key: string): void {\n if (!this.off.includes(key) && this.off.length === this.series.length - 1) return;\n this.hot = -1;\n this.off = this.off.includes(key) ? this.off.filter((k) => k !== key) : [...this.off, key];\n this.draw();\n }\n\n // ----- pointer / selection -----\n private local(e: PointerEvent): [number, number] {\n const r = this.plotRef.nativeElement.getBoundingClientRect();\n return [e.clientX - r.left, e.clientY - r.top];\n }\n private near(px: number, py: number): number {\n let best = -1;\n let bd = 26 * 26;\n for (const i of this.shownIdx()) {\n const dx = this.X(this.runs[i].x) - px;\n const dy = this.Y(this.runs[i].y) - py;\n const d = dx * dx + dy * dy;\n if (d < bd) {\n bd = d;\n best = i;\n }\n }\n return best;\n }\n\n private setSel(ids: (string | number)[]): void {\n if (!this.controlled) {\n this.sel = ids;\n this.asked++;\n this.answer = null;\n }\n this.selectedChange.emit(ids);\n this.draw();\n }\n\n onPointerDown(e: PointerEvent): void {\n if (e.button) return;\n const [x, y] = this.local(e);\n this.drag = { x, y, id: e.pointerId, moved: false };\n }\n\n onPointerMove(e: PointerEvent): void {\n const [x, y] = this.local(e);\n const d = this.drag;\n if (d && (d.moved || Math.abs(x - d.x) + Math.abs(y - d.y) > 5)) {\n if (!d.moved) {\n d.moved = true;\n this.plotRef.nativeElement.setPointerCapture(d.id);\n this.hot = -1;\n }\n this.box = [\n d.x,\n d.y,\n Math.max(this.l, Math.min(this.W - this.rr, x)),\n Math.max(this.t, Math.min(this.H - this.b, y)),\n ];\n this.draw();\n return;\n }\n if (e.pointerType !== 'touch') {\n const i = this.near(x, y);\n if (i !== this.hot) {\n this.hot = i;\n this.draw();\n }\n }\n }\n\n onPointerUp(): void {\n const d = this.drag;\n this.drag = null;\n if (!d) return;\n if (d.moved && this.box) {\n const [a, b2, x2, y2] = this.box;\n const lo = Math.min(a, x2);\n const hi = Math.max(a, x2);\n const top = Math.min(b2, y2);\n const bot = Math.max(b2, y2);\n const ids = this.shownIdx()\n .filter(\n (i) =>\n this.X(this.runs[i].x) >= lo &&\n this.X(this.runs[i].x) <= hi &&\n this.Y(this.runs[i].y) >= top &&\n this.Y(this.runs[i].y) <= bot,\n )\n .map((i) => this.runs[i].id);\n this.box = null;\n this.setSel(ids);\n } else if (this.hot < 0 && this.sel.length) {\n this.box = null;\n this.setSel([]);\n }\n }\n\n onPointerCancel(): void {\n this.drag = null;\n this.box = null;\n this.draw();\n }\n\n onPointerLeave(): void {\n if (!this.drag && document.activeElement !== this.plotRef.nativeElement && this.hot >= 0) {\n this.hot = -1;\n this.draw();\n }\n }\n\n onBlur(): void {\n this.focused = false;\n if (this.hot >= 0) {\n this.hot = -1;\n this.draw();\n }\n }\n\n onKeyDown(e: KeyboardEvent): void {\n this.focused = true;\n const o = this.order;\n let k = o.indexOf(this.hot);\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') k = Math.min(o.length - 1, k + 1);\n else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') k = Math.max(0, k < 0 ? 0 : k - 1);\n else if (e.key === 'Home') k = 0;\n else if (e.key === 'End') k = o.length - 1;\n else if (e.key === 'Escape' && this.sel.length) {\n this.box = null;\n this.setSel([]);\n return;\n } else return;\n e.preventDefault();\n this.hot = o[k];\n this.draw();\n }\n\n // ----- ask the agent -----\n runAsk(): void {\n if (!this.ask.observed) return;\n this.asked++;\n const id = this.asked;\n this.answer = { text: '', busy: true };\n this.ask.emit(this.selectedRuns);\n this.cdr.markForCheck();\n // the host answers via streamAnswer(); until then the shimmer shows\n this.pendingAsk = id;\n }\n\n private pendingAsk = 0;\n\n /** The host calls this with the answer; it streams in word by word. */\n streamAnswer(text: string): void {\n const id = this.pendingAsk;\n if (id !== this.asked) return;\n const ws = text.split(' ');\n const step = (i: number): void => {\n if (id !== this.asked) return;\n this.answer = { text: ws.slice(0, i).join(' '), busy: false };\n this.cdr.markForCheck();\n if (i < ws.length) {\n this.timers.push(setTimeout(() => step(i + 1), this.reduced.reduce() ? 0 : 45));\n }\n };\n step(1);\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n this.timers.forEach(clearTimeout);\n this.timers = [];\n }\n}\n","// framework/angular/score-breakdown/score-breakdown.component.ts\n//\n// Native Angular port of framework/react/score-breakdown/ScoreBreakdown.tsx.\n// A score out of 100 whose half-circle gauge is split into one segment per\n// factor, sized by its weight and filled by the points it earned. The rows\n// under it say what each earned and why, the weakest one is flagged in words,\n// and an improvable row offers Improve, which asks for a proposal to apply.\n// Inputs mirror the React props; callbacks become @Output EventEmitters. The\n// gauge sweep, the count-up of the total, the hover highlight and the row fold\n// are ported from the vanilla JS (score-breakdown.js).\n//\n// Icons: the React source uses a \"wand\" glyph on the Improve button, which is\n// not in the Angular icon set, so it is substituted with the closest available\n// glyph, \"spark\" (also used for the proposal marker, matching the source).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One factor that goes into the score. */\nexport interface ScoreFactor {\n key: string;\n /** Like \"Speed\". */\n label: string;\n /** The points it can earn; the weights add up to 100. */\n weight: number;\n /** The points it earned. */\n earned: number;\n /** The agent's one-line note, like \"Median reply 6.4s, target under 4s\". */\n note: string;\n /** Adds an Improve button to the open row. */\n improvable?: boolean;\n /** A line shown first in the open row, like what was changed. */\n detail?: string;\n}\n\n/** The agent's proposal for an improvable factor. */\nexport interface ScoreProposal {\n /** What the agent would change. */\n text: string;\n /** What it would gain, like \"About 2.1s faster a reply\". */\n gain?: string;\n /** The points the factor would earn after it. */\n to: number;\n}\n\n// The chart palette (--vo-c1..c6), in order.\nconst PAL = ['var(--vo-c1)', 'var(--vo-c2)', 'var(--vo-c3)', 'var(--vo-c4)', 'var(--vo-c5)', 'var(--vo-c6)'];\nconst band = (s: number): string => (s >= 90 ? 'Excellent' : s >= 75 ? 'Good' : s >= 60 ? 'Fair' : 'Needs work');\nconst CX = 100, CY = 100, RAD = 86, GAP = 0.04;\nconst at = (a: number): [number, number] => [CX + Math.cos(a) * RAD, CY + Math.sin(a) * RAD];\nconst arc = (a0: number, a1: number): string => {\n const [x0, y0] = at(a0), [x1, y1] = at(a1);\n return `M${x0.toFixed(2)} ${y0.toFixed(2)}A${RAD} ${RAD} 0 0 1 ${x1.toFixed(2)} ${y1.toFixed(2)}`;\n};\n\n/** Per-factor render state held by the component. */\ninterface Row {\n factor: ScoreFactor;\n index: number;\n color: string;\n /** The span of this factor's gauge segment: [startAngle, endAngle]. */\n seg: [number, number];\n /** The track arc path (the full segment). */\n track: string;\n /** The filled arc path, grown to the share currently shown. */\n fillPath: string;\n /** Width of the small inline bar, as a CSS length. */\n barWidth: string;\n /** The proposal for this row, \"busy\" while the agent works, or null. */\n proposal: ScoreProposal | 'busy' | null;\n}\n\n@Component({\n selector: 'vo-score-breakdown',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-sbx vo-panel\">\n <div class=\"vo-sbx-top\">\n <div\n class=\"vo-sbx-g\"\n [class.vo-hov]=\"hot >= 0\"\n role=\"meter\"\n [attr.aria-label]=\"title\"\n aria-valuemin=\"0\"\n aria-valuemax=\"100\"\n [attr.aria-valuenow]=\"total\"\n [attr.aria-valuetext]=\"valueText()\"\n >\n <svg viewBox=\"0 0 200 108\" aria-hidden=\"true\">\n @for (r of rows; track r.factor.key) {\n <g\n [class.vo-on]=\"hot === r.index\"\n (pointerenter)=\"onPointGauge($event, r.index)\"\n (pointerleave)=\"setHot(-1)\"\n >\n <path class=\"vo-tr\" [attr.d]=\"r.track\"></path>\n @if (r.fillPath) {\n <path class=\"vo-fl\" [style.stroke]=\"r.color\" [attr.d]=\"r.fillPath\"></path>\n }\n </g>\n }\n </svg>\n <div class=\"vo-sbx-v\"><b class=\"vo-num\">{{ shownRounded }}</b><span class=\"vo-muted\">of 100</span></div>\n </div>\n <div class=\"vo-sbx-s\">\n <b>{{ title }}</b>\n <span class=\"vo-sbx-band\">\n <span class=\"vo-muted\">{{ drawn ? bandWord : 'Scoring' }}</span>\n @if (delta !== null && drawn) {\n <span class=\"vo-tag vo-num\" [class.vo-ok]=\"delta >= 0\" [class.vo-bad]=\"delta < 0\">\n {{ delta >= 0 ? '+' : '−' }}{{ absDelta }} {{ since }}\n </span>\n }\n </span>\n </div>\n </div>\n <div\n class=\"vo-sbx-list\"\n (pointerleave)=\"onListLeave($event)\"\n (focusout)=\"onListFocusOut($event)\"\n >\n @for (r of rows; track r.factor.key) {\n <div\n class=\"vo-sbx-r\"\n [class.vo-on]=\"hot === r.index\"\n [class.vo-open]=\"isOpen(r.factor.key)\"\n (pointerenter)=\"onPointRow($event, r.index)\"\n (focusin)=\"setHot(r.index)\"\n >\n <button\n type=\"button\"\n class=\"vo-sbx-rh\"\n [attr.aria-expanded]=\"isOpen(r.factor.key)\"\n [attr.aria-label]=\"rowLabel(r)\"\n (click)=\"toggle(r.factor.key)\"\n >\n <i [style.background]=\"r.color\"></i>\n <span class=\"vo-n\">\n <span>{{ r.factor.label }}</span>\n @if (r.index === weakest) {\n <span class=\"vo-tag vo-warn\">Weakest</span>\n }\n </span>\n <span class=\"vo-e vo-num\">{{ r.factor.earned }}/{{ r.factor.weight }}</span>\n <span class=\"vo-bar\"><i [style.background]=\"r.color\" [style.width]=\"r.barWidth\"></i></span>\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n <span class=\"vo-sbx-nt\">{{ r.factor.note }}</span>\n </button>\n <div class=\"vo-sbx-fold\" [class.vo-shut]=\"!isOpen(r.factor.key)\">\n <div>\n <div class=\"vo-sbx-d\">\n @if (r.proposal === 'busy') {\n <div class=\"vo-sbx-pr vo-enter\">\n <span class=\"vo-k\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon><span class=\"vo-shim\">{{ improvingLabel }}</span></span>\n </div>\n } @else if (r.proposal) {\n <div class=\"vo-sbx-pr\">\n <span class=\"vo-k\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon>Proposal</span>\n <span>{{ r.proposal.text }}</span>\n <span class=\"vo-gain\">{{ r.proposal.gain ? r.proposal.gain + ': ' : '' }}{{ r.factor.label }} <b class=\"vo-num\">{{ r.factor.earned }} → {{ r.proposal.to }}</b></span>\n <span class=\"vo-acts\">\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"apply(r)\">Apply</button>\n <button type=\"button\" class=\"vo-pill vo-ghost vo-sm\" (click)=\"drop(r)\">Not now</button>\n </span>\n </div>\n } @else {\n <span>{{ r.factor.detail ? r.factor.detail + ' ' : '' }}{{ lostText(r) }}</span>\n @if (r.factor.improvable) {\n <span class=\"vo-acts\">\n <button type=\"button\" class=\"vo-pill vo-soft vo-sm\" (click)=\"improve(r)\"><vo-icon name=\"spark\" size=\"xs\"></vo-icon>Improve</button>\n </span>\n }\n }\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './score-breakdown.css',\n})\nexport class ScoreBreakdownComponent implements AfterViewInit, OnDestroy {\n @Input({ required: true }) factors: ScoreFactor[] = [];\n @Input() title = 'Quality score';\n /** Last period's score, for the change beside the band word. */\n @Input() previous?: number;\n /** What the change is measured against (\"since last week\"). */\n @Input() since = 'since last week';\n /** The open rows, by key. Leave it out to let clicks open and close rows. */\n @Input() set open(value: string[] | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) this.opened = [...value];\n }\n @Input() defaultOpen: string[] = [];\n /** What the row says while the agent works on a proposal. */\n @Input() improvingLabel = 'Looking into it';\n\n /** Emitted when a row opens or closes (when uncontrolled). */\n @Output() openChange = new EventEmitter<string[]>();\n /** Called by Improve; return (or resolve) the agent's proposal. */\n @Output() improveRequest = new EventEmitter<{ factor: ScoreFactor; resolve: (p: ScoreProposal) => void }>();\n /** Called by Apply on a proposal; update the factor's earned and note. */\n @Output() applyProposal = new EventEmitter<{ factor: ScoreFactor; proposal: ScoreProposal }>();\n\n // exposed to the template\n rows: Row[] = [];\n hot = -1;\n weakest = 0;\n total = 0;\n drawn = false;\n shownRounded = 0;\n bandWord = '';\n delta: number | null = null;\n absDelta = 0;\n\n private opened: string[] = [];\n private controlled = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.opened = [...this.defaultOpen];\n this.total = this.factors.reduce((t, f) => t + f.earned, 0);\n this.weakest = this.factors.reduce(\n (m, f, i) => (f.earned / f.weight < this.factors[m].earned / this.factors[m].weight ? i : m),\n 0,\n );\n this.bandWord = band(this.total);\n this.delta = this.previous === undefined ? null : this.total - this.previous;\n this.absDelta = this.delta === null ? 0 : Math.abs(this.delta);\n\n // lay out the gauge: a half circle split by weight with a small gap\n let a = Math.PI;\n this.rows = this.factors.map((factor, index) => {\n const span = (factor.weight / 100) * Math.PI;\n const seg: [number, number] = [a + GAP / 2, a + span - GAP / 2];\n a += span;\n return {\n factor,\n index,\n color: PAL[index % PAL.length],\n seg,\n track: arc(seg[0], seg[1]),\n fillPath: '',\n barWidth: '0',\n proposal: null,\n };\n });\n this.cdr.detectChanges();\n\n if (this.reduced.reduce()) {\n this.shownRounded = this.total;\n this.drawn = true;\n this.rows.forEach((r) => this.fillTo(r, r.factor.earned / r.factor.weight));\n this.cdr.markForCheck();\n return;\n }\n\n // a moment after the gauge appears, the segments sweep in and the total counts up\n this.later(() => {\n this.drawn = true;\n this.count(this.total);\n this.rows.forEach((r, i) => this.sweep(r, i * 120));\n this.cdr.markForCheck();\n }, 280);\n }\n\n // --- gauge drawing ---------------------------------------------------------\n\n private fillTo(r: Row, p: number): void {\n const [a0, a1] = r.seg;\n r.fillPath = p > 0 ? arc(a0, a0 + (a1 - a0) * Math.min(1, p)) : '';\n r.barWidth = p * 100 + '%';\n }\n\n // eases one segment's fill up to its share over ~900ms, like the vanilla tween\n private sweep(r: Row, delay: number): void {\n const target = r.factor.earned / r.factor.weight;\n const dur = 900;\n this.later(() => {\n const t0 = performance.now();\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.fillTo(r, target * (1 - Math.pow(1 - p, 3)));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }, delay);\n }\n\n // eases the centre number up to the total over ~1000ms\n private count(target: number): void {\n const t0 = performance.now();\n const dur = 1000;\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.shownRounded = Math.round(target * (1 - Math.pow(1 - p, 3)));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n // --- template helpers ------------------------------------------------------\n\n valueText(): string {\n const base = `${this.total} of 100, ${band(this.total).toLowerCase()}`;\n if (this.delta === null) return base;\n return `${base}, ${this.delta >= 0 ? 'up' : 'down'} ${Math.abs(this.delta)} ${this.since}`;\n }\n\n rowLabel(r: Row): string {\n return `${r.factor.label}: ${r.factor.earned} of ${r.factor.weight} points${r.index === this.weakest ? ', weakest' : ''}. ${r.factor.note}`;\n }\n\n lostText(r: Row): string {\n const lost = r.factor.weight - r.factor.earned;\n const base = lost ? `Loses ${lost} of its ${r.factor.weight} points` : 'Full marks';\n return base + (r.index === this.weakest && lost ? ', the most of any factor for its weight.' : '.');\n }\n\n isOpen(key: string): boolean {\n return this.opened.includes(key);\n }\n\n toggle(key: string): void {\n const next = this.opened.includes(key) ? this.opened.filter((k) => k !== key) : [...this.opened, key];\n if (!this.controlled) this.opened = next;\n this.openChange.emit(next);\n }\n\n // --- hover highlight -------------------------------------------------------\n\n setHot(index: number): void {\n this.hot = index;\n this.cdr.markForCheck();\n }\n\n onPointGauge(e: PointerEvent, index: number): void {\n if (e.pointerType !== 'touch') this.setHot(index);\n }\n\n onPointRow(e: PointerEvent, index: number): void {\n if (e.pointerType !== 'touch') this.setHot(index);\n }\n\n onListLeave(e: Event): void {\n const el = e.currentTarget as HTMLElement;\n if (!el.contains(document.activeElement)) this.setHot(-1);\n }\n\n onListFocusOut(e: FocusEvent): void {\n const el = e.currentTarget as HTMLElement;\n if (!el.contains(e.relatedTarget as Node)) this.setHot(-1);\n }\n\n // --- improve / apply -------------------------------------------------------\n\n improve(r: Row): void {\n r.proposal = 'busy';\n this.cdr.markForCheck();\n this.improveRequest.emit({\n factor: r.factor,\n resolve: (p: ScoreProposal) => {\n r.proposal = p;\n this.cdr.markForCheck();\n },\n });\n }\n\n apply(r: Row): void {\n const p = r.proposal;\n if (!p || p === 'busy') return;\n r.proposal = null;\n this.applyProposal.emit({ factor: r.factor, proposal: p });\n this.cdr.markForCheck();\n }\n\n drop(r: Row): void {\n r.proposal = null;\n this.cdr.markForCheck();\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/segmented-control/segmented-control.component.ts\n//\n// Native Angular port of framework/react/segmented-control/SegmentedControl.tsx.\n// One choice from a few views or options, with a white knob that slides to the\n// picked one. As tabs the arrow keys move along and pick; Home/End jump to the\n// ends. As a radio group the arrow keys do the same. Inputs mirror the React props.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\n\n/** One choice in the control: its value plus its label. */\nexport interface SegmentOption {\n value: string;\n label: string;\n}\n\nlet sgcSeq = 0;\n\n@Component({\n selector: 'vo-segmented-control',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div\n #root\n data-vo=\"\"\n class=\"vo-sgc-seg\"\n [attr.role]=\"variant === 'tabs' ? 'tablist' : 'radiogroup'\"\n [attr.aria-label]=\"label\"\n (keydown)=\"onKey($event)\"\n >\n <span class=\"vo-sgc-k\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"\n [style.transition]=\"knobTransition\" aria-hidden=\"true\"></span>\n @for (o of options; track o.value) {\n <button\n type=\"button\"\n [attr.data-v]=\"o.value\"\n [attr.data-on]=\"o.value === current\"\n [id]=\"base + '-' + o.value\"\n [attr.tabindex]=\"o.value === current ? 0 : -1\"\n [attr.role]=\"variant === 'tabs' ? 'tab' : 'radio'\"\n [attr.aria-selected]=\"variant === 'tabs' ? (o.value === current) : null\"\n [attr.aria-controls]=\"variant === 'tabs' ? base + '-panel' : null\"\n [attr.aria-checked]=\"variant === 'radio' ? (o.value === current) : null\"\n (click)=\"select(o.value)\"\n >\n {{ o.label }}\n </button>\n }\n </div>\n `,\n styleUrl: './segmented-control.css',\n})\nexport class SegmentedControlComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The choices, each with a value and a label. */\n @Input() options: SegmentOption[] = [];\n /** Controlled selected value. Leave out for uncontrolled (uses defaultValue). */\n @Input() value?: string;\n /** Initial value when uncontrolled. Defaults to the first option's value. */\n @Input() defaultValue?: string;\n /** Names the group for screen readers, like \"View\". */\n @Input() label!: string;\n /** `tabs` (default) when it switches a panel, `radio` when it sets an option.\n * Exposed as the `as` attribute (Angular template syntax reserves `as`, so the\n * field itself is named `variant`). */\n @Input('as') variant: 'tabs' | 'radio' = 'tabs';\n /** Ties the tabs to their panel. Defaults to a generated id. */\n @Input() id?: string;\n\n /** Emitted when the selected value changes. */\n @Output() valueChange = new EventEmitter<string>();\n\n @ViewChild('root') root!: ElementRef<HTMLDivElement>;\n\n /** The value shown now (controlled by `value`, else held internally). */\n current = '';\n base = 'vo-sgc' + sgcSeq++;\n\n knobLeft = 0;\n knobWidth = 0;\n // no slide on the first paint; the knob just takes the active button's place\n knobTransition = 'none';\n private first = true;\n\n private ro?: ResizeObserver;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (this.id) this.base = this.id;\n if (changes['value'] && this.value !== undefined) {\n this.current = this.value;\n queueMicrotask(() => this.place());\n }\n if (changes['options'] && !this.current) {\n this.current = this.defaultValue ?? this.options[0]?.value ?? '';\n }\n }\n\n ngAfterViewInit(): void {\n if (this.id) this.base = this.id;\n if (!this.current) this.current = this.value ?? this.defaultValue ?? this.options[0]?.value ?? '';\n this.place();\n if (typeof ResizeObserver === 'function') {\n this.ro = new ResizeObserver(() => this.place());\n this.ro.observe(this.root.nativeElement);\n }\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n }\n\n /** The knob takes the picked button's place and width. */\n private place(): void {\n const el = this.root?.nativeElement;\n const b = el?.querySelector<HTMLElement>('[data-on=\"true\"]');\n if (!b) return;\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n if (this.first) {\n this.knobTransition = 'none';\n requestAnimationFrame(() => {\n this.first = false;\n this.knobTransition = '';\n });\n }\n }\n\n select(v: string): void {\n if (v === this.current) return;\n // controlled: tell the parent and wait for the value input to come back\n if (this.value === undefined) {\n this.current = v;\n queueMicrotask(() => this.place());\n }\n this.valueChange.emit(v);\n }\n\n /** Arrow keys move along and pick; Home/End jump to the ends. */\n onKey(e: KeyboardEvent): void {\n const i = this.options.findIndex((o) => o.value === this.current);\n const map: Record<string, number> = {\n ArrowRight: i + 1,\n ArrowLeft: i - 1,\n Home: 0,\n End: this.options.length - 1,\n };\n const to = map[e.key];\n if (to === undefined) return;\n e.preventDefault();\n const o = this.options[(to + this.options.length) % this.options.length];\n this.select(o.value);\n this.root.nativeElement\n .querySelector<HTMLElement>(`[data-v=\"${CSS.escape(o.value)}\"]`)\n ?.focus();\n }\n}\n","// framework/angular/source-stack/source-stack.component.ts\n//\n// Native Angular port of framework/react/source-stack/SourceStack.tsx.\n// An answer with its sources folded into one quiet pill: open it to see each\n// source, filter them by kind, and how much each one counted. Inputs mirror the\n// React props; the `onOpen` callback on a source and the controllable\n// open/filter state become @Output EventEmitters. The staggered entrance, the\n// fold toggle and the one-time auto-open (from source-stack.js) are ported here;\n// reduced motion is respected via the shared ReducedMotionService.\n//\n// Icons: uses `chev-d` (pill caret) and `ext` (the per-row open button) — both\n// are in the Angular icon set, so no substitution was needed.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One source the answer draws on, drawn as a row when the stack is open. */\nexport interface StackSource {\n /** What kind of source it is. The filter chips pick by this, like 'web', 'file' or 'figma'. */\n kind: string;\n title: string;\n /** Where it came from, like \"baymard.com\" or \"Drive\". */\n host: string;\n /** 0 to 1, drawn as a small bar. */\n relevance: number;\n /** One to three letters in the favicon square, like \"B\" or \"CSV\". */\n mark: string;\n /** The favicon colour, any CSS colour, like '#635bff' or 'var(--vo-pl)'. */\n color: string;\n /** Adds an open button that shows on hover. */\n onOpen?: () => void;\n}\n\n/** A filter chip above the list: 'all' or a source kind. */\nexport interface SourceFilter {\n /** 'all', or a source kind. */\n value: string;\n label: string;\n}\n\nconst FILTERS: SourceFilter[] = [\n { value: 'all', label: 'All' },\n { value: 'web', label: 'Web' },\n { value: 'file', label: 'Files' },\n { value: 'figma', label: 'Figma' },\n];\n\n@Component({\n selector: 'vo-source-stack',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-ssx\" [class]=\"className\">\n @if (message !== undefined) {\n <p class=\"vo-msg\">{{ message }}</p>\n }\n <button\n type=\"button\"\n class=\"vo-ssx-pill\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggle()\"\n >\n <span class=\"vo-ssx-ics\">\n @for (s of sources.slice(0, 4); track $index) {\n <span [style.background]=\"s.color\">{{ s.mark[0] }}</span>\n }\n </span>\n <span class=\"vo-ssx-l\">{{ sources.length }} {{ sources.length === 1 ? 'source' : 'sources' }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n <div\n class=\"vo-fold vo-ssx-box\"\n [class.vo-shut]=\"!isOpen\"\n [attr.inert]=\"isOpen ? null : ''\"\n [attr.aria-hidden]=\"!isOpen\"\n >\n <div>\n <div class=\"vo-ssx-in\">\n <div class=\"vo-ssx-fl\">\n @for (x of filters; track x.value) {\n <button\n type=\"button\"\n class=\"vo-chip vo-sm\"\n [class.vo-on]=\"x.value === activeFilter\"\n [attr.aria-pressed]=\"x.value === activeFilter\"\n (click)=\"pick(x.value)\"\n >{{ x.label }}</button>\n }\n </div>\n <div class=\"vo-ssx-list\">\n @for (s of items; track s.title + $index) {\n <div class=\"vo-ssx-s vo-enter\" [style.animation-delay.ms]=\"$index * 40\">\n <span\n class=\"vo-fv\"\n [style.background]=\"'color-mix(in srgb,' + s.color + ' 14%,transparent)'\"\n [style.color]=\"s.color\"\n >{{ s.mark }}</span>\n <span class=\"vo-t\">{{ s.title }}<span class=\"vo-h\"> · {{ s.host }}</span></span>\n <span\n class=\"vo-rel\"\n role=\"meter\"\n aria-label=\"Relevance\"\n [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"100\"\n [attr.aria-valuenow]=\"pct(s)\"\n [attr.title]=\"'Relevance ' + pct(s) + '%'\"\n ><i [style.width.%]=\"pct(s)\"></i></span>\n @if (s.onOpen) {\n <button\n type=\"button\"\n class=\"vo-ib\"\n aria-label=\"Open source\"\n title=\"Open\"\n (click)=\"s.onOpen!()\"\n ><vo-icon name=\"ext\" size=\"xs\"></vo-icon></button>\n }\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrl: './source-stack.css',\n})\nexport class SourceStackComponent implements AfterViewInit, OnDestroy {\n /** The answer the sources back up, shown above the pill. */\n @Input() message?: string;\n @Input() sources: StackSource[] = [];\n /** The chips above the list. Defaults to All, Web, Files and Figma. */\n @Input() filters: SourceFilter[] = FILTERS;\n /** The chosen filter. Leave it out to let the chips switch it. */\n @Input() filter?: string;\n @Input() defaultFilter = 'all';\n /** Whether the list is open. Leave it out to let the pill toggle it. */\n @Input() open?: boolean;\n @Input() defaultOpen = false;\n @Input() className?: string;\n\n @Output() filterChange = new EventEmitter<string>();\n @Output() openChange = new EventEmitter<boolean>();\n\n /** Internal open state when `open` is not controlled. */\n private innerOpen = false;\n /** Internal filter when `filter` is not controlled. */\n private innerFilter?: string;\n /** Opens the sources once on its own, unless the viewer takes over first. */\n private autoTimer?: ReturnType<typeof setTimeout>;\n private touched = false;\n\n constructor(private readonly reduced: ReducedMotionService) {\n this.innerOpen = this.defaultOpen;\n }\n\n get isOpen(): boolean {\n return this.open ?? this.innerOpen;\n }\n\n get activeFilter(): string {\n return this.filter ?? this.innerFilter ?? this.defaultFilter;\n }\n\n get items(): StackSource[] {\n const f = this.activeFilter;\n return this.sources.filter((s) => f === 'all' || s.kind === f);\n }\n\n pct(s: StackSource): number {\n return Math.round(Math.max(0, Math.min(1, s.relevance)) * 100);\n }\n\n toggle(): void {\n this.touched = true;\n const next = !this.isOpen;\n this.innerOpen = next;\n this.openChange.emit(next);\n }\n\n pick(value: string): void {\n this.innerFilter = value;\n this.filterChange.emit(value);\n }\n\n ngAfterViewInit(): void {\n // the preview opens the sources once on its own, unless you take over first\n if (this.reduced.reduce()) return;\n this.autoTimer = setTimeout(() => {\n if (!this.touched && !this.isOpen) this.toggle();\n }, 1100);\n }\n\n ngOnDestroy(): void {\n if (this.autoTimer) clearTimeout(this.autoTimer);\n }\n}\n","// framework/angular/stat-cards/stat-cards.component.ts\n//\n// Native Angular port of framework/react/stat-cards/StatCards.tsx.\n// A row of KPI cards: a large rolling number, a percent change (green >=0,\n// red < 0), and a sparkline (a small line chart of `points`). A period switch\n// re-rolls every number and redraws every line. Inputs mirror the React props;\n// the number roll, the sparkline draw-in and the period switch are ported from\n// the vanilla JS (stat-cards.js).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One period's figures for a card. */\nexport interface StatCardsValue {\n /** The number in large type, which rolls to it. */\n value: number;\n /** Change against the period before, in percent. Green from 0, red below. */\n change: number;\n /** The sparkline, oldest first. */\n points: number[];\n}\n\n/** One card. */\nexport interface StatCardsStat {\n /** Identifies the card. Defaults to its label. */\n key?: string;\n icon: VoIconName;\n /** Like \"Agent runs\". */\n label: string;\n /** One entry per period, in the same order as `periods`. */\n values: StatCardsValue[];\n /** Before the number, like \"$\". */\n prefix?: string;\n /** After the number, like \"h\". */\n suffix?: string;\n /** The sparkline colour. Defaults to the chart palette (--vo-c1..c6). */\n color?: string;\n}\n\n/** One entry in the period switch. */\nexport interface StatCardsPeriod {\n /** The switch label, like \"30 days\". */\n label: string;\n /** Shown when you hover a card, like \"vs previous 30 days\". */\n compare?: string;\n}\n\nconst FLAT = 'M0 30 L100 30';\n\n/** Internal per-card render state. */\ninterface CardView {\n stat: StatCardsStat;\n index: number;\n shown: number;\n changeText: string;\n changeClass: string;\n changeOut: boolean;\n d: string;\n color: string;\n enterDelay: number;\n sparkDelay: number;\n sparkDrawn: boolean;\n}\n\n@Component({\n selector: 'vo-stat-cards',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-scx\">\n @if (periods.length > 1) {\n <div class=\"vo-scx-h\">\n <div class=\"vo-seg2 vo-scx-sg\" role=\"group\" aria-label=\"Period\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (p of periods; track $index) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"$index === at\"\n (click)=\"selectPeriod($index)\"\n >{{ p.label }}</button>\n }\n </div>\n </div>\n }\n <div class=\"vo-scx-grid\">\n @for (c of cards; track c.stat.key ?? c.stat.label) {\n <div\n class=\"vo-scx-c vo-panel vo-enter\"\n [style.animationDelay.ms]=\"c.enterDelay\"\n [attr.title]=\"compareFor()\"\n >\n <span class=\"vo-scx-k\">\n <span class=\"vo-ic\"><vo-icon [name]=\"c.stat.icon\" size=\"xs\"></vo-icon></span>{{ c.stat.label }}\n </span>\n <div class=\"vo-scx-v\">\n <b class=\"vo-num\">{{ format(c.stat, c.shown) }}</b>\n <span class=\"vo-sw vo-scx-d vo-num {{ c.changeClass }}\" [class.vo-out]=\"c.changeOut\">{{ c.changeText }}</span>\n </div>\n <div class=\"vo-scx-sp\">\n <svg\n viewBox=\"0 0 100 30\"\n preserveAspectRatio=\"none\"\n aria-hidden=\"true\"\n [class.vo-scx-draw]=\"sparkAnimate && c.sparkDrawn\"\n [style.animationDelay.ms]=\"c.sparkDelay\"\n >\n <path [attr.stroke]=\"c.color\" [attr.d]=\"c.d\"></path>\n </svg>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './stat-cards.css',\n})\nexport class StatCardsComponent implements AfterViewInit, OnDestroy {\n @Input({ required: true }) stats: StatCardsStat[] = [];\n @Input({ required: true }) periods: StatCardsPeriod[] = [];\n /** The period on show, by index. Leave it out to let the switch pick it. */\n @Input() set period(value: number | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.at) {\n this.at = value;\n if (this.ready) {\n this.placeKnob();\n this.draw(value);\n }\n }\n }\n @Input() defaultPeriod = 0;\n /** The values at the bottom and top of every sparkline. Defaults to each card's own range. */\n @Input() sparkRange?: [number, number];\n\n @Output() periodChange = new EventEmitter<number>();\n\n at = 0;\n cards: CardView[] = [];\n knobLeft = 0;\n knobWidth = 0;\n sparkAnimate = false;\n\n private controlled = false;\n private ready = false;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n compareFor(): string | null {\n return this.periods[this.at]?.compare ?? null;\n }\n\n format(stat: StatCardsStat, value: number): string {\n return (stat.prefix ?? '') + Math.round(value).toLocaleString('en-US') + (stat.suffix ?? '');\n }\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.at = this.defaultPeriod;\n this.sparkAnimate = !this.reduced.reduce();\n this.cards = this.stats.map((stat, index) => ({\n stat,\n index,\n shown: 0,\n changeText: '',\n changeClass: '',\n changeOut: false,\n d: FLAT,\n color: stat.color ?? `var(--vo-c${(index % 6) + 1})`,\n enterDelay: index * 70,\n sparkDelay: 300 + index * 70,\n sparkDrawn: false,\n }));\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n // the numbers roll up and the lines draw a moment after the cards come in\n this.later(() => this.draw(this.at), 200);\n }\n\n selectPeriod(index: number): void {\n if (!this.controlled) {\n this.at = index;\n this.placeKnob();\n this.draw(index);\n }\n this.periodChange.emit(index);\n }\n\n private draw(period: number): void {\n for (const card of this.cards) {\n const v = card.stat.values[Math.min(period, card.stat.values.length - 1)];\n this.roll(card, v.value);\n // the change chip blurs out and back in when it changes\n card.changeOut = true;\n this.later(() => {\n card.changeText = (v.change >= 0 ? '+' : '') + v.change + '%';\n card.changeClass = v.change >= 0 ? 'vo-tag vo-ok vo-up' : 'vo-tag vo-bad vo-dn';\n card.changeOut = false;\n this.cdr.markForCheck();\n }, this.reduced.reduce() ? 0 : 170);\n card.d = this.sparklinePath(card.stat, v);\n card.sparkDrawn = true;\n }\n this.cdr.markForCheck();\n }\n\n private sparklinePath(stat: StatCardsStat, v: StatCardsValue): string {\n const all = stat.values.flatMap((x) => x.points);\n const [lo, hi] = this.sparkRange ?? [Math.min(...all), Math.max(...all)];\n const span = hi - lo || 1;\n return v.points\n .map((y, k) => {\n const x = ((k / Math.max(1, v.points.length - 1)) * 100).toFixed(1);\n const yy = (29 - ((y - lo) / span) * 28).toFixed(1);\n return `${k === 0 ? 'M' : 'L'}${x} ${yy}`;\n })\n .join(' ');\n }\n\n // eases a number to `target` over 900ms, so the counter rolls instead of jumping\n private roll(card: CardView, target: number): void {\n const from = card.shown;\n if (this.reduced.reduce()) {\n card.shown = target;\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const dur = 900;\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n card.shown = from + (target - from) * (1 - Math.pow(1 - p, 3));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-scx-sg button');\n const b = btns[this.at];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/status-pill/status-pill.component.ts\n//\n// Native Angular port of framework/react/status-pill/StatusPill.tsx.\n// One live line for what the agent is doing right now. It fades between states,\n// resizes to fit them, and the `bar` variant is taller with a progress track.\n// Inputs mirror the React props; the morph + fade behavior is ported from the\n// vanilla JS (status-pill.js).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Picks the glyph and colour. thinking, reading and working shimmer while they run. */\nexport type StatusPillState =\n | 'idle' | 'thinking' | 'reading' | 'working' | 'waiting' | 'done';\n\n/** A file chip after the label, like { name: 'PricingCard.tsx', type: 'tsx' }. */\nexport interface StatusPillFile {\n name: string;\n type?: string;\n}\n\n/** A button at the end, for when the agent needs the person. */\nexport interface StatusPillAction {\n label: string;\n onClick: () => void;\n}\n\nconst LIVE: StatusPillState[] = ['thinking', 'reading', 'working'];\nconst FT: Record<string, string> = {\n tsx: 'vo-re', jsx: 'vo-re', csv: 'vo-csv', pdf: 'vo-pdf', fig: 'vo-fg',\n};\n\n@Component({\n selector: 'vo-status-pill',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-spl\"\n [class.vo-bar]=\"shape === 'bar'\"\n [class.vo-mo]=\"morphing\"\n >\n <div\n class=\"vo-spl-pill\"\n [style.width.px]=\"width\"\n aria-live=\"polite\"\n >\n <div\n #box\n class=\"vo-spl-in\"\n [class.vo-out]=\"fading || morphing\"\n >\n <!-- glyph per state; thinking/reading/working animate -->\n <span\n class=\"vo-g\"\n [style.color]=\"glyphColor\"\n >\n @switch (viewState) {\n @case ('thinking') {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n }\n @case ('reading') {\n <span class=\"vo-radar\" aria-hidden=\"true\"></span>\n }\n @case ('working') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('done') {\n <vo-icon name=\"ok\"></vo-icon>\n }\n @default {\n <span class=\"vo-dot\" [style.color]=\"dotColor\" aria-hidden=\"true\"></span>\n }\n }\n </span>\n <span [class]=\"labelClass\">{{ view.label }}</span>\n @if (view.file) {\n <span class=\"vo-fchip\" style=\"height:24px\">\n @if (view.file.type) {\n <span class=\"vo-ft\" [class]=\"ftClass(view.file.type)\">{{ view.file.type.toUpperCase() }}</span>\n }\n {{ view.file.name }}\n </span>\n }\n @if (view.meta) {\n <span class=\"vo-m\">{{ view.meta }}</span>\n }\n @if (view.action) {\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm\" (click)=\"view.action.onClick()\">{{ view.action.label }}</button>\n } @else {\n <span class=\"vo-end\"></span>\n }\n </div>\n <div class=\"vo-spl-track\"><div class=\"vo-spl-fill\" [style.width.%]=\"clampedProgress\"></div></div>\n </div>\n </div>\n `,\n styleUrl: './status-pill.css',\n})\nexport class StatusPillComponent implements AfterViewInit, OnChanges, OnDestroy {\n @Input() state: StatusPillState = 'idle';\n /** What the agent is doing, in a few words. */\n @Input() label = '';\n /** Quiet detail after the label, like \"2 of 4\". Changing only this does not restart the pill. */\n @Input() meta?: string;\n @Input() file?: StatusPillFile;\n @Input() action?: StatusPillAction;\n /** 0 to 100, drawn as a track along the bottom of the bar variant. */\n @Input() progress = 0;\n /** pill hugs its content, bar is taller and leaves room for the progress track. */\n @Input() variant: 'pill' | 'bar' = 'pill';\n\n @ViewChild('box') box?: ElementRef<HTMLDivElement>;\n\n /** The snapshot currently shown (the old line while fading out). */\n view: {\n state: StatusPillState;\n label: string;\n meta?: string;\n file?: StatusPillFile;\n action?: StatusPillAction;\n } = { state: 'idle', label: '' };\n\n fading = false;\n morphing = false;\n shape: 'pill' | 'bar' = 'pill';\n width?: number;\n\n private prevKey = '';\n private latest = this.view;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private viewReady = false;\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n ) {}\n\n get viewState(): StatusPillState {\n return this.view.state;\n }\n\n get glyphColor(): string | null {\n switch (this.view.state) {\n case 'thinking':\n case 'reading':\n case 'working':\n return 'var(--vo-fg)';\n case 'waiting':\n return 'var(--vo-warn-mark)';\n case 'done':\n return 'var(--vo-ok)';\n default:\n return null;\n }\n }\n\n get dotColor(): string | null {\n return this.view.state === 'idle' ? 'var(--vo-faint)' : null;\n }\n\n get labelClass(): string {\n if (LIVE.includes(this.view.state)) return 'vo-shim';\n if (this.view.state === 'idle') return 'vo-fg2';\n return '';\n }\n\n get clampedProgress(): number {\n return Math.max(0, Math.min(100, this.progress));\n }\n\n ftClass(type: string): string {\n return FT[type] ?? '';\n }\n\n private key(v: { state: StatusPillState; label: string; file?: StatusPillFile; action?: StatusPillAction }): string {\n return [v.state ?? 'idle', v.label, v.file?.name ?? '', v.action?.label ?? ''].join('\\u0000');\n }\n\n private snapshot() {\n return {\n state: this.state ?? 'idle',\n label: this.label,\n meta: this.meta,\n file: this.file,\n action: this.action,\n };\n }\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n this.view = this.snapshot();\n this.latest = this.view;\n this.prevKey = this.key(this.view);\n this.shape = this.variant;\n this.fit();\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const next = this.snapshot();\n this.latest = next;\n if (!this.viewReady) {\n this.view = next;\n return;\n }\n\n // a new state, label, file or action fades the old line out before the new\n // one comes in; changes to meta, progress or the action handler show at once\n const nextKey = this.key(next);\n if (nextKey !== this.prevKey) {\n this.fading = true;\n const delay = this.reduced.reduce() ? 0 : 180;\n this.later(() => {\n this.view = this.latest;\n this.prevKey = this.key(this.view);\n this.fading = false;\n this.fit();\n this.cdr.markForCheck();\n }, delay);\n } else if (!this.fading) {\n // meta / progress only: refresh the shown snapshot in place\n this.view = next;\n }\n\n if (changes['variant'] && !changes['variant'].firstChange) {\n this.morphTo(this.variant);\n }\n }\n\n // the switch morphs in three beats, so the words and the shape never move at\n // once: the line fades out with its track, the shape changes while it is\n // empty, then the new layout fades in with the track under it\n private morphTo(variant: 'pill' | 'bar'): void {\n if (variant === this.shape) return;\n if (this.reduced.reduce()) {\n this.shape = variant;\n this.fit();\n return;\n }\n this.morphing = true;\n this.later(() => {\n this.shape = variant;\n this.fit();\n this.cdr.markForCheck();\n }, 170);\n this.later(() => {\n this.morphing = false;\n this.cdr.markForCheck();\n }, 430);\n }\n\n // the pill always hugs its content; the bar keeps a little extra room for its track\n private fit(): void {\n const el = this.box?.nativeElement;\n if (!el) return;\n el.style.width = 'max-content';\n const w = el.scrollWidth;\n el.style.width = '';\n this.width = this.shape === 'bar' ? Math.max(w + 24, 300) : w;\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.timers = [];\n }\n}\n","// framework/angular/steering/steering.component.ts\n//\n// Native Angular port of framework/react/steering/Steering.tsx.\n// A run you can steer while it works: its steps, what you told it and what it\n// said back, and a message box. A message waits for the step in progress and\n// applies from the next one; you decide what happens to it through `messages`.\n// Inputs mirror the React props; React callbacks become @Output() EventEmitters.\n// The `value` input is uncontrollable — leave it undefined and the box keeps its\n// own draft (matching React's useControllable).\n//\n// Icon note: the React/Vanilla source uses an \"up\" arrow glyph (#i-up) for the\n// send button. The Angular icon set has no `up`, so the closest upward glyph\n// `chev-u` is substituted. All other glyphs (ok, check, alert, spark) map 1:1.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Where a step is in the run. */\nexport type SteerStepStatus = 'queued' | 'running' | 'done';\n\n/** One step in the run. */\nexport interface SteerStep {\n id: string;\n /** Like \"Update the Pro card\". */\n title: string;\n /** What it is doing now, or what it did. It crossfades when it changes. */\n detail?: string;\n status: SteerStepStatus;\n /** Marks a step that a message of yours added, with a \"From you\" tag. */\n fromYou?: boolean;\n}\n\n/** A button under the agent's message, like Leave it or Redo the Pro card. */\nexport interface SteerAction {\n label: string;\n onClick: () => void;\n}\n\n/** A line in the log: what you sent, or what the agent said back. */\nexport interface SteerMessage {\n id: string;\n from: 'you' | 'agent';\n text: string;\n /** For yours: `queued` while it waits for the step in progress, `applied` once the agent has taken it up. */\n state?: 'queued' | 'applied';\n /** For the agent's: an amber heads-up, for when your message changes work already done. */\n warn?: boolean;\n /** Buttons under the agent's message, the last one filled, like Leave it and Redo the Pro card. */\n actions?: SteerAction[];\n /** Takes the buttons' place once you've answered, like \"Added a step to redo the Pro card\". The amber goes too. */\n answer?: string;\n}\n\nconst clock = (s: number): string =>\n Math.floor(s / 60) + ':' + String(s % 60).padStart(2, '0');\n\n@Component({\n selector: 'vo-steering',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-ste vo-panel\" [class]=\"className\">\n <div class=\"vo-ste-h\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-ste-st\">\n <span aria-live=\"polite\">{{ line }}</span> ·\n <span class=\"vo-num\">{{ clockText }}</span>\n </span>\n </div>\n\n <ol class=\"vo-ste-steps\" aria-label=\"Steps\">\n @for (s of steps; track s.id) {\n <li\n class=\"vo-ste-s\"\n [class.vo-run]=\"s.status === 'running'\"\n [class.vo-queued]=\"s.status === 'queued'\"\n [class.vo-done]=\"s.status === 'done'\"\n [class.vo-enter]=\"s.fromYou\"\n >\n <span class=\"vo-ste-g\" aria-hidden=\"true\">\n @if (s.status === 'running') {\n <span class=\"vo-spin\"></span>\n } @else if (s.status === 'done') {\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon>\n } @else {\n <span class=\"vo-dot\"></span>\n }\n </span>\n <span class=\"vo-ste-t\">\n <b>{{ s.title }}</b>\n @if (s.detail) {\n <span>{{ s.detail }}</span>\n }\n </span>\n @if (s.fromYou) {\n <span class=\"vo-tag vo-b\">From you</span>\n }\n </li>\n }\n </ol>\n\n <div class=\"vo-ste-log\" aria-live=\"polite\">\n @for (m of messages; track m.id) {\n @if (m.from === 'you') {\n <div class=\"vo-ste-me vo-enter\">\n <p>{{ m.text }}</p>\n <span class=\"vo-ste-q\" [class.vo-enter]=\"m.state === 'applied'\">\n @if (m.state === 'applied') {\n <vo-icon name=\"check\" size=\"xs\"></vo-icon>Applied\n } @else {\n <span class=\"vo-spin\"></span>Applies after this step\n }\n </span>\n </div>\n } @else {\n <div class=\"vo-ste-ag vo-enter\" [class.vo-warn]=\"m.warn && !m.answer\">\n <vo-icon [name]=\"m.warn && !m.answer ? 'alert' : 'spark'\" size=\"xs\"></vo-icon>\n <div class=\"vo-t\">\n <p>{{ m.text }}</p>\n @if (m.answer) {\n <span class=\"vo-muted\">{{ m.answer }}</span>\n } @else if (m.actions && m.actions.length) {\n <div class=\"vo-ste-acts\">\n @for (a of m.actions; track a.label; let i = $index) {\n <button\n type=\"button\"\n class=\"vo-pill vo-sm\"\n [class.vo-primary]=\"i === m.actions.length - 1\"\n [class.vo-ghost]=\"i !== m.actions.length - 1\"\n (click)=\"a.onClick()\"\n >\n {{ a.label }}\n </button>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n @if (showSummary) {\n <div class=\"vo-ste-sum vo-enter\">\n <vo-icon name=\"ok\" size=\"xs\"></vo-icon><span>{{ summaryText }}</span>\n </div>\n }\n </div>\n\n <form class=\"vo-ste-box\" (submit)=\"send($event)\">\n <input\n [value]=\"draft\"\n (input)=\"onInput($event)\"\n [disabled]=\"finished\"\n [placeholder]=\"placeholderText\"\n aria-label=\"Message the agent\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n />\n <button type=\"submit\" class=\"vo-ste-go\" aria-label=\"Send\" [disabled]=\"finished || !draft.trim()\">\n <vo-icon name=\"chev-u\" size=\"xs\"></vo-icon>\n </button>\n </form>\n </div>\n `,\n styleUrl: './steering.css',\n})\nexport class SteeringComponent implements OnChanges {\n /** The run's goal, like \"Redesign the pricing page\". */\n @Input({ required: true }) title!: string;\n @Input() steps: SteerStep[] = [];\n /** What you sent and what the agent said back, in order. */\n @Input() messages: SteerMessage[] = [];\n /** Emitted with the text when a message is sent. Add it to `messages` as `queued`, and mark it `applied` when it's taken up. */\n @Output() sendMessage = new EventEmitter<string>();\n\n /** The message being written. Leave it out (undefined) to let the box keep it. */\n @Input() value?: string;\n @Input() defaultValue = '';\n @Output() valueChange = new EventEmitter<string>();\n\n /** Defaults to \"Steer the agent while it works\", and \"The run has finished\" once every step is done. */\n @Input() placeholder?: string;\n /** The line under the title. Defaults to \"Step 2 of 4\", or Done. */\n @Input() status?: string;\n /** Seconds to show as m:ss. Leave it out to let the clock count until every step is done. */\n @Input() seconds?: number;\n /** Shown once every step is done. Defaults to \"Done in 0:14 · 1 change from you\"; false hides it. */\n @Input() summary?: string | false;\n\n @Input() className = '';\n\n private readonly motion = inject(ReducedMotionService);\n\n // uncontrolled draft (used when the matching Input is undefined)\n private draftState = '';\n // the clock counts until every step is done, unless `seconds` is given\n private counted = 0;\n private countTimer?: ReturnType<typeof setInterval>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultValue'] && this.draftState === '') {\n this.draftState = this.defaultValue;\n }\n if (changes['seconds'] || changes['steps']) this.syncCounter();\n }\n\n get draft(): string {\n return this.value ?? this.draftState;\n }\n\n get finished(): boolean {\n return this.steps.length > 0 && this.steps.every((s) => s.status === 'done');\n }\n\n private get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get clockText(): string {\n return clock(this.secs);\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n if (this.finished) return 'Done';\n const at = this.steps.findIndex((s) => s.status === 'running');\n const i = at < 0 ? this.steps.filter((s) => s.status === 'done').length : at;\n return `Step ${i + 1} of ${this.steps.length}`;\n }\n\n private get mine(): number {\n return this.messages.filter((m) => m.from === 'you').length;\n }\n\n get summaryText(): string {\n if (this.summary === undefined) {\n const n = this.mine;\n return `Done in ${clock(this.secs)}${n ? ` · ${n} change${n > 1 ? 's' : ''} from you` : ''}`;\n }\n return this.summary === false ? '' : this.summary;\n }\n\n get showSummary(): boolean {\n return this.finished && this.summary !== false;\n }\n\n get placeholderText(): string {\n return this.placeholder ?? (this.finished ? 'The run has finished' : 'Steer the agent while it works');\n }\n\n onInput(e: Event): void {\n const v = (e.target as HTMLInputElement).value;\n if (this.value === undefined) this.draftState = v;\n this.valueChange.emit(v);\n }\n\n send(e: Event): void {\n e.preventDefault();\n const t = this.draft.trim();\n if (!t || this.finished) return;\n this.sendMessage.emit(t);\n if (this.value === undefined) this.draftState = '';\n this.valueChange.emit('');\n }\n\n // the clock ticks until every step is done; reduced motion still counts, it\n // just has no entrance animations elsewhere to suppress\n private syncCounter(): void {\n const shouldCount = this.seconds === undefined && !this.finished;\n if (shouldCount && !this.countTimer) {\n this.countTimer = setInterval(() => (this.counted += 1), 1000);\n } else if (!shouldCount && this.countTimer) {\n clearInterval(this.countTimer);\n this.countTimer = undefined;\n }\n }\n}\n","// framework/angular/step-loader/step-loader.component.ts\n//\n// Native Angular port of framework/react/step-loader/StepLoader.tsx.\n// Named steps with a progress track and a loader glyph beside the running step.\n// Click the row to expand the full list of steps. Inputs mirror the React props.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { VoIconComponent } from '../core/icon.component';\n\n/** One named step. */\nexport interface Step {\n /** Shown while the step runs, like \"Reading Figma frames\". */\n label: string;\n /** Shown once it is done, like \"Read 4 frames\". Falls back to label. */\n done?: string;\n}\n\n/** The loader glyph beside the running step. */\nexport type StepLoaderGlyph = 'radar' | 'dots' | 'ring' | 'bars';\n\n@Component({\n selector: 'vo-step-loader',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent, NgTemplateOutlet],\n template: `\n <div data-vo=\"\" class=\"vo-stl\">\n <button type=\"button\" class=\"vo-stl-row\" [attr.aria-expanded]=\"isOpen\" (click)=\"toggle()\">\n <span class=\"vo-stl-g\">\n @if (allDone) {\n <span style=\"color:var(--vo-ok);display:grid\"><vo-icon name=\"ok\"></vo-icon></span>\n } @else {\n <ng-container [ngTemplateOutlet]=\"glyph\"></ng-container>\n }\n </span>\n <span class=\"vo-stl-t\">\n <span class=\"vo-stl-lab\" [class.vo-shim]=\"!allDone\">{{ allDone ? doneLabel : steps[at]?.label }}</span>\n </span>\n <span class=\"vo-stl-n vo-num\">{{ (allDone ? n : at + 1) }}/{{ n }}</span>\n <vo-icon name=\"chev-d\" size=\"xs\" class=\"vo-stl-chev\"></vo-icon>\n </button>\n\n <div class=\"vo-stl-track\" role=\"progressbar\" [attr.aria-valuemin]=\"0\"\n [attr.aria-valuemax]=\"n\" [attr.aria-valuenow]=\"allDone ? n : at\">\n @for (s of steps; track $index) {\n <i [class.vo-on]=\"allDone || $index < current\"\n [class.vo-run]=\"!allDone && $index === current\"></i>\n }\n </div>\n\n <div class=\"vo-fold vo-stl-fold\" [class.vo-shut]=\"!isOpen\" [attr.inert]=\"!isOpen ? '' : null\"\n [attr.aria-hidden]=\"!isOpen\">\n <div>\n <ol class=\"vo-stl-list\">\n @for (s of steps; track $index) {\n <li [class.vo-done]=\"allDone || $index < current\"\n [class.vo-run]=\"!allDone && $index === current\">\n <span class=\"vo-g\">\n @if (allDone || $index < current) {\n <span style=\"color:var(--vo-ok);display:grid\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n } @else if ($index === current) {\n <ng-container [ngTemplateOutlet]=\"glyph\"></ng-container>\n } @else {\n <span class=\"vo-dot\" style=\"color:var(--vo-faint)\" aria-hidden=\"true\"></span>\n }\n </span>\n {{ (allDone || $index < current) ? (s.done ?? s.label) : s.label }}\n </li>\n }\n </ol>\n </div>\n </div>\n </div>\n\n <!-- the loader glyph for the chosen kind -->\n <ng-template #glyph>\n @switch (loader) {\n @case ('dots') {\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n }\n @case ('ring') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('bars') {\n <span class=\"vo-bars3\" aria-hidden=\"true\"><i></i><i></i><i></i></span>\n }\n @default {\n <span class=\"vo-radar\" aria-hidden=\"true\"></span>\n }\n }\n </ng-template>\n `,\n styleUrl: './step-loader.css',\n})\nexport class StepLoaderComponent implements OnChanges {\n /** The named steps. */\n @Input() steps: Step[] = [];\n /** Index of the step running now. steps.length (or more) means every step is done. */\n @Input() current = 0;\n /** The loader beside the running step. */\n @Input() loader: StepLoaderGlyph = 'radar';\n /** Label once every step is done. */\n @Input() doneLabel = 'Ready for review';\n /** Whether the list of every step is open (controlled). Leave out to let the row toggle it. */\n @Input() open?: boolean;\n /** Initial open state when uncontrolled. */\n @Input() defaultOpen = false;\n\n /** Emitted when the open state changes. */\n @Output() openChange = new EventEmitter<boolean>();\n\n /** The open state shown now (controlled by `open`, else held internally). */\n isOpen = false;\n private touched = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] && this.open !== undefined) {\n this.isOpen = this.open;\n } else if (!this.touched) {\n this.isOpen = this.open ?? this.defaultOpen;\n }\n }\n\n /** Number of steps. */\n get n(): number {\n return this.steps.length;\n }\n\n /** Whether every step is done. */\n get allDone(): boolean {\n return this.current >= this.n;\n }\n\n /** Index of the step to show as running (clamped to the last step). */\n get at(): number {\n return Math.min(this.current, this.n - 1);\n }\n\n toggle(): void {\n this.touched = true;\n const next = !this.isOpen;\n // controlled: tell the parent; uncontrolled: flip locally\n if (this.open === undefined) this.isOpen = next;\n this.openChange.emit(next);\n }\n}\n","// framework/angular/task-table/task-table.component.ts\n//\n// Native Angular port of framework/react/task-table/TaskTable.tsx.\n// Agent tasks in a sortable table. Pick rows and the header turns into what you\n// can do to them (Pause / Retry / Cancel); rows glide (FLIP) when the order\n// changes, cancelled rows slide away, and an empty table says so. Inputs mirror\n// the React props; React callbacks become @Output EventEmitters.\n//\n// Icons: pause, refresh, x (bulk actions), chev-u (sort arrow), check + minus\n// (checkbox tick / select-all dash), ok (done status + empty state), alert\n// (failed status) — all present in the Angular icon set, so no substitution was\n// needed. The Running spinner and the Queued dot use the shared .spin / .dot\n// helpers from the token CSS, matching the Vanilla source.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nexport type TaskStatus = 'running' | 'failed' | 'queued' | 'paused' | 'done';\n\n/** The agent on a task, shown as a small avatar and a name. */\nexport interface TaskAgent {\n name: string;\n initials: string;\n /** The avatar colour, like 'var(--vo-av-b)'. Takes its own ink. */\n color: string;\n}\n\n/** One task row. */\nexport interface Task {\n id: string;\n /** What the agent is doing, like \"Audit pricing contrast\". */\n name: string;\n status: TaskStatus;\n agent: TaskAgent;\n /** In dollars, shown as $0.42. */\n cost: number;\n /** Minutes since it last changed, shown as \"14m ago\", or \"Just now\" at 0. */\n updated: number;\n}\n\nexport type TaskSortKey = 'name' | 'status' | 'agent' | 'cost' | 'updated';\nexport interface TaskSort {\n key: TaskSortKey;\n desc?: boolean;\n}\nexport type TaskAction = 'pause' | 'retry' | 'cancel';\n\ninterface StatusStyle {\n label: string;\n rank: number;\n tone: string;\n icon: VoIconName | null;\n}\n\nconst STATUS: Record<TaskStatus, StatusStyle> = {\n running: { label: 'Running', rank: 0, tone: 'run', icon: null },\n failed: { label: 'Failed', rank: 1, tone: 'fail', icon: 'alert' },\n queued: { label: 'Queued', rank: 2, tone: 'wait', icon: null },\n paused: { label: 'Paused', rank: 3, tone: 'pause', icon: 'pause' },\n done: { label: 'Done', rank: 4, tone: 'done', icon: 'ok' },\n};\nconst COLUMNS: { key: TaskSortKey; label: string; right?: boolean }[] = [\n { key: 'name', label: 'Task' },\n { key: 'status', label: 'Status' },\n { key: 'agent', label: 'Agent' },\n { key: 'cost', label: 'Cost', right: true },\n { key: 'updated', label: 'Updated', right: true },\n];\nconst FIELD: Record<TaskSortKey, (t: Task) => string | number> = {\n name: (t) => t.name,\n status: (t) => STATUS[t.status].rank,\n agent: (t) => t.agent.name,\n cost: (t) => t.cost,\n updated: (t) => t.updated,\n};\nconst ACTIONS: { key: TaskAction; label: string; icon: VoIconName }[] = [\n { key: 'pause', label: 'Pause', icon: 'pause' },\n { key: 'retry', label: 'Retry', icon: 'refresh' },\n { key: 'cancel', label: 'Cancel', icon: 'x' },\n];\n\n@Component({\n selector: 'vo-task-table',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"ttx-box\" style=\"container-type:inline-size;width:100%\">\n <div #panel class=\"ttx panel\" [class.selecting]=\"picked.length > 0\">\n <div class=\"ttx-hd\">\n <div class=\"ttx-ti\" [attr.inert]=\"picked.length > 0 ? '' : null\">\n <b>{{ title }}</b>\n <span class=\"muted num ttx-sum\">{{ line }}</span>\n </div>\n <div class=\"ttx-sb\" [attr.inert]=\"picked.length === 0 ? '' : null\">\n <span class=\"ttx-n num\">{{ shown }} selected</span>\n @for (a of actions; track a.key) {\n <button\n type=\"button\"\n class=\"pill ghost sm\"\n [class.ttx-del]=\"a.key === 'cancel'\"\n (click)=\"act(a.key)\"\n >\n <vo-icon [name]=\"a.icon\" size=\"xs\"></vo-icon>{{ a.label }}\n </button>\n }\n <span class=\"ttx-sp\"></span>\n <button type=\"button\" class=\"pill ghost sm ttx-clr\" (click)=\"clear()\">Clear</button>\n </div>\n </div>\n <div class=\"ttx-sc\">\n <table class=\"ttx-t\">\n <thead>\n <tr>\n <th class=\"ck\">\n <button\n type=\"button\"\n class=\"ttx-cb ttx-all\"\n role=\"checkbox\"\n [attr.aria-checked]=\"allState\"\n aria-label=\"Select all\"\n (click)=\"toggleAll()\"\n >\n <vo-icon name=\"check\" size=\"xs\" class=\"ck-y\"></vo-icon>\n <vo-icon name=\"minus\" size=\"xs\" class=\"ck-m\"></vo-icon>\n </button>\n </th>\n @for (col of columns; track col.key) {\n <th\n [class.r]=\"col.right\"\n [attr.aria-sort]=\"\n by.key === col.key ? (by.desc ? 'descending' : 'ascending') : 'none'\n \"\n >\n <button\n type=\"button\"\n class=\"ttx-s\"\n [class.on]=\"by.key === col.key\"\n [class.desc]=\"by.key === col.key && by.desc\"\n (click)=\"sortBy(col.key)\"\n >\n {{ col.label }}<span class=\"ar\"><vo-icon name=\"chev-u\" size=\"xs\"></vo-icon></span>\n </button>\n </th>\n }\n </tr>\n </thead>\n <tbody #body>\n @for (t of rows; track t.id; let i = $index) {\n <tr\n [attr.data-id]=\"t.id\"\n [class.sel]=\"picked.includes(t.id)\"\n [class.ttx-out]=\"leaving.includes(t.id)\"\n (click)=\"toggle(t.id)\"\n >\n <td class=\"ck\">\n <button\n type=\"button\"\n class=\"ttx-cb\"\n role=\"checkbox\"\n [attr.aria-checked]=\"picked.includes(t.id)\"\n [attr.aria-label]=\"'Select ' + t.name\"\n >\n <vo-icon name=\"check\" size=\"xs\" class=\"ck-y\"></vo-icon>\n <vo-icon name=\"minus\" size=\"xs\" class=\"ck-m\"></vo-icon>\n </button>\n </td>\n <td class=\"nm\">{{ t.name }}</td>\n <td>\n <span class=\"ttx-st\" [attr.data-s]=\"status(t).tone\">\n <span class=\"sv ttx-sin\">\n @if (status(t).tone === 'run') {\n <span class=\"spin\"></span>\n } @else if (status(t).tone === 'wait') {\n <span class=\"dot\"></span>\n } @else {\n @if (status(t).icon; as ic) {\n <vo-icon [name]=\"ic\" size=\"xs\"></vo-icon>\n }\n }\n <span>{{ status(t).label }}</span>\n </span>\n </span>\n </td>\n <td>\n <span class=\"ag\">\n <span\n class=\"av\"\n [style.background]=\"t.agent.color\"\n [style.color]=\"inkFor(t.agent.color)\"\n >{{ t.agent.initials }}</span\n >{{ t.agent.name }}\n </span>\n </td>\n <td class=\"r num\">\\${{ t.cost.toFixed(2) }}</td>\n <td class=\"r num up\"><span>{{ ago(t.updated) }}</span></td>\n </tr>\n }\n @if (!tasks.length) {\n <tr class=\"ttx-empty\">\n <td colspan=\"6\" #emptyCell [style.padding-top.px]=\"pad?.top\" [style.padding-bottom.px]=\"pad?.bottom\">\n <div class=\"ttx-em\">\n <span class=\"ic\"><vo-icon name=\"ok\"></vo-icon></span>\n <b>{{ emptyTitle }}</b>\n <span>{{ emptyNote }}</span>\n @if (emptyAction) {\n <button type=\"button\" class=\"pill ghost sm\" (click)=\"runEmptyAction($event)\">\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>{{ emptyAction.label }}\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </div>\n </div>\n `,\n styleUrl: './task-table.css',\n})\nexport class TaskTableComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input() tasks: Task[] = [];\n /** The name in the header. */\n @Input() title = 'Agent tasks';\n /** The quiet line beside the name. Defaults to a count of tasks and how many are running. */\n @Input() summary?: string;\n\n /** Ids of the selected tasks. Leave it out to let the checkboxes and rows drive it. */\n @Input() selected?: string[];\n @Input() defaultSelected: string[] = [];\n @Output() selectedChange = new EventEmitter<string[]>();\n\n /** The column the rows are sorted by. Leave it out to let the headers set it. */\n @Input() sort?: TaskSort;\n @Input() defaultSort: TaskSort = { key: 'updated' };\n @Output() sortChange = new EventEmitter<TaskSort>();\n\n /** A button in the header while tasks are selected. The selection clears after it. */\n @Output() action = new EventEmitter<{ action: TaskAction; ids: string[] }>();\n\n /** The bold line of the empty state. */\n @Input() emptyTitle = 'No agent tasks';\n /** The quieter line of the empty state. */\n @Input() emptyNote = 'Everything has finished or been cancelled.';\n /** A button under the empty note, like { label: 'Bring them back', onClick }. */\n @Input() emptyAction?: { label: string; onClick: () => void };\n\n @ViewChild('panel') panelRef!: ElementRef<HTMLElement>;\n @ViewChild('body') bodyRef!: ElementRef<HTMLElement>;\n @ViewChild('emptyCell') emptyCellRef?: ElementRef<HTMLElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n readonly columns = COLUMNS;\n readonly actions = ACTIONS;\n\n sel: string[] = this.defaultSelected;\n by: TaskSort = this.defaultSort;\n leaving: string[] = [];\n /** The header keeps its count while it slides back to the title. */\n shown = 0;\n pad?: { top: number; bottom: number };\n\n // FLIP: where each row sat last layout, eased from on the next\n private was = new Map<string, number>();\n private fullHeight?: number;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['selected'] && this.selected !== undefined) this.sel = this.selected;\n if (changes['sort'] && this.sort !== undefined) this.by = this.sort;\n if (changes['defaultSelected'] && this.selected === undefined) this.sel = this.defaultSelected;\n if (changes['defaultSort'] && this.sort === undefined) this.by = this.defaultSort;\n if (this.picked.length) this.shown = this.picked.length;\n }\n\n ngAfterViewInit(): void {\n // measure the full table once so the empty state can keep its height\n queueMicrotask(() => this.measureFull());\n }\n\n /** The tasks sorted by the active column. */\n get rows(): Task[] {\n const f = FIELD[this.by.key];\n const dir = this.by.desc ? -1 : 1;\n return [...this.tasks].sort((a, b) => {\n const x = f(a),\n y = f(b);\n return (x > y ? 1 : x < y ? -1 : 0) * dir;\n });\n }\n\n /** The selected ids that still exist and are not on their way out. */\n get picked(): string[] {\n return this.sel.filter((id) => this.tasks.some((t) => t.id === id) && !this.leaving.includes(id));\n }\n\n get allState(): 'true' | 'false' | 'mixed' {\n const n = this.picked.length;\n return n === 0 ? 'false' : n === this.tasks.length ? 'true' : 'mixed';\n }\n\n get line(): string {\n if (this.summary !== undefined) return this.summary;\n if (!this.tasks.length) return 'No tasks';\n const running = this.tasks.filter((t) => t.status === 'running').length;\n return `${this.tasks.length} task${this.tasks.length === 1 ? '' : 's'}, ${running} running`;\n }\n\n status(t: Task): StatusStyle {\n return STATUS[t.status];\n }\n\n ago(m: number): string {\n return m ? m + 'm ago' : 'Just now';\n }\n\n inkFor(color: string): string | null {\n return /^var\\(--vo-av-[a-z]\\)$/.test(color) ? color.replace(')', '-ink)') : null;\n }\n\n toggle(id: string): void {\n const next = this.sel.includes(id) ? this.sel.filter((x) => x !== id) : [...this.sel, id];\n this.commitSel(next);\n }\n\n toggleAll(): void {\n const next = this.allState === 'true' ? [] : this.tasks.map((t) => t.id);\n this.commitSel(next);\n }\n\n clear(): void {\n this.commitSel([]);\n }\n\n sortBy(key: TaskSortKey): void {\n const next: TaskSort = key === this.by.key ? { key, desc: !this.by.desc } : { key, desc: false };\n this.flip(() => {\n if (this.sort === undefined) this.by = next;\n this.sortChange.emit(next);\n }, 500);\n }\n\n act(a: TaskAction): void {\n const ids = this.picked;\n this.commitSel([]);\n if (a !== 'cancel' || this.motion.reduce()) {\n this.action.emit({ action: a, ids });\n return;\n }\n this.leaving = ids;\n const t = setTimeout(() => {\n this.action.emit({ action: a, ids });\n this.leaving = [];\n this.timers.delete(t);\n }, 250);\n this.timers.add(t);\n }\n\n runEmptyAction(e: Event): void {\n e.stopPropagation();\n this.emptyAction?.onClick();\n }\n\n private commitSel(next: string[]): void {\n if (this.selected === undefined) this.sel = next;\n if (next.length) this.shown = next.length;\n this.selectedChange.emit(next);\n }\n\n // rows glide to their new places: measured before the change, then eased from where they were\n private flip(change: () => void, duration: number): void {\n if (this.motion.reduce()) {\n change();\n return;\n }\n const body = this.bodyRef?.nativeElement;\n const first = new Map<string, number>();\n body?.querySelectorAll<HTMLElement>('tr[data-id]').forEach((tr) => {\n first.set(tr.dataset['id']!, tr.getBoundingClientRect().top);\n });\n change();\n queueMicrotask(() => {\n body?.querySelectorAll<HTMLElement>('tr[data-id]').forEach((tr) => {\n const before = first.get(tr.dataset['id']!);\n if (before === undefined) return;\n const d = before - tr.getBoundingClientRect().top;\n if (Math.abs(d) > 1) {\n tr.animate([{ transform: `translateY(${d}px)` }, { transform: 'none' }], {\n duration,\n easing: 'cubic-bezier(.22,1,.36,1)',\n });\n }\n });\n });\n }\n\n private measureFull(): void {\n const p = this.panelRef?.nativeElement;\n if (this.tasks.length && p) {\n this.fullHeight = p.offsetHeight;\n this.pad = undefined;\n this.was = new Map();\n this.bodyRef?.nativeElement\n .querySelectorAll<HTMLElement>('tr[data-id]')\n .forEach((tr) => this.was.set(tr.dataset['id']!, tr.offsetTop));\n return;\n }\n // the empty state keeps the height the table had, centred in it\n const td = this.emptyCellRef?.nativeElement;\n if (!p || !td || !this.fullHeight) {\n this.pad = undefined;\n return;\n }\n const d = this.fullHeight - p.offsetHeight;\n if (d > 1) {\n const cs = getComputedStyle(td);\n this.pad = {\n top: parseFloat(cs.paddingTop) + d / 2,\n bottom: parseFloat(cs.paddingBottom) + d / 2,\n };\n } else {\n this.pad = undefined;\n }\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/terminal-stream/terminal-stream.component.ts\n//\n// Native Angular port of framework/react/terminal-stream/TerminalStream.tsx.\n// The shell commands an agent runs, as a compact terminal: the working directory\n// and how the run is going in the header, each command with its output streaming\n// in under it and an exit code or a check with how long it took, and a summary at\n// the foot once it is over. Long output folds to its last lines. The terminal keeps\n// one height (420px) and its output scrolls, staying on the newest line unless the\n// reader has scrolled up. Inputs mirror the React props; React callbacks become\n// @Output EventEmitters.\n//\n// Icon substitutions (documented per the brief): the React source uses `term`,\n// `stop`, `copy`, `check`, `chev-d`, `edit`, `spark`, `ok` and `alert` — all of\n// which exist in the Angular icon set, so no substitution was needed.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\n/** ok is green, bad is red, muted is grey. */\nexport type TerminalTone = 'ok' | 'bad' | 'muted';\n\n/** A line of output, or `{ text, tone }` to colour it. */\nexport type TerminalLine = string | { text: string; tone?: TerminalTone };\n\n/** running shows a spinner; ok a check; failed its exit code in red; stopped a Stopped tag. */\nexport type TerminalCommandStatus = 'running' | 'ok' | 'failed' | 'stopped';\n\n/** A shell command the agent ran, with its streamed output. */\nexport interface TerminalCommand {\n kind?: 'command';\n /** Like \"npm run build\". */\n command: string;\n /** What it printed so far. Longer than `tail` + 1 lines, all but the last `tail` fold. */\n output?: TerminalLine[];\n status: TerminalCommandStatus;\n /** Shown when it failed, as \"Exit 1\". */\n exitCode?: number;\n /** How long it has taken, like \"6.1 s\". */\n duration?: string;\n}\n\n/** A line from the agent between commands, like what went wrong and what it will do about it. */\nexport interface TerminalNote {\n kind: 'note';\n text: string;\n}\n\n/** A file the agent edits between commands. */\nexport interface TerminalEdit {\n kind: 'edit';\n file: string;\n /** Lines added and removed, shown once it is done. */\n added?: number;\n removed?: number;\n /** The changed lines, each starting with \"-\" (removed, red) or \"+\" (added, green). */\n diff?: string[];\n status?: 'running' | 'done' | 'stopped';\n}\n\nexport type TerminalEntry = TerminalCommand | TerminalNote | TerminalEdit;\nexport type TerminalStatus = 'running' | 'passed' | 'failed' | 'stopped';\n\nexport interface TerminalLabels {\n running?: string;\n passed?: string;\n failed?: string;\n stopped?: string;\n stop?: string;\n copy?: string;\n copied?: string;\n more?: (n: number) => string;\n fewer?: string;\n edit?: string;\n}\n\ninterface TerminalLineView {\n text: string;\n tone?: TerminalTone;\n}\n\nconst TONE: Record<TerminalTone, string> = { ok: 'vo-ok', bad: 'vo-bad', muted: 'vo-mu' };\n\nconst lineOf = (l: TerminalLine): TerminalLineView =>\n typeof l === 'string' ? { text: l, tone: undefined } : l;\n\n@Component({\n selector: 'vo-terminal-stream',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n [class]=\"className ? 'vo-tmx vo-panel ' + className : 'vo-tmx vo-panel'\"\n [class.vo-live]=\"running\"\n style=\"container-type: inline-size\"\n >\n <div class=\"vo-tmx-h\">\n <span class=\"vo-tmx-ic\"><vo-icon name=\"term\"></vo-icon></span>\n <span class=\"vo-tmx-cwd\">{{ cwd }}</span>\n <span\n class=\"vo-tmx-st\"\n [class.vo-ok]=\"state === 'passed'\"\n [class.vo-bad]=\"state === 'failed'\"\n >\n <span class=\"vo-g\">\n @if (running) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon [name]=\"state === 'passed' ? 'check' : 'stop'\" size=\"xs\"></vo-icon>\n }\n </span>\n <span class=\"vo-tmx-sv vo-num\">\n @if (running) {\n {{ elapsed ? L.running + ' · ' + elapsed : L.running }}\n } @else {\n {{ stateLabel }}\n }\n </span>\n </span>\n <span class=\"vo-sp\"></span>\n @if (running && hasStop) {\n <button\n type=\"button\"\n class=\"vo-pill vo-ghost vo-sm vo-tmx-stop\"\n aria-label=\"Stop the running command\"\n (click)=\"stop.emit()\"\n >\n <vo-icon name=\"stop\" size=\"xs\"></vo-icon>{{ L.stop }}\n </button>\n }\n <button\n type=\"button\"\n class=\"vo-ib vo-tmx-cp\"\n [class.vo-copied]=\"copied\"\n aria-label=\"Copy the output\"\n (click)=\"copyAll()\"\n >\n <vo-icon [name]=\"copied ? 'check' : 'copy'\"></vo-icon>\n </button>\n </div>\n\n <div\n #body\n class=\"vo-tmx-body\"\n role=\"log\"\n aria-label=\"Terminal output\"\n tabindex=\"0\"\n (scroll)=\"onScroll()\"\n >\n @for (e of entries; track $index; let i = $index) {\n @switch (kindOf(e)) {\n @case ('note') {\n <div class=\"vo-tmx-note\">\n <vo-icon name=\"spark\" size=\"xs\"></vo-icon>\n <span [class.vo-shim]=\"running && i === entries.length - 1\">{{ asNote(e).text }}</span>\n </div>\n }\n @case ('edit') {\n <div class=\"vo-tmx-blk\" [attr.data-s]=\"asEdit(e).status === 'stopped' ? 'stop' : 'edit'\">\n <div class=\"vo-tmx-cmd\">\n <span class=\"vo-tmx-p\"><vo-icon name=\"edit\" size=\"xs\"></vo-icon></span>\n <span class=\"vo-tmx-c\">{{ L.edit }} {{ asEdit(e).file }}</span>\n <span class=\"vo-tmx-m\">\n @if (asEdit(e).status === 'running') {\n <span class=\"vo-g\"><span class=\"vo-spin\" aria-hidden=\"true\"></span></span>\n } @else if (asEdit(e).status === 'stopped') {\n <span class=\"vo-g\"><span class=\"vo-tag\">{{ L.stopped }}</span></span>\n } @else {\n @if (asEdit(e).added !== undefined) {\n <span class=\"vo-add\">+{{ asEdit(e).added }}</span>\n }\n @if (asEdit(e).removed !== undefined) {\n <span class=\"vo-del\">−{{ asEdit(e).removed }}</span>\n }\n }\n </span>\n </div>\n @if (\n asEdit(e).status !== 'running' &&\n asEdit(e).status !== 'stopped' &&\n asEdit(e).diff &&\n asEdit(e).diff!.length > 0\n ) {\n <div class=\"vo-tmx-df\">\n @for (d of asEdit(e).diff; track $index) {\n <div [class.vo-a]=\"d[0] === '+'\" [class.vo-d]=\"d[0] === '-'\">{{ d }}</div>\n }\n </div>\n }\n </div>\n }\n @default {\n <div\n class=\"vo-tmx-blk\"\n [attr.data-s]=\"dataS(asCommand(e))\"\n >\n <div class=\"vo-tmx-cmd\">\n <span class=\"vo-tmx-p\">$</span>\n <span class=\"vo-tmx-c\">{{ asCommand(e).command }}</span>\n <span class=\"vo-tmx-m\">\n <span class=\"vo-g\">\n @switch (asCommand(e).status) {\n @case ('running') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n @case ('ok') {\n <span class=\"vo-ok\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n }\n @case ('failed') {\n <span class=\"vo-tag vo-bad\">Exit {{ asCommand(e).exitCode ?? 1 }}</span>\n }\n @default {\n <span class=\"vo-tag\">{{ L.stopped }}</span>\n }\n }\n </span>\n @if (asCommand(e).duration) {\n <span class=\"vo-t vo-num\">{{ asCommand(e).duration }}</span>\n }\n </span>\n </div>\n @if (folds(asCommand(e))) {\n <button\n type=\"button\"\n class=\"vo-tmx-more\"\n [attr.aria-expanded]=\"open.has(i)\"\n (click)=\"toggle(i)\"\n >\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n <span>{{ open.has(i) ? L.fewer : more(hidden(asCommand(e)).length) }}</span>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!open.has(i)\">\n <div>\n <div class=\"vo-tmx-o\">\n @for (l of hidden(asCommand(e)); track $index) {\n <div class=\"vo-tmx-l\" [class]=\"toneClass(l)\">{{ lineText(l) }}</div>\n }\n </div>\n </div>\n </div>\n }\n @if (shown(asCommand(e)).length > 0) {\n <div class=\"vo-tmx-o\">\n @for (l of shown(asCommand(e)); track $index) {\n <div class=\"vo-tmx-l\" [class]=\"toneClass(l)\">{{ lineText(l) }}</div>\n }\n </div>\n }\n </div>\n }\n }\n }\n </div>\n\n <div class=\"vo-fold vo-tmx-ff\" [class.vo-shut]=\"running || foot === false\">\n <div>\n <div\n class=\"vo-tmx-f\"\n [class.vo-stop]=\"state === 'stopped'\"\n [class.vo-bad]=\"state === 'failed'\"\n >\n <span class=\"vo-g\">\n <vo-icon [name]=\"state === 'passed' ? 'ok' : state === 'failed' ? 'alert' : 'stop'\"></vo-icon>\n </span>\n <span class=\"vo-tmx-fs vo-num\">{{ foot || '' }}</span>\n </div>\n </div>\n </div>\n </div>\n `,\n styleUrl: './terminal-stream.css',\n})\nexport class TerminalStreamComponent implements AfterViewInit, OnDestroy {\n /** The working directory, shown in the header, like \"~/acme/web\". */\n @Input() cwd = '';\n\n /** Commands, notes and edits, oldest first. */\n @Input() entries: TerminalEntry[] = [];\n\n /** The run as a whole. Left out, it is derived from the entries. */\n @Input() status?: TerminalStatus;\n\n /** How long the run has taken, like \"0:18\". Shown beside Running and in the summary. */\n @Input() elapsed?: string;\n\n /** The line at the foot once the run is over; false hides it. */\n @Input() summary?: string | false;\n\n /** How many lines a folded output keeps showing. */\n @Input() tail = 4;\n\n /** Whether the output has been copied (shows the Copied tooltip/check). */\n @Input() copied = false;\n\n /** Overrides for the labels. */\n @Input() labels: TerminalLabels = {};\n\n @Input() className?: string;\n\n /** Emitted by the Stop button while the run is going. */\n @Output() stop = new EventEmitter<void>();\n\n /** Emitted with the whole run as text when it is copied. */\n @Output() copy = new EventEmitter<string>();\n\n @ViewChild('body') private bodyRef?: ElementRef<HTMLElement>;\n\n /** Which folded commands (by entry index) are open. */\n readonly open = new Set<number>();\n\n private pinned = true;\n private mo?: MutationObserver;\n private ro?: ResizeObserver;\n\n get L(): Required<TerminalLabels> {\n return {\n running: 'Running',\n passed: 'Passed',\n failed: 'Failed',\n stopped: 'Stopped',\n stop: 'Stop',\n copy: 'Copy',\n copied: 'Copied to clipboard',\n more: (n: number) => `Show ${n} more line${n === 1 ? '' : 's'}`,\n fewer: 'Show fewer lines',\n edit: 'Edit',\n ...this.labels,\n };\n }\n\n get hasStop(): boolean {\n return this.stop.observed;\n }\n\n private get commands(): TerminalCommand[] {\n return this.entries.filter(\n (e): e is TerminalCommand => this.kindOf(e) === 'command'\n );\n }\n\n get state(): TerminalStatus {\n if (this.status) return this.status;\n const busy = this.entries.some(\n (e) => this.kindOf(e) !== 'note' && (e as TerminalCommand | TerminalEdit).status === 'running'\n );\n if (busy) return 'running';\n const last = this.commands[this.commands.length - 1];\n return last?.status === 'failed'\n ? 'failed'\n : last?.status === 'stopped'\n ? 'stopped'\n : 'passed';\n }\n\n get running(): boolean {\n return this.state === 'running';\n }\n\n get stateLabel(): string {\n return this.L[this.state];\n }\n\n get foot(): string | false {\n if (this.summary !== undefined) return this.summary;\n const n = new Set(this.commands.map((c) => c.command)).size;\n return [`${n} command${n === 1 ? '' : 's'}`, this.elapsed, this.state]\n .filter(Boolean)\n .join(' · ');\n }\n\n kindOf(e: TerminalEntry): 'note' | 'edit' | 'command' {\n if (e.kind === 'note') return 'note';\n if (e.kind === 'edit') return 'edit';\n return 'command';\n }\n\n asNote(e: TerminalEntry): TerminalNote {\n return e as TerminalNote;\n }\n\n asEdit(e: TerminalEntry): TerminalEdit {\n return e as TerminalEdit;\n }\n\n asCommand(e: TerminalEntry): TerminalCommand {\n return e as TerminalCommand;\n }\n\n dataS(e: TerminalCommand): string {\n return e.status === 'running'\n ? 'run'\n : e.status === 'ok'\n ? 'ok'\n : e.status === 'failed'\n ? 'bad'\n : 'stop';\n }\n\n private out(e: TerminalCommand): TerminalLine[] {\n return e.output ?? [];\n }\n\n folds(e: TerminalCommand): boolean {\n return this.out(e).length > this.tail + 1;\n }\n\n hidden(e: TerminalCommand): TerminalLine[] {\n const o = this.out(e);\n return this.folds(e) ? o.slice(0, o.length - this.tail) : [];\n }\n\n shown(e: TerminalCommand): TerminalLine[] {\n const o = this.out(e);\n return this.folds(e) ? o.slice(o.length - this.tail) : o;\n }\n\n lineText(l: TerminalLine): string {\n return lineOf(l).text;\n }\n\n toneClass(l: TerminalLine): string {\n const tone = lineOf(l).tone;\n return tone ? TONE[tone] : '';\n }\n\n more(n: number): string {\n return this.L.more(n);\n }\n\n toggle(i: number): void {\n if (this.open.has(i)) this.open.delete(i);\n else this.open.add(i);\n }\n\n private text(): string {\n return this.entries\n .flatMap((e) => {\n if (this.kindOf(e) === 'note') return ['# ' + this.asNote(e).text];\n if (this.kindOf(e) === 'edit') {\n const ed = this.asEdit(e);\n const counts =\n ed.added !== undefined || ed.removed !== undefined\n ? ` (+${ed.added ?? 0} −${ed.removed ?? 0})`\n : '';\n const diff = ed.status === 'done' || ed.status === undefined ? ed.diff ?? [] : [];\n return [`# ${this.L.edit} ${ed.file}${counts}`, ...diff];\n }\n const cmd = this.asCommand(e);\n return ['$ ' + cmd.command, ...(cmd.output ?? []).map((l) => lineOf(l).text)];\n })\n .join('\\n');\n }\n\n copyAll(): void {\n this.copy.emit(this.text());\n }\n\n onScroll(): void {\n const el = this.bodyRef?.nativeElement;\n if (!el) return;\n this.pinned = el.scrollTop + el.clientHeight >= el.scrollHeight - 24;\n }\n\n // new output keeps the log on its newest line, unless the reader has scrolled up\n ngAfterViewInit(): void {\n const el = this.bodyRef?.nativeElement;\n if (!el) return;\n const stick = () => {\n if (this.pinned) el.scrollTop = el.scrollHeight;\n };\n this.mo = new MutationObserver(stick);\n this.mo.observe(el, { childList: true, subtree: true, characterData: true });\n if (typeof ResizeObserver === 'function') {\n this.ro = new ResizeObserver(stick);\n this.ro.observe(el);\n }\n stick();\n }\n\n ngOnDestroy(): void {\n this.mo?.disconnect();\n this.ro?.disconnect();\n }\n}\n","// framework/angular/thinking/thinking.component.ts\n//\n// Native Angular port of framework/react/thinking/Thinking.tsx.\n// The live trace an agent writes as it works: each step on a line that turns\n// green as it finishes, with what the step found written under it a word at a\n// time, and a header that becomes a summary and folds the trace away.\n// Inputs mirror the React props; the fold, the settle-on-change and the\n// collapse-when-done timer are ported from the React/vanilla source.\n\nimport {\n AfterViewInit,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One step in the trace: what the agent does, and what it found. */\nexport interface ThinkingStep {\n /** What the agent does, like \"Measure the plan cards\". */\n label: string;\n /** running spins and shimmers, retry waits out a problem in amber, done turns into a check. */\n state: 'running' | 'retry' | 'done';\n /** What the step found, or what it waits on, under it. Opens and crossfades when it changes. */\n result?: string;\n /** More detail shown on hover of the result, like the measured values. */\n resultTip?: string;\n /** How long the step took, like \"1.3s\", shown at its right once it is done. */\n time?: string;\n}\n\n/** One word of a finished result, carrying its own entrance delay. */\ninterface ResultWord {\n text: string;\n delay: number;\n}\n\n/** The live trace of what the agent is doing, folded away once it is done. */\n@Component({\n selector: 'vo-thinking',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-tk\" [attr.data-open]=\"isOpen ? '1' : '0'\">\n <button\n type=\"button\"\n class=\"vo-tk-h\"\n [class.vo-tk-fin]=\"done\"\n [attr.aria-expanded]=\"isOpen\"\n (click)=\"toggle()\"\n >\n <span class=\"vo-tk-mark\">\n @if (done) {\n <span class=\"vo-enter\" style=\"display:grid\"><vo-icon name=\"ok\"></vo-icon></span>\n } @else {\n <span class=\"vo-think\" [class.vo-on]=\"running\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n }\n </span>\n <span class=\"vo-tk-title\" [class.vo-shim]=\"running\">{{ headerText }}</span>\n <span class=\"vo-tk-time vo-num\">{{ secs }}s</span>\n <vo-icon name=\"chev-d\" size=\"xs\" class=\"vo-tk-chev\"></vo-icon>\n </button>\n <div class=\"vo-fold vo-tk-fold\" [class.vo-shut]=\"!isOpen\">\n <div>\n <ol class=\"vo-tk-list\" aria-live=\"polite\">\n @for (s of steps; track $index) {\n <li class=\"vo-tk-st vo-enter\" [class]=\"stepClass(s)\">\n <span class=\"vo-mk\">\n @if (s.state === 'running') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n <span class=\"vo-enter\" style=\"display:grid\">\n <vo-icon [name]=\"s.state === 'retry' ? 'clock' : 'check'\" size=\"xs\"></vo-icon>\n </span>\n }\n </span>\n <div class=\"vo-tx\">\n <span class=\"vo-tk-ln\">\n <span class=\"vo-lab\" [class.vo-shim]=\"s.state === 'running'\">{{ s.label }}</span>\n @if (s.state === 'done' && s.time) {\n <span class=\"vo-tk-dur vo-num vo-enter\">{{ s.time }}</span>\n }\n </span>\n <span class=\"vo-res\" [class.vo-on]=\"!!s.result\">\n @if (s.state === 'done' && s.result) {\n <span>\n @if (s.resultTip) {\n <span tabindex=\"0\" data-tip=\"\" [attr.title]=\"s.resultTip\">\n @for (w of words(s.result); track $index) {\n <span class=\"vo-w\" [style.animationDelay.ms]=\"w.delay\">{{ w.text }}</span>\n }\n </span>\n } @else {\n @for (w of words(s.result); track $index) {\n <span class=\"vo-w\" [style.animationDelay.ms]=\"w.delay\">{{ w.text }}</span>\n }\n }\n </span>\n } @else if (s.result) {\n <span class=\"vo-sw\">{{ s.result }}</span>\n }\n </span>\n </div>\n </li>\n }\n </ol>\n </div>\n </div>\n </div>\n `,\n styleUrl: './thinking.css',\n})\nexport class ThinkingComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** The steps the agent has taken so far. */\n @Input() steps: ThinkingStep[] = [];\n /** Spins, counts seconds and keeps the trace open while true. */\n @Input() running = false;\n /** Seconds to show. Leave it out to let it count while running. */\n @Input() seconds?: number;\n /** The header while it runs, like \"Checking the pricing page\". */\n @Input() title = 'Working on it';\n /** The header once it is done. Defaults to the number of steps. */\n @Input() summary?: string;\n /** Folds the trace away a moment after it finishes. */\n @Input() collapseWhenDone = true;\n /** Whether the trace is open. Leave it out to let the header toggle it. */\n @Input() open?: boolean;\n /** The open state the trace starts in when uncontrolled. */\n @Input() defaultOpen = true;\n\n /** Emitted when the header toggles the trace. */\n @Output() openChange = new EventEmitter<boolean>();\n\n isOpen = true;\n private counted = 0;\n private secondTimer?: ReturnType<typeof setInterval>;\n private collapseTimer?: ReturnType<typeof setTimeout>;\n private viewReady = false;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n get done(): boolean {\n return !this.running && this.steps.length > 0;\n }\n\n get secs(): number {\n return this.seconds ?? this.counted;\n }\n\n get headerText(): string {\n if (this.done) {\n return this.summary ?? `${this.steps.length} ${this.steps.length === 1 ? 'step' : 'steps'}`;\n }\n return this.title;\n }\n\n ngAfterViewInit(): void {\n this.viewReady = true;\n this.isOpen = this.open ?? this.defaultOpen;\n this.startSeconds();\n this.scheduleCollapse();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['open'] && this.open !== undefined) {\n this.isOpen = this.open;\n }\n if (!this.viewReady) {\n this.isOpen = this.open ?? this.defaultOpen;\n return;\n }\n if (changes['running'] || changes['seconds']) {\n this.startSeconds();\n }\n if (changes['running'] || changes['collapseWhenDone'] || changes['steps']) {\n this.scheduleCollapse();\n }\n }\n\n stepClass(s: ThinkingStep): string {\n return s.state === 'running' ? 'vo-run' : 'vo-' + s.state;\n }\n\n // the result is written a word at a time, each a little after the last\n words(text: string): ResultWord[] {\n const parts = text.split(' ');\n return parts.map((w, i) => ({\n text: i < parts.length - 1 ? w + ' ' : w,\n delay: i * 45,\n }));\n }\n\n toggle(): void {\n if (this.open !== undefined) {\n this.openChange.emit(!this.isOpen);\n return;\n }\n this.isOpen = !this.isOpen;\n this.openChange.emit(this.isOpen);\n }\n\n // the seconds count while it runs, unless a fixed value is given\n private startSeconds(): void {\n clearInterval(this.secondTimer);\n this.secondTimer = undefined;\n if (this.seconds !== undefined || !this.running) {\n return;\n }\n this.counted = 0;\n this.secondTimer = setInterval(() => {\n this.counted++;\n }, 1000);\n }\n\n // once it finishes, the trace waits a beat and folds itself away\n private scheduleCollapse(): void {\n clearTimeout(this.collapseTimer);\n this.collapseTimer = undefined;\n if (this.running || !this.collapseWhenDone || !this.steps.length) {\n return;\n }\n if (this.open !== undefined) {\n return;\n }\n const delay = this.reduced.reduce() ? 0 : 2500;\n this.collapseTimer = setTimeout(() => {\n this.isOpen = false;\n this.openChange.emit(false);\n }, delay);\n }\n\n ngOnDestroy(): void {\n clearInterval(this.secondTimer);\n clearTimeout(this.collapseTimer);\n }\n}\n","// framework/angular/thinking-states/thinking-states.component.ts\n//\n// Native Angular port of framework/react/thinking-states/ThinkingStates.tsx.\n// Ten thinking indicators to pick from, each a small mark beside a status line\n// that steps through what the agent is doing. Inputs mirror the React props;\n// the grid generation, the auto-stepping, the stream typing and the seconds\n// counter are ported from the vanilla JS (thinking-states.js).\n\nimport {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\nexport type ThinkingVariant = 'orbit' | 'morph' | 'scan' | 'stream' | 'matrix' | 'stack' | 'pulse' | 'wave' | 'bounce' | 'spiral';\ntype GridKind = 'orbit' | 'morph' | 'scan' | 'stream' | 'spiral';\n\n/** One dot in a grid mark: its part classes and optional animation delay. */\ninterface Dot {\n cls: string;\n delay: number | null;\n}\n\n// Orbit, Morph, Scan, Stream and Spiral are drawn on a grid of dots, each at its\n// own density (Orbit 5x5, Scan 6x6, Morph 7x7, Stream 4x3, Spiral 5x5): which\n// part each dot plays, and its place in the run as an animation delay.\nfunction grid(k: GridKind): Dot[] {\n const n = { orbit: 5, scan: 6, morph: 7, stream: 4, spiral: 5 }[k];\n const rows = k === 'stream' ? 3 : n;\n const at = (x: number, y: number) => y * n + x;\n const cls: string[] = Array(n * rows).fill('');\n const dly: (number | null)[] = Array(n * rows).fill(null);\n const pose = new Set<number>();\n const run = (order: number[], dur: number) =>\n order.forEach((c, i) => { dly[c] = (i / order.length - 1) * dur; });\n if (k === 'orbit') {\n const ring: number[] = [];\n for (let x = 0; x < n; x++) ring.push(at(x, 0));\n for (let y = 1; y < n; y++) ring.push(at(n - 1, y));\n for (let x = n - 2; x >= 0; x--) ring.push(at(x, n - 1));\n for (let y = n - 2; y > 0; y--) ring.push(at(0, y));\n ring.forEach((c) => { cls[c] = 'r'; });\n run(ring, 1.6);\n cls[at(2, 2)] = 'c';\n [0, ring.length - 1, ring.length - 2].forEach((i) => pose.add(ring[i]));\n } else if (k === 'scan') {\n const len = [6, 0, 5, 0, 3, 0];\n for (let y = 0; y < n; y++)\n for (let x = 0; x < n; x++) {\n const c = at(x, y);\n cls[c] = x < len[y] ? 'l' : 'b';\n dly[c] = (x / n - 1) * 1.6;\n if (x === 2) pose.add(c);\n }\n } else if (k === 'morph') {\n for (let y = 0; y < n; y++)\n for (let x = 0; x < n; x++) {\n const rect = y >= 1 && y <= 5;\n const circ = (x - 3) ** 2 + (y - 3) ** 2 <= 10;\n const tri = Math.abs(x - 3) <= y / 2;\n const c = at(x, y);\n cls[c] = 'm' + ((rect ? 1 : 0) | (circ ? 2 : 0) | (tri ? 4 : 0));\n if (circ) pose.add(c);\n dly[c] = -(((c * 37 + 11) % 17) / 17) * 0.32;\n }\n } else if (k === 'spiral') {\n // walk an inward spiral; each cell lights in turn and holds its place in the run as a delay\n const path: number[] = [];\n let x0 = 0, y0 = 0, x1 = n - 1, y1 = n - 1;\n while (x0 <= x1 && y0 <= y1) {\n for (let x = x0; x <= x1; x++) path.push(at(x, y0));\n for (let y = y0 + 1; y <= y1; y++) path.push(at(x1, y));\n if (y0 < y1) for (let x = x1 - 1; x >= x0; x--) path.push(at(x, y1));\n if (x0 < x1) for (let y = y1 - 1; y > y0; y--) path.push(at(x0, y));\n x0++; y0++; x1--; y1--;\n }\n path.forEach((c) => { cls[c] = 'sp'; });\n run(path, 1.8);\n [path[path.length - 1], path[0], path[1]].forEach((c) => pose.add(c));\n } else {\n for (let y = 0; y < rows; y++)\n for (let x = 0; x < n; x++) {\n const c = at(x, y);\n cls[c] = 's' + c;\n if (y < 2) pose.add(c);\n }\n }\n return cls.map((x, c) => ({\n cls: [x, pose.has(c) ? 'p' : '']\n .filter(Boolean)\n .map((y) => 'vo-' + y)\n .join(' '),\n delay: dly[c],\n }));\n}\n\nconst GRIDS: Record<GridKind, Dot[]> = {\n orbit: grid('orbit'),\n morph: grid('morph'),\n scan: grid('scan'),\n stream: grid('stream'),\n spiral: grid('spiral'),\n};\n\nconst MATRIX = Array.from({ length: 16 }, (_, i) => i);\nconst STACK = [0, 1, 2];\nconst WAVE = [0, 1, 2, 3, 4];\n\n/** Ten thinking indicators to pick from, each a small mark beside a status line. */\n@Component({\n selector: 'vo-thinking-states',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" [attr.data-v]=\"variant\" class=\"vo-ths\">\n <div class=\"vo-ths-row\">\n <span class=\"vo-ths-mk\" aria-hidden=\"true\">\n @switch (variant) {\n @case ('matrix') {\n <span class=\"vo-ths-mtx\">\n @for (i of matrix; track i) { <i></i> }\n </span>\n }\n @case ('stack') {\n <span class=\"vo-ths-stk\"><i></i><i></i><i></i></span>\n }\n @case ('pulse') {\n <span class=\"vo-ths-pul\"><i class=\"vo-core\"></i><i class=\"vo-ring\"></i><i class=\"vo-ring\"></i></span>\n }\n @case ('wave') {\n <span class=\"vo-ths-wav\">\n @for (i of wave; track i) { <i></i> }\n </span>\n }\n @case ('bounce') {\n <span class=\"vo-ths-bnc\"><i></i><i></i><i></i></span>\n }\n @default {\n <span class=\"vo-ths-dg\" [attr.data-k]=\"gridKind\">\n @for (d of dots; track $index) {\n <i [class]=\"d.cls\" [style.animationDelay]=\"d.delay != null ? d.delay.toFixed(3) + 's' : null\"></i>\n }\n </span>\n }\n }\n </span>\n <span class=\"vo-ths-l\" aria-hidden=\"true\">\n <span class=\"vo-ths-tx\" [class.vo-shim]=\"variant === 'orbit'\">{{ shown }}</span>\n @if (variant === 'stream') {\n <span class=\"vo-ths-car\"></span>\n }\n </span>\n @if (secs !== null) {\n <span class=\"vo-ths-t vo-num\" aria-hidden=\"true\">{{ secs }}s</span>\n }\n </div>\n <!-- a screen reader hears each new line once, never the letters as they type -->\n <span class=\"vo-ths-sr\" role=\"status\" aria-live=\"polite\">{{ text }}</span>\n </div>\n `,\n styleUrl: './thinking-states.css',\n})\nexport class ThinkingStatesComponent implements OnInit, OnChanges, OnDestroy {\n /** Which indicator to show. */\n @Input() variant: ThinkingVariant = 'orbit';\n /** The status lines. With more than one, they take turns unless `current` is set. */\n @Input() steps: string[] = ['Thinking'];\n /** Index of the line to show. Leave it out to let the lines take turns. */\n @Input() current?: number;\n /** Milliseconds each line shows for when they take turns. */\n @Input() interval = 2600;\n /** Seconds at the end of the line. Counts by itself when left out; false hides it. */\n @Input() seconds?: number | false;\n\n /** The whole current line (for the screen reader). */\n text = '';\n /** What is painted now (the typed prefix in Stream, otherwise the whole line). */\n shown = '';\n /** Seconds shown, or null when hidden. */\n secs: number | null = 0;\n\n private auto = 0;\n private counted = 0;\n private typed = 0;\n private rotateTimer?: ReturnType<typeof setInterval>;\n private secondTimer?: ReturnType<typeof setInterval>;\n private typeTimer?: ReturnType<typeof setInterval>;\n\n constructor(private readonly reduced: ReducedMotionService) {}\n\n get gridKind(): GridKind {\n return this.variant === 'morph' || this.variant === 'scan' || this.variant === 'stream' || this.variant === 'spiral'\n ? this.variant\n : 'orbit';\n }\n\n get dots(): Dot[] {\n return GRIDS[this.gridKind];\n }\n\n get matrix(): number[] {\n return MATRIX;\n }\n\n get stack(): number[] {\n return STACK;\n }\n\n get wave(): number[] {\n return WAVE;\n }\n\n ngOnInit(): void {\n this.startRotation();\n this.startSeconds();\n this.updateText(false);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['current'] || changes['steps'] || changes['interval']) {\n this.startRotation();\n }\n if (changes['seconds']) {\n this.startSeconds();\n }\n if (changes['variant'] || changes['current'] || changes['steps']) {\n this.updateText(!changes['variant']);\n }\n }\n\n // the lines take turns by themselves unless `current` fixes one, or there is only one\n private startRotation(): void {\n clearInterval(this.rotateTimer);\n this.rotateTimer = undefined;\n if (this.current !== undefined || this.steps.length < 2) return;\n this.rotateTimer = setInterval(() => {\n this.auto = (this.auto + 1) % this.steps.length;\n this.updateText(true);\n }, this.interval);\n }\n\n private startSeconds(): void {\n clearInterval(this.secondTimer);\n this.secondTimer = undefined;\n if (this.seconds === false) {\n this.secs = null;\n return;\n }\n if (this.seconds !== undefined) {\n this.secs = this.seconds;\n return;\n }\n this.secs = this.counted;\n this.secondTimer = setInterval(() => {\n this.counted++;\n this.secs = this.counted;\n }, 1000);\n }\n\n // Stream types each new line out behind its caret; the others show it whole.\n private updateText(fresh: boolean): void {\n const index = Math.max(0, Math.min(this.current ?? this.auto, this.steps.length - 1));\n const next = this.steps[index] ?? '';\n const changed = next !== this.text;\n this.text = next;\n\n clearInterval(this.typeTimer);\n this.typeTimer = undefined;\n\n if (this.variant !== 'stream' || this.reduced.reduce() || !fresh || !changed) {\n this.shown = next;\n this.typed = next.length;\n return;\n }\n let n = 0;\n this.typed = 0;\n this.shown = '';\n this.typeTimer = setInterval(() => {\n n++;\n this.typed = n;\n this.shown = next.slice(0, n);\n if (n >= next.length) {\n clearInterval(this.typeTimer);\n this.typeTimer = undefined;\n }\n }, 32);\n }\n\n ngOnDestroy(): void {\n clearInterval(this.rotateTimer);\n clearInterval(this.secondTimer);\n clearInterval(this.typeTimer);\n }\n}\n","// framework/angular/thread-panel/thread-panel.component.ts\n//\n// Native Angular port of framework/react/thread-panel/ThreadPanel.tsx.\n// Several conversations with an agent, one tab each, with a reply field under\n// the open one. The underline slides to the open tab; switching a thread\n// staggers its messages in, and a later message glides into view. Inputs mirror\n// the React props; the open thread and the draft can be controlled or left to\n// the component.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** A file or page the agent used, shown as a chip above its reply. */\nexport interface ThreadSource {\n label: string;\n /** The tooltip shown on hover. Defaults to the label. */\n tip?: string;\n onClick?: () => void;\n}\n\nexport interface ThreadMessage {\n /** Keeps the message in place when the list changes. Defaults to its position. */\n id?: string;\n from: 'user' | 'agent';\n text: string;\n /** Files or pages the agent used, shown as chips above its reply. */\n sources?: ThreadSource[];\n /** Shows a shimmering \"Thinking\" (or `text`, if given) while the agent works on a reply. */\n thinking?: boolean;\n}\n\nexport interface Thread {\n id: string;\n title: string;\n /** The dot in front of the title, any CSS colour, like 'var(--vo-ok-mark)'. Defaults to a quiet grey. */\n color?: string;\n messages: ThreadMessage[];\n}\n\n/** The underline position under the open tab. */\ninterface Ink {\n left: number;\n width: number;\n}\n\n@Component({\n selector: 'vo-thread-panel',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"rootClass\">\n <div #tabs class=\"vo-thp-tabs\" role=\"tablist\">\n @for (t of threads; track t.id) {\n <button\n type=\"button\"\n class=\"vo-thp-tab\"\n role=\"tab\"\n [attr.aria-selected]=\"t.id === thread?.id\"\n (click)=\"setCur(t.id)\"\n >\n <span class=\"vo-dot\" [style.color]=\"t.color ?? 'var(--vo-faint)'\"></span>{{ t.title }}\n </button>\n }\n <span class=\"vo-thp-ink\" [style.left.px]=\"ink.left\" [style.width.px]=\"ink.width\"></span>\n </div>\n\n @if (thread; as th) {\n <div class=\"vo-thp-body\" aria-live=\"polite\">\n @for (m of th.messages; track messageKey(m, $index); let i = $index) {\n @if (m.from === 'user') {\n <div class=\"vo-bub vo-msg-in\" [style.animation-delay.ms]=\"delay(i)\">{{ m.text }}</div>\n } @else if (m.thinking) {\n <div class=\"vo-thp-ag vo-msg-in\" [style.animation-delay.ms]=\"delay(i)\">\n <span class=\"vo-shim\">{{ m.text || 'Thinking' }}</span>\n </div>\n } @else {\n <div class=\"vo-thp-ag vo-msg-in\" [style.animation-delay.ms]=\"delay(i)\">\n @if (m.sources?.length) {\n <div class=\"vo-src\">\n @for (s of m.sources; track $index) {\n <button\n type=\"button\"\n class=\"vo-fchip vo-lnk\"\n [attr.data-tip]=\"s.tip ?? s.label\"\n (click)=\"s.onClick?.()\"\n >\n <vo-icon name=\"file-text\" size=\"xs\"></vo-icon>{{ s.label }}\n </button>\n }\n </div>\n }\n {{ m.text }}\n </div>\n }\n }\n </div>\n }\n\n <form class=\"vo-thp-in\" (submit)=\"send($event)\">\n <input\n class=\"vo-thp-field\"\n aria-label=\"Reply\"\n [placeholder]=\"placeholder\"\n [value]=\"draft\"\n (input)=\"onInput($event)\"\n />\n <button type=\"submit\" class=\"vo-thp-send\" aria-label=\"Send\" data-tip=\"Send\" data-tip-k=\"↵\" [disabled]=\"!draft.trim()\">\n <vo-icon name=\"chev-u\" size=\"sm\"></vo-icon>\n </button>\n </form>\n </div>\n `,\n styleUrl: './thread-panel.css',\n})\nexport class ThreadPanelComponent implements OnChanges, AfterViewInit, OnDestroy {\n @Input({ required: true }) threads: Thread[] = [];\n\n /** The id of the open thread. Leave it out to let the tabs switch it. */\n @Input() value?: string;\n @Input() defaultValue?: string;\n @Output() valueChange = new EventEmitter<string>();\n\n /** Called with the reply and the open thread's id. Add the message to that thread to show it. */\n @Output() sendMessage = new EventEmitter<{ text: string; threadId: string }>();\n\n /** The reply being written. Leave it out to let the field keep its own. */\n @Input() draftInput?: string;\n @Input() defaultDraft = '';\n @Output() draftChange = new EventEmitter<string>();\n\n @Input() placeholder = 'Reply to the agent';\n\n /** Sits flat in a chat column (the default). Set false to give it a card of its own. */\n @Input() bare = true;\n @Input() className?: string;\n\n @ViewChild('tabs') private tabsRef!: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n ink: Ink = { left: 0, width: 0 };\n // the number of messages already present when the open thread mounted; only\n // later ones are new, and a user tab switch restarts the stagger from zero\n private first = 0;\n private curUncontrolled?: string;\n private draftUncontrolled = '';\n private ro?: ResizeObserver;\n\n get rootClass(): string {\n return ['vo-thp', !this.bare ? 'vo-panel' : '', this.className ?? ''].filter(Boolean).join(' ');\n }\n\n get cur(): string {\n return this.value ?? this.curUncontrolled ?? this.threads[0]?.id ?? '';\n }\n\n get thread(): Thread | undefined {\n return this.threads.find((t) => t.id === this.cur) ?? this.threads[0];\n }\n\n get draft(): string {\n return this.draftInput ?? this.draftUncontrolled;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultValue'] && this.curUncontrolled === undefined) {\n this.curUncontrolled = this.defaultValue;\n }\n if (changes['defaultDraft'] && !changes['defaultDraft'].previousValue) {\n this.draftUncontrolled = this.defaultDraft;\n }\n if (changes['threads']) {\n this.first = this.thread?.messages.length ?? 0;\n }\n if (changes['value'] || changes['threads']) {\n queueMicrotask(() => this.place());\n }\n }\n\n ngAfterViewInit(): void {\n if (this.draftUncontrolled === '') this.draftUncontrolled = this.defaultDraft;\n this.first = this.thread?.messages.length ?? 0;\n this.place();\n // keep the underline on the open tab as fonts load and the width changes\n (document as Document & { fonts?: FontFaceSet }).fonts?.ready.then(() => this.place());\n this.ro = new ResizeObserver(() => this.place());\n this.ro.observe(this.tabsRef.nativeElement);\n }\n\n ngOnDestroy(): void {\n this.ro?.disconnect();\n }\n\n /** The underline slides to the open tab, 10px in from each side. */\n private place(): void {\n const el = this.tabsRef?.nativeElement;\n if (!el) return;\n const b = el.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (b) this.ink = { left: b.offsetLeft + 10, width: b.offsetWidth - 20 };\n }\n\n setCur(id: string): void {\n if (this.value === undefined) {\n this.curUncontrolled = id;\n // switching restarts the stagger, so every message comes in again\n this.first = this.threads.find((t) => t.id === id)?.messages.length ?? 0;\n }\n this.valueChange.emit(id);\n queueMicrotask(() => this.place());\n }\n\n onInput(e: Event): void {\n const v = (e.target as HTMLInputElement).value;\n if (this.draftInput === undefined) this.draftUncontrolled = v;\n this.draftChange.emit(v);\n }\n\n send(e: Event): void {\n e.preventDefault();\n const v = this.draft.trim();\n const th = this.thread;\n if (!v || !th) return;\n if (this.draftInput === undefined) this.draftUncontrolled = '';\n this.draftChange.emit('');\n this.sendMessage.emit({ text: v, threadId: th.id });\n }\n\n delay(i: number): number {\n // the first messages stagger in; a later one simply glides, and none wait when motion is reduced\n if (this.motion.reduce()) return 0;\n return i < this.first ? i * 70 : 0;\n }\n\n messageKey(m: ThreadMessage, i: number): string {\n return (m.id ?? i) + (m.thinking ? '-t' : '');\n }\n}\n","// framework/angular/toast/toast.component.ts\n//\n// Native Angular port of framework/react/toast/Toast.tsx.\n// One toast at a time: a new one rises in while the last one slips away. The\n// tone picks the icon and its colour (loading spins). A new id swaps the toast;\n// the same id changes the text in place. Inputs mirror the React props.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Tone of the toast: picks the icon and its colour. */\nexport type ToastTone = 'success' | 'error' | 'info' | 'loading';\n\n/** The action button shown before the close button, like Undo or Retry. */\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n variant?: 'ghost' | 'primary' | 'ink';\n /** Swaps the label for a spinner. */\n busy?: boolean;\n}\n\n/** The data for one toast. */\nexport interface ToastData {\n /** A new id slides a new toast in and the old one away. Keep the id to change the text in place. */\n id: string | number;\n /** Picks the icon and its colour. loading spins. */\n tone?: ToastTone;\n title: string;\n /** The quieter line under the title. */\n description?: string;\n action?: ToastAction;\n}\n\ninterface ToneStyle {\n icon: VoIconName | null;\n color: string;\n bg: string;\n}\n\nconst TONES: Record<ToastTone, ToneStyle> = {\n success: { icon: 'ok', color: 'var(--vo-ok)', bg: 'var(--vo-ok-bg)' },\n error: { icon: 'alert', color: 'var(--vo-bad)', bg: 'var(--vo-bad-bg)' },\n info: { icon: 'info', color: 'var(--vo-pb)', bg: 'var(--vo-pb-bg)' },\n loading: { icon: null, color: 'var(--vo-fg)', bg: 'var(--vo-chip)' },\n};\n\n/** A toast kept on screen, with its exit state while it leaves. */\ninterface Shown {\n toast: ToastData;\n leaving: boolean;\n key: string;\n}\n\n@Component({\n selector: 'vo-toast',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-tst-slot\" aria-live=\"polite\">\n @for (s of shown; track s.key) {\n <div\n class=\"vo-tst-t\"\n [class.vo-tst-out]=\"s.leaving\"\n [class.vo-tst-in]=\"!s.leaving\"\n role=\"status\"\n [attr.inert]=\"s.leaving ? '' : null\"\n >\n <span class=\"vo-g\" [style.color]=\"tone(s.toast).color\" [style.background]=\"tone(s.toast).bg\">\n @if (tone(s.toast).icon; as ic) {\n <vo-icon [name]=\"ic\"></vo-icon>\n } @else {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n </span>\n <div class=\"vo-tx\">\n <b>{{ s.toast.title }}</b>\n @if (s.toast.description !== undefined) {\n <span>{{ s.toast.description }}</span>\n }\n </div>\n <div class=\"vo-acts\">\n @if (s.toast.action; as a) {\n <button\n type=\"button\"\n class=\"vo-pill vo-sm\"\n [class.vo-primary]=\"a.variant === 'primary' || a.variant === 'ink'\"\n [class.vo-ghost]=\"a.variant !== 'primary' && a.variant !== 'ink'\"\n [attr.aria-busy]=\"a.busy ? true : null\"\n (click)=\"runAction(a)\"\n >\n @if (a.busy) {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n } @else {\n {{ a.label }}\n }\n </button>\n }\n @if (!s.leaving) {\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Dismiss\" (click)=\"close(s.toast)\">\n <vo-icon name=\"x\"></vo-icon>\n </button>\n }\n </div>\n </div>\n }\n </div>\n `,\n styleUrl: './toast.css',\n})\nexport class ToastComponent implements OnChanges, OnDestroy {\n /** The toast to show, or null for none. */\n @Input() toast: ToastData | null = null;\n\n /** Emitted by the close button. The toast leaves either way. */\n @Output() dismiss = new EventEmitter<ToastData['id']>();\n\n private readonly motion = inject(ReducedMotionService);\n\n /** The toasts rendered now: the current one plus any still playing their exit. */\n shown: Shown[] = [];\n // the close button hides the toast straight away, whether or not the parent clears it.\n // it only suppresses the exact toast object it was pressed on, so the parent can show\n // the same id again (set it to null and back, or replace it) and the toast returns\n private closed: ToastData | null = null;\n private curId: ToastData['id'] | null = null;\n private timers = new Set<ReturnType<typeof setTimeout>>();\n\n tone(t: ToastData): ToneStyle {\n return TONES[t.tone ?? 'success'];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!changes['toast']) return;\n // a new prop value clears the close, so the same id can be shown again\n if (this.closed && this.closed !== this.toast) this.closed = null;\n const target = this.toast && this.toast !== this.closed ? this.toast : null;\n const nextId = target?.id ?? null;\n if (nextId !== this.curId) {\n // move the current one to leaving, then bring the new one in\n this.shown = this.shown.map((s) =>\n !s.leaving ? { ...s, leaving: true } : s\n );\n const cur = this.shown.find((s) => s.leaving && s.toast.id === this.curId);\n if (cur) this.scheduleRemoval(cur);\n if (target) {\n this.shown = [...this.shown, { toast: target, leaving: false, key: 't' + target.id }];\n }\n this.curId = nextId;\n } else if (target) {\n // same id: update the text in place\n this.shown = this.shown.map((s) =>\n !s.leaving ? { ...s, toast: target } : s\n );\n }\n }\n\n private scheduleRemoval(s: Shown): void {\n const t = setTimeout(() => {\n this.shown = this.shown.filter((x) => x !== s);\n this.timers.delete(t);\n }, this.motion.reduce() ? 0 : 300);\n this.timers.add(t);\n }\n\n runAction(a: ToastAction): void {\n if (!a.busy) a.onClick();\n }\n\n close(t: ToastData): void {\n this.closed = this.toast;\n // play the exit at once\n const s = this.shown.find((x) => !x.leaving && x.toast.id === t.id);\n if (s) {\n s.leaving = true;\n this.scheduleRemoval(s);\n }\n this.curId = null;\n this.dismiss.emit(t.id);\n }\n\n ngOnDestroy(): void {\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/toast-stack/toast-stack.component.ts\n//\n// Native Angular port of framework/react/toast-stack/ToastStack.tsx.\n// Notifications stack into a deck and fan out when the pointer is over them or\n// the focus is inside. A new toast rises in from below, blurred; a dismissed one\n// keeps its place for a moment and slides off to the right as it fades. Inputs\n// mirror the React props; the close button emits `dismiss`.\n\nimport {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChildren,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Tone of a stacked toast: colours the round icon badge. */\nexport type ToastStackTone =\n | 'neutral' | 'ok' | 'warn' | 'bad' | 'merge' | 'blue' | 'purple'\n | 'green' | 'orange' | 'red' | 'yellow' | 'pink' | 'teal';\n\n/** The data for one toast in the stack. */\nexport interface StackToast {\n id: string | number;\n /** The icon in the round badge. */\n icon: VoIconName;\n /** Colours the badge. Defaults to neutral. */\n tone?: ToastStackTone;\n title: string;\n /** The quiet line under the title. */\n detail?: string;\n /** Like \"now\" or \"2m\". */\n time?: string;\n}\n\n/** The inline style a toast is placed with. */\ninterface Placement {\n transform: string;\n opacity: number;\n filter: string;\n zIndex: number;\n}\n\n/** A toast kept on screen, with its exit style while it leaves. */\ninterface Leaving {\n toast: StackToast;\n style: Placement;\n at: number;\n}\n\nconst TONE: Record<ToastStackTone, [string, string]> = {\n neutral: ['--vo-fg2', '--vo-chip'], ok: ['--vo-ok', '--vo-ok-bg'], warn: ['--vo-warn', '--vo-warn-bg'],\n bad: ['--vo-bad', '--vo-bad-bg'], merge: ['--vo-merge', '--vo-merge-bg'], blue: ['--vo-pb', '--vo-pb-bg'],\n purple: ['--vo-pl', '--vo-pl-bg'], green: ['--vo-pm', '--vo-pm-bg'], orange: ['--vo-pp', '--vo-pp-bg'],\n red: ['--vo-pr', '--vo-pr-bg'], yellow: ['--vo-py', '--vo-py-bg'], pink: ['--vo-pk', '--vo-pk-bg'],\n teal: ['--vo-pt', '--vo-pt-bg'],\n};\n\n// a new toast rises in from below, blurred, before it takes its place\nconst ARRIVING: Placement = { transform: 'translateY(24px) scale(.96)', opacity: 0, filter: 'blur(6px)', zIndex: 100 };\n\n@Component({\n selector: 'vo-toast-stack',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-tsk-stack\"\n [class.vo-fan]=\"fan\"\n aria-live=\"polite\"\n [style.--vo-fanh]=\"fanh !== null ? fanh + 'px' : null\"\n (pointerenter)=\"onEnter()\"\n (pointerleave)=\"onLeave()\"\n (focusin)=\"onFocusIn()\"\n (focusout)=\"onFocusOut($event)\"\n >\n @for (row of rows; track row.toast.id) {\n <div\n #tskCard\n class=\"vo-tsk-c\"\n [attr.data-id]=\"row.toast.id\"\n [style.transform]=\"row.style.transform\"\n [style.opacity]=\"row.style.opacity\"\n [style.filter]=\"row.style.filter\"\n [style.zIndex]=\"row.style.zIndex\"\n [attr.inert]=\"row.inert ? '' : null\"\n >\n <span\n class=\"vo-g\"\n [style.color]=\"'var(' + tone(row.toast)[0] + ')'\"\n [style.background]=\"'var(' + tone(row.toast)[1] + ')'\"\n >\n <vo-icon [name]=\"row.toast.icon\" size=\"sm\"></vo-icon>\n </span>\n <div class=\"vo-tx\">\n <b>{{ row.toast.title }}</b>\n @if (row.toast.detail) {\n <span>{{ row.toast.detail }}</span>\n }\n </div>\n @if (row.toast.time) {\n <span class=\"vo-t\">{{ row.toast.time }}</span>\n }\n <button type=\"button\" class=\"vo-ib\" aria-label=\"Dismiss\" (click)=\"onDismiss(row.toast)\">\n <vo-icon name=\"x\" size=\"sm\"></vo-icon>\n </button>\n </div>\n }\n </div>\n `,\n styleUrl: './toast-stack.css',\n})\nexport class ToastStackComponent implements OnChanges, AfterViewChecked, OnDestroy {\n /** Oldest first. The last one sits in front. */\n @Input() toasts: StackToast[] = [];\n\n /** Fans the stack out. Leave it out (null) to fan it while the pointer is over it. */\n @Input() expanded: boolean | null = null;\n\n /** How many toasts stay mounted. Older ones drop off the back. */\n @Input() max = 6;\n\n /** Emitted when a toast's close button is pressed. */\n @Output() dismiss = new EventEmitter<StackToast['id']>();\n\n @ViewChildren('tskCard') cards!: QueryList<ElementRef<HTMLDivElement>>;\n\n private readonly motion = inject(ReducedMotionService);\n\n /** The toasts shown now (live, front first in the DOM order below), plus any leaving. */\n rows: { toast: StackToast; style: Placement; inert: boolean }[] = [];\n\n private hover = false;\n private focused = false;\n private live: StackToast[] = [];\n private placed = new Set<StackToast['id']>();\n private leaving: Leaving[] = [];\n private heights = new Map<StackToast['id'], number>();\n private prevIds = '';\n private rafs = new Set<number>();\n private timers = new Set<ReturnType<typeof setTimeout>>();\n fanh: number | null = null;\n\n get fan(): boolean {\n return this.expanded ?? (this.hover || this.focused);\n }\n\n tone(t: StackToast): [string, string] {\n return TONE[t.tone ?? 'neutral'];\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['toasts'] || changes['max']) this.sync();\n this.rebuild();\n }\n\n // measure the mounted cards, then place any just-arrived toast\n ngAfterViewChecked(): void {\n let changed = false;\n this.cards.forEach((ref) => {\n const el = ref.nativeElement;\n const id = this.idOf(el);\n if (id === null) return;\n const h = el.offsetHeight;\n if (this.heights.get(id) !== h) {\n this.heights.set(id, h);\n changed = true;\n }\n });\n\n const fresh = this.live.filter((t) => !this.placed.has(t.id)).map((t) => t.id);\n if (fresh.length) {\n // wait two frames in the arriving pose, so the move to place animates\n const raf = requestAnimationFrame(() => {\n this.rafs.delete(raf);\n const raf2 = requestAnimationFrame(() => {\n this.rafs.delete(raf2);\n fresh.forEach((id) => this.placed.add(id));\n this.rebuild();\n });\n this.rafs.add(raf2);\n });\n this.rafs.add(raf);\n } else if (changed) {\n this.rebuild();\n }\n }\n\n private idOf(el: HTMLDivElement): StackToast['id'] | null {\n const raw = el.getAttribute('data-id');\n if (raw === null) return null;\n const match =\n this.live.find((t) => String(t.id) === raw) ??\n this.leaving.find((l) => String(l.toast.id) === raw)?.toast;\n return match ? match.id : null;\n }\n\n // reconcile the incoming list: trim to `max`, track leavers, drop stale heights\n private sync(): void {\n const next = this.toasts.slice(-this.max);\n const ids = next.map((t) => t.id).join('\\u0000');\n if (ids === this.prevIds) {\n this.live = next;\n return;\n }\n\n const now = new Set(next.map((t) => t.id));\n const n = this.live.length;\n const fanWas = this.fan;\n const gone: Leaving[] = [];\n this.live.forEach((t, at) => {\n if (now.has(t.id) || this.leaving.some((l) => l.toast.id === t.id)) return;\n const was = this.place(n - 1 - at, fanWas);\n gone.push({ toast: t, at, style: { ...was, transform: was.transform + ' translateX(30px)', opacity: 0 } });\n });\n\n if (gone.length) {\n this.leaving = [...this.leaving, ...gone];\n const delay = this.motion.reduce() ? 0 : 400;\n const timer = setTimeout(() => {\n this.leaving = this.leaving.filter((l) => !gone.includes(l));\n this.timers.delete(timer);\n this.rebuild();\n }, delay);\n this.timers.add(timer);\n }\n\n // forget toasts that are neither live nor leaving\n const keep = new Set<StackToast['id']>([...next.map((t) => t.id), ...this.leaving.map((l) => l.toast.id)]);\n this.heights.forEach((_, id) => { if (!keep.has(id)) this.heights.delete(id); });\n this.placed.forEach((id) => { if (!keep.has(id)) this.placed.delete(id); });\n\n this.live = next;\n this.prevIds = ids;\n }\n\n // the front-first height list, used to leave the right gaps when fanned\n private frontHeights(): number[] {\n return this.live.slice().reverse().map((t) => this.heights.get(t.id) ?? 0);\n }\n\n /** Where a toast sits: `i` counts from the front (0 = front). */\n private place(i: number, fan: boolean): Placement {\n const hs = this.frontHeights();\n if (fan) {\n let y = 0;\n for (let k = 0; k < Math.min(i, 3); k++) y += hs[k] + 8;\n return { transform: `translateY(${-y}px)`, opacity: i > 3 ? 0 : 1, filter: 'none', zIndex: 100 - i };\n }\n const k = Math.min(i, 3);\n return {\n transform: `translateY(${-k * 10}px) scale(${1 - k * 0.05})`,\n opacity: i > 2 ? 0 : 1 - k * 0.15,\n filter: i ? 'blur(.3px)' : 'none',\n zIndex: 100 - i,\n };\n }\n\n // compose the rendered rows (live, with the leavers slotted back into their old spots)\n private rebuild(): void {\n const fan = this.fan;\n const front = this.live.slice().reverse();\n const hs = this.frontHeights();\n this.fanh = this.live.length ? (hs.slice(0, 4).reduce((a, b) => a + b + 8, 0) - 8 || 96) : null;\n\n const rows: { toast: StackToast; style: Placement; inert: boolean }[] = this.live.map((t) => {\n const i = front.indexOf(t);\n const style = this.placed.has(t.id) ? this.place(i, fan) : ARRIVING;\n const inert = fan ? i > 3 : i > 0;\n return { toast: t, style, inert };\n });\n\n this.leaving.slice().sort((a, b) => a.at - b.at).forEach((l) => {\n rows.splice(Math.min(l.at, rows.length), 0, { toast: l.toast, style: l.style, inert: true });\n });\n\n this.rows = rows;\n }\n\n onEnter(): void { this.hover = true; this.rebuild(); }\n onLeave(): void { this.hover = false; this.rebuild(); }\n onFocusIn(): void { if (!this.focused) { this.focused = true; this.rebuild(); } }\n onFocusOut(e: FocusEvent): void {\n const stack = e.currentTarget as HTMLElement;\n if (!stack.contains(e.relatedTarget as Node)) { this.focused = false; this.rebuild(); }\n }\n\n onDismiss(t: StackToast): void {\n this.dismiss.emit(t.id);\n }\n\n ngOnDestroy(): void {\n this.rafs.forEach((r) => cancelAnimationFrame(r));\n this.rafs.clear();\n this.timers.forEach((t) => clearTimeout(t));\n this.timers.clear();\n }\n}\n","// framework/angular/tool-call/tool-call.component.ts\n//\n// Native Angular port of framework/react/tool-call/ToolCall.tsx.\n// The tools an agent calls, with what went in and what came back, between its\n// message and its answer. Each call queues, then spins while running, then shows\n// the time it took and its output once done. Clicking a call folds its input and\n// output open or shut. The reply fades in a frame after every call is done.\n// Inputs mirror the React props; the open set is controllable or self-managed.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** Any value a tool takes or returns. */\nexport type Json =\n | string\n | number\n | boolean\n | null\n | Json[]\n | { [key: string]: Json };\n\n/** The lifecycle of one call: queued waits, running spins, done shows its result. */\nexport type ToolCallState = 'queued' | 'running' | 'done';\n\n/** One tool the agent called. */\nexport interface ToolCallItem {\n key: string;\n /** The tool's server or namespace, like \"billing\". */\n server?: string;\n /** The tool's name, like \"list_plan_changes\". */\n name: string;\n /** The icon in front of the call. */\n icon?: VoIconName;\n /** queued waits, running spins, done shows the time it took and the output. */\n state: ToolCallState;\n /** How long it took, like \"412 ms\". Shown once it is done. */\n duration?: string;\n /** What the agent sent, shown as highlighted JSON. */\n input?: Json;\n /** What came back, shown once it is done. */\n output?: Json;\n}\n\n/** One coloured piece of a rendered JSON value. */\ninterface JsonPart {\n /** 'k' key/keyword, 's' string, 'n' number, or plain punctuation/space. */\n cls: 'k' | 's' | 'n' | '';\n text: string;\n}\n\n@Component({\n selector: 'vo-tool-call',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" class=\"vo-tcx\">\n @if (message !== undefined && message !== null) {\n <p class=\"vo-msg\">{{ message }}</p>\n }\n <div class=\"vo-tcx-calls\">\n @for (call of calls; track call.key; let i = $index) {\n <div\n class=\"vo-tcx-c vo-enter\"\n [class.vo-open]=\"isOpen(call.key)\"\n [style.animation-delay.ms]=\"motion.reduce() ? 0 : 200 + i * 90\"\n >\n <button\n type=\"button\"\n class=\"vo-tcx-h\"\n [attr.aria-expanded]=\"isOpen(call.key)\"\n (click)=\"toggle(call.key)\"\n >\n <span class=\"vo-tcx-ic\">\n @if (call.state === 'running') {\n <span class=\"vo-radar\" style=\"color:var(--vo-fg)\" aria-hidden=\"true\"></span>\n } @else {\n <vo-icon [name]=\"call.icon ?? 'cpu'\" size=\"xs\"></vo-icon>\n }\n </span>\n <span class=\"vo-tcx-n\">\n @if (call.server) {\n <span>{{ call.server }}.</span>\n }\n <b>{{ call.name }}</b>\n </span>\n <span class=\"vo-tcx-ms\">\n <span class=\"vo-sw\">{{ label(call) }}</span>\n <span>\n @if (call.state === 'running') {\n <span class=\"vo-spin\" style=\"width:10px;height:10px\" aria-hidden=\"true\"></span>\n } @else if (call.state === 'done') {\n <span style=\"color:var(--vo-ok)\"><vo-icon name=\"check\" size=\"xs\"></vo-icon></span>\n }\n </span>\n </span>\n <vo-icon name=\"chev-d\" size=\"xs\" class=\"vo-tcx-chev\"></vo-icon>\n </button>\n <div class=\"vo-fold\" [class.vo-shut]=\"!isOpen(call.key)\">\n <div>\n <div class=\"vo-tcx-io\">\n <div>\n <div class=\"vo-tcx-l\">Input</div>\n <pre>@if (call.input !== undefined) {<span [innerHTML]=\"jsonHtml(call.input)\"></span>}</pre>\n </div>\n <div>\n <div class=\"vo-tcx-l\">Output</div>\n <pre>@if (call.state === 'done' && call.output !== undefined) {<span [innerHTML]=\"jsonHtml(call.output)\"></span>} @else {Waiting…}</pre>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n @if (reply !== undefined && reply !== null) {\n <p class=\"vo-msg vo-tcx-end\" [class.vo-in]=\"shown\" [attr.aria-hidden]=\"!shown\">{{ reply }}</p>\n }\n </div>\n `,\n styleUrl: './tool-call.css',\n})\nexport class ToolCallComponent implements OnChanges, OnDestroy {\n /** The agent's message before the calls. */\n @Input() message?: string | null;\n\n /** The tools the agent called. */\n @Input() calls: ToolCallItem[] = [];\n\n /** The agent's answer after the calls. It fades in once every call is done. */\n @Input() reply?: string | null;\n\n /** Keys of the calls that are open. Leave it out to let each call toggle itself. */\n @Input() open?: string[];\n\n /** The calls open at first when `open` is not controlled. */\n @Input() defaultOpen: string[] = [];\n\n /** Emitted with the new set of open keys whenever a call is toggled. */\n @Output() openChange = new EventEmitter<string[]>();\n\n readonly motion = inject(ReducedMotionService);\n\n /** The reply is laid out from the start and fades in a frame after the last call finishes. */\n shown = false;\n\n // the self-managed open set, used when `open` is not provided\n private openKeys: string[] = [];\n private raf?: ReturnType<typeof requestAnimationFrame>;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['defaultOpen'] && this.open === undefined) {\n this.openKeys = [...this.defaultOpen];\n }\n if (changes['calls']) {\n this.updateShown();\n }\n }\n\n private get done(): boolean {\n return this.calls.length > 0 && this.calls.every((c) => c.state === 'done');\n }\n\n private updateShown(): void {\n if (this.raf !== undefined) cancelAnimationFrame(this.raf);\n if (!this.done) {\n this.shown = false;\n return;\n }\n if (this.motion.reduce()) {\n this.shown = true;\n return;\n }\n this.raf = requestAnimationFrame(() => {\n this.shown = true;\n this.raf = undefined;\n });\n }\n\n isOpen(key: string): boolean {\n return (this.open ?? this.openKeys).includes(key);\n }\n\n toggle(key: string): void {\n const current = this.open ?? this.openKeys;\n const next = current.includes(key)\n ? current.filter((k) => k !== key)\n : [...current, key];\n if (this.open === undefined) this.openKeys = next;\n this.openChange.emit(next);\n }\n\n /** The status text swapped in the row: the duration once done, else the state. */\n label(call: ToolCallItem): string {\n if (call.state === 'done') return call.duration ?? 'Done';\n if (call.state === 'running') return 'Running';\n return 'Queued';\n }\n\n /** Renders a JSON value as the same coloured HTML the Vanilla/React port shows. */\n jsonHtml(value: Json): string {\n return this.parts(value, 0)\n .map((p) => (p.cls ? `<span class=\"vo-${p.cls}\">${this.esc(p.text)}</span>` : this.esc(p.text)))\n .join('');\n }\n\n // JSON on one line per object, each array item on its own line, keys, strings\n // and numbers in their own colours — mirrors JsonView in the React source.\n private parts(value: Json, depth: number): JsonPart[] {\n if (typeof value === 'string') return [{ cls: 's', text: `\"${value}\"` }];\n if (typeof value === 'number') return [{ cls: 'n', text: String(value) }];\n if (value === null || typeof value === 'boolean') {\n return [{ cls: 'k', text: String(value) }];\n }\n if (Array.isArray(value)) {\n if (!value.length) return [{ cls: '', text: '[]' }];\n const pad = '\\n' + ' '.repeat(depth + 1);\n const out: JsonPart[] = [{ cls: '', text: '[ ' }];\n value.forEach((v, i) => {\n if (i) out.push({ cls: '', text: ',' + pad });\n out.push(...this.parts(v, depth + 1));\n });\n out.push({ cls: '', text: ' ]' });\n return out;\n }\n const keys = Object.keys(value);\n if (!keys.length) return [{ cls: '', text: '{}' }];\n const out: JsonPart[] = [{ cls: '', text: '{ ' }];\n keys.forEach((k, i) => {\n if (i) out.push({ cls: '', text: ', ' });\n out.push({ cls: 'k', text: `\"${k}\"` }, { cls: '', text: ': ' });\n out.push(...this.parts(value[k], depth));\n });\n out.push({ cls: '', text: ' }' });\n return out;\n }\n\n private esc(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n }\n\n ngOnDestroy(): void {\n if (this.raf !== undefined) cancelAnimationFrame(this.raf);\n }\n}\n","// framework/angular/tooltip/tooltip.component.ts\n//\n// Native Angular port of framework/react/tooltip/Tooltip.tsx.\n// A toolbar of icon buttons whose labels wait a moment then follow the pointer\n// instantly between buttons, plus avatar chips that show a richer person card\n// on hover. Inputs mirror the React props; the hover/positioning logic is\n// ported from the Vanilla JS (delay + placement, kept inside the component).\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnDestroy,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\nexport interface TooltipTool {\n key: string;\n icon: VoIconName;\n /** The button's name, read out by screen readers. */\n label: string;\n /** The tooltip, when it should say more than the name. Defaults to the label. */\n tip?: string;\n /** A shortcut shown after the tip, like \"⌘Z\". */\n kbd?: string;\n onClick?: () => void;\n}\n\nexport interface TooltipPerson {\n key: string;\n initials: string;\n /** The avatar's colour, like 'var(--vo-av-l)'. */\n color: string;\n name: string;\n /** The quiet line under the name, like \"Design lead\". */\n role: string;\n /** What they are doing now, like \"Editing Pricing, frame 2\". */\n status: string;\n /** Shows the agent's thinking dots instead of the green dot. */\n working?: boolean;\n}\n\nconst DEFAULT_GROUPS: TooltipTool[][] = [\n [\n { key: 'undo', icon: 'undo', label: 'Undo', kbd: '⌘Z' },\n { key: 'comment', icon: 'edit', label: 'Comment', kbd: 'C' },\n { key: 'ask', icon: 'spark', label: 'Ask agent', tip: 'Ask the agent', kbd: '⌘J' },\n ],\n [{ key: 'share', icon: 'users', label: 'Share', tip: 'Share with your team' }],\n];\n\n// when the last visible tip closed, shared by every tooltip so moving straight\n// from one button to the next shows the next label at once (as on the site)\nlet tipSeen = -Infinity;\n\ninterface TipAt {\n x: number;\n y: number;\n label: string;\n kbd?: string;\n}\ninterface CardAt {\n person: TooltipPerson;\n left: number;\n top: number;\n}\n\n/** The ink for initials on an avatar colour: each of the eight avatar colours has its own ink token. */\nconst avatarInk = (color: string): string | undefined =>\n /^var\\(--vo-av-[a-z]\\)$/.test(color) ? color.replace(')', '-ink)') : undefined;\n\n/** A toolbar whose labels follow the pointer between buttons, with a richer card for people. */\n@Component({\n selector: 'vo-tooltip',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" #root class=\"vo-ttp\">\n <div class=\"vo-ttp-bar vo-panel\">\n @for (g of groups; track $index; let gi = $index) {\n @if (gi > 0) {\n <span class=\"vo-ttp-sep\"></span>\n }\n @for (t of g; track t.key) {\n <button\n type=\"button\"\n class=\"vo-ib\"\n [attr.aria-label]=\"t.label\"\n (click)=\"t.onClick?.()\"\n (pointerenter)=\"openTipFor(t, $event)\"\n (pointerleave)=\"leaveTip()\"\n (focus)=\"focusTip(t, $event)\"\n (blur)=\"leaveTip()\"\n >\n <vo-icon [name]=\"t.icon\" size=\"sm\"></vo-icon>\n </button>\n }\n }\n @if (people.length > 0) {\n <span class=\"vo-ttp-sep\"></span>\n <span class=\"vo-ttp-avs\">\n @for (person of people; track person.key) {\n <button\n type=\"button\"\n class=\"vo-ttp-av\"\n [attr.aria-label]=\"person.name\"\n (mouseenter)=\"openCardFor(person, $event)\"\n (mouseleave)=\"leaveCard()\"\n (focus)=\"focusCard(person, $event)\"\n (blur)=\"closeCard()\"\n >\n <span\n class=\"vo-av\"\n aria-hidden=\"true\"\n [style.background]=\"person.color\"\n [style.color]=\"ink(person.color)\"\n >{{ person.initials }}</span\n >\n </button>\n }\n </span>\n }\n </div>\n\n <!-- the toolbar's own dark tip, kept inside the component bounds -->\n <div\n #tip\n class=\"vo-tip\"\n [class.vo-show]=\"tipShow\"\n role=\"tooltip\"\n data-vo=\"\"\n [style.left.px]=\"tipAt?.x ?? 0\"\n [style.top.px]=\"tipAt?.y ?? 0\"\n [style.visibility]=\"tipAt ? 'visible' : 'hidden'\"\n >\n {{ tipAt?.label }}\n @if (tipAt?.kbd) {\n <span class=\"vo-kbd\">{{ tipAt?.kbd }}</span>\n }\n </div>\n\n <!-- the richer person card -->\n <div\n class=\"vo-ttp-card vo-panel\"\n [class.vo-show]=\"cardShow\"\n [style.left.px]=\"card?.left\"\n [style.top.px]=\"card?.top\"\n [attr.aria-hidden]=\"!cardShow\"\n >\n <div class=\"vo-ttp-ci\">\n @if (card; as c) {\n <div class=\"vo-ttp-ch\">\n <span\n class=\"vo-av\"\n aria-hidden=\"true\"\n [style.background]=\"c.person.color\"\n [style.color]=\"ink(c.person.color)\"\n >{{ c.person.initials }}</span\n >\n <div><b>{{ c.person.name }}</b><span>{{ c.person.role }}</span></div>\n </div>\n <div class=\"vo-ttp-cs\">\n @if (c.person.working) {\n <span style=\"display:inline-flex;color:var(--vo-accent)\">\n <span class=\"vo-think vo-on\" aria-hidden=\"true\"><i></i><i></i><i></i><i></i></span>\n </span>\n } @else {\n <span class=\"vo-dot\" aria-hidden=\"true\"></span>\n }\n {{ c.person.status }}\n </div>\n }\n </div>\n </div>\n\n @if (note) {\n <p class=\"vo-muted vo-ttp-n\">{{ note }}</p>\n }\n </div>\n `,\n styleUrl: './tooltip.css',\n})\nexport class TooltipComponent implements AfterViewInit, OnDestroy {\n /** The toolbar's buttons, in groups with a line between them. */\n @Input() groups: TooltipTool[][] = DEFAULT_GROUPS;\n /** Avatars at the end of the toolbar; hovering one shows a card. */\n @Input() people: TooltipPerson[] = [];\n /** A quiet line under the toolbar. */\n @Input() note?: string;\n /** How long the person card waits before it shows. */\n @Input() cardDelay = 300;\n\n private _openTip: string | null | undefined;\n private _openCard: string | null | undefined;\n\n /** Shows this tool's tip, by key, as if it were hovered. */\n @Input()\n set openTip(key: string | null | undefined) {\n this._openTip = key;\n this.applyOpenTip();\n }\n get openTip(): string | null | undefined {\n return this._openTip;\n }\n\n /** Shows this person's card, by key, as if they were hovered. */\n @Input()\n set openCard(key: string | null | undefined) {\n this._openCard = key;\n this.applyOpenCard();\n }\n get openCard(): string | null | undefined {\n return this._openCard;\n }\n\n @ViewChild('root') root!: ElementRef<HTMLDivElement>;\n @ViewChild('tip') tipEl!: ElementRef<HTMLDivElement>;\n\n tipAt: TipAt | null = null;\n tipShow = false;\n card: CardAt | null = null;\n cardShow = false;\n\n private tipTimer?: ReturnType<typeof setTimeout>;\n private cardTimer?: ReturnType<typeof setTimeout>;\n private tipOverKey: string | null = null;\n private cardOverKey: string | null = null;\n private ready = false;\n\n ink(color: string): string | undefined {\n return avatarInk(color);\n }\n\n ngAfterViewInit(): void {\n this.ready = true;\n this.applyOpenTip();\n this.applyOpenCard();\n }\n\n /* ---------- toolbar tips ---------- */\n\n openTipFor(t: TooltipTool, e: Event): void {\n this.tipOverKey = t.key;\n this.showTip(t, e.currentTarget as HTMLElement);\n }\n\n focusTip(t: TooltipTool, e: FocusEvent): void {\n const el = e.target as HTMLElement;\n if (el.matches(':focus-visible')) this.showTip(t, el, true);\n }\n\n leaveTip(): void {\n this.tipOverKey = null;\n if (this._openTip == null) this.hideTip();\n }\n\n private showTip(t: TooltipTool, el: HTMLElement, now = false): void {\n clearTimeout(this.tipTimer);\n const delay = now || performance.now() - tipSeen < 120 ? 0 : 380;\n this.tipTimer = setTimeout(() => this.placeTip(t, el), delay);\n }\n\n private placeTip(t: TooltipTool, el: HTMLElement): void {\n const box = this.root?.nativeElement;\n const node = this.tipEl?.nativeElement;\n if (!box || !node) return;\n this.tipAt = { x: 0, y: 0, label: t.tip ?? t.label, kbd: t.kbd };\n this.tipShow = false;\n // measure after the label is in, then centre above the button (within bounds)\n requestAnimationFrame(() => {\n const rr = box.getBoundingClientRect();\n const br = el.getBoundingClientRect();\n const w = node.offsetWidth;\n const h = node.offsetHeight;\n let x = br.left - rr.left + br.width / 2 - w / 2;\n x = Math.max(0, Math.min(x, rr.width - w));\n const y = br.top - rr.top - h - 8;\n this.tipAt = { ...this.tipAt!, x, y };\n requestAnimationFrame(() => (this.tipShow = true));\n });\n }\n\n private hideTip(): void {\n clearTimeout(this.tipTimer);\n if (this.tipAt) tipSeen = performance.now();\n this.tipShow = false;\n this.tipAt = null;\n }\n\n private applyOpenTip(): void {\n if (!this.ready || this._openTip === undefined) return;\n const tool = this.groups.flat().find((t) => t.key === this._openTip);\n if (tool) {\n const el = this.buttonFor(tool.key);\n if (el) this.showTip(tool, el, true);\n } else if (!this.tipOverKey) {\n this.hideTip();\n }\n }\n\n private buttonFor(key: string): HTMLElement | null {\n const box = this.root?.nativeElement;\n if (!box) return null;\n const idx = this.groups.flat().findIndex((t) => t.key === key);\n const buttons = box.querySelectorAll<HTMLElement>('.vo-ttp-bar > .vo-ib');\n return buttons[idx] ?? null;\n }\n\n /* ---------- person card ---------- */\n\n openCardFor(person: TooltipPerson, e: Event): void {\n this.cardOverKey = person.key;\n this.openCardAt(person, e.currentTarget as HTMLElement);\n }\n\n focusCard(person: TooltipPerson, e: FocusEvent): void {\n const el = e.target as HTMLElement;\n if (el.matches(':focus-visible')) this.openCardAt(person, el, true);\n }\n\n leaveCard(): void {\n this.cardOverKey = null;\n this.closeCard();\n }\n\n private openCardAt(person: TooltipPerson, el: HTMLElement, now = false): void {\n clearTimeout(this.cardTimer);\n this.cardTimer = setTimeout(\n () => {\n const box = this.root?.nativeElement;\n if (!box) return;\n const rr = box.getBoundingClientRect();\n const br = el.getBoundingClientRect();\n const left = Math.max(0, Math.min(br.left - rr.left + br.width / 2 - 115, rr.width - 230));\n this.card = { person, left, top: br.bottom - rr.top + 10 };\n this.cardShow = true;\n },\n now ? 0 : this.cardDelay,\n );\n }\n\n closeCard(): void {\n clearTimeout(this.cardTimer);\n this.cardShow = false;\n }\n\n private applyOpenCard(): void {\n if (!this.ready || this._openCard === undefined) return;\n const person = this.people.find((x) => x.key === this._openCard);\n const el = person ? this.avatarFor(person.key) : null;\n if (person && el) this.openCardAt(person, el, true);\n else if (!this.cardOverKey) this.closeCard();\n }\n\n private avatarFor(key: string): HTMLElement | null {\n const box = this.root?.nativeElement;\n if (!box) return null;\n const idx = this.people.findIndex((p) => p.key === key);\n const avatars = box.querySelectorAll<HTMLElement>('.vo-ttp-av');\n return avatars[idx] ?? null;\n }\n\n ngOnDestroy(): void {\n clearTimeout(this.tipTimer);\n clearTimeout(this.cardTimer);\n }\n}\n","// framework/angular/top-pages/top-pages.component.ts\n//\n// Native Angular port of framework/react/top-pages/TopPages.tsx.\n// The most visited pages, with their views and change. A sort switch (Views /\n// Change) re-orders the rows, which slide into place; each track fills in a\n// little after the one above it, and the total rolls up. Inputs mirror the\n// React props; the row stagger, the track fill, the total roll and the sort\n// switch are ported from the vanilla JS (top-pages.js).\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnDestroy,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** One page row. */\nexport interface TopPagesPage {\n /** The page's path, like \"/pricing\". */\n path: string;\n /** Its name, like \"Pricing\". */\n title: string;\n /** Views over the period. */\n views: number;\n /** Change against the period before, in percent, like 24 or -8. */\n change: number;\n /** Shown when you hover the row. Defaults to the site and the path, like \"visuno.dev/pricing\". */\n tip?: string;\n}\n\n/** How the rows are ordered. */\nexport type TopPagesSort = 'views' | 'change';\n\nconst ROW = 50;\nconst fmt = (n: number) => Math.round(n).toLocaleString('en-US');\n\n/** Internal per-row render state. */\ninterface RowView {\n page: TopPagesPage;\n index: number;\n at: number;\n rank: number;\n width: number;\n tip: string;\n changeText: string;\n changeClass: string;\n enterDelay: number;\n}\n\n@Component({\n selector: 'vo-top-pages',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n template: `\n <div data-vo=\"\" class=\"vo-tpx vo-panel\">\n <div class=\"vo-tpx-h\">\n <div>\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-tpx-sub\"\n ><span class=\"vo-num vo-tpx-tot\">{{ fmt(shownTotal) }}</span> views, {{ period }}</span\n >\n </div>\n <div class=\"vo-seg2 vo-tpx-sg\" role=\"group\" aria-label=\"Sort\">\n <span class=\"vo-knob\" [style.left.px]=\"knobLeft\" [style.width.px]=\"knobWidth\"></span>\n @for (o of options; track o.value) {\n <button\n type=\"button\"\n [attr.aria-pressed]=\"o.value === by\"\n (click)=\"select(o.value)\"\n >{{ o.label }}</button>\n }\n </div>\n </div>\n <div class=\"vo-tpx-list\" [style.height.px]=\"rows.length * ROW\">\n @for (r of rows; track r.page.path) {\n <div\n class=\"vo-tpx-r\"\n [class.vo-enter]=\"animate\"\n [style.transform]=\"'translateY(' + r.at * ROW + 'px)'\"\n [style.animationDelay.ms]=\"r.enterDelay\"\n [attr.title]=\"r.tip\"\n >\n <span class=\"vo-rk\">{{ r.rank }}</span>\n <span class=\"vo-pg\">\n <span class=\"vo-p\">{{ r.page.title }} <span class=\"vo-muted\">{{ r.page.path }}</span></span>\n <span class=\"vo-tr\"><i [style.width.%]=\"r.width\"></i></span>\n </span>\n <span class=\"vo-n vo-num\">{{ fmt(r.page.views) }}</span>\n <span class=\"vo-tag vo-ch vo-num {{ r.changeClass }}\">{{ r.changeText }}</span>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './top-pages.css',\n})\nexport class TopPagesComponent implements AfterViewInit, OnDestroy {\n /** The page rows. */\n @Input({ required: true }) pages: TopPagesPage[] = [];\n /** Header text. */\n @Input() title = 'Top pages';\n /** After the total, like \"last 30 days\". */\n @Input() period = 'last 30 days';\n /** Put in front of each path in the row tips, like \"visuno.dev\". */\n @Input() site?: string;\n /** How the rows are ordered. Leave it out to let the switch change it. */\n @Input() set sort(value: TopPagesSort | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined && value !== this.by) {\n this.by = value;\n if (this.ready) {\n this.reorder();\n this.placeKnob();\n }\n }\n }\n @Input() defaultSort: TopPagesSort = 'views';\n\n @Output() sortChange = new EventEmitter<TopPagesSort>();\n\n readonly ROW = ROW;\n readonly fmt = fmt;\n readonly options: { value: TopPagesSort; label: string }[] = [\n { value: 'views', label: 'Views' },\n { value: 'change', label: 'Change' },\n ];\n\n by: TopPagesSort = 'views';\n rows: RowView[] = [];\n shownTotal = 0;\n knobLeft = 0;\n knobWidth = 0;\n animate = false;\n\n private controlled = false;\n private ready = false;\n private max = 1;\n private timers: ReturnType<typeof setTimeout>[] = [];\n private frames: number[] = [];\n\n constructor(\n private readonly reduced: ReducedMotionService,\n private readonly cdr: ChangeDetectorRef,\n private readonly host: ElementRef<HTMLElement>,\n ) {}\n\n ngAfterViewInit(): void {\n if (!this.controlled) this.by = this.defaultSort;\n this.animate = !this.reduced.reduce();\n this.max = Math.max(1, ...this.pages.map((p) => p.views));\n this.rows = this.pages.map((page, index) => ({\n page,\n index,\n at: 0,\n rank: 0,\n width: 0,\n tip: page.tip ?? (this.site ? this.site + page.path : page.path),\n changeText: (page.change >= 0 ? '+' : '−') + Math.abs(page.change) + '%',\n changeClass: page.change >= 0 ? 'vo-ok' : 'vo-bad',\n enterDelay: index * 50,\n }));\n this.reorder();\n this.ready = true;\n this.cdr.detectChanges();\n this.placeKnob();\n // each track fills in a little after the one above it\n this.rows.forEach((r, i) =>\n this.later(() => {\n r.width = (r.page.views / this.max) * 100;\n this.cdr.markForCheck();\n }, this.reduced.reduce() ? 0 : 200 + i * 70),\n );\n // the total rolls up a moment after the rows come in\n const total = this.pages.reduce((a, p) => a + p.views, 0);\n this.later(() => this.roll(total), this.reduced.reduce() ? 0 : 260);\n }\n\n select(value: TopPagesSort): void {\n if (!this.controlled) {\n this.by = value;\n this.reorder();\n this.placeKnob();\n }\n this.sortChange.emit(value);\n }\n\n // works out each row's place in the current order and its rank number\n private reorder(): void {\n const order = [...this.pages].sort((a, b) =>\n this.by === 'views' ? b.views - a.views : b.change - a.change,\n );\n for (const r of this.rows) {\n r.at = order.indexOf(r.page);\n r.rank = r.at + 1;\n }\n this.cdr.markForCheck();\n }\n\n // eases the total to `target` over 1000ms so it rolls instead of jumping\n private roll(target: number): void {\n if (this.reduced.reduce()) {\n this.shownTotal = target;\n this.cdr.markForCheck();\n return;\n }\n const t0 = performance.now();\n const dur = 1000;\n const step = (t: number) => {\n const p = Math.max(0, Math.min(1, (t - t0) / dur));\n this.shownTotal = target * (1 - Math.pow(1 - p, 3));\n this.cdr.markForCheck();\n if (p < 1) this.frames.push(requestAnimationFrame(step));\n };\n this.frames.push(requestAnimationFrame(step));\n }\n\n private placeKnob(): void {\n const btns = this.host.nativeElement.querySelectorAll<HTMLElement>('.vo-tpx-sg button');\n const b = btns[this.options.findIndex((o) => o.value === this.by)];\n if (b) {\n this.knobLeft = b.offsetLeft;\n this.knobWidth = b.offsetWidth;\n this.cdr.markForCheck();\n }\n }\n\n private later(fn: () => void, ms: number): void {\n this.timers.push(setTimeout(fn, ms));\n }\n\n ngOnDestroy(): void {\n this.timers.forEach(clearTimeout);\n this.frames.forEach(cancelAnimationFrame);\n this.timers = [];\n this.frames = [];\n }\n}\n","// framework/angular/trace-view/trace-view.component.ts\n//\n// Native Angular port of framework/react/trace-view/TraceView.tsx.\n// One agent run as an observability waterfall: every span (LLM call, tool call,\n// retrieval, sub-agent) on a shared time axis, nested under the span that started\n// it with a tree's guides, with its tokens and latency. Each kind has its colour\n// and a count in the key; while the run streams a playhead marks now and running\n// bars glow at their leading edge. A slow tool call turns amber and hatched, and\n// any span opens to show where it sat in the run, its input, output, latency and\n// tokens. Inputs mirror the React props; the selection callback becomes an\n// @Output() EventEmitter.\n//\n// The waterfall bars are drawn with inline SVG in the template, as the vanilla\n// reference lays them out in CSS: one bar per span positioned on the shared axis.\n\nimport {\n Component,\n EventEmitter,\n Input,\n Output,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\n\nexport type SpanKind = 'agent' | 'llm' | 'tool' | 'retrieval';\n\nexport interface TraceSpan {\n id: string;\n /** Like \"Plan the steps\" or the tool's name, \"fetch_page\". */\n name: string;\n kind: SpanKind;\n /** When it started, in seconds from the start of the run. */\n start: number;\n /** How long it took, in seconds. Leave it out while it runs: its bar grows to time. */\n duration?: number;\n /** Tokens it used. An agent span without its own count adds up every span under it. */\n tokens?: number;\n /** What went in and what came out, shown when the span is opened. */\n input?: string;\n output?: string;\n children?: TraceSpan[];\n}\n\nconst KIND: Record<SpanKind, [string, VoIconName, string]> = {\n agent: ['Agent', 'cpu', 'var(--vo-muted)'],\n llm: ['LLM call', 'spark', 'var(--vo-c2)'],\n tool: ['Tool call', 'term', 'var(--vo-c6)'],\n retrieval: ['Retrieval', 'search', 'var(--vo-c3)'],\n};\nconst KEYS: SpanKind[] = ['llm', 'tool', 'retrieval'];\nconst sec = (v: number): string => v.toFixed(2) + 's';\nconst short = (v: number): string => (v >= 1000 ? (v / 1000).toFixed(1) + 'k' : String(Math.round(v)));\nconst tokensOf = (s: TraceSpan): number =>\n s.tokens ?? (s.children ?? []).reduce((a, k) => a + tokensOf(k), 0);\n\n/** A flattened row with its nesting level and parent, for the tree guides. */\ninterface Row {\n s: TraceSpan;\n lv: number;\n up?: Row;\n}\n\n/** One guide line in the tree gutter. */\ninterface Guide {\n x: number;\n cls: string;\n}\n\n/** A legend entry. */\ninterface LegendItem {\n kind: SpanKind;\n label: string;\n color: string;\n count: number;\n}\n\n/** One agent run as an observability waterfall. */\n@Component({\n selector: 'vo-trace-view',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-trv vo-panel\"\n [class.vo-live]=\"isLive\"\n [style.--vo-now]=\"nowFrac\"\n >\n <div class=\"vo-trv-h\">\n <div class=\"vo-trv-ht\">\n <b>{{ title }}</b>\n <span class=\"vo-muted vo-trv-st\" aria-live=\"polite\"><span class=\"vo-sw\">{{ line }}</span></span>\n </div>\n <span class=\"vo-trv-tot vo-num\">{{ totalText }}</span>\n </div>\n\n <div class=\"vo-trv-lg\" role=\"list\" aria-label=\"Spans by kind\">\n @for (k of legend; track k.kind) {\n <span role=\"listitem\" [class.vo-z]=\"!k.count\" [style.--vo-k]=\"k.color\">\n <i></i>{{ k.label }} <b class=\"vo-num\" [class.vo-enter]=\"k.count > 0\">{{ k.count }}</b>\n </span>\n }\n </div>\n\n <div class=\"vo-trv-ax\" aria-hidden=\"true\">\n <span>Span</span>\n <span class=\"vo-trv-sc\">\n @for (v of labels; track v) {\n <span [style.left.%]=\"(v / span) * 100\">{{ v }}s</span>\n }\n </span>\n <span class=\"vo-trv-tk\">Tokens</span><span class=\"vo-trv-ms\">Time</span>\n </div>\n\n <div class=\"vo-trv-rows\" [class.vo-sel]=\"!!sel\" role=\"group\" aria-label=\"Spans\" (keydown)=\"onKey($event)\">\n @for (row of shown; track row.s.id) {\n <button\n type=\"button\"\n [attr.data-id]=\"row.s.id\"\n [attr.data-k]=\"row.s.kind\"\n class=\"vo-trv-r vo-enter\"\n [class.vo-root]=\"row.lv === 0\"\n [class.vo-run]=\"isRunning(row.s)\"\n [class.vo-slow]=\"isSlow(row.s)\"\n [style.--vo-k]=\"KIND[row.s.kind][2]\"\n [style.--vo-lv]=\"row.lv\"\n [attr.aria-expanded]=\"open === row.s.id\"\n [attr.aria-label]=\"rowLabel(row.s)\"\n (click)=\"select(open === row.s.id ? null : row.s.id)\"\n >\n <span class=\"vo-trv-n\">\n <span class=\"vo-trv-g\" aria-hidden=\"true\">\n @for (g of guides(row); track $index) {\n <i [class]=\"g.cls\" [style.--vo-x]=\"g.x\"></i>\n }\n </span>\n <span class=\"vo-trv-k\"><vo-icon [name]=\"KIND[row.s.kind][1]\" size=\"xs\"></vo-icon></span>\n <span class=\"vo-trv-nm\">{{ row.s.name }}</span>\n @if (isSlow(row.s)) {\n <span class=\"vo-tag vo-warn vo-enter\">slow</span>\n }\n </span>\n <span class=\"vo-trv-b\" [style.backgroundSize]=\"gridSize\">\n <i [style.left.%]=\"(row.s.start / span) * 100\" [style.width.%]=\"(took(row.s) / span) * 100\"></i>\n </span>\n <span class=\"vo-trv-tk vo-num\">{{ short(tokensOf(row.s)) }}</span>\n <span class=\"vo-trv-ms vo-num\">{{ sec(took(row.s)) }}</span>\n </button>\n }\n </div>\n\n <div class=\"vo-fold vo-trv-dt\" [class.vo-shut]=\"!sel\" [attr.inert]=\"sel ? null : ''\">\n <div>\n @if (cur) {\n <div class=\"vo-trv-dc vo-enter\" role=\"region\" aria-label=\"Span details\">\n <div class=\"vo-trv-dh\">\n <span class=\"vo-trv-k\" [style.--vo-k]=\"KIND[cur.kind][2]\"><vo-icon [name]=\"KIND[cur.kind][1]\" size=\"xs\"></vo-icon></span>\n <b>{{ cur.name }}</b>\n @if (isSlow(cur)) {\n <span class=\"vo-tag vo-warn\">slow</span>\n }\n <button type=\"button\" class=\"vo-ib vo-trv-x\" aria-label=\"Close details\" (click)=\"select(null)\">\n <vo-icon name=\"x\"></vo-icon>\n </button>\n </div>\n <div class=\"vo-trv-pos\" aria-hidden=\"true\" [style.--vo-k]=\"KIND[cur.kind][2]\">\n <i [style.left.%]=\"(cur.start / span) * 100\" [style.width.%]=\"(took(cur) / span) * 100\"></i>\n </div>\n <div class=\"vo-trv-kv\">\n <div><span>Kind</span><b>{{ KIND[cur.kind][0] }}</b></div>\n <div><span>Starts at</span><b class=\"vo-num\">{{ sec(cur.start) }}</b></div>\n <div><span>Latency</span><b class=\"vo-num\">{{ sec(took(cur)) }}</b></div>\n <div><span>Tokens</span><b class=\"vo-num\">{{ tokenText(cur) }}</b></div>\n </div>\n <div class=\"vo-trv-io\">\n <span>Input</span><code>{{ cur.input ?? '–' }}</code>\n <span>Output</span><code>{{ isRunning(cur) ? 'Running…' : (cur.output ?? '–') }}</code>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n `,\n styleUrl: './trace-view.css',\n})\nexport class TraceViewComponent {\n /** The run's name, like \"Pricing research\". */\n @Input() title = '';\n /** The run's top spans, usually one root with everything nested under it. */\n @Input() spans: TraceSpan[] = [];\n /** Seconds into the run while it streams in. Leave it out once the run is over. */\n @Input() time?: number;\n /** Seconds the time axis covers. Defaults to the run's length, rounded up. */\n @Input() axis?: number;\n /** A tool call longer than this many seconds turns amber and is tagged slow. */\n @Input() slowAfter = 2;\n /** The line under the title. */\n @Input() status?: string;\n /** The id of the open span. null closes the details. */\n @Input() set selected(value: string | null | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) this.open = value;\n }\n @Input() defaultSelected: string | null = null;\n\n @Output() selectedChange = new EventEmitter<string | null>();\n\n readonly KIND = KIND;\n readonly sec = sec;\n readonly short = short;\n readonly tokensOf = tokensOf;\n\n open: string | null = null;\n private controlled = false;\n private lastSel?: TraceSpan;\n private inited = false;\n\n private ensureInit(): void {\n if (!this.inited) {\n if (!this.controlled) this.open = this.defaultSelected;\n this.inited = true;\n }\n }\n\n /** Every span flattened, with its level and parent row. */\n get all(): Row[] {\n const out: Row[] = [];\n const walk = (list: TraceSpan[], lv: number, up?: Row): void => {\n for (const s of list) {\n const row: Row = { s, lv, up };\n out.push(row);\n if (s.children) walk(s.children, lv + 1, row);\n }\n };\n walk(this.spans, 0);\n return out;\n }\n\n get end(): number {\n return Math.max(\n 0,\n ...this.all.map(({ s }) => s.start + (s.duration ?? Math.max(0, (this.time ?? s.start) - s.start))),\n );\n }\n\n get span(): number {\n return this.axis ?? Math.max(1, Math.ceil(this.end));\n }\n\n get now(): number {\n return this.time ?? Infinity;\n }\n\n get shown(): Row[] {\n this.ensureInit();\n return this.all.filter(({ s }) => s.start <= this.now);\n }\n\n get nowFrac(): number {\n return Math.min(this.end, this.now) / this.span;\n }\n\n get isLive(): boolean {\n return (\n this.time !== undefined &&\n this.time > 0 &&\n this.shown.some(({ s }) => this.isRunning(s))\n );\n }\n\n get totalText(): string {\n return sec(Math.min(this.end, this.now));\n }\n\n get line(): string {\n if (this.status !== undefined) return this.status;\n const shown = this.shown;\n const live = shown.some(({ s }) => this.isRunning(s));\n if (live) return `Running · ${shown.length} span${shown.length === 1 ? '' : 's'}`;\n const nSlow = shown.filter(({ s }) => this.isSlow(s)).length;\n return `Done · ${shown.length} spans${nSlow ? `, ${nSlow} slow` : ''}`;\n }\n\n get legend(): LegendItem[] {\n const shown = this.shown;\n return KEYS.map((k) => ({\n kind: k,\n label: KIND[k][0],\n color: KIND[k][2],\n count: shown.filter(({ s }) => s.kind === k).length,\n }));\n }\n\n get tick(): number {\n const span = this.span;\n return span <= 6 ? 1 : span <= 15 ? 2 : span <= 30 ? 5 : 10;\n }\n\n get labels(): number[] {\n const span = this.span;\n const tick = this.tick;\n return Array.from({ length: Math.floor(span / tick / 2) + 1 }, (_, i) => i * tick * 2).filter(\n (v) => v < span,\n );\n }\n\n get gridSize(): string {\n return `${(this.tick / this.span) * 100}% 100%`;\n }\n\n get sel(): TraceSpan | undefined {\n return this.open ? this.all.find(({ s }) => s.id === this.open)?.s : undefined;\n }\n\n get cur(): TraceSpan | undefined {\n const sel = this.sel;\n if (sel) this.lastSel = sel;\n return sel ?? this.lastSel;\n }\n\n took(s: TraceSpan): number {\n if (s.duration !== undefined) return Math.min(s.duration, this.now - s.start);\n return Math.max(0, (this.time ?? s.start) - s.start);\n }\n\n isRunning(s: TraceSpan): boolean {\n return s.duration === undefined || this.now < s.start + s.duration;\n }\n\n isSlow(s: TraceSpan): boolean {\n return s.kind === 'tool' && this.took(s) > this.slowAfter;\n }\n\n tokenText(s: TraceSpan): string {\n return Math.round(tokensOf(s)).toLocaleString('en-US');\n }\n\n rowLabel(s: TraceSpan): string {\n const kind = KIND[s.kind][0];\n const run = this.isRunning(s) ? 'running, ' : '';\n const slow = this.isSlow(s) ? ', slow' : '';\n return `${s.name}, ${kind}, ${run}${sec(this.took(s))}, ${this.tokenText(s)} tokens${slow}`;\n }\n\n /** The tree's guides for a row: lines down from ancestors with later siblings,\n an elbow into this row, and a line down to its own children. */\n guides(x: Row): Guide[] {\n const shown = this.shown;\n const all = this.all;\n const later = (a: Row): boolean =>\n shown.some((y) => y !== a && y.up === a.up && all.indexOf(y) > all.indexOf(a));\n const g: Guide[] = [];\n for (let a = x.up; a && a.up; a = a.up) {\n if (later(a)) g.push({ x: a.lv - 1, cls: '' });\n }\n if (x.up) g.push({ x: x.lv - 1, cls: later(x) ? 'vo-el' : 'vo-el vo-end' });\n if (shown.some((y) => y.up === x)) g.push({ x: x.lv, cls: 'vo-dn' });\n return g;\n }\n\n select(id: string | null): void {\n if (!this.controlled) this.open = id;\n this.selectedChange.emit(id);\n }\n\n onKey(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.open) {\n const id = this.open;\n this.select(null);\n if (id) {\n const el = (e.currentTarget as HTMLElement)\n .closest('.vo-trv')\n ?.querySelector<HTMLElement>(`[data-id=\"${CSS.escape(id)}\"]`);\n el?.focus({ preventScroll: true });\n }\n return;\n }\n const keys = ['ArrowDown', 'ArrowUp', 'Home', 'End'];\n if (!keys.includes(e.key)) return;\n const rows = [\n ...((e.currentTarget as HTMLElement).querySelectorAll<HTMLElement>('.vo-trv-r') ?? []),\n ];\n const i = rows.indexOf(document.activeElement as HTMLElement);\n if (i < 0) return;\n const go =\n e.key === 'ArrowDown'\n ? rows[i + 1]\n : e.key === 'ArrowUp'\n ? rows[i - 1]\n : e.key === 'Home'\n ? rows[0]\n : rows[rows.length - 1];\n e.preventDefault();\n go?.focus({ preventScroll: true });\n }\n}\n","// framework/angular/voice-capture/voice-capture.component.ts\n//\n// Native Angular port of framework/react/voice-capture/VoiceCapture.tsx.\n// Speech to text that shows what it heard as it hears it, and lets the person fix\n// the words it was unsure of. The status line, the scrolling wave, the words and\n// the buttons sit in one column. Once recording stops the box keeps its height:\n// the wave stays, still, as the whole recording, and the words stay where they\n// were. Unsure words open a small \"Did you mean\" menu. Inputs mirror the React\n// props; the buttons move the state along when it is left uncontrolled.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent, type VoIconName } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** listening and paused record, review asks the person to check the words, sent and cancelled are the end. */\nexport type VoiceCaptureState =\n | 'listening'\n | 'paused'\n | 'review'\n | 'sent'\n | 'cancelled';\n\n/** A word the speech model was not sure about. */\nexport interface HeardWord {\n text: string;\n /** What it might have been instead. Highlights the word and lets the person pick one. */\n alternatives?: string[];\n}\n\nconst STATUS: Record<VoiceCaptureState, string> = {\n listening: 'Listening',\n paused: 'Paused',\n review: 'Check what I heard',\n sent: 'Sent',\n cancelled: 'Cancelled',\n};\n\nconst clock = (s: number): string =>\n `${Math.floor(s / 60)}:${String(s % 60).padStart(2, '0')}`;\n\n/** One word as it is rendered: its text, whether it is unsure, and whether a fix has been picked. */\ninterface RenderWord {\n index: number;\n text: string;\n alternatives: string[];\n fixed: boolean;\n}\n\n@Component({\n selector: 'vo-voice-capture',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n #root\n data-vo=\"\"\n class=\"vo-vcx vo-panel\"\n [class.vo-paused]=\"now === 'paused'\"\n [class.vo-done]=\"!live\"\n [class.vo-gone]=\"now === 'cancelled'\"\n [class.vo-held]=\"held !== undefined\"\n [style.minHeight.px]=\"held\"\n >\n <div class=\"vo-vcx-top\">\n <span class=\"vo-vcx-dot\"></span>\n <span class=\"vo-vcx-st\">{{ status ?? STATUS[now] }}</span>\n <span class=\"vo-vcx-t vo-num vo-muted\">{{ clockText }}</span>\n </div>\n <canvas #wave class=\"vo-vcx-wave\" aria-hidden=\"true\"></canvas>\n <p class=\"vo-vcx-tx\" aria-live=\"polite\">\n @for (w of rendered; track w.index) {\n @if (w.alternatives.length && now !== 'cancelled') {\n <span class=\"vo-w\"\n ><span\n class=\"vo-low\"\n [class.vo-fixed]=\"w.fixed\"\n role=\"button\"\n tabindex=\"0\"\n aria-haspopup=\"menu\"\n [attr.aria-expanded]=\"menuOpen && menu.index === w.index\"\n [attr.data-tip]=\"\n !live ? (w.fixed ? 'Fixed' : 'Not sure about this word') : null\n \"\n [attr.data-i]=\"w.index\"\n (click)=\"show(w.index, $event, false)\"\n (keydown)=\"wordKey(w.index, $event)\"\n >{{ w.text }}</span\n >\n </span>\n } @else {\n <span class=\"vo-w\">{{ w.text }} </span>\n }\n }\n </p>\n <div class=\"vo-vcx-acts\">\n @if (ended) {\n <span class=\"vo-muted\" style=\"font-size:12.5px\">{{\n now === 'sent' ? 'Sent to the agent' : 'Nothing was sent'\n }}</span>\n <span class=\"vo-sp\"></span>\n <button\n type=\"button\"\n class=\"vo-pill vo-ghost vo-sm vo-vcx-again\"\n (click)=\"again()\"\n >\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Record again\n </button>\n } @else {\n @if (live) {\n <button\n type=\"button\"\n class=\"vo-ib vo-fill vo-vcx-pause\"\n [attr.aria-label]=\"now === 'paused' ? 'Resume' : 'Pause'\"\n [attr.data-tip]=\"now === 'paused' ? 'Resume' : 'Pause'\"\n (click)=\"togglePause()\"\n >\n <vo-icon [name]=\"now === 'paused' ? 'spark' : 'pause'\"></vo-icon>\n </button>\n }\n <span class=\"vo-sp\"></span>\n <button\n type=\"button\"\n class=\"vo-pill vo-ghost vo-sm vo-vcx-x\"\n (click)=\"cancel()\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n class=\"vo-pill vo-primary vo-sm vo-vcx-done\"\n (click)=\"done()\"\n >\n Done\n </button>\n }\n </div>\n <div\n #pop\n class=\"vo-pop vo-vcx-fix\"\n [class.vo-open]=\"menuOpen\"\n role=\"menu\"\n aria-label=\"Did you mean\"\n [style.left.px]=\"menu.left\"\n [style.top.px]=\"menu.top\"\n [attr.inert]=\"menuOpen ? null : ''\"\n [attr.aria-hidden]=\"!menuOpen\"\n (keydown)=\"menuKey($event)\"\n >\n <div class=\"vo-ph\">Did you mean</div>\n @for (a of menu.alts; track a) {\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n class=\"vo-mi\"\n (click)=\"fix(menu.index, a)\"\n >\n {{ a }}\n </button>\n }\n </div>\n </div>\n `,\n styleUrl: './voice-capture.css',\n})\nexport class VoiceCaptureComponent\n implements AfterViewInit, OnChanges, OnDestroy\n{\n /** The words heard so far, in order. Add to the end as they arrive and each one fades in. */\n @Input() words: Array<string | HeardWord> = [];\n\n /** The state, or leave it out to let the buttons move it along. */\n @Input() state?: VoiceCaptureState;\n @Input() defaultState: VoiceCaptureState = 'listening';\n\n /** Seconds recorded. Leave it out to let it count while listening. */\n @Input() seconds?: number;\n\n /** The input level from 0 to 1, drawn into the wave about 20 times a second.\n Pass a function to read the microphone on every sample without re-rendering. */\n @Input() level: number | (() => number) = 0;\n\n /** The status line. Defaults to Listening, Paused, Check what I heard, Sent or Cancelled. */\n @Input() status?: string;\n\n @Output() stateChange = new EventEmitter<VoiceCaptureState>();\n /** Emitted with the checked transcript when the person presses Done in review. */\n @Output() send = new EventEmitter<string>();\n /** Emitted when the person picks one of a word's alternatives. */\n @Output() fixWord = new EventEmitter<{ index: number; text: string }>();\n /** Emitted by Record again, once the capture is sent or cancelled. */\n @Output() recordAgain = new EventEmitter<void>();\n\n @ViewChild('root') root!: ElementRef<HTMLDivElement>;\n @ViewChild('wave') waveRef!: ElementRef<HTMLCanvasElement>;\n @ViewChild('pop') popRef!: ElementRef<HTMLDivElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n readonly STATUS = STATUS;\n\n // the state when uncontrolled; mirrors the controllable hook in React\n private inner: VoiceCaptureState = 'listening';\n get now(): VoiceCaptureState {\n return this.state ?? this.inner;\n }\n get live(): boolean {\n return this.now === 'listening' || this.now === 'paused';\n }\n get ended(): boolean {\n return this.now === 'sent' || this.now === 'cancelled';\n }\n\n // once recording stops the box keeps the height it had while recording\n held?: number;\n private liveHeight?: number;\n\n // the clock counts while listening, unless the parent passes seconds\n private count = 0;\n get clockText(): string {\n return clock(this.seconds ?? this.count);\n }\n private tick?: ReturnType<typeof setInterval>;\n\n // the fixes the person has picked, by word index\n private fixes: Record<number, string> = {};\n rendered: RenderWord[] = [];\n\n // the \"Did you mean\" menu\n menuOpen = false;\n menu: { index: number; alts: string[]; left: number; top: number } = {\n index: -1,\n alts: [],\n left: 0,\n top: 0,\n };\n private keyOpen = false;\n private inMenu = false;\n\n // the wave\n private samples: number[] = [];\n private raf = 0;\n private lastSample = 0;\n private cols: string[] | null = null;\n private colsAt = -1e9;\n private drawn = '';\n private ro?: ResizeObserver;\n private onDocClick = (e: MouseEvent) => this.docClick(e);\n\n constructor() {\n this.inner = this.defaultState;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['words']) this.buildWords();\n if (changes['state'] || changes['seconds']) this.syncClock();\n // a controlled state change can flip live/held and the wave mode\n if (changes['state'] && !changes['state'].firstChange) this.onStateFlip();\n }\n\n ngAfterViewInit(): void {\n this.inner = this.defaultState;\n this.buildWords();\n this.syncClock();\n this.measure();\n this.startWave();\n document.addEventListener('click', this.onDocClick);\n }\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.raf);\n this.ro?.disconnect();\n if (this.tick) clearInterval(this.tick);\n document.removeEventListener('click', this.onDocClick);\n }\n\n private buildWords(): void {\n this.rendered = this.words.map((w, i) => {\n const word = typeof w === 'string' ? { text: w } : w;\n const alternatives = word.alternatives ?? [];\n const fixed = this.fixes[i] !== undefined;\n return {\n index: i,\n text: this.fixes[i] ?? word.text,\n alternatives,\n fixed,\n };\n });\n }\n\n private syncClock(): void {\n if (this.seconds !== undefined || this.now !== 'listening') {\n if (this.tick) {\n clearInterval(this.tick);\n this.tick = undefined;\n }\n return;\n }\n if (!this.tick) {\n this.tick = setInterval(() => {\n this.count++;\n }, 1000);\n }\n }\n\n private measure(): void {\n if (this.live && this.root) this.liveHeight = this.root.nativeElement.offsetHeight;\n }\n\n private onStateFlip(): void {\n if (!this.live) {\n this.held = this.liveHeight;\n this.startWave();\n } else {\n this.held = undefined;\n this.measure();\n this.startWave();\n }\n this.syncClock();\n this.buildWords();\n }\n\n togglePause(): void {\n this.setState(this.now === 'paused' ? 'listening' : 'paused');\n }\n\n private setState(s: VoiceCaptureState): void {\n const wasLive = this.live;\n if (this.state === undefined) this.inner = s;\n this.stateChange.emit(s);\n const nowLive = this.now === 'listening' || this.now === 'paused';\n if (wasLive && !nowLive) {\n this.held = this.liveHeight;\n } else if (!wasLive && nowLive) {\n this.held = undefined;\n }\n this.syncClock();\n // defer so the template reflects the new state before we re-measure / repaint\n queueMicrotask(() => {\n if (!wasLive && nowLive) this.measure();\n this.startWave();\n });\n }\n\n private transcript(): string {\n return this.words\n .map((w, i) =>\n this.fixes[i] ?? (typeof w === 'string' ? w : w.text)\n )\n .join(' ');\n }\n\n done(): void {\n if (this.live) this.setState('review');\n else if (this.now === 'review') {\n this.setState('sent');\n this.send.emit(this.transcript());\n }\n }\n\n cancel(): void {\n this.menuOpen = false;\n this.setState('cancelled');\n }\n\n again(): void {\n this.count = 0;\n this.fixes = {};\n this.menuOpen = false;\n this.samples = [];\n this.recordAgain.emit();\n this.setState('listening');\n this.buildWords();\n }\n\n // ----- the \"Did you mean\" menu -----\n wordKey(index: number, e: KeyboardEvent): void {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.keyOpen = true;\n this.show(index, e, true);\n }\n }\n\n show(index: number, e: Event, key: boolean): void {\n const el = e.currentTarget as HTMLElement;\n const box = this.root?.nativeElement;\n if (!box || !el) return;\n const hr = box.getBoundingClientRect();\n const lr = el.getBoundingClientRect();\n const word = this.words[index];\n const alts =\n typeof word === 'string' ? [] : word.alternatives ?? [];\n this.menu = {\n index,\n alts,\n left: lr.left - hr.left,\n top: lr.bottom - hr.top + 6,\n };\n this.menuOpen = true;\n if (key) this.keyOpen = true;\n e.stopPropagation();\n queueMicrotask(() => {\n if (this.keyOpen) {\n this.keyOpen = false;\n this.popRef?.nativeElement\n .querySelector<HTMLElement>('.vo-mi')\n ?.focus({ preventScroll: true });\n }\n });\n }\n\n private closeMenu(): void {\n const back = this.menuOpen && this.menu.index;\n const focusWord = this.inMenu;\n this.menuOpen = false;\n this.inMenu = false;\n if (focusWord) {\n queueMicrotask(() =>\n this.wordEl(back as number)?.focus({ preventScroll: true })\n );\n }\n }\n\n private wordEl(i: number): HTMLElement | null | undefined {\n return this.root?.nativeElement.querySelector<HTMLElement>(\n `.vo-low[data-i=\"${i}\"]`\n );\n }\n\n menuKey(e: KeyboardEvent): void {\n const all = Array.from(\n this.popRef?.nativeElement.querySelectorAll<HTMLElement>('.vo-mi') ?? []\n );\n const i = all.indexOf(document.activeElement as HTMLElement);\n const go: Record<string, HTMLElement | undefined> = {\n ArrowDown: all[(i + 1) % all.length],\n ArrowUp: all[(i - 1 + all.length) % all.length],\n Home: all[0],\n End: all[all.length - 1],\n };\n if (go[e.key]) {\n e.preventDefault();\n go[e.key]!.focus({ preventScroll: true });\n } else if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.inMenu = true;\n this.closeMenu();\n } else if (e.key === 'Tab') {\n this.inMenu = true;\n this.closeMenu();\n }\n }\n\n fix(index: number, text: string): void {\n this.fixes = { ...this.fixes, [index]: text };\n this.fixWord.emit({ index, text });\n this.menuOpen = false;\n this.buildWords();\n }\n\n private docClick(e: MouseEvent): void {\n if (!this.menuOpen) return;\n const t = e.target as Element;\n const pop = this.popRef?.nativeElement;\n const box = this.root?.nativeElement;\n if (\n t.isConnected &&\n !pop?.contains(t) &&\n !(box?.contains(t) && t.closest('.vo-low'))\n ) {\n this.menuOpen = false;\n }\n }\n\n // ----- the wave -----\n private colours(el: HTMLElement): string[] {\n const t = performance.now();\n if (!this.cols || t - this.colsAt > 400) {\n const cs = getComputedStyle(el);\n this.cols = ['--vo-fg2', '--vo-faint', '--vo-muted'].map((k) =>\n cs.getPropertyValue(k).trim()\n );\n this.colsAt = t;\n }\n return this.cols;\n }\n\n private bars(cv: HTMLCanvasElement): number {\n return Math.floor(cv.clientWidth / 5);\n }\n\n private paint(vals: number[], still: boolean): void {\n const cv = this.waveRef?.nativeElement;\n const el = this.root?.nativeElement;\n if (!cv || !el) return;\n const dpr = devicePixelRatio || 1;\n const w = cv.clientWidth;\n const h = cv.clientHeight;\n if (!w) return;\n if (cv.width !== w * dpr) {\n cv.width = w * dpr;\n cv.height = h * dpr;\n }\n const x = cv.getContext('2d');\n if (!x) return;\n x.setTransform(dpr, 0, 0, dpr, 0, 0);\n x.clearRect(0, 0, w, h);\n const [on, off, rec] = this.colours(el);\n const n = vals.length;\n for (let i = 0; i < n; i++) {\n const v = vals[i];\n const px = i * 5 + 2;\n const bh = v ? Math.max(4, v * (h - 6)) : 2;\n x.globalAlpha = still\n ? v\n ? 0.6\n : 1\n : Math.min(1, i / 14, (n - i) / 3 + 0.2);\n x.fillStyle = v ? (still ? rec : on) : off;\n x.beginPath();\n if (x.roundRect) x.roundRect(px, h / 2 - bh / 2, 2.5, bh, 1.2);\n else x.rect(px, h / 2 - bh / 2, 2.5, bh);\n x.fill();\n }\n }\n\n private still(): void {\n const cv = this.waveRef?.nativeElement;\n if (!cv) return;\n // the recording without the silence either side, fitted to the width\n const s = this.samples;\n const n = this.bars(cv);\n const a = s.findIndex((v) => v);\n let z = s.length - 1;\n while (z > a && !s[z]) z--;\n const rec = a < 0 ? [] : s.slice(Math.max(0, a - 2), z + 3);\n this.paint(\n Array.from({ length: n }, (_, i) => {\n const from = Math.floor((i * rec.length) / n);\n const to = Math.max(from + 1, Math.floor(((i + 1) * rec.length) / n));\n return Math.max(0, ...rec.slice(from, to).map((v) => v || 0));\n }),\n true\n );\n }\n\n private startWave(): void {\n cancelAnimationFrame(this.raf);\n this.ro?.disconnect();\n this.ro = undefined;\n const cv = this.waveRef?.nativeElement;\n if (!cv) return;\n if (!this.live) {\n // drawn again only when its width or the theme changes\n const again = () => {\n this.cols = null;\n this.still();\n };\n this.still();\n if (typeof ResizeObserver === 'function') {\n this.ro = new ResizeObserver(again);\n this.ro.observe(cv);\n }\n return;\n }\n const draw = (t: number) => {\n this.raf = requestAnimationFrame(draw);\n if (t - this.lastSample > 50) {\n this.lastSample = t;\n const l = this.level;\n const v =\n this.now === 'listening'\n ? typeof l === 'function'\n ? l()\n : l\n : 0;\n this.samples.push(Math.max(0, Math.min(1, v)));\n if (this.samples.length > 300) this.samples.shift();\n }\n const n = this.bars(cv);\n this.paint(\n Array.from(\n { length: n },\n (_, i) => this.samples[this.samples.length - n + i] || 0\n ),\n false\n );\n };\n this.raf = requestAnimationFrame(draw);\n }\n}\n","// framework/angular/voice-orb/voice-orb.component.ts\n//\n// Native Angular port of framework/react/voice-orb/VoiceOrb.tsx.\n// A hands-free voice chat: an orb that swells with whoever is talking, the accent\n// colour for you and violet for the agent, what was said under it, and mute and\n// end below. It draws what you pass; it never opens the microphone itself.\n// Inputs mirror the React props; React callbacks become @Output() EventEmitters.\n\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\nimport { ReducedMotionService } from '../core/reduced-motion.service';\n\n/** idle (not started), listening, thinking, speaking (the agent) or ended. */\nexport type VoiceState = 'idle' | 'listening' | 'thinking' | 'speaking' | 'ended';\n\n/** What was said last and who said it. A new id (or speaker) starts a new line. */\nexport interface VoiceCaption {\n speaker: string;\n text: string;\n id?: string;\n}\n\n/** Labels, so every bit of text can be localised. */\nexport interface VoiceOrbLabels {\n ready?: string;\n listening?: string;\n thinking?: string;\n speaking?: string;\n muted?: string;\n ended?: string;\n start?: string;\n end?: string;\n mute?: string;\n unmute?: string;\n mutedNotice?: string;\n endedTitle?: string;\n restart?: string;\n}\n\nconst DEFAULTS: Required<VoiceOrbLabels> = {\n ready: 'Ready',\n listening: 'Listening',\n thinking: 'Thinking',\n speaking: 'Speaking',\n muted: 'Muted',\n ended: 'Ended',\n start: 'Start talking',\n end: 'End',\n mute: 'Mute',\n unmute: 'Unmute',\n mutedNotice: \"You're muted. Unmute so the agent can hear you.\",\n endedTitle: 'Voice chat ended',\n restart: 'Start again',\n};\n\nconst fmt = (s: number): string =>\n `${Math.floor(s / 60)}:${String(Math.floor(s) % 60).padStart(2, '0')}`;\n\n@Component({\n selector: 'vo-voice-orb',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div data-vo=\"\" [class]=\"className\" style=\"width:100%\">\n <div class=\"vo-vor vo-panel\" [class.vo-on]=\"on\" [attr.data-m]=\"mode\">\n <div class=\"vo-vor-top\">\n <span class=\"vo-vor-dot\"></span>\n <span class=\"vo-vor-st\">{{ status }}</span>\n <span class=\"vo-vor-t vo-num vo-muted\">{{ fmt(elapsed) }}</span>\n </div>\n <div class=\"vo-vor-orb\" aria-hidden=\"true\" [style.--vo-lv]=\"lv\">\n <i class=\"vo-vor-pc\"></i>\n <i class=\"vo-vor-core\"><canvas #gl class=\"vo-vor-gl\"></canvas></i>\n </div>\n <div class=\"vo-vor-cap\" aria-live=\"polite\">\n <span class=\"vo-vor-who vo-muted\">{{ caption?.speaker ?? '' }}</span>\n @if (caption; as cap) {\n <p class=\"vo-vor-tx\">\n @for (w of words(cap.text); track $index) {\n <span class=\"vo-w\">{{ w }} </span>\n }\n </p>\n } @else {\n <p class=\"vo-vor-tx vo-hint\">{{ hint }}</p>\n }\n </div>\n <div class=\"vo-fold vo-vor-mf\" [class.vo-shut]=\"!noticeOpen\" [attr.inert]=\"noticeOpen ? null : ''\">\n <div>\n <div class=\"vo-vor-mw\">\n <p><vo-icon name=\"alert\" size=\"xs\"></vo-icon><span>{{ L.mutedNotice }}</span></p>\n <button type=\"button\" class=\"vo-pill vo-sm vo-vor-un\" (click)=\"emitMuted(false)\">{{ L.unmute }}</button>\n </div>\n </div>\n </div>\n @if (state === 'ended') {\n <div class=\"vo-vor-done vo-enter\">\n <vo-icon name=\"ok\"></vo-icon>\n <span class=\"vo-t\">{{ L.endedTitle }}<span class=\"vo-muted\">{{ endedDetail ?? defaultDetail }}</span></span>\n <button type=\"button\" class=\"vo-pill vo-sm\" (click)=\"restart.emit()\">{{ L.restart }}</button>\n </div>\n } @else {\n <div class=\"vo-vor-f\">\n <button type=\"button\" class=\"vo-pill vo-primary vo-sm vo-vor-go\" (click)=\"start.emit()\">\n <vo-icon name=\"comment\" size=\"xs\"></vo-icon>{{ L.start }}\n </button>\n <button\n type=\"button\"\n class=\"vo-ib vo-fill vo-vor-mute\"\n [attr.aria-label]=\"L.mute\"\n [attr.aria-pressed]=\"muted\"\n [attr.data-tip]=\"muted ? L.unmute : L.mute\"\n (click)=\"emitMuted(!muted)\"\n >\n <vo-icon name=\"comment\"></vo-icon>\n </button>\n <span class=\"vo-sp\"></span>\n <button type=\"button\" class=\"vo-pill vo-sm vo-vor-end\" (click)=\"end.emit()\">{{ L.end }}</button>\n </div>\n }\n </div>\n </div>\n `,\n styleUrl: './voice-orb.css',\n})\nexport class VoiceOrbComponent implements OnChanges, AfterViewInit, OnDestroy {\n /** idle, listening, thinking, speaking or ended. */\n @Input() state: VoiceState = 'idle';\n /** How loud whoever is talking is, 0 to 1. The orb swells with it. */\n @Input() level = 0;\n /** Your microphone is off. Listening shows as Muted, the mute button is pressed. */\n @Input() muted = false;\n /** Shows \"You're muted\" with an Unmute button, for when someone talks while muted. */\n @Input() mutedNotice = false;\n /** What was said last and who said it; each word fades in as it arrives. */\n @Input() caption: VoiceCaption | null = null;\n /** Shown before anything is said, like \"Talk to the agent about Pricing v4\". */\n @Input() hint = '';\n /** Seconds since the chat started, shown top right. */\n @Input() elapsed = 0;\n /** The quiet line under \"Voice chat ended\". Defaults to the length and \"Transcript saved\". */\n @Input() endedDetail?: string;\n @Input() labels: VoiceOrbLabels = {};\n @Input() className = '';\n\n @Output() mutedChange = new EventEmitter<boolean>();\n @Output() start = new EventEmitter<void>();\n @Output() end = new EventEmitter<void>();\n /** Start again, from the row that shows once the chat has ended. */\n @Output() restart = new EventEmitter<void>();\n\n @ViewChild('gl') private glRef?: ElementRef<HTMLCanvasElement>;\n\n private readonly motion = inject(ReducedMotionService);\n\n L: Required<VoiceOrbLabels> = DEFAULTS;\n\n // muted only changes how listening looks: the agent can still think and speak\n get mode(): string {\n return this.muted && this.state === 'listening' ? 'muted' : this.state;\n }\n get status(): string {\n const map: Record<string, string> = {\n idle: this.L.ready,\n listening: this.L.listening,\n thinking: this.L.thinking,\n speaking: this.L.speaking,\n muted: this.L.muted,\n ended: this.L.ended,\n };\n return map[this.mode] ?? '';\n }\n get on(): boolean {\n return this.state !== 'idle' && this.state !== 'ended';\n }\n get noticeOpen(): boolean {\n return this.mutedNotice && this.muted && this.on;\n }\n get lv(): string {\n return Math.max(0, Math.min(1, this.level)).toFixed(3);\n }\n get defaultDetail(): string {\n return `${fmt(this.elapsed)} · Transcript saved`;\n }\n\n readonly fmt = fmt;\n words(text: string): string[] {\n return text.split(' ').filter(Boolean);\n }\n\n emitMuted(next: boolean): void {\n this.mutedChange.emit(next);\n }\n\n // the lit glass sphere, drawn on a canvas in the colours of whoever is talking,\n // faster and brighter as they get louder. With reduced motion it is one still\n // frame, drawn again when the speaker changes; where no canvas can draw the core\n // keeps its plain gradient (set by CSS).\n private shader: OrbShader | null = null;\n private raf = 0;\n private flow = 0;\n private last = 0;\n private cols: [string, string] | null = null;\n private colsAt = -1e9;\n private io?: IntersectionObserver;\n private seen = true;\n private started = false;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['labels']) this.L = { ...DEFAULTS, ...this.labels };\n // draw once more when the speaker (data-m) changes under reduced motion\n if (this.started && this.motion.reduce() && (changes['state'] || changes['muted'])) {\n this.cols = null;\n queueMicrotask(() => this.draw(this.flow));\n }\n }\n\n ngAfterViewInit(): void {\n const cv = this.glRef?.nativeElement;\n if (!cv) return;\n this.shader = orbShader(cv);\n if (!this.shader) return;\n cv.classList.add('vo-on');\n this.started = true;\n if ('IntersectionObserver' in window) {\n this.io = new IntersectionObserver((e) => (this.seen = e[0].isIntersecting));\n this.io.observe(cv);\n }\n this.draw(0);\n if (!this.motion.reduce()) {\n const tick = (t: number): void => {\n this.flow += Math.min(50, t - (this.last || t)) * (1 + Math.max(0, Math.min(1, this.level)) * 2.5);\n this.last = t;\n if (this.seen) this.draw(this.flow);\n this.raf = requestAnimationFrame(tick);\n };\n this.raf = requestAnimationFrame(tick);\n }\n }\n\n private draw(ms: number): void {\n const cv = this.glRef?.nativeElement;\n if (!this.shader || !cv) return;\n const now = performance.now();\n if (!this.cols || now - this.colsAt > 250) {\n const box = cv.closest<HTMLElement>('.vo-vor');\n const dot = box?.querySelector('.vo-vor-dot');\n const pc = box?.querySelector('.vo-vor-pc');\n if (dot && pc) {\n this.cols = [getComputedStyle(dot).backgroundColor, getComputedStyle(pc).backgroundColor];\n this.colsAt = now;\n }\n }\n if (this.cols) this.shader.paint(ms, Math.max(0, Math.min(1, this.level)), this.cols[0], this.cols[1]);\n }\n\n ngOnDestroy(): void {\n cancelAnimationFrame(this.raf);\n this.io?.disconnect();\n this.shader?.lose();\n }\n}\n\ninterface OrbShader {\n paint(ms: number, lv: number, a: string, b: string): void;\n lose(): void;\n}\n\n// the glass sphere, as a fragment shader (the site's own source, ported from the\n// Vanilla/React originals): a ball lit from the top left, a deeper shifted hue past\n// the terminator, light gathered through the glass on the far side, a fresnel edge,\n// a broad sheen and a sharp highlight. Inside, deep pools of the two colours and a\n// third hue swirl, liquid light flows through the middle and two ribbons turn near\n// the surface. The level speeds the flow, brightens the heart and shimmers the\n// highlight. Where WebGL is missing the same picture is drawn in a few gradients on\n// a 2D canvas. At its widest the sphere still sits inside the canvas.\nconst FRAG = `#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\nuniform vec2 R;uniform float T,L;uniform vec3 A0,B0;\nfloat h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}\nfloat n(vec2 p){vec2 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(h(i),h(i+vec2(1,0)),f.x),mix(h(i+vec2(0,1)),h(i+1.),f.x),f.y);}\nfloat fbm(vec2 p){float v=0.,a=.5;for(int i=0;i<4;i++){v+=a*n(p);p=mat2(1.6,1.2,-1.2,1.6)*p+vec2(1.7,9.2);a*=.5;}return v;}\nmat2 rot(float a){float c=cos(a),s=sin(a);return mat2(c,s,-s,c);}\nvec3 tn(vec3 c){float mx=max(c.r,max(c.g,c.b)),d=mx-min(c.r,min(c.g,c.b));c*=max(1.,.5/max(mx,.01));mx=max(mx,.5);d=mx-min(c.r,min(c.g,c.b));return max(mx-(mx-c)*mix(1.,clamp(.55*mx/max(d,.001),1.,3.),smoothstep(.03,.12,d)),0.);}\nvec3 hue(vec3 c,float a){vec3 k=vec3(.57735);float co=cos(a);return c*co+cross(k,c)*sin(a)+k*dot(k,c)*(1.-co);}\nvoid main(){\n vec3 A=tn(A0),B=tn(B0),C=hue(A,mix(-.9,1.4,smoothstep(-.1,.1,A.b-A.g)));\n vec2 u=(gl_FragCoord.xy*2.-R)/R.y;\n float t=T*.001,an=atan(u.y,u.x);\n float w=(.002+.008*L)*(sin(3.*an+t*1.9)+.6*sin(5.*an-t*2.7)+.4*sin(2.*an-t*1.1));\n float rad=.955*(1.+.008*sin(t*.9)+w);\n vec2 q=u/rad;float r=length(q),e=3./(R.y*rad);\n float a=1.-smoothstep(1.-e,1.,r);\n if(a<=0.){gl_FragColor=vec4(0.);return;}\n float z=sqrt(max(1.-r*r,0.));\n vec3 N=vec3(q,z);\n N.xy+=(vec2(n(q*5.+t*1.6),n(q*5.-t*1.3+7.))-.5)*(.03+.12*L);N=normalize(N);\n vec3 S=vec3(q,z),D=refract(vec3(0,0,-1),N,.72),P1=S+D*z*.35,P2=S+D*z*.9,P3=S+D*z*1.5;\n float s=t*.22;\n vec3 d1=P3-vec3(.55*sin(s*1.3),.5*cos(s*1.1),.3*sin(s*.7)),d2=P3-vec3(.55*cos(s*.9+2.),.5*sin(s*1.2+1.),.3*cos(s*.8+3.)),d3=P3-vec3(.5*sin(s*1.6+4.),.5*cos(s*1.4+5.),.3*sin(s+1.));\n float g1=exp(-dot(d1,d1)*2.6),g2=exp(-dot(d2,d2)*2.6),g3=exp(-dot(d3,d3)*3.2);\n vec3 col=mix(mix(mix(mix(A,B,.4)*.55,B,g2*.8),C,g3*.7),A,g1*.95);\n vec2 m=rot(t*.09)*P2.xy*1.5,o=vec2(fbm(m+vec2(0.,t*.3)),fbm(m+vec2(5.2,1.3)-t*.25));\n float f=fbm(m+(o-.5)*(2.5+2.*L)+vec2(t*.12,-t*.08));\n col=mix(col,mix(mix(A,B,.5),vec3(1.),.15),smoothstep(.45,.8,f)*.5)*(.8+.35*smoothstep(.2,.6,f));\n vec2 k=rot(-t*.33)*P1.xy;\n float b1=k.y+.32*sin(k.x*2.4+t*1.4)+.12*sin(k.x*5.3-t*2.2)+(o.x-.5)*.5,b2=k.x-.3*sin(k.y*2.1-t*1.1)+.4;\n col+=mix(mix(A,C,.35),vec3(1.),.35)*(exp(-b1*b1*40.)+.6*exp(-b2*b2*55.))*(.25+.35*L)*z;\n col+=mix(A,vec3(1.),.4)*exp(-dot(P2.xy,P2.xy)*3.)*(.08+.3*L);\n vec3 lk=normalize(vec3(-.5,.62,.6)),dk=hue(col,.35);\n col=mix(dk*dk*.6,col*1.06,smoothstep(-.55,.75,dot(N,lk)));\n col+=mix(B,vec3(1.),.5)*pow(1.-z,1.6)*smoothstep(.1,.95,dot(q/max(r,1e-3),-normalize(lk.xy)))*.55;\n col=mix(col,mix(vec3(.06),vec3(1.),smoothstep(-.3,.9,N.y*.7-N.x*.4)),pow(1.-N.z,3.)*.5);\n float nh=max(dot(N,normalize(lk+vec3(0,0,1))),0.);\n col+=pow(nh,700.)*(1.2+.8*L*sin(t*9.+q.x*8.))+pow(nh,60.)*.25+pow(nh,8.)*.1;\n gl_FragColor=vec4(clamp(col,0.,1.)*a,a);\n}`;\n\n/** Draws the sphere on the orb's canvas: one draw a frame, at most 2 device pixels a\n CSS pixel, nothing made anew each frame. Where WebGL is missing it falls back to a\n few gradients on a 2D canvas. Returns { paint, lose }, or null when neither can draw. */\nfunction orbShader(cv: HTMLCanvasElement): OrbShader | null {\n // a computed colour to 0..1 channels; mid-transition it can come as oklab() or\n // color(), so a 1px canvas reads it. Only a colour that changed is read.\n const px = document.createElement('canvas').getContext('2d', { willReadFrequently: true });\n if (!px) return null;\n px.canvas.width = px.canvas.height = 1;\n const rgb = (s: string, o: Float32Array): void => {\n px.clearRect(0, 0, 1, 1);\n px.fillStyle = '#000';\n px.fillStyle = s;\n px.fillRect(0, 0, 1, 1);\n const d = px.getImageData(0, 0, 1, 1).data;\n o[0] = d[0] / 255;\n o[1] = d[1] / 255;\n o[2] = d[2] / 255;\n };\n const ta = new Float32Array(3), tb = new Float32Array(3), ca = new Float32Array(3), cb = new Float32Array(3);\n let sa = '', sb = '', w = 0, at = -1e9, prev = -1e9;\n const fit = (now: number): boolean => {\n if (w && now - at < 300) return false;\n at = now;\n const n = Math.round(cv.clientWidth * Math.min(2, devicePixelRatio || 1)) || 1;\n if (n === w) return false;\n w = cv.width = cv.height = n;\n return true;\n };\n const tint = (a: string, b: string, now: number, snap: boolean): void => {\n if (a !== sa) { sa = a; rgb(a, ta); }\n if (b !== sb) { sb = b; rgb(b, tb); }\n const k = snap || now - prev > 200 ? 1 : Math.min(1, (now - prev) / 110);\n prev = now;\n for (let i = 0; i < 3; i++) { ca[i] += (ta[i] - ca[i]) * k; cb[i] += (tb[i] - cb[i]) * k; }\n };\n const gl = cv.getContext('webgl', { premultipliedAlpha: true, antialias: false, powerPreference: 'low-power' });\n if (gl) {\n const sh = (type: number, src: string): WebGLShader => {\n const s = gl.createShader(type)!;\n gl.shaderSource(s, src);\n gl.compileShader(s);\n return s;\n };\n const pr = gl.createProgram()!;\n gl.attachShader(pr, sh(gl.VERTEX_SHADER, 'attribute vec2 p;void main(){gl_Position=vec4(p,0.,1.);}'));\n gl.attachShader(pr, sh(gl.FRAGMENT_SHADER, FRAG));\n gl.linkProgram(pr);\n const lose = (): void => { gl.getExtension('WEBGL_lose_context')?.loseContext(); };\n if (!gl.getProgramParameter(pr, gl.LINK_STATUS)) { lose(); return null; }\n gl.useProgram(pr);\n gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]), gl.STATIC_DRAW);\n const p = gl.getAttribLocation(pr, 'p');\n gl.enableVertexAttribArray(p);\n gl.vertexAttribPointer(p, 2, gl.FLOAT, false, 0, 0);\n const U = (k: string): WebGLUniformLocation | null => gl.getUniformLocation(pr, k);\n const uR = U('R'), uT = U('T'), uL = U('L'), uA = U('A0'), uB = U('B0');\n return {\n paint(ms: number, lv: number, a: string, b: string): void {\n const now = performance.now();\n if (fit(now)) gl.viewport(0, 0, w, w);\n tint(a, b, now, false);\n gl.uniform2f(uR, w, w);\n gl.uniform1f(uT, ms);\n gl.uniform1f(uL, lv);\n gl.uniform3fv(uA, ca);\n gl.uniform3fv(uB, cb);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n lose,\n };\n }\n const x = cv.getContext('2d');\n if (!x) return null;\n // the shader's colours: dark ones lifted, pale ones given more chroma, a third hue\n // turned round the grey axis toward the warm side\n const tn = (o: Float32Array, d: Float32Array): void => {\n const lift = Math.max(1, 0.5 / Math.max(0.01, o[0], o[1], o[2]));\n const mx = Math.max(o[0], o[1], o[2]) * lift;\n const dd = mx - Math.min(o[0], o[1], o[2]) * lift;\n const s = Math.min(1, Math.max(0, (dd - 0.03) / 0.09));\n const k = 1 + (Math.min(3, Math.max(1, 0.55 * mx / Math.max(dd, 0.001))) - 1) * s * s * (3 - 2 * s);\n for (let i = 0; i < 3; i++) d[i] = Math.max(0, mx - (mx - o[i] * lift) * k);\n };\n const hue = (o: Float32Array, d: Float32Array, ang: number): void => {\n const co = Math.cos(ang), si = Math.sin(ang) * 0.57735, m = ((o[0] + o[1] + o[2]) / 3) * (1 - co);\n d[0] = o[0] * co + (o[2] - o[1]) * si + m;\n d[1] = o[1] * co + (o[0] - o[2]) * si + m;\n d[2] = o[2] * co + (o[1] - o[0]) * si + m;\n };\n const A = new Float32Array(3), B = new Float32Array(3), C = new Float32Array(3), M = new Float32Array(3);\n const cssCol = (o: Float32Array, al: number, f = 1): string =>\n `rgba(${[0, 1, 2].map((i) => Math.round(Math.min(1, Math.max(0, o[i] * f)) * 255)).join(',')},${al})`;\n const grad = (cx: number, cy: number, r: number, stops: (number | string)[]): CanvasGradient => {\n const g = x.createRadialGradient(cx, cy, 0, cx, cy, r);\n for (let i = 0; i < stops.length; i += 2) g.addColorStop(stops[i] as number, stops[i + 1] as string);\n return g;\n };\n const shade = grad(-0.35, -0.4, 1.6, [0, 'rgba(255,255,255,.16)', 0.45, 'rgba(0,0,0,0)', 1, 'rgba(0,0,0,.5)']);\n const rim = grad(0, 0, 1, [0.78, 'rgba(255,255,255,0)', 1, 'rgba(255,255,255,.28)']);\n const sheen = grad(-0.32, -0.38, 0.6, [0, 'rgba(255,255,255,.22)', 1, 'rgba(255,255,255,0)']);\n const spec = grad(-0.4, -0.46, 0.14, [0, 'rgba(255,255,255,.95)', 1, 'rgba(255,255,255,0)']);\n let g: { base: string; a: CanvasGradient; b: CanvasGradient; c: CanvasGradient; core: CanvasGradient } | null = null;\n let mid = 0, rad = 0;\n const put = (fill: string | CanvasGradient, dx: number, dy: number, sz: number): void => {\n x.setTransform(rad * sz, 0, 0, rad * sz, mid + rad * dx, mid + rad * dy);\n x.fillStyle = fill;\n x.fillRect(-1, -1, 2, 2);\n };\n return {\n paint(ms: number, lv: number, a: string, b: string): void {\n const now = performance.now();\n fit(now);\n if (!g || a !== sa || b !== sb) {\n tint(a, b, now, true);\n tn(ca, A);\n tn(cb, B);\n hue(A, C, A[2] > A[1] ? 1.4 : -0.9);\n for (let i = 0; i < 3; i++) M[i] = (A[i] + B[i]) / 2;\n g = {\n base: cssCol(M, 1, 0.7),\n a: grad(0, 0, 1, [0, cssCol(A, 0.95), 1, cssCol(A, 0)]),\n b: grad(0, 0, 1, [0, cssCol(B, 0.95), 1, cssCol(B, 0)]),\n c: grad(0, 0, 1, [0, cssCol(C, 0.55), 1, cssCol(C, 0)]),\n core: grad(0, 0, 1, [0, cssCol(A, 1, 1.4), 1, cssCol(A, 0)]),\n };\n }\n const t = ms * 0.001, s = t * 0.22;\n mid = w / 2;\n rad = mid * 0.955 * (1 + 0.008 * Math.sin(t * 0.9));\n x.setTransform(1, 0, 0, 1, 0, 0);\n x.clearRect(0, 0, w, w);\n x.save();\n x.beginPath();\n x.arc(mid, mid, rad, 0, Math.PI * 2);\n x.clip();\n x.fillStyle = g.base;\n x.fillRect(0, 0, w, w);\n put(g.a, 0.55 * Math.sin(s * 1.3), -0.5 * Math.cos(s * 1.1), 1.1);\n put(g.b, 0.55 * Math.cos(s * 0.9 + 2), -0.5 * Math.sin(s * 1.2 + 1), 1.1);\n put(g.c, 0.5 * Math.sin(s * 1.6 + 4), -0.5 * Math.cos(s * 1.4 + 5), 0.9);\n x.globalAlpha = 0.15 + 0.45 * lv;\n put(g.core, 0, 0, 0.7);\n x.globalAlpha = 1;\n put(shade, 0, 0, 1);\n put(rim, 0, 0, 1);\n put(sheen, 0, 0, 1);\n x.globalAlpha = 0.85 + 0.15 * lv * Math.sin(t * 9);\n put(spec, 0, 0, 1);\n x.restore();\n },\n lose(): void {},\n };\n}\n","// framework/angular/web-search/web-search.component.ts\n//\n// Native Angular port of framework/react/web-search/WebSearch.tsx.\n// The agent's web searches as a trail: each query and what came back, each page\n// read, skimmed or skipped and why, a summary once done, and an answer whose\n// citations light their pages. Inputs mirror the React props; the open-state\n// callback becomes an @Output() EventEmitter.\n\nimport {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { VoIconComponent } from '../core/icon.component';\n\n/** One page the agent opened for a query. */\nexport interface WebPage {\n title: string;\n /** Like \"stripe.com\". */\n domain: string;\n /** Like \"Oct 2026\". */\n date?: string;\n /** reading while the agent opens it; the skipped ones say why. */\n status: 'reading' | 'read' | 'skimmed' | 'paywall' | 'blocked' | 'timeout';\n /** The number the answer cites it by, as [1]. */\n cite?: number;\n}\n\n/** One search the agent made. */\nexport interface WebQuery {\n key: string;\n query: string;\n /** searching shimmers; done shows the count and the time. */\n status: 'searching' | 'done';\n /** How many results came back; 0 says No results. */\n results?: number;\n /** Like \"0.9s\". */\n time?: string;\n /** This query asks the one before it again in other words. */\n rewritten?: boolean;\n pages?: WebPage[];\n}\n\nconst STATUS: Record<WebPage['status'], [string, string]> = {\n reading: ['Reading', ''],\n read: ['Read', ''],\n skimmed: ['Skimmed', ''],\n paywall: ['Skipped: paywall', 'vo-warn'],\n blocked: ['Skipped: blocked', 'vo-warn'],\n timeout: ['Skipped: timeout', 'vo-warn'],\n};\n\n/** One flattened page with its query key, for citations and marks. */\ninterface FlatPage extends WebPage {\n q: string;\n}\n\n/** One piece of the answer: plain text or a citation button. */\ninterface AnswerPart {\n text?: string;\n cite?: number;\n}\n\n/** The agent's web searches as a trail, with an answer whose citations light their pages. */\n@Component({\n selector: 'vo-web-search',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n imports: [VoIconComponent],\n template: `\n <div\n data-vo=\"\"\n class=\"vo-wsx\"\n [class.vo-panel]=\"!bare\"\n [style.paddingInline]=\"bare ? '0' : null\"\n >\n <button type=\"button\" class=\"vo-wsx-h\" [attr.aria-expanded]=\"isOpen\" (click)=\"toggle()\">\n <span class=\"vo-wsx-ic\">\n @if (done) {\n <vo-icon name=\"globe\" size=\"xs\"></vo-icon>\n } @else {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n </span>\n <span class=\"vo-wsx-st vo-sw\" [class.vo-shim]=\"!done\">{{ line }}</span>\n <span class=\"vo-wsx-marks\" aria-hidden=\"true\">\n @for (s of marks; track s) {\n <span [class.vo-hl]=\"hotPage?.domain === s\">{{ s[0].toUpperCase() }}</span>\n }\n @if (sites.length > 4) {\n <span class=\"vo-n\">+{{ sites.length - 4 }}</span>\n }\n </span>\n <vo-icon name=\"chev-d\" size=\"xs\"></vo-icon>\n </button>\n\n <div class=\"vo-fold vo-wsx-fold\" [class.vo-shut]=\"!isOpen\" [attr.inert]=\"isOpen ? null : ''\">\n <div>\n <div class=\"vo-wsx-list\">\n @for (q of queries; track q.key) {\n <div\n class=\"vo-wsx-q vo-enter\"\n [class.vo-hl]=\"hotPage && hotPage.q === q.key && !isQOpen(q)\"\n >\n <button\n type=\"button\"\n class=\"vo-wsx-qh\"\n [class.vo-empty]=\"!hasPages(q)\"\n [attr.aria-expanded]=\"isQOpen(q)\"\n [attr.aria-label]=\"qLabel(q)\"\n (click)=\"toggleQ(q)\"\n >\n <vo-icon name=\"search\" size=\"xs\"></vo-icon>\n <span class=\"vo-t\" [class.vo-shim]=\"q.status === 'searching'\">{{ q.query }}</span>\n <span class=\"vo-n\" [class.vo-none]=\"q.status === 'done' && !q.results\">{{\n q.status === 'searching' ? 'Searching' : q.results ? q.results + ' results' : 'No results'\n }}</span>\n <span class=\"vo-tm vo-num\">{{ q.status === 'done' ? q.time : '' }}</span>\n <vo-icon name=\"chev-r\" size=\"xs\"></vo-icon>\n </button>\n @if (q.rewritten) {\n <span class=\"vo-wsx-rw\">\n <vo-icon name=\"refresh\" size=\"xs\"></vo-icon>Asked again in other words\n </span>\n }\n @if (hasPages(q)) {\n <div class=\"vo-fold\" [class.vo-shut]=\"!isQOpen(q)\" [attr.inert]=\"isQOpen(q) ? null : ''\">\n <div>\n <ul class=\"vo-wsx-rs\">\n @for (p of q.pages; track p.title) {\n <li\n tabindex=\"0\"\n class=\"vo-wsx-r vo-enter\"\n [class.vo-skip]=\"isSkip(p)\"\n [class.vo-hl]=\"hotPage && hotPage.q === q.key && hotPage.title === p.title\"\n [attr.aria-label]=\"pageLabel(p)\"\n >\n <span class=\"vo-wsx-fav\" aria-hidden=\"true\">{{ p.domain[0].toUpperCase() }}</span>\n <span class=\"vo-tx\">\n <span class=\"vo-t\">{{ p.title }}</span>\n <span class=\"vo-d\">{{ p.domain }}{{ p.date ? ' · ' + p.date : '' }}</span>\n </span>\n <span class=\"vo-tag\" [class]=\"STATUS[p.status][1]\">\n @if (p.status === 'reading') {\n <span class=\"vo-spin\" aria-hidden=\"true\"></span>\n }\n {{ STATUS[p.status][0] }}\n </span>\n </li>\n }\n </ul>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </div>\n\n @if (answer) {\n <div class=\"vo-wsx-ans\">\n @for (part of answerParts; track $index) {\n @if (part.cite !== undefined) {\n <button\n type=\"button\"\n class=\"vo-wsx-cite\"\n [class.vo-on]=\"hot === part.cite\"\n [attr.aria-label]=\"citeLabel(part.cite)\"\n (pointerenter)=\"hot = part.cite ?? null\"\n (pointerleave)=\"hot = null\"\n (focus)=\"hot = part.cite ?? null\"\n (blur)=\"hot = null\"\n >{{ part.cite }}</button>\n } @else {\n <span>{{ part.text }}</span>\n }\n }\n </div>\n }\n <p class=\"vo-wsx-sr\" role=\"status\">{{ said }}</p>\n </div>\n `,\n styleUrl: './web-search.css',\n})\nexport class WebSearchComponent implements OnChanges {\n @Input() queries: WebQuery[] = [];\n /** True once searching and reading are over: the trail folds to its summary. */\n @Input() done = false;\n /** The answer, with sources cited as [1], [2]. Each number points at the page with that cite. */\n @Input() answer?: string;\n /** Whether the trail is open. Left out, it folds once done turns true. */\n @Input() set open(value: boolean | undefined) {\n this.controlled = value !== undefined;\n if (value !== undefined) this.inner = value;\n }\n /** Without the panel, for a chat stream. */\n @Input() bare = true;\n\n @Output() openChange = new EventEmitter<boolean>();\n\n readonly STATUS = STATUS;\n\n hot: number | null = null;\n said = '';\n\n private controlled = false;\n private inner = true;\n private qOpen: Record<string, boolean> = {};\n private lastSaid = '';\n\n get isOpen(): boolean {\n return this.inner;\n }\n\n get flatPages(): FlatPage[] {\n return this.queries.flatMap((q) => (q.pages ?? []).map((p) => ({ ...p, q: q.key })));\n }\n\n get sites(): string[] {\n return [...new Set(this.flatPages.map((p) => p.domain))];\n }\n\n get marks(): string[] {\n return this.sites.slice(0, 4);\n }\n\n get line(): string {\n const read = this.flatPages.filter((p) => p.status === 'read' || p.status === 'skimmed').length;\n if (this.done) return `${this.queries.length} searches, ${read} pages read`;\n const current = this.queries.find((q) => q.status === 'searching');\n if (current) return `Searching for “${current.query}”`;\n const reading = this.flatPages.filter((p) => p.status === 'reading').length;\n if (reading) return `Reading ${reading} pages`;\n return 'Searching the web';\n }\n\n get hotPage(): FlatPage | undefined {\n return this.hot != null ? this.flatPages.find((p) => p.cite === this.hot) : undefined;\n }\n\n get answerParts(): AnswerPart[] {\n if (!this.answer) return [];\n return this.answer.split(/(\\[\\d+\\])/).map((part) => {\n const m = part.match(/^\\[(\\d+)\\]$/);\n return m ? { cite: +m[1] } : { text: part };\n });\n }\n\n hasPages(q: WebQuery): boolean {\n return !!q.pages?.length;\n }\n\n isQOpen(q: WebQuery): boolean {\n if (!this.hasPages(q)) return false;\n const auto = q.pages?.some((p) => p.status === 'reading') ?? false;\n return this.qOpen[q.key] ?? auto;\n }\n\n isSkip(p: WebPage): boolean {\n return p.status !== 'read' && p.status !== 'skimmed' && p.status !== 'reading';\n }\n\n qLabel(q: WebQuery): string | null {\n if (q.status !== 'done') return null;\n const res = q.results ? `${q.results} results` : 'no results';\n return `${q.query}: ${res}${q.time ? ', ' + q.time : ''}`;\n }\n\n pageLabel(p: WebPage): string {\n return `${p.title}, ${p.domain}${p.date ? ', ' + p.date : ''}: ${STATUS[p.status][0]}`;\n }\n\n citeLabel(n: number | undefined): string {\n if (n === undefined) return '';\n const p = this.flatPages.find((x) => x.cite === n);\n return p ? `Source ${n}: ${p.title}, ${p.domain}` : `Source ${n}`;\n }\n\n toggle(): void {\n this.setOpen(!this.inner);\n }\n\n toggleQ(q: WebQuery): void {\n if (!this.hasPages(q)) return;\n this.qOpen = { ...this.qOpen, [q.key]: !this.isQOpen(q) };\n }\n\n private setOpen(o: boolean): void {\n if (!this.controlled) this.inner = o;\n this.openChange.emit(o);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['done'] && this.done && !this.controlled) {\n this.inner = false;\n }\n // only changes of phase are announced\n const current = this.queries.find((q) => q.status === 'searching');\n const next = this.done ? `Done: ${this.line}` : current ? `Searching for ${current.query}` : '';\n if (next && next !== this.lastSaid) {\n this.lastSaid = next;\n this.said = next;\n }\n }\n}\n","// @visuno/angular — public API. Auto-generated.\n// Import the tokens stylesheet globally (angular.json styles or @import):\n// @import '@visuno/angular/styles.css';\n\n// Shared\nexport * from './core/icon.component';\nexport * from './core/reduced-motion.service';\n\n// Components\nexport * from './account-table/account-table.component';\nexport * from './action-log/action-log.component';\nexport * from './activity-heatmap/activity-heatmap.component';\nexport * from './agent-inbox/agent-inbox.component';\nexport * from './agent-lanes/agent-lanes.component';\nexport * from './agent-phases/agent-phases.component';\nexport * from './agent-run-timeline/agent-run-timeline.component';\nexport * from './agent-tree/agent-tree.component';\nexport * from './answer-action-bar/answer-action-bar.component';\nexport * from './artifact-card/artifact-card.component';\nexport * from './attachment-tray/attachment-tray.component';\nexport * from './badge/badge.component';\nexport * from './bar-chart/bar-chart.component';\nexport * from './browser-session/browser-session.component';\nexport * from './buttons/buttons.component';\nexport * from './card/card.component';\nexport * from './change-review/change-review.component';\nexport * from './citation-hover-card/citation-hover-card.component';\nexport * from './code-viewer/code-viewer.component';\nexport * from './composer/composer.component';\nexport * from './context-meter/context-meter.component';\nexport * from './decision-prompt/decision-prompt.component';\nexport * from './design-review/design-review.component';\nexport * from './design-tuner/design-tuner.component';\nexport * from './details-panel/details-panel.component';\nexport * from './donut-chart/donut-chart.component';\nexport * from './draft-review/draft-review.component';\nexport * from './error-recovery/error-recovery.component';\nexport * from './eval-results/eval-results.component';\nexport * from './feedback-sheet/feedback-sheet.component';\nexport * from './field-extraction/field-extraction.component';\nexport * from './funnel-chart/funnel-chart.component';\nexport * from './grid/grid.component';\nexport * from './health-score/health-score.component';\nexport * from './human-handoff/human-handoff.component';\nexport * from './image-generation/image-generation.component';\nexport * from './inline-text-diff/inline-text-diff.component';\nexport * from './launch-checklist/launch-checklist.component';\nexport * from './line-chart/line-chart.component';\nexport * from './live-answer/live-answer.component';\nexport * from './metric-insight/metric-insight.component';\nexport * from './modal/modal.component';\nexport * from './model-picker/model-picker.component';\nexport * from './permission-gate/permission-gate.component';\nexport * from './plan-review/plan-review.component';\nexport * from './progress/progress.component';\nexport * from './prompt-library/prompt-library.component';\nexport * from './prompt-starters/prompt-starters.component';\nexport * from './proposal-card/proposal-card.component';\nexport * from './radar-chart/radar-chart.component';\nexport * from './radial-goals/radial-goals.component';\nexport * from './reasoning-trail/reasoning-trail.component';\nexport * from './response-versions/response-versions.component';\nexport * from './rewrite-toolbar/rewrite-toolbar.component';\nexport * from './rich-text-editor/rich-text-editor.component';\nexport * from './run-cost/run-cost.component';\nexport * from './run-queue/run-queue.component';\nexport * from './run-summary/run-summary.component';\nexport * from './scatter-chart/scatter-chart.component';\nexport * from './score-breakdown/score-breakdown.component';\nexport * from './segmented-control/segmented-control.component';\nexport * from './source-stack/source-stack.component';\nexport * from './stat-cards/stat-cards.component';\nexport * from './status-pill/status-pill.component';\nexport * from './steering/steering.component';\nexport * from './step-loader/step-loader.component';\nexport * from './task-table/task-table.component';\nexport * from './terminal-stream/terminal-stream.component';\nexport * from './thinking/thinking.component';\nexport * from './thinking-states/thinking-states.component';\nexport * from './thread-panel/thread-panel.component';\nexport * from './toast/toast.component';\nexport * from './toast-stack/toast-stack.component';\nexport * from './tool-call/tool-call.component';\nexport * from './tooltip/tooltip.component';\nexport * from './top-pages/top-pages.component';\nexport * from './trace-view/trace-view.component';\nexport * from './voice-capture/voice-capture.component';\nexport * from './voice-orb/voice-orb.component';\nexport * from './web-search/web-search.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TONE","TONES","i1.ReducedMotionService","clock","avatarInk","clamp01","KIND","CLS","REASONS","PALETTE","keyOf","DEFAULT_LABELS","GAP","SHAPES","W","H","fmt","PAL","FT","ACTIONS","STATUS"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAaA;AACA,MAAM,MAAM,GAA+B;AACzC,IAAA,OAAO,EAAE,sBAAsB;AAC/B,IAAA,MAAM,EAAE,8BAA8B;AACtC,IAAA,GAAG,EAAE,kCAAkC;AACvC,IAAA,OAAO,EAAE,oCAAoC;AAC7C,IAAA,QAAQ,EAAE,0BAA0B;AACpC,IAAA,QAAQ,EAAE,2BAA2B;AACrC,IAAA,QAAQ,EAAE,0BAA0B;AACpC,IAAA,QAAQ,EAAE,2BAA2B;AACrC,IAAA,OAAO,EAAE,sLAAsL;AAC/L,IAAA,MAAM,EAAE,6FAA6F;AACrG,IAAA,MAAM,EAAE,+HAA+H;AACvI,IAAA,MAAM,EAAE,2BAA2B;AACnC,IAAA,OAAO,EAAE,6BAA6B;AACtC,IAAA,SAAS,EAAE,oDAAoD;AAC/D,IAAA,IAAI,EAAE,oEAAoE;AAC1E,IAAA,OAAO,EAAE,mEAAmE;AAC5E,IAAA,MAAM,EAAE,gEAAgE;AACxE,IAAA,MAAM,EAAE,8DAA8D;AACtE,IAAA,OAAO,EAAE,wDAAwD;AACjE,IAAA,KAAK,EAAE,gHAAgH;AACvH,IAAA,QAAQ,EAAE,yDAAyD;AACnE,IAAA,OAAO,EAAE,iJAAiJ;AAC1J,IAAA,OAAO,EAAE,6LAA6L;AACtM,IAAA,KAAK,EAAE,yFAAyF;AAChG,IAAA,MAAM,EAAE,sEAAsE;AAC9E,IAAA,MAAM,EAAE,uEAAuE;AAC/E,IAAA,MAAM,EAAE,mDAAmD;AAC3D,IAAA,OAAO,EAAE,gEAAgE;AACzE,IAAA,MAAM,EAAE,2EAA2E;AACnF,IAAA,MAAM,EAAE,oGAAoG;AAC5G,IAAA,SAAS,EAAE,oIAAoI;AAC/I,IAAA,WAAW,EAAE,mEAAmE;AAChF,IAAA,MAAM,EAAE,8FAA8F;AACtG,IAAA,IAAI,EAAE,+JAA+J;AACrK,IAAA,OAAO,EAAE,mJAAmJ;AAC5J,IAAA,OAAO,EAAE,oGAAoG;AAC7G,IAAA,KAAK,EAAE,0KAA0K;AACjL,IAAA,MAAM,EAAE,6OAA6O;CACtP;AAED;AACA,MAAM,KAAK,GAA2B,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;MAuB3D,eAAe,CAAA;AArB5B,IAAA,WAAA,GAAA;QAuBW,IAAA,CAAA,IAAI,GAA8B,IAAI;AAWhD,IAAA;AATC,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAC/B;;;AAIA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAChC;+GAZW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBhB;;;;;;;;;;;;;;;AAeT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAEU,eAAe,EAAA,UAAA,EAAA,CAAA;kBArB3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;AAeT,EAAA,CAAA;AACF,iBAAA;8BAE4B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,IAAI,EAAA,CAAA;sBAAZ;;;ACtFH;AACA;AACA;AACA;AACA;AACA;MAKa,oBAAoB,CAAA;AAS/B,IAAA,WAAA,GAAA;;QAPS,IAAA,CAAA,cAAc,GAAG,MAAM,CAAU,IAAI,CAAC,KAAK,EAAE,CAAC;AAE/C,QAAA,IAAA,CAAA,EAAE,GACR,OAAO,UAAU,KAAK,UAAU,GAAG,UAAU,CAAC,kCAAkC,CAAC,GAAG,IAAI;AAEzE,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;AAGrE,QAAA,IAAI,CAAC,EAAE,EAAE,gBAAgB,GAAG,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACtD;;IAGA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE;IAC9B;IAEQ,KAAK,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,KAAK;IAClC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,mBAAmB,GAAG,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzD;+GAxBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACTlC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkDA,MAAMA,MAAI,GAAqC;AAC7C,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,IAAI,EAAE,GAAG;CACV;AACD,MAAMC,OAAK,GAAqC;AAC9C,IAAA,UAAU,EAAE,QAAQ;AACpB,IAAA,GAAG,EAAE,MAAM;AACX,IAAA,IAAI,EAAE,MAAM;CACb;MAuHY,qBAAqB,CAAA;AArHlC,IAAA,WAAA,GAAA;QAsHW,IAAA,CAAA,QAAQ,GAA0B,EAAE;;QAIpC,IAAA,CAAA,SAAS,GAAqCA,OAAK;QAInD,IAAA,CAAA,WAAW,GAAG,EAAE;AACf,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;QAIxC,IAAA,CAAA,YAAY,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAIzC,IAAA,CAAA,WAAW,GAAkB,IAAI;AAChC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;QAI/C,IAAA,CAAA,WAAW,GAAG,iBAAiB;;QAE/B,IAAA,CAAA,UAAU,GAAG,mBAAmB;AAExB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEtD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,WAAW;AACzB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,YAAY;AACxB,QAAA,IAAA,CAAA,MAAM,GAAkB,IAAI,CAAC,WAAW;QACxC,IAAA,CAAA,KAAK,GAA6B,MAAM;;QAExC,IAAA,CAAA,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAEvB,QAAA,IAAA,CAAA,QAAQ,GAAkB,IAAI,CAAC,MAAM;QACrC,IAAA,CAAA,KAAK,GAAG,IAAI;AA6FrB,IAAA;AA3FC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACvE,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;QACxE,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACvE,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;QACrF,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY;QACtF,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;;QAErF,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;QACrB;IACF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;QACjC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD;IAEA,IAAI,GAAA;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACxC,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC5F;IACH;AAEA,IAAA,SAAS,CAAC,IAAY,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AACjC,QAAA,OAAO,IAAI,GAAGD,MAAI,CAAC,IAAI,CAAC,GAAG,EAAE;IAC/B;AAEA,IAAA,WAAW,CAAC,CAAS,EAAA;QACnB,OAAO,CAAC,IAAI,EAAE,GAAG,kBAAkB,GAAG,CAAC,IAAI,EAAE,GAAG,oBAAoB,GAAG,mBAAmB;IAC5F;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;AAEA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;AAEA,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;AAC/C,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM;AAC3B,gBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;YACrB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEA,QAAQ,CAAC,CAAgB,EAAE,IAAY,EAAA;QACrC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa,EAAE;YACxE,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACnB;IACF;IAEA,SAAS,CAAC,CAAQ,EAAE,CAAsB,EAAA;QACxC,CAAC,CAAC,eAAe,EAAE;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,OAAQ,CAAsB,CAAC,IAAI,KAAK,UAAU,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AAClB,YAAA,CAAsB,CAAC,IAAI,CAC1B,MAAK;gBACH,IAAI,IAAI,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;YACrC,CAAC,EACD,MAAK;gBACH,IAAI,IAAI,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACrC,YAAA,CAAC,CACF;QACH;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;QACrB;IACF;;IAGQ,MAAM,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACzC;+GAlIW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhHtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6GT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0zNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9GS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiHd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBArHjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6GT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0zNAAA,CAAA,EAAA;8BAIQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;;;AC1NH;AACA;AACA;AACA;AACA;AACA;AACA;MA6Fa,kBAAkB,CAAA;AAjE/B,IAAA,WAAA,GAAA;;QAmEW,IAAA,CAAA,OAAO,GAAa,EAAE;QACtB,IAAA,CAAA,KAAK,GAAG,gBAAgB;;QAExB,IAAA,CAAA,OAAO,GAAG,IAAI;;QAId,IAAA,CAAA,IAAI,GAAG,IAAI;;AAGV,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAoC;AAEzD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;AAqB1C,IAAA;AAnBC,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;QACd,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9B,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;AACrB,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM;AACnC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,CAAE,GAAG,SAAS;QAChF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,MAAA,EAAS,KAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,EAAE,CAAA,CAAE;IAC/E;+GAlCW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5DnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+8FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1DS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Dd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAjE9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+8FAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAGS,SAAS,EAAA,CAAA;sBAAlB;;;AC/GH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA+BA,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC;AAC3F,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;AACtC;AACA,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;AACxE,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC;AAE3D,MAAM,IAAI,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;MA+D9D,wBAAwB,CAAA;;IAInC,IAAa,KAAK,CAAC,CAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,SAAS;QACjC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AACrC,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,IAAI,EAAE;YACb;QACF;IACF;AA8BA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;IAC9D;IAEA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;;QAnDK,IAAA,CAAA,MAAM,GAA4B,EAAE;;QActD,IAAA,CAAA,KAAK,GAAG,UAAU;;QAElB,IAAA,CAAA,MAAM,GAAG,cAAc;QACvB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAIzC,IAAA,CAAA,SAAS,GAAG,UAAU;QACtB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAG,MAAM;QAExB,IAAA,CAAA,GAAG,GAAG,EAAE;AACR,QAAA,IAAA,CAAA,KAAK,GAAW,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QAEL,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAoC,EAAE;QAE5C,IAAA,CAAA,KAAK,GAAG,KAAK;IAalB;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QAC3D;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,WAAW,EAAE;;AAElB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB,IAAI,CAAC,IAAI,EAAE;QACb,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,IAAI,EAAE;QACb;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IAEQ,IAAI,GAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AAC9D,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;QACtB;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;YAChB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;;AAE3B,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACvC,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAA,8BAAA,EAAiC,KAAK,CAAA,iBAAA,CAAmB;YACpF,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE;QACxG;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE;AACpB,eAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAc,mBAAmB,CAAC,IAAI,EAAE;cACnG,EAAE;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAC3D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;;IAGQ,WAAW,GAAA;AACjB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,aAAa;AACjC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,KAAK,GAAG,MAAK;YACjB,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW;AACzC,YAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;AACxD,YAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,CAAC;;QAED,MAAM,GAAG,GAAG,MAAK;YACf,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,gBAAA,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW;AAC/C,YAAA,KAAK,EAAE;AACT,QAAA,CAAC;QACD,MAAM,IAAI,GAAG,MAAK;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACnB,QAAA,CAAC;AACD,QAAA,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACtD,QAAA,CAAC,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,CAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KACrE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAChD;AACD,QAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;YACxC,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,cAAc,CAAC;AAC7C,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;+GA9JW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlDzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kjHAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAtDpC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,cACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kjHAAA,CAAA,EAAA;sHAK0B,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEZ,KAAK,EAAA,CAAA;sBAAjB;gBAUQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAEgB,EAAE,EAAA,CAAA;sBAAlB,SAAS;uBAAC,IAAI;;;ACvIjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4CA,MAAM,MAAM,GAA2B;IACrC,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,MAAM,EAAE,MAAM,CAAC;CACjB;AAED,MAAMC,OAAK,GAAG,CAAC,CAAS,KAAK,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAEvF;AACA,MAAMC,WAAS,GAAG,CAAC,KAAa,KAC9B,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,SAAS;MAiEnE,mBAAmB,CAAA;AAnDhC,IAAA,WAAA,GAAA;;QAqD6B,IAAA,CAAA,IAAI,GAAe,EAAE;;QAEvC,IAAA,CAAA,KAAK,GAAG,OAAO;;AAOd,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAU;;AAEpC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAU;AAI3B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGvD,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,KAAK,GAAG,KAAK;;QAIL,IAAA,CAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAqC;;AAInD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAkB;AACjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAsB;QACvC,IAAA,CAAA,YAAY,GAAG,IAAI;AACnB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,GAAG,EAAiC;AA6I9D,IAAA;AA3IC,IAAA,IAAI,aAAa,GAAA;;AAEf,QAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;IACrE;AAEA,IAAA,MAAM,CAAC,CAAa,EAAA;QAClB,OAAO,IAAI,CAAC;aACT,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC;AAC3B,aAAA,GAAG,CAAC,CAAC,GAAG,KAAI;AACX,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,IAAI,kBAAkB;YAC3C,MAAM,IAAI,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;YAC1C,OAAO;gBACL,GAAG;AACH,gBAAA,KAAK,EAAE,CAAC;gBACR,IAAI;gBACJ,GAAG;AACH,gBAAA,GAAG,EAAEA,WAAS,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,GAAG,qBAAqB,CAAC;AACnE,gBAAA,MAAM,EAAE,CAAC,KAAK,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE;gBACnD,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,gBAAA,OAAO,EAAE,CAAC,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;aAC9C;AACH,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,GAAG,CAAC,CAAS,EAAA;AACX,QAAA,OAAOD,OAAK,CAAC,CAAC,CAAC;IACjB;AAEQ,IAAA,IAAI,CAAC,CAAW,EAAA;AACtB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;AACzC,YAAA,OAAO,CAAC;QACV;QACA,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE;IAC/B;IAEQ,IAAI,GAAA;QACV,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,MAAM;QAChE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM;QAC/D,QACE,IAAI,CAAC,MAAM;AACX,aAAC;AACC,kBAAE,CAAA,EAAG,IAAI,CAAA,KAAA,EAAQ,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,IAAA;AACpC,kBAAE;sBACE,CAAA,EAAG,OAAO,CAAA,QAAA;AACZ,sBAAE,CAAA,YAAA,EAAe,IAAI,CAAA,WAAA,CAAa,CAAC;IAE3C;IAEQ,OAAO,GAAA;AACb,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;QACF;AACA,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO;YAAE;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CACvB,MAAK;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,CAAC,EACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAChC;IACH;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAK;;YAE7B,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAAE,gBAAA,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5F,CAAC,EAAE,IAAI,CAAC;IACV;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE;;AAEtB,QAAA,KAAK,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACxF;QACA,IAAI,CAAC,OAAO,EAAE;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,qBAAqB,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7C;IACF;;IAGQ,OAAO,GAAA;AACb,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,MAAM,GAAG,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC,GAAG;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB;AACtC,QAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM;QACjF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACpC,GAAG,CAAC,gBAAgB,CAAc,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YAC3D,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAE;YAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,GAAG;YAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACd,YAAA,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY;gBAAE;AACjC,YAAA,IAAI,GAAG,KAAK,SAAS,EAAE;;gBAErB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;gBAC/D;YACF;YACA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACzB,gBAAA,EAAE,CAAC,OAAO,CACR,CAAC,EAAE,SAAS,EAAE,CAAA,WAAA,EAAc,GAAG,GAAG,CAAC,CAAA,GAAA,CAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAClE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAChC;YACH;;YAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK;YACpD,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,KAAK,GAAG,EAAE;AACjC,gBAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,gBAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,oBAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AAC5B,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3B,CAAC,EAAE,GAAG,CAAC;AACP,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;IAC3B;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AAC3C,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;IACzB;+GA7KW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9CpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ipGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5CS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA+Cd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnD/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ipGAAA,CAAA,EAAA;8BAK0B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,OAAO,EAAA,CAAA;sBAAhB;gBAES,KAAK,EAAA,CAAA;sBAAd;gBAE0B,IAAI,EAAA,CAAA;sBAA9B,SAAS;uBAAC,MAAM;;;AC/InB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmEA,MAAMH,MAAI,GAA6B;AACrC,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;CACX;AACD,MAAM,KAAK,GAAG,CAAC,CAAa,KAAaA,MAAI,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC;AAChE,MAAMK,SAAO,GAAG,CAAC,CAAS,KAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,MAAMF,OAAK,GAAG,CAAC,CAAS,KACtB,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AA+C5D;MAuIa,mBAAmB,CAAA;;IAO9B,IAAa,MAAM,CAAC,KAA0B,EAAA;AAC5C,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,KAAK,SAAS;QAC3C,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IACnD;;IAOA,IAAa,QAAQ,CAAC,KAA2B,EAAA;AAC/C,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,KAAK,SAAS;QAC7C,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IACrD;AAkCA,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;QArD3B,IAAA,CAAA,KAAK,GAAgB,EAAE;QAUvB,IAAA,CAAA,aAAa,GAAG,KAAK;;QAErB,IAAA,CAAA,UAAU,GAAG,KAAK;QAQlB,IAAA,CAAA,eAAe,GAAa,EAAE;;QAE9B,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAY;QAI/C,IAAA,CAAA,gBAAgB,GAAG,KAAK;QACxB,IAAA,CAAA,kBAAkB,GAAG,KAAK;QAC1B,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,aAAa,GAAa,EAAE;QAC5B,IAAA,CAAA,OAAO,GAAG,CAAC;QAMX,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAKhB,IAAA,CAAA,OAAO,GAAa,EAAE;QAKtB,IAAA,CAAA,WAAW,GAAG,EAAE;IAIqC;;AAI7D,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,IAAY,YAAY,GAAA;QACtB,OAAO,IAAI,CAAC,aAAa;IAC3B;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,kBAAkB;AAAE,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;AACvD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;;AAIA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;IAC9E;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,KAAK;QAC/C,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAkB;QACpE,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,mBAAmB;AAC7C,QAAA,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,iBAAiB;IAC9C;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAOA,OAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;IAC5C;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC7B,MAAM,MAAM,GAAe,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM;AAC9F,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;AAC7B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ;AACxD,YAAA,MAAM,IAAI,GAAc,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAC7D,gBAAA,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI;gBAC9B,OAAO;oBACL,EAAE,EAAE,CAAC,GAAG,IAAI;oBACZ,GAAG;AACH,oBAAA,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;oBACvC,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,GAAGE,SAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;iBAClF;AACH,YAAA,CAAC,CAAC;YACF,OAAO;gBACL,IAAI;gBACJ,MAAM;AACN,gBAAA,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;gBACjB,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC5D,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AACzD,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG;gBAC9B,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1C,IAAI;aACL;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,GAAG;IAC3D;AAEQ,IAAA,MAAM,CAAC,GAAW,EAAA;QACxB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACrD;;AAGA,IAAA,OAAO,CAAC,OAAe,EAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACnB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,OAAO;AAAE,YAAA,OAAO,SAAS;QAC5C,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAA,CAAE;QAC/B,OAAO;YACL,GAAG;YACH,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;AACnB,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,KAAK,SAAS;YACnC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;SAChC;IACH;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO;cAC/C,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO;AAChC,cAAE,IAAI,CAAC,OAAO;AAClB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AACtB,YAAA,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YACjC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAChF,QAAA,CAAC,CAAC;IACJ;;IAIA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,gBAAgB;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;AACjE,QAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/D,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QAChD;QACA,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACvC,QAAA,IAAI,GAAG,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;AAC/C,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;AACvD,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACtB;QACA,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE;QACpF,IAAI,OAAO,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,eAAe,EAAE;QAC9C,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,cAAc,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACjE;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO;QACtB,IAAI,CAAC,EAAE;;AAEL,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,gBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB,IAAI,CAAC,YAAY,EAAE;YACnB,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAA,CAAE;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAC/B,IAAI,IAAI,CAAC,SAAS;AAAE,oBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,gBAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YACzF;QACF;aAAO;;AAEL,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;YACrB,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAChC,gBAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,oBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,gBAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;YACrC;QACF;IACF;IAEQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,MAAM,GAAG,GACP,OAAO,qBAAqB,KAAK;AAC/B,cAAE;AACF,cAAE,CAAC,EAAwB,KAAK,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAsB;AACpF,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,MAAK;AACtB,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAK;AACxB,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;gBACpB,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;QAClB,IAAI,CAAC,YAAY,EAAE;QACnB,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,MAAW;YACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AACtE,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AAClD,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC/B,gBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;AAAE,oBAAA,IAAI,CAAC,MAAM,GAAG,SAAS;YACjD,CAAC,EAAE,GAAG,CAAC;YACP,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,CAAC;;AAED,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAClD,CAAA,0BAAA,EAA6B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,CACjD;QACD,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AAChC,YAAA,MAAM,EAAE;YACR;QACF;AACA,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE;AAC9E,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,MAAM,EAAE,2BAA2B;AACpC,SAAA,CAAC;AACF,QAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAK,EAAE,CAAC,CAAC;IACpC;;IAGQ,YAAY,GAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACvC,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE;QACtC,GAAG,CAAC,gBAAgB,CAAc,mBAAmB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;YACpE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AACjD,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,aAAA,CAAe,CAAC;AACxE,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,CAAA,YAAA,EAAe,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,aAAA,CAAe,CAAC;AACxE,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE;AACd,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;AACxD,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;YACrD,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI;AACxB,YAAA,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;AAC/C,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,GAAA;QAClB,MAAM,WAAW,GACf,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC1F,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAC1D;AAAO,aAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE;AACpC,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AACxD,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;+GAhTW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAH,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjIpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8HT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k1UAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/HS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkId,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtI/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8HT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,k1UAAA,CAAA,EAAA;sFAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEY,MAAM,EAAA,CAAA;sBAAlB;gBAIQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEY,QAAQ,EAAA,CAAA;sBAApB;gBAIQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;;AC9SnB;AACA;AACA;AACA;AACA;AACA;AACA;AAuCA,MAAM,KAAK,GAAiB,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAC9F,MAAM,IAAI,GAA+B;IACvC,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS;IAChE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM;CAC7D;AACD,MAAM,GAAG,GAA+B;IACtC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM;IACvD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM;CAChD;AAED;MAoFa,oBAAoB,CAAA;AAnFjC,IAAA,WAAA,GAAA;QAoFW,IAAA,CAAA,KAAK,GAAe,UAAU;;QAS9B,IAAA,CAAA,IAAI,GAAwC,EAAE;QAG9C,IAAA,CAAA,WAAW,GAAG,KAAK;AAElB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAEzC,IAAA,CAAA,KAAK,GAAG,KAAK;QACtB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,IAAI,GAAG,EAAE;QAED,IAAA,CAAA,OAAO,GAAG,CAAC;QAEX,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,SAAS,GAAG,KAAK;AAoG1B,IAAA;AAlGC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM;IAC9B;AAEA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI;AACtC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,KAAK;QAC/C,OAAO,IAAI,CAAC,IAAI,GAAG,CAAA,YAAA,EAAe,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACnE;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,MAAM,GAAG,GAA+B;AACtC,YAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;SACnE;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW;IACvC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC;IACtE;AAEA,IAAA,IAAI,CAAC,EAAc,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QAC3C,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,QAAQ,EAAE;IACjB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACzB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;YAC3C;QACF;AACA,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC9D,IAAI,CAAC,YAAY,EAAE;QACrB;QACA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACxC,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;;IAGQ,YAAY,GAAA;AAClB,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,EAAE;YACrF;QACF;AACA,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;YAClC,IAAI,CAAC,OAAO,EAAE;QAChB,CAAC,EAAE,IAAI,CAAC;IACV;;IAGQ,QAAQ,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC;AACb,cAAE,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;cACvB,IAAI,CAAC;AACL,kBAAE,CAAA,kBAAA,EAAqB,IAAI,CAAC,IAAI,CAAA,CAAA;AAChC,kBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;QACf;IACF;IAEA,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;IACjC;+GA3HW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9ErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6gNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5ES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA+Ed,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAnFhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2ET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6gNAAA,CAAA,EAAA;8BAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAES,UAAU,EAAA,CAAA;sBAAnB;;;AC1JH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiFA;AACA;AACA;AACA,MAAMI,MAAI,GAA+C;AACvD,IAAA,KAAK,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC;AACtC,IAAA,IAAI,EAAE,CAAC,OAAO,EAAE,kDAAkD,EAAE,IAAI,CAAC;AACzE,IAAA,GAAG,EAAE,CAAC,MAAM,EAAE,kDAAkD,EAAE,IAAI,CAAC;CACxE;AACD,MAAM,KAAK,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC;AAElD,MAAM,GAAG,GAAG,CAAC,CAAS,KAAa,CAAC,GAAG,GAAG,GAAG,GAAG;AAChD,MAAM,IAAI,GAAG,CAAC,CAAS,KAAa,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEzD;MAyGa,yBAAyB,CAAA;AAxGtC,IAAA,WAAA,GAAA;;QA0GW,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAgB1B,IAAA,CAAA,IAAI,GAAG,IAAI;AAIH,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC9C,IAAA,CAAA,QAAQ,GAAG,EAAE;AACb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAU;QAE9B,IAAA,CAAA,KAAK,GAAG,GAAG;QACX,IAAA,CAAA,KAAK,GAAG,IAAI;AA+ItB,IAAA;;AA5IC,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpE;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9D;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;IAC9D;AAEA,IAAA,IAAI,CAAC,GAAA;QACH,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;IAChC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1E;AAEQ,IAAA,KAAK,CAAC,CAAe,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK;AAAE,YAAA,OAAO,MAAM;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,KAAK;QACxD,OAAO,CAAC,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM;IACnC;AAEQ,IAAA,GAAG,CAAC,CAAe,EAAA;QACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5D;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;AACjD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK;aACrC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK;aAClB,IAAI,CAAC,IAAI,CAAC;AACb,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;YACzD,OAAO,CAAA,YAAA,EAAe,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA,EAAA,EAAK,OAAO,IAAI,OAAO,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS,CAAA,CAAE,GAAG,EAC7F,CAAA,CAAE;QACJ;AACA,QAAA,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI,UAAU;IAC3C;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAC3E,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAIA,MAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,YAAA,KAAK,EAAEA,MAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjB,GAAG,EAAE,IAAI,CAAC;iBACP,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC;AAC1B,iBAAA,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACvC,iBAAA,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;AACpB,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxB,IAAI,EAAE,KAAK,KAAK;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,GAAGA,MAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,GAAG,GAAG,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,EAAA,EAAK,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAC9C,CAAC,CAAC,IAAI,KAAK,SAAS,GAAG,CAAA,GAAA,EAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE,GAAG,EACrD,CAAA,EAAG,CAAC,CAAC,IAAI,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAA,CAAE,GAAG,EAAE,CAAA,CAAE;YAChC,OAAO;gBACL,CAAC;gBACD,CAAC;AACD,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;AAC7C,gBAAA,EAAE,EAAE,CAAC,GAAG,CAAA,SAAA,EAAY,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,GAAG,eAAe;AAC7C,gBAAA,EAAE,EAAE,CAAC,GAAG,CAAA,SAAA,EAAY,CAAC,CAAC,CAAC,CAAC,CAAA,IAAA,CAAM,GAAG,gBAAgB;gBACjD,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAClC,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC7B,GAAG;AACH,gBAAA,GAAG,EAAE,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;AAC5C,gBAAA,IAAI,EAAE,EAAE,KAAK,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,gBAAA,IAAI,EACF,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE;AACf,sBAAE;AACE,wBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;wBACvD,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;AACnE;AACH,sBAAE,SAAS;aAChB;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;AAC9C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACtD,QAAA,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACnD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;AACtF,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnG,OAAO;YACL,EAAE,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAChF,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS;kBAC3C,CAAC,EAAE,KAAK,EAAE,CAAA,CAAA,EAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAqB,EAAE;kBAC7E,EAAE,CAAC;YACP,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,IAAI,EAAE,WAAyB,EAAE;AACxF,YAAA,IAAI;AACF,kBAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,SAAuB,EAAE;kBACtG,EAAE,CAAC;SACR;IACH;;AAGA,IAAA,QAAQ,CAAC,IAAe,EAAA;AACtB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG;IACzB;AACA,IAAA,UAAU,CAAC,IAAe,EAAA;AACxB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;IAC3B;;IAGA,kBAAkB,GAAA;AAChB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACrC,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,MAAM,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,qBAAqB,EAAE;AACnE,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,CAAC,CAAC,gBAAgB,CAAc,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AACnE,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE;YACpC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;AACjF,QAAA,CAAC,CAAC;IACJ;+GA1KW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnG1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,43QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjGS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoGd,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAxGrC,SAAS;+BACE,uBAAuB,EAAA,UAAA,EACrB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,43QAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;AAwJnB;AACA,MAAM,MAAM,GAAsD;AAChE,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,aAAa;AAClB,QAAA,KAAK,EACH,ugBAAugB;AAC1gB,KAAA;AACD,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,WAAW;AAChB,QAAA,KAAK,EACH,0uBAA0uB;AAC7uB,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,GAAG,EAAE,aAAa;AAClB,QAAA,KAAK,EACH,6pCAA6pC;AAChqC,KAAA;CACF;;ACrZD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmDA,MAAMC,KAAG,GAAoC;AAC3C,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,MAAM,EAAE,SAAS;CAClB;AAED,MAAMJ,OAAK,GAAG,CAAC,CAAS,KACtB,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAE5D,MAAM,KAAK,GAAG,CAAC,CAAY,KACzB,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtE,MAAM,MAAM,GAAG,CAAC,CAAY,KAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM;MAoFjD,kBAAkB,CAAA;AAlF/B,IAAA,WAAA,GAAA;;QAsGW,IAAA,CAAA,gBAAgB,GAAa,EAAE;QAK/B,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAY;AAIvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtD,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEF,IAAA,CAAA,SAAS,GAAa,EAAE;QACxB,IAAA,CAAA,OAAO,GAAG,CAAC;AAoLpB,IAAA;AAjLC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;QAC7D,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC/D,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC7C;;QAEA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE;IAC7D;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE;QAC1C,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE;IAClB;;AAGA,IAAA,IAAY,QAAQ,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM;IACpC;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YACvE,IAAI,CAAC,SAAS,EAAE;YAChB;QACF;QACA,IAAI,IAAI,CAAC,KAAK;YAAE;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;IAC3D;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACxB;IACF;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAOA,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;;AAGA,IAAA,IAAY,IAAI,GAAA;QACd,MAAM,GAAG,GAAW,EAAE;AACtB,QAAA,CAAC,SAAS,IAAI,CAAC,CAAY,EAAE,EAAU,EAAE,MAAkB,EAAA;YACzD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;YAC3B,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAChB,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;QACjD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,MAAM;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM;AACtE,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,SAAS;AAClE,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,IAAY,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACxC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AACxD,YAAA,OAAO,CAAA,QAAA,EAAWA,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,MAAM,CAAA,MAAA,EAAS,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;QAC5H;QACA,OAAO,IAAI,CAAC,OAAO;IACrB;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;IAChD;AAEA,IAAA,KAAK,CAAC,CAAS,EAAA;QACb,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,CAAS,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE;AAEA,IAAA,QAAQ,CAAC,CAAY,EAAA;AACnB,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;AAEA,IAAA,GAAG,CAAC,MAAuB,EAAA;AACzB,QAAA,OAAOI,KAAG,CAAC,MAAM,CAAC;IACpB;AAEA,IAAA,QAAQ,CAAC,CAAY,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACvB,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG;QAC/B,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D;IAEA,GAAG,CAAC,CAAY,EAAE,EAAU,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC;AACvB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;AACjC,QAAA,MAAM,IAAI,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,OAAO;QACzE,OAAO,CAAA,QAAA,EAAW,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA,CAAE;IAC5E;;AAGA,IAAA,IAAY,IAAI,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;IACzC;AAEA,IAAA,MAAM,CAAC,CAAY,EAAA;QACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC;IAEA,MAAM,CAAC,CAAY,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAA;AACzC,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAChF,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACvD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,UAAU,CAAC,CAAY,EAAE,CAAQ,EAAA;AAC/B,QAAA,IAAK,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,aAAa,CAAC;YAAE;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChB;IAEA,MAAM,CAAC,CAAY,EAAE,CAAQ,EAAA;QAC3B,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE;IAClB;;AAGA,IAAA,IAAY,OAAO,GAAA;AACjB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI;AACrB,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;AACtB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE;AAChE,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAAE,oBAAA,OAAO,KAAK;YACnC;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,EAAE,CAAC,CAAa,EAAA;AACtB,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;AACjB,QAAA,MAAM,GAAG,GAAG,CAAA,UAAA,EAAa,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI;AAC7C,QAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAc,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC7F;AAEA,IAAA,KAAK,CAAC,CAAgB,EAAA;AACpB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC;QACnD,IAAI,CAAC,GAAG,CAAC;YAAE;QACX,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7C,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE;AAC/B,YAAA,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;AACvC,iBAAA,IAAI,IAAI;gBAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC;QACxC;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;AAChC,YAAA,IAAI,IAAI;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;;AAC1B,gBAAA,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;QACtB;aAAO,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC/C;QACL,CAAC,CAAC,cAAc,EAAE;IACpB;+GAzNW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7EnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,s9HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3ES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA8EzC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlF9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAC3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,s9HAAA,CAAA,EAAA;8BAK0B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGE,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGhB,MAAM,EAAA,CAAA;sBAAd;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,eAAe,EAAA,CAAA;sBAAxB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;;ACzLnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAsCA,MAAMC,SAAO,GAAG,CAAC,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,CAAC;AACjF,MAAML,OAAK,GAAG,CAAC,CAAS,KACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MA+L3D,wBAAwB,CAAA;AAqDnC,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;;QAjD3B,IAAA,CAAA,QAAQ,GAAoB,EAAE;QAG9B,IAAA,CAAA,cAAc,GAAG,CAAC;;QAElB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAEjB,IAAA,CAAA,cAAc,GAAG,IAAI;;QAErB,IAAA,CAAA,OAAO,GAAaK,SAAO;;QAE3B,IAAA,CAAA,MAAM,GAAG,EAAE;QAKX,IAAA,CAAA,cAAc,GAAiB,MAAM;;QAErC,IAAA,CAAA,cAAc,GAAG,IAAI;;QAErB,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,SAAS,GAAG,EAAE;AAEb,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;;AAE1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;;AAErC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA8C;;AAE3E,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAqC;AAC9D,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAgB;;QAGlD,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,OAAO,GAAiB,MAAM;QAC9B,IAAA,CAAA,SAAS,GAAoC,EAAE;QAC/C,IAAA,CAAA,KAAK,GAA2B,EAAE;QAC1C,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,GAAG,GAAG,CAAC;QAEP,IAAA,CAAA,KAAK,GAAW,EAAE;AAOhB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;IACpC;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;IAC9B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;;AAGA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AACnE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IAC9C;AAEA,IAAA,IAAY,CAAC,GAAA;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC/B;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,KAAK,SAAS,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI;IAC7E;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;IACjE;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;IAC3B;;AAGA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACvD;;AAGA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK;cACjB,CAAC;cACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC;IACzE;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB;AAEA,IAAA,OAAO,CAAC,CAAS,EAAA;AACf,QAAA,OAAOL,OAAK,CAAC,CAAC,CAAC;IACjB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AAC7C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAChC;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;;AAE9C,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACtB;IACF;;IAGQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,EAAE;AACrC,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM;QAChD,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO;aACJ,KAAK,CAAC,GAAG;aACT,MAAM,CAAC,OAAO;AACd,aAAA,GAAG,CAAC,CAAC,CAAC,KAAI;YACT,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5B,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM;YAChB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,EAAE;AAC9D,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;AAEQ,IAAA,OAAO,CAAC,KAAmB,EAAA;AACjC,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpD,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,EAAE;AAC1C,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;IAEQ,UAAU,GAAA;QAChB,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,MAAK;YAC5B,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,cAAc;YACrC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjC,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YACtB;QACF,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACxB;IACF;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC9D;AAEA,IAAA,IAAI,CAAC,CAAgB,EAAA;AACnB,QAAA,MAAM,IAAI,GAAoB,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;AAC1D,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE;QACvD,IAAI,IAAI,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE;AAClE,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACxD;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE;AAC5C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACjD;IAEA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,SAAS;YAAE;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAC/E,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,IAAI,GAAA;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;QAC/B,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE;AAC3D,YAAA,KAAK,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QACjE;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACpF;;AAGA,IAAA,YAAY,CAAC,CAAgB,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAI,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAA6B,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7E,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,aAA4B;AAC1C,QAAA,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACnD,CAAC,CAAC,KAAK,CAAE,CAAuB,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAC5C;QACxB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAkC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC;YAAE;QACX,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;IAC7C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD;+GA1OW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxLzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,20LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtLS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyLd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBA7LpC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqLT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,20LAAA,CAAA,EAAA;sFAKQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,MAAM,EAAA,CAAA;sBAAf;gBACS,aAAa,EAAA,CAAA;sBAAtB;;;ACxRH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwCA,MAAM,IAAI,GAA2B;AACnC,IAAA,EAAE,EAAE,eAAe;AACnB,IAAA,GAAG,EAAE,UAAU;AACf,IAAA,IAAI,EAAE,kBAAkB;AACxB,IAAA,IAAI,EAAE,WAAW;CAClB;AACD,MAAM,IAAI,GAAG,CAAC,CAAS,KACrB,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;AACnE,MAAM,GAAG,GAAG,CAAC,IAAY,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;AAC7D,MAAM,SAAS,GAAG,CAAC,OAAe,KAChC;KACG,KAAK,CAAC,SAAS;KACf,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACnB,KAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAe/D,MAAM,KAAK,GAAa;AACtB,IAAA,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAChL,IAAA,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAChL,IAAA,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CACjL;AACD;AACA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;MAkOxD,qBAAqB,CAAA;AAzNlC,IAAA,WAAA,GAAA;;QA2NW,IAAA,CAAA,OAAO,GAAoB,SAAS;;QAEpC,IAAA,CAAA,QAAQ,GAAsB,EAAE;;QAMhC,IAAA,CAAA,KAAK,GAAkB,OAAO;;QAE9B,IAAA,CAAA,MAAM,GAAG,UAAU;;QAInB,IAAA,CAAA,IAAI,GAAG,QAAQ;;QAEf,IAAA,CAAA,IAAI,GAAe,WAAW;;QAI9B,IAAA,CAAA,GAAG,GAAG,IAAI;QAGV,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;;AAE1C,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU;;AAEnC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAU;;AAEnC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AAQhC,QAAA,IAAA,CAAA,IAAI,GAA4B,MAAM,CAAC,UAAU,CAAC;AAClD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,UAAU,GAAG,KAAK;QAC1B,IAAA,CAAA,OAAO,GAAkB,IAAI;QAE7B,IAAA,CAAA,IAAI,GAAG,EAAE;QAET,IAAA,CAAA,OAAO,GAAG,KAAK;QACP,IAAA,CAAA,UAAU,GAAG,KAAK;QAC1B,IAAA,CAAA,OAAO,GAAmB,IAAI;QACtB,IAAA,CAAA,QAAQ,GAAuB,IAAI;;QAG3C,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,OAAO,GAAG,CAAC;;QAIX,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,IAAI,GAAkB,IAAI;QAC1B,IAAA,CAAA,UAAU,GAAG,EAAE;QACP,IAAA,CAAA,WAAW,GAAoC,EAAE;QACjD,IAAA,CAAA,UAAU,GAAgB,EAAE;AAE5B,QAAA,IAAA,CAAA,YAAY,GAAG,CAAC,CAAe,KAAI;AACzC,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;YAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAChG,IAAI,CAAC,SAAS,EAAE;YAClB;AACA,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AACnG,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YACjB;AACF,QAAA,CAAC;AAyQF,IAAA;AAvQC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS;AAC5C,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO;QAC9D;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;AACtF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc;QACrC;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;AAChF,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACvD;AACA,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACpB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS;AACxC,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE;AAC/B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA,YAAA,EAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;YACtD;AACA,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO;QAC3B;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE;IACjE;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS;QAC1C,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;QAC3D,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC;AAC9D,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE;IACnB;;IAGA,IAAI,CAAC,GAAA,EAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,IAAI,GAAA,EAAa,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,IAAI,CAAC,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,GAAA,EAAsB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACjG,IAAI,OAAO,GAAA,EAAc,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAA,EAAa,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpF,IAAI,QAAQ,KAAe,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5E,IAAI,UAAU,GAAA,EAAkB,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAC9G,IAAA,IAAI,OAAO,GAAA,EAAa,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,IAAA,IAAI,aAAa,GAAA,EAAe,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3D,KAAK,CAAC,CAAU,EAAA,EAAY,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,SAAS,CAAC,IAAY,EAAA,EAAY,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,OAAO,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,CAAA,sCAAA,EAAyC,KAAK,EAAE;IACjF;IACA,UAAU,CAAC,CAAS,EAAA,EAAY,OAAO,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3E,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnE;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,GAAG,GAAY,EAAE;AACvB,QAAA,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACjF,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;AAC3B,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE;AACnB,YAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;AACvE,iBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACvG,iBAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;;AACtH,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;;AAGQ,IAAA,GAAG,CAAC,GAAW,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;IACzD;AACQ,IAAA,KAAK,CAAC,GAAW,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC;IACjE;;AAGQ,IAAA,IAAI,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;YAAE;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAA,CAAE,CAAC;IAC3D;AACA,IAAA,IAAI,CAAC,GAAW,EAAA;AACd,QAAA,IAAI;AAAE,YAAA,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;QAAE;AAAE,QAAA,MAAM,gDAAgD;AAC9H,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA,GAAA,EAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,kBAAA,CAAoB,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B;AACA,IAAA,QAAQ,CAAC,GAAW,EAAA;QAClB,MAAM,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAA,CAAE;AAChF,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AACrC,QAAA,CAAC,CAAC,IAAI,GAAG,GAAG;AAAE,QAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AAAE,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AAChD,QAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC,KAAK,EAAE;QAAE,CAAC,CAAC,MAAM,EAAE;AAC9C,QAAA,UAAU,CAAC,MAAM,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,CAAA,CAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9B;AACA,IAAA,IAAI,CAAC,MAAuB,EAAE,MAA0B,EAAE,GAAuB,EAAA;QAC/E,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE;QAAQ;AAC9D,QAAA,IAAI,CAAC,QAAQ,GAAG,MAAM;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;AAC5C,QAAA,IAAI,CAAC,GAAG,CAAC,CAAA,OAAA,EAAU,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA,GAAA,EAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,CAAE,CAAC;;AAElD,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E;IACA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/C;AACA,IAAA,UAAU,CAAC,CAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;YAAE,IAAI,CAAC,WAAW,EAAE;YAAE;QAAQ;QAC/F,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;AAClC,QAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,gBAAgB,CAAc,uBAAuB,CAAC,CAAC;AAC5F,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,aAAa,KAAK,KAAK,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,MAAM,EAAE,KAAK,EAAE;QAAE;aAC7I,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,MAAM,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,KAAK,EAAE,KAAK,EAAE;QAAE;IACnG;;AAGA,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;IAC3D;AACQ,IAAA,QAAQ,CAAC,OAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACpB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,EAAE,aAAa,CAAc,uBAAuB,CAAC,IAAI,IAAI,EAAE,aAAa,CAAc,QAAQ,CAAC;YACjH,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACnC,QAAA,CAAC,CAAC;IACJ;IACA,SAAS,GAAA,EAAW,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACnC,IAAA,SAAS,CAAC,OAAoB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAA4B;AACtF,QAAA,IAAI,CAAC,IAAI;YAAE;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE;AAC7E,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACnD;AACA,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpD;AACA,IAAA,WAAW,CAAC,CAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YAChD,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAA4B,CAAC;QAC/C;IACF;AACA,IAAA,QAAQ,CAAC,CAAgB,EAAA;AACvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACvC,QAAA,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,gBAAgB,CAAc,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;AAC3D,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;QAAE;AAC9E,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE;QAAE;AAC7F,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE;AAC5D,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;QAAE;AACvE,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;YAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAAE;AACzI,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;YAAE,IAAI,CAAC,SAAS,EAAE;QAAE;IAChD;;IAGA,OAAO,CAAC,EAAiB,EAAA,EAAU,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACnD,IAAA,UAAU,CAAC,EAAU,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;YAC5B,OAAO;AACL,gBAAA,SAAS,EAAE,CAAA,eAAA,EAAkB,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,WAAA,EAAc,CAAC,GAAG,CAAC,CAAA,IAAA,CAAM;AACxH,gBAAA,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;aACzC;QACH;AACA,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC;AACpD,QAAA,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;IAC/C;AACA,IAAA,GAAG,CAAC,EAAW,EAAE,KAAK,GAAG,KAAK,EAAA;QAC5B,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAClC,QAAA,IAAI,EAAE,IAAI,KAAK,EAAE;AACf,YAAA,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAc,CAAA,SAAA,EAAY,IAAI,CAAC,CAAC,CAAA,EAAA,CAAI,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/H;IACF;IACA,UAAU,CAAC,EAAU,EAAE,EAAe,EAAA;QACpC,IAAI,IAAI,CAAC,OAAO;YAAE;AAClB,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAAE;;AACzG,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAc,cAAc,CAAC,EAAE,EAAE,CAAC;IAChG;AACA,IAAA,SAAS,CAAC,MAAmB,EAAA;QAC3B,IAAI,IAAI,CAAC,OAAO;YAAE;QAClB,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAc,CAAA,SAAA,EAAY,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAChH;AACA,IAAA,QAAQ,CAAC,CAAgB,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,gBAAgB,CAAc,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;QAC/D,IAAI,EAAE,GAAkB,IAAI;QAC5B,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;AAAE,YAAA,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;aAC/E,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;YAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACzE,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,EAAE,GAAG,CAAC;AAC5B,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;AAAE,YAAA,EAAE,GAAG,IAAI,CAAC,IAAI;AACnC,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAAE;QAAQ;AACvJ,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE;QAAQ;AACrD,QAAA,IAAI,EAAE,IAAI,IAAI,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE;QAAE;IAC7D;;IAGQ,YAAY,GAAA;QAClB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;QAC/C,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACnC;IACQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;AACtC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;IACQ,QAAQ,GAAA;AACd,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAc,YAAY,IAAI,CAAC,IAAI,CAAA,EAAA,CAAI,CAAC;AACzF,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,IAAI,KAAK,GAAG,IAAI;QAChB,MAAM,MAAM,GAAG,OAAO,KAAK,GAAG,KAAK,CAAC;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,CAAC,EAAU,KAAK,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACpJ,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM;AAC7E,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;QAC/C,KAAK,CAAC,YAAW;AACf,YAAA,IAAI,MAAM;gBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AACjL,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,YAAA,MAAM,KAAK,CAAC,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;;AAC3B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAAE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,oBAAA,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAE;AAC7F,YAAA,MAAM,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAc,aAAa,CAAC;YACxD,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAc,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC;AAC7F,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AACpB,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAE,EAAE,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC;gBAC9D,IAAI,CAAC,MAAM,EAAE;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAAE,oBAAA,IAAI,GAAG;wBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAAE,oBAAA,MAAM,KAAK,CAAC,GAAG,CAAC;oBAAE;gBAAU;AACzN,gBAAA,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG;AACpJ,gBAAA,IAAI,GAAG;AAAE,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACpI,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AACnK,gBAAA,IAAI,GAAG;oBAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,CAAA,UAAA,EAAa,EAAE,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,CAAC,CAAA,GAAA,EAAM,CAAC,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAC3O,gBAAA,MAAM,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YACtB;AACA,YAAA,GAAG,EAAE,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACjD,CAAC,GAAG,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;IACtB;+GAtVW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApNtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiNT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mmoBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlNS,eAAe,8EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqNhC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAzNjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiNT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mmoBAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,aAAa,EAAA,CAAA;sBAAtB;gBAES,MAAM,EAAA,CAAA;sBAAf;gBAES,MAAM,EAAA,CAAA;sBAAf;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAE4B,MAAM,EAAA,CAAA;sBAAlC,SAAS;uBAAC,QAAQ;gBACQ,IAAI,EAAA,CAAA;sBAA9B,SAAS;uBAAC,MAAM;gBACY,MAAM,EAAA,CAAA;sBAAlC,SAAS;uBAAC,QAAQ;gBACO,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK;gBACe,QAAQ,EAAA,CAAA;sBAAtC,SAAS;uBAAC,UAAU;;;AChWvB;AACA;AACA;AACA;AACA;AACA;AACA;AAqCA;AACA,SAAS,IAAI,CAAC,IAAY,EAAA;AACxB,IAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE;IACrD,IAAI,CAAC,KAAK,KAAK;AAAE,QAAA,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,iBAAiB,CAAC;AAClE,IAAA,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC;AAChH,IAAA,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,iBAAiB,CAAC;AACzE,IAAA,OAAO,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,EAAE,cAAc,EAAE,iBAAiB,CAAC;AAClF;AACA,MAAM,KAAK,GAAG,CAAC,CAAS,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAChH,MAAM,IAAI,GAAG,IAAI;MAoJJ,uBAAuB,CAAA;AA3HpC,IAAA,WAAA,GAAA;;QA6HW,IAAA,CAAA,KAAK,GAAiB,EAAE;;QAExB,IAAA,CAAA,KAAK,GAAG,iBAAiB;;QAEzB,IAAA,CAAA,MAAM,GAA4B,IAAI;;QAMtC,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAExC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAU;AAI7B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE7C,IAAA,CAAA,IAAI,GAAG,IAAI;QACpB,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,IAAI,GAAgB,IAAI;;AAGhB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAkB;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;AACxB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAU;AAC3B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,GAAG,EAAyC;QAGvE,IAAA,CAAA,OAAO,GAAG,KAAK;AACf,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,KAAK;AAoGnB,IAAA;AAlGC,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;IAC9B;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,IAAI,CAAC,GAAG,CAAC;QACT,MAAM,GAAG,GAAU,EAAE;AACrB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACtB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YACpC;AACA,YAAA,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG;AACzD,YAAA,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC;AACZ,kBAAE,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA,CAAA;kBAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC;AACrB,sBAAE,CAAA,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,MAAM,CAAA;AACtC,sBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI;AACJ,gBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;gBACpC,KAAK;gBACL,EAAE;gBACF,EAAE;gBACF,CAAC;gBACD,EAAE;gBACF,IAAI;AACJ,gBAAA,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACnC,aAAA,CAAC;QACJ;AACA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,OAAO;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM;QAC7E,OAAO,IAAI,GAAG,sBAAsB,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,MAAM,GAAG,EAAE;IACpF;IAEA,eAAe,GAAA;;AAEb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;QACrC,MAAM,GAAG,GAAG,MAAK;AACf,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW;AACxB,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY;AACzB,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAAE;YACd,MAAM,CAAC,GAAG,IAAI;AACd,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7G,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,EAAE;AACxD,YAAA,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,GAAG,EAAE;AAC1E,QAAA,CAAC;AACD,QAAA,GAAG,EAAE;QACL,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;AACjC,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACrB;AAEA,IAAA,IAAI,CAAC,CAAY,EAAA;QACf,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AAEA,IAAA,MAAM,CAAC,CAAY,EAAA;QACjB,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,KAAK;AAClC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE;AAEA,IAAA,QAAQ,CAAC,CAAQ,EAAA;AACf,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,MAA0B;AAC1C,QAAA,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM;AAAE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,KAAK,CAAC,KAAK,GAAG,EAAE;IAClB;AAEA,IAAA,MAAM,CAAC,GAAQ,EAAA;QACb,IAAI,GAAG,CAAC,OAAO;YAAE;AACjB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAA,MAAM,CAAC,GAAG,UAAU,CAClB,MAAK;AACH,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,QAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;QACD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;IAC3B;+GAvIW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtHxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o7MAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApHS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuHd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA3HnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,o7MAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAEoC,OAAO,EAAA,CAAA;sBAA3C,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;;;AC5NrC;AACA;AACA;AACA;AACA;MA2Ca,cAAc,CAAA;AAjC3B,IAAA,WAAA,GAAA;;QAmCW,IAAA,CAAA,IAAI,GAAc,SAAS;;QAE3B,IAAA,CAAA,IAAI,GAAgB,IAAI;;QAExB,IAAA,CAAA,GAAG,GAAG,KAAK;;QAEX,IAAA,CAAA,IAAI,GAAG,KAAK;;QAIZ,IAAA,CAAA,SAAS,GAAG,KAAK;;AAKhB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAC5C,IAAA;+GAlBY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,GAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5Bf;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0yFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1BS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Bd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjC1B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0yFAAA,CAAA,EAAA;8BAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,MAAM,EAAA,CAAA;sBAAf;;;AChEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwDA;AACA,MAAMO,SAAO,GAAG;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;CACf;MAqDY,iBAAiB,CAAA;;IAW5B,IAAa,KAAK,CAAC,KAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE;AAC7C,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAClB;QACF;IACF;AAsBA,IAAA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EACtB,IAA6B,EAAA;QAF7B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;;QA3CI,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,MAAM,GAAqB,EAAE;;QAE7B,IAAA,CAAA,MAAM,GAAoB,EAAE;AACvD;AAC+E;QACtE,IAAA,CAAA,OAAO,GAAG,KAAK;;AAiBf,QAAA,IAAA,CAAA,MAAM,GAA0B,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;QAC5E,IAAA,CAAA,SAAS,GAAG,EAAE;AAEb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAElD,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,IAAI,GAAc,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QAEL,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAM1B;AAEH,IAAA,KAAK,CAAC,KAAa,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,IAAIA,SAAO,CAAC,KAAK,GAAGA,SAAO,CAAC,MAAM,CAAC;IACrE;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QAC3D;QACA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAEnE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM;AACnD,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,EAAE;AACT,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC5C;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;AAEQ,IAAA,GAAG,CAAC,GAAiB,EAAA;QAC3B,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;IACxD;AAEQ,IAAA,KAAK,CAAC,GAAW,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;IAC/C;AAEQ,IAAA,IAAI,CAAC,GAAW,EAAA;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACzB,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QAEjE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;;YAErB,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,EAAE;YAC7B,IAAI,GAAG,EAAE;gBACP,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACnE,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;AACjB,qBAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE;qBAC1G,IAAI,CAAC,IAAI,CAAC;YACf;iBAAO;AACL,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;YACpB;;AAGA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC;AACnB,kBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;oBACvB,MAAM,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,oBAAA,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AACxD,gBAAA,CAAC;AACH,kBAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7E,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAGxF,YAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACxC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACZ,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGQ,IAAA,IAAI,CAAC,MAAc,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,IAAI,GAAA;AACV,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAc,YAAY,CAAC;;AAE3E,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,IAAI,GAAG,IAAI,EAAE,CAAC;IACpD;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;QACvF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAC1D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAlLW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAP,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/ClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,44EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnD7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,44EAAA,CAAA,EAAA;+IAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGhB,OAAO,EAAA,CAAA;sBAAf;gBAEY,KAAK,EAAA,CAAA;sBAAjB;gBAWQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;;;AC3JH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAyCA,MAAM,GAAG,GAAqC;AAC5C,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS;CAC5E;AACD,MAAMC,OAAK,GAAG,CAAC,CAAS,KAAK,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAEvF;MA2Ga,uBAAuB,CAAA;AA1GpC,IAAA,WAAA,GAAA;;QA4GW,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,GAAG,GAAG,EAAE;;QAER,IAAA,CAAA,MAAM,GAAG,KAAK;QAGd,IAAA,CAAA,KAAK,GAAkB,EAAE;QAIzB,IAAA,CAAA,aAAa,GAAG,KAAK;QAGrB,IAAA,CAAA,gBAAgB,GAAG,KAAK;AAQvB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAW;QAK/C,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,OAAO,GAAG,CAAC;AAoFpB,IAAA;AAjFC,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;IACxC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;IACzC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;IAC7E;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;IACtD;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAOA,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;QACjD,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,MAAM;QAC5B,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,kBAAkB;QACxC,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,QAAQ;QAClC,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,WAAW;AACpC,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,GAAG,CAAC,KAAuB,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,KAAK,CAAC;IACnB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM;QAClF,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;QACzF,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;QAChG,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB;QACvG,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACtD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,WAAW,EAAE;IACpB;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI;AACvB,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACvD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;;AAE/B,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACvD,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B;QACA,IAAI,CAAC,WAAW,EAAE;IACpB;;IAGQ,WAAW,GAAA;QACjB,MAAM,OAAO,GACX,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI;AAC3F,QAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAChC,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;gBAClC,IAAI,CAAC,OAAO,EAAE;YAChB,CAAC,EAAE,IAAI,CAAC;QACV;AAAO,aAAA,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;AACvC,YAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;IACF;IAEA,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;IACjC;+GAnHW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4zRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnGS,eAAe,8EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAsGhC,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA1GnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4zRAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,eAAe,EAAA,CAAA;sBAAxB;gBAGqB,IAAI,EAAA,CAAA;sBAAzB,YAAY;uBAAC,MAAM;;;AC5LtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAiBA;AACA,MAAM,YAAY,GAAG,CAAC,CAAiB,KACrC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,GAAG,IAAI;AAElD;MAoDa,eAAe,CAAA;AA8C1B,IAAA,WAAA,CAA6B,MAA4B,EAAA;QAA5B,IAAA,CAAA,MAAM,GAAN,MAAM;QA3C1B,IAAA,CAAA,IAAI,GAAe,IAAI;;QAgBvB,IAAA,CAAA,SAAS,GAAqB,MAAM;;QAIpC,IAAA,CAAA,OAAO,GAAG,IAAI;;QAEd,IAAA,CAAA,QAAQ,GAAG,IAAI;;AAWd,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAc;;QAG1C,IAAA,CAAA,IAAI,GAA6B,MAAM;QACvC,IAAA,CAAA,KAAK,GAAG,IAAI;;QAIpB,IAAA,CAAA,GAAG,GAAG,KAAK;IAEiD;AAE5D,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;IAC1C;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;IAC5D;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO;IAClD;AACA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;IACnC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;QACpD,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;QACpD,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,OAAO,CAAC,CAAa,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAAE;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACpB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,IAAI;QAC1B,IAAI,CAAC,CAAC,IAAI,OAAQ,CAAsB,CAAC,IAAI,KAAK,UAAU;YAAE;AAC9D,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AACjB,QAAA,CAAsB,CAAC,IAAI,CAC1B,MAAK;YACH,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC;QAC1D,CAAC,EACD,MAAK;YACH,IAAI,IAAI,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AACpC,QAAA,CAAC,CACF;IACH;;IAGQ,IAAI,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;YAClB;QACF;AACA,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CACzB,MAAK;AACH,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAClB,QAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;IACH;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;+GAzGW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9ChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,soBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5CS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA+Cd,eAAe,EAAA,UAAA,EAAA,CAAA;kBAnD3B,SAAS;+BACE,WAAW,EAAA,UAAA,EACT,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,soBAAA,CAAA,EAAA;sFAKQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAMQ,OAAO,EAAA,CAAA;sBAAf;gBAGS,OAAO,EAAA,CAAA;sBAAhB;;;ACtHH;AACA;AACA;AACA;AACA;AACA;MA4Ca,aAAa,CAAA;AArC1B,IAAA,WAAA,GAAA;;QA2CW,IAAA,CAAA,WAAW,GAAgC,KAAK;;QAEhD,IAAA,CAAA,GAAG,GAAY,IAAI;;QAEnB,IAAA,CAAA,WAAW,GAAG,KAAK;;AAGlB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAS7C,IAAA;AAPC,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE;AACvB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YACtC,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACrB;IACF;+GArBW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,GAAA,EAAA,KAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2rDAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,aAAa,EAAA,UAAA,EAAA,CAAA;kBArCzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2rDAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,OAAO,EAAA,CAAA;sBAAhB;;;AC9DH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkEA,MAAMQ,OAAK,GAAG,CAAC,CAAc,EAAE,CAAO,EAAE,CAAS,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;AAC/E,MAAM,GAAG,GAAG,CAAC,IAAY,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE;MA0H5C,qBAAqB,CAAA;AAxHlC,IAAA,WAAA,GAAA;;QA0HW,IAAA,CAAA,KAAK,GAAkB,EAAE;QAGzB,IAAA,CAAA,WAAW,GAAG,CAAC;QAGf,IAAA,CAAA,gBAAgB,GAAiC,EAAE;;AAKlD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;;AAEvC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAgC;;AAElE,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAe;AAI1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QACrC,IAAA,CAAA,KAAK,GAAGA,OAAK;QACb,IAAA,CAAA,GAAG,GAAG,GAAG;;QAGV,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,QAAQ,GAAiC,EAAE;;QAEnD,IAAA,CAAA,KAAK,GAA+B,EAAE;QAEtC,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,OAAO,GAAG,CAAC;AAwHZ,IAAA;AAnHC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AACrD,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW;QAClC;QACA,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE;YAC/D,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAC9C;QACA,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE;IAC3C;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAChB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACpB,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;AAAE,gBAAA,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;AAAE,gBAAA,OAAO,EAAE;QACjC,CAAC,CAAC,CACH,CACF;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB;AAEA,IAAA,IAAY,GAAG,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;IACnC;AAEA,IAAA,IAAY,GAAG,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ;IACxC;;AAGA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/D;;IAGA,OAAO,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACvD;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AAC3B,QAAA,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,UAAU;IACrD;IAEA,KAAK,CAAC,CAAS,EAAE,CAAS,EAAA;QACxB,OAAO,CAAA,EAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE;IAC/B;AAEA,IAAA,WAAW,CAAC,CAAc,EAAE,CAAO,EAAE,CAAS,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,GAAG,CAACA,OAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;IACvC;AAEA,IAAA,SAAS,CAAC,CAAc,EAAA;AACtB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAe,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAACA,OAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,IAAI,GAAG,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,MAAM;QAC9B,IAAI,GAAG,CAAC,QAAQ,CAAC;AAAE,YAAA,OAAO,QAAQ;AAClC,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,CAACA,OAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE;IACvE;;AAGA,IAAA,IAAI,CAAC,CAAS,EAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;AAEQ,IAAA,MAAM,CAAC,IAAkC,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtD,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACjC;IAEA,MAAM,CAAC,GAAW,EAAE,CAAe,EAAA;QACjC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AACzB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,GAAG,CAAC;;AAC1B,YAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAChB;AAEA,IAAA,IAAI,CAAC,CAAe,EAAA;AAClB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;QACxB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;QACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACvB,YAAA,CAAC,CAACA,OAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACd,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;QAClF;IACF;IAEA,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE;QACpB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;;QAE9B,UAAU,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1F;AAEA,IAAA,IAAI,CAAC,EAAU,EAAE,CAAO,EAAE,CAAW,EAAA;AACnC,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,kBAAkB;AACvE,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IACrE;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;IACvB;IAEA,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;IAC5B;+GAvJW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,eAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnHtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yiNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjHS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoHd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAxHjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,yiNAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAE4B,aAAa,EAAA,CAAA;sBAAzC,YAAY;uBAAC,KAAK;;;AC3NrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmDA;MA4Da,0BAA0B,CAAA;AA3DvC,IAAA,WAAA,GAAA;;QA6DW,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,OAAO,GAA8B,EAAE;;QAEvC,IAAA,CAAA,SAAS,GAAG,aAAa;;AAexB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAsD;;AAEnF,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;;QAMxD,IAAA,CAAA,UAAU,GAAa,EAAE;;QAEzB,IAAA,CAAA,EAAE,GAAiB,IAAI;;QAEf,IAAA,CAAA,GAAG,GAAkB,IAAI;QACzB,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,KAAK,GAAuB,IAAI;;AAEhC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAA6B;;;QAK5C,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,KAAK,GAAG,KAAK;AAEJ,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,CAAe,KAAI;AAC5C,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAiB;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5F,QAAA,CAAC;AACgB,QAAA,IAAA,CAAA,KAAK,GAAG,CAAC,CAAgB,KAAI;AAC5C,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACpC,YAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;gBAC/G,CAAC,CAAC,cAAc,EAAE;gBAClB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAC3F,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,EAAE;AACN,oBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;oBAChB,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBACnC;YACF;AACF,QAAA,CAAC;QACgB,IAAA,CAAA,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AA2KlD,IAAA;;IA9NC,IACI,IAAI,CAAC,CAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;QACd,IAAI,CAAC,SAAS,EAAE;IAClB;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;;AA+CA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;IACpC;;AAGA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACxE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE;IACzD;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;AAEjB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAoB,WAAW,CAAC;AAC1F,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACpB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClE,QAAA,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;QACrD,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;AAChD,QAAA,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;QACzC,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;QACxD,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;AACnD,QAAA,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;IAC9C;IAEQ,KAAK,GAAA;AACX,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KACjD,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAU;AACxC,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AACrB,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACf,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC;AACnB,sBAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAClC,sBAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5C;AACA,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;QAC1C,CAAC,CAAC,CACH;IACH;AAEA,IAAA,KAAK,CAAC,IAAU,EAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,QAAA,OAAO,CAAC,GAAG,CAAA,OAAA,EAAU,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE;IACpD;IAEQ,IAAI,CAAC,CAAS,EAAE,EAAe,EAAA;AACrC,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;YAAE;AACpB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACpC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACrC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE;AACd,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,qBAAqB,EAAE;AACpC,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACrC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEvB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM;AAC3B,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;;QAGvE,IAAI,OAAO,EAAE;AACX,YAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;YAC7B,KAAK,CAAC,CAAC,WAAW;AAClB,YAAA,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;QAC5B;;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;YACtB,qBAAqB,CAAC,MACpB,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAc,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC5F;QACH;IACF;IAEQ,IAAI,CAAC,GAAG,GAAG,KAAK,EAAA;AACtB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,EAAE,GAAG,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACjD,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YACf,IAAI,IAAI,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;AAC9C,QAAA,CAAC;AACD,QAAA,IAAI,GAAG;AAAE,YAAA,EAAE,EAAE;;YACR,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC;IACvC;IAEQ,SAAS,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE;AAC7C,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACtC;QACF;AACA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QACrC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9D;;IAIA,KAAK,CAAC,CAAS,EAAE,CAAe,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;YAAE;AAC/B,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B;AACzC,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IAC7E;AAEA,IAAA,KAAK,CAAC,CAAe,EAAA;AACnB,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;YAAE;AAC/B,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,OAAO,CAAC,CAAS,EAAE,CAAa,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;YACjB;QACF;QACA,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAA4B,CAAC;IAC9C;AAEA,IAAA,MAAM,CAAC,CAAa,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE;IACjF;;;IAIA,OAAO,CAAC,CAAS,EAAE,CAAa,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE;AAClB,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,aAA4B,CAAC;QAC9C;aAAO,IAAI,GAAG,EAAE;AACd,YAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAAc,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC7F;IACF;;IAIA,SAAS,GAAA;AACP,QAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;AAEA,IAAA,SAAS,CAAC,CAAe,EAAA;AACvB,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;YAAE,IAAI,CAAC,IAAI,EAAE;IAC5C;AAEA,IAAA,YAAY,CAAC,CAAa,EAAA;AACxB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,aAA4B;QACxC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,EAAE;IACpG;IAEA,MAAM,CAAC,CAA0B,EAAE,CAAa,EAAA;QAC9C,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,CAAC,CAAC,cAAc,EAAE;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE;+GAvOW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtD3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4jEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApDS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuDd,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBA3DtC,SAAS;+BACE,wBAAwB,EAAA,UAAA,EACtB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4jEAAA,CAAA,EAAA;8BAKQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAKG,IAAI,EAAA,CAAA;sBADP;gBAUS,UAAU,EAAA,CAAA;sBAAnB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAEiB,MAAM,EAAA,CAAA;sBAAvB,SAAS;uBAAC,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAzB,SAAS;uBAAC,MAAM;;;ACjJnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgDA,MAAM,KAAK,GAA8B;AACvC,IAAA,CAAC,EAAE,MAAM;AACT,IAAA,CAAC,EAAE,MAAM;AACT,IAAA,CAAC,EAAE,MAAM;AACT,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,EAAE,EAAE,OAAO;AACX,IAAA,EAAE,EAAE,OAAO;CACZ;AAED;AACA,SAAS,QAAQ,CAAC,IAAsB,EAAA;IACtC,OAAO,OAAO,IAAI,KAAK;AACrB,UAAE;AACF,UAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAClE;MA2Da,mBAAmB,CAAA;AAzDhC,IAAA,WAAA,GAAA;;QA2DW,IAAA,CAAA,KAAK,GAAe,EAAE;;AASrB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;;QAMxC,IAAA,CAAA,WAAW,GAAkB,IAAI;;AAGhC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;;QAG/C,IAAA,CAAA,KAAK,GAAG,GAAG;;QAGX,IAAA,CAAA,aAAa,GAAG,gDAAgD;;AAG/D,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAU;QAElC,IAAA,CAAA,SAAS,GAAG,EAAE;AAEd,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,KAAK,GAAc,SAAS;;QAG5B,IAAA,CAAA,MAAM,GAAG,KAAK;;QAGN,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,OAAO,GAAkB,IAAI;AAC7B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AAyH1D,IAAA;AAvHC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAC5C,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE;YAC9D;QACF;AACA,QAAA,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AAC9E,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW;QACjC;QACA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;;YAEtC,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;;AAGA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;IAClC;;AAGA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;IAClC;;AAGA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE;;AAGA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC;IAC7D;;AAGA,IAAA,SAAS,CAAC,CAAS,EAAA;QACjB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,CAAC;IACnC;;AAGA,IAAA,MAAM,CAAC,IAAsB,EAAA;AAC3B,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,EAAE;QAC9C;QACA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAChB,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAChF;IACH;;AAGA,IAAA,QAAQ,CAAC,CAAW,EAAA;AAClB,QAAA,OAAO,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa;IACrC;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;AACZ,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI;YAAE;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACpB;AAEA,IAAA,GAAG,CAAC,CAAS,EAAA;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IAC1C;IAEA,GAAG,CAAC,CAAgB,EAAE,CAAS,EAAA;AAC7B,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YACtC,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACb;IACF;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D,QAAA,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;QAC1B,CAAC,EAAE,IAAI,CAAC;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;IACvB;AAEQ,IAAA,OAAO,CAAC,CAAgB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;;IAGQ,SAAS,GAAA;QACf,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACnC,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AACd,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,WAAW,EAAE;IACpB;+GApKW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iuHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlDS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqDd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAzD/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,iuHAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAGS,IAAI,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;;;AClKH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA+CA,MAAM,GAAG,GAAqB;AAC5B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,WAAW,EAAE;AAC5F,IAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,4BAA4B,EAAE,IAAI,EAAE,OAAO,EAAE;AACpG,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,KAAK,EAAE;CAC7F;AACD,MAAM,KAAK,GAAqB;AAC9B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,6BAA6B,EAAE,IAAI,EAAE,KAAK,EAAE;AAClF,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,IAAI,EAAE,MAAM,EAAE;AACrF,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAE,IAAI,EAAE,WAAW,EAAE;CAC9F;AACD,MAAM,WAAW,GAAG,yCAAyC;AAE7D,MAAMP,OAAK,GAAG,CAAC,CAAS,KACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MA0N/C,iBAAiB,CAAA;AAxN9B,IAAA,WAAA,GAAA;QA2NW,IAAA,CAAA,YAAY,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QACzC,IAAA,CAAA,WAAW,GAAG,WAAW;;AAExB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAmB;;QAE3C,IAAA,CAAA,IAAI,GAAG,KAAK;;AAEX,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;QAIhC,IAAA,CAAA,kBAAkB,GAAyB,EAAE;AAC5C,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,YAAY,EAAwB;;QAE7D,IAAA,CAAA,UAAU,GAAqB,GAAG;;AAEjC,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAU;;AAEhC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAU;AAMlC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;;QAE3C,IAAA,CAAA,KAAK,GAAqB,KAAK;AAG9B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;;AAGvC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;;QAEnC,IAAA,CAAA,SAAS,GAAG,KAAK;;AAIhB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;QAE3C,IAAA,CAAA,SAAS,GAAG,EAAE;AAQN,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,UAAU,GAAyB,EAAE;QACrC,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,OAAO,GAAG,EAAE;QAEpB,IAAA,CAAA,GAAG,GAAmB,IAAI;QAC1B,IAAA,CAAA,OAAO,GAAa,EAAE;QACtB,IAAA,CAAA,OAAO,GAAG,CAAC;QAoBH,IAAA,CAAA,MAAM,GAAG,EAAE;QACX,IAAA,CAAA,YAAY,GAAG,KAAK;AAEpB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAa,KAAU;YAC3C,IAAI,CAAC,IAAI,CAAC,GAAG;gBAAE;AACf,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,aAAa;AAC9C,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;YAC1B,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;AAEjE,gBAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAAE,oBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YAC/C;AACF,QAAA,CAAC;QAED,IAAA,CAAA,KAAK,GAAGA,OAAK;AA6Jd,IAAA;;AA5LC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;IAC9B;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS;IACrC;AACA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;IAC5C;AACA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ;IACtC;AACA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;IAClC;AAkBA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QACxE;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QAC/D;QACA,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;AACxF,QAAA,IAAI,OAAO,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YACjE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAChD;QACA,IAAI,OAAO,CAAC,WAAW,CAAC;YAAE,IAAI,CAAC,aAAa,EAAE;QAC9C,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;YAAE,IAAI,CAAC,WAAW,EAAE;QAC3E,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE;IAC3D;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;QAClC,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;AACtE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QAC7D,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;QACnD,IAAI,CAAC,WAAW,EAAE;QAClB,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;AACtD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;IACrD;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC;IACzD;IACA,KAAK,GAAA;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE;;IAGQ,IAAI,GAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,aAAa;AAChC,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACvB,QAAA,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,GAAG,IAAI;IACvD;AAEA,IAAA,OAAO,CAAC,CAAQ,EAAA;AACd,QAAA,MAAM,CAAC,GAAI,CAAC,CAAC,MAA8B,CAAC,KAAK;AACjD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,KAAK,CAAC,CAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACvD,CAAC,CAAC,cAAc,EAAE;YAClB,IAAI,CAAC,MAAM,EAAE;QACf;QACA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;IACpE;;IAGA,OAAO,GAAA;QACL,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;AACtF,QAAA,OAAO,QAAQ,IAAI,CAAC,OAAO;IAC7B;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,IAAI;YAAE;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACnE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACxD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,EAAE;IACb;;AAGA,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAC1B,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC;AACrC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAC5C,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC;AACpD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;AACpD,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AAC1D,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,CAAC,EAAE,KAAK,CAAC;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;;AAGA,IAAA,MAAM,CAAC,IAAa,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;IAC5C;IAEA,MAAM,CAAC,IAAa,EAAE,CAAiB,EAAA;AACrC,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;YACnB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACxB;AAAO,aAAA,IAAI,IAAI,KAAK,KAAK,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK;YACvD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC;aAAO;AACL,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK;YACnD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/B;AACA,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;;IAGQ,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACjD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B;AACA,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS;IACpC;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;QACA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE;AACzD,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAChE;IACF;AAEA,IAAA,YAAY,CAAC,IAAa,EAAA;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;YAC1D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,EAAE;IACb;AAEQ,IAAA,KAAK,CAAC,IAAa,EAAA;QACzB,OAAO,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO;IACrF;AAEQ,IAAA,eAAe,CAAC,CAAO,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC;QAChE,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjC;+GA5PW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,KAAA,EAAA,OAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnNlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgNT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,woPAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjNS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoNd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxN7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgNT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,woPAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,kBAAkB,EAAA,CAAA;sBAA1B;gBACS,iBAAiB,EAAA,CAAA;sBAA1B;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAES,GAAG,EAAA,CAAA;sBAAZ;gBAES,KAAK,EAAA,CAAA;sBAAd;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAGS,OAAO,EAAA,CAAA;sBAAhB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEiB,GAAG,EAAA,CAAA;sBAApB,SAAS;uBAAC,KAAK;gBACC,EAAE,EAAA,CAAA;sBAAlB,SAAS;uBAAC,IAAI;gBACO,OAAO,EAAA,CAAA;sBAA5B,SAAS;uBAAC,SAAS;gBACC,MAAM,EAAA,CAAA;sBAA1B,SAAS;uBAAC,QAAQ;gBACG,OAAO,EAAA,CAAA;sBAA5B,SAAS;uBAAC,SAAS;;;AC/UtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA2BA,MAAM,OAAO,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,CAAC;AACnF,MAAM,CAAC,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;MA+EvC,qBAAqB,CAAA;AA7ElC,IAAA,WAAA,GAAA;QA8EW,IAAA,CAAA,KAAK,GAAkB,EAAE;;QAEzB,IAAA,CAAA,KAAK,GAAG,MAAM;;QAEd,IAAA,CAAA,MAAM,GAAG,IAAI;;QAIb,IAAA,CAAA,WAAW,GAAkB,IAAI;;QAEjC,IAAA,CAAA,SAAS,GAAG,KAAK;;QAEjB,IAAA,CAAA,IAAI,GAAG,wBAAwB;;QAI/B,IAAA,CAAA,WAAW,GAAG,IAAI;;AAGjB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;QAMlD,IAAA,CAAA,GAAG,GAAkB,IAAI;;QAEzB,IAAA,CAAA,IAAI,GAAG,KAAK;QAEJ,IAAA,CAAA,SAAS,GAAG,IAAI;AAqEzB,IAAA;AAnEC,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;IAChC;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACrC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG;IAC5C;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA,IAAA,OAAO,CAAC,CAAS,EAAA;QACf,OAAO,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC;AAEA,IAAA,KAAK,CAAC,CAAc,EAAA;AAClB,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpB;AAEA,IAAA,OAAO,CAAC,CAAU,EAAA;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;IAEA,cAAc,GAAA;QACZ,IAAI,IAAI,CAAC,IAAI;YAAE;AACf,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAChB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;;AAGA,IAAA,OAAO,CAAC,CAAU,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC;IACf;;AAIA,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AACxC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACnC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QAClD,IAAI,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,MAAM;AAAE,gBAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACvE;IACF;+GApGW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxEtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g6IAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyEd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA7EjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,g6IAAA,CAAA,EAAA;8BAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,OAAO,EAAA,CAAA;sBAAhB;gBACS,IAAI,EAAA,CAAA;sBAAb;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACI,MAAM,EAAA,CAAA;sBAA1B,SAAS;uBAAC,QAAQ;gBAkEnB,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC;;;AC5M9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4BA;MA4Ea,uBAAuB,CAAA;AA3EpC,IAAA,WAAA,GAAA;;QA6EW,IAAA,CAAA,SAAS,GAAuB,EAAE;;QAIlC,IAAA,CAAA,cAAc,GAAsB,EAAE;;QAEtC,IAAA,CAAA,YAAY,GAAG,eAAe;;QAE9B,IAAA,CAAA,UAAU,GAAG,UAAU;;QAEvB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAIf,IAAA,CAAA,IAAI,GAAG,IAAI;;AAGV,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAqB;;AAErD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAqB;;QAG1D,IAAA,CAAA,GAAG,GAAG,CAAC;;QAEC,IAAA,CAAA,QAAQ,GAAsB,EAAE;AA8DzC,IAAA;AA5DC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC3D,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C;IACF;AAEA,IAAA,IAAY,IAAI,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC5G;;AAGA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM;IAC9B;;AAGA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IACzB;;AAGA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAC1B;;AAGA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD;AAEA,IAAA,aAAa,CAAC,CAAS,EAAA;QACrB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;cACvB,IAAI,CAAC;AACP,cAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY;IAC/D;IAEA,IAAI,CAAC,OAAO,GAAG,KAAK,EAAA;QAClB,IAAI,IAAI,CAAC,IAAI;YAAE;QACf,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AACrD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;AACnD,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,KAAK,CAAC,CAAgB,EAAA;QACpB,IAAI,IAAI,CAAC,IAAI;YAAE;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;AACzC,QAAA,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE;YAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YACrB,CAAC,CAAC,cAAc,EAAE;QACpB;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YAC5B,IAAI,CAAC,IAAI,EAAE;YACX,CAAC,CAAC,cAAc,EAAE;QACpB;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,EAAE;AACvD,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,KAAK;YACvE,CAAC,CAAC,cAAc,EAAE;QACpB;IACF;+GAvFW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,88JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuEd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA3EnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,88JAAA,CAAA,EAAA;8BAKQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAGS,aAAa,EAAA,CAAA;sBAAtB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;;;ACxIH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAyEA,MAAM,IAAI,GAAiB;IACzB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,2BAA2B,EAAE;IAC9E,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,2BAA2B,EAAE;IAChF,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE;CACxE;AAED,MAAMQ,gBAAc,GAA2B;AAC7C,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,QAAQ,EAAE,UAAU;CACrB;MAkJY,qBAAqB,CAAA;AAhJlC,IAAA,WAAA,GAAA;;QAsJW,IAAA,CAAA,IAAI,GAAe,OAAO;;QAE1B,IAAA,CAAA,MAAM,GAAkB,EAAE;;QAE1B,IAAA,CAAA,QAAQ,GAAoB,EAAE;;QAM9B,IAAA,CAAA,YAAY,GAAG,wCAAwC;;QAEvD,IAAA,CAAA,OAAO,GAAiB,IAAI;;QAQ5B,IAAA,CAAA,MAAM,GAAiB,EAAE;QACzB,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;;AAEzC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAc;QAIpD,IAAA,CAAA,QAAQ,GAAG,KAAK;AA0EjB,IAAA;AAxEC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM;QAC9B;IACF;AAEA,IAAA,IAAI,CAAC,GAAA;QACH,OAAO,EAAE,GAAGA,gBAAc,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC9C;IAEQ,IAAI,GAAA;QACV,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG;IACpF;IAEA,MAAM,GAAA;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E;IAEA,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW;IAC5D;IAEA,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;IAClC;IAEA,GAAG,GAAA;AACD,QAAA,QAAQ,IAAI,CAAC,KAAK;AAChB,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;AACjD,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9C,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE;AAClD,YAAA;AACE,gBAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;;IAEtD;AAEA,IAAA,YAAY,CAAC,CAAgB,EAAA;QAC3B,MAAM,GAAG,GAAa,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI;AAAE,YAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QACjC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;AAC5D,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;IACtB;AAEA,IAAA,QAAQ,CAAC,CAAe,EAAA;QACtB,QACE,CAAC,CAAC,QAAQ;AACV,YAAA,CAAC,CAAC;iBACC,KAAK,CAAC,GAAG;iBACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACf,IAAI,CAAC,EAAE;AACP,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB;IAEA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AACnB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;AAEA,IAAA,UAAU,CAAC,CAAa,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG;QACrD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;QACnB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACpC;+GA7GW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3ItB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,61LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzIS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4Id,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhJjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,61LAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAE0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,YAAY,EAAA,CAAA;sBAArB;gBAES,SAAS,EAAA,CAAA;sBAAlB;;;ACpRH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA+BA,MAAM,MAAM,GAAiB;IAC3B,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACvE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACxE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACxE,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC3E;AAED;AACA,MAAM,OAAO,GAAqC;AAChD,IAAA,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACb,IAAA,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACb,IAAA,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACb,IAAA,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,KAAK,GAAG,CAAC,CAAa,EAAE,CAAS,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;MAqFlE,oBAAoB,CAAA;AAxEjC,IAAA,WAAA,GAAA;;QA0EW,IAAA,CAAA,MAAM,GAAiB,MAAM;;QAI7B,IAAA,CAAA,KAAK,GAAG,cAAc;;QAEtB,IAAA,CAAA,MAAM,GAAG,eAAe;;QAExB,IAAA,CAAA,WAAW,GAAG,iBAAiB;;QAE/B,IAAA,CAAA,IAAI,GAAG,IAAI;;AAGV,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA0B;;AAEzD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;AAEzB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,IAAI,GAAU,EAAE;;QAEhB,IAAA,CAAA,MAAM,GAAG,KAAK;;QAEd,IAAA,CAAA,IAAI,GAAG,EAAE;;QAEA,IAAA,CAAA,QAAQ,GAAG,CAAC,kBAAkB,EAAE,eAAe,EAAE,eAAe,CAAC;AAElE,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;QAEjD,IAAA,CAAA,OAAO,GAAG,KAAK;AA4IxB,IAAA;IA1IC,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAChC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AACnD,YAAA,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;AACjH,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;;AAE9C,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACtC,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,OAAO;oBAAE,IAAI,CAAC,IAAI,EAAE;YAChC,CAAC,EAAE,IAAI,CAAC;AACR,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpB;IACF;;AAGA,IAAA,IAAI,IAAI,GAAA;QACN,MAAM,GAAG,GAA2B,EAAE;AACtC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AACzB,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACnC,kBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC3C,kBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAChD;AACA,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,QAAQ,CAAC,CAAM,EAAA;AACb,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF;IAEQ,GAAG,CAAC,CAAM,EAAE,CAAS,EAAA;QAC3B,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,QAAA,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG;QACrE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3G,IAAI,CAAC,IAAI,EAAE;IACb;IAEQ,IAAI,GAAA;QACV,MAAM,GAAG,GAA2B,EAAE;AACtC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;IAC7B;IAEA,IAAI,CAAC,CAAM,EAAE,CAAe,EAAA;QACzB,CAAC,CAAC,MAAsB,CAAC,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC;AAC1D,QAAA,CAAC,CAAC,IAAI,GAAG,IAAI;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,eAAe;AAC7B,QAAA,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACf;IAEA,IAAI,CAAC,CAAM,EAAE,CAAe,EAAA;QAC1B,IAAI,CAAC,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3B;AAEA,IAAA,EAAE,CAAC,CAAM,EAAA;AACP,QAAA,CAAC,CAAC,IAAI,GAAG,KAAK;IAChB;IAEQ,EAAE,CAAC,CAAM,EAAE,CAAe,EAAA;QAChC,MAAM,CAAC,GAAI,CAAC,CAAC,aAA6B,CAAC,qBAAqB,EAAE;AAClE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5D;IAEA,GAAG,CAAC,CAAM,EAAE,CAAgB,EAAA;QAC1B,MAAM,GAAG,GAAI,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAA6B,CAAC,CAAC,CAAC,GAAG,CAAC;AAC1G,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,eAAe;AAC7B,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACvF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,MAAM;YAAE;AACjB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,iBAAiB;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACd,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE;IACjB;AAEQ,IAAA,MAAM,GAAG,GAAA;AACf,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AACzB,YAAA,CAAC,CAAC,GAAG,GAAG,IAAI;AACZ,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;AACtC,YAAA,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACpB,YAAA,CAAC,CAAC,GAAG,GAAG,KAAK;QACf;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,4EAA4E;AACxF,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,MAAM,GAAG,gBAAgB;AAC9B,QAAA,IAAI,CAAC,WAAW,GAAG,YAAY;;AAE/B,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;AACzB,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;AACjE,YAAA,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QACnC;IACF;AAEQ,IAAA,KAAK,CAAC,CAAM,EAAE,IAAY,EAAE,EAAU,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AACf,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;QAC1B;AACA,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC/B,MAAM,GAAG,GAAG,GAAG;AACf,YAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;AAC3B,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC;AAC1C,gBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC;;AAC9C,oBAAA,OAAO,EAAE;AAChB,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC;AAC1C,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,IAAI,CAAC,EAAU,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,OAAO,CAAC,OAAO,EAAE;AAClD,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,gBAAA,OAAO,EAAE;YACX,CAAC,EAAE,EAAE,CAAC;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;QACnB,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;IAClD;+GA1KW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,whKAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoEd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxEhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,whKAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAGS,YAAY,EAAA,CAAA;sBAArB;gBAES,KAAK,EAAA,CAAA;sBAAd;;;AC9JH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4FA,MAAMX,MAAI,GAAqC;AAC7C,IAAA,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;AAC3D,IAAA,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CACxD;AAED,MAAM,KAAK,GAAG,CAAC,CAAS,KAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAqB1E;MAkJa,qBAAqB,CAAA;AAjJlC,IAAA,WAAA,GAAA;;QAyJW,IAAA,CAAA,SAAS,GAAG,aAAa;;QAEzB,IAAA,CAAA,QAAQ,GAA0B,EAAE;;QAKpC,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAkC;;AAEhE,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;;AAEzC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAU;AAI1B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG7C,IAAA,CAAA,QAAQ,GAAe,MAAM;;QAGtC,IAAA,CAAA,KAAK,GAA8B,EAAE;QACrC,IAAA,CAAA,MAAM,GAAG,KAAK;QAEN,IAAA,CAAA,UAAU,GAAa,EAAE;AAEzB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAiC;AAmM7C,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAe,KAAU;AACrD,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACnC,YAAA,IAAI,CAAC,EAAE;gBAAE;AACT,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;;AAE1B,YAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,QAAQ,EAAE;AACtC,QAAA,CAAC;AACF,IAAA;AAxMC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACpE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QACpF;QACA,IAAI,OAAO,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,UAAU,EAAE;aACrC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;;QAEpD;IACF;IAEA,eAAe,GAAA;QACb,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IAChE;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QACjE,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;IAC1B;;AAIA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC;IACrD;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU;AACxC,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC;AAC7E,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACnD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;IAIQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAA8B,EAAE;AAC1C,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAI;AAC/B,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;oBACzB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;oBAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;AAC5E,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;gBAC5C;AACA,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;AAAE,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;AACvE,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE;AACvB,oBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChF;gBACA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC;AAC5B,YAAA,CAAC,CAAC;QACJ;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;IAEQ,KAAK,CAAC,GAAoB,EAAE,IAAsB,EAAA;QACxD,OAAO;AACL,YAAA,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK;AAC5D,YAAA,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,EAAU,EAAE,GAAG,IAAI;SAC/D;IACH;;AAIA,IAAA,aAAa,CAAC,GAAoB,EAAA;AAChC,QAAA,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE;IACjD;AAEA,IAAA,MAAM,CAAC,CAAU,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,SAAS;AAC7C,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3E;AAEA,IAAA,IAAI,CAAC,CAAU,EAAA;QACb,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxB,QAAA,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS;IACnD;AAEA,IAAA,QAAQ,CAAC,CAAU,EAAA;AACjB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI;QAClB,IAAI,CAAC,QAAQ,EAAE;AACf,QAAA,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG;IACf;IAEA,MAAM,CAAC,CAAU,EAAE,CAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE;QAC7B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE;AACvB,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI;AAChB,YAAA,CAAC,CAAC,KAAK,GAAG,KAAK;;AAEf,YAAA,qBAAqB,CAAC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS;AAAE,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAChD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3D;AACA,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACnB;IAEA,UAAU,CAAC,CAAU,EAAE,CAAiB,EAAA;;AAEtC,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;AAAE,YAAA,CAAC,CAAC,KAAK,GAAG,KAAK;IACnD;;AAIA,IAAA,MAAM,CAAC,CAAU,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,EAAE;AACtC,QAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;IACzC;;AAIA,IAAA,SAAS,CAAC,GAAoB,EAAA;QAC5B,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,GAAI,GAA2B,CAAC,KAAK,GAAG,EAAE;IAChG;;AAIA,IAAA,MAAM,CAAC,GAAoB,EAAA;AACzB,QAAA,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE;IAC5C;AAEA,IAAA,MAAM,CAAC,GAAoB,EAAA;QACzB,OAAO,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM;IAC5C;AAEA,IAAA,QAAQ,CAAC,GAAoB,EAAA;AAC3B,QAAA,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW;IAC7D;AAEA,IAAA,IAAI,CAAC,CAAmB,EAAA;AACtB,QAAA,OAAOA,MAAI,CAAC,CAAC,CAAC;IAChB;AAEA,IAAA,GAAG,CAAC,GAAoB,EAAA;AACtB,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClD;;IAIA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE;AAClC,QAAA,IAAI;YACF,KAAK,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;QACrD;AAAE,QAAA,MAAM;;QAER;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC;IAChE;;;AAKA,IAAA,SAAS,CAAC,UAAkB,EAAE,MAAc,EAAE,KAAa,EAAA;QACzD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,MAAM,CAAC;QACnE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ;YAAE;QACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClD;AAEQ,IAAA,KAAK,CAAC,IAAY,EAAE,EAAU,EAAE,KAA0B,EAAA;AAChE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YACxB,KAAK,CAAC,EAAE,CAAC;YACT;QACF;AACA,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAU;AACjC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC;;AAE1C,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC;gBAAE,qBAAqB,CAAC,IAAI,CAAC;AACxC,QAAA,CAAC;QACD,qBAAqB,CAAC,IAAI,CAAC;IAC7B;;IAIQ,QAAQ,GAAA;AACd,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YACzC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAAE,gBAAA,CAAC,CAAC,IAAI,GAAG,KAAK;QACjD;IACF;AAEQ,IAAA,SAAS,CAAC,CAAU,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,CAAC,CAAC,IAAI,GAAG,KAAK;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5B,QAAA,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB;+GAtOW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5ItB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u0KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1IS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Id,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjJjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,u0KAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAE0B,IAAI,EAAA,CAAA;sBAA9B,SAAS;uBAAC,MAAM;;;AC3SnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAuBA,MAAM,CAAC,GAAG,EAAE;AACZ,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;AACzB,MAAMY,KAAG,GAAG,CAAC;MA+DA,mBAAmB,CAAA;AAQ9B;;;AAGG;IACH,IAAa,MAAM,CAAC,KAAgC,EAAA;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;YACf,IAAI,CAAC,YAAY,EAAE;QACrB;IACF;IAmBA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QAtCK,IAAA,CAAA,QAAQ,GAAwB,EAAE;;QAEpD,IAAA,CAAA,KAAK,GAAG,OAAO;;QAEf,IAAA,CAAA,IAAI,GAAG,EAAE;;AAET,QAAA,IAAA,CAAA,MAAM,GAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAYnD,IAAA,CAAA,aAAa,GAAkB,IAAI;AAElC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAiB;;QAGjD,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,CAAC,GAAG,CAAC;QAEd,IAAA,CAAA,IAAI,GAAU,EAAE;QAChB,IAAA,CAAA,EAAE,GAAkB,IAAI;QACxB,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,WAAW,GAAG,EAAE;QAER,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAK1B;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QAC5B,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;YAC3C,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC;YAClC,MAAM,EAAE,GAAG,GAAG;YACd,GAAG,IAAI,GAAG;YACV,OAAO;gBACL,GAAG;gBACH,KAAK;AACL,gBAAA,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,CAAA,UAAA,EAAa,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;gBACnD,GAAG,EAAE,GAAG,GAAGA,KAAG;gBACd,EAAE;AACF,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,UAAU,EAAE,GAAG,GAAG,KAAK,GAAG,EAAE;AAC5B,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,GAAG,CAAC;aAC9C;AACH,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;QAC/E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;;;AAIA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAK;AAC1C,gBAAA,CAAC,CAAC,KAAK,GAAG,IAAI;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACX,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;YACf,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK;QAC5B;aAAO;YACL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;QAC/B;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGQ,IAAA,KAAK,CAAC,MAAc,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE;YACnB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI;AAChB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;AACzB,YAAA,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI;AAAE,gBAAA,OAAO;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GApIW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAV,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1CpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,uuCAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA9C/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,cACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,uuCAAA,CAAA,EAAA;sHAI0B,QAAQ,EAAA,CAAA;sBAAlC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAKY,MAAM,EAAA,CAAA;sBAAlB;gBAOQ,aAAa,EAAA,CAAA;sBAArB;gBAES,YAAY,EAAA,CAAA;sBAArB;;;ACtHH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgFA,MAAM,IAAI,GAAiB;AACzB,IAAA,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IACjC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,wBAAwB,EAAE;IACjF,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,wBAAwB,EAAE;CAC9E;AAED,MAAMS,gBAAc,GAA0B;AAC5C,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,OAAO,EAAE,SAAS;AAClB,IAAA,OAAO,EAAE,UAAU;AACnB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,SAAS,EAAE,oBAAoB;AAC/B,IAAA,SAAS,EAAE,iBAAiB;AAC5B,IAAA,WAAW,EAAE,kBAAkB;AAC/B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;CACjB;AAYD;MAqKa,oBAAoB,CAAA;AApKjC,IAAA,WAAA,GAAA;QAqKW,IAAA,CAAA,KAAK,GAAG,sBAAsB;QAG9B,IAAA,CAAA,EAAE,GAAqB,EAAE;QACzB,IAAA,CAAA,OAAO,GAAG,EAAE;;QAEZ,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,WAAW,GAAsB,EAAE;;QAEnC,IAAA,CAAA,OAAO,GAAwB,IAAI;QACnC,IAAA,CAAA,KAAK,GAAe,OAAO;;QAE3B,IAAA,CAAA,WAAW,GAAiB,IAAI;;QAIhC,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,MAAM,GAAgB,EAAE;AAGvB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;AACvC,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,YAAY,EAAU;AAC7C,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAc;AACrC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;;AAElC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAMxB,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAER,IAAA,CAAA,WAAW,GAAG,KAAK;;QAEnB,IAAA,CAAA,SAAS,GAAG,EAAE;AA+HL,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAe,KAAU;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AACpB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE;AAClF,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,CAAC;AACF,IAAA;AAnIC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,mBAAmB,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;AACnF,YAAA,IAAI,CAAC,SAAS;gBACZ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE;QACjG;IACF;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IAChE;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IACnE;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;QACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI;AAC/C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;IACzB;AAEA,IAAA,IAAI,CAAC,GAAA;QACH,OAAO,EAAE,GAAGA,gBAAc,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC9C;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;IACjC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;IAC3D;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ;IAClD;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS;IAC1C;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACtF;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,KAAK;IACnC;AAEA,IAAA,IAAY,KAAK,GAAA;QACf,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;IACjD;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO;IAC7G;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAChB,QAAA,QAAQ,IAAI,CAAC,KAAK;AAChB,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAA,CAAE,EAAE,GAAG,EAAE,oBAAoB,IAAI,CAAC,QAAQ,CAAA,CAAA,CAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;AACvI,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAA,CAAE,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE;AACjG,YAAA,KAAK,WAAW;gBACd,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,KAAK,EAAE,KAAK;AACZ,oBAAA,GAAG,EAAE,UAAU;oBACf,CAAC,EAAE,CAAA,EAAG,CAAC,CAAC,SAAS,CAAA,KAAA,EAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA,CAAE;AACnF,oBAAA,GAAG,EAAE,CAAA,GAAA,EAAM,IAAI,CAAC,KAAK,CAAA,CAAE;oBACvB,GAAG,EAAE,CAAC,CAAC,MAAM;iBACd;AACH,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE;AACvG,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEA,IAAA,QAAQ,CAAC,CAAiB,EAAA;QACxB,QACE,CAAC,CAAC,QAAQ;AACV,YAAA,CAAC,CAAC;iBACC,KAAK,CAAC,GAAG;iBACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBACf,IAAI,CAAC,EAAE;AACP,iBAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB;AAEA,IAAA,cAAc,CAAC,CAAQ,EAAA;QACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAE,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC;IAC/D;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;IAC3D;AAEA,IAAA,IAAI,CAAC,GAAW,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG;AACvD,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;IAEQ,aAAa,GAAA;QACnB,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3E;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvC,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC1D;IACF;+GApKW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/JrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4JT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wxOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA7JS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAgKd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBApKhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4JT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wxOAAA,CAAA,EAAA;8BAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,EAAE,EAAA,CAAA;sBAAV;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,gBAAgB,EAAA,CAAA;sBAAzB;gBACS,IAAI,EAAA,CAAA;sBAAb;gBACS,OAAO,EAAA,CAAA;sBAAhB;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAE0B,MAAM,EAAA,CAAA;sBAAhC,SAAS;uBAAC,MAAM;gBACW,KAAK,EAAA,CAAA;sBAAhC,SAAS;uBAAC,OAAO;gBACQ,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK;;;ACjUlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAwGa,sBAAsB,CAAA;AAlEnC,IAAA,WAAA,GAAA;QAuE6B,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAE5C,IAAA,CAAA,QAAQ,GAAG,gCAAgC;;QAEzB,IAAA,CAAA,OAAO,GAAqB,EAAE;QAKhD,IAAA,CAAA,aAAa,GAAG,UAAU;QAG1B,IAAA,CAAA,WAAW,GAAG,IAAI;;QAElB,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAExC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;AAGjC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAG,IAAI;QACL,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;AA4CxB,IAAA;AA1CC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAChD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QAC/D;QAEA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;QAChC;IACF;AAEA,IAAA,KAAK,CAAC,KAAwB,EAAA;QAC5B,QAAQ,KAAK;AACX,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;AACjD,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;AAClD,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE;AACxC,YAAA,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE;AACjD,YAAA;;gBAEE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;IAExC;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;IAEA,EAAE,GAAA;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAChD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC/B;+GA3EW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7DvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,otFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3DS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA8Dd,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlElC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,otFAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,MAAM,EAAA,CAAA;sBAAd;gBAC0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,QAAQ,EAAA,CAAA;sBAAhB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBACS,UAAU,EAAA,CAAA;sBAAnB;;;ACvIH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4CA;MA8Ha,oBAAoB,CAAA;AA7HjC,IAAA,WAAA,GAAA;;QA+HW,IAAA,CAAA,KAAK,GAAG,EAAE;QAGV,IAAA,CAAA,KAAK,GAAe,EAAE;;QAEtB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAEf,IAAA,CAAA,QAAQ,GAAG,WAAW;QAKtB,IAAA,CAAA,aAAa,GAAe,KAAK;QAGjC,IAAA,CAAA,WAAW,GAAa,EAAE;;AAGzB,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAQ;AAC9B,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAc;AAC7C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;;;AAKlC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,IAAI,GAAe,KAAK;QACxB,IAAA,CAAA,MAAM,GAAa,EAAE;AAmEtB,IAAA;AAjEC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa;QAC/C;QACA,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QAC7C;;QAEA,KAAK,IAAI,CAAC,MAAM;IAClB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;IAC7D;AAEA,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM;IAC7D;AAEA,IAAA,IAAY,OAAO,GAAA;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;IAC5E;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,OAAA,CAAS;QACxE,IAAI,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,WAAW,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3F,QAAA,OAAO,wBAAwB;IACjC;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;IACjD;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;QACjF,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,aAAa;AAC3D,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;YAAE,OAAO,CAAA,EAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAA,wBAAA,CAA0B;AAC5G,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc;YAAE,OAAO,CAAA,EAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAA,uBAAA,CAAyB;AAC3G,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,GAAG,CAAC,MAAkB,EAAA;AACpB,QAAA,OAAO,MAAM,KAAK,QAAQ,GAAG,EAAE,GAAG,KAAK,GAAG,MAAM;IAClD;AAEA,IAAA,MAAM,CAAC,CAAW,EAAA;AAChB,QAAA,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D;AAEA,IAAA,IAAI,CAAC,CAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,MAAM,CAAC,CAAW,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,cAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE;cACtC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEA,WAAW,GAAA;;IAEX;+GAhGW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxHrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqHT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g1NAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtHS,eAAe,8EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyHhC,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA7HhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,g1NAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,GAAG,EAAA,CAAA;sBAAZ;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,UAAU,EAAA,CAAA;sBAAnB;;;AC1MH;AACA;AACA;AACA;AACA;AACA;AACA;AA2BA,MAAM,OAAO,GAAG,CAAC,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;MAuGjF,sBAAsB,CAAA;AArGnC,IAAA,WAAA,GAAA;QA2GW,IAAA,CAAA,aAAa,GAAmB,IAAI;QAIpC,IAAA,CAAA,WAAW,GAAG,KAAK;QAInB,IAAA,CAAA,eAAe,GAAa,EAAE;;QAG9B,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,cAAc,GAAG,EAAE;;QAGnB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAGf,IAAA,CAAA,QAAQ,GAAG,kBAAkB;;QAE7B,IAAA,CAAA,OAAO,GAAa,OAAO;QAC3B,IAAA,CAAA,WAAW,GAAG,qCAAqC;;QAEnD,IAAA,CAAA,IAAI,GAAG,wCAAwC;;QAG/C,IAAA,CAAA,IAAI,GAAoB,IAAI;;QAG5B,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAkB;AACjD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AACxC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAY;AAC7C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAC1C,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAmB;;AAEhD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAY;AAI9B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,IAAI,GAAmB,IAAI;QAC3B,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,MAAM,GAAa,EAAE;;QAGrB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,KAAK,GAAG,KAAK;QAEL,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,IAAI,GAAG,KAAK;AACZ,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AA4H1D,IAAA;AA1HC,IAAA,IAAI,UAAU,GAAA;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;QACxC,OAAO,CAAA,uBAAA,EAA0B,CAAC,GAAG,YAAY,GAAG,UAAU,CAAA,2BAAA,CAA6B;IAC7F;AAEA,IAAA,IAAY,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,GAAG,eAAe,GAAG,EAAE;IAChF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa;QAChC;QAEA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;AACvB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW;QAChC;QAEA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;YACtD,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;QACzC;QAEA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc;AAExF,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxB;IAEQ,KAAK,CAAC,EAAU,EAAE,EAAc,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,YAAA,EAAE,EAAE;AACN,QAAA,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;;AAGQ,IAAA,IAAI,CAAC,IAAY,EAAA;AACvB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO;YAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACzC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;QACF;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAK;AACnB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAO,CAAC,IAAoB,EAAA;AAClC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACxB;AAEQ,IAAA,OAAO,CAAC,IAAa,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEA,EAAE,GAAA;AACA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACrB;AAEA,IAAA,IAAI,CAAC,KAAc,EAAA;AACjB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;;QAEhB,IAAI,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnG;AAEA,IAAA,MAAM,CAAC,MAAc,EAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;AACtC,cAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM;cACtC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC;AAC5B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACnD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;AAEA,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACpB;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI;YAAE;AAC/B,QAAA,MAAM,CAAC,GAAa,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;AAC1E,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAK;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAK;AACnB,gBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;AAAE,oBAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACrC,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GAxLW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhGvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+qJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9FS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiGd,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBArGlC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+qJAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,aAAa,EAAA,CAAA;sBAAtB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAES,MAAM,EAAA,CAAA;sBAAf;gBAEyB,MAAM,EAAA,CAAA;sBAA/B,SAAS;uBAAC,KAAK;;;ACrLlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAsCA;;;;AAIG;MAaU,oBAAoB,CAAA;AAZjC,IAAA,WAAA,GAAA;;QAckB,IAAA,CAAA,KAAK,GAAG,EAAE;QAE1B,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,GAAG,GAAG,KAAK;AACZ,IAAA;+GAPY,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,qOARrB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAQ1B,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAZhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,QAAQ,EAAE,CAAA,yBAAA,CAA2B;AACrC,oBAAA,IAAI,EAAE;AACJ,wBAAA,KAAK,EAAE,UAAU;AACjB,wBAAA,iBAAiB,EAAE,MAAM;AACzB,wBAAA,iBAAiB,EAAE,MAAM;AACzB,wBAAA,eAAe,EAAE,KAAK;AACvB,qBAAA;AACF,iBAAA;8BAGiB,KAAK,EAAA,CAAA;sBAApB,KAAK;uBAAC,OAAO;;MAyFH,wBAAwB,CAAA;AAlFrC,IAAA,WAAA,GAAA;;QAoFW,IAAA,CAAA,MAAM,GAAqB,EAAE;;QAE7B,IAAA,CAAA,OAAO,GAAG,KAAK;;QAEf,IAAA,CAAA,MAAM,GAAG,EAAE;;QAEX,IAAA,CAAA,SAAS,GAAG,wBAAwB;QACpC,IAAA,CAAA,KAAK,GAAG,kBAAkB;;QAE1B,IAAA,CAAA,SAAS,GAAG,MAAM;;QAElB,IAAA,CAAA,SAAS,GAAmB,MAAM;QAClC,IAAA,CAAA,SAAS,GAAG,MAAM;QAClB,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAkC;AACxD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AAK1B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,KAAK,GAAkB,IAAI;QAC3B,IAAA,CAAA,OAAO,GAAkB,IAAI;;QAE7B,IAAA,CAAA,MAAM,GAAG,CAAC;;QAGF,IAAA,CAAA,IAAI,GAAa,EAAE;AACnB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAU;AACzB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;QACjD,IAAA,CAAA,QAAQ,GAAG,KAAK;AAyGzB,IAAA;;AAtGC,IAAA,IAAI,QAAQ,GAAA;QACV,MAAM,GAAG,GAA4B,EAAE;AACvC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1E,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,UAAU,CAAC,CAAiB,EAAA;QAC1B,OAAO,CAAC,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK;IACvC;AAEA,IAAA,GAAG,CAAC,CAAiB,EAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;IACvC;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChG;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;AACrB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,gBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC;AACpC,gBAAA,MAAM,CAAC,GAAG,UAAU,CAClB,MAAK;oBACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrB,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB;QACF;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa;AAC7C,YAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW;AAAE,gBAAA,IAAI,CAAC,MAAM,IAAI,CAAC;iBACzE,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QAC1E;QACA,IAAI,CAAC,IAAI,EAAE;IACb;;IAGA,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK;AACtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;YACvB,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG;AACvB,YAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YACpC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;AACjC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACzC,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,UAAU,CAAC,CAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,IAAI,EAAE;;AAEX,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACpC,YAAA,IAAI,CAAC,CAAC;gBAAE;YACR,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK;YACvC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAChC,YAAA,MAAM,CAAC,GAAG,YAAY,EAAE;AACxB,YAAA,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACvB,CAAC,EAAE,aAAa,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;IAEA,KAAK,CAAC,CAAgB,EAAE,CAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACrB,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAChB;IACF;AAEA,IAAA,MAAM,CAAC,CAAiB,EAAA;QACtB,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ;YAAE;AAC7C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,KAAK;AAC/E,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;IACtC;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACnD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GA3IW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAxB,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAqBlB,oBAAoB,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlG3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2+LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3ES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA8Ed,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAlFpC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0ET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2+LAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,GAAG,EAAA,CAAA;sBAAZ;gBACS,MAAM,EAAA,CAAA;sBAAf;gBAEsC,KAAK,EAAA,CAAA;sBAA3C,eAAe;uBAAC,oBAAoB;gBAClB,MAAM,EAAA,CAAA;sBAAxB,SAAS;uBAAC,MAAM;;;ACzLnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAwFa,oBAAoB,CAAA;;IAQ/B,IAAa,IAAI,CAAC,KAAyB,EAAA;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,GAAG,EAAE;AAC7C,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACrB;QACF;IACF;AAyBA,IAAA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EACtB,IAA6B,EAAA;QAF7B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;;QA3CI,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,MAAM,GAAa,EAAE;;QAErB,IAAA,CAAA,KAAK,GAAsB,EAAE;;QAe/C,IAAA,CAAA,UAAU,GAAG,oBAAoB;;QAEjC,IAAA,CAAA,UAAU,GAAG,gBAAgB;;AAE7B,QAAA,IAAA,CAAA,MAAM,GAA0B,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAE3E,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAU;QAEjD,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,IAAI,GAAc,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,UAAU,GAAG,KAAK;QAEV,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,MAAM,GAAoC,EAAE;IAMjD;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QAC7E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM;YAC7C,KAAK;YACL,KAAK;AACL,YAAA,EAAE,EAAE,CAAA,gCAAA,EAAmC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC,CAAA,eAAA,CAAiB;AAC9F,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,GAAG,EAAE,EAAE;AACR,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AAC1C,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,IAAI,EAAE;IACjD;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;IAC3B;AAEQ,IAAA,KAAK,CAAC,GAAW,EAAA;AACvB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;IAC9C;AAEQ,IAAA,IAAI,CAAC,GAAW,EAAA;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,KAAK,EAAE,MAAM,IAAI,EAAE;;AAE7B,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,KAAK,GAAG,CAAC;QACb,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE;gBAC7B,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpB,KAAK,GAAG,CAAC;YACX;AACF,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AAC3B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;AACzD,YAAA,GAAG,CAAC,KAAK,GAAG,CAAC;AACb,YAAA,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE;YAChB,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;YAC1C,GAAG,CAAC,MAAM,GAAG,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,IAAI,EAAE;AAC5F,YAAA,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK;YACtB,GAAG,CAAC,GAAG,GAAG;AACR,kBAAE;sBACE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA,EAAA,EAAK,IAAI,CAAC,UAAU,CAAA;sBAC5D,IAAI,CAAC;kBACP,EAAE;AACR,QAAA,CAAC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGQ,IAAA,GAAG,CAAC,IAAY,EAAA;AACtB,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM;QACxB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE;AACzC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,EAAE,KAAK,IAAI,CAAC,MAAM;gBAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,QAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IACrC;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;QACvF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;AAC3D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAhJW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAT,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3CrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzCS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4Cd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhDhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ooGAAA,CAAA,EAAA;+IAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEZ,IAAI,EAAA,CAAA;sBAAhB;gBAWQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAES,UAAU,EAAA,CAAA;sBAAnB;;;AC7HH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAqBa,aAAa,CAAA;AAd1B,IAAA,WAAA,GAAA;;QAgBW,IAAA,CAAA,IAAI,GAAG,CAAC;;QAER,IAAA,CAAA,GAAG,GAAG,KAAK;;QAEX,IAAA,CAAA,GAAG,GAAG,OAAO;;QAEb,IAAA,CAAA,GAAG,GAAY,CAAC;AAK1B,IAAA;AAHC,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,GAAG,CAAA,WAAA,EAAc,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG;IAC5E;+GAZW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,aAAa,gTAHd,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,imBAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAG1B,aAAa,EAAA,UAAA,EAAA,CAAA;kBAdzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,cACP,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,iBAAiB,EAAE,qBAAqB;AACxC,wBAAA,oBAAoB,EAAE,MAAM;AAC5B,wBAAA,mBAAmB,EAAE,QAAQ;AAC7B,wBAAA,mBAAmB,EAAE,KAAK;AAC3B,qBAAA,EAAA,QAAA,EACS,CAAA,yBAAA,CAA2B,EAAA,MAAA,EAAA,CAAA,imBAAA,CAAA,EAAA;8BAK5B,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,GAAG,EAAA,CAAA;sBAAX;gBAEQ,GAAG,EAAA,CAAA;sBAAX;;AAOH;MAMa,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;QAMuB,IAAA,CAAA,IAAI,GAA4B,EAAE;AACxD,IAAA;+GAFY,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE,EAAE,kBAAkB,EAAE,cAAc,EAAE;AAC7C,iBAAA;8BAEsB,IAAI,EAAA,CAAA;sBAAxB,KAAK;uBAAC,YAAY;;;ACnDrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6BA,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,IAAI,GAAG,CAAC,CAAS,KACrB,CAAC,IAAI,EAAE,GAAG,iBAAiB,GAAG,CAAC,IAAI,EAAE,GAAG,kBAAkB,GAAG,kBAAkB;AACjF,MAAM,KAAK,GAAG,CAAC,CAAmB,KAAa,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK;MAuGlD,oBAAoB,CAAA;;IAE/B,IACI,MAAM,CAAC,KAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC,OAAO,EAAE;IAChB;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;;IAUA,IACI,IAAI,CAAC,KAA2B,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;AACrC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YACnB,IAAI,CAAC,QAAQ,EAAE;QACjB;IACF;IAmCA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;;QAnDb,IAAA,CAAA,KAAK,GAAG,sBAAsB;QAe9B,IAAA,CAAA,WAAW,GAAa,EAAE;;AAGzB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;QAMnD,IAAA,CAAA,IAAI,GAAG,IAAI;QAEX,IAAA,CAAA,KAAK,GAAgB,EAAE;QACvB,IAAA,CAAA,MAAM,GAAa,EAAE;;QAGrB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,SAAS,GAAG,GAAG;;QAGf,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,OAAO,GAAG,KAAK;QAEf,IAAA,CAAA,GAAG,GAAqB,IAAI;QAEpB,IAAA,CAAA,OAAO,GAAuB,EAAE;QAChC,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAK1B;AAEH,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;IACrB;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;AACnE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;;AAE3B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KACtB,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CACjB;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO;gBACL,KAAK;gBACL,KAAK;AACL,gBAAA,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC;gBACjB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK;AAC7B,gBAAA,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,KAAK;AACjC,gBAAA,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK;aAC1B;AACH,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,QAAQ,GAAA;QACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;cACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;cAC7D,CAAC;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IACtC;AAEA,IAAA,KAAK,CAAC,CAAS,EAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtB;AAEA,IAAA,MAAM,CAAC,CAAY,EAAA;AACjB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC;AACb,cAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG;cACrC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,QAAQ,EAAE;QACjB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEA,OAAO,CAAC,CAAY,EAAE,CAAsB,EAAA;AAC1C,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;YAAE;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;AAEA,IAAA,UAAU,CAAC,CAAa,EAAA;AACtB,QAAA,MAAM,IAAI,GAAI,CAAC,CAAC,aAA6B,IAAI,IAAI;AACrD,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B;QACzC,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE;AACrC,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAAE;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACjB;;AAGQ,IAAA,IAAI,CAAC,CAAmB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;YAAE;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAC3B,CAAC,CAAC,KAAK,CAAC,KAAK,EACb,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAC3B;AACD,QAAA,IAAI,CAAC,IAAI,CACP,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAC1B,CAAC,CAAC,KAAK,CAAC,MAAM,EACd,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAC1B;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,KAAK,CAAC,OAAgB,EAAA;QAC5B,IAAI,IAAI,CAAC,GAAG;YAAE;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,MAAM;AAC5D,QAAA,MAAM,IAAI,GACR,IAAI,CAAC,MAAM;AACX,aAAC;kBACG,CAAA,EAAG,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,MAAM,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,IAAI,GAAG,CAAC,GAAG,aAAa,GAAG,aAAa,CAAA,KAAA;kBACjF,4BAA4B,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AACzE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACxE;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;IAGQ,KAAK,CAAC,CAAS,EAAE,OAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAU;YAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEA,MAAM,MAAM,CAAC,CAAY,EAAA;AACvB,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAC3B,QAAA,CAAC,CAAC,IAAI,GAAG,IAAI;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;QACpC;gBAAU;AACR,YAAA,CAAC,CAAC,IAAI,GAAG,KAAK;;AAEd,YAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AACf,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;;AAC9C,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;;AAGQ,IAAA,IAAI,CAAC,GAA4B,EAAE,KAAa,EAAE,GAA0B,EAAA;AAClF,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACxC,GAAG,CAAC,KAAK,CAAC;YACV;QACF;QACA,GAAG,CAAC,IAAI,CAAC;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;YACd,GAAG,CAAC,KAAK,CAAC;YACV,GAAG,CAAC,KAAK,CAAC;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GA3PW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnFrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wyHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjFS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoFd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAxFhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wyHAAA,CAAA,EAAA;sHAMG,MAAM,EAAA,CAAA;sBADT,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAUhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAIG,IAAI,EAAA,CAAA;sBADP;gBAQQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAIQ,KAAK,EAAA,CAAA;sBAAb;;;ACpLH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6EA,MAAM,UAAU,GAAG,CAAC,CAAgB,KAClC,CAAC,CAAC,QAAQ;AACV,IAAA,CAAC,CAAC;SACC,KAAK,CAAC,GAAG;SACT,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACf,IAAI,CAAC,EAAE;AACP,SAAA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAEhB;MAiOa,qBAAqB,CAAA;AAhOlC,IAAA,WAAA,GAAA;;QAkOW,IAAA,CAAA,KAAK,GAAG,wBAAwB;;QAEhC,IAAA,CAAA,MAAM,GAAG,EAAE;;QAEX,IAAA,CAAA,QAAQ,GAAyB,IAAI;;AAErC,QAAA,IAAA,CAAA,OAAO,GAAmB,EAAE,KAAK,EAAE,iBAAiB,EAAE;;QAItD,IAAA,CAAA,WAAW,GAAG,CAAC;;QAEf,IAAA,CAAA,aAAa,GAAG,GAAG;;QAEnB,IAAA,CAAA,OAAO,GAAG,EAAE;;QAEZ,IAAA,CAAA,KAAK,GAAkB,EAAE;;QAIzB,IAAA,CAAA,OAAO,GAAG,EAAE;;QAEZ,IAAA,CAAA,YAAY,GAAG,sBAAsB;;QAErC,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAEhB,IAAA,CAAA,MAAM,GAAG,KAAK;;AAEd,QAAA,IAAA,CAAA,MAAM,GAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;;QAErC,IAAA,CAAA,MAAM,GAAkB,EAAE;;AAKzB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAiB;;AAE5C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;AAMnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,QAAQ,GAAG,KAAK;;AAIhB,QAAA,IAAA,CAAA,CAAC,GAA4B,IAAI,CAAC,aAAa,EAAE;AAmIhC,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAe,KAAU;YACrD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AACpB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE;AACxF,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACvB,QAAA,CAAC;AACF,IAAA;AAvIC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE;QAC/B;;;AAGA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE;YACnD,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QACnD;IACF;IAEA,eAAe,GAAA;QACb,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IAChE;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QACjE,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IACpD;IAEQ,aAAa,GAAA;QACnB,OAAO;AACL,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,OAAO,EAAE,sBAAsB;AAC/B,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,MAAM,EAAE,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAA,WAAA,CAAa;AAC3D,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;YAChB,GAAG,IAAI,CAAC,MAAM;SACf;IACH;AAEA,IAAA,QAAQ,CAAC,CAAgB,EAAA;AACvB,QAAA,OAAO,UAAU,CAAC,CAAC,CAAC;IACtB;AAEA,IAAA,OAAO,CAAC,CAAgB,EAAA;AACtB,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACzD;AAEA,IAAA,QAAQ,CAAC,CAAgB,EAAA;AACvB,QAAA,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACzD;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;IACtC;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI;AACV,cAAE;cACA,CAAC,GAAG;AACJ,kBAAE;AACF,kBAAE,CAAA,aAAA,EAAgB,CAAC,CAAA,IAAA,CAAM;IAC/B;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,EAAE;IACnF;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC;IAC9D;AAEA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM;IACnC;;IAGA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;AAEA,IAAA,MAAM,CAAC,CAAgB,EAAA;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7F;;IAGA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,MAAM,KAAK,GAAG,MAAK;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa;AACjC,YAAA,IAAI,CAAC,CAAC;gBAAE;YACR,CAAC,CAAC,KAAK,EAAE;AACT,YAAA,MAAM,CAAC,GAAG,YAAY,EAAE;AACxB,YAAA,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACvB,CAAC,EAAE,aAAa,EAAE;AACpB,QAAA,CAAC;AACD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAAE,YAAA,KAAK,EAAE;;YAC5B,qBAAqB,CAAC,KAAK,CAAC;IACnC;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;AAAE,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;IACtB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;IACjE;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,gBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,gBAAA,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAChE;AAAO,iBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBACvB,IAAI,CAAC,UAAU,EAAE;YACnB;QACF;IACF;+GArLW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3NtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwNT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+5RAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzNS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4Nd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAhOjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwNT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+5RAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,QAAQ,EAAA,CAAA;sBAAjB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAEyB,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK;gBACkB,WAAW,EAAA,CAAA;sBAA5C,SAAS;uBAAC,aAAa;gBACE,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK;;;AC5WlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwGA,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC;AACzD,MAAMW,QAAM,GAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE;AACrF,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,CAAC;AAC1D,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAE1D,MAAM,SAAS,GAAG,CAAC,CAAS,MACzB,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAA6B,CACtH,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAC5B,IAAI,EAAE,CAAA;AACT,MAAM,EAAE,GAAG,CAAC,EAAmB,KAC7B,CAAC,EAAE,EAAE,GAAG,IAAI,CAAA,KAAA,EAAQ,EAAE,CAAC,GAAG,CAAA,EAAA,CAAI,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS;AAC1F,MAAM,QAAQ,GAAG,CAAC,CAAO,KACvB,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,GAAG,MAAM;AAErG;AACA,IAAI,KAAK,GAAG,EAAE;AACd,SAAS,SAAS,CAAC,GAAY,EAAA;AAC7B,IAAA,IAAI,GAAG;AAAE,QAAA,OAAO,EAAE;AAClB,IAAA,IAAI,KAAK;AAAE,QAAA,OAAO,KAAK;AACvB,IAAA,IAAI;QACF,MAAM,CAAC,GAAG,EAAE;QACZ,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;QAC3C,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC;QACxB,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;QACjB,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;YACxC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAC7C,YAAA,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG;QAC1C;QACA,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,KAAK,GAAG,CAAA,KAAA,EAAQ,EAAE,CAAC,SAAS,EAAE,IAAI;AAClC,QAAA,OAAO,KAAK;IACd;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,EAAE;IACX;AACF;MAyPa,wBAAwB,CAAA;AAvPrC,IAAA,WAAA,GAAA;;QAyPW,IAAA,CAAA,KAAK,GAAG,UAAU;;QAElB,IAAA,CAAA,OAAO,GAAG,QAAQ;;QAElB,IAAA,CAAA,MAAM,GAAa,MAAM;;QAIzB,IAAA,CAAA,OAAO,GAAqB,EAAE;;QAE9B,IAAA,CAAA,OAAO,GAAuB,EAAE;QAChC,IAAA,CAAA,SAAS,GAAG,EAAE;QAKd,IAAA,CAAA,aAAa,GAAG,EAAE;QAElB,IAAA,CAAA,qBAAqB,GAAa,EAAE;QAGpC,IAAA,CAAA,YAAY,GAAe,KAAK;QAGhC,IAAA,CAAA,YAAY,GAAG,CAAC;QAMhB,IAAA,CAAA,UAAU,GAAyB,SAAS;AAK3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAY;AACnD,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAc;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAwB;;AAEpD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAkD;AAOpE,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE7C,IAAA,CAAA,MAAM,GAAG,MAAM;QACf,IAAA,CAAA,SAAS,GAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;QAChD,IAAA,CAAA,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,IAAA,CAAA,QAAQ,GAAG;AAClB,YAAA,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC7C,YAAA,EAAE,KAAK,EAAE,SAAkB,EAAE,KAAK,EAAE,SAAS,EAAE;AAC/C,YAAA,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE;SAC9C;QACQ,IAAA,CAAA,QAAQ,GAAG,QAAQ;;QAG5B,IAAA,CAAA,WAAW,GAAG,EAAE;QAChB,IAAA,CAAA,WAAW,GAAa,EAAE;QAC1B,IAAA,CAAA,UAAU,GAAe,KAAK;QAC9B,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,UAAU,GAAG,EAAE;QACf,IAAA,CAAA,QAAQ,GAAyB,SAAS;QAE1C,IAAA,CAAA,IAAI,GAAoC,QAAQ;QAChD,IAAA,CAAA,GAAG,GAAe,IAAI;QACtB,IAAA,CAAA,IAAI,GAAqB,EAAE;AAC3B,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAU;QACzB,IAAA,CAAA,IAAI,GAAqB,EAAE;QAC3B,IAAA,CAAA,MAAM,GAA2B,EAAE;QACnC,IAAA,CAAA,KAAK,GAAoC,EAAE;QAC3C,IAAA,CAAA,EAAE,GAA4F,IAAI;QAClG,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,OAAO,GAAe,CAAC;QACvB,IAAA,CAAA,EAAE,GAAa,EAAE;QACjB,IAAA,CAAA,KAAK,GAAyC,IAAI;QAClD,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,GAAG,GAA2B,IAAI;QAClC,IAAA,CAAA,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;QAC3B,IAAA,CAAA,KAAK,GAAG,EAAE;QAEF,IAAA,CAAA,IAAI,GAAG,CAAC;AACR,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;QAEjD,IAAA,CAAA,cAAc,GAAG,KAAK;AA+P/B,IAAA;;AA1UC,IAAA,IAAa,MAAM,CAAC,CAAqB,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACxF,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;AAEhD,IAAA,IAAa,cAAc,CAAC,CAAuB,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAElG,IAAA,IAAa,KAAK,CAAC,CAAyB,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC1F,IAAI,KAAK,KAAiB,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;AAElD,IAAA,IAAa,KAAK,CAAC,CAAqB,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACtF,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAA,IAAa,KAAK,CAAC,CAAqB,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACtF,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9C,IAAA,IAAa,GAAG,CAAC,CAAmC,IAAI,IAAI,CAAC,KAAK,SAAS;AAAE,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAChG,IAAI,GAAG,KAA2B,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IA8DxD,IAAI,MAAM,KAAe,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC;IAElD,eAAe,GAAA;QACb,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa;AACzD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QACrF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU;AAChD,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;IAEQ,KAAK,CAAC,EAAU,EAAE,EAAc,EAAA;QACtC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAC1G,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;;AAGA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAI,EAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;IACpH;AACA,IAAA,IAAI,GAAG,GAAA,EAAuB,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,IAAA,IAAI,CAAC,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACtD,IAAA,IAAI,KAAK,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAChG,IAAI,IAAI,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAChF,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,CAAA,EAAG,IAAI,CAAC,CAAC,CAAA,SAAA,CAAW,CAAC,CAAC;IAC7E,IAAI,OAAO,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,IAAA,IAAI,IAAI,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACpF,IAAI,KAAK,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnI,IAAA,IAAI,QAAQ,GAAA,EAAa,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC9D,IAAA,IAAI,KAAK,GAAA,EAAa,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjI,IAAA,IAAI,UAAU,GAAA,EAAa,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAC/F,IAAA,IAAI,SAAS,GAAA,EAAiB,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC;AACtG,IAAA,IAAI,OAAO,GAAA;QACT,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IACnI;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAClB,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AAC1E,YAAA,GAAG,CAAC,CAAC,KAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAM,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAM,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;AACtH,SAAA,CAAC,CAAC;IACL;AACA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,MAAM,IAAI,GAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI,EAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACzH,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAClI;AACA,IAAA,IAAI,IAAI,GAAA,EAAa,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClG,IAAI,KAAK,GAAA,EAAiC,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AAEhG,IAAA,KAAK,CAAC,EAAmB,EAAA,EAAmB,OAAO,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;AACnE,IAAA,GAAG,CAAC,CAAO,EAAA,EAAY,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;AACjG,IAAA,MAAM,CAAC,EAAkB,EAAA;QACvB,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,aAAa,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7J;IACA,OAAO,CAAC,EAAU,EAAE,IAAgB,IAAgB,OAAO,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;AACnG,IAAA,QAAQ,CAAC,CAAmB,EAAA,EAAa,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1I,IAAA,OAAO,CAAC,CAAO,EAAA,EAAgC,OAAO,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;;AAG/H,IAAA,IAAI,CAAC,CAAO,EAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;AACrC,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;AACzE,QAAA,MAAM,CAAC,GAAoC,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,IAAI,MAAM,EAAE;QAC7G,IAAI,EAAE,KAAK,MAAM;AAAE,YAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;QACrE,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,MAAM,EAAE;AACjC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC;AAC/K,YAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE;gBACf,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA,EAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA,EAAA,CAAI,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAA,CAAI,EAAE,SAAS,EAAE,CAAA,EAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAA,EAAA,CAAI;gBAC3I,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAA,EAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO;AACjI,aAAA,CAAC;QACJ;QACA,IAAI,EAAE,KAAK,MAAM;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACxH,QAAA,OAAO,CAAC;IACV;;IAGQ,SAAS,CAAC,CAAS,EAAA,EAAU,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAAE,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AAAE,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,IAAA,CAAC,CAAC;IAC9G,SAAS,CAAC,CAAW,EAAA,EAAU,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,QAAQ,CAAC,CAAa,EAAA,EAAU,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,QAAQ,CAAC,CAAS,EAAA,EAAU,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,SAAS,CAAC,GAAW,EAAA,EAAU,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACnG,OAAO,CAAC,CAAuB,EAAA,EAAU,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,IAAA,QAAQ,CAAC,CAAkC,EAAA,EAAU,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ;AAAE,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzG,IAAA,QAAQ,CAAC,CAAQ,EAAA,EAAU,IAAI,CAAC,SAAS,CAAE,CAAC,CAAC,MAA8B,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF,IAAA,KAAK,CAAC,CAAgB,EAAA;AACpB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAE,CAAyC,CAAC,WAAW,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,UAAU,EAAE;QAAE;IAC5I;AACA,IAAA,MAAM,CAAC,CAAQ,EAAA,EAAU,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAChE,SAAS,CAAC,CAAkB,EAAA,EAAU,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;;IAGpE,MAAM,CAAC,EAAU,EAAE,GAA6B,EAAA;AACtD,QAAA,OAAO,CAAC,IAAI,EAAE,CAAC,KAAI;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE;gBAAE;AAC3C,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC;gBAAE;AAC7C,YAAA,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI;gBAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACzE,IAAI,CAAC,CAAC,KAAK;AAAE,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAC9B,IAAI,CAAC,CAAC,KAAK;AAAE,gBAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;YAC9B,IAAI,CAAC,WAAW,EAAE;AACpB,QAAA,CAAC;IACH;IACQ,WAAW,GAAA;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;;QAE5B,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAM,CAAC,GAAG,CAAC;aACpH,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,KAAM,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAM,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC1I,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAK,EAAG,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAAE;AAC7J,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI;AAAE,YAAA,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QACvE,IAAI,CAAC,QAAQ,EAAE;IACjB;IACQ,QAAQ,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,IAAI,CAAA;AAC9D,cAAE,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,IAAA,EAAO,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,CAAA,mCAAA;AAC5D,kBAAE,CAAA,EAAG,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,QAAQ;IACrD;IAEQ,KAAK,CAAC,OAAwB,EAAE,KAAa,EAAA;AACnD,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;AAC/B,QAAA,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI;QACtB,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,EAAE;AACtJ,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;IAC3F;IACQ,UAAU,GAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;YAAE;QACzD,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAEA,QAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvJ;AACA,IAAA,KAAK,CAAC,CAAS,EAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,QAAA,CAAC,CAAC,QAAQ,GAAG,CAAC;AAAE,QAAA,CAAC,CAAC,KAAK,GAAG,SAAS;QACzD,IAAI,CAAC,IAAI,GAAG,CAAA,eAAA,EAAkB,CAAC,GAAG,CAAC,QAAQ;QAC3C,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;IACzH;AACA,IAAA,IAAI,CAAC,EAAkB,EAAA;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,oBAAoB;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,IAAIA,QAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5M;AACA,IAAA,OAAO,CAAC,EAAkB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,QAAQ,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;AAC3E,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAK,EAAG,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC,CAAC,CAAC,CAAC;IACvH;IACQ,IAAI,CAAC,EAAU,EAAE,KAAa,EAAA;QACpC,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAK,EAAG,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E;IACA,QAAQ,CAAC,EAAkB,EAAE,EAAU,EAAA;AACrC,QAAA,IAAI,EAAE,CAAC,GAAG,EAAE;YAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;AAAE,YAAA,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG;AAAE,YAAA,CAAC,CAAC,QAAQ,GAAG,EAAE;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,KAAK,EAAE;YAAE,CAAC,CAAC,MAAM,EAAE;QAAE;AAC5I,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,aAAa,GAAG,qBAAqB,CAAC;IAC/D;IACQ,SAAS,CAAC,EAAkB,EAAE,IAAa,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,GAAG,sBAAsB;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AACxF,QAAA,IAAI,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF;IACA,QAAQ,CAAC,EAAkB,EAAA,EAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,SAAS,CAAC,EAAkB,EAAA,EAAU,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7K,IAAI,CAAC,EAAkB,EAAE,CAAS,EAAA;AAChC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AAAE,QAAA,IAAI,EAAE;AAAE,YAAA,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;;AAAO,YAAA,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QAC3F,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,gBAAgB,GAAG,eAAe,IAAI,gBAAgB;AAClF,QAAA,IAAI,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC/E;AACA,IAAA,OAAO,CAAC,CAAS,EAAA;AACf,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,KAAK,CAAC;AAAE,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC;QACxD,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,gBAAgB,GAAG,eAAe,IAAI,gBAAgB;IACpF;IACA,UAAU,GAAA;QACR,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;QACf,KAAK,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAK,EAAE,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7F,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,eAAe;AAC/C,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAK,EAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD;IACA,WAAW,CAAC,CAAS,EAAA,EAAU,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnI,IAAA,UAAU,CAAC,CAAmB,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,EAAE,GAAG,OAAO;AAAE,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAK,EAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5H,QAAA,IAAI,CAAC,IAAI,GAAG,CAAA,EAAG,CAAC,CAAC,KAAK,CAAA,EAAA,EAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACrD;;IAGA,YAAY,CAAC,CAAO,EAAE,CAAQ,EAAA;QAC5B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAM,CAAC,GAAG,CAAC;AAAE,QAAA,IAAI,CAAC,EAAE;YAAE;AACvE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,aAA4B,EAAE,CAAC,CAAC,SAAS,CAAC;IAC/E;IACA,WAAW,CAAC,EAAkB,EAAE,CAAQ,EAAA,EAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,aAA4B,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7G,IAAA,IAAI,CAAC,IAAsB,EAAE,GAAW,EAAE,IAAwB,EAAE,IAAa,EAAA;AACvF,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;QACpD,IAAI,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAAE;IAC/E;IACQ,OAAO,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAAQ,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAC7D,QAAA,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAc,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpG;AACA,IAAA,OAAO,CAAC,IAAa,EAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI;AAAE,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;AAC1C,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE,WAAW;YAAE,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpE;AACA,IAAA,IAAI,CAAC,CAAS,EAAA;QACZ,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE;AAAQ,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IAC3F;AACA,IAAA,MAAM,CAAC,CAAgB,EAAA;QACrB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE;AACd,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE;QAAQ;QAC/F,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,KAAK,CAAE,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE;QAAQ;AACrL,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;AACnB,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAChJ,IAAI,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE;gBAAE,CAAC,CAAC,cAAc,EAAE;gBAAE,CAAC,EAAE,KAAK,EAAE;YAAE;iBAC7E,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,aAAa,KAAK,CAAC,EAAE;gBAAE,CAAC,CAAC,cAAc,EAAE;gBAAE,CAAC,EAAE,KAAK,EAAE;YAAE;QAC1F;IACF;;IAGQ,YAAY,GAAA;AAClB,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAK;AACjB,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AAAE,YAAA,IAAI,CAAC,EAAE;gBAAE;YAC/C,MAAM,GAAG,GAAG,MAAW;AACrB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,gBAAA,IAAI,CAAC,CAAC;oBAAE;gBAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC;gBACxE,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AAC9C,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;oBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;oBACzI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;wBAAE,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE;gBAC9F;AACA,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAAE,oBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;AACpH,YAAA,CAAC;AACD,YAAA,GAAG,EAAE;YACL,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACxD,QAAA,CAAC,CAAC;IACJ;+GAzVW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,GAAA,EAAA,KAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,IAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlPzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+OT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,wolBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhPS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAmPd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAvPpC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+OT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,wolBAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGY,MAAM,EAAA,CAAA;sBAAlB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBACY,cAAc,EAAA,CAAA;sBAA1B;gBACQ,qBAAqB,EAAA,CAAA;sBAA7B;gBACY,KAAK,EAAA,CAAA;sBAAjB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBACY,KAAK,EAAA,CAAA;sBAAjB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBACY,KAAK,EAAA,CAAA;sBAAjB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBACY,GAAG,EAAA,CAAA;sBAAf;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,oBAAoB,EAAA,CAAA;sBAA7B;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAES,MAAM,EAAA,CAAA;sBAAf;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACG,KAAK,EAAA,CAAA;sBAAxB,SAAS;uBAAC,OAAO;gBACD,EAAE,EAAA,CAAA;sBAAlB,SAAS;uBAAC,IAAI;gBACI,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;;;ACvcnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA0CA,MAAM,MAAM,GAAG,CAAC,CAAW,KAAoB,OAAO,CAAC,KAAK,QAAQ;MA+FvD,uBAAuB,CAAA;AA7FpC,IAAA,WAAA,GAAA;;QAkG6B,IAAA,CAAA,KAAK,GAAe,EAAE;;QAGxC,IAAA,CAAA,gBAAgB,GAAiC,EAAE;;QAGnD,IAAA,CAAA,SAAS,GAAG,qBAAqB;;QASjC,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAgC;AAK3D,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAEtD,QAAA,IAAA,CAAA,CAAC,GAAmC;AAClC,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,SAAS,EAAE,YAAY;AACvB,YAAA,SAAS,EAAE,YAAY;SACxB;QAED,IAAA,CAAA,GAAG,GAAiC,EAAE;QACtC,IAAA,CAAA,GAAG,GAAkB,IAAI;QACzB,IAAA,CAAA,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;;QAExB,IAAA,CAAA,IAAI,GAAkB,IAAI;;QAE1B,IAAA,CAAA,QAAQ,GAAG,EAAE;AAGL,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,EAAgB,KAAI;AACvC,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,MAAiB;YAC9B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE;AACjF,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YACjB;AACF,QAAA,CAAC;AAsJF,IAAA;;IA3LC,IACI,MAAM,CAAC,CAAuB,EAAA;QAChC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE;IACzG;IAoCA,eAAe,GAAA;QACb,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE;;QAEvC,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI;gBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACrF,QAAA,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;IAC1D;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC;IAC7D;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;IAC1D;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;IACxC;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,CAAC,MAAM;AACtE,QAAA,OAAO,IAAI,KAAK,KAAK,CAAC;cAClB,CAAA,EAAG,IAAI,CAAA,gBAAA;AACT,cAAE;AACA,kBAAE,CAAA,EAAG,IAAI,OAAO,KAAK,CAAC,MAAM,CAAA,KAAA;kBAC1B,CAAA,EAAG,GAAG,CAAA,WAAA,EAAc,KAAK,CAAC,MAAM,GAAG,GAAG,CAAA,SAAA,CAAW;IACzD;AAEA,IAAA,MAAM,CAAC,CAAW,EAAA;AAChB,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;IAC7B;AAEA,IAAA,SAAS,CAAC,CAAW,EAAA;QACnB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAA,YAAA,EAAe,CAAC,CAAC,EAAE,EAAE;IAC9E;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG;QACxC,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,cAAc,CAAC,EAAiB,EAAE,GAAW,EAAA;AAC3C,QAAA,IAAI,EAAE,CAAC,GAAG,KAAK,OAAO,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE;YACxC,EAAE,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;YAEhB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,EAAE;gBAChC,cAAc,CAAC,MACb,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,aAAa,CAAc,aAAa,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAClG;YACH;QACF;IACF;;AAGA,IAAA,YAAY,CAAC,EAAiB,EAAA;AAC5B,QAAA,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,gBAAgB,CAAc,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5F,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC;YAAE;QACX,MAAM,CAAC,GAAI,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAA6B,CAAC,EAAE,CAAC,GAAG,CAAC;QACzG,MAAM,EAAE,GAAG;AACT,cAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM;AACpC,cAAE,EAAE,CAAC,GAAG,KAAK;AACX,kBAAE,EAAE,CAAC,CAAC;AACN,kBAAE,EAAE,CAAC,GAAG,KAAK;sBACT,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;sBAChB,IAAI;QACZ,IAAI,EAAE,EAAE;YACN,EAAE,CAAC,cAAc,EAAE;YACnB,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACnC;IACF;AAEA,IAAA,aAAa,CAAC,EAAiB,EAAA;QAC7B,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YACf,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACpC;IACF;AAEA,IAAA,MAAM,CAAC,CAAe,EAAA;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;QACrE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAChB,QAAA,IAAI,IAAI;YAAE,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC9C;AAEA,IAAA,GAAG,CAAC,CAAe,EAAA;AACjB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC5B,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7D,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACnB;IAEQ,GAAG,CAAC,GAAW,EAAE,CAAe,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;IACxC;;;AAIQ,IAAA,MAAM,CAAC,IAAkC,EAAA;AAC/C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI;QAC1E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC;IACxC;;;IAIQ,QAAQ,GAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACnB,QAAA,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;QACnC,cAAc,CAAC,MAAK;AAClB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AAClC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa;YACjC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;AACnD,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;gBAAE;AACrB,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,qBAAqB,EAAE;YACpC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC;AACvC,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;AAC9B,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE;YAC1D,IAAI,CAAC,EAAE,GAAG;AACR,gBAAA,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;AACzF,gBAAA,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;aAClC;AACH,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAO,CAAC,GAAW,EAAA;AACzB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAc,CAAA,YAAA,EAAe,GAAG,CAAA,EAAA,CAAI,CAAC,IAAI,IAAI;IAC5F;+GAxMW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxFxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,u4FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtFS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyFd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA7FnC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,u4FAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGE,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGhB,gBAAgB,EAAA,CAAA;sBAAxB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAIG,MAAM,EAAA,CAAA;sBADT;gBAMQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,eAAe,EAAA,CAAA;sBAAxB;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACC,GAAG,EAAA,CAAA;sBAApB,SAAS;uBAAC,KAAK;;;AC7KlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MA4Ha,wBAAwB,CAAA;AAzFrC,IAAA,WAAA,GAAA;;QA2FW,IAAA,CAAA,KAAK,GAAG,gBAAgB;;QAGxB,IAAA,CAAA,MAAM,GAAkB,EAAE;;QAM1B,IAAA,CAAA,MAAM,GAAwB,IAAI;;QAGlC,IAAA,CAAA,IAAI,GAAG,IAAI;;AAGV,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAQ;;AAG9B,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAU;AAgB3C,IAAA;;IAbC,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,UAAU;AACjE,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE;AAChD,YAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS;QACvC;QACA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM;QAC/D,OAAO,GAAG,GAAG,CAAA,EAAG,GAAG,CAAA,uBAAA,CAAyB,GAAG,0BAA0B;IAC3E;;IAGA,IAAI,GAAA;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,MAAM;IAChF;+GAnCW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,wBAAwB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApFzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2kFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlFS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqFd,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAzFpC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2kFAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGS,GAAG,EAAA,CAAA;sBAAZ;gBAGS,GAAG,EAAA,CAAA;sBAAZ;;;AC5JH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4BA,MAAMC,GAAC,GAAG,GAAG,EAAEC,GAAC,GAAG,GAAG;AAEtB;AACA,SAAS,MAAM,CAAC,CAAqB,EAAA;AACnC,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACZ,QAAA,IAAI,CAAC,CAAC;YAAE,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;AACnE,IAAA,CAAC;SACA,IAAI,CAAC,GAAG,CAAC;AACd;AAEA;AACA,SAAS,WAAW,CAAC,CAAS,EAAA;IAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAC9C;MA2Ga,kBAAkB,CAAA;;IAkB7B,IAAa,OAAO,CAAC,KAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;AACrC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,KAAK,EAAE;QAC9B;IACF;IAmCA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;;QA3DK,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,MAAM,GAAsB,EAAE;;QAE9B,IAAA,CAAA,MAAM,GAAa,EAAE;;QAUvC,IAAA,CAAA,MAAM,GAA0B,WAAW;AAW1C,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY;QAI7C,IAAA,CAAA,CAAC,GAAGD,GAAC;QACL,IAAA,CAAA,CAAC,GAAGC,GAAC;QACL,IAAA,CAAA,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAC7B,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAA,CAAA,KAAK,GAAiB,EAAE;QACxB,IAAA,CAAA,SAAS,GAAiB,EAAE;QAC5B,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,SAAS,GAAG,kBAAkB;QAE9B,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,EAAE,GAAG,KAAK;QACV,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,OAAO,GAAG,EAAE;QAEJ,IAAA,CAAA,EAAE,GAAc,EAAE;QAClB,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAK1B;AAEK,IAAA,KAAK,CAAC,CAAS,EAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,GAAG,CAAA,UAAA,EAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,kBAAkB,CAAC;IACvF;AAEQ,IAAA,CAAC,CAAC,CAAS,EAAA;QACjB,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,GAAG;IAC/D;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AAChD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACpD,QAAA,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC;QACvF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAChE,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACvD;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AACxC,YAAA,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAID,GAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,OAAO;AACL,gBAAA,MAAM,EAAE,CAAC;gBACT,KAAK;AACL,gBAAA,MAAM,EAAE,GAAG;AACX,gBAAA,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;AACd,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBACxB,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,IAAI;AAC1B,gBAAA,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;AACrB,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,KAAK,EAAE,CAAC;aACT;AACH,QAAA,CAAC,CAAC;;AAEF,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA,EAAA,EAAKA,GAAC,IAAIC,GAAC,CAAA,IAAA,EAAOA,GAAC,CAAA,EAAA,CAAI;QAE7D,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAEjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AACpD,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;AAGxB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,GAAGD,GAAC;AACb,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;aAAO;AACL,YAAA,IAAI,CAAC,KAAK,CAAC,MAAK;gBACd,IAAI,CAAC,KAAK,CAAC,CAAC,EAAEA,GAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;gBACpD,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;YAC9D,CAAC,EAAE,GAAG,CAAC;QACT;IACF;IAEQ,KAAK,GAAA;AACX,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA,EAAA,EAAKA,GAAC,IAAIC,GAAC,CAAA,IAAA,EAAOA,GAAC,CAAA,EAAA,CAAI;AAC7D,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,kBAAkB;AAC3D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;QAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC;YAAE;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,EAAE;;AAEZ,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,YAAA,IAAI,IAAI,KAAK,EAAE,EAAE;AACf,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAAE,oBAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;oBACrC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC;YAChE;QACF;QACA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/G;AAEA,IAAA,IAAI,CAAC,CAAe,EAAA;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC1D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;AACd,QAAA,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAC3D,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;YAClB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAGA,GAAC,IAAI,CAAC,CAAC,MAAM;QAC3C;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAC5F,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;AAC/C,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;AACvF,YAAA,IAAI,CAAC,OAAO,GAAG,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,YAAY,EAAE;QAClG;aAAO;YACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,EAAE,GAAG,KAAK;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;IAGQ,KAAK,CAAC,IAAY,EAAE,EAAU,EAAE,GAAW,EAAE,GAAwB,EAAE,SAAkB,EAAA;AAC/F,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG;kBACN,CAAC,GAAG;AACJ,sBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG;AACd,sBAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG;AAClC,kBAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GA5MW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAb,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxFnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4wEAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA5F9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,cACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4wEAAA,CAAA,EAAA;sHAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEY,OAAO,EAAA,CAAA;sBAAnB;gBAOQ,cAAc,EAAA,CAAA;sBAAtB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAE2B,KAAK,EAAA,CAAA;sBAAhC,SAAS;uBAAC,OAAO;;;AC9LpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmFA;AACA,SAAS,KAAK,CAAC,GAAW,EAAE,SAAkB,EAAA;AAC5C,IAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;;AAE3C,IAAA,IAAI,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,IAAI,CAAC,GAAG,EAAE;IACxE,MAAM,GAAG,GAAW,EAAE;AACtB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACtC,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM;AAAE,YAAA,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;;AACxE,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACzC;AACA,IAAA,OAAO,GAAG;AACZ;AAEA,MAAM,KAAK,GAAG,CAAC,IAAY,KACzB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;MA+HhD,mBAAmB,CAAA;;AAiB9B,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,SAAS;IACvB;AAMA,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;QAxB3B,IAAA,CAAA,KAAK,GAAiB,EAAE;;QAIxB,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,SAAS,GAAG,EAAE;AAEb,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;AACrC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAU;AAClC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA2C;;AAExE,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAmC;;AAE9D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAgB;;QAQxD,IAAA,CAAA,KAAK,GAAe,EAAE;IAGuC;AAE7D,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC9B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE;IACnC;;IAGQ,IAAI,GAAA;AACV,QAAA,MAAM,IAAI,GAAe,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACtD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,EAAE;gBACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACnC;YACA,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9D,gBAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC;AAC/D,gBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC7B;AACA,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,YAAY,EAAE;IACrB;AAEQ,IAAA,KAAK,CAAC,IAAgB,EAAE,KAAa,EAAE,KAAa,EAAA;QAC1D,OAAO;YACL,IAAI;YACJ,KAAK;YACL,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,KAAK;AACrB,YAAA,YAAY,EAAE,KAAK;AACnB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,CAAC;SACX;IACH;AAEA,IAAA,MAAM,CAAC,CAAW,EAAA;AAChB,QAAA,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG;IACzB;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACvB;AAEA,IAAA,UAAU,CAAC,IAAgB,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM;AAClC,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1E;AAEA,IAAA,SAAS,CAAC,IAAgB,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE;IAC3B;IAEA,KAAK,CAAC,IAAgB,EAAE,CAAS,EAAA;QAC/B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,OAAA,EAAU,CAAC,EAAE;IACpF;;IAGA,IAAI,CAAC,CAAW,EAAE,CAAS,EAAA;AACzB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;AACnC,QAAA,CAAC,CAAC,GAAG,GAAG,IAAI;QACZ,IAAI,IAAI,KAAK,IAAI;AAAE,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;IACtC;IAEA,IAAI,CAAC,CAAW,EAAE,CAAiB,EAAA;AACjC,QAAA,MAAM,IAAI,GAAiB,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC;AACpD,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACxD;AAEA,IAAA,IAAI,CAAC,CAAW,EAAA;AACd,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACpC,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE;AAC3D,YAAA,KAAK,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QAChE;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AACjD,QAAA,CAAC,CAAC,MAAM,GAAG,IAAI;QACf,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IACxE;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CACtE;AACD,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACpD,YAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,MAAK;gBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACvB,oBAAA,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,wBAAA,CAAC,CAAC,OAAO,IAAI,CAAC;AACpF,gBAAA,CAAC,CAAC;YACJ,CAAC,EAAE,IAAI,CAAC;QACV;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACjC,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;+GAtIW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxHpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,80OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtHS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyHd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA7H/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,80OAAA,CAAA,EAAA;sFAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBACS,KAAK,EAAA,CAAA;sBAAd;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;;;ACxPH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA4CA,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;MA2HR,sBAAsB,CAAA;;IAMjC,IAAa,KAAK,CAAC,KAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,KAAK,SAAS;QAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AACjD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,IAAI,IAAI,CAAC,KAAK;AAAE,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACjC;IACF;;IAWA,IAAa,IAAI,CAAC,KAA0B,EAAA;AAC1C,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,KAAK,SAAS;QACzC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;IAC9C;IAuCA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;;QAjEK,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,MAAM,GAAkB,EAAE;;AAW5C,QAAA,IAAA,CAAA,MAAM,GAA8B,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;;AAE7D,QAAA,IAAA,CAAA,YAAY,GAA+B,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM;;QAIvG,IAAA,CAAA,UAAU,GAAG,KAAK;QAMlB,IAAA,CAAA,WAAW,GAAG,KAAK;AAElB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAKzC,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,CAAC,GAAG,CAAC;AACd,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAEpD,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,MAAM,GAAG,CAAC;QACV,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACpB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,IAAI,GAAkB,IAAI;QAC1B,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,KAAK,GAAuE,IAAI;QAChF,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QAEb,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,QAAQ,GAAG,kBAAkB;QAC7B,IAAA,CAAA,MAAM,GAAG,KAAK;QAEN,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,eAAe,GAAG,KAAK;QACvB,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,GAAG,GAAY,EAAE;QACjB,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAK1B;AAEH;AAC2E;AAC3E,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,gBAAgB;IAC9B;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E;;AAGA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAClE;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;kBAChB,IAAI,CAAC;AACP,kBAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE;QACpD;QACA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,IAAI,EAAE;AACpD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC/B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;IACzC;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO;YAAE;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACjB;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B;IAEA,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,UAAU;YAAE;AACrB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,OAAO,EAAE;QAChB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEQ,QAAQ,GAAA;QACd,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,iBAAiB;QAC7C,OAAO,IAAI,CAAC,KAAK,GAAG,oBAAoB,GAAG,kBAAkB;IAC/D;;IAGQ,OAAO,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC1B,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ;YAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,GAAG,GAAG,EAAE,CAAC,aAAa,CAAc,uBAAuB,CAAC;QAClE,IAAI,GAAG,EAAE;AACP,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU;AAC9B,YAAA,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW;AAChC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;;;AAIQ,IAAA,IAAI,CAAC,MAAe,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY;AAC3B,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AACtD,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAa;YACjC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9C,YAAA,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;YACxC,CAAC;AACF,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACtG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,IAAA,EAAO,CAAC,IAAI,GAAG,EAAE;AACnE,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,MAAM;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC/B,IAAI,CAAC,SAAS,EAAE;AAEhB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;QACtC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AACpB,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;;;AAIA,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC;AACvD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACrI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAC9B,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;QAEvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAK;AAC1C,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClE;AAEQ,IAAA,WAAW,CAAC,EAAU,EAAA;AAC5B,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,YAAY;YAAE;AAC9B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,YAAY,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,IAAI,CAAC,CAAe,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC5D,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC;QAC/C,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;gBAAE,IAAI,GAAG,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG;YACX,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK;YAC1B,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM;YAC3B,CAAC,EAAE,IAAI,CAAC,CAAC;SACV;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,KAAK,CAAC,IAAY,EAAE,EAAU,EAAE,GAAW,EAAE,GAAwB,EAAA;AAC3E,QAAA,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,GAAG,CAAC,EAAE,CAAC;AACP,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;AAClD,YAAA,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAlQW,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA7GvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0gNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3GS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA8Gd,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAlHlC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0gNAAA,CAAA,EAAA;sHAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEZ,KAAK,EAAA,CAAA;sBAAjB;gBAOQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEY,IAAI,EAAA,CAAA;sBAAhB;gBAIQ,WAAW,EAAA,CAAA;sBAAnB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAE2B,OAAO,EAAA,CAAA;sBAAlC,SAAS;uBAAC,OAAO;gBACQ,KAAK,EAAA,CAAA;sBAA9B,SAAS;uBAAC,KAAK;;;AClNlB;AACA;AACA;AACA;AACA;AACA;AACA;AAmBA,IAAI,SAAS,GAAG,CAAC;AAEjB;MA6Ca,cAAc,CAAA;AA5C3B,IAAA,WAAA,GAAA;AA6CW,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtC,IAAA,CAAA,IAAI,GAAG,KAAK;;QAEZ,IAAA,CAAA,IAAI,GAAuB,IAAI;;QAE/B,IAAA,CAAA,SAAS,GAAG,KAAK;;QAEjB,IAAA,CAAA,oBAAoB,GAAG,KAAK;;QAI5B,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAEf,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,SAAS,GAAG,EAAE;;AAGb,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;QAIlC,IAAA,CAAA,QAAQ,GAAuB,IAAI;QACnC,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,MAAM,GAAG,KAAK;AAmEvB,IAAA;AAhEC,IAAA,QAAQ,CAAC,CAAgB,EAAA;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;QAChB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE;QACtB,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,EAAE;;YACrB,IAAI,CAAC,MAAM,EAAE;IACpB;IAEQ,IAAI,GAAA;QACV,IAAI,IAAI,CAAC,MAAM;YAAE;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAmC;AAC5D,QAAA,SAAS,EAAE;QACX,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;QAChD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;;QAEvC,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;YACpC,MAAM,SAAS,GAAG,EAAE,EAAE,aAAa,CACjC,0EAA0E,CAC3E;AACD,YAAA,CAAC,SAAS,IAAI,EAAE,GAAG,KAAK,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACtC,IAAI,SAAS,KAAK,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY;AACrE,QAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI;IAC1B;AAEA,IAAA,UAAU,CAAC,CAAa,EAAA;QACtB,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IACnF;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AACpC,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACtB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CACvC,0IAA0I,CAC3I,CACF,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,IAAI,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;AACnB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa;QACrC,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,EAAE;YAClC,CAAC,CAAC,cAAc,EAAE;YAClB,IAAI,CAAC,KAAK,EAAE;QACd;aAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;YACzC,CAAC,CAAC,cAAc,EAAE;YAClB,KAAK,CAAC,KAAK,EAAE;QACf;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,MAAM,EAAE;IACf;+GA5FW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvCf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,gyDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArCS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAwCd,cAAc,EAAA,UAAA,EAAA,CAAA;kBA5C1B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,gyDAAA,CAAA,EAAA;8BAOQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,oBAAoB,EAAA,CAAA;sBAA5B;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,KAAK,EAAA,CAAA;sBAAd;gBAEmB,KAAK,EAAA,CAAA;sBAAxB,SAAS;uBAAC,OAAO;gBAOlB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,yBAAyB,EAAE,CAAC,QAAQ,CAAC;;;ACpGrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgEA,MAAM,OAAO,GAAqB;AAChC,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE;AACjD,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,EAAE;AACpD,IAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,0BAA0B,EAAE;AACvD,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,EAAE;CACvD;AAED;MA4Ja,oBAAoB,CAAA;AA3JjC,IAAA,WAAA,GAAA;;QA6JW,IAAA,CAAA,MAAM,GAAkB,EAAE;;QAK1B,IAAA,CAAA,OAAO,GAAqB,OAAO;;QAInC,IAAA,CAAA,UAAU,GAAsB,IAAI;;QAEpC,IAAA,CAAA,IAAI,GAAG,EAAE;;QAET,IAAA,CAAA,KAAK,GAAG,qBAAqB;QAG7B,IAAA,CAAA,WAAW,GAAG,IAAI;;AAGjB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;AACxC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;AAMjC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;AAG7C,QAAA,IAAA,CAAA,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;QAGvB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,SAAS,GAAG,IAAI;QACxB,IAAA,CAAA,OAAO,GAAG,KAAK;AA6GE,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,CAAe,KAAU;YACrD,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;YAC1B,IAAI,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE;AACnF,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,QAAA,CAAC;AACF,IAAA;AAhHC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACpE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;QACxF;AACA,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACvE,YAAA,IAAI,CAAC,QAAQ;AACX,gBAAA,IAAI,CAAC,MAAM;AACX,oBAAA,IAAI,CAAC,aAAa;AAClB,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK;AACzD,oBAAA,IAAI,CAAC,QAAQ;AACb,oBAAA,EAAE;QACN;QACA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QAChD;IACF;IAEA,eAAe,GAAA;;QAEb,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;IAChE;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;QACjE,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IACpD;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE;IACrE;AAEA,IAAA,OAAO,CAAC,CAAc,EAAA;QACpB,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE;IAC3E;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,EAAE,KAAK,SAAS;YAAE;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAC7C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACpD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,YAAY,EAAE;IACrB;IAEA,UAAU,GAAA;QACR,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5B;AAEQ,IAAA,OAAO,CAAC,CAAU,EAAA;AACxB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO;IAC9B;IAEQ,YAAY,GAAA;QAClB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5F;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;;AAExB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,gBAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBACzD;YACF;AACA,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,gBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AACnB,gBAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAC5D;YACA;QACF;;AAEA,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAA4B;QAC7C,MAAM,GAAG,GAAG,MAAM,EAAE,OAAO,CAAoB,WAAW,CAAC;AAC3D,QAAA,IAAI,CAAC,GAAG;YAAE;QACV,MAAM,IAAI,GAAI,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAA6B,CAAC,CAAC,CAAC,GAAG,CAAC;AAC3G,QAAA,IAAI,CAAC,IAAI;YAAE;QACX,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,gBAAgB,CAAoB,WAAW,CAAC,IAAI,EAAE,CAAC;QAClG,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9B,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;AACjE,QAAA,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACd;+GAjJW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtJrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,g6OAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApJS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuJd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBA3JhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmJT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,g6OAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAE6B,OAAO,EAAA,CAAA;sBAApC,SAAS;uBAAC,SAAS;gBACS,MAAM,EAAA,CAAA;sBAAlC,SAAS;uBAAC,QAAQ;gBACO,GAAG,EAAA,CAAA;sBAA5B,SAAS;uBAAC,KAAK;;;ACrQlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA+BA;MAkJa,uBAAuB,CAAA;AAjJpC,IAAA,WAAA,GAAA;;QAmJW,IAAA,CAAA,KAAK,GAAG,EAAE;;QAIV,IAAA,CAAA,QAAQ,GAAe,OAAO;QAC9B,IAAA,CAAA,MAAM,GAAsB,EAAE;QAI9B,IAAA,CAAA,YAAY,GAAa,EAAE;AAC1B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAY;;QAG3C,IAAA,CAAA,SAAS,GAAa,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC;;AAEtD,QAAA,IAAA,CAAA,eAAe,GAA2B;AACjD,YAAA,WAAW,EAAE,wBAAwB;AACrC,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,MAAM,EAAE,qBAAqB;SAC9B;AAGS,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;QAI5C,IAAA,CAAA,aAAa,GAAqB,QAAQ;AACzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAoB;;AAGnD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAwC;AACrE,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAQ;;AAEvC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;;AAEtC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;;QAOrC,IAAA,CAAA,OAAO,GAAG,KAAK;;QAIf,IAAA,CAAA,QAAQ,GAAG,KAAK;;QAEhB,IAAA,CAAA,YAAY,GAAG,SAAS;;QAExB,IAAA,CAAA,aAAa,GAAG,mCAAmC;;QAGnD,IAAA,CAAA,IAAI,GAAG,IAAI;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,WAAW,GAAa,EAAE;QAE1B,IAAA,CAAA,WAAW,GAAqB,QAAQ;QAEhD,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAEf,IAAA,CAAA,OAAO,GAAG,KAAK;;QAEf,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,OAAO,GAAG,CAAC;;QAEX,IAAA,CAAA,IAAI,GAAkB,IAAI;AAyG3B,IAAA;AAtGC,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACnF,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;QAC3C;QACA,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AACzD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;QACvC;IACF;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;IACvF;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;IAC1F;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;IACxC;AAEA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;IAC3B;;AAGA,IAAA,QAAQ,CAAC,CAAS,EAAA;AAChB,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE;IAC3D;AACA,IAAA,OAAO,CAAC,CAAS,EAAA;AACf,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE;IAClE;AAEQ,IAAA,SAAS,CAAC,IAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AACQ,IAAA,SAAS,CAAC,CAAmB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;AACnC,cAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG;AACrC,cAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ;IAChC;AAEA,IAAA,YAAY,CAAC,CAAS,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AAClD,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;IAEQ,IAAI,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;IACvC;AAEA,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE;AAC7B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;;AAE/D,QAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACvE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC3B;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAC1B,MAAK;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACxB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACzB,QAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;IACH;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;+GAhLW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5IxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,y7LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1IS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Id,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjJnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,y7LAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,eAAe,EAAA,CAAA;sBAAvB;gBAKQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBAGQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;;;ACrPH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgCA,MAAM,IAAI,GAA8B;AACtC,IAAA,MAAM,EAAE,yBAAyB;AACjC,IAAA,OAAO,EAAE,2BAA2B;AACpC,IAAA,IAAI,EAAE,EAAE;CACT;AAED,IAAI,KAAK,GAAG,CAAC;MA4FA,mBAAmB,CAAA;AA1FhC,IAAA,WAAA,GAAA;QA0GU,IAAA,CAAA,MAAM,GAAc,QAAQ;QAqC5B,IAAA,CAAA,KAAK,GAAqB,EAAE;QAC5B,IAAA,CAAA,WAAW,GAAG,KAAK;QAYnB,IAAA,CAAA,OAAO,GAAG,KAAK;;QAGd,IAAA,CAAA,IAAI,GAAG,IAAI;;AAMV,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAoB;AAClD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAQ;AACzC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAQ;AAI9B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;AAGrC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAkB;;AAE5C,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAU;AACnB,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,GAAG,EAAU;;AAEjC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAU;QACtC,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,SAAS,GAAG,EAAE;QACN,IAAA,CAAA,OAAO,GAAkB,IAAI;QAC7B,IAAA,CAAA,MAAM,GAAG,KAAK;AAsJvB,IAAA;;IA/OC,IACI,KAAK,CAAC,KAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,WAAW,EAAE;IACpB;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;IACpB;;IAIA,IACI,MAAM,CAAC,KAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,aAAa,EAAE;IACtB;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO;IACrB;;IAIA,IACI,IAAI,CAAC,KAAyB,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,WAAW,EAAE;IACpB;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;;IAIA,IACI,KAAK,CAAC,KAAmC,EAAA;QAC3C,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;YAClB,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK;IACnB;;IAKA,IACI,YAAY,CAAC,KAAuB,EAAA;QACtC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAkCA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;IAChC;AAEA,IAAA,IAAY,QAAQ,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7C;AAEA,IAAA,GAAG,CAAC,CAAiB,EAAA;QACnB,IAAI,CAAC,CAAC,OAAO;AAAE,YAAA,OAAO,GAAG;QACzB,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,gBAAA,CAAC,EAAE;gBACH,IAAI,IAAI,KAAK,CAAC;AAAE,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC;YAClC;QACF;AACA,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC;IAClB;AAEA,IAAA,QAAQ,CAAC,CAAiB,EAAA;AACxB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,UAAU;AACV,YAAA,QAAQ,GAAG,UAAU,GAAG,EAAE;YAC1B,CAAC,CAAC,OAAO,GAAG,QAAQ,GAAG,EAAE;AACzB,YAAA,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAC9B,CAAC,CAAC,MAAM,GAAG,WAAW,GAAG,EAAE;AAC5B;aACE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,GAAG,CAAC;IACd;IAEA,UAAU,CAAC,EAAU,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,KAAK;QACtC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI;IACvD;IAEA,YAAY,CAAC,CAAiB,EAAE,EAAU,EAAA;AACxC,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,aAAa;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IACxD;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;YACrB,CAAC,CAAC,cAAc,EAAE;AACjB,YAAA,CAAC,CAAC,aAA6B,CAAC,IAAI,EAAE;QACzC;IACF;IAEA,MAAM,CAAC,CAAa,EAAE,CAAiB,EAAA;QACrC,MAAM,IAAI,GAAI,CAAC,CAAC,aAA6B,CAAC,WAAW,IAAI,EAAE;AAC/D,QAAA,IAAI,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9E;IACF;AAEA,IAAA,UAAU,CAAC,CAAiB,EAAA;AAC1B,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,EAAE,GAAG,CAAA,IAAA,EAAO,EAAE,KAAK,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,iBAAiB,EAAE;IAC1B;;IAGA,kBAAkB,GAAA;AAChB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,aAAa,CAClD,CAAA,mBAAA,CAAqB,CACtB;AACD,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACjC,QAAA,YAAY,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC;IACvC;IAEQ,MAAM,CAAC,EAAU,EAAE,MAA+B,EAAA;AACxD,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E;AAEQ,IAAA,OAAO,CAAC,IAAsB,EAAA;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACxC,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACpB;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;QAC9B,MAAM,IAAI,GACR,IAAI,CAAC,OAAO,IAAI,CAAA,EAAG,CAAC,CAAA,cAAA,EAAiB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA,IAAA,CAAM;AAC7E,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACvB;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACrB;AAEQ,IAAA,UAAU,CAAC,IAAY,EAAA;AAC7B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO;YAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;QACF;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,UAAU,CACR,MAAK;AACH,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AACpB,QAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;IACH;AAEQ,IAAA,QAAQ,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;YAC3B;QACF;AACA,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AACjD,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;YACrB;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,UAAU,CACR,MAAK;AACH,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,QAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;IACH;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,aAAa,EAAE;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAClD;+GAtPW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArFpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,glMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnFS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAsFd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1F/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,glMAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGhB,IAAI,EAAA,CAAA;sBAAZ;gBAIG,KAAK,EAAA,CAAA;sBADR;gBAYG,MAAM,EAAA,CAAA;sBADT;gBAYG,IAAI,EAAA,CAAA;sBADP;gBAYG,KAAK,EAAA,CAAA;sBADR;gBAiBG,YAAY,EAAA,CAAA;sBADf;gBAYQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBACS,OAAO,EAAA,CAAA;sBAAhB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBACS,IAAI,EAAA,CAAA;sBAAb;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;;AC9NnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA2CA,MAAM,IAAI,GAAkC;AAC1C,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,QAAQ,EAAE,MAAM;CACjB;AACD,MAAM,GAAG,GAA4C;AACnD,IAAA,aAAa,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC;AAC/B,IAAA,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC9B,IAAA,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;AACtB,IAAA,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC3B,IAAA,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B;AACD,MAAMc,KAAG,GAAG,CAAC,CAAS,KAAa,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;AAExE;MAuJa,iBAAiB,CAAA;AAiC5B,IAAA,WAAA,CAA6B,MAA4B,EAAA;QAA5B,IAAA,CAAA,MAAM,GAAN,MAAM;;QA/B1B,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAkB,SAAS;QAChC,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAE1B,IAAA,CAAA,IAAI,GAAG,CAAC;;QAER,IAAA,CAAA,YAAY,GAAG,CAAC;;QAIhB,IAAA,CAAA,KAAK,GAAG,iBAAiB;AAGxB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAQ;AACnC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAClC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;;QAGrC,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,WAAW,GAAG,IAAI;QAClB,IAAA,CAAA,UAAU,GAAG,IAAI;QACjB,IAAA,CAAA,YAAY,GAAG,IAAI;QAE5B,IAAA,CAAA,IAAI,GAAG,EAAE;QACT,IAAA,CAAA,MAAM,GAAG,KAAK;QAId,IAAA,CAAA,QAAQ,GAAG,EAAE;IAE+C;;AAG5D,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC1B;AACA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;IACjE;AACA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,UAAU;IAClC;AACA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,eAAe;IACvC;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACtD;AACA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnC;AACA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACnC;AACA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1C;AACA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,SAAS;AACvD,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;AAClB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAChB,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,mBAAmB;AACxC,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,kBAAkB,EAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,EAAE;AACtE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;AAAE,YAAA,OAAO,kBAAkB,EAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,EAAE;QACrE,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAA,IAAA,EAAO,CAAC,CAAA,WAAA,CAAa;AAC3C,QAAA,OAAO,QAAQ,EAAE,GAAG,CAAC,CAAA,IAAA,EAAO,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE;IAClE;AACA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YACzB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE;QACvF,IAAI,IAAI,CAAC,IAAI;YACX,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,EAAE;QAC/F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE;IACrF;;AAGA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI;IACnC;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,GAAG;IACpC;AACA,IAAA,IAAI,CAAC,GAAA;QACH,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IAC3D;AACA,IAAA,IAAI,IAAI,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC;IACpE;AACA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;IACpC;AACA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,CAAC;IAC3C;AACA,IAAA,IAAI,cAAc,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAC1B,QAAA,MAAM,IAAI,GAAG,CAAA,EAAGA,KAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA,IAAA,EAAOA,KAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAA,CAAE,CAAC,IAAI,EAAE;QACjG,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,eAAe,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,YAAY,EAAE,WAAW,EAAE,CAAC,CAC/F,IAAI,CAAC,IAAI,CACV;QACD,OAAO,IAAI,GAAG,IAAI;IACpB;AAEA,IAAA,OAAO,CAAC,CAAS,EAAA;QACf,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,CAAC;QACtC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC,GAAG;AAC/C,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;AACZ,QAAA,OAAOA,KAAG,CAAC,CAAC,CAAC;IACf;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClC;QACF;AACA,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK,EAAE;AAC/C,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;;AAErB,YAAA,MAAM,GAAG,GAAkC;AACzC,gBAAA,aAAa,EAAE,UAAU;AACzB,gBAAA,OAAO,EAAE,SAAS;AAClB,gBAAA,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA,SAAA,EAAY,IAAI,CAAC,KAAK,CAAA,CAAE;AAClD,gBAAA,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC,KAAK;aAChC;AACD,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;;AAEhE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CACxB,MAAK;AACH,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACrB,YAAA,CAAC,EACD,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAC/B;QACH;IACF;IAEA,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7B;+GAhKW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAd,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjJlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q1HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/IS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkJd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtJ7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,q1HAAA,CAAA,EAAA;sFAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBACS,QAAQ,EAAA,CAAA;sBAAjB;gBACS,OAAO,EAAA,CAAA;sBAAhB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;;;ACjPH;AACA;AACA;AACA;AACA;AACA;AACA;AAmDA,MAAM,cAAc,GAAkC;AACpD,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,IAAI,EAAE,oBAAoB;AAC1B,IAAA,GAAG,EAAE,YAAY;AACjB,IAAA,SAAS,EAAE,uBAAuB;AAClC,IAAA,UAAU,EAAE,4BAA4B;AACxC,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,MAAM,EAAE,QAAQ;CACjB;AAED,MAAM,GAAG,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAKzE;AACA,MAAM,KAAK,GAAG,CAAC,CAAS,KACtB;KACG,KAAK,CAAC,WAAW;KACjB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE;AACtB,KAAA,GAAG,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAe9E;;;;AAIG;MAkIU,sBAAsB,CAAA;AAjInC,IAAA,WAAA,GAAA;;QAmIW,IAAA,CAAA,OAAO,GAAkB,EAAE;;QAE3B,IAAA,CAAA,KAAK,GAAG,gBAAgB;QAKxB,IAAA,CAAA,WAAW,GAAkB,IAAI;QAGjC,IAAA,CAAA,aAAa,GAA2B,EAAE;;QAE1C,IAAA,CAAA,MAAM,GAAwB,EAAE;;AAI/B,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAiB;;AAE9C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAA0B;;AAEzD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAyE;AACrG,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAI3B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;AAG7C,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACrD,IAAA,CAAA,GAAG,GAAG,GAAG;;QAGV,IAAA,CAAA,KAAK,GAAkB,IAAI;QACnC,IAAA,CAAA,IAAI,GAA2B,EAAE;QACjC,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,QAAQ,GAAkB,IAAI;AAiI/B,IAAA;AA9HC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,EAAE;YAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;QACrE;QACA,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE;QACxD;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IACpD;AAEA,IAAA,IAAI,CAAC,GAAA;QACH,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC9C;;AAGA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;AAC3D,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IAC9C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;IACjD;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAClB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;AACxB,aAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO;aAClC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAClB,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE;;QAEjB,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACvE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AAC3B,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC;AACzD,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,MAAM,CAAC,CAAO,EAAA;QACZ,OAAO,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IAC/B;AAEA,IAAA,KAAK,CAAC,CAAc,EAAA;AAClB,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM;QACtC,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAA,CAAE;IACzD;;AAGA,IAAA,WAAW,CAAC,GAAW,EAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;QAClB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE;IACzD;AAEA,IAAA,KAAK,CAAC,GAAW,EAAA;QACf,OAAO,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;IAC7C;AAEA,IAAA,EAAE,CAAC,EAAiB,EAAA;AAClB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B;IAEA,MAAM,CAAC,GAAW,EAAE,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACrD;AAEQ,IAAA,OAAO,CAAC,IAA4B,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,UAAU,CAAC,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG;IACpD;IAEA,MAAM,CAAC,GAAW,EAAE,KAAa,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,aAAa,GAAA;QACnB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAC5F;;IAGA,GAAG,GAAA;AACD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAClB,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AAChB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAS,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACzF,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAClD;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;IACrB;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;;QAExB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;YACvC,CAAC,CAAC,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;IACF;+GAtKW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5HvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kvNAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1HS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Hd,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAjIlC,SAAS;+BACE,mBAAmB,EAAA,UAAA,EACjB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kvNAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBAES,SAAS,EAAA,CAAA;sBAAlB;gBACS,OAAO,EAAA,CAAA;sBAAhB;gBAE0B,IAAI,EAAA,CAAA;sBAA9B,SAAS;uBAAC,MAAM;;;AC5PnB;AACA;AACA;AACA;AACA;AACA;AACA;AAwCA,MAAMF,MAAI,GAAgC;AACxC,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;CACX;MA2DY,uBAAuB,CAAA;AAzDpC,IAAA,WAAA,GAAA;;QA2DW,IAAA,CAAA,QAAQ,GAAc,EAAE;;QAMxB,IAAA,CAAA,YAAY,GAAkB,IAAI;QAElC,IAAA,CAAA,WAAW,GAAG,iCAAiC;;QAG/C,IAAA,CAAA,SAAS,GAAG,mBAAmB;;AAQ9B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAiB;;AAG/C,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAU;;AAGlC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAE3B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,UAAU,GAAG,KAAK;;QAElB,IAAA,CAAA,MAAM,GAAkB,IAAI;;QAE5B,IAAA,CAAA,KAAK,GAA8C,IAAI;;QAEvD,IAAA,CAAA,KAAK,GAAG,CAAC;QAED,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,QAAQ,GAAG,EAAE;AAsGtB,IAAA;;IA/HC,IAAa,SAAS,CAAC,OAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO;IAC3B;AAyBA,IAAA,IAAI,YAAY,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AAC1B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IACnF;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;IACjE;AAEA,IAAA,SAAS,CAAC,IAAkB,EAAA;AAC1B,QAAA,OAAO,IAAI,GAAG,YAAYA,MAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG,GAAG,IAAI;IAChD;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS;YAC1C,IAAI,IAAI,CAAC,UAAU;gBAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QAC3D;AACA,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACvE,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;QACrC;AACA,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACvB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC5D,YAAA,IAAI,GAAG,KAAK,IAAI,CAAC,QAAQ,EAAE;;AAEzB,gBAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;gBACnB,IAAI,CAAC,UAAU,EAAE;gBACjB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/E,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBACtB;YACF;QACF;IACF;AAEA,IAAA,IAAI,CAAC,CAAU,EAAA;AACb,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC;IAEA,IAAI,GAAA;QACF,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC;AAC5D,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;AACpD,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;AAEQ,IAAA,SAAS,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;;AAGQ,IAAA,WAAW,CAAC,KAAoB,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,MAAM,CAAC,GAAG,KAAK,KAAK,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AACnF,QAAA,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;YACd,IAAI,CAAC,UAAU,EAAE;IACxB;AAEQ,IAAA,IAAI,CAAC,CAAU,EAAA;QACrB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;QACd,IAAI,CAAC,QAAQ,EAAE;IACjB;;IAGQ,QAAQ,GAAA;QACd,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;YAAE;AAC7E,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;YACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;YACpC;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,MAAK;AAC3B,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC;YACf,IAAI,CAAC,QAAQ,EAAE;QACjB,CAAC,EAAE,KAAK,CAAC;IACX;IAEQ,UAAU,GAAA;QAChB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;IAChB;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;QACxB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,UAAU,EAAE;IACnB;+GA9IW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mhFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlDS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqDd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAzDnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mhFAAA,CAAA,EAAA;8BAKQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,SAAS,EAAA,CAAA;sBAAjB;gBAGY,SAAS,EAAA,CAAA;sBAArB;gBAKS,WAAW,EAAA,CAAA;sBAApB;gBAGS,KAAK,EAAA,CAAA;sBAAd;gBAGS,OAAO,EAAA,CAAA;sBAAhB;;;AC7IH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6CA,MAAM,KAAK,GAAG,CAAC;MAwGF,qBAAqB,CAAA;AAtGlC,IAAA,WAAA,GAAA;;QA4GW,IAAA,CAAA,IAAI,GAAe,OAAO;;QAIR,IAAA,CAAA,OAAO,GAAqB,EAAE;;QAIhD,IAAA,CAAA,YAAY,GAAG,CAAC;AACf,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAGzC,IAAA,CAAA,WAAW,GAAG,KAAK;AAClB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAGzC,IAAA,CAAA,aAAa,GAAmB,MAAM;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAkB;;AAEjD,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAA6C;AACxE,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAQ;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;;QAElC,IAAA,CAAA,aAAa,GAAG,SAAS;;QAEzB,IAAA,CAAA,cAAc,GAAG,mDAAmD;QACpE,IAAA,CAAA,eAAe,GAAG,YAAY;;QAE9B,IAAA,CAAA,IAAI,GAAG,IAAI;AAEH,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE7C,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;;QAGxD,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,UAAU,GAAmB,MAAM;;QAG3C,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,MAAM,GAAG,KAAK;QACN,IAAA,CAAA,KAAK,GAAG,KAAK;AA8GtB,IAAA;AA1GC,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;IACpC;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpC;AACA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;IACvC;AACA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY;QAC1F,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW;QACxF,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa;;AAE/F,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,IAAI,CAAC,CAAC;IACvG;IAEA,eAAe,GAAA;;AAEb,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,IAAI,CAAC,CAAC;QAC3C,CAAC,EAAE,KAAK,CAAC;IACX;;IAGA,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS;QAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAClE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACxB;;IAGA,MAAM,GAAA;AACJ,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;QACpB,MAAM,GAAG,GAAkD,EAAE;QAC7D,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC5B,IAAI,CAAC,KAAK,GAAG;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;AAClD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC;AAC/C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,UAAU,IAAI,CAAC,CAAC;IAC3D;IAEA,UAAU,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAClD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACnD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;AACzB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3D;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;IACvB;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACpB;AAEQ,IAAA,QAAQ,CAAC,CAAiB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B;;AAGQ,IAAA,OAAO,CAAC,MAAc,EAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtD,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,OAAO,qBAAqB,KAAK,UAAU,EAAE;AACvE,YAAA,IAAI,CAAC,IAAI,GAAG,MAAM;YAClB;QACF;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;AAC3B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC;AAC1C,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK;YAC1C,IAAI,CAAC,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACxD,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,IAAI,CAAC;IAC7C;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;QAClD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;IACxD;+GA7JW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjGtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ygHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/FS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkGd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtGjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ygHAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAE0B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;gBACS,SAAS,EAAA,CAAA;sBAAlB;gBACS,MAAM,EAAA,CAAA;sBAAf;gBAEQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;;;ACjMH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAkKa,mBAAmB,CAAA;AArHhC,IAAA,WAAA,GAAA;;QAuH6B,IAAA,CAAA,IAAI,GAAgB,EAAE;QACxC,IAAA,CAAA,KAAK,GAAG,aAAa;;AAGrB,QAAA,IAAA,CAAA,YAAY,GAAqB,CAAC,UAAU,EAAE,UAAU,CAAC;;QAEzD,IAAA,CAAA,SAAS,GAAG,EAAE;AASN,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACrC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;QAEvC,IAAA,CAAA,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;;QAG9D,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,CAAC,GAAG,CAAC;QACG,IAAA,CAAA,IAAI,GAAG,EAAE;;QAEjB,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,GAAG,GAAG,CAAC;;QAEP,IAAA,CAAA,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;QAC9B,IAAA,CAAA,GAAG,GAAG,CAAC,CAAC;QACA,IAAA,CAAA,OAAO,GAAG,CAAC;AAGX,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AACjD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;QACxB,IAAA,CAAA,IAAI,GAAG,IAAI;QAoGX,IAAA,CAAA,QAAQ,GAA2B,EAAE;AAyI9C,IAAA;AA3OC,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;IACzB;AACA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC;IACnB;AACA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC;IACnB;AACA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7E;AACA,IAAA,IAAY,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG;IACnC;AAEA,IAAA,GAAG,CAAC,CAAS,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;AAEQ,IAAA,IAAI,CAAC,CAAuB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE;IAEA,WAAW,GAAA;QACT,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAC/B,OAAO,CAAA,kBAAA,EAAqB,CAAC,CAAA,EAAA,EAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,iBAAA,CAAmB;IAChG;AAEQ,IAAA,GAAG,CAAC,CAAS,EAAA;QACnB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAClD;IAEA,EAAE,CAAC,CAAS,EAAE,CAAS,EAAA;QACrB,OAAO;YACL,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;YACvD,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;SACxD;IACH;AAEA,IAAA,KAAK,CAAC,CAAS,EAAA;QACb,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC;IACxB;AAEA,IAAA,UAAU,CAAC,CAAS,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAA,EAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACnF;AAEQ,IAAA,IAAI,CAAC,CAA2B,EAAA;QACtC,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACZ,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC9C,QAAA,CAAC;aACA,IAAI,CAAC,GAAG,CAAC;IACd;IAEA,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;IACrC;IACA,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;IAC9C;;AAGA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACvB,YAAA,MAAM,IAAI,GAAoB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;AAC3E,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;AACtC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3B,YAAA,MAAM,CAAC,GAAG,EAAE,EAAE,WAAW,IAAI,CAAC;AAC9B,YAAA,MAAM,CAAC,GAAG,EAAE,EAAE,YAAY,IAAI,CAAC;YAC/B,OAAO;AACL,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,IAAI,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAChD,gBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ;AAC3B,gBAAA,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;gBAC9B,IAAI;gBACJ,IAAI,EAAE,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;AACzD,gBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAC1D,gBAAA,QAAQ,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACrC,gBAAA,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG;gBACnB,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI;aAC5C;AACH,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,QAAQ;IACtB;AAIA,IAAA,OAAO,CAAC,CAAW,EAAA;AACjB,QAAA,QACE,eAAe;AACf,YAAA,CAAC,CAAC,IAAI;aACL,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;AACvB,aAAC,CAAC,CAAC,KAAK,GAAG,SAAS,GAAG,EAAE,CAAC;IAE9B;AAEA,IAAA,OAAO,CAAC,CAAW,EAAA;QACjB,OAAO,CAAA,EAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA,EAAA,EAAK,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAE;IACvJ;IAEA,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;IACnD;AAEA,IAAA,MAAM,CAAC,CAAiB,EAAA;AACtB,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK;AACtC,QAAA,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAE;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;IAC5C;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;AACZ,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;IACd;IAEA,KAAK,CAAC,CAAe,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC;IAC7C;AAEA,IAAA,KAAK,CAAC,CAAS,EAAA;AACb,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;IAClB;IAEA,KAAK,GAAA;AACH,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;QACpC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC/D;AAEA,IAAA,QAAQ,CAAC,CAAa,EAAA;AACpB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;QACpC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAChE;AAEA,IAAA,IAAI,CAAC,CAAgB,EAAA;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO;QACtB,MAAM,EAAE,GACN,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAIlG,CAAC,CAAC,CAAC,GAAG,CAAC;QACR,IAAI,EAAE,IAAI,IAAI;YAAE;QAChB,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IAC3B;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,IAAI,CAAC,aAAa,EAAE;QACpB,MAAM,OAAO,GAAG,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,CAAC,EACD,GAAG,IAAI,CAAC;AACL,iBAAA,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;iBAC5D,GAAG,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,WAAW,CAAC,CAC9B;AACD,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW;AACvB,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC;AACD,QAAA,OAAO,EAAE;AACT,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,MAAM,OAAO,EAAE,CAAC;AAC7C,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;;QAGnB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAK;YACjB,IAAI,CAAC,IAAI,CAAC,IAAI;gBAAE;YAChB,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,MAAK;AAC/D,gBAAA,IAAI,CAAC,QAAQ,CAAC,MAAK;oBACjB,IAAI,CAAC,IAAI,CAAC,IAAI;wBAAE;AAChB,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;oBAChF,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;gBAClD,CAAC,EAAE,GAAG,CAAC;AACT,YAAA,CAAC,CAAC;QACJ,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,YAAY,CAAC,CAAC;IAC5E;AAEQ,IAAA,KAAK,CAAC,EAAU,EAAE,IAAyB,EAAE,MAAe,EAAA;AAClE,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,GAAG,KAAI;AAC/B,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAS,KAAI;gBACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AACxB,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,oBAAA,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;AACnC,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB;;AAAO,oBAAA,GAAG,EAAE;AACd,YAAA,CAAC;AACD,YAAA,MAAM,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,QAAA,CAAC,CAAC;IACJ;IAEQ,QAAQ,CAAC,EAAc,EAAE,EAAU,EAAA;AACzC,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,YAAA,EAAE,EAAE;QACN,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AACjB,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;IACnB;+GAlRW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhHpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6GT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,4hIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9GS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiHd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArH/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6GT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,4hIAAA,CAAA,EAAA;8BAK0B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAE2C,KAAK,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;;;AC9LpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkCA,MAAMiB,KAAG,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;AAC5F,MAAM,EAAE,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;MA8HtC,oBAAoB,CAAA;;IAS/B,IAAa,KAAK,CAAC,KAAyB,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AACjD,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,KAAK,EAAE;YACd;QACF;IACF;AAwBA,IAAA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EACtB,IAA6B,EAAA;QAF7B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;;QA3CI,IAAA,CAAA,KAAK,GAAiB,EAAE;QAC1C,IAAA,CAAA,KAAK,GAAG,aAAa;;AAkBpB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAElD,IAAA,CAAA,KAAK,GAAe,EAAE;QACtB,IAAA,CAAA,KAAK,GAAG,EAAE;QACV,IAAA,CAAA,KAAK,GAAG,CAAC,CAAC;QACV,IAAA,CAAA,OAAO,GAAG,EAAE;QAEZ,IAAA,CAAA,OAAO,GAAG,IAAI;QACd,IAAA,CAAA,QAAQ,GAAG,YAAY;QACvB,IAAA,CAAA,WAAW,GAAG,KAAK;QACnB,IAAA,CAAA,OAAO,GAAG,EAAE;QACZ,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QAEL,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,MAAM,GAAa,EAAE;QACrB,IAAA,CAAA,MAAM,GAAoC,EAAE;IAMjD;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE;AAC3C,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;QACrD;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC;IACrC;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO;YAAE;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YACpB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,KAAK,EAAE;QACd;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9B;IAEA,cAAc,CAAC,KAAa,EAAE,CAAe,EAAA;AAC3C,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IACrD;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC1F,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnB;IACF;IAEA,iBAAiB,GAAA;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AAC1F,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnB;IACF;AAEA,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;YAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEQ,IAAA,KAAK,CAAC,CAAa,EAAA;AACzB,QAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;IAC1C;IAEQ,OAAO,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3F;;IAGQ,KAAK,CAAC,OAAO,GAAG,KAAK,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;;;AAG3B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;AACtC,YAAA,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;AAE1B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;YAC5C,OAAO;gBACL,IAAI;AACJ,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAIA,KAAG,CAAC,CAAC,GAAGA,KAAG,CAAC,MAAM,CAAC;gBACxC,MAAM;AACN,gBAAA,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC,GAAG,CAAC;;gBAEV,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,CAAA,IAAA,CAAM;gBACzD,MAAM,EAAE,CAAA,EAAG,GAAG,CAAA,IAAA,CAAM;;gBAEpB,OAAO,EAAE,CAAA,EAAG,GAAG,CAAA,IAAA,CAAM;AACrB,gBAAA,SAAS,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC;AACvB,gBAAA,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBACzC,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM;gBACpC,QAAQ,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM;AACpC,gBAAA,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;gBACjB,QAAQ,EAAE,CAAC,IAAI,CAAC;gBAChB,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,IAAI,CAAA,CAAE;gBACvG,QAAQ,EAAE,IAAI,CAAC,KAAK;aACrB;AACH,QAAA,CAAC,CAAC;QAEF,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAA,EAAG,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAC,MAAM,YAAY;QACvE,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACrB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC1E;AACA,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGQ,IAAA,MAAM,CAAC,OAAgB,EAAA;AAC7B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;AACjG,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;AAC/E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,MAAM;QACnB,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACrC,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;AACzB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;;AAGQ,IAAA,IAAI,CAAC,GAA4B,EAAE,KAAa,EAAE,GAA0B,EAAA;AAClF,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACzB,GAAG,CAAC,KAAK,CAAC;YACV;QACF;QACA,GAAG,CAAC,IAAI,CAAC;AACT,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;YACd,GAAG,CAAC,KAAK,CAAC;YACV,GAAG,CAAC,KAAK,CAAC;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;QACvF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvE,QAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS;QACtC,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GA7MW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnGrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,w/GAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAvGhC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,cACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,w/GAAA,CAAA,EAAA;+IAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEY,KAAK,EAAA,CAAA;sBAAjB;gBAYS,WAAW,EAAA,CAAA;sBAApB;;;AClMH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA8CA,MAAM,KAAK,GAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC;AACzE,MAAMgB,IAAE,GAA2B,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE;MAyFpE,uBAAuB,CAAA;AA6BlC,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;;QA3B3B,IAAA,CAAA,OAAO,GAAG,KAAK;;QAcf,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAsB;AACnD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;QAG1C,IAAA,CAAA,SAAS,GAAG,IAAI;;QAIhB,IAAA,CAAA,OAAO,GAAG,CAAC;IAG0C;AAE7D,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpC;AAEA,IAAA,IAAY,GAAG,GAAA;QACb,OAAO;AACL,YAAA,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM;AACzB,YAAA,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;AAC3B,YAAA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;AAC/B,YAAA,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;SAC5B;IACH;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;;AAEtF,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM;IAC7E;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC,KAAK;QACjC,OAAO,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA,CAAA,CAAG;IAC/E;AAEA,IAAA,OAAO,CAAC,IAAgB,EAAA;AACtB,QAAA,OAAOA,IAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IACvB;;AAGA,IAAA,MAAM,CAAC,CAAqB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;IAEA,MAAM,GAAA;AACJ,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,SAAS,CAAC,CAAgB,EAAA;QACxB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO;YAAE;QAChF,CAAC,CAAC,cAAc,EAAE;QAClB,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,EAAE;IAC9B;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,YAAY,EAAE;IACrB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,YAAY,EAAE;IACnE;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACxF,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAC1D;aAAO,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;AACrC,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;IACF;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IACzC;+GAtGW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAhB,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlFxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+ET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,88JAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAhFS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAmFd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAvFnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+ET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,88JAAA,CAAA,EAAA;sFAKQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;;;AClKH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MAwFa,yBAAyB,CAAA;AAqCpC,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;;QAjC3B,IAAA,CAAA,QAAQ,GAAa,EAAE;QAGvB,IAAA,CAAA,cAAc,GAAG,CAAC;;QAElB,IAAA,CAAA,SAAS,GAAG,KAAK;;QAEjB,IAAA,CAAA,MAAM,GAAG,EAAE;;QAEX,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,SAAS,GAAG,EAAE;;QAEd,IAAA,CAAA,iBAAiB,GAAG,IAAI;AAEvB,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAU;;AAE1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAQ;;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;QAEvC,IAAA,CAAA,GAAG,GAAG,CAAC;;QAEf,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,GAAG,GAAG,KAAK;QACX,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,IAAI,GAAG,KAAK;QACZ,IAAA,CAAA,MAAM,GAAG,KAAK;QAEN,IAAA,CAAA,UAAU,GAAG,KAAK;IAKmC;AAE7D,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,iBAAiB;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C;;AAGA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;IACnD;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACrE;IAEA,GAAG,GAAA;AACD,QAAA,MAAM,KAAK,GAAG,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;QACtC,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AAC9C,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACxB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS;AAC5C,YAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO;QACzD;AACA,QAAA,IAAI,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC/E,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc;QAChC;;AAEA,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,EAAE;IAC/C;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE;AACtB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CACxB,MAAK;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS;AAC3B,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAClB,QAAA,CAAC,EACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAChC;IACH;AAEA,IAAA,EAAE,CAAC,CAAS,EAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACrC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,EAAE;IAClE;IAEA,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,SAAS;YAAE;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AACvF,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE;IAC7B;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE;QACtC,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,EAAE;AAC3D,YAAA,KAAK,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC;QAC9D;AACA,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAClB,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAChD,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5F;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD;+GA3HW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+sEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqEd,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAzErC,SAAS;+BACE,sBAAsB,EAAA,UAAA,EACpB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+sEAAA,CAAA,EAAA;sFAKQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,iBAAiB,EAAA,CAAA;sBAAzB;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBAES,eAAe,EAAA,CAAA;sBAAxB;gBAES,QAAQ,EAAA,CAAA;sBAAjB;;;ACtHH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA0BA,MAAMiB,SAAO,GAAoB;IAC/B,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;AACjD,IAAA,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;AAClC,IAAA,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;CACrC;MA6EY,uBAAuB,CAAA;AAxEpC,IAAA,WAAA,GAAA;;QA0EW,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,IAAI,GAAG,KAAK;;QAEZ,IAAA,CAAA,SAAS,GAAa,EAAE;;QAExB,IAAA,CAAA,QAAQ,GAAkB,IAAI;;QAE9B,IAAA,CAAA,OAAO,GAAoBA,SAAO;;QAQlC,IAAA,CAAA,QAAQ,GAAG,eAAe;;QAE1B,IAAA,CAAA,WAAW,GAAG,IAAI;;AAGjB,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAY;;AAE9C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;;AAElD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAuC;AAMvD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtD,IAAA,CAAA,IAAI,GAAa,EAAE;;QAEnB,IAAA,CAAA,GAAG,GAAkB,IAAI;;QAEzB,IAAA,CAAA,GAAG,GAA0E,IAAI;QACjF,IAAA,CAAA,MAAM,GAAG,kBAAkB;QAC3B,IAAA,CAAA,WAAW,GAAG,kBAAkB;QAChC,IAAA,CAAA,SAAS,GAAG,KAAK;QACjB,IAAA,CAAA,EAAE,GAAkC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;QAE/C,IAAA,CAAA,KAAK,GAAG,KAAK;AACb,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AACxC,QAAA,IAAA,CAAA,MAAM,GAAG,CAAC,CAAe,KAAI;;AAE5C,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AAC3F,QAAA,CAAC;AAoKF,IAAA;AAlKC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI;IAC1B;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,MAAM;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,SAAS;IACtE;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,WAAW,CAAC;YAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;AACzD,QAAA,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,GAAG,EAAE;AACrD,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ;YACxB,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;YACrE,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;QACrD,IAAI,CAAC,aAAa,EAAE;IACtB;;IAGA,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;QACvB,CAAC,EAAE,eAAe,EAAE;QACpB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,CAAC;YAAE;AACxC,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAClC;AAEQ,IAAA,MAAM,CAAC,CAAgB,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC;YAAE;AACpB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,aAAa,EAAE;IACtB;;IAGA,MAAM,OAAO,CAAC,MAAc,EAAA;QAC1B,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI;YAAE;AACpC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;QAC9C,IAAI,CAAC,aAAa,EAAE;AACpB,QAAA,IAAI,GAAW;AACf,QAAA,IAAI;YACF,GAAG,GAAG,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC;QACzE;AAAE,QAAA,MAAM;;AAEN,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;YACf;QACF;QACA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK;YAAE;AAC3C,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACjD,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,MAAM,EAAE;IACf;;IAGA,GAAG,GAAA;AACD,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;YAAE;AACvB,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;;AACrF,YAAA,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C;;AAGA,IAAA,MAAM,CAAC,IAAa,EAAA;AAClB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;QACpB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM;YAAE;QAC3C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QACtC;AACA,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,OAAO,GAAG,kBAAkB,CAAC;IACrD;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACnB;;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACpB;;IAGQ,MAAM,GAAA;QACZ,MAAM,IAAI,GAAG,MAAK;AAChB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;YACpB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM;gBAAE;AAC1C,YAAA,MAAM,CAAC,GAAG,UAAU,CAClB,MAAK;AACH,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,IAAI,CAAC,GAAG;oBAAE;gBACf,IAAI,CAAC,GAAG,GAAG;oBACT,GAAG,IAAI,CAAC,GAAG;AACX,oBAAA,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;iBAC7E;gBACD,IAAI,CAAC,aAAa,EAAE;AACpB,gBAAA,IAAI,EAAE;AACR,YAAA,CAAC,EACD,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CACzB;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACpB,QAAA,CAAC;AACD,QAAA,IAAI,EAAE;IACR;AAEQ,IAAA,SAAS,CAAC,IAAY,EAAA;AAC5B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM;YAAE;AAC1B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;;AAElB,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;YACvB;QACF;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACxB,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;;IAGQ,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;QACjB,qBAAqB,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IAC3C;IAEQ,KAAK,GAAA;AACX,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa;QAClC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI;YAAE;QACtC,MAAM,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAc,WAAW,CAAC;QAC5D,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACtC,QAAA,MAAM,KAAK,GAAG,EAAE,CAAC,cAAc,EAAE;AACjC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACnF,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,YAAY,GAAG,CAAC;AAC9C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE;AAC5B,cAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;cAC5D,CAAC;;QAEL,IAAI,GAAG,GAAG,UAAU;AAAE,YAAA,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QACvE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE;IACzB;IAEA,WAAW,GAAA;QACT,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;AACxD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GAtNW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnExB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kmIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoEd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAxEnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kmIAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAMQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,eAAe,EAAA,CAAA;sBAAxB;gBAES,cAAc,EAAA,CAAA;sBAAvB;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACE,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACC,GAAG,EAAA,CAAA;sBAApB,SAAS;uBAAC,KAAK;;;ACvJlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAsDA,MAAM,IAAI,GAAG,oBAAoB;AACjC,MAAM,KAAK,GAAG,wJAAwJ;AACtK,MAAM,IAAI,GAAG,yJAAyJ;AACtK,MAAM,KAAK,GAAG,MAAM,OAAO,SAAS,KAAK,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC;AAC5H,MAAM,OAAO,GAAG,CAAC,CAAgB,KAAI,EAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAI1H;;;;;AAKiI;AACjI,MAAM,SAAS,CAAA;IASb,WAAA,CAAY,EAAe,EAAE,IAAW,EAAA;QANhC,IAAA,CAAA,IAAI,GAAmB,EAAE;QACzB,IAAA,CAAA,KAAK,GAAkB,IAAI;QAC3B,IAAA,CAAA,IAAI,GAAsD,IAAI;QAC9D,IAAA,CAAA,GAAG,GAAqF,IAAI;QAC5F,IAAA,CAAA,CAAC,GAAG,EAAE,IAAI,EAAE,EAAyD,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAqB,EAAE,CAAC,EAAE,CAAsC,EAAE;AAGzK,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC9B,QAAA,MAAM,EAAE,GAAG,CAAsC,EAA0B,EAAE,EAAc,EAAE,EAAuC,KAAI,EAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjQ,QAAA,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,CAAa,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,EAAE,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,CAAa,KAAI,EAAG,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAwB;QACnK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAiB,KAAI;YACpC,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa;gBAAE;YACtD,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC;AACzF,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE;YAC5F,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE;YAC7D,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjH,QAAA,CAAC,CAAC;QACF,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAiB,KAAI;YAClC,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,aAAa;gBAAE;AAAQ,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBAAE;AACrG,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,EAAE;gBAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;gBAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;YAAE;YACnN,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,QAAA,CAAC,CAAC;AACF,QAAA,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,CAAY,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC;AACzD,QAAA,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAY,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAgB,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAA,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAK;YACnC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,GAAG;gBAAE;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE;AAAE,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAC5H,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI;AACtB,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACrF;;AAGQ,IAAA,KAAK,GAAA,EAAK,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAA,MAAM,CAAC,CAAU,EAAA,EAAY,OAAO,CAAC,CAAC,OAAO,KAAK,IAAI,GAAI,CAAC,CAAC,UAAsB,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,OAAO,KAAK,YAAY,GAAG,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACnK,MAAM,CAAC,CAAc,EAAA,EAAwB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU;QAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAK,CAAa,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,OAAO,CAAgB,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;AAC/L,IAAA,GAAG,CAAC,CAAO,EAAA,EAAI,OAAO,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5D,IAAA,KAAK,KAAK,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,IAAA,OAAO,CAAC,CAAS,EAAA,EAAI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/F,IAAA,MAAM,CAAC,EAAU,EAAA,EAAI,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAAE,QAAA,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC;AAAE,QAAA,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAAE,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvM,IAAA,IAAI,CAAC,CAAS,EAAA,EAAI,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,EAAE,CAAC,CAAc,EAAE,GAAW,EAAA,EAAoB,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAE,CAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU;AAAE,QAAA,IAAK,CAAa,CAAC,OAAO,KAAK,GAAG;AAAE,YAAA,OAAO,CAAY,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;IAC1Q,IAAI,CAAC,CAAO,EAAE,GAAW,EAAE,IAAoB,EAAA,EAAI,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;AAAE,QAAA,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAE,CAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7M,IAAA,MAAM,CAAC,EAAW,EAAA,EAAI,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAExD,QAAQ,CAAC,IAAU,EAAE,GAAW,EAAA;QACtC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,CAAC,EAAE;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAK,KAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAoB,GAAI,KAAiB,CAAC,aAAa,CAAc,IAAI,CAAC,IAAI,IAAI;AAClM,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI,CAAC,KAAK,EAAE;YAC/B,CAAC,GAAG,KAAK;YAAE,IAAI,GAAG,KAAK;YAAE,GAAG,GAAG,CAAC;QAClC;QACA,IAAI,CAAC,GAAG,CAAC;QAAE,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,IAAI,CAAC,KAAK,CAAC;gBAAE;YAAO,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAAE;AACrF,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,QAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC1E,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM;IACjC;AACQ,IAAA,OAAO,CAAC,EAAU,EAAE,IAAI,GAAG,KAAK,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;AACjD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,gBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC;AAAE,gBAAA,IAAI,CAAc,EAAE,IAAI,GAAgB,IAAI;gBAC1G,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAiB,GAAG;oBAAE,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;AAAE,wBAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,oBAAA,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;oBAAE,IAAI,GAAG,CAAC;gBAAE;gBAC5I,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACjD;YACA,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtB;AACA,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACrB;AACA,IAAA,KAAK,CAAC,CAAS,EAAA,EAAI,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAC5K,IAAA,SAAS,CAAC,CAAkB,EAAA;AAClC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,qBAAqB,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,qBAAqB,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,MAAM;YAAE;QACzF,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;aACpG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG;IACtE;;AAGQ,IAAA,IAAI,GAAA,EAAK,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACtM,GAAG,GAAA;AACD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,EAAE;AAAE,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE;AACpK,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAAE;AACxE,QAAA,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;IAC7C;AACA,IAAA,GAAG,CAAC,CAAS,EAAE,KAAK,GAAG,KAAK,EAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAC/B,IAAI,KAAK,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACvF,QAAA,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE;YAAE;AACxC,QAAA,MAAM,CAAC,GAAG,YAAY,EAAE;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;QAAQ,CAAC,CAAC,eAAe,EAAE;QAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1F;;IAGQ,IAAI,GAAA;AACV,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YACvD,IAAI,CAAC,EAAE,CAAC,WAAW;gBAAE;AACrB,YAAA,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;gBAAE,EAAE,CAAC,MAAM,EAAE;gBAAE;YAAU;YAC9C,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD;AACA,QAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE;YACvD,IAAI,CAAC,EAAE,CAAC,WAAW;gBAAE;AACrB,YAAA,SAAS;AACP,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,WAAW;AACvB,gBAAA,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAE,EAAW,CAAC,IAAI,EAAE;oBAAE,MAAM,CAAC,GAAG,EAAE;AAAE,oBAAA,EAAE,GAAG,EAAE,CAAC,WAAW;oBAAE,CAAC,CAAC,MAAM,EAAE;gBAAE;AACvG,gBAAA,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,QAAQ,KAAK,CAAC,IAAK,EAAc,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,IAAK,EAAc,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;oBAAE;gBAC5I,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;gBAAE,EAAE,CAAC,MAAM,EAAE;YAC1C;QACF;QACA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,WAAW;AAAE,gBAAA,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;iBAAO,IAAI,CAAC,EAAE,CAAC,MAAM;gBAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;;AAAO,gBAAA,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAAE;QACvO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;YAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;QAAE;AAC5I,QAAA,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE;IACrB;AACQ,IAAA,OAAO,CAAC,IAAsB,EAAA;AACpC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE;QAAE,IAAI,IAAI,GAAuB,IAAI;QACnF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;AACzB,YAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,KAAK,OAAO,GAAG,YAAY,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;YACrG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;YAC1B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;gBAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAAE;iBACpJ;gBAAE,IAAI,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAAE;QAC5C;AACA,QAAA,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,EAAE;IAC5C;IACQ,MAAM,GAAA,EAAuB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChF,KAAK,GAAA;QACX,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAI,CAAU,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAE,CAAa,CAAC,OAAO,CAAC;AAAE,gBAAA,OAAO,IAAI;AAC3I,YAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,CAAE,CAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAK,CAAa,CAAC,OAAO,KAAK,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;QACnK;QACA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,yFAAyF,CAAC;IAC3H;;IAGQ,KAAK,CAAC,IAAU,EAAE,IAAa,EAAA;QACrC,MAAM,GAAG,GAA4C,EAAE;QAAE,IAAI,GAAG,GAAiD,IAAI;QACrH,MAAM,IAAI,GAAG,CAAC,IAAU,EAAE,CAAS,EAAE,GAAY,EAAE,KAA0B,KAAI;AAC/E,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;AAC/B,gBAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,EAAE;AACpB,oBAAA,MAAM,CAAC,GAAI,CAAU,CAAC,IAAI;AAC1B,oBAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AAC9E,oBAAA,IAAI,CAAC,IAAI;wBAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;oBACnC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,IAAI,KAAK,IAAI,IAAI,yCAAyC,CAAC,IAAI,CAAE,IAAgB,CAAC,OAAO,CAAC,CAAC;wBAAE;AACvH,oBAAA,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACpD,wBAAA,IAAI,CAAC;4BAAE,GAAG,GAAG,IAAI;AACjB,wBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;4BAAE;AACxC,wBAAA,IAAI,CAAC,GAAG;AAAE,4BAAA,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,sBAAsB,EAAE,EAAE,CAAC;wBACxE,IAAI,CAAC,GAAS,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;AACxC,wBAAA,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAAE,4BAAA,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAAE,4BAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,gCAAA,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;AAAE,4BAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;4BAAE,CAAC,GAAG,CAAC;wBAAE;AAC3L,wBAAA,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AACzB,oBAAA,CAAC,CAAC;oBACF;gBACF;AACA,gBAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC;oBAAE;gBACtB,MAAM,EAAE,GAAG,CAAY,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO;AACxC,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAAE;AAC1D,gBAAA,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE;AAC1D,gBAAA,IAAI,EAAE,KAAK,IAAI,EAAE;oBAAE,GAAG,GAAG,IAAI;oBAAE;gBAAU;AACzC,gBAAA,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBAClB,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,YAAY,GAAG,OAAO,GAAG,CAAC;oBAC/J,GAAG,GAAG,IAAI;AAAE,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM;AAClC,oBAAA,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,KAAK,EAAE,KAAK,CAAC;AACxC,oBAAA,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,iDAAiD,CAAC;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,sBAAsB,EAAE,EAAE,CAAC;oBACpK,GAAG,GAAG,IAAI;oBAAE;gBACd;gBACA,IAAI,CAAC,GAAG,KAAK;gBAAE,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,IAAa,KAAI,EAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;AAAE,oBAAA,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvH,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,QAAQ,GAAG,CAAC,oCAAoC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC;AAC5I,gBAAA,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC;AAC9E,gBAAA,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;oBAAE,GAAG,CAAC,MAAM,CAAC;AAChD,gBAAA,IAAI,EAAE,KAAK,GAAG,EAAE;oBAAE,MAAM,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAAE,oBAAA,IAAI,CAAC;AAAE,wBAAA,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;gBAAE;gBAClF,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACrB;AACF,QAAA,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;AAC9B,gBAAA,MAAM,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;AAAE,gBAAA,IAAI,CAAc;AAAE,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAiB;AAAG,oBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5J,gBAAA,IAAI,EAAE,CAAC,MAAM,EAAE;AAAE,oBAAA,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;oBAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBAAE;YACrI;QACA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjH;AACQ,IAAA,KAAK,CAAC,CAAS,EAAA,EAAY,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG,EAAG,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrN,KAAK,GAAA,EAAK,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;IAG9G,OAAO,GAAA,EAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AAClC,IAAA,MAAM,CAAC,GAAY,EAAA;AACzB,QAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI;AACxH,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI;QACvC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;YAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG;AAAE,gBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE;QACrN,IAAI,CAAC,OAAO,EAAE;IAChB;AACA,IAAA,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK;AAAE,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnC,KAAK,CAAC,GAAmB,EAAA,EAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/N,OAAO,CAAC,IAAY,EAAE,GAAkB,IAAI,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjJ,IAAA,IAAI,GAAA,EAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;AAAE,QAAA,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtL,IAAI,GAAA,EAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5J,IAAA,IAAI,CAAC,IAAY,EAAA;QACf,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;AAAE,QAAA,CAAC,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE;AACtE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACxH,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK;AAAE,QAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,OAAO,EAAE;IAC1J;;AAGQ,IAAA,KAAK,GAAA,EAAK,MAAM,GAAG,GAAqB,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,EAAG,IAAI,CAAC;AAAE,QAAA,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAc,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAiB,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAAE,QAAA,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM;IAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;AAC1R,IAAA,GAAG,CAAC,EAAU,EAAA,EAAI,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,CAAC,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;YAAE;AAAQ,QAAA,CAAC,CAAC;AAC5H,IAAA,OAAO,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjK,GAAG,CAAC,GAAW,EAAE,CAAS,EAAA;QAChC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACf,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACpF,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QAC1G;AACA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/F,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D;IACA,MAAM,CAAC,GAAW,EAAE,IAAoB,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAA;QACtD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACf,IAAI,GAAG,KAAK,GAAG;gBAAE;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;AACtE,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,OAAO,EAAE;YAAE;QACxD;QACA,IAAI,CAAC,KAAK,EAAE;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,EAAE,CAAC,MAAM;YAAE;AAC5C,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,SAAS,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChF,QAAA,IAAI,GAAG;YAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG,EAAG,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AAAO,iBAAA,IAAI,IAAI;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;YACvI,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,IAAG;AACtD,gBAAA,IAAI,CAAC,EAAE;oBAAE;gBACT,MAAM,IAAI,GAAW,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC;AAAE,gBAAA,IAAI,CAAc;AACjI,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAiB;AAAG,oBAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,gBAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC1D,YAAA,CAAC,CAAC;QACF,IAAI,CAAC,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C;AACQ,IAAA,UAAU,CAAC,CAAS,EAAA;AAC1B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAK,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AACxD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,WAAW,CAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1H,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,QAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;QACvE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC7C,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC;AAAE,gBAAA,IAAI,CAAC,EAAE;oBAAE;AACrD,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,WAAW,CAAC;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3G,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAAE,gBAAA,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC;AAAE,gBAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC3E;QACA,IAAI,CAAC,GAAS,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;QACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;gBAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;AAAE,gBAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;gBAAE,CAAC,GAAG,CAAC;YAAE;AAClK,QAAA,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClG;IACA,KAAK,CAAC,IAAY,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAA;QAChC,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAClF,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI;AAC/E,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAqB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3H;AACQ,IAAA,GAAG,CAAC,CAAS,EAAA;AACnB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpI,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AAAE,YAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,YAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AAAE,YAAA,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;YAAE,EAAE,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QAAE;AACrJ,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,QAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,cAAc,EAAE;AAC/H,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE;QAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC;QAAE,IAAI,CAAC,cAAc,EAAE;AACxG,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnG,QAAA,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;IAC3B;AACA,IAAA,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAA;QAClB,IAAI,CAAC,KAAK,EAAE;QAAE,MAAM,GAAG,GAAG,CAAC;AAAE,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC;AACjI,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE;QAAQ;AAC9G,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE;QAAQ;QAC1L,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,QAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QACnH,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IAC/G;AACQ,IAAA,QAAQ,CAAC,CAAS,EAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;QACpE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE;QAAQ;AACrG,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtI;AACQ,IAAA,QAAQ,CAAC,CAAS,EAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE;AAC/F,QAAA,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACjH;IACQ,MAAM,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC;AAAG,YAAA,CAAU,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;;AAAO,YAAA,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC5H,IAAI,CAAC,IAAI,EAAE;AAAE,QAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;IACpC;IACQ,WAAW,CAAC,KAAa,EAAE,CAAS,EAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5G,QAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE;AAAE,QAAA,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;AAAE,QAAA,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,EAAE;AAC1H,QAAA,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAoB,EAAG,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtJ,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;QAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAgB,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC;AACxG,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,EAAE;IAC/B;IACA,IAAI,CAAC,CAAS,EAAE,IAAmB,EAAA;QACjC,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE;QAAQ;AAC5L,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QAC5C,IAAI,CAAC,EAAE;AAAE,YAAA,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;AAAE,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE;QAAQ;QAC5E,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnI;;IAGA,OAAO,CAAC,CAAS,EAAE,IAAoB,EAAA;QACrC,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAAE,QAAA,EAAE,CAAC,SAAS,GAAG,YAAY;AAAE,QAAA,EAAE,CAAC,eAAe,GAAG,OAAO;QACpG,MAAM,IAAI,GAAkB,EAAE;AAC9B,QAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC;oBAAE;gBAC7G,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAAE,gBAAA,EAAE,CAAC,SAAS,GAAG,YAAY;gBACjG,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;AAAE,gBAAA,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3E;QACF;QACA,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;;YAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;AACpG,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AAChC,QAAA,OAAO,CAAC,CAAS,KAAI,EAAG,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;YAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAAE,YAAA,CAAC,CAAC,SAAS,GAAG,MAAM;AAAE,YAAA,CAAC,CAAC,WAAW,GAAG,CAAC;AAAE,YAAA,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC,CAAC;IAC5L;AACQ,IAAA,IAAI,GAAA,EAAK,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7J,MAAM,GAAA;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE;AAAE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;QACxF,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG,EAAG,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAClK,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpF,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C;IACA,OAAO,GAAA,EAAK,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,OAAO,GAAA,EAAa,OAAO,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;;AAGlE,IAAA,aAAa,CAAC,CAAa,EAAA;AACjC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS;AACrB,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE;QAAQ;QAC5C,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,aAAa,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,aAAa;gBAAE,IAAI,CAAC,IAAI,EAAE;;gBAAO,IAAI,CAAC,IAAI,EAAE;YAAE;QAAQ;AACtI,QAAA,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,YAAY;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;iBAAO,IAAI,CAAC,KAAK,cAAc;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE;QAAQ;QACrJ,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,iBAAiB,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;YAAE;QAAQ;AACpG,QAAA,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,aAAa;YAAE;AACtG,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE;QAAQ;QAC7I,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE;QAAQ;AAC1I,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE;QAAQ;AACrK,QAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,KAAK,uBAAuB,CAAC,EAAE;YAC5H,CAAC,CAAC,cAAc,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;AAClF,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;AAAE,gBAAA,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACjF,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAAE;QAC9C;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACnC;AACQ,IAAA,MAAM,CAAC,CAAY,EAAA;QACzB,CAAC,CAAC,cAAc,EAAE;AAAE,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY;YAAE;AACrD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;QACnF,MAAM,GAAG,GAAG,QAAuL;QACnM,IAAI,EAAE,GAA0B,IAAI;AACpC,QAAA,IAAI,GAAG,CAAC,sBAAsB,EAAE;AAAE,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,EAAE;gBAAE,EAAE,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC;QAAE;AACnI,aAAA,IAAI,GAAG,CAAC,mBAAmB,EAAE;AAAE,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;AAAE,YAAA,IAAI,CAAC;gBAAE,EAAE,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,WAAW,CAAC;QAAE;AAC5I,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAAE;QACrC,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC1K;AACQ,IAAA,SAAS,CAAC,CAAgB,EAAA;AAChC,QAAA,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YAAE;QACzC,IAAI,IAAI,CAAC,GAAG;YAAE;QACd,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO;AACvE,QAAA,IAAI,CAAC,GAAG;YAAE;AACV,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI;QACzC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;AAC7G,cAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI;AACrL,kBAAE,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI;QAC1L,IAAI,GAAG,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;AAAE,YAAA,GAAG,EAAE;QAAE;IAC7D;;AAGA,IAAA,KAAK,GAAA,EAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACtC,IAAI,GAAA,EAAK,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS,GAAA,EAAK,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,IAAA,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClD,IAAA,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvD,IAAA,KAAK,KAAK,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACjH,KAAK,GAAA,EAAK,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjH,IAAI,CAAC,EAAU,EAAA,EAAY,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3H,KAAK,GAAA;AACH,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QAC1I,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;QAC/F,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE;IACpN;AACA,IAAA,MAAM,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,IAAA,IAAI,CAAC,CAAS,EAAA,EAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7K,IAAA,IAAI,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,IAAA,OAAO,GAAA,EAAK,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAClF;AAED;AACA,MAAM,MAAM,GAA2C;IACrD,yKAAyK,EACvK,EAAE,OAAO,EAAE,+FAA+F,EAAE,OAAO,EAAE,yIAAyI,EAAE;IAClQ,mCAAmC,EAAE,EAAE,OAAO,EAAE,uCAAuC,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACjI,mFAAmF,EAAE,EAAE,OAAO,EAAE,sFAAsF,EAAE,OAAO,EAAE,sEAAsE,EAAE;CAC1Q;AACD,MAAM,IAAI,GAA2B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE;AAChY,MAAM,MAAM,GAAuB,CAAC,CAAC,kGAAkG,EAAE,EAAE,CAAC,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAAC,EAAE,CAAC,wBAAwB,EAAE,SAAS,CAAC,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,EAAE,CAAC,6BAA6B,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAC5X,MAAM,MAAM,GAAuB,CAAC,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC,sBAAsB,EAAE,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;AAC1V;SACgB,SAAS,CAAC,MAAc,EAAE,IAAY,EAAE,GAAW,EAAA;AACjE,IAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAK,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG;AAC1G,SAAA,OAAO,CAAC,cAAc,EAAE,CAAC,IAAG,EAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACrJ,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAS,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AACjL,IAAA,IAAI,MAAM,KAAK,UAAU,EAAE;AACzB,QAAA,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG;AAC5C,cAAE,CAAC,sIAAsI,EAAE,8EAA8E;AACzN,cAAE,CAAC,8EAA8E,EAAE,oEAAoE,CAAC;QAC1J,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClE;IACA,IAAI,MAAM,KAAK,SAAS;AAAE,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC;AAC1C,IAAA,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,IAAwB,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACrG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;QACrF,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAAE,QAAA,IAAI,GAAG;YAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3F,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;AACzF,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;AAAE,YAAA,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACrK,QAAA,OAAO,CAAC;AACV,IAAA,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACb;AACA;AACO,MAAM,MAAM,GAAe,iBAAiB,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,EAAA;IACxF,MAAM,IAAI,GAAG,CAAC,EAAU,KAAK,IAAI,OAAO,CAAO,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1E,IAAA,MAAM,MAAM,GAAG,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;IAC1G,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC;IACxC,IAAI,MAAM,EAAE;AAAE,QAAA,MAAM,GAAG;QAAE;IAAQ;AACjC,IAAA,MAAM,IAAI,CAAC,GAAG,CAAC;AACf,IAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE;QAAE,IAAI,MAAM,CAAC,OAAO;YAAE;AAAQ,QAAA,MAAM,CAAC;AAAE,QAAA,MAAM,IAAI,CAAC,EAAE,CAAC;IAAE;AACzG;AAEA,MAAMA,SAAO,GAAuB;IAClC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE;IAC3D,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE;IACxD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE;AACvD,IAAA,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;CAC1E;AACD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,GAAY,KAAK,CAAC,KAAK,MAAM,IAAI,GAAG,GAAG,KAAK,GAAG,QAAQ;AAChF,MAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAK,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,OAAO,EAAE,EAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrK,MAAM,KAAK,GAA8E;IACvF,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE;AAC1K,IAAA,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE;IACjH,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE;CAC5M;AAGD;AAC4H;MA+K/G,uBAAuB,CAAA;AA9KpC,IAAA,WAAA,GAAA;QAiLW,IAAA,CAAA,YAAY,GAAG,EAAE;QACjB,IAAA,CAAA,WAAW,GAAG,+CAA+C;QAC7D,IAAA,CAAA,KAAK,GAAG,OAAO;QACf,IAAA,CAAA,IAAI,GAAkB,uBAAuB;;QAE7C,IAAA,CAAA,EAAE,GAAuB,MAAM;;QAE/B,IAAA,CAAA,SAAS,GAAuBA,SAAO;;AAGtC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAExC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAA4B;AAUlD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAC9C,IAAA,CAAA,GAAG,GAAqB,IAAI;QAC5B,IAAA,CAAA,OAAO,GAAkB,IAAI;QAC7B,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAiB,IAAI;QAC3B,IAAA,CAAA,QAAQ,GAAoD,IAAI;AAI/D,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,IAAA,CAAA,GAAG,GAAG,KAAK;QACX,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,IAAA,CAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,IAAA,CAAA,OAAO,GAAG,CAAC;QACX,IAAA,CAAA,KAAK,GAAG,CAAC;QAAE,IAAA,CAAA,KAAK,GAAG,IAAI;QAAE,IAAA,CAAA,OAAO,GAAG,KAAK;QAAE,IAAA,CAAA,OAAO,GAAG,KAAK;QAAE,IAAA,CAAA,OAAO,GAAG,KAAK;QAC1E,IAAA,CAAA,GAAG,GAAe,IAAI;QACtB,IAAA,CAAA,EAAE,GAAwC,IAAI;QAC9C,IAAA,CAAA,GAAG,GAAG,EAAE;QAAE,IAAA,CAAA,GAAG,GAAG,KAAK;QAAE,IAAA,CAAA,MAAM,GAAG,KAAK;QACrC,IAAA,CAAA,MAAM,GAA8C,IAAI;QACxD,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,KAAK,GAAG,EAAE;QAAE,IAAA,CAAA,OAAO,GAAG,EAAE;QAAE,IAAA,CAAA,OAAO,GAAG,EAAE;AAsPvC,IAAA;IApPC,IAAY,MAAM,GAAA,EAAK,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAE1D,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG;AAAE,YAAA,OAAO,oBAAoB;AAC9C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,MAAM,MAAM,CAAC,GAAG,qBAAqB,GAAG,eAAe;IAChH;AACA,IAAA,IAAI,WAAW,GAAA,EAAa,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;AAEzG,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,WAAW,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE;AAC3F,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE;AAAE,gBAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAAE;AAClG,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,EAAE;QAClB,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC;AACzH,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE;AACnC,YAAA,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,EAAE;AAC1B,YAAA,MAAM,EAAE,MAAK,EAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,KAAK,EAAE,CAAC,IAAG,EAAG,IAAI,CAAC,CAAC,SAAS,KAAK,YAAY,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE;AAAE,gBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE;gBAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AAAE,YAAA,CAAC,CAAC,CAAC;YAChK,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC;AAE1C,QAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAe,KAAI;AAC9B,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAc;AAC1B,YAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAE,CAAa,CAAC,OAAO,GAAG,YAAY,CAAC;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACrK,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAE,CAAa,CAAC,OAAO,GAAG,cAAc,CAAC;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACzH,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE;AAChK,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAK,EAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;QAC1F,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC;AAAE,QAAA,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QAC5F,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;AAAE,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACvG,IAAI,IAAI,CAAC,IAAI;YAAE,QAAQ,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC;QACrE,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;IAC7D;IAEQ,MAAM,GAAA,EAAK,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AACxC,IAAA,QAAQ,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,UAAU,CAAC,MAAK,EAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE9E,KAAK,GAAA;AACX,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAE,CAAwC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;QACvL,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;AACvB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;AAAE,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE;QACtG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9H,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AAAE,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE;AAAE,YAAA,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE;AAAE,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE;QAAE;IAC/I;AAEQ,IAAA,IAAI,CAAC,IAAY,EAAA,EAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;;AAGrJ,IAAA,OAAO,CAAC,CAAS,EAAA;AACvB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC;QAC3F,IAAI,EAAE,CAAC,MAAM;AAAE,YAAA,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAY,EAAE,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACxI,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;IACjB;AACQ,IAAA,KAAK,CAAC,EAA2B,EAAE,CAAS,EAAE,KAAK,GAAG,KAAK,EAAA;AACjE,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AAAE,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG;YAAE;QAC1D,MAAM,CAAC,GAAG,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjK,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAChE,QAAA,MAAM,CAAC,GAAG,KAAK,IAAI,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,GAAG,KAAK,GAAG,IAAI;AACvG,QAAA,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1H,QAAA,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAC9E;AACQ,IAAA,IAAI,CAAC,CAAgB,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,WAAW,GAAI,GAA2D,CAAC,UAAU,GAAG,SAAS;AAC5H,QAAA,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,WAAW,GAAI,MAA0D,CAAC,SAAS,GAAG,SAAS;AAC5H,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;YAAE;QACjB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE;AAAE,YAAA,CAAC,GAAG,IAAI,EAAE,EAAE;AAAE,YAAA,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QAAE;QAC7E,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;QACrE,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IACrC;AACQ,IAAA,UAAU,CAAC,CAAU,EAAA;AAC3B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;AAC5B,QAAA,MAAM,CAAC,GAAG,YAAY,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACrI,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;YAAE;QAAQ;AAC7H,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;IACvE;;IAGA,SAAS,CAAC,CAAa,EAAA,EAAI,IAAK,CAAC,CAAC,MAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAAE,QAAA,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC;AACpF,IAAA,SAAS,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAoB,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3H,IAAA,KAAK,CAAC,CAAgB,EAAA;AACpB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAkC,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC;YAAE;AACvG,QAAA,MAAM,EAAE,GAAI,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAoD,CAAC,CAAC,CAAC,GAAG,CAAC;QACzM,IAAI,EAAE,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,EAAE,CAAC,KAAK,EAAE;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAAE;IACnF;IACQ,aAAa,CAAC,CAAoB,EAAA,EAAI,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1H,KAAK,CAAC,CAAuB,EAAE,CAAa,EAAA;AAC1C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;YAAE;AAC7C,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC;AAC9C,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;YAAE,IAAI,IAAI,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;gBAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC;YAAE;QAAQ;QACnG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM;YAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;;AAAO,YAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACtF,QAAA,IAAI,IAAI;YAAE,CAAC,CAAC,KAAK,EAAE;IACrB;AACA,IAAA,MAAM,CAAC,CAAa,EAAA,EAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;AAAE,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9E,IAAA,MAAM,CAAC,CAAa,EAAA,EAAI,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS;AAAE,QAAA,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9E,IAAA,UAAU,CAAC,CAAa,EAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC;IACrG,WAAW,CAAC,CAAa,EAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC;;AAGtE,IAAA,WAAW,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAoB,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AAClL,IAAA,SAAS,CAAC,CAAqB,EAAA,EAAI,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG,EAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAClK,IAAA,QAAQ,CAAC,GAAoD,EAAA;AAC3D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK;YAAE;AAClE,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,KAAK,EAAE;AAChC,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,QAAQ,CAAC;YAAE;QAAQ;AAC1D,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,GAAG,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,IAAI,KAAK,KAAK,IAAI;AAAE,YAAA,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;AAC/E,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,QAAQ,EAAE;AACtD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;QAAE,IAAI,CAAC,KAAK,EAAE;QAC5D,qBAAqB,CAAC,MAAK,EAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3I;AACA,IAAA,SAAS,CAAC,IAAa,EAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;AAC5B,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,KAAK,EAAE;AAC9C,QAAA,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAc,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAAE;AACzI,aAAA,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACzC;AACA,IAAA,OAAO,CAAC,CAAgB,EAAA;AACtB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAkC,CAAC;AAC5F,QAAA,MAAM,EAAE,GAAI,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAoD,CAAC,CAAC,CAAC,GAAG,CAAC;QACtM,IAAI,EAAE,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE;AAC7C,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE;aAC5G,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;AAAE,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,GAAG;AAAE,gBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE;IACvQ;IACA,UAAU,CAAC,CAAgC,EAAE,CAAa,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhG,IAAI,CAAC,CAAY,EAAA,EAAS,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAClI,GAAG,CAAC,GAAW,EAAE,IAAa,EAAA;QAC5B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE;AACrE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE;YAAE;AAC3D,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE;AAAE,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,GAAG,CAAC,CAAS,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAAE,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAAE;AACjL,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM;QAC/B,IAAI,IAAI,KAAK,KAAK;YAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;aACrC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE;AAC5B,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACzI,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE;AACxF,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;AAAE,QAAA,IAAI,GAAG,GAAG,EAAE,EAAE,KAAK,GAAG,IAAI;AAC9C,QAAA,MAAM,GAAG,GAAG,CAAC,CAAS,KAAI,EAAG,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9J,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAAE,IAAI,CAAC,KAAK,EAAE;QAC9E,IAAI,CAAC,QAAQ,CAAC,CAAA,EAAG,GAAG,CAAC,KAAK,CAAA,sBAAA,CAAwB,CAAC;AACnD,QAAA,IAAI,IAAI;YAAE,CAAC,CAAC,KAAK,EAAE;QACnB,CAAC,YAAW;AACV,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACvH,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,YAAY,OAAO,EAAE;AACrD,oBAAA,MAAM,CAAC,GAAG,MAAM,GAAG;AAAE,oBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE;wBAAE;oBAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;wBAAE,GAAG,CAAC,CAAC,CAAC;;AACpB,wBAAA,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE;AAAE,4BAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE;gCAAE;4BAAQ,GAAG,CAAC,CAAC,CAAC;AAAE,4BAAA,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAAE;gBAC5I;;AAAO,oBAAA,WAAW,MAAM,KAAK,IAAI,GAAG,EAAE;AAAE,wBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE;4BAAE;wBAAQ,GAAG,CAAC,KAAK,CAAC;oBAAE;YACxF;YAAE,OAAO,GAAG,EAAE;AAAE,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE;oBAAE;AAAQ,gBAAA,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE;AACtE,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,EAAE;gBAAE;AAC1B,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;gBAAE;YAAQ;AACrD,YAAA,IAAI,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE;YAAE,IAAI,CAAC,KAAK,EAAE;AACxD,YAAA,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAA,YAAA,EAAe,CAAC,CAAA,EAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,oDAAA,CAAsD,CAAC;QAC3I,CAAC,GAAG;IACN;IACA,MAAM,CAAC,IAAa,EAAE,IAAa,EAAA;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAAE;AACvE,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK;YAAE;AACjC,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE;AACxB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAAE,QAAA,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE;AACnC,QAAA,IAAI,IAAI;YAAE,CAAC,CAAC,MAAM,EAAE;;YAAO,CAAC,CAAC,OAAO,EAAE;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QAAE,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,qBAAqB,GAAG,sBAAsB,CAAC;QACtG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACtE,QAAA,IAAI,IAAI;YAAE,CAAC,CAAC,KAAK,EAAE;IACrB;;AAGA,IAAA,QAAQ,CAAC,IAAa,EAAE,GAAG,GAAG,KAAK,EAAA;AACjC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;YAAE;AAC7C,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAAE,CAAC,CAAC,KAAK,EAAE;AAChC,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE;QAChC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE;QAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE;AAAE,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAAE,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAAE,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3H,QAAA,qBAAqB,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChJ;AACA,IAAA,SAAS,CAAC,IAAa,EAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE;AAAE,QAAA,IAAI,CAAC,CAAC;YAAE;AAC3B,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,EAAE;YAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,aAAa,CAAc,cAAc,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAAE;AACzI,aAAA,IAAI,IAAI;YAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACzC;AACQ,IAAA,KAAK,CAAC,CAAS,EAAA,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,uCAAuC,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;AACzQ,IAAA,SAAS,CAAC,IAAmB,EAAA;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;AAAE,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE;AAC/C,QAAA,IAAI,IAAI,KAAK,EAAE,EAAE;YAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,CAAC,EAAE;AAAE,gBAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAAE;YAAQ;YAAE,IAAI,GAAG,CAAC;QAAE;AAC5J,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAAE,QAAA,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;QAAE,CAAC,CAAC,KAAK,EAAE;IACjE;IACA,UAAU,CAAC,CAAQ,EAAA,EAAI,IAAI,CAAC,GAAG,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IAC1F,MAAM,CAAC,CAAgB,EAAA,EAAI,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;QAAE,CAAC,CAAC,cAAc,EAAE;AAAE,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAAE;AAAO,SAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;QAAE,CAAC,CAAC,cAAc,EAAE;QAAE,CAAC,CAAC,eAAe,EAAE;AAAE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAAE,IAAA,CAAC,CAAC;IACxO,OAAO,CAAC,CAAa,EAAA,EAAI,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;AAAE,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;;AAGxI,IAAA,SAAS,CAAC,CAAgB,EAAA;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAI;AACnB,QAAA,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;AACjB,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;gBAAE,CAAC,CAAC,cAAc,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;YAAE;YAChK,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,EAAE;gBAAE,CAAC,CAAC,cAAc,EAAE;gBAAE,CAAC,CAAC,eAAe,EAAE;AAAE,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI;YAAE;AACvK,YAAA,OAAO,KAAK;QACd;AACA,QAAA,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;AAChG,QAAA,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,EAAE;YAAE,CAAC,CAAC,cAAc,EAAE;YAAE,CAAC,CAAC,eAAe,EAAE;YAAE,IAAI,CAAC,KAAK,GAAG;AAAE,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;AAAO,gBAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,IAAI;QAAE;AAC/M,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AAAE,YAAA,OAAO,KAAK;QAAE;AAC7D,QAAA,OAAO,KAAK;IACd;IACA,SAAS,CAAC,CAAgB,EAAA,EAAI,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE;QAAE,CAAC,CAAC,cAAc,EAAE;QAAE,CAAC,CAAC,eAAe,EAAE;AAAE,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC;AAAE,IAAA,CAAC,CAAC;IACvL,iBAAiB,CAAC,CAAe,EAAA,EAAI,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;IAGpF,KAAK,GAAA,EAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC7B,IAAA,OAAO,GAAA,EAAK,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,IAAA,OAAO,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,IAAY,EAAA,EAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACzC,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG;AAAE,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;QACxC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AACpF,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE;AAAE,QAAA,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,QAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAAE,QAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,EAAE;AAAE,QAAA,OAAO,IAAI;IACzH;AACA,IAAA,QAAQ,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,GAAA,EAAK,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AAC/B,IAAA,MAAM,CAAC,CAAiB,EAAA,EAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE;AAAE,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM;QAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;;AAAO,QAAA,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACzK,MAAM,GAAA,EAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpC,IAAA,KAAK,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACvC,MAAM,GAAA,EAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACrC,OAAO,GAAA,EAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IACvC,IAAI,GAAA,EAAK,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3B,IAAI,GAAA,EAAK,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;+GAlShB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzKxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsKT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iwVAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvKS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA0Kd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA9KnC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsKT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,iwVAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,EAAE,EAAA,CAAA;sBAAV;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAES,UAAU,EAAA,CAAA;sBAAnB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;gBACQ,KAAK,EAAA,CAAA;sBAA7B,SAAS;uBAAC,IAAI;gBACY,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;gBACW,MAAM,EAAA,CAAA;sBAAjC,SAAS;uBAAC,OAAO;gBACW,OAAO,EAAA,CAAA;sBAAnC,SAAS;uBAAC,QAAQ;gBACS,MAAM,EAAA,CAAA;sBAAjC,SAAS;uBAAC,OAAO;gBACU,MAAM,EAAA,CAAA;sBAAjC,SAAS;uBAAC,OAAO;;;ACtuBpB;AACA;AACA;AACA;AACA;AACA;AACA;AAkBA,MAAMnB,MAAI,GAA2C;AACnD,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,MAAM,EAAE,SAAS;AACjB,IAAA,KAAK,EAAE,QAAQ;CAChB;AACD,MAAM,MAAM,GAAkC;AAC5C,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,OAAO,EAAE,MAAM;AACf,IAAA,OAAO,EAAE,QAAQ;AACjB,IAAA,MAAM,EAAE,WAAW;AACnB,IAAA,KAAK,EAAE,YAAY;CACpB;MA6DY,gBAAgB,CAAA;AA3D7B,IAAA,WAAA,GAAA;;QA6DW,IAAA,CAAA,IAAI,GAAG,CAAC;;QAER,IAAA,CAAA,MAAM,GAAG,IAAI;;QAEb,IAAA,CAAA,KAAK,GAAG,EAAE;;QAIV,IAAA,CAAA,MAAM,GAAkB,MAAM;QAO9B,IAAA,CAAA,KAAK,GAAG,cAAc;;QAEtB,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAQ;AACjC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAW;QAEzC,IAAA,CAAA,QAAQ,GAAG,IAAI;AAkDxB,IAAA;AAhDC,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;IACpC;AAEA,IAAA,GAAG,CAAC,CAAS,EAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;IAC9C;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IACpE;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK;AACrB,cAAE;cACA,yCAAyC;IAC/C;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAOA,MAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAChC;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,WAAW;AAC7C,QAAA,MAAM,GAAG,GAAkC;AACzC,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,KAAK,CAAA,CAAA,CAAG;AAClC,YAAA,KAAK,EAAE,aAAa;SACrB;AACD,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;IACzB;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;IAChD;AAEA,IAAA,WAAW,CAAC,CAAQ,EAAA;QAClB,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;+GAzEW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvDjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,mhHAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA3D5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,mhHAAA,CAAA,EAAA;8BAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,MAAM,EAAA,CAAA;sBAAf;gBACS,SAAS,EAAA,CAAA;sBAAlB;;;ACtHH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA8CA,MAAM,SAAS,GAAG,CAAC,CAAW,KAAc,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,QAAQ;AAC7E,MAAM,OAAO,GAAG,CAAC,CAAS,KACxB,CAAC,CAAC,QAAQ;AACV,KAAC,CAAC,CAAC,KAAK,EAAE;UACN,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC;AAC7D,UAAE,CAAC,CAAC,KAAK,KAAK;AACZ,cAAE;cACA,CAAC,CAAC;AACV,MAAM,OAAO,GAAG,CAAC,CAAS,KAAa,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAclE;MA8Ja,iBAAiB,CAAA;;IAS5B,IAAa,OAAO,CAAC,KAAkC,EAAA;AACrD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,EAAE;AAC9C,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;YACjB,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,SAAS,EAAE;QAClC;IACF;IAsBA,WAAA,CACmB,GAAsB,EACtB,IAA6B,EAAA;QAD7B,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;QAtCd,IAAA,CAAA,IAAI,GAAa,EAAE;;QAEnB,IAAA,CAAA,KAAK,GAAG,WAAW;QAanB,IAAA,CAAA,cAAc,GAAoB,UAAU;;QAE5C,IAAA,CAAA,UAAU,GAAG,IAAI;;QAEjB,IAAA,CAAA,IAAI,GAAG,KAAK;AAEX,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAmB;AACnD,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAiC;AAE1D,QAAA,IAAA,CAAA,cAAc,GAAgD;AACrE,YAAA,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;AACxC,YAAA,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;SACvC;QAED,IAAA,CAAA,IAAI,GAAoB,UAAU;QAClC,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QAEL,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;IAKlB;AAEK,IAAA,KAAK,CAAC,CAAS,EAAA;AACrB,QAAA,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK;IACxB;AAEQ,IAAA,MAAM,CAAC,CAAW,EAAA;QACxB,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM;IAC9D;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,KAAI;AAClC,YAAA,MAAM,KAAK,GACT,GAAG,CAAC,KAAK,KAAK;AACZ,kBAAE;AACF,kBAAE,GAAG,CAAC,KAAK,KAAK;AACd,sBAAE;AACF,sBAAE,GAAG,CAAC,KAAK,KAAK;AACd,0BAAE;0BACA,MAAM;AAChB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;YACxG,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK,IAAI,SAAS;YACvE,OAAO;gBACL,GAAG;gBACH,KAAK;AACL,gBAAA,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBACpB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC5B,KAAK;AACL,gBAAA,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM;aACnF;AACH,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IACnD;AACA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;IACpD;AACA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;IACpD;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,MAAM;IAC3D;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM;IACpE;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;QACjD,IAAI,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,OAAO;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC;AAAE,YAAA,OAAO,kCAAkC;QAC1F,OAAO,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,IAAA,EAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAA,KAAA,CAAO;IACxD;AAEA,IAAA,OAAO,CAAC,CAAU,EAAA;QAChB,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1D;AAEA,IAAA,OAAO,CAAC,CAAU,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC;IACrC;AAEA,IAAA,SAAS,CAAC,EAAW,EAAA;AACnB,QAAA,OAAO,EAAE,CAAC,KAAK,KAAK;AAClB,cAAE;AACF,cAAE,EAAE,CAAC,KAAK,KAAK;AACb,kBAAE;AACF,kBAAE,EAAE,CAAC,KAAK,KAAK;AACb,sBAAE;sBACA,SAAS;IACnB;AAEA,IAAA,UAAU,CAAC,KAAsB,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;YACjB,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAChC;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;IAClB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;;YAEd,cAAc,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACxC;IACF;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,kBAAkB,CAAC;QACtF,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC;AACrE,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;+GArJW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxJlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqJT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,o/PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtJS,eAAe,8EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyJhC,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA7J7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,o/PAAA,CAAA,EAAA;+GAIQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEY,OAAO,EAAA,CAAA;sBAAnB;gBAOQ,cAAc,EAAA,CAAA;sBAAtB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,aAAa,EAAA,CAAA;sBAAtB;gBACS,KAAK,EAAA,CAAA;sBAAd;;;ACnQH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MA6Ja,mBAAmB,CAAA;AArGhC,IAAA,WAAA,GAAA;;QAuGW,IAAA,CAAA,KAAK,GAAG,cAAc;;QAEtB,IAAA,CAAA,WAAW,GAAG,gBAAgB;QAY9B,IAAA,CAAA,aAAa,GAAG,KAAK;;QAErB,IAAA,CAAA,IAAI,GAAG,IAAI;;AAGV,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;;AAElC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AACtC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAW;AAInC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE9C,IAAA,CAAA,WAAW,GAAG,KAAK;;QAE3B,IAAA,CAAA,KAAK,GAAG,KAAK;;AAEL,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAkB;AAClC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAU;AAmFnC,IAAA;AAjFC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AACzD,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;QACvC;IACF;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;IACxC;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa;AACrC,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;;YAExB;QACF;;AAEA,QAAA,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YAClC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,CAAC,CAAC;;AAEF,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CACrB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,yBAAyB,CAAC,CACjF;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,KAAI;AACrB,YAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,MAAK;AAC5B,gBAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AAC5B,gBAAA,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,OAAO,CAAC,CAAU,EAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QACpC,MAAM,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAC3D,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IACzE;IAEA,YAAY,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ;AAC3B,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACtD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B;AAEA,IAAA,OAAO,CAAC,CAAgB,EAAA;QACtB,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,CAAC,CAAC,OAAO,EAAE;IAC1B;IAEQ,KAAK,CAAC,CAAU,EAAE,EAAU,EAAA;AAClC,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;AAC/B,QAAA,MAAM,IAAI,GAAG,CAAC,GAAW,KAAI;AAC3B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;;AAEzC,YAAA,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,gBAAA,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACpB;AACF,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;IAEQ,KAAK,CAAC,EAAU,EAAE,EAAc,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,EAAE,EAAE;AACJ,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,CAAC,EAAE,EAAE,CAAC;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GAtHW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhGpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kpHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9FS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiGd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArG/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6FT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kpHAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAGS,OAAO,EAAA,CAAA;sBAAhB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,YAAY,EAAA,CAAA;sBAArB;gBAE0B,IAAI,EAAA,CAAA;sBAA9B,SAAS;uBAAC,MAAM;;;AC9LnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwDA,MAAMiB,KAAG,GAAG;IACV,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;IACd,cAAc;CACf;AACD,MAAM,MAAM,GAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;AAE/D,MAAM,MAAM,GAAG,CAAC,CAAW,KAAY;IACrC,IAAI,CAAC,CAAC,CAAC,MAAM;AAAE,QAAA,OAAO,CAAC;IACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACtC,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC;AACvB,IAAA,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;MA4IY,qBAAqB,CAAA;AA1IlC,IAAA,WAAA,GAAA;QA2I6B,IAAA,CAAA,IAAI,GAAiB,EAAE;QACvB,IAAA,CAAA,MAAM,GAAoB,EAAE;QAC9C,IAAA,CAAA,SAAS,GAAG,EAAE;QACd,IAAA,CAAA,KAAK,GAAG,iBAAiB;;AAGzB,QAAA,IAAA,CAAA,OAAO,GAAqB,CAAC,CAAC,EAAE,GAAG,CAAC;AACpC,QAAA,IAAA,CAAA,OAAO,GAAqB,CAAC,EAAE,EAAE,GAAG,CAAC;;QAErC,IAAA,CAAA,MAAM,GAAa,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;;QAErC,IAAA,CAAA,MAAM,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;QAChC,IAAA,CAAA,MAAM,GAAG,oBAAoB;QAC7B,IAAA,CAAA,MAAM,GAAG,gBAAgB;AACzB,QAAA,IAAA,CAAA,OAAO,GAA0B,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,QAAA,IAAA,CAAA,OAAO,GAA0B,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG;AAC3D,QAAA,IAAA,CAAA,UAAU,GAA0B,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU;;AAErE,QAAA,IAAA,CAAA,SAAS,GAAqC;YACrD,aAAa;YACb,cAAc;YACd,gBAAgB;YAChB,eAAe;SAChB;;QAEQ,IAAA,CAAA,MAAM,GAAwB,EAAE;AAc/B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAuB;;AAExD,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAgB;AAK/B,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACtC,QAAA,IAAA,CAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;QAGhD,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,CAAC,GAAG,EAAE;QACN,IAAA,CAAA,CAAC,GAAG,EAAE;QACN,IAAA,CAAA,CAAC,GAAG,CAAC;QACL,IAAA,CAAA,EAAE,GAAG,CAAC;;QAGN,IAAA,CAAA,IAAI,GAAc,EAAE;QACpB,IAAA,CAAA,QAAQ,GAAc,EAAE;QACxB,IAAA,CAAA,EAAE,GAAa,EAAE;QACjB,IAAA,CAAA,EAAE,GAAa,EAAE;QACjB,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,GAAG,GAAG,CAAC,CAAC;QACR,IAAA,CAAA,EAAE,GAAsB,IAAI;QAC5B,IAAA,CAAA,GAAG,GAAoB,IAAI;QAC3B,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,KAAK,GAAa,EAAE;QACpB,IAAA,CAAA,YAAY,GAAiB,EAAE;QAC/B,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,MAAM,GAA2C,IAAI;QAErD,IAAA,CAAA,GAAG,GAAa,EAAE;QACV,IAAA,CAAA,GAAG,GAAwB,EAAE;QAC7B,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,IAAI,GAAgE,IAAI;QAExE,IAAA,CAAA,MAAM,GAAoC,EAAE;;AAG3C,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,CAAC,GAAG;AACd,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,CAAC,GAAG;QAiRf,IAAA,CAAA,UAAU,GAAG,CAAC;AAuBvB,IAAA;;IAnWC,IAAa,QAAQ,CAAC,KAAsC,EAAA;AAC1D,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;AACrC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,GAAG,KAAK;YAChB,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,IAAI,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,EAAE;QAC7B;IACF;AAqDA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,2BAA2B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,yCAAyC;IAC/H;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa;AACrC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,MAAK;AAChC,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW;AACvB,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY;YACxB,IAAI,CAAC,IAAI,EAAE;AACb,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW;AACvB,QAAA,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;;AAGQ,IAAA,EAAE,CAAC,GAAW,EAAA;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IACjE;AACA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAIA,KAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAGA,KAAG,CAAC,MAAM,CAAC;IAC3E;AACA,IAAA,OAAO,CAAC,GAAW,EAAA;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACjF;AACA,IAAA,OAAO,CAAC,GAAW,EAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;IAC/C;;AAGA,IAAA,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;AACrC,QAAA,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,EAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG;IACjG;;AAGA,IAAA,CAAC,CAAC,CAAS,EAAA;QACT,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC7G;AACA,IAAA,CAAC,CAAC,CAAS,EAAA;QACT,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAChH;AACQ,IAAA,CAAC,CAAC,GAAe,EAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AACtD,QAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC;IAC9F;IAEQ,QAAQ,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1F;;IAGA,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG;AACzC,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE;QAE9B,MAAM,IAAI,GAAG,CAAC,CAAW,EAAE,CAAmB,KAC5C,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AAC9E,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AACzC,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AAEzC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC7B,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElD,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACnC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;YACpE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,QAAQ,GAAG,EAAE,EAAE,GAAG,GAAG,QAAQ,GAAG,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,OAAO,GAAG,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,EAAE;iBAC/H,MAAM,CAAC,OAAO;iBACd,IAAI,CAAC,GAAG,CAAC;YACZ,OAAO;gBACL,GAAG;AACH,gBAAA,KAAK,EAAE,CAAC;gBACR,GAAG;gBACH,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC9B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;AAC/B,gBAAA,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7B,gBAAA,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7B,gBAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;aAC3B;AACH,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAClB,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9E,aAAA,GAAG,CAAC,CAAC,GAAG,MAAM;YACb,GAAG;YACH,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7B,YAAA,GAAG,EAAE,EAAE;YACP,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;AACf,SAAA,CAAC,CAAC;QAEL,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1G,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;QACpD,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE;YAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW;AAC/C,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD;QAEA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/D,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;AACrF,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM;QACvF;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE;AAC3E,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACb,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC;QAC1F,IAAI,CAAC,IAAI,EAAE;IACb;;AAGQ,IAAA,KAAK,CAAC,CAAe,EAAA;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC5D,QAAA,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;IAChD;IACQ,IAAI,CAAC,EAAU,EAAE,EAAU,EAAA;AACjC,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AAC/B,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACtC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;YACtC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC3B,YAAA,IAAI,CAAC,GAAG,EAAE,EAAE;gBACV,EAAE,GAAG,CAAC;gBACN,IAAI,GAAG,CAAC;YACV;QACF;AACA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,MAAM,CAAC,GAAwB,EAAA;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;YACd,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AACA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE;IACb;AAEA,IAAA,aAAa,CAAC,CAAe,EAAA;QAC3B,IAAI,CAAC,CAAC,MAAM;YAAE;AACd,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;IACrD;AAEA,IAAA,aAAa,CAAC,CAAe,EAAA;AAC3B,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;AAC/D,YAAA,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE;AACZ,gBAAA,CAAC,CAAC,KAAK,GAAG,IAAI;gBACd,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACf;YACA,IAAI,CAAC,GAAG,GAAG;AACT,gBAAA,CAAC,CAAC,CAAC;AACH,gBAAA,CAAC,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC/C;YACD,IAAI,CAAC,IAAI,EAAE;YACX;QACF;AACA,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,EAAE;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE;AAClB,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC;gBACZ,IAAI,CAAC,IAAI,EAAE;YACb;QACF;IACF;IAEA,WAAW,GAAA;AACT,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;AACvB,YAAA,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ;iBACtB,MAAM,CACL,CAAC,CAAC,KACA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC5B,gBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;AAC7B,gBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG;AAEhC,iBAAA,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB;AAAO,aAAA,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC1C,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACjB;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QACf,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AACxF,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,EAAE;QACb;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW;AAAE,YAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;aACjF,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS;YAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpF,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM;YAAE,CAAC,GAAG,CAAC;AAC3B,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK;AAAE,YAAA,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;AACrC,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAC9C,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACf;QACF;;YAAO;QACP,CAAC,CAAC,cAAc,EAAE;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,EAAE;IACb;;IAGA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ;YAAE;QACxB,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAChC,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;;AAEvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;;AAKA,IAAA,YAAY,CAAC,IAAY,EAAA;AACvB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU;AAC1B,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK;YAAE;QACvB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAC1B,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAU;AAC/B,YAAA,IAAI,EAAE,KAAK,IAAI,CAAC,KAAK;gBAAE;YACvB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;AAC7D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACjF;AACF,QAAA,CAAC;QACD,IAAI,CAAC,CAAC,CAAC;IACT;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAhYW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArItB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,quIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnIS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAsId,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA1IjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,quIAAA,CAAA,EAAA;8BAI0B,IAAI,EAAA,CAAA;sBAA9B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,MAAM,EAAA,CAAA;sBAAhC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,SAAS,EAAA,CAAA;sBAAjB;gBACQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAOQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEY,QAAQ,EAAA,CAAA;sBAApB;gBAUS,cAAc,EAAA,CAAA;sBAAvB;gBAES,GAAG,EAAA,CAAA;sBAAZ;gBAEkB,OAAO,EAAA,CAAA;sBAAzB,SAAS;uBAAC,MAAM;gBACC,MAAM,EAAA,CAAA;sBAAvB,SAAS;uBAAC,KAAK;;;AC5QlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA0CA;AACA,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;AAC5G,MAAM,IAAI,GAAG,CAAC,CAAS,MAAc,CAAC,IAAI,EAAE,GAAG,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,MAAM,GAAG,YAAY,CAAC;AAChH,MAAM,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI;AAC9C,MAAM,EAAE,GAAG,CAAC,CAAS,KAAuB,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC5F,MAAM,GAAG,GAAG,CAAC,EAAU,EAAE,EAAU,KAAY;IAC7C,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;AAC1C,IAAA,OAAO,CAAA,CAAA,EAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,OAAA,EAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACnG,CAAC;MAoIY,uBAAuB,CAAA;;IAQlC,IAAa,IAAI,CAAC,KAA2B,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;IACnD;IA4BA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QAxCK,IAAA,CAAA,OAAO,GAAkB,EAAE;QAC7C,IAAA,CAAA,KAAK,GAAG,eAAe;;QAIvB,IAAA,CAAA,KAAK,GAAG,iBAAiB;QAMzB,IAAA,CAAA,WAAW,GAAa,EAAE;;QAE1B,IAAA,CAAA,cAAc,GAAG,iBAAiB;;AAGjC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;;AAEzC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAgE;;AAEjG,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAoD;;QAG9F,IAAA,CAAA,IAAI,GAAU,EAAE;QAChB,IAAA,CAAA,GAAG,GAAG,CAAC,CAAC;QACR,IAAA,CAAA,OAAO,GAAG,CAAC;QACX,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,YAAY,GAAG,CAAC;QAChB,IAAA,CAAA,QAAQ,GAAG,EAAE;QACb,IAAA,CAAA,KAAK,GAAkB,IAAI;QAC3B,IAAA,CAAA,QAAQ,GAAG,CAAC;QAEJ,IAAA,CAAA,MAAM,GAAa,EAAE;QACrB,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAK1B;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,EAC5F,CAAC,CACF;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;QAC5E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;;AAG9D,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AAC7C,YAAA,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE;AAC5C,YAAA,MAAM,GAAG,GAAqB,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC;YAC/D,CAAC,IAAI,IAAI;YACT,OAAO;gBACL,MAAM;gBACN,KAAK;gBACL,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;gBAC9B,GAAG;AACH,gBAAA,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,gBAAA,QAAQ,EAAE,EAAE;AACZ,gBAAA,QAAQ,EAAE,GAAG;AACb,gBAAA,QAAQ,EAAE,IAAI;aACf;AACH,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAExB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK;AAC9B,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;;IAIQ,MAAM,CAAC,CAAM,EAAE,CAAS,EAAA;QAC9B,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG;AACtB,QAAA,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;QAClE,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG;IAC5B;;IAGQ,KAAK,CAAC,CAAM,EAAE,KAAa,EAAA;AACjC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;QAChD,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;gBACvB,IAAI,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,YAAA,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,EAAE,KAAK,CAAC;IACX;;AAGQ,IAAA,KAAK,CAAC,MAAc,EAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI;AAChB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;;IAIA,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,CAAA,EAAG,IAAI,CAAC,KAAK,CAAA,SAAA,EAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,EAAE;AACtE,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;AACpC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,EAAE;IAC5F;AAEA,IAAA,QAAQ,CAAC,CAAM,EAAA;AACb,QAAA,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,OAAA,EAAU,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,GAAG,WAAW,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7I;AAEA,IAAA,QAAQ,CAAC,CAAM,EAAA;AACb,QAAA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM;AAC9C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,SAAS,IAAI,CAAA,QAAA,EAAW,CAAC,CAAC,MAAM,CAAC,MAAM,CAAA,OAAA,CAAS,GAAG,YAAY;QACnF,OAAO,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,IAAI,IAAI,GAAG,0CAA0C,GAAG,GAAG,CAAC;IACrG;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;IAClC;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC;QACrG,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAIA,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK;AAChB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEA,YAAY,CAAC,CAAe,EAAE,KAAa,EAAA;AACzC,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACnD;IAEA,UAAU,CAAC,CAAe,EAAE,KAAa,EAAA;AACvC,QAAA,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IACnD;AAEA,IAAA,WAAW,CAAC,CAAQ,EAAA;AAClB,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B;QACzC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3D;AAEA,IAAA,cAAc,CAAC,CAAa,EAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B;QACzC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D;;AAIA,IAAA,OAAO,CAAC,CAAM,EAAA;AACZ,QAAA,CAAC,CAAC,QAAQ,GAAG,MAAM;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACvB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACvB,MAAM,EAAE,CAAC,CAAC,MAAM;AAChB,YAAA,OAAO,EAAE,CAAC,CAAgB,KAAI;AAC5B,gBAAA,CAAC,CAAC,QAAQ,GAAG,CAAC;AACd,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,KAAK,CAAC,CAAM,EAAA;AACV,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ;AACpB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM;YAAE;AACxB,QAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;AAEA,IAAA,IAAI,CAAC,CAAM,EAAA;AACT,QAAA,CAAC,CAAC,QAAQ,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAzNW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAf,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA5GxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,kqHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA1GS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA6Gd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAjHnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,kqHAAA,CAAA,EAAA;sHAI0B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEY,IAAI,EAAA,CAAA;sBAAhB;gBAIQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,cAAc,EAAA,CAAA;sBAAtB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;gBAES,cAAc,EAAA,CAAA;sBAAvB;gBAES,aAAa,EAAA,CAAA;sBAAtB;;;ACxNH;AACA;AACA;AACA;AACA;AACA;AAsBA,IAAI,MAAM,GAAG,CAAC;MAqCD,yBAAyB,CAAA;AAnCtC,IAAA,WAAA,GAAA;;QAqCW,IAAA,CAAA,OAAO,GAAoB,EAAE;AAOtC;;AAEwC;QAC3B,IAAA,CAAA,OAAO,GAAqB,MAAM;;AAKrC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;QAKlD,IAAA,CAAA,OAAO,GAAG,EAAE;AACZ,QAAA,IAAA,CAAA,IAAI,GAAG,QAAQ,GAAG,MAAM,EAAE;QAE1B,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;;QAEb,IAAA,CAAA,cAAc,GAAG,MAAM;QACf,IAAA,CAAA,KAAK,GAAG,IAAI;AAyErB,IAAA;AArEC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,IAAI,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAChD,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK;YACzB,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QAClE;IACF;IAEA,eAAe,GAAA;QACb,IAAI,IAAI,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;QACjG,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;AACxC,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAChD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;QAC1C;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;;IAGQ,KAAK,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;QACnC,MAAM,CAAC,GAAG,EAAE,EAAE,aAAa,CAAc,kBAAkB,CAAC;AAC5D,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,cAAc,GAAG,MAAM;YAC5B,qBAAqB,CAAC,MAAK;AACzB,gBAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,gBAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AAC1B,YAAA,CAAC,CAAC;QACJ;IACF;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO;YAAE;;AAExB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;YAChB,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B;;AAGA,IAAA,KAAK,CAAC,CAAgB,EAAA;QACpB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC;AACjE,QAAA,MAAM,GAAG,GAA2B;YAClC,UAAU,EAAE,CAAC,GAAG,CAAC;YACjB,SAAS,EAAE,CAAC,GAAG,CAAC;AAChB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;SAC7B;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACrB,IAAI,EAAE,KAAK,SAAS;YAAE;QACtB,CAAC,CAAC,cAAc,EAAE;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACxE,QAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC;aACP,aAAa,CAAc,CAAA,SAAA,EAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA,EAAA,CAAI;cAC7D,KAAK,EAAE;IACb;+GArGW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,CAAA,IAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA/B1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iwBAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAnCrC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,cACpB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,iwBAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,YAAY,EAAA,CAAA;sBAApB;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAIY,OAAO,EAAA,CAAA;sBAAnB,KAAK;uBAAC,IAAI;gBAEF,EAAE,EAAA,CAAA;sBAAV;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;;;ACnFnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAsCA,MAAM,OAAO,GAAmB;AAC9B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9B,IAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;AACjC,IAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;CACnC;MAkFY,oBAAoB,CAAA;AAyB/B,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;QAtB3B,IAAA,CAAA,OAAO,GAAkB,EAAE;;QAE3B,IAAA,CAAA,OAAO,GAAmB,OAAO;QAGjC,IAAA,CAAA,aAAa,GAAG,KAAK;QAGrB,IAAA,CAAA,WAAW,GAAG,KAAK;AAGlB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;QAG1C,IAAA,CAAA,SAAS,GAAG,KAAK;QAKjB,IAAA,CAAA,OAAO,GAAG,KAAK;AAGrB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW;IACnC;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS;IACpC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,OAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,aAAa;IAC9D;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;IAChE;AAEA,IAAA,GAAG,CAAC,CAAc,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;IAChE;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IAEA,eAAe,GAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE;AAC3B,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;YAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,IAAI,CAAC,MAAM,EAAE;QAClD,CAAC,EAAE,IAAI,CAAC;IACV;IAEA,WAAW,GAAA;QACT,IAAI,IAAI,CAAC,SAAS;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAClD;+GApEW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3ErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,q/HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA4Ed,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAhFhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,q/HAAA,CAAA,EAAA;sFAKQ,OAAO,EAAA,CAAA;sBAAf;gBACQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,YAAY,EAAA,CAAA;sBAArB;gBACS,UAAU,EAAA,CAAA;sBAAnB;;;ACvJH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmDA,MAAM,IAAI,GAAG,eAAe;MAsEf,kBAAkB,CAAA;;IAI7B,IAAa,MAAM,CAAC,KAAyB,EAAA;AAC3C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;AACf,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;AAChB,gBAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;YAClB;QACF;IACF;AAkBA,IAAA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EACtB,IAA6B,EAAA;QAF7B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;QAjCI,IAAA,CAAA,KAAK,GAAoB,EAAE;QAC3B,IAAA,CAAA,OAAO,GAAsB,EAAE;QAYjD,IAAA,CAAA,aAAa,GAAG,CAAC;AAIhB,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAU;QAEnD,IAAA,CAAA,EAAE,GAAG,CAAC;QACN,IAAA,CAAA,KAAK,GAAe,EAAE;QACtB,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,YAAY,GAAG,KAAK;QAEZ,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAM1B;IAEH,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI;IAC/C;IAEA,MAAM,CAAC,IAAmB,EAAE,KAAa,EAAA;QACvC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IAC9F;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa;QAClD,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AAC1C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YAC5C,IAAI;YACJ,KAAK;AACL,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA,UAAA,EAAa,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAA,CAAA,CAAG;YACpD,UAAU,EAAE,KAAK,GAAG,EAAE;AACtB,YAAA,UAAU,EAAE,GAAG,GAAG,KAAK,GAAG,EAAE;AAC5B,YAAA,UAAU,EAAE,KAAK;AAClB,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAC3C;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;YACf,IAAI,CAAC,SAAS,EAAE;AAChB,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAClB;AACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;AAEQ,IAAA,IAAI,CAAC,MAAc,EAAA;AACzB,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;;AAExB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAK;gBACd,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;AAC7D,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,oBAAoB,GAAG,qBAAqB;AAC/E,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACtB,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;AACzB,YAAA,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AACnC,YAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI;QACxB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;IAEQ,aAAa,CAAC,IAAmB,EAAE,CAAiB,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;QAChD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AACxE,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;QACzB,OAAO,CAAC,CAAC;AACN,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACZ,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACnE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AACnD,YAAA,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,EAAE,EAAE;AAC3C,QAAA,CAAC;aACA,IAAI,CAAC,GAAG,CAAC;IACd;;IAGQ,IAAI,CAAC,IAAc,EAAE,MAAc,EAAA;AACzC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,GAAG;AACf,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;QACvF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GAlJW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,eAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhDnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,klDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9CS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiDd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBArD9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,klDAAA,CAAA,EAAA;+IAI0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBACE,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEZ,MAAM,EAAA,CAAA;sBAAlB;gBAUQ,aAAa,EAAA,CAAA;sBAArB;gBAEQ,UAAU,EAAA,CAAA;sBAAlB;gBAES,YAAY,EAAA,CAAA;sBAArB;;;AClJH;AACA;AACA;AACA;AACA;AACA;AACA;AAiCA,MAAM,IAAI,GAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC;AAClE,MAAM,EAAE,GAA2B;AACjC,IAAA,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO;CACvE;MAuEY,mBAAmB,CAAA;IAkC9B,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EAAA;QADtB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QAnCb,IAAA,CAAA,KAAK,GAAoB,MAAM;;QAE/B,IAAA,CAAA,KAAK,GAAG,EAAE;;QAMV,IAAA,CAAA,QAAQ,GAAG,CAAC;;QAEZ,IAAA,CAAA,OAAO,GAAmB,MAAM;;QAKzC,IAAA,CAAA,IAAI,GAMA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAEhC,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,QAAQ,GAAG,KAAK;QAChB,IAAA,CAAA,KAAK,GAAmB,MAAM;QAGtB,IAAA,CAAA,OAAO,GAAG,EAAE;AACZ,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,IAAI;QAClB,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,SAAS,GAAG,KAAK;IAKtB;AAEH,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK;IACxB;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK;AACrB,YAAA,KAAK,UAAU;AACf,YAAA,KAAK,SAAS;AACd,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,cAAc;AACvB,YAAA,KAAK,SAAS;AACZ,gBAAA,OAAO,qBAAqB;AAC9B,YAAA,KAAK,MAAM;AACT,gBAAA,OAAO,cAAc;AACvB,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAC9D;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS;AACpD,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM;AAAE,YAAA,OAAO,QAAQ;AAC/C,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD;AAEA,IAAA,OAAO,CAAC,IAAY,EAAA;AAClB,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IACvB;AAEQ,IAAA,GAAG,CAAC,CAA8F,EAAA;AACxG,QAAA,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC/F;IAEQ,QAAQ,GAAA;QACd,OAAO;AACL,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,MAAM;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB;IACH;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;QACzB,IAAI,CAAC,GAAG,EAAE;AACV,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;IAC1B;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB;QACF;;;QAIA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAC7C,YAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;gBACvB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAClC,gBAAA,IAAI,CAAC,MAAM,GAAG,KAAK;gBACnB,IAAI,CAAC,GAAG,EAAE;AACV,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACzB,CAAC,EAAE,KAAK,CAAC;QACX;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;;AAEvB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAClB;AAEA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;AACzD,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5B;IACF;;;;AAKQ,IAAA,OAAO,CAAC,OAAuB,EAAA;AACrC,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,KAAK;YAAE;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO;YACpB,IAAI,CAAC,GAAG,EAAE;YACV;QACF;AACA,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO;YACpB,IAAI,CAAC,GAAG,EAAE;AACV,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,GAAG,CAAC;IACT;;IAGQ,GAAG,GAAA;AACT,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,aAAa;AAClC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa;AAC9B,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW;AACxB,QAAA,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE;QACnB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;IAC/D;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GA1KW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sjDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9DS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiEd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArE/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,sjDAAA,CAAA,EAAA;sHAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEiB,GAAG,EAAA,CAAA;sBAApB,SAAS;uBAAC,KAAK;;;AC9HlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAmDA,MAAMC,OAAK,GAAG,CAAC,CAAS,KACtB,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;MAgH/C,iBAAiB,CAAA;AA9G9B,IAAA,WAAA,GAAA;QAiHW,IAAA,CAAA,KAAK,GAAgB,EAAE;;QAEvB,IAAA,CAAA,QAAQ,GAAmB,EAAE;;AAE5B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAIzC,IAAA,CAAA,YAAY,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAWzC,IAAA,CAAA,SAAS,GAAG,EAAE;AAEN,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,UAAU,GAAG,EAAE;;QAEf,IAAA,CAAA,OAAO,GAAG,CAAC;AAgFpB,IAAA;AA7EC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,EAAE,EAAE;AACrD,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY;QACrC;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,WAAW,EAAE;IAChE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU;IACtC;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;IAC9E;AAEA,IAAA,IAAY,IAAI,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAOA,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;QACjD,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,MAAM;AAChC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;AAC9D,QAAA,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE;QAC5E,OAAO,CAAA,KAAA,EAAQ,CAAC,GAAG,CAAC,CAAA,IAAA,EAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,CAAE;IAChD;AAEA,IAAA,IAAY,IAAI,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM;IAC7D;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACnB,YAAA,OAAO,CAAA,QAAA,EAAWA,OAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,EAAG,CAAC,GAAG,CAAA,GAAA,EAAM,CAAC,CAAA,OAAA,EAAU,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,CAAA,SAAA,CAAW,GAAG,EAAE,EAAE;QAC9F;AACA,QAAA,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO;IACnD;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;IAChD;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,QAAQ,GAAG,sBAAsB,GAAG,gCAAgC,CAAC;IACxG;AAEA,IAAA,OAAO,CAAC,CAAQ,EAAA;AACd,QAAA,MAAM,CAAC,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK;AAC9C,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACjD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B;AAEA,IAAA,IAAI,CAAC,CAAQ,EAAA;QACX,CAAC,CAAC,cAAc,EAAE;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3B,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ;YAAE;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAClD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;IAC3B;;;IAIQ,WAAW,GAAA;AACjB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ;AAChE,QAAA,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAChE;AAAO,aAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE;AAC1C,YAAA,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC7B;IACF;+GA7GW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzGlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,44KAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvGS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA0Gd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA9G7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,44KAAA,CAAA,EAAA;8BAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAChB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;;;ACvMH;AACA;AACA;AACA;AACA;MAmGa,mBAAmB,CAAA;AA1EhC,IAAA,WAAA,GAAA;;QA4EW,IAAA,CAAA,KAAK,GAAW,EAAE;;QAElB,IAAA,CAAA,OAAO,GAAG,CAAC;;QAEX,IAAA,CAAA,MAAM,GAAoB,OAAO;;QAEjC,IAAA,CAAA,SAAS,GAAG,kBAAkB;;QAI9B,IAAA,CAAA,WAAW,GAAG,KAAK;;AAGlB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;;QAGlD,IAAA,CAAA,MAAM,GAAG,KAAK;QACN,IAAA,CAAA,OAAO,GAAG,KAAK;AAgCxB,IAAA;AA9BC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACzB;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QAC7C;IACF;;AAGA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM;IAC1B;;AAGA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC/B;;AAGA,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC3C;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM;;AAEzB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAC/C,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;+GAlDW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkET,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ipJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAnES,eAAe,8EAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAsEhC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1E/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ipJAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;;;ACtHH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAwDA,MAAMiB,QAAM,GAAoC;AAC9C,IAAA,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/D,IAAA,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;AACjE,IAAA,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;AAC9D,IAAA,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AAClE,IAAA,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;CAC3D;AACD,MAAM,OAAO,GAA2D;AACtE,IAAA,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;AAC9B,IAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,IAAA,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;IAChC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE;IAC3C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;CAClD;AACD,MAAM,KAAK,GAAsD;IAC/D,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;AACnB,IAAA,MAAM,EAAE,CAAC,CAAC,KAAKA,QAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI;IACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI;IAC1B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;IACnB,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO;CAC1B;AACD,MAAM,OAAO,GAA2D;IACtE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;IAC/C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;IACjD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE;CAC9C;MA+IY,kBAAkB,CAAA;AA7I/B,IAAA,WAAA,GAAA;QA8IW,IAAA,CAAA,KAAK,GAAW,EAAE;;QAElB,IAAA,CAAA,KAAK,GAAG,aAAa;QAMrB,IAAA,CAAA,eAAe,GAAa,EAAE;AAC7B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAY;AAI9C,QAAA,IAAA,CAAA,WAAW,GAAa,EAAE,GAAG,EAAE,SAAS,EAAE;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;;AAGzC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,YAAY,EAAyC;;QAGnE,IAAA,CAAA,UAAU,GAAG,gBAAgB;;QAE7B,IAAA,CAAA,SAAS,GAAG,4CAA4C;AAQhD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE7C,IAAA,CAAA,OAAO,GAAG,OAAO;QACjB,IAAA,CAAA,OAAO,GAAG,OAAO;AAE1B,QAAA,IAAA,CAAA,GAAG,GAAa,IAAI,CAAC,eAAe;AACpC,QAAA,IAAA,CAAA,EAAE,GAAa,IAAI,CAAC,WAAW;QAC/B,IAAA,CAAA,OAAO,GAAa,EAAE;;QAEtB,IAAA,CAAA,KAAK,GAAG,CAAC;;AAID,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,GAAG,EAAkB;AAE/B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AAoK1D,IAAA;AAlKC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ;QAChF,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;QACnE,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,eAAe;QAC9F,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW;AACjF,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;IACzD;IAEA,eAAe,GAAA;;QAEb,cAAc,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAC1C;;AAGA,IAAA,IAAI,IAAI,GAAA;QACN,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;AACjC,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACnC,YAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACZ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACV,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG;AAC3C,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnG;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO;IACvE;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,OAAO;AACnD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,YAAA,OAAO,UAAU;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QACvE,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,KAAA,EAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA,QAAA,CAAU;IAC7F;AAEA,IAAA,MAAM,CAAC,CAAO,EAAA;AACZ,QAAA,OAAOA,QAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACzB;AAEA,IAAA,GAAG,CAAC,CAAS,EAAA;QACX,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,UAAU;IACrC;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;QAClB,OAAO,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI;IAClF;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACzF,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IACtB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IACpB;AAEA,IAAA,MAAM,CAAC,GAAgB,EAAA;AACrB,QAAA,MAAM,IAAI,GAAa,GAAG,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE;AAChG,QAAA,IAAI,CAAC,IAAI,CAAC,MAAK;AACb,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,gBAAA,IAAI,CAAC,EAAE,GAAG,IAAI;AAC3C,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,CAAC,EAAE,GAAG,CAAC;IACT;AAEA,IAAA,GAAG,CAAC,CAAa,EAAA;AACf,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AAC1C,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YACpC;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAClB,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvB,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;AAEA,IAAA,cAAc,CAAC,CAAQ,EAAA;QACrB,CAAC,CAAC,eAAe,EAAE;AACnB,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE;IAC7B;AAEQ,IAAA,SAAS,CAAC,IAAc,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI;QAChD,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC;;IAGQ,IAAI,CAAC,MAAkB,EAAE,QAAgB,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACxB,YAAA,MAAM,EAAE;YACR;QACF;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB;QACvC,IAAI,EAAE,gBAAgB,CAAc,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAChE,YAAA,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAE,EAAE,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC;AAC9D,QAAA,CAAC,CAAC;AACF,QAAA,MAAM,EAAE;QACR,cAAc,CAAC,MAAK;YAClB,IAAI,EAAE,gBAAgB,CAAc,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAChE,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC;gBAC3C,IAAI,MAAM,KAAK,SAAS;oBAAE;gBAC1B,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG;gBACjD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AACnB,oBAAA,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,CAAA,WAAA,EAAc,CAAC,CAAA,GAAA,CAAK,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE;wBACvE,QAAQ;AACR,wBAAA,MAAM,EAAE,2BAA2B;AACpC,qBAAA,CAAC;gBACJ;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,WAAW,GAAA;AACjB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa;QACtC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY;AAChC,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;AACpB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,EAAE;YACpB,IAAI,CAAC,OAAO,EAAE;iBACX,gBAAgB,CAAc,aAAa;iBAC3C,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;YACjE;QACF;;AAEA,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa;QAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACjC,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;YACpB;QACF;QACA,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,YAAY;AAC1C,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACT,YAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,GAAG;gBACT,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBACtC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;aAC7C;QACH;aAAO;AACL,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;QACtB;IACF;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GAjNW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,OAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAxInB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,k1PAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAtIS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAyId,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA7I9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqIT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,k1PAAA,CAAA,EAAA;8BAIQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBACQ,eAAe,EAAA,CAAA;sBAAvB;gBACS,cAAc,EAAA,CAAA;sBAAvB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,WAAW,EAAA,CAAA;sBAAnB;gBACS,UAAU,EAAA,CAAA;sBAAnB;gBAGS,MAAM,EAAA,CAAA;sBAAf;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEmB,QAAQ,EAAA,CAAA;sBAA3B,SAAS;uBAAC,OAAO;gBACC,OAAO,EAAA,CAAA;sBAAzB,SAAS;uBAAC,MAAM;gBACO,YAAY,EAAA,CAAA;sBAAnC,SAAS;uBAAC,WAAW;;;ACzQxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA6EA,MAAMpB,MAAI,GAAiC,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE;AAEzF,MAAM,MAAM,GAAG,CAAC,CAAe,KAC7B,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC;MA8L7C,uBAAuB,CAAA;AA5LpC,IAAA,WAAA,GAAA;;QA8LW,IAAA,CAAA,GAAG,GAAG,EAAE;;QAGR,IAAA,CAAA,OAAO,GAAoB,EAAE;;QAY7B,IAAA,CAAA,IAAI,GAAG,CAAC;;QAGR,IAAA,CAAA,MAAM,GAAG,KAAK;;QAGd,IAAA,CAAA,MAAM,GAAmB,EAAE;;AAK1B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAQ;;AAG/B,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAU;;AAKlC,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;QAEzB,IAAA,CAAA,MAAM,GAAG,IAAI;AA6KtB,IAAA;AAzKC,IAAA,IAAI,CAAC,GAAA;QACH,OAAO;AACL,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,MAAM,EAAE,QAAQ;AAChB,YAAA,OAAO,EAAE,SAAS;AAClB,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,MAAM,EAAE,qBAAqB;YAC7B,IAAI,EAAE,CAAC,CAAS,KAAK,CAAA,KAAA,EAAQ,CAAC,CAAA,UAAA,EAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAE;AAC/D,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,IAAI,EAAE,MAAM;YACZ,GAAG,IAAI,CAAC,MAAM;SACf;IACH;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ;IAC3B;AAEA,IAAA,IAAY,QAAQ,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,CAAC,KAA2B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAC1D;IACH;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM;AACnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAC5B,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,IAAK,CAAoC,CAAC,MAAM,KAAK,SAAS,CAC/F;AACD,QAAA,IAAI,IAAI;AAAE,YAAA,OAAO,SAAS;AAC1B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,EAAE,MAAM,KAAK;AACtB,cAAE;AACF,cAAE,IAAI,EAAE,MAAM,KAAK;AACjB,kBAAE;kBACA,QAAQ;IAChB;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;IACjC;AAEA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,OAAO;QACnD,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QAC3D,OAAO,CAAC,CAAA,EAAG,CAAC,CAAA,QAAA,EAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAA,CAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK;aAClE,MAAM,CAAC,OAAO;aACd,IAAI,CAAC,KAAK,CAAC;IAChB;AAEA,IAAA,MAAM,CAAC,CAAgB,EAAA;AACrB,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AACpC,QAAA,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;AACpC,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,MAAM,CAAC,CAAgB,EAAA;AACrB,QAAA,OAAO,CAAiB;IAC1B;AAEA,IAAA,MAAM,CAAC,CAAgB,EAAA;AACrB,QAAA,OAAO,CAAiB;IAC1B;AAEA,IAAA,SAAS,CAAC,CAAgB,EAAA;AACxB,QAAA,OAAO,CAAoB;IAC7B;AAEA,IAAA,KAAK,CAAC,CAAkB,EAAA;AACtB,QAAA,OAAO,CAAC,CAAC,MAAM,KAAK;AAClB,cAAE;AACF,cAAE,CAAC,CAAC,MAAM,KAAK;AACb,kBAAE;AACF,kBAAE,CAAC,CAAC,MAAM,KAAK;AACb,sBAAE;sBACA,MAAM;IAChB;AAEQ,IAAA,GAAG,CAAC,CAAkB,EAAA;AAC5B,QAAA,OAAO,CAAC,CAAC,MAAM,IAAI,EAAE;IACvB;AAEA,IAAA,KAAK,CAAC,CAAkB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;IAC3C;AAEA,IAAA,MAAM,CAAC,CAAkB,EAAA;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;IAC9D;AAEA,IAAA,KAAK,CAAC,CAAkB,EAAA;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAC1D;AAEA,IAAA,QAAQ,CAAC,CAAe,EAAA;AACtB,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;IACvB;AAEA,IAAA,SAAS,CAAC,CAAe,EAAA;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;AAC3B,QAAA,OAAO,IAAI,GAAGA,MAAI,CAAC,IAAI,CAAC,GAAG,EAAE;IAC/B;AAEA,IAAA,IAAI,CAAC,CAAS,EAAA;QACZ,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvB;AAEA,IAAA,MAAM,CAAC,CAAS,EAAA;AACd,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB;IAEQ,IAAI,GAAA;QACV,OAAO,IAAI,CAAC;AACT,aAAA,OAAO,CAAC,CAAC,CAAC,KAAI;AACb,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;AAAE,gBAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzB,gBAAA,MAAM,MAAM,GACV,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,CAAC,OAAO,KAAK;AACvC,sBAAE,CAAA,GAAA,EAAM,EAAE,CAAC,KAAK,IAAI,CAAC,CAAA,EAAA,EAAK,EAAE,CAAC,OAAO,IAAI,CAAC,CAAA,CAAA;sBACvC,EAAE;gBACR,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE;AACjF,gBAAA,OAAO,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA,CAAA,EAAI,EAAE,CAAC,IAAI,GAAG,MAAM,CAAA,CAAE,EAAE,GAAG,IAAI,CAAC;YAC1D;YACA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7B,YAAA,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/E,QAAA,CAAC;aACA,IAAI,CAAC,IAAI,CAAC;IACf;IAEA,OAAO,GAAA;QACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,GAAG,EAAE;IACtE;;IAGA,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,KAAK,GAAG,MAAK;YACjB,IAAI,IAAI,CAAC,MAAM;AAAE,gBAAA,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,YAAY;AACjD,QAAA,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC;QACrC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC5E,QAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;YACxC,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB;AACA,QAAA,KAAK,EAAE;IACT;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;+GAlNW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAvLxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoLT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,ugSAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EArLS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAwLd,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBA5LnC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoLT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,ugSAAA,CAAA,EAAA;8BAKQ,GAAG,EAAA,CAAA;sBAAX;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAGS,IAAI,EAAA,CAAA;sBAAb;gBAGS,IAAI,EAAA,CAAA;sBAAb;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;;AC5TnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAoCA;MA4Ea,iBAAiB,CAAA;AA2B5B,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;;QAzB3B,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAE1B,IAAA,CAAA,OAAO,GAAG,KAAK;;QAIf,IAAA,CAAA,KAAK,GAAG,eAAe;;QAIvB,IAAA,CAAA,gBAAgB,GAAG,IAAI;;QAIvB,IAAA,CAAA,WAAW,GAAG,IAAI;;AAGjB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAElD,IAAA,CAAA,MAAM,GAAG,IAAI;QACL,IAAA,CAAA,OAAO,GAAG,CAAC;QAGX,IAAA,CAAA,SAAS,GAAG,KAAK;IAEoC;AAE7D,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC/C;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;IACrC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,OAAO,IAAI,CAAC,OAAO,IAAI,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,MAAM,GAAG,OAAO,CAAA,CAAE;QAC7F;QACA,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;QAC3C,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,gBAAgB,EAAE;IACzB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC9C,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI;QACzB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;YAC3C;QACF;QACA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YAC5C,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACzE,IAAI,CAAC,gBAAgB,EAAE;QACzB;IACF;AAEA,IAAA,SAAS,CAAC,CAAe,EAAA;AACvB,QAAA,OAAO,CAAC,CAAC,KAAK,KAAK,SAAS,GAAG,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,KAAK;IAC3D;;AAGA,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAC7B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AAC1B,YAAA,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;YACxC,KAAK,EAAE,CAAC,GAAG,EAAE;AACd,SAAA,CAAC,CAAC;IACL;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAClC;QACF;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IACnC;;IAGQ,YAAY,GAAA;AAClB,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/C;QACF;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;YAClC,IAAI,CAAC,OAAO,EAAE;QAChB,CAAC,EAAE,IAAI,CAAC;IACV;;IAGQ,gBAAgB,GAAA;AACtB,QAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAChE;QACF;AACA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YAC3B;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;AAC9C,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7B,CAAC,EAAE,KAAK,CAAC;IACX;IAEA,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAClC;+GA1HW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAE,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+kOAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAuEd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA3E7B,SAAS;+BACE,aAAa,EAAA,UAAA,EACX,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+kOAAA,CAAA,EAAA;sFAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,gBAAgB,EAAA,CAAA;sBAAxB;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;;;AC1IH;AACA;AACA;AACA;AACA;AACA;AACA;AAsBA;AACA;AACA;AACA,SAAS,IAAI,CAAC,CAAW,EAAA;IACvB,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClE,IAAA,MAAM,IAAI,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACnC,IAAA,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9C,IAAA,MAAM,GAAG,GAAa,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9C,IAAA,MAAM,GAAG,GAAsB,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AACzD,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAC9B,IAAA,MAAM,GAAG,GAAG,CAAC,KAAe,EAAE,GAAW,KACvC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI,EAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;AACrE,IAAA,IAAI,CAAC,KAAK,OAAO,EAAE;QACjB,MAAM,IAAI,GAAa,EAAE;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI,EAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QACd,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG;AACnB,QAAA,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE;AAAO,SAAA,IAAI,CAAC,KAAK,MAAM,EAAE;AACvB,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG;AAC/B,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG;gBAC1B,IAAI,CAAC,KAAK,CAAC;AAAE,oBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B;IACJ;AAAO,SAAA,IAAI,CAAC,KAAK,OAAO,EAAE;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAC7B,gBAAA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;AAC9C,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;gBACpC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,IAAI;AAAE,oBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACrB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI;YAC9C;IACJ;AAAO,SAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;;QAEzB,MAAM,IAAI,GAAa,EAAE;AACzB,QAAA,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YAC3B,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACnD,YAAA,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACvD,IAAI,EAAE,GAAG,EAAE;AAAE,gBAAA,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpE,IAAI,EAAE,GAAG,EAAE;AAAE,gBAAA,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACnE,YAAA,EAAE,EAAE;AAAE,YAAA,EAAE,EAAE;AAAE,YAAA,EAAE,EAAE;AAAE,YAAA,EAAE,EAAE;QACxB;AACA,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI,EAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,QAAA,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;AACd,QAAA,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE;SAAO;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;AAC3B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,gBAAA,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;gBAChB,IAAI,CAAC,GAAG,CAAC;AAAE,oBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB;IACJ;IACA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM;AACxB,QAAA,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE;aAC5B,MAAM,CAAC,OAAO;aACd,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;aACpB,IAAI,CAAC,GAAG,CAAC;AACZ,QAAA,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACd,KAAA,CAAC,CAAC;AACL;AAEA,MAAM,KAAK,GAA4B;AACrC,IAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;AACpB,IAAA,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;AACpB,IAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;AAClB,IAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtB,IAAA,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC;CACvB;AAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACtD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5B;MAsDa,uBAAuB,CAAA;AA0BlC,IAAA,WAAA,CAA6B,OAA6B,EAAA;QAA7B,IAAA,CAAA,OAAO,GAAP,OAAO;;QAxB3B,IAAA,CAAA,OAAO,GAAoB,OAAO;;AAElC,QAAA,IAAA,CAAA,KAAK,GAAa,CAAC,UAAU,CAAC;;QAI9B,IAAA,CAAA,QAAQ,GAAG,IAAI;;QAKxB,IAAA,CAAA,IAAI,GAAG,EAAE;;QAET,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,IAAI,GAAkB,CAAC;QAEf,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,OAAO,GAAG,CAAC;QACX,IAAA,CAAA,KAAK,GAAG,CAAC;IAK4C;AAE7D,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK;cACxG,IAAI,CAAC;cACL,OAAO;IACb;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7B;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,MAAM;IACf;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI;IACb;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE;QACpB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IACxB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE;YACjE,IAAI,CAAC,aAAa,EAAE;QACtB;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YACtB,IAAI,CAAC,YAAY,EAAE;QACrB;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAChE,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtC;IACF;;IAGQ,aAAa,GAAA;AACnB,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE;AACzD,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;AAC/C,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACvB,QAAA,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACnB;IAEQ,YAAY,GAAA;AAClB,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;YACxB;QACF;AACA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAK;YAClC,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO;QAC1B,CAAC,EAAE,IAAI,CAAC;IACV;;AAGQ,IAAA,UAAU,CAAC,KAAc,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE;AACpC,QAAA,MAAM,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC,IAAI;AAClC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAEhB,QAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAE1B,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE;AAC5E,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM;YACxB;QACF;QACA,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,MAAK;AAChC,YAAA,CAAC,EAAE;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;YACd,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AACpB,gBAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;YAC5B;QACF,CAAC,EAAE,EAAE,CAAC;IACR;IAEA,WAAW,GAAA;AACT,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,QAAA,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;IAC/B;+GAlIW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjDxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6mYAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBArDnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,cAClB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6mYAAA,CAAA,EAAA;sFAKQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,QAAQ,EAAA,CAAA;sBAAhB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;;;ACjLH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MA0Ha,oBAAoB,CAAA;AAtEjC,IAAA,WAAA,GAAA;QAuE6B,IAAA,CAAA,OAAO,GAAa,EAAE;AAKvC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;;AAGxC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAsC;QAIrE,IAAA,CAAA,YAAY,GAAG,EAAE;AAChB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAU;QAEzC,IAAA,CAAA,WAAW,GAAG,oBAAoB;;QAGlC,IAAA,CAAA,IAAI,GAAG,IAAI;AAKH,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,GAAG,GAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;;;QAGxB,IAAA,CAAA,KAAK,GAAG,CAAC;QAET,IAAA,CAAA,iBAAiB,GAAG,EAAE;AA2F/B,IAAA;AAxFC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACjG;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE;IACxE;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE;AAEA,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB;IAClD;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,EAAE;AACjE,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY;QAC1C;AACA,QAAA,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE;AACrE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY;QAC5C;AACA,QAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACtB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;QAChD;QACA,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;YAC1C,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACpC;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,iBAAiB,KAAK,EAAE;AAAE,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY;AAC7E,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;QAC9C,IAAI,CAAC,KAAK,EAAE;;AAEX,QAAA,QAA+C,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;AACtF,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAChD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;IACvB;;IAGQ,KAAK,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,EAAE;YAAE;QACT,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAc,wBAAwB,CAAC;AACjE,QAAA,IAAI,CAAC;YAAE,IAAI,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,GAAG,EAAE,EAAE;IAC1E;AAEA,IAAA,MAAM,CAAC,EAAU,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;YAEzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC;QAC1E;AACA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,cAAc,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACpC;AAEA,IAAA,OAAO,CAAC,CAAQ,EAAA;AACd,QAAA,MAAM,CAAC,GAAI,CAAC,CAAC,MAA2B,CAAC,KAAK;AAC9C,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAC7D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1B;AAEA,IAAA,IAAI,CAAC,CAAQ,EAAA;QACX,CAAC,CAAC,cAAc,EAAE;QAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AAC3B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM;AACtB,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;YAAE;AACf,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE;AAC9D,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;IACrD;AAEA,IAAA,KAAK,CAAC,CAAS,EAAA;;AAEb,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,CAAC;AAClC,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IACpC;IAEA,UAAU,CAAC,CAAgB,EAAE,CAAS,EAAA;QACpC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC/C;+GAzHW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,67GAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/DS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkEd,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAtEhC,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,67GAAA,CAAA,EAAA;8BAI0B,OAAO,EAAA,CAAA;sBAAjC,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAGhB,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAGS,WAAW,EAAA,CAAA;sBAApB;gBAGQ,UAAU,EAAA,CAAA;sBAAlB;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBACS,WAAW,EAAA,CAAA;sBAApB;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAE0B,OAAO,EAAA,CAAA;sBAAjC,SAAS;uBAAC,MAAM;;;ACvJnB;AACA;AACA;AACA;AACA;AACA;AA8CA,MAAM,KAAK,GAAiC;AAC1C,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB,EAAE;AACrE,IAAA,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE;AACxE,IAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,iBAAiB,EAAE;AACpE,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,gBAAgB,EAAE;CACrE;MAkEY,cAAc,CAAA;AAzD3B,IAAA,WAAA,GAAA;;QA2DW,IAAA,CAAA,KAAK,GAAqB,IAAI;;AAG7B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAmB;AAEtC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtD,IAAA,CAAA,KAAK,GAAY,EAAE;;;;QAIX,IAAA,CAAA,MAAM,GAAqB,IAAI;QAC/B,IAAA,CAAA,KAAK,GAA2B,IAAI;AACpC,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;AA2D1D,IAAA;AAzDC,IAAA,IAAI,CAAC,CAAY,EAAA;QACf,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IACnC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE;;QAEvB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK;AAAE,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;AAC3E,QAAA,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,IAAI;AACjC,QAAA,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE;;AAEzB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAC5B,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CACzC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC;AAC1E,YAAA,IAAI,GAAG;AAAE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;YAClC,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE,EAAE,CAAC;YACvF;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,MAAM;QACrB;aAAO,IAAI,MAAM,EAAE;;AAEjB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAC5B,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CACzC;QACH;IACF;AAEQ,IAAA,eAAe,CAAC,CAAQ,EAAA;AAC9B,QAAA,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACvB,QAAA,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAClC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACpB;AAEA,IAAA,SAAS,CAAC,CAAc,EAAA;QACtB,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,CAAC,CAAC,OAAO,EAAE;IAC1B;AAEA,IAAA,KAAK,CAAC,CAAY,EAAA;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK;;AAExB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,EAAE;AACL,YAAA,CAAC,CAAC,OAAO,GAAG,IAAI;AAChB,YAAA,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACzB;AACA,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GA1EW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApDf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6vEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlDS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqDd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAzD1B,SAAS;+BACE,UAAU,EAAA,UAAA,EACR,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6vEAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAGS,OAAO,EAAA,CAAA;sBAAhB;;;AC/HH;AACA;AACA;AACA;AACA;AACA;AACA;AAsDA,MAAM,IAAI,GAA6C;IACrD,OAAO,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,cAAc,CAAC;IACtG,GAAG,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACzG,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;IACtG,GAAG,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;AAClG,IAAA,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC;CAChC;AAED;AACA,MAAM,QAAQ,GAAc,EAAE,SAAS,EAAE,6BAA6B,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE;MAuDzG,mBAAmB,CAAA;AArDhC,IAAA,WAAA,GAAA;;QAuDW,IAAA,CAAA,MAAM,GAAiB,EAAE;;QAGzB,IAAA,CAAA,QAAQ,GAAmB,IAAI;;QAG/B,IAAA,CAAA,GAAG,GAAG,CAAC;;AAGN,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAoB;AAIvC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAGtD,IAAA,CAAA,IAAI,GAA8D,EAAE;QAE5D,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,IAAI,GAAiB,EAAE;AACvB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAoB;QACpC,IAAA,CAAA,OAAO,GAAc,EAAE;AACvB,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA4B;QAC7C,IAAA,CAAA,OAAO,GAAG,EAAE;AACZ,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,GAAG,EAAU;AACxB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,GAAG,EAAiC;QACzD,IAAA,CAAA,IAAI,GAAkB,IAAI;AA4J3B,IAAA;AA1JC,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;IACtD;AAEA,IAAA,IAAI,CAAC,CAAa,EAAA;QAChB,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC;IAClC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE;QACpD,IAAI,CAAC,OAAO,EAAE;IAChB;;IAGA,kBAAkB,GAAA;QAChB,IAAI,OAAO,GAAG,KAAK;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACzB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa;YAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,EAAE,KAAK,IAAI;gBAAE;AACjB,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY;YACzB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvB,OAAO,GAAG,IAAI;YAChB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAC9E,QAAA,IAAI,KAAK,CAAC,MAAM,EAAE;;AAEhB,YAAA,MAAM,GAAG,GAAG,qBAAqB,CAAC,MAAK;AACrC,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AACrB,gBAAA,MAAM,IAAI,GAAG,qBAAqB,CAAC,MAAK;AACtC,oBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACtB,oBAAA,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC1C,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,CAAC,CAAC;AACF,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,CAAC,CAAC;AACF,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACpB;aAAO,IAAI,OAAO,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;AAEQ,IAAA,IAAI,CAAC,EAAkB,EAAA;QAC7B,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC;QACtC,IAAI,GAAG,KAAK,IAAI;AAAE,YAAA,OAAO,IAAI;QAC7B,MAAM,KAAK,GACT,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK;QAC7D,OAAO,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI;IAChC;;IAGQ,IAAI,GAAA;AACV,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,QAAA,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;YAChB;QACF;AAEA,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;QACvB,MAAM,IAAI,GAAc,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAI;AAC1B,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBAAE;AACpE,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,GAAG,mBAAmB,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;AAC5G,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;AACzC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG;AAC5C,YAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAK;gBAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;gBACzB,IAAI,CAAC,OAAO,EAAE;YAChB,CAAC,EAAE,KAAK,CAAC;AACT,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxB;;AAGA,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAmB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1G,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAI,EAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI,EAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG;IACpB;;IAGQ,YAAY,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5E;;IAGQ,KAAK,CAAC,CAAS,EAAE,GAAY,EAAA;AACnC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;QAC9B,IAAI,GAAG,EAAE;YACP,IAAI,CAAC,GAAG,CAAC;AACT,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;AAAE,gBAAA,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;AACvD,YAAA,OAAO,EAAE,SAAS,EAAE,CAAA,WAAA,EAAc,CAAC,CAAC,CAAA,GAAA,CAAK,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE;QACtG;QACA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO;AACL,YAAA,SAAS,EAAE,CAAA,WAAA,EAAc,CAAC,CAAC,GAAG,EAAE,CAAA,UAAA,EAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAA,CAAA,CAAG;AAC5D,YAAA,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI;YACjC,MAAM,EAAE,CAAC,GAAG,YAAY,GAAG,MAAM;YACjC,MAAM,EAAE,GAAG,GAAG,CAAC;SAChB;IACH;;IAGQ,OAAO,GAAA;AACb,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;AACzC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI;QAE/F,MAAM,IAAI,GAA8D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;YAC1F,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ;AACnE,YAAA,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;AACnC,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AAC7D,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC9F,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AAEA,IAAA,OAAO,GAAA,EAAW,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACrD,IAAA,OAAO,GAAA,EAAW,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACtD,IAAA,SAAS,KAAW,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAAE,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAAE,IAAI,CAAC,OAAO,EAAE;AAAE,IAAA,CAAC,CAAC;AAChF,IAAA,UAAU,CAAC,CAAa,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,aAA4B;QAC5C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC,EAAE;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK;YAAE,IAAI,CAAC,OAAO,EAAE;QAAE;IACxF;AAEA,IAAA,SAAS,CAAC,CAAa,EAAA;QACrB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACrB;+GAxLW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,GAAA,EAAA,KAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAhDpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,irDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9CS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAiDd,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBArD/B,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,irDAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;gBAGQ,QAAQ,EAAA,CAAA;sBAAhB;gBAGQ,GAAG,EAAA,CAAA;sBAAX;gBAGS,OAAO,EAAA,CAAA;sBAAhB;gBAEwB,KAAK,EAAA,CAAA;sBAA7B,YAAY;uBAAC,SAAS;;;ACzIzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MA8Ha,iBAAiB,CAAA;AAxE9B,IAAA,WAAA,GAAA;;QA6EW,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAS1B,IAAA,CAAA,WAAW,GAAa,EAAE;;AAGzB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAY;AAE1C,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;;QAG9C,IAAA,CAAA,KAAK,GAAG,KAAK;;QAGL,IAAA,CAAA,QAAQ,GAAa,EAAE;AAoGhC,IAAA;AAjGC,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;YACrD,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QACvC;AACA,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE;QACpB;IACF;AAEA,IAAA,IAAY,IAAI,GAAA;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC;IAC7E;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;YAClB;QACF;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;YACjB;QACF;AACA,QAAA,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,YAAA,IAAI,CAAC,GAAG,GAAG,SAAS;AACtB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;AAChB,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,GAAW,EAAA;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ;AAC1C,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG;AAC/B,cAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG;AACjC,cAAE,CAAC,GAAG,OAAO,EAAE,GAAG,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACjD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5B;;AAGA,IAAA,KAAK,CAAC,IAAkB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI,CAAC,QAAQ,IAAI,MAAM;AACzD,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,OAAO,SAAS;AAC9C,QAAA,OAAO,QAAQ;IACjB;;AAGA,IAAA,QAAQ,CAAC,KAAW,EAAA;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,aAAA,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC,GAAG,CAAA,EAAA,EAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,OAAA,CAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAC9F,IAAI,CAAC,EAAE,CAAC;IACb;;;IAIQ,KAAK,CAAC,KAAW,EAAE,KAAa,EAAA;QACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,CAAC;QACxE,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,YAAA,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;AAChD,YAAA,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C;AACA,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnD,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;AACzC,YAAA,MAAM,GAAG,GAAe,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACjD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACrB,gBAAA,IAAI,CAAC;AAAE,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;AAC7C,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;AACvC,YAAA,CAAC,CAAC;AACF,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,YAAA,OAAO,GAAG;QACZ;QACA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClD,QAAA,MAAM,GAAG,GAAe,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACpB,YAAA,IAAI,CAAC;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA,CAAA,EAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/D,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAC1C,QAAA,CAAC,CAAC;AACF,QAAA,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjC,QAAA,OAAO,GAAG;IACZ;AAEQ,IAAA,GAAG,CAAC,IAAY,EAAA;AACtB,QAAA,OAAO;AACJ,aAAA,OAAO,CAAC,IAAI,EAAE,OAAO;AACrB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM;AACpB,aAAA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;IAC1B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;AAAE,YAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5D;+GA5HW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,8mGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAjES,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAoEd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAxE7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,8mGAAA,CAAA,EAAA;8BAKQ,OAAO,EAAA,CAAA;sBAAf;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,IAAI,EAAA,CAAA;sBAAZ;gBAGQ,WAAW,EAAA,CAAA;sBAAnB;gBAGS,UAAU,EAAA,CAAA;sBAAnB;;;ACtJH;AACA;AACA;AACA;AACA;AACA;AACA;AAuCA,MAAM,cAAc,GAAoB;AACtC,IAAA;AACE,QAAA,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE;AACvD,QAAA,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE;AAC5D,QAAA,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE;AACnF,KAAA;AACD,IAAA,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,CAAC;CAC/E;AAED;AACA;AACA,IAAI,OAAO,GAAG,CAAC,QAAQ;AAcvB;AACA,MAAM,SAAS,GAAG,CAAC,KAAa,KAC9B,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,SAAS;AAEhF;MAgHa,gBAAgB,CAAA;AA/G7B,IAAA,WAAA,GAAA;;QAiHW,IAAA,CAAA,MAAM,GAAoB,cAAc;;QAExC,IAAA,CAAA,MAAM,GAAoB,EAAE;;QAI5B,IAAA,CAAA,SAAS,GAAG,GAAG;QA4BxB,IAAA,CAAA,KAAK,GAAiB,IAAI;QAC1B,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,IAAI,GAAkB,IAAI;QAC1B,IAAA,CAAA,QAAQ,GAAG,KAAK;QAIR,IAAA,CAAA,UAAU,GAAkB,IAAI;QAChC,IAAA,CAAA,WAAW,GAAkB,IAAI;QACjC,IAAA,CAAA,KAAK,GAAG,KAAK;AA2ItB,IAAA;;IA1KC,IACI,OAAO,CAAC,GAA8B,EAAA;AACxC,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;QACnB,IAAI,CAAC,YAAY,EAAE;IACrB;AACA,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;;IAGA,IACI,QAAQ,CAAC,GAA8B,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,GAAG,GAAG;QACpB,IAAI,CAAC,aAAa,EAAE;IACtB;AACA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAgBA,IAAA,GAAG,CAAC,KAAa,EAAA;AACf,QAAA,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACjB,IAAI,CAAC,YAAY,EAAE;QACnB,IAAI,CAAC,aAAa,EAAE;IACtB;;IAIA,UAAU,CAAC,CAAc,EAAE,CAAQ,EAAA;AACjC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG;QACvB,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,aAA4B,CAAC;IACjD;IAEA,QAAQ,CAAC,CAAc,EAAE,CAAa,EAAA;AACpC,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAqB;AAClC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC;IAC7D;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI;YAAE,IAAI,CAAC,OAAO,EAAE;IAC3C;AAEQ,IAAA,OAAO,CAAC,CAAc,EAAE,EAAe,EAAE,GAAG,GAAG,KAAK,EAAA;AAC1D,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG;AAChE,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC;IAC/D;IAEQ,QAAQ,CAAC,CAAc,EAAE,EAAe,EAAA;AAC9C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI;YAAE;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;AAChE,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;;QAEpB,qBAAqB,CAAC,MAAK;AACzB,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACtC,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACrC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY;AAC3B,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YAChD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC1C,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AACrC,YAAA,qBAAqB,CAAC,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACpD,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,GAAA;AACb,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;AAC3C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;IACnB;IAEQ,YAAY,GAAA;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC;QACpE,IAAI,IAAI,EAAE;YACR,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;AACnC,YAAA,IAAI,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;QACtC;AAAO,aAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC3B,IAAI,CAAC,OAAO,EAAE;QAChB;IACF;AAEQ,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QAC9D,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAc,sBAAsB,CAAC;AACzE,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI;IAC7B;;IAIA,WAAW,CAAC,MAAqB,EAAE,CAAQ,EAAA;AACzC,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,GAAG;QAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,aAA4B,CAAC;IACzD;IAEA,SAAS,CAAC,MAAqB,EAAE,CAAa,EAAA;AAC5C,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,MAAqB;AAClC,QAAA,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;IACrE;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,SAAS,EAAE;IAClB;AAEQ,IAAA,UAAU,CAAC,MAAqB,EAAE,EAAe,EAAE,GAAG,GAAG,KAAK,EAAA;AACpE,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CACzB,MAAK;AACH,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,YAAA,IAAI,CAAC,GAAG;gBAAE;AACV,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACtC,YAAA,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACrC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAC1F,IAAI,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE;AAC1D,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,QAAA,CAAC,EACD,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CACzB;IACH;IAEA,SAAS,GAAA;AACP,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;IACvB;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC;AAChE,QAAA,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI;QACrD,IAAI,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,SAAS,EAAE;IAC9C;AAEQ,IAAA,SAAS,CAAC,GAAW,EAAA;AAC3B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AACrB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;QACvD,MAAM,OAAO,GAAG,GAAG,CAAC,gBAAgB,CAAc,YAAY,CAAC;AAC/D,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC3B,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IAC9B;+GAvLW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1GjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+8CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAxGS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA2Gd,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBA/G5B,SAAS;+BACE,YAAY,EAAA,UAAA,EACV,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+8CAAA,CAAA,EAAA;8BAKQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAOG,OAAO,EAAA,CAAA;sBADV;gBAWG,QAAQ,EAAA,CAAA;sBADX;gBASkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACC,KAAK,EAAA,CAAA;sBAAtB,SAAS;uBAAC,KAAK;;;AC5NlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAgCA,MAAM,GAAG,GAAG,EAAE;AACd,MAAMc,KAAG,GAAG,CAAC,CAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;MA8DnD,iBAAiB,CAAA;;IAU5B,IAAa,IAAI,CAAC,KAA+B,EAAA;AAC/C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;AACf,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE;gBACd,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,SAAS,EAAE;YAClB;QACF;IACF;AAyBA,IAAA,WAAA,CACmB,OAA6B,EAC7B,GAAsB,EACtB,IAA6B,EAAA;QAF7B,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,GAAG,GAAH,GAAG;QACH,IAAA,CAAA,IAAI,GAAJ,IAAI;;QA7CI,IAAA,CAAA,KAAK,GAAmB,EAAE;;QAE5C,IAAA,CAAA,KAAK,GAAG,WAAW;;QAEnB,IAAA,CAAA,MAAM,GAAG,cAAc;QAcvB,IAAA,CAAA,WAAW,GAAiB,OAAO;AAElC,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAgB;QAE9C,IAAA,CAAA,GAAG,GAAG,GAAG;QACT,IAAA,CAAA,GAAG,GAAGA,KAAG;AACT,QAAA,IAAA,CAAA,OAAO,GAA6C;AAC3D,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAClC,YAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;SACrC;QAED,IAAA,CAAA,EAAE,GAAiB,OAAO;QAC1B,IAAA,CAAA,IAAI,GAAc,EAAE;QACpB,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,QAAQ,GAAG,CAAC;QACZ,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,OAAO,GAAG,KAAK;QAEP,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,MAAM,GAAoC,EAAE;QAC5C,IAAA,CAAA,MAAM,GAAa,EAAE;IAM1B;IAEH,eAAe,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW;QAChD,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QACrC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM;YAC3C,IAAI;YACJ,KAAK;AACL,YAAA,EAAE,EAAE,CAAC;AACL,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YAChE,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG;AACxE,YAAA,WAAW,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,GAAG,QAAQ;YAClD,UAAU,EAAE,KAAK,GAAG,EAAE;AACvB,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,CAAC,SAAS,EAAE;;AAEhB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KACrB,IAAI,CAAC,KAAK,CAAC,MAAK;AACd,YAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG;AACzC,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAC7C;;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IACrE;AAEA,IAAA,MAAM,CAAC,KAAmB,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,EAAE,GAAG,KAAK;YACf,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,SAAS,EAAE;QAClB;AACA,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC7B;;IAGQ,OAAO,GAAA;QACb,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACtC,IAAI,CAAC,EAAE,KAAK,OAAO,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAC9D;AACD,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;YACzB,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5B,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;QACnB;AACA,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;IACzB;;AAGQ,IAAA,IAAI,CAAC,MAAc,EAAA;AACzB,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB;QACF;AACA,QAAA,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,GAAG,GAAG,IAAI;AAChB,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC1D,QAAA,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC/C;IAEQ,SAAS,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;QACvF,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,EAAE;AACL,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,UAAU;AAC5B,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,WAAW;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE;QACzB;IACF;IAEQ,KAAK,CAAC,EAAc,EAAE,EAAU,EAAA;AACtC,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE;IAClB;+GA3IW,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAd,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3ClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,m7FAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAGU,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBA/C7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,cACZ,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,QAAA,EAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,m7FAAA,CAAA,EAAA;+IAK0B,KAAK,EAAA,CAAA;sBAA/B,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAEhB,KAAK,EAAA,CAAA;sBAAb;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEY,IAAI,EAAA,CAAA;sBAAhB;gBAUQ,WAAW,EAAA,CAAA;sBAAnB;gBAES,UAAU,EAAA,CAAA;sBAAnB;;;AC5HH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA8BA,MAAM,IAAI,GAAmD;AAC3D,IAAA,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC;AAC1C,IAAA,GAAG,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC;AAC1C,IAAA,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC;AAC3C,IAAA,SAAS,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,cAAc,CAAC;CACnD;AACD,MAAM,IAAI,GAAe,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC;AACrD,MAAM,GAAG,GAAG,CAAC,CAAS,KAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG;AACrD,MAAM,KAAK,GAAG,CAAC,CAAS,MAAc,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,MAAM,QAAQ,GAAG,CAAC,CAAY,KAC5B,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAuBrE;MA+Ga,kBAAkB,CAAA;AA9G/B,IAAA,WAAA,GAAA;;QAgHW,IAAA,CAAA,KAAK,GAAG,EAAE;;QAEV,IAAA,CAAA,KAAK,GAAgB,EAAE;;QAMvB,IAAA,CAAA,SAAS,GAAG,CAAC;QAQb,IAAA,CAAA,eAAe,GAAkB,IAAI;AAEpC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;QAEnD,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,GAAG,GAAG,GAAG;QACT,IAAA,CAAA,KAAK,GAAG,KAAK;QACb,IAAA,CAAA,QAAQ,GAAG,QAAQ;QAE5B,IAAA,CAAA,IAAI,GAAkB,IAAI;QAClB,IAAA,CAAA,UAAU,GAAG,KAAK;QAElB,IAAA,CAAA,MAAM,GAAG,KAAK;AAoLvB,IAAA;;IApMC,IAAa,QAAQ,CAAC,KAAgC,EAAA;AACpD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,KAAK;IAC5C;IAeQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe;AACtD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;IACF;;AAGA,IAAA,IAAI,GAAG,GAAA;QACL,MAAM,GAAG,GAAU,EAAE;QACrB,MAAM,IAAI,GAAG,CAAC,IAAiB,EAAE,EAAU,EAAE,EAAQ,KAAU;AAC7D,YAAA,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,MAAM,GAAG,GAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;gBACb,IAAI,CAAC,CAAC,QAAQ;oBAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC;YAC/C;AACF,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AACnB,QAAA,OAAO,GAAG;IACZ;AAEA,IAAA,IAAI,GAAG,GAAA;QACL,OAAO,IAAI,CAAC,GAAG,CACb,CAAC,EACD,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACpG;IACH;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,IAAI,QAAQ;IAC9B;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,IAAI,CAAC,UAAU,EAAE;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC;IACxD;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;IACjD;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,QACE,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,GAAG,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAEjD;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,MAAM;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI;AAAE,YAAA,OAAO,aAAa,KAAK,CAAC,MAAM,CAAA,KAAA,EAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QACjF,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;AAC5D,QAAA,OAAO,UAAU,KAAK,CAAC,MAAM,CAAA,MAAA,EAAS,KAAK,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,KAAA,CAAO,GAAG,EAAE,EAAE;IACxE;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;AACtB,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM;AACpD,SAAA,CAAC,CAAC;IACL;AAEA,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE;IAC7D;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AACtB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;QACtB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAC3F,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAChB;IACH;AAEA,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,CAAA,EAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,QAAQ;IACjD;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,SAAS;IAChF;AAEA,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,GAAG;AAC3B,QAAA,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO;IAC5B;AAEA,IAAA,IAAI,CAAC,CAAY,EAAA;AACf,QAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;QAC7E,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;IACtD;AAEA,IAAA,SAAS,CAAC,CAAY,EAAA;AACpB,QAAA,OAAO,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ;IACpE;AAEA,IAAA,MAAM,CAAC,CAAY,EAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS;IAC3D;AAEA,IAAA,SAAS,CAAC,CAAY,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;IACxD;AAEA,IAAA,QAAQ,CAAC,CAAY,EAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,EAAE;AAChD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,EAAE;AAC3C,QAAA,OAAO,CAAA,EAAG,CAAC,CAAC,IAAI,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,EAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,IAAI,CAAA,CAAE;IAC7F;AAEA;AACmE;AACnE,IAAA,MAAM,CAAC,CAAM,EAAA;AACX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AACxB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG;AACpB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAM,KACnB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,GAAY,EAAE;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC;AAAE,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAChD;QACA,IAAI,CAAC,CAAC,EAAE;AAAE,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,cAAc,EAAE,CAAC;AAC3E,QAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAAE,YAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;AACpE,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,MAAM,CAAC,EAAiB,EAAA;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,IAAI,GAAG,EAAE;AACpC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B;AAEA,IAAA,KAAK,CAAC,CAAgB,EAAA;QACpB,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACnC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,EAAE;AACN,gBAAA,MAAM,EAAE,GAAI,CAAC,CAAC;qBACX,OAAO,CAAC,SAAS;sBAChB,aAAa,CAAc,CAAA,UAAA,EAAa,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA,EAAA,CAAI,CAAC;gBAC/D,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACpC;YACA;QACF;QACA,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;YAAE;AAC3B,QAAA,MAAM,IAAI,GAAG;YACX,IAAK,CAAC,CAAC,aAA6B,CAAC,gBAAgB,CAAc,WAAW,CAAC,IAAI,EAAE,CAAC;SACvF;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;QAC7D,IAAI,CAAC,GAAG,CAAC;YAAE;AACX,QAAA,MAAM,EAAE,GACN,CAAC,CAAC,GAAG,KAAK;AACR,cAAE,IAAI,CAAC,CAAC,GAAG,CAAC;AACZ,cAAE,CAAC,CAAC,GAAG,KAAK;AACV,kBAAE,IAAI,CAAC,CAAC,GAAG,CAAC;AACZ,kBAAE,CAAC,CAAC,GAAG,KAAK;AACV,sBAAE,IAAI,CAAC,CAAC;sBACN,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,cAAc,EAAE;QAClB,EAAE,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACpC;+GAjNW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzGnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,0/QAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAvGS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA0Gd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBA9G9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,0/QAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,SAAS,EAAA,CAAA;sBAAjB;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEY,QAAQ,EAAA,CAAA;sBAApB;gBAIQ,eAAe,EAAA,CAAA;sBAAvB;gBAES,cAAc,EAAA,CAAA;sBAAvB;;;AC/MH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkCA,MAAMkB,QAAM,GAAsC;AAChD,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,MAAM,EAAE,oBAAoB;AAC5B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,SAAS,EAAE,WAAW;CACvB;AAED,MAAM,KAAK,GAAG,CAAC,CAAS,KACtB,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;MAgI/C,qBAAqB,CAAA;AAsChC,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;IACjC;AACA,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;IAC1D;AACA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW;IACxD;AAQA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC;IAC1C;AA4BA,IAAA,WAAA,GAAA;;QAhFS,IAAA,CAAA,KAAK,GAA8B,EAAE;QAIrC,IAAA,CAAA,YAAY,GAAsB,WAAW;AAKtD;AACmF;QAC1E,IAAA,CAAA,KAAK,GAA4B,CAAC;AAKjC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAqB;;AAEnD,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,YAAY,EAAU;;AAEjC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAmC;;AAE7D,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ;AAM/B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAE7C,IAAA,CAAA,MAAM,GAAGA,QAAM;;QAGhB,IAAA,CAAA,KAAK,GAAsB,WAAW;;QAgBtC,IAAA,CAAA,KAAK,GAAG,CAAC;;QAOT,IAAA,CAAA,KAAK,GAA2B,EAAE;QAC1C,IAAA,CAAA,QAAQ,GAAiB,EAAE;;QAG3B,IAAA,CAAA,QAAQ,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,IAAI,GAAiE;YACnE,KAAK,EAAE,CAAC,CAAC;AACT,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,GAAG,EAAE,CAAC;SACP;QACO,IAAA,CAAA,OAAO,GAAG,KAAK;QACf,IAAA,CAAA,MAAM,GAAG,KAAK;;QAGd,IAAA,CAAA,OAAO,GAAa,EAAE;QACtB,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,UAAU,GAAG,CAAC;QACd,IAAA,CAAA,IAAI,GAAoB,IAAI;QAC5B,IAAA,CAAA,MAAM,GAAG,CAAC,GAAG;QACb,IAAA,CAAA,KAAK,GAAG,EAAE;AAEV,QAAA,IAAA,CAAA,UAAU,GAAG,CAAC,CAAa,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAGtD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;IAChC;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,UAAU,EAAE;QACvC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;YAAE,IAAI,CAAC,SAAS,EAAE;;QAE5D,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW;YAAE,IAAI,CAAC,WAAW,EAAE;IAC3E;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY;QAC9B,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,CAAC,SAAS,EAAE;QAChB,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;IACrD;IAEA,WAAW,GAAA;AACT,QAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;QACrB,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;IACxD;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACtC,YAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;AACpD,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS;YACzC,OAAO;AACL,gBAAA,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI;gBAChC,YAAY;gBACZ,KAAK;aACN;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,WAAW,EAAE;AAC1D,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,IAAI,GAAG,SAAS;YACvB;YACA;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,MAAK;gBAC3B,IAAI,CAAC,KAAK,EAAE;YACd,CAAC,EAAE,IAAI,CAAC;QACV;IACF;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;IACpF;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;YAC3B,IAAI,CAAC,SAAS,EAAE;QAClB;aAAO;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;YACrB,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,SAAS,EAAE;QAClB;QACA,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,UAAU,EAAE;IACnB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC/D;AAEQ,IAAA,QAAQ,CAAC,CAAoB,EAAA;AACnC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI;AACzB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AAC5C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;AACjE,QAAA,IAAI,OAAO,IAAI,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;QAC7B;AAAO,aAAA,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,GAAG,SAAS;QACvB;QACA,IAAI,CAAC,SAAS,EAAE;;QAEhB,cAAc,CAAC,MAAK;YAClB,IAAI,CAAC,OAAO,IAAI,OAAO;gBAAE,IAAI,CAAC,OAAO,EAAE;YACvC,IAAI,CAAC,SAAS,EAAE;AAClB,QAAA,CAAC,CAAC;IACJ;IAEQ,UAAU,GAAA;QAChB,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KACR,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;aAEtD,IAAI,CAAC,GAAG,CAAC;IACd;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACjC,aAAA,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC;IACF;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC5B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;AACjB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACvB,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC1B,IAAI,CAAC,UAAU,EAAE;IACnB;;IAGA,OAAO,CAAC,KAAa,EAAE,CAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YACtC,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;QAC3B;IACF;AAEA,IAAA,IAAI,CAAC,KAAa,EAAE,CAAQ,EAAE,GAAY,EAAA;AACxC,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B;AACzC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;YAAE;AACjB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE;AACtC,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,qBAAqB,EAAE;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AAC9B,QAAA,MAAM,IAAI,GACR,OAAO,IAAI,KAAK,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,IAAI,EAAE;QACzD,IAAI,CAAC,IAAI,GAAG;YACV,KAAK;YACL,IAAI;AACJ,YAAA,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI;YACvB,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;SAC5B;AACD,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,GAAG;AAAE,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QAC5B,CAAC,CAAC,eAAe,EAAE;QACnB,cAAc,CAAC,MAAK;AAClB,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,gBAAA,IAAI,CAAC,OAAO,GAAG,KAAK;gBACpB,IAAI,CAAC,MAAM,EAAE;qBACV,aAAa,CAAc,QAAQ;sBAClC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACpC;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,SAAS,GAAA;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AAC7C,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,SAAS,EAAE;YACb,cAAc,CAAC,MACb,IAAI,CAAC,MAAM,CAAC,IAAc,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC5D;QACH;IACF;AAEQ,IAAA,MAAM,CAAC,CAAS,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAC3C,CAAA,gBAAA,EAAmB,CAAC,CAAA,EAAA,CAAI,CACzB;IACH;AAEA,IAAA,OAAO,CAAC,CAAgB,EAAA;AACtB,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CACpB,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAc,QAAQ,CAAC,IAAI,EAAE,CACzE;QACD,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,aAA4B,CAAC;AAC5D,QAAA,MAAM,EAAE,GAA4C;AAClD,YAAA,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC;AACpC,YAAA,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;AAC/C,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YACZ,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;SACzB;AACD,QAAA,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YACb,CAAC,CAAC,cAAc,EAAE;AAClB,YAAA,EAAE,CAAC,CAAC,CAAC,GAAG,CAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QAC3C;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC7B,CAAC,CAAC,cAAc,EAAE;YAClB,CAAC,CAAC,eAAe,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,SAAS,EAAE;QAClB;AAAO,aAAA,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;YAClB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;IAEA,GAAG,CAAC,KAAa,EAAE,IAAY,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,IAAI,EAAE;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,UAAU,EAAE;IACnB;AAEQ,IAAA,QAAQ,CAAC,CAAa,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE;AACpB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAiB;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa;AACtC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;QACpC,IACE,CAAC,CAAC,WAAW;AACb,YAAA,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjB,YAAA,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAC3C;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACvB;IACF;;AAGQ,IAAA,OAAO,CAAC,EAAe,EAAA;AAC7B,QAAA,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AACvC,YAAA,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,CAAC;AAC/B,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KACzD,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAC9B;AACD,YAAA,IAAI,CAAC,MAAM,GAAG,CAAC;QACjB;QACA,OAAO,IAAI,CAAC,IAAI;IAClB;AAEQ,IAAA,IAAI,CAAC,EAAqB,EAAA;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC;IACvC;IAEQ,KAAK,CAAC,IAAc,EAAE,KAAc,EAAA;AAC1C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa;AACnC,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE;YAAE;AAChB,QAAA,MAAM,GAAG,GAAG,gBAAgB,IAAI,CAAC;AACjC,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW;AACxB,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY;AACzB,QAAA,IAAI,CAAC,CAAC;YAAE;QACR,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,GAAG,EAAE;AACxB,YAAA,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG;AAClB,YAAA,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG;QACrB;QACA,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,CAAC;YAAE;AACR,QAAA,CAAC,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;AACvC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,YAAA,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3C,CAAC,CAAC,WAAW,GAAG;AACd,kBAAE;AACA,sBAAE;AACF,sBAAE;kBACF,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;YAC1C,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG;YAC1C,CAAC,CAAC,SAAS,EAAE;YACb,IAAI,CAAC,CAAC,SAAS;AAAE,gBAAA,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;;AACzD,gBAAA,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACxC,CAAC,CAAC,IAAI,EAAE;QACV;IACF;IAEQ,KAAK,GAAA;AACX,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,EAAE;YAAE;;AAET,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAAE,YAAA,CAAC,EAAE;AAC1B,QAAA,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,KAAK,CACR,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AAC7C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AACrE,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/D,QAAA,CAAC,CAAC,EACF,IAAI,CACL;IACH;IAEQ,SAAS,GAAA;AACf,QAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,SAAS;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;AACtC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;;YAEd,MAAM,KAAK,GAAG,MAAK;AACjB,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI;gBAChB,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,CAAC;YACD,IAAI,CAAC,KAAK,EAAE;AACZ,YAAA,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE;gBACxC,IAAI,CAAC,EAAE,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC;AACnC,gBAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB;YACA;QACF;AACA,QAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAI;AACzB,YAAA,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;YACtC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,gBAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK;AACpB,gBAAA,MAAM,CAAC,GACL,IAAI,CAAC,GAAG,KAAK;AACX,sBAAE,OAAO,CAAC,KAAK;0BACX,CAAC;AACH,0BAAE;sBACF,CAAC;gBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;AAAE,oBAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YACrD;YACA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CACR,KAAK,CAAC,IAAI,CACR,EAAE,MAAM,EAAE,CAAC,EAAE,EACb,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CACzD,EACD,KAAK,CACN;AACH,QAAA,CAAC;AACD,QAAA,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;IACxC;+GA1aW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjHtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+oHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA/GS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAkHd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAtHjC,SAAS;+BACE,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8GT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+oHAAA,CAAA,EAAA;wDAOQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,KAAK,EAAA,CAAA;sBAAb;gBACQ,YAAY,EAAA,CAAA;sBAApB;gBAGQ,OAAO,EAAA,CAAA;sBAAf;gBAIQ,KAAK,EAAA,CAAA;sBAAb;gBAGQ,MAAM,EAAA,CAAA;sBAAd;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAES,IAAI,EAAA,CAAA;sBAAb;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBAEkB,IAAI,EAAA,CAAA;sBAAtB,SAAS;uBAAC,MAAM;gBACE,OAAO,EAAA,CAAA;sBAAzB,SAAS;uBAAC,MAAM;gBACC,MAAM,EAAA,CAAA;sBAAvB,SAAS;uBAAC,KAAK;;;ACjNlB;AACA;AACA;AACA;AACA;AACA;AACA;AA8CA,MAAM,QAAQ,GAA6B;AACzC,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,SAAS,EAAE,WAAW;AACtB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,KAAK,EAAE,eAAe;AACtB,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,WAAW,EAAE,iDAAiD;AAC9D,IAAA,UAAU,EAAE,kBAAkB;AAC9B,IAAA,OAAO,EAAE,aAAa;CACvB;AAED,MAAM,GAAG,GAAG,CAAC,CAAS,KACpB,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;MAqE3D,iBAAiB,CAAA;AAnE9B,IAAA,WAAA,GAAA;;QAqEW,IAAA,CAAA,KAAK,GAAe,MAAM;;QAE1B,IAAA,CAAA,KAAK,GAAG,CAAC;;QAET,IAAA,CAAA,KAAK,GAAG,KAAK;;QAEb,IAAA,CAAA,WAAW,GAAG,KAAK;;QAEnB,IAAA,CAAA,OAAO,GAAwB,IAAI;;QAEnC,IAAA,CAAA,IAAI,GAAG,EAAE;;QAET,IAAA,CAAA,OAAO,GAAG,CAAC;QAGX,IAAA,CAAA,MAAM,GAAmB,EAAE;QAC3B,IAAA,CAAA,SAAS,GAAG,EAAE;AAEb,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAW;AACzC,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,YAAY,EAAQ;AAChC,QAAA,IAAA,CAAA,GAAG,GAAG,IAAI,YAAY,EAAQ;;AAE9B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAQ;AAI3B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC;QAEtD,IAAA,CAAA,CAAC,GAA6B,QAAQ;QA8B7B,IAAA,CAAA,GAAG,GAAG,GAAG;;;;;QAaV,IAAA,CAAA,MAAM,GAAqB,IAAI;QAC/B,IAAA,CAAA,GAAG,GAAG,CAAC;QACP,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAAG,CAAC;QACR,IAAA,CAAA,IAAI,GAA4B,IAAI;QACpC,IAAA,CAAA,MAAM,GAAG,CAAC,GAAG;QAEb,IAAA,CAAA,IAAI,GAAG,IAAI;QACX,IAAA,CAAA,OAAO,GAAG,KAAK;AAuDxB,IAAA;;AAvGC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,GAAG,OAAO,GAAG,IAAI,CAAC,KAAK;IACxE;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,MAAM,GAAG,GAA2B;AAClC,YAAA,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK;AAClB,YAAA,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS;AAC3B,YAAA,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK;AACnB,YAAA,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK;SACpB;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IAC7B;AACA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;IACxD;AACA,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE;IAClD;AACA,IAAA,IAAI,EAAE,GAAA;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,CAAA,EAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB;IAClD;AAGA,IAAA,KAAK,CAAC,IAAY,EAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACxC;AAEA,IAAA,SAAS,CAAC,IAAa,EAAA;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7B;AAgBA,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,OAAO,CAAC,QAAQ,CAAC;AAAE,YAAA,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;;QAE/D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE;AAClF,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,YAAA,cAAc,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C;IACF;IAEA,eAAe,GAAA;AACb,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,EAAE;YAAE;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE;AAClB,QAAA,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,sBAAsB,IAAI,MAAM,EAAE;YACpC,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;AAC5E,YAAA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACrB;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE;AACzB,YAAA,MAAM,IAAI,GAAG,CAAC,CAAS,KAAU;AAC/B,gBAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC;AAClG,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC;gBACb,IAAI,IAAI,CAAC,IAAI;AAAE,oBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,gBAAA,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;AACxC,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC;QACxC;IACF;AAEQ,IAAA,IAAI,CAAC,EAAU,EAAA;AACrB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa;AACpC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAAE;AACzB,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;AAC7B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;YACzC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAc,SAAS,CAAC;YAC9C,MAAM,GAAG,GAAG,GAAG,EAAE,aAAa,CAAC,aAAa,CAAC;YAC7C,MAAM,EAAE,GAAG,GAAG,EAAE,aAAa,CAAC,YAAY,CAAC;AAC3C,YAAA,IAAI,GAAG,IAAI,EAAE,EAAE;AACb,gBAAA,IAAI,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC;AACzF,gBAAA,IAAI,CAAC,MAAM,GAAG,GAAG;YACnB;QACF;QACA,IAAI,IAAI,CAAC,IAAI;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxG;IAEA,WAAW,GAAA;AACT,QAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAA,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE;AACrB,QAAA,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;IACrB;+GAvIW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,GAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,IAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA9DlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+6LAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA5DS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FA+Dd,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnE7B,SAAS;+BACE,cAAc,EAAA,UAAA,EACZ,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+6LAAA,CAAA,EAAA;8BAKQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,KAAK,EAAA,CAAA;sBAAb;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,WAAW,EAAA,CAAA;sBAAnB;gBACQ,MAAM,EAAA,CAAA;sBAAd;gBACQ,SAAS,EAAA,CAAA;sBAAjB;gBAES,WAAW,EAAA,CAAA;sBAApB;gBACS,KAAK,EAAA,CAAA;sBAAd;gBACS,GAAG,EAAA,CAAA;sBAAZ;gBAES,OAAO,EAAA,CAAA;sBAAhB;gBAEwB,KAAK,EAAA,CAAA;sBAA7B,SAAS;uBAAC,IAAI;;AAqHjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CX;AAEF;;AAE4F;AAC5F,SAAS,SAAS,CAAC,EAAqB,EAAA;;;AAGtC,IAAA,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;AAC1F,IAAA,IAAI,CAAC,EAAE;AAAE,QAAA,OAAO,IAAI;AACpB,IAAA,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AACtC,IAAA,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAe,KAAU;QAC/C,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACxB,QAAA,EAAE,CAAC,SAAS,GAAG,MAAM;AACrB,QAAA,EAAE,CAAC,SAAS,GAAG,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1C,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;QACjB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;QACjB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;AACnB,IAAA,CAAC;AACD,IAAA,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;IAC5G,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG;AACnD,IAAA,MAAM,GAAG,GAAG,CAAC,GAAW,KAAa;AACnC,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,GAAG;AAAE,YAAA,OAAO,KAAK;QACrC,EAAE,GAAG,GAAG;QACR,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;QACzB,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC;AAC5B,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,IAAa,KAAU;AACtE,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,EAAE,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QAAE;AACpC,QAAA,IAAI,CAAC,KAAK,EAAE,EAAE;YAAE,EAAE,GAAG,CAAC;AAAE,YAAA,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QAAE;AACpC,QAAA,MAAM,CAAC,GAAG,IAAI,IAAI,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC;QACxE,IAAI,GAAG,GAAG;AACV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAAE,YAAA,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAAE,YAAA,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE;AAC5F,IAAA,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;IAC/G,IAAI,EAAE,EAAE;AACN,QAAA,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,GAAW,KAAiB;YACpD,MAAM,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAE;AAChC,YAAA,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC;AACvB,YAAA,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;AACnB,YAAA,OAAO,CAAC;AACV,QAAA,CAAC;AACD,QAAA,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,EAAG;AAC9B,QAAA,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,aAAa,EAAE,0DAA0D,CAAC,CAAC;AACrG,QAAA,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AACjD,QAAA,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;AAClB,QAAA,MAAM,IAAI,GAAG,MAAW,EAAG,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE;AAAE,YAAA,IAAI,EAAE;AAAE,YAAA,OAAO,IAAI;QAAE;AACxE,QAAA,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;AACjB,QAAA,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC;AACjD,QAAA,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC;QAC9F,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,GAAG,CAAC;AACvC,QAAA,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAC7B,QAAA,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAS,KAAkC,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,QAAA,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QACvE,OAAO;AACL,YAAA,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,CAAS,EAAA;AAChD,gBAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC7B,IAAI,GAAG,CAAC,GAAG,CAAC;oBAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC;gBACtB,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,gBAAA,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB,gBAAA,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;AACpB,gBAAA,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;AACrB,gBAAA,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC;gBACrB,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;YACD,IAAI;SACL;IACH;IACA,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;AAC7B,IAAA,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;;;AAGnB,IAAA,MAAM,EAAE,GAAG,CAAC,CAAe,EAAE,CAAe,KAAU;AACpD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QACjD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAC7E,IAAA,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAe,EAAE,CAAe,EAAE,GAAW,KAAU;QAClE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACjG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;QACzC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;QACzC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;AAC3C,IAAA,CAAC;AACD,IAAA,MAAM,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC;AACxG,IAAA,MAAM,MAAM,GAAG,CAAC,CAAe,EAAE,EAAU,EAAE,CAAC,GAAG,CAAC,KAChD,CAAA,KAAA,EAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,EAAE,GAAG;IACvG,MAAM,IAAI,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,KAA0B,KAAoB;AAC7F,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;AAAE,YAAA,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAW,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC;AACpG,QAAA,OAAO,CAAC;AACV,IAAA,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,uBAAuB,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9G,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACpF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC7F,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAC5F,IAAI,CAAC,GAA2G,IAAI;AACpH,IAAA,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,IAA6B,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,KAAU;QACtF,CAAC,CAAC,YAAY,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AACxE,QAAA,CAAC,CAAC,SAAS,GAAG,IAAI;AAClB,QAAA,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,IAAA,CAAC;IACD,OAAO;AACL,QAAA,KAAK,CAAC,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,CAAS,EAAA;AAChD,YAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,GAAG,CAAC,GAAG,CAAC;YACR,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;gBAC9B,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC;AACrB,gBAAA,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,gBAAA,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACT,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;gBACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AAAE,oBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,gBAAA,CAAC,GAAG;oBACF,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACvB,oBAAA,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBAC7D;YACH;YACA,MAAM,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI;AAClC,YAAA,GAAG,GAAG,CAAC,GAAG,CAAC;AACX,YAAA,GAAG,GAAG,GAAG,GAAG,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACnD,YAAA,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC,CAAC,IAAI,EAAE;YACR,CAAC,CAAC,SAAS,EAAE;AACb,YAAA,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC,IAAI,EAAE;AACR,YAAA,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI;YACpB,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtB,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACjE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;AACzE,YAAA,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;YACxE,CAAC,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;YAChC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;AACtB,YAAA,CAAC,CAAC,WAAW,GAAG,CAAC;YACjB,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnB,YAAA,CAAC,CAAC,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,CAAC,OAAO,EAAE;QACb,CAAC;AACD,QAAA,IAAI,KAAU,CAAC;KAChB;AACH;;ACxeA;AACA;AACA;AACA;AACA;AACA;AACA;AAyCA,MAAM,MAAM,GAAgD;AAC1D,IAAA,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AACxB,IAAA,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;AAClB,IAAA,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC;AACxB,IAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC;AACxC,IAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC;AACxC,IAAA,OAAO,EAAE,CAAC,kBAAkB,EAAE,SAAS,CAAC;CACzC;AAaD;MA0Ha,kBAAkB,CAAA;AAzH/B,IAAA,WAAA,GAAA;QA0HW,IAAA,CAAA,OAAO,GAAe,EAAE;;QAExB,IAAA,CAAA,IAAI,GAAG,KAAK;;QASZ,IAAA,CAAA,IAAI,GAAG,IAAI;AAEV,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAW;QAEzC,IAAA,CAAA,MAAM,GAAG,MAAM;QAExB,IAAA,CAAA,GAAG,GAAkB,IAAI;QACzB,IAAA,CAAA,IAAI,GAAG,EAAE;QAED,IAAA,CAAA,UAAU,GAAG,KAAK;QAClB,IAAA,CAAA,KAAK,GAAG,IAAI;QACZ,IAAA,CAAA,KAAK,GAA4B,EAAE;QACnC,IAAA,CAAA,QAAQ,GAAG,EAAE;AAgGtB,IAAA;;IAjHC,IAAa,IAAI,CAAC,KAA0B,EAAA;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,KAAK,SAAS;QACrC,IAAI,KAAK,KAAK,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;IAC7C;AAgBA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtF;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D;AAEA,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/B;AAEA,IAAA,IAAI,IAAI,GAAA;QACN,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC/F,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,WAAA,EAAc,IAAI,CAAA,WAAA,CAAa;AAC3E,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;AAClE,QAAA,IAAI,OAAO;AAAE,YAAA,OAAO,CAAA,eAAA,EAAkB,OAAO,CAAC,KAAK,GAAG;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;AAC3E,QAAA,IAAI,OAAO;YAAE,OAAO,CAAA,QAAA,EAAW,OAAO,CAAA,MAAA,CAAQ;AAC9C,QAAA,OAAO,mBAAmB;IAC5B;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;IACvF;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,IAAI,CAAC,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE;AAC3B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YACjD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;YACnC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;AAC7C,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,CAAW,EAAA;AAClB,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM;IAC1B;AAEA,IAAA,OAAO,CAAC,CAAW,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,IAAI,KAAK;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI;IAClC;AAEA,IAAA,MAAM,CAAC,CAAU,EAAA;AACf,QAAA,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;IAChF;AAEA,IAAA,MAAM,CAAC,CAAW,EAAA;AAChB,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM;AAAE,YAAA,OAAO,IAAI;AACpC,QAAA,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,CAAA,EAAG,CAAC,CAAC,OAAO,CAAA,QAAA,CAAU,GAAG,YAAY;QAC7D,OAAO,CAAA,EAAG,CAAC,CAAC,KAAK,KAAK,GAAG,CAAA,EAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA,CAAE;IAC3D;AAEA,IAAA,SAAS,CAAC,CAAU,EAAA;AAClB,QAAA,OAAO,CAAA,EAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAA,EAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;IACxF;AAEA,IAAA,SAAS,CAAC,CAAqB,EAAA;QAC7B,IAAI,CAAC,KAAK,SAAS;AAAE,YAAA,OAAO,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,UAAU,CAAC,CAAA,EAAA,EAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,CAAA,CAAE,GAAG,CAAA,OAAA,EAAU,CAAC,CAAA,CAAE;IACnE;IAEA,MAAM,GAAA;QACJ,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3B;AAEA,IAAA,OAAO,CAAC,CAAW,EAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE;QACvB,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;IAC3D;AAEQ,IAAA,OAAO,CAAC,CAAU,EAAA;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzB;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QACpB;;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC;AAClE,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAA,MAAA,EAAS,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,OAAO,GAAG,CAAA,cAAA,EAAiB,OAAO,CAAC,KAAK,CAAA,CAAE,GAAG,EAAE;QAC/F,IAAI,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ,EAAE;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAClB;IACF;+GAvHW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EApHnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,onLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAlHS,eAAe,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FAqHd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAzH9B,SAAS;+BACE,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,aAAA,EACD,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,eAAe,CAAC,EAAA,QAAA,EAChB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiHT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,onLAAA,CAAA,EAAA;8BAIQ,OAAO,EAAA,CAAA;sBAAf;gBAEQ,IAAI,EAAA,CAAA;sBAAZ;gBAEQ,MAAM,EAAA,CAAA;sBAAd;gBAEY,IAAI,EAAA,CAAA;sBAAhB;gBAKQ,IAAI,EAAA,CAAA;sBAAZ;gBAES,UAAU,EAAA,CAAA;sBAAnB;;;AC3MH;AACA;AACA;AAEA;;ACJA;;AAEG;;"}