@argusoft/medplat-core 1.0.28 → 1.0.30

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 (229) hide show
  1. package/dist/AccessRights-xrday-L1.js +1023 -0
  2. package/dist/AccessRights-xrday-L1.js.map +1 -0
  3. package/dist/AddEditQueryBuilder-D-iQiVIe.js +365 -0
  4. package/dist/AddEditQueryBuilder-D-iQiVIe.js.map +1 -0
  5. package/dist/{AddFeatures-C0Z29oSd.js → AddFeatures-D1sU8RjY.js} +2 -2
  6. package/dist/{AddFeatures-C0Z29oSd.js.map → AddFeatures-D1sU8RjY.js.map} +1 -1
  7. package/dist/AddLabelModal-Bq-wRqv9.js +631 -0
  8. package/dist/AddLabelModal-Bq-wRqv9.js.map +1 -0
  9. package/dist/AddMenuConfiguration-e5BVXhmw.js +8547 -0
  10. package/dist/AddMenuConfiguration-e5BVXhmw.js.map +1 -0
  11. package/dist/{AddRoleDrawer-CQdzQZLb.js → AddRoleDrawer-0gqAK8N0.js} +62 -63
  12. package/dist/AddRoleDrawer-0gqAK8N0.js.map +1 -0
  13. package/dist/AppModal-CCtrQ5Tr.js +394 -0
  14. package/dist/AppModal-CCtrQ5Tr.js.map +1 -0
  15. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js +387 -0
  16. package/dist/BrandsPage-DmRW5bhm-Bk1szrjI.js.map +1 -0
  17. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js +391 -0
  18. package/dist/CategoriesPage-BsS5IQh3-B03lWRY5.js.map +1 -0
  19. package/dist/{ChangePasswordModalCore-CDxkeIIM.js → ChangePasswordModalCore-BPsJquTS.js} +1606 -1611
  20. package/dist/ChangePasswordModalCore-BPsJquTS.js.map +1 -0
  21. package/dist/{ConditionConfig-DSsgGEXS.js → ConditionConfig-Ddz9halE.js} +2 -2
  22. package/dist/ConditionConfig-Ddz9halE.js.map +1 -0
  23. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js +435 -0
  24. package/dist/DashboardPage-C3bKc5na-sBd9Yqbi.js.map +1 -0
  25. package/dist/{EntityManagement-GaYsBTvf.js → EntityManagement-CPQL6qBj.js} +2 -2
  26. package/dist/{EntityManagement-GaYsBTvf.js.map → EntityManagement-CPQL6qBj.js.map} +1 -1
  27. package/dist/EventConfig-BmLemzX3.js +26 -0
  28. package/dist/EventConfig-BmLemzX3.js.map +1 -0
  29. package/dist/{EventConfigurations-kNtAj_WM.js → EventConfigurations-Bzh1qWXU.js} +31 -30
  30. package/dist/{EventConfigurations-kNtAj_WM.js.map → EventConfigurations-Bzh1qWXU.js.map} +1 -1
  31. package/dist/{EventsExceptionModal-D4Bf1ilS.js → EventsExceptionModal-B2SRrnB1.js} +2 -2
  32. package/dist/{EventsExceptionModal-D4Bf1ilS.js.map → EventsExceptionModal-B2SRrnB1.js.map} +1 -1
  33. package/dist/EventsSkeleton-BIcPks4T.js +61 -0
  34. package/dist/EventsSkeleton-BIcPks4T.js.map +1 -0
  35. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js +79 -0
  36. package/dist/FacilityPicker-BiZeupmP-CyPHmj6b.js.map +1 -0
  37. package/dist/FeatureMenu-DYJmDt7q.js +521 -0
  38. package/dist/FeatureMenu-DYJmDt7q.js.map +1 -0
  39. package/dist/Features-Dne21RWu.js +14 -0
  40. package/dist/Features-Dne21RWu.js.map +1 -0
  41. package/dist/{FhirServerList-Dkq7Kbes.js → FhirServerList-DuTwnngN.js} +19 -19
  42. package/dist/{FhirServerList-Dkq7Kbes.js.map → FhirServerList-DuTwnngN.js.map} +1 -1
  43. package/dist/{FhirServerWizard-Db6Hm4bQ.js → FhirServerWizard-DZI8Olku.js} +15 -15
  44. package/dist/{FhirServerWizard-Db6Hm4bQ.js.map → FhirServerWizard-DZI8Olku.js.map} +1 -1
  45. package/dist/FlywayQuery-CQygj51V.js +179 -0
  46. package/dist/FlywayQuery-CQygj51V.js.map +1 -0
  47. package/dist/{ManageNotification-CaBAOhji.js → Google-DQxMfbaL.js} +1725 -2652
  48. package/dist/{ManageNotification-CaBAOhji.js.map → Google-DQxMfbaL.js.map} +1 -1
  49. package/dist/GrantPermissionModal-BDN66Atn.js +236 -0
  50. package/dist/GrantPermissionModal-BDN66Atn.js.map +1 -0
  51. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js +7639 -0
  52. package/dist/ImmunizationConfigurationBase-Di1KO3oW.js.map +1 -0
  53. package/dist/ImmunizationConfigurationBase.css +1 -1
  54. package/dist/ImmunizationConfigurationsList-TZcLDEci.js +369 -0
  55. package/dist/ImmunizationConfigurationsList-TZcLDEci.js.map +1 -0
  56. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js +665 -0
  57. package/dist/InventoryPage-C_AxSy7A-QLvlL4rE.js.map +1 -0
  58. package/dist/LanguagesModal-B3NTebYT.js +352 -0
  59. package/dist/LanguagesModal-B3NTebYT.js.map +1 -0
  60. package/dist/ManageDynamicFeature-BU0I45dd.js +4475 -0
  61. package/dist/ManageDynamicFeature-BU0I45dd.js.map +1 -0
  62. package/dist/{ManageEventConfiguration-DV3I5POA.js → ManageEventConfiguration-CoYcpjR9.js} +465 -397
  63. package/dist/ManageEventConfiguration-CoYcpjR9.js.map +1 -0
  64. package/dist/ManageNotification-C5MhV77Q.js +934 -0
  65. package/dist/ManageNotification-C5MhV77Q.js.map +1 -0
  66. package/dist/{ManageRole-CGYfglpo.js → ManageRole-CNZBRKGU.js} +32 -30
  67. package/dist/ManageRole-CNZBRKGU.js.map +1 -0
  68. package/dist/ManageTranslation-vRiptUAP.js +833 -0
  69. package/dist/ManageTranslation-vRiptUAP.js.map +1 -0
  70. package/dist/ManageTranslation.css +1 -1
  71. package/dist/{ManageUser-AY1EUDLI.js → ManageUser-DCFkUMV9.js} +1722 -1586
  72. package/dist/ManageUser-DCFkUMV9.js.map +1 -0
  73. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js +272 -0
  74. package/dist/MemberProfileCard-BdUNgHRB-VywqQdFF.js.map +1 -0
  75. package/dist/MobileAnalytics-pQoE8cG1.js +16888 -0
  76. package/dist/MobileAnalytics-pQoE8cG1.js.map +1 -0
  77. package/dist/MobileMenuManagement-Cf8IZlla.js +108 -0
  78. package/dist/MobileMenuManagement-Cf8IZlla.js.map +1 -0
  79. package/dist/{MobileTypeEventConfigModal-BxLympIO.js → MobileTypeEventConfigModal-BeveaX0C.js} +2 -2
  80. package/dist/MobileTypeEventConfigModal-BeveaX0C.js.map +1 -0
  81. package/dist/NotificationFlywayQuery-BAHVjf6N.js +247 -0
  82. package/dist/NotificationFlywayQuery-BAHVjf6N.js.map +1 -0
  83. package/dist/{NotificationList-C3Vb_jKU.js → NotificationList-DEyRZEuM.js} +109 -110
  84. package/dist/NotificationList-DEyRZEuM.js.map +1 -0
  85. package/dist/{OtherTypeEventConfigModal-BeG1GrUi.js → OtherTypeEventConfigModal-CM6VkdmY.js} +570 -478
  86. package/dist/OtherTypeEventConfigModal-CM6VkdmY.js.map +1 -0
  87. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js +482 -0
  88. package/dist/PaymentCreatePage-CIVe0P0p-25BQVpOX.js.map +1 -0
  89. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js +157 -0
  90. package/dist/PaymentsPage-BvPe5Q9F-D2gfziwW.js.map +1 -0
  91. package/dist/PermissionsModal-CCYkcKlC.js +151 -0
  92. package/dist/PermissionsModal-CCYkcKlC.js.map +1 -0
  93. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js +119 -0
  94. package/dist/PickupBatchLinesEditor-DHmcAG23-DL2p6IKJ.js.map +1 -0
  95. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js +783 -0
  96. package/dist/PickupCreatePage-CB0Sl0Hb-Mmj7zESG.js.map +1 -0
  97. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js +818 -0
  98. package/dist/PickupsPage-Ctpghavs-CUp4uIZq.js.map +1 -0
  99. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js +599 -0
  100. package/dist/PmGuard-b10TGXEi-G3N0G_Wg.js.map +1 -0
  101. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js +1302 -0
  102. package/dist/ProductEditPage-C1thoKHu-URQaZ6st.js.map +1 -0
  103. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js +252 -0
  104. package/dist/ProductsPage-CupVmOD4-D45a_hf-.js.map +1 -0
  105. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js +648 -0
  106. package/dist/PurchaseCreatePage-YD3NmhPQ-2j4etSjM.js.map +1 -0
  107. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js +1577 -0
  108. package/dist/PurchaseRequestDetailPage-Dg_MRY_N-D1bgTEAn.js.map +1 -0
  109. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js +279 -0
  110. package/dist/PurchaseRequestsPage-DPAPzpmm-mDH2IrTl.js.map +1 -0
  111. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js +293 -0
  112. package/dist/PurchasesPage-It1GHiXl-eH4IsF_U.js.map +1 -0
  113. package/dist/QueryBuilder-CXaBe6sr.js +478 -0
  114. package/dist/QueryBuilder-CXaBe6sr.js.map +1 -0
  115. package/dist/{RoleManagement-BPl2cE27.js → RoleManagement-s8iNx2Mu.js} +131 -142
  116. package/dist/RoleManagement-s8iNx2Mu.js.map +1 -0
  117. package/dist/Roles-BIyiic67.js +14 -0
  118. package/dist/Roles-BIyiic67.js.map +1 -0
  119. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js +544 -0
  120. package/dist/SaleCreatePage-C9kFmTvm-B3Y0o4CX.js.map +1 -0
  121. package/dist/SalesPage-D18DCseD-BxktGDRQ.js +315 -0
  122. package/dist/SalesPage-D18DCseD-BxktGDRQ.js.map +1 -0
  123. package/dist/{ServerSyncModal-D_oFpv3C.js → ServerSyncModal-92U3xtqI.js} +84 -85
  124. package/dist/ServerSyncModal-92U3xtqI.js.map +1 -0
  125. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js +747 -0
  126. package/dist/SettingsPage-VsxI-ano-DcmtUUEj.js.map +1 -0
  127. package/dist/ShowFlywayQuery-D10Olk5Z.js +154 -0
  128. package/dist/ShowFlywayQuery-D10Olk5Z.js.map +1 -0
  129. package/dist/{ShowFlywayQuery-DVRCd384.js → ShowFlywayQuery-D1y_4A1u.js} +161 -121
  130. package/dist/ShowFlywayQuery-D1y_4A1u.js.map +1 -0
  131. package/dist/ShowQueryHistory-DRBKYDKk.js +313 -0
  132. package/dist/ShowQueryHistory-DRBKYDKk.js.map +1 -0
  133. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js +721 -0
  134. package/dist/StorageUnitsPage-7EqwuMOI-BwUso1Th.js.map +1 -0
  135. package/dist/SubMenu-eEDhZUvh.js +317 -0
  136. package/dist/SubMenu-eEDhZUvh.js.map +1 -0
  137. package/dist/{TableDetails-Cf_YfnY2.js → TableDetails-BtafRxXb.js} +1069 -831
  138. package/dist/TableDetails-BtafRxXb.js.map +1 -0
  139. package/dist/{TableList-D6jnIbnz.js → TableList-Dpo6dO7S.js} +2 -2
  140. package/dist/{TableList-D6jnIbnz.js.map → TableList-Dpo6dO7S.js.map} +1 -1
  141. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js +746 -0
  142. package/dist/TransactionsPage-DrH53pVS-BkhIGB6C.js.map +1 -0
  143. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js +315 -0
  144. package/dist/TransferCreatePage-CuvoMrYH-DTTfHjz-.js.map +1 -0
  145. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js +476 -0
  146. package/dist/TransfersPage-Cf701t8s-BBbN7cBf.js.map +1 -0
  147. package/dist/{TypeConfiguration-37wp-gsl.js → TypeConfiguration-3O6ABrK-.js} +2 -2
  148. package/dist/{TypeConfiguration-37wp-gsl.js.map → TypeConfiguration-3O6ABrK-.js.map} +1 -1
  149. package/dist/{UserList-Bc8gYxRL.js → UserList-DgPxsnj2.js} +253 -236
  150. package/dist/{UserList-Bc8gYxRL.js.map → UserList-DgPxsnj2.js.map} +1 -1
  151. package/dist/Users-Bpc4Sazd.js +41 -0
  152. package/dist/Users-Bpc4Sazd.js.map +1 -0
  153. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js +321 -0
  154. package/dist/VialsPage-8oAc1yFv-Cl3FUXBJ.js.map +1 -0
  155. package/dist/{WidgetList-Dw_FmbbE.js → WidgetList-D7YuWfDD.js} +2 -2
  156. package/dist/{WidgetList-Dw_FmbbE.js.map → WidgetList-D7YuWfDD.js.map} +1 -1
  157. package/dist/constants-ClZJY2x1-MkSWn6TZ.js +434 -0
  158. package/dist/constants-ClZJY2x1-MkSWn6TZ.js.map +1 -0
  159. package/dist/dashboardLayoutUtils-D1xCAxp3.js +405 -0
  160. package/dist/dashboardLayoutUtils-D1xCAxp3.js.map +1 -0
  161. package/dist/format-UOyOu75i-D0GyylyQ.js +63 -0
  162. package/dist/format-UOyOu75i-D0GyylyQ.js.map +1 -0
  163. package/dist/index.css +1 -1
  164. package/dist/index.js +4 -752
  165. package/dist/index.js.map +1 -1
  166. package/dist/index.lib-Dn8PMkeD.js +862 -0
  167. package/dist/index.lib-Dn8PMkeD.js.map +1 -0
  168. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js +28 -0
  169. package/dist/useFieldErrors-hDG8ox_x-DbSAzrGo.js.map +1 -0
  170. package/dist/validation-BzlHnL-r-CCJm2utQ.js +125 -0
  171. package/dist/validation-BzlHnL-r-CCJm2utQ.js.map +1 -0
  172. package/package.json +5 -4
  173. package/dist/AccessRights-CHu27ZOw.js +0 -1262
  174. package/dist/AccessRights-CHu27ZOw.js.map +0 -1
  175. package/dist/AddEditQueryBuilder-Brdnm6rQ.js +0 -313
  176. package/dist/AddEditQueryBuilder-Brdnm6rQ.js.map +0 -1
  177. package/dist/AddLabelModal-DFllBVcd.js +0 -734
  178. package/dist/AddLabelModal-DFllBVcd.js.map +0 -1
  179. package/dist/AddMenuConfiguration-BSQLl88V.js +0 -6570
  180. package/dist/AddMenuConfiguration-BSQLl88V.js.map +0 -1
  181. package/dist/AddRoleDrawer-CQdzQZLb.js.map +0 -1
  182. package/dist/AppModal-CtG2GjD_.js +0 -428
  183. package/dist/AppModal-CtG2GjD_.js.map +0 -1
  184. package/dist/ChangePasswordModalCore-CDxkeIIM.js.map +0 -1
  185. package/dist/ConditionConfig-DSsgGEXS.js.map +0 -1
  186. package/dist/EventsSkeleton-8iiETGcf.js +0 -76
  187. package/dist/EventsSkeleton-8iiETGcf.js.map +0 -1
  188. package/dist/FeatureMenu-jl7-Tk6y.js +0 -265
  189. package/dist/FeatureMenu-jl7-Tk6y.js.map +0 -1
  190. package/dist/Features-CObdzJp_.js +0 -13
  191. package/dist/Features-CObdzJp_.js.map +0 -1
  192. package/dist/FlywayQuery-Cx2sly6g.js +0 -169
  193. package/dist/FlywayQuery-Cx2sly6g.js.map +0 -1
  194. package/dist/ImmunizationConfigurationBase-DZGqwda2.js +0 -5910
  195. package/dist/ImmunizationConfigurationBase-DZGqwda2.js.map +0 -1
  196. package/dist/ImmunizationConfigurationsList-DdSZicTP.js +0 -344
  197. package/dist/ImmunizationConfigurationsList-DdSZicTP.js.map +0 -1
  198. package/dist/LanguagesModal-D6VfaGrl.js +0 -394
  199. package/dist/LanguagesModal-D6VfaGrl.js.map +0 -1
  200. package/dist/ManageDynamicFeature-BhONvfC_.js +0 -4189
  201. package/dist/ManageDynamicFeature-BhONvfC_.js.map +0 -1
  202. package/dist/ManageEventConfiguration-DV3I5POA.js.map +0 -1
  203. package/dist/ManageRole-CGYfglpo.js.map +0 -1
  204. package/dist/ManageTranslation-B4C9-lWD.js +0 -625
  205. package/dist/ManageTranslation-B4C9-lWD.js.map +0 -1
  206. package/dist/ManageUser-AY1EUDLI.js.map +0 -1
  207. package/dist/MobileMenuManagement-CVAKyKDa.js +0 -112
  208. package/dist/MobileMenuManagement-CVAKyKDa.js.map +0 -1
  209. package/dist/MobileTypeEventConfigModal-BxLympIO.js.map +0 -1
  210. package/dist/NotificationFlywayQuery-BY8Zzml_.js +0 -244
  211. package/dist/NotificationFlywayQuery-BY8Zzml_.js.map +0 -1
  212. package/dist/NotificationList-C3Vb_jKU.js.map +0 -1
  213. package/dist/OtherTypeEventConfigModal-BeG1GrUi.js.map +0 -1
  214. package/dist/QueryBuilder-z7eqfd7D.js +0 -383
  215. package/dist/QueryBuilder-z7eqfd7D.js.map +0 -1
  216. package/dist/RoleManagement-BPl2cE27.js.map +0 -1
  217. package/dist/ServerSyncModal-D_oFpv3C.js.map +0 -1
  218. package/dist/ShowFlywayQuery-DVRCd384.js.map +0 -1
  219. package/dist/ShowFlywayQuery-tj42YQAS.js +0 -130
  220. package/dist/ShowFlywayQuery-tj42YQAS.js.map +0 -1
  221. package/dist/ShowQueryHistory-BDN0tzHg.js +0 -190
  222. package/dist/ShowQueryHistory-BDN0tzHg.js.map +0 -1
  223. package/dist/SubMenu-DYxAPH2Z.js +0 -191
  224. package/dist/SubMenu-DYxAPH2Z.js.map +0 -1
  225. package/dist/TableDetails-Cf_YfnY2.js.map +0 -1
  226. package/dist/Users-CsJ08Kjm.js +0 -40
  227. package/dist/Users-CsJ08Kjm.js.map +0 -1
  228. package/dist/dashboardLayoutUtils-Bt5HA96J.js +0 -265
  229. package/dist/dashboardLayoutUtils-Bt5HA96J.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"AddMenuConfiguration-BSQLl88V.js","sources":["../src/views/MobileMenuManagement/MenuDragContext.js","../src/views/MobileMenuManagement/MobileDisplay.jsx","../src/views/MobileMenuManagement/VisibilityConditionEditor.jsx","../src/views/MobileMenuManagement/ImagePickerDialog.jsx","../src/views/MobileMenuManagement/AddMenuConfiguration.jsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\nexport const MenuDragContext = createContext();\nexport const useMenuDragContext = () => useContext(MenuDragContext);\n","import {\n Box,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Paper,\n Select,\n Tooltip,\n Typography,\n} from '@mui/material';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useState } from 'react';\nimport './MobileScreen.css';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport {\n faBatteryFull,\n faChevronDown,\n faChevronRight,\n faCircleInfo,\n faLocationDot,\n faMagnifyingGlass,\n faMagnifyingGlassPlus,\n faPen,\n faTrashCan,\n faRotate,\n faSignal,\n faTimes,\n faWifi,\n} from '@fortawesome/free-solid-svg-icons';\nimport HomeIcon from '@/assets/img/home.svg';\nimport ProgramsIcon from '@/assets/img/programs.svg';\nimport AnalyticsIcon from '@/assets/img/analytics.svg';\nimport FamilyManagementIcon from '@/assets/img/family-management.svg';\nimport { DndContext, useDraggable, useDroppable } from '@dnd-kit/core';\nimport {\n arrayMove,\n SortableContext,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { Grid } from '@mui/system';\nimport { CSS } from '@dnd-kit/utilities';\nimport {\n DASHBOARD_COMPONENT_TYPES,\n DASHBOARD_NODE_DROP_ZONE as NODE_DROP_ZONE,\n} from '@/utils/FormConstants';\nimport FontAwesomeIcons from '@/common/fontAwesomeIcons/FontAwesomeIcons';\nimport { findNodeById } from './dashboardLayoutUtils';\n\nconst DASHBOARD_NODE_TARGET = 'DASHBOARD_NODE_TARGET';\n\nconst SortableComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id,\n data: { sortable: true, type: componentType },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n dnd: { listeners, attributes },\n });\n};\nconst DraggableFixedComponent = ({ id, children, componentType }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useDraggable({\n id,\n data: {\n type: componentType,\n deletable: true,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...listeners,\n ...attributes,\n });\n};\nconst FeatureSortableWrapper = ({ id, children, sectionId, featureName }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id: id,\n data: {\n sortable: true,\n type: 'FEATURE_TILE',\n sectionId: sectionId,\n name: featureName,\n },\n });\n\n const style = {\n opacity: isDragging ? 0.3 : 1,\n };\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, ...style },\n ...attributes,\n ...listeners,\n });\n};\n\nconst MobileSearchBar = React.forwardRef(\n ({ id, style, handleSectionClick, ...props }, ref) => {\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n return (\n <Box\n id={id}\n ref={ref}\n onContextMenu={handleContextMenu}\n sx={{\n ...style,\n width: '100%',\n minHeight: '50px',\n p: 1.5,\n border: '1px solid #ccc',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n mt: 1,\n boxShadow: '0 1px 3px rgba(0,0,0,0.05)',\n mb: 3,\n }}\n {...props}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: '8px', color: 'var(--color-text)' }}\n />\n <Typography variant='body2' color='textSecondary' sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n },\n);\nMobileSearchBar.displayName = 'MobileSearchBar';\nMobileSearchBar.propTypes = {\n id: PropTypes.any,\n style: PropTypes.any,\n handleSectionClick: PropTypes.any,\n};\n\nconst MobileSection = React.forwardRef(\n (\n {\n id,\n arrayIndex,\n sectionTitle,\n handleSectionClick,\n dnd,\n sectionFeatures,\n SvgIconBox,\n onGroupClick,\n activeGroupId,\n ...props\n },\n ref,\n ) => {\n const { listeners, attributes } = dnd || {};\n const handleContextMenu = (e) => {\n e.preventDefault();\n handleSectionClick(id);\n };\n const handleTileClick = (e) => {\n e.stopPropagation();\n };\n const handleGroupContextMenu = (e, feature) => {\n e.preventDefault();\n e.stopPropagation();\n\n if (onGroupClick) {\n onGroupClick(e, feature);\n }\n };\n const { setNodeRef: setFeatureContainerRef, isOver } = useDroppable({\n id: `section-drop-zone-${id}`,\n data: {\n type: 'SECTION_DROP_ZONE',\n sectionId: id,\n },\n });\n return (\n <Box\n id={id}\n ref={ref}\n {...listeners}\n {...attributes}\n onContextMenu={handleContextMenu}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'flex-start',\n p: 1,\n border: isOver\n ? '1px dashed var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n cursor: 'pointer',\n backgroundColor: 'var(--color-background2)',\n borderRadius: '14px',\n mt: 1,\n }}\n {...props}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%',\n mb: 0.5,\n }}\n >\n <Typography\n variant='body2'\n sx={{ fontWeight: 'bold', color: 'var(--color-text)', flexGrow: 1 }}\n >\n {sectionTitle || `Section ${arrayIndex + 1}`}\n </Typography>\n </Box>\n\n <Box\n ref={setFeatureContainerRef}\n sx={{\n width: '100%',\n minHeight: '40px',\n border: `${isOver ? '1px dashed var(--color-tableHeader)' : ''}`,\n borderRadius: '4px',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent:\n sectionFeatures?.length > 0 ? 'flex-start' : 'center',\n transition: 'background-color 0.1s',\n }}\n >\n {sectionFeatures?.length > 0 ? (\n <SortableContext\n items={sectionFeatures.map((f) => f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {sectionFeatures.map((feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen =\n isGroup && activeGroupId === feature.instanceId;\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={id}\n featureName={feature.name}\n >\n <Grid\n item\n xs={3}\n sm={3}\n sx={{\n flexBasis: 'calc(25% - 8px)',\n maxWidth: 'calc(25% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) =>\n feature.type === 'FEATURE' && handleTileClick(e)\n }\n onContextMenu={(e) =>\n feature.type === 'GROUP' &&\n handleGroupContextMenu(e, feature)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(\n feature,\n 'icon',\n )\n ? feature.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box\n sx={{\n ml: 0.5,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen\n ? 'rotate(180deg)'\n : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n })}\n </Grid>\n </SortableContext>\n ) : (\n <Typography variant='caption' color='textSecondary'>\n {isOver ? 'Drop Feature Here' : 'Drag features here later.'}\n </Typography>\n )}\n </Box>\n </Box>\n );\n },\n);\nMobileSection.displayName = 'MobileSection';\nMobileSection.propTypes = {\n id: PropTypes.any,\n arrayIndex: PropTypes.any,\n sectionTitle: PropTypes.any,\n handleSectionClick: PropTypes.any,\n dnd: PropTypes.any,\n sectionFeatures: PropTypes.any,\n SvgIconBox: PropTypes.any,\n onGroupClick: PropTypes.any,\n activeGroupId: PropTypes.any,\n};\nconst GroupFeatureSortableItem = ({\n feature,\n SvgIconBox,\n handleFeatureClick,\n}) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id: feature.uuid || feature.id,\n });\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n zIndex: isDragging ? 2000 : 1,\n opacity: isDragging ? 0.8 : 1,\n boxShadow: isDragging ? '0px 4px 10px rgba(0,0,0,0.1)' : 'none',\n };\n\n const handleClick = (e) => {\n e.stopPropagation();\n if (handleFeatureClick) {\n handleFeatureClick();\n }\n };\n\n const renderIconInPopover = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n } else if (typeof feature.icon === 'object' && feature.icon !== null) {\n svgContent = feature.icon.content || feature.icon.svg;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n\n if (svgContent) {\n return (\n <Box\n sx={{\n height: '24px',\n width: '24px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n height: '24px',\n width: '24px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '4px',\n fontSize: '0.8rem',\n }}\n >\n ?\n </Box>\n );\n };\n\n return (\n <Grid\n item\n xs={4}\n ref={setNodeRef}\n style={style}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n p: 0.5,\n }}\n >\n <Box\n onClick={handleClick}\n {...listeners}\n {...attributes}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: 'grab',\n minWidth: 0,\n overflow: 'hidden',\n borderRadius: '8px',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n <Box sx={{ mt: 0.5, mb: 0.5, display: 'flex', alignItems: 'center' }}>\n {renderIconInPopover(feature.icon, SvgIconBox)}\n </Box>\n\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n p: '0 4px',\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n};\nGroupFeatureSortableItem.propTypes = {\n feature: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\nconst DashboardNodeDropZone = ({ node, children }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: `${NODE_DROP_ZONE}-${node.id}`,\n data: {\n type: NODE_DROP_ZONE,\n parentId: node.id,\n parentType: node.type,\n parentNode: node,\n },\n });\n\n return (\n <Box\n ref={setNodeRef}\n sx={{\n width: '100%',\n minHeight:\n node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD\n ? 72\n : node.type === DASHBOARD_COMPONENT_TYPES.COLUMN\n ? 112\n : 42,\n border: isOver\n ? '1px dashed var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n borderRadius: '6px',\n p:\n node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD\n ? 0.5\n : node.type === DASHBOARD_COMPONENT_TYPES.COLUMN\n ? 0.75\n : 0.5,\n backgroundColor: isOver ? 'rgba(25, 118, 210, 0.08)' : 'transparent',\n transition: 'background-color 120ms ease, border-color 120ms ease',\n }}\n >\n {children}\n <Box\n sx={{\n mt: (node.children || []).length > 0 ? 0.75 : 0,\n minHeight: 28,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px dashed var(--color-gray3)',\n borderRadius: '4px',\n backgroundColor: isOver ? 'rgba(25, 118, 210, 0.12)' : 'transparent',\n color: 'text.secondary',\n }}\n >\n <Typography variant='caption' color='textSecondary'>\n {isOver ? 'Drop here' : 'Drop here'}\n </Typography>\n </Box>\n </Box>\n );\n};\nDashboardNodeDropZone.propTypes = {\n node: PropTypes.any,\n children: PropTypes.node,\n};\n\nconst DashboardSortableNode = ({ node, children }) => {\n const { attributes, listeners, setNodeRef, isDragging } = useSortable({\n id: node.instanceId || node.id,\n data: { sortable: true, type: node.type },\n });\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: { ...children.props.style, opacity: isDragging ? 0.35 : 1 },\n dnd: { attributes, listeners },\n });\n};\nDashboardSortableNode.propTypes = {\n node: PropTypes.any,\n children: PropTypes.node,\n};\n\nconst DashboardLayoutNode = React.forwardRef(\n (\n {\n node,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n style,\n zoomedNodeId,\n setZoomedNodeId,\n },\n ref,\n ) => {\n const nodeKey = node.instanceId || node.id;\n const {\n attributes,\n listeners,\n setNodeRef: setDraggableRef,\n transform,\n isDragging,\n } = useDraggable({\n id: nodeKey,\n data: {\n type: node.type,\n node,\n fromDashboardLayout: true,\n },\n });\n const { setNodeRef: setDropTargetRef, isOver: isNodeOver } = useDroppable({\n id: `dashboard-node-target-${nodeKey}`,\n data: {\n type: DASHBOARD_NODE_TARGET,\n targetId: nodeKey,\n targetNode: node,\n },\n });\n const setCombinedRef = useCallback(\n (element) => {\n setDraggableRef(element);\n setDropTargetRef(element);\n if (typeof ref === 'function') {\n ref(element);\n } else if (ref) {\n ref.current = element;\n }\n },\n [ref, setDraggableRef, setDropTargetRef],\n );\n const dragHandleProps = { ...listeners, ...attributes };\n const draggableStyle = {\n ...style,\n ...(transform\n ? { transform: CSS.Translate.toString(transform), zIndex: 1000 }\n : {}),\n opacity: isDragging ? 0.45 : style?.opacity,\n };\n\n const handleContextMenu = (e) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const ActionButtons = () => (\n <Box\n className='dashboard-node-actions'\n sx={{\n position: 'absolute',\n top: 4,\n right: 4,\n display: 'flex',\n gap: 0.25,\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n borderRadius: '12px',\n boxShadow: '0 1px 4px rgba(15, 23, 42, 0.18)',\n zIndex: 3,\n }}\n onPointerDown={(e) => e.stopPropagation()}\n onClick={(e) => e.stopPropagation()}\n >\n {node.type !== DASHBOARD_COMPONENT_TYPES.FEATURE && setZoomedNodeId && (\n <Tooltip title={`Zoom Into ${node.type}`}>\n <IconButton\n size='small'\n onClick={() => setZoomedNodeId(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlassPlus}\n style={{ fontSize: '0.7rem' }}\n />\n </IconButton>\n </Tooltip>\n )}\n {node.type !== DASHBOARD_COMPONENT_TYPES.FEATURE && (\n <Tooltip title='Configure'>\n <IconButton\n size='small'\n onClick={() => handleSectionClick(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon icon={faPen} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title='Delete'>\n <IconButton\n size='small'\n color='error'\n onClick={() => onDeleteNode?.(node.id || node.instanceId)}\n sx={{ p: 0.35 }}\n >\n <FontAwesomeIcon icon={faTrashCan} style={{ fontSize: '0.7rem' }} />\n </IconButton>\n </Tooltip>\n </Box>\n );\n\n const TypeLabel = () => (\n <Typography\n {...dragHandleProps}\n variant='caption'\n sx={{\n display: 'inline-block',\n cursor: 'grab',\n mb: 0.5,\n px: 0.75,\n py: 0.1,\n borderRadius: '4px',\n backgroundColor: 'var(--color-gray4)',\n color: 'var(--color-text)',\n fontWeight: 700,\n fontSize: '0.58rem',\n letterSpacing: 0.2,\n touchAction: 'none',\n }}\n >\n {node.type}\n </Typography>\n );\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SEARCH_BAR) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n minHeight: '44px',\n p: 1.25,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid #cbd5e1',\n borderRadius: '8px',\n backgroundColor: 'var(--color-background2)',\n display: 'flex',\n alignItems: 'center',\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <Box sx={{ display: 'flex', flexDirection: 'column', flexGrow: 1 }}>\n <TypeLabel />\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: '8px', color: 'var(--color-text)' }}\n />\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ flexGrow: 1 }}\n >\n Search...\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n textAlign: 'center',\n p: 0.25,\n pt: 2,\n minHeight: 40,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(node, 'icon')\n ? node.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='caption'\n sx={{ display: 'block', fontWeight: 600, lineHeight: 1.1 }}\n >\n {renderFeatureName(node.name || node.menuName || 'Feature')}\n </Typography>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.SECTION) {\n const sectionChildren = node.children || [];\n\n const sectionBackground =\n node.background?.type === 'GRADIENT'\n ? `linear-gradient(135deg, ${node.background?.gradientStartColor || '#fff'}, ${node.background?.gradientEndColor || '#e5e7eb'})`\n : node.background?.solidLightModeColor || 'transparent';\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n p: 1,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n borderRadius: '10px',\n backgroundColor: 'var(--color-background)',\n opacity: node.background?.opacity ?? 1,\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography\n variant='body2'\n sx={{\n fontWeight: node.header?.fontWeight || 600,\n fontSize: node.header?.fontSize || 16,\n color: node.header?.foreground?.lightMode || 'var(--color-text)',\n mb: 0.5,\n }}\n >\n {node.header?.title || 'Section'}\n </Typography>\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 0.25,\n width: '100%',\n }}\n >\n {sectionChildren.map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.FEATURE_CARD) {\n const feature = (node.children || []).find(\n (child) => child.type === DASHBOARD_COMPONENT_TYPES.FEATURE,\n );\n const shadowElevation = node.shadow?.elevation ?? 0;\n const shadowOpacity = node.shadow?.opacity ?? 0;\n const boxShadow =\n shadowElevation > 0\n ? `0px ${shadowElevation}px ${shadowElevation * 2}px rgba(0,0,0,${shadowOpacity})`\n : 'none';\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: node.style?.cardWidth ? `${node.style.cardWidth}%` : '100%',\n minHeight: node.style?.cardHeight || 86,\n p: 1,\n borderRadius: `${node.style?.borderRadius || 12}px`,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n background:\n node.background?.type === 'GRADIENT'\n ? `linear-gradient(135deg, ${node.background?.gradientStartColor || '#fff'}, ${node.background?.gradientEndColor || '#e5e7eb'})`\n : node.background?.solidLightModeColor ||\n 'var(--color-background2)',\n backgroundColor: 'var(--color-background)',\n opacity: 1,\n boxShadow,\n display: 'flex',\n alignItems:\n node.style?.contentAlignment === 'START'\n ? 'flex-start'\n : 'center',\n justifyContent: 'center',\n flexDirection:\n node.style?.layoutType === 'HORIZONTAL' ? 'row' : 'column',\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n flexDirection:\n node.style?.layoutType === 'HORIZONTAL' ? 'row' : 'column',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n }}\n >\n <DashboardNodeDropZone node={node}>\n {feature && (\n <DashboardLayoutNode\n node={feature}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n )}\n {(node.content?.title ||\n node.content?.subTitle ||\n node.content?.customTitle ||\n node.content?.customSubtitle) && (\n <Box sx={{ mt: 0.5 }}>\n {(node.content?.title || node.content?.customTitle) && (\n <Typography\n variant='caption'\n sx={{\n fontSize: node.style?.titleFontSize || 14,\n fontWeight: 700,\n }}\n >\n {node.content.title || node.content.customTitle}\n </Typography>\n )}\n {(node.content?.subTitle || node.content?.customSubtitle) && (\n <Typography\n variant='caption'\n sx={{\n display: 'block',\n fontSize: node.style?.subtitleFontSize || 12,\n }}\n >\n {node.content.subTitle || node.content.customSubtitle}\n </Typography>\n )}\n </Box>\n )}\n </DashboardNodeDropZone>\n </Box>\n {node.showLeadingArrow && (\n <Box\n sx={{\n position: 'absolute',\n right: 8,\n top: '50%',\n transform: 'translateY(-50%)',\n color: node.foreground?.lightMode || '#6b7280',\n }}\n >\n <FontAwesomeIcon\n icon={faChevronRight}\n style={{ fontSize: '0.75rem' }}\n />\n </Box>\n )}\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.ROW) {\n const rowChildren = node.children || [];\n const visibleColumns = Math.min(Math.max(rowChildren.length, 1), 4);\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n width: '100%',\n p: 0.5,\n pt: 2.5,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-background)',\n mb: 1,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: `repeat(${visibleColumns}, minmax(0, 1fr))`,\n gap: 0.25,\n width: '100%',\n }}\n >\n {rowChildren.map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.COLUMN) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n flex: node.style?.flex || 1,\n width: '100%',\n minHeight: 140,\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n p: 0.75,\n pt: 2.75,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n borderLeft: '4px solid var(--color-tableHeader)',\n borderRadius: '6px',\n backgroundColor: 'var(--color-background)',\n mb: 1,\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <DashboardNodeDropZone node={node}>\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n width: '100%',\n }}\n >\n {(node.children || []).map((child) => (\n <DashboardLayoutNode\n key={child.instanceId || child.id}\n node={child}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n </Box>\n </DashboardNodeDropZone>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.DIVIDER) {\n const isVerticalDivider = node.style?.orientation === 'VERTICAL';\n const dividerThickness = `${node.style?.height || 1}px`;\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n py: isVerticalDivider\n ? 0.5\n : `${node.style?.marginVertical || 8}px`,\n px: isVerticalDivider ? `${node.style?.marginVertical || 8}px` : 0,\n minHeight: isVerticalDivider ? 72 : 'auto',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Box\n sx={{\n width: isVerticalDivider ? dividerThickness : '100%',\n height: isVerticalDivider ? '64px' : dividerThickness,\n backgroundColor: node.style?.color || 'var(--color-gray3)',\n }}\n />\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.TEXT) {\n const fontSizeMap = {\n Large: '1.1rem',\n Medium: '0.875rem',\n Small: '0.75rem',\n };\n const fontWeightMap = {\n 100: 100,\n 200: 200,\n 300: 300,\n 400: 400,\n 500: 500,\n 600: 600,\n 700: 700,\n 800: 800,\n 900: 900,\n };\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{ position: 'relative', p: 0.5, pt: 2.5, cursor: 'grab' }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography\n variant='body2'\n sx={{\n fontSize: fontSizeMap[node.content?.fontSize] || '0.875rem',\n fontWeight: fontWeightMap[node.content?.fontWeight] || 400,\n fontStyle:\n node.content?.textStyle === 'ITALIC' ? 'italic' : 'normal',\n textDecoration:\n node.content?.decoration === 'UNDERLINE'\n ? 'underline'\n : node.content?.decoration === 'LINE_THROUGH'\n ? 'line-through'\n : 'none',\n color: node.foreground?.lightMode || 'var(--color-text)',\n }}\n >\n {node.content?.text || 'Text'}\n </Typography>\n </Box>\n );\n }\n\n if (node.type === DASHBOARD_COMPONENT_TYPES.CAROUSEL) {\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n position: 'relative',\n height: node.height || 110,\n borderRadius: `${node.borderRadius || 12}px`,\n backgroundColor: 'var(--color-background2)',\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px solid var(--color-gray3)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n mb: 1,\n cursor: 'grab',\n }}\n >\n <ActionButtons />\n <TypeLabel />\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\n Carousel ({node.images?.length || 0} images)\n </Typography>\n </Box>\n );\n }\n\n return (\n <Box\n ref={setCombinedRef}\n style={draggableStyle}\n onContextMenu={handleContextMenu}\n sx={{\n p: 1,\n border: isNodeOver\n ? '1px solid var(--color-tableHeader)'\n : '1px dashed var(--color-gray3)',\n }}\n >\n {node.type}\n </Box>\n );\n },\n);\nDashboardLayoutNode.displayName = 'DashboardLayoutNode';\nDashboardLayoutNode.propTypes = {\n node: PropTypes.any,\n handleSectionClick: PropTypes.any,\n SvgIconBox: PropTypes.any,\n dnd: PropTypes.any,\n style: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\n\nconst DashboardSectionNode = ({\n node,\n index,\n handleSectionClick,\n SvgIconBox,\n onDeleteNode,\n zoomedNodeId,\n setZoomedNodeId,\n}) => (\n <DashboardLayoutNode\n node={node}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n);\nDashboardSectionNode.propTypes = {\n node: PropTypes.any,\n index: PropTypes.number,\n handleSectionClick: PropTypes.any,\n SvgIconBox: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\n\nexport default function MobileDisplay({\n tabStatus,\n layoutComponents,\n componentTypes,\n handleSectionClick,\n activeElementId,\n activeTabId,\n handleTabSwitch,\n formList,\n selectedForm,\n onFormSelect,\n SvgIconBox,\n setCurrentLayoutComponents,\n programFeatures,\n appBarConfig,\n bottomNavigationConfig,\n onDeleteNode,\n zoomedNodeId,\n setZoomedNodeId,\n}) {\n const dropZoneId = 'mobile-content';\n const dropZoneType =\n activeTabId === 'programs'\n ? 'PROGRAMS_ROOT_DROP_ZONE'\n : 'LAYOUT_ROOT_DROP_ZONE';\n const zoomedNode =\n zoomedNodeId && ['home', 'analytics'].includes(activeTabId)\n ? findNodeById(layoutComponents, zoomedNodeId)\n : null;\n const { setNodeRef: setDroppableRef, isOver } = useDroppable({\n id: dropZoneId,\n data: {\n type: dropZoneType,\n sectionId: dropZoneId,\n },\n });\n\n const navItems = [\n { id: 'home', label: 'Home', icon: HomeIcon, alt: 'Home' },\n { id: 'programs', label: 'Programs', icon: ProgramsIcon, alt: 'Programs' },\n {\n id: 'analytics',\n label: 'Analytics',\n icon: AnalyticsIcon,\n alt: 'Analytics',\n },\n {\n id: 'familyManagement',\n label: 'Family Management',\n icon: FamilyManagementIcon,\n alt: 'Family Management',\n },\n ];\n\n const bottomNavigationItems = bottomNavigationConfig?.length\n ? [...bottomNavigationConfig]\n .filter((item) => item.visible !== false && tabStatus[item.id])\n .sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n )\n : navItems.filter((item) => tabStatus[item.id]);\n const visibleNavItems = bottomNavigationItems.map((item) => ({\n ...item,\n icon: navItems.find((navItem) => navItem.id === item.id)?.icon,\n alt: item.label,\n }));\n const [popoverState, setPopoverState] = useState({\n anchorEl: null,\n groupData: null,\n });\n\n const handleOpenGroupPopover = useCallback(\n (e, feature) => {\n const anchorElement = e.currentTarget;\n\n if (popoverState.groupData?.instanceId === feature.instanceId) {\n handleCloseGroupPopover();\n } else {\n setPopoverState({\n anchorEl: anchorElement,\n groupData: feature,\n });\n }\n },\n [popoverState.groupData],\n );\n const handleCloseGroupPopover = useCallback(() => {\n setPopoverState({ anchorEl: null, groupData: null });\n }, []);\n const renderFeatureTile = (feature) => {\n const isGroup = feature.type === 'GROUP';\n const isPopoverOpen =\n isGroup && popoverState.groupData?.instanceId === feature.instanceId;\n\n return (\n <FeatureSortableWrapper\n key={feature.instanceId}\n id={feature.instanceId}\n sectionId={null}\n featureName={feature.name}\n >\n <Grid\n item\n xs={4}\n sm={4}\n sx={{\n flexBasis: 'calc(33.3333% - 8px)',\n maxWidth: 'calc(33.3333% - 8px)',\n flexGrow: 0,\n flexShrink: 0,\n minWidth: 0,\n }}\n >\n <Box\n onClick={(e) => feature.type === 'FEATURE' && e.stopPropagation()}\n onContextMenu={(e) =>\n feature.type === 'GROUP' && handleOpenGroupPopover(e, feature)\n }\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'flex-start',\n p: 0.5,\n height: '100%',\n backgroundColor: 'transparent',\n cursor: isGroup ? 'pointer' : 'grab',\n minWidth: 0,\n overflow: 'hidden',\n '&:hover': {\n backgroundColor: 'var(--color-gray4)',\n },\n }}\n >\n {renderFeatureIcon(\n Object.prototype.hasOwnProperty.call(feature, 'icon')\n ? feature.icon\n : null,\n SvgIconBox,\n )}\n <Typography\n variant='body2'\n sx={{\n mt: 0.5,\n textAlign: 'center',\n lineHeight: 1.2,\n width: '100%',\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n fontWeight: 'bold',\n letterSpacing: 0.2,\n touchAction: 'none',\n whiteSpace: 'normal',\n wordBreak: 'break-word',\n overflowWrap: 'break-word',\n }}\n >\n {renderFeatureName(feature.name)}\n </Typography>\n {isGroup && (\n <Box sx={{ ml: 0.5, display: 'flex', alignItems: 'center' }}>\n <FontAwesomeIcon\n icon={faChevronDown}\n sx={{\n fontSize: '0.7rem',\n color: 'var(--color-text)',\n transition: 'transform 0.2s',\n transform: isPopoverOpen\n ? 'rotate(180deg)'\n : 'rotate(0deg)',\n }}\n />\n </Box>\n )}\n </Box>\n </Grid>\n </FeatureSortableWrapper>\n );\n };\n const handleGroupInternalSort = (event) => {\n const { active, over } = event;\n\n if (!over || active.id === over.id || !popoverState.groupData) {\n return;\n }\n\n const groupId = popoverState.groupData.instanceId;\n let newGroupData = null;\n\n setCurrentLayoutComponents((prevComponents) => {\n const newComponents = prevComponents.map((section) => {\n if (section.features) {\n return {\n ...section,\n features: section.features.map((feature) => {\n if (\n feature.instanceId === groupId &&\n feature.type === 'GROUP' &&\n feature.menus\n ) {\n const oldIndex = feature.menus.findIndex(\n (item) => (item.uuid || item.instanceId) === active.id,\n );\n const newIndex = feature.menus.findIndex(\n (item) => (item.uuid || item.instanceId) === over.id,\n );\n\n if (oldIndex !== -1 && newIndex !== -1) {\n const newMenus = arrayMove(feature.menus, oldIndex, newIndex);\n\n newGroupData = { ...feature, menus: newMenus };\n\n return newGroupData;\n }\n }\n return feature;\n }),\n };\n }\n return section;\n });\n\n return newComponents;\n });\n\n if (newGroupData) {\n setPopoverState((prev) => ({\n ...prev,\n groupData: newGroupData,\n }));\n }\n };\n\n const handleNestedFeatureClick = () => {\n handleCloseGroupPopover();\n };\n const renderSortableComponent = (component, index) => {\n const isActive = component.id === activeElementId;\n return (\n <SortableComponent\n key={component.id}\n id={component.id}\n componentType={componentTypes.SECTION}\n isSortable={true}\n >\n <MobileSection\n id={component.id}\n arrayIndex={index}\n sectionTitle={component.title}\n handleSectionClick={handleSectionClick}\n sectionFeatures={component.features}\n isActive={isActive}\n SvgIconBox={SvgIconBox}\n onGroupClick={handleOpenGroupPopover}\n activeGroupId={popoverState.groupData?.instanceId}\n />\n </SortableComponent>\n );\n };\n return (\n <div className='mobile-screen-v2' id='mobile-screen'>\n <div className='status-bar-v2'>\n <span className='time-v2'>12:16</span>\n <div className='notch-v2'></div>\n\n <div className='right-status-icons-v2'>\n <span aria-label='wifi'>\n <FontAwesomeIcon icon={faWifi} />\n </span>\n <span aria-label='signal'>\n <FontAwesomeIcon icon={faSignal} />\n </span>\n <span aria-label='battery' className='battery-icon'>\n <FontAwesomeIcon icon={faBatteryFull} />\n </span>\n </div>\n </div>\n <div className='header-v2'>\n {appBarConfig?.greetings?.greetingVisible && (\n <div\n className='greeting-v2'\n style={{ paddingLeft: '8px', flexGrow: 1 }}\n >\n <Typography variant='body2' sx={{ fontWeight: 'bold' }}>\n {appBarConfig.greetings.greetingName || 'Greeting text'}\n </Typography>\n </div>\n )}\n {appBarConfig?.locationVisible && (\n <div className='location-v2'>\n <FontAwesomeIcon icon={faLocationDot} />\n <span className='location-text-v2'>પાલડી-કાંકજ</span>\n </div>\n )}\n {(() => {\n const selectedActions = Array.isArray(appBarConfig?.actions)\n ? appBarConfig.actions\n : [];\n\n if (!selectedActions.length) return null;\n\n return (\n <div\n className='header-actions-v2'\n style={{ display: 'flex', gap: '12px', paddingRight: '8px' }}\n >\n {selectedActions.map((action, index) => {\n const uploadedSvg = action.iconsvg || action.svg || '';\n const fontAwesomeIcon = action.icon || '';\n\n return (\n <span\n key={index}\n className='action-icon-v2'\n role='button'\n aria-label={action.name}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {uploadedSvg ? (\n <Box\n component='span'\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 18,\n height: 18,\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : fontAwesomeIcon ? (\n <FontAwesomeIcons iconName={fontAwesomeIcon} />\n ) : (\n <Typography variant='caption'>\n {action.name?.charAt(0) || '?'}\n </Typography>\n )}\n </span>\n );\n })}\n </div>\n );\n })()}\n </div>\n <div\n className='content-v2'\n id='mobile-content'\n ref={activeTabId !== 'familyManagement' ? setDroppableRef : null}\n style={{\n border:\n activeTabId !== 'familyManagement' && isOver\n ? '2px dashed var(--color-tableHeader)'\n : 'none',\n backgroundColor:\n activeTabId !== 'familyManagement' && isOver\n ? 'var(--color-gray4)'\n : 'transparent',\n minHeight: '300px',\n maxHeight: 'calc(100% - 110px)',\n overflowY: 'auto',\n padding: '8px',\n marginTop: activeTabId === 'programs' ? 20 : 0,\n marginLeft: activeTabId === 'programs' ? 3 : 0,\n }}\n >\n {activeTabId === 'familyManagement' ? (\n <Box\n sx={{\n p: 2,\n width: '100%',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100%',\n }}\n >\n <Typography\n variant='body1'\n sx={{ mb: 2, fontWeight: 'bold', color: 'var(--color-text)' }}\n >\n Select Form for Family Management\n </Typography>\n <FormControl fullWidth sx={{ maxWidth: '90%', mb: 2 }}>\n <InputLabel\n id='form-selector-label'\n sx={{ color: 'var(--color-text)' }}\n >\n Form Name\n </InputLabel>\n <Select\n labelId='form-selector-label'\n id='form-selector'\n value={selectedForm?.code || ''}\n label='Form Name'\n onChange={onFormSelect}\n sx={{\n color: 'var(--color-text)',\n backgroundColor: 'var(--color-background2)',\n '& .MuiOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-gray3)',\n },\n '&:hover .MuiOutlinedInput-notchedOutline': {\n borderColor: 'var(--color-tableHeader)',\n },\n '& .MuiSvgIcon-root': {\n color: 'var(--color-text)',\n },\n }}\n MenuProps={{\n PaperProps: {\n style: {\n maxHeight: 240,\n },\n sx: {\n backgroundColor: 'var(--color-background2)',\n color: 'var(--color-text)',\n },\n },\n }}\n >\n {formList?.map((form) => (\n <MenuItem\n key={form.code}\n value={form.code}\n sx={{\n color: 'var(--color-text)',\n '&:hover': { backgroundColor: 'var(--color-gray4)' },\n }}\n >\n {form.name}\n </MenuItem>\n ))}\n {formList?.length === 0 && (\n <MenuItem disabled sx={{ color: 'var(--color-text)' }}>\n No Forms Available\n </MenuItem>\n )}\n </Select>\n </FormControl>\n </Box>\n ) : activeTabId === 'programs' ? (\n <>\n {programFeatures && programFeatures.length > 0 ? (\n <SortableContext\n items={programFeatures.map((f) => f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1} sx={{ width: '100%', m: 0 }}>\n {programFeatures.map((feature) => renderFeatureTile(feature))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ mt: 5, textAlign: 'center', color: 'var(--color-text)' }}\n >\n {isOver\n ? 'Drop features here (Groups are not allowed).'\n : 'Drag features directly onto the screen.'}\n </Typography>\n )}\n </>\n ) : (\n <>\n {zoomedNode ? (\n <Box sx={{ width: '100%' }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n mb: 1,\n }}\n >\n <Typography variant='subtitle2' sx={{ fontWeight: 'bold' }}>\n Zoomed {zoomedNode.type}\n </Typography>\n <Box\n component='button'\n type='button'\n onClick={() => setZoomedNodeId(null)}\n sx={{\n border: '1px solid #ccc',\n borderRadius: '14px',\n backgroundColor: 'var(--color-background2)',\n color: 'var(--color-text)',\n fontSize: '0.75rem',\n px: 1.5,\n py: 0.3,\n cursor: 'pointer',\n }}\n >\n Close\n </Box>\n </Box>\n <DashboardLayoutNode\n node={zoomedNode}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n </Box>\n ) : (\n <>\n {layoutComponents.map((component, index) => (\n <DashboardSectionNode\n key={component.id}\n node={component}\n index={index}\n handleSectionClick={handleSectionClick}\n SvgIconBox={SvgIconBox}\n onDeleteNode={onDeleteNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n />\n ))}\n\n {layoutComponents.length === 0 && (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ mt: 5, textAlign: 'center' }}\n >\n Drag Section, Divider, or Carousel here to build the\n dashboard.\n </Typography>\n )}\n </>\n )}\n </>\n )}\n </div>\n {popoverState.groupData && popoverState.anchorEl && (\n <div onPointerDown={(e) => e.stopPropagation()}>\n <DndContext onDragEnd={handleGroupInternalSort}>\n <MobileGroupPopover\n groupData={popoverState.groupData}\n anchorEl={popoverState.anchorEl}\n onClose={handleCloseGroupPopover}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleNestedFeatureClick}\n />\n </DndContext>\n </div>\n )}\n <div className='bottom-nav-v2'>\n <div className='nav-bar-v2'>\n {visibleNavItems.map((item) => (\n <Tooltip key={item.id} title={item.label} placement='bottom' arrow>\n <div\n key={item.id}\n className={`nav-item-v2 ${activeTabId === item.id ? 'active-v2' : ''}`}\n role='button'\n aria-label={item.label}\n onClick={() => handleTabSwitch(item.id)}\n >\n {item.iconName ? (\n <FontAwesomeIcons iconName={item.iconName} />\n ) : item.icon ? (\n <img src={item.icon} alt={item.alt} />\n ) : (\n <Typography variant='caption'>\n {item.label?.charAt(0)}\n </Typography>\n )}\n </div>\n </Tooltip>\n ))}\n </div>\n <div className='home-indicator-v2'></div>\n </div>\n </div>\n );\n}\n\nMobileDisplay.propTypes = {\n tabStatus: PropTypes.any.isRequired,\n layoutComponents: PropTypes.any,\n componentTypes: PropTypes.any,\n handleSectionClick: PropTypes.any,\n activeElementId: PropTypes.any,\n activeTabId: PropTypes.any,\n handleTabSwitch: PropTypes.any,\n formList: PropTypes.any,\n selectedForm: PropTypes.any,\n onFormSelect: PropTypes.any,\n SvgIconBox: PropTypes.any,\n setCurrentLayoutComponents: PropTypes.any,\n programFeatures: PropTypes.any,\n appBarConfig: PropTypes.any,\n bottomNavigationConfig: PropTypes.any,\n onDeleteNode: PropTypes.any,\n zoomedNodeId: PropTypes.any,\n setZoomedNodeId: PropTypes.any,\n};\nconst renderFeatureName = (name) => {\n const parts = name.split(' ');\n\n return parts.map((part, index) => (\n <React.Fragment key={index}>\n {part}\n {index < parts.length - 1 && <br />}\n </React.Fragment>\n ));\n};\nconst renderFeatureIcon = (iconData, SvgIconBox) => {\n let svgContent = null;\n\n if (typeof iconData === 'object' && iconData !== null) {\n if (iconData.type === 'svg' && typeof iconData.content === 'string') {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === 'string') {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === 'string') {\n svgContent = iconData;\n }\n\n if (typeof svgContent === 'string' && svgContent.includes('<svg')) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: '26px',\n width: '26px',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: '1.2rem',\n color: 'var(--color-gray3)',\n border: '1px solid',\n borderRadius: '50%',\n height: '26px',\n width: '26px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: '4px',\n }}\n >\n ?\n </Box>\n );\n};\nconst MobileGroupPopover = ({\n groupData,\n anchorEl,\n onClose,\n SvgIconBox,\n handleFeatureClick,\n}) => {\n if (!groupData || !anchorEl) return null;\n\n const features = groupData.menus || [];\n\n const anchorRect = anchorEl.getBoundingClientRect();\n\n return (\n <Paper\n elevation={8}\n sx={{\n position: 'fixed',\n top: anchorRect.bottom,\n left: anchorRect.left + anchorRect.width + 65,\n minWidth: '320px',\n maxWidth: '100%',\n p: 2,\n borderRadius: '12px',\n boxShadow: '0 8px 30px rgba(0,0,0,0.25)',\n backgroundColor: 'var(--color-background2)',\n border: '1px solid var(--color-gray3)',\n zIndex: 1500,\n maxHeight: '400px',\n overflowY: 'auto',\n transform: 'translateX(-50%)',\n }}\n >\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n mb: 1,\n }}\n >\n <Typography\n variant='h6'\n sx={{\n color: 'var(--color-text)',\n fontWeight: 'bold',\n fontSize: '1rem',\n }}\n >\n {groupData.name}\n </Typography>\n <IconButton\n onClick={onClose}\n size='small'\n sx={{ color: 'var(--color-text)', p: 0.5 }}\n >\n <FontAwesomeIcon icon={faTimes} />\n </IconButton>\n </Box>\n <Divider />\n\n {features.length > 0 ? (\n <SortableContext\n items={features.map((f) => f.uuid || f.instanceId)}\n strategy={verticalListSortingStrategy}\n >\n <Grid container spacing={1}>\n {features.map((feature) => (\n <GroupFeatureSortableItem\n key={feature.uuid || feature.instanceId}\n feature={feature}\n SvgIconBox={SvgIconBox}\n handleFeatureClick={handleFeatureClick}\n />\n ))}\n </Grid>\n </SortableContext>\n ) : (\n <Typography\n variant='body2'\n color='textSecondary'\n sx={{ fontStyle: 'italic', p: 1 }}\n >\n This menu is empty.\n </Typography>\n )}\n </Paper>\n );\n};\nMobileGroupPopover.propTypes = {\n groupData: PropTypes.any,\n anchorEl: PropTypes.any,\n onClose: PropTypes.any,\n SvgIconBox: PropTypes.any,\n handleFeatureClick: PropTypes.any,\n};\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Box,\n Button,\n Chip,\n Divider,\n FormControl,\n IconButton,\n InputLabel,\n MenuItem,\n Select,\n TextField,\n Typography,\n Autocomplete,\n} from \"@mui/material\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faPlus,\n faTrash,\n faRotate,\n faCodeBranch,\n faLayerGroup,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport {\n DYNAMIC_VARIABLES_LIST,\n operatorSummaryLabels,\n} from \"@/utils/FormConstants\";\n\nconst ConditionRow = ({\n condition,\n onChange,\n onDelete,\n preferredLanguages,\n rolesList = [],\n}) => {\n const { operandOne = \"\", operator = \"\", operandTwo = \"\" } = condition;\n\n const handleChange = (field, value) => {\n onChange({ ...condition, [field]: value });\n };\n\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n mb: 1,\n width: \"100%\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: 1,\n p: 1,\n position: \"relative\",\n backgroundColor: \"var(--color-bg)\",\n }}\n >\n <FormControl size=\"small\" sx={{ flex: 1, minWidth: 150 }}>\n <InputLabel>Operand One</InputLabel>\n <Select\n value={operandOne}\n label=\"Operand One\"\n onChange={(e) => handleChange(\"operandOne\", e.target.value)}\n MenuProps={{ PaperProps: { style: { maxHeight: 224 } } }}\n >\n {DYNAMIC_VARIABLES_LIST.map((dynVar) => (\n <MenuItem key={dynVar} value={dynVar}>\n {dynVar}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <FormControl size=\"small\" sx={{ flex: 1, minWidth: 150 }}>\n <InputLabel>Operator</InputLabel>\n <Select\n value={operator}\n label=\"Operator\"\n onChange={(e) => handleChange(\"operator\", e.target.value)}\n MenuProps={{ PaperProps: { style: { maxHeight: 224 } } }}\n >\n {Object.entries(operatorSummaryLabels).map(([key, label]) => (\n <MenuItem key={key} value={key}>\n {label}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n {operandOne === \"preferredLanguage\" ? (\n <Autocomplete\n size=\"small\"\n options={preferredLanguages.map((lang) => ({\n label: lang.languageValue || lang.language_value || lang.name,\n value: lang.languageKey || lang.language_key || lang.code || lang.name,\n }))}\n getOptionLabel={(option) => option.label || \"\"}\n value={\n preferredLanguages\n .map((lang) => ({\n label: lang.languageValue || lang.language_value || lang.name,\n value: lang.languageKey || lang.language_key || lang.code || lang.name,\n }))\n .find((opt) => opt.value === operandTwo) || null\n }\n onChange={(event, newValue) => handleChange(\"operandTwo\", newValue ? newValue.value : \"\")}\n isOptionEqualToValue={(option, value) => option.value === value.value}\n renderInput={(params) => (\n <TextField {...params} label=\"Operand Two\" />\n )}\n sx={{ flex: 1, minWidth: 150 }}\n />\n ) : operandOne === \"gender\" ? (\n <Autocomplete\n size=\"small\"\n options={[\n { label: \"Male\", value: \"M\" },\n { label: \"Female\", value: \"F\" },\n ]}\n getOptionLabel={(option) => option.label || \"\"}\n value={\n [\n { label: \"Male\", value: \"M\" },\n { label: \"Female\", value: \"F\" },\n ].find((opt) => opt.value === operandTwo) || null\n }\n onChange={(event, newValue) => handleChange(\"operandTwo\", newValue ? newValue.value : \"\")}\n isOptionEqualToValue={(option, value) => option.value === value.value}\n renderInput={(params) => (\n <TextField {...params} label=\"Operand Two\" />\n )}\n sx={{ flex: 1, minWidth: 150 }}\n />\n ) : operandOne === \"roleName\" ? (\n <Autocomplete\n size=\"small\"\n options={rolesList.map(r => r.name)}\n value={operandTwo || null}\n onChange={(event, newValue) => handleChange(\"operandTwo\", newValue || \"\")}\n renderInput={(params) => (\n <TextField {...params} label=\"Operand Two\" />\n )}\n sx={{ flex: 1, minWidth: 150 }}\n />\n ) : (\n <TextField\n size=\"small\"\n label=\"Operand Two\"\n value={operandTwo}\n onChange={(e) => handleChange(\"operandTwo\", e.target.value)}\n sx={{ flex: 1, minWidth: 150 }}\n />\n )}\n\n <IconButton\n color=\"error\"\n size=\"small\"\n onClick={onDelete}\n sx={{ ml: \"auto\" }}\n >\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n </Box>\n );\n};\n\nConditionRow.propTypes = {\n condition: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst ConditionGroup = ({\n group,\n onChange,\n onDelete,\n isRoot,\n preferredLanguages,\n rolesList,\n}) => {\n const { rule = \"AND\", options = [] } = group.conditions || {};\n\n const handleAddCondition = () => {\n const newOptions = [\n ...options,\n { operandOne: \"\", operator: \"\", operandTwo: \"\" },\n ];\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleAddGroup = (newRule) => {\n const newOptions = [\n ...options,\n { conditions: { rule: newRule, options: [] } },\n ];\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleToggleRule = () => {\n onChange({ conditions: { rule: rule === \"AND\" ? \"OR\" : \"AND\", options } });\n };\n\n const handleUpdateOption = (index, updatedOption) => {\n const newOptions = [...options];\n newOptions[index] = updatedOption;\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n const handleDeleteOption = (index) => {\n const newOptions = [...options];\n newOptions.splice(index, 1);\n onChange({ conditions: { rule, options: newOptions } });\n };\n\n return (\n <Box\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 2,\n mt: 1,\n mb: 2,\n backgroundColor: \"var(--color-bg)\",\n position: \"relative\",\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 2,\n }}\n >\n <Chip label={rule} color=\"primary\" size=\"small\" />\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"center\" }}>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={handleAddCondition}\n >\n Condition\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => handleAddGroup(\"AND\")}\n >\n AND Group\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n startIcon={<FontAwesomeIcon icon={faPlus} />}\n onClick={() => handleAddGroup(\"OR\")}\n >\n OR Group\n </Button>\n <Divider\n orientation=\"vertical\"\n variant=\"middle\"\n flexItem\n sx={{ mx: 0.5, height: \"20px\", alignSelf: \"center\" }}\n />\n <IconButton color=\"primary\" size=\"small\" onClick={handleToggleRule}>\n <FontAwesomeIcon icon={faRotate} />\n </IconButton>\n {!isRoot && (\n <IconButton color=\"error\" size=\"small\" onClick={onDelete}>\n <FontAwesomeIcon icon={faTrash} />\n </IconButton>\n )}\n </Box>\n </Box>\n\n {options.map((option, index) => (\n <Box key={index} sx={{ pl: 2, position: \"relative\" }}>\n {option.conditions ? (\n <ConditionGroup\n group={option}\n onChange={(updatedGroup) =>\n handleUpdateOption(index, updatedGroup)\n }\n onDelete={() => handleDeleteOption(index)}\n isRoot={false}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n ) : (\n <ConditionRow\n condition={option}\n onChange={(updatedCondition) =>\n handleUpdateOption(index, updatedCondition)\n }\n onDelete={() => handleDeleteOption(index)}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n )}\n </Box>\n ))}\n\n {options.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ ml: 2 }}>\n No conditions in this group.\n </Typography>\n )}\n </Box>\n );\n};\n\nConditionGroup.propTypes = {\n group: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func,\n isRoot: PropTypes.bool,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nconst VisibilityConditionEditor = ({\n value,\n onChange,\n preferredLanguages = [],\n rolesList = [],\n}) => {\n const hasConditions = value && value.conditions;\n\n const handleCreateRoot = (rule) => {\n onChange({ conditions: { rule, options: [] } });\n };\n\n const handleClear = () => {\n onChange(null);\n };\n\n if (!hasConditions) {\n return (\n <Box\n sx={{\n mt: 1,\n p: 2,\n borderRadius: \"8px\",\n border: (theme) => `1px dashed ${theme.palette.primary.main}40`,\n backgroundColor: (theme) => `${theme.palette.primary.main}08`,\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, mb: 1.5 }}>\n <FontAwesomeIcon icon={faCodeBranch} style={{ opacity: 0.6 }} />\n <Typography\n variant=\"caption\"\n fontWeight={700}\n color=\"text.secondary\"\n sx={{ textTransform: \"uppercase\", letterSpacing: \"0.06em\" }}\n >\n Add Visibility Condition\n </Typography>\n </Box>\n <Box\n sx={{\n display: \"flex\",\n gap: 1.5,\n flexWrap: \"wrap\",\n alignItems: \"center\",\n }}\n >\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faLayerGroup} />}\n onClick={() => handleCreateRoot(\"AND\")}\n >\n AND Group\n </Button>\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<FontAwesomeIcon icon={faLayerGroup} />}\n onClick={() => handleCreateRoot(\"OR\")}\n >\n OR Group\n </Button>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box>\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 1,\n }}\n >\n <Typography variant=\"body2\" fontWeight=\"bold\">\n Visibility Conditions\n </Typography>\n <Button size=\"small\" color=\"error\" onClick={handleClear}>\n Clear All\n </Button>\n </Box>\n <ConditionGroup\n group={value}\n onChange={onChange}\n isRoot={true}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\n );\n};\n\nVisibilityConditionEditor.propTypes = {\n value: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n preferredLanguages: PropTypes.array,\n rolesList: PropTypes.array,\n};\n\nexport default VisibilityConditionEditor;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport PropTypes from \"prop-types\";\nimport {\n Backdrop,\n Box,\n Button,\n Dialog,\n DialogContent,\n Fade,\n Grid2,\n IconButton,\n InputAdornment,\n Modal,\n Pagination,\n TextField,\n Tooltip,\n Typography,\n} from \"@mui/material\";\nimport { FormConfiguratorService } from \"@/common/services/FormConfiguratorService\";\nimport { getFileById } from \"@/common/services/GlobalApis\";\nimport { useQuery } from \"@tanstack/react-query\";\n\nconst modalStyle = {\n position: \"absolute\",\n top: \"50%\",\n left: \"50%\",\n transform: \"translate(-50%, -50%)\",\n width: \"60%\",\n maxHeight: \"80%\",\n scrollbarWidth: \"none\",\n overflowY: \"scroll\",\n bgcolor: \"background.paper\",\n borderRadius: \"10px\",\n p: 2,\n};\n\nconst ITEMS_PER_PAGE = 8;\n\nconst GenericImageSVG = ({ height }) => (\n <svg\n width=\"100%\"\n height={height}\n viewBox=\"0 0 100 100\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{ display: \"block\" }}\n >\n <rect width=\"100\" height=\"100\" rx=\"6\" fill=\"#f1f5f9\" />\n <rect x=\"15\" y=\"20\" width=\"70\" height=\"50\" rx=\"4\" fill=\"#e2e8f0\" />\n <circle cx=\"35\" cy=\"38\" r=\"8\" fill=\"#90a4b7\" />\n <polygon points=\"15,70 42,44 58,58 72,42 85,70\" fill=\"#90a4b7\" />\n <text\n x=\"50\"\n y=\"88\"\n textAnchor=\"middle\"\n fontSize=\"8\"\n fill=\"#90a4b7\"\n fontFamily=\"sans-serif\"\n >\n Image\n </text>\n </svg>\n);\n\nGenericImageSVG.propTypes = {\n height: PropTypes.string,\n};\n\nexport const ImageThumbnail = ({ img, height = \"100px\" }) => {\n const uuid = img?.uuid || \"\";\n const id = img?.id || null;\n\n const { data, status } = useQuery({\n queryKey: [\"fileInfo\", id || uuid],\n queryFn: () => {\n if (id) {\n return getFileById(id).then((res) => res.data);\n }\n return FormConfiguratorService.getFileByUUID(uuid).then((res) => res.data);\n },\n cacheTime: 1000 * 60 * 30,\n staleTime: 1000 * 60 * 10,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n retry: false,\n enabled: !!uuid,\n });\n\n const resolved = useMemo(() => {\n if (!data || !(data instanceof Blob)) return null;\n const dataUrl = URL.createObjectURL(data);\n let mimeType = data.type;\n if (!mimeType || mimeType === \"application/octet-stream\") {\n mimeType = \"image/jpeg\";\n }\n return { dataUrl, mime: mimeType };\n }, [data]);\n\n if (!uuid) return <GenericImageSVG height={height} />;\n\n if (status === \"pending\") {\n return (\n <Typography\n align=\"center\"\n sx={{\n height,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: \"100%\",\n fontSize: \"0.7rem\",\n color: \"text.secondary\",\n }}\n >\n Loading...\n </Typography>\n );\n }\n\n if (!resolved) return <GenericImageSVG height={height} />;\n\n return (\n <img\n src={resolved.dataUrl}\n alt=\"thumbnail\"\n style={{\n height,\n width: \"100%\",\n objectFit: \"contain\",\n display: \"block\",\n }}\n />\n );\n};\n\nImageThumbnail.propTypes = {\n img: PropTypes.shape({\n uuid: PropTypes.string,\n name: PropTypes.string,\n }),\n height: PropTypes.string,\n};\n\n/**\n * Full image preview dialog using the same API.\n */\nexport const FullImagePreviewDialog = ({ open, onClose, img }) => {\n const uuid = img?.uuid || \"\";\n const id = img?.id || null;\n\n const { data, status } = useQuery({\n queryKey: [\"fileInfo\", id || uuid],\n queryFn: () => {\n if (id) {\n return getFileById(id).then((res) => res.data);\n }\n return FormConfiguratorService.getFileByUUID(uuid).then((res) => res.data);\n },\n cacheTime: 1000 * 60 * 30,\n staleTime: 1000 * 60 * 10,\n refetchOnMount: false,\n refetchOnWindowFocus: false,\n retry: false,\n enabled: open && !!(id || uuid),\n });\n\n const resolved = useMemo(() => {\n if (!data || !(data instanceof Blob)) return null;\n const dataUrl = URL.createObjectURL(data);\n let mimeType = data.type;\n if (!mimeType || mimeType === \"application/octet-stream\") {\n mimeType = \"image/jpeg\";\n }\n return { dataUrl, mime: mimeType };\n }, [data]);\n\n const renderContent = () => {\n if (status === \"pending\") {\n return (\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n minHeight: 200,\n }}\n >\n <Typography>Loading...</Typography>\n </Box>\n );\n }\n if (!resolved) {\n return (\n <Typography color=\"error\" align=\"center\">\n Error loading image.\n </Typography>\n );\n }\n return (\n <img\n src={resolved.dataUrl}\n alt=\"preview\"\n style={{ width: \"100%\", maxHeight: \"70vh\", objectFit: \"contain\" }}\n />\n );\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth>\n <DialogContent sx={{ p: 2 }}>\n <Box sx={{ display: \"flex\", justifyContent: \"space-between\", mb: 1, alignItems: \"center\" }}>\n <Typography variant=\"subtitle1\" sx={{ fontWeight: \"bold\" }}>\n {img?.name || \"Image Preview\"}\n </Typography>\n <Tooltip title=\"Close\" arrow>\n <IconButton size=\"small\" onClick={onClose}>\n ✕\n </IconButton>\n </Tooltip>\n </Box>\n {renderContent()}\n </DialogContent>\n </Dialog>\n );\n};\n\nFullImagePreviewDialog.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n img: PropTypes.object,\n};\n\nconst ImagePickerDialog = ({\n open,\n onClose,\n documentMasterImages = [],\n onImageUpload,\n onSelect,\n currentImageUuid = \"\",\n}) => {\n const [selectedUuid, setSelectedUuid] = useState(currentImageUuid || \"\");\n const [searchQuery, setSearchQuery] = useState(\"\");\n const [page, setPage] = useState(1);\n const [previewImg, setPreviewImg] = useState(null);\n const fileInputRef = useRef(null);\n\n useEffect(() => {\n if (open) {\n setSelectedUuid(currentImageUuid || \"\");\n setSearchQuery(\"\");\n\n if (currentImageUuid && documentMasterImages.length) {\n const idx = documentMasterImages.findIndex(\n (img) => img.uuid === currentImageUuid,\n );\n setPage(idx >= 0 ? Math.ceil((idx + 1) / ITEMS_PER_PAGE) : 1);\n } else {\n setPage(1);\n }\n }\n }, [open, currentImageUuid, documentMasterImages]);\n\n const filteredImages = useMemo(() => {\n if (!searchQuery.trim()) return documentMasterImages;\n const q = searchQuery.trim().toLowerCase();\n return documentMasterImages.filter((img) =>\n (img.name || img.uuid || \"\").toLowerCase().includes(q),\n );\n }, [documentMasterImages, searchQuery]);\n\n const totalPages = Math.ceil(filteredImages.length / ITEMS_PER_PAGE);\n const paginatedImages = filteredImages.slice(\n (page - 1) * ITEMS_PER_PAGE,\n page * ITEMS_PER_PAGE,\n );\n\n const handleSave = () => {\n onSelect(selectedUuid);\n onClose();\n };\n\n const handleCancel = () => {\n onClose();\n };\n\n const handleUpload = (event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n if (!file) return;\n onImageUpload?.(file, (uploadedUuid) => {\n setSelectedUuid(uploadedUuid);\n setPage(1);\n setSearchQuery(\"\");\n });\n };\n\n return (\n <>\n <Modal\n open={open}\n onClose={handleCancel}\n slots={{ backdrop: Backdrop }}\n slotProps={{ backdrop: { timeout: 500 } }}\n >\n <Fade in={open}>\n <Box sx={modalStyle}>\n {/* Header */}\n <Box\n sx={{\n py: 0.5,\n px: 1,\n backgroundColor: \"background.default\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n borderRadius: \"8px 8px 0 0\",\n mb: 2,\n }}\n >\n <Typography variant=\"h6\" sx={{ ml: 1 }}>\n Select Image\n </Typography>\n <Tooltip title=\"Close\" arrow>\n <IconButton onClick={handleCancel} size=\"small\">\n ✕\n </IconButton>\n </Tooltip>\n </Box>\n\n <Box sx={{ px: 2, pb: 2 }}>\n {/* Action row */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 2,\n gap: 1,\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Button variant=\"outlined\" component=\"label\" size=\"small\">\n Upload New Image\n <input\n hidden\n accept=\"image/*\"\n type=\"file\"\n onChange={handleUpload}\n ref={fileInputRef}\n />\n </Button>\n\n <TextField\n size=\"small\"\n placeholder=\"Search media…\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n setPage(1);\n }}\n sx={{ width: 220 }}\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position=\"start\">🔍</InputAdornment>\n ),\n endAdornment: searchQuery ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n edge=\"end\"\n onClick={() => {\n setSearchQuery(\"\");\n setPage(1);\n }}\n >\n ✕\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Box>\n\n {selectedUuid && (\n <Button\n variant=\"outlined\"\n color=\"error\"\n size=\"small\"\n onClick={() => setSelectedUuid(\"\")}\n >\n Clear Selection\n </Button>\n )}\n </Box>\n\n {/* Count */}\n <Typography\n variant=\"subtitle2\"\n sx={{ mb: 1, fontWeight: \"bold\" }}\n >\n Available Images ({documentMasterImages.length})\n {searchQuery.trim() &&\n filteredImages.length !== documentMasterImages.length && (\n <Typography\n component=\"span\"\n variant=\"caption\"\n sx={{\n ml: 1,\n color: \"text.secondary\",\n fontWeight: \"normal\",\n }}\n >\n — {filteredImages.length} result\n {filteredImages.length !== 1 ? \"s\" : \"\"} for &quot;\n {searchQuery.trim()}&quot;\n </Typography>\n )}\n </Typography>\n\n {/* Image grid */}\n <Grid2 container spacing={2} sx={{ mb: 2 }}>\n {paginatedImages.map((img, index) => {\n const isSelected = selectedUuid === img.uuid;\n\n return (\n <Grid2 size={3} key={`${img.uuid}-${page}-${index}`}>\n <Box\n sx={{\n p: 1,\n border: isSelected\n ? \"3px solid #1976d2\"\n : \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n position: \"relative\",\n bgcolor: isSelected\n ? \"rgba(25, 118, 210, 0.08)\"\n : \"transparent\",\n boxShadow: isSelected ? 4 : \"none\",\n transform: isSelected ? \"scale(1.02)\" : \"none\",\n transition: \"all 0.2s\",\n cursor: \"pointer\",\n \"&:hover\": {\n boxShadow: 4,\n borderColor: isSelected ? \"#1976d2\" : \"#aaa\",\n \"& .expand-btn\": { opacity: 1 },\n },\n }}\n onClick={() => setSelectedUuid(img.uuid)}\n >\n <Tooltip title=\"Preview\" arrow>\n <IconButton\n className=\"expand-btn\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setPreviewImg(img);\n }}\n sx={{\n position: \"absolute\",\n top: 2,\n right: 2,\n opacity: 0,\n transition: \"opacity 0.2s\",\n bgcolor: \"rgba(255,255,255,0.85)\",\n zIndex: 1,\n p: \"3px\",\n fontSize: \"12px\",\n \"&:hover\": { bgcolor: \"rgba(255,255,255,1)\" },\n }}\n >\n 🔍\n </IconButton>\n </Tooltip>\n\n <ImageThumbnail img={img} height=\"100px\" />\n <Typography\n variant=\"caption\"\n sx={{\n mt: 1,\n width: \"100%\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n textAlign: \"center\",\n }}\n title={`${img.name || img.uuid}${img.extension ? ` (${img.extension})` : \"\"}`}\n >\n {img.name || img.uuid}\n </Typography>\n </Box>\n </Grid2>\n );\n })}\n\n {filteredImages.length === 0 && (\n <Typography\n variant=\"body2\"\n sx={{ ml: 1, color: \"text.secondary\" }}\n >\n {searchQuery.trim()\n ? `No images match \"${searchQuery.trim()}\".`\n : \"No images found.\"}\n </Typography>\n )}\n </Grid2>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Box sx={{ display: \"flex\", justifyContent: \"center\", mt: 2 }}>\n <Pagination\n count={totalPages}\n page={page}\n onChange={(e, value) => setPage(value)}\n color=\"primary\"\n />\n </Box>\n )}\n </Box>\n\n {/* Footer */}\n <Box\n sx={{\n py: 1,\n px: 2,\n display: \"flex\",\n gap: 1,\n justifyContent: \"flex-end\",\n borderTop: \"1px solid\",\n borderTopColor: \"divider\",\n }}\n >\n <Button variant=\"outlined\" size=\"small\" onClick={handleCancel}>\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n onClick={handleSave}\n >\n Save\n </Button>\n </Box>\n </Box>\n </Fade>\n </Modal>\n\n {previewImg && (\n <FullImagePreviewDialog\n open={!!previewImg}\n onClose={() => setPreviewImg(null)}\n img={previewImg}\n />\n )}\n </>\n );\n};\n\nImagePickerDialog.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n documentMasterImages: PropTypes.array,\n onImageUpload: PropTypes.func,\n onSelect: PropTypes.func.isRequired,\n currentImageUuid: PropTypes.string,\n};\n\nexport default ImagePickerDialog;\n","import { api } from \"@/common/interceptors/AxiosInterceptor\";\nimport { execute } from \"@/common/services/QueryBuilder\";\nimport { showToast } from \"@/common/toaster/toaster\";\nimport {\n closestCenter,\n DndContext,\n DragOverlay,\n rectIntersection,\n useDraggable,\n useDroppable,\n} from \"@dnd-kit/core\";\nimport {\n arrayMove,\n SortableContext,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Autocomplete,\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n FormControl,\n Grid2,\n InputAdornment,\n MenuItem,\n Paper,\n Switch,\n TextField,\n Typography,\n Select,\n} from \"@mui/material\";\nimport Grid from \"@mui/material/Grid2\";\nimport { Box } from \"@mui/system\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useSelector } from \"react-redux\";\nimport { useLocation, useNavigate } from \"react-router\";\nimport CustomDropdown from \"@/views/custom-components/CustomDropdown\";\nimport { MenuDragContext } from \"./MenuDragContext\";\nimport MobileDisplay from \"./MobileDisplay\";\nimport PropTypes from \"prop-types\";\nimport VisibilityConditionEditor from \"./VisibilityConditionEditor\";\nimport ImagePickerDialog, {\n ImageThumbnail,\n FullImagePreviewDialog,\n} from \"./ImagePickerDialog\";\nimport FontAwesomeIcons from \"@/common/fontAwesomeIcons/FontAwesomeIcons\";\nimport { FontAwesomeIconsNames } from \"@/common/fontAwesomeIcons/FontAwesomeIconsNames\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n faMagnifyingGlass,\n faTrashCan,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { generateUUID } from \"@/utils/UUIDgenerator\";\nimport {\n DASHBOARD_COMPONENT_TYPES,\n DASHBOARD_NODE_DROP_ZONE as NODE_DROP_ZONE,\n DASHBOARD_ROOT_DROP_ZONE as ROOT_DROP_ZONE,\n DEFAULT_DASHBOARD_APP_BAR_CONFIG as defaultAppBarConfig,\n DEFAULT_DASHBOARD_BOTTOM_NAVIGATION_CONFIG as defaultBottomNavigationConfig,\n FONT_SIZE_OPTIONS,\n FONT_WEIGHT_OPTIONS,\n BACKGROUND_TYPE_OPTIONS,\n GRADIENT_TYPE_OPTIONS,\n GRADIENT_DIRECTION_OPTIONS,\n CONTENT_ALIGNMENT_OPTIONS,\n ORIENTATION_OPTIONS,\n TEXT_STYLE_OPTIONS,\n TEXT_DECORATION_OPTIONS,\n DYNAMIC_VARIABLES_LIST,\n} from \"@/utils/FormConstants\";\nimport CustomConfirmationModal from \"@/views/custom-components/CustomConfirmationModal\";\nimport {\n addChildToParent,\n addNodeBeforeTarget,\n createFeatureNode,\n createLayoutNode,\n findNodeById,\n findParentNodeInfo,\n getDashboardDropValidationMessage,\n hydrateDashboardLayout,\n moveNodeBeforeTarget,\n moveNodeToParent,\n removeNodeById,\n sanitizeDashboardLayout,\n hasEmptyDashboardLayoutNode,\n updateNodeById,\n} from \"./dashboardLayoutUtils\";\nimport { getPreferredLanguage } from \"../../services/Users\";\n\nconst normalizeAppBarConfig = (appBarConfig) => {\n const raw = appBarConfig || {};\n const normalizedConfig = { ...defaultAppBarConfig, ...raw };\n\n if (raw.greetings) {\n normalizedConfig.greetings = {\n ...defaultAppBarConfig.greetings,\n ...raw.greetings,\n };\n } else {\n normalizedConfig.greetings = { ...defaultAppBarConfig.greetings };\n }\n\n if (!Array.isArray(normalizedConfig.actions)) {\n normalizedConfig.actions = defaultAppBarConfig.actions;\n }\n\n if (\n normalizedConfig.greetings.greetingVisible &&\n normalizedConfig.locationVisible\n ) {\n normalizedConfig.locationVisible = false;\n }\n\n return normalizedConfig;\n};\n\nexport default function AddMenuConfiguration() {\n const location = useLocation();\n const state = location.state;\n const queryParams = useMemo(\n () => new URLSearchParams(location.search),\n [location.search],\n );\n const navigate = useNavigate();\n\n const [rolesList, setRolesList] = useState([]);\n const [isEditMode, setIsEditMode] = useState(false);\n const [availableForms, setAvailableForms] = useState([]);\n const [mobileQueries, setMobileQueries] = useState([]);\n const [documentMasterImages, setDocumentMasterImages] = useState([]);\n const [masterFeatureList, setMasterFeatureList] = useState({});\n const [groupedFeatures, setGroupedFeatures] = useState([]);\n const [isMenuGroupsExpanded, setIsMenuGroupsExpanded] = useState(true);\n const [isStandaloneExpanded, setIsStandaloneExpanded] = useState(true);\n const [backModalOpen, setBackModalOpen] = useState(false);\n const [configurationDialogOpen, setConfigurationDialogOpen] = useState(false);\n const [configurationDraft, setConfigurationDraft] = useState(null);\n const [appBarConfig, setAppBarConfig] = useState(\n normalizeAppBarConfig(defaultAppBarConfig),\n );\n const [bottomNavigationConfig, setBottomNavigationConfig] = useState(\n defaultBottomNavigationConfig,\n );\n const [preferredLanguages, setPreferredLanguages] = useState([]);\n const { user } = useSelector((state) => state.Authenticate);\n\n const formCtrl = useForm({\n defaultValues: {\n role: \"\",\n isAttendanceRequired: false,\n },\n mode: \"onChange\",\n });\n\n useEffect(() => {\n (async () => {\n await fetchRoles();\n await fetchForms();\n await fetchMobileQueries();\n await fetchDocumentMasterImages();\n await fetchPreferredLanguages();\n if (queryParams.get(\"id\") && state?.mobileMenuList) {\n setIsEditMode(true);\n formCtrl.setValue(\"role\", state.roleId);\n await fetchMenus(state.roleId);\n } else {\n setIsEditMode(false);\n }\n })();\n }, []);\n const fetchPreferredLanguages = async () => {\n try {\n const response = await getPreferredLanguage();\n if (response && response.data) {\n setPreferredLanguages(response.data);\n }\n } catch (error) {\n console.error(\"Failed to fetch preferred languages\", error);\n }\n };\n useEffect(() => {\n if (\n Object.keys(masterFeatureList).length > 0 &&\n queryParams.get(\"id\") &&\n state?.mobileMenuList\n ) {\n const {\n appConfiguration,\n tabStatus,\n selectedForm,\n isAttendanceRequired,\n appBar,\n bottomNavigation,\n } = reconstructAppState(\n state?.mobileMenuList?.configJson,\n masterFeatureList,\n groupedFeatures,\n );\n setAppConfiguration(appConfiguration);\n setTabStatus(tabStatus);\n setSelectedForm(selectedForm);\n setAppBarConfig(appBar);\n setBottomNavigationConfig(bottomNavigation);\n formCtrl.setValue(\"isAttendanceRequired\", isAttendanceRequired);\n }\n }, [masterFeatureList]);\n const fetchForms = async () => {\n let allFormListDto = {\n code: \"medplat_form_get_all_form_details\",\n parameters: {},\n };\n\n const response = (await execute(allFormListDto)).data.result;\n\n const mappedForms = response.map((form, index) => ({\n id: form.form_code,\n name: form.form_name,\n code: form.form_code,\n uuid: form.uuid || `temp-uuid-${index}`,\n }));\n\n setAvailableForms(mappedForms);\n };\n const fetchMobileQueries = async () => {\n let allMobileQuery = {\n code: \"get_all_mobile_query\",\n parameters: {},\n };\n\n const response = (await execute(allMobileQuery)).data.result;\n setMobileQueries(response);\n };\n const allowedImageExtensions = useMemo(\n () => new Set([\"jpg\", \"jpeg\", \"png\", \"gif\", \"bmp\", \"bitmap\"]),\n [],\n );\n\n const uploadDocument = (params) =>\n api.post(\n \"/document/uploaddocumentV2?isTemporary=false\",\n { ...params },\n { type: \"fileUpload\", showLoader: false },\n );\n\n const fetchDocumentMasterImages = async () => {\n const normalizeExtension = (document, fileName) => {\n const extension =\n document.extension || document.file_extension || document.fileExtension;\n const extensionFromName = fileName?.includes(\".\")\n ? fileName.split(\".\").pop()\n : \"\";\n return String(extension || extensionFromName || \"\")\n .replace(/^\\./, \"\")\n .toLowerCase();\n };\n\n try {\n const response = (\n await execute({\n code: \"mobile_menu_get_document_master_images\",\n parameters: {},\n })\n ).data.result;\n\n const imageOptions = (response || [])\n .map((document) => {\n const uuid =\n document.document_uuid || document.documentUuid || document.uuid;\n const name =\n document.file_name ||\n document.actual_file_name ||\n document.name ||\n document.original_file_name ||\n uuid;\n const extension = normalizeExtension(document, name);\n\n return {\n id: document.id || null,\n uuid,\n name,\n extension,\n fileNameTh: document.file_name_th || document.fileNameTh || null,\n };\n })\n .filter(\n (document) =>\n document.uuid && allowedImageExtensions.has(document.extension),\n );\n\n setDocumentMasterImages(imageOptions);\n } catch (error) {\n setDocumentMasterImages([]);\n showToast({\n type: \"error\",\n message: \"Unable to fetch document master images for image selection.\",\n });\n }\n };\n const uploadDocumentMasterImage = async (file, onUploaded) => {\n if (!file) return;\n const extension = String(file.name?.split(\".\").pop() || \"\").toLowerCase();\n\n if (\n !file.type?.startsWith(\"image/\") ||\n !allowedImageExtensions.has(extension)\n ) {\n showToast({ type: \"warn\", message: \"Only image files can be uploaded.\" });\n return;\n }\n\n try {\n const documentUUID = generateUUID();\n const payload = {\n documentUUID,\n moduleName: \"MEDPLAT_FORM_UPLOADS\",\n fileToUpload: file,\n };\n const { data } = await uploadDocument(payload);\n const uuid =\n data?.document_uuid || data?.documentUuid || data?.uuid || documentUUID;\n const id = data?.id || data?.document_id || null;\n\n if (!uuid) {\n showToast({\n type: \"error\",\n message: \"Image uploaded, but document id was not returned.\",\n });\n return;\n }\n\n setDocumentMasterImages((prev) => {\n const nextDocument = { id, uuid, name: file.name, extension };\n const existingDocuments = (prev || []).filter(\n (document) => document.uuid !== uuid,\n );\n return [nextDocument, ...existingDocuments];\n });\n onUploaded?.(uuid);\n showToast({ type: \"success\", message: \"Image uploaded successfully.\" });\n } catch (error) {\n showToast({\n type: \"error\",\n message: error?.message || \"Unable to upload image.\",\n });\n }\n };\n\n const fetchRoles = async () => {\n try {\n const response = (\n await execute({\n code: \"RETRIEVE_MENU_CONFIG_ROLE_V2\",\n })\n ).data;\n if (response.result) {\n setRolesList(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n };\n\n const fetchMenus = async (roleId) => {\n if (roleId) {\n try {\n const response = (\n await execute({\n code: \"fetch_linked_menus_by_role_id\",\n parameters: {\n id: roleId,\n },\n })\n ).data;\n\n if (response.result) {\n transformListData(response.result);\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n }\n };\n\n const findMetadataById = (id, masterFeatureList, groupedFeatures) => {\n const feature = masterFeatureList[id];\n if (feature) return feature;\n\n const group = groupedFeatures.find(\n (f) => f.type === \"GROUP\" && f.id === id,\n );\n if (group) return group;\n\n return null;\n };\n const hydrateFeature = (\n canonicalFeature,\n parentInstanceId,\n masterFeatureList,\n groupedFeatures,\n ) => {\n const masterData = findMetadataById(\n canonicalFeature.id,\n masterFeatureList,\n groupedFeatures,\n );\n if (!masterData) return null;\n const instanceUuid = generateUUID();\n\n if (masterData.type === \"GROUP\") {\n const hydratedMenus = canonicalFeature.menus\n .map((menuItem) => {\n const masterMenuItem = findMetadataById(\n menuItem.id,\n masterFeatureList,\n groupedFeatures,\n );\n if (!masterMenuItem) return null;\n return {\n ...masterMenuItem,\n uuid: generateUUID(),\n isGroupMember: true,\n groupId: canonicalFeature.id,\n };\n })\n .filter((m) => m !== null);\n\n if (hydratedMenus.length === 0) return null;\n\n return {\n ...masterData,\n id: instanceUuid,\n instanceId: `${parentInstanceId}_GROUP_${instanceUuid}`,\n menus: hydratedMenus,\n };\n } else if (masterData.type === \"FEATURE\") {\n const instancePrefix =\n parentInstanceId === \"PROGRAMS_ROOT\"\n ? parentInstanceId\n : `${parentInstanceId}_${masterData.id}`;\n\n return {\n ...masterData,\n id: masterData.id,\n uuid: instanceUuid,\n instanceId: `${instancePrefix}_${instanceUuid}`,\n };\n }\n return null;\n };\n\n const hydrateLayout = (\n canonicalLayout,\n tabId,\n masterFeatureList,\n groupedFeatures,\n ) => {\n if (!canonicalLayout || !Array.isArray(canonicalLayout)) return [];\n\n if (canonicalLayout.every((c) => c.id && !c.type && !c.features)) {\n const parentInstanceId = tabId === \"programs\" ? \"PROGRAMS_ROOT\" : tabId;\n\n return canonicalLayout\n .map((f) =>\n hydrateFeature(\n f,\n parentInstanceId,\n masterFeatureList,\n groupedFeatures,\n ),\n )\n .filter((f) => f !== null);\n }\n\n if (tabId === \"home\") {\n return hydrateDashboardLayout(canonicalLayout, (feature, parentId) =>\n hydrateFeature(feature, parentId, masterFeatureList, groupedFeatures),\n );\n }\n\n return canonicalLayout\n .map((component) => {\n const instanceId = generateUUID();\n\n if (component.type === \"SEARCH_BAR\") {\n return { ...component, id: instanceId };\n }\n\n if (component.type === \"SECTION\") {\n const sectionInstanceId = `comp-${instanceId}`;\n const hydratedFeatures = (component.features || [])\n .map((f) =>\n hydrateFeature(\n f,\n sectionInstanceId,\n masterFeatureList,\n groupedFeatures,\n ),\n )\n .filter((f) => f !== null);\n return {\n type: component.type,\n title: component.title,\n id: sectionInstanceId,\n features: hydratedFeatures,\n };\n }\n return null;\n })\n .filter((c) => c !== null);\n };\n\n const reconstructAppState = (canonicalConfig) => {\n const newAppConfiguration = {};\n const newTabStatus = {};\n let newSelectedForm = null;\n const isAttendanceRequired =\n canonicalConfig?.isAttendanceRequired?.value || false;\n const appBar = normalizeAppBarConfig(canonicalConfig?.appBar);\n const bottomNavigation = Array.isArray(\n canonicalConfig?.bottomNavigation?.items,\n )\n ? canonicalConfig.bottomNavigation.items.map((item) => ({\n ...item,\n iconName: item.iconName || item.iconDocumentUuid || \"\",\n }))\n : defaultBottomNavigationConfig;\n\n for (const tabId in canonicalConfig) {\n const tabData = canonicalConfig[tabId];\n newTabStatus[tabId] = tabData.active;\n\n if (tabData.active) {\n if (tabId === \"home\" && tabData.layout) {\n newAppConfiguration[tabId] = hydrateLayout(\n tabData.layout,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n } else if (tabId === \"programs\" && tabData?.features) {\n const hydratedFeatures = hydrateLayout(\n tabData.features,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n\n newAppConfiguration[tabId] = {\n features: hydratedFeatures,\n };\n } else if (tabData?.features) {\n newAppConfiguration[tabId] = hydrateLayout(\n tabData?.features,\n tabId,\n masterFeatureList,\n groupedFeatures,\n );\n } else if (tabId === \"familyManagement\" && tabData.formCode) {\n newSelectedForm = {\n formName: `Form for ${tabData.formCode}`,\n code: tabData.formCode,\n formUuid: generateUUID(),\n };\n }\n } else {\n if (tabId === \"programs\") {\n newAppConfiguration[tabId] = { features: [] };\n } else {\n newAppConfiguration[tabId] = [];\n }\n }\n }\n return {\n appConfiguration: newAppConfiguration,\n tabStatus: newTabStatus,\n selectedForm: newSelectedForm,\n isAttendanceRequired,\n appBar,\n bottomNavigation,\n };\n };\n const transformListData = (data) => {\n const groupedList = [];\n const masterFeatureMap = {};\n const seenStandaloneIds = new Set();\n\n data.forEach((item) => {\n let menus = JSON.parse(item.menus || \"[]\");\n\n const processedMenus = menus.map((menu) => {\n const transformedMenu = {\n uuid: generateUUID(),\n id: menu.id ? parseInt(menu.id) : null,\n name: menu.name || \"\",\n icon: menu.icon || \"\",\n type: \"FEATURE\",\n isGroupMember: item.id != null,\n groupId: item.id || null,\n };\n\n masterFeatureMap[transformedMenu.id] = transformedMenu;\n\n return transformedMenu;\n });\n\n if (item.id != null) {\n const uniqueMenus = [];\n const seenMenuIds = new Set();\n processedMenus.forEach((menu) => {\n if (menu.id != null && !seenMenuIds.has(menu.id)) {\n seenMenuIds.add(menu.id);\n uniqueMenus.push(menu);\n }\n });\n\n groupedList.push({\n uuid: generateUUID(),\n id: item.id,\n name: item.name,\n icon: item.icon || \"\",\n type: \"GROUP\",\n menus: uniqueMenus,\n });\n } else {\n processedMenus.forEach((menu) => {\n if (menu.id != null && !seenStandaloneIds.has(menu.id)) {\n seenStandaloneIds.add(menu.id);\n groupedList.push(menu);\n }\n });\n }\n });\n\n setMasterFeatureList(masterFeatureMap);\n setGroupedFeatures(groupedList);\n };\n const sanitizeFeature = (feature) => {\n if (feature.type === \"GROUP\") {\n const canonicalGroupId = feature.menus?.[0]?.groupId;\n\n if (!canonicalGroupId) {\n return null;\n }\n\n return {\n id: canonicalGroupId,\n menus: feature.menus.map((menu) => ({\n id: menu.id,\n })),\n };\n } else if (feature.type === \"FEATURE\") {\n return {\n id: feature.id,\n };\n }\n return null;\n };\n const sanitizeLayout = (layout) => {\n if (!layout || !Array.isArray(layout)) return [];\n\n return layout\n .map((component) => {\n if (component.type === \"SEARCH_BAR\") {\n return {\n type: component.type,\n queryName: component.queryName,\n };\n }\n\n if (component.type === \"SECTION\") {\n const sanitizedFeatures = component?.features\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n\n return {\n type: component.type,\n title: component.title,\n features: sanitizedFeatures,\n };\n }\n\n return null;\n })\n .filter((c) => c !== null);\n };\n const validateMobileLayout = () => {\n if (\n appBarConfig?.greetings?.greetingVisible &&\n appBarConfig?.greetings?.greetingName\n ) {\n const greetingNameStr = appBarConfig.greetings.greetingName;\n const extractedVarsMatch = greetingNameStr.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch.map((m) => m.slice(2, -2).trim()).filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n const greetingValues = appBarConfig.greetings.greetingValues || {};\n\n for (const extractedVar of uniqueExtractedVars) {\n if (!greetingValues[extractedVar]) {\n showToast({\n type: \"warn\",\n message: `Please map a dynamic value for '{{${extractedVar}}}' in App Bar Greeting.`,\n });\n return false;\n }\n }\n }\n\n const homeLayout = appConfiguration.home || [];\n if (hasEmptyDashboardLayoutNode(homeLayout)) {\n showToast({\n type: \"warn\",\n message:\n \"Section, row, column, carousel, and feature card components cannot be empty.\",\n });\n return false;\n }\n\n return true;\n };\n\n const createCanonicalConfig = () => {\n const finalConfig = {\n isAttendanceRequired: {\n value: formCtrl.getValues(\"isAttendanceRequired\"),\n },\n appBar: normalizeAppBarConfig(appBarConfig),\n bottomNavigation: {\n items: [...bottomNavigationConfig].sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n ),\n },\n };\n\n navTabs.forEach((tab) => {\n const tabId = tab.id;\n const isEnabled = tabStatus[tabId];\n\n const tabEntry = {\n active: isEnabled,\n };\n\n if (isEnabled) {\n if (tabId === \"familyManagement\" && selectedForm) {\n tabEntry.formCode = selectedForm.code;\n } else {\n if (tabId === \"home\") {\n const rawLayout = appConfiguration[tabId] || [];\n tabEntry.layout = sanitizeDashboardLayout(rawLayout);\n } else if (tabId === \"programs\") {\n const rawFeatures = appConfiguration[tabId]?.features || [];\n\n if (rawFeatures.length > 0) {\n tabEntry.features = rawFeatures\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n }\n } else if (tabId !== \"analytics\") {\n const rawFeatures = appConfiguration[tabId] || [];\n\n if (Array.isArray(rawFeatures)) {\n tabEntry.features = rawFeatures\n .map(sanitizeFeature)\n .filter((f) => f !== null);\n }\n }\n }\n }\n\n finalConfig[tabId] = tabEntry;\n });\n\n return finalConfig;\n };\n const onSubmit = async (data) => {\n if (!validateMobileLayout()) return;\n\n const canonicalConfig = createCanonicalConfig();\n const configJsonString = JSON.stringify(canonicalConfig);\n\n const payload = {\n roleId: data.role,\n userId: user?.id,\n config_json: configJsonString,\n };\n try {\n const response = (\n await execute({\n code: \"save_mobile_menu_role_relation\",\n parameters: payload,\n })\n ).data;\n if (response.result) {\n showToast({\n message: \"Menu configuration saved successfully\",\n type: \"success\",\n });\n navigate(\"/ui/medplat/admin/mobileMenuManagement\");\n }\n } catch (error) {\n showToast({\n message: error,\n type: \"error\",\n });\n }\n };\n const navTabs = [\n { id: \"home\", name: \"Home\" },\n { id: \"programs\", name: \"Programs\" },\n { id: \"analytics\", name: \"Analytics\" },\n { id: \"familyManagement\", name: \"Family Management\" },\n ];\n const [tabStatus, setTabStatus] = useState({\n home: true,\n programs: true,\n analytics: true,\n familyManagement: true,\n });\n\n const COMPONENT_TYPES = {\n ...DASHBOARD_COMPONENT_TYPES,\n SEARCH_BAR: \"SEARCH_BAR\",\n SECTION_DROP_ZONE: \"SECTION_DROP_ZONE\",\n NODE_DROP_ZONE,\n GROUP: \"GROUP\",\n };\n const [selectedForm, setSelectedForm] = useState(null);\n\n const handleFormSelection = (event) => {\n const selectedCode = event.target.value;\n const formObject = availableForms.find(\n (form) => form.code === selectedCode,\n );\n setSelectedForm(formObject);\n };\n const [activeId, setActiveId] = useState(null);\n const [activeElementId, setActiveElementId] = useState(null);\n const [activeTabId, setActiveTabId] = useState(\"home\");\n\n const [appConfiguration, setAppConfiguration] = useState(() => {\n const initialConfig = {};\n navTabs.forEach((tab) => {\n initialConfig[tab.id] = [];\n });\n return initialConfig;\n });\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [activeGroupId, setActiveGroupId] = useState(null);\n const [zoomedNodeId, setZoomedNodeId] = useState(null);\n const programsFeatures = appConfiguration.programs?.features || [];\n const featureOptions = useMemo(\n () =>\n Object.values(masterFeatureList).filter(\n (feature) => feature?.type === \"FEATURE\",\n ),\n [masterFeatureList],\n );\n const usedDashboardFeatureIds = useMemo(() => {\n if (activeTabId === \"home\" || activeTabId === \"programs\") {\n return new Set();\n }\n\n const collectIds = (nodes) =>\n (nodes || []).flatMap((node) => {\n if (node.type === COMPONENT_TYPES.FEATURE) return [String(node.id)];\n const legacyFeatures = Array.isArray(node.features)\n ? node.features.map((feature) => String(feature.id))\n : [];\n return [...legacyFeatures, ...collectIds(node.children || [])];\n });\n\n const activeLayout = appConfiguration[activeTabId];\n let layoutsToCheck = [];\n if (Array.isArray(activeLayout)) layoutsToCheck = activeLayout;\n else if (Array.isArray(activeLayout?.features))\n layoutsToCheck = activeLayout.features;\n\n return new Set(collectIds(layoutsToCheck));\n }, [appConfiguration, activeTabId, COMPONENT_TYPES]);\n const handleGroupAccordionToggle = (groupId) => {\n setActiveGroupId((prevId) => (prevId === groupId ? null : groupId));\n };\n const rawLayout = appConfiguration[activeTabId];\n const currentLayout = Array.isArray(rawLayout) ? rawLayout : [];\n\n const filteredFeatures = useMemo(() => {\n const lowerSearch = searchTerm.toLowerCase();\n\n return groupedFeatures\n .map((item) => {\n if (item.type === \"GROUP\") {\n const filteredMenus = item.menus.filter((menu) =>\n menu.name.toLowerCase().includes(lowerSearch),\n );\n\n if (\n item.name.toLowerCase().includes(lowerSearch) ||\n filteredMenus.length > 0\n ) {\n return { ...item, menus: filteredMenus };\n }\n return null;\n }\n\n if (item.name.toLowerCase().includes(lowerSearch)) {\n return item;\n }\n\n return null;\n })\n .filter(Boolean);\n }, [groupedFeatures, searchTerm]);\n const { separatedGroups, separatedFeatures } = useMemo(() => {\n const groups = filteredFeatures.filter((item) => item.type === \"GROUP\");\n const features = filteredFeatures.filter((item) => item.type !== \"GROUP\");\n\n return { separatedGroups: groups, separatedFeatures: features };\n }, [filteredFeatures]);\n const setCurrentLayoutComponents = useCallback(\n (newLayoutUpdater) => {\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n [activeTabId]:\n typeof newLayoutUpdater === \"function\"\n ? newLayoutUpdater(prevConfig[activeTabId] || [])\n : newLayoutUpdater,\n }));\n },\n [activeTabId],\n );\n const handleTabSwitch = useCallback((tabId) => {\n setActiveTabId(tabId);\n setZoomedNodeId(null);\n }, []);\n\n const updateNodeProperty = (node, property, value) => {\n if (property.includes(\".\")) {\n const [groupKey, childKey] = property.split(\".\");\n return {\n ...node,\n [groupKey]: {\n ...(node[groupKey] || {}),\n [childKey]: value,\n },\n };\n }\n return { ...node, [property]: value };\n };\n\n const openComponentConfiguration = (nodeId) => {\n const selectedNode = findNodeById(currentLayout, nodeId);\n if (!selectedNode || selectedNode.type === COMPONENT_TYPES.FEATURE) return;\n setActiveElementId(nodeId);\n setConfigurationDraft(structuredClone(selectedNode));\n setConfigurationDialogOpen(true);\n };\n\n const closeComponentConfiguration = () => {\n setConfigurationDialogOpen(false);\n setConfigurationDraft(null);\n setActiveElementId(null);\n };\n\n const saveComponentConfiguration = () => {\n if (configurationDraft && activeElementId) {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, activeElementId, () => configurationDraft),\n );\n }\n closeComponentConfiguration();\n };\n\n const handleComponentUpdate = (id, property, value) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, id, (node) =>\n updateNodeProperty(node, property, value),\n ),\n );\n };\n\n const handleDraftComponentUpdate = (id, property, value) => {\n setConfigurationDraft((prev) =>\n prev ? updateNodeProperty(prev, property, value) : prev,\n );\n };\n\n const updateAppBarProperty = (property, value) => {\n setAppBarConfig((prev) => {\n const nextConfig = { ...prev };\n\n if (property === \"greetings\") {\n const nextGreetings = { ...prev.greetings, ...value };\n if (nextGreetings.greetingVisible) {\n nextConfig.locationVisible = false;\n }\n\n if (\"greetingName\" in value && nextGreetings.greetingValues) {\n const newGreetingName = value.greetingName || \"\";\n const extractedVarsMatch = newGreetingName.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch\n .map((m) => m.slice(2, -2).trim())\n .filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n\n const cleanedValues = {};\n uniqueExtractedVars.forEach((v) => {\n if (nextGreetings.greetingValues[v]) {\n cleanedValues[v] = nextGreetings.greetingValues[v];\n }\n });\n nextGreetings.greetingValues = cleanedValues;\n }\n\n nextConfig.greetings = nextGreetings;\n } else {\n nextConfig[property] = value;\n if (property === \"locationVisible\" && value) {\n if (nextConfig.greetings) {\n nextConfig.greetings.greetingVisible = false;\n }\n }\n }\n return normalizeAppBarConfig(nextConfig);\n });\n };\n\n const saveBottomNavigationConfig = (items) => {\n const savedItems = items || [];\n setBottomNavigationConfig(savedItems);\n setTabStatus((prevStatus) => {\n const nextStatus = { ...prevStatus };\n navTabs.forEach((tab) => {\n const savedItem = savedItems.find((item) => item.id === tab.id);\n nextStatus[tab.id] = savedItem\n ? savedItem.visible !== false\n : prevStatus[tab.id];\n });\n return nextStatus;\n });\n\n const activeItem = savedItems.find((item) => item.id === activeTabId);\n if (activeItem?.visible === false) {\n const firstVisibleItem = [...savedItems]\n .sort(\n (a, b) => Number(a.displayOrder || 0) - Number(b.displayOrder || 0),\n )\n .find((item) => item.visible !== false);\n if (firstVisibleItem) {\n setActiveTabId(firstVisibleItem.id);\n }\n }\n };\n\n const addCarouselImage = (componentId, documentUuid = \"\") => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: [...(node.images || []), { documentUuid, navigation: \"\" }],\n })),\n );\n };\n\n const updateCarouselImage = (componentId, imageIndex, property, value) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: (node.images || []).map((image, index) =>\n index === imageIndex ? { ...image, [property]: value } : image,\n ),\n })),\n );\n };\n\n const removeCarouselImage = (componentId, imageIndex) => {\n setCurrentLayoutComponents((prev) =>\n updateNodeById(prev, componentId, (node) => ({\n ...node,\n images: (node.images || []).filter((_, index) => index !== imageIndex),\n })),\n );\n };\n\n const addDraftCarouselImage = (componentId, documentUuid = \"\") => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: [...(prev.images || []), { documentUuid, navigation: \"\" }],\n }\n : prev,\n );\n };\n\n const updateDraftCarouselImage = (\n componentId,\n imageIndex,\n property,\n value,\n ) => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: (prev.images || []).map((image, index) =>\n index === imageIndex ? { ...image, [property]: value } : image,\n ),\n }\n : prev,\n );\n };\n\n const removeDraftCarouselImage = (componentId, imageIndex) => {\n setConfigurationDraft((prev) =>\n prev\n ? {\n ...prev,\n images: (prev.images || []).filter(\n (_, index) => index !== imageIndex,\n ),\n }\n : prev,\n );\n };\n\n const createDashboardChildFromDrag = (draggedType, dragData, parentId) => {\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n return createFeatureNode(dragData, parentId);\n }\n if (\n Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType) &&\n draggedType !== COMPONENT_TYPES.FEATURE\n ) {\n return createLayoutNode(draggedType);\n }\n return null;\n };\n\n const hasFeatureInDashboardLayout = (nodes, featureId) =>\n (nodes || []).some((node) => {\n if (\n node.type === COMPONENT_TYPES.FEATURE &&\n String(node.id) === String(featureId)\n ) {\n return true;\n }\n return hasFeatureInDashboardLayout(node.children || [], featureId);\n });\n\n const getDuplicateCheckScopeNode = (nodes, targetId) => {\n const targetNode = findNodeById(nodes, targetId);\n if (targetNode?.type === COMPONENT_TYPES.SECTION) return targetNode;\n\n let currentId = targetId;\n let lastNode = targetNode;\n\n while (currentId && currentId !== ROOT_DROP_ZONE) {\n const parentInfo = findParentNodeInfo(nodes, currentId);\n if (!parentInfo || !parentInfo.node) break;\n if (parentInfo.node.type === COMPONENT_TYPES.SECTION) {\n return parentInfo.node;\n }\n lastNode = parentInfo.node;\n currentId = parentInfo.id;\n }\n\n return lastNode || targetNode;\n };\n\n const getParentNodeForMoveValidation = (parentNode, movingNodeId) => {\n if (!parentNode) return null;\n return {\n ...parentNode,\n children: (parentNode.children || []).filter(\n (child) =>\n child.id !== movingNodeId && child.instanceId !== movingNodeId,\n ),\n };\n };\n\n const addDashboardChild = (parentId, parentType, draggedType, dragData) => {\n setCurrentLayoutComponents((prevLayout) => {\n const parentNode =\n parentId === ROOT_DROP_ZONE ? null : findNodeById(prevLayout, parentId);\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n parentNode,\n );\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return prevLayout;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE && !dragData)\n return prevLayout;\n\n if (draggedType === COMPONENT_TYPES.FEATURE && dragData) {\n const scopeNode = getDuplicateCheckScopeNode(prevLayout, parentId);\n const layoutToCheck = scopeNode ? [scopeNode] : prevLayout;\n if (hasFeatureInDashboardLayout(layoutToCheck, dragData.id)) {\n showToast({\n type: \"warn\",\n message: `Feature ${dragData.name} is already added to this section.`,\n });\n return prevLayout;\n }\n }\n\n const childNode = createDashboardChildFromDrag(\n draggedType,\n dragData,\n parentId,\n );\n if (!childNode) return prevLayout;\n\n return addChildToParent(prevLayout, parentId, childNode);\n });\n };\n\n const deleteDashboardNode = (nodeId) => {\n setCurrentLayoutComponents((prev) => removeNodeById(prev, nodeId));\n if (activeElementId === nodeId) {\n setActiveElementId(null);\n setConfigurationDialogOpen(false);\n setConfigurationDraft(null);\n }\n if (zoomedNodeId === nodeId) {\n setZoomedNodeId(null);\n }\n };\n\n const handleDragStart = (event) => {\n setActiveId(event.active.id);\n };\n\n const handleDragEnd = useCallback(\n (event) => {\n const { active, over } = event;\n if (!active || !active.data.current) {\n setActiveId(null);\n return;\n }\n const overType = over?.data.current?.type;\n const overSectionId = over?.data.current?.sectionId;\n const activeSectionId = active.data.current?.sectionId;\n const draggedType = active.data.current?.type;\n setActiveId(null);\n\n if (\n activeTabId === \"home\" &&\n !over &&\n Object.values(DASHBOARD_COMPONENT_TYPES).includes(draggedType)\n ) {\n showToast({\n type: \"warn\",\n message: `${draggedType} cannot be dropped there.`,\n });\n return;\n }\n\n if (\n !over &&\n activeTabId === \"programs\" &&\n draggedType === COMPONENT_TYPES.FEATURE\n ) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n\n const currentFeatures = programsConfig?.features || [];\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n };\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: [...currentFeatures, newFeature],\n },\n };\n });\n return;\n }\n if (over?.id === \"trash-zone\") {\n const instanceIdToDelete = active.id;\n const parentSectionId = active.data.current.sectionId;\n if (activeTabId === \"home\") {\n setCurrentLayoutComponents((prev) =>\n removeNodeById(prev, instanceIdToDelete),\n );\n return;\n }\n if (draggedType === \"FEATURE_TILE\") {\n if (parentSectionId) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((comp) => {\n if (comp.id === parentSectionId && comp?.features) {\n const newFeatures = comp?.features.filter(\n (f) => f.instanceId !== instanceIdToDelete,\n );\n return { ...comp, features: newFeatures };\n }\n return comp;\n }),\n );\n } else if (activeTabId === \"programs\") {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const newFeatures = currentFeatures.filter(\n (f) => f.instanceId !== instanceIdToDelete,\n );\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n }\n } else if (\n draggedType === COMPONENT_TYPES.SECTION ||\n draggedType === COMPONENT_TYPES.SEARCH_BAR\n ) {\n setCurrentLayoutComponents((prev) =>\n prev.filter((comp) => comp.id !== active.id),\n );\n }\n return;\n }\n\n if (\n activeTabId === \"home\" &&\n active.data.current?.fromDashboardLayout &&\n (overType === NODE_DROP_ZONE ||\n over?.id === \"mobile-content\" ||\n overType === \"DASHBOARD_NODE_TARGET\")\n ) {\n if (overType === \"DASHBOARD_NODE_TARGET\") {\n const targetId = over.data.current.targetId;\n const targetParent = findParentNodeInfo(currentLayout, targetId);\n if (!targetParent) return;\n const validationParentNode = getParentNodeForMoveValidation(\n targetParent.node,\n active.id,\n );\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n draggedType,\n validationParentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) =>\n moveNodeBeforeTarget(prev, active.id, targetId),\n );\n return;\n }\n\n const parentId =\n overType === NODE_DROP_ZONE\n ? over.data.current.parentId\n : ROOT_DROP_ZONE;\n const parentType =\n overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode =\n overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationParentNode = getParentNodeForMoveValidation(\n parentNode,\n active.id,\n );\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n validationParentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n setCurrentLayoutComponents((prev) =>\n moveNodeToParent(prev, active.id, parentId),\n );\n return;\n }\n\n if (activeTabId === \"home\" && overType === \"DASHBOARD_NODE_TARGET\") {\n const targetId = over.data.current.targetId;\n const targetParent = findParentNodeInfo(currentLayout, targetId);\n if (!targetParent) return;\n const validationMessage = getDashboardDropValidationMessage(\n targetParent.type,\n draggedType,\n targetParent.node,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n if (\n draggedType === COMPONENT_TYPES.FEATURE &&\n active.data.current.data\n ) {\n const scopeNode = getDuplicateCheckScopeNode(currentLayout, targetId);\n const layoutToCheck = scopeNode ? [scopeNode] : currentLayout;\n if (\n hasFeatureInDashboardLayout(\n layoutToCheck,\n active.data.current.data.id,\n )\n ) {\n showToast({\n type: \"warn\",\n message: `Feature ${active.data.current.data.name} is already added to this section.`,\n });\n return;\n }\n }\n\n const childNode = createDashboardChildFromDrag(\n draggedType,\n active.data.current.data,\n targetParent.id,\n );\n if (!childNode) return;\n setCurrentLayoutComponents((prev) =>\n addNodeBeforeTarget(prev, targetId, childNode),\n );\n return;\n }\n\n if (\n activeTabId === \"home\" &&\n (overType === NODE_DROP_ZONE || over?.id === \"mobile-content\")\n ) {\n const parentId =\n overType === NODE_DROP_ZONE\n ? over.data.current.parentId\n : ROOT_DROP_ZONE;\n const parentType =\n overType === NODE_DROP_ZONE ? over.data.current.parentType : \"HOME\";\n const parentNode =\n overType === NODE_DROP_ZONE ? over.data.current.parentNode : null;\n const validationMessage = getDashboardDropValidationMessage(\n parentType,\n draggedType,\n parentNode,\n );\n\n if (validationMessage) {\n showToast({ type: \"warn\", message: validationMessage });\n return;\n }\n\n addDashboardChild(\n parentId,\n parentType,\n draggedType,\n active.data.current.data,\n );\n return;\n }\n\n if (draggedType === \"FEATURE_TILE\" && overType === \"FEATURE_TILE\") {\n if (!activeSectionId && activeTabId === \"programs\") {\n setAppConfiguration((prevConfig) => {\n const programsConfig = prevConfig.programs || {};\n const currentFeatures = programsConfig?.features || [];\n\n const oldIndex = currentFeatures.findIndex(\n (f) => f.instanceId === active.id,\n );\n const newIndex = currentFeatures.findIndex(\n (f) => f.instanceId === over.id,\n );\n\n if (oldIndex === -1 || newIndex === -1) {\n return prevConfig;\n }\n\n const newFeatures = arrayMove(currentFeatures, oldIndex, newIndex);\n\n return {\n ...prevConfig,\n programs: {\n ...programsConfig,\n features: newFeatures,\n },\n };\n });\n return;\n }\n if (activeSectionId === overSectionId && active.id !== over.id) {\n setCurrentLayoutComponents((prevLayout) =>\n prevLayout.map((section) => {\n if (section.id === activeSectionId) {\n const features = section?.features;\n const oldIndex = features.findIndex(\n (f) => f.instanceId === active.id,\n );\n const newIndex = features.findIndex(\n (f) => f.instanceId === over.id,\n );\n\n if (oldIndex === -1 || newIndex === -1) return section;\n\n const newFeatures = arrayMove(features, oldIndex, newIndex);\n\n return { ...section, features: newFeatures };\n }\n return section;\n }),\n );\n }\n return;\n }\n\n if (\n draggedType === COMPONENT_TYPES.GROUP &&\n overType === COMPONENT_TYPES.SECTION_DROP_ZONE\n ) {\n const droppedGroup = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedGroup && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n\n const targetSectionIndex = currentLayout.findIndex(\n (c) => c.id === overSectionId,\n );\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n const sourceIdString = String(droppedGroup.uuid);\n const isDuplicate = targetSection?.features.some((f) => {\n return f.type === \"GROUP\" && String(f.uuid) === sourceIdString;\n });\n\n if (isDuplicate) {\n showToast({\n type: \"warn\",\n message: `Group ${droppedGroup.name} is already in this section.`,\n });\n return prevConfig;\n }\n const newGroupItem = {\n id: droppedGroup.uuid,\n name: droppedGroup.name,\n instanceId: `${overSectionId}_GROUP_${droppedGroup.uuid}_${crypto.randomUUID()}`,\n type: \"GROUP\",\n menus: droppedGroup.menus || [],\n icon: droppedGroup.icon,\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newGroupItem],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n if (\n draggedType === COMPONENT_TYPES.FEATURE &&\n overType === COMPONENT_TYPES.SECTION_DROP_ZONE\n ) {\n const droppedFeature = active.data.current.data;\n const overSectionId = over?.data.current?.sectionId;\n\n if (droppedFeature && overSectionId) {\n setAppConfiguration((prevConfig) => {\n const currentLayout = prevConfig[activeTabId] || [];\n const targetSectionIndex = currentLayout.findIndex(\n (c) => c.id === overSectionId,\n );\n\n if (targetSectionIndex === -1) return prevConfig;\n\n const targetSection = currentLayout[targetSectionIndex];\n\n const isDuplicate = targetSection?.features.some(\n (f) => f.id === droppedFeature.id && f.type === \"FEATURE\",\n );\n if (isDuplicate) {\n showToast({\n type: \"warn\",\n message: `Feature ${droppedFeature.name} is already in this section.`,\n });\n return prevConfig;\n }\n\n const newFeature = {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `${overSectionId}_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n };\n\n const updatedSection = {\n ...targetSection,\n features: [...targetSection.features, newFeature],\n };\n\n const newLayout = [...currentLayout];\n newLayout[targetSectionIndex] = updatedSection;\n return { ...prevConfig, [activeTabId]: newLayout };\n });\n }\n return;\n }\n\n if (active.data.current?.sortable && !over?.data.current?.sortable) {\n if (over?.id === \"mobile-content\") {\n return;\n }\n }\n\n if (\n over?.data.current?.sortable &&\n active.data.current?.type === COMPONENT_TYPES.SECTION\n ) {\n if (active.id !== over.id) {\n setCurrentLayoutComponents((prev) => {\n const searchBar = prev.find(\n (c) => c.type === COMPONENT_TYPES.SEARCH_BAR,\n );\n const sortableList = prev.filter(\n (c) => c.type !== COMPONENT_TYPES.SEARCH_BAR,\n );\n\n const oldSortableIndex = sortableList.findIndex(\n (comp) => comp.id === active.id,\n );\n const newSortableIndex = sortableList.findIndex(\n (comp) => comp.id === over.id,\n );\n\n if (oldSortableIndex === -1 || newSortableIndex === -1) {\n return prev;\n }\n\n const newSortableList = arrayMove(\n sortableList,\n oldSortableIndex,\n newSortableIndex,\n );\n\n let finalLayout = newSortableList;\n if (searchBar) {\n finalLayout = [searchBar, ...finalLayout];\n }\n\n return finalLayout;\n });\n return;\n }\n }\n\n if (over?.id === \"mobile-content\" && draggedType) {\n const targetZoneType = over.data.current?.type;\n if (targetZoneType === \"PROGRAMS_ROOT_DROP_ZONE\") {\n if (draggedType === COMPONENT_TYPES.GROUP) {\n showToast({\n type: \"warn\",\n message: `Groups cannot be dropped directly onto the Programs tab.`,\n });\n return;\n }\n\n if (draggedType === COMPONENT_TYPES.FEATURE) {\n const droppedFeature = active.data.current.data;\n if (!droppedFeature) return;\n\n setAppConfiguration((prevConfig) => ({\n ...prevConfig,\n programs: {\n ...prevConfig.programs,\n features: [\n ...prevConfig.programs.features,\n {\n id: droppedFeature.id,\n name: droppedFeature.name,\n instanceId: `PROGRAMS_ROOT_${droppedFeature.id}_${crypto.randomUUID()}`,\n type: \"FEATURE\",\n icon: {\n id: `svg-icon-${droppedFeature.id}`,\n content: droppedFeature.icon,\n type: \"svg\",\n },\n },\n ],\n },\n }));\n return;\n }\n }\n\n if (\n active.data.current?.sortable &&\n targetZoneType === \"LAYOUT_ROOT_DROP_ZONE\"\n ) {\n return;\n }\n if (targetZoneType === \"LAYOUT_ROOT_DROP_ZONE\") {\n setCurrentLayoutComponents((prev) => {\n if (draggedType === COMPONENT_TYPES.SEARCH_BAR) {\n const isSearchAlreadyPresent = prev.some(\n (comp) => comp.type === COMPONENT_TYPES.SEARCH_BAR,\n );\n if (isSearchAlreadyPresent) {\n showToast({\n type: \"info\",\n message: `Only one Search Bar is allowed.`,\n });\n return prev;\n }\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: COMPONENT_TYPES.SEARCH_BAR,\n queryName: \"Query Name\",\n };\n return [newComponent, ...prev];\n } else if (draggedType === COMPONENT_TYPES.SECTION) {\n const newComponent = {\n id: `comp-${Date.now()}`,\n type: draggedType,\n title: \"Section\",\n features: [],\n };\n return [...prev, newComponent];\n }\n\n return prev;\n });\n return;\n }\n }\n },\n [\n setCurrentLayoutComponents,\n setAppConfiguration,\n activeTabId,\n COMPONENT_TYPES,\n currentLayout,\n getParentNodeForMoveValidation,\n addDashboardChild,\n createDashboardChildFromDrag,\n ],\n );\n const SCREEN_CONTENT_WIDTH = \"350px\";\n\n const OverlayMobileSearchBar = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n p: 1.5,\n border: \"1px solid #ccc\",\n borderRadius: \"8px\",\n backgroundColor: \"var(--color-background2)\",\n display: \"flex\",\n alignItems: \"center\",\n boxShadow: \"0 1px 10px rgba(0,0,0,0.3)\",\n }}\n >\n <FontAwesomeIcon\n icon={faMagnifyingGlass}\n style={{ marginRight: \"8px\", color: \"#888\" }}\n />\n <Typography variant=\"body2\" color=\"textSecondary\" sx={{ flexGrow: 1 }}>\n Search...\n </Typography>\n </Box>\n );\n\n const OverlayMobileSection = () => (\n <Box\n sx={{\n width: SCREEN_CONTENT_WIDTH,\n minHeight: \"100px\",\n backgroundColor: \"#e6f0ff\",\n border: \"1px dashed var(--color-tableHeader)\",\n borderRadius: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n boxShadow: \"0 1px 10px rgba(0,0,0,0.3)\",\n color: \"var(--color-text)\",\n }}\n >\n <Typography variant=\"caption\" sx={{ fontWeight: \"bold\" }}>\n Section Dragging\n </Typography>\n </Box>\n );\n const OverlayFeatureTile = ({ feature }) => (\n <Grid item xs={4} sm={4}>\n <Box\n sx={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n p: 0.5,\n height: \"100%\",\n backgroundColor: \"transparent\",\n cursor: \"grab\",\n }}\n >\n {renderIcon(feature.icon)}\n <Typography\n variant=\"caption\"\n sx={{\n mt: 1,\n textAlign: \"center\",\n lineHeight: 1.2,\n width: \"100%\",\n fontSize: \"0.65rem\",\n }}\n >\n {feature.name}\n </Typography>\n </Box>\n </Grid>\n );\n OverlayFeatureTile.propTypes = {\n feature: PropTypes.any,\n };\n const OverlaySidebarFeature = ({ feature }) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, \"18px\");\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: \"18px\",\n width: \"18px\",\n marginRight: \"8px\",\n },\n });\n }\n return (\n <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>\n {renderIcon(iconData, size)}\n </Box>\n );\n };\n return (\n <Box\n sx={{\n width: \"fit-content\",\n p: \"10px\",\n pl: \"10px\",\n backgroundColor: \"var(--color-background2)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n transition: \"all 0.1s\",\n mt: \"4px\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray4)\",\n borderColor: \"var(--color-gray3)\",\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, \"18px\")}\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"normal\", color: \"#333\" }}\n >\n {feature?.name}\n </Typography>\n </Box>\n );\n };\n OverlaySidebarFeature.propTypes = {\n feature: PropTypes.any,\n };\n const getActiveLayoutItem = (activeId) => {\n const allSidebarItems = groupedFeatures.flatMap((item) => {\n if (item.type === COMPONENT_TYPES.GROUP) {\n return [item, ...item.menus];\n }\n return [item];\n });\n\n const sourceItem = allSidebarItems.find(\n (f) => (f.uuid || f.id) === activeId,\n );\n\n if (sourceItem) {\n let itemType;\n\n if (sourceItem.type) {\n itemType = sourceItem.type;\n } else if (sourceItem.menus) {\n itemType = COMPONENT_TYPES.GROUP;\n } else {\n itemType = COMPONENT_TYPES.FEATURE;\n }\n\n return {\n type: itemType,\n data: sourceItem,\n };\n }\n const programFeature = programsFeatures?.find(\n (f) => f.instanceId === activeId,\n );\n if (programFeature) {\n return { type: \"FEATURE_TILE\", data: programFeature };\n }\n const layoutNode = findNodeById(currentLayout, activeId);\n if (layoutNode) {\n return {\n type:\n layoutNode.type === COMPONENT_TYPES.FEATURE\n ? \"FEATURE_TILE\"\n : layoutNode.type,\n data: layoutNode,\n };\n }\n return null;\n };\n const renderActiveOverlay = (activeId) => {\n const component = getActiveLayoutItem(activeId);\n if (!component) return null;\n\n if (component.type === COMPONENT_TYPES.SEARCH_BAR) {\n return <OverlayMobileSearchBar />;\n }\n if (component.type === COMPONENT_TYPES.SECTION) {\n return <OverlayMobileSection />;\n }\n if (component.type === COMPONENT_TYPES.FEATURE) {\n return <OverlaySidebarFeature feature={component.data} />;\n }\n if (component.type === COMPONENT_TYPES.GROUP) {\n return <OverlayFeatureTile feature={component.data} />;\n }\n if (component.type === \"FEATURE_TILE\") {\n return <OverlayFeatureTile feature={component.data} />;\n }\n return null;\n };\n const isDraggingSortable = useMemo(() => {\n if (!activeId) return false;\n\n const isDraggingTopLevel = currentLayout.some(\n (comp) => comp.id === activeId,\n );\n\n const isDraggingFeatureTile = currentLayout.some((comp) =>\n comp?.features?.some((f) => f.instanceId === activeId),\n );\n\n const isDraggingProgramFeatureTile = programsFeatures?.some(\n (f) => f.instanceId === activeId,\n );\n\n return (\n isDraggingTopLevel ||\n isDraggingFeatureTile ||\n isDraggingProgramFeatureTile\n );\n }, [activeId, currentLayout, programsFeatures]);\n const sortableSectionIds = currentLayout.map((c) => c.id);\n const customCollisionDetection = (args) => {\n const draggedType = args.active?.data.current?.type;\n\n if (draggedType === COMPONENT_TYPES.FEATURE && activeTabId !== \"home\") {\n const droppableContainers = args.droppableContainers.filter(\n (container) => container.data.current?.type === \"SECTION_DROP_ZONE\",\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: droppableContainers,\n });\n }\n\n if (activeTabId === \"home\") {\n const dashboardDropTargets = args.droppableContainers.filter(\n (container) => {\n const targetType = container.data.current?.type;\n return (\n targetType === NODE_DROP_ZONE ||\n targetType === \"DASHBOARD_NODE_TARGET\" ||\n container.id === \"mobile-content\"\n );\n },\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: dashboardDropTargets,\n });\n }\n\n if (draggedType === COMPONENT_TYPES.SECTION) {\n const validSectionDropTargets = args.droppableContainers.filter(\n (container) => {\n if (container.id === args.active.id) return false;\n if (container.data.current?.type === \"SECTION_DROP_ZONE\")\n return false;\n return true;\n },\n );\n\n return rectIntersection({\n ...args,\n droppableContainers: validSectionDropTargets,\n });\n }\n return closestCenter(args);\n };\n\n return (\n <>\n <MenuDragContext.Provider>\n <form noValidate onSubmit={formCtrl.handleSubmit(onSubmit)}>\n <DndContext\n onDragStart={handleDragStart}\n onDragEnd={handleDragEnd}\n collisionDetection={customCollisionDetection}\n >\n <Grid container spacing={1}>\n <Grid size={1}></Grid>\n <Grid\n size={6}\n sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}\n >\n <Grid\n sx={{\n padding: \"2px\",\n margin: \"6px 0px\",\n }}\n >\n <Grid container sx={{ justifyContent: \"space-between\" }}>\n <Grid size={2}></Grid>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Mobile View\n </Typography>\n <Grid container spacing={1}>\n <Button\n variant=\"contained\"\n color=\"gray\"\n sx={{ fontSize: \"0.8rem\", height: \"30px\" }}\n type=\"button\"\n onClick={() => {\n setBackModalOpen(true);\n }}\n >\n Back\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n sx={{ fontSize: \"0.8rem\", height: \"30px\" }}\n type=\"submit\"\n >\n Save\n </Button>\n </Grid>\n </Grid>\n <Grid\n sx={{\n height: \"100%\",\n maxHeight: \"100%\",\n overflowY: \"auto\",\n }}\n >\n <SortableContext\n items={sortableSectionIds}\n strategy={verticalListSortingStrategy}\n >\n <MobileDisplay\n tabStatus={tabStatus}\n layoutComponents={currentLayout}\n componentTypes={COMPONENT_TYPES}\n handleSectionClick={openComponentConfiguration}\n activeElementId={activeElementId}\n activeTabId={activeTabId}\n handleTabSwitch={handleTabSwitch}\n formList={availableForms}\n selectedForm={selectedForm}\n onFormSelect={handleFormSelection}\n SvgIconBox={SvgIconBox}\n setCurrentLayoutComponents={setCurrentLayoutComponents}\n programFeatures={\n appConfiguration.programs?.features || []\n }\n appBarConfig={appBarConfig}\n bottomNavigationConfig={bottomNavigationConfig}\n onDeleteNode={deleteDashboardNode}\n zoomedNodeId={zoomedNodeId}\n setZoomedNodeId={setZoomedNodeId}\n ></MobileDisplay>\n </SortableContext>\n </Grid>\n </Grid>\n </Grid>\n <Grid size={1}></Grid>\n <Grid\n size={4}\n sx={{ height: \"calc(100vh - 76px)\", overflowY: \"auto\", pr: 1 }}\n >\n <Grid size={12}>\n <Paper sx={{ padding: \"2px\", margin: \"6px 0px\" }}>\n <Grid className=\"justify-between items-center\" container>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\" }}\n >\n Menu Relation\n </Typography>\n </Grid>\n <Grid container>\n <Grid size={12}>\n <FormControl\n variant=\"outlined\"\n className=\"ml-3 mb-1 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">\n Select Role\n <span className=\"text-red-500 ml-1\">*</span> :\n </Typography>\n <Box className=\"w-[60%] ms-3\">\n <CustomDropdown\n control={formCtrl.control}\n size=\"small\"\n id=\"role\"\n name=\"role\"\n options={rolesList || []}\n disabled={isEditMode}\n displayName=\"name\"\n optionValue=\"id\"\n errors={formCtrl.formState.errors}\n sx={{ height: \"50px\", mt: 2 }}\n disableClearable={isEditMode ? true : false}\n placeholder=\"Select role\"\n onChange={(e) => fetchMenus(e.target.value)}\n />\n </Box>\n </FormControl>\n </Grid>\n <Grid size={12}>\n <FormControl\n variant=\"standard\"\n className=\"ml-3 mb-3 flex flex-row items-center align-items w-[90%]\"\n >\n <Typography variant=\"body2\">\n Attendance Required? :\n </Typography>\n <Box className=\"w-[60%] ms-3\">\n <Switch\n checked={formCtrl.watch(\"isAttendanceRequired\")}\n onChange={(e) =>\n formCtrl.setValue(\n \"isAttendanceRequired\",\n e.target.checked,\n )\n }\n sx={{\n \"& .MuiSwitch-switchBase.Mui-checked\": {\n color: \"var(--color-text)\",\n \"&:hover\": {\n backgroundColor: \"rgba(7, 49, 73, 0.08)\",\n },\n },\n \"& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track\":\n {\n backgroundColor: \"var(--color-tableHeader)\",\n opacity: 0.7,\n },\n }}\n />\n </Box>\n </FormControl>\n </Grid>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12}>\n <Paper\n sx={{\n padding: \"5px\",\n margin: \"2px 0px\",\n transition: \"height 0.3s ease-in-out\",\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Draggable Components\n </Typography>\n\n <Grid\n container\n spacing={2}\n justifyContent=\"space-around\"\n sx={{ p: 1 }}\n >\n <DraggableComponent\n id=\"draggable-search\"\n componentType={COMPONENT_TYPES.SEARCH_BAR}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: \"#e0eaf1\",\n borderColor: \"var(--color-gray3)\",\n boxShadow: \"0 2px 5px rgba(0, 0, 0, 0.15)\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName=\"faMagnifyingGlass\"\n style={{ fontSize: \"1.2rem\", marginRight: \"8px\" }}\n />\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n Search Bar\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n <DraggableComponent\n id=\"draggable-section\"\n componentType={COMPONENT_TYPES.SECTION}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n transition: \"all 0.2s ease-in-out\",\n \"&:hover\": {\n backgroundColor: \"#c5e1ff\",\n borderColor: \"var(--color-tableHeader)\",\n boxShadow: \"0 2px 5px rgba(0, 0, 0, 0.15)\",\n },\n }}\n >\n <FontAwesomeIcons\n iconName=\"faBox\"\n style={{ fontSize: \"1.2rem\", marginRight: \"8px\" }}\n />\n\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n Section\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n {[\n {\n id: \"draggable-row\",\n type: COMPONENT_TYPES.ROW,\n label: \"Row\",\n icon: \"faGripLines\",\n },\n {\n id: \"draggable-column\",\n type: COMPONENT_TYPES.COLUMN,\n label: \"Column\",\n icon: \"faColumns\",\n },\n {\n id: \"draggable-feature-card\",\n type: COMPONENT_TYPES.FEATURE_CARD,\n label: \"Feature Card\",\n icon: \"faAddressCard\",\n },\n {\n id: \"draggable-divider\",\n type: COMPONENT_TYPES.DIVIDER,\n label: \"Divider\",\n icon: \"faMinus\",\n },\n {\n id: \"draggable-carousel\",\n type: COMPONENT_TYPES.CAROUSEL,\n label: \"Carousel\",\n icon: \"faImages\",\n },\n {\n id: \"draggable-text\",\n type: COMPONENT_TYPES.TEXT,\n label: \"Text\",\n icon: \"faFont\",\n },\n ].map((component) => (\n <DraggableComponent\n key={component.id}\n id={component.id}\n componentType={component.type}\n >\n <Grid item xs={6} sm={4} size={6}>\n <Box\n sx={{\n width: \"100%\",\n height: \"50px\",\n p: \"8px 10px\",\n backgroundColor: \"var(--color-gray4)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n boxShadow: \"0 1px 3px rgba(0, 0, 0, 0.1)\",\n cursor: \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"flex-start\",\n color: \"var(--color-text)\",\n }}\n >\n <FontAwesomeIcons\n iconName={component.icon}\n style={{\n fontSize: \"1.2rem\",\n marginRight: \"8px\",\n }}\n />\n <Typography\n variant=\"body2\"\n sx={{ fontWeight: \"bold\", lineHeight: 1 }}\n >\n {component.label}\n </Typography>\n </Box>\n </Grid>\n </DraggableComponent>\n ))}\n </Grid>\n <Grid>\n <TrashZone isDraggingSortable={isDraggingSortable} />\n </Grid>\n <Divider sx={{ mt: 2 }} />\n <Grid size={12}>\n <Box\n sx={{\n padding: \"0px\",\n margin: \"10px 0px\",\n transition: \"height 0.3s ease-in-out\",\n }}\n >\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", marginLeft: \"5px\", mb: 1 }}\n >\n Available Features\n </Typography>\n\n <TextField\n fullWidth\n size=\"small\"\n placeholder=\"Search Feature...\"\n variant=\"outlined\"\n sx={{ mb: 2, px: 1 }}\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <FontAwesomeIcons iconName=\"faMagnifyingGlass\" />\n </InputAdornment>\n ),\n }}\n />\n <Box\n sx={{\n flexGrow: 1,\n overflowY: \"auto\",\n padding: \"0 8px\",\n }}\n >\n <Grid\n container\n direction=\"column\"\n spacing={0}\n sx={{ px: 1 }}\n >\n {separatedGroups.length > 0 && (\n <Grid\n item\n xs={12}\n sx={{\n mb: 1,\n }}\n >\n <Accordion\n sx={{\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #c5e1ff\",\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n }}\n expanded={isMenuGroupsExpanded}\n onChange={() =>\n setIsMenuGroupsExpanded((prev) => !prev)\n }\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons\n iconName={\"faChevronDown\"}\n style={{ color: \"#3f51b5\" }}\n />\n }\n sx={{\n minHeight: \"40px\",\n backgroundColor: \"#e3f2fd\",\n \"&:hover\": { backgroundColor: \"#c5e3f8\" },\n \"& .MuiAccordionSummary-content\": {\n margin: \"0\",\n },\n p: \"0 10px\",\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n color: \"#3f51b5\",\n }}\n >\n <FontAwesomeIcons\n iconName=\"faLayerGroup\"\n style={{ marginRight: \"6px\" }}\n />\n Menu Groups ({separatedGroups.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{\n p: \"8px\",\n pt: 1,\n backgroundColor: \"var(--color-gray4)\",\n }}\n >\n <Grid\n container\n spacing={0.5}\n direction=\"column\"\n >\n {separatedGroups.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n activeGroupId={activeGroupId}\n onGroupToggle={\n handleGroupAccordionToggle\n }\n usedFeatureIds={\n usedDashboardFeatureIds\n }\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedFeatures.length > 0 && (\n <Grid item xs={12}>\n <Accordion\n sx={{\n mt: 0.5,\n \"&:before\": { display: \"none\" },\n boxShadow: \"0 2px 4px rgba(0,0,0,0.05)\",\n border: \"1px solid #c8e6c9\",\n mb: 1,\n borderRadius: \"4px!important\",\n backgroundColor: \"var(--color-background2)\",\n }}\n expanded={isStandaloneExpanded}\n onChange={() =>\n setIsStandaloneExpanded((prev) => !prev)\n }\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <FontAwesomeIcons\n iconName={\"faChevronDown\"}\n style={{ color: \"#009688\" }}\n />\n }\n sx={{\n minHeight: \"40px\",\n backgroundColor: \"#e8f5e9\",\n \"&:hover\": { backgroundColor: \"#cbe6cc\" },\n \"& .MuiAccordionSummary-content\": {\n margin: \"0\",\n },\n p: \"0 10px\",\n }}\n >\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n color: \"#009688\",\n }}\n >\n <FontAwesomeIcons\n iconName=\"faPuzzlePiece\"\n style={{ marginRight: \"6px\" }}\n />\n Standalone Features (\n {separatedFeatures.length})\n </Typography>\n </AccordionSummary>\n <AccordionDetails\n sx={{\n p: \"8px\",\n pt: 1,\n backgroundColor:\n \"var(--color-background2)\",\n }}\n >\n <Grid\n container\n spacing={0.5}\n direction=\"column\"\n >\n {separatedFeatures.map((item) => (\n <SidebarGroupRenderer\n key={item.uuid}\n item={item}\n COMPONENT_TYPES={COMPONENT_TYPES}\n usedFeatureIds={\n usedDashboardFeatureIds\n }\n />\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {separatedGroups.length === 0 &&\n separatedFeatures.length === 0 && (\n <Typography\n variant=\"body2\"\n sx={{\n p: 2,\n color: \"var(--color-gray1)\",\n textAlign: \"center\",\n }}\n >\n No groups or features match your search\n criteria.\n </Typography>\n )}\n </Grid>\n </Box>\n </Box>\n </Grid>\n </Paper>\n </Grid>\n\n <Grid size={12} sx={{ mb: 2 }}>\n <ConfigurationPanel\n activeComponent={null}\n onUpdate={handleComponentUpdate}\n onDeselect={() => setActiveElementId(null)}\n mobileQueries={mobileQueries}\n appBarConfig={appBarConfig}\n onAppBarUpdate={updateAppBarProperty}\n bottomNavigationConfig={bottomNavigationConfig}\n onBottomNavigationSave={saveBottomNavigationConfig}\n onAddCarouselImage={addCarouselImage}\n onUpdateCarouselImage={updateCarouselImage}\n onRemoveCarouselImage={removeCarouselImage}\n documentMasterImages={documentMasterImages}\n featureOptions={featureOptions}\n onImageUpload={uploadDocumentMasterImage}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Grid>\n </Grid>\n </Grid>\n <DragOverlay>{renderActiveOverlay(activeId)}</DragOverlay>\n </DndContext>\n </form>\n </MenuDragContext.Provider>\n <Dialog\n open={configurationDialogOpen}\n onClose={() => setConfigurationDialogOpen(false)}\n fullWidth\n maxWidth=\"md\"\n >\n <DialogTitle>Component Configuration</DialogTitle>\n <DialogContent dividers>\n <ConfigurationPanel\n activeComponent={configurationDraft}\n onUpdate={handleDraftComponentUpdate}\n onDeselect={closeComponentConfiguration}\n mobileQueries={mobileQueries}\n appBarConfig={appBarConfig}\n onAppBarUpdate={updateAppBarProperty}\n bottomNavigationConfig={bottomNavigationConfig}\n onBottomNavigationSave={saveBottomNavigationConfig}\n onAddCarouselImage={addDraftCarouselImage}\n onUpdateCarouselImage={updateDraftCarouselImage}\n onRemoveCarouselImage={removeDraftCarouselImage}\n documentMasterImages={documentMasterImages}\n featureOptions={featureOptions}\n onImageUpload={uploadDocumentMasterImage}\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n hideGlobalConfig\n />\n </DialogContent>\n <DialogActions>\n <Button\n onClick={closeComponentConfiguration}\n variant=\"outlined\"\n color=\"gray\"\n >\n Cancel\n </Button>\n <Button\n onClick={saveComponentConfiguration}\n variant=\"contained\"\n color=\"primary\"\n >\n Save\n </Button>\n </DialogActions>\n </Dialog>\n <CustomConfirmationModal\n open={backModalOpen}\n handleClose={() => {\n setBackModalOpen(false);\n }}\n handleClick={() => {\n navigate(\"/ui/medplat/admin/mobileMenuManagement\");\n }}\n title=\"Leave Page\"\n description={`Changes you made will be discarded. Do you want to continue?`}\n dataTestId=\"delete-auth-confirmation\"\n />\n </>\n );\n}\nfunction DraggableComponent({\n id,\n children,\n componentType,\n dragData = null,\n disabled = false,\n}) {\n const { attributes, listeners, setNodeRef, transform } = useDraggable({\n id,\n data: { type: componentType, ...(dragData && { data: dragData }) },\n disabled,\n });\n\n const style = transform\n ? {\n transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`,\n zIndex: 1000,\n opacity: 0.9,\n }\n : undefined;\n\n return React.cloneElement(children, {\n ref: setNodeRef,\n style: {\n ...children.props.style,\n ...style,\n ...(disabled ? { opacity: 0.45, cursor: \"not-allowed\" } : {}),\n },\n ...(disabled ? {} : listeners),\n ...(disabled ? {} : attributes),\n });\n}\nfunction CustomTabPanel(props) {\n const { children, value, index, ...other } = props;\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`simple-tabpanel-${index}`}\n aria-labelledby={`simple-tab-${index}`}\n {...other}\n >\n {value === index && <Box sx={{ p: 3 }}>{children}</Box>}\n </div>\n );\n}\n\nCustomTabPanel.propTypes = {\n children: PropTypes.node,\n index: PropTypes.number.isRequired,\n value: PropTypes.number.isRequired,\n};\n\nconst TrashZone = ({ isDraggingSortable }) => {\n const { setNodeRef, isOver } = useDroppable({\n id: \"trash-zone\",\n });\n\n if (!isDraggingSortable) {\n return null;\n }\n\n return (\n <Box\n ref={setNodeRef}\n sx={{\n position: \"fixed\",\n bottom: 20,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n width: 250,\n height: 50,\n p: 2,\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: isOver ? \"#d32f2f\" : \"#ef5350\",\n color: \"white\",\n zIndex: 3000,\n transition: \"background-color 0.2s\",\n }}\n >\n <FontAwesomeIcon icon={faTrashCan} style={{ marginRight: \"10px\" }} />\n <Typography variant=\"body1\">\n {isOver ? \"Release to Delete\" : \"Drag Here to Delete\"}\n </Typography>\n </Box>\n );\n};\nTrashZone.propTypes = {\n isDraggingSortable: PropTypes.any,\n};\nconst ConfigurationPanel = ({\n activeComponent,\n onUpdate,\n onDeselect,\n mobileQueries,\n appBarConfig,\n onAppBarUpdate,\n bottomNavigationConfig,\n onBottomNavigationSave,\n onAddCarouselImage,\n onUpdateCarouselImage,\n onRemoveCarouselImage,\n documentMasterImages = [],\n featureOptions = [],\n onImageUpload,\n preferredLanguages = [],\n rolesList = [],\n hideGlobalConfig = false,\n}) => {\n const [expandedBottomNavigationItemId, setExpandedBottomNavigationItemId] =\n useState(null);\n const [expandedActionIndex, setExpandedActionIndex] = useState(null);\n const [imagePickerState, setImagePickerState] = useState({\n open: false,\n target: null, // \"carousel\" | \"backgroundImage\"\n imageIndex: null,\n });\n const [previewImg, setPreviewImg] = useState(null);\n const [bottomNavigationDraft, setBottomNavigationDraft] = useState(\n bottomNavigationConfig || [],\n );\n\n useEffect(() => {\n setBottomNavigationDraft(bottomNavigationConfig || []);\n }, [bottomNavigationConfig]);\n\n const updateBottomNavigationDraftItem = (itemId, property, value) => {\n setBottomNavigationDraft((prev) =>\n (prev || []).map((item) =>\n item.id === itemId ? { ...item, [property]: value } : item,\n ),\n );\n };\n\n const cancelBottomNavigationDraft = () => {\n setBottomNavigationDraft(bottomNavigationConfig || []);\n setExpandedBottomNavigationItemId(null);\n };\n\n const saveBottomNavigationDraft = () => {\n onBottomNavigationSave?.(bottomNavigationDraft || []);\n setExpandedBottomNavigationItemId(null);\n };\n\n const fieldSx = {\n mb: 1.5,\n \"& .MuiOutlinedInput-root\": {\n \"& fieldset\": { borderColor: \"#94a3b8\" },\n \"&:hover fieldset\": { borderColor: \"#64748b\" },\n \"&.Mui-focused fieldset\": { borderColor: \"#475569\" },\n },\n \"& .MuiInputLabel-root\": { color: \"#475569\", fontWeight: 500 },\n \"& .MuiInputLabel-root.Mui-focused\": { color: \"#334155\" },\n };\n\n const textField = (label, value, onChange, props = {}) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n {...props}\n />\n );\n const numberField = (label, value, onChange, props = {}) =>\n textField(label, value, onChange, { type: \"number\", ...props });\n\n const colorField = (label, value, onChange, props = {}) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n InputProps={{\n endAdornment: (\n <Box\n sx={{\n width: 24,\n height: 24,\n borderRadius: \"4px\",\n border: \"1px solid #cbd5e1\",\n backgroundColor: value || \"#ffffff\",\n overflow: \"hidden\",\n cursor: \"pointer\",\n position: \"relative\",\n flexShrink: 0,\n }}\n >\n <input\n type=\"color\"\n value={value || \"#ffffff\"}\n onChange={onChange}\n style={{\n opacity: 0,\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n cursor: \"pointer\",\n }}\n />\n </Box>\n ),\n }}\n {...props}\n />\n );\n\n const selectField = (label, value, onChange, options) => (\n <TextField\n label={label}\n variant=\"outlined\"\n size=\"small\"\n fullWidth\n select\n value={value || \"\"}\n onChange={onChange}\n sx={fieldSx}\n >\n {options.map((option) => (\n <MenuItem key={option.value} value={option.value}>\n {option.label}\n </MenuItem>\n ))}\n </TextField>\n );\n\n const imageDropdown = (label, value, onChange) => (\n <Box sx={{ display: \"flex\", gap: 1, alignItems: \"flex-start\", mb: 1 }}>\n <Autocomplete\n options={documentMasterImages}\n size=\"small\"\n fullWidth\n value={\n documentMasterImages.find((document) => document.uuid === value) ||\n null\n }\n onChange={(event, selectedDocument) =>\n onChange(selectedDocument?.uuid || \"\")\n }\n getOptionLabel={(option) =>\n typeof option === \"string\"\n ? option\n : `${option.name || option.uuid}${option.extension ? ` (${option.extension})` : \"\"}`\n }\n isOptionEqualToValue={(option, selectedValue) =>\n option.uuid === selectedValue.uuid\n }\n noOptionsText=\"No document master images found\"\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant=\"outlined\"\n placeholder=\"Select image from document master\"\n />\n )}\n />\n <Button\n variant=\"outlined\"\n component=\"label\"\n size=\"small\"\n sx={{ minWidth: 88, height: 40 }}\n >\n Upload\n <input\n hidden\n accept=\"image/*\"\n type=\"file\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n onImageUpload?.(file, onChange);\n }}\n />\n </Button>\n </Box>\n );\n\n const imagePickerField = (label, value, onOpenPicker) => {\n const selectedImg = documentMasterImages.find(\n (document) => document.uuid === value,\n );\n return (\n <Box sx={{ mb: 1.5 }}>\n <Typography\n variant=\"body2\"\n sx={{ mb: 0.5, color: \"#475569\", fontWeight: 500 }}\n >\n {label}\n </Typography>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1.5 }}>\n <Button size=\"small\" variant=\"outlined\" onClick={onOpenPicker}>\n {value ? \"Change Image\" : \"Select Image\"}\n </Button>\n {value && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 0.5,\n pr: 1.5,\n maxWidth: 260,\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.02)\",\n borderColor: \"primary.main\",\n },\n }}\n onClick={() => selectedImg && setPreviewImg(selectedImg)}\n title=\"Click to preview full image\"\n >\n <Box sx={{ width: 40, height: 40, flexShrink: 0 }}>\n <ImageThumbnail img={selectedImg} height=\"40px\" />\n </Box>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={selectedImg?.name || value}\n >\n {selectedImg?.name || value}\n </Typography>\n </Box>\n )}\n </Box>\n </Box>\n );\n };\n\n const featureDropdown = (label, value, onChange) => (\n <Autocomplete\n options={featureOptions}\n size=\"small\"\n fullWidth\n value={\n featureOptions.find(\n (feature) => String(feature.id) === String(value),\n ) || null\n }\n onChange={(event, selectedFeature) => onChange(selectedFeature?.id || \"\")}\n getOptionLabel={(option) => option?.name || \"\"}\n isOptionEqualToValue={(option, selectedValue) =>\n String(option.id) === String(selectedValue.id)\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label={label}\n variant=\"outlined\"\n placeholder=\"Select feature\"\n />\n )}\n sx={{ mb: 1 }}\n />\n );\n\n const fontAwesomeIconDropdown = (label, value, onChange) => (\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={value || null}\n onChange={(event, newValue) => onChange(newValue || \"\")}\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}\n >\n <FontAwesomeIcons iconName={option} />\n <Typography variant=\"body2\">{option}</Typography>\n </Box>\n )}\n renderInput={(params) => (\n <TextField {...params} label={label} variant=\"outlined\" />\n )}\n sx={{ mb: 1 }}\n />\n );\n\n const uploadSvgIcon = (file, onUploaded) => {\n if (!file) return;\n const extension = String(file.name?.split(\".\").pop() || \"\").toLowerCase();\n\n if (extension !== \"svg\" && file.type !== \"image/svg+xml\") {\n showToast({\n type: \"warn\",\n message: \"Only SVG icon files can be uploaded.\",\n });\n return;\n }\n\n const reader = new FileReader();\n reader.onload = () => {\n const svgContent = String(reader.result || \"\").trim();\n if (!/<svg[\\s>]/i.test(svgContent)) {\n showToast({\n type: \"warn\",\n message: \"Uploaded file is not a valid SVG icon.\",\n });\n return;\n }\n onUploaded(svgContent);\n showToast({ type: \"success\", message: \"SVG icon loaded successfully.\" });\n };\n reader.onerror = () =>\n showToast({ type: \"error\", message: \"Unable to read SVG icon.\" });\n reader.readAsText(file);\n };\n\n const featureCardIconPicker = (activeComponent) => {\n const selectedIcon =\n activeComponent.icon?.icon || activeComponent.icon?.iconName || \"\";\n const uploadedSvg =\n activeComponent.icon?.iconsvg || activeComponent.icon?.svg || \"\";\n\n return (\n <Box sx={{ mb: 1 }}>\n {fontAwesomeIconDropdown(\"Icon\", selectedIcon, (icon) =>\n onUpdate(activeComponent.id, \"icon\", { icon, iconsvg: \"\" }),\n )}\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <Button size=\"small\" variant=\"outlined\" component=\"label\">\n Upload SVG\n <input\n hidden\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n uploadSvgIcon(file, (iconsvg) =>\n onUpdate(activeComponent.id, \"icon\", { icon: \"\", iconsvg }),\n );\n }}\n />\n </Button>\n {uploadedSvg && (\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() =>\n onUpdate(activeComponent.id, \"icon\", { icon: \"\", iconsvg: \"\" })\n }\n >\n Remove\n </Button>\n )}\n </Box>\n {(selectedIcon || uploadedSvg) && (\n <Box\n sx={{\n mt: 1,\n width: 44,\n height: 44,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"var(--color-background2)\",\n \"& svg\": { width: 28, height: 28 },\n }}\n >\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon} />\n )}\n </Box>\n )}\n </Box>\n );\n };\n\n const normalizeSizeOption = (value) => {\n if ([\"Large\", \"Medium\", \"Small\"].includes(value)) return value;\n return \"Medium\";\n };\n\n const renderGlobalConfig = () => {\n const isGreetingVisible = Boolean(appBarConfig?.greetings?.greetingVisible);\n const locationVisible = Boolean(appBarConfig?.locationVisible);\n\n const PREDEFINED_ACTION_KEYS = [\"Sync\", \"Info\"];\n const PREDEFINED_ACTIONS = {\n Sync: { name: \"Sync\", icon: \"faSync\", navigation: null },\n Info: { name: \"Info\", icon: \"faInfoCircle\", navigation: null },\n };\n\n const allActions = Array.isArray(appBarConfig?.actions)\n ? appBarConfig.actions\n : [];\n const customActions = allActions.filter(\n (a) => !PREDEFINED_ACTION_KEYS.includes(a.name),\n );\n const selectedPredefined = allActions\n .filter((a) => PREDEFINED_ACTION_KEYS.includes(a.name))\n .map((a) => a.name);\n\n const handlePredefinedChange = (event, selectedKeys) => {\n const newActions = [\n ...customActions,\n ...selectedKeys.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionChange = (index, property, value) => {\n const updatedCustom = [...customActions];\n updatedCustom[index] = { ...updatedCustom[index], [property]: value };\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n };\n\n const handleActionAdd = () => {\n const updatedCustom = [\n ...customActions,\n { name: \"New Action\", icon: \"\", iconsvg: \"\", navigation: null },\n ];\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n setExpandedActionIndex(updatedCustom.length - 1);\n };\n\n const handleActionRemove = (index) => {\n const updatedCustom = [...customActions];\n updatedCustom.splice(index, 1);\n const newActions = [\n ...updatedCustom,\n ...selectedPredefined.map((key) => PREDEFINED_ACTIONS[key]),\n ];\n onAppBarUpdate(\"actions\", newActions);\n if (expandedActionIndex === index) {\n setExpandedActionIndex(null);\n } else if (expandedActionIndex > index) {\n setExpandedActionIndex(expandedActionIndex - 1);\n }\n };\n\n return (\n <>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mt: 1 }}>\n App Bar\n </Typography>\n\n {/* Greeting Section */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mt: 1,\n }}\n >\n <Typography variant=\"body2\">Greeting</Typography>\n <Switch\n checked={isGreetingVisible}\n onChange={(e) =>\n onAppBarUpdate(\"greetings\", { greetingVisible: e.target.checked })\n }\n />\n </Box>\n {isGreetingVisible && (\n <Box sx={{ ml: 2, mb: 2, mt: 1 }}>\n <Typography\n variant=\"caption\"\n color=\"textSecondary\"\n sx={{ display: \"block\", mb: 1 }}\n >\n Enter your greeting below. Use {\"{{dynamicValue}}\"} (e.g.,{\" \"}\n {\"{{firstname}}\"}) to insert dynamic values.\n </Typography>\n <TextField\n size=\"small\"\n fullWidth\n label=\"Greeting Text\"\n value={appBarConfig?.greetings?.greetingName || \"\"}\n onChange={(e) =>\n onAppBarUpdate(\"greetings\", { greetingName: e.target.value })\n }\n />\n </Box>\n )}\n\n {isGreetingVisible &&\n (() => {\n const greetingNameStr = appBarConfig?.greetings?.greetingName || \"\";\n const extractedVarsMatch = greetingNameStr.match(/{{(.*?)}}/g);\n const extractedVars = extractedVarsMatch\n ? extractedVarsMatch\n .map((m) => m.slice(2, -2).trim())\n .filter(Boolean)\n : [];\n const uniqueExtractedVars = [...new Set(extractedVars)];\n const greetingValues =\n appBarConfig?.greetings?.greetingValues || {};\n const activeUsedValues = uniqueExtractedVars\n .map((v) => greetingValues[v])\n .filter(Boolean);\n\n if (uniqueExtractedVars.length === 0) return null;\n\n return (\n <Box sx={{ ml: 2, mb: 2, mt: 1 }}>\n <Typography\n variant=\"subtitle2\"\n sx={{\n fontWeight: \"bold\",\n mb: 1,\n color: \"var(--color-primary)\",\n }}\n >\n Map Dynamic Values Parameters\n </Typography>\n {uniqueExtractedVars.map((extractedVar, index) => (\n <Box\n key={index}\n sx={{\n display: \"flex\",\n gap: 2,\n mb: 1,\n alignItems: \"center\",\n }}\n >\n <Box\n sx={{\n flex: 1,\n p: \"8.5px 14px\",\n border: \"1px solid rgba(0, 0, 0, 0.23)\",\n borderRadius: \"4px\",\n }}\n >\n <Typography variant=\"body2\">{extractedVar}</Typography>\n </Box>\n <FormControl size=\"small\" sx={{ flex: 1 }}>\n <Select\n displayEmpty\n value={greetingValues[extractedVar] || \"\"}\n onChange={(e) => {\n const newVals = { ...greetingValues };\n if (e.target.value) {\n newVals[extractedVar] = e.target.value;\n } else {\n delete newVals[extractedVar];\n }\n onAppBarUpdate(\"greetings\", {\n greetingValues: newVals,\n });\n }}\n >\n {DYNAMIC_VARIABLES_LIST.map((dynVar) => (\n <MenuItem\n key={dynVar}\n value={dynVar}\n disabled={\n activeUsedValues.includes(dynVar) &&\n greetingValues[extractedVar] !== dynVar\n }\n >\n {dynVar}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Box>\n ))}\n </Box>\n );\n })()}\n\n {/* Location Section */}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"body2\">Location</Typography>\n <Switch\n checked={locationVisible}\n onChange={(e) =>\n onAppBarUpdate(\"locationVisible\", e.target.checked)\n }\n />\n </Box>\n\n {/* Actions Section */}\n <Box\n sx={{\n mt: 2,\n mb: 1,\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\" }}>\n Actions\n </Typography>\n <Button size=\"small\" variant=\"outlined\" onClick={handleActionAdd}>\n Add Action\n </Button>\n </Box>\n {customActions.map((action, index) => {\n const isExpanded = expandedActionIndex === index;\n const selectedIcon = action.icon || \"\";\n const uploadedSvg = action.iconsvg || action.svg || \"\";\n\n return (\n <Box\n key={index}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n }}\n >\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={() =>\n setExpandedActionIndex(isExpanded ? null : index)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n setExpandedActionIndex(isExpanded ? null : index);\n }\n }}\n sx={{\n minHeight: 42,\n px: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: isExpanded\n ? \"#e8f5e9\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"#f3f7fb\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n width: 18,\n height: 18,\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon || \"faCircle\"} />\n )}\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {action.name || `Action ${index + 1}`}\n </Typography>\n </Box>\n <FontAwesomeIcons\n iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"}\n />\n </Box>\n\n {isExpanded && (\n <Box sx={{ p: 2, backgroundColor: \"var(--color-background)\" }}>\n <TextField\n size=\"small\"\n fullWidth\n label=\"Name\"\n value={action.name || \"\"}\n onChange={(e) =>\n handleActionChange(index, \"name\", e.target.value)\n }\n sx={{ mb: 1 }}\n />\n <Box sx={{ mb: 1 }}>\n {fontAwesomeIconDropdown(\"Icon\", selectedIcon, (icon) =>\n handleActionChange(index, \"icon\", icon),\n )}\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n mt: 1,\n }}\n >\n <Button size=\"small\" variant=\"outlined\" component=\"label\">\n Upload SVG\n <input\n hidden\n type=\"file\"\n accept=\".svg,image/svg+xml\"\n onChange={(event) => {\n const file = event.target.files?.[0];\n event.target.value = \"\";\n uploadSvgIcon(file, (iconsvg) => {\n handleActionChange(index, \"icon\", \"\"); // Clear FontAwesome icon\n handleActionChange(index, \"iconsvg\", iconsvg);\n });\n }}\n />\n </Button>\n {uploadedSvg && (\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() =>\n handleActionChange(index, \"iconsvg\", \"\")\n }\n >\n Remove SVG\n </Button>\n )}\n </Box>\n {(selectedIcon || uploadedSvg) && (\n <Box\n sx={{\n mt: 1,\n width: 36,\n height: 36,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"var(--color-background2)\",\n \"& svg\": { width: 24, height: 24 },\n }}\n >\n {uploadedSvg ? (\n <Box\n component=\"span\"\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n dangerouslySetInnerHTML={{ __html: uploadedSvg }}\n />\n ) : (\n <FontAwesomeIcons iconName={selectedIcon} />\n )}\n </Box>\n )}\n </Box>\n {featureDropdown(\n \"Navigation\",\n typeof action.navigation === \"object\"\n ? action.navigation?.action\n : action.navigation,\n (featureId) =>\n handleActionChange(index, \"navigation\", featureId),\n )}\n <Box\n sx={{ display: \"flex\", justifyContent: \"flex-end\", mt: 1 }}\n >\n <Button\n size=\"small\"\n color=\"error\"\n variant=\"outlined\"\n onClick={() => handleActionRemove(index)}\n >\n Delete\n </Button>\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n\n {/* Predefined Actions Autocomplete */}\n <Box sx={{ mt: 2, mb: 1 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: \"bold\", mb: 1 }}>\n Predefined Actions\n </Typography>\n <Autocomplete\n multiple\n options={PREDEFINED_ACTION_KEYS}\n size=\"small\"\n fullWidth\n value={selectedPredefined}\n onChange={handlePredefinedChange}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Select predefined actions\"\n variant=\"outlined\"\n />\n )}\n />\n </Box>\n\n <Typography\n variant=\"subtitle2\"\n sx={{ fontWeight: \"bold\", mt: 2, mb: 1 }}\n >\n Bottom Navigation\n </Typography>\n {(bottomNavigationDraft || []).map((item) => {\n const isExpanded = expandedBottomNavigationItemId === item.id;\n return (\n <Box\n key={item.id}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n mb: 1,\n overflow: \"hidden\",\n }}\n >\n <Box\n role=\"button\"\n tabIndex={0}\n onClick={() =>\n setExpandedBottomNavigationItemId(isExpanded ? null : item.id)\n }\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n setExpandedBottomNavigationItemId(\n isExpanded ? null : item.id,\n );\n }\n }}\n sx={{\n minHeight: 42,\n px: 1.25,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n cursor: \"pointer\",\n backgroundColor: isExpanded\n ? \"#e8f5e9\"\n : \"var(--color-background2)\",\n \"&:hover\": { backgroundColor: \"#f3f7fb\" },\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n <FontAwesomeIcons iconName={item.iconName || \"faCircle\"} />\n <Typography variant=\"body2\" sx={{ fontWeight: 700 }}>\n {item.label || item.id}\n </Typography>\n </Box>\n <FontAwesomeIcons\n iconName={isExpanded ? \"faChevronUp\" : \"faChevronDown\"}\n />\n </Box>\n {isExpanded && (\n <Box sx={{ p: 1 }}>\n {textField(\"Label\", item.label, (e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"label\",\n e.target.value,\n ),\n )}\n <Autocomplete\n options={FontAwesomeIconsNames}\n size=\"small\"\n fullWidth\n value={item.iconName || item.iconDocumentUuid || null}\n onChange={(event, newValue) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"iconName\",\n newValue || \"\",\n )\n }\n renderOption={(props, option) => (\n <Box\n component=\"li\"\n {...props}\n sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}\n >\n <FontAwesomeIcons iconName={option} />\n <Typography variant=\"body2\">{option}</Typography>\n </Box>\n )}\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Navigation Icon\"\n variant=\"outlined\"\n />\n )}\n sx={{ mb: 1 }}\n />\n {numberField(\"Display Order\", item.displayOrder, (e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"displayOrder\",\n Number(e.target.value || 0),\n ),\n )}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n <Typography variant=\"body2\">Visible</Typography>\n <Switch\n checked={item.visible !== false}\n onChange={(e) =>\n updateBottomNavigationDraftItem(\n item.id,\n \"visible\",\n e.target.checked,\n )\n }\n />\n </Box>\n </Box>\n )}\n </Box>\n );\n })}\n <Box\n sx={{ display: \"flex\", justifyContent: \"flex-end\", gap: 1, mt: 1 }}\n >\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"gray\"\n onClick={cancelBottomNavigationDraft}\n >\n Cancel\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n onClick={saveBottomNavigationDraft}\n >\n Save\n </Button>\n </Box>\n </>\n );\n };\n\n const renderSelectedConfig = () => {\n if (!activeComponent) return null;\n\n if (activeComponent.type === \"SEARCH_BAR\") {\n const queryOptions = mobileQueries.map((q) => q.code);\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Search Bar Configuration\n </Typography>\n <Autocomplete\n disablePortal\n id=\"query-name-autocomplete\"\n options={queryOptions}\n size=\"small\"\n fullWidth\n sx={{ mb: 2 }}\n value={activeComponent.queryName || null}\n onChange={(event, newValue) =>\n onUpdate(activeComponent.id, \"queryName\", newValue || \"\")\n }\n renderInput={(params) => (\n <TextField\n {...params}\n label=\"Query Code\"\n variant=\"outlined\"\n placeholder=\"Select or search query code\"\n />\n )}\n />\n </>\n );\n }\n\n if (activeComponent.type === \"SECTION\") {\n const opacityOptions = Array.from({ length: 21 }, (_, index) => {\n const percentage = index * 5;\n return {\n label: `${percentage}%`,\n value: Number((percentage / 100).toFixed(2)),\n };\n });\n\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Section Configuration\n </Typography>\n {textField(\"Section Title\", activeComponent.header?.title, (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n title: e.target.value,\n }),\n )}\n {selectField(\n \"Header Font Size\",\n activeComponent.header?.fontSize || \"Medium\",\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n fontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Header Font Weight\",\n activeComponent.header?.fontWeight || \"400\",\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n fontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n {colorField(\n \"Header Light Mode Color\",\n activeComponent.header?.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n foreground: {\n ...(activeComponent.header?.foreground || {}),\n lightMode: e.target.value,\n },\n }),\n )}\n {colorField(\n \"Header Dark Mode Color\",\n activeComponent.header?.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"header\", {\n ...(activeComponent.header || {}),\n foreground: {\n ...(activeComponent.header?.foreground || {}),\n darkMode: e.target.value,\n },\n }),\n )}\n\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n type: e.target.value,\n }),\n BACKGROUND_TYPE_OPTIONS,\n )}\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <>\n {selectField(\n \"Gradient Type\",\n activeComponent.background?.gradientType || \"LINEAR\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientType: e.target.value,\n }),\n GRADIENT_TYPE_OPTIONS,\n )}\n\n {selectField(\n \"Direction\",\n activeComponent.background?.direction || \"LEFT_TO_RIGHT\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n direction: e.target.value,\n }),\n GRADIENT_DIRECTION_OPTIONS,\n )}\n {colorField(\n \"Gradient Start Color\",\n activeComponent.background?.gradientStartColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {colorField(\n \"Gradient End Color\",\n activeComponent.background?.gradientEndColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n ) : (\n <>\n {colorField(\n \"Background Light Mode Color\",\n activeComponent.background?.solidLightModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidLightModeColor: e.target.value,\n }),\n )}\n {colorField(\n \"Background Dark Mode Color\",\n activeComponent.background?.solidDarkModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidDarkModeColor: e.target.value,\n }),\n )}\n </>\n )}\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {imagePickerField(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n () =>\n setImagePickerState({\n open: true,\n target: \"backgroundImage\",\n imageIndex: null,\n }),\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"FEATURE_CARD\") {\n const opacityOptions = Array.from({ length: 21 }, (_, index) => {\n const percentage = index * 5;\n return {\n label: `${percentage}%`,\n value: Number((percentage / 100).toFixed(2)),\n };\n });\n\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Card Configuration\n </Typography>\n {numberField(\n \"Border Radius\",\n activeComponent.style?.borderRadius,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n borderRadius: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Card Width (%)\",\n activeComponent.style?.cardWidth,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardWidth: Number(e.target.value || 0),\n }),\n )}\n {numberField(\" Card Height\", activeComponent.style?.cardHeight, (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n cardHeight: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Content Width (%)\",\n activeComponent.style?.contentWidth,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentWidth: Number(e.target.value || 0),\n }),\n )}\n {numberField(\n \" Content Height\",\n activeComponent.style?.contentHeight,\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentHeight: Number(e.target.value || 0),\n }),\n )}\n\n {numberField(\n \"Shadow Elevation (0-24)\",\n activeComponent.shadow?.elevation ?? 0,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n elevation: 0,\n });\n return;\n }\n const val = Math.round(Number(raw));\n if (!Number.isNaN(val) && val >= 0 && val <= 24) {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n elevation: val,\n });\n }\n },\n { inputProps: { min: 0, max: 24, step: 1 } },\n )}\n\n {numberField(\n \"Shadow Opacity (0–1)\",\n activeComponent.shadow?.opacity ?? 0.00,\n (e) => {\n const raw = e.target.value;\n if (raw === \"\") {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n opacity: 0,\n });\n return;\n }\n const val = Number(raw);\n if (!Number.isNaN(val) && val >= 0 && val <= 1) {\n onUpdate(activeComponent.id, \"shadow\", {\n ...(activeComponent.shadow || {}),\n opacity: val,\n });\n }\n },\n { inputProps: { min: 0, max: 1, step: 0.01 } },\n )}\n <Box\n sx={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n mb: 1.5,\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{ color: \"#475569\", fontWeight: 500 }}\n >\n Show Leading Arrow\n </Typography>\n <Switch\n checked={Boolean(activeComponent.showLeadingArrow)}\n onChange={(e) =>\n onUpdate(\n activeComponent.id,\n \"showLeadingArrow\",\n e.target.checked,\n )\n }\n />\n </Box>\n {featureCardIconPicker(activeComponent)}\n {textField(\n \"Title\",\n activeComponent.content?.title ||\n activeComponent.content?.customTitle,\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n title: e.target.value,\n }),\n )}\n {textField(\n \"Subtitle\",\n activeComponent.content?.subTitle ||\n activeComponent.content?.customSubtitle,\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n subTitle: e.target.value,\n }),\n )}\n {imagePickerField(\n \"Background Image\",\n activeComponent.backgroundImage?.documentUuid,\n () =>\n setImagePickerState({\n open: true,\n target: \"backgroundImage\",\n imageIndex: null,\n }),\n )}\n {selectField(\n \"Content Alignment\",\n activeComponent.style?.contentAlignment || \"LEFT\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n contentAlignment: e.target.value,\n }),\n CONTENT_ALIGNMENT_OPTIONS,\n )}\n {selectField(\n \"Layout Type\",\n activeComponent.style?.layoutType || \"HORIZONTAL\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n layoutType: e.target.value,\n }),\n ORIENTATION_OPTIONS,\n )}\n\n {selectField(\n \"Title Font Size\",\n normalizeSizeOption(activeComponent.style?.titleFontSize),\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n titleFontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Subtitle Font Size\",\n normalizeSizeOption(activeComponent.style?.subtitleFontSize),\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n subtitleFontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n\n {selectField(\n \"Background Color Type\",\n activeComponent.background?.type || \"SOLID\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n type: e.target.value,\n }),\n BACKGROUND_TYPE_OPTIONS,\n )}\n {(activeComponent.background?.type || \"SOLID\") === \"GRADIENT\" ? (\n <>\n {selectField(\n \"Gradient Type\",\n activeComponent.background?.gradientType || \"LINEAR\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientType: e.target.value,\n }),\n GRADIENT_TYPE_OPTIONS,\n )}\n\n {selectField(\n \"Direction\",\n activeComponent.background?.direction || \"LEFT_TO_RIGHT\",\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n direction: e.target.value,\n }),\n GRADIENT_DIRECTION_OPTIONS,\n )}\n {colorField(\n \"Gradient Start Color\",\n activeComponent.background?.gradientStartColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient Start Opacity\",\n activeComponent.background?.gradientStartOpacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientStartOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n {colorField(\n \"Gradient End Color\",\n activeComponent.background?.gradientEndColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndColor: e.target.value,\n }),\n )}\n {selectField(\n \"Gradient End Opacity\",\n activeComponent.background?.gradientEndOpacity ?? 0,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n gradientEndOpacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n ) : (\n <>\n {colorField(\n \"Background Light Mode Color\",\n activeComponent.background?.solidLightModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidLightModeColor: e.target.value,\n }),\n )}\n {colorField(\n \"Background Dark Mode Color\",\n activeComponent.background?.solidDarkModeColor,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n solidDarkModeColor: e.target.value,\n }),\n )}\n </>\n )}\n {colorField(\n \"Light Mode Text/Icon Color\",\n activeComponent.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n lightMode: e.target.value,\n }),\n )}\n {colorField(\n \"Dark Mode Text/Icon Color\",\n activeComponent.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n darkMode: e.target.value,\n }),\n )}\n {selectField(\n \"Opacity\",\n activeComponent.background?.opacity ?? 1,\n (e) =>\n onUpdate(activeComponent.id, \"background\", {\n ...(activeComponent.background || {}),\n opacity: Number(e.target.value),\n }),\n opacityOptions,\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"CAROUSEL\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Carousel Configuration\n </Typography>\n {numberField(\"Height\", activeComponent.height, (e) =>\n onUpdate(activeComponent.id, \"height\", Number(e.target.value || 0)),\n )}\n {numberField(\n \"Auto-scroll Interval\",\n activeComponent.autoScrollInterval,\n (e) =>\n onUpdate(\n activeComponent.id,\n \"autoScrollInterval\",\n Number(e.target.value || 0),\n ),\n )}\n {numberField(\"Border Radius\", activeComponent.borderRadius, (e) =>\n onUpdate(\n activeComponent.id,\n \"borderRadius\",\n Number(e.target.value || 0),\n ),\n )}\n <Box sx={{ display: \"flex\", gap: 1, mb: 1 }}>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => onAddCarouselImage(activeComponent.id)}\n >\n Add Image\n </Button>\n </Box>\n {(activeComponent.images || []).map((image, index) => (\n <Box\n key={index}\n sx={{\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n p: 1,\n mb: 1,\n }}\n >\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 2,\n mb: 1,\n }}\n >\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() =>\n setImagePickerState({\n open: true,\n target: \"carousel\",\n imageIndex: index,\n })\n }\n >\n {image.documentUuid ? \"Change Image\" : \"Select Image\"}\n </Button>\n {image.documentUuid && (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 1.5,\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"8px\",\n p: 0.5,\n pr: 1.5,\n maxWidth: 300,\n cursor: \"pointer\",\n \"&:hover\": {\n backgroundColor: \"rgba(0,0,0,0.02)\",\n borderColor: \"primary.main\",\n },\n }}\n onClick={() => {\n const imgObj = documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n );\n if (imgObj) setPreviewImg(imgObj);\n }}\n title=\"Click to preview full image\"\n >\n <Box sx={{ width: 50, height: 50, flexShrink: 0 }}>\n <ImageThumbnail\n img={documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )}\n height=\"50px\"\n />\n </Box>\n <Typography\n variant=\"caption\"\n color=\"text.secondary\"\n sx={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n title={\n documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )?.name || image.documentUuid\n }\n >\n {documentMasterImages.find(\n (img) => img.uuid === image.documentUuid,\n )?.name || image.documentUuid}\n </Typography>\n </Box>\n )}\n </Box>\n {featureDropdown(\n \"Navigation Action\",\n typeof image.navigation === \"object\"\n ? image.navigation?.action\n : image.navigation,\n (featureId) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"navigation\",\n featureId,\n ),\n )}\n \n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n mt: 1,\n mb: 1,\n }}\n >\n <Typography variant=\"body2\">Is Visible?</Typography>\n <Switch\n checked={image.isVisible === true}\n onChange={(e) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"isVisible\",\n e.target.checked,\n )\n }\n size=\"small\"\n />\n </Box>\n\n {image.isVisible === true && (\n <Box sx={{ mt: 2, mb: 2 }}>\n <VisibilityConditionEditor\n value={image.visibilityConditions}\n onChange={(conditions) =>\n onUpdateCarouselImage(\n activeComponent.id,\n index,\n \"visibilityConditions\",\n conditions\n )\n }\n preferredLanguages={preferredLanguages}\n rolesList={rolesList}\n />\n </Box>\n )}\n\n <Button\n size=\"small\"\n color=\"error\"\n onClick={() => onRemoveCarouselImage(activeComponent.id, index)}\n >\n Remove\n </Button>\n </Box>\n ))}\n </>\n );\n }\n\n if (activeComponent.type === \"TEXT\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Text Configuration\n </Typography>\n {textField(\"Text\", activeComponent.content?.text, (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n text: e.target.value,\n }),\n )}\n {selectField(\n \"Font Size\",\n activeComponent.content?.fontSize || \"Medium\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n fontSize: e.target.value,\n }),\n FONT_SIZE_OPTIONS,\n )}\n {selectField(\n \"Font Weight\",\n activeComponent.content?.fontWeight || \"400\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n fontWeight: e.target.value,\n }),\n FONT_WEIGHT_OPTIONS,\n )}\n {selectField(\n \"Text Style\",\n activeComponent.content?.textStyle || \"NORMAL\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n textStyle: e.target.value,\n }),\n TEXT_STYLE_OPTIONS,\n )}\n {selectField(\n \"Decoration\",\n activeComponent.content?.decoration || \"NONE\",\n (e) =>\n onUpdate(activeComponent.id, \"content\", {\n ...(activeComponent.content || {}),\n decoration: e.target.value,\n }),\n TEXT_DECORATION_OPTIONS,\n )}\n {colorField(\n \"Light Mode Color\",\n activeComponent.foreground?.lightMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n lightMode: e.target.value,\n }),\n )}\n {colorField(\n \"Dark Mode Color\",\n activeComponent.foreground?.darkMode,\n (e) =>\n onUpdate(activeComponent.id, \"foreground\", {\n ...(activeComponent.foreground || {}),\n darkMode: e.target.value,\n }),\n )}\n </>\n );\n }\n\n if (activeComponent.type === \"DIVIDER\") {\n return (\n <>\n <Typography variant=\"h6\" sx={{ mb: 2 }}>\n Divider Configuration\n </Typography>\n {selectField(\n \"Orientation\",\n activeComponent.style?.orientation || \"HORIZONTAL\",\n (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n orientation: e.target.value,\n }),\n ORIENTATION_OPTIONS,\n )}\n {numberField(\"Height\", activeComponent.style?.height, (e) =>\n onUpdate(activeComponent.id, \"style\", {\n ...(activeComponent.style || {}),\n height: Number(e.target.value || 0),\n }),\n )}\n </>\n );\n }\n\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n This component has no additional configuration yet.\n </Typography>\n );\n };\n\n const imagePickerDialogs = activeComponent && (\n <>\n <ImagePickerDialog\n open={imagePickerState.open}\n onClose={() =>\n setImagePickerState({ open: false, target: null, imageIndex: null })\n }\n documentMasterImages={documentMasterImages}\n onImageUpload={onImageUpload}\n currentImageUuid={\n imagePickerState.target === \"carousel\" &&\n imagePickerState.imageIndex !== null\n ? (activeComponent.images || [])[imagePickerState.imageIndex]\n ?.documentUuid || \"\"\n : imagePickerState.target === \"backgroundImage\"\n ? activeComponent?.backgroundImage?.documentUuid || \"\"\n : \"\"\n }\n onSelect={(selectedUuid) => {\n if (\n imagePickerState.target === \"carousel\" &&\n imagePickerState.imageIndex !== null\n ) {\n onUpdateCarouselImage(\n activeComponent.id,\n imagePickerState.imageIndex,\n \"documentUuid\",\n selectedUuid,\n );\n } else if (imagePickerState.target === \"backgroundImage\") {\n onUpdate(activeComponent.id, \"backgroundImage\", {\n ...(activeComponent.backgroundImage || {}),\n documentUuid: selectedUuid,\n });\n }\n }}\n />\n\n {previewImg && (\n <FullImagePreviewDialog\n open={!!previewImg}\n onClose={() => setPreviewImg(null)}\n img={previewImg}\n />\n )}\n </>\n );\n\n if (hideGlobalConfig) {\n return (\n <Box>\n {renderSelectedConfig()}\n {imagePickerDialogs}\n </Box>\n );\n }\n\n return (\n <Paper sx={{ p: 2 }}>\n <Typography\n variant=\"subtitle1\"\n sx={{ fontWeight: \"bold\", mb: 1, color: \"var(--color-text)\" }}\n >\n Component Configuration\n </Typography>\n <Divider sx={{ mb: 1 }} />\n {activeComponent ? (\n <>\n {renderSelectedConfig()}\n <Button\n onClick={onDeselect}\n variant=\"outlined\"\n color=\"gray\"\n sx={{ mt: 1 }}\n >\n Close\n </Button>\n <Divider sx={{ my: 2 }} />\n </>\n ) : (\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n Use the edit icon on a preview component to configure it.\n </Typography>\n )}\n {!hideGlobalConfig && renderGlobalConfig()}\n {imagePickerDialogs}\n </Paper>\n );\n};\nConfigurationPanel.propTypes = {\n activeComponent: PropTypes.any,\n onUpdate: PropTypes.any,\n onDeselect: PropTypes.any,\n mobileQueries: PropTypes.any,\n appBarConfig: PropTypes.any,\n onAppBarUpdate: PropTypes.any,\n bottomNavigationConfig: PropTypes.any,\n onBottomNavigationSave: PropTypes.any,\n onAddCarouselImage: PropTypes.any,\n onUpdateCarouselImage: PropTypes.any,\n onRemoveCarouselImage: PropTypes.any,\n documentMasterImages: PropTypes.array,\n preferredLanguages: PropTypes.array,\n hideGlobalConfig: PropTypes.bool,\n};\nfunction SvgIconBox({ svg }) {\n const [svgHtml, setSvgHtml] = useState(\"\");\n\n useEffect(() => {\n if (svg) {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, \"image/svg+xml\");\n const svgElement = doc.documentElement;\n\n let viewBox = svgElement.getAttribute(\"viewBox\");\n if (!viewBox) {\n const width = svgElement.getAttribute(\"width\") || \"512\";\n const height = svgElement.getAttribute(\"height\") || \"512\";\n svgElement.setAttribute(\"viewBox\", `0 0 ${width} ${height}`);\n }\n svgElement.removeAttribute(\"width\");\n svgElement.removeAttribute(\"height\");\n svgElement.setAttribute(\"style\", \"width: 100%; height: 100%;\");\n\n const serializedSvg = new XMLSerializer().serializeToString(svgElement);\n setSvgHtml(serializedSvg);\n }\n }, [svg]);\n\n return (\n <Grid2\n size={2}\n sx={{\n alignItems: \"center\",\n alignSelf: \"center\",\n height: \"40px\",\n width: \"40px\",\n display: \"flex\",\n justifyContent: \"center\",\n textAlign: \"center\",\n backgroundColor: \"\",\n borderRadius: \"3%\",\n transition: \"background-color 0.3s ease\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray3)\",\n cursor: \"pointer\",\n },\n overflow: \"hidden\",\n }}\n >\n <div dangerouslySetInnerHTML={{ __html: svgHtml }} />\n </Grid2>\n );\n}\n\nSvgIconBox.propTypes = {\n svg: PropTypes.string.isRequired,\n};\n\nconst renderIcon = (iconData, size = \"36px\") => {\n let svgContent = null;\n\n if (typeof iconData === \"object\" && iconData !== null) {\n if (iconData.type === \"svg\" && typeof iconData.content === \"string\") {\n svgContent = iconData.content;\n } else if (typeof iconData.svg === \"string\") {\n svgContent = iconData.svg;\n }\n } else if (typeof iconData === \"string\") {\n svgContent = iconData;\n }\n\n if (typeof svgContent === \"string\" && svgContent.includes(\"<svg\")) {\n const match = svgContent.match(/<svg[\\s\\S]*<\\/svg>/i);\n if (match) {\n svgContent = match[0];\n }\n }\n if (svgContent) {\n return (\n <Box\n sx={{\n height: size,\n width: size,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n }}\n >\n <SvgIconBox svg={svgContent} />\n </Box>\n );\n }\n\n return (\n <Box\n sx={{\n fontSize: \"1.2rem\",\n color: \"var(--color-gray3)\",\n border: \"1px solid\",\n borderRadius: \"50%\",\n height: \"36px\",\n width: \"36px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n marginBottom: \"4px\",\n }}\n >\n ?\n </Box>\n );\n};\nconst SidebarDraggableFeatureTile = ({\n feature,\n isGroupMember = false,\n disabled = false,\n}) => {\n const renderIconWithSpacing = (iconData, size) => {\n const iconElement = renderIcon(feature.icon, \"18px\");\n\n if (iconElement && iconElement.type === Box) {\n return React.cloneElement(iconElement, {\n sx: {\n ...iconElement.props.sx,\n height: \"18px\",\n width: \"18px\",\n marginRight: \"8px\",\n },\n });\n }\n return (\n <Box sx={{ mr: \"8px\", display: \"flex\", alignItems: \"center\" }}>\n {renderIcon(iconData, size)}\n </Box>\n );\n };\n return (\n <Box\n sx={{\n width: \"fit-content\",\n p: \"10px\",\n pl: isGroupMember ? \"20px\" : \"10px\",\n backgroundColor: \"var(--color-background2)\",\n border: \"1px solid var(--color-gray3)\",\n borderRadius: \"4px\",\n boxShadow: \"0 1px 2px rgba(0, 0, 0, 0.05)\",\n cursor: disabled ? \"not-allowed\" : \"grab\",\n display: \"flex\",\n alignItems: \"center\",\n transition: \"all 0.1s\",\n opacity: disabled ? 0.55 : 1,\n mt: \"4px\",\n \"&:hover\": {\n backgroundColor: \"var(--color-gray4)\",\n borderColor: \"var(--color-gray3)\",\n },\n }}\n >\n {renderIconWithSpacing(feature.icon, \"18px\")}\n\n <Typography variant=\"body2\" sx={{ fontWeight: \"normal\", color: \"#333\" }}>\n {feature?.name}\n </Typography>\n </Box>\n );\n};\nSidebarDraggableFeatureTile.propTypes = {\n feature: PropTypes.any,\n isGroupMember: PropTypes.any,\n disabled: PropTypes.bool,\n};\nconst SidebarGroupRenderer = ({\n item,\n COMPONENT_TYPES,\n activeGroupId,\n onGroupToggle,\n usedFeatureIds = new Set(),\n}) => {\n const isGroupExpanded = activeGroupId === item.uuid;\n const handleDragIconClickStop = (e) => {\n e.stopPropagation();\n };\n\n if (item.type !== \"GROUP\") {\n return (\n <DraggableComponent\n key={item.uuid}\n id={item.uuid}\n componentType={COMPONENT_TYPES.FEATURE}\n dragData={item}\n disabled={usedFeatureIds.has(String(item.id))}\n >\n <Grid item xs={12} key={item.id}>\n <SidebarDraggableFeatureTile\n feature={item}\n disabled={usedFeatureIds.has(String(item.id))}\n />\n </Grid>\n </DraggableComponent>\n );\n }\n\n return (\n <Accordion\n key={item.uuid}\n sx={{\n m: 0,\n \"&:before\": { display: \"none\" },\n boxShadow: \"none\",\n border: \"1px solid var(--color-gray3)\",\n mb: 1,\n borderRadius: \"4px!important\",\n }}\n expanded={isGroupExpanded}\n onChange={() => onGroupToggle(item.uuid)}\n disableGutters\n >\n <AccordionSummary\n expandIcon={\n <Box\n sx={{ p: 1 }}\n onMouseDown={handleDragIconClickStop}\n onTouchStart={handleDragIconClickStop}\n >\n <FontAwesomeIcons\n iconName=\"faChevronDown\"\n style={{\n fontSize: \"1rem\",\n color: \"var(--color-text)\",\n transform: isGroupExpanded ? \"rotate(360deg)\" : \"rotate(0deg)\",\n transition: \"transform 0.2s\",\n }}\n />\n </Box>\n }\n sx={{\n minHeight: \"15px\",\n backgroundColor: \"#e3f2fd\",\n borderBottom: \"1px solid #bbdefb\",\n cursor: \"grab\",\n \"&:hover\": { backgroundColor: \"#c5e3f8\" },\n \"& .MuiAccordionSummary-content\": { margin: \"0\" },\n p: \"0 10px\",\n }}\n >\n <Box sx={{ display: \"flex\", alignItems: \"center\", width: \"100%\" }}>\n <DraggableComponent\n key={`drag-handle-${item.uuid}`}\n id={item.uuid}\n componentType={COMPONENT_TYPES.GROUP}\n dragData={item}\n >\n <Box\n component=\"span\"\n sx={{\n cursor: \"grab\",\n mr: 1,\n px: 0.5,\n \"&:hover\": { color: \"#007bff\" },\n }}\n onClick={(e) => e.stopPropagation()}\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n <FontAwesomeIcons\n iconName=\"faBars\"\n style={{ fontSize: \"0.8rem\", color: \"var(--color-text)\" }}\n />\n </Box>\n </DraggableComponent>\n\n <Typography\n variant=\"subtitle2\"\n sx={{ fontWeight: \"bold\", color: \"var(--color-text)\", flexGrow: 1 }}\n >\n {item.name} ({item.menus.length})\n </Typography>\n </Box>\n </AccordionSummary>\n\n <AccordionDetails\n sx={{ p: \"8px\", pt: 1, backgroundColor: \"var(--color-gray4)\" }}\n >\n <Grid container spacing={0.5}>\n {item.menus.map((menu) => (\n <DraggableComponent\n key={menu.uuid}\n id={menu.uuid}\n componentType={COMPONENT_TYPES.FEATURE} // DRAGGABLE FEATURE TYPE\n dragData={menu}\n disabled={usedFeatureIds.has(String(menu.id))}\n >\n <Grid item xs={12} key={menu.id}>\n <SidebarDraggableFeatureTile\n feature={menu}\n isGroupMember={true}\n disabled={usedFeatureIds.has(String(menu.id))}\n />\n </Grid>\n </DraggableComponent>\n ))}\n </Grid>\n </AccordionDetails>\n </Accordion>\n );\n};\nSidebarGroupRenderer.propTypes = {\n item: PropTypes.any,\n COMPONENT_TYPES: PropTypes.any,\n activeGroupId: PropTypes.any,\n onGroupToggle: PropTypes.any,\n usedFeatureIds: PropTypes.any,\n};\n"],"names":["MenuDragContext","createContext","DASHBOARD_NODE_TARGET","FeatureSortableWrapper","id","children","sectionId","featureName","attributes","listeners","setNodeRef","isDragging","useSortable","style","React","MobileSearchBar","handleSectionClick","props","ref","jsxs","Box","e","jsx","FontAwesomeIcon","faMagnifyingGlass","Typography","PropTypes","MobileSection","arrayIndex","sectionTitle","dnd","sectionFeatures","SvgIconBox","onGroupClick","activeGroupId","handleContextMenu","handleTileClick","handleGroupContextMenu","feature","setFeatureContainerRef","isOver","useDroppable","SortableContext","f","verticalListSortingStrategy","Grid","isGroup","isPopoverOpen","renderFeatureIcon","renderFeatureName","faChevronDown","GroupFeatureSortableItem","handleFeatureClick","transform","transition","CSS","iconData","svgContent","match","DashboardNodeDropZone","node","NODE_DROP_ZONE","DASHBOARD_COMPONENT_TYPES","DashboardLayoutNode","onDeleteNode","zoomedNodeId","setZoomedNodeId","nodeKey","setDraggableRef","useDraggable","setDropTargetRef","isNodeOver","setCombinedRef","useCallback","element","dragHandleProps","draggableStyle","ActionButtons","Tooltip","IconButton","faMagnifyingGlassPlus","faPen","faTrashCan","TypeLabel","sectionChildren","_a","_b","_c","_d","_e","_f","_g","_i","_h","_j","child","shadowElevation","_k","shadowOpacity","_l","boxShadow","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","_y","_z","_A","_B","_C","_D","_E","_F","_G","faChevronRight","rowChildren","visibleColumns","_H","isVerticalDivider","_I","dividerThickness","_J","_K","_L","_M","fontSizeMap","fontWeightMap","_N","_O","_P","_Q","_R","_S","_T","_U","DashboardSectionNode","index","MobileDisplay","tabStatus","layoutComponents","componentTypes","activeElementId","activeTabId","handleTabSwitch","formList","selectedForm","onFormSelect","setCurrentLayoutComponents","programFeatures","appBarConfig","bottomNavigationConfig","dropZoneId","dropZoneType","zoomedNode","findNodeById","setDroppableRef","navItems","HomeIcon","ProgramsIcon","AnalyticsIcon","FamilyManagementIcon","visibleNavItems","item","a","b","navItem","popoverState","setPopoverState","useState","handleOpenGroupPopover","anchorElement","handleCloseGroupPopover","renderFeatureTile","handleGroupInternalSort","event","active","over","groupId","newGroupData","prevComponents","section","oldIndex","newIndex","newMenus","arrayMove","prev","handleNestedFeatureClick","faWifi","faSignal","faBatteryFull","faLocationDot","selectedActions","action","uploadedSvg","fontAwesomeIcon","FontAwesomeIcons","FormControl","InputLabel","Select","form","MenuItem","Fragment","component","DndContext","MobileGroupPopover","name","parts","part","groupData","anchorEl","onClose","features","anchorRect","Paper","faTimes","Divider","ConditionRow","condition","onChange","onDelete","preferredLanguages","rolesList","operandOne","operator","operandTwo","handleChange","field","value","DYNAMIC_VARIABLES_LIST","dynVar","operatorSummaryLabels","key","label","Autocomplete","lang","option","opt","newValue","params","TextField","r","faTrash","ConditionGroup","group","isRoot","rule","options","handleAddCondition","newOptions","handleAddGroup","newRule","handleToggleRule","handleUpdateOption","updatedOption","handleDeleteOption","Chip","Button","faPlus","faRotate","updatedGroup","updatedCondition","VisibilityConditionEditor","hasConditions","handleCreateRoot","handleClear","theme","faCodeBranch","faLayerGroup","modalStyle","ITEMS_PER_PAGE","GenericImageSVG","height","ImageThumbnail","img","uuid","data","status","useQuery","getFileById","res","FormConfiguratorService","resolved","useMemo","dataUrl","mimeType","FullImagePreviewDialog","open","renderContent","Dialog","DialogContent","ImagePickerDialog","documentMasterImages","onImageUpload","onSelect","currentImageUuid","selectedUuid","setSelectedUuid","searchQuery","setSearchQuery","page","setPage","previewImg","setPreviewImg","fileInputRef","useRef","useEffect","idx","filteredImages","q","totalPages","paginatedImages","handleSave","handleCancel","Modal","Backdrop","Fade","file","uploadedUuid","InputAdornment","Grid2","isSelected","Pagination","normalizeAppBarConfig","raw","normalizedConfig","defaultAppBarConfig","AddMenuConfiguration","location","useLocation","state","queryParams","navigate","useNavigate","setRolesList","isEditMode","setIsEditMode","availableForms","setAvailableForms","mobileQueries","setMobileQueries","setDocumentMasterImages","masterFeatureList","setMasterFeatureList","groupedFeatures","setGroupedFeatures","isMenuGroupsExpanded","setIsMenuGroupsExpanded","isStandaloneExpanded","setIsStandaloneExpanded","backModalOpen","setBackModalOpen","configurationDialogOpen","setConfigurationDialogOpen","configurationDraft","setConfigurationDraft","setAppBarConfig","setBottomNavigationConfig","defaultBottomNavigationConfig","setPreferredLanguages","user","useSelector","formCtrl","useForm","fetchRoles","fetchForms","fetchMobileQueries","fetchDocumentMasterImages","fetchPreferredLanguages","fetchMenus","response","getPreferredLanguage","error","appConfiguration","isAttendanceRequired","appBar","bottomNavigation","reconstructAppState","setAppConfiguration","setTabStatus","setSelectedForm","mappedForms","execute","allowedImageExtensions","uploadDocument","api","normalizeExtension","document","fileName","extension","extensionFromName","imageOptions","showToast","uploadDocumentMasterImage","onUploaded","documentUUID","generateUUID","payload","nextDocument","existingDocuments","roleId","transformListData","findMetadataById","hydrateFeature","canonicalFeature","parentInstanceId","masterData","instanceUuid","hydratedMenus","menuItem","masterMenuItem","m","instancePrefix","hydrateLayout","canonicalLayout","tabId","c","hydrateDashboardLayout","parentId","instanceId","sectionInstanceId","hydratedFeatures","canonicalConfig","newAppConfiguration","newTabStatus","newSelectedForm","tabData","groupedList","masterFeatureMap","seenStandaloneIds","processedMenus","menu","transformedMenu","uniqueMenus","seenMenuIds","sanitizeFeature","canonicalGroupId","validateMobileLayout","extractedVarsMatch","extractedVars","uniqueExtractedVars","greetingValues","extractedVar","homeLayout","hasEmptyDashboardLayoutNode","createCanonicalConfig","finalConfig","navTabs","tab","isEnabled","tabEntry","rawLayout","sanitizeDashboardLayout","rawFeatures","onSubmit","configJsonString","COMPONENT_TYPES","handleFormSelection","selectedCode","formObject","activeId","setActiveId","setActiveElementId","setActiveTabId","initialConfig","searchTerm","setSearchTerm","setActiveGroupId","programsFeatures","featureOptions","usedDashboardFeatureIds","collectIds","nodes","activeLayout","layoutsToCheck","handleGroupAccordionToggle","prevId","currentLayout","filteredFeatures","lowerSearch","filteredMenus","separatedGroups","separatedFeatures","groups","newLayoutUpdater","prevConfig","updateNodeProperty","property","groupKey","childKey","openComponentConfiguration","nodeId","selectedNode","closeComponentConfiguration","saveComponentConfiguration","updateNodeById","handleComponentUpdate","handleDraftComponentUpdate","updateAppBarProperty","nextConfig","nextGreetings","cleanedValues","v","saveBottomNavigationConfig","items","savedItems","prevStatus","nextStatus","savedItem","activeItem","firstVisibleItem","addCarouselImage","componentId","documentUuid","updateCarouselImage","imageIndex","image","removeCarouselImage","_","addDraftCarouselImage","updateDraftCarouselImage","removeDraftCarouselImage","createDashboardChildFromDrag","draggedType","dragData","createFeatureNode","createLayoutNode","hasFeatureInDashboardLayout","featureId","getDuplicateCheckScopeNode","targetId","targetNode","currentId","lastNode","ROOT_DROP_ZONE","parentInfo","findParentNodeInfo","getParentNodeForMoveValidation","parentNode","movingNodeId","addDashboardChild","parentType","prevLayout","validationMessage","getDashboardDropValidationMessage","scopeNode","childNode","addChildToParent","deleteDashboardNode","removeNodeById","handleDragStart","handleDragEnd","overType","overSectionId","activeSectionId","droppedFeature","programsConfig","currentFeatures","newFeature","instanceIdToDelete","parentSectionId","comp","newFeatures","targetParent","validationParentNode","moveNodeBeforeTarget","moveNodeToParent","addNodeBeforeTarget","droppedGroup","targetSectionIndex","targetSection","sourceIdString","newGroupItem","updatedSection","newLayout","searchBar","sortableList","oldSortableIndex","newSortableIndex","finalLayout","targetZoneType","newComponent","SCREEN_CONTENT_WIDTH","OverlayMobileSearchBar","OverlayMobileSection","OverlayFeatureTile","renderIcon","OverlaySidebarFeature","size","iconElement","getActiveLayoutItem","sourceItem","itemType","programFeature","layoutNode","renderActiveOverlay","isDraggingSortable","isDraggingTopLevel","isDraggingFeatureTile","isDraggingProgramFeatureTile","sortableSectionIds","customCollisionDetection","args","droppableContainers","container","rectIntersection","dashboardDropTargets","targetType","validSectionDropTargets","closestCenter","CustomDropdown","Switch","DraggableComponent","TrashZone","Accordion","AccordionSummary","AccordionDetails","SidebarGroupRenderer","ConfigurationPanel","DragOverlay","DialogTitle","DialogActions","CustomConfirmationModal","componentType","disabled","activeComponent","onUpdate","onDeselect","onAppBarUpdate","onBottomNavigationSave","onAddCarouselImage","onUpdateCarouselImage","onRemoveCarouselImage","hideGlobalConfig","expandedBottomNavigationItemId","setExpandedBottomNavigationItemId","expandedActionIndex","setExpandedActionIndex","imagePickerState","setImagePickerState","bottomNavigationDraft","setBottomNavigationDraft","updateBottomNavigationDraftItem","itemId","cancelBottomNavigationDraft","saveBottomNavigationDraft","fieldSx","textField","numberField","colorField","selectField","imagePickerField","onOpenPicker","selectedImg","featureDropdown","selectedFeature","selectedValue","fontAwesomeIconDropdown","FontAwesomeIconsNames","uploadSvgIcon","reader","featureCardIconPicker","selectedIcon","icon","iconsvg","normalizeSizeOption","renderGlobalConfig","isGreetingVisible","locationVisible","PREDEFINED_ACTION_KEYS","PREDEFINED_ACTIONS","allActions","customActions","selectedPredefined","handlePredefinedChange","selectedKeys","newActions","handleActionChange","updatedCustom","handleActionAdd","handleActionRemove","activeUsedValues","newVals","isExpanded","renderSelectedConfig","queryOptions","opacityOptions","percentage","FONT_SIZE_OPTIONS","FONT_WEIGHT_OPTIONS","BACKGROUND_TYPE_OPTIONS","GRADIENT_TYPE_OPTIONS","GRADIENT_DIRECTION_OPTIONS","val","CONTENT_ALIGNMENT_OPTIONS","ORIENTATION_OPTIONS","_V","imgObj","conditions","_W","_X","_Y","_Z","TEXT_STYLE_OPTIONS","__","TEXT_DECORATION_OPTIONS","_$","_aa","_ba","_ca","imagePickerDialogs","svg","svgHtml","setSvgHtml","svgElement","width","serializedSvg","SidebarDraggableFeatureTile","isGroupMember","onGroupToggle","usedFeatureIds","isGroupExpanded","handleDragIconClickStop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAMA,KAAkBC,GAAa,GCiDtCC,KAAwB,yBAqCxBC,KAAyB,CAAC,EAAE,IAAAC,GAAI,UAAAC,GAAU,WAAAC,GAAW,aAAAC,QAAkB;AAC3E,QAAM,EAAE,YAAAC,GAAY,WAAAC,GAAW,YAAAC,GAAY,YAAAC,EAAA,IAAeC,GAAY;AAAA,IACpE,IAAAR;AAAA,IACA,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,MACN,WAAAE;AAAA,MACA,MAAMC;AAAA,IAAA;AAAA,EACR,CACD,GAEKM,IAAQ;AAAA,IACZ,SAASF,IAAa,MAAM;AAAA,EAAA;AAG9B,SAAOG,GAAM,aAAaT,GAAU;AAAA,IAClC,KAAKK;AAAA,IACL,OAAO,EAAE,GAAGL,EAAS,MAAM,OAAO,GAAGQ,EAAA;AAAA,IACrC,GAAGL;AAAA,IACH,GAAGC;AAAA,EAAA,CACJ;AACH,GAEMM,KAAkBD,GAAM;AAAA,EAC5B,CAAC,EAAE,IAAAV,GAAI,OAAAS,GAAO,oBAAAG,GAAoB,GAAGC,EAAA,GAASC,MAM1C,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAAhB;AAAA,MACA,KAAAc;AAAA,MACA,eARsB,CAACG,MAAM;AAC/B,QAAAA,EAAE,eAAA,GACFL,EAAmBZ,CAAE;AAAA,MACvB;AAAA,MAMI,IAAI;AAAA,QACF,GAAGS;AAAA,QACH,OAAO;AAAA,QACP,WAAW;AAAA,QACX,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,IAAI;AAAA,QACJ,WAAW;AAAA,QACX,IAAI;AAAA,MAAA;AAAA,MAEL,GAAGI;AAAA,MAEJ,UAAA;AAAA,QAAA,gBAAAK;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,MAAMC;AAAA,YACN,OAAO,EAAE,aAAa,OAAO,OAAO,oBAAA;AAAA,UAAoB;AAAA,QAAA;AAAA,QAE1D,gBAAAF,EAACG,GAAA,EAAW,SAAQ,SAAQ,OAAM,iBAAgB,IAAI,EAAE,UAAU,KAAK,UAAA,YAAA,CAEvE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AACAV,GAAgB,cAAc;AAC9BA,GAAgB,YAAY;AAAA,EAC1B,IAAIW,EAAU;AAAA,EACd,OAAOA,EAAU;AAAA,EACjB,oBAAoBA,EAAU;AAChC;AAEA,MAAMC,KAAgBb,GAAM;AAAA,EAC1B,CACE;AAAA,IACE,IAAAV;AAAA,IACA,YAAAwB;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAb;AAAA,IACA,KAAAc;AAAA,IACA,iBAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAAC;AAAA,IACA,eAAAC;AAAA,IACA,GAAGjB;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,WAAAT,IAAW,YAAAD,EAAA,IAAesB,KAAO,CAAA,GACnCK,IAAoB,CAACd,MAAM;AAC/B,MAAAA,EAAE,eAAA,GACFL,EAAmBZ,CAAE;AAAA,IACvB,GACMgC,IAAkB,CAACf,MAAM;AAC7B,MAAAA,EAAE,gBAAA;AAAA,IACJ,GACMgB,IAAyB,CAAChB,GAAGiB,OAAY;AAC7C,MAAAjB,EAAE,eAAA,GACFA,EAAE,gBAAA,GAEEY,KACFA,EAAaZ,GAAGiB,EAAO;AAAA,IAE3B,GACM,EAAE,YAAYC,IAAwB,QAAAC,GAAA,IAAWC,GAAa;AAAA,MAClE,IAAI,qBAAqBrC,CAAE;AAAA,MAC3B,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,WAAWA;AAAA,MAAA;AAAA,IACb,CACD;AACD,WACE,gBAAAe;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAAhB;AAAA,QACA,KAAAc;AAAA,QACC,GAAGT;AAAA,QACH,GAAGD;AAAA,QACJ,eAAe2B;AAAA,QACf,IAAI;AAAA,UACF,SAAS;AAAA,UACT,eAAe;AAAA,UACf,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,GAAG;AAAA,UACH,QAAQK,KACJ,wCACA;AAAA,UACJ,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,IAAI;AAAA,QAAA;AAAA,QAEL,GAAGvB;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAK;AAAA,YAACF;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,YAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,IAAI;AAAA,cAAA;AAAA,cAGN,UAAA,gBAAAE;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,YAAY,QAAQ,OAAO,qBAAqB,UAAU,EAAA;AAAA,kBAE/D,UAAAI,KAAgB,WAAWD,IAAa,CAAC;AAAA,gBAAA;AAAA,cAAA;AAAA,YAC5C;AAAA,UAAA;AAAA,UAGF,gBAAAN;AAAA,YAACF;AAAA,YAAA;AAAA,cACC,KAAKmB;AAAA,cACL,IAAI;AAAA,gBACF,OAAO;AAAA,gBACP,WAAW;AAAA,gBACX,QAAQ,GAAGC,KAAS,wCAAwC,EAAE;AAAA,gBAC9D,cAAc;AAAA,gBACd,WAAW;AAAA,gBACX,SAAS;AAAA,gBACT,eAAe;AAAA,gBACf,YAAY;AAAA,gBACZ,iBACET,KAAA,gBAAAA,EAAiB,UAAS,IAAI,eAAe;AAAA,gBAC/C,YAAY;AAAA,cAAA;AAAA,cAGb,WAAAA,KAAA,gBAAAA,EAAiB,UAAS,IACzB,gBAAAT;AAAA,gBAACoB;AAAA,gBAAA;AAAA,kBACC,OAAOX,EAAgB,IAAI,CAACY,MAAMA,EAAE,UAAU;AAAA,kBAC9C,UAAUC;AAAA,kBAEV,4BAACC,IAAA,EAAK,WAAS,IAAC,SAAS,GAAG,IAAI,EAAE,OAAO,QAAQ,GAAG,EAAA,GACjD,UAAAd,EAAgB,IAAI,CAACO,MAAY;AAChC,0BAAMQ,KAAUR,EAAQ,SAAS,SAC3BS,KACJD,MAAWZ,MAAkBI,EAAQ;AACvC,2BACE,gBAAAhB;AAAA,sBAACnB;AAAA,sBAAA;AAAA,wBAEC,IAAImC,EAAQ;AAAA,wBACZ,WAAWlC;AAAA,wBACX,aAAakC,EAAQ;AAAA,wBAErB,UAAA,gBAAAhB;AAAA,0BAACuB;AAAA,0BAAA;AAAA,4BACC,MAAI;AAAA,4BACJ,IAAI;AAAA,4BACJ,IAAI;AAAA,4BACJ,IAAI;AAAA,8BACF,WAAW;AAAA,8BACX,UAAU;AAAA,8BACV,UAAU;AAAA,8BACV,YAAY;AAAA,8BACZ,UAAU;AAAA,4BAAA;AAAA,4BAGZ,UAAA,gBAAA1B;AAAA,8BAACC;AAAA,8BAAA;AAAA,gCACC,SAAS,CAACC,MACRiB,EAAQ,SAAS,aAAaF,EAAgBf,CAAC;AAAA,gCAEjD,eAAe,CAACA,MACdiB,EAAQ,SAAS,WACjBD,EAAuBhB,GAAGiB,CAAO;AAAA,gCAEnC,IAAI;AAAA,kCACF,SAAS;AAAA,kCACT,eAAe;AAAA,kCACf,YAAY;AAAA,kCACZ,gBAAgB;AAAA,kCAChB,GAAG;AAAA,kCACH,QAAQ;AAAA,kCACR,iBAAiB;AAAA,kCACjB,QAAQQ,KAAU,YAAY;AAAA,kCAC9B,UAAU;AAAA,kCACV,UAAU;AAAA,kCACV,WAAW;AAAA,oCACT,iBAAiB;AAAA,kCAAA;AAAA,gCACnB;AAAA,gCAGD,UAAA;AAAA,kCAAAE;AAAA,oCACC,OAAO,UAAU,eAAe;AAAA,sCAC9BV;AAAA,sCACA;AAAA,oCAAA,IAEEA,EAAQ,OACR;AAAA,oCACJN;AAAA,kCAAA;AAAA,kCAEF,gBAAAV;AAAA,oCAACG;AAAA,oCAAA;AAAA,sCACC,SAAQ;AAAA,sCACR,IAAI;AAAA,wCACF,IAAI;AAAA,wCACJ,WAAW;AAAA,wCACX,YAAY;AAAA,wCACZ,OAAO;AAAA,wCACP,UAAU;AAAA,wCACV,OAAO;AAAA,wCACP,YAAY;AAAA,wCACZ,eAAe;AAAA,wCACf,aAAa;AAAA,wCACb,YAAY;AAAA,wCACZ,WAAW;AAAA,wCACX,cAAc;AAAA,sCAAA;AAAA,sCAGf,UAAAwB,GAAkBX,EAAQ,IAAI;AAAA,oCAAA;AAAA,kCAAA;AAAA,kCAEhCQ,MACC,gBAAAxB;AAAA,oCAACF;AAAA,oCAAA;AAAA,sCACC,IAAI;AAAA,wCACF,IAAI;AAAA,wCACJ,SAAS;AAAA,wCACT,YAAY;AAAA,sCAAA;AAAA,sCAGd,UAAA,gBAAAE;AAAA,wCAACC;AAAA,wCAAA;AAAA,0CACC,MAAM2B;AAAA,0CACN,IAAI;AAAA,4CACF,UAAU;AAAA,4CACV,OAAO;AAAA,4CACP,YAAY;AAAA,4CACZ,WAAWH,KACP,mBACA;AAAA,0CAAA;AAAA,wCACN;AAAA,sCAAA;AAAA,oCACF;AAAA,kCAAA;AAAA,gCACF;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAEJ;AAAA,wBAAA;AAAA,sBACF;AAAA,sBA3FKT,EAAQ;AAAA,oBAAA;AAAA,kBA8FnB,CAAC,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA,sBAGDb,GAAA,EAAW,SAAQ,WAAU,OAAM,iBACjC,UAAAe,KAAS,sBAAsB,4BAAA,CAClC;AAAA,YAAA;AAAA,UAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AACAb,GAAc,cAAc;AAC5BA,GAAc,YAAY;AAAA,EACxB,IAAID,EAAU;AAAA,EACd,YAAYA,EAAU;AAAA,EACtB,cAAcA,EAAU;AAAA,EACxB,oBAAoBA,EAAU;AAAA,EAC9B,KAAKA,EAAU;AAAA,EACf,iBAAiBA,EAAU;AAAA,EAC3B,YAAYA,EAAU;AAAA,EACtB,cAAcA,EAAU;AAAA,EACxB,eAAeA,EAAU;AAC3B;AACA,MAAMyB,KAA2B,CAAC;AAAA,EAChC,SAAAb;AAAA,EACA,YAAAN;AAAA,EACA,oBAAAoB;AACF,MAAM;AACJ,QAAM;AAAA,IACJ,YAAA5C;AAAA,IACA,WAAAC;AAAA,IACA,YAAAC;AAAA,IACA,WAAA2C;AAAA,IACA,YAAAC;AAAA,IACA,YAAA3C;AAAA,EAAA,IACEC,GAAY;AAAA,IACd,IAAI0B,EAAQ,QAAQA,EAAQ;AAAA,EAAA,CAC7B,GAEKzB,IAAQ;AAAA,IACZ,WAAW0C,GAAI,UAAU,SAASF,CAAS;AAAA,IAC3C,YAAAC;AAAA,IACA,QAAQ3C,IAAa,MAAO;AAAA,IAC5B,SAASA,IAAa,MAAM;AAAA,IAC5B,WAAWA,IAAa,iCAAiC;AAAA,EAAA;AAmE3D,SACE,gBAAAW;AAAA,IAACuB;AAAA,IAAA;AAAA,MACC,MAAI;AAAA,MACJ,IAAI;AAAA,MACJ,KAAKnC;AAAA,MACL,OAAAG;AAAA,MACA,IAAI;AAAA,QACF,WAAW;AAAA,QACX,UAAU;AAAA,QACV,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,GAAG;AAAA,MAAA;AAAA,MAGL,UAAA,gBAAAM;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,SAhFc,CAACC,MAAM;AACzB,YAAAA,EAAE,gBAAA,GACE+B,KACFA,EAAA;AAAA,UAEJ;AAAA,UA4EO,GAAG3C;AAAA,UACH,GAAGD;AAAA,UACJ,IAAI;AAAA,YACF,SAAS;AAAA,YACT,eAAe;AAAA,YACf,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,GAAG;AAAA,YACH,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,UAAU;AAAA,YACV,UAAU;AAAA,YACV,cAAc;AAAA,YACd,WAAW;AAAA,cACT,iBAAiB;AAAA,YAAA;AAAA,UACnB;AAAA,UAGF,UAAA;AAAA,YAAA,gBAAAc,EAACF,KAAI,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,SAAS,QAAQ,YAAY,YACvD,WA9FmB,CAACoC,GAAUxB,MAAe;AACpD,kBAAIyB,IAAa;AAcjB,kBAZI,OAAOD,KAAa,YAAYA,MAAa,OAC3CA,EAAS,SAAS,SAAS,OAAOA,EAAS,WAAY,WACzDC,IAAaD,EAAS,UACb,OAAOA,EAAS,OAAQ,aACjCC,IAAaD,EAAS,OAEf,OAAOA,KAAa,WAC7BC,IAAaD,IACJ,OAAOlB,EAAQ,QAAS,YAAYA,EAAQ,SAAS,SAC9DmB,IAAanB,EAAQ,KAAK,WAAWA,EAAQ,KAAK,MAGhD,OAAOmB,KAAe,YAAYA,EAAW,SAAS,MAAM,GAAG;AACjE,sBAAMC,IAAQD,EAAW,MAAM,qBAAqB;AACpD,gBAAIC,MACFD,IAAaC,EAAM,CAAC;AAAA,cAExB;AAEA,qBAAID,IAEA,gBAAAnC;AAAA,gBAACF;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,kBAAA;AAAA,kBAGd,UAAA,gBAAAE,EAACU,GAAA,EAAW,KAAKyB,EAAA,CAAY;AAAA,gBAAA;AAAA,cAAA,IAMjC,gBAAAnC;AAAA,gBAACF;AAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,SAAS;AAAA,oBACT,gBAAgB;AAAA,oBAChB,YAAY;AAAA,oBACZ,OAAO;AAAA,oBACP,QAAQ;AAAA,oBACR,cAAc;AAAA,oBACd,UAAU;AAAA,kBAAA;AAAA,kBAEb,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAIL,GAuC6BkB,EAAQ,MAAMN,CAAU,GAC/C;AAAA,YAEA,gBAAAV;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACF,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,YAAY;AAAA,kBACZ,OAAO;AAAA,kBACP,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,YAAY;AAAA,kBACZ,eAAe;AAAA,kBACf,aAAa;AAAA,kBACb,YAAY;AAAA,kBACZ,WAAW;AAAA,kBACX,cAAc;AAAA,kBACd,GAAG;AAAA,gBAAA;AAAA,gBAGJ,UAAAa,EAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACX;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AACAa,GAAyB,YAAY;AAAA,EACnC,SAASzB,EAAU;AAAA,EACnB,YAAYA,EAAU;AAAA,EACtB,oBAAoBA,EAAU;AAChC;AACA,MAAMiC,KAAwB,CAAC,EAAE,MAAAC,GAAM,UAAAvD,QAAe;AACpD,QAAM,EAAE,YAAAK,GAAY,QAAA8B,EAAA,IAAWC,GAAa;AAAA,IAC1C,IAAI,GAAGoB,EAAc,IAAID,EAAK,EAAE;AAAA,IAChC,MAAM;AAAA,MACJ,MAAMC;AAAAA,MACN,UAAUD,EAAK;AAAA,MACf,YAAYA,EAAK;AAAA,MACjB,YAAYA;AAAA,IAAA;AAAA,EACd,CACD;AAED,SACE,gBAAAzC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,KAAKV;AAAA,MACL,IAAI;AAAA,QACF,OAAO;AAAA,QACP,WACEkD,EAAK,SAASE,GAA0B,eACpC,KACAF,EAAK,SAASE,GAA0B,SACtC,MACA;AAAA,QACR,QAAQtB,IACJ,wCACA;AAAA,QACJ,cAAc;AAAA,QACd,GACEoB,EAAK,SAASE,GAA0B,eACpC,MACAF,EAAK,SAASE,GAA0B,SACtC,OACA;AAAA,QACR,iBAAiBtB,IAAS,6BAA6B;AAAA,QACvD,YAAY;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAAnC;AAAA,QACD,gBAAAiB;AAAA,UAACF;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,KAAKwC,EAAK,YAAY,CAAA,GAAI,SAAS,IAAI,OAAO;AAAA,cAC9C,WAAW;AAAA,cACX,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,iBAAiBpB,IAAS,6BAA6B;AAAA,cACvD,OAAO;AAAA,YAAA;AAAA,YAGT,UAAA,gBAAAlB,EAACG,KAAW,SAAQ,WAAU,OAAM,iBACjC,UAAS,YAAc,CAC1B;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AACAkC,GAAsB,YAAY;AAAA,EAChC,MAAMjC,EAAU;AAAA,EAChB,UAAUA,EAAU;AACtB;AAeQA,EAAU,KACNA,EAAU;AAGtB,MAAMqC,KAAsBjD,GAAM;AAAA,EAChC,CACE;AAAA,IACE,MAAA8C;AAAA,IACA,oBAAA5C;AAAA,IACA,YAAAgB;AAAA,IACA,cAAAgC;AAAA,IACA,OAAAnD;AAAA,IACA,cAAAoD;AAAA,IACA,iBAAAC;AAAA,EAAA,GAEFhD,MACG;;AACH,UAAMiD,IAAUP,EAAK,cAAcA,EAAK,IAClC;AAAA,MACJ,YAAApD;AAAA,MACA,WAAAC;AAAA,MACA,YAAY2D;AAAA,MACZ,WAAAf;AAAA,MACA,YAAA1C;AAAA,IAAA,IACE0D,GAAa;AAAA,MACf,IAAIF;AAAA,MACJ,MAAM;AAAA,QACJ,MAAMP,EAAK;AAAA,QACX,MAAAA;AAAA,QACA,qBAAqB;AAAA,MAAA;AAAA,IACvB,CACD,GACK,EAAE,YAAYU,GAAkB,QAAQC,EAAA,IAAe9B,GAAa;AAAA,MACxE,IAAI,yBAAyB0B,CAAO;AAAA,MACpC,MAAM;AAAA,QACJ,MAAMjE;AAAA,QACN,UAAUiE;AAAA,QACV,YAAYP;AAAA,MAAA;AAAA,IACd,CACD,GACKY,KAAiBC;AAAA,MACrB,CAACC,MAAY;AACX,QAAAN,GAAgBM,CAAO,GACvBJ,EAAiBI,CAAO,GACpB,OAAOxD,KAAQ,aACjBA,EAAIwD,CAAO,IACFxD,MACTA,EAAI,UAAUwD;AAAA,MAElB;AAAA,MACA,CAACxD,GAAKkD,IAAiBE,CAAgB;AAAA,IAAA,GAEnCK,KAAkB,EAAE,GAAGlE,GAAW,GAAGD,EAAA,GACrCoE,IAAiB;AAAA,MACrB,GAAG/D;AAAA,MACH,GAAIwC,IACA,EAAE,WAAWE,GAAI,UAAU,SAASF,CAAS,GAAG,QAAQ,IAAA,IACxD,CAAA;AAAA,MACJ,SAAS1C,IAAa,OAAOE,KAAA,gBAAAA,EAAO;AAAA,IAAA,GAGhCsB,KAAoB,CAACd,MAAM;AAC/B,MAAAA,EAAE,eAAA,GACFA,EAAE,gBAAA;AAAA,IACJ,GAEMwD,KAAgB,MACpB,gBAAA1D;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI;AAAA,UACF,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,SAAS;AAAA,UACT,KAAK;AAAA,UACL,iBAAiB;AAAA,UACjB,QAAQ;AAAA,UACR,cAAc;AAAA,UACd,WAAW;AAAA,UACX,QAAQ;AAAA,QAAA;AAAA,QAEV,eAAe,CAACC,MAAMA,EAAE,gBAAA;AAAA,QACxB,SAAS,CAACA,MAAMA,EAAE,gBAAA;AAAA,QAEjB,UAAA;AAAA,UAAAuC,EAAK,SAASE,GAA0B,WAAWI,KAClD,gBAAA5C,EAACwD,MAAQ,OAAO,aAAalB,EAAK,IAAI,IACpC,UAAA,gBAAAtC;AAAA,YAACyD;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAMb,EAAgBN,EAAK,MAAMA,EAAK,UAAU;AAAA,cACzD,IAAI,EAAE,GAAG,KAAA;AAAA,cAET,UAAA,gBAAAtC;AAAA,gBAACC;AAAA,gBAAA;AAAA,kBACC,MAAMyD;AAAA,kBACN,OAAO,EAAE,UAAU,SAAA;AAAA,gBAAS;AAAA,cAAA;AAAA,YAC9B;AAAA,UAAA,GAEJ;AAAA,UAEDpB,EAAK,SAASE,GAA0B,WACvC,gBAAAxC,EAACwD,IAAA,EAAQ,OAAM,aACb,UAAA,gBAAAxD;AAAA,YAACyD;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS,MAAM/D,EAAmB4C,EAAK,MAAMA,EAAK,UAAU;AAAA,cAC5D,IAAI,EAAE,GAAG,KAAA;AAAA,cAET,UAAA,gBAAAtC,EAACC,MAAgB,MAAM0D,IAAO,OAAO,EAAE,UAAU,WAAS,CAAG;AAAA,YAAA;AAAA,UAAA,GAEjE;AAAA,UAEF,gBAAA3D,EAACwD,IAAA,EAAQ,OAAM,UACb,UAAA,gBAAAxD;AAAA,YAACyD;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,SAAS,MAAMf,KAAA,gBAAAA,EAAeJ,EAAK,MAAMA,EAAK;AAAA,cAC9C,IAAI,EAAE,GAAG,KAAA;AAAA,cAET,UAAA,gBAAAtC,EAACC,MAAgB,MAAM2D,IAAY,OAAO,EAAE,UAAU,WAAS,CAAG;AAAA,YAAA;AAAA,UAAA,EACpE,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAIEC,IAAY,MAChB,gBAAA7D;AAAA,MAACG;AAAA,MAAA;AAAA,QACE,GAAGkD;AAAA,QACJ,SAAQ;AAAA,QACR,IAAI;AAAA,UACF,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,UAAU;AAAA,UACV,eAAe;AAAA,UACf,aAAa;AAAA,QAAA;AAAA,QAGd,UAAAf,EAAK;AAAA,MAAA;AAAA,IAAA;AAIV,QAAIA,EAAK,SAASE,GAA0B;AAC1C,aACE,gBAAA3C;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,YACX,GAAG;AAAA,YACH,QAAQoC,IACJ,uCACA;AAAA,YACJ,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,IAAI;AAAA,YACJ,QAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAjD,EAACuD,IAAA,EAAc;AAAA,YACf,gBAAA1D,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,UAAU,UAAU,EAAA,GAC7D,UAAA;AAAA,cAAA,gBAAAE,EAAC6D,GAAA,EAAU;AAAA,cACX,gBAAAhE,EAACC,KAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,YACtC,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,MAAMC;AAAA,oBACN,OAAO,EAAE,aAAa,OAAO,OAAO,oBAAA;AAAA,kBAAoB;AAAA,gBAAA;AAAA,gBAE1D,gBAAAF;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,OAAM;AAAA,oBACN,IAAI,EAAE,UAAU,EAAA;AAAA,oBACjB,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED,EAAA,CACF;AAAA,YAAA,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAKN,QAAImC,EAAK,SAASE,GAA0B;AAC1C,aACE,gBAAA3C;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,WAAW;AAAA,YACX,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,WAAW;AAAA,UAAA;AAAA,UAGb,UAAA;AAAA,YAAA,gBAAAb,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACVnC;AAAA,cACC,OAAO,UAAU,eAAe,KAAKY,GAAM,MAAM,IAC7CA,EAAK,OACL;AAAA,cACJ5B;AAAA,YAAA;AAAA,YAEF,gBAAAV;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI,EAAE,SAAS,SAAS,YAAY,KAAK,YAAY,IAAA;AAAA,gBAEpD,UAAAwB,GAAkBW,EAAK,QAAQA,EAAK,YAAY,SAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAC5D;AAAA,QAAA;AAAA,MAAA;AAKN,QAAIA,EAAK,SAASE,GAA0B,SAAS;AACnD,YAAMsB,IAAkBxB,EAAK,YAAY,CAAA;AAGvC,eAAAyB,KAAAzB,EAAK,eAAL,gBAAAyB,GAAiB,UAAS,aACK,KAAAC,KAAA1B,EAAK,eAAL,gBAAA0B,GAAiB,uBAAsB,WAAWC,KAAA3B,EAAK,eAAL,gBAAA2B,GAAiB,qBAAoB,eAClHC,KAAA5B,EAAK,eAAL,QAAA4B,GAAiB,qBAErB,gBAAArE;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,OAAO;AAAA,YACP,GAAG;AAAA,YACH,QAAQoC,IACJ,uCACA;AAAA,YACJ,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,WAASkB,KAAA7B,EAAK,eAAL,gBAAA6B,GAAiB,YAAW;AAAA,YACrC,IAAI;AAAA,YACJ,QAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAnE,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACF,cAAYiE,KAAA9B,EAAK,WAAL,gBAAA8B,GAAa,eAAc;AAAA,kBACvC,YAAUC,KAAA/B,EAAK,WAAL,gBAAA+B,GAAa,aAAY;AAAA,kBACnC,SAAOC,MAAAC,KAAAjC,EAAK,WAAL,gBAAAiC,GAAa,eAAb,gBAAAD,GAAyB,cAAa;AAAA,kBAC7C,IAAI;AAAA,gBAAA;AAAA,gBAGL,YAAAE,KAAAlC,EAAK,WAAL,gBAAAkC,GAAa,UAAS;AAAA,cAAA;AAAA,YAAA;AAAA,YAEzB,gBAAAxE,EAACqC,MAAsB,MAAAC,GACrB,UAAA,gBAAAtC;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,KAAK;AAAA,kBACL,OAAO;AAAA,gBAAA;AAAA,gBAGR,UAAAgE,EAAgB,IAAI,CAACW,OACpB,gBAAAzE;AAAA,kBAACyC;AAAA,kBAAA;AAAA,oBAEC,MAAMgC;AAAA,oBACN,oBAAA/E;AAAA,oBACA,YAAAgB;AAAA,oBACA,cAAAgC;AAAA,oBACA,cAAAC;AAAA,oBACA,iBAAAC;AAAA,kBAAA;AAAA,kBANK6B,GAAM,cAAcA,GAAM;AAAA,gBAAA,CAQlC;AAAA,cAAA;AAAA,YAAA,EACH,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,QAAInC,EAAK,SAASE,GAA0B,cAAc;AACxD,YAAMxB,KAAWsB,EAAK,YAAY,CAAA,GAAI;AAAA,QACpC,CAACmC,OAAUA,GAAM,SAASjC,GAA0B;AAAA,MAAA,GAEhDkC,OAAkBC,KAAArC,EAAK,WAAL,gBAAAqC,GAAa,cAAa,GAC5CC,OAAgBC,KAAAvC,EAAK,WAAL,gBAAAuC,GAAa,YAAW,GACxCC,KACJJ,KAAkB,IACd,OAAOA,EAAe,MAAMA,KAAkB,CAAC,iBAAiBE,EAAa,MAC7E;AAEN,aACE,gBAAA/E;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,QAAOkE,IAAAzC,EAAK,UAAL,QAAAyC,EAAY,YAAY,GAAGzC,EAAK,MAAM,SAAS,MAAM;AAAA,YAC5D,aAAW0C,IAAA1C,EAAK,UAAL,gBAAA0C,EAAY,eAAc;AAAA,YACrC,GAAG;AAAA,YACH,cAAc,KAAGC,KAAA3C,EAAK,UAAL,gBAAA2C,GAAY,iBAAgB,EAAE;AAAA,YAC/C,QAAQhC,IACJ,uCACA;AAAA,YACJ,cACEiC,KAAA5C,EAAK,eAAL,gBAAA4C,GAAiB,UAAS,aACtB,6BAA2BC,KAAA7C,EAAK,eAAL,gBAAA6C,GAAiB,uBAAsB,MAAM,OAAKC,KAAA9C,EAAK,eAAL,gBAAA8C,GAAiB,qBAAoB,SAAS,QAC3HC,KAAA/C,EAAK,eAAL,gBAAA+C,GAAiB,wBACjB;AAAA,YACN,iBAAiB;AAAA,YACjB,SAAS;AAAA,YACT,WAAAP;AAAA,YACA,SAAS;AAAA,YACT,cACEQ,KAAAhD,EAAK,UAAL,gBAAAgD,GAAY,sBAAqB,UAC7B,eACA;AAAA,YACN,gBAAgB;AAAA,YAChB,iBACEC,KAAAjD,EAAK,UAAL,gBAAAiD,GAAY,gBAAe,eAAe,QAAQ;AAAA,YACpD,QAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAvF,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,MAAM;AAAA,kBACN,SAAS;AAAA,kBACT,iBACE0F,KAAAlD,EAAK,UAAL,gBAAAkD,GAAY,gBAAe,eAAe,QAAQ;AAAA,kBACpD,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,OAAO;AAAA,gBAAA;AAAA,gBAGT,UAAA,gBAAA3F,EAACwC,MAAsB,MAAAC,GACpB,UAAA;AAAA,kBAAAtB,KACC,gBAAAhB;AAAA,oBAACyC;AAAA,oBAAA;AAAA,sBACC,MAAMzB;AAAA,sBACN,oBAAAtB;AAAA,sBACA,YAAAgB;AAAA,sBACA,cAAAgC;AAAA,sBACA,cAAAC;AAAA,sBACA,iBAAAC;AAAA,oBAAA;AAAA,kBAAA;AAAA,qBAGF6C,KAAAnD,EAAK,YAAL,gBAAAmD,GAAc,YACdC,KAAApD,EAAK,YAAL,gBAAAoD,GAAc,eACdC,IAAArD,EAAK,YAAL,gBAAAqD,EAAc,kBACdC,IAAAtD,EAAK,YAAL,gBAAAsD,EAAc,oBACd,gBAAA/F,EAACC,GAAA,EAAI,IAAI,EAAE,IAAI,OACX,UAAA;AAAA,uBAAA+F,IAAAvD,EAAK,YAAL,gBAAAuD,EAAc,YAASC,IAAAxD,EAAK,YAAL,gBAAAwD,EAAc,iBACrC,gBAAA9F;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,YAAU4F,IAAAzD,EAAK,UAAL,gBAAAyD,EAAY,kBAAiB;AAAA,0BACvC,YAAY;AAAA,wBAAA;AAAA,wBAGb,UAAAzD,EAAK,QAAQ,SAASA,EAAK,QAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,uBAGtC0D,KAAA1D,EAAK,YAAL,gBAAA0D,GAAc,eAAYC,KAAA3D,EAAK,YAAL,gBAAA2D,GAAc,oBACxC,gBAAAjG;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI;AAAA,0BACF,SAAS;AAAA,0BACT,YAAU+F,KAAA5D,EAAK,UAAL,gBAAA4D,GAAY,qBAAoB;AAAA,wBAAA;AAAA,wBAG3C,UAAA5D,EAAK,QAAQ,YAAYA,EAAK,QAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACzC,EAAA,CAEJ;AAAA,gBAAA,EAAA,CAEJ;AAAA,cAAA;AAAA,YAAA;AAAA,YAEDA,EAAK,oBACJ,gBAAAtC;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,UAAU;AAAA,kBACV,OAAO;AAAA,kBACP,KAAK;AAAA,kBACL,WAAW;AAAA,kBACX,SAAOqG,KAAA7D,EAAK,eAAL,gBAAA6D,GAAiB,cAAa;AAAA,gBAAA;AAAA,gBAGvC,UAAA,gBAAAnG;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,MAAMmG;AAAA,oBACN,OAAO,EAAE,UAAU,UAAA;AAAA,kBAAU;AAAA,gBAAA;AAAA,cAC/B;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAIR;AAEA,QAAI9D,EAAK,SAASE,GAA0B,KAAK;AAC/C,YAAM6D,IAAc/D,EAAK,YAAY,CAAA,GAC/BgE,KAAiB,KAAK,IAAI,KAAK,IAAID,EAAY,QAAQ,CAAC,GAAG,CAAC;AAElE,aACE,gBAAAxG;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,OAAO;AAAA,YACP,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,QAAQoC,IACJ,uCACA;AAAA,YACJ,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,IAAI;AAAA,UAAA;AAAA,UAGN,UAAA;AAAA,YAAA,gBAAAjD,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D,EAACqC,MAAsB,MAAAC,GACrB,UAAA,gBAAAtC;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,qBAAqB,UAAUwG,EAAc;AAAA,kBAC7C,KAAK;AAAA,kBACL,OAAO;AAAA,gBAAA;AAAA,gBAGR,UAAAD,EAAY,IAAI,CAAC5B,OAChB,gBAAAzE;AAAA,kBAACyC;AAAA,kBAAA;AAAA,oBAEC,MAAMgC;AAAA,oBACN,oBAAA/E;AAAA,oBACA,YAAAgB;AAAA,oBACA,cAAAgC;AAAA,oBACA,cAAAC;AAAA,oBACA,iBAAAC;AAAA,kBAAA;AAAA,kBANK6B,GAAM,cAAcA,GAAM;AAAA,gBAAA,CAQlC;AAAA,cAAA;AAAA,YAAA,EACH,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,QAAInC,EAAK,SAASE,GAA0B;AAC1C,aACE,gBAAA3C;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,QAAM0F,KAAAjE,EAAK,UAAL,gBAAAiE,GAAY,SAAQ;AAAA,YAC1B,OAAO;AAAA,YACP,WAAW;AAAA,YACX,SAAS;AAAA,YACT,eAAe;AAAA,YACf,KAAK;AAAA,YACL,GAAG;AAAA,YACH,IAAI;AAAA,YACJ,QAAQtD,IACJ,uCACA;AAAA,YACJ,YAAY;AAAA,YACZ,cAAc;AAAA,YACd,iBAAiB;AAAA,YACjB,IAAI;AAAA,UAAA;AAAA,UAGN,UAAA;AAAA,YAAA,gBAAAjD,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D,EAACqC,MAAsB,MAAAC,GACrB,UAAA,gBAAAtC;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,KAAK;AAAA,kBACL,OAAO;AAAA,gBAAA;AAAA,gBAGP,aAAK,YAAY,CAAA,GAAI,IAAI,CAAC2E,MAC1B,gBAAAzE;AAAA,kBAACyC;AAAA,kBAAA;AAAA,oBAEC,MAAMgC;AAAA,oBACN,oBAAA/E;AAAA,oBACA,YAAAgB;AAAA,oBACA,cAAAgC;AAAA,oBACA,cAAAC;AAAA,oBACA,iBAAAC;AAAA,kBAAA;AAAA,kBANK6B,EAAM,cAAcA,EAAM;AAAA,gBAAA,CAQlC;AAAA,cAAA;AAAA,YAAA,EACH,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAKN,QAAInC,EAAK,SAASE,GAA0B,SAAS;AACnD,YAAMgE,MAAoBC,KAAAnE,EAAK,UAAL,gBAAAmE,GAAY,iBAAgB,YAChDC,KAAmB,KAAGC,IAAArE,EAAK,UAAL,gBAAAqE,EAAY,WAAU,CAAC;AAEnD,aACE,gBAAA9G;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI;AAAA,YACF,UAAU;AAAA,YACV,IAAI2F,IACA,MACA,KAAGI,KAAAtE,EAAK,UAAL,gBAAAsE,GAAY,mBAAkB,CAAC;AAAA,YACtC,IAAIJ,IAAoB,KAAGK,IAAAvE,EAAK,UAAL,gBAAAuE,EAAY,mBAAkB,CAAC,OAAO;AAAA,YACjE,WAAWL,IAAoB,KAAK;AAAA,YACpC,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,QAAQ;AAAA,UAAA;AAAA,UAGV,UAAA;AAAA,YAAA,gBAAAxG,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D;AAAA,cAACF;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,OAAO0G,IAAoBE,KAAmB;AAAA,kBAC9C,QAAQF,IAAoB,SAASE;AAAA,kBACrC,mBAAiBI,IAAAxE,EAAK,UAAL,gBAAAwE,EAAY,UAAS;AAAA,gBAAA;AAAA,cACxC;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,QAAIxE,EAAK,SAASE,GAA0B,MAAM;AAChD,YAAMuE,IAAc;AAAA,QAClB,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA,GAEHC,KAAgB;AAAA,QACpB,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MAAA;AAGP,aACE,gBAAAnH;AAAA,QAACC;AAAA,QAAA;AAAA,UACC,KAAKoD;AAAA,UACL,OAAOI;AAAA,UACP,eAAezC;AAAA,UACf,IAAI,EAAE,UAAU,YAAY,GAAG,KAAK,IAAI,KAAK,QAAQ,OAAA;AAAA,UAErD,UAAA;AAAA,YAAA,gBAAAb,EAACuD,IAAA,EAAc;AAAA,8BACdM,GAAA,EAAU;AAAA,YACX,gBAAA7D;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI;AAAA,kBACF,UAAU4G,GAAYE,IAAA3E,EAAK,YAAL,gBAAA2E,EAAc,QAAQ,KAAK;AAAA,kBACjD,YAAYD,IAAcE,KAAA5E,EAAK,YAAL,gBAAA4E,GAAc,UAAU,KAAK;AAAA,kBACvD,aACEC,KAAA7E,EAAK,YAAL,gBAAA6E,GAAc,eAAc,WAAW,WAAW;AAAA,kBACpD,kBACEC,KAAA9E,EAAK,YAAL,gBAAA8E,GAAc,gBAAe,cACzB,gBACAC,IAAA/E,EAAK,YAAL,gBAAA+E,EAAc,gBAAe,iBAC3B,iBACA;AAAA,kBACR,SAAOC,KAAAhF,EAAK,eAAL,gBAAAgF,GAAiB,cAAa;AAAA,gBAAA;AAAA,gBAGtC,YAAAC,KAAAjF,EAAK,YAAL,gBAAAiF,GAAc,SAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACzB;AAAA,QAAA;AAAA,MAAA;AAAA,IAGN;AAEA,WAAIjF,EAAK,SAASE,GAA0B,WAExC,gBAAA3C;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKoD;AAAA,QACL,OAAOI;AAAA,QACP,eAAezC;AAAA,QACf,IAAI;AAAA,UACF,UAAU;AAAA,UACV,QAAQyB,EAAK,UAAU;AAAA,UACvB,cAAc,GAAGA,EAAK,gBAAgB,EAAE;AAAA,UACxC,iBAAiB;AAAA,UACjB,QAAQW,IACJ,uCACA;AAAA,UACJ,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,gBAAgB;AAAA,UAChB,IAAI;AAAA,UACJ,QAAQ;AAAA,QAAA;AAAA,QAGV,UAAA;AAAA,UAAA,gBAAAjD,EAACuD,IAAA,EAAc;AAAA,4BACdM,GAAA,EAAU;AAAA,UACX,gBAAAhE,EAACM,KAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,OAAO,UAAA;AAAA,YAAA;AAAA,cAC1CqH,KAAAlF,EAAK,WAAL,gBAAAkF,GAAa,WAAU;AAAA,YAAE;AAAA,UAAA,EAAA,CACtC;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,IAMJ,gBAAAxH;AAAA,MAACF;AAAA,MAAA;AAAA,QACC,KAAKoD;AAAA,QACL,OAAOI;AAAA,QACP,eAAezC;AAAA,QACf,IAAI;AAAA,UACF,GAAG;AAAA,UACH,QAAQoC,IACJ,uCACA;AAAA,QAAA;AAAA,QAGL,UAAAX,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EAGZ;AACF;AACAG,GAAoB,cAAc;AAClCA,GAAoB,YAAY;AAAA,EAC9B,MAAMrC,EAAU;AAAA,EAChB,oBAAoBA,EAAU;AAAA,EAC9B,YAAYA,EAAU;AAAA,EACtB,KAAKA,EAAU;AAAA,EACf,OAAOA,EAAU;AAAA,EACjB,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAAA,EACxB,iBAAiBA,EAAU;AAC7B;AAEA,MAAMqH,KAAuB,CAAC;AAAA,EAC5B,MAAAnF;AAAA,EACA,OAAAoF;AAAA,EACA,oBAAAhI;AAAA,EACA,YAAAgB;AAAA,EACA,cAAAgC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,MACE,gBAAA5C;AAAA,EAACyC;AAAA,EAAA;AAAA,IACC,MAAAH;AAAA,IACA,oBAAA5C;AAAA,IACA,YAAAgB;AAAA,IACA,cAAAgC;AAAA,IACA,cAAAC;AAAA,IACA,iBAAAC;AAAA,EAAA;AACF;AAEF6E,GAAqB,YAAY;AAAA,EAC/B,MAAMrH,EAAU;AAAA,EAChB,OAAOA,EAAU;AAAA,EACjB,oBAAoBA,EAAU;AAAA,EAC9B,YAAYA,EAAU;AAAA,EACtB,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAAA,EACxB,iBAAiBA,EAAU;AAC7B;AAEA,SAAwBuH,GAAc;AAAA,EACpC,WAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,oBAAApI;AAAA,EACA,iBAAAqI;AAAA,EACA,aAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,cAAAC;AAAA,EACA,cAAAC;AAAA,EACA,YAAA1H;AAAA,EACA,4BAAA2H;AAAA,EACA,iBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,wBAAAC;AAAA,EACA,cAAA9F;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC;AACF,GAAG;;AACD,QAAM6F,IAAa,kBACbC,KACJV,MAAgB,aACZ,4BACA,yBACAW,KACJhG,MAAgB,CAAC,QAAQ,WAAW,EAAE,SAASqF,CAAW,IACtDY,GAAaf,GAAkBlF,EAAY,IAC3C,MACA,EAAE,YAAYkG,GAAiB,QAAA3H,GAAA,IAAWC,GAAa;AAAA,IAC3D,IAAIsH;AAAA,IACJ,MAAM;AAAA,MACJ,MAAMC;AAAA,MACN,WAAWD;AAAA,IAAA;AAAA,EACb,CACD,GAEKK,KAAW;AAAA,IACf,EAAE,IAAI,QAAQ,OAAO,QAAQ,MAAMC,IAAU,KAAK,OAAA;AAAA,IAClD,EAAE,IAAI,YAAY,OAAO,YAAY,MAAMC,IAAc,KAAK,WAAA;AAAA,IAC9D;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAMC;AAAA,MACN,KAAK;AAAA,IAAA;AAAA,IAEP;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,MAAMC;AAAA,MACN,KAAK;AAAA,IAAA;AAAA,EACP,GAUIC,MAPwBX,KAAA,QAAAA,EAAwB,SAClD,CAAC,GAAGA,CAAsB,EACvB,OAAO,CAACY,MAASA,EAAK,YAAY,MAASxB,EAAUwB,EAAK,EAAE,CAAC,EAC7D;AAAA,IACC,CAACC,GAAGC,MAAM,OAAOD,EAAE,gBAAgB,CAAC,IAAI,OAAOC,EAAE,gBAAgB,CAAC;AAAA,EAAA,IAEtER,GAAS,OAAO,CAACM,MAASxB,EAAUwB,EAAK,EAAE,CAAC,GACF,IAAI,CAACA,MAAA;;AAAU;AAAA,MAC3D,GAAGA;AAAA,MACH,OAAMrF,IAAA+E,GAAS,KAAK,CAACS,OAAYA,GAAQ,OAAOH,EAAK,EAAE,MAAjD,gBAAArF,EAAoD;AAAA,MAC1D,KAAKqF,EAAK;AAAA,IAAA;AAAA,GACV,GACI,CAACI,IAAcC,EAAe,IAAIC,EAAS;AAAA,IAC/C,UAAU;AAAA,IACV,WAAW;AAAA,EAAA,CACZ,GAEKC,KAAyBxG;AAAA,IAC7B,CAACpD,GAAGiB,MAAY;;AACd,YAAM4I,KAAgB7J,EAAE;AAExB,QAAIgE,KAAAyF,GAAa,cAAb,gBAAAzF,GAAwB,gBAAe/C,EAAQ,aACjD6I,GAAA,IAEAJ,GAAgB;AAAA,QACd,UAAUG;AAAA,QACV,WAAW5I;AAAA,MAAA,CACZ;AAAA,IAEL;AAAA,IACA,CAACwI,GAAa,SAAS;AAAA,EAAA,GAEnBK,KAA0B1G,GAAY,MAAM;AAChD,IAAAsG,GAAgB,EAAE,UAAU,MAAM,WAAW,MAAM;AAAA,EACrD,GAAG,CAAA,CAAE,GACCK,KAAoB,CAAC9I,MAAY;;AACrC,UAAMQ,IAAUR,EAAQ,SAAS,SAC3BS,KACJD,OAAWuC,KAAAyF,GAAa,cAAb,gBAAAzF,GAAwB,gBAAe/C,EAAQ;AAE5D,WACE,gBAAAhB;AAAA,MAACnB;AAAA,MAAA;AAAA,QAEC,IAAImC,EAAQ;AAAA,QACZ,WAAW;AAAA,QACX,aAAaA,EAAQ;AAAA,QAErB,UAAA,gBAAAhB;AAAA,UAACuB;AAAA,UAAA;AAAA,YACC,MAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,IAAI;AAAA,cACF,WAAW;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,UAAU;AAAA,YAAA;AAAA,YAGZ,UAAA,gBAAA1B;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,SAAS,CAACC,OAAMiB,EAAQ,SAAS,aAAajB,GAAE,gBAAA;AAAA,gBAChD,eAAe,CAACA,OACdiB,EAAQ,SAAS,WAAW2I,GAAuB5J,IAAGiB,CAAO;AAAA,gBAE/D,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,eAAe;AAAA,kBACf,YAAY;AAAA,kBACZ,gBAAgB;AAAA,kBAChB,GAAG;AAAA,kBACH,QAAQ;AAAA,kBACR,iBAAiB;AAAA,kBACjB,QAAQQ,IAAU,YAAY;AAAA,kBAC9B,UAAU;AAAA,kBACV,UAAU;AAAA,kBACV,WAAW;AAAA,oBACT,iBAAiB;AAAA,kBAAA;AAAA,gBACnB;AAAA,gBAGD,UAAA;AAAA,kBAAAE;AAAA,oBACC,OAAO,UAAU,eAAe,KAAKV,GAAS,MAAM,IAChDA,EAAQ,OACR;AAAA,oBACJN;AAAA,kBAAA;AAAA,kBAEF,gBAAAV;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,IAAI;AAAA,wBACF,IAAI;AAAA,wBACJ,WAAW;AAAA,wBACX,YAAY;AAAA,wBACZ,OAAO;AAAA,wBACP,UAAU;AAAA,wBACV,OAAO;AAAA,wBACP,YAAY;AAAA,wBACZ,eAAe;AAAA,wBACf,aAAa;AAAA,wBACb,YAAY;AAAA,wBACZ,WAAW;AAAA,wBACX,cAAc;AAAA,sBAAA;AAAA,sBAGf,UAAAwB,GAAkBX,EAAQ,IAAI;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEhCQ,KACC,gBAAAxB,EAACF,GAAA,EAAI,IAAI,EAAE,IAAI,KAAK,SAAS,QAAQ,YAAY,SAAA,GAC/C,UAAA,gBAAAE;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,MAAM2B;AAAA,sBACN,IAAI;AAAA,wBACF,UAAU;AAAA,wBACV,OAAO;AAAA,wBACP,YAAY;AAAA,wBACZ,WAAWH,KACP,mBACA;AAAA,sBAAA;AAAA,oBACN;AAAA,kBAAA,EACF,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAEJ;AAAA,QAAA;AAAA,MACF;AAAA,MA/EKT,EAAQ;AAAA,IAAA;AAAA,EAkFnB,GACM+I,KAA0B,CAACC,MAAU;AACzC,UAAM,EAAE,QAAAC,GAAQ,MAAAC,GAAA,IAASF;AAEzB,QAAI,CAACE,MAAQD,EAAO,OAAOC,GAAK,MAAM,CAACV,GAAa;AAClD;AAGF,UAAMW,KAAUX,GAAa,UAAU;AACvC,QAAIY,KAAe;AAEnB,IAAA/B,GAA2B,CAACgC,OACJA,GAAe,IAAI,CAACC,OACpCA,GAAQ,WACH;AAAA,MACL,GAAGA;AAAA,MACH,UAAUA,GAAQ,SAAS,IAAI,CAACtJ,OAAY;AAC1C,YACEA,GAAQ,eAAemJ,MACvBnJ,GAAQ,SAAS,WACjBA,GAAQ,OACR;AACA,gBAAMuJ,KAAWvJ,GAAQ,MAAM;AAAA,YAC7B,CAACoI,QAAUA,GAAK,QAAQA,GAAK,gBAAgBa,EAAO;AAAA,UAAA,GAEhDO,KAAWxJ,GAAQ,MAAM;AAAA,YAC7B,CAACoI,QAAUA,GAAK,QAAQA,GAAK,gBAAgBc,GAAK;AAAA,UAAA;AAGpD,cAAIK,OAAa,MAAMC,OAAa,IAAI;AACtC,kBAAMC,KAAWC,GAAU1J,GAAQ,OAAOuJ,IAAUC,EAAQ;AAE5D,mBAAAJ,KAAe,EAAE,GAAGpJ,IAAS,OAAOyJ,GAAA,GAE7BL;AAAA,UACT;AAAA,QACF;AACA,eAAOpJ;AAAA,MACT,CAAC;AAAA,IAAA,IAGEsJ,EACR,CAGF,GAEGF,MACFX,GAAgB,CAACkB,QAAU;AAAA,MACzB,GAAGA;AAAA,MACH,WAAWP;AAAA,IAAA,EACX;AAAA,EAEN,GAEMQ,KAA2B,MAAM;AACrC,IAAAf,GAAA;AAAA,EACF;AAwBA,SACE,gBAAAhK,EAAC,OAAA,EAAI,WAAU,oBAAmB,IAAG,iBACnC,UAAA;AAAA,IAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,MAAA,gBAAAG,EAAC,QAAA,EAAK,WAAU,WAAU,UAAA,SAAK;AAAA,MAC/B,gBAAAA,EAAC,OAAA,EAAI,WAAU,WAAA,CAAW;AAAA,MAE1B,gBAAAH,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,QAAA,gBAAAG,EAAC,UAAK,cAAW,QACf,4BAACC,IAAA,EAAgB,MAAM4K,IAAQ,EAAA,CACjC;AAAA,QACA,gBAAA7K,EAAC,UAAK,cAAW,UACf,4BAACC,IAAA,EAAgB,MAAM6K,IAAU,EAAA,CACnC;AAAA,QACA,gBAAA9K,EAAC,QAAA,EAAK,cAAW,WAAU,WAAU,gBACnC,UAAA,gBAAAA,EAACC,IAAA,EAAgB,MAAM8K,GAAA,CAAe,EAAA,CACxC;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACA,gBAAAlL,EAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,QAAAkE,KAAAwE,KAAA,gBAAAA,EAAc,cAAd,gBAAAxE,GAAyB,oBACxB,gBAAA/D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,OAAO,EAAE,aAAa,OAAO,UAAU,EAAA;AAAA,UAEvC,UAAA,gBAAAA,EAACG,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,OAAA,GAC3C,UAAAoI,EAAa,UAAU,gBAAgB,gBAAA,CAC1C;AAAA,QAAA;AAAA,MAAA;AAAA,OAGHA,KAAA,gBAAAA,EAAc,oBACb,gBAAA1I,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,QAAA,gBAAAG,EAACC,IAAA,EAAgB,MAAM+K,GAAA,CAAe;AAAA,QACtC,gBAAAhL,EAAC,QAAA,EAAK,WAAU,oBAAmB,UAAA,cAAA,CAAW;AAAA,MAAA,GAChD;AAAA,OAEA,MAAM;AACN,cAAMiL,IAAkB,MAAM,QAAQ1C,KAAA,gBAAAA,EAAc,OAAO,IACvDA,EAAa,UACb,CAAA;AAEJ,eAAK0C,EAAgB,SAGnB,gBAAAjL;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,SAAS,QAAQ,KAAK,QAAQ,cAAc,MAAA;AAAA,YAEpD,UAAAiL,EAAgB,IAAI,CAACC,GAAQxD,OAAU;;AACtC,oBAAMyD,KAAcD,EAAO,WAAWA,EAAO,OAAO,IAC9CE,KAAkBF,EAAO,QAAQ;AAEvC,qBACE,gBAAAlL;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAU;AAAA,kBACV,MAAK;AAAA,kBACL,cAAYkL,EAAO;AAAA,kBACnB,OAAO;AAAA,oBACL,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,kBAAA;AAAA,kBAGjB,UAAAC,KACC,gBAAAnL;AAAA,oBAACF;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,gBAAgB;AAAA,wBAChB,OAAO;AAAA,wBACP,QAAQ;AAAA,sBAAA;AAAA,sBAEV,yBAAyB,EAAE,QAAQqL,GAAA;AAAA,oBAAY;AAAA,kBAAA,IAE/CC,KACF,gBAAApL,EAACqL,IAAA,EAAiB,UAAUD,IAAiB,IAE7C,gBAAApL,EAACG,GAAA,EAAW,SAAQ,WACjB,YAAA4D,KAAAmH,EAAO,SAAP,gBAAAnH,GAAa,OAAO,OAAM,IAAA,CAC7B;AAAA,gBAAA;AAAA,gBA3BG2D;AAAA,cAAA;AAAA,YA+BX,CAAC;AAAA,UAAA;AAAA,QAAA,IA5C+B;AAAA,MA+CtC,GAAA;AAAA,IAAG,GACL;AAAA,IACA,gBAAA1H;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAG;AAAA,QACH,KAAKgI,MAAgB,qBAAqBa,IAAkB;AAAA,QAC5D,OAAO;AAAA,UACL,QACEb,MAAgB,sBAAsB9G,KAClC,wCACA;AAAA,UACN,iBACE8G,MAAgB,sBAAsB9G,KAClC,uBACA;AAAA,UACN,WAAW;AAAA,UACX,WAAW;AAAA,UACX,WAAW;AAAA,UACX,SAAS;AAAA,UACT,WAAW8G,MAAgB,aAAa,KAAK;AAAA,UAC7C,YAAYA,MAAgB,aAAa,IAAI;AAAA,QAAA;AAAA,QAG9C,gBAAgB,qBACf,gBAAAnI;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,GAAG;AAAA,cACH,OAAO;AAAA,cACP,SAAS;AAAA,cACT,eAAe;AAAA,cACf,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,QAAQ;AAAA,YAAA;AAAA,YAGV,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,IAAI,GAAG,YAAY,QAAQ,OAAO,oBAAA;AAAA,kBACzC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAN,EAACyL,IAAA,EAAY,WAAS,IAAC,IAAI,EAAE,UAAU,OAAO,IAAI,EAAA,GAChD,UAAA;AAAA,gBAAA,gBAAAtL;AAAA,kBAACuL;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,IAAI,EAAE,OAAO,oBAAA;AAAA,oBACd,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA1L;AAAA,kBAAC2L;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,IAAG;AAAA,oBACH,QAAOrD,KAAA,gBAAAA,EAAc,SAAQ;AAAA,oBAC7B,OAAM;AAAA,oBACN,UAAUC;AAAA,oBACV,IAAI;AAAA,sBACF,OAAO;AAAA,sBACP,iBAAiB;AAAA,sBACjB,sCAAsC;AAAA,wBACpC,aAAa;AAAA,sBAAA;AAAA,sBAEf,4CAA4C;AAAA,wBAC1C,aAAa;AAAA,sBAAA;AAAA,sBAEf,sBAAsB;AAAA,wBACpB,OAAO;AAAA,sBAAA;AAAA,oBACT;AAAA,oBAEF,WAAW;AAAA,sBACT,YAAY;AAAA,wBACV,OAAO;AAAA,0BACL,WAAW;AAAA,wBAAA;AAAA,wBAEb,IAAI;AAAA,0BACF,iBAAiB;AAAA,0BACjB,OAAO;AAAA,wBAAA;AAAA,sBACT;AAAA,oBACF;AAAA,oBAGD,UAAA;AAAA,sBAAAF,KAAA,gBAAAA,EAAU,IAAI,CAACuD,MACd,gBAAAzL;AAAA,wBAAC0L;AAAA,wBAAA;AAAA,0BAEC,OAAOD,EAAK;AAAA,0BACZ,IAAI;AAAA,4BACF,OAAO;AAAA,4BACP,WAAW,EAAE,iBAAiB,qBAAA;AAAA,0BAAqB;AAAA,0BAGpD,UAAAA,EAAK;AAAA,wBAAA;AAAA,wBAPDA,EAAK;AAAA,sBAAA;AAAA,uBAUbvD,KAAA,gBAAAA,EAAU,YAAW,KACpB,gBAAAlI,EAAC0L,IAAA,EAAS,UAAQ,IAAC,IAAI,EAAE,OAAO,oBAAA,GAAuB,UAAA,qBAAA,CAEvD;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAEJ,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAEA1D,MAAgB,qCAEf,UAAAM,KAAmBA,EAAgB,SAAS,IAC3C,gBAAAtI;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,OAAOkH,EAAgB,IAAI,CAACjH,MAAMA,EAAE,UAAU;AAAA,YAC9C,UAAUC;AAAA,YAEV,UAAA,gBAAAtB,EAACuB,MAAK,WAAS,IAAC,SAAS,GAAG,IAAI,EAAE,OAAO,QAAQ,GAAG,KACjD,YAAgB,IAAI,CAACP,MAAY8I,GAAkB9I,CAAO,CAAC,EAAA,CAC9D;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAAhB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,IAAI,EAAE,IAAI,GAAG,WAAW,UAAU,OAAO,oBAAA;AAAA,YAExC,eACG,iDACA;AAAA,UAAA;AAAA,QAAA,EACN,CAEJ,IAEA,gBAAAH,EAAA2L,IAAA,EACG,UAAAhD,KACC,gBAAA9I,EAACC,KAAI,IAAI,EAAE,OAAO,OAAA,GAChB,UAAA;AAAA,UAAA,gBAAAD;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,gBAAgB;AAAA,gBAChB,YAAY;AAAA,gBACZ,IAAI;AAAA,cAAA;AAAA,cAGN,UAAA;AAAA,gBAAA,gBAAAD,EAACM,KAAW,SAAQ,aAAY,IAAI,EAAE,YAAY,UAAU,UAAA;AAAA,kBAAA;AAAA,kBAClDwI,GAAW;AAAA,gBAAA,GACrB;AAAA,gBACA,gBAAA3I;AAAA,kBAACF;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,MAAK;AAAA,oBACL,SAAS,MAAM8C,GAAgB,IAAI;AAAA,oBACnC,IAAI;AAAA,sBACF,QAAQ;AAAA,sBACR,cAAc;AAAA,sBACd,iBAAiB;AAAA,sBACjB,OAAO;AAAA,sBACP,UAAU;AAAA,sBACV,IAAI;AAAA,sBACJ,IAAI;AAAA,sBACJ,QAAQ;AAAA,oBAAA;AAAA,oBAEX,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA;AAAA,UAAA;AAAA,UAEF,gBAAA5C;AAAA,YAACyC;AAAA,YAAA;AAAA,cACC,MAAMkG;AAAA,cACN,oBAAAjJ;AAAA,cACA,YAAAgB;AAAA,cACA,cAAAgC;AAAA,cACA,cAAAC;AAAA,cACA,iBAAAC;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF,IAEA,gBAAA/C,EAAA8L,IAAA,EACG,UAAA;AAAA,UAAA9D,EAAiB,IAAI,CAAC+D,GAAWlE,MAChC,gBAAA1H;AAAA,YAACyH;AAAA,YAAA;AAAA,cAEC,MAAMmE;AAAA,cACN,OAAAlE;AAAA,cACA,oBAAAhI;AAAA,cACA,YAAAgB;AAAA,cACA,cAAAgC;AAAA,cACA,cAAAC;AAAA,cACA,iBAAAC;AAAA,YAAA;AAAA,YAPKgJ,EAAU;AAAA,UAAA,CASlB;AAAA,UAEA/D,EAAiB,WAAW,KAC3B,gBAAA7H;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,OAAM;AAAA,cACN,IAAI,EAAE,IAAI,GAAG,WAAW,SAAA;AAAA,cACzB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAGD,EAAA,CAEJ,EAAA,CAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAGHqJ,GAAa,aAAaA,GAAa,8BACrC,OAAA,EAAI,eAAe,CAACzJ,MAAMA,EAAE,gBAAA,GAC3B,UAAA,gBAAAC,EAAC6L,IAAA,EAAW,WAAW9B,IACrB,UAAA,gBAAA/J;AAAA,MAAC8L;AAAA,MAAA;AAAA,QACC,WAAWtC,GAAa;AAAA,QACxB,UAAUA,GAAa;AAAA,QACvB,SAASK;AAAA,QACT,YAAAnJ;AAAA,QACA,oBAAoBkK;AAAA,MAAA;AAAA,IAAA,GAExB,EAAA,CACF;AAAA,IAEF,gBAAA/K,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA;AAAA,MAAA,gBAAAG,EAAC,OAAA,EAAI,WAAU,cACZ,UAAAmJ,GAAgB,IAAI,CAACC,MAAA;;AACpB,+BAAApJ,EAACwD,IAAA,EAAsB,OAAO4F,EAAK,OAAO,WAAU,UAAS,OAAK,IAChE,UAAA,gBAAApJ;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,WAAW,eAAegI,MAAgBoB,EAAK,KAAK,cAAc,EAAE;AAAA,YACpE,MAAK;AAAA,YACL,cAAYA,EAAK;AAAA,YACjB,SAAS,MAAMnB,EAAgBmB,EAAK,EAAE;AAAA,YAErC,UAAAA,EAAK,WACJ,gBAAApJ,EAACqL,IAAA,EAAiB,UAAUjC,EAAK,SAAA,CAAU,IACzCA,EAAK,OACP,gBAAApJ,EAAC,OAAA,EAAI,KAAKoJ,EAAK,MAAM,KAAKA,EAAK,IAAA,CAAK,IAEpC,gBAAApJ,EAACG,GAAA,EAAW,SAAQ,WACjB,WAAA4D,IAAAqF,EAAK,UAAL,gBAAArF,EAAY,OAAO,GAAC,CACvB;AAAA,UAAA;AAAA,UAbGqF,EAAK;AAAA,QAAA,EAeZ,GAjBYA,EAAK,EAkBnB;AAAA,OACD,GACH;AAAA,MACA,gBAAApJ,EAAC,OAAA,EAAI,WAAU,oBAAA,CAAoB;AAAA,IAAA,EAAA,CACrC;AAAA,EAAA,GACF;AAEJ;AAEA2H,GAAc,YAAY;AAAA,EACxB,WAAWvH,EAAU,IAAI;AAAA,EACzB,kBAAkBA,EAAU;AAAA,EAC5B,gBAAgBA,EAAU;AAAA,EAC1B,oBAAoBA,EAAU;AAAA,EAC9B,iBAAiBA,EAAU;AAAA,EAC3B,aAAaA,EAAU;AAAA,EACvB,iBAAiBA,EAAU;AAAA,EAC3B,UAAUA,EAAU;AAAA,EACpB,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAAA,EACxB,YAAYA,EAAU;AAAA,EACtB,4BAA4BA,EAAU;AAAA,EACtC,iBAAiBA,EAAU;AAAA,EAC3B,cAAcA,EAAU;AAAA,EACxB,wBAAwBA,EAAU;AAAA,EAClC,cAAcA,EAAU;AAAA,EACxB,cAAcA,EAAU;AAAA,EACxB,iBAAiBA,EAAU;AAC7B;AACA,MAAMuB,KAAoB,CAACoK,MAAS;AAClC,QAAMC,IAAQD,EAAK,MAAM,GAAG;AAE5B,SAAOC,EAAM,IAAI,CAACC,GAAMvE,MACtB,gBAAA7H,EAACL,GAAM,UAAN,EACE,UAAA;AAAA,IAAAyM;AAAA,IACAvE,IAAQsE,EAAM,SAAS,uBAAM,MAAA,CAAA,CAAG;AAAA,EAAA,EAAA,GAFdtE,CAGrB,CACD;AACH,GACMhG,KAAoB,CAACQ,GAAUxB,MAAe;AAClD,MAAIyB,IAAa;AAYjB,MAVI,OAAOD,KAAa,YAAYA,MAAa,OAC3CA,EAAS,SAAS,SAAS,OAAOA,EAAS,WAAY,WACzDC,IAAaD,EAAS,UACb,OAAOA,EAAS,OAAQ,aACjCC,IAAaD,EAAS,OAEf,OAAOA,KAAa,aAC7BC,IAAaD,IAGX,OAAOC,KAAe,YAAYA,EAAW,SAAS,MAAM,GAAG;AACjE,UAAMC,IAAQD,EAAW,MAAM,qBAAqB;AACpD,IAAIC,MACFD,IAAaC,EAAM,CAAC;AAAA,EAExB;AACA,SAAID,IAEA,gBAAAnC;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAAE,EAACU,GAAA,EAAW,KAAKyB,EAAA,CAAY;AAAA,IAAA;AAAA,EAAA,IAMjC,gBAAAnC;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,cAAc;AAAA,MAAA;AAAA,MAEjB,UAAA;AAAA,IAAA;AAAA,EAAA;AAIL,GACMgM,KAAqB,CAAC;AAAA,EAC1B,WAAAI;AAAA,EACA,UAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAA1L;AAAA,EACA,oBAAAoB;AACF,MAAM;AACJ,MAAI,CAACoK,KAAa,CAACC,EAAU,QAAO;AAEpC,QAAME,IAAWH,EAAU,SAAS,CAAA,GAE9BI,IAAaH,EAAS,sBAAA;AAE5B,SACE,gBAAAtM;AAAA,IAAC0M;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,MACX,IAAI;AAAA,QACF,UAAU;AAAA,QACV,KAAKD,EAAW;AAAA,QAChB,MAAMA,EAAW,OAAOA,EAAW,QAAQ;AAAA,QAC3C,UAAU;AAAA,QACV,UAAU;AAAA,QACV,GAAG;AAAA,QACH,cAAc;AAAA,QACd,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA,gBAAAzM;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI;AAAA,oBACF,OAAO;AAAA,oBACP,YAAY;AAAA,oBACZ,UAAU;AAAA,kBAAA;AAAA,kBAGX,UAAA+L,EAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEb,gBAAAlM;AAAA,gBAACyD;AAAA,gBAAA;AAAA,kBACC,SAAS2I;AAAA,kBACT,MAAK;AAAA,kBACL,IAAI,EAAE,OAAO,qBAAqB,GAAG,IAAA;AAAA,kBAErC,UAAA,gBAAApM,EAACC,IAAA,EAAgB,MAAMuM,GAAA,CAAS;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClC;AAAA,UAAA;AAAA,QAAA;AAAA,0BAEDC,IAAA,EAAQ;AAAA,QAERJ,EAAS,SAAS,IACjB,gBAAArM;AAAA,UAACoB;AAAA,UAAA;AAAA,YACC,OAAOiL,EAAS,IAAI,CAAChL,MAAMA,EAAE,QAAQA,EAAE,UAAU;AAAA,YACjD,UAAUC;AAAA,YAEV,UAAA,gBAAAtB,EAACuB,MAAK,WAAS,IAAC,SAAS,GACtB,UAAA8K,EAAS,IAAI,CAACrL,MACb,gBAAAhB;AAAA,cAAC6B;AAAA,cAAA;AAAA,gBAEC,SAAAb;AAAA,gBACA,YAAAN;AAAA,gBACA,oBAAAoB;AAAA,cAAA;AAAA,cAHKd,EAAQ,QAAQA,EAAQ;AAAA,YAAA,CAKhC,EAAA,CACH;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAAhB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,IAAI,EAAE,WAAW,UAAU,GAAG,EAAA;AAAA,YAC/B,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,IAAA;AAAA,EAAA;AAIR;AACA2L,GAAmB,YAAY;AAAA,EAC7B,WAAW1L,EAAU;AAAA,EACrB,UAAUA,EAAU;AAAA,EACpB,SAASA,EAAU;AAAA,EACnB,YAAYA,EAAU;AAAA,EACtB,oBAAoBA,EAAU;AAChC;ACz+DA,MAAMsM,KAAe,CAAC;AAAA,EACpB,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,WAAAC,IAAY,CAAA;AACd,MAAM;AACJ,QAAM,EAAE,YAAAC,IAAa,IAAI,UAAAC,IAAW,IAAI,YAAAC,IAAa,OAAOP,GAEtDQ,IAAe,CAACC,GAAOC,MAAU;AACrC,IAAAT,EAAS,EAAE,GAAGD,GAAW,CAACS,CAAK,GAAGC,GAAO;AAAA,EAC3C;AAEA,SACE,gBAAAxN;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,GAAG;AAAA,QACH,UAAU;AAAA,QACV,iBAAiB;AAAA,MAAA;AAAA,MAGnB,UAAA;AAAA,QAAA,gBAAAD,EAACyL,IAAA,EAAY,MAAK,SAAQ,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA,GACjD,UAAA;AAAA,UAAA,gBAAAtL,EAACuL,MAAW,UAAA,cAAA,CAAW;AAAA,UACvB,gBAAAvL;AAAA,YAACwL;AAAA,YAAA;AAAA,cACC,OAAOwB;AAAA,cACP,OAAM;AAAA,cACN,UAAU,CAACjN,MAAMoN,EAAa,cAAcpN,EAAE,OAAO,KAAK;AAAA,cAC1D,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,IAAA,IAAM;AAAA,cAEpD,UAAAuN,GAAuB,IAAI,CAACC,MAC3B,gBAAAvN,EAAC0L,MAAsB,OAAO6B,GAC3B,UAAAA,EAAA,GADYA,CAEf,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,QAEA,gBAAA1N,EAACyL,IAAA,EAAY,MAAK,SAAQ,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA,GACjD,UAAA;AAAA,UAAA,gBAAAtL,EAACuL,MAAW,UAAA,WAAA,CAAQ;AAAA,UACpB,gBAAAvL;AAAA,YAACwL;AAAA,YAAA;AAAA,cACC,OAAOyB;AAAA,cACP,OAAM;AAAA,cACN,UAAU,CAAClN,MAAMoN,EAAa,YAAYpN,EAAE,OAAO,KAAK;AAAA,cACxD,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,IAAA,IAAM;AAAA,cAEpD,iBAAO,QAAQyN,EAAqB,EAAE,IAAI,CAAC,CAACC,GAAKC,CAAK,wBACpDhC,IAAA,EAAmB,OAAO+B,GACxB,UAAAC,EAAA,GADYD,CAEf,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,QAECT,MAAe,sBACd,gBAAAhN;AAAA,UAAC2N;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASb,EAAmB,IAAI,CAACc,OAAU;AAAA,cACzC,OAAOA,EAAK,iBAAiBA,EAAK,kBAAkBA,EAAK;AAAA,cACzD,OAAOA,EAAK,eAAeA,EAAK,gBAAgBA,EAAK,QAAQA,EAAK;AAAA,YAAA,EAClE;AAAA,YACF,gBAAgB,CAACC,MAAWA,EAAO,SAAS;AAAA,YAC5C,OACEf,EACG,IAAI,CAACc,OAAU;AAAA,cACd,OAAOA,EAAK,iBAAiBA,EAAK,kBAAkBA,EAAK;AAAA,cACzD,OAAOA,EAAK,eAAeA,EAAK,gBAAgBA,EAAK,QAAQA,EAAK;AAAA,YAAA,EAClE,EACD,KAAK,CAACE,MAAQA,EAAI,UAAUZ,CAAU,KAAK;AAAA,YAEhD,UAAU,CAAClD,GAAO+D,MAAaZ,EAAa,cAAcY,IAAWA,EAAS,QAAQ,EAAE;AAAA,YACxF,sBAAsB,CAACF,GAAQR,MAAUQ,EAAO,UAAUR,EAAM;AAAA,YAChE,aAAa,CAACW,MACZ,gBAAAhO,EAACiO,MAAW,GAAGD,GAAQ,OAAM,eAAc;AAAA,YAE7C,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA;AAAA,UAAI;AAAA,QAAA,IAE7BhB,MAAe,WACjB,gBAAAhN;AAAA,UAAC2N;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS;AAAA,cACP,EAAE,OAAO,QAAQ,OAAO,IAAA;AAAA,cACxB,EAAE,OAAO,UAAU,OAAO,IAAA;AAAA,YAAI;AAAA,YAEhC,gBAAgB,CAACE,MAAWA,EAAO,SAAS;AAAA,YAC5C,OACE;AAAA,cACE,EAAE,OAAO,QAAQ,OAAO,IAAA;AAAA,cACxB,EAAE,OAAO,UAAU,OAAO,IAAA;AAAA,YAAI,EAC9B,KAAK,CAACC,MAAQA,EAAI,UAAUZ,CAAU,KAAK;AAAA,YAE/C,UAAU,CAAClD,GAAO+D,MAAaZ,EAAa,cAAcY,IAAWA,EAAS,QAAQ,EAAE;AAAA,YACxF,sBAAsB,CAACF,GAAQR,MAAUQ,EAAO,UAAUR,EAAM;AAAA,YAChE,aAAa,CAACW,MACZ,gBAAAhO,EAACiO,MAAW,GAAGD,GAAQ,OAAM,eAAc;AAAA,YAE7C,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA;AAAA,UAAI;AAAA,QAAA,IAE7BhB,MAAe,aACjB,gBAAAhN;AAAA,UAAC2N;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,SAASZ,EAAU,IAAI,CAAAmB,MAAKA,EAAE,IAAI;AAAA,YAClC,OAAOhB,KAAc;AAAA,YACrB,UAAU,CAAClD,GAAO+D,MAAaZ,EAAa,cAAcY,KAAY,EAAE;AAAA,YACxE,aAAa,CAACC,MACZ,gBAAAhO,EAACiO,MAAW,GAAGD,GAAQ,OAAM,eAAc;AAAA,YAE7C,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA;AAAA,UAAI;AAAA,QAAA,IAG/B,gBAAAhO;AAAA,UAACiO;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,OAAOf;AAAA,YACP,UAAU,CAACnN,MAAMoN,EAAa,cAAcpN,EAAE,OAAO,KAAK;AAAA,YAC1D,IAAI,EAAE,MAAM,GAAG,UAAU,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,QAIjC,gBAAAC;AAAA,UAACyD;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,MAAK;AAAA,YACL,SAASoJ;AAAA,YACT,IAAI,EAAE,IAAI,OAAA;AAAA,YAEV,UAAA,gBAAA7M,EAACC,IAAA,EAAgB,MAAMkO,GAAA,CAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MAClC;AAAA,IAAA;AAAA,EAAA;AAGN;AAEAzB,GAAa,YAAY;AAAA,EACvB,WAAWtM,EAAU,OAAO;AAAA,EAC5B,UAAUA,EAAU,KAAK;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,oBAAoBA,EAAU;AAAA,EAC9B,WAAWA,EAAU;AACvB;AAEA,MAAMgO,KAAiB,CAAC;AAAA,EACtB,OAAAC;AAAA,EACA,UAAAzB;AAAA,EACA,UAAAC;AAAA,EACA,QAAAyB;AAAA,EACA,oBAAAxB;AAAA,EACA,WAAAC;AACF,MAAM;AACJ,QAAM,EAAE,MAAAwB,IAAO,OAAO,SAAAC,IAAU,CAAA,MAAOH,EAAM,cAAc,CAAA,GAErDI,IAAqB,MAAM;AAC/B,UAAMC,IAAa;AAAA,MACjB,GAAGF;AAAA,MACH,EAAE,YAAY,IAAI,UAAU,IAAI,YAAY,GAAA;AAAA,IAAG;AAEjD,IAAA5B,EAAS,EAAE,YAAY,EAAE,MAAA2B,GAAM,SAASG,EAAA,GAAc;AAAA,EACxD,GAEMC,IAAiB,CAACC,MAAY;AAClC,UAAMF,IAAa;AAAA,MACjB,GAAGF;AAAA,MACH,EAAE,YAAY,EAAE,MAAMI,GAAS,SAAS,CAAA,IAAG;AAAA,IAAE;AAE/C,IAAAhC,EAAS,EAAE,YAAY,EAAE,MAAA2B,GAAM,SAASG,EAAA,GAAc;AAAA,EACxD,GAEMG,IAAmB,MAAM;AAC7B,IAAAjC,EAAS,EAAE,YAAY,EAAE,MAAM2B,MAAS,QAAQ,OAAO,OAAO,SAAAC,EAAA,GAAW;AAAA,EAC3E,GAEMM,KAAqB,CAACpH,GAAOqH,MAAkB;AACnD,UAAML,IAAa,CAAC,GAAGF,CAAO;AAC9B,IAAAE,EAAWhH,CAAK,IAAIqH,GACpBnC,EAAS,EAAE,YAAY,EAAE,MAAA2B,GAAM,SAASG,EAAA,GAAc;AAAA,EACxD,GAEMM,IAAqB,CAACtH,MAAU;AACpC,UAAMgH,IAAa,CAAC,GAAGF,CAAO;AAC9B,IAAAE,EAAW,OAAOhH,GAAO,CAAC,GAC1BkF,EAAS,EAAE,YAAY,EAAE,MAAA2B,GAAM,SAASG,EAAA,GAAc;AAAA,EACxD;AAEA,SACE,gBAAA7O;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,iBAAiB;AAAA,QACjB,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAE,EAACiP,MAAK,OAAOV,GAAM,OAAM,WAAU,MAAK,SAAQ;AAAA,cAChD,gBAAA1O,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,YAAY,SAAA,GAC9C,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,WAAW,gBAAAlP,EAACC,IAAA,EAAgB,MAAMkP,GAAA,CAAQ;AAAA,oBAC1C,SAASV;AAAA,oBACV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAAzO;AAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,WAAW,gBAAAlP,EAACC,IAAA,EAAgB,MAAMkP,GAAA,CAAQ;AAAA,oBAC1C,SAAS,MAAMR,EAAe,KAAK;AAAA,oBACpC,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA3O;AAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAQ;AAAA,oBACR,WAAW,gBAAAlP,EAACC,IAAA,EAAgB,MAAMkP,GAAA,CAAQ;AAAA,oBAC1C,SAAS,MAAMR,EAAe,IAAI;AAAA,oBACnC,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA3O;AAAA,kBAACyM;AAAA,kBAAA;AAAA,oBACC,aAAY;AAAA,oBACZ,SAAQ;AAAA,oBACR,UAAQ;AAAA,oBACR,IAAI,EAAE,IAAI,KAAK,QAAQ,QAAQ,WAAW,SAAA;AAAA,kBAAS;AAAA,gBAAA;AAAA,gBAErD,gBAAAzM,EAACyD,IAAA,EAAW,OAAM,WAAU,MAAK,SAAQ,SAASoL,GAChD,UAAA,gBAAA7O,EAACC,IAAA,EAAgB,MAAMmP,GAAA,CAAU,GACnC;AAAA,gBACC,CAACd,KACA,gBAAAtO,EAACyD,IAAA,EAAW,OAAM,SAAQ,MAAK,SAAQ,SAASoJ,GAC9C,UAAA,gBAAA7M,EAACC,IAAA,EAAgB,MAAMkO,IAAS,EAAA,CAClC;AAAA,cAAA,EAAA,CAEJ;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAGDK,EAAQ,IAAI,CAACX,GAAQnG,MACpB,gBAAA1H,EAACF,GAAA,EAAgB,IAAI,EAAE,IAAI,GAAG,UAAU,WAAA,GACrC,YAAO,aACN,gBAAAE;AAAA,UAACoO;AAAA,UAAA;AAAA,YACC,OAAOP;AAAA,YACP,UAAU,CAACwB,MACTP,GAAmBpH,GAAO2H,CAAY;AAAA,YAExC,UAAU,MAAML,EAAmBtH,CAAK;AAAA,YACxC,QAAQ;AAAA,YACR,oBAAAoF;AAAA,YACA,WAAAC;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAA/M;AAAA,UAAC0M;AAAA,UAAA;AAAA,YACC,WAAWmB;AAAA,YACX,UAAU,CAACyB,MACTR,GAAmBpH,GAAO4H,CAAgB;AAAA,YAE5C,UAAU,MAAMN,EAAmBtH,CAAK;AAAA,YACxC,oBAAAoF;AAAA,YACA,WAAAC;AAAA,UAAA;AAAA,QAAA,EACF,GArBMrF,CAuBV,CACD;AAAA,QAEA8G,EAAQ,WAAW,KAClB,gBAAAxO,EAACG,KAAW,SAAQ,SAAQ,OAAM,iBAAgB,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,+BAAA,CAEjE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIR;AAEAiO,GAAe,YAAY;AAAA,EACzB,OAAOhO,EAAU,OAAO;AAAA,EACxB,UAAUA,EAAU,KAAK;AAAA,EACzB,UAAUA,EAAU;AAAA,EACpB,QAAQA,EAAU;AAAA,EAClB,oBAAoBA,EAAU;AAAA,EAC9B,WAAWA,EAAU;AACvB;AAEA,MAAMmP,KAA4B,CAAC;AAAA,EACjC,OAAAlC;AAAA,EACA,UAAAT;AAAA,EACA,oBAAAE,IAAqB,CAAA;AAAA,EACrB,WAAAC,IAAY,CAAA;AACd,MAAM;AACJ,QAAMyC,IAAgBnC,KAASA,EAAM,YAE/BoC,IAAmB,CAAClB,MAAS;AACjC,IAAA3B,EAAS,EAAE,YAAY,EAAE,MAAA2B,GAAM,SAAS,CAAA,EAAC,GAAK;AAAA,EAChD,GAEMmB,IAAc,MAAM;AACxB,IAAA9C,EAAS,IAAI;AAAA,EACf;AAEA,SAAK4C,sBAoDF1P,GAAA,EACC,UAAA;AAAA,IAAA,gBAAAD;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,IAAI;AAAA,UACF,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,IAAI;AAAA,QAAA;AAAA,QAGN,UAAA;AAAA,UAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAQ,YAAW,QAAO,UAAA,yBAE9C;AAAA,UACA,gBAAAH,EAACkP,MAAO,MAAK,SAAQ,OAAM,SAAQ,SAASQ,GAAa,UAAA,YAAA,CAEzD;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAA1P;AAAA,MAACoO;AAAA,MAAA;AAAA,QACC,OAAOf;AAAA,QACP,UAAAT;AAAA,QACA,QAAQ;AAAA,QACR,oBAAAE;AAAA,QACA,WAAAC;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF,IAzEE,gBAAAlN;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,GAAG;AAAA,QACH,cAAc;AAAA,QACd,QAAQ,CAAC6P,MAAU,cAAcA,EAAM,QAAQ,QAAQ,IAAI;AAAA,QAC3D,iBAAiB,CAACA,MAAU,GAAGA,EAAM,QAAQ,QAAQ,IAAI;AAAA,MAAA;AAAA,MAG3D,UAAA;AAAA,QAAA,gBAAA9P,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,GAAG,IAAI,IAAA,GAC5D,UAAA;AAAA,UAAA,gBAAAE,EAACC,MAAgB,MAAM2P,IAAc,OAAO,EAAE,SAAS,OAAO;AAAA,UAC9D,gBAAA5P;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,YAAY;AAAA,cACZ,OAAM;AAAA,cACN,IAAI,EAAE,eAAe,aAAa,eAAe,SAAA;AAAA,cAClD,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,GACF;AAAA,QACA,gBAAAN;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,KAAK;AAAA,cACL,UAAU;AAAA,cACV,YAAY;AAAA,YAAA;AAAA,YAGd,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACkP;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAW,gBAAAlP,EAACC,IAAA,EAAgB,MAAM4P,GAAA,CAAc;AAAA,kBAChD,SAAS,MAAMJ,EAAiB,KAAK;AAAA,kBACtC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAzP;AAAA,gBAACkP;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,WAAW,gBAAAlP,EAACC,IAAA,EAAgB,MAAM4P,GAAA,CAAc;AAAA,kBAChD,SAAS,MAAMJ,EAAiB,IAAI;AAAA,kBACrC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AA+BR;AAEAF,GAA0B,YAAY;AAAA,EACpC,OAAOnP,EAAU;AAAA,EACjB,UAAUA,EAAU,KAAK;AAAA,EACzB,oBAAoBA,EAAU;AAAA,EAC9B,WAAWA,EAAU;AACvB;AClZA,MAAM0P,KAAa;AAAA,EACjB,UAAU;AAAA,EACV,KAAK;AAAA,EACL,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AAAA,EACP,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,cAAc;AAAA,EACd,GAAG;AACL,GAEMC,KAAiB,GAEjBC,KAAkB,CAAC,EAAE,QAAAC,EAAA,MACzB,gBAAApQ;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,OAAM;AAAA,IACN,QAAAoQ;AAAA,IACA,SAAQ;AAAA,IACR,OAAM;AAAA,IACN,OAAO,EAAE,SAAS,QAAA;AAAA,IAElB,UAAA;AAAA,MAAA,gBAAAjQ,EAAC,QAAA,EAAK,OAAM,OAAM,QAAO,OAAM,IAAG,KAAI,MAAK,UAAA,CAAU;AAAA,MACrD,gBAAAA,EAAC,QAAA,EAAK,GAAE,MAAK,GAAE,MAAK,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,MAAK,WAAU;AAAA,MACjE,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,UAAA,CAAU;AAAA,MAC7C,gBAAAA,EAAC,WAAA,EAAQ,QAAO,iCAAgC,MAAK,WAAU;AAAA,MAC/D,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,GAAE;AAAA,UACF,GAAE;AAAA,UACF,YAAW;AAAA,UACX,UAAS;AAAA,UACT,MAAK;AAAA,UACL,YAAW;AAAA,UACZ,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED;AAAA,EAAA;AACF;AAGFgQ,GAAgB,YAAY;AAAA,EAC1B,QAAQ5P,EAAU;AACpB;AAEO,MAAM8P,KAAiB,CAAC,EAAE,KAAAC,GAAK,QAAAF,IAAS,cAAc;AAC3D,QAAMG,KAAOD,KAAA,gBAAAA,EAAK,SAAQ,IACpBrR,KAAKqR,KAAA,gBAAAA,EAAK,OAAM,MAEhB,EAAE,MAAAE,GAAM,QAAAC,EAAA,IAAWC,GAAS;AAAA,IAChC,UAAU,CAAC,YAAYzR,KAAMsR,CAAI;AAAA,IACjC,SAAS,MACHtR,IACK0R,GAAY1R,CAAE,EAAE,KAAK,CAAC2R,MAAQA,EAAI,IAAI,IAExCC,GAAwB,cAAcN,CAAI,EAAE,KAAK,CAACK,MAAQA,EAAI,IAAI;AAAA,IAE3E,WAAW,MAAO,KAAK;AAAA,IACvB,WAAW,MAAO,KAAK;AAAA,IACvB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,OAAO;AAAA,IACP,SAAS,CAAC,CAACL;AAAA,EAAA,CACZ,GAEKO,IAAWC,GAAQ,MAAM;AAC7B,QAAI,CAACP,KAAQ,EAAEA,aAAgB,MAAO,QAAO;AAC7C,UAAMQ,IAAU,IAAI,gBAAgBR,CAAI;AACxC,QAAIS,IAAWT,EAAK;AACpB,YAAI,CAACS,KAAYA,MAAa,gCAC5BA,IAAW,eAEN,EAAE,SAAAD,GAAS,MAAMC,EAAA;AAAA,EAC1B,GAAG,CAACT,CAAI,CAAC;AAET,SAAKD,IAEDE,MAAW,YAEX,gBAAAtQ;AAAA,IAACG;AAAA,IAAA;AAAA,MACC,OAAM;AAAA,MACN,IAAI;AAAA,QACF,QAAA8P;AAAA,QACA,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO;AAAA,MAAA;AAAA,MAEV,UAAA;AAAA,IAAA;AAAA,EAAA,IAMAU,IAGH,gBAAA3Q;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK2Q,EAAS;AAAA,MACd,KAAI;AAAA,MACJ,OAAO;AAAA,QACL,QAAAV;AAAA,QACA,OAAO;AAAA,QACP,WAAW;AAAA,QACX,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,EAAA,IAXkB,gBAAAjQ,EAACgQ,MAAgB,QAAAC,EAAA,CAAgB,IArBrC,gBAAAjQ,EAACgQ,MAAgB,QAAAC,EAAA,CAAgB;AAmCrD;AAEAC,GAAe,YAAY;AAAA,EACzB,KAAK9P,EAAU,MAAM;AAAA,IACnB,MAAMA,EAAU;AAAA,IAChB,MAAMA,EAAU;AAAA,EAAA,CACjB;AAAA,EACD,QAAQA,EAAU;AACpB;AAKO,MAAM2Q,KAAyB,CAAC,EAAE,MAAAC,GAAM,SAAA5E,GAAS,KAAA+D,QAAU;AAChE,QAAMC,KAAOD,KAAA,gBAAAA,EAAK,SAAQ,IACpBrR,KAAKqR,KAAA,gBAAAA,EAAK,OAAM,MAEhB,EAAE,MAAAE,GAAM,QAAAC,EAAA,IAAWC,GAAS;AAAA,IAChC,UAAU,CAAC,YAAYzR,KAAMsR,CAAI;AAAA,IACjC,SAAS,MACHtR,IACK0R,GAAY1R,CAAE,EAAE,KAAK,CAAC2R,MAAQA,EAAI,IAAI,IAExCC,GAAwB,cAAcN,CAAI,EAAE,KAAK,CAACK,MAAQA,EAAI,IAAI;AAAA,IAE3E,WAAW,MAAO,KAAK;AAAA,IACvB,WAAW,MAAO,KAAK;AAAA,IACvB,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,OAAO;AAAA,IACP,SAASO,KAAQ,CAAC,EAAElS,KAAMsR;AAAA,EAAA,CAC3B,GAEKO,IAAWC,GAAQ,MAAM;AAC7B,QAAI,CAACP,KAAQ,EAAEA,aAAgB,MAAO,QAAO;AAC7C,UAAMQ,IAAU,IAAI,gBAAgBR,CAAI;AACxC,QAAIS,IAAWT,EAAK;AACpB,YAAI,CAACS,KAAYA,MAAa,gCAC5BA,IAAW,eAEN,EAAE,SAAAD,GAAS,MAAMC,EAAA;AAAA,EAC1B,GAAG,CAACT,CAAI,CAAC,GAEHY,IAAgB,MAChBX,MAAW,YAEX,gBAAAtQ;AAAA,IAACF;AAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA,gBAAAE,EAACG,KAAW,UAAA,aAAA,CAAU;AAAA,IAAA;AAAA,EAAA,IAIvBwQ,IAQH,gBAAA3Q;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK2Q,EAAS;AAAA,MACd,KAAI;AAAA,MACJ,OAAO,EAAE,OAAO,QAAQ,WAAW,QAAQ,WAAW,UAAA;AAAA,IAAU;AAAA,EAAA,sBAT/DxQ,GAAA,EAAW,OAAM,SAAQ,OAAM,UAAS,UAAA,wBAEzC;AAYN,SACE,gBAAAH,EAACkR,IAAA,EAAO,MAAAF,GAAY,SAAA5E,GAAkB,UAAS,MAAK,WAAS,IAC3D,UAAA,gBAAAvM,EAACsR,IAAA,EAAc,IAAI,EAAE,GAAG,KACtB,UAAA;AAAA,IAAA,gBAAAtR,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,iBAAiB,IAAI,GAAG,YAAY,SAAA,GAC9E,UAAA;AAAA,MAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,aAAY,IAAI,EAAE,YAAY,OAAA,GAC/C,WAAAgQ,KAAA,gBAAAA,EAAK,SAAQ,gBAAA,CAChB;AAAA,MACA,gBAAAnQ,EAACwD,IAAA,EAAQ,OAAM,SAAQ,OAAK,IAC1B,UAAA,gBAAAxD,EAACyD,IAAA,EAAW,MAAK,SAAQ,SAAS2I,GAAS,eAE3C,EAAA,CACF;AAAA,IAAA,GACF;AAAA,IACC6E,EAAA;AAAA,EAAc,EAAA,CACjB,EAAA,CACF;AAEJ;AAEAF,GAAuB,YAAY;AAAA,EACjC,MAAM3Q,EAAU;AAAA,EAChB,SAASA,EAAU;AAAA,EACnB,KAAKA,EAAU;AACjB;AAEA,MAAMgR,KAAoB,CAAC;AAAA,EACzB,MAAAJ;AAAA,EACA,SAAA5E;AAAA,EACA,sBAAAiF,IAAuB,CAAA;AAAA,EACvB,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC,IAAmB;AACrB,MAAM;AACJ,QAAM,CAACC,GAAcC,CAAe,IAAIhI,EAAS8H,KAAoB,EAAE,GACjE,CAACG,GAAaC,CAAc,IAAIlI,EAAS,EAAE,GAC3C,CAACmI,GAAMC,EAAO,IAAIpI,EAAS,CAAC,GAC5B,CAACqI,GAAYC,CAAa,IAAItI,EAAS,IAAI,GAC3CuI,IAAeC,GAAO,IAAI;AAEhC,EAAAC,GAAU,MAAM;AACd,QAAInB;AAIF,UAHAU,EAAgBF,KAAoB,EAAE,GACtCI,EAAe,EAAE,GAEbJ,KAAoBH,EAAqB,QAAQ;AACnD,cAAMe,IAAMf,EAAqB;AAAA,UAC/B,CAAClB,OAAQA,GAAI,SAASqB;AAAA,QAAA;AAExB,QAAAM,GAAQM,KAAO,IAAI,KAAK,MAAMA,IAAM,KAAKrC,EAAc,IAAI,CAAC;AAAA,MAC9D;AACE,QAAA+B,GAAQ,CAAC;AAAA,EAGf,GAAG,CAACd,GAAMQ,GAAkBH,CAAoB,CAAC;AAEjD,QAAMgB,IAAiBzB,GAAQ,MAAM;AACnC,QAAI,CAACe,EAAY,KAAA,EAAQ,QAAON;AAChC,UAAMiB,IAAIX,EAAY,KAAA,EAAO,YAAA;AAC7B,WAAON,EAAqB;AAAA,MAAO,CAAClB,QACjCA,GAAI,QAAQA,GAAI,QAAQ,IAAI,cAAc,SAASmC,CAAC;AAAA,IAAA;AAAA,EAEzD,GAAG,CAACjB,GAAsBM,CAAW,CAAC,GAEhCY,KAAa,KAAK,KAAKF,EAAe,SAAStC,EAAc,GAC7DyC,KAAkBH,EAAe;AAAA,KACpCR,IAAO,KAAK9B;AAAA,IACb8B,IAAO9B;AAAA,EAAA,GAGH0C,IAAa,MAAM;AACvB,IAAAlB,EAASE,CAAY,GACrBrF,EAAA;AAAA,EACF,GAEMsG,KAAe,MAAM;AACzB,IAAAtG,EAAA;AAAA,EACF;AAaA,SACE,gBAAAvM,EAAA8L,IAAA,EACE,UAAA;AAAA,IAAA,gBAAA3L;AAAA,MAAC2S;AAAA,MAAA;AAAA,QACC,MAAA3B;AAAA,QACA,SAAS0B;AAAA,QACT,OAAO,EAAE,UAAUE,GAAA;AAAA,QACnB,WAAW,EAAE,UAAU,EAAE,SAAS,MAAI;AAAA,QAEtC,4BAACC,IAAA,EAAK,IAAI7B,GACR,UAAA,gBAAAnR,EAACC,GAAA,EAAI,IAAIgQ,IAEP,UAAA;AAAA,UAAA,gBAAAjQ;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,iBAAiB;AAAA,gBACjB,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,gBAChB,cAAc;AAAA,gBACd,IAAI;AAAA,cAAA;AAAA,cAGN,UAAA;AAAA,gBAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,eAAA,CAExC;AAAA,gBACA,gBAAAH,EAACwD,IAAA,EAAQ,OAAM,SAAQ,OAAK,IAC1B,UAAA,gBAAAxD,EAACyD,IAAA,EAAW,SAASiP,IAAc,MAAK,SAAQ,eAEhD,EAAA,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,gBAAA7S,EAACC,KAAI,IAAI,EAAE,IAAI,GAAG,IAAI,KAEpB,UAAA;AAAA,YAAA,gBAAAD;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,IAAI;AAAA,kBACF,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,YAAY;AAAA,kBACZ,IAAI;AAAA,kBACJ,KAAK;AAAA,gBAAA;AAAA,gBAGP,UAAA;AAAA,kBAAA,gBAAAD,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACrD,UAAA;AAAA,oBAAA,gBAAAD,EAACqP,MAAO,SAAQ,YAAW,WAAU,SAAQ,MAAK,SAAQ,UAAA;AAAA,sBAAA;AAAA,sBAExD,gBAAAlP;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,QAAM;AAAA,0BACN,QAAO;AAAA,0BACP,MAAK;AAAA,0BACL,UA9DC,CAACgK,MAAU;;AAC9B,kCAAM8I,MAAO/O,KAAAiG,EAAM,OAAO,UAAb,gBAAAjG,GAAqB;AAElC,4BADAiG,EAAM,OAAO,QAAQ,IAChB8I,OACLxB,KAAA,QAAAA,EAAgBwB,IAAM,CAACC,OAAiB;AACtC,8BAAArB,EAAgBqB,EAAY,GAC5BjB,GAAQ,CAAC,GACTF,EAAe,EAAE;AAAA,4BACnB;AAAA,0BACF;AAAA,0BAsDoB,KAAKK;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACP,GACF;AAAA,oBAEA,gBAAAjS;AAAA,sBAACiO;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,aAAY;AAAA,wBACZ,OAAO0D;AAAA,wBACP,UAAU,CAAC5R,MAAM;AACf,0BAAA6R,EAAe7R,EAAE,OAAO,KAAK,GAC7B+R,GAAQ,CAAC;AAAA,wBACX;AAAA,wBACA,IAAI,EAAE,OAAO,IAAA;AAAA,wBACb,WAAW;AAAA,0BACT,OAAO;AAAA,4BACL,gBACE,gBAAA9R,EAACgT,IAAA,EAAe,UAAS,SAAQ,UAAA,MAAE;AAAA,4BAErC,cAAcrB,IACZ,gBAAA3R,EAACgT,IAAA,EAAe,UAAS,OACvB,UAAA,gBAAAhT;AAAA,8BAACyD;AAAA,8BAAA;AAAA,gCACC,MAAK;AAAA,gCACL,MAAK;AAAA,gCACL,SAAS,MAAM;AACb,kCAAAmO,EAAe,EAAE,GACjBE,GAAQ,CAAC;AAAA,gCACX;AAAA,gCACD,UAAA;AAAA,8BAAA;AAAA,4BAAA,GAGH,IACE;AAAA,0BAAA;AAAA,wBACN;AAAA,sBACF;AAAA,oBAAA;AAAA,kBACF,GACF;AAAA,kBAECL,KACC,gBAAAzR;AAAA,oBAACkP;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,OAAM;AAAA,sBACN,MAAK;AAAA,sBACL,SAAS,MAAMwC,EAAgB,EAAE;AAAA,sBAClC,UAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAED;AAAA,cAAA;AAAA,YAAA;AAAA,YAKJ,gBAAA7R;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,SAAQ;AAAA,gBACR,IAAI,EAAE,IAAI,GAAG,YAAY,OAAA;AAAA,gBAC1B,UAAA;AAAA,kBAAA;AAAA,kBACoBkR,EAAqB;AAAA,kBAAO;AAAA,kBAC9CM,EAAY,KAAA,KACXU,EAAe,WAAWhB,EAAqB,UAC7C,gBAAAxR;AAAA,oBAACM;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAQ;AAAA,sBACR,IAAI;AAAA,wBACF,IAAI;AAAA,wBACJ,OAAO;AAAA,wBACP,YAAY;AAAA,sBAAA;AAAA,sBAEf,UAAA;AAAA,wBAAA;AAAA,wBACIkS,EAAe;AAAA,wBAAO;AAAA,wBACxBA,EAAe,WAAW,IAAI,MAAM;AAAA,wBAAG;AAAA,wBACvCV,EAAY,KAAA;AAAA,wBAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACtB;AAAA,cAAA;AAAA,YAAA;AAAA,YAKN,gBAAA9R,EAACoT,IAAA,EAAM,WAAS,IAAC,SAAS,GAAG,IAAI,EAAE,IAAI,EAAA,GACpC,UAAA;AAAA,cAAAT,GAAgB,IAAI,CAACrC,GAAKzI,OAAU;AACnC,sBAAMwL,KAAazB,MAAiBtB,EAAI;AAExC,uBACE,gBAAAnQ,EAACiT,IAAA,EAAM,MAAM,GACX,UAAA,gBAAApT;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,GAAG;AAAA,sBACH,QAAQoT,KACJ,sBACA;AAAA,sBACJ,cAAc;AAAA,sBACd,SAAS;AAAA,sBACT,eAAe;AAAA,sBACf,YAAY;AAAA,sBACZ,UAAU;AAAA,sBACV,SAASA,KACL,6BACA;AAAA,sBACJ,WAAWA,KAAa,IAAI;AAAA,sBAC5B,WAAWA,KAAa,gBAAgB;AAAA,sBACxC,YAAY;AAAA,sBACZ,QAAQ;AAAA,sBACR,WAAW;AAAA,wBACT,WAAW;AAAA,wBACX,aAAaA,KAAa,YAAY;AAAA,wBACtC,iBAAiB,EAAE,SAAS,EAAA;AAAA,sBAAE;AAAA,oBAChC;AAAA,oBAEF,SAAS,MAAMxB,EAAgBvB,EAAI,IAAI;AAAA,oBAEvC,UAAA;AAAA,sBAAA,gBAAAnQ,EAACwD,IAAA,EAAQ,OAAM,WAAU,OAAK,IAC5B,UAAA,gBAAAxD;AAAA,wBAACyD;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,MAAK;AAAA,0BACL,SAAS,CAAC1D,OAAM;AACd,4BAAAA,GAAE,gBAAA,GACFiS,EAAc7B,CAAG;AAAA,0BACnB;AAAA,0BACA,IAAI;AAAA,4BACF,UAAU;AAAA,4BACV,KAAK;AAAA,4BACL,OAAO;AAAA,4BACP,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,SAAS;AAAA,4BACT,QAAQ;AAAA,4BACR,GAAG;AAAA,4BACH,UAAU;AAAA,4BACV,WAAW,EAAE,SAAS,sBAAA;AAAA,0BAAsB;AAAA,0BAE/C,UAAA;AAAA,wBAAA;AAAA,sBAAA,GAGH;AAAA,sBAEA,gBAAAnQ,EAACkQ,IAAA,EAAe,KAAAC,GAAU,QAAO,QAAA,CAAQ;AAAA,sBACzC,gBAAAnQ;AAAA,wBAACG;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,IAAI;AAAA,4BACF,IAAI;AAAA,4BACJ,OAAO;AAAA,4BACP,YAAY;AAAA,4BACZ,UAAU;AAAA,4BACV,cAAc;AAAA,4BACd,WAAW;AAAA,0BAAA;AAAA,0BAEb,OAAO,GAAGgQ,EAAI,QAAQA,EAAI,IAAI,GAAGA,EAAI,YAAY,KAAKA,EAAI,SAAS,MAAM,EAAE;AAAA,0BAE1E,UAAAA,EAAI,QAAQA,EAAI;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACnB;AAAA,kBAAA;AAAA,gBAAA,KAlEiB,GAAGA,EAAI,IAAI,IAAI0B,CAAI,IAAInK,EAAK,EAoEjD;AAAA,cAEJ,CAAC;AAAA,cAEA2K,EAAe,WAAW,KACzB,gBAAArS;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,IAAI,GAAG,OAAO,iBAAA;AAAA,kBAEnB,YAAY,SACT,oBAAoBwR,EAAY,MAAM,OACtC;AAAA,gBAAA;AAAA,cAAA;AAAA,YACN,GAEJ;AAAA,YAGCY,KAAa,KACZ,gBAAAvS,EAACF,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,gBAAgB,UAAU,IAAI,EAAA,GACxD,UAAA,gBAAAE;AAAA,cAACmT;AAAA,cAAA;AAAA,gBACC,OAAOZ;AAAA,gBACP,MAAAV;AAAA,gBACA,UAAU,CAAC9R,GAAGsN,OAAUyE,GAAQzE,EAAK;AAAA,gBACrC,OAAM;AAAA,cAAA;AAAA,YAAA,EACR,CACF;AAAA,UAAA,GAEJ;AAAA,UAGA,gBAAAxN;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,IAAI;AAAA,gBACF,IAAI;AAAA,gBACJ,IAAI;AAAA,gBACJ,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,gBAAgB;AAAA,gBAChB,WAAW;AAAA,gBACX,gBAAgB;AAAA,cAAA;AAAA,cAGlB,UAAA;AAAA,gBAAA,gBAAAE,EAACkP,MAAO,SAAQ,YAAW,MAAK,SAAQ,SAASwD,IAAc,UAAA,SAAA,CAE/D;AAAA,gBACA,gBAAA1S;AAAA,kBAACkP;AAAA,kBAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,OAAM;AAAA,oBACN,SAASuD;AAAA,oBACV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,EAAA,CACF,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDV,KACC,gBAAA/R;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,MAAM,CAAC,CAACgB;AAAA,QACR,SAAS,MAAMC,EAAc,IAAI;AAAA,QACjC,KAAKD;AAAA,MAAA;AAAA,IAAA;AAAA,EACP,GAEJ;AAEJ;AAEAX,GAAkB,YAAY;AAAA,EAC5B,MAAMhR,EAAU,KAAK;AAAA,EACrB,SAASA,EAAU,KAAK;AAAA,EACxB,sBAAsBA,EAAU;AAAA,EAChC,eAAeA,EAAU;AAAA,EACzB,UAAUA,EAAU,KAAK;AAAA,EACzB,kBAAkBA,EAAU;AAC9B;ACzdA,MAAMgT,KAAwB,CAAC7K,MAAiB;AAC9C,QAAM8K,IAAM9K,KAAgB,CAAA,GACtB+K,IAAmB,EAAE,GAAGC,IAAqB,GAAGF,EAAA;AAEtD,SAAIA,EAAI,YACNC,EAAiB,YAAY;AAAA,IAC3B,GAAGC,GAAoB;AAAA,IACvB,GAAGF,EAAI;AAAA,EAAA,IAGTC,EAAiB,YAAY,EAAE,GAAGC,GAAoB,UAAA,GAGnD,MAAM,QAAQD,EAAiB,OAAO,MACzCA,EAAiB,UAAUC,GAAoB,UAI/CD,EAAiB,UAAU,mBAC3BA,EAAiB,oBAEjBA,EAAiB,kBAAkB,KAG9BA;AACT;AAEA,SAAwBE,KAAuB;;AAC7C,QAAMC,IAAWC,GAAA,GACXC,IAAQF,EAAS,OACjBG,IAAchD;AAAA,IAClB,MAAM,IAAI,gBAAgB6C,EAAS,MAAM;AAAA,IACzC,CAACA,EAAS,MAAM;AAAA,EAAA,GAEZI,IAAWC,GAAA,GAEX,CAAC/G,GAAWgH,CAAY,IAAIrK,EAAS,CAAA,CAAE,GACvC,CAACsK,GAAYC,CAAa,IAAIvK,EAAS,EAAK,GAC5C,CAACwK,GAAgBC,CAAiB,IAAIzK,EAAS,CAAA,CAAE,GACjD,CAAC0K,GAAeC,EAAgB,IAAI3K,EAAS,CAAA,CAAE,GAC/C,CAAC2H,GAAsBiD,CAAuB,IAAI5K,EAAS,CAAA,CAAE,GAC7D,CAAC6K,GAAmBC,CAAoB,IAAI9K,EAAS,CAAA,CAAE,GACvD,CAAC+K,IAAiBC,EAAkB,IAAIhL,EAAS,CAAA,CAAE,GACnD,CAACiL,GAAsBC,EAAuB,IAAIlL,EAAS,EAAI,GAC/D,CAACmL,IAAsBC,CAAuB,IAAIpL,EAAS,EAAI,GAC/D,CAACqL,IAAeC,EAAgB,IAAItL,EAAS,EAAK,GAClD,CAACuL,IAAyBC,EAA0B,IAAIxL,EAAS,EAAK,GACtE,CAACyL,IAAoBC,EAAqB,IAAI1L,EAAS,IAAI,GAC3D,CAACnB,IAAc8M,EAAe,IAAI3L;AAAA,IACtC0J,GAAsBG,EAAmB;AAAA,EAAA,GAErC,CAAC/K,IAAwB8M,EAAyB,IAAI5L;AAAA,IAC1D6L;AAAAA,EAAA,GAEI,CAACzI,IAAoB0I,EAAqB,IAAI9L,EAAS,CAAA,CAAE,GACzD,EAAE,MAAA+L,EAAA,IAASC,GAAY,CAAC/B,MAAUA,EAAM,YAAY,GAEpDgC,IAAWC,GAAQ;AAAA,IACvB,eAAe;AAAA,MACb,MAAM;AAAA,MACN,sBAAsB;AAAA,IAAA;AAAA,IAExB,MAAM;AAAA,EAAA,CACP;AAED,EAAAzD,GAAU,MAAM;AACd,KAAC,aACC,MAAM0D,GAAA,GACN,MAAMC,GAAA,GACN,MAAMC,GAAA,GACN,MAAMC,GAAA,GACN,MAAMC,GAAA,GACFrC,EAAY,IAAI,IAAI,MAAKD,KAAA,QAAAA,EAAO,mBAClCM,EAAc,EAAI,GAClB0B,EAAS,SAAS,QAAQhC,EAAM,MAAM,GACtC,MAAMuC,GAAWvC,EAAM,MAAM,KAE7BM,EAAc,EAAK;AAAA,EAGzB,GAAG,CAAA,CAAE;AACL,QAAMgC,KAA0B,YAAY;AAC1C,QAAI;AACF,YAAME,IAAW,MAAMC,GAAA;AACvB,MAAID,KAAYA,EAAS,QACvBX,GAAsBW,EAAS,IAAI;AAAA,IAEvC,SAASE,GAAO;AACd,cAAQ,MAAM,uCAAuCA,CAAK;AAAA,IAC5D;AAAA,EACF;AACA,EAAAlE,GAAU,MAAM;;AACd,QACE,OAAO,KAAKoC,CAAiB,EAAE,SAAS,KACxCX,EAAY,IAAI,IAAI,MACpBD,KAAA,QAAAA,EAAO,iBACP;AACA,YAAM;AAAA,QACJ,kBAAA2C;AAAAA,QACA,WAAA1O;AAAAA,QACA,cAAAO;AAAAA,QACA,sBAAAoO;AAAA,QACA,QAAAC;AAAA,QACA,kBAAAC;AAAA,MAAA,IACEC;AAAA,SACF3S,IAAA4P,KAAA,gBAAAA,EAAO,mBAAP,gBAAA5P,EAAuB;AAAA,MAGzB;AACA,MAAA4S,GAAoBL,CAAgB,GACpCM,GAAahP,CAAS,GACtBiP,EAAgB1O,CAAY,GAC5BkN,GAAgBmB,CAAM,GACtBlB,GAA0BmB,CAAgB,GAC1Cd,EAAS,SAAS,wBAAwBY,CAAoB;AAAA,IAChE;AAAA,EACF,GAAG,CAAChC,CAAiB,CAAC;AACtB,QAAMuB,KAAa,YAAY;AAQ7B,UAAMgB,KAFY,MAAMC,GALH;AAAA,MACnB,MAAM;AAAA,MACN,YAAY,CAAA;AAAA,IAAC,CAG+B,GAAG,KAAK,OAEzB,IAAI,CAACtL,GAAM/D,OAAW;AAAA,MACjD,IAAI+D,EAAK;AAAA,MACT,MAAMA,EAAK;AAAA,MACX,MAAMA,EAAK;AAAA,MACX,MAAMA,EAAK,QAAQ,aAAa/D,CAAK;AAAA,IAAA,EACrC;AAEF,IAAAyM,EAAkB2C,CAAW;AAAA,EAC/B,GACMf,KAAqB,YAAY;AAMrC,UAAMI,KAAY,MAAMY,GALH;AAAA,MACnB,MAAM;AAAA,MACN,YAAY,CAAA;AAAA,IAAC,CAG+B,GAAG,KAAK;AACtD,IAAA1C,GAAiB8B,CAAQ;AAAA,EAC3B,GACMa,KAAyBpG;AAAA,IAC7B,MAAM,oBAAI,IAAI,CAAC,OAAO,QAAQ,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA,IAC5D,CAAA;AAAA,EAAC,GAGGqG,KAAiB,CAACjJ,MACtBkJ,GAAI;AAAA,IACF;AAAA,IACA,EAAE,GAAGlJ,EAAA;AAAA,IACL,EAAE,MAAM,cAAc,YAAY,GAAA;AAAA,EAAM,GAGtCgI,KAA4B,YAAY;AAC5C,UAAMmB,IAAqB,CAACC,GAAUC,MAAa;AACjD,YAAMC,IACJF,EAAS,aAAaA,EAAS,kBAAkBA,EAAS,eACtDG,IAAoBF,KAAA,QAAAA,EAAU,SAAS,OACzCA,EAAS,MAAM,GAAG,EAAE,IAAA,IACpB;AACJ,aAAO,OAAOC,KAAaC,KAAqB,EAAE,EAC/C,QAAQ,OAAO,EAAE,EACjB,YAAA;AAAA,IACL;AAEA,QAAI;AAQF,YAAMC,MANJ,MAAMT,GAAQ;AAAA,QACZ,MAAM;AAAA,QACN,YAAY,CAAA;AAAA,MAAC,CACd,GACD,KAAK,UAE2B,CAAA,GAC/B,IAAI,CAACK,MAAa;AACjB,cAAMhH,IACJgH,EAAS,iBAAiBA,EAAS,gBAAgBA,EAAS,MACxDrL,IACJqL,EAAS,aACTA,EAAS,oBACTA,EAAS,QACTA,EAAS,sBACThH,GACIkH,IAAYH,EAAmBC,GAAUrL,CAAI;AAEnD,eAAO;AAAA,UACL,IAAIqL,EAAS,MAAM;AAAA,UACnB,MAAAhH;AAAA,UACA,MAAArE;AAAA,UACA,WAAAuL;AAAA,UACA,YAAYF,EAAS,gBAAgBA,EAAS,cAAc;AAAA,QAAA;AAAA,MAEhE,CAAC,EACA;AAAA,QACC,CAACA,MACCA,EAAS,QAAQJ,GAAuB,IAAII,EAAS,SAAS;AAAA,MAAA;AAGpE,MAAA9C,EAAwBkD,CAAY;AAAA,IACtC,QAAgB;AACd,MAAAlD,EAAwB,CAAA,CAAE,GAC1BmD,GAAU;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AAAA,IACH;AAAA,EACF,GACMC,KAA4B,OAAO5E,GAAM6E,MAAe;;AAC5D,QAAI,CAAC7E,EAAM;AACX,UAAMwE,IAAY,SAAOvT,IAAA+O,EAAK,SAAL,gBAAA/O,EAAW,MAAM,KAAK,UAAS,EAAE,EAAE,YAAA;AAE5D,QACE,GAACC,IAAA8O,EAAK,SAAL,QAAA9O,EAAW,WAAW,cACvB,CAACgT,GAAuB,IAAIM,CAAS,GACrC;AACA,MAAAG,GAAU,EAAE,MAAM,QAAQ,SAAS,qCAAqC;AACxE;AAAA,IACF;AAEA,QAAI;AACF,YAAMG,IAAeC,GAAA,GACfC,IAAU;AAAA,QACd,cAAAF;AAAA,QACA,YAAY;AAAA,QACZ,cAAc9E;AAAA,MAAA,GAEV,EAAE,MAAAzC,EAAA,IAAS,MAAM4G,GAAea,CAAO,GACvC1H,KACJC,KAAA,gBAAAA,EAAM,mBAAiBA,KAAA,gBAAAA,EAAM,kBAAgBA,KAAA,gBAAAA,EAAM,SAAQuH,GACvD9Y,KAAKuR,KAAA,gBAAAA,EAAM,QAAMA,KAAA,gBAAAA,EAAM,gBAAe;AAE5C,UAAI,CAACD,GAAM;AACT,QAAAqH,GAAU;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,QAAA,CACV;AACD;AAAA,MACF;AAEA,MAAAnD,EAAwB,CAAC3J,OAAS;AAChC,cAAMoN,KAAe,EAAE,IAAAjZ,GAAI,MAAAsR,GAAM,MAAM0C,EAAK,MAAM,WAAAwE,EAAA,GAC5CU,MAAqBrN,MAAQ,CAAA,GAAI;AAAA,UACrC,CAACyM,OAAaA,GAAS,SAAShH;AAAA,QAAA;AAElC,eAAO,CAAC2H,IAAc,GAAGC,EAAiB;AAAA,MAC5C,CAAC,GACDL,KAAA,QAAAA,EAAavH,IACbqH,GAAU,EAAE,MAAM,WAAW,SAAS,gCAAgC;AAAA,IACxE,SAASpB,GAAO;AACd,MAAAoB,GAAU;AAAA,QACR,MAAM;AAAA,QACN,UAASpB,KAAA,gBAAAA,EAAO,YAAW;AAAA,MAAA,CAC5B;AAAA,IACH;AAAA,EACF,GAEMR,KAAa,YAAY;AAC7B,QAAI;AACF,YAAMM,KACJ,MAAMY,GAAQ;AAAA,QACZ,MAAM;AAAA,MAAA,CACP,GACD;AACF,MAAIZ,EAAS,UACXpC,EAAaoC,EAAS,MAAM;AAAA,IAEhC,SAASE,GAAO;AACd,MAAAoB,GAAU;AAAA,QACR,SAASpB;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EACF,GAEMH,KAAa,OAAO+B,MAAW;AACnC,QAAIA;AACF,UAAI;AACF,cAAM9B,KACJ,MAAMY,GAAQ;AAAA,UACZ,MAAM;AAAA,UACN,YAAY;AAAA,YACV,IAAIkB;AAAA,UAAA;AAAA,QACN,CACD,GACD;AAEF,QAAI9B,EAAS,UACX+B,EAAkB/B,EAAS,MAAM;AAAA,MAErC,SAASE,GAAO;AACd,QAAAoB,GAAU;AAAA,UACR,SAASpB;AAAA,UACT,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AAAA,EAEJ,GAEM8B,KAAmB,CAACrZ,GAAIyV,GAAmBE,MAAoB;AACnE,UAAMzT,IAAUuT,EAAkBzV,CAAE;AACpC,QAAIkC,EAAS,QAAOA;AAEpB,UAAMqN,IAAQoG,EAAgB;AAAA,MAC5B,CAACpT,MAAMA,EAAE,SAAS,WAAWA,EAAE,OAAOvC;AAAA,IAAA;AAExC,WAAIuP,KAEG;AAAA,EACT,GACM+J,IAAiB,CACrBC,GACAC,GACA/D,GACAE,MACG;AACH,UAAM8D,IAAaJ;AAAA,MACjBE,EAAiB;AAAA,MACjB9D;AAAAA,MACAE;AAAAA,IAAA;AAEF,QAAI,CAAC8D,EAAY,QAAO;AACxB,UAAMC,IAAeX,GAAA;AAErB,QAAIU,EAAW,SAAS,SAAS;AAC/B,YAAME,IAAgBJ,EAAiB,MACpC,IAAI,CAACK,MAAa;AACjB,cAAMC,IAAiBR;AAAA,UACrBO,EAAS;AAAA,UACTnE;AAAAA,UACAE;AAAAA,QAAA;AAEF,eAAKkE,IACE;AAAA,UACL,GAAGA;AAAA,UACH,MAAMd,GAAA;AAAA,UACN,eAAe;AAAA,UACf,SAASQ,EAAiB;AAAA,QAAA,IALA;AAAA,MAO9B,CAAC,EACA,OAAO,CAACO,MAAMA,MAAM,IAAI;AAE3B,aAAIH,EAAc,WAAW,IAAU,OAEhC;AAAA,QACL,GAAGF;AAAA,QACH,IAAIC;AAAA,QACJ,YAAY,GAAGF,CAAgB,UAAUE,CAAY;AAAA,QACrD,OAAOC;AAAA,MAAA;AAAA,IAEX,WAAWF,EAAW,SAAS,WAAW;AACxC,YAAMM,IACJP,MAAqB,kBACjBA,IACA,GAAGA,CAAgB,IAAIC,EAAW,EAAE;AAE1C,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,IAAIA,EAAW;AAAA,QACf,MAAMC;AAAA,QACN,YAAY,GAAGK,CAAc,IAAIL,CAAY;AAAA,MAAA;AAAA,IAEjD;AACA,WAAO;AAAA,EACT,GAEMM,IAAgB,CACpBC,GACAC,GACAzE,GACAE,MACG;AACH,QAAI,CAACsE,KAAmB,CAAC,MAAM,QAAQA,CAAe,UAAU,CAAA;AAEhE,QAAIA,EAAgB,MAAM,CAACE,MAAMA,EAAE,MAAM,CAACA,EAAE,QAAQ,CAACA,EAAE,QAAQ,GAAG;AAChE,YAAMX,IAAmBU,MAAU,aAAa,kBAAkBA;AAElE,aAAOD,EACJ;AAAA,QAAI,CAAC1X,MACJ+W;AAAA,UACE/W;AAAA,UACAiX;AAAA,UACA/D;AAAAA,UACAE;AAAAA,QAAA;AAAA,MACF,EAED,OAAO,CAACpT,MAAMA,MAAM,IAAI;AAAA,IAC7B;AAEA,WAAI2X,MAAU,SACLE;AAAA,MAAuBH;AAAA,MAAiB,CAAC/X,GAASmY,MACvDf,EAAepX,GAASmY,GAAU5E,GAAmBE,CAAe;AAAA,IAAA,IAIjEsE,EACJ,IAAI,CAACnN,MAAc;AAClB,YAAMwN,IAAavB,GAAA;AAEnB,UAAIjM,EAAU,SAAS;AACrB,eAAO,EAAE,GAAGA,GAAW,IAAIwN,EAAA;AAG7B,UAAIxN,EAAU,SAAS,WAAW;AAChC,cAAMyN,IAAoB,QAAQD,CAAU,IACtCE,KAAoB1N,EAAU,YAAY,CAAA,GAC7C;AAAA,UAAI,CAACvK,MACJ+W;AAAA,YACE/W;AAAA,YACAgY;AAAA,YACA9E;AAAAA,YACAE;AAAAA,UAAA;AAAA,QACF,EAED,OAAO,CAACpT,MAAMA,MAAM,IAAI;AAC3B,eAAO;AAAA,UACL,MAAMuK,EAAU;AAAA,UAChB,OAAOA,EAAU;AAAA,UACjB,IAAIyN;AAAA,UACJ,UAAUC;AAAA,QAAA;AAAA,MAEd;AACA,aAAO;AAAA,IACT,CAAC,EACA,OAAO,CAACL,MAAMA,MAAM,IAAI;AAAA,EAC7B,GAEMvC,IAAsB,CAAC6C,MAAoB;;AAC/C,UAAMC,IAAsB,CAAA,GACtBC,IAAe,CAAA;AACrB,QAAIC,IAAkB;AACtB,UAAMnD,MACJxS,IAAAwV,KAAA,gBAAAA,EAAiB,yBAAjB,gBAAAxV,EAAuC,UAAS,IAC5CyS,IAASpD,GAAsBmG,KAAA,gBAAAA,EAAiB,MAAM,GACtD9C,IAAmB,MAAM;AAAA,OAC7BzS,IAAAuV,KAAA,gBAAAA,EAAiB,qBAAjB,gBAAAvV,EAAmC;AAAA,IAAA,IAEjCuV,EAAgB,iBAAiB,MAAM,IAAI,CAACnQ,OAAU;AAAA,MACpD,GAAGA;AAAA,MACH,UAAUA,EAAK,YAAYA,EAAK,oBAAoB;AAAA,IAAA,EACpD,IACFmM;AAEJ,eAAWyD,KAASO,GAAiB;AACnC,YAAMI,KAAUJ,EAAgBP,CAAK;AAGrC,UAFAS,EAAaT,CAAK,IAAIW,GAAQ,QAE1BA,GAAQ;AACV,YAAIX,MAAU,UAAUW,GAAQ;AAC9B,UAAAH,EAAoBR,CAAK,IAAIF;AAAA,YAC3Ba,GAAQ;AAAA,YACRX;AAAA,YACAzE;AAAA,YACAE;AAAA,UAAA;AAAA,iBAEOuE,MAAU,eAAcW,MAAA,QAAAA,GAAS,WAAU;AACpD,gBAAML,KAAmBR;AAAA,YACvBa,GAAQ;AAAA,YACRX;AAAA,YACAzE;AAAA,YACAE;AAAA,UAAA;AAGF,UAAA+E,EAAoBR,CAAK,IAAI;AAAA,YAC3B,UAAUM;AAAA,UAAA;AAAA,QAEd,MAAA,CAAWK,MAAA,QAAAA,GAAS,WAClBH,EAAoBR,CAAK,IAAIF;AAAA,UAC3Ba,MAAA,gBAAAA,GAAS;AAAA,UACTX;AAAA,UACAzE;AAAA,UACAE;AAAA,QAAA,IAEOuE,MAAU,sBAAsBW,GAAQ,aACjDD,IAAkB;AAAA,UAChB,UAAU,YAAYC,GAAQ,QAAQ;AAAA,UACtC,MAAMA,GAAQ;AAAA,UACd,UAAU9B,GAAA;AAAA,QAAa;AAAA;AAI3B,QAAImB,MAAU,aACZQ,EAAoBR,CAAK,IAAI,EAAE,UAAU,CAAA,EAAC,IAE1CQ,EAAoBR,CAAK,IAAI,CAAA;AAAA,IAGnC;AACA,WAAO;AAAA,MACL,kBAAkBQ;AAAA,MAClB,WAAWC;AAAA,MACX,cAAcC;AAAA,MACd,sBAAAnD;AAAA,MACA,QAAAC;AAAA,MACA,kBAAAC;AAAA,IAAA;AAAA,EAEJ,GACMyB,IAAoB,CAAC7H,MAAS;AAClC,UAAMuJ,IAAc,CAAA,GACdC,IAAmB,CAAA,GACnBC,wBAAwB,IAAA;AAE9B,IAAAzJ,EAAK,QAAQ,CAACjH,MAAS;AAGrB,YAAM2Q,IAFM,KAAK,MAAM3Q,EAAK,SAAS,IAAI,EAEZ,IAAI,CAAC4Q,MAAS;AACzC,cAAMC,IAAkB;AAAA,UACtB,MAAMpC,GAAA;AAAA,UACN,IAAImC,EAAK,KAAK,SAASA,EAAK,EAAE,IAAI;AAAA,UAClC,MAAMA,EAAK,QAAQ;AAAA,UACnB,MAAMA,EAAK,QAAQ;AAAA,UACnB,MAAM;AAAA,UACN,eAAe5Q,EAAK,MAAM;AAAA,UAC1B,SAASA,EAAK,MAAM;AAAA,QAAA;AAGtB,eAAAyQ,EAAiBI,EAAgB,EAAE,IAAIA,GAEhCA;AAAA,MACT,CAAC;AAED,UAAI7Q,EAAK,MAAM,MAAM;AACnB,cAAM8Q,IAAc,CAAA,GACdC,wBAAkB,IAAA;AACxB,QAAAJ,EAAe,QAAQ,CAACC,MAAS;AAC/B,UAAIA,EAAK,MAAM,QAAQ,CAACG,EAAY,IAAIH,EAAK,EAAE,MAC7CG,EAAY,IAAIH,EAAK,EAAE,GACvBE,EAAY,KAAKF,CAAI;AAAA,QAEzB,CAAC,GAEDJ,EAAY,KAAK;AAAA,UACf,MAAM/B,GAAA;AAAA,UACN,IAAIzO,EAAK;AAAA,UACT,MAAMA,EAAK;AAAA,UACX,MAAMA,EAAK,QAAQ;AAAA,UACnB,MAAM;AAAA,UACN,OAAO8Q;AAAA,QAAA,CACR;AAAA,MACH;AACE,QAAAH,EAAe,QAAQ,CAACC,MAAS;AAC/B,UAAIA,EAAK,MAAM,QAAQ,CAACF,EAAkB,IAAIE,EAAK,EAAE,MACnDF,EAAkB,IAAIE,EAAK,EAAE,GAC7BJ,EAAY,KAAKI,CAAI;AAAA,QAEzB,CAAC;AAAA,IAEL,CAAC,GAEDxF,EAAqBqF,CAAgB,GACrCnF,GAAmBkF,CAAW;AAAA,EAChC,GACMQ,IAAkB,CAACpZ,MAAY;;AACnC,QAAIA,EAAQ,SAAS,SAAS;AAC5B,YAAMqZ,KAAmBrW,KAAAD,IAAA/C,EAAQ,UAAR,gBAAA+C,EAAgB,OAAhB,gBAAAC,EAAoB;AAE7C,aAAKqW,IAIE;AAAA,QACL,IAAIA;AAAA,QACJ,OAAOrZ,EAAQ,MAAM,IAAI,CAACgZ,OAAU;AAAA,UAClC,IAAIA,EAAK;AAAA,QAAA,EACT;AAAA,MAAA,IAPK;AAAA,IASX,WAAWhZ,EAAQ,SAAS;AAC1B,aAAO;AAAA,QACL,IAAIA,EAAQ;AAAA,MAAA;AAGhB,WAAO;AAAA,EACT,GA6BMsZ,KAAuB,MAAM;;AACjC,SACEvW,IAAAwE,MAAA,gBAAAA,GAAc,cAAd,QAAAxE,EAAyB,qBACzBC,IAAAuE,MAAA,gBAAAA,GAAc,cAAd,QAAAvE,EAAyB,eACzB;AAEA,YAAMuW,IADkBhS,GAAa,UAAU,aACJ,MAAM,YAAY,GACvDiS,IAAgBD,IAClBA,EAAmB,IAAI,CAAC3B,MAAMA,EAAE,MAAM,GAAG,EAAE,EAAE,KAAA,CAAM,EAAE,OAAO,OAAO,IACnE,CAAA,GACE6B,IAAsB,CAAC,GAAG,IAAI,IAAID,CAAa,CAAC,GAChDE,IAAiBnS,GAAa,UAAU,kBAAkB,CAAA;AAEhE,iBAAWoS,KAAgBF;AACzB,YAAI,CAACC,EAAeC,CAAY;AAC9B,iBAAAlD,GAAU;AAAA,YACR,MAAM;AAAA,YACN,SAAS,qCAAqCkD,CAAY;AAAA,UAAA,CAC3D,GACM;AAAA,IAGb;AAEA,UAAMC,IAAatE,GAAiB,QAAQ,CAAA;AAC5C,WAAIuE,GAA4BD,CAAU,KACxCnD,GAAU;AAAA,MACR,MAAM;AAAA,MACN,SACE;AAAA,IAAA,CACH,GACM,MAGF;AAAA,EACT,GAEMqD,KAAwB,MAAM;AAClC,UAAMC,IAAc;AAAA,MAClB,sBAAsB;AAAA,QACpB,OAAOpF,EAAS,UAAU,sBAAsB;AAAA,MAAA;AAAA,MAElD,QAAQvC,GAAsB7K,EAAY;AAAA,MAC1C,kBAAkB;AAAA,QAChB,OAAO,CAAC,GAAGC,EAAsB,EAAE;AAAA,UACjC,CAACa,GAAGC,MAAM,OAAOD,EAAE,gBAAgB,CAAC,IAAI,OAAOC,EAAE,gBAAgB,CAAC;AAAA,QAAA;AAAA,MACpE;AAAA,IACF;AAGF,WAAA0R,GAAQ,QAAQ,CAACC,MAAQ;;AACvB,YAAMjC,IAAQiC,EAAI,IACZC,IAAYtT,GAAUoR,CAAK,GAE3BmC,IAAW;AAAA,QACf,QAAQD;AAAA,MAAA;AAGV,UAAIA;AACF,YAAIlC,MAAU,sBAAsB7Q;AAClC,UAAAgT,EAAS,WAAWhT,GAAa;AAAA,iBAE7B6Q,MAAU,QAAQ;AACpB,gBAAMoC,IAAY9E,GAAiB0C,CAAK,KAAK,CAAA;AAC7C,UAAAmC,EAAS,SAASE,GAAwBD,CAAS;AAAA,QACrD,WAAWpC,MAAU,YAAY;AAC/B,gBAAMsC,MAAcvX,IAAAuS,GAAiB0C,CAAK,MAAtB,gBAAAjV,EAAyB,aAAY,CAAA;AAEzD,UAAIuX,EAAY,SAAS,MACvBH,EAAS,WAAWG,EACjB,IAAIlB,CAAe,EACnB,OAAO,CAAC/Y,MAAMA,MAAM,IAAI;AAAA,QAE/B,WAAW2X,MAAU,aAAa;AAChC,gBAAMsC,IAAchF,GAAiB0C,CAAK,KAAK,CAAA;AAE/C,UAAI,MAAM,QAAQsC,CAAW,MAC3BH,EAAS,WAAWG,EACjB,IAAIlB,CAAe,EACnB,OAAO,CAAC/Y,MAAMA,MAAM,IAAI;AAAA,QAE/B;AAAA;AAIJ,MAAA0Z,EAAY/B,CAAK,IAAImC;AAAA,IACvB,CAAC,GAEMJ;AAAA,EACT,GACMQ,KAAW,OAAOlL,MAAS;AAC/B,QAAI,CAACiK,KAAwB;AAE7B,UAAMf,IAAkBuB,GAAA,GAClBU,IAAmB,KAAK,UAAUjC,CAAe,GAEjDzB,IAAU;AAAA,MACd,QAAQzH,EAAK;AAAA,MACb,QAAQoF,KAAA,gBAAAA,EAAM;AAAA,MACd,aAAa+F;AAAA,IAAA;AAEf,QAAI;AAOF,OALE,MAAMzE,GAAQ;AAAA,QACZ,MAAM;AAAA,QACN,YAAYe;AAAA,MAAA,CACb,GACD,KACW,WACXL,GAAU;AAAA,QACR,SAAS;AAAA,QACT,MAAM;AAAA,MAAA,CACP,GACD5D,EAAS,wCAAwC;AAAA,IAErD,SAASwC,GAAO;AACd,MAAAoB,GAAU;AAAA,QACR,SAASpB;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EACF,GACM2E,KAAU;AAAA,IACd,EAAE,IAAI,QAAQ,MAAM,OAAA;AAAA,IACpB,EAAE,IAAI,YAAY,MAAM,WAAA;AAAA,IACxB,EAAE,IAAI,aAAa,MAAM,YAAA;AAAA,IACzB,EAAE,IAAI,oBAAoB,MAAM,oBAAA;AAAA,EAAoB,GAEhD,CAACpT,IAAWgP,EAAY,IAAIlN,EAAS;AAAA,IACzC,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,kBAAkB;AAAA,EAAA,CACnB,GAEK+R,IAAkB;AAAA,IACtB,GAAGjZ;AAAA,IACH,YAAY;AAAA,IACZ,mBAAmB;AAAA,IAAA,gBACnBD;AAAAA,IACA,OAAO;AAAA,EAAA,GAEH,CAAC4F,IAAc0O,CAAe,IAAInN,EAAS,IAAI,GAE/CgS,IAAsB,CAAC1R,MAAU;AACrC,UAAM2R,IAAe3R,EAAM,OAAO,OAC5B4R,IAAa1H,EAAe;AAAA,MAChC,CAACzI,MAASA,EAAK,SAASkQ;AAAA,IAAA;AAE1B,IAAA9E,EAAgB+E,CAAU;AAAA,EAC5B,GACM,CAACC,GAAUC,EAAW,IAAIpS,EAAS,IAAI,GACvC,CAAC3B,IAAiBgU,EAAkB,IAAIrS,EAAS,IAAI,GACrD,CAAC1B,GAAagU,EAAc,IAAItS,EAAS,MAAM,GAE/C,CAAC4M,IAAkBK,EAAmB,IAAIjN,EAAS,MAAM;AAC7D,UAAMuS,IAAgB,CAAA;AACtB,WAAAjB,GAAQ,QAAQ,CAACC,MAAQ;AACvB,MAAAgB,EAAchB,EAAI,EAAE,IAAI,CAAA;AAAA,IAC1B,CAAC,GACMgB;AAAA,EACT,CAAC,GACK,CAACC,GAAYC,EAAa,IAAIzS,EAAS,EAAE,GACzC,CAAC9I,IAAewb,EAAgB,IAAI1S,EAAS,IAAI,GACjD,CAAC/G,IAAcC,EAAe,IAAI8G,EAAS,IAAI,GAC/C2S,OAAmBtY,KAAAuS,GAAiB,aAAjB,gBAAAvS,GAA2B,aAAY,CAAA,GAC1DuY,KAAiB1L;AAAA,IACrB,MACE,OAAO,OAAO2D,CAAiB,EAAE;AAAA,MAC/B,CAACvT,OAAYA,KAAA,gBAAAA,EAAS,UAAS;AAAA,IAAA;AAAA,IAEnC,CAACuT,CAAiB;AAAA,EAAA,GAEdgI,KAA0B3L,GAAQ,MAAM;AAC5C,QAAI5I,MAAgB,UAAUA,MAAgB;AAC5C,iCAAW,IAAA;AAGb,UAAMwU,IAAa,CAACC,OACjBA,KAAS,IAAI,QAAQ,CAACna,MACjBA,EAAK,SAASmZ,EAAgB,UAAgB,CAAC,OAAOnZ,EAAK,EAAE,CAAC,IAI3D,CAAC,GAHe,MAAM,QAAQA,EAAK,QAAQ,IAC9CA,EAAK,SAAS,IAAI,CAACtB,MAAY,OAAOA,EAAQ,EAAE,CAAC,IACjD,CAAA,GACuB,GAAGwb,EAAWla,EAAK,YAAY,CAAA,CAAE,CAAC,CAC9D,GAEGoa,IAAepG,GAAiBtO,CAAW;AACjD,QAAI2U,IAAiB,CAAA;AACrB,WAAI,MAAM,QAAQD,CAAY,IAAGC,IAAiBD,IACzC,MAAM,QAAQA,KAAA,gBAAAA,EAAc,QAAQ,MAC3CC,IAAiBD,EAAa,WAEzB,IAAI,IAAIF,EAAWG,CAAc,CAAC;AAAA,EAC3C,GAAG,CAACrG,IAAkBtO,GAAayT,CAAe,CAAC,GAC7CmB,KAA6B,CAACzS,MAAY;AAC9C,IAAAiS,GAAiB,CAACS,MAAYA,MAAW1S,IAAU,OAAOA,CAAQ;AAAA,EACpE,GACMiR,KAAY9E,GAAiBtO,CAAW,GACxC8U,KAAgB,MAAM,QAAQ1B,EAAS,IAAIA,KAAY,CAAA,GAEvD2B,KAAmBnM,GAAQ,MAAM;AACrC,UAAMoM,IAAcd,EAAW,YAAA;AAE/B,WAAOzH,GACJ,IAAI,CAACrL,MAAS;AACb,UAAIA,EAAK,SAAS,SAAS;AACzB,cAAM6T,IAAgB7T,EAAK,MAAM;AAAA,UAAO,CAAC4Q,MACvCA,EAAK,KAAK,YAAA,EAAc,SAASgD,CAAW;AAAA,QAAA;AAG9C,eACE5T,EAAK,KAAK,cAAc,SAAS4T,CAAW,KAC5CC,EAAc,SAAS,IAEhB,EAAE,GAAG7T,GAAM,OAAO6T,EAAA,IAEpB;AAAA,MACT;AAEA,aAAI7T,EAAK,KAAK,YAAA,EAAc,SAAS4T,CAAW,IACvC5T,IAGF;AAAA,IACT,CAAC,EACA,OAAO,OAAO;AAAA,EACnB,GAAG,CAACqL,IAAiByH,CAAU,CAAC,GAC1B,EAAE,iBAAAgB,IAAiB,mBAAAC,GAAA,IAAsBvM,GAAQ,MAAM;AAC3D,UAAMwM,IAASL,GAAiB,OAAO,CAAC3T,MAASA,EAAK,SAAS,OAAO,GAChEiD,IAAW0Q,GAAiB,OAAO,CAAC3T,MAASA,EAAK,SAAS,OAAO;AAExE,WAAO,EAAE,iBAAiBgU,GAAQ,mBAAmB/Q,EAAA;AAAA,EACvD,GAAG,CAAC0Q,EAAgB,CAAC,GACf1U,KAA6BlF;AAAA,IACjC,CAACka,MAAqB;AACpB,MAAA1G,GAAoB,CAAC2G,OAAgB;AAAA,QACnC,GAAGA;AAAA,QACH,CAACtV,CAAW,GACV,OAAOqV,KAAqB,aACxBA,EAAiBC,EAAWtV,CAAW,KAAK,CAAA,CAAE,IAC9CqV;AAAA,MAAA,EACN;AAAA,IACJ;AAAA,IACA,CAACrV,CAAW;AAAA,EAAA,GAERC,KAAkB9E,GAAY,CAAC6V,MAAU;AAC7C,IAAAgD,GAAehD,CAAK,GACpBpW,GAAgB,IAAI;AAAA,EACtB,GAAG,CAAA,CAAE,GAEC2a,KAAqB,CAACjb,GAAMkb,GAAUnQ,MAAU;AACpD,QAAImQ,EAAS,SAAS,GAAG,GAAG;AAC1B,YAAM,CAACC,GAAUC,CAAQ,IAAIF,EAAS,MAAM,GAAG;AAC/C,aAAO;AAAA,QACL,GAAGlb;AAAA,QACH,CAACmb,CAAQ,GAAG;AAAA,UACV,GAAInb,EAAKmb,CAAQ,KAAK,CAAA;AAAA,UACtB,CAACC,CAAQ,GAAGrQ;AAAA,QAAA;AAAA,MACd;AAAA,IAEJ;AACA,WAAO,EAAE,GAAG/K,GAAM,CAACkb,CAAQ,GAAGnQ,EAAA;AAAA,EAChC,GAEMsQ,KAA6B,CAACC,MAAW;AAC7C,UAAMC,IAAejV,GAAakU,IAAec,CAAM;AACvD,IAAI,CAACC,KAAgBA,EAAa,SAASpC,EAAgB,YAC3DM,GAAmB6B,CAAM,GACzBxI,GAAsB,gBAAgByI,CAAY,CAAC,GACnD3I,GAA2B,EAAI;AAAA,EACjC,GAEM4I,KAA8B,MAAM;AACxC,IAAA5I,GAA2B,EAAK,GAChCE,GAAsB,IAAI,GAC1B2G,GAAmB,IAAI;AAAA,EACzB,GAEMgC,KAA6B,MAAM;AACvC,IAAI5I,MAAsBpN,MACxBM;AAAA,MAA2B,CAACsC,MAC1BqT,GAAerT,GAAM5C,IAAiB,MAAMoN,EAAkB;AAAA,IAAA,GAGlE2I,GAAA;AAAA,EACF,GAEMG,KAAwB,CAACnf,GAAI0e,GAAUnQ,MAAU;AACrD,IAAAhF;AAAA,MAA2B,CAACsC,MAC1BqT;AAAA,QAAerT;AAAA,QAAM7L;AAAA,QAAI,CAACwD,MACxBib,GAAmBjb,GAAMkb,GAAUnQ,CAAK;AAAA,MAAA;AAAA,IAC1C;AAAA,EAEJ,GAEM6Q,KAA6B,CAACpf,GAAI0e,GAAUnQ,MAAU;AAC1D,IAAA+H;AAAA,MAAsB,CAACzK,MACrBA,KAAO4S,GAAmB5S,GAAM6S,GAAUnQ,CAAK;AAAA,IAAI;AAAA,EAEvD,GAEM8Q,KAAuB,CAACX,GAAUnQ,MAAU;AAChD,IAAAgI,GAAgB,CAAC1K,MAAS;AACxB,YAAMyT,IAAa,EAAE,GAAGzT,EAAA;AAExB,UAAI6S,MAAa,aAAa;AAC5B,cAAMa,IAAgB,EAAE,GAAG1T,EAAK,WAAW,GAAG0C,EAAA;AAK9C,YAJIgR,EAAc,oBAChBD,EAAW,kBAAkB,KAG3B,kBAAkB/Q,KAASgR,EAAc,gBAAgB;AAE3D,gBAAM9D,KADkBlN,EAAM,gBAAgB,IACH,MAAM,YAAY,GACvDmN,IAAgBD,IAClBA,EACG,IAAI,CAAC3B,OAAMA,GAAE,MAAM,GAAG,EAAE,EAAE,KAAA,CAAM,EAChC,OAAO,OAAO,IACjB,CAAA,GACE6B,IAAsB,CAAC,GAAG,IAAI,IAAID,CAAa,CAAC,GAEhD8D,IAAgB,CAAA;AACtB,UAAA7D,EAAoB,QAAQ,CAAC8D,OAAM;AACjC,YAAIF,EAAc,eAAeE,EAAC,MAChCD,EAAcC,EAAC,IAAIF,EAAc,eAAeE,EAAC;AAAA,UAErD,CAAC,GACDF,EAAc,iBAAiBC;AAAA,QACjC;AAEA,QAAAF,EAAW,YAAYC;AAAA,MACzB;AACE,QAAAD,EAAWZ,CAAQ,IAAInQ,GACnBmQ,MAAa,qBAAqBnQ,KAChC+Q,EAAW,cACbA,EAAW,UAAU,kBAAkB;AAI7C,aAAOhL,GAAsBgL,CAAU;AAAA,IACzC,CAAC;AAAA,EACH,GAEMI,KAA6B,CAACC,MAAU;AAC5C,UAAMC,IAAaD,KAAS,CAAA;AAC5B,IAAAnJ,GAA0BoJ,CAAU,GACpC9H,GAAa,CAAC+H,MAAe;AAC3B,YAAMC,IAAa,EAAE,GAAGD,EAAA;AACxB,aAAA3D,GAAQ,QAAQ,CAACC,MAAQ;AACvB,cAAM4D,IAAYH,EAAW,KAAK,CAACtV,MAASA,EAAK,OAAO6R,EAAI,EAAE;AAC9D,QAAA2D,EAAW3D,EAAI,EAAE,IAAI4D,IACjBA,EAAU,YAAY,KACtBF,EAAW1D,EAAI,EAAE;AAAA,MACvB,CAAC,GACM2D;AAAA,IACT,CAAC;AAED,UAAME,IAAaJ,EAAW,KAAK,CAACtV,MAASA,EAAK,OAAOpB,CAAW;AACpE,SAAI8W,KAAA,gBAAAA,EAAY,aAAY,IAAO;AACjC,YAAMC,IAAmB,CAAC,GAAGL,CAAU,EACpC;AAAA,QACC,CAACrV,GAAGC,MAAM,OAAOD,EAAE,gBAAgB,CAAC,IAAI,OAAOC,EAAE,gBAAgB,CAAC;AAAA,MAAA,EAEnE,KAAK,CAACF,MAASA,EAAK,YAAY,EAAK;AACxC,MAAI2V,KACF/C,GAAe+C,EAAiB,EAAE;AAAA,IAEtC;AAAA,EACF,GAEMC,KAAmB,CAACC,GAAaC,IAAe,OAAO;AAC3D,IAAA7W;AAAA,MAA2B,CAACsC,MAC1BqT,GAAerT,GAAMsU,GAAa,CAAC3c,OAAU;AAAA,QAC3C,GAAGA;AAAA,QACH,QAAQ,CAAC,GAAIA,EAAK,UAAU,CAAA,GAAK,EAAE,cAAA4c,GAAc,YAAY,GAAA,CAAI;AAAA,MAAA,EACjE;AAAA,IAAA;AAAA,EAEN,GAEMC,KAAsB,CAACF,GAAaG,GAAY5B,GAAUnQ,MAAU;AACxE,IAAAhF;AAAA,MAA2B,CAACsC,MAC1BqT,GAAerT,GAAMsU,GAAa,CAAC3c,OAAU;AAAA,QAC3C,GAAGA;AAAA,QACH,SAASA,EAAK,UAAU,CAAA,GAAI;AAAA,UAAI,CAAC+c,GAAO3X,MACtCA,MAAU0X,IAAa,EAAE,GAAGC,GAAO,CAAC7B,CAAQ,GAAGnQ,MAAUgS;AAAA,QAAA;AAAA,MAC3D,EACA;AAAA,IAAA;AAAA,EAEN,GAEMC,KAAsB,CAACL,GAAaG,MAAe;AACvD,IAAA/W;AAAA,MAA2B,CAACsC,MAC1BqT,GAAerT,GAAMsU,GAAa,CAAC3c,OAAU;AAAA,QAC3C,GAAGA;AAAA,QACH,SAASA,EAAK,UAAU,CAAA,GAAI,OAAO,CAACid,GAAG7X,MAAUA,MAAU0X,CAAU;AAAA,MAAA,EACrE;AAAA,IAAA;AAAA,EAEN,GAEMI,KAAwB,CAACP,GAAaC,IAAe,OAAO;AAChE,IAAA9J;AAAA,MAAsB,CAACzK,MACrBA,KACI;AAAA,QACE,GAAGA;AAAA,QACH,QAAQ,CAAC,GAAIA,EAAK,UAAU,CAAA,GAAK,EAAE,cAAAuU,GAAc,YAAY,GAAA,CAAI;AAAA,MAAA;AAAA,IAEnE;AAAA,EAER,GAEMO,KAA2B,CAC/BR,GACAG,GACA5B,GACAnQ,MACG;AACH,IAAA+H;AAAA,MAAsB,CAACzK,MACrBA,KACI;AAAA,QACE,GAAGA;AAAA,QACH,SAASA,EAAK,UAAU,CAAA,GAAI;AAAA,UAAI,CAAC0U,GAAO3X,MACtCA,MAAU0X,IAAa,EAAE,GAAGC,GAAO,CAAC7B,CAAQ,GAAGnQ,MAAUgS;AAAA,QAAA;AAAA,MAC3D;AAAA,IAEF;AAAA,EAER,GAEMK,KAA2B,CAACT,GAAaG,MAAe;AAC5D,IAAAhK;AAAA,MAAsB,CAACzK,MACrBA,KACI;AAAA,QACE,GAAGA;AAAA,QACH,SAASA,EAAK,UAAU,CAAA,GAAI;AAAA,UAC1B,CAAC4U,GAAG7X,MAAUA,MAAU0X;AAAA,QAAA;AAAA,MAC1B;AAAA,IAEF;AAAA,EAER,GAEMO,KAA+B,CAACC,GAAaC,GAAU1G,MACvDyG,MAAgBnE,EAAgB,UAC3BqE,GAAkBD,GAAU1G,CAAQ,IAG3C,OAAO,OAAO3W,EAAyB,EAAE,SAASod,CAAW,KAC7DA,MAAgBnE,EAAgB,UAEzBsE,GAAiBH,CAAW,IAE9B,MAGHI,KAA8B,CAACvD,GAAOwD,OACzCxD,KAAS,CAAA,GAAI,KAAK,CAACna,MAEhBA,EAAK,SAASmZ,EAAgB,WAC9B,OAAOnZ,EAAK,EAAE,MAAM,OAAO2d,CAAS,IAE7B,KAEFD,GAA4B1d,EAAK,YAAY,CAAA,GAAI2d,CAAS,CAClE,GAEGC,KAA6B,CAACzD,GAAO0D,MAAa;AACtD,UAAMC,IAAaxX,GAAa6T,GAAO0D,CAAQ;AAC/C,SAAIC,KAAA,gBAAAA,EAAY,UAAS3E,EAAgB,QAAS,QAAO2E;AAEzD,QAAIC,IAAYF,GACZG,IAAWF;AAEf,WAAOC,KAAaA,MAAcE,MAAgB;AAChD,YAAMC,IAAaC,GAAmBhE,GAAO4D,CAAS;AACtD,UAAI,CAACG,KAAc,CAACA,EAAW,KAAM;AACrC,UAAIA,EAAW,KAAK,SAAS/E,EAAgB;AAC3C,eAAO+E,EAAW;AAEpB,MAAAF,IAAWE,EAAW,MACtBH,IAAYG,EAAW;AAAA,IACzB;AAEA,WAAOF,KAAYF;AAAA,EACrB,GAEMM,IAAiC,CAACC,GAAYC,MAC7CD,IACE;AAAA,IACL,GAAGA;AAAA,IACH,WAAWA,EAAW,YAAY,CAAA,GAAI;AAAA,MACpC,CAAClc,MACCA,EAAM,OAAOmc,KAAgBnc,EAAM,eAAemc;AAAA,IAAA;AAAA,EACtD,IANsB,MAUpBC,IAAoB,CAAC1H,GAAU2H,GAAYlB,GAAaC,MAAa;AACzE,IAAAxX,GAA2B,CAAC0Y,MAAe;AACzC,YAAMJ,IACJxH,MAAaoH,KAAiB,OAAO3X,GAAamY,GAAY5H,CAAQ,GAClE6H,IAAoBC;AAAA,QACxBH;AAAA,QACAlB;AAAA,QACAe;AAAA,MAAA;AAEF,UAAIK;AACF,eAAAvJ,GAAU,EAAE,MAAM,QAAQ,SAASuJ,GAAmB,GAC/CD;AAGT,UAAInB,MAAgBnE,EAAgB,WAAW,CAACoE;AAC9C,eAAOkB;AAET,UAAInB,MAAgBnE,EAAgB,WAAWoE,GAAU;AACvD,cAAMqB,IAAYhB,GAA2Ba,GAAY5H,CAAQ;AAEjE,YAAI6G,GADkBkB,IAAY,CAACA,CAAS,IAAIH,GACDlB,EAAS,EAAE;AACxD,iBAAApI,GAAU;AAAA,YACR,MAAM;AAAA,YACN,SAAS,WAAWoI,EAAS,IAAI;AAAA,UAAA,CAClC,GACMkB;AAAA,MAEX;AAEA,YAAMI,IAAYxB;AAAA,QAChBC;AAAA,QACAC;AAAA,QACA1G;AAAA,MAAA;AAEF,aAAKgI,IAEEC,GAAiBL,GAAY5H,GAAUgI,CAAS,IAFhCJ;AAAA,IAGzB,CAAC;AAAA,EACH,GAEMM,KAAsB,CAACzD,MAAW;AACtC,IAAAvV,GAA2B,CAACsC,MAAS2W,GAAe3W,GAAMiT,CAAM,CAAC,GAC7D7V,OAAoB6V,MACtB7B,GAAmB,IAAI,GACvB7G,GAA2B,EAAK,GAChCE,GAAsB,IAAI,IAExBzS,OAAiBib,KACnBhb,GAAgB,IAAI;AAAA,EAExB,GAEM2e,KAAkB,CAACvX,MAAU;AACjC,IAAA8R,GAAY9R,EAAM,OAAO,EAAE;AAAA,EAC7B,GAEMwX,KAAgBre;AAAA,IACpB,CAAC6G,MAAU;;AACT,YAAM,EAAE,QAAAC,GAAQ,MAAAC,EAAA,IAASF;AACzB,UAAI,CAACC,KAAU,CAACA,EAAO,KAAK,SAAS;AACnC,QAAA6R,GAAY,IAAI;AAChB;AAAA,MACF;AACA,YAAM2F,KAAW1d,IAAAmG,KAAA,gBAAAA,EAAM,KAAK,YAAX,gBAAAnG,EAAoB,MAC/B2d,KAAgB1d,IAAAkG,KAAA,gBAAAA,EAAM,KAAK,YAAX,gBAAAlG,EAAoB,WACpC2d,KAAkB1d,IAAAgG,EAAO,KAAK,YAAZ,gBAAAhG,EAAqB,WACvC2b,KAAc1b,KAAA+F,EAAO,KAAK,YAAZ,gBAAA/F,GAAqB;AAGzC,UAFA4X,GAAY,IAAI,GAGd9T,MAAgB,UAChB,CAACkC,KACD,OAAO,OAAO1H,EAAyB,EAAE,SAASod,CAAW,GAC7D;AACA,QAAAnI,GAAU;AAAA,UACR,MAAM;AAAA,UACN,SAAS,GAAGmI,CAAW;AAAA,QAAA,CACxB;AACD;AAAA,MACF;AAEA,UACE,CAAC1V,KACDlC,MAAgB,cAChB4X,MAAgBnE,EAAgB,SAChC;AACA,cAAMmG,IAAiB3X,EAAO,KAAK,QAAQ;AAC3C,YAAI,CAAC2X,EAAgB;AAErB,QAAAjL,GAAoB,CAAC2G,MAAe;AAClC,gBAAMuE,IAAiBvE,EAAW,YAAY,CAAA,GAExCwE,KAAkBD,KAAA,gBAAAA,EAAgB,aAAY,CAAA,GAE9CE,KAAa;AAAA,YACjB,IAAIH,EAAe;AAAA,YACnB,MAAMA,EAAe;AAAA,YACrB,YAAY,iBAAiBA,EAAe,EAAE,IAAI,OAAO,YAAY;AAAA,YACrE,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,IAAI,YAAYA,EAAe,EAAE;AAAA,cACjC,SAASA,EAAe;AAAA,cACxB,MAAM;AAAA,YAAA;AAAA,UACR;AAGF,iBAAO;AAAA,YACL,GAAGtE;AAAA,YACH,UAAU;AAAA,cACR,GAAGuE;AAAA,cACH,UAAU,CAAC,GAAGC,GAAiBC,EAAU;AAAA,YAAA;AAAA,UAC3C;AAAA,QAEJ,CAAC;AACD;AAAA,MACF;AACA,WAAI7X,KAAA,gBAAAA,EAAM,QAAO,cAAc;AAC7B,cAAM8X,IAAqB/X,EAAO,IAC5BgY,IAAkBhY,EAAO,KAAK,QAAQ;AAC5C,YAAIjC,MAAgB,QAAQ;AAC1B,UAAAK;AAAA,YAA2B,CAACsC,MAC1B2W,GAAe3W,GAAMqX,CAAkB;AAAA,UAAA;AAEzC;AAAA,QACF;AACA,QAAIpC,MAAgB,iBACdqC,IACF5Z;AAAA,UAA2B,CAAC0Y,MAC1BA,EAAW,IAAI,CAACmB,MAAS;AACvB,gBAAIA,EAAK,OAAOD,MAAmBC,KAAA,QAAAA,EAAM,WAAU;AACjD,oBAAMC,KAAcD,KAAA,gBAAAA,EAAM,SAAS;AAAA,gBACjC,CAAC7gB,OAAMA,GAAE,eAAe2gB;AAAA;AAE1B,qBAAO,EAAE,GAAGE,GAAM,UAAUC,GAAA;AAAA,YAC9B;AACA,mBAAOD;AAAA,UACT,CAAC;AAAA,QAAA,IAEMla,MAAgB,cACzB2O,GAAoB,CAAC2G,MAAe;AAClC,gBAAMuE,IAAiBvE,EAAW,YAAY,CAAA,GAGxC6E,OAFkBN,KAAA,gBAAAA,EAAgB,aAAY,CAAA,GAEhB;AAAA,YAClC,CAACxgB,OAAMA,GAAE,eAAe2gB;AAAA,UAAA;AAG1B,iBAAO;AAAA,YACL,GAAG1E;AAAA,YACH,UAAU;AAAA,cACR,GAAGuE;AAAA,cACH,UAAUM;AAAA,YAAA;AAAA,UACZ;AAAA,QAEJ,CAAC,KAGHvC,MAAgBnE,EAAgB,WAChCmE,MAAgBnE,EAAgB,eAEhCpT;AAAA,UAA2B,CAACsC,MAC1BA,EAAK,OAAO,CAACuX,MAASA,EAAK,OAAOjY,EAAO,EAAE;AAAA,QAAA;AAG/C;AAAA,MACF;AAEA,UACEjC,MAAgB,YAChB7D,KAAA8F,EAAO,KAAK,YAAZ,QAAA9F,GAAqB,yBACpBsd,MAAalf,OACZ2H,KAAA,gBAAAA,EAAM,QAAO,oBACbuX,MAAa,0BACf;AACA,YAAIA,MAAa,yBAAyB;AACxC,gBAAMtB,KAAWjW,EAAK,KAAK,QAAQ,UAC7BkY,KAAe3B,GAAmB3D,IAAeqD,EAAQ;AAC/D,cAAI,CAACiC,GAAc;AACnB,gBAAMC,KAAuB3B;AAAA,YAC3B0B,GAAa;AAAA,YACbnY,EAAO;AAAA,UAAA,GAEH+W,KAAoBC;AAAA,YACxBmB,GAAa;AAAA,YACbxC;AAAA,YACAyC;AAAAA,UAAA;AAGF,cAAIrB,IAAmB;AACrB,YAAAvJ,GAAU,EAAE,MAAM,QAAQ,SAASuJ,IAAmB;AACtD;AAAA,UACF;AAEA,UAAA3Y;AAAA,YAA2B,CAACsC,OAC1B2X,GAAqB3X,IAAMV,EAAO,IAAIkW,EAAQ;AAAA,UAAA;AAEhD;AAAA,QACF;AAEA,cAAMhH,IACJsI,MAAalf,KACT2H,EAAK,KAAK,QAAQ,WAClBqW,IACAO,IACJW,MAAalf,KAAiB2H,EAAK,KAAK,QAAQ,aAAa,QACzDyW,IACJc,MAAalf,KAAiB2H,EAAK,KAAK,QAAQ,aAAa,MACzDmY,IAAuB3B;AAAA,UAC3BC;AAAA,UACA1W,EAAO;AAAA,QAAA,GAEH+W,KAAoBC;AAAA,UACxBH;AAAA,UACAlB;AAAA,UACAyC;AAAA,QAAA;AAGF,YAAIrB,IAAmB;AACrB,UAAAvJ,GAAU,EAAE,MAAM,QAAQ,SAASuJ,IAAmB;AACtD;AAAA,QACF;AAEA,QAAA3Y;AAAA,UAA2B,CAACsC,OAC1B4X,GAAiB5X,IAAMV,EAAO,IAAIkP,CAAQ;AAAA,QAAA;AAE5C;AAAA,MACF;AAEA,UAAInR,MAAgB,UAAUyZ,MAAa,yBAAyB;AAClE,cAAMtB,IAAWjW,EAAK,KAAK,QAAQ,UAC7BkY,IAAe3B,GAAmB3D,IAAeqD,CAAQ;AAC/D,YAAI,CAACiC,EAAc;AACnB,cAAMpB,IAAoBC;AAAA,UACxBmB,EAAa;AAAA,UACbxC;AAAA,UACAwC,EAAa;AAAA,QAAA;AAGf,YAAIpB,GAAmB;AACrB,UAAAvJ,GAAU,EAAE,MAAM,QAAQ,SAASuJ,GAAmB;AACtD;AAAA,QACF;AAEA,YACEpB,MAAgBnE,EAAgB,WAChCxR,EAAO,KAAK,QAAQ,MACpB;AACA,gBAAMiX,KAAYhB,GAA2BpD,IAAeqD,CAAQ;AAEpE,cACEH;AAAA,YAFoBkB,KAAY,CAACA,EAAS,IAAIpE;AAAA,YAI5C7S,EAAO,KAAK,QAAQ,KAAK;AAAA,UAAA,GAE3B;AACA,YAAAwN,GAAU;AAAA,cACR,MAAM;AAAA,cACN,SAAS,WAAWxN,EAAO,KAAK,QAAQ,KAAK,IAAI;AAAA,YAAA,CAClD;AACD;AAAA,UACF;AAAA,QACF;AAEA,cAAMkX,IAAYxB;AAAA,UAChBC;AAAA,UACA3V,EAAO,KAAK,QAAQ;AAAA,UACpBmY,EAAa;AAAA,QAAA;AAEf,YAAI,CAACjB,EAAW;AAChB,QAAA9Y;AAAA,UAA2B,CAACsC,OAC1B6X,GAAoB7X,IAAMwV,GAAUgB,CAAS;AAAA,QAAA;AAE/C;AAAA,MACF;AAEA,UACEnZ,MAAgB,WACfyZ,MAAalf,OAAkB2H,KAAA,gBAAAA,EAAM,QAAO,mBAC7C;AACA,cAAMiP,IACJsI,MAAalf,KACT2H,EAAK,KAAK,QAAQ,WAClBqW,IACAO,IACJW,MAAalf,KAAiB2H,EAAK,KAAK,QAAQ,aAAa,QACzDyW,IACJc,MAAalf,KAAiB2H,EAAK,KAAK,QAAQ,aAAa,MACzD8W,IAAoBC;AAAA,UACxBH;AAAA,UACAlB;AAAA,UACAe;AAAA,QAAA;AAGF,YAAIK,GAAmB;AACrB,UAAAvJ,GAAU,EAAE,MAAM,QAAQ,SAASuJ,GAAmB;AACtD;AAAA,QACF;AAEA,QAAAH;AAAA,UACE1H;AAAA,UACA2H;AAAA,UACAlB;AAAA,UACA3V,EAAO,KAAK,QAAQ;AAAA,QAAA;AAEtB;AAAA,MACF;AAEA,UAAI2V,MAAgB,kBAAkB6B,MAAa,gBAAgB;AACjE,YAAI,CAACE,KAAmB3Z,MAAgB,YAAY;AAClD,UAAA2O,GAAoB,CAAC2G,MAAe;AAClC,kBAAMuE,IAAiBvE,EAAW,YAAY,CAAA,GACxCwE,KAAkBD,KAAA,gBAAAA,EAAgB,aAAY,CAAA,GAE9CtX,IAAWuX,EAAgB;AAAA,cAC/B,CAACzgB,OAAMA,GAAE,eAAe4I,EAAO;AAAA,YAAA,GAE3BO,KAAWsX,EAAgB;AAAA,cAC/B,CAACzgB,OAAMA,GAAE,eAAe6I,EAAK;AAAA,YAAA;AAG/B,gBAAIK,MAAa,MAAMC,OAAa;AAClC,qBAAO8S;AAGT,kBAAM6E,KAAczX,GAAUoX,GAAiBvX,GAAUC,EAAQ;AAEjE,mBAAO;AAAA,cACL,GAAG8S;AAAA,cACH,UAAU;AAAA,gBACR,GAAGuE;AAAA,gBACH,UAAUM;AAAA,cAAA;AAAA,YACZ;AAAA,UAEJ,CAAC;AACD;AAAA,QACF;AACA,QAAIR,MAAoBD,KAAiBzX,EAAO,OAAOC,EAAK,MAC1D7B;AAAA,UAA2B,CAAC0Y,MAC1BA,EAAW,IAAI,CAACzW,MAAY;AAC1B,gBAAIA,EAAQ,OAAOqX,GAAiB;AAClC,oBAAMtV,IAAW/B,KAAA,gBAAAA,EAAS,UACpBC,IAAW8B,EAAS;AAAA,gBACxB,CAAChL,OAAMA,GAAE,eAAe4I,EAAO;AAAA,cAAA,GAE3BO,KAAW6B,EAAS;AAAA,gBACxB,CAAChL,OAAMA,GAAE,eAAe6I,EAAK;AAAA,cAAA;AAG/B,kBAAIK,MAAa,MAAMC,OAAa,GAAI,QAAOF;AAE/C,oBAAM6X,KAAczX,GAAU2B,GAAU9B,GAAUC,EAAQ;AAE1D,qBAAO,EAAE,GAAGF,GAAS,UAAU6X,GAAA;AAAA,YACjC;AACA,mBAAO7X;AAAA,UACT,CAAC;AAAA,QAAA;AAGL;AAAA,MACF;AAEA,UACEsV,MAAgBnE,EAAgB,SAChCgG,MAAahG,EAAgB,mBAC7B;AACA,cAAMgH,IAAexY,EAAO,KAAK,QAAQ,MACnCyX,KAAgBtd,KAAA8F,KAAA,gBAAAA,EAAM,KAAK,YAAX,gBAAA9F,GAAoB;AAE1C,QAAIqe,KAAgBf,KAClB/K,GAAoB,CAAC2G,MAAe;AAClC,gBAAMR,IAAgBQ,EAAWtV,CAAW,KAAK,CAAA,GAE3C0a,KAAqB5F,EAAc;AAAA,YACvC,CAAC7D,OAAMA,GAAE,OAAOyI;AAAAA,UAAA;AAElB,cAAIgB,OAAuB,GAAI,QAAOpF;AAEtC,gBAAMqF,KAAgB7F,EAAc4F,EAAkB,GAChDE,KAAiB,OAAOH,EAAa,IAAI;AAK/C,cAJoBE,MAAA,gBAAAA,GAAe,SAAS,KAAK,CAACthB,OACzCA,GAAE,SAAS,WAAW,OAAOA,GAAE,IAAI,MAAMuhB;AAIhD,mBAAAnL,GAAU;AAAA,cACR,MAAM;AAAA,cACN,SAAS,SAASgL,EAAa,IAAI;AAAA,YAAA,CACpC,GACMnF;AAET,gBAAMuF,KAAe;AAAA,YACnB,IAAIJ,EAAa;AAAA,YACjB,MAAMA,EAAa;AAAA,YACnB,YAAY,GAAGf,CAAa,UAAUe,EAAa,IAAI,IAAI,OAAO,WAAA,CAAY;AAAA,YAC9E,MAAM;AAAA,YACN,OAAOA,EAAa,SAAS,CAAA;AAAA,YAC7B,MAAMA,EAAa;AAAA,UAAA,GAGfK,KAAiB;AAAA,YACrB,GAAGH;AAAA,YACH,UAAU,CAAC,GAAGA,GAAc,UAAUE,EAAY;AAAA,UAAA,GAG9CE,KAAY,CAAC,GAAGjG,CAAa;AACnC,iBAAAiG,GAAUL,EAAkB,IAAII,IAEzB,EAAE,GAAGxF,GAAY,CAACtV,CAAW,GAAG+a,GAAA;AAAA,QACzC,CAAC;AAEH;AAAA,MACF;AACA,UACEnD,MAAgBnE,EAAgB,WAChCgG,MAAahG,EAAgB,mBAC7B;AACA,cAAMmG,IAAiB3X,EAAO,KAAK,QAAQ,MACrCyX,KAAgBrd,KAAA6F,KAAA,gBAAAA,EAAM,KAAK,YAAX,gBAAA7F,GAAoB;AAE1C,QAAIud,KAAkBF,KACpB/K,GAAoB,CAAC2G,MAAe;AAClC,gBAAMR,IAAgBQ,EAAWtV,CAAW,KAAK,CAAA,GAC3C0a,KAAqB5F,EAAc;AAAA,YACvC,CAAC7D,OAAMA,GAAE,OAAOyI;AAAAA,UAAA;AAGlB,cAAIgB,OAAuB,GAAI,QAAOpF;AAEtC,gBAAMqF,KAAgB7F,EAAc4F,EAAkB;AAKtD,cAHoBC,MAAA,gBAAAA,GAAe,SAAS;AAAA,YAC1C,CAACthB,OAAMA,GAAE,OAAOugB,EAAe,MAAMvgB,GAAE,SAAS;AAAA;AAGhD,mBAAAoW,GAAU;AAAA,cACR,MAAM;AAAA,cACN,SAAS,WAAWmK,EAAe,IAAI;AAAA,YAAA,CACxC,GACMtE;AAGT,gBAAMyE,KAAa;AAAA,YACjB,IAAIH,EAAe;AAAA,YACnB,MAAMA,EAAe;AAAA,YACrB,YAAY,GAAGF,CAAa,IAAIE,EAAe,EAAE,IAAI,OAAO,WAAA,CAAY;AAAA,YACxE,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,IAAI,YAAYA,EAAe,EAAE;AAAA,cACjC,SAASA,EAAe;AAAA,cACxB,MAAM;AAAA,YAAA;AAAA,UACR,GAGIkB,KAAiB;AAAA,YACrB,GAAGH;AAAA,YACH,UAAU,CAAC,GAAGA,GAAc,UAAUZ,EAAU;AAAA,UAAA,GAG5CgB,KAAY,CAAC,GAAGjG,CAAa;AACnC,iBAAAiG,GAAUL,EAAkB,IAAII,IACzB,EAAE,GAAGxF,GAAY,CAACtV,CAAW,GAAG+a,GAAA;AAAA,QACzC,CAAC;AAEH;AAAA,MACF;AAEA,UAAI,GAAAxe,KAAA0F,EAAO,KAAK,YAAZ,QAAA1F,GAAqB,YAAY,GAACD,KAAA4F,KAAA,gBAAAA,EAAM,KAAK,YAAX,QAAA5F,GAAoB,cACpD4F,KAAA,gBAAAA,EAAM,QAAO,mBAKnB;AAAA,aACE1F,KAAA0F,KAAA,gBAAAA,EAAM,KAAK,YAAX,QAAA1F,GAAoB,cACpBG,KAAAsF,EAAO,KAAK,YAAZ,gBAAAtF,GAAqB,UAAS8W,EAAgB,WAE1CxR,EAAO,OAAOC,EAAK,IAAI;AACzB,UAAA7B,GAA2B,CAACsC,MAAS;AACnC,kBAAMqY,IAAYrY,EAAK;AAAA,cACrB,CAACsO,OAAMA,GAAE,SAASwC,EAAgB;AAAA,YAAA,GAE9BwH,IAAetY,EAAK;AAAA,cACxB,CAACsO,OAAMA,GAAE,SAASwC,EAAgB;AAAA,YAAA,GAG9ByH,IAAmBD,EAAa;AAAA,cACpC,CAACf,OAASA,GAAK,OAAOjY,EAAO;AAAA,YAAA,GAEzBkZ,KAAmBF,EAAa;AAAA,cACpC,CAACf,OAASA,GAAK,OAAOhY,EAAK;AAAA,YAAA;AAG7B,gBAAIgZ,MAAqB,MAAMC,OAAqB;AAClD,qBAAOxY;AAST,gBAAIyY,KANoB1Y;AAAA,cACtBuY;AAAA,cACAC;AAAA,cACAC;AAAA,YAAA;AAIF,mBAAIH,MACFI,KAAc,CAACJ,GAAW,GAAGI,EAAW,IAGnCA;AAAA,UACT,CAAC;AACD;AAAA,QACF;AAGF,aAAIlZ,KAAA,gBAAAA,EAAM,QAAO,oBAAoB0V,GAAa;AAChD,gBAAMyD,KAAiBxe,KAAAqF,EAAK,KAAK,YAAV,gBAAArF,GAAmB;AAC1C,cAAIwe,MAAmB,2BAA2B;AAChD,gBAAIzD,MAAgBnE,EAAgB,OAAO;AACzC,cAAAhE,GAAU;AAAA,gBACR,MAAM;AAAA,gBACN,SAAS;AAAA,cAAA,CACV;AACD;AAAA,YACF;AAEA,gBAAImI,MAAgBnE,EAAgB,SAAS;AAC3C,oBAAMmG,IAAiB3X,EAAO,KAAK,QAAQ;AAC3C,kBAAI,CAAC2X,EAAgB;AAErB,cAAAjL,GAAoB,CAAC2G,OAAgB;AAAA,gBACnC,GAAGA;AAAA,gBACH,UAAU;AAAA,kBACR,GAAGA,EAAW;AAAA,kBACd,UAAU;AAAA,oBACR,GAAGA,EAAW,SAAS;AAAA,oBACvB;AAAA,sBACE,IAAIsE,EAAe;AAAA,sBACnB,MAAMA,EAAe;AAAA,sBACrB,YAAY,iBAAiBA,EAAe,EAAE,IAAI,OAAO,YAAY;AAAA,sBACrE,MAAM;AAAA,sBACN,MAAM;AAAA,wBACJ,IAAI,YAAYA,EAAe,EAAE;AAAA,wBACjC,SAASA,EAAe;AAAA,wBACxB,MAAM;AAAA,sBAAA;AAAA,oBACR;AAAA,kBACF;AAAA,gBACF;AAAA,cACF,EACA;AACF;AAAA,YACF;AAAA,UACF;AAEA,eACE7c,KAAAkF,EAAO,KAAK,YAAZ,QAAAlF,GAAqB,YACrBse,MAAmB;AAEnB;AAEF,cAAIA,MAAmB,yBAAyB;AAC9C,YAAAhb,GAA2B,CAACsC,MAAS;AACnC,kBAAIiV,MAAgBnE,EAAgB;AAIlC,uBAH+B9Q,EAAK;AAAA,kBAClC,CAACuX,OAASA,GAAK,SAASzG,EAAgB;AAAA,gBAAA,KAGxChE,GAAU;AAAA,kBACR,MAAM;AAAA,kBACN,SAAS;AAAA,gBAAA,CACV,GACM9M,KAOF,CALc;AAAA,kBACnB,IAAI,QAAQ,KAAK,IAAA,CAAK;AAAA,kBACtB,MAAM8Q,EAAgB;AAAA,kBACtB,WAAW;AAAA,gBAAA,GAES,GAAG9Q,CAAI;AAC/B,kBAAWiV,MAAgBnE,EAAgB,SAAS;AAClD,sBAAM6H,IAAe;AAAA,kBACnB,IAAI,QAAQ,KAAK,IAAA,CAAK;AAAA,kBACtB,MAAM1D;AAAA,kBACN,OAAO;AAAA,kBACP,UAAU,CAAA;AAAA,gBAAC;AAEb,uBAAO,CAAC,GAAGjV,GAAM2Y,CAAY;AAAA,cAC/B;AAEA,qBAAO3Y;AAAA,YACT,CAAC;AACD;AAAA,UACF;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MACEtC;AAAA,MACAsO;AAAA,MACA3O;AAAA,MACAyT;AAAA,MACAqB;AAAA,MACA4D;AAAA,MACAG;AAAA,MACAlB;AAAA,IAAA;AAAA,EACF,GAEI4D,KAAuB,SAEvBC,KAAyB,MAC7B,gBAAA3jB;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,OAAOyjB;AAAA,QACP,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAW;AAAA,MAAA;AAAA,MAGb,UAAA;AAAA,QAAA,gBAAAvjB;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,MAAMC;AAAA,YACN,OAAO,EAAE,aAAa,OAAO,OAAO,OAAA;AAAA,UAAO;AAAA,QAAA;AAAA,QAE7C,gBAAAF,EAACG,GAAA,EAAW,SAAQ,SAAQ,OAAM,iBAAgB,IAAI,EAAE,UAAU,KAAK,UAAA,YAAA,CAEvE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAIEsjB,KAAuB,MAC3B,gBAAAzjB;AAAA,IAACF;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,OAAOyjB;AAAA,QACP,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,OAAO;AAAA,MAAA;AAAA,MAGT,UAAA,gBAAAvjB,EAACG,KAAW,SAAQ,WAAU,IAAI,EAAE,YAAY,UAAU,UAAA,mBAAA,CAE1D;AAAA,IAAA;AAAA,EAAA,GAGEujB,KAAqB,CAAC,EAAE,SAAA1iB,EAAA,MAC5B,gBAAAhB,EAACuB,GAAA,EAAK,MAAI,IAAC,IAAI,GAAG,IAAI,GACpB,UAAA,gBAAA1B;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,SAAS;AAAA,QACT,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,QAAQ;AAAA,MAAA;AAAA,MAGT,UAAA;AAAA,QAAA6jB,GAAW3iB,EAAQ,IAAI;AAAA,QACxB,gBAAAhB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,IAAI;AAAA,cACF,IAAI;AAAA,cACJ,WAAW;AAAA,cACX,YAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU;AAAA,YAAA;AAAA,YAGX,UAAAa,EAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,MACX;AAAA,IAAA;AAAA,EAAA,GAEJ;AAEF,EAAA0iB,GAAmB,YAAY;AAAA,IAC7B,SAAStjB,EAAU;AAAA,EAAA;AAErB,QAAMwjB,KAAwB,CAAC,EAAE,SAAA5iB,QAqB7B,gBAAAnB;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,OAAO;AAAA,QACP,GAAG;AAAA,QACH,IAAI;AAAA,QACJ,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,IAAI;AAAA,QACJ,WAAW;AAAA,UACT,iBAAiB;AAAA,UACjB,aAAa;AAAA,QAAA;AAAA,MACf;AAAA,MAGD,UAAA;AAAA,SAxCyB,CAACoC,GAAU2hB,MAAS;AAChD,gBAAMC,IAAcH,GAAW3iB,EAAQ,MAAM,MAAM;AAEnD,iBAAI8iB,KAAeA,EAAY,SAAShkB,IAC/BN,GAAM,aAAaskB,GAAa;AAAA,YACrC,IAAI;AAAA,cACF,GAAGA,EAAY,MAAM;AAAA,cACrB,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,aAAa;AAAA,YAAA;AAAA,UACf,CACD,IAGD,gBAAA9jB,EAACF,GAAA,EAAI,IAAI,EAAE,IAAI,OAAO,SAAS,QAAQ,YAAY,SAAA,GAChD,UAAA6jB,GAAWzhB,GAAU2hB,CAAI,GAC5B;AAAA,QAEJ,GAsB2B7iB,EAAQ,MAAM,MAAM;AAAA,QAE3C,gBAAAhB;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,IAAI,EAAE,YAAY,UAAU,OAAO,OAAA;AAAA,YAElC,UAAAa,KAAA,gBAAAA,EAAS;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAIN,EAAA4iB,GAAsB,YAAY;AAAA,IAChC,SAASxjB,EAAU;AAAA,EAAA;AAErB,QAAM2jB,KAAsB,CAAClI,MAAa;AAQxC,UAAMmI,IAPkBvP,GAAgB,QAAQ,CAACrL,MAC3CA,EAAK,SAASqS,EAAgB,QACzB,CAACrS,GAAM,GAAGA,EAAK,KAAK,IAEtB,CAACA,CAAI,CACb,EAEkC;AAAA,MACjC,CAAC/H,OAAOA,EAAE,QAAQA,EAAE,QAAQwa;AAAAA,IAAA;AAG9B,QAAImI,GAAY;AACd,UAAIC;AAEJ,aAAID,EAAW,OACbC,IAAWD,EAAW,OACbA,EAAW,QACpBC,IAAWxI,EAAgB,QAE3BwI,IAAWxI,EAAgB,SAGtB;AAAA,QACL,MAAMwI;AAAA,QACN,MAAMD;AAAA,MAAA;AAAA,IAEV;AACA,UAAME,IAAiB7H,MAAA,gBAAAA,GAAkB;AAAA,MACvC,CAAChb,MAAMA,EAAE,eAAewa;AAAAA;AAE1B,QAAIqI;AACF,aAAO,EAAE,MAAM,gBAAgB,MAAMA,EAAA;AAEvC,UAAMC,IAAavb,GAAakU,IAAejB,CAAQ;AACvD,WAAIsI,IACK;AAAA,MACL,MACEA,EAAW,SAAS1I,EAAgB,UAChC,iBACA0I,EAAW;AAAA,MACjB,MAAMA;AAAA,IAAA,IAGH;AAAA,EACT,GACMC,KAAsB,CAACvI,MAAa;AACxC,UAAMjQ,IAAYmY,GAAoBlI,CAAQ;AAC9C,WAAKjQ,IAEDA,EAAU,SAAS6P,EAAgB,+BAC7B+H,IAAA,EAAuB,IAE7B5X,EAAU,SAAS6P,EAAgB,4BAC7BgI,IAAA,EAAqB,IAE3B7X,EAAU,SAAS6P,EAAgB,UAC9B,gBAAAzb,EAAC4jB,IAAA,EAAsB,SAAShY,EAAU,KAAA,CAAM,IAErDA,EAAU,SAAS6P,EAAgB,QAC9B,gBAAAzb,EAAC0jB,IAAA,EAAmB,SAAS9X,EAAU,KAAA,CAAM,IAElDA,EAAU,SAAS,iBACd,gBAAA5L,EAAC0jB,IAAA,EAAmB,SAAS9X,EAAU,KAAA,CAAM,IAE/C,OAjBgB;AAAA,EAkBzB,GACMyY,KAAqBzT,GAAQ,MAAM;AACvC,QAAI,CAACiL,EAAU,QAAO;AAEtB,UAAMyI,IAAqBxH,GAAc;AAAA,MACvC,CAACoF,MAASA,EAAK,OAAOrG;AAAA,IAAA,GAGlB0I,IAAwBzH,GAAc;AAAA,MAAK,CAACoF;;AAChD,gBAAAne,IAAAme,KAAA,gBAAAA,EAAM,aAAN,gBAAAne,EAAgB,KAAK,CAAC1C,MAAMA,EAAE,eAAewa;AAAA;AAAA,IAAQ,GAGjD2I,IAA+BnI,MAAA,gBAAAA,GAAkB;AAAA,MACrD,CAAChb,MAAMA,EAAE,eAAewa;AAAA;AAG1B,WACEyI,KACAC,KACAC;AAAA,EAEJ,GAAG,CAAC3I,GAAUiB,IAAeT,EAAgB,CAAC,GACxCoI,KAAqB3H,GAAc,IAAI,CAAC7D,MAAMA,EAAE,EAAE,GAClDyL,KAA2B,CAACC,MAAS;;AACzC,UAAM/E,KAAc5b,KAAAD,IAAA4gB,EAAK,WAAL,gBAAA5gB,EAAa,KAAK,YAAlB,gBAAAC,EAA2B;AAE/C,QAAI4b,MAAgBnE,EAAgB,WAAWzT,MAAgB,QAAQ;AACrE,YAAM4c,IAAsBD,EAAK,oBAAoB;AAAA,QACnD,CAACE,MAAA;;AAAc,mBAAA9gB,IAAA8gB,EAAU,KAAK,YAAf,gBAAA9gB,EAAwB,UAAS;AAAA;AAAA,MAAA;AAGlD,aAAO+gB,GAAiB;AAAA,QACtB,GAAGH;AAAA,QACH,qBAAAC;AAAA,MAAA,CACD;AAAA,IACH;AAEA,QAAI5c,MAAgB,QAAQ;AAC1B,YAAM+c,IAAuBJ,EAAK,oBAAoB;AAAA,QACpD,CAACE,MAAc;;AACb,gBAAMG,KAAajhB,IAAA8gB,EAAU,KAAK,YAAf,gBAAA9gB,EAAwB;AAC3C,iBACEihB,MAAeziB,MACfyiB,MAAe,2BACfH,EAAU,OAAO;AAAA,QAErB;AAAA,MAAA;AAGF,aAAOC,GAAiB;AAAA,QACtB,GAAGH;AAAA,QACH,qBAAqBI;AAAA,MAAA,CACtB;AAAA,IACH;AAEA,QAAInF,MAAgBnE,EAAgB,SAAS;AAC3C,YAAMwJ,IAA0BN,EAAK,oBAAoB;AAAA,QACvD,CAACE,MAAc;;AAEb,iBADI,EAAAA,EAAU,OAAOF,EAAK,OAAO,QAC7B5gB,IAAA8gB,EAAU,KAAK,YAAf,gBAAA9gB,EAAwB,UAAS;AAAA,QAGvC;AAAA,MAAA;AAGF,aAAO+gB,GAAiB;AAAA,QACtB,GAAGH;AAAA,QACH,qBAAqBM;AAAA,MAAA,CACtB;AAAA,IACH;AACA,WAAOC,GAAcP,CAAI;AAAA,EAC3B;AAEA,SACE,gBAAA9kB,EAAA8L,IAAA,EACE,UAAA;AAAA,IAAA,gBAAA3L,EAACtB,GAAgB,UAAhB,EACC,UAAA,gBAAAsB,EAAC,QAAA,EAAK,YAAU,IAAC,UAAU2V,EAAS,aAAa4F,EAAQ,GACvD,UAAA,gBAAA1b;AAAA,MAACgM;AAAA,MAAA;AAAA,QACC,aAAa0V;AAAA,QACb,WAAWC;AAAA,QACX,oBAAoBkD;AAAA,QAEpB,UAAA;AAAA,UAAA,gBAAA7kB,EAAC0B,GAAA,EAAK,WAAS,IAAC,SAAS,GACvB,UAAA;AAAA,YAAA,gBAAAvB,EAACuB,GAAA,EAAK,MAAM,EAAA,CAAG;AAAA,YACf,gBAAAvB;AAAA,cAACuB;AAAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,IAAI,EAAE,QAAQ,sBAAsB,WAAW,QAAQ,IAAI,EAAA;AAAA,gBAE3D,UAAA,gBAAA1B;AAAA,kBAAC0B;AAAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,QAAQ;AAAA,oBAAA;AAAA,oBAGV,UAAA;AAAA,sBAAA,gBAAA1B,EAAC0B,KAAK,WAAS,IAAC,IAAI,EAAE,gBAAgB,mBACpC,UAAA;AAAA,wBAAA,gBAAAvB,EAACuB,GAAA,EAAK,MAAM,EAAA,CAAG;AAAA,wBACf,gBAAAvB;AAAA,0BAACG;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,IAAI,EAAE,YAAY,QAAQ,YAAY,OAAO,IAAI,EAAA;AAAA,4BAClD,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAGD,gBAAAN,EAAC0B,GAAA,EAAK,WAAS,IAAC,SAAS,GACvB,UAAA;AAAA,0BAAA,gBAAAvB;AAAA,4BAACkP;AAAA,4BAAA;AAAA,8BACC,SAAQ;AAAA,8BACR,OAAM;AAAA,8BACN,IAAI,EAAE,UAAU,UAAU,QAAQ,OAAA;AAAA,8BAClC,MAAK;AAAA,8BACL,SAAS,MAAM;AACb,gCAAA8F,GAAiB,EAAI;AAAA,8BACvB;AAAA,8BACD,UAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAGD,gBAAAhV;AAAA,4BAACkP;AAAA,4BAAA;AAAA,8BACC,SAAQ;AAAA,8BACR,OAAM;AAAA,8BACN,IAAI,EAAE,UAAU,UAAU,QAAQ,OAAA;AAAA,8BAClC,MAAK;AAAA,8BACN,UAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAED,EAAA,CACF;AAAA,sBAAA,GACF;AAAA,sBACA,gBAAAlP;AAAA,wBAACuB;AAAAA,wBAAA;AAAA,0BACC,IAAI;AAAA,4BACF,QAAQ;AAAA,4BACR,WAAW;AAAA,4BACX,WAAW;AAAA,0BAAA;AAAA,0BAGb,UAAA,gBAAAvB;AAAA,4BAACoB;AAAA,4BAAA;AAAA,8BACC,OAAOqjB;AAAA,8BACP,UAAUnjB;AAAA,8BAEV,UAAA,gBAAAtB;AAAA,gCAAC2H;AAAA,gCAAA;AAAA,kCACC,WAAAC;AAAA,kCACA,kBAAkBkV;AAAA,kCAClB,gBAAgBrB;AAAA,kCAChB,oBAAoBkC;AAAA,kCACpB,iBAAA5V;AAAA,kCACA,aAAAC;AAAA,kCACA,iBAAAC;AAAA,kCACA,UAAUiM;AAAA,kCACV,cAAA/L;AAAA,kCACA,cAAcuT;AAAA,kCACd,YAAAhb;AAAA,kCACA,4BAAA2H;AAAA,kCACA,mBACErE,KAAAsS,GAAiB,aAAjB,gBAAAtS,GAA2B,aAAY,CAAA;AAAA,kCAEzC,cAAAuE;AAAA,kCACA,wBAAAC;AAAA,kCACA,cAAc6Y;AAAA,kCACd,cAAA1e;AAAA,kCACA,iBAAAC;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACD;AAAA,0BAAA;AAAA,wBACH;AAAA,sBAAA;AAAA,oBACF;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,YAEF,gBAAA5C,EAACuB,GAAA,EAAK,MAAM,EAAA,CAAG;AAAA,YACf,gBAAA1B;AAAA,cAAC0B;AAAAA,cAAA;AAAA,gBACC,MAAM;AAAA,gBACN,IAAI,EAAE,QAAQ,sBAAsB,WAAW,QAAQ,IAAI,EAAA;AAAA,gBAE3D,UAAA;AAAA,kBAAA,gBAAAvB,EAACuB,GAAA,EAAK,MAAM,IACV,UAAA,gBAAA1B,EAAC0M,IAAA,EAAM,IAAI,EAAE,SAAS,OAAO,QAAQ,UAAA,GACnC,UAAA;AAAA,oBAAA,gBAAAvM,EAACuB,GAAA,EAAK,WAAU,gCAA+B,WAAS,IACtD,UAAA,gBAAAvB;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,IAAI,EAAE,YAAY,QAAQ,YAAY,MAAA;AAAA,wBACvC,UAAA;AAAA,sBAAA;AAAA,oBAAA,GAGH;AAAA,oBACA,gBAAAN,EAAC0B,GAAA,EAAK,WAAS,IACb,UAAA;AAAA,sBAAA,gBAAAvB,EAACuB,GAAA,EAAK,MAAM,IACV,UAAA,gBAAA1B;AAAA,wBAACyL;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,WAAU;AAAA,0BAEV,UAAA;AAAA,4BAAA,gBAAAzL,EAACM,GAAA,EAAW,SAAQ,SAAQ,UAAA;AAAA,8BAAA;AAAA,8BAE1B,gBAAAH,EAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA,KAAC;AAAA,8BAAO;AAAA,4BAAA,GAC9C;AAAA,4BACA,gBAAAA,EAACF,GAAA,EAAI,WAAU,gBACb,UAAA,gBAAAE;AAAA,8BAACmlB;AAAA,8BAAA;AAAA,gCACC,SAASxP,EAAS;AAAA,gCAClB,MAAK;AAAA,gCACL,IAAG;AAAA,gCACH,MAAK;AAAA,gCACL,SAAS5I,KAAa,CAAA;AAAA,gCACtB,UAAUiH;AAAA,gCACV,aAAY;AAAA,gCACZ,aAAY;AAAA,gCACZ,QAAQ2B,EAAS,UAAU;AAAA,gCAC3B,IAAI,EAAE,QAAQ,QAAQ,IAAI,EAAA;AAAA,gCAC1B,kBAAkB,EAAA3B;AAAA,gCAClB,aAAY;AAAA,gCACZ,UAAU,CAACjU,MAAMmW,GAAWnW,EAAE,OAAO,KAAK;AAAA,8BAAA;AAAA,4BAAA,EAC5C,CACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,GAEJ;AAAA,sBACA,gBAAAC,EAACuB,GAAA,EAAK,MAAM,IACV,UAAA,gBAAA1B;AAAA,wBAACyL;AAAA,wBAAA;AAAA,0BACC,SAAQ;AAAA,0BACR,WAAU;AAAA,0BAEV,UAAA;AAAA,4BAAA,gBAAAtL,EAACG,GAAA,EAAW,SAAQ,SAAQ,UAAA,0BAE5B;AAAA,4BACA,gBAAAH,EAACF,GAAA,EAAI,WAAU,gBACb,UAAA,gBAAAE;AAAA,8BAAColB;AAAA,8BAAA;AAAA,gCACC,SAASzP,EAAS,MAAM,sBAAsB;AAAA,gCAC9C,UAAU,CAAC5V,MACT4V,EAAS;AAAA,kCACP;AAAA,kCACA5V,EAAE,OAAO;AAAA,gCAAA;AAAA,gCAGb,IAAI;AAAA,kCACF,uCAAuC;AAAA,oCACrC,OAAO;AAAA,oCACP,WAAW;AAAA,sCACT,iBAAiB;AAAA,oCAAA;AAAA,kCACnB;AAAA,kCAEF,0DACE;AAAA,oCACE,iBAAiB;AAAA,oCACjB,SAAS;AAAA,kCAAA;AAAA,gCACX;AAAA,8BACJ;AAAA,4BAAA,EACF,CACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,EACF,CACF;AAAA,oBAAA,EAAA,CACF;AAAA,kBAAA,EAAA,CACF,EAAA,CACF;AAAA,kBAEA,gBAAAC,EAACuB,GAAA,EAAK,MAAM,IACV,UAAA,gBAAA1B;AAAA,oBAAC0M;AAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,QAAQ;AAAA,wBACR,YAAY;AAAA,sBAAA;AAAA,sBAGd,UAAA;AAAA,wBAAA,gBAAAvM;AAAA,0BAACG;AAAA,0BAAA;AAAA,4BACC,SAAQ;AAAA,4BACR,IAAI,EAAE,YAAY,QAAQ,YAAY,OAAO,IAAI,EAAA;AAAA,4BAClD,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAID,gBAAAN;AAAA,0BAAC0B;AAAAA,0BAAA;AAAA,4BACC,WAAS;AAAA,4BACT,SAAS;AAAA,4BACT,gBAAe;AAAA,4BACf,IAAI,EAAE,GAAG,EAAA;AAAA,4BAET,UAAA;AAAA,8BAAA,gBAAAvB;AAAA,gCAACqlB;AAAA,gCAAA;AAAA,kCACC,IAAG;AAAA,kCACH,eAAe5J,EAAgB;AAAA,kCAE/B,UAAA,gBAAAzb,EAACuB,KAAK,MAAI,IAAC,IAAI,GAAG,IAAI,GAAG,MAAM,GAC7B,UAAA,gBAAA1B;AAAA,oCAACC;AAAAA,oCAAA;AAAA,sCACC,IAAI;AAAA,wCACF,OAAO;AAAA,wCACP,QAAQ;AAAA,wCACR,GAAG;AAAA,wCACH,iBAAiB;AAAA,wCACjB,QAAQ;AAAA,wCACR,cAAc;AAAA,wCACd,WAAW;AAAA,wCACX,QAAQ;AAAA,wCACR,SAAS;AAAA,wCACT,YAAY;AAAA,wCACZ,gBAAgB;AAAA,wCAChB,OAAO;AAAA,wCACP,YAAY;AAAA,wCACZ,WAAW;AAAA,0CACT,iBAAiB;AAAA,0CACjB,aAAa;AAAA,0CACb,WAAW;AAAA,wCAAA;AAAA,sCACb;AAAA,sCAGF,UAAA;AAAA,wCAAA,gBAAAE;AAAA,0CAACqL;AAAA,0CAAA;AAAA,4CACC,UAAS;AAAA,4CACT,OAAO,EAAE,UAAU,UAAU,aAAa,MAAA;AAAA,0CAAM;AAAA,wCAAA;AAAA,wCAGlD,gBAAArL;AAAA,0CAACG;AAAA,0CAAA;AAAA,4CACC,SAAQ;AAAA,4CACR,IAAI,EAAE,YAAY,QAAQ,YAAY,EAAA;AAAA,4CACvC,UAAA;AAAA,0CAAA;AAAA,wCAAA;AAAA,sCAED;AAAA,oCAAA;AAAA,kCAAA,EACF,CACF;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAEF,gBAAAH;AAAA,gCAACqlB;AAAA,gCAAA;AAAA,kCACC,IAAG;AAAA,kCACH,eAAe5J,EAAgB;AAAA,kCAE/B,UAAA,gBAAAzb,EAACuB,KAAK,MAAI,IAAC,IAAI,GAAG,IAAI,GAAG,MAAM,GAC7B,UAAA,gBAAA1B;AAAA,oCAACC;AAAAA,oCAAA;AAAA,sCACC,IAAI;AAAA,wCACF,OAAO;AAAA,wCACP,QAAQ;AAAA,wCACR,GAAG;AAAA,wCACH,iBAAiB;AAAA,wCACjB,QAAQ;AAAA,wCACR,cAAc;AAAA,wCACd,WAAW;AAAA,wCACX,QAAQ;AAAA,wCACR,SAAS;AAAA,wCACT,YAAY;AAAA,wCACZ,gBAAgB;AAAA,wCAChB,OAAO;AAAA,wCACP,YAAY;AAAA,wCACZ,WAAW;AAAA,0CACT,iBAAiB;AAAA,0CACjB,aAAa;AAAA,0CACb,WAAW;AAAA,wCAAA;AAAA,sCACb;AAAA,sCAGF,UAAA;AAAA,wCAAA,gBAAAE;AAAA,0CAACqL;AAAA,0CAAA;AAAA,4CACC,UAAS;AAAA,4CACT,OAAO,EAAE,UAAU,UAAU,aAAa,MAAA;AAAA,0CAAM;AAAA,wCAAA;AAAA,wCAGlD,gBAAArL;AAAA,0CAACG;AAAA,0CAAA;AAAA,4CACC,SAAQ;AAAA,4CACR,IAAI,EAAE,YAAY,QAAQ,YAAY,EAAA;AAAA,4CACvC,UAAA;AAAA,0CAAA;AAAA,wCAAA;AAAA,sCAED;AAAA,oCAAA;AAAA,kCAAA,EACF,CACF;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAED;AAAA,gCACC;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMsb,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,gCAER;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMA,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,gCAER;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMA,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,gCAER;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMA,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,gCAER;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMA,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,gCAER;AAAA,kCACE,IAAI;AAAA,kCACJ,MAAMA,EAAgB;AAAA,kCACtB,OAAO;AAAA,kCACP,MAAM;AAAA,gCAAA;AAAA,8BACR,EACA,IAAI,CAAC7P,MACL,gBAAA5L;AAAA,gCAACqlB;AAAA,gCAAA;AAAA,kCAEC,IAAIzZ,EAAU;AAAA,kCACd,eAAeA,EAAU;AAAA,kCAEzB,UAAA,gBAAA5L,EAACuB,KAAK,MAAI,IAAC,IAAI,GAAG,IAAI,GAAG,MAAM,GAC7B,UAAA,gBAAA1B;AAAA,oCAACC;AAAAA,oCAAA;AAAA,sCACC,IAAI;AAAA,wCACF,OAAO;AAAA,wCACP,QAAQ;AAAA,wCACR,GAAG;AAAA,wCACH,iBAAiB;AAAA,wCACjB,QAAQ;AAAA,wCACR,cAAc;AAAA,wCACd,WAAW;AAAA,wCACX,QAAQ;AAAA,wCACR,SAAS;AAAA,wCACT,YAAY;AAAA,wCACZ,gBAAgB;AAAA,wCAChB,OAAO;AAAA,sCAAA;AAAA,sCAGT,UAAA;AAAA,wCAAA,gBAAAE;AAAA,0CAACqL;AAAA,0CAAA;AAAA,4CACC,UAAUO,EAAU;AAAA,4CACpB,OAAO;AAAA,8CACL,UAAU;AAAA,8CACV,aAAa;AAAA,4CAAA;AAAA,0CACf;AAAA,wCAAA;AAAA,wCAEF,gBAAA5L;AAAA,0CAACG;AAAA,0CAAA;AAAA,4CACC,SAAQ;AAAA,4CACR,IAAI,EAAE,YAAY,QAAQ,YAAY,EAAA;AAAA,4CAErC,UAAAyL,EAAU;AAAA,0CAAA;AAAA,wCAAA;AAAA,sCACb;AAAA,oCAAA;AAAA,kCAAA,EACF,CACF;AAAA,gCAAA;AAAA,gCAnCKA,EAAU;AAAA,8BAAA,CAqClB;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEH,gBAAA5L,EAACuB,GAAA,EACC,UAAA,gBAAAvB,EAACslB,IAAA,EAAU,oBAAAjB,IAAwC,GACrD;AAAA,0CACC5X,IAAA,EAAQ,IAAI,EAAE,IAAI,KAAK;AAAA,wBACxB,gBAAAzM,EAACuB,GAAA,EAAK,MAAM,IACV,UAAA,gBAAA1B;AAAA,0BAACC;AAAAA,0BAAA;AAAA,4BACC,IAAI;AAAA,8BACF,SAAS;AAAA,8BACT,QAAQ;AAAA,8BACR,YAAY;AAAA,4BAAA;AAAA,4BAGd,UAAA;AAAA,8BAAA,gBAAAE;AAAA,gCAACG;AAAA,gCAAA;AAAA,kCACC,SAAQ;AAAA,kCACR,IAAI,EAAE,YAAY,QAAQ,YAAY,OAAO,IAAI,EAAA;AAAA,kCAClD,UAAA;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAID,gBAAAH;AAAA,gCAACiO;AAAA,gCAAA;AAAA,kCACC,WAAS;AAAA,kCACT,MAAK;AAAA,kCACL,aAAY;AAAA,kCACZ,SAAQ;AAAA,kCACR,IAAI,EAAE,IAAI,GAAG,IAAI,EAAA;AAAA,kCACjB,OAAOiO;AAAA,kCACP,UAAU,CAACnc,MAAMoc,GAAcpc,EAAE,OAAO,KAAK;AAAA,kCAC7C,YAAY;AAAA,oCACV,kCACGiT,IAAA,EAAe,UAAS,SACvB,UAAA,gBAAAhT,EAACqL,IAAA,EAAiB,UAAS,oBAAA,CAAoB,EAAA,CACjD;AAAA,kCAAA;AAAA,gCAEJ;AAAA,8BAAA;AAAA,8BAEF,gBAAArL;AAAA,gCAACF;AAAAA,gCAAA;AAAA,kCACC,IAAI;AAAA,oCACF,UAAU;AAAA,oCACV,WAAW;AAAA,oCACX,SAAS;AAAA,kCAAA;AAAA,kCAGX,UAAA,gBAAAD;AAAA,oCAAC0B;AAAAA,oCAAA;AAAA,sCACC,WAAS;AAAA,sCACT,WAAU;AAAA,sCACV,SAAS;AAAA,sCACT,IAAI,EAAE,IAAI,EAAA;AAAA,sCAET,UAAA;AAAA,wCAAA2b,GAAgB,SAAS,KACxB,gBAAAld;AAAA,0CAACuB;AAAAA,0CAAA;AAAA,4CACC,MAAI;AAAA,4CACJ,IAAI;AAAA,4CACJ,IAAI;AAAA,8CACF,IAAI;AAAA,4CAAA;AAAA,4CAGN,UAAA,gBAAA1B;AAAA,8CAAC0lB;AAAA,8CAAA;AAAA,gDACC,IAAI;AAAA,kDACF,YAAY,EAAE,SAAS,OAAA;AAAA,kDACvB,WAAW;AAAA,kDACX,QAAQ;AAAA,kDACR,cAAc;AAAA,kDACd,iBAAiB;AAAA,gDAAA;AAAA,gDAEnB,UAAU5Q;AAAA,gDACV,UAAU,MACRC,GAAwB,CAACjK,MAAS,CAACA,CAAI;AAAA,gDAEzC,gBAAc;AAAA,gDAEd,UAAA;AAAA,kDAAA,gBAAA3K;AAAA,oDAACwlB;AAAA,oDAAA;AAAA,sDACC,YACE,gBAAAxlB;AAAA,wDAACqL;AAAA,wDAAA;AAAA,0DACC,UAAU;AAAA,0DACV,OAAO,EAAE,OAAO,UAAA;AAAA,wDAAU;AAAA,sDAAA;AAAA,sDAG9B,IAAI;AAAA,wDACF,WAAW;AAAA,wDACX,iBAAiB;AAAA,wDACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,wDAC9B,kCAAkC;AAAA,0DAChC,QAAQ;AAAA,wDAAA;AAAA,wDAEV,GAAG;AAAA,sDAAA;AAAA,sDAGL,UAAA,gBAAAxL;AAAA,wDAACM;AAAA,wDAAA;AAAA,0DACC,SAAQ;AAAA,0DACR,IAAI;AAAA,4DACF,YAAY;AAAA,4DACZ,OAAO;AAAA,0DAAA;AAAA,0DAGT,UAAA;AAAA,4DAAA,gBAAAH;AAAA,8DAACqL;AAAA,8DAAA;AAAA,gEACC,UAAS;AAAA,gEACT,OAAO,EAAE,aAAa,MAAA;AAAA,8DAAM;AAAA,4DAAA;AAAA,4DAC5B;AAAA,4DACY6R,GAAgB;AAAA,4DAAO;AAAA,0DAAA;AAAA,wDAAA;AAAA,sDAAA;AAAA,oDACvC;AAAA,kDAAA;AAAA,kDAEF,gBAAAld;AAAA,oDAACylB;AAAA,oDAAA;AAAA,sDACC,IAAI;AAAA,wDACF,GAAG;AAAA,wDACH,IAAI;AAAA,wDACJ,iBAAiB;AAAA,sDAAA;AAAA,sDAGnB,UAAA,gBAAAzlB;AAAA,wDAACuB;AAAAA,wDAAA;AAAA,0DACC,WAAS;AAAA,0DACT,SAAS;AAAA,0DACT,WAAU;AAAA,0DAET,UAAA2b,GAAgB,IAAI,CAAC9T,MACpB,gBAAApJ;AAAA,4DAAC0lB;AAAA,4DAAA;AAAA,8DAEC,MAAAtc;AAAA,8DACA,iBAAAqS;AAAA,8DACA,eAAA7a;AAAA,8DACA,eACEgc;AAAA,8DAEF,gBACEL;AAAA,4DAAA;AAAA,4DARGnT,EAAK;AAAA,0DAAA,CAWb;AAAA,wDAAA;AAAA,sDAAA;AAAA,oDACH;AAAA,kDAAA;AAAA,gDACF;AAAA,8CAAA;AAAA,4CAAA;AAAA,0CACF;AAAA,wCAAA;AAAA,wCAIH+T,GAAkB,SAAS,KAC1B,gBAAAnd,EAACuB,KAAK,MAAI,IAAC,IAAI,IACb,UAAA,gBAAA1B;AAAA,0CAAC0lB;AAAA,0CAAA;AAAA,4CACC,IAAI;AAAA,8CACF,IAAI;AAAA,8CACJ,YAAY,EAAE,SAAS,OAAA;AAAA,8CACvB,WAAW;AAAA,8CACX,QAAQ;AAAA,8CACR,IAAI;AAAA,8CACJ,cAAc;AAAA,8CACd,iBAAiB;AAAA,4CAAA;AAAA,4CAEnB,UAAU1Q;AAAA,4CACV,UAAU,MACRC,EAAwB,CAACnK,MAAS,CAACA,CAAI;AAAA,4CAEzC,gBAAc;AAAA,4CAEd,UAAA;AAAA,8CAAA,gBAAA3K;AAAA,gDAACwlB;AAAA,gDAAA;AAAA,kDACC,YACE,gBAAAxlB;AAAA,oDAACqL;AAAA,oDAAA;AAAA,sDACC,UAAU;AAAA,sDACV,OAAO,EAAE,OAAO,UAAA;AAAA,oDAAU;AAAA,kDAAA;AAAA,kDAG9B,IAAI;AAAA,oDACF,WAAW;AAAA,oDACX,iBAAiB;AAAA,oDACjB,WAAW,EAAE,iBAAiB,UAAA;AAAA,oDAC9B,kCAAkC;AAAA,sDAChC,QAAQ;AAAA,oDAAA;AAAA,oDAEV,GAAG;AAAA,kDAAA;AAAA,kDAGL,UAAA,gBAAAxL;AAAA,oDAACM;AAAA,oDAAA;AAAA,sDACC,SAAQ;AAAA,sDACR,IAAI;AAAA,wDACF,YAAY;AAAA,wDACZ,OAAO;AAAA,sDAAA;AAAA,sDAGT,UAAA;AAAA,wDAAA,gBAAAH;AAAA,0DAACqL;AAAA,0DAAA;AAAA,4DACC,UAAS;AAAA,4DACT,OAAO,EAAE,aAAa,MAAA;AAAA,0DAAM;AAAA,wDAAA;AAAA,wDAC5B;AAAA,wDAED8R,GAAkB;AAAA,wDAAO;AAAA,sDAAA;AAAA,oDAAA;AAAA,kDAAA;AAAA,gDAC5B;AAAA,8CAAA;AAAA,8CAEF,gBAAAnd;AAAA,gDAACylB;AAAA,gDAAA;AAAA,kDACC,IAAI;AAAA,oDACF,GAAG;AAAA,oDACH,IAAI;AAAA,oDACJ,iBACE;AAAA,kDAAA;AAAA,kDAGJ,UAAA,gBAAAzlB;AAAA,oDAACuB;AAAAA,oDAAA;AAAA,sDACC,WAAS;AAAA,sDACT,SAAS;AAAA,sDACT,WAAU;AAAA,sDAET,UAAA4b,GAAkB,IAAI,CAAC/T,MACtB,gBAAApJ;AAAA,wDAAC0lB;AAAA,wDAAA;AAAA,0DAEC,MAAAtc;AAAA,0DACA,iBAAAqS;AAAA,0DACA,gBACEc;AAAA,wDAAA;AAAA,wDAJGnT,EAAK;AAAA,sDAAA,CAOb;AAAA,oDAAA;AAAA,kDAAA;AAAA,gDACH;AAAA,8CAAA;AAAA,4CACF;AAAA,0CAAA;AAAA,wCAAA,GAEJ;AAAA,wCAGD8T,GAAgB,WAAW,KAC1BC,GAAkB,WAAW,KAC3B,gBAAAnd;AAAA,0CAACG;AAAA,0CAAA;AAAA,4CACC,SAAQ;AAAA,4CACR,IAAI;AAAA,8CACF,GAAG;AAAA,8CACH,OAAO;AAAA,8CACP,WAAW;AAAA,4CAAA;AAAA,4CAEd,UAAA;AAAA,0CAAA;AAAA,wCAAA;AAAA,sCAGD;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCAEN;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAAA,EACF,CACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA,GAEJ;AAAA,kBAEA,gBAAAH,EAACuB,KAAK,MAAM,IAAI,IAAI,EAAE,IAAI,KACxB,UAAA,gBAAAvB;AAAA,oBAAC2lB;AAAA,oBAAA;AAAA,sBACC,iBAAiB;AAAA,sBACjB,UAAU1H;AAAA,sBACV,YAAY,MAAMlC,GAAmB,IAAI;AAAA,sBACzC,eAAA3H;AAAA,sBACA,cAAA7L;AAAA,sBACA,gBAAgB4V;AAAA,sBAChB,wBAAA3V;AAAA,sBACA,wBAAwBgW;AAAA,sBACxB,oBAAoBQ;AAAA,sBACpB,uBAAuBG;AAAA,sBACvB,uBAAuBG;AAAA,sBACvB,sBAAAjO;AAAA,sBACA,gBAAAiL;AAAA,sBACA,eAAe5E;AAAA,sBACf,oBAAA5K;AAAA,sBACA,WAAAC;AAAA,oBAAA;AAAA,kBAAA,EACF,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UACA,gBAAA/M,EAAC4lB,IAAA,EAAa,UAAAxB,GAAoBvI,CAAQ,EAAA,CAAE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEhD,EAAA,CACF;AAAA,IACA,gBAAAhc;AAAA,MAACqR;AAAA,MAAA;AAAA,QACC,MAAM+D;AAAA,QACN,SAAS,MAAMC,GAA2B,EAAK;AAAA,QAC/C,WAAS;AAAA,QACT,UAAS;AAAA,QAET,UAAA;AAAA,UAAA,gBAAAlV,EAAC6lB,MAAY,UAAA,0BAAA,CAAuB;AAAA,UACpC,gBAAA7lB,EAACmR,IAAA,EAAc,UAAQ,IACrB,UAAA,gBAAAnR;AAAA,YAAC2lB;AAAA,YAAA;AAAA,cACC,iBAAiBxQ;AAAA,cACjB,UAAU+I;AAAA,cACV,YAAYJ;AAAA,cACZ,eAAA1J;AAAA,cACA,cAAA7L;AAAA,cACA,gBAAgB4V;AAAA,cAChB,wBAAA3V;AAAA,cACA,wBAAwBgW;AAAA,cACxB,oBAAoBgB;AAAA,cACpB,uBAAuBC;AAAA,cACvB,uBAAuBC;AAAA,cACvB,sBAAArO;AAAA,cACA,gBAAAiL;AAAA,cACA,eAAe5E;AAAA,cACf,oBAAA5K;AAAA,cACA,WAAAC;AAAA,cACA,kBAAgB;AAAA,YAAA;AAAA,UAAA,GAEpB;AAAA,4BACC+Y,IAAA,EACC,UAAA;AAAA,YAAA,gBAAA9lB;AAAA,cAACkP;AAAA,cAAA;AAAA,gBACC,SAAS4O;AAAA,gBACT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAA9d;AAAA,cAACkP;AAAA,cAAA;AAAA,gBACC,SAAS6O;AAAA,gBACT,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACP,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAA/d;AAAA,MAAC+lB;AAAA,MAAA;AAAA,QACC,MAAMhR;AAAA,QACN,aAAa,MAAM;AACjB,UAAAC,GAAiB,EAAK;AAAA,QACxB;AAAA,QACA,aAAa,MAAM;AACjB,UAAAnB,EAAS,wCAAwC;AAAA,QACnD;AAAA,QACA,OAAM;AAAA,QACN,aAAa;AAAA,QACb,YAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EACb,GACF;AAEJ;AACA,SAASwR,GAAmB;AAAA,EAC1B,IAAAvmB;AAAA,EACA,UAAAC;AAAA,EACA,eAAAinB;AAAA,EACA,UAAAnG,IAAW;AAAA,EACX,UAAAoG,IAAW;AACb,GAAG;AACD,QAAM,EAAE,YAAA/mB,GAAY,WAAAC,GAAW,YAAAC,GAAY,WAAA2C,EAAA,IAAcgB,GAAa;AAAA,IACpE,IAAAjE;AAAA,IACA,MAAM,EAAE,MAAMknB,GAAe,GAAInG,KAAY,EAAE,MAAMA,IAAS;AAAA,IAC9D,UAAAoG;AAAA,EAAA,CACD,GAEK1mB,IAAQwC,IACV;AAAA,IACE,WAAW,eAAeA,EAAU,CAAC,OAAOA,EAAU,CAAC;AAAA,IACvD,QAAQ;AAAA,IACR,SAAS;AAAA,EAAA,IAEX;AAEJ,SAAOvC,GAAM,aAAaT,GAAU;AAAA,IAClC,KAAKK;AAAA,IACL,OAAO;AAAA,MACL,GAAGL,EAAS,MAAM;AAAA,MAClB,GAAGQ;AAAA,MACH,GAAI0mB,IAAW,EAAE,SAAS,MAAM,QAAQ,cAAA,IAAkB,CAAA;AAAA,IAAC;AAAA,IAE7D,GAAIA,IAAW,CAAA,IAAK9mB;AAAA,IACpB,GAAI8mB,IAAW,CAAA,IAAK/mB;AAAA,EAAA,CACrB;AACH;AAkBYkB,EAAU,MACbA,EAAU,OAAO,YACjBA,EAAU,OAAO;AAG1B,MAAMklB,KAAY,CAAC,EAAE,oBAAAjB,QAAyB;AAC5C,QAAM,EAAE,YAAAjlB,GAAY,QAAA8B,EAAA,IAAWC,GAAa;AAAA,IAC1C,IAAI;AAAA,EAAA,CACL;AAED,SAAKkjB,IAKH,gBAAAxkB;AAAA,IAACC;AAAAA,IAAA;AAAA,MACC,KAAKV;AAAA,MACL,IAAI;AAAA,QACF,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,WAAW;AAAA,QACX,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,GAAG;AAAA,QACH,cAAc;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,iBAAiB8B,IAAS,YAAY;AAAA,QACtC,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA;AAAA,QAAA,gBAAAlB,EAACC,MAAgB,MAAM2D,IAAY,OAAO,EAAE,aAAa,UAAU;AAAA,0BAClEzD,GAAA,EAAW,SAAQ,SACjB,UAAAe,IAAS,sBAAsB,sBAAA,CAClC;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,IA3BK;AA8BX;AACAokB,GAAU,YAAY;AAAA,EACpB,oBAAoBllB,EAAU;AAChC;AACA,MAAMulB,KAAqB,CAAC;AAAA,EAC1B,iBAAAO;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,eAAAhS;AAAA,EACA,cAAA7L;AAAA,EACA,gBAAA8d;AAAA,EACA,wBAAA7d;AAAA,EACA,wBAAA8d;AAAA,EACA,oBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,uBAAAC;AAAA,EACA,sBAAApV,KAAuB,CAAA;AAAA,EACvB,gBAAAiL,IAAiB,CAAA;AAAA,EACjB,eAAAhL;AAAA,EACA,oBAAAxE,IAAqB,CAAA;AAAA,EACrB,WAAAC,IAAY,CAAA;AAAA,EACZ,kBAAA2Z,KAAmB;AACrB,MAAM;;AACJ,QAAM,CAACC,IAAgCC,CAAiC,IACtEld,EAAS,IAAI,GACT,CAACmd,IAAqBC,EAAsB,IAAIpd,EAAS,IAAI,GAC7D,CAACqd,GAAkBC,EAAmB,IAAItd,EAAS;AAAA,IACvD,MAAM;AAAA,IACN,QAAQ;AAAA;AAAA,IACR,YAAY;AAAA,EAAA,CACb,GACK,CAACqI,IAAYC,EAAa,IAAItI,EAAS,IAAI,GAC3C,CAACud,IAAuBC,EAAwB,IAAIxd;AAAA,IACxDlB,KAA0B,CAAA;AAAA,EAAC;AAG7B,EAAA2J,GAAU,MAAM;AACd,IAAA+U,GAAyB1e,KAA0B,EAAE;AAAA,EACvD,GAAG,CAACA,CAAsB,CAAC;AAE3B,QAAM2e,KAAkC,CAACC,GAAQ5J,GAAUnQ,MAAU;AACnE,IAAA6Z;AAAA,MAAyB,CAACvc,OACvBA,KAAQ,CAAA,GAAI;AAAA,QAAI,CAACvB,MAChBA,EAAK,OAAOge,IAAS,EAAE,GAAGhe,GAAM,CAACoU,CAAQ,GAAGnQ,MAAUjE;AAAA,MAAA;AAAA,IACxD;AAAA,EAEJ,GAEMie,KAA8B,MAAM;AACxC,IAAAH,GAAyB1e,KAA0B,EAAE,GACrDoe,EAAkC,IAAI;AAAA,EACxC,GAEMU,KAA4B,MAAM;AACtC,IAAAhB,KAAA,QAAAA,EAAyBW,MAAyB,KAClDL,EAAkC,IAAI;AAAA,EACxC,GAEMW,KAAU;AAAA,IACd,IAAI;AAAA,IACJ,4BAA4B;AAAA,MAC1B,cAAc,EAAE,aAAa,UAAA;AAAA,MAC7B,oBAAoB,EAAE,aAAa,UAAA;AAAA,MACnC,0BAA0B,EAAE,aAAa,UAAA;AAAA,IAAU;AAAA,IAErD,yBAAyB,EAAE,OAAO,WAAW,YAAY,IAAA;AAAA,IACzD,qCAAqC,EAAE,OAAO,UAAA;AAAA,EAAU,GAGpDC,KAAY,CAAC9Z,GAAOL,GAAOT,GAAUjN,IAAQ,CAAA,MACjD,gBAAAK;AAAA,IAACiO;AAAA,IAAA;AAAA,MACC,OAAAP;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAS;AAAA,MACT,OAAOL,KAAS;AAAA,MAChB,UAAAT;AAAA,MACA,IAAI2a;AAAA,MACH,GAAG5nB;AAAA,IAAA;AAAA,EAAA,GAGF8nB,KAAc,CAAC/Z,GAAOL,GAAOT,GAAUjN,IAAQ,OACnD6nB,GAAU9Z,GAAOL,GAAOT,GAAU,EAAE,MAAM,UAAU,GAAGjN,GAAO,GAE1D+nB,KAAa,CAACha,GAAOL,GAAOT,GAAUjN,IAAQ,CAAA,MAClD,gBAAAK;AAAA,IAACiO;AAAA,IAAA;AAAA,MACC,OAAAP;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAS;AAAA,MACT,OAAOL,KAAS;AAAA,MAChB,UAAAT;AAAA,MACA,IAAI2a;AAAA,MACJ,YAAY;AAAA,QACV,cACE,gBAAAvnB;AAAA,UAACF;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,iBAAiBuN,KAAS;AAAA,cAC1B,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,UAAU;AAAA,cACV,YAAY;AAAA,YAAA;AAAA,YAGd,UAAA,gBAAArN;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAOqN,KAAS;AAAA,gBAChB,UAAAT;AAAA,gBACA,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,UAAU;AAAA,kBACV,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,QAAQ;AAAA,kBACR,QAAQ;AAAA,gBAAA;AAAA,cACV;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,MACF;AAAA,MAGH,GAAGjN;AAAA,IAAA;AAAA,EAAA,GAIFgoB,IAAc,CAACja,GAAOL,GAAOT,GAAU4B,MAC3C,gBAAAxO;AAAA,IAACiO;AAAA,IAAA;AAAA,MACC,OAAAP;AAAA,MACA,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,WAAS;AAAA,MACT,QAAM;AAAA,MACN,OAAOL,KAAS;AAAA,MAChB,UAAAT;AAAA,MACA,IAAI2a;AAAA,MAEH,UAAA/Y,EAAQ,IAAI,CAACX,MACZ,gBAAA7N,EAAC0L,IAAA,EAA4B,OAAOmC,EAAO,OACxC,UAAAA,EAAO,MAAA,GADKA,EAAO,KAEtB,CACD;AAAA,IAAA;AAAA,EAAA,GAwDC+Z,IAAmB,CAACla,GAAOL,GAAOwa,MAAiB;AACvD,UAAMC,IAAczW,GAAqB;AAAA,MACvC,CAAC+F,MAAaA,EAAS,SAAS/J;AAAA,IAAA;AAElC,6BACGvN,GAAA,EAAI,IAAI,EAAE,IAAI,OACb,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI,EAAE,IAAI,KAAK,OAAO,WAAW,YAAY,IAAA;AAAA,UAE5C,UAAAuN;AAAA,QAAA;AAAA,MAAA;AAAA,MAEH,gBAAA7N,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAA,GACrD,UAAA;AAAA,QAAA,gBAAAE,EAACkP,IAAA,EAAO,MAAK,SAAQ,SAAQ,YAAW,SAAS2Y,GAC9C,UAAAxa,IAAQ,iBAAiB,eAAA,CAC5B;AAAA,QACCA,KACC,gBAAAxN;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,KAAK;AAAA,cACL,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,GAAG;AAAA,cACH,IAAI;AAAA,cACJ,UAAU;AAAA,cACV,QAAQ;AAAA,cACR,WAAW;AAAA,gBACT,iBAAiB;AAAA,gBACjB,aAAa;AAAA,cAAA;AAAA,YACf;AAAA,YAEF,SAAS,MAAMgoB,KAAe9V,GAAc8V,CAAW;AAAA,YACvD,OAAM;AAAA,YAEN,UAAA;AAAA,cAAA,gBAAA9nB,EAACF,KAAI,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,EAAA,GAC5C,4BAACoQ,IAAA,EAAe,KAAK4X,GAAa,QAAO,QAAO,GAClD;AAAA,cACA,gBAAA9nB;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,OAAM;AAAA,kBACN,IAAI;AAAA,oBACF,UAAU;AAAA,oBACV,cAAc;AAAA,oBACd,YAAY;AAAA,kBAAA;AAAA,kBAEd,QAAO2nB,KAAA,gBAAAA,EAAa,SAAQza;AAAA,kBAE3B,kCAAa,SAAQA;AAAA,gBAAA;AAAA,cAAA;AAAA,YACxB;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,EAAA,CAEJ;AAAA,IAAA,GACF;AAAA,EAEJ,GAEM0a,KAAkB,CAACra,GAAOL,GAAOT,MACrC,gBAAA5M;AAAA,IAAC2N;AAAA,IAAA;AAAA,MACC,SAAS2O;AAAA,MACT,MAAK;AAAA,MACL,WAAS;AAAA,MACT,OACEA,EAAe;AAAA,QACb,CAACtb,MAAY,OAAOA,EAAQ,EAAE,MAAM,OAAOqM,CAAK;AAAA,MAAA,KAC7C;AAAA,MAEP,UAAU,CAACrD,GAAOge,MAAoBpb,GAASob,KAAA,gBAAAA,EAAiB,OAAM,EAAE;AAAA,MACxE,gBAAgB,CAACna,OAAWA,KAAA,gBAAAA,EAAQ,SAAQ;AAAA,MAC5C,sBAAsB,CAACA,GAAQoa,MAC7B,OAAOpa,EAAO,EAAE,MAAM,OAAOoa,EAAc,EAAE;AAAA,MAE/C,aAAa,CAACja,MACZ,gBAAAhO;AAAA,QAACiO;AAAA,QAAA;AAAA,UACE,GAAGD;AAAA,UACJ,OAAAN;AAAA,UACA,SAAQ;AAAA,UACR,aAAY;AAAA,QAAA;AAAA,MAAA;AAAA,MAGhB,IAAI,EAAE,IAAI,EAAA;AAAA,IAAE;AAAA,EAAA,GAIVwa,KAA0B,CAACxa,GAAOL,GAAOT,MAC7C,gBAAA5M;AAAA,IAAC2N;AAAA,IAAA;AAAA,MACC,SAASwa;AAAA,MACT,MAAK;AAAA,MACL,WAAS;AAAA,MACT,OAAO9a,KAAS;AAAA,MAChB,UAAU,CAACrD,GAAO+D,MAAanB,EAASmB,KAAY,EAAE;AAAA,MACtD,cAAc,CAACpO,GAAOkO,MACpB,gBAAAhO;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACT,GAAGH;AAAA,UACJ,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA;AAAA,UAElD,UAAA;AAAA,YAAA,gBAAAK,EAACqL,IAAA,EAAiB,UAAUwC,EAAA,CAAQ;AAAA,YACpC,gBAAA7N,EAACG,GAAA,EAAW,SAAQ,SAAS,UAAA0N,EAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGxC,aAAa,CAACG,MACZ,gBAAAhO,EAACiO,MAAW,GAAGD,GAAQ,OAAAN,GAAc,SAAQ,YAAW;AAAA,MAE1D,IAAI,EAAE,IAAI,EAAA;AAAA,IAAE;AAAA,EAAA,GAIV0a,KAAgB,CAACtV,GAAM6E,MAAe;;AAC1C,QAAI,CAAC7E,EAAM;AAGX,QAFkB,SAAO/O,IAAA+O,EAAK,SAAL,gBAAA/O,EAAW,MAAM,KAAK,UAAS,EAAE,EAAE,YAAA,MAE1C,SAAS+O,EAAK,SAAS,iBAAiB;AACxD,MAAA2E,GAAU;AAAA,QACR,MAAM;AAAA,QACN,SAAS;AAAA,MAAA,CACV;AACD;AAAA,IACF;AAEA,UAAM4Q,IAAS,IAAI,WAAA;AACnB,IAAAA,EAAO,SAAS,MAAM;AACpB,YAAMlmB,KAAa,OAAOkmB,EAAO,UAAU,EAAE,EAAE,KAAA;AAC/C,UAAI,CAAC,aAAa,KAAKlmB,EAAU,GAAG;AAClC,QAAAsV,GAAU;AAAA,UACR,MAAM;AAAA,UACN,SAAS;AAAA,QAAA,CACV;AACD;AAAA,MACF;AACA,MAAAE,EAAWxV,EAAU,GACrBsV,GAAU,EAAE,MAAM,WAAW,SAAS,iCAAiC;AAAA,IACzE,GACA4Q,EAAO,UAAU,MACf5Q,GAAU,EAAE,MAAM,SAAS,SAAS,4BAA4B,GAClE4Q,EAAO,WAAWvV,CAAI;AAAA,EACxB,GAEMwV,KAAwB,CAACpC,MAAoB;;AACjD,UAAMqC,MACJrC,IAAAA,EAAgB,SAAhBA,gBAAAA,EAAsB,WAAQA,IAAAA,EAAgB,SAAhBA,gBAAAA,EAAsB,aAAY,IAC5D/a,MACJ+a,KAAAA,EAAgB,SAAhBA,gBAAAA,GAAsB,cAAWA,KAAAA,EAAgB,SAAhBA,gBAAAA,GAAsB,QAAO;AAEhE,6BACGpmB,GAAA,EAAI,IAAI,EAAE,IAAI,KACZ,UAAA;AAAA,MAAAooB;AAAA,QAAwB;AAAA,QAAQK;AAAA,QAAc,CAACC,OAC9CrC,EAASD,EAAgB,IAAI,QAAQ,EAAE,MAAAsC,IAAM,SAAS,GAAA,CAAI;AAAA,MAAA;AAAA,MAE5D,gBAAA3oB,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACrD,UAAA;AAAA,QAAA,gBAAAD,EAACqP,MAAO,MAAK,SAAQ,SAAQ,YAAW,WAAU,SAAQ,UAAA;AAAA,UAAA;AAAA,UAExD,gBAAAlP;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,QAAM;AAAA,cACN,MAAK;AAAA,cACL,QAAO;AAAA,cACP,UAAU,CAACgK,OAAU;;AACnB,sBAAM8I,MAAO/O,KAAAiG,GAAM,OAAO,UAAb,gBAAAjG,GAAqB;AAClC,gBAAAiG,GAAM,OAAO,QAAQ,IACrBoe;AAAA,kBAActV;AAAA,kBAAM,CAAC2V,OACnBtC,EAASD,EAAgB,IAAI,QAAQ,EAAE,MAAM,IAAI,SAAAuC,GAAA,CAAS;AAAA,gBAAA;AAAA,cAE9D;AAAA,YAAA;AAAA,UAAA;AAAA,QACF,GACF;AAAA,QACCtd,KACC,gBAAAnL;AAAA,UAACkP;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,SAAS,MACPiX,EAASD,EAAgB,IAAI,QAAQ,EAAE,MAAM,IAAI,SAAS,IAAI;AAAA,YAEjE,UAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAED,GAEJ;AAAA,OACEqC,KAAgBpd,MAChB,gBAAAnL;AAAA,QAACF;AAAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,IAAI;AAAA,YACJ,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,cAAc;AAAA,YACd,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,YACjB,SAAS,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,UAAG;AAAA,UAGlC,UAAAqL,IACC,gBAAAnL;AAAA,YAACF;AAAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,gBAAgB;AAAA,cAAA;AAAA,cAElB,yBAAyB,EAAE,QAAQqL,EAAA;AAAA,YAAY;AAAA,UAAA,IAGjD,gBAAAnL,EAACqL,IAAA,EAAiB,UAAUkd,EAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,IAE9C,GAEJ;AAAA,EAEJ,GAEMG,KAAsB,CAACrb,MACvB,CAAC,SAAS,UAAU,OAAO,EAAE,SAASA,CAAK,IAAUA,IAClD,UAGHsb,KAAqB,MAAM;;AAC/B,UAAMC,IAAoB,IAAQ7kB,IAAAwE,KAAA,gBAAAA,EAAc,cAAd,QAAAxE,EAAyB,kBACrD8kB,IAAkB,GAAQtgB,KAAA,QAAAA,EAAc,kBAExCugB,IAAyB,CAAC,QAAQ,MAAM,GACxCC,IAAqB;AAAA,MACzB,MAAM,EAAE,MAAM,QAAQ,MAAM,UAAU,YAAY,KAAA;AAAA,MAClD,MAAM,EAAE,MAAM,QAAQ,MAAM,gBAAgB,YAAY,KAAA;AAAA,IAAK,GAGzDC,IAAa,MAAM,QAAQzgB,KAAA,gBAAAA,EAAc,OAAO,IAClDA,EAAa,UACb,CAAA,GACE0gB,KAAgBD,EAAW;AAAA,MAC/B,CAAC3f,MAAM,CAACyf,EAAuB,SAASzf,EAAE,IAAI;AAAA,IAAA,GAE1C6f,KAAqBF,EACxB,OAAO,CAAC3f,MAAMyf,EAAuB,SAASzf,EAAE,IAAI,CAAC,EACrD,IAAI,CAACA,MAAMA,EAAE,IAAI,GAEd8f,KAAyB,CAACnf,GAAOof,MAAiB;AACtD,YAAMC,IAAa;AAAA,QACjB,GAAGJ;AAAA,QACH,GAAGG,EAAa,IAAI,CAAC3b,OAAQsb,EAAmBtb,EAAG,CAAC;AAAA,MAAA;AAEtD,MAAA4Y,EAAe,WAAWgD,CAAU;AAAA,IACtC,GAEMC,KAAqB,CAAC5hB,GAAO8V,GAAUnQ,MAAU;AACrD,YAAMkc,KAAgB,CAAC,GAAGN,EAAa;AACvC,MAAAM,GAAc7hB,CAAK,IAAI,EAAE,GAAG6hB,GAAc7hB,CAAK,GAAG,CAAC8V,CAAQ,GAAGnQ,EAAA;AAC9D,YAAMgc,KAAa;AAAA,QACjB,GAAGE;AAAA,QACH,GAAGL,GAAmB,IAAI,CAACzb,OAAQsb,EAAmBtb,EAAG,CAAC;AAAA,MAAA;AAE5D,MAAA4Y,EAAe,WAAWgD,EAAU;AAAA,IACtC,GAEMG,KAAkB,MAAM;AAC5B,YAAMD,IAAgB;AAAA,QACpB,GAAGN;AAAA,QACH,EAAE,MAAM,cAAc,MAAM,IAAI,SAAS,IAAI,YAAY,KAAA;AAAA,MAAK,GAE1DI,IAAa;AAAA,QACjB,GAAGE;AAAA,QACH,GAAGL,GAAmB,IAAI,CAACzb,MAAQsb,EAAmBtb,CAAG,CAAC;AAAA,MAAA;AAE5D,MAAA4Y,EAAe,WAAWgD,CAAU,GACpCvC,GAAuByC,EAAc,SAAS,CAAC;AAAA,IACjD,GAEME,KAAqB,CAAC/hB,MAAU;AACpC,YAAM6hB,IAAgB,CAAC,GAAGN,EAAa;AACvC,MAAAM,EAAc,OAAO7hB,GAAO,CAAC;AAC7B,YAAM2hB,IAAa;AAAA,QACjB,GAAGE;AAAA,QACH,GAAGL,GAAmB,IAAI,CAACzb,OAAQsb,EAAmBtb,EAAG,CAAC;AAAA,MAAA;AAE5D,MAAA4Y,EAAe,WAAWgD,CAAU,GAChCxC,OAAwBnf,IAC1Bof,GAAuB,IAAI,IAClBD,KAAsBnf,KAC/Bof,GAAuBD,KAAsB,CAAC;AAAA,IAElD;AAEA,WACE,gBAAAhnB,EAAA8L,IAAA,EACE,UAAA;AAAA,MAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,aAAY,IAAI,EAAE,YAAY,QAAQ,IAAI,EAAA,GAAK,UAAA,UAAA,CAEnE;AAAA,MAGA,gBAAAN;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,YAAY;AAAA,YACZ,IAAI;AAAA,UAAA;AAAA,UAGN,UAAA;AAAA,YAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAQ,UAAA,YAAQ;AAAA,YACpC,gBAAAH;AAAA,cAAColB;AAAA,cAAA;AAAA,gBACC,SAASwD;AAAA,gBACT,UAAU,CAAC7oB,MACTsmB,EAAe,aAAa,EAAE,iBAAiBtmB,EAAE,OAAO,QAAA,CAAS;AAAA,cAAA;AAAA,YAAA;AAAA,UAErE;AAAA,QAAA;AAAA,MAAA;AAAA,MAED6oB,KACC,gBAAA/oB,EAACC,GAAA,EAAI,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAA,GAC3B,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAACM;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,IAAI,EAAE,SAAS,SAAS,IAAI,EAAA;AAAA,YAC7B,UAAA;AAAA,cAAA;AAAA,cACiC;AAAA,cAAmB;AAAA,cAAQ;AAAA,cAC1D;AAAA,cAAgB;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEnB,gBAAAH;AAAA,UAACiO;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAS;AAAA,YACT,OAAM;AAAA,YACN,SAAOjK,KAAAuE,KAAA,gBAAAA,EAAc,cAAd,gBAAAvE,GAAyB,iBAAgB;AAAA,YAChD,UAAU,CAACjE,MACTsmB,EAAe,aAAa,EAAE,cAActmB,EAAE,OAAO,MAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAEhE,GACF;AAAA,MAGD6oB,MACE,MAAM;;AAEL,cAAMrO,OADkBxW,IAAAwE,KAAA,gBAAAA,EAAc,cAAd,gBAAAxE,EAAyB,iBAAgB,IACtB,MAAM,YAAY,GACvDyW,IAAgBD,IAClBA,EACG,IAAI,CAAC3B,OAAMA,GAAE,MAAM,GAAG,EAAE,EAAE,KAAA,CAAM,EAChC,OAAO,OAAO,IACjB,CAAA,GACE6B,KAAsB,CAAC,GAAG,IAAI,IAAID,CAAa,CAAC,GAChDE,OACJ1W,KAAAuE,KAAA,gBAAAA,EAAc,cAAd,gBAAAvE,GAAyB,mBAAkB,CAAA,GACvC0lB,KAAmBjP,GACtB,IAAI,CAAC8D,OAAM7D,GAAe6D,EAAC,CAAC,EAC5B,OAAO,OAAO;AAEjB,eAAI9D,GAAoB,WAAW,IAAU,OAG3C,gBAAA5a,EAACC,GAAA,EAAI,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAA,GAC3B,UAAA;AAAA,UAAA,gBAAAE;AAAA,YAACG;AAAA,YAAA;AAAA,cACC,SAAQ;AAAA,cACR,IAAI;AAAA,gBACF,YAAY;AAAA,gBACZ,IAAI;AAAA,gBACJ,OAAO;AAAA,cAAA;AAAA,cAEV,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGAsa,GAAoB,IAAI,CAACE,IAAcjT,OACtC,gBAAA7H;AAAA,YAACC;AAAAA,YAAA;AAAA,cAEC,IAAI;AAAA,gBACF,SAAS;AAAA,gBACT,KAAK;AAAA,gBACL,IAAI;AAAA,gBACJ,YAAY;AAAA,cAAA;AAAA,cAGd,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACF;AAAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,MAAM;AAAA,sBACN,GAAG;AAAA,sBACH,QAAQ;AAAA,sBACR,cAAc;AAAA,oBAAA;AAAA,oBAGhB,UAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAS,UAAAwa,GAAA,CAAa;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAE5C,gBAAA3a,EAACsL,MAAY,MAAK,SAAQ,IAAI,EAAE,MAAM,KACpC,UAAA,gBAAAtL;AAAA,kBAACwL;AAAA,kBAAA;AAAA,oBACC,cAAY;AAAA,oBACZ,OAAOkP,GAAeC,EAAY,KAAK;AAAA,oBACvC,UAAU,CAAC5a,MAAM;AACf,4BAAM4pB,KAAU,EAAE,GAAGjP,GAAA;AACrB,sBAAI3a,EAAE,OAAO,QACX4pB,GAAQhP,EAAY,IAAI5a,EAAE,OAAO,QAEjC,OAAO4pB,GAAQhP,EAAY,GAE7B0L,EAAe,aAAa;AAAA,wBAC1B,gBAAgBsD;AAAA,sBAAA,CACjB;AAAA,oBACH;AAAA,oBAEC,UAAArc,GAAuB,IAAI,CAACC,MAC3B,gBAAAvN;AAAA,sBAAC0L;AAAA,sBAAA;AAAA,wBAEC,OAAO6B;AAAA,wBACP,UACEmc,GAAiB,SAASnc,CAAM,KAChCmN,GAAeC,EAAY,MAAMpN;AAAA,wBAGlC,UAAAA;AAAA,sBAAA;AAAA,sBAPIA;AAAA,oBAAA,CASR;AAAA,kBAAA;AAAA,gBAAA,EACH,CACF;AAAA,cAAA;AAAA,YAAA;AAAA,YA/CK7F;AAAA,UAAA,CAiDR;AAAA,QAAA,GACH;AAAA,MAEJ,GAAA;AAAA,MAGF,gBAAA7H;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,YAAY;AAAA,UAAA;AAAA,UAGd,UAAA;AAAA,YAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAQ,UAAA,YAAQ;AAAA,YACpC,gBAAAH;AAAA,cAAColB;AAAA,cAAA;AAAA,gBACC,SAASyD;AAAA,gBACT,UAAU,CAAC9oB,MACTsmB,EAAe,mBAAmBtmB,EAAE,OAAO,OAAO;AAAA,cAAA;AAAA,YAAA;AAAA,UAEtD;AAAA,QAAA;AAAA,MAAA;AAAA,MAIF,gBAAAF;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,IAAI;AAAA,YACF,IAAI;AAAA,YACJ,IAAI;AAAA,YACJ,SAAS;AAAA,YACT,gBAAgB;AAAA,YAChB,YAAY;AAAA,UAAA;AAAA,UAGd,UAAA;AAAA,YAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,aAAY,IAAI,EAAE,YAAY,OAAA,GAAU,UAAA,UAAA,CAE5D;AAAA,YACA,gBAAAH,EAACkP,MAAO,MAAK,SAAQ,SAAQ,YAAW,SAASsa,IAAiB,UAAA,aAAA,CAElE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAEDP,GAAc,IAAI,CAAC/d,GAAQxD,MAAU;;AACpC,cAAMkiB,IAAa/C,OAAwBnf,GACrC6gB,KAAerd,EAAO,QAAQ,IAC9BC,KAAcD,EAAO,WAAWA,EAAO,OAAO;AAEpD,eACE,gBAAArL;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,IAAI;AAAA,cACJ,UAAU;AAAA,YAAA;AAAA,YAGZ,UAAA;AAAA,cAAA,gBAAAD;AAAA,gBAACC;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,SAAS,MACPgnB,GAAuB8C,IAAa,OAAOliB,CAAK;AAAA,kBAElD,WAAW,CAACsC,MAAU;AACpB,qBAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QACzC8c,GAAuB8C,IAAa,OAAOliB,CAAK;AAAA,kBAEpD;AAAA,kBACA,IAAI;AAAA,oBACF,WAAW;AAAA,oBACX,IAAI;AAAA,oBACJ,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,QAAQ;AAAA,oBACR,iBAAiBkiB,IACb,YACA;AAAA,oBACJ,WAAW,EAAE,iBAAiB,UAAA;AAAA,kBAAU;AAAA,kBAG1C,UAAA;AAAA,oBAAA,gBAAA/pB,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACpD,UAAA;AAAA,sBAAAqL,KACC,gBAAAnL;AAAA,wBAACF;AAAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,IAAI;AAAA,4BACF,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,4BAChB,OAAO;AAAA,4BACP,QAAQ;AAAA,0BAAA;AAAA,0BAEV,yBAAyB,EAAE,QAAQqL,GAAA;AAAA,wBAAY;AAAA,sBAAA,IAGjD,gBAAAnL,EAACqL,IAAA,EAAiB,UAAUkd,MAAgB,WAAA,CAAY;AAAA,sBAE1D,gBAAAvoB,EAACG,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,IAAA,GAC3C,UAAA+K,EAAO,QAAQ,UAAUxD,IAAQ,CAAC,GAAA,CACrC;AAAA,oBAAA,GACF;AAAA,oBACA,gBAAA1H;AAAA,sBAACqL;AAAA,sBAAA;AAAA,wBACC,UAAUue,IAAa,gBAAgB;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACzC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGDA,uBACE9pB,GAAA,EAAI,IAAI,EAAE,GAAG,GAAG,iBAAiB,0BAAA,GAChC,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACiO;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,WAAS;AAAA,oBACT,OAAM;AAAA,oBACN,OAAO/C,EAAO,QAAQ;AAAA,oBACtB,UAAU,CAACnL,MACTupB,GAAmB5hB,GAAO,QAAQ3H,EAAE,OAAO,KAAK;AAAA,oBAElD,IAAI,EAAE,IAAI,EAAA;AAAA,kBAAE;AAAA,gBAAA;AAAA,kCAEbD,GAAA,EAAI,IAAI,EAAE,IAAI,KACZ,UAAA;AAAA,kBAAAooB;AAAA,oBAAwB;AAAA,oBAAQK;AAAA,oBAAc,CAACC,MAC9Cc,GAAmB5hB,GAAO,QAAQ8gB,CAAI;AAAA,kBAAA;AAAA,kBAExC,gBAAA3oB;AAAA,oBAACC;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK;AAAA,wBACL,IAAI;AAAA,sBAAA;AAAA,sBAGN,UAAA;AAAA,wBAAA,gBAAAD,EAACqP,MAAO,MAAK,SAAQ,SAAQ,YAAW,WAAU,SAAQ,UAAA;AAAA,0BAAA;AAAA,0BAExD,gBAAAlP;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,QAAM;AAAA,8BACN,MAAK;AAAA,8BACL,QAAO;AAAA,8BACP,UAAU,CAACgK,MAAU;;AACnB,sCAAM8I,MAAO/O,KAAAiG,EAAM,OAAO,UAAb,gBAAAjG,GAAqB;AAClC,gCAAAiG,EAAM,OAAO,QAAQ,IACrBoe,GAActV,IAAM,CAAC2V,OAAY;AAC/B,kCAAAa,GAAmB5hB,GAAO,QAAQ,EAAE,GACpC4hB,GAAmB5hB,GAAO,WAAW+gB,EAAO;AAAA,gCAC9C,CAAC;AAAA,8BACH;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACF,GACF;AAAA,wBACCtd,MACC,gBAAAnL;AAAA,0BAACkP;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,OAAM;AAAA,4BACN,SAAS,MACPoa,GAAmB5hB,GAAO,WAAW,EAAE;AAAA,4BAE1C,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED;AAAA,oBAAA;AAAA,kBAAA;AAAA,mBAGF6gB,MAAgBpd,OAChB,gBAAAnL;AAAA,oBAACF;AAAAA,oBAAA;AAAA,sBACC,IAAI;AAAA,wBACF,IAAI;AAAA,wBACJ,OAAO;AAAA,wBACP,QAAQ;AAAA,wBACR,QAAQ;AAAA,wBACR,cAAc;AAAA,wBACd,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,gBAAgB;AAAA,wBAChB,iBAAiB;AAAA,wBACjB,SAAS,EAAE,OAAO,IAAI,QAAQ,GAAA;AAAA,sBAAG;AAAA,sBAGlC,UAAAqL,KACC,gBAAAnL;AAAA,wBAACF;AAAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,IAAI;AAAA,4BACF,SAAS;AAAA,4BACT,YAAY;AAAA,4BACZ,gBAAgB;AAAA,0BAAA;AAAA,0BAElB,yBAAyB,EAAE,QAAQqL,GAAA;AAAA,wBAAY;AAAA,sBAAA,IAGjD,gBAAAnL,EAACqL,IAAA,EAAiB,UAAUkd,GAAA,CAAc;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAE9C,GAEJ;AAAA,gBACCR;AAAA,kBACC;AAAA,kBACA,OAAO7c,EAAO,cAAe,YACzBnH,KAAAmH,EAAO,eAAP,gBAAAnH,GAAmB,SACnBmH,EAAO;AAAA,kBACX,CAAC+U,MACCqJ,GAAmB5hB,GAAO,cAAcuY,CAAS;AAAA,gBAAA;AAAA,gBAErD,gBAAAjgB;AAAA,kBAACF;AAAAA,kBAAA;AAAA,oBACC,IAAI,EAAE,SAAS,QAAQ,gBAAgB,YAAY,IAAI,EAAA;AAAA,oBAEvD,UAAA,gBAAAE;AAAA,sBAACkP;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,OAAM;AAAA,wBACN,SAAQ;AAAA,wBACR,SAAS,MAAMua,GAAmB/hB,CAAK;AAAA,wBACxC,UAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAED;AAAA,gBAAA;AAAA,cACF,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UAhKGA;AAAA,QAAA;AAAA,MAoKX,CAAC;AAAA,MAGD,gBAAA7H,EAACC,KAAI,IAAI,EAAE,IAAI,GAAG,IAAI,KACpB,UAAA;AAAA,QAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,aAAY,IAAI,EAAE,YAAY,QAAQ,IAAI,EAAA,GAAK,UAAA,qBAAA,CAEnE;AAAA,QACA,gBAAAH;AAAA,UAAC2N;AAAA,UAAA;AAAA,YACC,UAAQ;AAAA,YACR,SAASmb;AAAA,YACT,MAAK;AAAA,YACL,WAAS;AAAA,YACT,OAAOI;AAAA,YACP,UAAUC;AAAA,YACV,aAAa,CAACnb,MACZ,gBAAAhO;AAAA,cAACiO;AAAA,cAAA;AAAA,gBACE,GAAGD;AAAA,gBACJ,OAAM;AAAA,gBACN,SAAQ;AAAA,cAAA;AAAA,YAAA;AAAA,UACV;AAAA,QAAA;AAAA,MAEJ,GACF;AAAA,MAEA,gBAAAhO;AAAA,QAACG;AAAA,QAAA;AAAA,UACC,SAAQ;AAAA,UACR,IAAI,EAAE,YAAY,QAAQ,IAAI,GAAG,IAAI,EAAA;AAAA,UACtC,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,OAGC8mB,MAAyB,CAAA,GAAI,IAAI,CAAC7d,MAAS;AAC3C,cAAMwgB,IAAajD,OAAmCvd,EAAK;AAC3D,eACE,gBAAAvJ;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,IAAI;AAAA,cACJ,UAAU;AAAA,YAAA;AAAA,YAGZ,UAAA;AAAA,cAAA,gBAAAD;AAAA,gBAACC;AAAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,SAAS,MACP8mB,EAAkCgD,IAAa,OAAOxgB,EAAK,EAAE;AAAA,kBAE/D,WAAW,CAACY,MAAU;AACpB,qBAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QACzC4c;AAAA,sBACEgD,IAAa,OAAOxgB,EAAK;AAAA,oBAAA;AAAA,kBAG/B;AAAA,kBACA,IAAI;AAAA,oBACF,WAAW;AAAA,oBACX,IAAI;AAAA,oBACJ,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,QAAQ;AAAA,oBACR,iBAAiBwgB,IACb,YACA;AAAA,oBACJ,WAAW,EAAE,iBAAiB,UAAA;AAAA,kBAAU;AAAA,kBAG1C,UAAA;AAAA,oBAAA,gBAAA/pB,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA,GACrD,UAAA;AAAA,sBAAA,gBAAAE,EAACqL,IAAA,EAAiB,UAAUjC,EAAK,YAAY,YAAY;AAAA,sBACzD,gBAAApJ,EAACG,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,IAAA,GAC3C,UAAAiJ,EAAK,SAASA,EAAK,GAAA,CACtB;AAAA,oBAAA,GACF;AAAA,oBACA,gBAAApJ;AAAA,sBAACqL;AAAA,sBAAA;AAAA,wBACC,UAAUue,IAAa,gBAAgB;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACzC;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEDA,KACC,gBAAA/pB,EAACC,GAAA,EAAI,IAAI,EAAE,GAAG,KACX,UAAA;AAAA,gBAAA0nB;AAAA,kBAAU;AAAA,kBAASpe,EAAK;AAAA,kBAAO,CAACrJ,MAC/BonB;AAAA,oBACE/d,EAAK;AAAA,oBACL;AAAA,oBACArJ,EAAE,OAAO;AAAA,kBAAA;AAAA,gBACX;AAAA,gBAEF,gBAAAC;AAAA,kBAAC2N;AAAA,kBAAA;AAAA,oBACC,SAASwa;AAAA,oBACT,MAAK;AAAA,oBACL,WAAS;AAAA,oBACT,OAAO/e,EAAK,YAAYA,EAAK,oBAAoB;AAAA,oBACjD,UAAU,CAACY,GAAO+D,OAChBoZ;AAAA,sBACE/d,EAAK;AAAA,sBACL;AAAA,sBACA2E,MAAY;AAAA,oBAAA;AAAA,oBAGhB,cAAc,CAACpO,GAAOkO,OACpB,gBAAAhO;AAAA,sBAACC;AAAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACT,GAAGH;AAAA,wBACJ,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAA;AAAA,wBAElD,UAAA;AAAA,0BAAA,gBAAAK,EAACqL,IAAA,EAAiB,UAAUwC,GAAA,CAAQ;AAAA,0BACpC,gBAAA7N,EAACG,GAAA,EAAW,SAAQ,SAAS,UAAA0N,GAAA,CAAO;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGxC,aAAa,CAACG,MACZ,gBAAAhO;AAAA,sBAACiO;AAAA,sBAAA;AAAA,wBACE,GAAGD;AAAA,wBACJ,OAAM;AAAA,wBACN,SAAQ;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGZ,IAAI,EAAE,IAAI,EAAA;AAAA,kBAAE;AAAA,gBAAA;AAAA,gBAEbyZ;AAAA,kBAAY;AAAA,kBAAiBre,EAAK;AAAA,kBAAc,CAACrJ,MAChDonB;AAAA,oBACE/d,EAAK;AAAA,oBACL;AAAA,oBACA,OAAOrJ,EAAE,OAAO,SAAS,CAAC;AAAA,kBAAA;AAAA,gBAC5B;AAAA,gBAEF,gBAAAF;AAAA,kBAACC;AAAAA,kBAAA;AAAA,oBACC,IAAI;AAAA,sBACF,SAAS;AAAA,sBACT,gBAAgB;AAAA,sBAChB,YAAY;AAAA,oBAAA;AAAA,oBAGd,UAAA;AAAA,sBAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAQ,UAAA,WAAO;AAAA,sBACnC,gBAAAH;AAAA,wBAAColB;AAAA,wBAAA;AAAA,0BACC,SAAShc,EAAK,YAAY;AAAA,0BAC1B,UAAU,CAACrJ,MACTonB;AAAA,4BACE/d,EAAK;AAAA,4BACL;AAAA,4BACArJ,EAAE,OAAO;AAAA,0BAAA;AAAA,wBACX;AAAA,sBAAA;AAAA,oBAEJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF,EAAA,CACF;AAAA,YAAA;AAAA,UAAA;AAAA,UA9GGqJ,EAAK;AAAA,QAAA;AAAA,MAkHhB,CAAC;AAAA,MACD,gBAAAvJ;AAAA,QAACC;AAAAA,QAAA;AAAA,UACC,IAAI,EAAE,SAAS,QAAQ,gBAAgB,YAAY,KAAK,GAAG,IAAI,EAAA;AAAA,UAE/D,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACkP;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,SAASmY;AAAA,gBACV,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAArnB;AAAA,cAACkP;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,OAAM;AAAA,gBACN,SAASoY;AAAA,gBACV,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,EAEJ,GAEMuC,KAAuB,MAAM;;AACjC,QAAI,CAAC3D,EAAiB,QAAO;AAE7B,QAAIA,EAAgB,SAAS,cAAc;AACzC,YAAM4D,IAAe1V,EAAc,IAAI,CAAC9B,MAAMA,EAAE,IAAI;AACpD,aACE,gBAAAzS,EAAA8L,IAAA,EACE,UAAA;AAAA,QAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,2BAAA,CAExC;AAAA,QACA,gBAAAH;AAAA,UAAC2N;AAAA,UAAA;AAAA,YACC,eAAa;AAAA,YACb,IAAG;AAAA,YACH,SAASmc;AAAA,YACT,MAAK;AAAA,YACL,WAAS;AAAA,YACT,IAAI,EAAE,IAAI,EAAA;AAAA,YACV,OAAO5D,EAAgB,aAAa;AAAA,YACpC,UAAU,CAAClc,GAAO+D,OAChBoY,EAASD,EAAgB,IAAI,aAAanY,MAAY,EAAE;AAAA,YAE1D,aAAa,CAACC,MACZ,gBAAAhO;AAAA,cAACiO;AAAA,cAAA;AAAA,gBACE,GAAGD;AAAA,gBACJ,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,aAAY;AAAA,cAAA;AAAA,YAAA;AAAA,UACd;AAAA,QAAA;AAAA,MAEJ,GACF;AAAA,IAEJ;AAEA,QAAIkY,EAAgB,SAAS,WAAW;AACtC,YAAM6D,IAAiB,MAAM,KAAK,EAAE,QAAQ,GAAA,GAAM,CAACxK,GAAG7X,OAAU;AAC9D,cAAMsiB,KAAatiB,KAAQ;AAC3B,eAAO;AAAA,UACL,OAAO,GAAGsiB,EAAU;AAAA,UACpB,OAAO,QAAQA,KAAa,KAAK,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAE/C,CAAC;AAED,aACE,gBAAAnqB,EAAA8L,IAAA,EACE,UAAA;AAAA,QAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,wBAAA,CAExC;AAAA,QACCqnB;AAAA,UAAU;AAAA,WAAiBzjB,IAAAmiB,EAAgB,WAAhB,gBAAAniB,EAAwB;AAAA,UAAO,CAAChE,MAC1DomB,EAASD,EAAgB,IAAI,UAAU;AAAA,YACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,YAC9B,OAAOnmB,EAAE,OAAO;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,QAEF4nB;AAAA,UACC;AAAA,YACA3jB,IAAAkiB,EAAgB,WAAhB,gBAAAliB,EAAwB,aAAY;AAAA,UACpC,CAACjE,MACComB,EAASD,EAAgB,IAAI,UAAU;AAAA,YACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,YAC9B,UAAUnmB,EAAE,OAAO;AAAA,UAAA,CACpB;AAAA,UACHkqB;AAAA,QAAA;AAAA,QAGDtC;AAAA,UACC;AAAA,YACA1jB,IAAAiiB,EAAgB,WAAhB,gBAAAjiB,EAAwB,eAAc;AAAA,UACtC,CAAClE,MACComB,EAASD,EAAgB,IAAI,UAAU;AAAA,YACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,YAC9B,YAAYnmB,EAAE,OAAO;AAAA,UAAA,CACtB;AAAA,UACHmqB;AAAA,QAAA;AAAA,QAEDxC;AAAA,UACC;AAAA,WACAvjB,KAAAD,IAAAgiB,EAAgB,WAAhB,gBAAAhiB,EAAwB,eAAxB,gBAAAC,EAAoC;AAAA,UACpC,CAACpE,MAAA;;AACC,mBAAAomB,EAASD,EAAgB,IAAI,UAAU;AAAA,cACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,cAC9B,YAAY;AAAA,gBACV,KAAIniB,KAAAmiB,EAAgB,WAAhB,gBAAAniB,GAAwB,eAAc,CAAA;AAAA,gBAC1C,WAAWhE,EAAE,OAAO;AAAA,cAAA;AAAA,YACtB,CACD;AAAA;AAAA,QAAA;AAAA,QAEJ2nB;AAAA,UACC;AAAA,WACArjB,MAAAD,KAAA8hB,EAAgB,WAAhB,gBAAA9hB,GAAwB,eAAxB,gBAAAC,GAAoC;AAAA,UACpC,CAACtE,MAAA;;AACC,mBAAAomB,EAASD,EAAgB,IAAI,UAAU;AAAA,cACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,cAC9B,YAAY;AAAA,gBACV,KAAIniB,KAAAmiB,EAAgB,WAAhB,gBAAAniB,GAAwB,eAAc,CAAA;AAAA,gBAC1C,UAAUhE,EAAE,OAAO;AAAA,cAAA;AAAA,YACrB,CACD;AAAA;AAAA,QAAA;AAAA,QAGJ4nB;AAAA,UACC;AAAA,YACApjB,KAAA2hB,EAAgB,eAAhB,gBAAA3hB,GAA4B,SAAQ;AAAA,UACpC,CAACxE,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,MAAMnmB,EAAE,OAAO;AAAA,UAAA,CAChB;AAAA,UACHoqB;AAAA,QAAA;AAAA,WAEA7lB,KAAA4hB,EAAgB,eAAhB,gBAAA5hB,GAA4B,SAAQ,aAAa,aACjD,gBAAAzE,EAAA8L,IAAA,EACG,UAAA;AAAA,UAAAgc;AAAA,YACC;AAAA,cACAnjB,KAAA0hB,EAAgB,eAAhB,gBAAA1hB,GAA4B,iBAAgB;AAAA,YAC5C,CAACzE,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,cAAcnmB,EAAE,OAAO;AAAA,YAAA,CACxB;AAAA,YACHqqB;AAAA,UAAA;AAAA,UAGDzC;AAAA,YACC;AAAA,cACAhjB,KAAAuhB,EAAgB,eAAhB,gBAAAvhB,GAA4B,cAAa;AAAA,YACzC,CAAC5E,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,WAAWnmB,EAAE,OAAO;AAAA,YAAA,CACrB;AAAA,YACHsqB;AAAA,UAAA;AAAA,UAED3C;AAAA,YACC;AAAA,aACA7iB,IAAAqhB,EAAgB,eAAhB,gBAAArhB,EAA4B;AAAA,YAC5B,CAAC9E,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoBnmB,EAAE,OAAO;AAAA,YAAA,CAC9B;AAAA,UAAA;AAAA,UAEJ4nB;AAAA,YACC;AAAA,cACA5iB,KAAAmhB,EAAgB,eAAhB,gBAAAnhB,GAA4B,yBAAwB;AAAA,YACpD,CAAChF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,sBAAsB,OAAOnmB,EAAE,OAAO,KAAK;AAAA,YAAA,CAC5C;AAAA,YACHgqB;AAAA,UAAA;AAAA,UAEDrC;AAAA,YACC;AAAA,aACA1iB,IAAAkhB,EAAgB,eAAhB,gBAAAlhB,EAA4B;AAAA,YAC5B,CAACjF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,kBAAkBnmB,EAAE,OAAO;AAAA,YAAA,CAC5B;AAAA,UAAA;AAAA,UAEJ4nB;AAAA,YACC;AAAA,cACA1iB,IAAAihB,EAAgB,eAAhB,gBAAAjhB,EAA4B,uBAAsB;AAAA,YAClD,CAAClF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoB,OAAOnmB,EAAE,OAAO,KAAK;AAAA,YAAA,CAC1C;AAAA,YACHgqB;AAAA,UAAA;AAAA,QACF,EAAA,CACF,IAEA,gBAAAlqB,EAAA8L,IAAA,EACG,UAAA;AAAA,UAAA+b;AAAA,YACC;AAAA,aACAxiB,IAAAghB,EAAgB,eAAhB,gBAAAhhB,EAA4B;AAAA,YAC5B,CAACnF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,qBAAqBnmB,EAAE,OAAO;AAAA,YAAA,CAC/B;AAAA,UAAA;AAAA,UAEJ2nB;AAAA,YACC;AAAA,aACAviB,KAAA+gB,EAAgB,eAAhB,gBAAA/gB,GAA4B;AAAA,YAC5B,CAACpF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoBnmB,EAAE,OAAO;AAAA,YAAA,CAC9B;AAAA,UAAA;AAAA,QACL,GACF;AAAA,QAED4nB;AAAA,UACC;AAAA,YACAviB,KAAA8gB,EAAgB,eAAhB,gBAAA9gB,GAA4B,YAAW;AAAA,UACvC,CAACrF,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,SAAS,OAAOnmB,EAAE,OAAO,KAAK;AAAA,UAAA,CAC/B;AAAA,UACHgqB;AAAA,QAAA;AAAA,QAEDnC;AAAA,UACC;AAAA,WACAviB,KAAA6gB,EAAgB,oBAAhB,gBAAA7gB,GAAiC;AAAA,UACjC,MACE2hB,GAAoB;AAAA,YAClB,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,YAAY;AAAA,UAAA,CACb;AAAA,QAAA;AAAA,MACL,GACF;AAAA,IAEJ;AAEA,QAAId,EAAgB,SAAS,gBAAgB;AAC3C,YAAM6D,IAAiB,MAAM,KAAK,EAAE,QAAQ,GAAA,GAAM,CAACxK,GAAG7X,OAAU;AAC9D,cAAMsiB,KAAatiB,KAAQ;AAC3B,eAAO;AAAA,UACL,OAAO,GAAGsiB,EAAU;AAAA,UACpB,OAAO,QAAQA,KAAa,KAAK,QAAQ,CAAC,CAAC;AAAA,QAAA;AAAA,MAE/C,CAAC;AAED,aACE,gBAAAnqB,EAAA8L,IAAA,EACE,UAAA;AAAA,QAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,qBAAA,CAExC;AAAA,QACCsnB;AAAA,UACC;AAAA,WACAniB,IAAA4gB,EAAgB,UAAhB,gBAAA5gB,EAAuB;AAAA,UACvB,CAACvF,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,cAAc,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,UAAA,CACzC;AAAA,QAAA;AAAA,QAEJ0nB;AAAA,UACC;AAAA,WACAliB,KAAA2gB,EAAgB,UAAhB,gBAAA3gB,GAAuB;AAAA,UACvB,CAACxF,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,WAAW,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,UAAA,CACtC;AAAA,QAAA;AAAA,QAEJ0nB;AAAA,UAAY;AAAA,WAAgBjiB,KAAA0gB,EAAgB,UAAhB,gBAAA1gB,GAAuB;AAAA,UAAY,CAACzF,MAC/DomB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,YAAY,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,UAAA,CACvC;AAAA,QAAA;AAAA,QAEF0nB;AAAA,UACC;AAAA,WACAhiB,KAAAygB,EAAgB,UAAhB,gBAAAzgB,GAAuB;AAAA,UACvB,CAAC1F,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,cAAc,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,UAAA,CACzC;AAAA,QAAA;AAAA,QAEJ0nB;AAAA,UACC;AAAA,WACA/hB,IAAAwgB,EAAgB,UAAhB,gBAAAxgB,EAAuB;AAAA,UACvB,CAAC3F,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,eAAe,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,UAAA,CAC1C;AAAA,QAAA;AAAA,QAGJ0nB;AAAA,UACC;AAAA,YACA9hB,KAAAugB,EAAgB,WAAhB,gBAAAvgB,GAAwB,cAAa;AAAA,UACrC,CAAC5F,MAAM;AACL,kBAAMsT,KAAMtT,EAAE,OAAO;AACrB,gBAAIsT,OAAQ,IAAI;AACd,cAAA8S,EAASD,EAAgB,IAAI,UAAU;AAAA,gBACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,gBAC9B,WAAW;AAAA,cAAA,CACZ;AACD;AAAA,YACF;AACA,kBAAMoE,KAAM,KAAK,MAAM,OAAOjX,EAAG,CAAC;AAClC,YAAI,CAAC,OAAO,MAAMiX,EAAG,KAAKA,MAAO,KAAKA,MAAO,MAC3CnE,EAASD,EAAgB,IAAI,UAAU;AAAA,cACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,cAC9B,WAAWoE;AAAA,YAAA,CACZ;AAAA,UAEL;AAAA,UACA,EAAE,YAAY,EAAE,KAAK,GAAG,KAAK,IAAI,MAAM,EAAA,EAAE;AAAA,QAAE;AAAA,QAG5C7C;AAAA,UACC;AAAA,YACA7hB,KAAAsgB,EAAgB,WAAhB,gBAAAtgB,GAAwB,YAAW;AAAA,UACnC,CAAC7F,MAAM;AACL,kBAAMsT,KAAMtT,EAAE,OAAO;AACrB,gBAAIsT,OAAQ,IAAI;AACd,cAAA8S,EAASD,EAAgB,IAAI,UAAU;AAAA,gBACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,gBAC9B,SAAS;AAAA,cAAA,CACV;AACD;AAAA,YACF;AACA,kBAAMoE,KAAM,OAAOjX,EAAG;AACtB,YAAI,CAAC,OAAO,MAAMiX,EAAG,KAAKA,MAAO,KAAKA,MAAO,KAC3CnE,EAASD,EAAgB,IAAI,UAAU;AAAA,cACrC,GAAIA,EAAgB,UAAU,CAAA;AAAA,cAC9B,SAASoE;AAAA,YAAA,CACV;AAAA,UAEL;AAAA,UACA,EAAE,YAAY,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,KAAA,EAAK;AAAA,QAAE;AAAA,QAE/C,gBAAAzqB;AAAA,UAACC;AAAAA,UAAA;AAAA,YACC,IAAI;AAAA,cACF,SAAS;AAAA,cACT,gBAAgB;AAAA,cAChB,YAAY;AAAA,cACZ,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,OAAO,WAAW,YAAY,IAAA;AAAA,kBACrC,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGD,gBAAAH;AAAA,gBAAColB;AAAA,gBAAA;AAAA,kBACC,SAAS,EAAQc,EAAgB;AAAA,kBACjC,UAAU,CAACnmB,MACTomB;AAAA,oBACED,EAAgB;AAAA,oBAChB;AAAA,oBACAnmB,EAAE,OAAO;AAAA,kBAAA;AAAA,gBACX;AAAA,cAAA;AAAA,YAEJ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEDuoB,GAAsBpC,CAAe;AAAA,QACrCsB;AAAA,UACC;AAAA,YACA3hB,KAAAqgB,EAAgB,YAAhB,gBAAArgB,GAAyB,YACvBC,KAAAogB,EAAgB,YAAhB,gBAAApgB,GAAyB;AAAA,UAC3B,CAAC/F,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,YACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,YAC/B,OAAOnmB,EAAE,OAAO;AAAA,UAAA,CACjB;AAAA,QAAA;AAAA,QAEJynB;AAAA,UACC;AAAA,YACAzhB,KAAAmgB,EAAgB,YAAhB,gBAAAngB,GAAyB,eACvBC,KAAAkgB,EAAgB,YAAhB,gBAAAlgB,GAAyB;AAAA,UAC3B,CAACjG,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,YACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,YAC/B,UAAUnmB,EAAE,OAAO;AAAA,UAAA,CACpB;AAAA,QAAA;AAAA,QAEJ6nB;AAAA,UACC;AAAA,WACA3hB,KAAAigB,EAAgB,oBAAhB,gBAAAjgB,GAAiC;AAAA,UACjC,MACE+gB,GAAoB;AAAA,YAClB,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,YAAY;AAAA,UAAA,CACb;AAAA,QAAA;AAAA,QAEJW;AAAA,UACC;AAAA,YACAzhB,KAAAggB,EAAgB,UAAhB,gBAAAhgB,GAAuB,qBAAoB;AAAA,UAC3C,CAACnG,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,kBAAkBnmB,EAAE,OAAO;AAAA,UAAA,CAC5B;AAAA,UACHwqB;AAAA,QAAA;AAAA,QAED5C;AAAA,UACC;AAAA,YACAxhB,KAAA+f,EAAgB,UAAhB,gBAAA/f,GAAuB,eAAc;AAAA,UACrC,CAACpG,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,YAAYnmB,EAAE,OAAO;AAAA,UAAA,CACtB;AAAA,UACHyqB;AAAA,QAAA;AAAA,QAGD7C;AAAA,UACC;AAAA,UACAe,IAAoBniB,KAAA2f,EAAgB,UAAhB,gBAAA3f,GAAuB,aAAa;AAAA,UACxD,CAACxG,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,eAAenmB,EAAE,OAAO;AAAA,UAAA,CACzB;AAAA,UACHkqB;AAAA,QAAA;AAAA,QAGDtC;AAAA,UACC;AAAA,UACAe,IAAoBjiB,KAAAyf,EAAgB,UAAhB,gBAAAzf,GAAuB,gBAAgB;AAAA,UAC3D,CAAC1G,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,YACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,YAC7B,kBAAkBnmB,EAAE,OAAO;AAAA,UAAA,CAC5B;AAAA,UACHkqB;AAAA,QAAA;AAAA,QAGDtC;AAAA,UACC;AAAA,YACAhhB,KAAAuf,EAAgB,eAAhB,gBAAAvf,GAA4B,SAAQ;AAAA,UACpC,CAAC5G,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,MAAMnmB,EAAE,OAAO;AAAA,UAAA,CAChB;AAAA,UACHoqB;AAAA,QAAA;AAAA,WAEAvjB,KAAAsf,EAAgB,eAAhB,gBAAAtf,GAA4B,SAAQ,aAAa,aACjD,gBAAA/G,EAAA8L,IAAA,EACG,UAAA;AAAA,UAAAgc;AAAA,YACC;AAAA,cACA9gB,KAAAqf,EAAgB,eAAhB,gBAAArf,GAA4B,iBAAgB;AAAA,YAC5C,CAAC9G,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,cAAcnmB,EAAE,OAAO;AAAA,YAAA,CACxB;AAAA,YACHqqB;AAAA,UAAA;AAAA,UAGDzC;AAAA,YACC;AAAA,cACA7gB,KAAAof,EAAgB,eAAhB,gBAAApf,GAA4B,cAAa;AAAA,YACzC,CAAC/G,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,WAAWnmB,EAAE,OAAO;AAAA,YAAA,CACrB;AAAA,YACHsqB;AAAA,UAAA;AAAA,UAED3C;AAAA,YACC;AAAA,aACAzgB,KAAAif,EAAgB,eAAhB,gBAAAjf,GAA4B;AAAA,YAC5B,CAAClH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoBnmB,EAAE,OAAO;AAAA,YAAA,CAC9B;AAAA,UAAA;AAAA,UAEJ4nB;AAAA,YACC;AAAA,cACAzgB,KAAAgf,EAAgB,eAAhB,gBAAAhf,GAA4B,yBAAwB;AAAA,YACpD,CAACnH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,sBAAsB,OAAOnmB,EAAE,OAAO,KAAK;AAAA,YAAA,CAC5C;AAAA,YACHgqB;AAAA,UAAA;AAAA,UAEDrC;AAAA,YACC;AAAA,aACAvgB,KAAA+e,EAAgB,eAAhB,gBAAA/e,GAA4B;AAAA,YAC5B,CAACpH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,kBAAkBnmB,EAAE,OAAO;AAAA,YAAA,CAC5B;AAAA,UAAA;AAAA,UAEJ4nB;AAAA,YACC;AAAA,cACAvgB,KAAA8e,EAAgB,eAAhB,gBAAA9e,GAA4B,uBAAsB;AAAA,YAClD,CAACrH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoB,OAAOnmB,EAAE,OAAO,KAAK;AAAA,YAAA,CAC1C;AAAA,YACHgqB;AAAA,UAAA;AAAA,QACF,EAAA,CACF,IAEA,gBAAAlqB,EAAA8L,IAAA,EACG,UAAA;AAAA,UAAA+b;AAAA,YACC;AAAA,aACArgB,KAAA6e,EAAgB,eAAhB,gBAAA7e,GAA4B;AAAA,YAC5B,CAACtH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,qBAAqBnmB,EAAE,OAAO;AAAA,YAAA,CAC/B;AAAA,UAAA;AAAA,UAEJ2nB;AAAA,YACC;AAAA,aACApgB,KAAA4e,EAAgB,eAAhB,gBAAA5e,GAA4B;AAAA,YAC5B,CAACvH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,cACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,cAClC,oBAAoBnmB,EAAE,OAAO;AAAA,YAAA,CAC9B;AAAA,UAAA;AAAA,QACL,GACF;AAAA,QAED2nB;AAAA,UACC;AAAA,WACAngB,KAAA2e,EAAgB,eAAhB,gBAAA3e,GAA4B;AAAA,UAC5B,CAACxH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,WAAWnmB,EAAE,OAAO;AAAA,UAAA,CACrB;AAAA,QAAA;AAAA,QAEJ2nB;AAAA,UACC;AAAA,WACAlgB,KAAA0e,EAAgB,eAAhB,gBAAA1e,GAA4B;AAAA,UAC5B,CAACzH,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,UAAUnmB,EAAE,OAAO;AAAA,UAAA,CACpB;AAAA,QAAA;AAAA,QAEJ4nB;AAAA,UACC;AAAA,YACA8C,KAAAvE,EAAgB,eAAhB,gBAAAuE,GAA4B,YAAW;AAAA,UACvC,CAAC1qB,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,YACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,YAClC,SAAS,OAAOnmB,EAAE,OAAO,KAAK;AAAA,UAAA,CAC/B;AAAA,UACHgqB;AAAA,QAAA;AAAA,MACF,GACF;AAAA,IAEJ;AAEA,WAAI7D,EAAgB,SAAS,aAEzB,gBAAArmB,EAAA8L,IAAA,EACE,UAAA;AAAA,MAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,yBAAA,CAExC;AAAA,MACCsnB;AAAA,QAAY;AAAA,QAAUvB,EAAgB;AAAA,QAAQ,CAACnmB,MAC9ComB,EAASD,EAAgB,IAAI,UAAU,OAAOnmB,EAAE,OAAO,SAAS,CAAC,CAAC;AAAA,MAAA;AAAA,MAEnE0nB;AAAA,QACC;AAAA,QACAvB,EAAgB;AAAA,QAChB,CAACnmB,MACComB;AAAA,UACED,EAAgB;AAAA,UAChB;AAAA,UACA,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,QAAA;AAAA,MAC5B;AAAA,MAEH0nB;AAAA,QAAY;AAAA,QAAiBvB,EAAgB;AAAA,QAAc,CAACnmB,MAC3DomB;AAAA,UACED,EAAgB;AAAA,UAChB;AAAA,UACA,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,QAAA;AAAA,MAC5B;AAAA,MAEF,gBAAAC,EAACF,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,KAAK,GAAG,IAAI,EAAA,GACtC,UAAA,gBAAAE;AAAA,QAACkP;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,SAAQ;AAAA,UACR,SAAS,MAAMqX,EAAmBL,EAAgB,EAAE;AAAA,UACrD,UAAA;AAAA,QAAA;AAAA,MAAA,GAGH;AAAA,OACEA,EAAgB,UAAU,CAAA,GAAI,IAAI,CAAC7G,GAAO3X;;AAC1C,+BAAA7H;AAAA,UAACC;AAAAA,UAAA;AAAA,YAEC,IAAI;AAAA,cACF,QAAQ;AAAA,cACR,cAAc;AAAA,cACd,GAAG;AAAA,cACH,IAAI;AAAA,YAAA;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAD;AAAA,gBAACC;AAAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,KAAK;AAAA,oBACL,IAAI;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAAE;AAAA,sBAACkP;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,SAAQ;AAAA,wBACR,SAAS,MACP8X,GAAoB;AAAA,0BAClB,MAAM;AAAA,0BACN,QAAQ;AAAA,0BACR,YAAYtf;AAAA,wBAAA,CACb;AAAA,wBAGF,UAAA2X,EAAM,eAAe,iBAAiB;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAExCA,EAAM,gBACL,gBAAAxf;AAAA,sBAACC;AAAAA,sBAAA;AAAA,wBACC,IAAI;AAAA,0BACF,SAAS;AAAA,0BACT,YAAY;AAAA,0BACZ,KAAK;AAAA,0BACL,QAAQ;AAAA,0BACR,cAAc;AAAA,0BACd,GAAG;AAAA,0BACH,IAAI;AAAA,0BACJ,UAAU;AAAA,0BACV,QAAQ;AAAA,0BACR,WAAW;AAAA,4BACT,iBAAiB;AAAA,4BACjB,aAAa;AAAA,0BAAA;AAAA,wBACf;AAAA,wBAEF,SAAS,MAAM;AACb,gCAAM4qB,KAASrZ,GAAqB;AAAA,4BAClC,CAAClB,OAAQA,GAAI,SAASkP,EAAM;AAAA,0BAAA;AAE9B,0BAAIqL,SAAsBA,EAAM;AAAA,wBAClC;AAAA,wBACA,OAAM;AAAA,wBAEN,UAAA;AAAA,0BAAA,gBAAA1qB,EAACF,GAAA,EAAI,IAAI,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,EAAA,GAC5C,UAAA,gBAAAE;AAAA,4BAACkQ;AAAA,4BAAA;AAAA,8BACC,KAAKmB,GAAqB;AAAA,gCACxB,CAAClB,OAAQA,GAAI,SAASkP,EAAM;AAAA,8BAAA;AAAA,8BAE9B,QAAO;AAAA,4BAAA;AAAA,0BAAA,GAEX;AAAA,0BACA,gBAAArf;AAAA,4BAACG;AAAA,4BAAA;AAAA,8BACC,SAAQ;AAAA,8BACR,OAAM;AAAA,8BACN,IAAI;AAAA,gCACF,UAAU;AAAA,gCACV,cAAc;AAAA,gCACd,YAAY;AAAA,8BAAA;AAAA,8BAEd,SACE4D,KAAAsN,GAAqB;AAAA,gCACnB,CAAClB,OAAQA,GAAI,SAASkP,EAAM;AAAA,8BAAA,MAD9B,gBAAAtb,GAEG,SAAQsb,EAAM;AAAA,8BAGlB,YAAArb,KAAAqN,GAAqB;AAAA,gCACpB,CAAClB,OAAQA,GAAI,SAASkP,EAAM;AAAA,8BAAA,MAD7B,gBAAArb,GAEE,SAAQqb,EAAM;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBACnB;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACF;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGH0I;AAAA,gBACC;AAAA,gBACA,OAAO1I,EAAM,cAAe,YACxBpb,KAAAob,EAAM,eAAN,gBAAApb,GAAkB,SAClBob,EAAM;AAAA,gBACV,CAACY,OACCuG;AAAA,kBACEN,EAAgB;AAAA,kBAChBxe;AAAA,kBACA;AAAA,kBACAuY;AAAA,gBAAA;AAAA,cACF;AAAA,cAGJ,gBAAApgB;AAAA,gBAACC;AAAAA,gBAAA;AAAA,kBACC,IAAI;AAAA,oBACF,SAAS;AAAA,oBACT,YAAY;AAAA,oBACZ,gBAAgB;AAAA,oBAChB,IAAI;AAAA,oBACJ,IAAI;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAAE,EAACG,GAAA,EAAW,SAAQ,SAAQ,UAAA,eAAW;AAAA,oBACvC,gBAAAH;AAAA,sBAAColB;AAAA,sBAAA;AAAA,wBACC,SAAS/F,EAAM,cAAc;AAAA,wBAC7B,UAAU,CAACtf,OACTymB;AAAA,0BACEN,EAAgB;AAAA,0BAChBxe;AAAA,0BACA;AAAA,0BACA3H,GAAE,OAAO;AAAA,wBAAA;AAAA,wBAGb,MAAK;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACP;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGDsf,EAAM,cAAc,MACnB,gBAAArf,EAACF,GAAA,EAAI,IAAI,EAAE,IAAI,GAAG,IAAI,EAAA,GACpB,UAAA,gBAAAE;AAAA,gBAACuP;AAAA,gBAAA;AAAA,kBACC,OAAO8P,EAAM;AAAA,kBACb,UAAU,CAACsL,OACTnE;AAAA,oBACEN,EAAgB;AAAA,oBAChBxe;AAAA,oBACA;AAAA,oBACAijB;AAAA,kBAAA;AAAA,kBAGJ,oBAAA7d;AAAA,kBACA,WAAAC;AAAA,gBAAA;AAAA,cAAA,GAEJ;AAAA,cAGF,gBAAA/M;AAAA,gBAACkP;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,SAAS,MAAMuX,EAAsBP,EAAgB,IAAIxe,CAAK;AAAA,kBAC/D,UAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAED;AAAA,UAAA;AAAA,UAjJKA;AAAA,QAAA;AAAA,OAmJR;AAAA,IAAA,GACH,IAIAwe,EAAgB,SAAS,SAEzB,gBAAArmB,EAAA8L,IAAA,EACE,UAAA;AAAA,MAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,qBAAA,CAExC;AAAA,MACCqnB;AAAA,QAAU;AAAA,SAAQoD,KAAA1E,EAAgB,YAAhB,gBAAA0E,GAAyB;AAAA,QAAM,CAAC7qB,MACjDomB,EAASD,EAAgB,IAAI,WAAW;AAAA,UACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,UAC/B,MAAMnmB,EAAE,OAAO;AAAA,QAAA,CAChB;AAAA,MAAA;AAAA,MAEF4nB;AAAA,QACC;AAAA,UACAkD,KAAA3E,EAAgB,YAAhB,gBAAA2E,GAAyB,aAAY;AAAA,QACrC,CAAC9qB,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,UACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,UAC/B,UAAUnmB,EAAE,OAAO;AAAA,QAAA,CACpB;AAAA,QACHkqB;AAAA,MAAA;AAAA,MAEDtC;AAAA,QACC;AAAA,UACAmD,KAAA5E,EAAgB,YAAhB,gBAAA4E,GAAyB,eAAc;AAAA,QACvC,CAAC/qB,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,UACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,UAC/B,YAAYnmB,EAAE,OAAO;AAAA,QAAA,CACtB;AAAA,QACHmqB;AAAA,MAAA;AAAA,MAEDvC;AAAA,QACC;AAAA,UACAoD,KAAA7E,EAAgB,YAAhB,gBAAA6E,GAAyB,cAAa;AAAA,QACtC,CAAChrB,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,UACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,UAC/B,WAAWnmB,EAAE,OAAO;AAAA,QAAA,CACrB;AAAA,QACHirB;AAAA,MAAA;AAAA,MAEDrD;AAAA,QACC;AAAA,UACAsD,KAAA/E,EAAgB,YAAhB,gBAAA+E,GAAyB,eAAc;AAAA,QACvC,CAAClrB,MACComB,EAASD,EAAgB,IAAI,WAAW;AAAA,UACtC,GAAIA,EAAgB,WAAW,CAAA;AAAA,UAC/B,YAAYnmB,EAAE,OAAO;AAAA,QAAA,CACtB;AAAA,QACHmrB;AAAA,MAAA;AAAA,MAEDxD;AAAA,QACC;AAAA,SACAyD,KAAAjF,EAAgB,eAAhB,gBAAAiF,GAA4B;AAAA,QAC5B,CAACprB,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,UACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,UAClC,WAAWnmB,EAAE,OAAO;AAAA,QAAA,CACrB;AAAA,MAAA;AAAA,MAEJ2nB;AAAA,QACC;AAAA,SACA0D,KAAAlF,EAAgB,eAAhB,gBAAAkF,GAA4B;AAAA,QAC5B,CAACrrB,MACComB,EAASD,EAAgB,IAAI,cAAc;AAAA,UACzC,GAAIA,EAAgB,cAAc,CAAA;AAAA,UAClC,UAAUnmB,EAAE,OAAO;AAAA,QAAA,CACpB;AAAA,MAAA;AAAA,IACL,GACF,IAIAmmB,EAAgB,SAAS,YAEzB,gBAAArmB,EAAA8L,IAAA,EACE,UAAA;AAAA,MAAA,gBAAA3L,EAACG,GAAA,EAAW,SAAQ,MAAK,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,wBAAA,CAExC;AAAA,MACCwnB;AAAA,QACC;AAAA,UACA0D,KAAAnF,EAAgB,UAAhB,gBAAAmF,GAAuB,gBAAe;AAAA,QACtC,CAACtrB,MACComB,EAASD,EAAgB,IAAI,SAAS;AAAA,UACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,UAC7B,aAAanmB,EAAE,OAAO;AAAA,QAAA,CACvB;AAAA,QACHyqB;AAAA,MAAA;AAAA,MAED/C;AAAA,QAAY;AAAA,SAAU6D,KAAApF,EAAgB,UAAhB,gBAAAoF,GAAuB;AAAA,QAAQ,CAACvrB,MACrDomB,EAASD,EAAgB,IAAI,SAAS;AAAA,UACpC,GAAIA,EAAgB,SAAS,CAAA;AAAA,UAC7B,QAAQ,OAAOnmB,EAAE,OAAO,SAAS,CAAC;AAAA,QAAA,CACnC;AAAA,MAAA;AAAA,IACH,GACF,sBAKDI,GAAA,EAAW,SAAQ,SAAQ,OAAM,iBAAgB,UAAA,uDAElD;AAAA,EAEJ,GAEMorB,KAAqBrF,KACzB,gBAAArmB,EAAA8L,IAAA,EACE,UAAA;AAAA,IAAA,gBAAA3L;AAAA,MAACoR;AAAA,MAAA;AAAA,QACC,MAAM2V,EAAiB;AAAA,QACvB,SAAS,MACPC,GAAoB,EAAE,MAAM,IAAO,QAAQ,MAAM,YAAY,MAAM;AAAA,QAErE,sBAAA3V;AAAA,QACA,eAAAC;AAAA,QACA,kBACEyV,EAAiB,WAAW,cAC5BA,EAAiB,eAAe,SAC3BhjB,MAAAmiB,EAAgB,UAAU,IAAIa,EAAiB,UAAU,MAAzD,gBAAAhjB,GACG,iBAAgB,KACpBgjB,EAAiB,WAAW,uBAC1B/iB,KAAAkiB,KAAA,gBAAAA,EAAiB,oBAAjB,gBAAAliB,GAAkC,iBAAgB;AAAA,QAG1D,UAAU,CAACyN,MAAiB;AAC1B,UACEsV,EAAiB,WAAW,cAC5BA,EAAiB,eAAe,OAEhCP;AAAA,YACEN,EAAgB;AAAA,YAChBa,EAAiB;AAAA,YACjB;AAAA,YACAtV;AAAA,UAAA,IAEOsV,EAAiB,WAAW,qBACrCZ,EAASD,EAAgB,IAAI,mBAAmB;AAAA,YAC9C,GAAIA,EAAgB,mBAAmB,CAAA;AAAA,YACvC,cAAczU;AAAA,UAAA,CACf;AAAA,QAEL;AAAA,MAAA;AAAA,IAAA;AAAA,IAGDM,MACC,gBAAA/R;AAAA,MAAC+Q;AAAA,MAAA;AAAA,QACC,MAAM,CAAC,CAACgB;AAAA,QACR,SAAS,MAAMC,GAAc,IAAI;AAAA,QACjC,KAAKD;AAAA,MAAA;AAAA,IAAA;AAAA,EACP,GAEJ;AAGF,SAAI2U,uBAEC5mB,GAAA,EACE,UAAA;AAAA,IAAA+pB,GAAA;AAAA,IACA0B;AAAA,EAAA,GACH,sBAKDhf,IAAA,EAAM,IAAI,EAAE,GAAG,KACd,UAAA;AAAA,IAAA,gBAAAvM;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,IAAI,EAAE,YAAY,QAAQ,IAAI,GAAG,OAAO,oBAAA;AAAA,QACzC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,sBAGAsM,IAAA,EAAQ,IAAI,EAAE,IAAI,KAAK;AAAA,IACvByZ,IACC,gBAAArmB,EAAA8L,IAAA,EACG,UAAA;AAAA,MAAAke,GAAA;AAAA,MACD,gBAAA7pB;AAAA,QAACkP;AAAA,QAAA;AAAA,UACC,SAASkX;AAAA,UACT,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,IAAI,EAAE,IAAI,EAAA;AAAA,UACX,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,wBAGA3Z,IAAA,EAAQ,IAAI,EAAE,IAAI,IAAE,CAAG;AAAA,IAAA,EAAA,CAC1B,IAEA,gBAAAzM,EAACG,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,IAAI,EAAA,GAAK,UAAA,4DAAA,CAE3C;AAAA,IAED,CAACumB,MAAoBiC,GAAA;AAAA,IACrB4C;AAAA,EAAA,GACH;AAEJ;AACA5F,GAAmB,YAAY;AAAA,EAC7B,iBAAiBvlB,EAAU;AAAA,EAC3B,UAAUA,EAAU;AAAA,EACpB,YAAYA,EAAU;AAAA,EACtB,eAAeA,EAAU;AAAA,EACzB,cAAcA,EAAU;AAAA,EACxB,gBAAgBA,EAAU;AAAA,EAC1B,wBAAwBA,EAAU;AAAA,EAClC,wBAAwBA,EAAU;AAAA,EAClC,oBAAoBA,EAAU;AAAA,EAC9B,uBAAuBA,EAAU;AAAA,EACjC,uBAAuBA,EAAU;AAAA,EACjC,sBAAsBA,EAAU;AAAA,EAChC,oBAAoBA,EAAU;AAAA,EAC9B,kBAAkBA,EAAU;AAC9B;AACA,SAASM,GAAW,EAAE,KAAA8qB,KAAO;AAC3B,QAAM,CAACC,GAASC,CAAU,IAAIhiB,EAAS,EAAE;AAEzC,SAAAyI,GAAU,MAAM;AACd,QAAIqZ,GAAK;AAGP,YAAMG,IAFS,IAAI,UAAA,EACA,gBAAgBH,GAAK,eAAe,EAChC;AAGvB,UAAI,CADUG,EAAW,aAAa,SAAS,GACjC;AACZ,cAAMC,IAAQD,EAAW,aAAa,OAAO,KAAK,OAC5C1b,IAAS0b,EAAW,aAAa,QAAQ,KAAK;AACpD,QAAAA,EAAW,aAAa,WAAW,OAAOC,CAAK,IAAI3b,CAAM,EAAE;AAAA,MAC7D;AACA,MAAA0b,EAAW,gBAAgB,OAAO,GAClCA,EAAW,gBAAgB,QAAQ,GACnCA,EAAW,aAAa,SAAS,4BAA4B;AAE7D,YAAME,IAAgB,IAAI,gBAAgB,kBAAkBF,CAAU;AACtE,MAAAD,EAAWG,CAAa;AAAA,IAC1B;AAAA,EACF,GAAG,CAACL,CAAG,CAAC,GAGN,gBAAAxrB;AAAA,IAACiT;AAAA,IAAA;AAAA,MACC,MAAM;AAAA,MACN,IAAI;AAAA,QACF,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,YAAY;AAAA,QACZ,WAAW;AAAA,UACT,iBAAiB;AAAA,UACjB,QAAQ;AAAA,QAAA;AAAA,QAEV,UAAU;AAAA,MAAA;AAAA,MAGZ,4BAAC,OAAA,EAAI,yBAAyB,EAAE,QAAQwY,IAAQ,CAAG;AAAA,IAAA;AAAA,EAAA;AAGzD;AAEA/qB,GAAW,YAAY;AAAA,EACrB,KAAKN,EAAU,OAAO;AACxB;AAEA,MAAMujB,KAAa,CAACzhB,GAAU2hB,IAAO,WAAW;AAC9C,MAAI1hB,IAAa;AAYjB,MAVI,OAAOD,KAAa,YAAYA,MAAa,OAC3CA,EAAS,SAAS,SAAS,OAAOA,EAAS,WAAY,WACzDC,IAAaD,EAAS,UACb,OAAOA,EAAS,OAAQ,aACjCC,IAAaD,EAAS,OAEf,OAAOA,KAAa,aAC7BC,IAAaD,IAGX,OAAOC,KAAe,YAAYA,EAAW,SAAS,MAAM,GAAG;AACjE,UAAMC,IAAQD,EAAW,MAAM,qBAAqB;AACpD,IAAIC,MACFD,IAAaC,EAAM,CAAC;AAAA,EAExB;AACA,SAAID,IAEA,gBAAAnC;AAAA,IAACF;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,QAAQ+jB;AAAA,QACR,OAAOA;AAAA,QACP,SAAS;AAAA,QACT,gBAAgB;AAAA,QAChB,YAAY;AAAA,MAAA;AAAA,MAGd,UAAA,gBAAA7jB,EAACU,IAAA,EAAW,KAAKyB,EAAA,CAAY;AAAA,IAAA;AAAA,EAAA,IAMjC,gBAAAnC;AAAA,IAACF;AAAAA,IAAA;AAAA,MACC,IAAI;AAAA,QACF,UAAU;AAAA,QACV,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,cAAc;AAAA,MAAA;AAAA,MAEjB,UAAA;AAAA,IAAA;AAAA,EAAA;AAIL,GACMgsB,KAA8B,CAAC;AAAA,EACnC,SAAA9qB;AAAA,EACA,eAAA+qB,IAAgB;AAAA,EAChB,UAAA9F,IAAW;AACb,MAqBI,gBAAApmB;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC,IAAI;AAAA,MACF,OAAO;AAAA,MACP,GAAG;AAAA,MACH,IAAIisB,IAAgB,SAAS;AAAA,MAC7B,iBAAiB;AAAA,MACjB,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,WAAW;AAAA,MACX,QAAQ9F,IAAW,gBAAgB;AAAA,MACnC,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,SAASA,IAAW,OAAO;AAAA,MAC3B,IAAI;AAAA,MACJ,WAAW;AAAA,QACT,iBAAiB;AAAA,QACjB,aAAa;AAAA,MAAA;AAAA,IACf;AAAA,IAGD,UAAA;AAAA,OAzCyB,CAAC/jB,GAAU2hB,MAAS;AAChD,cAAMC,IAAcH,GAAW3iB,EAAQ,MAAM,MAAM;AAEnD,eAAI8iB,KAAeA,EAAY,SAAShkB,IAC/BN,GAAM,aAAaskB,GAAa;AAAA,UACrC,IAAI;AAAA,YACF,GAAGA,EAAY,MAAM;AAAA,YACrB,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,aAAa;AAAA,UAAA;AAAA,QACf,CACD,IAGD,gBAAA9jB,EAACF,GAAA,EAAI,IAAI,EAAE,IAAI,OAAO,SAAS,QAAQ,YAAY,SAAA,GAChD,UAAA6jB,GAAWzhB,GAAU2hB,CAAI,GAC5B;AAAA,MAEJ,GAuB2B7iB,EAAQ,MAAM,MAAM;AAAA,MAE3C,gBAAAhB,EAACG,GAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,YAAY,UAAU,OAAO,OAAA,GAC5D,UAAAa,KAAA,gBAAAA,EAAS,KAAA,CACZ;AAAA,IAAA;AAAA,EAAA;AAAA;AAIN8qB,GAA4B,YAAY;AAAA,EACtC,SAAS1rB,EAAU;AAAA,EACnB,eAAeA,EAAU;AAAA,EACzB,UAAUA,EAAU;AACtB;AACA,MAAMslB,KAAuB,CAAC;AAAA,EAC5B,MAAAtc;AAAA,EACA,iBAAAqS;AAAA,EACA,eAAA7a;AAAA,EACA,eAAAorB;AAAA,EACA,gBAAAC,wBAAqB,IAAA;AACvB,MAAM;AACJ,QAAMC,IAAkBtrB,MAAkBwI,EAAK,MACzC+iB,IAA0B,CAACpsB,MAAM;AACrC,IAAAA,EAAE,gBAAA;AAAA,EACJ;AAEA,SAAIqJ,EAAK,SAAS,UAEd,gBAAApJ;AAAA,IAACqlB;AAAA,IAAA;AAAA,MAEC,IAAIjc,EAAK;AAAA,MACT,eAAeqS,EAAgB;AAAA,MAC/B,UAAUrS;AAAA,MACV,UAAU6iB,EAAe,IAAI,OAAO7iB,EAAK,EAAE,CAAC;AAAA,MAE5C,UAAA,gBAAApJ,EAACuB,GAAA,EAAK,MAAI,IAAC,IAAI,IACb,UAAA,gBAAAvB;AAAA,QAAC8rB;AAAA,QAAA;AAAA,UACC,SAAS1iB;AAAA,UACT,UAAU6iB,EAAe,IAAI,OAAO7iB,EAAK,EAAE,CAAC;AAAA,QAAA;AAAA,MAAA,EAC9C,GAJsBA,EAAK,EAK7B;AAAA,IAAA;AAAA,IAXKA,EAAK;AAAA,EAAA,IAiBd,gBAAAvJ;AAAA,IAAC0lB;AAAA,IAAA;AAAA,MAEC,IAAI;AAAA,QACF,GAAG;AAAA,QACH,YAAY,EAAE,SAAS,OAAA;AAAA,QACvB,WAAW;AAAA,QACX,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,cAAc;AAAA,MAAA;AAAA,MAEhB,UAAU2G;AAAA,MACV,UAAU,MAAMF,EAAc5iB,EAAK,IAAI;AAAA,MACvC,gBAAc;AAAA,MAEd,UAAA;AAAA,QAAA,gBAAApJ;AAAA,UAACwlB;AAAA,UAAA;AAAA,YACC,YACE,gBAAAxlB;AAAA,cAACF;AAAAA,cAAA;AAAA,gBACC,IAAI,EAAE,GAAG,EAAA;AAAA,gBACT,aAAaqsB;AAAA,gBACb,cAAcA;AAAA,gBAEd,UAAA,gBAAAnsB;AAAA,kBAACqL;AAAA,kBAAA;AAAA,oBACC,UAAS;AAAA,oBACT,OAAO;AAAA,sBACL,UAAU;AAAA,sBACV,OAAO;AAAA,sBACP,WAAW6gB,IAAkB,mBAAmB;AAAA,sBAChD,YAAY;AAAA,oBAAA;AAAA,kBACd;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,YAGJ,IAAI;AAAA,cACF,WAAW;AAAA,cACX,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,QAAQ;AAAA,cACR,WAAW,EAAE,iBAAiB,UAAA;AAAA,cAC9B,kCAAkC,EAAE,QAAQ,IAAA;AAAA,cAC5C,GAAG;AAAA,YAAA;AAAA,YAGL,UAAA,gBAAArsB,EAACC,GAAA,EAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,OAAO,OAAA,GACvD,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACqlB;AAAA,gBAAA;AAAA,kBAEC,IAAIjc,EAAK;AAAA,kBACT,eAAeqS,EAAgB;AAAA,kBAC/B,UAAUrS;AAAA,kBAEV,UAAA,gBAAApJ;AAAA,oBAACF;AAAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,IAAI;AAAA,wBACF,QAAQ;AAAA,wBACR,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,WAAW,EAAE,OAAO,UAAA;AAAA,sBAAU;AAAA,sBAEhC,SAAS,CAACC,MAAMA,EAAE,gBAAA;AAAA,sBAClB,aAAa,CAACA,MAAMA,EAAE,gBAAA;AAAA,sBACtB,cAAc,CAACA,MAAMA,EAAE,gBAAA;AAAA,sBAEvB,UAAA,gBAAAC;AAAA,wBAACqL;AAAA,wBAAA;AAAA,0BACC,UAAS;AAAA,0BACT,OAAO,EAAE,UAAU,UAAU,OAAO,oBAAA;AAAA,wBAAoB;AAAA,sBAAA;AAAA,oBAC1D;AAAA,kBAAA;AAAA,gBACF;AAAA,gBArBK,eAAejC,EAAK,IAAI;AAAA,cAAA;AAAA,cAwB/B,gBAAAvJ;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,IAAI,EAAE,YAAY,QAAQ,OAAO,qBAAqB,UAAU,EAAA;AAAA,kBAE/D,UAAA;AAAA,oBAAAiJ,EAAK;AAAA,oBAAK;AAAA,oBAAGA,EAAK,MAAM;AAAA,oBAAO;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClC,EAAA,CACF;AAAA,UAAA;AAAA,QAAA;AAAA,QAGF,gBAAApJ;AAAA,UAACylB;AAAA,UAAA;AAAA,YACC,IAAI,EAAE,GAAG,OAAO,IAAI,GAAG,iBAAiB,qBAAA;AAAA,YAExC,UAAA,gBAAAzlB,EAACuB,GAAA,EAAK,WAAS,IAAC,SAAS,KACtB,UAAA6H,EAAK,MAAM,IAAI,CAAC4Q,MACf,gBAAAha;AAAA,cAACqlB;AAAA,cAAA;AAAA,gBAEC,IAAIrL,EAAK;AAAA,gBACT,eAAeyB,EAAgB;AAAA,gBAC/B,UAAUzB;AAAA,gBACV,UAAUiS,EAAe,IAAI,OAAOjS,EAAK,EAAE,CAAC;AAAA,gBAE5C,UAAA,gBAAAha,EAACuB,GAAA,EAAK,MAAI,IAAC,IAAI,IACb,UAAA,gBAAAvB;AAAA,kBAAC8rB;AAAA,kBAAA;AAAA,oBACC,SAAS9R;AAAA,oBACT,eAAe;AAAA,oBACf,UAAUiS,EAAe,IAAI,OAAOjS,EAAK,EAAE,CAAC;AAAA,kBAAA;AAAA,gBAAA,EAC9C,GALsBA,EAAK,EAM7B;AAAA,cAAA;AAAA,cAZKA,EAAK;AAAA,YAAA,CAcb,EAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,IAlGK5Q,EAAK;AAAA,EAAA;AAqGhB;AACAsc,GAAqB,YAAY;AAAA,EAC/B,MAAMtlB,EAAU;AAAA,EAChB,iBAAiBA,EAAU;AAAA,EAC3B,eAAeA,EAAU;AAAA,EACzB,eAAeA,EAAU;AAAA,EACzB,gBAAgBA,EAAU;AAC5B;"}