@rebasepro/studio 0.0.1-canary.09e5ec5
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.
- package/LICENSE +114 -0
- package/README.md +159 -0
- package/dist/ApiExplorer-gMJt5JrS.js +1053 -0
- package/dist/ApiExplorer-gMJt5JrS.js.map +1 -0
- package/dist/AuthSimulationSelector-BF4rkRGp.js +118 -0
- package/dist/AuthSimulationSelector-BF4rkRGp.js.map +1 -0
- package/dist/BranchesView-DcHZtvXo.js +292 -0
- package/dist/BranchesView-DcHZtvXo.js.map +1 -0
- package/dist/CronJobsView-CijCToeK.js +456 -0
- package/dist/CronJobsView-CijCToeK.js.map +1 -0
- package/dist/JSEditor-D8nVp3Lp.js +1308 -0
- package/dist/JSEditor-D8nVp3Lp.js.map +1 -0
- package/dist/MonacoEditor-CMYEjiRf.js +161 -0
- package/dist/MonacoEditor-CMYEjiRf.js.map +1 -0
- package/dist/RLSEditor-DBH09u9v.js +1831 -0
- package/dist/RLSEditor-DBH09u9v.js.map +1 -0
- package/dist/SQLEditor-CkVx9vgr.js +1792 -0
- package/dist/SQLEditor-CkVx9vgr.js.map +1 -0
- package/dist/SchemaVisualizer-BgD5Zb77.js +1069 -0
- package/dist/SchemaVisualizer-BgD5Zb77.js.map +1 -0
- package/dist/StorageView-CTqGFhY9.js +907 -0
- package/dist/StorageView-CTqGFhY9.js.map +1 -0
- package/dist/common/src/collections/CollectionRegistry.d.ts +56 -0
- package/dist/common/src/collections/index.d.ts +1 -0
- package/dist/common/src/data/buildRebaseData.d.ts +14 -0
- package/dist/common/src/index.d.ts +3 -0
- package/dist/common/src/util/builders.d.ts +57 -0
- package/dist/common/src/util/callbacks.d.ts +6 -0
- package/dist/common/src/util/collections.d.ts +11 -0
- package/dist/common/src/util/common.d.ts +2 -0
- package/dist/common/src/util/conditions.d.ts +26 -0
- package/dist/common/src/util/entities.d.ts +58 -0
- package/dist/common/src/util/enums.d.ts +3 -0
- package/dist/common/src/util/index.d.ts +16 -0
- package/dist/common/src/util/navigation_from_path.d.ts +34 -0
- package/dist/common/src/util/navigation_utils.d.ts +20 -0
- package/dist/common/src/util/parent_references_from_path.d.ts +6 -0
- package/dist/common/src/util/paths.d.ts +14 -0
- package/dist/common/src/util/permissions.d.ts +5 -0
- package/dist/common/src/util/references.d.ts +2 -0
- package/dist/common/src/util/relations.d.ts +22 -0
- package/dist/common/src/util/resolutions.d.ts +72 -0
- package/dist/common/src/util/storage.d.ts +24 -0
- package/dist/core/src/components/AIIcon.d.ts +16 -0
- package/dist/core/src/components/ConfirmationDialog.d.ts +9 -0
- package/dist/core/src/components/Debug/UIReferenceView.d.ts +1 -0
- package/dist/core/src/components/Debug/UIStyleGuide.d.ts +1 -0
- package/dist/core/src/components/ErrorTooltip.d.ts +2 -0
- package/dist/core/src/components/ErrorView.d.ts +21 -0
- package/dist/core/src/components/LanguageToggle.d.ts +1 -0
- package/dist/core/src/components/LoginView/LoginView.d.ts +68 -0
- package/dist/core/src/components/LoginView/index.d.ts +2 -0
- package/dist/core/src/components/NotFoundPage.d.ts +1 -0
- package/dist/core/src/components/RebaseAuth.d.ts +10 -0
- package/dist/core/src/components/RebaseLogo.d.ts +7 -0
- package/dist/core/src/components/UnsavedChangesDialog.d.ts +9 -0
- package/dist/core/src/components/UserDisplay.d.ts +7 -0
- package/dist/core/src/components/UserSelectPopover.d.ts +62 -0
- package/dist/core/src/components/UserSettingsView.d.ts +1 -0
- package/dist/core/src/components/common/index.d.ts +6 -0
- package/dist/core/src/components/common/table_height.d.ts +5 -0
- package/dist/core/src/components/common/types.d.ts +63 -0
- package/dist/core/src/components/common/useColumnsIds.d.ts +9 -0
- package/dist/core/src/components/common/useDataTableController.d.ts +45 -0
- package/dist/core/src/components/common/useDebouncedData.d.ts +9 -0
- package/dist/core/src/components/common/useScrollRestoration.d.ts +14 -0
- package/dist/core/src/components/index.d.ts +16 -0
- package/dist/core/src/contexts/AdminModeController.d.ts +4 -0
- package/dist/core/src/contexts/AnalyticsContext.d.ts +3 -0
- package/dist/core/src/contexts/AuthControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/CustomizationControllerContext.d.ts +3 -0
- package/dist/core/src/contexts/DataDriverContext.d.ts +3 -0
- package/dist/core/src/contexts/DatabaseAdminContext.d.ts +3 -0
- package/dist/core/src/contexts/DialogsProvider.d.ts +4 -0
- package/dist/core/src/contexts/EffectiveRoleController.d.ts +4 -0
- package/dist/core/src/contexts/InternalUserManagementContext.d.ts +3 -0
- package/dist/core/src/contexts/ModeController.d.ts +4 -0
- package/dist/core/src/contexts/RebaseClientInstanceContext.d.ts +6 -0
- package/dist/core/src/contexts/RebaseDataContext.d.ts +3 -0
- package/dist/core/src/contexts/SnackbarProvider.d.ts +2 -0
- package/dist/core/src/contexts/StorageSourceContext.d.ts +3 -0
- package/dist/core/src/contexts/UserConfigurationPersistenceContext.d.ts +3 -0
- package/dist/core/src/contexts/index.d.ts +13 -0
- package/dist/core/src/core/PluginLifecycleManager.d.ts +17 -0
- package/dist/core/src/core/PluginProviderStack.d.ts +21 -0
- package/dist/core/src/core/Rebase.d.ts +14 -0
- package/dist/core/src/core/RebaseProps.d.ts +136 -0
- package/dist/core/src/core/RebaseRouter.d.ts +4 -0
- package/dist/core/src/core/RebaseRoutes.d.ts +17 -0
- package/dist/core/src/core/index.d.ts +4 -0
- package/dist/core/src/hooks/ApiConfigContext.d.ts +24 -0
- package/dist/core/src/hooks/data/delete.d.ts +31 -0
- package/dist/core/src/hooks/data/save.d.ts +34 -0
- package/dist/core/src/hooks/data/useCollectionFetch.d.ts +51 -0
- package/dist/core/src/hooks/data/useData.d.ts +13 -0
- package/dist/core/src/hooks/data/useDataOrder.d.ts +12 -0
- package/dist/core/src/hooks/data/useEntityFetch.d.ts +38 -0
- package/dist/core/src/hooks/data/useRelationSelector.d.ts +52 -0
- package/dist/core/src/hooks/data/useUserSelector.d.ts +31 -0
- package/dist/core/src/hooks/index.d.ts +37 -0
- package/dist/core/src/hooks/useAdminModeController.d.ts +19 -0
- package/dist/core/src/hooks/useAnalyticsController.d.ts +5 -0
- package/dist/core/src/hooks/useAuthController.d.ts +11 -0
- package/dist/core/src/hooks/useAuthSubscription.d.ts +2 -0
- package/dist/core/src/hooks/useBackendStorageSource.d.ts +30 -0
- package/dist/core/src/hooks/useBridgeRegistration.d.ts +18 -0
- package/dist/core/src/hooks/useBrowserTitleAndIcon.d.ts +6 -0
- package/dist/core/src/hooks/useBuildAdminModeController.d.ts +6 -0
- package/dist/core/src/hooks/useBuildEffectiveRoleController.d.ts +8 -0
- package/dist/core/src/hooks/useBuildLocalConfigurationPersistence.d.ts +2 -0
- package/dist/core/src/hooks/useBuildModeController.d.ts +6 -0
- package/dist/core/src/hooks/useClipboard.d.ts +57 -0
- package/dist/core/src/hooks/useCollapsedGroups.d.ts +12 -0
- package/dist/core/src/hooks/useCustomizationController.d.ts +11 -0
- package/dist/core/src/hooks/useDialogsController.d.ts +11 -0
- package/dist/core/src/hooks/useEffectiveRoleController.d.ts +7 -0
- package/dist/core/src/hooks/useInternalUserManagementController.d.ts +12 -0
- package/dist/core/src/hooks/useLargeLayout.d.ts +1 -0
- package/dist/core/src/hooks/useModeController.d.ts +19 -0
- package/dist/core/src/hooks/usePermissions.d.ts +12 -0
- package/dist/core/src/hooks/useRebaseClient.d.ts +5 -0
- package/dist/core/src/hooks/useRebaseContext.d.ts +11 -0
- package/dist/core/src/hooks/useRebaseRegistry.d.ts +34 -0
- package/dist/core/src/hooks/useSlot.d.ts +18 -0
- package/dist/core/src/hooks/useSnackbarController.d.ts +20 -0
- package/dist/core/src/hooks/useStorageSource.d.ts +7 -0
- package/dist/core/src/hooks/useStudioBridge.d.ts +91 -0
- package/dist/core/src/hooks/useTranslation.d.ts +17 -0
- package/dist/core/src/hooks/useUnsavedChangesDialog.d.ts +12 -0
- package/dist/core/src/hooks/useUserConfigurationPersistence.d.ts +8 -0
- package/dist/core/src/hooks/useValidateAuthenticator.d.ts +21 -0
- package/dist/core/src/i18n/RebaseI18nProvider.d.ts +33 -0
- package/dist/core/src/index.d.ts +15 -0
- package/dist/core/src/internal/common.d.ts +3 -0
- package/dist/core/src/internal/useRestoreScroll.d.ts +6 -0
- package/dist/core/src/locales/de.d.ts +2 -0
- package/dist/core/src/locales/en.d.ts +10 -0
- package/dist/core/src/locales/es.d.ts +10 -0
- package/dist/core/src/locales/fr.d.ts +2 -0
- package/dist/core/src/locales/hi.d.ts +2 -0
- package/dist/core/src/locales/it.d.ts +2 -0
- package/dist/core/src/locales/pt.d.ts +7 -0
- package/dist/core/src/util/constants.d.ts +1 -0
- package/dist/core/src/util/createFormexStub.d.ts +2 -0
- package/dist/core/src/util/entity_cache.d.ts +27 -0
- package/dist/core/src/util/enums.d.ts +5 -0
- package/dist/core/src/util/icon_list.d.ts +5 -0
- package/dist/core/src/util/icon_synonyms.d.ts +1 -0
- package/dist/core/src/util/icons.d.ts +20 -0
- package/dist/core/src/util/index.d.ts +10 -0
- package/dist/core/src/util/previews.d.ts +4 -0
- package/dist/core/src/util/useStorageUploadController.d.ts +38 -0
- package/dist/core/src/util/useTraceUpdate.d.ts +2 -0
- package/dist/formex/src/Field.d.ts +52 -0
- package/dist/formex/src/Formex.d.ts +7 -0
- package/dist/formex/src/index.d.ts +5 -0
- package/dist/formex/src/types.d.ts +40 -0
- package/dist/formex/src/useCreateFormex.d.ts +14 -0
- package/dist/formex/src/utils.d.ts +16 -0
- package/dist/index.es.js +726 -0
- package/dist/index.es.js.map +1 -0
- package/dist/index.umd.js +9647 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/studio/src/components/ApiExplorer/ApiExplorer.d.ts +9 -0
- package/dist/studio/src/components/ApiExplorer/EndpointDetail.d.ts +9 -0
- package/dist/studio/src/components/ApiExplorer/TryItPanel.d.ts +15 -0
- package/dist/studio/src/components/ApiExplorer/parseSpec.d.ts +16 -0
- package/dist/studio/src/components/ApiExplorer/types.d.ts +90 -0
- package/dist/studio/src/components/AuthSimulationSelector.d.ts +11 -0
- package/dist/studio/src/components/Branches/BranchesView.d.ts +1 -0
- package/dist/studio/src/components/CronJobs/CronJobsView.d.ts +1 -0
- package/dist/studio/src/components/JSEditor/JSEditor.d.ts +1 -0
- package/dist/studio/src/components/JSEditor/JSEditorSidebar.d.ts +21 -0
- package/dist/studio/src/components/JSEditor/JSMonacoEditor.d.ts +18 -0
- package/dist/studio/src/components/RLSEditor/PolicyEditor.d.ts +9 -0
- package/dist/studio/src/components/RLSEditor/RLSEditor.d.ts +19 -0
- package/dist/studio/src/components/RLSEditor/index.d.ts +1 -0
- package/dist/studio/src/components/RebaseStudio.d.ts +2 -0
- package/dist/studio/src/components/SQLEditor/ExplainVisualizer.d.ts +24 -0
- package/dist/studio/src/components/SQLEditor/MonacoEditor.d.ts +17 -0
- package/dist/studio/src/components/SQLEditor/SQLEditor.d.ts +11 -0
- package/dist/studio/src/components/SQLEditor/SQLEditorSidebar.d.ts +21 -0
- package/dist/studio/src/components/SQLEditor/SchemaBrowser.d.ts +8 -0
- package/dist/studio/src/components/SchemaVisualizer/RelationEdge.d.ts +3 -0
- package/dist/studio/src/components/SchemaVisualizer/SchemaVisualizer.d.ts +2 -0
- package/dist/studio/src/components/SchemaVisualizer/TableNode.d.ts +3 -0
- package/dist/studio/src/components/SchemaVisualizer/index.d.ts +5 -0
- package/dist/studio/src/components/SchemaVisualizer/schema-visualizer.utils.d.ts +42 -0
- package/dist/studio/src/components/SchemaVisualizer/useSchemaGraph.d.ts +37 -0
- package/dist/studio/src/components/StorageView/StorageView.d.ts +1 -0
- package/dist/studio/src/components/StudioHomePage.d.ts +9 -0
- package/dist/studio/src/index.d.ts +4 -0
- package/dist/studio/src/utils/entities.d.ts +0 -0
- package/dist/studio/src/utils/pgColumnToProperty.d.ts +6 -0
- package/dist/studio/src/utils/sql_utils.d.ts +52 -0
- package/dist/types/src/controllers/analytics_controller.d.ts +7 -0
- package/dist/types/src/controllers/auth.d.ts +119 -0
- package/dist/types/src/controllers/client.d.ts +170 -0
- package/dist/types/src/controllers/collection_registry.d.ts +45 -0
- package/dist/types/src/controllers/customization_controller.d.ts +60 -0
- package/dist/types/src/controllers/data.d.ts +168 -0
- package/dist/types/src/controllers/data_driver.d.ts +160 -0
- package/dist/types/src/controllers/database_admin.d.ts +11 -0
- package/dist/types/src/controllers/dialogs_controller.d.ts +36 -0
- package/dist/types/src/controllers/effective_role.d.ts +4 -0
- package/dist/types/src/controllers/email.d.ts +34 -0
- package/dist/types/src/controllers/index.d.ts +18 -0
- package/dist/types/src/controllers/local_config_persistence.d.ts +20 -0
- package/dist/types/src/controllers/navigation.d.ts +213 -0
- package/dist/types/src/controllers/registry.d.ts +54 -0
- package/dist/types/src/controllers/side_dialogs_controller.d.ts +67 -0
- package/dist/types/src/controllers/side_entity_controller.d.ts +90 -0
- package/dist/types/src/controllers/snackbar.d.ts +24 -0
- package/dist/types/src/controllers/storage.d.ts +171 -0
- package/dist/types/src/index.d.ts +4 -0
- package/dist/types/src/rebase_context.d.ts +105 -0
- package/dist/types/src/types/backend.d.ts +536 -0
- package/dist/types/src/types/builders.d.ts +15 -0
- package/dist/types/src/types/chips.d.ts +5 -0
- package/dist/types/src/types/collections.d.ts +856 -0
- package/dist/types/src/types/cron.d.ts +102 -0
- package/dist/types/src/types/data_source.d.ts +64 -0
- package/dist/types/src/types/entities.d.ts +145 -0
- package/dist/types/src/types/entity_actions.d.ts +98 -0
- package/dist/types/src/types/entity_callbacks.d.ts +173 -0
- package/dist/types/src/types/entity_link_builder.d.ts +7 -0
- package/dist/types/src/types/entity_overrides.d.ts +10 -0
- package/dist/types/src/types/entity_views.d.ts +61 -0
- package/dist/types/src/types/export_import.d.ts +21 -0
- package/dist/types/src/types/index.d.ts +23 -0
- package/dist/types/src/types/locales.d.ts +4 -0
- package/dist/types/src/types/modify_collections.d.ts +5 -0
- package/dist/types/src/types/plugins.d.ts +279 -0
- package/dist/types/src/types/properties.d.ts +1176 -0
- package/dist/types/src/types/property_config.d.ts +70 -0
- package/dist/types/src/types/relations.d.ts +336 -0
- package/dist/types/src/types/slots.d.ts +252 -0
- package/dist/types/src/types/translations.d.ts +870 -0
- package/dist/types/src/types/user_management_delegate.d.ts +121 -0
- package/dist/types/src/types/websockets.d.ts +78 -0
- package/dist/types/src/users/index.d.ts +2 -0
- package/dist/types/src/users/roles.d.ts +22 -0
- package/dist/types/src/users/user.d.ts +46 -0
- package/dist/ui/src/components/Alert.d.ts +12 -0
- package/dist/ui/src/components/Autocomplete.d.ts +21 -0
- package/dist/ui/src/components/Avatar.d.ts +11 -0
- package/dist/ui/src/components/Badge.d.ts +8 -0
- package/dist/ui/src/components/BooleanSwitch.d.ts +14 -0
- package/dist/ui/src/components/BooleanSwitchWithLabel.d.ts +17 -0
- package/dist/ui/src/components/Button.d.ts +14 -0
- package/dist/ui/src/components/Card.d.ts +9 -0
- package/dist/ui/src/components/CenteredView.d.ts +9 -0
- package/dist/ui/src/components/Checkbox.d.ts +13 -0
- package/dist/ui/src/components/Chip.d.ts +26 -0
- package/dist/ui/src/components/CircularProgress.d.ts +5 -0
- package/dist/ui/src/components/CircularProgressCenter.d.ts +11 -0
- package/dist/ui/src/components/Collapse.d.ts +9 -0
- package/dist/ui/src/components/ColorPicker.d.ts +30 -0
- package/dist/ui/src/components/Container.d.ts +8 -0
- package/dist/ui/src/components/DateTimeField.d.ts +24 -0
- package/dist/ui/src/components/DebouncedTextField.d.ts +2 -0
- package/dist/ui/src/components/Dialog.d.ts +39 -0
- package/dist/ui/src/components/DialogActions.d.ts +7 -0
- package/dist/ui/src/components/DialogContent.d.ts +7 -0
- package/dist/ui/src/components/DialogTitle.d.ts +10 -0
- package/dist/ui/src/components/ErrorBoundary.d.ts +11 -0
- package/dist/ui/src/components/ExpandablePanel.d.ts +12 -0
- package/dist/ui/src/components/FileUpload.d.ts +23 -0
- package/dist/ui/src/components/IconButton.d.ts +12 -0
- package/dist/ui/src/components/InfoLabel.d.ts +5 -0
- package/dist/ui/src/components/InputLabel.d.ts +11 -0
- package/dist/ui/src/components/Label.d.ts +7 -0
- package/dist/ui/src/components/LoadingButton.d.ts +7 -0
- package/dist/ui/src/components/Markdown.d.ts +10 -0
- package/dist/ui/src/components/Menu.d.ts +23 -0
- package/dist/ui/src/components/Menubar.d.ts +80 -0
- package/dist/ui/src/components/MultiSelect.d.ts +48 -0
- package/dist/ui/src/components/Paper.d.ts +6 -0
- package/dist/ui/src/components/Popover.d.ts +24 -0
- package/dist/ui/src/components/RadioGroup.d.ts +28 -0
- package/dist/ui/src/components/ResizablePanels.d.ts +18 -0
- package/dist/ui/src/components/SearchBar.d.ts +22 -0
- package/dist/ui/src/components/Select.d.ts +43 -0
- package/dist/ui/src/components/Separator.d.ts +5 -0
- package/dist/ui/src/components/Sheet.d.ts +22 -0
- package/dist/ui/src/components/Skeleton.d.ts +6 -0
- package/dist/ui/src/components/Slider.d.ts +21 -0
- package/dist/ui/src/components/Table.d.ts +34 -0
- package/dist/ui/src/components/Tabs.d.ts +19 -0
- package/dist/ui/src/components/TextField.d.ts +58 -0
- package/dist/ui/src/components/TextareaAutosize.d.ts +43 -0
- package/dist/ui/src/components/ToggleButtonGroup.d.ts +30 -0
- package/dist/ui/src/components/Tooltip.d.ts +19 -0
- package/dist/ui/src/components/Typography.d.ts +36 -0
- package/dist/ui/src/components/VirtualTable/VirtualTable.d.ts +11 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableCell.d.ts +21 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeader.d.ts +29 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableHeaderRow.d.ts +2 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableProps.d.ts +243 -0
- package/dist/ui/src/components/VirtualTable/VirtualTableRow.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/index.d.ts +3 -0
- package/dist/ui/src/components/VirtualTable/types.d.ts +38 -0
- package/dist/ui/src/components/common/SelectInputLabel.d.ts +5 -0
- package/dist/ui/src/components/index.d.ts +53 -0
- package/dist/ui/src/hooks/PortalContainerContext.d.ts +31 -0
- package/dist/ui/src/hooks/index.d.ts +6 -0
- package/dist/ui/src/hooks/useDebounceCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useDebounceValue.d.ts +1 -0
- package/dist/ui/src/hooks/useDebouncedCallback.d.ts +1 -0
- package/dist/ui/src/hooks/useInjectStyles.d.ts +7 -0
- package/dist/ui/src/hooks/useOutsideAlerter.d.ts +5 -0
- package/dist/ui/src/icons/GitHubIcon.d.ts +2 -0
- package/dist/ui/src/icons/HandleIcon.d.ts +1 -0
- package/dist/ui/src/icons/Icon.d.ts +20 -0
- package/dist/ui/src/icons/cool_icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/icon_keys.d.ts +1 -0
- package/dist/ui/src/icons/index.d.ts +6 -0
- package/dist/ui/src/index.d.ts +5 -0
- package/dist/ui/src/styles.d.ts +12 -0
- package/dist/ui/src/util/chip_colors.d.ts +4 -0
- package/dist/ui/src/util/cls.d.ts +2 -0
- package/dist/ui/src/util/debounce.d.ts +10 -0
- package/dist/ui/src/util/hash.d.ts +1 -0
- package/dist/ui/src/util/index.d.ts +4 -0
- package/dist/ui/src/util/key_to_icon_component.d.ts +1 -0
- package/package.json +84 -0
- package/src/components/ApiExplorer/ApiExplorer.tsx +290 -0
- package/src/components/ApiExplorer/EndpointDetail.tsx +271 -0
- package/src/components/ApiExplorer/TryItPanel.tsx +510 -0
- package/src/components/ApiExplorer/parseSpec.ts +104 -0
- package/src/components/ApiExplorer/types.ts +84 -0
- package/src/components/AuthSimulationSelector.tsx +77 -0
- package/src/components/Branches/BranchesView.tsx +370 -0
- package/src/components/CronJobs/CronJobsView.tsx +346 -0
- package/src/components/JSEditor/JSEditor.tsx +1033 -0
- package/src/components/JSEditor/JSEditorSidebar.tsx +340 -0
- package/src/components/JSEditor/JSMonacoEditor.tsx +390 -0
- package/src/components/RLSEditor/PolicyEditor.tsx +444 -0
- package/src/components/RLSEditor/RLSEditor.tsx +692 -0
- package/src/components/RLSEditor/index.ts +1 -0
- package/src/components/RebaseStudio.tsx +121 -0
- package/src/components/SQLEditor/ExplainVisualizer.tsx +128 -0
- package/src/components/SQLEditor/MonacoEditor.tsx +203 -0
- package/src/components/SQLEditor/SQLEditor.tsx +1419 -0
- package/src/components/SQLEditor/SQLEditorSidebar.tsx +174 -0
- package/src/components/SQLEditor/SchemaBrowser.tsx +158 -0
- package/src/components/SchemaVisualizer/RelationEdge.tsx +102 -0
- package/src/components/SchemaVisualizer/SchemaVisualizer.tsx +665 -0
- package/src/components/SchemaVisualizer/TableNode.tsx +257 -0
- package/src/components/SchemaVisualizer/index.ts +5 -0
- package/src/components/SchemaVisualizer/schema-visualizer.utils.ts +140 -0
- package/src/components/SchemaVisualizer/useSchemaGraph.ts +397 -0
- package/src/components/StorageView/StorageView.tsx +1035 -0
- package/src/components/StudioHomePage.tsx +357 -0
- package/src/index.ts +31 -0
- package/src/utils/entities.ts +2 -0
- package/src/utils/pgColumnToProperty.test.ts +401 -0
- package/src/utils/pgColumnToProperty.ts +275 -0
- package/src/utils/sql_utils.test.ts +265 -0
- package/src/utils/sql_utils.ts +291 -0
- package/src/vite-env.d.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/components/StudioHomePage.tsx","../src/components/RebaseStudio.tsx","../src/components/SQLEditor/MonacoEditor.tsx","../src/components/SQLEditor/SchemaBrowser.tsx","../src/components/SQLEditor/SQLEditorSidebar.tsx","../src/utils/sql_utils.ts","../src/components/SQLEditor/ExplainVisualizer.tsx","../src/components/SQLEditor/SQLEditor.tsx","../src/components/JSEditor/JSMonacoEditor.tsx","../src/components/JSEditor/JSEditorSidebar.tsx","../src/components/AuthSimulationSelector.tsx","../src/components/JSEditor/JSEditor.tsx","../src/components/RLSEditor/PolicyEditor.tsx","../src/components/RLSEditor/RLSEditor.tsx","../src/components/StorageView/StorageView.tsx","../src/components/CronJobs/CronJobsView.tsx","../src/components/SchemaVisualizer/schema-visualizer.utils.ts","../src/components/SchemaVisualizer/useSchemaGraph.ts","../src/components/SchemaVisualizer/TableNode.tsx","../src/components/SchemaVisualizer/RelationEdge.tsx","../src/components/SchemaVisualizer/SchemaVisualizer.tsx","../src/components/Branches/BranchesView.tsx","../src/components/ApiExplorer/parseSpec.ts","../src/components/ApiExplorer/EndpointDetail.tsx","../src/components/ApiExplorer/TryItPanel.tsx","../src/components/ApiExplorer/ApiExplorer.tsx"],"sourcesContent":["import type { HomePageSection, PluginGenericProps } from \"@rebasepro/types\";\nimport React, { useEffect } from \"react\";\nimport { Card, cls, Container, Typography } from \"@rebasepro/ui\";\nimport { ArrowRightIcon } from \"lucide-react\";\nimport { iconSize } from \"@rebasepro/ui\";\nimport { IconForView, useRebaseContext, useRestoreScroll, useSlot } from \"@rebasepro/core\";\nimport { useNavigate } from \"react-router-dom\";\nimport { useStudioBreadcrumbs } from \"@rebasepro/core\";\n\n/* ═══════════════════════════════════════════════════════════════\n Static studio tool definitions\n ═══════════════════════════════════════════════════════════════ */\n\ninterface StudioTool {\n path: string;\n name: string;\n description: string;\n icon: string;\n}\n\ninterface StudioSection {\n label: string;\n dotColor: string;\n iconColor: string;\n tools: StudioTool[];\n}\n\nconst SECTIONS: StudioSection[] = [\n {\n label: \"Database\",\n dotColor: \"bg-emerald-400\",\n iconColor: \"text-emerald-400\",\n tools: [\n { path: \"/schema\", name: \"Collections\", description: \"Define and manage your data model and collection schemas\", icon: \"LayoutList\" },\n { path: \"/schema-visualizer\", name: \"Schema Visualizer\", description: \"Interactive ERD showing tables, columns, and relationships\", icon: \"Network\" },\n { path: \"/sql\", name: \"SQL Console\", description: \"Execute raw SQL queries directly against your database\", icon: \"terminal\" },\n { path: \"/branches\", name: \"Branches\", description: \"Create and manage isolated database copies for development\", icon: \"GitBranch\" },\n { path: \"/rls\", name: \"RLS Policies\", description: \"Configure Row Level Security for fine-grained data access\", icon: \"ShieldCheck\" }\n ]\n },\n {\n label: \"Compute\",\n dotColor: \"bg-blue-400\",\n iconColor: \"text-blue-400\",\n tools: [\n { path: \"/js\", name: \"JS Console\", description: \"Run JavaScript with the Rebase SDK in a live sandbox\", icon: \"code\" },\n { path: \"/cron\", name: \"Cron Jobs\", description: \"Monitor and manage scheduled background tasks\", icon: \"Clock\" }\n ]\n },\n {\n label: \"API\",\n dotColor: \"bg-violet-400\",\n iconColor: \"text-violet-400\",\n tools: [\n { path: \"/api\", name: \"API Explorer\", description: \"Interactive API documentation with live request testing\", icon: \"BookOpen\" }\n ]\n },\n {\n label: \"Storage\",\n dotColor: \"bg-amber-400\",\n iconColor: \"text-amber-400\",\n tools: [\n { path: \"/storage\", name: \"Storage\", description: \"Browse, upload, and manage files in your storage bucket\", icon: \"HardDrive\" }\n ]\n },\n {\n label: \"Access Control\",\n dotColor: \"bg-rose-400\",\n iconColor: \"text-rose-400\",\n tools: [\n { path: \"/users\", name: \"Users\", description: \"Manage developers and assign roles in your workspace\", icon: \"group\" },\n { path: \"/roles\", name: \"Roles\", description: \"Create and configure fine-grained access permissions\", icon: \"ShieldEllipsis\" }\n ]\n }\n];\n\n/* ═══════════════════════════════════════════════════════════════ */\n\nexport function StudioHomePage({\n additionalActions,\n additionalChildrenStart,\n additionalChildrenEnd,\n sections,\n hiddenGroups\n}: {\n additionalActions?: React.ReactNode;\n additionalChildrenStart?: React.ReactNode;\n additionalChildrenEnd?: React.ReactNode;\n sections?: HomePageSection[];\n hiddenGroups?: string[];\n}) {\n const context = useRebaseContext();\n const breadcrumbs = useStudioBreadcrumbs();\n const navigate = useNavigate();\n\n useEffect(() => {\n breadcrumbs.set({ breadcrumbs: [] });\n }, [breadcrumbs.set]);\n\n const { containerRef } = useRestoreScroll();\n\n const sectionProps: PluginGenericProps = { context };\n\n const pluginActions = useSlot(\"home.actions\", sectionProps);\n\n return (\n <div ref={containerRef} className=\"py-2 overflow-auto h-full w-full\">\n <Container maxWidth=\"6xl\">\n\n {(additionalActions || pluginActions) && (\n <div className=\"w-full sticky py-4 transition-all duration-400 ease-in-out top-0 z-10 flex flex-row gap-4 justify-end\">\n {additionalActions}\n {pluginActions}\n </div>\n )}\n\n {additionalChildrenStart}\n\n {/* ── Tool sections ── */}\n <div className=\"flex flex-col gap-8 pt-2\">\n {SECTIONS.map((section) => (\n <section key={section.label} aria-label={section.label}>\n {/* Section header */}\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {section.label}\n </Typography>\n\n {/* Card grid */}\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-3 mt-2\">\n {section.tools.map((tool) => (\n <Card\n key={tool.path}\n onClick={() => {\n navigate(tool.path);\n context.analyticsController?.onAnalyticsEvent?.(\n \"home_navigate_to_view\",\n { path: tool.path }\n );\n }}\n className={cls(\n \"h-full px-4 py-2.5 cursor-pointer transition-all duration-200 ease-in-out\",\n \"hover:-translate-y-0.5 hover:shadow-md hover:shadow-primary/5\"\n )}\n >\n <div className=\"flex flex-col items-start h-full\">\n <div className=\"grow w-full\">\n {/* Icon */}\n <div className={cls(\"h-6 flex items-center\", section.iconColor)}>\n <IconForView\n collectionOrView={{ slug: tool.path,\nname: tool.name,\nicon: tool.icon }}\n size=\"small\"\n />\n </div>\n\n {/* Title */}\n <Typography\n gutterBottom\n variant=\"subtitle1\"\n className=\"mt-1 font-semibold\"\n component=\"h2\"\n >\n {tool.name}\n </Typography>\n\n {/* Description */}\n <Typography variant=\"caption\" color=\"secondary\" component=\"div\">\n {tool.description}\n </Typography>\n </div>\n\n {/* Arrow */}\n <div style={{ alignSelf: \"flex-end\" }}>\n <div className=\"p-2\">\n <ArrowRightIcon className=\"text-primary\" size={iconSize.small}/>\n </div>\n </div>\n </div>\n </Card>\n ))}\n </div>\n </section>\n ))}\n </div>\n\n {/* ── SDK Quick Start ── */}\n <div className=\"mt-10 mb-6\">\n <div className=\"flex items-center mb-1\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"py-2 font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n Quick Start\n </Typography>\n </div>\n\n <Typography variant=\"body2\" color=\"secondary\" className=\"mb-4 max-w-2xl\">\n Generate a fully-typed SDK from your collections with{\" \"}\n <code className=\"text-emerald-400 font-mono text-xs bg-emerald-400/10 px-1.5 py-0.5 rounded\">\n npx rebase generate-sdk\n </code>\n {\" \"}and start querying your data with full TypeScript autocompletion.\n </Typography>\n\n <div className=\"rounded-lg border border-surface-200/40 dark:border-surface-700/40 bg-white dark:bg-surface-950 overflow-hidden\">\n {/* Title bar */}\n <div className=\"flex items-center justify-between px-4 py-2.5 border-b border-surface-200/40 dark:border-surface-700/40 bg-surface-50 dark:bg-surface-900/80\">\n <div className=\"flex items-center gap-2.5\">\n <div className=\"flex gap-1.5\">\n <span className=\"w-2.5 h-2.5 rounded-full bg-red-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-amber-400/60\"/>\n <span className=\"w-2.5 h-2.5 rounded-full bg-emerald-400/60\"/>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500 ml-1\">\n app.ts\n </span>\n </div>\n <span className=\"text-xs font-mono text-surface-400 dark:text-surface-500\">\n TypeScript\n </span>\n </div>\n\n {/* Syntax-highlighted code */}\n <div className=\"px-5 py-4 overflow-x-auto text-[13px] leading-6 font-mono\">\n <SyntaxHighlightedSnippet/>\n </div>\n </div>\n </div>\n\n {/* ── Extra sections from props ── */}\n {sections?.map((s) => (\n <div key={s.key} className=\"my-10\">\n <Typography\n variant=\"caption\"\n component=\"h2\"\n color=\"secondary\"\n className=\"p-4 py-2 rounded font-medium uppercase text-sm text-surface-600 dark:text-surface-400\"\n >\n {s.title}\n </Typography>\n <div className=\"mt-4\">{s.children}</div>\n </div>\n ))}\n\n {additionalChildrenEnd}\n </Container>\n </div>\n );\n}\n\n/* ═══════════════════════════════════════════════════════════════\n Hand-crafted syntax-highlighted code snippet.\n Uses inline spans with Tailwind color classes to avoid\n pulling in a syntax highlighting library.\n ═══════════════════════════════════════════════════════════════ */\n\nfunction SyntaxHighlightedSnippet() {\n const kw = \"text-violet-600 dark:text-violet-400\"; // keywords\n const str = \"text-emerald-600 dark:text-emerald-400\"; // strings\n const typ = \"text-amber-600 dark:text-amber-300\"; // types\n const fn = \"text-blue-600 dark:text-blue-400\"; // functions\n const cm = \"text-surface-500 dark:text-surface-400 italic\"; // comments\n const op = \"text-surface-500 dark:text-surface-400\"; // operators / punctuation\n const tx = \"text-surface-950 dark:text-surface-200\"; // plain text\n\n return (\n <pre className=\"m-0 whitespace-pre\">\n <span className={kw}>import</span>\n <span className={tx}>{\" { \"}</span>\n <span className={fn}>createRebaseClient</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'@rebasepro/client'</span>\n <span className={op}>;</span>\n {\"\\n\"}\n\n <span className={kw}>import</span>\n <span className={tx}> </span>\n <span className={kw}>type</span>\n <span className={tx}>{\" { \"}</span>\n <span className={typ}>Database</span>\n <span className={tx}>{\" } \"}</span>\n <span className={kw}>from</span>\n <span className={tx}> </span>\n <span className={str}>'./database.types'</span>\n <span className={op}>;</span>\n {\"\\n\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}> rebase </span>\n <span className={op}>= </span>\n <span className={fn}>createRebaseClient</span>\n <span className={op}>{\"<\"}</span>\n <span className={typ}>Database</span>\n <span className={op}>{\">(\"}</span>\n <span className={tx}>{\"{\"}</span>\n {\"\\n\"}\n <span className={tx}>{\" baseUrl\"}</span>\n <span className={op}>: </span>\n <span className={str}>'http://localhost:3001'</span>\n <span className={op}>,</span>\n {\"\\n\"}\n <span className={tx}>{\"}\"}</span>\n <span className={op}>);</span>\n {\"\\n\\n\"}\n\n <span className={cm}>{\"// Fully typed — autocompletion for tables and columns\"}</span>\n {\"\\n\"}\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>users</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={tx}>users</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n {\"\\n\"}\n\n <span className={kw}>const</span>\n <span className={tx}>{\" { \"}</span>\n <span className={tx}>data</span>\n <span className={op}>: </span>\n <span className={tx}>posts</span>\n <span className={tx}>{\" } \"}</span>\n <span className={op}>= </span>\n <span className={kw}>await</span>\n <span className={tx}> rebase</span>\n <span className={op}>.</span>\n <span className={tx}>data</span>\n <span className={op}>.</span>\n <span className={fn}>collection</span>\n <span className={op}>(</span>\n <span className={str}>'posts'</span>\n <span className={op}>)</span>\n <span className={op}>.</span>\n <span className={fn}>find</span>\n <span className={op}>();</span>\n </pre>\n );\n}\n","import React, { lazy, Suspense, useLayoutEffect, useMemo } from \"react\";\nimport { useRebaseRegistryDispatch } from \"@rebasepro/core\";\nimport type { RebaseStudioConfig, AppView } from \"@rebasepro/types\";\nimport { CircularProgressCenter } from \"@rebasepro/ui\";\n\n// Lazy-loaded studio tools — each fetched only when its route is visited.\n// This keeps Monaco, @xyflow/react, dagre, pgsql-ast-parser etc. out of the initial bundle.\nconst SQLEditor = lazy(() => import(\"./SQLEditor/SQLEditor\").then(m => ({ default: m.SQLEditor })));\nconst JSEditor = lazy(() => import(\"./JSEditor/JSEditor\").then(m => ({ default: m.JSEditor })));\nconst RLSEditor = lazy(() => import(\"./RLSEditor/RLSEditor\").then(m => ({ default: m.RLSEditor })));\nconst StorageView = lazy(() => import(\"./StorageView/StorageView\").then(m => ({ default: m.StorageView })));\nconst CronJobsView = lazy(() => import(\"./CronJobs/CronJobsView\").then(m => ({ default: m.CronJobsView })));\nconst SchemaVisualizer = lazy(() => import(\"./SchemaVisualizer/SchemaVisualizer\").then(m => ({ default: m.SchemaVisualizer })));\nconst BranchesView = lazy(() => import(\"./Branches/BranchesView\").then(m => ({ default: m.BranchesView })));\nconst ApiExplorer = lazy(() => import(\"./ApiExplorer/ApiExplorer\").then(m => ({ default: m.ApiExplorer })));\n\nimport { StudioHomePage } from \"./StudioHomePage\";\n\n/**\n * Declarative component to configure the Studio in Rebase.\n * Renders nothing — purely registers config into the RebaseRegistry.\n *\n * The \"schema\" tool (collection editor view) is now a built-in CMS feature.\n * When `<RebaseCMS collectionEditor={...}>` is used, the schema view is\n * automatically injected into Studio — no manual wiring needed.\n */\nconst DEFAULT_HOME_PAGE = <StudioHomePage/>;\n\nexport function RebaseStudio({ tools, homePage }: RebaseStudioConfig) {\n const dispatch = useRebaseRegistryDispatch();\n\n const resolvedHomePage = homePage ?? DEFAULT_HOME_PAGE;\n\n const devViews: AppView[] = useMemo(() => {\n const views: AppView[] = [];\n const activeTools = tools ?? [\"sql\", \"js\", \"rls\", \"storage\", \"cron\", \"schema-visualizer\", \"branches\", \"api\"];\n const suspense = (el: React.ReactNode) => <Suspense fallback={<CircularProgressCenter/>}>{el}</Suspense>;\n\n if (activeTools.includes(\"sql\")) {\n views.push({ slug: \"sql\",\nname: \"SQL Console\",\ngroup: \"Database\",\nicon: \"terminal\",\ndescription: \"Execute SQL queries\",\nview: suspense(<SQLEditor/>) });\n }\n if (activeTools.includes(\"js\")) {\n views.push({ slug: \"js\",\nname: \"JS Console\",\ngroup: \"Compute\",\nicon: \"code\",\ndescription: \"Execute JavaScript\",\nview: suspense(<JSEditor/>) });\n }\n if (activeTools.includes(\"rls\")) {\n views.push({ slug: \"rls\",\nname: \"RLS Policies\",\ngroup: \"Database\",\nicon: \"ShieldCheck\",\ndescription: \"Row Level Security\",\nview: suspense(<RLSEditor/>) });\n }\n if (activeTools.includes(\"storage\")) {\n views.push({ slug: \"storage\",\nname: \"Storage\",\ngroup: \"Storage\",\nicon: \"HardDrive\",\ndescription: \"Manage storage files\",\nview: suspense(<StorageView/>) });\n }\n if (activeTools.includes(\"cron\")) {\n views.push({ slug: \"cron\",\nname: \"Cron Jobs\",\ngroup: \"Compute\",\nicon: \"Clock\",\ndescription: \"Manage scheduled tasks\",\nview: suspense(<CronJobsView/>) });\n }\n if (activeTools.includes(\"schema-visualizer\")) {\n views.push({ slug: \"schema-visualizer\",\nname: \"Schema Visualizer\",\ngroup: \"Database\",\nicon: \"Network\",\ndescription: \"Interactive database ERD\",\nview: suspense(<SchemaVisualizer/>) });\n }\n if (activeTools.includes(\"branches\")) {\n views.push({ slug: \"branches\",\nname: \"Branches\",\ngroup: \"Database\",\nicon: \"GitBranch\",\ndescription: \"Create and manage database branches\",\nview: suspense(<BranchesView/>) });\n }\n if (activeTools.includes(\"api\")) {\n views.push({ slug: \"api\",\nname: \"API Explorer\",\ngroup: \"API\",\nicon: \"BookOpen\",\ndescription: \"Interactive API documentation and testing\",\nview: suspense(<ApiExplorer/>) });\n }\n // Note: \"schema\" tool is auto-injected by RebaseShell when collectionEditor is enabled.\n // It is NOT registered here anymore.\n return views;\n }, [tools]);\n\n // Use a ref for homePage so it never destabilizes the effect.\n // homePage is a React element — its identity doesn't matter for registration.\n const homePageRef = React.useRef(resolvedHomePage);\n homePageRef.current = resolvedHomePage;\n\n useLayoutEffect(() => {\n dispatch.registerStudio({ tools,\nhomePage: homePageRef.current,\ndevViews });\n return () => dispatch.unregisterStudio();\n }, [dispatch, tools, devViews]);\n\n return null;\n}\n","import React, { useRef } from \"react\";\nimport Editor, { Monaco, OnMount } from \"@monaco-editor/react\";\nimport type { editor, Position, IRange } from \"monaco-editor\";\nimport { cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { useModeController } from \"@rebasepro/core\";\n\nexport type MonacoEditorProps = {\n value: string;\n onChange: (value: string | undefined) => void;\n onRun?: (selectedText?: string) => void;\n className?: string;\n readOnly?: boolean;\n autoFocus?: boolean;\n schemas?: Record<string, { schemaName: string, tableName: string, columns: { name: string, dataType: string }[] }[]>;\n};\n\nexport const MonacoEditor = ({\n value,\n onChange,\n onRun,\n className,\n readOnly = false,\n autoFocus = true,\n schemas\n}: MonacoEditorProps) => {\n const { mode } = useModeController();\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const onRunRef = useRef(onRun);\n onRunRef.current = onRun;\n\n const schemasRef = useRef(schemas);\n schemasRef.current = schemas;\n\n const handleEditorOnMount: OnMount = (editor, monaco) => {\n editorRef.current = editor;\n monacoRef.current = monaco;\n\n editor.addAction({\n id: \"run-query\",\n label: \"Run Query\",\n keybindings: [monaco.KeyMod.CtrlCmd + monaco.KeyCode.Enter],\n contextMenuGroupId: \"operation\",\n contextMenuOrder: 0,\n run: () => {\n if (onRunRef.current) {\n const selection = editor.getSelection();\n let selectedText: string | undefined = undefined;\n if (selection && !selection.isEmpty()) {\n selectedText = editor.getModel()?.getValueInRange(selection)?.trim();\n }\n onRunRef.current(selectedText || undefined);\n }\n }\n });\n\n // Register custom autocomplete for tables, columns, and SQL keywords\n const sqlKeywords = [\n \"SELECT\", \"FROM\", \"WHERE\", \"INSERT INTO\", \"VALUES\", \"UPDATE\", \"SET\",\n \"DELETE FROM\", \"JOIN\", \"INNER JOIN\", \"LEFT JOIN\", \"RIGHT JOIN\", \"FULL JOIN\",\n \"ON\", \"GROUP BY\", \"HAVING\", \"ORDER BY\", \"ASC\", \"DESC\", \"LIMIT\", \"OFFSET\",\n \"AS\", \"AND\", \"OR\", \"NOT\", \"IN\", \"BETWEEN\", \"LIKE\", \"IS NULL\", \"IS NOT NULL\",\n \"CREATE TABLE\", \"ALTER TABLE\", \"DROP TABLE\", \"PRIMARY KEY\", \"FOREIGN KEY\",\n \"COUNT\", \"SUM\", \"AVG\", \"MIN\", \"MAX\", \"DISTINCT\", \"UNION\", \"ALL\", \"EXISTS\",\n \"CASE\", \"WHEN\", \"THEN\", \"ELSE\", \"END\", \"CAST\", \"COALESCE\"\n ];\n\n monaco.languages.registerCompletionItemProvider(\"pgsql\", {\n triggerCharacters: [\".\", \" \", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\"],\n provideCompletionItems: (model: editor.ITextModel, position: Position) => {\n const word = model.getWordUntilPosition(position);\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: word.startColumn,\n endColumn: word.endColumn\n };\n\n const textUntilPosition = model.getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn: 1,\n endLineNumber: position.lineNumber,\n endColumn: position.column\n });\n\n // Check if user is typing `tableName.`\n const match = textUntilPosition.match(/([a-zA-Z0-9_]+)\\.$/);\n const tableNameMatch = match ? match[1] : null;\n\n const suggestions: { label: string; kind: number; insertText: string; range: IRange; detail: string; sortText: string }[] = [];\n const allSchemas = schemasRef.current || {};\n\n if (tableNameMatch) {\n // Provide columns for the matched table\n for (const [, tables] of Object.entries(allSchemas)) {\n const table = tables.find(t => t.tableName === tableNameMatch);\n if (table) {\n table.columns.forEach(col => {\n suggestions.push({\n label: col.name,\n kind: monaco.languages.CompletionItemKind.Field,\n insertText: col.name,\n range,\n detail: \"Column\",\n sortText: \"1\"\n });\n });\n }\n }\n } else {\n // Provide table names\n for (const [sName, tables] of Object.entries(allSchemas)) {\n tables.forEach(table => {\n suggestions.push({\n label: table.tableName,\n kind: monaco.languages.CompletionItemKind.Class,\n insertText: table.tableName,\n range,\n detail: `Table (${sName})`,\n sortText: \"2\"\n });\n });\n }\n\n // Provide SQL keywords\n sqlKeywords.forEach(keyword => {\n suggestions.push({\n label: keyword,\n kind: monaco.languages.CompletionItemKind.Keyword,\n insertText: keyword + \" \",\n range,\n detail: \"SQL Keyword\",\n sortText: \"3\"\n });\n });\n\n // Heuristic: Suggest columns for tables that are mentioned in the current editor text\n const fullText = model.getValue();\n const activeTables = new Set<string>();\n for (const [, tables] of Object.entries(allSchemas)) {\n tables.forEach(table => {\n const regex = new RegExp(`\\\\b${table.tableName}\\\\b`, \"i\");\n if (regex.test(fullText)) {\n activeTables.add(table.tableName);\n }\n });\n }\n\n const addedColumns = new Set<string>();\n for (const [, tables] of Object.entries(allSchemas)) {\n tables.forEach(table => {\n if (activeTables.has(table.tableName)) {\n table.columns.forEach(col => {\n if (!addedColumns.has(col.name)) {\n addedColumns.add(col.name);\n suggestions.push({\n label: col.name,\n kind: monaco.languages.CompletionItemKind.Field,\n insertText: col.name,\n range,\n detail: `Column (${table.tableName})`,\n sortText: \"1\" // Prioritize columns from active tables\n });\n }\n });\n }\n });\n }\n }\n\n return { suggestions };\n\n }\n });\n\n if (autoFocus) {\n editor.focus();\n }\n };\n\n return (\n <div className={cls(\"relative w-full h-full overflow-hidden\", className)}>\n <Editor\n height=\"100%\"\n defaultLanguage=\"pgsql\"\n value={value}\n onChange={onChange}\n onMount={handleEditorOnMount}\n theme={mode === \"dark\" ? \"vs-dark\" : \"vs\"}\n options={{\n minimap: { enabled: false },\n fontSize: 14,\n lineNumbers: \"on\",\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly,\n tabSize: 2,\n wordWrap: \"on\"\n }}\n />\n </div>\n );\n};\n","\nimport React, { useState } from \"react\";\nimport { Typography, CircularProgress, cls, IconButton, defaultBorderMixin, Menu, MenuItem, Button , iconSize } from \"@rebasepro/ui\";\nimport { CopyIcon, MoreVerticalIcon, RefreshCwIcon } from \"lucide-react\";\nimport { TableInfo } from \"./SQLEditor\";\nimport { ErrorView, useTranslation } from \"@rebasepro/core\";\n\nexport const SchemaBrowser = ({\n onTableClick,\n schemas,\n isSchemaLoading,\n schemaError,\n onRetrySchema\n}: {\n onTableClick?: (tableName: string) => void,\n schemas: Record<string, TableInfo[]>,\n isSchemaLoading: boolean,\n schemaError: string | null,\n onRetrySchema: () => void\n}) => {\n const [expandedSchemas, setExpandedSchemas] = useState<Record<string, boolean>>({ public: true });\n const [expandedTables, setExpandedTables] = useState<Record<string, boolean>>({});\n const { t } = useTranslation();\n\n if (isSchemaLoading) return <div className=\"p-4 flex justify-center\"><CircularProgress size=\"small\"/></div>;\n if (schemaError) return (\n <div className=\"p-2\">\n <ErrorView error={schemaError} onRetry={onRetrySchema}/>\n </div>\n );\n\n return (\n <div className=\"flex flex-col h-full overflow-hidden\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_schema_tables\")}</Typography>\n <IconButton size=\"small\" onClick={onRetrySchema} title=\"Refresh schema\">\n <RefreshCwIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n\n <div className=\"flex-grow overflow-y-auto no-scrollbar p-1\">\n {Object.keys(schemas).length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark italic\">{t(\"studio_schema_no_tables\")}</Typography>\n </div>\n ) : Object.entries(schemas).map(([schemaName, tables]) => (\n <div key={schemaName} className=\"mb-2\">\n <div\n className=\"flex items-center p-1 cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-950 rounded transition-colors\"\n onClick={() => setExpandedSchemas(prev => ({ ...prev,\n[schemaName]: !prev[schemaName] }))}\n >\n <svg className={cls(\"w-3 h-3 mr-1 transition-transform\", expandedSchemas[schemaName] ? \"rotate-90\" : \"\")} fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/></svg>\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-xs truncate flex-grow\">{schemaName}</Typography>\n </div>\n\n {expandedSchemas[schemaName] && (\n <div className=\"ml-3 mt-1 space-y-1\">\n {tables.map(table => (\n <div key={table.tableName}>\n <div\n className=\"flex items-center p-1 cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-950 rounded transition-colors group relative\"\n onClick={() => setExpandedTables(prev => ({ ...prev,\n[`${schemaName}.${table.tableName}`]: !prev[`${schemaName}.${table.tableName}`] }))}\n >\n <svg className={cls(\"w-3 h-3 mr-1 transition-transform shrink-0\", expandedTables[`${schemaName}.${table.tableName}`] ? \"rotate-90\" : \"\")} fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/></svg>\n <svg className=\"w-3.5 h-3.5 mr-1 shrink-0 text-text-disabled dark:text-text-disabled-dark\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/></svg>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark text-xs truncate flex-1 min-w-0\">{table.tableName}</Typography>\n\n <div className=\"flex opacity-0 group-hover:opacity-100 focus-within:opacity-100 absolute right-1 items-center bg-surface-100 dark:bg-surface-950 px-1 gap-1 rounded transition-opacity\">\n <IconButton\n size=\"smallest\"\n className=\"transition-colors text-text-secondary hover:text-text-primary pointer-events-auto\"\n onClick={(e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(table.tableName);\n }}\n title=\"CopyIcon table name\"\n >\n <CopyIcon size={iconSize.smallest}/>\n </IconButton>\n\n <Menu\n trigger={\n <IconButton\n size={\"smallest\"}\n className=\"transition-colors text-text-secondary hover:text-text-primary pointer-events-auto\"\n onClick={(e) => e.stopPropagation()}\n title=\"Generate SQL templates\"\n >\n <MoreVerticalIcon size={iconSize.smallest}/>\n </IconButton>\n }\n >\n <MenuItem dense className=\"text-xs\" onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onTableClick?.(`SELECT * FROM ${schemaName !== \"public\" ? `${schemaName}.` : \"\"}${table.tableName} LIMIT 100;`);\n }}>SELECT (Top 100)</MenuItem>\n <MenuItem dense className=\"text-xs\" onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onTableClick?.(`SELECT \\n ${table.columns.map(c => c.name).join(\",\\n \")}\\nFROM ${schemaName !== \"public\" ? `${schemaName}.` : \"\"}${table.tableName};`);\n }}>SELECT (All columns)</MenuItem>\n <MenuItem dense className=\"text-xs\" onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onTableClick?.(`INSERT INTO ${schemaName !== \"public\" ? `${schemaName}.` : \"\"}${table.tableName} (\\n ${table.columns.map(c => c.name).join(\",\\n \")}\\n) VALUES (\\n ${table.columns.map(() => \"?\").join(\",\\n \")}\\n);`);\n }}>INSERT statement</MenuItem>\n <MenuItem dense className=\"text-xs\" onClick={(e: React.MouseEvent) => {\n e.stopPropagation();\n onTableClick?.(`UPDATE ${schemaName !== \"public\" ? `${schemaName}.` : \"\"}${table.tableName} \\nSET \\n ${table.columns.map(c => `${c.name} = ?`).join(\",\\n \")}\\nWHERE id = ?;`);\n }}>UPDATE statement</MenuItem>\n </Menu>\n\n <Button\n variant=\"text\"\n size=\"small\"\n className=\"text-[10px] text-primary uppercase min-h-0 py-0.5 px-1 font-medium ml-1 flex-shrink-0 leading-none h-[22px]\"\n onClick={(e) => {\n e.stopPropagation();\n onTableClick?.(`SELECT * FROM ${schemaName !== \"public\" ? `${schemaName}.` : \"\"}${table.tableName} LIMIT 100;`);\n }}\n >\n SELECT\n </Button>\n </div>\n </div>\n\n {expandedTables[`${schemaName}.${table.tableName}`] && (\n <div className={cls(\"ml-5 mt-1 space-y-0.5 border-l\", defaultBorderMixin)}>\n {table.columns.map(col => (\n <div key={col.name} className=\"flex items-center p-1 group pl-2 hover:bg-surface-50 dark:hover:bg-surface-950 rounded-r relative min-h-[28px]\">\n <svg className=\"w-3 h-3 mr-1.5 text-text-disabled dark:text-text-disabled-dark shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 4.5v15m6-15v15m-10.5-1.5h15c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125h-15c-.621 0-1.125.504-1.125 1.125v12.75c0 .621.504 1.125 1.125 1.125Z\"/></svg>\n <Typography variant=\"caption\" className=\"text-text-primary dark:text-text-primary-dark text-[11px] truncate flex-grow mr-2\">{col.name}</Typography>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark text-[9px] truncate mr-1 uppercase shrink-0\" title={col.dataType}>{col.dataType}</Typography>\n <IconButton\n size=\"smallest\"\n className=\"opacity-0 group-hover:opacity-100 absolute right-1 bg-surface-50 dark:bg-surface-950 transition-colors pointer-events-auto\"\n onClick={(e) => {\n e.stopPropagation();\n navigator.clipboard.writeText(col.name);\n }}\n title=\"CopyIcon column name\"\n >\n <CopyIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n ))}\n </div>\n </div>\n );\n};\n","\nimport React, { useState } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Tabs, Tab, IconButton , iconSize } from \"@rebasepro/ui\";\nimport { Trash2Icon } from \"lucide-react\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { SchemaBrowser } from \"./SchemaBrowser\";\nimport { TableInfo } from \"./SQLEditor\";\n\nexport interface Snippet {\n id: string;\n name: string;\n sql: string;\n createdAt: number;\n isFavorite?: boolean;\n}\n\ninterface SQLEditorSidebarProps {\n onSelectSnippet: (sql: string) => void;\n onTableClick: (tableName: string) => void;\n snippets: Snippet[];\n history: string[];\n onDeleteSnippet: (id: string) => void;\n schemas: Record<string, TableInfo[]>;\n isSchemaLoading: boolean;\n schemaError: string | null;\n onRetrySchema: () => void;\n}\n\nexport const SQLEditorSidebar = ({\n onSelectSnippet,\n onTableClick,\n snippets,\n history,\n onDeleteSnippet,\n schemas,\n isSchemaLoading,\n schemaError,\n onRetrySchema\n}: SQLEditorSidebarProps) => {\n const [activeTab, setActiveTab] = useState<\"schema\" | \"snippets\" | \"history\">(\"schema\");\n const { t } = useTranslation();\n\n return (\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as \"schema\" | \"snippets\" | \"history\")} variant=\"boxy\" className=\"border-b border-surface-200 dark:border-surface-950\">\n <Tab value=\"schema\">{t(\"studio_sql_sidebar_schema\")}</Tab>\n <Tab value=\"snippets\">{t(\"studio_sql_sidebar_snippets\")}</Tab>\n <Tab value=\"history\">{t(\"studio_sql_sidebar_history\")}</Tab>\n </Tabs>\n\n <div className=\"flex-grow overflow-hidden relative\">\n {activeTab === \"schema\" && (\n <SchemaBrowser\n onTableClick={onTableClick}\n schemas={schemas}\n isSchemaLoading={isSchemaLoading}\n schemaError={schemaError}\n onRetrySchema={onRetrySchema}\n />\n )}\n\n {activeTab === \"snippets\" && (() => {\n const favorites = snippets.filter(s => s.isFavorite);\n const others = snippets.filter(s => !s.isFavorite);\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_sidebar_snippets\")}</Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-2 space-y-2 no-scrollbar\">\n {snippets.length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_sidebar_no_snippets\")}</Typography>\n </div>\n ) : (\n <>\n {favorites.length > 0 && (\n <div className=\"mb-4\">\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark mb-2 px-1 flex items-center\">\n <svg className=\"w-3 h-3 mr-1 text-red-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\"><path fillRule=\"evenodd\" d=\"M3.172 5.172a4 4 0 015.656 0L10 6.343l1.172-1.171a4 4 0 115.656 5.656L10 17.657l-6.828-6.829a4 4 0 010-5.656z\" clipRule=\"evenodd\"/></svg>\n Favorites\n </Typography>\n <div className=\"space-y-2\">\n {favorites.map(snippet => (\n <div\n key={snippet.id}\n className={cls(\"group p-2 rounded border hover:border-surface-400 dark:hover:border-surface-600 bg-white dark:bg-surface-900 transition-all cursor-pointer relative\", defaultBorderMixin)}\n onClick={() => onSelectSnippet(snippet.sql)}\n >\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-[13px] truncate pr-6\">{snippet.name}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[10px] block mt-1 truncate\">{snippet.sql}</Typography>\n <IconButton\n size=\"smallest\"\n className=\"absolute right-1 top-1 opacity-0 group-hover:opacity-100 text-text-disabled hover:text-red-500 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n onDeleteSnippet(snippet.id);\n }}\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </div>\n ))}\n </div>\n </div>\n )}\n {others.length > 0 && (\n <div>\n {favorites.length > 0 && (\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark mb-2 px-1 mt-4\">\n Others\n </Typography>\n )}\n <div className=\"space-y-2\">\n {others.map(snippet => (\n <div\n key={snippet.id}\n className={cls(\"group p-2 rounded border hover:border-surface-400 dark:hover:border-surface-600 bg-white dark:bg-surface-900 transition-all cursor-pointer relative\", defaultBorderMixin)}\n onClick={() => onSelectSnippet(snippet.sql)}\n >\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-[13px] truncate pr-6\">{snippet.name}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[10px] block mt-1 truncate\">{snippet.sql}</Typography>\n <IconButton\n size=\"smallest\"\n className=\"absolute right-1 top-1 opacity-0 group-hover:opacity-100 text-text-disabled hover:text-red-500 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n onDeleteSnippet(snippet.id);\n }}\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n })()}\n\n {activeTab === \"history\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_sidebar_history\")}</Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-1 space-y-1 no-scrollbar\">\n {history.length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_sidebar_no_history\")}</Typography>\n </div>\n ) : (\n [...history].reverse().map((sql, i) => (\n <div\n key={i}\n className=\"p-2 py-1.5 rounded hover:bg-surface-100 dark:hover:bg-surface-950 cursor-pointer group transition-colors flex items-start\"\n onClick={() => onSelectSnippet(sql)}\n >\n <svg className=\"w-3 h-3 mt-1 mr-2 text-text-disabled dark:text-text-disabled-dark group-hover:text-primary transition-colors flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"/></svg>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark group-hover:text-text-primary dark:group-hover:text-text-primary-dark text-[11px] line-clamp-2 leading-tight flex-grow\">{sql}</Typography>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n","import { parseFirst } from \"pgsql-ast-parser\";\nimport { TableInfo } from \"../components/SQLEditor/SQLEditor\";\nimport { EntityCollection } from \"@rebasepro/types\";\n\n/**\n * A table extracted from a SQL query's FROM/JOIN clauses.\n */\nexport interface ExtractedTable {\n name: string;\n alias?: string;\n}\n\n/**\n * A collection matched to a table in a SQL query.\n */\nexport interface ResolvedQueryCollection {\n /** DB table name from the SQL AST (e.g. \"blog_posts\") */\n tableName: string;\n /** SQL alias if present (e.g. \"bp\") */\n tableAlias?: string;\n /** The matched collection */\n collection: EntityCollection;\n /** Columns from this table that are present in the result set */\n columns: string[];\n /** The result column name that holds the primary key for this table (e.g. \"id\", \"author_id\") */\n pkColumn?: string;\n}\n\n/**\n * Extract all tables referenced in a SQL query's FROM and JOIN clauses.\n * Returns an empty array for non-SELECT queries or parse failures.\n */\nexport function extractTablesFromQuery(sqlString: string): ExtractedTable[] {\n try {\n const ast = parseFirst(sqlString);\n if (ast.type !== \"select\") return [];\n\n const tables: ExtractedTable[] = [];\n\n // pgsql-ast-parser From items — tables and joins with left/right branches\n type FromNode = { type: string; name?: { name: string; alias?: string }; left?: FromNode; right?: FromNode };\n const processFrom = (fromItems: FromNode[]) => {\n for (const item of fromItems) {\n if (item.type === \"table\" && item.name) {\n tables.push({ name: item.name.name,\nalias: item.name.alias });\n }\n if (item.type === \"join\") {\n if (item.left) processFrom([item.left]);\n if (item.right) processFrom([item.right]);\n }\n }\n };\n\n if (ast.from) {\n processFrom(ast.from);\n }\n\n return tables;\n } catch {\n return [];\n }\n}\n\nimport { toSnakeCase } from \"@rebasepro/utils\";\n\n/**\n * Resolve which collections are referenced by a SQL query.\n *\n * Parses the SQL, extracts table names, and matches each against\n * registered collections via `collection.table` (falling back to\n * snake_case of `collection.slug`).\n *\n * For each matched collection, determines which result columns\n * belong to that table using the database schema information.\n */\nexport function resolveQueryCollections(\n sqlString: string,\n schemas: Record<string, TableInfo[]>,\n collections: EntityCollection[],\n resultColumns?: string[]\n): ResolvedQueryCollection[] {\n const tables = extractTablesFromQuery(sqlString);\n if (tables.length === 0) return [];\n\n // Parse the AST to resolve SELECT column aliases\n const selectColumns: { table?: string; column: string; alias?: string }[] = [];\n try {\n const ast = parseFirst(sqlString);\n if (ast.type === \"select\" && ast.columns) {\n for (const col of ast.columns) {\n if (col.expr?.type === \"ref\") {\n selectColumns.push({\n table: col.expr.table?.name,\n column: col.expr.name,\n alias: col.alias?.name\n });\n }\n }\n }\n } catch { /* parse failure is ok, we'll fall back */ }\n\n const results: ResolvedQueryCollection[] = [];\n\n for (const table of tables) {\n // Match table name against collection table or slug->snake_case\n const matched = collections.find(c => {\n const tableName = (c as any).table || toSnakeCase(c.slug);\n return tableName === table.name;\n });\n\n if (!matched) continue;\n\n // Find columns belonging to this table from the schema\n const tableColumns: string[] = [];\n for (const schemaEntries of Object.values(schemas)) {\n const tableInfo = schemaEntries.find(t => t.tableName === table.name);\n if (tableInfo) {\n tableColumns.push(...tableInfo.columns.map(c => c.name));\n break;\n }\n }\n\n // Determine which result column holds the PK (\"id\") for this table.\n // 1. Check parsed SELECT columns for an explicit \"id\" column from this table (by name or alias)\n // 2. Fall back to checking if result columns contain \"id\"\n let pkColumn: string | undefined;\n\n // Look in the AST select columns for `table.id` or `alias.id`\n const tableRef = table.alias || table.name;\n const idSelectCol = selectColumns.find(\n sc => sc.column === \"id\" && (!sc.table || sc.table === tableRef || sc.table === table.name)\n );\n if (idSelectCol) {\n pkColumn = idSelectCol.alias || idSelectCol.column; // use alias if present\n }\n\n // If we didn't find it from the AST (e.g. SELECT *), check if result columns have \"id\"\n if (!pkColumn && resultColumns) {\n if (resultColumns.includes(\"id\")) {\n pkColumn = \"id\";\n }\n }\n\n // If still not found, fall back to checking tableColumns\n if (!pkColumn && tableColumns.includes(\"id\")) {\n pkColumn = \"id\";\n }\n\n results.push({\n tableName: table.name,\n tableAlias: table.alias,\n collection: matched,\n columns: tableColumns,\n pkColumn\n });\n }\n\n return results;\n}\n\nexport interface PKMapping {\n /** The actual column name in the database table */\n dbColumn: string;\n /** The column name as it appears in the query result set (may be aliased) */\n resultColumn: string;\n}\n\nexport interface TableAndPKResult {\n tableName?: string;\n primaryKeys?: PKMapping[];\n error?: string;\n}\n\nexport function determineTableAndPK(sqlString: string, columnKey: string, schemas: Record<string, TableInfo[]>): TableAndPKResult {\n try {\n const tables = extractTablesFromQuery(sqlString);\n\n const ast = parseFirst(sqlString);\n if (ast.type !== \"select\") {\n return { error: \"Inline editing is only supported for SELECT queries.\" };\n }\n\n if (tables.length === 0) {\n return { error: \"Could not find any tables in the query.\" };\n }\n\n // Parse SELECT columns to resolve aliases\n const selectColumns: { table?: string; column: string; alias?: string }[] = [];\n if (ast.columns) {\n for (const col of ast.columns) {\n if (col.expr?.type === \"ref\") {\n selectColumns.push({\n table: col.expr.table?.name,\n column: col.expr.name,\n alias: col.alias?.name\n });\n }\n }\n }\n\n // Resolve which DB column `columnKey` refers to (it might be aliased)\n const resolvedColumn = selectColumns.find(\n sc => (sc.alias === columnKey) || (!sc.alias && sc.column === columnKey)\n );\n const actualDbColumnName = resolvedColumn?.column ?? columnKey;\n const columnTableRef = resolvedColumn?.table; // e.g. \"p\" or \"posts\"\n\n // Resolve the table for the edited column\n let resolvedTableName: string | null = null;\n\n if (tables.length === 1) {\n resolvedTableName = tables[0].name;\n } else {\n // If the AST tells us which table, use that\n if (columnTableRef) {\n const matchedTable = tables.find(\n t => t.alias === columnTableRef || t.name === columnTableRef\n );\n if (matchedTable) {\n resolvedTableName = matchedTable.name;\n }\n }\n\n // Otherwise, look up which schema table has this column\n if (!resolvedTableName) {\n const matchedTables = tables.filter(t => {\n for (const schema of Object.values(schemas)) {\n const tableInfo = schema.find(ti => ti.tableName === t.name);\n if (tableInfo && tableInfo.columns.some(c => c.name === actualDbColumnName)) {\n return true;\n }\n }\n return false;\n });\n\n if (matchedTables.length === 1) {\n resolvedTableName = matchedTables[0].name;\n } else if (matchedTables.length > 1) {\n return { error: `Ambiguous column \"${columnKey}\": Found in multiple queried tables.` };\n } else {\n return { error: `Could not find column \"${columnKey}\" in the queried tables.` };\n }\n }\n }\n\n if (!resolvedTableName) {\n return { error: \"Could not resolve the target table.\" };\n }\n\n // Find the table's actual primary key columns from the schema\n let pkDbColumns: string[] = [];\n for (const schema of Object.values(schemas)) {\n const tableInfo = schema.find(t => t.tableName === resolvedTableName);\n if (tableInfo) {\n pkDbColumns = tableInfo.columns\n .filter(c => c.isPrimaryKey)\n .map(c => c.name);\n break;\n }\n }\n\n if (pkDbColumns.length === 0) {\n return { error: `Table \"${resolvedTableName}\" has no primary key defined.` };\n }\n\n // Find the table's alias in the query (for resolving PK result column names)\n const tableEntry = tables.find(t => t.name === resolvedTableName);\n const tableAlias = tableEntry?.alias;\n\n // Map each PK db column to its result column name (resolving aliases)\n const primaryKeys: PKMapping[] = pkDbColumns.map(dbCol => {\n // Find the SELECT column for this PK\n const selectCol = selectColumns.find(\n sc => sc.column === dbCol &&\n (!sc.table || sc.table === (tableAlias || resolvedTableName))\n );\n return {\n dbColumn: dbCol,\n resultColumn: selectCol?.alias || selectCol?.column || dbCol\n };\n });\n\n return { tableName: resolvedTableName,\nprimaryKeys };\n } catch (e: unknown) {\n console.warn(\"Failed to parse SQL AST:\", e);\n const message = e instanceof Error ? e.message : String(e);\n return { error: `Could not safely parse query for inline editing: ${message}` };\n }\n}\n","import React, { useState } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Collapse } from \"@rebasepro/ui\";\n\nexport interface ExplainPlanNode {\n \"Node Type\": string;\n \"Relation Name\"?: string;\n \"Alias\"?: string;\n \"Startup Cost\": number;\n \"Total Cost\": number;\n \"Plan Rows\": number;\n \"Plan Width\": number;\n \"Actual Startup Time\"?: number;\n \"Actual Total Time\"?: number;\n \"Actual Rows\"?: number;\n \"Actual Loops\"?: number;\n \"Filter\"?: string;\n \"Index Cond\"?: string;\n \"Hash Cond\"?: string;\n \"Plans\"?: ExplainPlanNode[];\n [key: string]: unknown;\n}\n\nexport interface ExplainVisualizerProps {\n plan: ExplainPlanNode;\n isRoot?: boolean;\n}\n\nexport const ExplainVisualizer: React.FC<ExplainVisualizerProps> = ({ plan, isRoot = true }) => {\n const [expanded, setExpanded] = useState(true);\n\n const hasChildren = plan.Plans && plan.Plans.length > 0;\n\n // Determine color based on cost\n const cost = plan[\"Total Cost\"];\n let costColor = \"text-green-500 dark:text-green-400\";\n if (cost > 1000) costColor = \"text-red-500 dark:text-red-400\";\n else if (cost > 100) costColor = \"text-orange-500 dark:text-orange-400\";\n\n return (\n <div className={cls(\"flex flex-col\", isRoot ? \"p-4\" : \"pl-6 mt-2 relative\")}>\n {/* Tree branch line */}\n {!isRoot && (\n <div className=\"absolute left-2.5 top-0 bottom-0 w-px bg-surface-200 dark:bg-surface-950 -z-10\"></div>\n )}\n {!isRoot && (\n <div className=\"absolute left-2.5 top-5 w-3 h-px bg-surface-200 dark:bg-surface-950 -z-10\"></div>\n )}\n\n <div className={cls(\"border rounded-md bg-white dark:bg-surface-900 text-text-primary dark:text-text-primary-dark shadow-xs relative z-10 w-[420px] max-w-full\", defaultBorderMixin)}>\n <div\n className={cls(\"px-4 py-3 flex justify-between items-center cursor-pointer select-none\")}\n onClick={() => setExpanded(!expanded)}\n >\n <div className=\"flex items-center space-x-2\">\n {hasChildren ? (\n <svg className={cls(\"w-4 h-4 text-text-secondary transition-transform\", !expanded ? \"-rotate-90\" : \"\")} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\"/></svg>\n ) : (\n <div className=\"w-4 h-4\"></div>\n )}\n\n <Typography variant=\"body1\" className=\"flex items-center\">\n {plan[\"Node Type\"]}\n </Typography>\n\n {plan[\"Relation Name\"] && (\n <span className=\"font-mono text-[11px] text-text-secondary dark:text-text-secondary-dark px-2 py-0.5 rounded bg-surface-200 dark:bg-surface-950 ml-2\">\n on {plan[\"Relation Name\"]} {plan.Alias && plan.Alias !== plan[\"Relation Name\"] ? `(${plan.Alias})` : \"\"}\n </span>\n )}\n </div>\n\n <div className=\"flex space-x-6 items-center\">\n <div className=\"flex flex-col text-right\">\n <span className=\"text-[10px] uppercase text-text-disabled dark:text-text-disabled-dark font-semibold tracking-wide leading-tight mb-0.5\">Cost</span>\n <span className={cls(\"font-mono font-medium text-[13px] leading-none\", costColor)}>{cost.toFixed(2)}</span>\n </div>\n <div className=\"flex flex-col text-right\">\n <span className=\"text-[10px] uppercase text-text-disabled dark:text-text-disabled-dark font-semibold tracking-wide leading-tight mb-0.5\">Rows</span>\n <span className=\"font-mono text-[13px] text-text-secondary dark:text-text-secondary-dark leading-none\">{plan[\"Plan Rows\"]}</span>\n </div>\n </div>\n </div>\n\n <Collapse in={expanded}>\n <div className=\"px-4 py-3 border-t border-surface-200 dark:border-surface-950 text-[13px] flex flex-col gap-2\">\n <div className=\"flex items-center space-x-6\">\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark\">Startup Cost:</span>\n <span className=\"font-mono font-medium\">{plan[\"Startup Cost\"].toFixed(2)}</span>\n </div>\n <div className=\"flex items-center space-x-2\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark\">Width:</span>\n <span className=\"font-mono font-medium\">{plan[\"Plan Width\"]} bytes</span>\n </div>\n </div>\n\n {plan.Filter && (\n <div className=\"mt-1\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark block mb-1\">Filter:</span>\n <code className=\"block w-full p-2 bg-surface-50 dark:bg-surface-950 border dark:border-surface-950 rounded font-mono text-[12px] truncate\">{plan.Filter}</code>\n </div>\n )}\n {plan[\"Index Cond\"] && (\n <div className=\"mt-1\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark block mb-1\">Index Cond:</span>\n <code className=\"block w-full p-2 bg-surface-50 dark:bg-surface-950 border dark:border-surface-950 rounded font-mono text-[12px] truncate\">{plan[\"Index Cond\"]}</code>\n </div>\n )}\n {plan[\"Hash Cond\"] && (\n <div className=\"mt-1\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark block mb-1\">Hash Cond:</span>\n <code className=\"block w-full p-2 bg-surface-50 dark:bg-surface-950 border dark:border-surface-950 rounded font-mono text-[12px] truncate\">{plan[\"Hash Cond\"]}</code>\n </div>\n )}\n </div>\n </Collapse>\n </div>\n\n {expanded && hasChildren && (\n <div className=\"flex flex-col space-y-2 mt-[-4px]\">\n {plan.Plans!.map((childPlan, idx) => (\n <ExplainVisualizer key={idx} plan={childPlan} isRoot={false}/>\n ))}\n </div>\n )}\n </div>\n );\n};\n","\nimport { IconForView } from \"@rebasepro/core\";\nimport { useStudioCollectionRegistry, useStudioSideEntityController } from \"@rebasepro/core\";\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { Button, Paper, Typography, CircularProgress, cls, IconButton, InputLabel, Dialog, DialogContent, DialogActions, DialogTitle, TextField, Tooltip, Alert, Tabs, Tab, defaultBorderMixin, Select, SelectItem, Menu, MenuItem, ResizablePanels, Chip, VirtualTable, VirtualTableColumn , iconSize } from \"@rebasepro/ui\";\nimport { DatabaseIcon, TerminalIcon, XIcon, PlusIcon, PencilIcon, MoreVerticalIcon, MenuIcon, PlayIcon } from \"lucide-react\";\n// VirtualTableInput is conditionally loaded from CMS when available\nlet VirtualTableInput: React.ComponentType<any> | null = null;\ntry {\n // @ts-ignore — optional peer dependency\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const cms = require(\"@rebasepro/admin\");\n VirtualTableInput = cms.VirtualTableInput;\n} catch { /* CMS not available */ }\nimport { useRebaseContext, useSnackbarController, ConfirmationDialog, ErrorView, useTranslation } from \"@rebasepro/core\";\nimport { MonacoEditor } from \"./MonacoEditor\";\nimport { SQLEditorSidebar, Snippet } from \"./SQLEditorSidebar\";\nimport { parseFirst } from \"pgsql-ast-parser\";\nimport { determineTableAndPK, resolveQueryCollections, ResolvedQueryCollection } from \"../../utils/sql_utils\";\nimport { ExplainVisualizer } from \"./ExplainVisualizer\";\n\nexport interface SQLEditorColumnInfo {\n name: string;\n dataType: string;\n isPrimaryKey: boolean;\n}\n\nexport interface TableInfo {\n schemaName: string;\n tableName: string;\n columns: SQLEditorColumnInfo[];\n}\n\nconst QueryLoadingView = () => {\n const [elapsed, setElapsed] = useState(0);\n\n useEffect(() => {\n const start = Date.now();\n const interval = setInterval(() => {\n setElapsed(Date.now() - start);\n }, 100);\n return () => clearInterval(interval);\n }, []);\n\n return (\n <div className=\"flex-grow flex items-center justify-center\">\n <div className=\"text-center\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"mt-4 text-text-secondary dark:text-text-secondary-dark font-mono tracking-tight animate-pulse\">\n EXECUTING QUERY...\n </Typography>\n <div className=\"mt-2 text-xs font-mono text-text-disabled dark:text-text-disabled-dark\">\n {(elapsed / 1000).toFixed(1)}s elapsed\n </div>\n </div>\n </div>\n );\n};\n\nconst STORAGE_KEY_TABS = \"rebase_sql_tabs\";\nconst STORAGE_KEY_ACTIVE_TAB = \"rebase_sql_active_tab\";\n\nconst FixedEditorOverlay = ({ \n displayValue, \n onSave, \n onCancel \n}: { \n displayValue: string, \n onSave: (val: string | null) => void, \n onCancel: () => void \n}) => {\n const [rect, setRect] = useState<DOMRect | null>(null);\n const [windowSize, setWindowSize] = useState({ width: 1000, height: 1000 });\n const anchorRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (anchorRef.current && anchorRef.current.parentElement) {\n setRect(anchorRef.current.parentElement.getBoundingClientRect());\n }\n if (typeof window !== \"undefined\") {\n setWindowSize({ width: window.innerWidth, height: window.innerHeight });\n const handleResize = () => setWindowSize({ width: window.innerWidth, height: window.innerHeight });\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }\n return undefined;\n }, []);\n\n if (!rect) {\n return <div ref={anchorRef} className=\"w-full h-full min-h-[20px]\" />;\n }\n\n let top = rect.top - 2;\n let left = rect.left - 2;\n const minWidth = Math.max(rect.width + 4, 250);\n const minHeight = rect.height + 4;\n\n if (left + minWidth > windowSize.width) {\n left = Math.max(10, windowSize.width - minWidth - 10);\n }\n \n // Calculate a max height that doesn't overflow the bottom\n const maxAvailableHeight = Math.max(50, windowSize.height - top - 10);\n const resolvedMaxHeight = Math.min(300, maxAvailableHeight);\n\n // If even the min height overflows, adjust top\n if (top + minHeight > windowSize.height) {\n top = Math.max(10, windowSize.height - minHeight - 10);\n }\n\n return (\n <div ref={anchorRef} className=\"w-full h-full min-h-[20px]\">\n {createPortal(\n <div \n className=\"fixed z-[9999] bg-surface-50 dark:bg-surface-900 border-2 border-primary dark:border-primary-dark shadow-xl flex flex-col\"\n style={{ \n top, \n left, \n minWidth, \n minHeight, \n maxWidth: Math.min(400, windowSize.width - left - 10)\n }}\n >\n <textarea\n className=\"w-full h-full bg-transparent outline-none border-none ring-0 font-mono text-[13px] text-text-primary dark:text-text-primary-dark px-4 py-1.5 resize-none overflow-y-auto\"\n defaultValue={displayValue}\n autoFocus\n style={{ minHeight: '32px' }}\n onFocus={(e) => {\n const val = e.target.value;\n e.target.value = \"\";\n e.target.value = val;\n e.target.style.height = 'auto';\n e.target.style.height = `${Math.min(e.target.scrollHeight, resolvedMaxHeight)}px`;\n }}\n onChange={(e) => {\n e.target.style.height = 'auto';\n e.target.style.height = `${Math.min(e.target.scrollHeight, resolvedMaxHeight)}px`;\n }}\n onBlur={(e) => {\n onSave(e.target.value || null);\n onCancel();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n onSave((e.currentTarget as HTMLTextAreaElement).value || null);\n onCancel();\n }\n if (e.key === \"Escape\") onCancel();\n }}\n />\n </div>,\n document.body\n )}\n </div>\n );\n};\n\nexport const SQLEditor = () => {\n const { databaseAdmin } = useRebaseContext();\n const sideEntityController = useStudioSideEntityController();\n const snackbarController = useSnackbarController();\n const collectionRegistry = useStudioCollectionRegistry();\n\n const { t } = useTranslation();\n\n // Schema state\n const [schemas, setSchemas] = useState<Record<string, TableInfo[]>>({});\n const [isSchemaLoading, setIsSchemaLoading] = useState(true);\n const schemaFetchedRef = useRef(false);\n const [schemaError, setSchemaError] = useState<string | null>(null);\n\n // Connection state\n const [selectedDatabase, setSelectedDatabase] = useState<string | undefined>(() => {\n return localStorage.getItem(\"rebase_sql_selected_db\") || undefined;\n });\n const [selectedRole, setSelectedRole] = useState<string | undefined>(() => {\n return localStorage.getItem(\"rebase_sql_selected_role\") || undefined;\n });\n\n const [availableDatabases, setAvailableDatabases] = useState<string[]>([]);\n const [availableRoles, setAvailableRoles] = useState<string[]>([]);\n const [isLoadingConfig, setIsLoadingConfig] = useState(true);\n const [connectionConfigError, setConnectionConfigError] = useState<string | null>(null);\n\n // Tabbed interface state\n const [tabs, setTabs] = useState<Array<{\n id: string,\n name: string,\n sql: string,\n database?: string,\n role?: string,\n results: Record<string, unknown>[] | null,\n loading: boolean,\n error: string | null,\n execTime: number | null,\n lastExecutedSql: string | null\n }>>(() => {\n const saved = localStorage.getItem(STORAGE_KEY_TABS);\n if (saved) {\n const parsed = JSON.parse(saved);\n return parsed.map((t: Record<string, unknown>) => ({\n ...t,\n results: null,\n loading: false,\n error: null,\n execTime: null,\n lastExecutedSql: null\n }));\n }\n return [{\n id: \"1\",\n name: \"Query 1\",\n sql: \"SELECT * FROM \",\n database: localStorage.getItem(\"rebase_sql_selected_db\") || undefined,\n role: localStorage.getItem(\"rebase_sql_selected_role\") || undefined,\n results: null,\n loading: false,\n error: null,\n execTime: null,\n lastExecutedSql: null\n }];\n });\n const [activeTabId, setActiveTabId] = useState<string>(() => {\n return localStorage.getItem(STORAGE_KEY_ACTIVE_TAB) || \"1\";\n });\n\n const activeTab = tabs.find(t => t.id === activeTabId) || tabs[0];\n\n // Helper to update active tab state\n const updateActiveTab = useCallback((update: Partial<typeof activeTab>) => {\n setTabs(prev => prev.map(t => t.id === activeTabId ? { ...t,\n...update } : t));\n }, [activeTabId]);\n\n const sql = activeTab.sql;\n const results = activeTab.results;\n const loading = activeTab.loading;\n const error = activeTab.error;\n const execTime = activeTab.execTime;\n\n const setSql = (newSql: string) => updateActiveTab({ sql: newSql });\n const setResults = (newResults: Record<string, unknown>[] | null) => updateActiveTab({ results: newResults });\n const setLoading = (newLoading: boolean) => updateActiveTab({ loading: newLoading });\n const setError = (newError: string | null) => updateActiveTab({ error: newError });\n\n useEffect(() => {\n let mounted = true;\n const fetchConnectionConfig = async () => {\n if (!databaseAdmin?.fetchAvailableDatabases || !databaseAdmin?.fetchAvailableRoles) {\n setConnectionConfigError(t(\"studio_sql_sql_not_supported\"));\n setIsLoadingConfig(false);\n return;\n }\n\n try {\n const [dbs, roles, currentDbFromApi] = await Promise.all([\n databaseAdmin.fetchAvailableDatabases(),\n databaseAdmin.fetchAvailableRoles(),\n typeof databaseAdmin?.fetchCurrentDatabase === \"function\" ? databaseAdmin.fetchCurrentDatabase() : Promise.resolve(undefined)\n ]);\n\n if (mounted) {\n setAvailableDatabases(dbs);\n setAvailableRoles(roles);\n\n const loadedDb = localStorage.getItem(\"rebase_sql_selected_db\") || undefined;\n const loadedRole = localStorage.getItem(\"rebase_sql_selected_role\") || undefined;\n\n const initialActiveTabId = localStorage.getItem(STORAGE_KEY_ACTIVE_TAB) || \"1\";\n let initialTabs: any[] = [];\n try {\n const savedTabs = localStorage.getItem(STORAGE_KEY_TABS);\n if (savedTabs) initialTabs = JSON.parse(savedTabs);\n } catch (e) { /* ignore */ }\n const currentActiveTab = initialTabs.find(t => t.id === initialActiveTabId);\n\n let actualDb = currentActiveTab?.database || loadedDb;\n if (actualDb && !dbs.includes(actualDb)) actualDb = undefined;\n if (!actualDb && dbs.length > 0) {\n actualDb = currentDbFromApi && dbs.includes(currentDbFromApi) ? currentDbFromApi : dbs[0];\n }\n\n if (actualDb) {\n setSelectedDatabase(actualDb);\n localStorage.setItem(\"rebase_sql_selected_db\", actualDb);\n setTabs(prev => prev.map(t => t.id === initialActiveTabId && !t.database ? { ...t,\ndatabase: actualDb } : t));\n }\n\n let actualRole = currentActiveTab?.role || loadedRole;\n if (actualRole && !roles.includes(actualRole)) actualRole = undefined;\n if (!actualRole && roles.length > 0) {\n actualRole = roles.includes(\"postgres\") ? \"postgres\" : roles[0];\n }\n\n if (actualRole) {\n setSelectedRole(actualRole);\n localStorage.setItem(\"rebase_sql_selected_role\", actualRole);\n setTabs(prev => prev.map(t => t.id === initialActiveTabId && !t.role ? { ...t,\nrole: actualRole } : t));\n }\n }\n } catch (err: unknown) {\n console.error(\"Failed to fetch databases or roles:\", err);\n if (mounted) {\n const message = err instanceof Error ? err.message : String(err);\n setConnectionConfigError(t(\"studio_sql_fetch_error\", { message }));\n }\n } finally {\n if (mounted) {\n setIsLoadingConfig(false);\n }\n }\n };\n\n fetchConnectionConfig();\n\n return () => { mounted = false; };\n }, [databaseAdmin]);\n\n const handleDatabaseChange = (db: string, tabId?: string) => {\n setSelectedDatabase(db);\n localStorage.setItem(\"rebase_sql_selected_db\", db);\n setTabs(prev => prev.map(t => t.id === (tabId || activeTabId) ? { ...t,\ndatabase: db } : t));\n // Reset so the schema will be re-fetched for the new database\n schemaFetchedRef.current = false;\n };\n\n const handleRoleChange = (role: string, tabId?: string) => {\n setSelectedRole(role);\n localStorage.setItem(\"rebase_sql_selected_role\", role);\n setTabs(prev => prev.map(t => t.id === (tabId || activeTabId) ? { ...t,\nrole } : t));\n };\n\n const handleTabChange = useCallback((newTabId: string) => {\n setActiveTabId(newTabId);\n const newTab = tabs.find(t => t.id === newTabId);\n if (newTab) {\n if (newTab.database && newTab.database !== selectedDatabase) {\n setSelectedDatabase(newTab.database);\n localStorage.setItem(\"rebase_sql_selected_db\", newTab.database);\n schemaFetchedRef.current = false;\n } else if (!newTab.database && selectedDatabase) {\n setTabs(prev => prev.map(t => t.id === newTabId ? { ...t,\ndatabase: selectedDatabase } : t));\n }\n\n if (newTab.role && newTab.role !== selectedRole) {\n setSelectedRole(newTab.role);\n localStorage.setItem(\"rebase_sql_selected_role\", newTab.role);\n } else if (!newTab.role && selectedRole) {\n setTabs(prev => prev.map(t => t.id === newTabId ? { ...t,\nrole: selectedRole } : t));\n }\n }\n }, [tabs, selectedDatabase, selectedRole]);\n\n const fetchSchema = useCallback(async () => {\n if (!databaseAdmin?.executeSql) {\n setSchemaError(t(\"studio_sql_sql_not_supported\"));\n setIsSchemaLoading(false);\n return;\n }\n\n setIsSchemaLoading(true);\n setSchemaError(null);\n try {\n const sql = `\n SELECT \n c.table_schema as schema, \n c.table_name as \"table\", \n c.column_name as \"column\",\n c.data_type as \"data_type\",\n CASE WHEN kcu.column_name IS NOT NULL THEN true ELSE false END as \"is_pk\"\n FROM \n information_schema.columns c\n LEFT JOIN information_schema.table_constraints tc\n ON tc.table_schema = c.table_schema \n AND tc.table_name = c.table_name \n AND tc.constraint_type = 'PRIMARY KEY'\n LEFT JOIN information_schema.key_column_usage kcu\n ON kcu.constraint_name = tc.constraint_name\n AND kcu.table_schema = tc.table_schema\n AND kcu.table_name = tc.table_name\n AND kcu.column_name = c.column_name\n WHERE \n c.table_schema NOT IN ('information_schema', 'pg_catalog')\n ORDER BY \n c.table_schema, c.table_name, c.ordinal_position;\n `;\n // Pass the selected database so schema introspection targets the right DB.\n const result = await databaseAdmin!.executeSql!(sql, { database: selectedDatabase });\n\n const processGrouped = (data: Record<string, unknown>[]) => {\n const grouped = data.reduce((acc: Record<string, TableInfo[]>, curr: Record<string, unknown>) => {\n const schema = (curr.schema || curr.SCHEMA || curr.table_schema || \"public\") as string;\n const table = (curr.table || curr.TABLE || curr.table_name) as string;\n const column = (curr.column || curr.COLUMN || curr.column_name) as string;\n const dataType = (curr.data_type || curr.DATA_TYPE || \"\") as string;\n const isPrimaryKey = curr.is_pk === true || curr.is_pk === \"true\";\n\n if (!acc[schema]) acc[schema] = [];\n let tableInfo = acc[schema].find(t => t.tableName === table);\n if (!tableInfo) {\n tableInfo = { schemaName: schema,\ntableName: table,\ncolumns: [] };\n acc[schema].push(tableInfo);\n }\n tableInfo.columns.push({ name: column,\ndataType,\nisPrimaryKey });\n return acc;\n }, {});\n setSchemas(grouped);\n };\n\n if (!result || !Array.isArray(result)) {\n if (result && typeof result === \"object\" && \"rows\" in result && Array.isArray((result as { rows: Record<string, unknown>[] }).rows)) {\n processGrouped((result as { rows: Record<string, unknown>[] }).rows);\n } else {\n setSchemaError(t(\"studio_sql_unexpected_format\", { type: typeof result }));\n setSchemas({});\n }\n } else if (result.length === 0) {\n setSchemas({});\n setSchemaError(t(\"studio_sql_no_tables\"));\n } else {\n processGrouped(result);\n }\n\n schemaFetchedRef.current = true;\n } catch (e: unknown) {\n console.error(\"Schema fetch error:\", e);\n const message = e instanceof Error ? e.message : String(e);\n setSchemaError(t(\"studio_sql_schema_fetch_error\", { message }));\n } finally {\n setIsSchemaLoading(false);\n }\n }, [databaseAdmin, selectedDatabase]);\n\n useEffect(() => {\n // Fetch schema after config finishes loading, and re-fetch when the selected database changes.\n if (!isLoadingConfig && !schemaFetchedRef.current) {\n fetchSchema();\n }\n }, [fetchSchema, isLoadingConfig, selectedDatabase]);\n\n const [autoLimit, setAutoLimit] = useState(true);\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\n const [pendingAction, setPendingAction] = useState<(() => void) | null>(null);\n\n // Inline editing state\n const [editingCell, setEditingCell] = useState<{ rowIndex: number, columnKey: string, initialValue: unknown } | null>(null);\n\n const handleDoubleClick = useCallback((rowIndex: number, columnKey: string, initialValue: unknown, rowData: Record<string, unknown>) => {\n if (!activeTab.lastExecutedSql) {\n snackbarController.open({\n type: \"error\",\n message: t(\"studio_sql_cannot_edit_missing_query\")\n });\n return;\n }\n\n const resolution = determineTableAndPK(activeTab.lastExecutedSql, columnKey, schemas);\n\n if (resolution.error || !resolution.primaryKeys || resolution.primaryKeys.length === 0) {\n snackbarController.open({\n type: \"error\",\n message: resolution.error || t(\"studio_sql_cannot_resolve_table\")\n });\n return;\n }\n\n // Check all PK values are present in the row\n const missingPKs = resolution.primaryKeys.filter(\n pk => rowData[pk.resultColumn] === undefined || rowData[pk.resultColumn] === null\n );\n if (missingPKs.length > 0) {\n snackbarController.open({\n type: \"error\",\n message: t(\"studio_sql_missing_pk\", { columns: missingPKs.map(pk => `\"${pk.resultColumn}\"`).join(\", \") })\n });\n return;\n }\n\n setEditingCell({ rowIndex,\ncolumnKey,\ninitialValue });\n }, [activeTab.lastExecutedSql, schemas, snackbarController]);\n\n const handleCellSave = useCallback(async (newValue: string | null, rowData: Record<string, unknown>, columnKey: string, rowIndex: number) => {\n if (!editingCell || !activeTab.lastExecutedSql) return;\n\n setEditingCell(null); // Optimistically close\n\n if (newValue === editingCell.initialValue) return;\n\n const resolution = determineTableAndPK(activeTab.lastExecutedSql, columnKey, schemas);\n if (resolution.error || !resolution.tableName || !resolution.primaryKeys || resolution.primaryKeys.length === 0) {\n snackbarController.open({ type: \"error\",\nmessage: resolution.error || \"Resolution failed.\" });\n return;\n }\n\n const tableName = resolution.tableName;\n\n const formatValue = (val: unknown) => {\n if (val === null || val === undefined) return \"NULL\";\n if (typeof val === \"number\") return val;\n if (typeof val === \"boolean\") return val ? \"TRUE\" : \"FALSE\";\n return `'${String(val).replace(/'/g, \"''\")}'`;\n };\n\n // Resolve the actual DB column name for the edited column (may differ from the result alias)\n // e.g. if the query has `a.name AS author_name`, columnKey = \"author_name\" but DB column = \"name\"\n const resolveDbColumnName = (resultColKey: string): string => {\n try {\n const ast = parseFirst(activeTab.lastExecutedSql!);\n if (ast.type === \"select\" && ast.columns) {\n for (const col of ast.columns) {\n if (col.expr?.type === \"ref\") {\n const alias = col.alias?.name;\n const colName = col.expr.name;\n if (alias === resultColKey || (!alias && colName === resultColKey)) {\n return colName;\n }\n }\n }\n }\n } catch { /* fall back to columnKey */ }\n return resultColKey;\n };\n\n const dbColumnName = resolveDbColumnName(columnKey);\n\n // Build composite WHERE clause\n const whereConditions = resolution.primaryKeys.map(\n pk => `\"${pk.dbColumn}\" = ${formatValue(rowData[pk.resultColumn])}`\n ).join(\" AND \");\n\n const updateSql = `UPDATE \"${tableName}\" SET \"${dbColumnName}\" = ${formatValue(newValue)} WHERE ${whereConditions};`;\n\n try {\n if (databaseAdmin?.executeSql) {\n await databaseAdmin.executeSql(updateSql, { database: selectedDatabase,\nrole: selectedRole });\n\n const newResults = [...(activeTab.results || [])];\n if (newResults[rowIndex]) {\n newResults[rowIndex] = { ...newResults[rowIndex],\n[columnKey]: newValue };\n }\n updateActiveTab({ results: newResults });\n\n snackbarController.open({\n type: \"success\",\n message: t(\"studio_sql_row_updated\")\n });\n }\n } catch (e: unknown) {\n snackbarController.open({\n type: \"error\",\n message: t(\"studio_sql_update_failed\", { message: e instanceof Error ? e.message : String(e) })\n });\n }\n }, [editingCell, schemas, activeTab.lastExecutedSql, activeTab.results, databaseAdmin, updateActiveTab, snackbarController, selectedDatabase, selectedRole]);\n\n const [columnWidths, setColumnWidths] = useState<Record<string, Record<string, number>>>(() => {\n const saved = localStorage.getItem(\"rebase_sql_column_widths\");\n return saved ? JSON.parse(saved) : {};\n });\n const [snippets, setSnippets] = useState<Snippet[]>([]);\n const [history, setHistory] = useState<string[]>([]);\n const [isSaveDialogOpen, setIsSaveDialogOpen] = useState(false);\n const [newSnippetName, setNewSnippetName] = useState(\"\");\n\n // Load from local storage\n useEffect(() => {\n const savedSnippets = localStorage.getItem(\"rebase_sql_snippets\");\n if (savedSnippets) setSnippets(JSON.parse(savedSnippets));\n\n const savedHistory = localStorage.getItem(\"rebase_sql_history\");\n if (savedHistory) setHistory(JSON.parse(savedHistory));\n }, []);\n\n // Save tabs and active tab to local storage\n useEffect(() => {\n const sanitizedTabs = tabs.map(t => ({\n id: t.id,\n name: t.name,\n sql: t.sql,\n database: t.database,\n role: t.role\n }));\n localStorage.setItem(STORAGE_KEY_TABS, JSON.stringify(sanitizedTabs));\n }, [tabs]);\n\n useEffect(() => {\n localStorage.setItem(STORAGE_KEY_ACTIVE_TAB, activeTabId);\n }, [activeTabId]);\n\n const saveSnippets = (newSnippets: Snippet[]) => {\n setSnippets(newSnippets);\n localStorage.setItem(\"rebase_sql_snippets\", JSON.stringify(newSnippets));\n };\n\n const saveHistory = (newHistory: string[]) => {\n setHistory(newHistory);\n localStorage.setItem(\"rebase_sql_history\", JSON.stringify(newHistory.slice(-50)));\n };\n\n const handleDeleteSnippet = (id: string) => {\n saveSnippets(snippets.filter(s => s.id !== id));\n };\n\n const handleAddTab = () => {\n const newId = Math.random().toString(36).substring(2, 9);\n\n // Find the next available query number\n let maxNumber = 0;\n tabs.forEach(tab => {\n const match = tab.name.match(/^Query (\\d+)$/);\n if (match) {\n const num = parseInt(match[1], 10);\n if (num > maxNumber) maxNumber = num;\n }\n });\n const name = `Query ${maxNumber + 1}`;\n setTabs(prev => [...prev, {\n id: newId,\n name,\n sql: \"SELECT * FROM \",\n database: selectedDatabase,\n role: selectedRole,\n results: null,\n loading: false,\n error: null,\n execTime: null,\n lastExecutedSql: null\n }]);\n setActiveTabId(newId);\n };\n\n const handleCloseTab = (id: string, e: React.MouseEvent) => {\n e.stopPropagation();\n if (tabs.length === 1) return;\n\n const tabIndex = tabs.findIndex(t => t.id === id);\n const newTabs = tabs.filter(t => t.id !== id);\n setTabs(newTabs);\n\n if (activeTabId === id) {\n // Find a new active tab: the one at the same index, or the last one if we closed the last\n const nextIndex = Math.min(tabIndex, newTabs.length - 1);\n if (newTabs[nextIndex]) {\n setActiveTabId(newTabs[nextIndex].id);\n }\n }\n };\n\n const handleColumnResize = useCallback(({ key, width }: { key: string, width: number }) => {\n setColumnWidths(prev => {\n const newWidths = {\n ...prev,\n [activeTab.sql]: {\n ...(prev[activeTab.sql] || {}),\n [key]: width\n }\n };\n localStorage.setItem(\"rebase_sql_column_widths\", JSON.stringify(newWidths));\n return newWidths;\n });\n }, [activeTab.sql]);\n\n const handlePrettify = () => {\n // Simple formatting for now\n const formatted = activeTab.sql\n .replace(/\\s+/g, \" \")\n .replace(/\\s?,\\s?/g, \", \")\n .replace(/\\s?=\\s?/g, \" = \")\n .trim();\n setSql(formatted);\n };\n\n const handleExplain = async () => {\n const explainSql = `EXPLAIN (FORMAT JSON, ANALYZE) ${activeTab.sql}`;\n updateActiveTab({ loading: true,\nerror: null,\nresults: null });\n const start = performance.now();\n try {\n if (databaseAdmin?.executeSql) {\n const result = await databaseAdmin.executeSql(explainSql, { database: selectedDatabase,\nrole: selectedRole });\n updateActiveTab({ results: result,\nexecTime: Math.round(performance.now() - start) });\n }\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : String(e);\n updateActiveTab({ error: message || t(\"studio_sql_error_explaining\") });\n } finally {\n updateActiveTab({ loading: false });\n }\n };\n\n const executeRun = useCallback(async (sqlOverride?: string) => {\n let sqlToRun = sqlOverride || activeTab.sql;\n const upperSql = sqlToRun.toUpperCase();\n \n const isAggregate = /\\b(COUNT|SUM|AVG|MIN|MAX)\\s*\\(/i.test(sqlToRun);\n const isExplain = /\\bEXPLAIN\\b/i.test(sqlToRun);\n\n if (autoLimit && upperSql.includes(\"SELECT\") && !upperSql.includes(\"LIMIT\") && !isAggregate && !isExplain) {\n // Remove trailing semicolon if present to safely append LIMIT\n sqlToRun = sqlToRun.trim().replace(/;$/, \"\");\n sqlToRun = `${sqlToRun} LIMIT 1000;`;\n }\n\n updateActiveTab({ loading: true,\nerror: null,\nresults: null });\n const start = performance.now();\n\n try {\n if (databaseAdmin?.executeSql) {\n const result = await databaseAdmin.executeSql(sqlToRun, { database: selectedDatabase,\nrole: selectedRole });\n updateActiveTab({\n results: result,\n execTime: Math.round(performance.now() - start),\n lastExecutedSql: sqlToRun\n });\n\n if (history[history.length - 1] !== activeTab.sql) {\n saveHistory([...history, activeTab.sql]);\n }\n } else {\n updateActiveTab({ error: t(\"studio_sql_execution_not_supported\") });\n }\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : String(e);\n updateActiveTab({ error: message || t(\"studio_sql_error_executing\") });\n } finally {\n updateActiveTab({ loading: false });\n }\n }, [activeTab.sql, autoLimit, databaseAdmin, history, updateActiveTab]);\n\n const handleRun = useCallback(async (selectedText?: string) => {\n const sqlTarget = selectedText || activeTab.sql;\n if (!sqlTarget.trim()) return;\n\n // Destructive operation check\n const destructiveKeywords = [\"DELETE\", \"DROP\", \"TRUNCATE\", \"UPDATE\"];\n const hasDestructive = destructiveKeywords.some(kw => sqlTarget.toUpperCase().includes(kw));\n const hasWhere = sqlTarget.toUpperCase().includes(\"WHERE\");\n\n if (hasDestructive && (!hasWhere || sqlTarget.toUpperCase().includes(\"DROP\") || sqlTarget.toUpperCase().includes(\"TRUNCATE\"))) {\n setPendingAction(() => () => executeRun(selectedText));\n setIsConfirmDialogOpen(true);\n return;\n }\n\n executeRun(selectedText);\n }, [activeTab.sql, executeRun]);\n\n // Global keybindings\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.metaKey || e.ctrlKey) && e.key === \"Enter\") {\n // If we are in an input or textarea (except the code editor which handles its own), we might not want to run\n const activeElement = document.activeElement;\n const isInput = activeElement?.tagName === \"INPUT\" || activeElement?.tagName === \"TEXTAREA\";\n // If it's the monaco editor textarea, it's fine, let's trigger handleRun\n // Actually the monaco editor already has its own action, so we don't need a global one IF focused in monaco.\n // But wait, if we have both, it might run twice.\n // Let's check if we're focused in monaco.\n const isMonaco = activeElement?.className?.includes(\"monaco-mouse-cursor-text\");\n\n if (!isMonaco && !isInput) {\n e.preventDefault();\n handleRun();\n }\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [handleRun]);\n\n const handleSaveSnippet = () => {\n if (!newSnippetName.trim() || !sql.trim()) return;\n\n const newSnippet: Snippet = {\n id: Math.random().toString(36).substring(2, 9),\n name: newSnippetName,\n sql: sql,\n createdAt: Date.now()\n };\n\n saveSnippets([...snippets, newSnippet]);\n setNewSnippetName(\"\");\n setIsSaveDialogOpen(false);\n snackbarController.open({\n type: \"success\",\n message: t(\"studio_sql_snippet_saved\", { name: newSnippetName })\n });\n };\n\n const handleExportCSV = () => {\n if (!results || results.length === 0) return;\n\n const headers = Object.keys(results[0]).join(\",\");\n const rows = results.map(row =>\n Object.values(row).map(val => {\n const str = String(val);\n return str.includes(\",\") ? `\"${str}\"` : str;\n }).join(\",\")\n );\n const csv = [headers, ...rows].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv\" });\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `query_results_${new Date().toISOString().slice(0, 19)}.csv`;\n a.click();\n window.URL.revokeObjectURL(url);\n };\n\n const handleExportJSON = () => {\n if (!results || results.length === 0) return;\n\n const json = JSON.stringify(results, null, 2);\n const blob = new Blob([json], { type: \"application/json\" });\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `query_results_${new Date().toISOString().slice(0, 19)}.json`;\n a.click();\n window.URL.revokeObjectURL(url);\n };\n\n const handleExportMarkdown = () => {\n if (!results || results.length === 0) return;\n\n const headers = Object.keys(results[0]);\n const headerRow = `| ${headers.join(\" | \")} |`;\n const dividerRow = `| ${headers.map(() => \"---\").join(\" | \")} |`;\n const dataRows = results.map(row =>\n `| ${headers.map(header => {\n const val = row[header];\n if (val === null) return \"null\";\n if (val === undefined) return \"\";\n // Replace pipes and newlines to avoid breaking the markdown table\n return String(val).replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n }).join(\" | \")} |`\n );\n\n const markdown = [headerRow, dividerRow, ...dataRows].join(\"\\n\");\n navigator.clipboard.writeText(markdown).then(() => {\n snackbarController.open({\n type: \"success\",\n message: t(\"studio_sql_markdown_copied\")\n });\n }).catch(() => {\n snackbarController.open({\n type: \"error\",\n message: t(\"studio_sql_markdown_copy_failed\")\n });\n });\n };\n\n const renderResults = () => {\n if (loading) {\n return (\n <div className=\"flex-grow flex items-center justify-center\">\n <div className=\"text-center\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"mt-4 text-text-secondary dark:text-text-secondary-dark font-mono tracking-tight animate-pulse\">{t(\"studio_sql_executing_query\")}</Typography>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex-grow flex items-center justify-center p-6 overflow-auto\">\n <ErrorView title={t(\"studio_sql_query_error\")} error={error}/>\n </div>\n );\n }\n\n if (!results) {\n return (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled dark:text-text-disabled-dark\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-4 opacity-50\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1} d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4\"/></svg>\n <Typography variant=\"body2\">{t(\"studio_sql_run_query_placeholder\")}</Typography>\n </div>\n </div>\n );\n }\n\n // Check for EXPLAIN (FORMAT JSON) response\n if (results.length === 1 && results[0][\"QUERY PLAN\"] && Array.isArray(results[0][\"QUERY PLAN\"])) {\n try {\n const plan = results[0][\"QUERY PLAN\"][0].Plan;\n if (plan) {\n return (\n <div className=\"flex-grow overflow-auto p-4 bg-surface-50 dark:bg-surface-900 flex flex-col items-start\">\n <Typography variant=\"caption\" className=\"font-bold text-text-secondary mb-4 tracking-wider uppercase\">{t(\"studio_sql_visual_execution_plan\")}</Typography>\n <div className=\"pb-12\">\n <ExplainVisualizer plan={plan}/>\n </div>\n </div>\n );\n }\n } catch (e) {\n console.warn(\"Failed to parse EXPLAIN JSON output:\", e);\n }\n }\n\n if (results.length === 0) {\n return (\n <div className=\"flex-grow p-6 flex flex-col items-center justify-center\">\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark font-mono border-b border-surface-200 dark:border-surface-950 pb-2 mb-2\">{t(\"studio_sql_success\")}</Typography>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_no_results\")}</Typography>\n </div>\n );\n }\n\n const savedWidths = columnWidths[activeTab.sql] || {};\n const resultColumnKeys = Object.keys(results[0]);\n\n // Compute matched collections for this query, including PK column detection\n const matchedCollections: ResolvedQueryCollection[] = (() => {\n if (!activeTab.lastExecutedSql || !collectionRegistry.collections) return [];\n try {\n return resolveQueryCollections(activeTab.lastExecutedSql, schemas, collectionRegistry.collections, resultColumnKeys);\n } catch {\n return [];\n }\n })();\n\n // Only collections that have a PK column in the result set can be opened\n const actionableCollections = matchedCollections.filter(mc => mc.pkColumn && resultColumnKeys.includes(mc.pkColumn));\n\n // For each row, determine which entities can be opened\n const getRowEntityActions = (rowData: Record<string, unknown>): { collection: ResolvedQueryCollection, entityId: string | number }[] => {\n if (!rowData) return [];\n return actionableCollections\n .filter(mc => rowData[mc.pkColumn!] != null)\n .map(mc => ({\n collection: mc,\n entityId: rowData[mc.pkColumn!] as string | number\n }));\n };\n\n // Build the columns array. If we have actionable collections, prepend a dedicated action column.\n const dataColumns: VirtualTableColumn[] = resultColumnKeys.map(key => ({\n key,\n title: key,\n width: savedWidths[key] ?? 150,\n sortable: false,\n resizable: true\n }));\n\n const columns: VirtualTableColumn[] = actionableCollections.length > 0\n ? [{ key: \"__cms_action__\",\ntitle: \"\",\nwidth: 36,\nsortable: false,\nresizable: false }, ...dataColumns]\n : dataColumns;\n\n return (\n <div className=\"flex-grow flex flex-col overflow-hidden min-h-0\">\n {/* Collection Badges Bar */}\n {actionableCollections.length > 0 && (\n <div className={cls(\"px-4 py-1.5 border-b flex items-center gap-2 shrink-0 bg-surface-50 dark:bg-surface-900\", defaultBorderMixin)}>\n <Tooltip title={t(\"studio_sql_cms_collections_tooltip\")}>\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-widest text-text-disabled dark:text-text-disabled-dark mr-1 shrink-0 cursor-help\">{t(\"studio_sql_cms\")}</Typography>\n </Tooltip>\n <div className=\"flex items-center gap-1.5 overflow-x-auto no-scrollbar\">\n {actionableCollections.map(mc => (\n <Tooltip key={mc.tableName} title={`Table \"${mc.tableName}\" → ${mc.collection.name} (PK: ${mc.pkColumn})`}>\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium bg-primary/10 dark:bg-primary-dark/15 text-primary dark:text-primary-dark whitespace-nowrap border border-primary/20 dark:border-primary-dark/20\">\n {typeof mc.collection.icon === \"string\" && (\n <IconForView collectionOrView={mc.collection} className=\"text-[12px]\"/>\n )}\n {mc.collection.name}\n </span>\n </Tooltip>\n ))}\n </div>\n </div>\n )}\n <div className=\"flex-grow relative h-full min-h-0 min-w-0\">\n <VirtualTable\n data={results}\n columns={columns}\n rowHeight={32}\n headerHeight={32}\n extraData={editingCell}\n onColumnResizeEnd={handleColumnResize}\n cellRenderer={({ rowData, column, rowIndex }) => {\n // Dedicated collection action column\n if (column.key === \"__cms_action__\") {\n const rowActions = getRowEntityActions(rowData);\n if (rowActions.length === 0) {\n return <div className=\"h-full w-full\"/>;\n }\n if (rowActions.length === 1) {\n const ra = rowActions[0];\n return (\n <div className=\"h-full flex items-center justify-center\">\n <Tooltip title={t(\"studio_sql_edit_entity\", { name: ra.collection.collection.name,\nid: String(ra.entityId) })}>\n <IconButton\n size=\"small\"\n className=\"text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 transition-colors\"\n onClick={(e) => {\n e.stopPropagation();\n sideEntityController?.open({\n path: ra.collection.collection.slug,\n entityId: ra.entityId,\n collection: ra.collection.collection,\n updateUrl: false\n });\n }}\n >\n <PencilIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n </div>\n );\n }\n // Multiple matched collections (JOIN) — show a dropdown\n return (\n <div className=\"h-full flex items-center justify-center\">\n <Menu\n trigger={\n <IconButton\n size=\"small\"\n className=\"text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300 transition-colors\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVerticalIcon size={iconSize.smallest}/>\n </IconButton>\n }\n >\n {rowActions.map(ra => (\n <MenuItem\n key={ra.collection.tableName}\n dense\n onClick={() => {\n sideEntityController?.open({\n path: ra.collection.collection.slug,\n entityId: ra.entityId,\n collection: ra.collection.collection,\n updateUrl: false\n });\n }}\n >\n {t(\"studio_sql_edit_entity\", { name: ra.collection.collection.name,\nid: String(ra.entityId) })}\n </MenuItem>\n ))}\n </Menu>\n </div>\n );\n }\n\n // Regular data cell\n const isEditing = editingCell?.rowIndex === rowIndex && editingCell?.columnKey === column.key;\n const value = rowData ? rowData[column.key] : null;\n const displayValue = typeof value === \"object\" && value !== null ? JSON.stringify(value) : String(value ?? \"\");\n\n if (isEditing) {\n return (\n <FixedEditorOverlay\n displayValue={displayValue}\n onSave={(val) => handleCellSave(val, rowData, column.key, rowIndex)}\n onCancel={() => setEditingCell(null)}\n />\n );\n }\n\n return (\n <div\n className=\"px-4 py-1.5 h-full flex items-center whitespace-nowrap text-[13px] text-text-primary dark:text-text-primary-dark font-mono cursor-text group/cell\"\n onDoubleClick={() => handleDoubleClick(rowIndex, column.key, displayValue, rowData)}\n >\n <div className=\"truncate flex-grow\" title={displayValue}>\n {displayValue === \"\" ? <span className=\"text-text-disabled dark:text-text-disabled-dark italic text-[11px]\">NULL</span> : displayValue}\n </div>\n </div>\n );\n }}\n />\n </div>\n\n <div className={cls(\"p-2 px-4 border-t bg-surface-50 dark:bg-surface-900 flex justify-between items-center shrink-0\", defaultBorderMixin)}>\n <div className=\"flex space-x-4\">\n <div className=\"flex items-center text-[11px]\">\n <span className=\"font-bold text-text-disabled dark:text-text-disabled-dark mr-2 uppercase tracking-tighter\">{t(\"studio_sql_rows\")}</span>\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">{results.length}</span>\n </div>\n <div className=\"flex items-center text-[11px]\">\n <span className=\"font-bold text-text-disabled dark:text-text-disabled-dark mr-2 uppercase tracking-tighter\">{t(\"studio_sql_time\")}</span>\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">{execTime}ms</span>\n </div>\n </div>\n <div className=\"flex gap-2 overflow-x-auto no-scrollbar items-center px-2\">\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={handleExportMarkdown}\n >\n {t(\"studio_sql_copy_markdown\")}\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={handleExportJSON}\n >\n {t(\"studio_sql_export_json\")}\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={handleExportCSV}\n >\n {t(\"studio_sql_export_csv\")}\n </Button>\n </div>\n </div>\n </div>\n );\n };\n\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_sql_editor_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 20;\n } catch (e) {\n return 20;\n }\n });\n const [editorHeight, setEditorHeight] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_sql_editor_height\");\n return saved !== null ? parseFloat(saved) : 50;\n } catch (e) {\n return 50;\n }\n });\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_sql_editor_sidebar_size\", sidebarSize.toString());\n } catch (e) { /* ignore */ }\n }, [sidebarSize]);\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_sql_editor_height\", editorHeight.toString());\n } catch (e) { /* ignore */ }\n }, [editorHeight]);\n\n const activeSnippet = snippets.find(s => s.sql === activeTab.sql);\n const isFavorite = activeSnippet?.isFavorite || false;\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={220}\n firstPanel={\n <SQLEditorSidebar\n snippets={snippets}\n history={history}\n onSelectSnippet={setSql}\n onTableClick={setSql}\n onDeleteSnippet={handleDeleteSnippet}\n schemas={schemas}\n isSchemaLoading={isSchemaLoading}\n schemaError={schemaError}\n onRetrySchema={fetchSchema}\n />\n }\n secondPanel={\n <div className=\"flex-grow flex flex-col min-w-0 h-full w-full\">\n {/* Toolbar */}\n <div className={cls(\"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950\", defaultBorderMixin)}>\n <div className=\"flex items-center flex-grow overflow-hidden mr-4\">\n <div className=\"flex items-center no-scrollbar overflow-x-auto min-w-0\">\n <Tabs value={activeTabId} onValueChange={handleTabChange} variant=\"boxy\" className=\"w-[unset] flex-shrink-0\" innerClassName=\"bg-white dark:bg-surface-950\">\n {tabs.map(tab => (\n <Tab key={tab.id} value={tab.id} className=\"flex items-center justify-between group max-w-[200px]\">\n <TerminalIcon size={iconSize.smallest} className=\"text-blue-500 mr-1.5 flex-shrink-0\"/>\n <span className=\"truncate\">{tab.name}</span>\n {tabs.length > 1 && (\n <IconButton\n size=\"smallest\"\n onClick={(e) => handleCloseTab(tab.id, e)}\n className=\"ml-1 !p-0.5 opacity-0 group-hover:opacity-100 hover:text-red-500 transition-opacity\"\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n )}\n </Tab>\n ))}\n </Tabs>\n <IconButton\n size=\"small\"\n onClick={handleAddTab}\n className=\"ml-2 flex-shrink-0\"\n >\n <PlusIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n </div>\n <div className=\"flex shrink-0 items-center justify-end pr-2 gap-1.5\">\n <Tooltip title={t(\"studio_sql_format_sql\")}>\n <IconButton size=\"small\" onClick={handlePrettify} className=\"text-text-secondary hover:text-text-primary transition-colors\">\n <MenuIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={handleExplain}\n disabled={loading}\n >\n {t(\"studio_sql_explain\")}\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"></div>\n\n <div className=\"flex items-center space-x-2 px-2 cursor-pointer\" onClick={() => setAutoLimit(!autoLimit)}>\n <Typography variant=\"caption\" className=\"text-[11px] text-text-secondary cursor-pointer select-none\">{t(\"studio_sql_limit_1000\")}</Typography>\n <input\n type=\"checkbox\"\n checked={autoLimit}\n onChange={(e) => setAutoLimit(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n className=\"w-3.5 h-3.5 rounded border-surface-300 text-primary focus:ring-primary cursor-pointer\"\n />\n </div>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"></div>\n\n <Tooltip title={isFavorite ? t(\"studio_sql_remove_from_favorites\") : t(\"studio_sql_add_to_favorites\")}>\n <IconButton\n size=\"small\"\n onClick={() => {\n if (!activeSnippet) {\n snackbarController.open({\n type: \"info\",\n message: t(\"studio_sql_save_first_to_favorite\")\n });\n return;\n }\n saveSnippets(snippets.map(s => s.id === activeSnippet.id ? { ...s,\nisFavorite: !s.isFavorite } : s));\n }}\n >\n <svg className={`w-4 h-4 ${isFavorite ? \"text-red-500 fill-current\" : \"text-text-disabled dark:text-text-disabled-dark hover:text-text-primary\"}`} fill={isFavorite ? \"currentColor\" : \"none\"} stroke=\"currentColor\" strokeWidth={2} viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z\"/></svg>\n </IconButton>\n </Tooltip>\n\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={() => setIsSaveDialogOpen(true)}\n >\n {t(\"studio_sql_save\")}\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"></div>\n\n <Menu\n trigger={\n <Button\n size=\"small\"\n variant=\"outlined\"\n className=\"text-text-secondary dark:text-text-secondary-dark font-medium mr-2\"\n >\n <DatabaseIcon size={iconSize.small} className=\"mr-1.5 text-text-disabled dark:text-text-disabled-dark\"/>\n <span className=\"max-w-[80px] truncate\">{isLoadingConfig ? \"...\" : (selectedDatabase || t(\"studio_sql_select_db\"))}</span>\n </Button>\n }\n >\n <div className=\"max-h-64 overflow-y-auto\">\n <div className=\"px-3 py-1.5 border-b border-surface-200 dark:border-surface-950 mb-1\">\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-[9px] text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_database\")}</Typography>\n </div>\n {isLoadingConfig ? (\n <div className=\"flex items-center justify-center p-4\">\n <CircularProgress size=\"small\"/>\n </div>\n ) : connectionConfigError ? (\n <div className=\"px-3 py-2 text-xs text-red-500 dark:text-red-400 max-w-[200px] break-words\">\n {connectionConfigError}\n </div>\n ) : (\n <>\n {availableDatabases.map(db => (\n <MenuItem key={db} dense onClick={() => handleDatabaseChange(db)} className={cls(\"text-xs\", selectedDatabase === db && \"text-primary dark:text-primary-dark\")}>\n {db}\n </MenuItem>\n ))}\n\n <div className=\"px-3 py-1.5 border-y border-surface-200 dark:border-surface-950 mb-1 mt-1\">\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-[9px] text-text-disabled dark:text-text-disabled-dark\">{t(\"studio_sql_role\")}</Typography>\n </div>\n {availableRoles.map(role => (\n <MenuItem key={role} dense onClick={() => handleRoleChange(role)} className={cls(\"text-xs\", selectedRole === role && \"text-primary dark:text-primary-dark\")}>\n {role}{role === \"postgres\" ? \" \" + t(\"studio_sql_admin\") : \"\"}\n </MenuItem>\n ))}\n </>\n )}\n </div>\n </Menu>\n\n <Button\n onClick={() => handleRun()}\n disabled={loading}\n size=\"small\"\n color=\"primary\"\n >\n {loading ? <CircularProgress size=\"smallest\" className=\"mr-2\"/> : <PlayIcon size={iconSize.smallest} className=\"mr-2\"/>}\n {t(\"studio_sql_run\")}\n </Button>\n </div>\n </div>\n\n <ResizablePanels\n orientation=\"vertical\"\n panelSizePercent={editorHeight}\n onPanelSizeChange={setEditorHeight}\n minPanelSizePx={100}\n firstPanel={\n <div className=\"h-full w-full relative flex flex-col min-h-0\">\n <MonacoEditor\n value={sql}\n onChange={(v) => setSql(v || \"\")}\n onRun={handleRun}\n schemas={schemas}\n />\n </div>\n }\n secondPanel={\n <div className=\"h-full w-full flex flex-col bg-surface-50 dark:bg-surface-950 overflow-hidden min-h-0\">\n <div className={cls(\"p-2 px-4 bg-surface-100 dark:bg-surface-900 border-b shrink-0 flex items-center\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold text-text-disabled dark:text-text-disabled-dark uppercase tracking-widest text-[10px]\">{t(\"studio_sql_query_results\")}</Typography>\n </div>\n <div className=\"flex-grow flex flex-col min-h-0 overflow-hidden\">\n {renderResults()}\n </div>\n </div>\n }\n />\n\n </div>\n }\n />\n\n <Dialog open={isSaveDialogOpen} onOpenChange={setIsSaveDialogOpen}>\n <DialogTitle>{t(\"studio_sql_save_snippet\")}</DialogTitle>\n <DialogContent>\n <div className=\"py-4 flex flex-col gap-4\">\n <TextField\n label={t(\"studio_sql_snippet_name\")}\n autoFocus\n placeholder={t(\"studio_sql_snippet_name_placeholder\")}\n value={newSnippetName}\n onChange={(e) => setNewSnippetName(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleSaveSnippet();\n }\n }}\n />\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark block\">{t(\"studio_sql_snippet_saved_local\")}</Typography>\n </div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={() => setIsSaveDialogOpen(false)}>{t(\"studio_sql_cancel\")}</Button>\n <Button onClick={handleSaveSnippet} color=\"primary\" disabled={!newSnippetName.trim()}>{t(\"studio_sql_save\")}</Button>\n </DialogActions>\n </Dialog>\n {/* Confirmation Dialog */}\n <ConfirmationDialog\n open={isConfirmDialogOpen}\n onCancel={() => setIsConfirmDialogOpen(false)}\n title={t(\"studio_sql_dangerous_operation\")}\n body={t(\"studio_sql_dangerous_operation_body\")}\n onAccept={() => {\n if (pendingAction) pendingAction();\n setIsConfirmDialogOpen(false);\n }}\n />\n </div>\n );\n};\n","\nimport React, { useRef, useEffect } from \"react\";\nimport Editor, { Monaco, OnMount } from \"@monaco-editor/react\";\nimport type { editor } from \"monaco-editor\";\nimport { cls, defaultBorderMixin } from \"@rebasepro/ui\";\nimport { FileIcon } from \"lucide-react\";\nimport { useModeController } from \"@rebasepro/core\";\n\n/** Ambient type definitions for the Rebase client SDK injected into Monaco. */\nconst REBASE_CLIENT_TYPES = `\n// ─── Rebase Client SDK Type Definitions ─────────────────────────────\n\ninterface Entity<M extends Record<string, any> = any> {\n id: string | number;\n path: string;\n values: M;\n}\n\ninterface FindParams {\n limit?: number;\n offset?: number;\n page?: number;\n where?: Record<string, string>;\n orderBy?: string;\n include?: string[];\n searchString?: string;\n}\n\ninterface FindResponse<M extends Record<string, any> = any> {\n data: Entity<M>[];\n meta: {\n total: number;\n limit: number;\n offset: number;\n hasMore: boolean;\n };\n}\n\ntype FilterOperator = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\" | \"in\" | \"not-in\" | \"array-contains\" | \"array-contains-any\" | \"is\" | \"is_not\" | \"like\" | \"ilike\";\n\ninterface QueryBuilder<M extends Record<string, any> = any> {\n where(column: keyof M & string, operator: FilterOperator, value: any): QueryBuilder<M>;\n orderBy(column: keyof M & string, direction?: \"asc\" | \"desc\"): QueryBuilder<M>;\n limit(count: number): QueryBuilder<M>;\n offset(count: number): QueryBuilder<M>;\n search(searchString: string): QueryBuilder<M>;\n find(): Promise<FindResponse<M>>;\n findOne(): Promise<Entity<M> | undefined>;\n count(): Promise<number>;\n}\n\ninterface CollectionClient<M extends Record<string, any> = any> {\n find(params?: FindParams): Promise<FindResponse<M>>;\n findById(id: string | number): Promise<Entity<M> | undefined>;\n create(data: Partial<M>, id?: string | number): Promise<Entity<M>>;\n update(id: string | number, data: Partial<M>): Promise<Entity<M>>;\n delete(id: string | number): Promise<void>;\n where(column: keyof M & string, operator: FilterOperator, value: any): QueryBuilder<M>;\n orderBy(column: keyof M & string, direction?: \"asc\" | \"desc\"): QueryBuilder<M>;\n limit(count: number): QueryBuilder<M>;\n offset(count: number): QueryBuilder<M>;\n search(searchString: string): QueryBuilder<M>;\n listen?(params: FindParams | undefined, onUpdate: (response: FindResponse<M>) => void, onError?: (error: Error) => void): () => void;\n listenById?(id: string | number, onUpdate: (entity: Entity<M> | undefined) => void, onError?: (error: Error) => void): () => void;\n count?(params?: FindParams): Promise<number>;\n}\n\ninterface RebaseUser {\n uid: string;\n email: string | null;\n displayName: string | null;\n photoURL: string | null;\n emailVerified?: boolean;\n roles?: string[];\n providerId: string;\n isAnonymous: boolean;\n}\n\ninterface RebaseSession {\n accessToken: string;\n refreshToken: string;\n expiresAt: number;\n user: RebaseUser;\n}\n\ntype AuthChangeEvent = 'SIGNED_IN' | 'SIGNED_OUT' | 'TOKEN_REFRESHED' | 'USER_UPDATED';\n\ninterface RebaseAuth {\n signInWithEmail(email: string, password: string): Promise<{ user: RebaseUser; accessToken: string; refreshToken: string }>;\n signUp(email: string, password: string, displayName?: string): Promise<{ user: RebaseUser; accessToken: string; refreshToken: string }>;\n signInWithGoogle(idToken: string): Promise<{ user: RebaseUser; accessToken: string; refreshToken: string }>;\n signOut(): Promise<void>;\n refreshSession(): Promise<RebaseSession>;\n getUser(): Promise<RebaseUser>;\n updateUser(updates: { displayName?: string; photoURL?: string }): Promise<RebaseUser>;\n resetPasswordForEmail(email: string): Promise<{ success: boolean; message: string }>;\n resetPassword(token: string, password: string): Promise<{ success: boolean; message: string }>;\n changePassword(oldPassword: string, newPassword: string): Promise<{ success: boolean; message: string }>;\n sendVerificationEmail(): Promise<{ success: boolean; message: string }>;\n verifyEmail(token: string): Promise<{ success: boolean; message: string }>;\n getSessions(): Promise<any[]>;\n revokeSession(sessionId: string): Promise<{ success: boolean }>;\n revokeAllSessions(): Promise<{ success: boolean }>;\n getSession(): RebaseSession | null;\n onAuthStateChange(callback: (event: AuthChangeEvent, session: RebaseSession | null) => void): () => void;\n}\n\ninterface AdminUser {\n uid: string;\n email: string;\n displayName: string | null;\n photoURL: string | null;\n provider: string;\n roles: string[];\n createdAt: string;\n updatedAt: string;\n}\n\ninterface RebaseRole {\n id: string;\n name: string;\n isAdmin: boolean;\n defaultPermissions: Record<string, any> | null;\n config: Record<string, any> | null;\n}\n\ninterface RebaseAdmin {\n listUsers(): Promise<{ users: AdminUser[] }>;\n getUser(userId: string): Promise<{ user: AdminUser }>;\n createUser(data: { email: string; displayName?: string; password?: string; roles?: string[] }): Promise<{ user: AdminUser }>;\n updateUser(userId: string, data: { email?: string; displayName?: string; password?: string; roles?: string[] }): Promise<{ user: AdminUser }>;\n deleteUser(userId: string): Promise<{ success: boolean }>;\n listRoles(): Promise<{ roles: RebaseRole[] }>;\n getRole(roleId: string): Promise<{ role: RebaseRole }>;\n createRole(data: { id: string; name: string; isAdmin?: boolean; defaultPermissions?: any; config?: any }): Promise<{ role: RebaseRole }>;\n updateRole(roleId: string, data: { name?: string; isAdmin?: boolean; defaultPermissions?: any; config?: any }): Promise<{ role: RebaseRole }>;\n deleteRole(roleId: string): Promise<{ success: boolean }>;\n bootstrap(): Promise<{ success: boolean; message: string; user: { uid: string; roles: string[] } }>;\n}\n\ninterface UploadFileProps {\n file: FileIcon;\n fileName?: string;\n path?: string;\n metadata?: Record<string, any>;\n bucket?: string;\n}\n\ninterface UploadFileResult {\n path: string;\n bucket?: string;\n downloadUrl?: string;\n}\n\ninterface DownloadConfig {\n url: string | null;\n fileNotFound?: boolean;\n metadata?: any;\n}\n\ninterface StorageSource {\n putObject(props: UploadFileProps): Promise<UploadFileResult>;\n getSignedUrl(pathOrUrl: string, bucket?: string): Promise<DownloadConfig>;\n getObject(path: string, bucket?: string): Promise<FileIcon | null>;\n deleteObject(path: string, bucket?: string): Promise<void>;\n listObjects(path: string, options?: { bucket?: string; maxResults?: number; pageToken?: string }): Promise<any>;\n}\n\ntype RebaseData = {\n /** Look up a collection by slug. */\n collection(slug: string): CollectionClient;\n} & {\n /** Dynamic collection access — e.g. client.data.authors */\n [collectionSlug: string]: CollectionClient;\n};\n\n/**\n * The Rebase client instance. Use \\`client.data\\`, \\`client.auth\\`, \\`client.admin\\`,\n * \\`client.storage\\`, and \\`client.call()\\` to interact with your Rebase backend.\n *\n * @example\n * // Query a collection\n * const result = await client.data.products.find({ limit: 10 });\n *\n * // Create a record\n * await client.data.products.create({ name: \"Camera\", price: 299 });\n *\n * // Fluent query\n * const expensive = await client.data.products.where(\"price\", \">\", 100).orderBy(\"price\", \"desc\").limit(5).find();\n *\n * // Auth\n * const session = client.auth.getSession();\n *\n * // Admin\n * const { users } = await client.admin.listUsers();\n *\n * // Custom endpoint\n * const result = await client.call(\"/my-endpoint\", { myData: 123 });\n */\ninterface RebaseClient {\n /** Data access — dynamic collection accessors */\n data: RebaseData;\n /** Authentication methods */\n auth: RebaseAuth;\n /** User/role admin methods */\n admin: RebaseAdmin;\n /** Storage operations */\n storage?: StorageSource;\n /** Call a custom server-side endpoint */\n call<T = any>(endpoint: string, payload?: any): Promise<T>;\n /** Direct collection access (shorthand) */\n [collectionSlug: string]: any;\n}\n\n/** The pre-configured client instance. Already authenticated with the current user session. */\ndeclare const client: RebaseClient;\n\n/** Execution context with user and collection information. */\ninterface JSEditorContext {\n /** The user the script is running as. */\n user: {\n uid: string;\n displayName: string | null;\n email: string | null;\n roles?: string[];\n } | null;\n /** Registered collections with their property names. */\n collections: Array<{\n slug: string;\n name: string;\n properties: string[];\n }>;\n}\n\n/** Execution context — contains info about the selected user and registered collections. */\ndeclare const context: JSEditorContext;\n`;\n\nexport type CollectionInfo = {\n slug: string;\n name: string;\n properties: string[];\n};\n\nexport type JSMonacoEditorProps = {\n value: string;\n onChange: (value: string | undefined) => void;\n onRun?: (selectedText?: string) => void;\n className?: string;\n readOnly?: boolean;\n autoFocus?: boolean;\n /** Collection slugs for basic autocomplete */\n collectionSlugs?: string[];\n /** Full collection info with property names for richer type generation */\n collections?: CollectionInfo[];\n};\n\nexport const JSMonacoEditor = ({\n value,\n onChange,\n onRun,\n className,\n readOnly = false,\n autoFocus = true,\n collectionSlugs = [],\n collections = []\n}: JSMonacoEditorProps) => {\n const { mode } = useModeController();\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const monacoRef = useRef<Monaco | null>(null);\n const onRunRef = useRef(onRun);\n onRunRef.current = onRun;\n const typesRegisteredRef = useRef(false);\n\n const handleEditorOnMount: OnMount = (editorInstance, monaco) => {\n editorRef.current = editorInstance;\n monacoRef.current = monaco;\n\n // Register Cmd/Ctrl+Enter to run\n editorInstance.addAction({\n id: \"run-script\",\n label: \"Run Script\",\n keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],\n contextMenuGroupId: \"operation\",\n contextMenuOrder: 0,\n run: () => {\n if (onRunRef.current) {\n const selection = editorInstance.getSelection();\n let selectedText: string | undefined;\n if (selection && !selection.isEmpty()) {\n selectedText = editorInstance.getModel()?.getValueInRange(selection)?.trim();\n }\n onRunRef.current(selectedText || undefined);\n }\n }\n });\n\n // Configure TypeScript/JavaScript defaults for richer completion\n if (!typesRegisteredRef.current) {\n typesRegisteredRef.current = true;\n\n // Configure TS compiler for modern JS with top-level await\n // Note: cast through `any` because the bundled type stubs mark\n // `monaco.languages.typescript` as deprecated while the runtime\n // API is fully functional.\n const ts = (monaco.languages as any).typescript;\n ts.typescriptDefaults.setCompilerOptions({\n target: ts.ScriptTarget.ESNext,\n module: ts.ModuleKind.ESNext,\n allowJs: true,\n checkJs: false,\n strict: false,\n noEmit: true,\n allowNonTsExtensions: true\n });\n\n // Suppress diagnostics that don't apply to our script context.\n // Scripts are executed inside `new AsyncFunction(...)` at runtime,\n // so top-level `await` (1375) and `return` (1108) are valid.\n ts.typescriptDefaults.setDiagnosticsOptions({\n diagnosticCodesToIgnore: [1375, 1108]\n });\n\n // Inject the Rebase Client SDK type definitions\n ts.typescriptDefaults.addExtraLib(\n REBASE_CLIENT_TYPES,\n \"ts:rebase-client.d.ts\"\n );\n\n // Generate collection-specific types from registered collections\n if (collections.length > 0) {\n const lines: string[] = [];\n for (const col of collections) {\n // Generate a typed interface for each collection\n const ifaceName = col.slug.replace(/[^a-zA-Z0-9_]/g, \"_\");\n const propsType = col.properties.length > 0\n ? `{ ${col.properties.map(p => `${p}: any`).join(\"; \")} }`\n : \"Record<string, any>\";\n lines.push(`/** Collection: ${col.name} (${col.slug}) */`);\n lines.push(`interface ${ifaceName}_Row ${propsType}`);\n lines.push(`declare namespace client.data { const ${col.slug}: CollectionClient<${ifaceName}_Row>; }`);\n }\n ts.typescriptDefaults.addExtraLib(\n lines.join(\"\\n\"),\n \"ts:rebase-collections.d.ts\"\n );\n } else if (collectionSlugs.length > 0) {\n // Fallback: just slug names without property info\n const collectionHints = collectionSlugs.map(slug =>\n `/** Collection: ${slug} */\\ndeclare namespace client.data { const ${slug}: CollectionClient; }`\n ).join(\"\\n\");\n ts.typescriptDefaults.addExtraLib(\n collectionHints,\n \"ts:rebase-collections.d.ts\"\n );\n }\n }\n\n if (autoFocus) {\n editorInstance.focus();\n }\n };\n\n return (\n <div className={cls(\"relative w-full h-full overflow-hidden\", className)}>\n <Editor\n height=\"100%\"\n defaultLanguage=\"typescript\"\n path=\"rebase-script.ts\"\n value={value}\n onChange={onChange}\n onMount={handleEditorOnMount}\n theme={mode === \"dark\" ? \"vs-dark\" : \"vs\"}\n options={{\n minimap: { enabled: false },\n fontSize: 14,\n lineNumbers: \"on\",\n scrollBeyondLastLine: false,\n automaticLayout: true,\n readOnly,\n tabSize: 2,\n wordWrap: \"on\",\n suggestOnTriggerCharacters: true,\n quickSuggestions: true,\n parameterHints: { enabled: true }\n }}\n />\n </div>\n );\n};\n","\nimport React, { useState } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Tabs, Tab, Tooltip, IconButton , iconSize } from \"@rebasepro/ui\";\nimport { PlusIcon, Trash2Icon } from \"lucide-react\";\n\nexport interface JSSnippet {\n id: string;\n name: string;\n code: string;\n createdAt: number;\n isFavorite?: boolean;\n}\n\ninterface CollectionInfo {\n slug: string;\n properties: string[];\n}\n\ninterface JSEditorSidebarProps {\n collections: CollectionInfo[];\n snippets: JSSnippet[];\n history: string[];\n onSelectSnippet: (code: string) => void;\n onDeleteSnippet: (id: string) => void;\n onInsertCode: (code: string) => void;\n}\n\nconst QUICK_REFERENCE: { label: string; code: string; description: string }[] = [\n {\n label: \"Find all\",\n code: \"const result = await client.data.collection(\\\"COLLECTION\\\").find({ limit: 20 });\\nreturn result;\",\n description: \"Fetch records with pagination\"\n },\n {\n label: \"Find by ID\",\n code: \"const item = await client.data.collection(\\\"COLLECTION\\\").findById(\\\"ID\\\");\\nreturn item;\",\n description: \"Fetch a single record\"\n },\n {\n label: \"Create\",\n code: \"const created = await client.data.collection(\\\"COLLECTION\\\").create({\\n // your fields here\\n});\\nreturn created;\",\n description: \"Insert a new record\"\n },\n {\n label: \"Update\",\n code: \"const updated = await client.data.collection(\\\"COLLECTION\\\").update(\\\"ID\\\", {\\n // fields to update\\n});\\nreturn updated;\",\n description: \"Update an existing record\"\n },\n {\n label: \"Delete\",\n code: \"await client.data.collection(\\\"COLLECTION\\\").delete(\\\"ID\\\");\\nreturn { success: true };\",\n description: \"Delete a record\"\n },\n {\n label: \"Fluent query\",\n code: \"const result = await client.data.collection(\\\"COLLECTION\\\")\\n .where(\\\"field\\\", \\\">\\\", value)\\n .orderBy(\\\"field\\\", \\\"desc\\\")\\n .limit(10)\\n .find();\\nreturn result;\",\n description: \"Chained query builder\"\n },\n {\n label: \"Auth: Current session\",\n code: \"const session = client.auth.getSession();\\nreturn session;\",\n description: \"Get current auth session\"\n },\n {\n label: \"Admin: List users\",\n code: \"const { users } = await client.admin.listUsers();\\nreturn users;\",\n description: \"List all registered users\"\n },\n {\n label: \"Custom endpoint\",\n code: \"const result = await client.call(\\\"/my-endpoint\\\", { key: \\\"value\\\" });\\nreturn result;\",\n description: \"Call a custom API endpoint\"\n }\n];\n\nexport const JSEditorSidebar = ({\n collections,\n snippets,\n history,\n onSelectSnippet,\n onDeleteSnippet,\n onInsertCode\n}: JSEditorSidebarProps) => {\n const [activeTab, setActiveTab] = useState<\"collections\" | \"snippets\" | \"history\" | \"reference\">(\"collections\");\n\n return (\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <Tabs value={activeTab} onValueChange={(v) => setActiveTab(v as \"collections\" | \"snippets\" | \"history\" | \"reference\")} variant=\"boxy\" className=\"border-b border-surface-200 dark:border-surface-950\">\n <Tab value=\"collections\">\n <Tooltip title=\"Browse collections\">\n <span className=\"text-xs\">Collections</span>\n </Tooltip>\n </Tab>\n <Tab value=\"reference\">\n <Tooltip title=\"SDK quick reference\">\n <span className=\"text-xs\">Reference</span>\n </Tooltip>\n </Tab>\n <Tab value=\"snippets\">\n <span className=\"text-xs\">Snippets</span>\n </Tab>\n <Tab value=\"history\">\n <span className=\"text-xs\">History</span>\n </Tab>\n </Tabs>\n\n <div className=\"flex-grow overflow-hidden relative\">\n {/* Collections browser */}\n {activeTab === \"collections\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n Collections\n </Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-1 space-y-1 no-scrollbar\">\n {collections.length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n No collections found\n </Typography>\n </div>\n ) : (\n collections.map(col => (\n <CollectionItem\n key={col.slug}\n collection={col}\n onInsertCode={onInsertCode}\n />\n ))\n )}\n </div>\n </div>\n )}\n\n {/* Quick reference */}\n {activeTab === \"reference\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n SDK Reference\n </Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-2 space-y-2 no-scrollbar\">\n {QUICK_REFERENCE.map((ref, i) => (\n <div\n key={i}\n className={cls(\n \"group p-2.5 rounded-lg border hover:border-primary/40 dark:hover:border-primary/40\",\n \"bg-white dark:bg-surface-900 transition-all cursor-pointer\",\n defaultBorderMixin\n )}\n onClick={() => onInsertCode(ref.code)}\n >\n <div className=\"flex items-center justify-between mb-1\">\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-semibold text-[13px]\">\n {ref.label}\n </Typography>\n <svg className=\"w-3.5 h-3.5 text-text-disabled group-hover:text-primary transition-colors\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\"/>\n </svg>\n </div>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark text-[10px] leading-tight\">\n {ref.description}\n </Typography>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* Snippets */}\n {activeTab === \"snippets\" && (() => {\n const favorites = snippets.filter(s => s.isFavorite);\n const others = snippets.filter(s => !s.isFavorite);\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">Snippets</Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-2 space-y-2 no-scrollbar\">\n {snippets.length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n No saved snippets yet. Use the save button to store reusable code.\n </Typography>\n </div>\n ) : (\n <>\n {favorites.length > 0 && (\n <div className=\"mb-3\">\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark mb-2 px-1 flex items-center\">\n <svg className=\"w-3 h-3 mr-1 text-amber-500\" fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\"/></svg>\n Favorites\n </Typography>\n <div className=\"space-y-2\">\n {favorites.map(snippet => (\n <SnippetItem key={snippet.id} snippet={snippet} onSelect={onSelectSnippet} onDelete={onDeleteSnippet}/>\n ))}\n </div>\n </div>\n )}\n {others.length > 0 && (\n <div>\n {favorites.length > 0 && (\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark mb-2 px-1\">\n Others\n </Typography>\n )}\n <div className=\"space-y-2\">\n {others.map(snippet => (\n <SnippetItem key={snippet.id} snippet={snippet} onSelect={onSelectSnippet} onDelete={onDeleteSnippet}/>\n ))}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n );\n })()}\n\n {/* History */}\n {activeTab === \"history\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">History</Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-1 space-y-1 no-scrollbar\">\n {history.length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n No execution history yet\n </Typography>\n </div>\n ) : (\n [...history].reverse().map((code, i) => (\n <div\n key={i}\n className=\"p-2 py-1.5 rounded hover:bg-surface-100 dark:hover:bg-surface-950 cursor-pointer group transition-colors flex items-start\"\n onClick={() => onSelectSnippet(code)}\n >\n <svg className=\"w-3 h-3 mt-1 mr-2 text-text-disabled dark:text-text-disabled-dark group-hover:text-primary transition-colors flex-shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"/>\n </svg>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark group-hover:text-text-primary dark:group-hover:text-text-primary-dark text-[11px] line-clamp-2 leading-tight flex-grow font-mono\">\n {code.length > 120 ? code.substring(0, 120) + \"…\" : code}\n </Typography>\n </div>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n};\n\n// ─── Sub-components ──────────────────────────────────────────────────\n\nfunction CollectionItem({ collection, onInsertCode }: { collection: CollectionInfo; onInsertCode: (code: string) => void }) {\n const [expanded, setExpanded] = useState(false);\n\n return (\n <div>\n <div\n className=\"flex items-center p-1 cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-950 rounded transition-colors group relative\"\n onClick={() => setExpanded(!expanded)}\n >\n <svg\n className={cls(\"w-3 h-3 mr-1 transition-transform\", expanded && \"rotate-90\")}\n fill=\"currentColor\" viewBox=\"0 0 20 20\"\n >\n <path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/>\n </svg>\n <svg className=\"w-3.5 h-3.5 mr-1 shrink-0 text-text-disabled dark:text-text-disabled-dark\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4\"/>\n </svg>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark text-xs truncate flex-1 min-w-0\">\n {collection.slug}\n </Typography>\n <Tooltip title=\"Insert find() snippet\">\n <IconButton\n size=\"smallest\"\n className=\"opacity-0 group-hover:opacity-100 text-text-disabled hover:text-primary transition-all\"\n onClick={(e) => {\n e.stopPropagation();\n onInsertCode(`const result = await client.data.${collection.slug}.find({ limit: 20 });\\nreturn result;`);\n }}\n >\n <PlusIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n </div>\n {expanded && collection.properties.length > 0 && (\n <div className={cls(\"ml-5 mt-1 space-y-0.5 border-l\", defaultBorderMixin)}>\n {collection.properties.map(prop => (\n <div\n key={prop}\n className=\"flex items-center p-1 pl-2 hover:bg-surface-50 dark:hover:bg-surface-950 rounded-r cursor-pointer transition-colors group/prop relative min-h-[28px]\"\n onClick={() => onInsertCode(`\"${prop}\"`)}\n >\n <svg className=\"w-3 h-3 mr-1.5 text-text-disabled dark:text-text-disabled-dark shrink-0\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M9 4.5v15m6-15v15m-10.5-1.5h15c.621 0 1.125-.504 1.125-1.125V5.625c0-.621-.504-1.125-1.125-1.125h-15c-.621 0-1.125.504-1.125 1.125v12.75c0 .621.504 1.125 1.125 1.125Z\"/></svg>\n <Typography variant=\"caption\" className=\"text-text-primary dark:text-text-primary-dark text-[11px] truncate flex-grow font-mono\">{prop}</Typography>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nfunction SnippetItem({ snippet, onSelect, onDelete }: { snippet: JSSnippet; onSelect: (code: string) => void; onDelete: (id: string) => void }) {\n return (\n <div\n className={cls(\"group p-2 rounded border hover:border-surface-400 dark:hover:border-surface-600 bg-white dark:bg-surface-900 transition-all cursor-pointer relative\", defaultBorderMixin)}\n onClick={() => onSelect(snippet.code)}\n >\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-[13px] truncate pr-6\">\n {snippet.name}\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[10px] block mt-1 truncate font-mono\">\n {snippet.code}\n </Typography>\n <IconButton\n size=\"smallest\"\n className=\"absolute right-1 top-1 opacity-0 group-hover:opacity-100 text-text-disabled hover:text-red-500 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(snippet.id);\n }}\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </div>\n );\n}\n","import React from \"react\";\nimport { Typography, cls, iconSize } from \"@rebasepro/ui\";\nimport { KeyRoundIcon } from \"lucide-react\";\nimport { UserSelectPopover, SelectableUser } from \"@rebasepro/core\";\n\nexport interface AuthSimulationSelectorProps {\n authMode: \"jwt\" | \"none\";\n setAuthMode: (mode: \"jwt\" | \"none\") => void;\n selectedUser: SelectableUser | null;\n setSelectedUser: (user: SelectableUser | null) => void;\n users: SelectableUser[];\n loading?: boolean;\n currentUser: SelectableUser | null;\n}\n\nexport function AuthSimulationSelector({\n authMode,\n setAuthMode,\n selectedUser,\n setSelectedUser,\n users,\n loading,\n currentUser\n}: AuthSimulationSelectorProps) {\n return (\n <div className=\"flex flex-wrap items-center gap-3\">\n <KeyRoundIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-medium\"\n >\n Auth:\n </Typography>\n <button\n onClick={() => setAuthMode(\"jwt\")}\n className={cls(\n \"px-3 py-1 text-xs rounded-full border transition-all\",\n authMode === \"jwt\"\n ? \"bg-primary/15 text-primary dark:text-primary-dark border-primary/30 font-medium\"\n : \"border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-primary/30\"\n )}\n >\n JWT Token\n </button>\n <button\n onClick={() => setAuthMode(\"none\")}\n className={cls(\n \"px-3 py-1 text-xs rounded-full border transition-all\",\n authMode === \"none\"\n ? \"bg-red-500/15 text-red-600 dark:text-red-400 border-red-500/30 font-medium\"\n : \"border-surface-300 dark:border-surface-600 text-text-secondary dark:text-text-secondary-dark hover:border-red-500/30\"\n )}\n >\n No Auth\n </button>\n\n {authMode === \"jwt\" && (\n <>\n <div className=\"w-px h-4 bg-surface-300 dark:bg-surface-600 mx-1\" />\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-medium\"\n >\n Run as:\n </Typography>\n <UserSelectPopover\n selectedUser={selectedUser}\n onUserSelected={setSelectedUser}\n users={users}\n loading={loading}\n currentUser={currentUser}\n />\n </>\n )}\n </div>\n );\n}\n","\nimport React, { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { Highlight, themes } from \"prism-react-renderer\";\nimport { toSnakeCase } from \"@rebasepro/utils\";\nimport { Button, Typography, CircularProgress, cls, IconButton, Dialog, DialogContent, DialogActions, DialogTitle, TextField, Tooltip, defaultBorderMixin, ResizablePanels, Chip, Menu, MenuItem, Tabs, Tab, VirtualTable, VirtualTableColumn, CellRendererParams , iconSize } from \"@rebasepro/ui\";\nimport { TerminalIcon, XIcon, PlusIcon, SaveIcon, DownloadIcon, PlayIcon, MoreVerticalIcon, PencilIcon, MenuIcon } from \"lucide-react\";\nimport { useStudioUrlController, useStudioCollectionRegistry, useStudioSideEntityController } from \"@rebasepro/core\";\nimport { useRebaseContext, useRebaseClient, useSnackbarController, useApiConfig, useTranslation, useModeController, ErrorView, SelectableUser, IconForView } from \"@rebasepro/core\";\nimport { EntityCollection } from \"@rebasepro/types\";\nimport { createRebaseClient } from \"@rebasepro/client\";\nimport { JSMonacoEditor } from \"./JSMonacoEditor\";\nimport { JSEditorSidebar, JSSnippet } from \"./JSEditorSidebar\";\nimport { AuthSimulationSelector } from \"../AuthSimulationSelector\";\n\n// ─── Types ───────────────────────────────────────────────────────────\n\ninterface ConsoleEntry {\n type: \"log\" | \"warn\" | \"error\" | \"info\";\n args: any[];\n timestamp: number;\n}\n\ninterface ExecutionResult {\n value: any;\n console: ConsoleEntry[];\n duration: number;\n error?: string;\n timestamp: number;\n}\n\ninterface EditorTab {\n id: string;\n name: string;\n code: string;\n}\n\n// SelectedUser is now SelectableUser from @rebasepro/core\n\n// ─── Constants ───────────────────────────────────────────────────────\n\nconst STORAGE_PREFIX = \"rebase_js_\";\nconst MAX_HISTORY = 50;\n\nconst DEFAULT_CODE = `// Available: client (RebaseClient)\n// Press Cmd+Enter (Ctrl+Enter) to run\n//\n// Examples:\n// const result = await client.data.collection(\"your_collection\").find({ limit: 10 });\n// const users = await client.admin.listUsers();\n// const session = client.auth.getSession();\n\nconst result = await client.data.collection(\"your_collection\").find({ limit: 10 });\nreturn result;\n`;\n\n// ─── Helpers ─────────────────────────────────────────────────────────\n\nfunction loadFromStorage<T>(key: string, fallback: T): T {\n try {\n const raw = localStorage.getItem(STORAGE_PREFIX + key);\n return raw ? JSON.parse(raw) : fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction saveToStorage<T>(key: string, value: T) {\n try {\n localStorage.setItem(STORAGE_PREFIX + key, JSON.stringify(value));\n } catch { /* quota */ }\n}\n\nfunction formatJSON(value: any): string {\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n}\n\n// ─── Helpers: Collection matching for JS results ────────────────────\n\ninterface MatchedJSCollection {\n collectionSlug: string;\n collection: EntityCollection;\n pkColumn: string;\n}\n\n/**\n * Given the raw SDK result, try to detect which collections are present.\n * JS SDK results typically come back as `{ data: [{ id, values }] }` or plain arrays.\n * The heuristic: if the executed code contains `collection(\"<slug>\")` or `client.data.<slug>`,\n * and the result has rows with an \"id\" column, we match those slugs.\n */\nfunction detectCollectionsInResult(\n code: string,\n resultValue: any,\n collections: EntityCollection[]\n): MatchedJSCollection[] {\n if (!resultValue || !collections?.length) return [];\n\n // Extract collection slugs mentioned in the code\n const mentionedSlugs = new Set<string>();\n\n // Match: collection(\"slug\") or collection('slug')\n const collectionCallRegex = /\\.collection\\([\"']([^\"']+)[\"']\\)/g;\n let m: RegExpExecArray | null;\n while ((m = collectionCallRegex.exec(code)) !== null) {\n mentionedSlugs.add(m[1]);\n }\n\n // Match: client.data.<slug>. (dot-access pattern)\n const dotAccessRegex = /client\\.data\\.([a-zA-Z_][a-zA-Z0-9_]*)\\./g;\n while ((m = dotAccessRegex.exec(code)) !== null) {\n if (![\"collection\", \"find\", \"findById\", \"create\", \"update\", \"delete\"].includes(m[1])) {\n mentionedSlugs.add(m[1]);\n }\n }\n\n if (mentionedSlugs.size === 0) return [];\n\n // Check if result has rows with an \"id\" field\n let rows: any[] = [];\n if (resultValue?.data && Array.isArray(resultValue.data)) {\n rows = resultValue.data;\n } else if (Array.isArray(resultValue)) {\n rows = resultValue;\n }\n\n const hasId = rows.length > 0 && rows.some(r => r?.id != null);\n if (!hasId) return [];\n\n const matched: MatchedJSCollection[] = [];\n for (const slug of mentionedSlugs) {\n const normalised = toSnakeCase(slug);\n const col = collections.find(c => {\n const tableName = (c as any).table || toSnakeCase(c.slug);\n return c.slug === slug || tableName === normalised || toSnakeCase(c.slug) === normalised;\n });\n if (col) {\n matched.push({\n collectionSlug: col.slug,\n collection: col,\n pkColumn: \"id\"\n });\n }\n }\n\n return matched;\n}\n\n// ─── Main Component ─────────────────────────────────────────────────\n\nexport function JSEditor() {\n // Contexts\n const rebaseContext = useRebaseContext();\n const rebaseClient = useRebaseClient();\n const apiConfig = useApiConfig();\n const snackbar = useSnackbarController();\n const collectionRegistry = useStudioCollectionRegistry();\n const sideEntityController = useStudioSideEntityController();\n const { t } = useTranslation();\n\n // User management for the \"Run as\" picker\n const userManagement = rebaseContext.userManagement;\n const currentUser = rebaseContext.authController?.user;\n\n // State\n const [tabs, setTabs] = useState<EditorTab[]>(() =>\n loadFromStorage(\"tabs\", [{ id: \"1\",\nname: \"Script 1\",\ncode: DEFAULT_CODE }])\n );\n const [activeTabId, setActiveTabId] = useState<string>(() =>\n loadFromStorage(\"activeTab\", \"1\")\n );\n const [result, setResult] = useState<ExecutionResult | null>(null);\n const [isRunning, setIsRunning] = useState(false);\n const [snippets, setSnippets] = useState<JSSnippet[]>(() =>\n loadFromStorage(\"snippets\", [])\n );\n const [history, setHistory] = useState<string[]>(() =>\n loadFromStorage(\"history\", [])\n );\n const [showSaveDialog, setShowSaveDialog] = useState(false);\n const [snippetName, setSnippetName] = useState(\"\");\n const [resultView, setResultView] = useState<\"json\" | \"table\" | \"console\">(\"json\");\n\n // \"Run as\" user state — null means \"self\" (current admin)\n const [selectedUser, setSelectedUser] = useState<SelectableUser | null>(null);\n const [authMode, setAuthMode] = useState<\"jwt\" | \"none\">(\"jwt\");\n\n const [sidebarSize, setSidebarSize] = useState<number>(() => {\n try {\n const stored = localStorage.getItem(STORAGE_PREFIX + \"sidebar_size\");\n return stored ? Number(stored) : 18;\n } catch { return 18; }\n });\n const [editorHeight, setEditorHeight] = useState<number>(() => {\n try {\n const stored = localStorage.getItem(STORAGE_PREFIX + \"editor_height\");\n return stored ? Number(stored) : 55;\n } catch { return 55; }\n });\n\n // Derived\n const activeTab = tabs.find(t => t.id === activeTabId) ?? tabs[0];\n\n // Collection info for the sidebar and Monaco\n const collectionInfos = useMemo(() => {\n const collections = collectionRegistry?.collections ?? [];\n return collections.map(col => ({\n slug: col.slug,\n name: col.name,\n properties: Object.keys(col.properties ?? {})\n }));\n }, [collectionRegistry?.collections]);\n\n const collectionSlugs = useMemo(() => collectionInfos.map(c => c.slug), [collectionInfos]);\n\n // Users list for the picker — mapped to SelectableUser shape\n const users = useMemo((): SelectableUser[] => {\n const managed = (userManagement?.users ?? []).map(u => ({\n uid: u.uid,\n displayName: u.displayName,\n email: u.email,\n photoURL: u.photoURL,\n roles: u.roles\n }));\n // Ensure the current user is in the list\n if (currentUser && !managed.some(u => u.uid === currentUser.uid)) {\n managed.unshift({\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n });\n }\n return managed;\n }, [userManagement?.users, currentUser]);\n\n // Current user as SelectableUser for the popover\n const currentSelectableUser = useMemo((): SelectableUser | null => {\n if (!currentUser) return null;\n return {\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n };\n }, [currentUser]);\n\n // ─── Persistence ─────────────────────────────────────────────\n\n useEffect(() => { saveToStorage(\"tabs\", tabs); }, [tabs]);\n useEffect(() => { saveToStorage(\"activeTab\", activeTabId); }, [activeTabId]);\n useEffect(() => { saveToStorage(\"snippets\", snippets); }, [snippets]);\n useEffect(() => { saveToStorage(\"history\", history); }, [history]);\n\n useEffect(() => {\n try { localStorage.setItem(STORAGE_PREFIX + \"sidebar_size\", sidebarSize.toString()); } catch { /* ignore */ }\n }, [sidebarSize]);\n\n useEffect(() => {\n try { localStorage.setItem(STORAGE_PREFIX + \"editor_height\", editorHeight.toString()); } catch { /* ignore */ }\n }, [editorHeight]);\n\n // ─── Tab management ──────────────────────────────────────────\n\n const updateActiveCode = useCallback((code: string | undefined) => {\n setTabs(prev => prev.map(t => t.id === activeTabId ? { ...t,\ncode: code ?? \"\" } : t));\n }, [activeTabId]);\n\n const addTab = useCallback(() => {\n const id = String(Date.now());\n const newTab: EditorTab = { id,\nname: `Script ${tabs.length + 1}`,\ncode: DEFAULT_CODE };\n setTabs(prev => [...prev, newTab]);\n setActiveTabId(id);\n }, [tabs.length]);\n\n const closeTab = useCallback((tabId: string) => {\n setTabs(prev => {\n const filtered = prev.filter(t => t.id !== tabId);\n if (filtered.length === 0) {\n const fresh = { id: String(Date.now()),\nname: \"Script 1\",\ncode: DEFAULT_CODE };\n setActiveTabId(fresh.id);\n return [fresh];\n }\n if (activeTabId === tabId) {\n setActiveTabId(filtered[filtered.length - 1].id);\n }\n return filtered;\n });\n }, [activeTabId]);\n\n // ─── Create an authenticated client for execution ────────────\n\n const buildClient = useCallback(async () => {\n const apiUrl = apiConfig?.apiUrl;\n const getAuthToken = apiConfig?.getAuthToken;\n\n if (!apiUrl) {\n throw new Error(\"API URL not configured. Make sure apiUrl is set.\");\n }\n\n if (authMode === \"none\") {\n const client = createRebaseClient({\n baseUrl: apiUrl,\n token: undefined\n });\n return { client, isScoped: true };\n }\n\n // If not running as another user safely reuse the application's global client.\n if (!selectedUser || (currentUser && selectedUser.uid === currentUser.uid)) {\n if (!rebaseClient) {\n throw new Error(\"Application client is not initialized.\");\n }\n return { client: rebaseClient, isScoped: false };\n }\n\n // Get the current auth token\n let token: string | undefined;\n if (getAuthToken) {\n token = (await getAuthToken()) ?? undefined;\n }\n\n if (!token) {\n throw new Error(\"No auth token available. Please sign in first.\");\n }\n\n // Create a fresh 'scoped' client. This enables us to attach custom auth later for this specific execution\n // without mutating the global client.\n const client = createRebaseClient({\n baseUrl: apiUrl,\n token\n });\n\n return { client,\nisScoped: true };\n }, [apiConfig, rebaseClient, selectedUser, currentUser, authMode]);\n\n // ─── Execution engine ────────────────────────────────────────\n\n const executeCode = useCallback(async (codeOverride?: string) => {\n const code = codeOverride ?? activeTab?.code ?? \"\";\n if (!code.trim()) return;\n\n setIsRunning(true);\n setResult(null);\n\n // Add to history\n setHistory(prev => {\n const deduped = prev.filter(h => h !== code);\n return [...deduped, code].slice(-MAX_HISTORY);\n });\n\n const consoleEntries: ConsoleEntry[] = [];\n const startTime = performance.now();\n let scopedClientToCleanUp: any = null;\n\n // Capture console methods\n const originalConsole = {\n log: console.log,\n warn: console.warn,\n error: console.error,\n info: console.info\n };\n\n const captureConsole = (type: ConsoleEntry[\"type\"]) => (...args: any[]) => {\n consoleEntries.push({ type,\nargs,\ntimestamp: Date.now() });\n originalConsole[type](...args);\n };\n\n try {\n console.log = captureConsole(\"log\");\n console.warn = captureConsole(\"warn\");\n console.error = captureConsole(\"error\");\n console.info = captureConsole(\"info\");\n\n // Build an authenticated client\n const { client, isScoped } = await buildClient();\n if (isScoped) {\n scopedClientToCleanUp = client;\n }\n\n // Build context object with useful info about selected user\n const context = {\n user: selectedUser ?? (currentUser ? {\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n roles: currentUser.roles\n } : null),\n collections: collectionInfos\n };\n\n // Create async function with `client` and `context` injected\n\n const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;\n const fn = new AsyncFunction(\"client\", \"context\", code);\n\n const value = await fn(client, context);\n const duration = performance.now() - startTime;\n\n setResult({\n value,\n console: consoleEntries,\n duration,\n timestamp: Date.now()\n });\n\n // Auto-detect best view\n if (value?.data && Array.isArray(value.data)) {\n setResultView(\"table\");\n } else if (consoleEntries.length > 0 && value === undefined) {\n setResultView(\"console\");\n } else {\n setResultView(\"json\");\n }\n } catch (err: any) {\n const duration = performance.now() - startTime;\n setResult({\n value: undefined,\n console: consoleEntries,\n duration,\n error: err?.message || String(err),\n timestamp: Date.now()\n });\n setResultView(\"json\");\n } finally {\n console.log = originalConsole.log;\n console.warn = originalConsole.warn;\n console.error = originalConsole.error;\n console.info = originalConsole.info;\n setIsRunning(false);\n\n if (scopedClientToCleanUp) {\n // Ensure we disconnect WebSockets to prevent leaking connections\n scopedClientToCleanUp.ws?.disconnect();\n }\n }\n }, [activeTab?.code, buildClient, selectedUser, currentUser, collectionInfos]);\n\n // ─── Snippet management ──────────────────────────────────────\n\n const saveSnippet = useCallback(() => {\n if (!snippetName.trim() || !activeTab?.code.trim()) return;\n const snippet: JSSnippet = {\n id: String(Date.now()),\n name: snippetName.trim(),\n code: activeTab.code,\n createdAt: Date.now()\n };\n setSnippets(prev => [snippet, ...prev]);\n setShowSaveDialog(false);\n setSnippetName(\"\");\n snackbar.open({ type: \"success\",\nmessage: \"Snippet saved\" });\n }, [snippetName, activeTab?.code, snackbar]);\n\n const deleteSnippet = useCallback((id: string) => {\n setSnippets(prev => prev.filter(s => s.id !== id));\n }, []);\n\n // ─── Export ──────────────────────────────────────────────────\n\n const exportResult = useCallback(() => {\n if (!result?.value) return;\n const blob = new Blob([formatJSON(result.value)], { type: \"application/json\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `rebase-result-${Date.now()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }, [result]);\n\n // ─── Table columns for array data ────────────────────────────\n\n const tableData = useMemo(() => {\n if (!result?.value) return { columns: [] as VirtualTableColumn[],\ndata: [] as Record<string, unknown>[] };\n\n let rows: any[] = [];\n if (result.value?.data && Array.isArray(result.value.data)) {\n rows = result.value.data.map((entity: any) => ({\n id: entity.id,\n ...entity.values,\n ...(entity.values ? {} : entity)\n }));\n } else if (Array.isArray(result.value)) {\n rows = result.value;\n }\n\n if (rows.length === 0) return { columns: [] as VirtualTableColumn[],\ndata: [] as Record<string, unknown>[] };\n\n const keys = new Set<string>();\n rows.slice(0, 20).forEach(row => {\n if (row && typeof row === \"object\") {\n Object.keys(row).forEach(k => keys.add(k));\n }\n });\n\n const columns: VirtualTableColumn[] = Array.from(keys).map(key => ({\n key,\n title: key,\n width: key === \"id\" ? 100 : 200\n }));\n\n return { columns,\ndata: rows };\n }, [result]);\n\n // ─── Matched collections for entity actions ──────────────────\n\n const matchedCollections = useMemo(() => {\n if (!result?.value || result.error) return [];\n return detectCollectionsInResult(\n activeTab?.code ?? \"\",\n result.value,\n collectionRegistry?.collections ?? []\n );\n }, [result, activeTab?.code, collectionRegistry?.collections]);\n\n const getRowEntityActions = useCallback((rowData: any): { collection: MatchedJSCollection; entityId: string | number }[] => {\n if (!rowData || matchedCollections.length === 0) return [];\n return matchedCollections\n .filter(mc => rowData[mc.pkColumn] != null)\n .map(mc => ({\n collection: mc,\n entityId: rowData[mc.pkColumn]\n }));\n }, [matchedCollections]);\n\n // ─── Export handlers ─────────────────────────────────────────\n\n const handleExportCSV = useCallback(() => {\n if (tableData.data.length === 0) return;\n const headers = tableData.columns.map(c => c.key).join(\",\");\n const rows = tableData.data.map(row =>\n tableData.columns.map(c => {\n const val = row[c.key];\n const str = val === null || val === undefined ? \"\" : String(val);\n return str.includes(\",\") ? `\"${str}\"` : str;\n }).join(\",\")\n );\n const csv = [headers, ...rows].join(\"\\n\");\n const blob = new Blob([csv], { type: \"text/csv\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `js_results_${new Date().toISOString().slice(0, 19)}.csv`;\n a.click();\n URL.revokeObjectURL(url);\n }, [tableData]);\n\n const handleExportMarkdown = useCallback(() => {\n if (tableData.data.length === 0) return;\n const headers = tableData.columns.map(c => c.key);\n const headerRow = `| ${headers.join(\" | \")} |`;\n const dividerRow = `| ${headers.map(() => \"---\").join(\" | \")} |`;\n const dataRows = tableData.data.map(row =>\n `| ${headers.map(h => {\n const val = row[h];\n if (val === null || val === undefined) return \"\";\n return String(val).replace(/\\|/g, \"\\\\|\").replace(/\\n/g, \" \");\n }).join(\" | \")} |`\n );\n const markdown = [headerRow, dividerRow, ...dataRows].join(\"\\n\");\n navigator.clipboard.writeText(markdown).then(() => {\n snackbar.open({ type: \"success\",\nmessage: t(\"studio_sql_markdown_copied\") });\n }).catch(() => {\n snackbar.open({ type: \"error\",\nmessage: t(\"studio_sql_markdown_copy_failed\") });\n });\n }, [tableData, snackbar, t]);\n\n // ─── Render ──────────────────────────────────────────────────\n\n return (\n <div className=\"flex flex-col h-full w-full\">\n {/* Main content */}\n <div className=\"flex-grow overflow-hidden\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={200}\n firstPanel={\n <JSEditorSidebar\n collections={collectionInfos}\n snippets={snippets}\n history={history}\n onSelectSnippet={(code) => updateActiveCode(code)}\n onDeleteSnippet={deleteSnippet}\n onInsertCode={(code) => updateActiveCode(code)}\n />\n }\n secondPanel={\n <div className=\"flex flex-col h-full overflow-hidden\">\n {/* Toolbar: matching SQL Editor layout */}\n <div className={cls(\"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950\", defaultBorderMixin)}>\n <div className=\"flex items-center flex-grow overflow-hidden mr-4\">\n <div className=\"flex items-center no-scrollbar overflow-x-auto min-w-0\">\n <Tabs value={activeTabId} onValueChange={setActiveTabId} variant=\"boxy\" className=\"w-[unset] flex-shrink-0\" innerClassName=\"bg-white dark:bg-surface-950\">\n {tabs.map(tab => (\n <Tab key={tab.id} value={tab.id} className=\"flex items-center justify-between group max-w-[200px]\">\n <TerminalIcon size={iconSize.smallest} className=\"text-amber-500 mr-1.5 flex-shrink-0\"/>\n <span className=\"truncate\">{tab.name}</span>\n {tabs.length > 1 && (\n <IconButton\n size=\"smallest\"\n onClick={(e) => { e.stopPropagation(); closeTab(tab.id); }}\n className=\"ml-1 !p-0.5 opacity-0 group-hover:opacity-100 hover:text-red-500 transition-opacity\"\n >\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n )}\n </Tab>\n ))}\n </Tabs>\n <IconButton\n size=\"small\"\n onClick={addTab}\n className=\"ml-2 flex-shrink-0\"\n >\n <PlusIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n </div>\n <div className=\"flex shrink-0 items-center justify-end gap-1.5\">\n <Tooltip title=\"SaveIcon as snippet\">\n <IconButton\n size=\"small\"\n onClick={() => {\n setSnippetName(\"\");\n setShowSaveDialog(true);\n }}\n disabled={!activeTab?.code.trim()}\n >\n <SaveIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n\n {result?.value && (\n <Tooltip title=\"Export result as JSON\">\n <IconButton size=\"small\" onClick={exportResult}>\n <DownloadIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n )}\n\n <Button\n size=\"small\"\n color=\"primary\"\n disabled={isRunning || !activeTab?.code.trim()}\n onClick={() => executeCode()}\n >\n {isRunning ? <CircularProgress size=\"smallest\" className=\"mr-2\"/> : <PlayIcon size={iconSize.smallest} className=\"mr-2\"/>}\n Run\n </Button>\n </div>\n </div>\n\n {/* Editor + Results split */}\n <div className=\"flex-grow overflow-hidden\">\n <ResizablePanels\n orientation=\"vertical\"\n panelSizePercent={editorHeight}\n onPanelSizeChange={setEditorHeight}\n minPanelSizePx={100}\n firstPanel={\n <div className=\"h-full w-full overflow-hidden flex flex-col\">\n {/* Auth Simulation UI */}\n <div className=\"p-2 px-3 border-b border-surface-200 dark:border-surface-950 bg-surface-50 dark:bg-surface-900 flex items-center shrink-0\">\n <AuthSimulationSelector\n authMode={authMode}\n setAuthMode={setAuthMode}\n selectedUser={selectedUser}\n setSelectedUser={setSelectedUser}\n users={users}\n loading={userManagement?.loading}\n currentUser={currentSelectableUser}\n />\n </div>\n <div className=\"flex-1 min-h-0\">\n <JSMonacoEditor\n value={activeTab?.code ?? \"\"}\n onChange={updateActiveCode}\n onRun={(selectedText) => executeCode(selectedText)}\n collectionSlugs={collectionSlugs}\n collections={collectionInfos}\n autoFocus\n />\n </div>\n </div>\n }\n secondPanel={\n <div className=\"h-full w-full flex flex-col bg-surface-50 dark:bg-surface-950 overflow-hidden min-h-0\">\n {/* Result header — matches SQL editor */}\n <div className={cls(\"p-2 px-4 bg-surface-100 dark:bg-surface-900 border-b shrink-0 flex items-center\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold text-text-disabled dark:text-text-disabled-dark uppercase tracking-widest text-[10px]\">\n {t(\"studio_sql_query_results\")}\n </Typography>\n\n {result && (\n <>\n <div className=\"flex-grow\"/>\n\n <Tabs value={resultView} onValueChange={(val) => setResultView(val as \"json\" | \"table\" | \"console\")} variant=\"pill\" className=\"w-[unset] mr-2\">\n <Tab value=\"json\">JSON</Tab>\n {tableData.data.length > 0 && <Tab value=\"table\">Table</Tab>}\n {result.console.length > 0 && <Tab value=\"console\">Console ({result.console.length})</Tab>}\n </Tabs>\n\n <Chip size=\"smallest\" colorScheme={result.error ? \"redDarker\" : \"greenDarker\"}>\n {result.error ? \"Error\" : `${result.duration.toFixed(0)}ms`}\n </Chip>\n </>\n )}\n </div>\n\n {/* Result content */}\n <div className=\"flex-grow flex flex-col min-h-0 overflow-hidden\">\n {isRunning && (\n <div className=\"flex-grow flex items-center justify-center\">\n <div className=\"text-center\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"mt-4 text-text-secondary dark:text-text-secondary-dark font-mono tracking-tight animate-pulse\">\n EXECUTING SCRIPT...\n </Typography>\n </div>\n </div>\n )}\n\n {!isRunning && !result && (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled dark:text-text-disabled-dark\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-4 opacity-50\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1} d=\"M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\"/></svg>\n <Typography variant=\"body2\">Write JavaScript and press <kbd className=\"px-1.5 py-0.5 rounded bg-surface-200 dark:bg-surface-700 text-[11px] font-mono\">⌘ Enter</kbd> to run</Typography>\n </div>\n </div>\n )}\n\n {!isRunning && result?.error && (\n <div className=\"flex-grow flex items-center justify-center p-6 overflow-auto\">\n <ErrorView\n title=\"Execution Error\"\n error={result.error}\n />\n </div>\n )}\n\n {!isRunning && result && !result.error && resultView === \"json\" && (\n <pre className=\"flex-grow overflow-auto p-4 text-[13px] font-mono leading-relaxed text-text-primary dark:text-text-primary-dark whitespace-pre-wrap break-words\">\n {result.value === undefined ? (\n <span className=\"text-text-disabled italic\">undefined (no return value)</span>\n ) : (\n <JSONHighlight value={result.value}/>\n )}\n </pre>\n )}\n\n {!isRunning && result && !result.error && resultView === \"table\" && tableData.data.length > 0 && (\n <div className=\"flex-grow flex flex-col overflow-hidden min-h-0\">\n {/* Collection badges bar — matching SQL editor */}\n {matchedCollections.length > 0 && (\n <div className={cls(\"px-4 py-1.5 border-b flex items-center gap-2 shrink-0 bg-surface-50 dark:bg-surface-900\", defaultBorderMixin)}>\n <Tooltip title={t(\"studio_sql_cms_collections_tooltip\")}>\n <Typography variant=\"caption\" className=\"text-[10px] font-bold uppercase tracking-widest text-text-disabled dark:text-text-disabled-dark mr-1 shrink-0 cursor-help\">{t(\"studio_sql_cms\")}</Typography>\n </Tooltip>\n <div className=\"flex items-center gap-1.5 overflow-x-auto no-scrollbar\">\n {matchedCollections.map(mc => (\n <Tooltip key={mc.collectionSlug} title={`${mc.collection.name} (${mc.collectionSlug})`}>\n <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium bg-primary/10 dark:bg-primary-dark/15 text-primary dark:text-primary-dark whitespace-nowrap border border-primary/20 dark:border-primary-dark/20\">\n {typeof mc.collection.icon === \"string\" && (\n <IconForView collectionOrView={{ icon: mc.collection.icon } as never} className=\"text-[12px]\"/>\n )}\n {mc.collection.name}\n </span>\n </Tooltip>\n ))}\n </div>\n </div>\n )}\n <div className=\"flex-grow relative h-full min-h-0 min-w-0\">\n <VirtualTable\n data={tableData.data}\n columns={\n matchedCollections.length > 0\n ? [{ key: \"__entity_action__\",\ntitle: \"\",\nwidth: 36,\nsortable: false,\nresizable: false }, ...tableData.columns]\n : tableData.columns\n }\n rowHeight={32}\n headerHeight={32}\n cellRenderer={({ rowData, column, rowIndex }: CellRendererParams<Record<string, unknown>>) => {\n // Entity action column\n if (column.key === \"__entity_action__\") {\n const rowActions = getRowEntityActions(rowData);\n if (rowActions.length === 0) return <div className=\"h-full w-full\"/>;\n if (rowActions.length === 1) {\n const ra = rowActions[0];\n return (\n <div className=\"h-full flex items-center justify-center\">\n <Tooltip title={t(\"studio_sql_edit_entity\", { name: ra.collection.collection.name,\nid: String(ra.entityId) })}>\n <IconButton\n size=\"small\"\n className=\"text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300\"\n onClick={(e) => {\n e.stopPropagation();\n sideEntityController.open({\n path: ra.collection.collectionSlug,\n entityId: ra.entityId,\n collection: ra.collection.collection,\n updateUrl: false\n });\n }}\n >\n <PencilIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n </div>\n );\n }\n // Multiple matched collections\n return (\n <div className=\"h-full flex items-center justify-center\">\n <Menu\n trigger={\n <IconButton\n size={\"small\"}\n className=\"text-surface-400 dark:text-surface-500 hover:text-surface-600 dark:hover:text-surface-300\"\n onClick={(e) => e.stopPropagation()}\n >\n <MoreVerticalIcon size={iconSize.smallest}/>\n </IconButton>\n }\n >\n {rowActions.map(ra => (\n <MenuItem\n key={ra.collection.collectionSlug}\n dense\n onClick={() => {\n sideEntityController.open({\n path: ra.collection.collectionSlug,\n entityId: ra.entityId,\n collection: ra.collection.collection,\n updateUrl: false\n });\n }}\n >\n {t(\"studio_sql_edit_entity\", { name: ra.collection.collection.name,\nid: String(ra.entityId) })}\n </MenuItem>\n ))}\n </Menu>\n </div>\n );\n }\n\n // Regular data cell\n if (!rowData) return null;\n const val = rowData[column.key];\n const displayValue = typeof val === \"object\" && val !== null ? JSON.stringify(val) : String(val ?? \"\");\n return (\n <div className=\"px-4 py-1.5 h-full flex items-center whitespace-nowrap text-[13px] text-text-primary dark:text-text-primary-dark font-mono\">\n <div className=\"truncate flex-grow\" title={displayValue}>\n {displayValue === \"\" ? <span className=\"text-text-disabled dark:text-text-disabled-dark italic text-[11px]\">NULL</span> : displayValue}\n </div>\n </div>\n );\n }}\n />\n </div>\n </div>\n )}\n\n {!isRunning && result && resultView === \"console\" && (\n <div className=\"flex-grow overflow-auto p-2 space-y-1 font-mono text-[12px]\">\n {result.console.length === 0 ? (\n <Typography variant=\"caption\" className=\"text-text-disabled p-2\">No console output</Typography>\n ) : (\n result.console.map((entry, i) => (\n <div\n key={i}\n className={cls(\n \"px-2 py-1 rounded flex items-start gap-2\",\n entry.type === \"error\" && \"bg-red-50 dark:bg-red-950/30 text-red-700 dark:text-red-400\",\n entry.type === \"warn\" && \"bg-amber-50 dark:bg-amber-950/30 text-amber-700 dark:text-amber-400\",\n entry.type === \"log\" && \"text-text-primary dark:text-text-primary-dark\",\n entry.type === \"info\" && \"text-blue-700 dark:text-blue-400\"\n )}\n >\n <span className=\"text-[10px] opacity-50 flex-shrink-0 mt-0.5\">\n {entry.type === \"error\" ? \"❌\" : entry.type === \"warn\" ? \"⚠️\" : entry.type === \"info\" ? \"ℹ️\" : \"›\"}\n </span>\n <span className=\"whitespace-pre-wrap break-words\">\n {entry.args.map(a => typeof a === \"object\" ? JSON.stringify(a, null, 2) : String(a)).join(\" \")}\n </span>\n </div>\n ))\n )}\n\n {result.value !== undefined && (\n <div className={cls(\"px-2 py-1 mt-2 border-t pt-2\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-disabled text-[10px] uppercase tracking-wider mb-1 block\">Return Value</Typography>\n <pre className=\"text-text-primary dark:text-text-primary-dark whitespace-pre-wrap break-words text-[12px]\">\n {formatJSON(result.value)}\n </pre>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* Footer bar — matching SQL editor */}\n {!isRunning && result && !result.error && resultView === \"table\" && tableData.data.length > 0 && (\n <div className={cls(\"p-2 px-4 border-t bg-surface-50 dark:bg-surface-900 flex justify-between items-center shrink-0\", defaultBorderMixin)}>\n <div className=\"flex space-x-4\">\n <div className=\"flex items-center text-[11px]\">\n <span className=\"font-bold text-text-disabled dark:text-text-disabled-dark mr-2 uppercase tracking-tighter\">{t(\"studio_sql_rows\")}</span>\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">{tableData.data.length}</span>\n </div>\n <div className=\"flex items-center text-[11px]\">\n <span className=\"font-bold text-text-disabled dark:text-text-disabled-dark mr-2 uppercase tracking-tighter\">{t(\"studio_sql_time\")}</span>\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">{result.duration.toFixed(0)}ms</span>\n </div>\n </div>\n <div className=\"flex gap-2 overflow-x-auto no-scrollbar items-center px-2\">\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={handleExportMarkdown}\n >\n {t(\"studio_sql_copy_markdown\")}\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={exportResult}\n >\n {t(\"studio_sql_export_json\")}\n </Button>\n <Button\n size=\"small\"\n variant=\"text\"\n className=\"text-[10px] uppercase font-bold text-text-secondary dark:text-text-secondary-dark whitespace-nowrap\"\n onClick={handleExportCSV}\n >\n {t(\"studio_sql_export_csv\")}\n </Button>\n </div>\n </div>\n )}\n </div>\n }\n />\n </div>\n </div>\n }\n />\n </div>\n\n {/* SaveIcon snippet dialog */}\n <Dialog open={showSaveDialog} onOpenChange={setShowSaveDialog}>\n <DialogTitle>SaveIcon Snippet</DialogTitle>\n <DialogContent>\n <TextField\n label=\"Snippet name\"\n value={snippetName}\n onChange={(e) => setSnippetName(e.target.value)}\n placeholder=\"e.g. List all products\"\n autoFocus\n onKeyDown={(e) => {\n if (e.key === \"Enter\") saveSnippet();\n }}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={() => setShowSaveDialog(false)}>Cancel</Button>\n <Button variant=\"filled\" color=\"primary\" onClick={saveSnippet} disabled={!snippetName.trim()}>Save</Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n}\n\n// ─── JSON Syntax Highlighting ────────────────────────────────────────\n\nfunction JSONHighlight({ value }: { value: any }) {\n const json = formatJSON(value);\n const { mode } = useModeController();\n\n return (\n <Highlight\n theme={mode === \"dark\" ? themes.vsDark : themes.github}\n code={json}\n language=\"json\"\n >\n {({ style, tokens, getLineProps, getTokenProps }) => (\n <span style={{ ...style,\nbackgroundColor: \"transparent\" }}>\n {tokens.map((line, i) => (\n <div key={i} {...getLineProps({ line })}>\n {line.map((token, key) => (\n <span key={key} {...getTokenProps({ token })}/>\n ))}\n </div>\n ))}\n </span>\n )}\n </Highlight>\n );\n}\n","\nimport React, { useState, useEffect } from \"react\";\nimport { Button, Paper, Typography, TextField, Select, SelectItem, MultiSelect, MultiSelectItem, cls, defaultBorderMixin, IconButton, Dialog, DialogTitle, DialogContent, DialogActions , iconSize } from \"@rebasepro/ui\";\nimport { HelpCircleIcon } from \"lucide-react\";\nimport { useTranslation } from \"@rebasepro/core\";\nimport { MonacoEditor } from \"../SQLEditor/MonacoEditor\";\nimport { PostgresPolicy } from \"./RLSEditor\";\n\nexport interface PolicyEditorProps {\n policy?: PostgresPolicy;\n schema: string;\n table: string;\n onSave: (policyData: Partial<PostgresPolicy>) => void;\n onCancel: () => void;\n}\n\ntype PolicyCommand = \"ALL\" | \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\";\nconst COMMAND_OPTIONS: PolicyCommand[] = [\"ALL\", \"SELECT\", \"INSERT\", \"UPDATE\", \"DELETE\"];\nconst ROLE_OPTIONS = [\"public\", \"authenticated\", \"anon\", \"admin\"];\n\ninterface PolicyPreset {\n id: string;\n label: string;\n description: string;\n policyname: string;\n cmd: PolicyCommand;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n qual: string;\n with_check: string;\n}\n\nconst POLICY_PRESETS: PolicyPreset[] = [\n {\n id: \"public_read\",\n label: \"Enable read access to everyone\",\n description: \"Anyone can read data, regardless of authentication status.\",\n policyname: \"Enable read access for all users\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"public\"],\n qual: \"true\",\n with_check: \"\"\n },\n {\n id: \"auth_read\",\n label: \"Enable read access for authenticated users only\",\n description: \"Only logged-in users are allowed to read data.\",\n policyname: \"Enable read access for authenticated users\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"true\",\n with_check: \"\"\n },\n {\n id: \"auth_insert\",\n label: \"Enable insert for authenticated users only\",\n description: \"Only logged-in users are allowed to insert new data.\",\n policyname: \"Enable insert for authenticated users only\",\n cmd: \"INSERT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"\",\n with_check: \"true\"\n },\n {\n id: \"user_select_own\",\n label: \"Users can read their own rows\",\n description: \"Users can only read rows where the user_id matches their auth.uid()\",\n policyname: \"Users can select their own data\",\n cmd: \"SELECT\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"\"\n },\n {\n id: \"user_update_own\",\n label: \"Users can update their own rows\",\n description: \"Users can only update rows where the user_id matches their auth.uid()\",\n policyname: \"Users can update their own data\",\n cmd: \"UPDATE\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"auth.uid() = user_id\"\n },\n {\n id: \"user_delete_own\",\n label: \"Users can delete their own rows\",\n description: \"Users can only delete rows where the user_id matches their auth.uid()\",\n policyname: \"Users can delete their own data\",\n cmd: \"DELETE\",\n permissive: \"PERMISSIVE\",\n roles: [\"authenticated\"],\n qual: \"auth.uid() = user_id\",\n with_check: \"\"\n }\n];\n\nexport const PolicyEditor = ({\n policy,\n schema,\n table,\n onSave,\n onCancel\n}: PolicyEditorProps) => {\n\n const { t } = useTranslation();\n const [name, setName] = useState(\"\");\n const [helpOpen, setHelpOpen] = useState(false);\n const [behavior, setBehavior] = useState<\"PERMISSIVE\" | \"RESTRICTIVE\">(\"PERMISSIVE\");\n const [command, setCommand] = useState<PolicyCommand>(\"ALL\");\n const [roles, setRoles] = useState<string[]>([\"public\"]);\n const [usingExpr, setUsingExpr] = useState<string>(\"\");\n const [checkExpr, setCheckExpr] = useState<string>(\"\");\n\n const [selectedPreset, setSelectedPreset] = useState<string>(\"\");\n\n useEffect(() => {\n if (policy) {\n setName(policy.policyname || \"\");\n setBehavior(policy.permissive || \"PERMISSIVE\");\n setCommand((policy.cmd as PolicyCommand) || \"ALL\");\n\n const initialRoles = policy.roles\n ? (Array.isArray(policy.roles) ? policy.roles : [policy.roles])\n : [\"public\"];\n setRoles(initialRoles as string[]);\n\n setUsingExpr(policy.qual || \"\");\n setCheckExpr(policy.with_check || \"\");\n } else {\n setName(\"\");\n setBehavior(\"PERMISSIVE\");\n setCommand(\"ALL\");\n setRoles([\"public\"]);\n setUsingExpr(\"\");\n setCheckExpr(\"\");\n setSelectedPreset(\"\");\n }\n }, [policy]);\n\n const handlePresetChange = (presetId: string) => {\n const preset = POLICY_PRESETS.find(p => p.id === presetId);\n if (!preset) return;\n\n setSelectedPreset(presetId);\n setName(preset.policyname);\n setBehavior(preset.permissive);\n setCommand(preset.cmd);\n setRoles(preset.roles);\n setUsingExpr(preset.qual);\n setCheckExpr(preset.with_check);\n };\n\n const showCheck = command === \"ALL\" || command === \"INSERT\" || command === \"UPDATE\";\n\n const handleSave = () => {\n onSave({\n policyname: name,\n permissive: behavior,\n cmd: command,\n roles: roles,\n qual: usingExpr,\n with_check: showCheck ? checkExpr : null\n });\n };\n\n return (\n <>\n <DialogTitle className=\"flex justify-between items-center w-full\" variant=\"h6\">\n <div>\n <div>{policy ? t(\"studio_policy_edit\") : t(\"studio_policy_create\")}</div>\n <div className=\"text-sm font-normal text-text-secondary dark:text-text-secondary-dark tracking-wide mt-1\">\n {t(\"studio_policy_defining_rules\")} <span className=\"font-mono text-primary bg-primary-bg dark:bg-primary-bg-dark px-1 py-0.5 rounded\">{schema}.{table}</span>\n </div>\n </div>\n <IconButton size=\"small\" onClick={() => setHelpOpen(true)}>\n <HelpCircleIcon size={iconSize.smallest}/>\n </IconButton>\n </DialogTitle>\n\n <DialogContent className=\"p-4 md:p-6 border-t dark:border-surface-950 bg-surface-50 dark:bg-surface-950\" includeMargin={false}>\n <div className=\"max-w-4xl mx-auto\">\n <Paper className={cls(\"p-4 md:p-6 flex flex-col gap-6 bg-white dark:bg-surface-900 border-none sm:border-solid rounded-none sm:rounded-xl\", defaultBorderMixin)}>\n\n {/* Presets - only for new policies */}\n {!policy && (\n <div className=\"flex flex-col gap-1.5 bg-primary/5 dark:bg-primary-bg-dark/20 p-3 sm:p-4 rounded-lg border border-primary/10 dark:border-primary/20\">\n <Typography variant=\"caption\" className=\"text-primary dark:text-primary-light uppercase tracking-wider\">{t(\"studio_policy_template\")}</Typography>\n <Select\n size=\"small\"\n value={selectedPreset}\n onValueChange={handlePresetChange}\n position=\"item-aligned\"\n placeholder={t(\"studio_policy_select_template\")}\n className=\"bg-white dark:bg-surface-950\"\n >\n {POLICY_PRESETS.map((preset) => (\n <SelectItem key={preset.id} value={preset.id}>\n <div className=\"flex flex-col text-left\">\n <span className=\"text-sm\">{preset.label}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{preset.description}</span>\n </div>\n </SelectItem>\n ))}\n </Select>\n </div>\n )}\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4 sm:gap-6\">\n {/* Policy Name */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_name\")}</Typography>\n <TextField\n // @ts-ignore\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t(\"studio_policy_name_placeholder\")}\n className=\"w-full\"\n />\n </div>\n\n {/* Behavior */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_behavior\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">AS</code>\n </Typography>\n <Select\n value={behavior}\n onValueChange={(val) => setBehavior(val as \"PERMISSIVE\" | \"RESTRICTIVE\")}\n position=\"item-aligned\"\n >\n <SelectItem value=\"PERMISSIVE\">\n <div className=\"flex flex-col text-left\">\n <span className=\"\">{t(\"studio_policy_permissive\")}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{t(\"studio_policy_permissive_desc\")}</span>\n </div>\n </SelectItem>\n <SelectItem value=\"RESTRICTIVE\">\n <div className=\"flex flex-col text-left\">\n <span className=\"\">{t(\"studio_policy_restrictive\")}</span>\n <span className=\"text-xs text-text-secondary dark:text-text-secondary-dark\">{t(\"studio_policy_restrictive_desc\")}</span>\n </div>\n </SelectItem>\n </Select>\n </div>\n </div>\n\n {/* Command */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_command\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">FOR</code>\n </Typography>\n <div className=\"flex flex-wrap gap-1.5\">\n {COMMAND_OPTIONS.map(cmd => (\n <Button\n key={cmd}\n size=\"small\"\n variant={command === cmd ? \"filled\" : \"text\"}\n color=\"neutral\"\n onClick={() => setCommand(cmd)}\n className=\"min-w-[80px]\"\n >\n {cmd}\n </Button>\n ))}\n </div>\n </div>\n\n {/* Roles */}\n <div className=\"flex flex-col gap-1.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">\n {t(\"studio_policy_target_roles\")} <code className=\"text-[10px] bg-surface-200 dark:bg-surface-950 text-text-secondary dark:text-text-secondary-dark px-1 py-0.5 rounded ml-1\">TO</code>\n </Typography>\n <MultiSelect\n size=\"small\"\n value={roles}\n onValueChange={setRoles}\n placeholder={t(\"studio_policy_roles_placeholder\")}\n >\n {ROLE_OPTIONS.map(role => (\n <MultiSelectItem key={role} value={role}>\n {role}\n </MultiSelectItem>\n ))}\n </MultiSelect>\n </div>\n\n </Paper>\n\n <div className=\"mt-8 flex flex-col gap-4\">\n {/* USING Expression */}\n {command !== \"INSERT\" && (\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex flex-col gap-0.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_using_expr\")}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary opacity-70\">{t(\"studio_policy_using_expr_desc\")}</Typography>\n </div>\n <div className={cls(\"h-32 border rounded-md overflow-hidden bg-white dark:bg-[#1e1e1e]\", defaultBorderMixin)}>\n <MonacoEditor\n value={usingExpr}\n onChange={(v) => setUsingExpr(v || \"\")}\n readOnly={false}\n autoFocus={true}\n />\n </div>\n </div>\n )}\n\n {/* WITH CHECK Expression */}\n {showCheck && (\n <div className=\"flex flex-col gap-1.5 mt-2\">\n <div className=\"flex flex-col gap-0.5\">\n <Typography variant=\"caption\" className=\"uppercase tracking-wider text-text-secondary\">{t(\"studio_policy_check_expr\")}</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary opacity-70\">{t(\"studio_policy_check_expr_desc\")}</Typography>\n </div>\n <div className={cls(\"h-32 border rounded-md overflow-hidden bg-white dark:bg-[#1e1e1e]\", defaultBorderMixin)}>\n <MonacoEditor\n value={checkExpr}\n onChange={(v) => setCheckExpr(v || \"\")}\n readOnly={false}\n autoFocus={command === \"INSERT\"}\n />\n </div>\n </div>\n )}\n </div>\n\n </div>\n </DialogContent>\n\n <DialogActions>\n <Button size=\"small\" variant=\"text\" color=\"neutral\" onClick={onCancel}>\n {t(\"studio_policy_cancel\")}\n </Button>\n <Button size=\"small\" variant=\"filled\" color=\"primary\" onClick={handleSave} disabled={!name}>\n {t(\"studio_policy_save\")}\n </Button>\n </DialogActions>\n\n <Dialog open={helpOpen} onOpenChange={setHelpOpen} maxWidth=\"3xl\">\n <DialogContent className=\"p-4 sm:p-6 lg:p-8 flex flex-col gap-6\">\n <div>\n <Typography variant=\"h5\" className=\"mb-2\">{t(\"studio_policy_help_title\")}</Typography>\n <Typography className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_intro\")}\n </Typography>\n </div>\n\n <div className=\"flex flex-col gap-4\">\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step1_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step1_desc\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step2_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step2_desc\")}\n </Typography>\n <ul className=\"list-disc pl-5 space-y-1 text-sm text-text-secondary dark:text-text-secondary-dark\">\n <li><strong>public</strong>: {t(\"studio_policy_help_role_public\")}</li>\n <li><strong>authenticated</strong>: {t(\"studio_policy_help_role_authenticated\")}</li>\n <li><strong>anon</strong>: {t(\"studio_policy_help_role_anon\")}</li>\n </ul>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step3_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step3_desc\")}\n </Typography>\n <div className={cls(\"bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2\", defaultBorderMixin)}>\n Example: auth.uid() = user_id\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step3_example\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-1\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_step4_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark mb-1\">\n {t(\"studio_policy_help_step4_desc\")}\n </Typography>\n <div className={cls(\"bg-surface-100 dark:bg-surface-950 px-3 py-2 rounded-md font-mono text-sm my-2\", defaultBorderMixin)}>\n Example: auth.uid() = user_id\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_step4_example\")}\n </Typography>\n </Paper>\n\n <Paper className={cls(\"p-4 sm:p-5 flex flex-col gap-2 bg-primary/5 dark:bg-primary-bg-dark/10\", defaultBorderMixin)}>\n <Typography variant=\"subtitle2\" className=\"text-primary dark:text-primary-light font-medium\">{t(\"studio_policy_help_auth_vars_title\")}</Typography>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {t(\"studio_policy_help_auth_vars_desc\")}\n </Typography>\n <ul className=\"list-disc pl-5 space-y-2 text-sm text-text-secondary dark:text-text-secondary-dark font-normal\">\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.uid()</code>\n <span className=\"block mt-0.5\">Returns the current user's ID as text. Example: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">auth.uid() = user_id</code></span>\n </li>\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.jwt()</code>\n <span className=\"block mt-0.5\">Returns the full JWT payload as JSONB so you can check custom claims. Example: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">auth.jwt() ->> 'email' = 'admin@example.com'</code></span>\n </li>\n <li>\n <code className=\"bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded mr-1 whitespace-nowrap\">auth.roles()</code>\n <span className=\"block mt-0.5\">Returns the user's role IDs as a comma-separated string. Best used with: <code className=\"bg-surface-100 dark:bg-surface-950 px-1 py-0.5 rounded text-[11px]\">string_to_array(auth.roles(), ',') @> ARRAY['admin']</code></span>\n </li>\n </ul>\n </Paper>\n </div>\n\n <div className={cls(\"mt-2 flex flex-col sm:flex-row justify-between items-start sm:items-center bg-primary/5 dark:bg-primary-bg-dark/10 p-4 rounded-xl border border-primary/10 dark:border-primary/20\", defaultBorderMixin)}>\n <Typography variant=\"body2\" className=\"text-primary dark:text-primary-light mb-4 sm:mb-0 max-w-md\">\n {t(\"studio_policy_help_docs_cta\")}\n </Typography>\n <Button\n component=\"a\"\n href=\"https://www.postgresql.org/docs/current/sql-createpolicy.html\"\n target=\"_blank\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n className=\"whitespace-nowrap flex-shrink-0\"\n >\n {t(\"studio_policy_help_read_docs\")}\n </Button>\n </div>\n </DialogContent>\n <DialogActions className=\"p-4 sm:px-6 sm:pb-6 pt-0 border-t-0\">\n <Button onClick={() => setHelpOpen(false)} variant=\"filled\" color=\"primary\">{t(\"studio_policy_help_got_it\")}</Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n","\nimport { useStudioCollectionRegistry } from \"@rebasepro/core\";\nimport React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { Paper, Typography, CircularProgress, cls, Alert, defaultBorderMixin, Card, Chip, Button, Tooltip, ResizablePanels, IconButton, Tabs, Tab , iconSize } from \"@rebasepro/ui\";\nimport { ShieldIcon, RefreshCwIcon, AlertTriangleIcon, KeyIcon, Trash2Icon } from \"lucide-react\";\nimport { useRebaseContext, useSnackbarController, ErrorView, useTranslation } from \"@rebasepro/core\";\nimport { isPostgresCollection } from \"@rebasepro/types\";\nimport { PolicyEditor } from \"./PolicyEditor\";\n\nexport interface PostgresPolicy {\n policyname: string;\n tablename: string;\n permissive: \"PERMISSIVE\" | \"RESTRICTIVE\";\n roles: string[];\n cmd: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\";\n qual: string | null; // USING clause\n with_check: string | null; // WITH CHECK clause\n status?: \"live\" | \"code_only\" | \"both\";\n}\n\nexport interface TableRLSStatus {\n schemaName: string;\n tableName: string;\n rlsEnabled: boolean;\n policies: PostgresPolicy[];\n}\n\nexport const RLSEditor = ({ apiUrl = \"\" }: { apiUrl?: string }) => {\n const { databaseAdmin } = useRebaseContext();\n const snackbarController = useSnackbarController();\n const collectionRegistry = useStudioCollectionRegistry();\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [tables, setTables] = useState<TableRLSStatus[]>([]);\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [activeTab, setActiveTab] = useState(0);\n\n const [editingPolicy, setEditingPolicy] = useState<PostgresPolicy | \"new\" | null>(null);\n\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_rls_editor_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 20;\n } catch (e) {\n return 20;\n }\n });\n\n const [expandedSchemas, setExpandedSchemas] = useState<Record<string, boolean>>({ public: true });\n\n // Sidebar tab: \"tables\" or \"info\"\n const [sidebarTab, setSidebarTab] = useState<\"tables\" | \"info\">(\"tables\");\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_rls_editor_sidebar_size\", sidebarSize.toString());\n } catch (e) { /* ignore */ }\n }, [sidebarSize]);\n\n const fetchRLSData = useCallback(async () => {\n if (!databaseAdmin?.executeSql) {\n setError(t(\"studio_sql_sql_not_supported\"));\n setIsLoading(false);\n return;\n }\n\n setIsLoading(true);\n setError(null);\n try {\n // 1. Fetch tables and whether RLS is enabled\n const tablesSql = `\n SELECT \n schemaname, \n tablename, \n rowsecurity \n FROM pg_tables \n WHERE schemaname NOT IN ('information_schema', 'pg_catalog')\n ORDER BY schemaname, tablename;\n `;\n const tablesResult = await databaseAdmin!.executeSql!(tablesSql);\n\n // 2. Fetch all policies\n const policiesSql = `\n SELECT \n schemaname,\n tablename,\n policyname,\n permissive,\n roles,\n cmd,\n qual,\n with_check\n FROM pg_policies\n WHERE schemaname NOT IN ('information_schema', 'pg_catalog');\n `;\n const policiesResult = await databaseAdmin!.executeSql!(policiesSql);\n\n const extractRows = (result: unknown): Record<string, unknown>[] => {\n if (result && typeof result === \"object\" && \"rows\" in result && Array.isArray((result as { rows: Record<string, unknown>[] }).rows)) {\n return (result as { rows: Record<string, unknown>[] }).rows;\n }\n if (Array.isArray(result)) return result as Record<string, unknown>[];\n return [];\n };\n\n const tRows = extractRows(tablesResult);\n const pRows = extractRows(policiesResult);\n\n const tableMap: Record<string, TableRLSStatus> = {};\n\n tRows.forEach((tRow: Record<string, unknown>) => {\n const t = tRow as { schemaname?: string, SCHEMANAME?: string, tablename?: string, TABLENAME?: string, rowsecurity?: boolean, ROWSECURITY?: boolean };\n const schema = t.schemaname || t.SCHEMANAME || \"public\";\n const table = t.tablename || t.TABLENAME || \"\";\n const rlsEnabled = t.rowsecurity || t.ROWSECURITY || false;\n\n const key = `${schema}.${table}`;\n tableMap[key] = {\n schemaName: schema,\n tableName: table,\n rlsEnabled: rlsEnabled,\n policies: []\n };\n });\n\n pRows.forEach((pRow: Record<string, unknown>) => {\n const p = pRow as { schemaname?: string, SCHEMANAME?: string, tablename?: string, TABLENAME?: string, roles?: string | string[], ROLES?: string | string[], policyname?: string, POLICYNAME?: string, permissive?: \"PERMISSIVE\" | \"RESTRICTIVE\", PERMISSIVE?: \"PERMISSIVE\" | \"RESTRICTIVE\", cmd?: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\", CMD?: \"SELECT\" | \"INSERT\" | \"UPDATE\" | \"DELETE\" | \"ALL\", qual?: string | null, QUAL?: string | null, with_check?: string | null, WITH_CHECK?: string | null };\n const schema = p.schemaname || p.SCHEMANAME || \"public\";\n const table = p.tablename || p.TABLENAME || \"\";\n const key = `${schema}.${table}`;\n\n if (tableMap[key]) {\n // Postgres roles come back as an array string like \"{public}\" or literal array\n let parsedRoles: string[] = [];\n const r = p.roles || p.ROLES;\n if (Array.isArray(r)) {\n parsedRoles = r;\n } else if (typeof r === \"string\") {\n parsedRoles = r.replace(/^{|}$/g, \"\").split(\",\").map(s => s.trim());\n }\n\n tableMap[key].policies.push({\n policyname: p.policyname || p.POLICYNAME || \"\",\n tablename: table,\n permissive: p.permissive || p.PERMISSIVE || \"PERMISSIVE\",\n roles: parsedRoles,\n cmd: p.cmd || p.CMD || \"ALL\",\n qual: p.qual || p.QUAL || null,\n with_check: p.with_check || p.WITH_CHECK || null\n });\n }\n });\n\n const sortedTables = Object.values(tableMap).sort((a, b) => a.tableName.localeCompare(b.tableName));\n setTables(sortedTables);\n\n if (sortedTables.length > 0 && !selectedTable) {\n setSelectedTable(`${sortedTables[0].schemaName}.${sortedTables[0].tableName}`);\n }\n\n } catch (e: unknown) {\n console.error(\"RLS fetch error:\", e);\n setError(\"Failed to fetch RLS policies: \" + (e instanceof Error ? e.message : String(e)));\n } finally {\n setIsLoading(false);\n }\n }, [databaseAdmin, selectedTable]);\n\n useEffect(() => {\n setEditingPolicy(null);\n }, [selectedTable]);\n\n useEffect(() => {\n fetchRLSData();\n }, [fetchRLSData]);\n\n const activeTableData = useMemo(() => {\n if (!selectedTable) return null;\n return tables.find(t => `${t.schemaName}.${t.tableName}` === selectedTable) || null;\n }, [selectedTable, tables]);\n\n const groupedTables = useMemo(() => {\n const groups: Record<string, TableRLSStatus[]> = {};\n tables.forEach(table => {\n if (!groups[table.schemaName]) {\n groups[table.schemaName] = [];\n }\n groups[table.schemaName].push(table);\n });\n return groups;\n }, [tables]);\n\n const activeCollection = useMemo(() => {\n if (!activeTableData) return null;\n return collectionRegistry.collections?.find((c: { id?: string, path?: string, table?: string, slug?: string, collectionId?: string }) =>\n c.id === activeTableData.tableName ||\n c.path === activeTableData.tableName ||\n c.table === activeTableData.tableName ||\n c.slug === activeTableData.tableName ||\n c.collectionId === activeTableData.tableName\n ) || null;\n }, [activeTableData, collectionRegistry.collections]);\n\n const mergedPolicies = useMemo(() => {\n if (!activeTableData) return [];\n\n const policiesMap: Record<string, PostgresPolicy> = {};\n\n // Load live policies\n (activeTableData.policies || []).forEach(p => {\n policiesMap[p.policyname] = { ...p,\nstatus: \"live\" };\n });\n\n // Merge code-based policies\n if (activeCollection && isPostgresCollection(activeCollection) && activeCollection.securityRules) {\n activeCollection.securityRules.forEach((rule: { name?: string, mode?: string, operation?: string, roles?: string[], using?: string, withCheck?: string }) => {\n const ruleName = rule.name;\n if (!ruleName) return;\n\n if (policiesMap[ruleName]) {\n // It exists in Postgres, but we have a code definition (potentially edited)\n policiesMap[ruleName] = {\n policyname: ruleName,\n tablename: activeTableData.tableName,\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null,\n status: \"both\"\n };\n } else {\n policiesMap[ruleName] = {\n policyname: ruleName,\n tablename: activeTableData.tableName,\n permissive: (rule.mode || \"permissive\").toUpperCase() as PostgresPolicy[\"permissive\"],\n cmd: (rule.operation || \"ALL\").toUpperCase() as PostgresPolicy[\"cmd\"],\n roles: rule.roles || [\"public\"],\n qual: rule.using || null,\n with_check: rule.withCheck || null,\n status: \"code_only\"\n };\n }\n });\n }\n\n return Object.values(policiesMap).sort((a, b) => a.policyname.localeCompare(b.policyname));\n }, [activeTableData, activeCollection]);\n\n // Stats for the info tab\n const rlsStats = useMemo(() => {\n const total = tables.length;\n const enabled = tables.filter(t => t.rlsEnabled).length;\n const withPolicies = tables.filter(t => t.policies.length > 0).length;\n const totalPolicies = tables.reduce((sum, t) => sum + t.policies.length, 0);\n return { total,\nenabled,\nwithPolicies,\ntotalPolicies };\n }, [tables]);\n\n const renderPolicyTag = (label: string, value: string) => {\n return (\n <div className=\"flex items-center gap-1.5 px-2 py-1 rounded-md bg-surface-100 dark:bg-surface-950 border border-surface-200 dark:border-surface-700/50\">\n <span className=\"text-[10px] uppercase text-text-secondary dark:text-text-secondary-dark font-medium tracking-wider\">\n {label}:\n </span>\n <span className=\"font-mono text-xs text-text-primary dark:text-text-primary-dark break-all\">\n {value}\n </span>\n </div>\n );\n };\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={220}\n firstPanel={\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <Tabs value={sidebarTab} onValueChange={(v) => setSidebarTab(v as \"tables\" | \"info\")} variant=\"boxy\" className=\"border-b border-surface-200 dark:border-surface-950\">\n <Tab value=\"tables\">Tables</Tab>\n <Tab value=\"info\">Info</Tab>\n </Tabs>\n\n <div className=\"flex-grow overflow-hidden relative\">\n {sidebarTab === \"tables\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n {t(\"studio_schema_tables\")}\n </Typography>\n <IconButton size=\"small\" onClick={fetchRLSData} title=\"Refresh\">\n <RefreshCwIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n <div className=\"flex-grow overflow-y-auto no-scrollbar p-1\">\n {isLoading && tables.length === 0 ? (\n <div className=\"flex justify-center p-4\"><CircularProgress size=\"small\"/></div>\n ) : Object.keys(groupedTables).length === 0 ? (\n <div className=\"p-4 text-center\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark italic\">{t(\"studio_rls_no_tables\")}</Typography>\n </div>\n ) : (\n Object.entries(groupedTables).map(([schemaName, schemaTables]) => (\n <div key={schemaName} className=\"mb-2\">\n <div\n className=\"flex items-center p-1 cursor-pointer hover:bg-surface-100 dark:hover:bg-surface-950 rounded transition-colors\"\n onClick={() => setExpandedSchemas(prev => ({ ...prev,\n[schemaName]: !prev[schemaName] }))}\n >\n <svg className={cls(\"w-3 h-3 mr-1 transition-transform\", expandedSchemas[schemaName] ? \"rotate-90\" : \"\")} fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"/></svg>\n <Typography variant=\"body2\" className=\"text-text-primary dark:text-text-primary-dark font-medium text-xs truncate flex-grow\">{schemaName}</Typography>\n </div>\n\n {expandedSchemas[schemaName] && (\n <div className=\"ml-3 mt-1 space-y-0.5\">\n {schemaTables.map(table => {\n const key = `${table.schemaName}.${table.tableName}`;\n const isSelected = selectedTable === key;\n return (\n <div\n key={key}\n onClick={() => setSelectedTable(key)}\n className={cls(\n \"flex items-center p-1 cursor-pointer rounded transition-colors group relative\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-secondary dark:text-text-secondary-dark\"\n )}\n >\n <svg className=\"w-3.5 h-3.5 mr-1 shrink-0 text-text-disabled dark:text-text-disabled-dark\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z\"/></svg>\n <Typography variant=\"body2\" className=\"text-xs truncate flex-1 min-w-0\">{table.tableName}</Typography>\n <div className=\"flex items-center gap-1.5 shrink-0 ml-2\">\n {table.rlsEnabled ? (\n <Tooltip title={t(\"studio_rls_enabled\")}>\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n </Tooltip>\n ) : (\n <Tooltip title={t(\"studio_rls_disabled\")}>\n <div className=\"w-1.5 h-1.5 rounded-full bg-orange-400 opacity-50\"/>\n </Tooltip>\n )}\n <span className=\"text-[10px] opacity-40 group-hover:opacity-100 min-w-[1.2rem] text-right font-medium\">\n {table.policies.length}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n )}\n\n {sidebarTab === \"info\" && (\n <div className=\"flex flex-col h-full\">\n <div className={cls(\"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n Overview\n </Typography>\n </div>\n <div className=\"flex-grow overflow-y-auto p-3 space-y-3 no-scrollbar\">\n <div className={cls(\"p-3 rounded-lg border bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-2 mb-2\">\n <ShieldIcon size={iconSize.smallest} className=\"text-primary\"/>\n <Typography variant=\"body2\" className=\"font-semibold text-[13px]\">RLS Studio</Typography>\n </div>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px] leading-relaxed block\">\n Manage Row Level Security policies for your PostgreSQL tables. Enable RLS and create fine-grained access policies.\n </Typography>\n </div>\n\n <div className=\"space-y-2\">\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Total tables</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.total}</Typography>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">RLS enabled</Typography>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.enabled}</Typography>\n </div>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Tables with policies</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.withPolicies}</Typography>\n </div>\n <div className={cls(\"p-2.5 rounded border bg-white dark:bg-surface-900 flex items-center justify-between\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark text-[11px]\">Total policies</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[13px] font-medium\">{rlsStats.totalPolicies}</Typography>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n }\n secondPanel={\n <div className=\"flex-grow flex flex-col min-w-0 h-full w-full bg-white dark:bg-surface-950\">\n {/* Toolbar Header matching SQL/JS Editor style */}\n <div className={cls(\"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950 min-h-[46px]\", defaultBorderMixin)}>\n <div className=\"flex items-center flex-grow overflow-hidden px-4\">\n <Typography variant=\"subtitle2\" className=\"font-mono text-text-secondary dark:text-text-secondary-dark truncate\">\n {activeTableData ? `${activeTableData.schemaName}.${activeTableData.tableName}` : t(\"studio_rls_select_table\")}\n </Typography>\n {activeTableData && (\n <div className=\"ml-3\">\n {activeTableData.rlsEnabled ? (\n <Chip size=\"smallest\" className=\"bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400 border-green-200 dark:border-green-800\">{t(\"studio_rls_enabled\")}</Chip>\n ) : (\n <Chip size=\"smallest\" className=\"bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400 border-yellow-200 dark:border-yellow-800\">{t(\"studio_rls_disabled\")}</Chip>\n )}\n </div>\n )}\n </div>\n <div className=\"flex shrink-0 items-center justify-end gap-1.5\">\n {activeTableData && (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={async () => {\n const table = activeTableData.tableName;\n const action = activeTableData.rlsEnabled ? \"DISABLE\" : \"ENABLE\";\n if (!confirm(`Are you sure you want to ${action.toLowerCase()} Row Level Security on \"${table}\"?`)) return;\n try {\n await databaseAdmin!.executeSql!(`ALTER TABLE \"${table}\" ${action} ROW LEVEL SECURITY`);\n snackbarController.open({ type: \"success\",\nmessage: `RLS ${action.toLowerCase()}d on ${table}` });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n {activeTableData.rlsEnabled ? t(\"studio_rls_disable_rls\") : t(\"studio_rls_enable_rls\")}\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"/>\n\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={fetchRLSData}\n startIcon={<RefreshCwIcon size={iconSize.smallest}/>}\n >\n Refresh\n </Button>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-1\"/>\n\n <Button\n size=\"small\"\n color=\"primary\"\n disabled={!activeCollection}\n onClick={() => setEditingPolicy(\"new\")}\n >\n {t(\"studio_rls_create_policy\")}\n </Button>\n </>\n )}\n </div>\n </div>\n\n {error ? (\n <div className=\"p-6 h-full flex items-center justify-center\">\n <ErrorView title={t(\"studio_rls_error\")} error={error} onRetry={fetchRLSData}/>\n </div>\n ) : !activeTableData ? (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled h-full\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-4 opacity-50\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1} d=\"M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z\"/></svg>\n <Typography variant=\"body2\">{t(\"studio_rls_select_table\")}</Typography>\n </div>\n </div>\n ) : editingPolicy ? (\n <PolicyEditor\n policy={editingPolicy === \"new\" ? undefined : editingPolicy}\n schema={activeTableData.schemaName}\n table={activeTableData.tableName}\n onSave={async (newPolicy) => {\n if (!activeCollection) return;\n const rule: Record<string, unknown> = {\n name: newPolicy.policyname,\n operation: newPolicy.cmd?.toLowerCase(),\n mode: newPolicy.permissive?.toLowerCase(),\n using: newPolicy.qual || undefined,\n withCheck: newPolicy.with_check || undefined,\n roles: newPolicy.roles\n };\n\n const existingRules = (isPostgresCollection(activeCollection) ? activeCollection.securityRules : undefined) || [];\n let newRules;\n if (editingPolicy === \"new\") {\n newRules = [...existingRules, rule];\n } else {\n newRules = existingRules.map((r: { name?: string }) => r.name === editingPolicy.policyname ? rule : r);\n }\n\n try {\n const response = await fetch(`${apiUrl}/api/schema-editor/collection/save`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n collectionId: (activeCollection as { id?: string, path?: string, alias?: string }).id || (activeCollection as { id?: string, path?: string, alias?: string }).path || (activeCollection as { id?: string, path?: string, alias?: string }).alias || activeTableData.tableName,\n collectionData: { securityRules: newRules }\n })\n });\n if (!response.ok) throw new Error(\"Failed to save policy\");\n\n snackbarController.open({ type: \"success\",\nmessage: \"Policy saved successfully\" });\n setEditingPolicy(null);\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n onCancel={() => setEditingPolicy(null)}\n />\n ) : (\n <div className=\"flex-grow flex flex-col overflow-hidden\">\n <div className=\"p-6 pt-4 flex-grow overflow-auto bg-surface-50 dark:bg-surface-900\">\n <div className=\"max-w-4xl mx-auto flex flex-col gap-6\">\n {activeTableData && !activeCollection && (\n <Alert\n color=\"warning\"\n >\n <Typography variant=\"body2\" className=\"mb-1\">\n Table not managed by Rebase\n </Typography>\n <Typography variant=\"caption\" className=\"opacity-80\">\n This table is not mapped to a Rebase Schema via code. To edit security policies visually, you must first import this table into a Schema configuration file.\n </Typography>\n </Alert>\n )}\n\n {activeTableData && !activeTableData.rlsEnabled && (\n <div className={cls(\"p-4 sm:p-5 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-900/50 rounded-lg flex flex-col sm:flex-row gap-4 items-start sm:items-center justify-between\", defaultBorderMixin)}>\n <div className=\"flex gap-3 items-start\">\n <div className=\"mt-1 bg-yellow-100 dark:bg-yellow-900/50 p-1.5 rounded-md shrink-0 flex items-center justify-center\">\n <AlertTriangleIcon size={iconSize.smallest}/>\n </div>\n <div>\n <Typography variant=\"subtitle2\" className=\"text-yellow-800 dark:text-yellow-500\">\n Row Level Security (RLS) is disabled\n </Typography>\n <Typography variant=\"body2\" className=\"text-yellow-700 dark:text-yellow-600/90 mt-1 max-w-2xl\">\n Your table is completely readable and writable by anyone with access privileges. Enable RLS to create policies that restrict access to specific rows.\n </Typography>\n </div>\n </div>\n <Button\n size=\"medium\"\n variant=\"filled\"\n color=\"neutral\"\n onClick={() => setEditingPolicy(\"new\")}\n className=\"shrink-0 whitespace-nowrap\"\n disabled={!activeCollection}\n >\n {t(\"studio_rls_create_policy\")}\n </Button>\n </div>\n )}\n\n {activeTableData && mergedPolicies && mergedPolicies.length > 0 && (\n <div className=\"flex flex-col gap-3\">\n <Typography variant=\"subtitle2\" className=\"text-text-secondary dark:text-text-secondary-dark uppercase tracking-wider mb-1\">{t(\"studio_rls_policies\")}</Typography>\n {mergedPolicies.map(policy => (\n <Paper key={policy.policyname} className={cls(\"p-3 sm:px-4 sm:py-3 flex flex-col sm:flex-row sm:items-center justify-between gap-4 border rounded-lg\", defaultBorderMixin)}>\n <div className=\"flex flex-col gap-2 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <KeyIcon size={iconSize.smallest} className=\"text-text-secondary dark:text-text-secondary-dark shrink-0\"/>\n <Typography variant=\"body2\" className=\"truncate\">{policy.policyname}</Typography>\n {policy.status === \"code_only\" && (\n <Tooltip title=\"This policy is defined in your code but hasn't been applied to the database yet.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-primary/10 text-primary border border-primary/20 shrink-0\">\n Unapplied\n </div>\n </Tooltip>\n )}\n {policy.status === \"live\" && (\n <Tooltip title=\"This policy is live in the database but missing from your codebase schema.\">\n <div className=\"px-1.5 py-0.5 rounded text-[10px] uppercase bg-orange-500/10 text-orange-600 border border-orange-500/20 shrink-0\">\n DB Only\n </div>\n </Tooltip>\n )}\n </div>\n <div className=\"flex flex-wrap gap-1.5 text-sm\">\n {renderPolicyTag(\"Action\", policy.cmd)}\n {renderPolicyTag(\"Roles\", Array.isArray(policy.roles) ? policy.roles.join(\", \") : policy.roles)}\n </div>\n </div>\n <div className=\"flex gap-2 shrink-0 items-center\">\n {policy.status === \"live\" && activeCollection && (\n <Button\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={async () => {\n const rule: Record<string, unknown> = {\n name: policy.policyname,\n operation: policy.cmd?.toLowerCase(),\n mode: policy.permissive?.toLowerCase(),\n using: policy.qual || undefined,\n withCheck: policy.with_check || undefined,\n roles: policy.roles\n };\n\n const existingRules = (isPostgresCollection(activeCollection) ? activeCollection.securityRules : undefined) || [];\n const newRules = [...existingRules, rule];\n\n try {\n const response = await fetch(`${apiUrl}/api/schema-editor/collection/save`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n collectionId: (activeCollection as { id?: string, path?: string, alias?: string }).id || (activeCollection as { id?: string, path?: string, alias?: string }).path || (activeCollection as { id?: string, path?: string, alias?: string }).alias || activeTableData!.tableName,\n collectionData: { securityRules: newRules }\n })\n });\n if (!response.ok) throw new Error(\"Failed to save policy\");\n\n snackbarController.open({ type: \"success\",\nmessage: \"Policy imported successfully\" });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n Import to codebase\n </Button>\n )}\n <Button size=\"small\" variant=\"text\" color=\"primary\" onClick={() => setEditingPolicy(policy)} disabled={!activeCollection}>\n {t(\"studio_rls_edit\")}\n </Button>\n {policy.status !== \"code_only\" && (\n <Tooltip title={t(\"studio_rls_delete\")} asChild={true}>\n <IconButton\n size=\"small\"\n onClick={async () => {\n const table = activeTableData!.tableName;\n if (!confirm(`Drop policy \"${policy.policyname}\" from table \"${table}\"?`)) return;\n try {\n await databaseAdmin!.executeSql!(`DROP POLICY \"${policy.policyname}\" ON \"${table}\"`);\n snackbarController.open({ type: \"success\",\nmessage: `Policy \"${policy.policyname}\" dropped` });\n fetchRLSData();\n } catch (e: unknown) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }}\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n )}\n </div>\n </Paper>\n ))}\n </div>\n )}\n\n </div>\n </div>\n </div>\n )}\n </div>\n }\n />\n </div>\n );\n};\n","\nimport React, { useState, useEffect, useCallback, useMemo } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Button, IconButton, Tooltip, CircularProgress, ResizablePanels, Chip, Dialog, DialogContent, DialogActions, FileUpload , iconSize } from \"@rebasepro/ui\";\nimport { VideoIcon, Music2Icon, RefreshCwIcon, Trash2Icon, XIcon, PlusIcon, DownloadIcon, UploadCloudIcon, FolderIcon, FileTextIcon, ImageIcon, ArrowLeftIcon, FileIcon, HomeIcon, LayoutGridIcon, ListIcon } from \"lucide-react\";\nimport { useStorageSource, useSnackbarController, ErrorView } from \"@rebasepro/core\";\nimport type { StorageListResult } from \"@rebasepro/types\";\n\n// ──────────────────────────────────────────────\n// Types\n// ──────────────────────────────────────────────\n\ninterface StorageFile {\n name: string;\n fullPath: string;\n isFolder: boolean;\n /** Only populated when metadata is fetched */\n size?: number;\n contentType?: string;\n downloadUrl?: string;\n}\n\n// ──────────────────────────────────────────────\n// Helpers\n// ──────────────────────────────────────────────\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\nfunction getFileIcon(contentType?: string) {\n if (!contentType) return FileTextIcon;\n if (contentType.startsWith(\"image/\")) return ImageIcon;\n if (contentType.startsWith(\"video/\")) return VideoIcon;\n if (contentType.startsWith(\"audio/\")) return Music2Icon;\n return FileTextIcon;\n}\n\nfunction getExtension(name: string): string {\n const parts = name.split(\".\");\n return parts.length > 1 ? parts[parts.length - 1].toUpperCase() : \"\";\n}\n\nfunction breadcrumbSegments(path: string): { label: string; path: string }[] {\n if (!path || path === \"/\") return [{ label: \"Root\",\npath: \"\" }];\n const parts = path.split(\"/\").filter(Boolean);\n const segments = [{ label: \"Root\",\npath: \"\" }];\n let accumulated = \"\";\n for (const part of parts) {\n accumulated = accumulated ? `${accumulated}/${part}` : part;\n segments.push({ label: part,\npath: accumulated });\n }\n return segments;\n}\n\n// ──────────────────────────────────────────────\n// Upload Dialog\n// ──────────────────────────────────────────────\n\nfunction UploadDialog({\n open,\n currentPath,\n onClose,\n onUpload\n}: {\n open: boolean;\n currentPath: string;\n onClose: () => void;\n onUpload: (files: File[]) => Promise<void>;\n}) {\n const [uploading, setUploading] = useState(false);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n const [error, setError] = useState<string | null>(null);\n\n const handleFilesAdded = useCallback((files: File[]) => {\n setSelectedFiles(prev => [...prev, ...files]);\n }, []);\n\n const handleRemoveFile = useCallback((index: number) => {\n setSelectedFiles(prev => prev.filter((_, i) => i !== index));\n }, []);\n\n const handleUpload = useCallback(async () => {\n if (selectedFiles.length === 0) return;\n setUploading(true);\n setError(null);\n try {\n await onUpload(selectedFiles);\n setSelectedFiles([]);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Upload failed\");\n } finally {\n setUploading(false);\n }\n }, [selectedFiles, onUpload, onClose]);\n\n const handleClose = useCallback(() => {\n if (!uploading) {\n setSelectedFiles([]);\n setError(null);\n onClose();\n }\n }, [uploading, onClose]);\n\n return (\n <Dialog open={open} onOpenChange={(o) => !o && handleClose()} maxWidth=\"md\">\n <DialogContent className=\"p-0\">\n <div className=\"p-4 border-b border-surface-accent-200 dark:border-surface-accent-700\">\n <Typography variant=\"h6\">Upload Files</Typography>\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark mt-1 block\">\n to <span className=\"font-mono text-primary\">/{currentPath || \"root\"}</span>\n </Typography>\n </div>\n\n <div className=\"p-4\">\n {/* Drop Zone */}\n <FileUpload\n accept={{} as Record<string, string[]>}\n onFilesAdded={handleFilesAdded}\n size=\"large\"\n uploadDescription={\n <div className=\"flex flex-col items-center justify-center pointer-events-none mt-2\">\n <UploadCloudIcon className=\"text-surface-accent-400 mb-2 w-8 h-8\"/>\n <Typography variant=\"h6\" className=\"font-bold\">\n Drop files here or click to browse\n </Typography>\n <Typography variant=\"caption\" className=\"text-surface-accent-500 font-medium\">\n Any file type supported\n </Typography>\n </div>\n }\n />\n\n {error && (\n <Typography variant=\"caption\" className=\"text-red-500 mt-2 block whitespace-pre-line\">\n {error}\n </Typography>\n )}\n\n {selectedFiles.length > 0 && (\n <div className=\"mt-4 space-y-2\">\n <Typography variant=\"caption\" className=\"text-surface-accent-500\">\n Selected files ({selectedFiles.length})\n </Typography>\n <div className=\"max-h-40 overflow-auto space-y-1\">\n {selectedFiles.map((file, index) => (\n <div\n key={`${file.name}-${index}`}\n className={cls(\n \"flex items-center justify-between p-2 rounded\",\n \"bg-surface-accent-50 dark:bg-surface-accent-800\"\n )}\n >\n <div className=\"flex-1 min-w-0 mr-2\">\n <Typography variant=\"body2\" className=\"truncate\">\n {file.name}\n </Typography>\n <Typography variant=\"caption\" className=\"text-surface-accent-500\">\n {formatFileSize(file.size)}\n </Typography>\n </div>\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n handleRemoveFile(index);\n }}\n disabled={uploading}\n >\n Remove\n </Button>\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n </DialogContent>\n\n <DialogActions>\n <Button variant=\"text\" onClick={handleClose} disabled={uploading}>\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n onClick={handleUpload}\n disabled={selectedFiles.length === 0 || uploading}\n >\n {uploading ? (\n <>\n <CircularProgress size=\"smallest\"/>\n Uploading...\n </>\n ) : (\n `Upload ${selectedFiles.length > 0 ? `(${selectedFiles.length})` : \"\"}`\n )}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\n// ──────────────────────────────────────────────\n// FileIcon preview panel\n// ──────────────────────────────────────────────\n\nfunction FilePreviewPanel({\n file,\n onClose,\n onDelete,\n downloadUrl\n}: {\n file: StorageFile;\n onClose: () => void;\n onDelete: () => void;\n downloadUrl: string | null;\n}) {\n const isImage = file.contentType?.startsWith(\"image/\");\n const isVideo = file.contentType?.startsWith(\"video/\");\n const isAudio = file.contentType?.startsWith(\"audio/\");\n const FileIconComponent = getFileIcon(file.contentType);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n\n return (\n <>\n <div className={cls(\n \"flex flex-col h-full border-l\",\n defaultBorderMixin,\n \"bg-white dark:bg-surface-950\"\n )}>\n {/* Header */}\n <div className={cls(\"flex items-center justify-between p-3 border-b shrink-0\", defaultBorderMixin)}>\n <Typography variant=\"body2\" className=\"font-medium truncate flex-1 mr-2\">\n {file.name}\n </Typography>\n <div className=\"flex items-center gap-0.5\">\n {downloadUrl && (\n <Tooltip title=\"Download\">\n <IconButton\n size=\"small\"\n onClick={() => window.open(downloadUrl, \"_blank\")}\n >\n <DownloadIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n )}\n <Tooltip title=\"Delete\">\n <IconButton\n size=\"small\"\n onClick={() => setDeleteDialogOpen(true)}\n className=\"text-red-500 hover:bg-red-50 dark:hover:bg-red-900/20\"\n >\n <Trash2Icon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n <IconButton size=\"small\" onClick={onClose}>\n <XIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n </div>\n\n {/* Preview */}\n <div className=\"flex-1 overflow-auto\">\n <div className=\"flex flex-col items-center justify-center min-h-[200px] p-4 bg-surface-50 dark:bg-surface-900 border-b border-surface-accent-200 dark:border-surface-accent-700\">\n {(() => {\n const ext = getExtension(file.name)?.toLowerCase() || \"\";\n const isImage = file.contentType?.startsWith(\"image/\") || [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\"].includes(ext);\n const isVideo = file.contentType?.startsWith(\"video/\") || [\"mp4\", \"webm\", \"ogg\", \"mov\"].includes(ext);\n const isAudio = file.contentType?.startsWith(\"audio/\") || [\"mp3\", \"wav\", \"ogg\", \"m4a\"].includes(ext);\n const downloadUrl = file.downloadUrl;\n\n if (isImage && downloadUrl) {\n return (\n <img\n src={downloadUrl}\n alt={file.name}\n className=\"max-w-full max-h-[400px] object-contain rounded-md shadow-sm\"\n />\n );\n } else if (isVideo && downloadUrl) {\n return (\n <video\n src={downloadUrl}\n className=\"max-w-full max-h-[400px] rounded-md\"\n controls\n />\n );\n } else if (isAudio && downloadUrl) {\n return (\n <div className=\"flex flex-col items-center gap-4\">\n <Music2Icon className=\"text-surface-accent-400 w-10 h-10\"/>\n <audio src={downloadUrl} controls className=\"w-full max-w-xs\"/>\n </div>\n );\n } else {\n return (\n <div className=\"flex flex-col items-center gap-3 text-surface-accent-400\">\n <FileIconComponent className=\"w-10 h-10\"/>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n No preview available\n </Typography>\n </div>\n );\n }\n })()}\n </div>\n </div>\n\n {/* Metadata */}\n <div className=\"p-4 space-y-3\">\n <div>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark text-[10px] uppercase tracking-wider font-bold mb-1 block\">\n File Info\n </Typography>\n </div>\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px]\">\n Name\n </Typography>\n <Typography variant=\"body2\" className=\"text-[13px] break-all\">\n {file.name}\n </Typography>\n </div>\n <div>\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px]\">\n Type\n </Typography>\n <Typography variant=\"body2\" className=\"text-[13px]\">\n {file.contentType || \"Unknown\"}\n </Typography>\n </div>\n {file.size !== undefined && (\n <div>\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px]\">\n Size\n </Typography>\n <Typography variant=\"body2\" className=\"text-[13px]\">\n {formatFileSize(file.size)}\n </Typography>\n </div>\n )}\n <div>\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px]\">\n Extension\n </Typography>\n <Typography variant=\"body2\" className=\"text-[13px] font-mono\">\n {getExtension(file.name) || \"—\"}\n </Typography>\n </div>\n <div className=\"col-span-2\">\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px]\">\n Path\n </Typography>\n <Typography variant=\"body2\" className=\"text-[13px] font-mono break-all\">\n {file.fullPath}\n </Typography>\n </div>\n </div>\n\n {downloadUrl && (\n <div className=\"pt-2\">\n <Typography variant=\"caption\" className=\"text-surface-accent-500 text-[11px] block mb-1\">\n URL\n </Typography>\n <div\n className=\"p-2 rounded bg-surface-100 dark:bg-surface-950 cursor-pointer hover:bg-surface-200 dark:hover:bg-surface-700 transition-colors\"\n onClick={() => {\n navigator.clipboard.writeText(downloadUrl);\n }}\n >\n <Typography variant=\"caption\" className=\"font-mono text-[11px] break-all text-primary\">\n {downloadUrl}\n </Typography>\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark text-[10px] block mt-1\">\n Click to copy\n </Typography>\n </div>\n </div>\n )}\n </div>\n </div>\n\n {/* Delete Confirmation */}\n <Dialog open={deleteDialogOpen} onOpenChange={setDeleteDialogOpen}>\n <DialogContent>\n <Typography variant=\"subtitle1\" className=\"mb-2\">\n Delete File?\n </Typography>\n <Typography className=\"text-surface-accent-600 dark:text-surface-accent-400\">\n Are you sure you want to delete "{file.name}"?\n This action cannot be undone.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={() => setDeleteDialogOpen(false)}>\n Cancel\n </Button>\n <Button\n variant=\"filled\"\n color=\"error\"\n onClick={() => {\n setDeleteDialogOpen(false);\n onDelete();\n }}\n >\n Delete\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n}\n\n// ──────────────────────────────────────────────\n// Sidebar (folder tree)\n// ──────────────────────────────────────────────\n\nfunction StorageSidebar({\n folders,\n currentPath,\n onNavigate,\n loading\n}: {\n folders: StorageFile[];\n currentPath: string;\n onNavigate: (path: string) => void;\n loading: boolean;\n}) {\n const segments = breadcrumbSegments(currentPath);\n\n return (\n <div className={cls(\"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\", defaultBorderMixin)}>\n <div className={cls(\"p-3 border-b flex justify-between items-center bg-surface-50 dark:bg-surface-900 shrink-0\", defaultBorderMixin)}>\n <Typography variant=\"caption\" className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\">\n Folders\n </Typography>\n </div>\n\n <div className=\"flex-grow overflow-y-auto no-scrollbar p-1\">\n {/* Folder tree */}\n <div\n className={cls(\n \"flex items-center p-1.5 cursor-pointer rounded transition-colors\",\n currentPath === \"\" || !currentPath\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-secondary dark:text-text-secondary-dark\"\n )}\n onClick={() => onNavigate(\"\")}\n >\n <HomeIcon size={iconSize.smallest} className=\"mr-1.5 shrink-0\"/>\n <Typography variant=\"body2\" className=\"text-xs truncate\">Root</Typography>\n </div>\n\n {loading && folders.length === 0 ? (\n <div className=\"flex justify-center p-4\">\n <CircularProgress size=\"small\"/>\n </div>\n ) : (\n <div className=\"mt-1 space-y-0.5\">\n {folders.map(folder => {\n const isSelected = currentPath === folder.fullPath;\n return (\n <div\n key={folder.fullPath}\n className={cls(\n \"flex items-center p-1.5 cursor-pointer rounded transition-colors group\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-secondary dark:text-text-secondary-dark\"\n )}\n onClick={() => onNavigate(folder.fullPath)}\n >\n <FolderIcon size={iconSize.smallest} className=\"mr-1.5 shrink-0 text-amber-500 dark:text-amber-400\"/>\n <Typography variant=\"body2\" className=\"text-xs truncate flex-1 min-w-0\">\n {folder.name}\n </Typography>\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n\n// ──────────────────────────────────────────────\n// Main StorageView Export\n// ──────────────────────────────────────────────\n\nexport const StorageView = () => {\n const storageSource = useStorageSource();\n const snackbarController = useSnackbarController();\n\n // Navigation\n const [currentPath, setCurrentPath] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n // Contents\n const [folders, setFolders] = useState<StorageFile[]>([]);\n const [files, setFiles] = useState<StorageFile[]>([]);\n\n // Selection and preview\n const [selectedFile, setSelectedFile] = useState<StorageFile | null>(null);\n const [selectedDownloadUrl, setSelectedDownloadUrl] = useState<string | null>(null);\n\n // Upload\n const [uploadDialogOpen, setUploadDialogOpen] = useState(false);\n\n // View mode\n const [viewMode, setViewMode] = useState<\"grid\" | \"list\">(\"grid\");\n\n // Resizable panels\n\n // Resizable panels\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_storage_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 18;\n } catch {\n return 18;\n }\n });\n\n useEffect(() => {\n try {\n localStorage.setItem(\"rebase_storage_sidebar_size\", sidebarSize.toString());\n } catch { /* noop */ }\n }, [sidebarSize]);\n\n // ── Fetch directory contents ──\n const fetchContents = useCallback(async (path: string) => {\n setLoading(true);\n setError(null);\n try {\n const result: StorageListResult = await storageSource.listObjects(path);\n\n const folderItems: StorageFile[] = (result.prefixes ?? []).map(ref => ({\n name: ref.name,\n fullPath: ref.fullPath,\n isFolder: true\n }));\n\n // Build file items and fetch metadata for each\n const fileItems: StorageFile[] = await Promise.all(\n (result.items ?? []).map(async (ref) => {\n try {\n const downloadConfig = await storageSource.getSignedUrl(ref.fullPath);\n return {\n name: ref.name,\n fullPath: ref.fullPath,\n isFolder: false,\n size: downloadConfig.metadata?.size,\n contentType: downloadConfig.metadata?.contentType,\n downloadUrl: downloadConfig.url ?? undefined\n };\n } catch {\n return {\n name: ref.name,\n fullPath: ref.fullPath,\n isFolder: false\n };\n }\n })\n );\n\n setFolders(folderItems);\n setFiles(fileItems);\n } catch (e) {\n console.error(\"Storage list error:\", e);\n setError(e instanceof Error ? e.message : String(e));\n } finally {\n setLoading(false);\n }\n }, [storageSource]);\n\n useEffect(() => {\n fetchContents(currentPath);\n }, [currentPath, fetchContents]);\n\n // Navigate to path\n const handleNavigate = useCallback((path: string) => {\n setCurrentPath(path);\n setSelectedFile(null);\n setSelectedDownloadUrl(null);\n }, []);\n\n // Navigate up one level\n const handleNavigateUp = useCallback(() => {\n const parts = currentPath.split(\"/\").filter(Boolean);\n parts.pop();\n handleNavigate(parts.join(\"/\"));\n }, [currentPath, handleNavigate]);\n\n // Select a file for preview\n const handleSelectFile = useCallback(async (file: StorageFile) => {\n setSelectedFile(file);\n if (file.downloadUrl) {\n setSelectedDownloadUrl(file.downloadUrl);\n } else {\n try {\n const config = await storageSource.getSignedUrl(file.fullPath);\n setSelectedDownloadUrl(config.url);\n } catch {\n setSelectedDownloadUrl(null);\n }\n }\n }, [storageSource]);\n\n // Upload files\n const handleUpload = useCallback(async (uploadFiles: File[]) => {\n for (const file of uploadFiles) {\n const key = currentPath ? `${currentPath}/${file.name}` : file.name;\n await storageSource.putObject({\n file,\n key\n });\n }\n snackbarController.open({\n type: \"success\",\n message: `${uploadFiles.length} file${uploadFiles.length > 1 ? \"s\" : \"\"} uploaded successfully`\n });\n fetchContents(currentPath);\n }, [storageSource, currentPath, snackbarController, fetchContents]);\n\n // Delete a file\n const handleDeleteFile = useCallback(async (file: StorageFile) => {\n try {\n await storageSource.deleteObject(file.fullPath);\n snackbarController.open({ type: \"success\",\nmessage: `\"${file.name}\" deleted` });\n setSelectedFile(null);\n setSelectedDownloadUrl(null);\n fetchContents(currentPath);\n } catch (e) {\n snackbarController.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n }, [storageSource, currentPath, snackbarController, fetchContents]);\n\n // Handle refresh\n const handleRefresh = useCallback(() => {\n fetchContents(currentPath);\n }, [currentPath, fetchContents]);\n\n const segments = breadcrumbSegments(currentPath);\n\n // ── Render file grid/list ──\n const renderContents = () => {\n if (loading) {\n return (\n <div className=\"flex-grow flex items-center justify-center\">\n <div className=\"text-center\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"mt-4 text-text-secondary dark:text-text-secondary-dark font-mono tracking-tight animate-pulse\">\n Loading...\n </Typography>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex-grow flex items-center justify-center p-6 overflow-auto\">\n <ErrorView title=\"Error loading storage\" error={error} onRetry={handleRefresh}/>\n </div>\n );\n }\n\n const allItems = [...folders, ...files];\n\n if (allItems.length === 0) {\n return (\n <div className=\"flex-grow flex items-center justify-center text-text-disabled dark:text-text-disabled-dark\">\n <div className=\"text-center\">\n <svg className=\"w-12 h-12 mx-auto mb-4 opacity-50\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1} d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\"/>\n </svg>\n <Typography variant=\"body2\">\n This folder is empty\n </Typography>\n <Button className=\"mt-3\" onClick={() => setUploadDialogOpen(true)}>\n <PlusIcon size={iconSize.smallest}/>\n Upload files\n </Button>\n </div>\n </div>\n );\n }\n\n if (viewMode === \"list\") {\n return (\n <div className=\"flex-grow overflow-auto\">\n <table className=\"w-full\">\n <thead>\n <tr className={cls(\"border-b text-left text-[10px] uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\", defaultBorderMixin)}>\n <th className=\"px-4 py-2 font-bold\">Name</th>\n <th className=\"px-4 py-2 font-bold w-24\">Type</th>\n <th className=\"px-4 py-2 font-bold w-24 text-right\">Size</th>\n </tr>\n </thead>\n <tbody>\n {folders.map(folder => (\n <tr\n key={folder.fullPath}\n className=\"hover:bg-surface-100 dark:hover:bg-surface-950 cursor-pointer transition-colors border-b border-surface-100 dark:border-surface-950/50\"\n onClick={() => handleNavigate(folder.fullPath)}\n >\n <td className=\"px-4 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <FolderIcon size={iconSize.smallest} className=\"text-amber-500 dark:text-amber-400 shrink-0\"/>\n <Typography variant=\"body2\" className=\"text-[13px] font-medium truncate\">\n {folder.name}\n </Typography>\n </div>\n </td>\n <td className=\"px-4 py-2.5\">\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n Folder\n </Typography>\n </td>\n <td className=\"px-4 py-2.5 text-right\">\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark\">\n —\n </Typography>\n </td>\n </tr>\n ))}\n {files.map(file => {\n const FileIconComp = getFileIcon(file.contentType);\n const isSelected = selectedFile?.fullPath === file.fullPath;\n return (\n <tr\n key={file.fullPath}\n className={cls(\n \"cursor-pointer transition-colors border-b border-surface-100 dark:border-surface-950/50\",\n isSelected\n ? \"bg-primary/5 dark:bg-primary/10\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950\"\n )}\n onClick={() => handleSelectFile(file)}\n >\n <td className=\"px-4 py-2.5\">\n <div className=\"flex items-center gap-2\">\n <FileIconComp size={iconSize.smallest} className=\"text-surface-accent-400 shrink-0\"/>\n <Typography variant=\"body2\" className=\"text-[13px] truncate\">\n {file.name}\n </Typography>\n </div>\n </td>\n <td className=\"px-4 py-2.5\">\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {getExtension(file.name) || file.contentType?.split(\"/\")[1]?.toUpperCase() || \"—\"}\n </Typography>\n </td>\n <td className=\"px-4 py-2.5 text-right\">\n <Typography variant=\"caption\" className=\"text-text-secondary dark:text-text-secondary-dark font-mono text-[11px]\">\n {file.size !== undefined ? formatFileSize(file.size) : \"—\"}\n </Typography>\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n }\n\n // Grid view\n return (\n <div className=\"flex-grow overflow-auto p-4\">\n {/* Folder cards */}\n {folders.length > 0 && (\n <div className=\"mb-4\">\n <Typography variant=\"caption\" className=\"text-[10px] uppercase tracking-wider font-bold text-text-disabled dark:text-text-disabled-dark mb-2 block\">\n Folders\n </Typography>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3\">\n {folders.map(folder => (\n <div\n key={folder.fullPath}\n className={cls(\n \"rounded-lg p-3 cursor-pointer transition-all duration-150 border\",\n defaultBorderMixin,\n \"hover:bg-surface-100 dark:hover:bg-surface-950 hover:shadow-sm\",\n \"flex items-center gap-2\"\n )}\n onClick={() => handleNavigate(folder.fullPath)}\n >\n <FolderIcon size={iconSize.smallest} className=\"text-amber-500 dark:text-amber-400 shrink-0\"/>\n <Typography variant=\"body2\" className=\"text-[13px] font-medium truncate\">\n {folder.name}\n </Typography>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* FileIcon cards */}\n {files.length > 0 && (\n <div>\n <Typography variant=\"caption\" className=\"text-[10px] uppercase tracking-wider font-bold text-text-disabled dark:text-text-disabled-dark mb-2 block\">\n Files ({files.length})\n </Typography>\n <div className=\"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 xl:grid-cols-6 gap-3\">\n {files.map(file => {\n const FileIconComp = getFileIcon(file.contentType);\n const ext = getExtension(file.name)?.toLowerCase() || \"\";\n const isImage = file.contentType?.startsWith(\"image/\") || [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"svg\"].includes(ext);\n const isSelected = selectedFile?.fullPath === file.fullPath;\n\n return (\n <div\n key={file.fullPath}\n className={cls(\n \"rounded-lg overflow-hidden cursor-pointer transition-all duration-150 border group\",\n defaultBorderMixin,\n \"hover:shadow-md hover:-translate-y-0.5\",\n isSelected && \"ring-2 ring-primary\"\n )}\n onClick={() => handleSelectFile(file)}\n >\n {/* Thumbnail or icon */}\n <div className=\"aspect-square relative overflow-hidden bg-surface-100 dark:bg-surface-950 flex items-center justify-center\">\n {isImage && file.downloadUrl ? (\n <img\n src={file.downloadUrl}\n alt={file.name}\n className=\"w-full h-full object-cover transition-transform duration-200 group-hover:scale-105\"\n loading=\"lazy\"\n />\n ) : (\n <FileIconComp className=\"text-surface-accent-400 dark:text-surface-accent-500 w-8 h-8\"/>\n )}\n\n {/* Extension badge */}\n {getExtension(file.name) && (\n <div className=\"absolute bottom-1.5 right-1.5 px-1.5 py-0.5 rounded text-[9px] font-bold uppercase bg-black/50 text-white backdrop-blur-sm\">\n {getExtension(file.name)}\n </div>\n )}\n\n {/* Hover overlay */}\n <div className={cls(\n \"absolute inset-0 bg-black/0 group-hover:bg-black/10\",\n \"transition-colors duration-200\"\n )}/>\n </div>\n\n {/* Name & size */}\n <div className=\"p-2.5\">\n <Typography variant=\"body2\" className=\"text-[12px] font-medium truncate text-surface-900 dark:text-white\">\n {file.name}\n </Typography>\n <Typography variant=\"caption\" color=\"secondary\" className=\"truncate block mt-0.5 text-[11px]\">\n {file.size !== undefined ? formatFileSize(file.size) : \"—\"}\n </Typography>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n };\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={180}\n firstPanel={\n <StorageSidebar\n folders={folders}\n currentPath={currentPath}\n onNavigate={handleNavigate}\n loading={loading}\n />\n }\n secondPanel={\n <div className=\"flex h-full w-full\">\n {/* Main content */}\n <div className=\"flex-grow flex flex-col min-w-0 h-full\">\n {/* Toolbar */}\n <div className={cls(\"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950 shrink-0\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-1.5 flex-grow overflow-hidden px-3 py-2\">\n {/* Breadcrumbs */}\n {currentPath && (\n <Tooltip title=\"Go up\">\n <IconButton size=\"small\" onClick={handleNavigateUp}>\n <ArrowLeftIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n )}\n <div className=\"flex items-center gap-0.5 overflow-x-auto no-scrollbar\">\n {segments.map((seg, i) => (\n <React.Fragment key={seg.path}>\n {i > 0 && (\n <Typography variant=\"caption\" className=\"text-text-disabled dark:text-text-disabled-dark mx-0.5\">/</Typography>\n )}\n <Button\n variant=\"text\"\n size=\"small\"\n className={cls(\n \"px-1.5 py-0.5 min-h-0 min-w-0 h-6 text-xs whitespace-nowrap normal-case font-normal\",\n i === segments.length - 1\n ? \"text-text-primary dark:text-text-primary-dark font-medium\"\n : \"text-text-secondary dark:text-text-secondary-dark\"\n )}\n onClick={() => handleNavigate(seg.path)}\n >\n {seg.label}\n </Button>\n </React.Fragment>\n ))}\n </div>\n\n <div className=\"flex-1\"/>\n\n {/* FileIcon count */}\n {!loading && (\n <Chip size=\"small\" className=\"shrink-0 text-[10px]\">\n {files.length} file{files.length !== 1 ? \"s\" : \"\"}\n {folders.length > 0 ? `, ${folders.length} folder${folders.length !== 1 ? \"s\" : \"\"}` : \"\"}\n </Chip>\n )}\n </div>\n\n <div className=\"flex shrink-0 items-center justify-end gap-1.5 pr-1\">\n\n <Tooltip title=\"Grid view\">\n <IconButton\n size=\"small\"\n onClick={() => setViewMode(\"grid\")}\n className={cls(viewMode === \"grid\" && \"bg-surface-100 dark:bg-surface-950\")}\n >\n <LayoutGridIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n <Tooltip title=\"List view\">\n <IconButton\n size=\"small\"\n onClick={() => setViewMode(\"list\")}\n className={cls(viewMode === \"list\" && \"bg-surface-100 dark:bg-surface-950\")}\n >\n <ListIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-0.5\"/>\n\n <Tooltip title=\"Refresh\">\n <IconButton size=\"small\" onClick={handleRefresh} disabled={loading}>\n <RefreshCwIcon size={iconSize.smallest}/>\n </IconButton>\n </Tooltip>\n\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={() => setUploadDialogOpen(true)}\n >\n <UploadCloudIcon size={iconSize.smallest} className=\"mr-1\"/>\n Upload\n </Button>\n </div>\n </div>\n\n {/* FileIcon grid / list */}\n <div className=\"flex-grow flex flex-col overflow-hidden min-h-0\">\n {renderContents()}\n </div>\n\n {/* Status bar */}\n <div className={cls(\"px-4 py-1.5 border-t bg-surface-50 dark:bg-surface-900 flex items-center justify-between shrink-0\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-4 text-[11px]\">\n <span className=\"text-text-disabled dark:text-text-disabled-dark font-bold uppercase tracking-tighter\">\n Path\n </span>\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">\n /{currentPath || \"\"}\n </span>\n </div>\n {selectedFile && (\n <div className=\"text-[11px] text-text-secondary dark:text-text-secondary-dark\">\n Selected: <span className=\"font-mono\">{selectedFile.name}</span>\n </div>\n )}\n </div>\n </div>\n\n {/* Preview panel */}\n {selectedFile && (\n <div className=\"w-80 lg:w-96 shrink-0\">\n <FilePreviewPanel\n file={selectedFile}\n downloadUrl={selectedDownloadUrl}\n onClose={() => {\n setSelectedFile(null);\n setSelectedDownloadUrl(null);\n }}\n onDelete={() => handleDeleteFile(selectedFile)}\n />\n </div>\n )}\n </div>\n }\n />\n\n {/* Upload Dialog */}\n <UploadDialog\n open={uploadDialogOpen}\n currentPath={currentPath}\n onClose={() => setUploadDialogOpen(false)}\n onUpload={handleUpload}\n />\n </div>\n );\n};\n","\nimport React, { useState, useEffect, useRef } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Button, Chip, CircularProgress, IconButton, Card, Paper , iconSize } from \"@rebasepro/ui\";\nimport { PauseIcon, CalendarIcon, RefreshCwIcon, PlayIcon, CheckCircleIcon, AlertCircleIcon, HistoryIcon } from \"lucide-react\";\nimport { useRebaseClient, useSnackbarController } from \"@rebasepro/core\";\nimport type { CronJobStatus, CronJobLogEntry } from \"@rebasepro/types\";\nimport type { RebaseClient } from \"@rebasepro/client\";\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60000) return `${(ms / 1000).toFixed(1)}s`;\n return `${(ms / 60000).toFixed(1)}m`;\n}\n\nfunction formatRelative(iso: string | undefined): string {\n if (!iso) return \"—\";\n const d = new Date(iso);\n const now = Date.now();\n const diff = d.getTime() - now;\n const abs = Math.abs(diff);\n if (abs < 60000) return diff > 0 ? \"in <1m\" : \"<1m ago\";\n if (abs < 3600000) { const m = Math.round(abs / 60000); return diff > 0 ? `in ${m}m` : `${m}m ago`; }\n if (abs < 86400000) { const h = Math.round(abs / 3600000); return diff > 0 ? `in ${h}h` : `${h}h ago`; }\n return d.toLocaleString();\n}\n\nconst stateColors: Record<string, string> = {\n idle: \"bg-emerald-500\",\nrunning: \"bg-blue-500\",\nsuccess: \"bg-emerald-500\",\n error: \"bg-red-500\",\ndisabled: \"bg-surface-400\"\n};\n\nexport function CronJobsView() {\n const client = useRebaseClient<RebaseClient>();\n const snackbar = useSnackbarController();\n const [jobs, setJobs] = useState<CronJobStatus[]>([]);\n const [loading, setLoading] = useState(true);\n const [selectedId, setSelectedId] = useState<string | null>(null);\n const [logs, setLogs] = useState<CronJobLogEntry[]>([]);\n const [logsLoading, setLogsLoading] = useState(false);\n const [triggering, setTriggering] = useState<string | null>(null);\n\n // Refs so effects never re-fire due to identity changes\n const clientRef = useRef(client);\n clientRef.current = client;\n const snackbarRef = useRef(snackbar);\n snackbarRef.current = snackbar;\n\n // ── Fetch jobs on mount + poll every 15s ──\n useEffect(() => {\n let cancelled = false;\n\n async function load() {\n const c = clientRef.current;\n if (!c?.cron) {\n setLoading(false);\n return;\n }\n try {\n const res = await c.cron.listJobs();\n if (!cancelled) setJobs(res.jobs);\n } catch (e: unknown) {\n if (!cancelled) {\n snackbarRef.current.open({\n type: \"error\",\n message: e instanceof Error ? e.message : String(e)\n });\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n load();\n const t = setInterval(load, 15_000);\n return () => { cancelled = true; clearInterval(t); };\n }, []); // runs once\n\n // ── Fetch logs when selection changes ──\n useEffect(() => {\n if (!selectedId) {\n setLogs([]);\n return;\n }\n let cancelled = false;\n const c = clientRef.current;\n if (!c?.cron) return;\n\n setLogsLoading(true);\n c.cron.getJobLogs(selectedId, { limit: 25 })\n .then(res => { if (!cancelled) setLogs(res.logs); })\n .catch(() => { if (!cancelled) setLogs([]); })\n .finally(() => { if (!cancelled) setLogsLoading(false); });\n\n return () => { cancelled = true; };\n }, [selectedId]);\n\n // ── Imperative helpers (not in any dep array) ──\n async function refreshJobs() {\n const c = clientRef.current;\n if (!c?.cron) return;\n try {\n const res = await c.cron.listJobs();\n setJobs(res.jobs);\n } catch { /* swallow */ }\n }\n\n async function refreshLogs(id: string) {\n const c = clientRef.current;\n if (!c?.cron) return;\n setLogsLoading(true);\n try {\n const res = await c.cron.getJobLogs(id, { limit: 25 });\n setLogs(res.logs);\n } catch { setLogs([]); }\n finally { setLogsLoading(false); }\n }\n\n const handleTrigger = async (id: string) => {\n const c = clientRef.current;\n if (!c?.cron) return;\n setTriggering(id);\n try {\n await c.cron.triggerJob(id);\n snackbarRef.current.open({ type: \"success\",\nmessage: \"Job triggered\" });\n await refreshJobs();\n if (selectedId === id) refreshLogs(id);\n } catch (e: unknown) {\n snackbarRef.current.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n } finally { setTriggering(null); }\n };\n\n const handleToggle = async (id: string, enabled: boolean) => {\n const c = clientRef.current;\n if (!c?.cron) return;\n try {\n await c.cron.toggleJob(id, enabled);\n snackbarRef.current.open({ type: \"success\",\nmessage: enabled ? \"Job enabled\" : \"Job paused\" });\n await refreshJobs();\n } catch (e: unknown) {\n snackbarRef.current.open({ type: \"error\",\nmessage: e instanceof Error ? e.message : String(e) });\n }\n };\n\n const selectedJob = jobs.find(j => j.id === selectedId);\n\n if (loading) return <div className=\"flex items-center justify-center h-full\"><CircularProgress/></div>;\n\n if (jobs.length === 0) return (\n <div className=\"flex flex-col items-center justify-center h-full gap-4 text-center p-8\">\n <CalendarIcon size={iconSize.medium} className=\"text-surface-300 dark:text-surface-600\"/>\n <Typography variant=\"h6\" color=\"secondary\">No Cron Jobs Registered</Typography>\n <Typography variant=\"body2\" color=\"disabled\" className=\"max-w-md\">\n Create a file in your <code className=\"text-xs bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded font-mono\">crons/</code> directory that default-exports a <code className=\"text-xs bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded font-mono\">CronJobDefinition</code>.\n </Typography>\n </div>\n );\n\n return (\n <div className=\"flex h-full w-full overflow-hidden bg-white dark:bg-surface-950\">\n {/* ── Job List ── */}\n <div className={cls(\"flex flex-col w-[340px] min-w-[280px] border-r h-full\", defaultBorderMixin)}>\n <div className={cls(\"flex items-center justify-between px-4 py-2.5 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-2\">\n <CalendarIcon size={iconSize.smallest} className=\"text-primary\"/>\n <Typography variant=\"subtitle2\" className=\"font-semibold\">Cron Jobs</Typography>\n <Chip size=\"smallest\" className=\"bg-surface-200 dark:bg-surface-700 text-surface-600 dark:text-surface-300\">{jobs.length}</Chip>\n </div>\n <IconButton size=\"small\" onClick={refreshJobs} title=\"Refresh\"><RefreshCwIcon size={iconSize.smallest}/></IconButton>\n </div>\n <div className=\"flex-1 overflow-y-auto p-2 space-y-1\">\n {jobs.map(job => (\n <div\n key={job.id}\n onClick={() => setSelectedId(job.id)}\n className={cls(\n \"flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-all\",\n selectedId === job.id\n ? \"bg-primary/10 dark:bg-primary/15 ring-1 ring-primary/30\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950\"\n )}\n >\n <div className={cls(\"w-2 h-2 rounded-full shrink-0\", stateColors[job.state] || \"bg-surface-400\")}/>\n <div className=\"flex-1 min-w-0\">\n <Typography variant=\"body2\" className=\"truncate font-medium text-[13px]\">{job.name}</Typography>\n <Typography variant=\"caption\" color=\"secondary\" className=\"truncate text-[11px] font-mono\">{job.schedule}</Typography>\n </div>\n {job.state === \"running\" && <CircularProgress size=\"smallest\"/>}\n </div>\n ))}\n </div>\n </div>\n\n {/* ── Detail Panel ── */}\n <div className=\"flex-1 flex flex-col min-w-0 h-full overflow-hidden\">\n {!selectedJob ? (\n <div className=\"flex items-center justify-center h-full\">\n <Typography variant=\"body2\" color=\"disabled\">Select a cron job to view details</Typography>\n </div>\n ) : (\n <>\n {/* Header */}\n <div className={cls(\"flex items-center justify-between px-5 py-3 border-b bg-white dark:bg-surface-950 min-h-[56px]\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className={cls(\"w-2.5 h-2.5 rounded-full\", stateColors[selectedJob.state])}/>\n <div className=\"min-w-0\">\n <Typography variant=\"subtitle1\" className=\"font-semibold truncate\">{selectedJob.name}</Typography>\n {selectedJob.description && <Typography variant=\"caption\" color=\"secondary\" className=\"truncate\">{selectedJob.description}</Typography>}\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <IconButton title={selectedJob.enabled ? \"Pause job\" : \"Enable job\"} size=\"small\" onClick={() => handleToggle(selectedJob.id, !selectedJob.enabled)}>\n {selectedJob.enabled ? <PauseIcon size={iconSize.small}/> : <PlayIcon size={iconSize.smallest}/>}\n </IconButton>\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={() => handleTrigger(selectedJob.id)}\n disabled={triggering === selectedJob.id}\n startIcon={triggering === selectedJob.id ? <CircularProgress size=\"smallest\"/> : <PlayIcon size={iconSize.smallest}/>}\n >\n Run Now\n </Button>\n </div>\n </div>\n\n {/* Stats Cards */}\n <div className=\"px-5 py-4 bg-surface-50 dark:bg-surface-900/50\">\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-3\">\n <StatCard label=\"Schedule\" value={selectedJob.schedule} mono/>\n <StatCard label=\"Last Run\" value={formatRelative(selectedJob.lastRunAt)}/>\n <StatCard label=\"Next Run\" value={selectedJob.enabled ? formatRelative(selectedJob.nextRunAt) : \"Paused\"}/>\n <StatCard label=\"Duration\" value={selectedJob.lastDurationMs !== undefined ? formatDuration(selectedJob.lastDurationMs) : \"—\"}/>\n </div>\n <div className=\"grid grid-cols-3 gap-3 mt-3\">\n <StatCard label=\"Status\" value={selectedJob.state.toUpperCase()} chipColor={selectedJob.state === \"error\" ? \"red\" : selectedJob.state === \"disabled\" ? \"gray\" : \"green\"}/>\n <StatCard label=\"Total Runs\" value={String(selectedJob.totalRuns)}/>\n <StatCard label=\"Failures\" value={String(selectedJob.totalFailures)} highlight={selectedJob.totalFailures > 0}/>\n </div>\n {selectedJob.lastError && (\n <div className=\"mt-3 p-3 rounded-lg bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800/50\">\n <div className=\"flex items-center gap-2 mb-1\">\n <AlertCircleIcon size={iconSize.smallest} className=\"text-red-500\"/>\n <Typography variant=\"caption\" className=\"font-semibold text-red-700 dark:text-red-400\">Last Error</Typography>\n </div>\n <Typography variant=\"caption\" className=\"font-mono text-red-600 dark:text-red-300 text-[11px] break-all\">{selectedJob.lastError}</Typography>\n </div>\n )}\n </div>\n\n {/* Logs Section */}\n <div className={cls(\"flex items-center justify-between px-5 py-2 border-y bg-white dark:bg-surface-950\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-2\">\n <HistoryIcon size={iconSize.smallest} className=\"text-surface-400\"/>\n <Typography variant=\"subtitle2\" className=\"font-semibold text-[13px]\">Execution History</Typography>\n </div>\n <IconButton size=\"small\" onClick={() => refreshLogs(selectedJob.id)} title=\"Refresh logs\"><RefreshCwIcon size={iconSize.smallest}/></IconButton>\n </div>\n <div className=\"flex-1 overflow-y-auto\">\n {logsLoading ? (\n <div className=\"flex justify-center p-8\"><CircularProgress size=\"small\"/></div>\n ) : logs.length === 0 ? (\n <div className=\"flex items-center justify-center h-32\">\n <Typography variant=\"body2\" color=\"disabled\">No executions yet</Typography>\n </div>\n ) : (\n <div className=\"divide-y divide-surface-100 dark:divide-surface-950\">\n {logs.map((log, idx) => (\n <LogRow key={idx} log={log}/>\n ))}\n </div>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n );\n}\n\nfunction StatCard({ label, value, mono, chipColor, highlight }: {\n label: string; value: string; mono?: boolean; chipColor?: string; highlight?: boolean;\n}) {\n return (\n <div className={cls(\"px-3 py-2 rounded-lg border bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <Typography variant=\"caption\" color=\"secondary\" className=\"text-[10px] uppercase tracking-wider font-medium\">{label}</Typography>\n <Typography variant=\"body2\" className={cls(\n \"mt-0.5 font-semibold text-[13px]\",\n mono && \"font-mono\",\n highlight && \"text-red-500 dark:text-red-400\",\n chipColor === \"red\" && \"text-red-500\",\n chipColor === \"green\" && \"text-emerald-500\",\n chipColor === \"gray\" && \"text-surface-400\"\n )}>{value}</Typography>\n </div>\n );\n}\n\nfunction LogRow({ log }: { log: CronJobLogEntry }) {\n const [expanded, setExpanded] = useState(false);\n return (\n <div className=\"px-5 py-2.5 hover:bg-surface-50 dark:hover:bg-surface-950/50 transition-colors\">\n <div className=\"flex items-center gap-3 cursor-pointer\" onClick={() => setExpanded(!expanded)}>\n {log.success\n ? <CheckCircleIcon size={iconSize.smallest} className=\"text-emerald-500 shrink-0\"/>\n : <AlertCircleIcon size={iconSize.smallest} className=\"text-red-500 shrink-0\"/>}\n <div className=\"flex-1 min-w-0\">\n <Typography variant=\"caption\" className=\"font-mono text-[11px] text-surface-500\">{new Date(log.startedAt).toLocaleString()}</Typography>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n {log.manual && <Chip size=\"smallest\" className=\"bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-300\">manual</Chip>}\n <Typography variant=\"caption\" className=\"font-mono text-[11px]\">{formatDuration(log.durationMs)}</Typography>\n <svg className={cls(\"w-3 h-3 transition-transform text-surface-400\", expanded && \"rotate-180\")} fill=\"currentColor\" viewBox=\"0 0 20 20\"><path d=\"M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z\"/></svg>\n </div>\n </div>\n {expanded && (\n <div className=\"mt-2 ml-6 space-y-2\">\n {log.error && (\n <div className=\"p-2 rounded bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800/50\">\n <Typography variant=\"caption\" className=\"font-mono text-[11px] text-red-600 dark:text-red-300 break-all\">{log.error}</Typography>\n </div>\n )}\n {log.logs.length > 0 && (\n <div className=\"p-2 rounded bg-surface-50 dark:bg-surface-900 border border-surface-200 dark:border-surface-700 max-h-40 overflow-auto\">\n {log.logs.map((line, i) => (\n <div key={i} className=\"font-mono text-[11px] text-surface-600 dark:text-surface-400 leading-relaxed\">{line}</div>\n ))}\n </div>\n )}\n {log.result !== undefined && (\n <div className=\"p-2 rounded bg-surface-50 dark:bg-surface-900 border border-surface-200 dark:border-surface-700\">\n <Typography variant=\"caption\" className=\"text-[10px] uppercase tracking-wider text-surface-400 mb-1 block\">Result</Typography>\n <pre className=\"font-mono text-[11px] text-surface-600 dark:text-surface-400 whitespace-pre-wrap break-all\">{JSON.stringify(log.result, null, 2)}</pre>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import dagre from \"dagre\";\nimport type { Node, Edge } from \"@xyflow/react\";\n\n// ─── Layout Constants ─────────────────────────────────────────────────\nexport const NODE_WIDTH = 280;\n/** Header with a single line of text (junction tables or tableName === collectionName). */\nexport const HEADER_HEIGHT_SINGLE = 33;\n/** Header with two lines (name + subtitle when collectionName !== tableName). */\nexport const HEADER_HEIGHT_DOUBLE = 47;\nconst ROW_HEIGHT = 28; // height per column row\n\n/**\n * Compute the correct header height for a table node.\n */\nexport const getHeaderHeight = (opts: {\n isJunction: boolean;\n collectionName: string;\n tableName: string;\n}): number => {\n if (opts.isJunction) return HEADER_HEIGHT_SINGLE;\n return opts.collectionName !== opts.tableName\n ? HEADER_HEIGHT_DOUBLE\n : HEADER_HEIGHT_SINGLE;\n};\n\n/**\n * Estimate the pixel height of a table node based on column count.\n */\nexport const estimateNodeHeight = (columnCount: number, headerHeight: number = HEADER_HEIGHT_DOUBLE): number =>\n headerHeight + Math.max(columnCount, 1) * ROW_HEIGHT + 4; // +4 for bottom padding\n\n/**\n * Get the vertical center Y of a specific column row (0-indexed)\n * relative to the top of the node.\n */\nexport const getColumnRowY = (rowIndex: number, headerHeight: number = HEADER_HEIGHT_DOUBLE): number =>\n headerHeight + rowIndex * ROW_HEIGHT + ROW_HEIGHT / 2;\n\n// ─── Auto-Layout via Dagre ────────────────────────────────────────────\n\nexport type LayoutDirection = \"TB\" | \"LR\";\n\n/**\n * Compute node positions using the dagre graph layout engine.\n * Returns a new array of nodes with updated `position`.\n */\nexport const getLayoutedElements = (\n nodes: Node[],\n edges: Edge[],\n direction: LayoutDirection = \"LR\"\n): { nodes: Node[]; edges: Edge[] } => {\n const g = new dagre.graphlib.Graph();\n g.setGraph({\n rankdir: direction,\n nodesep: 100,\n ranksep: 180,\n edgesep: 60,\n marginx: 60,\n marginy: 60\n });\n g.setDefaultEdgeLabel(() => ({}));\n\n const nodeHeights = new Map<string, number>();\n\n nodes.forEach((node) => {\n const data = node.data as { columns?: unknown[]; isJunction?: boolean; collectionName?: string; tableName?: string };\n const columnCount = data.columns?.length ?? 3;\n const headerH = getHeaderHeight({\n isJunction: Boolean(data.isJunction),\n collectionName: data.collectionName ?? \"\",\n tableName: data.tableName ?? \"\"\n });\n const h = estimateNodeHeight(columnCount, headerH);\n nodeHeights.set(node.id, h);\n g.setNode(node.id, {\n width: NODE_WIDTH,\n height: h\n });\n });\n\n edges.forEach((edge) => {\n g.setEdge(edge.source, edge.target);\n });\n\n dagre.layout(g);\n\n const layoutedNodes = nodes.map((node) => {\n const nodeWithPosition = g.node(node.id);\n const h = nodeHeights.get(node.id) ?? estimateNodeHeight(3);\n return {\n ...node,\n data: {\n ...node.data,\n layoutDirection: direction\n },\n position: {\n x: nodeWithPosition.x - NODE_WIDTH / 2,\n y: nodeWithPosition.y - h / 2\n }\n };\n });\n\n return { nodes: layoutedNodes,\nedges };\n};\n\n// ─── Column type → display label ──────────────────────────────────────\n\nconst TYPE_LABELS: Record<string, string> = {\n string: \"varchar\",\n number: \"integer\",\n boolean: \"boolean\",\n date: \"timestamp\",\n map: \"jsonb\",\n array: \"jsonb\",\n relation: \"FK\"\n};\n\nexport const getTypeLabel = (type: string): string =>\n TYPE_LABELS[type] ?? type;\n\n// ─── Edge styling by relation type ────────────────────────────────────\n\nexport interface RelationEdgeData {\n cardinality: \"one\" | \"many\";\n direction: \"owning\" | \"inverse\";\n relationName: string;\n hasJunction: boolean;\n hasJoinPath: boolean;\n label: string;\n}\n\nexport const getCardinalityLabel = (\n cardinality: \"one\" | \"many\",\n direction: \"owning\" | \"inverse\"\n): string => {\n if (cardinality === \"many\") return \"M:N\";\n if (direction === \"inverse\") return \"1:1 ←\";\n return \"N:1\";\n};\n","import { useMemo, useState, useCallback, useEffect } from \"react\";\nimport type { Node, Edge } from \"@xyflow/react\";\nimport { MarkerType } from \"@xyflow/react\";\nimport { isPostgresCollection } from \"@rebasepro/types\";\nimport type { EntityCollection, PostgresCollection, Relation } from \"@rebasepro/types\";\nimport { resolveCollectionRelations } from \"@rebasepro/common\";\nimport { getLayoutedElements, getCardinalityLabel, getTypeLabel, NODE_WIDTH } from \"./schema-visualizer.utils\";\nimport type { LayoutDirection, RelationEdgeData } from \"./schema-visualizer.utils\";\n\n// ─── Column info extracted from a collection ──────────────────────────\n\nexport interface ColumnInfo {\n name: string;\n type: string;\n typeLabel: string;\n isPrimaryKey: boolean;\n isForeignKey: boolean;\n isRequired: boolean;\n isEnum: boolean;\n enumValues?: string[];\n relationName?: string;\n}\n\n// ─── Node data shape ──────────────────────────────────────────────────\n\nexport interface TableNodeData {\n tableName: string;\n collectionName: string;\n slug: string;\n columns: ColumnInfo[];\n isJunction: boolean;\n isUnmanaged: boolean;\n rlsEnabled: boolean;\n historyEnabled: boolean;\n icon?: string;\n [key: string]: unknown;\n}\n\n// ─── Extract columns from an EntityCollection ─────────────────────────\n\nconst extractColumns = (collection: EntityCollection): ColumnInfo[] => {\n const columns: ColumnInfo[] = [];\n const properties = collection.properties ?? {};\n\n for (const [propName, prop] of Object.entries(properties)) {\n if (prop.type === \"relation\") continue; // Relations are shown as edges, not columns\n\n const isPk =\n (\"isId\" in prop && Boolean((prop as unknown as Record<string, unknown>).isId)) ||\n (!Object.values(properties).some(\n (p) => \"isId\" in p && Boolean((p as unknown as Record<string, unknown>).isId)\n ) &&\n propName === \"id\");\n\n const isEnum = prop.type === \"string\" && \"enum\" in prop && Boolean(prop.enum);\n\n let enumValues: string[] | undefined;\n if (isEnum && \"enum\" in prop && prop.enum) {\n const enumProp = prop.enum;\n if (Array.isArray(enumProp)) {\n enumValues = enumProp.map((v: unknown) =>\n typeof v === \"string\" ? v : String((v as Record<string, unknown>)?.id ?? v)\n );\n } else if (typeof enumProp === \"object\" && enumProp !== null) {\n enumValues = Object.keys(enumProp);\n }\n }\n\n columns.push({\n name: propName,\n type: prop.type,\n typeLabel: getTypeLabel(prop.type),\n isPrimaryKey: isPk,\n isForeignKey: false,\n isRequired: Boolean(prop.validation?.required),\n isEnum,\n enumValues\n });\n }\n\n // Add FK columns from owning relations\n if (isPostgresCollection(collection)) {\n try {\n const resolvedRelations = resolveCollectionRelations(collection);\n for (const rel of Object.values(resolvedRelations)) {\n if (rel.direction === \"owning\" && rel.cardinality === \"one\" && rel.localKey) {\n // Only add if not already present as a regular column\n if (!columns.some((c) => c.name === rel.localKey)) {\n columns.push({\n name: rel.localKey,\n type: \"number\",\n typeLabel: \"FK\",\n isPrimaryKey: false,\n isForeignKey: true,\n isRequired: false,\n isEnum: false,\n relationName: rel.relationName\n });\n } else {\n // Mark existing column as FK\n const existing = columns.find((c) => c.name === rel.localKey);\n if (existing) {\n existing.isForeignKey = true;\n existing.relationName = rel.relationName;\n }\n }\n }\n }\n } catch {\n // Ignore resolution errors\n }\n }\n\n return columns;\n};\n\n// ─── Build graph from collections ─────────────────────────────────────\n\nconst buildGraph = (\n collections: EntityCollection[],\n direction: LayoutDirection\n): { nodes: Node[]; edges: Edge[] } => {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n const tableToNodeId = new Map<string, string>();\n // Track columns per node so we can resolve handle IDs for edges\n const nodeColumns = new Map<string, ColumnInfo[]>();\n\n // Helper: find the PK column name for a node (falls back to \"id\")\n const getPkHandle = (nodeId: string): string => {\n const cols = nodeColumns.get(nodeId);\n const pk = cols?.find((c) => c.isPrimaryKey);\n return pk ? `target-${pk.name}` : \"target-default\";\n };\n\n // Helper: find the FK column name for a node pointing to a relation\n const getFkHandle = (nodeId: string, localKey: string | undefined): string => {\n if (!localKey) return \"source-default\";\n const cols = nodeColumns.get(nodeId);\n const fk = cols?.find((c) => c.name === localKey);\n return fk ? `source-${fk.name}` : \"source-default\";\n };\n\n // 1. Create nodes for each collection\n for (const collection of collections) {\n if (!isPostgresCollection(collection)) continue;\n\n const tableName = collection.table ?? collection.slug;\n const nodeId = `table-${tableName}`;\n tableToNodeId.set(tableName, nodeId);\n\n const columns = extractColumns(collection);\n nodeColumns.set(nodeId, columns);\n\n const nodeData: TableNodeData = {\n tableName,\n collectionName: collection.name,\n slug: collection.slug,\n columns,\n isJunction: false,\n isUnmanaged: false,\n rlsEnabled: Boolean(collection.securityRules && collection.securityRules.length > 0),\n historyEnabled: Boolean(collection.history),\n icon: typeof collection.icon === \"string\" ? collection.icon : undefined\n };\n\n nodes.push({\n id: nodeId,\n type: \"tableNode\",\n position: { x: 0,\ny: 0 },\n data: nodeData\n });\n }\n\n // 2. Create junction table nodes and edges\n const processedJunctions = new Set<string>();\n\n for (const collection of collections) {\n if (!isPostgresCollection(collection)) continue;\n\n const tableName = collection.table ?? collection.slug;\n const sourceNodeId = tableToNodeId.get(tableName);\n if (!sourceNodeId) continue;\n\n let resolvedRelations: Record<string, Relation>;\n try {\n resolvedRelations = resolveCollectionRelations(collection);\n } catch {\n continue;\n }\n\n for (const [relationKey, rel] of Object.entries(resolvedRelations)) {\n let targetCollection: EntityCollection;\n try {\n targetCollection = rel.target();\n } catch {\n continue;\n }\n\n if (!isPostgresCollection(targetCollection)) continue;\n\n const targetTable = targetCollection.table ?? targetCollection.slug;\n const targetNodeId = tableToNodeId.get(targetTable);\n if (!targetNodeId) continue;\n\n // Skip inverse relations (we only draw owning ones)\n if (rel.direction === \"inverse\") continue;\n\n const edgeData: RelationEdgeData = {\n cardinality: rel.cardinality,\n direction: rel.direction ?? \"owning\",\n relationName: rel.relationName ?? relationKey,\n hasJunction: Boolean(rel.through),\n hasJoinPath: Boolean(rel.joinPath),\n label: getCardinalityLabel(rel.cardinality, rel.direction ?? \"owning\")\n };\n\n if (rel.through && !processedJunctions.has(rel.through.table)) {\n // Many-to-many: create junction node + two edges\n processedJunctions.add(rel.through.table);\n const junctionNodeId = `junction-${rel.through.table}`;\n\n const junctionColumns: ColumnInfo[] = [\n {\n name: rel.through.sourceColumn,\n type: \"number\",\n typeLabel: \"FK\",\n isPrimaryKey: true,\n isForeignKey: true,\n isRequired: true,\n isEnum: false\n },\n {\n name: rel.through.targetColumn,\n type: \"number\",\n typeLabel: \"FK\",\n isPrimaryKey: true,\n isForeignKey: true,\n isRequired: true,\n isEnum: false\n }\n ];\n nodeColumns.set(junctionNodeId, junctionColumns);\n\n nodes.push({\n id: junctionNodeId,\n type: \"tableNode\",\n position: { x: 0,\ny: 0 },\n data: {\n tableName: rel.through.table,\n collectionName: rel.through.table,\n slug: rel.through.table,\n columns: junctionColumns,\n isJunction: true,\n isUnmanaged: false,\n rlsEnabled: false,\n historyEnabled: false\n } satisfies TableNodeData\n });\n\n // Source table → junction (junction references source PK)\n const sourcePk = nodeColumns.get(sourceNodeId)?.find((c) => c.isPrimaryKey);\n edges.push({\n id: `edge-${sourceNodeId}-${junctionNodeId}`,\n source: sourceNodeId,\n target: junctionNodeId,\n sourceHandle: sourcePk ? `source-${sourcePk.name}` : \"source-default\",\n targetHandle: `target-${rel.through.sourceColumn}`,\n type: \"relationEdge\",\n data: { ...edgeData,\nlabel: \"1:N\" } as Record<string, unknown>,\n markerEnd: { type: MarkerType.ArrowClosed,\nwidth: 16,\nheight: 16 }\n });\n\n // Junction → target table\n edges.push({\n id: `edge-${junctionNodeId}-${targetNodeId}`,\n source: junctionNodeId,\n target: targetNodeId,\n sourceHandle: `source-${rel.through.targetColumn}`,\n targetHandle: getPkHandle(targetNodeId),\n type: \"relationEdge\",\n data: { ...edgeData,\nlabel: \"N:1\" } as Record<string, unknown>,\n markerEnd: { type: MarkerType.ArrowClosed,\nwidth: 16,\nheight: 16 }\n });\n } else if (!rel.through) {\n // Direct relation (one-to-one or many-to-one)\n edges.push({\n id: `edge-${sourceNodeId}-${targetNodeId}-${relationKey}`,\n source: sourceNodeId,\n target: targetNodeId,\n sourceHandle: getFkHandle(sourceNodeId, rel.localKey),\n targetHandle: getPkHandle(targetNodeId),\n type: \"relationEdge\",\n data: { ...edgeData } as Record<string, unknown>,\n markerEnd: { type: MarkerType.ArrowClosed,\nwidth: 16,\nheight: 16 }\n });\n }\n }\n }\n // 3. Apply dagre layout first to get node positions\n const layoutResult = getLayoutedElements(nodes, edges, direction);\n\n // 4. Build a position lookup from the laid-out nodes\n const nodePositions = new Map<string, { x: number }>();\n for (const node of layoutResult.nodes) {\n nodePositions.set(node.id, { x: node.position.x });\n }\n\n // 5. Resolve handle sides based on relative node positions.\n // If source is left of target → source exits Right, target enters Left.\n // If source is right of target → source exits Left, target enters Right.\n for (const edge of layoutResult.edges) {\n const srcPos = nodePositions.get(edge.source);\n const tgtPos = nodePositions.get(edge.target);\n\n const srcBaseHandle = (edge.sourceHandle ?? \"source-default\") as string;\n const tgtBaseHandle = (edge.targetHandle ?? \"target-default\") as string;\n\n if (srcPos && tgtPos) {\n const srcCenterX = srcPos.x + NODE_WIDTH / 2;\n const tgtCenterX = tgtPos.x + NODE_WIDTH / 2;\n const sourceIsLeft = srcCenterX <= tgtCenterX;\n\n edge.sourceHandle = `${srcBaseHandle}-${sourceIsLeft ? \"right\" : \"left\"}`;\n edge.targetHandle = `${tgtBaseHandle}-${sourceIsLeft ? \"left\" : \"right\"}`;\n } else {\n edge.sourceHandle = `${srcBaseHandle}-right`;\n edge.targetHandle = `${tgtBaseHandle}-left`;\n }\n }\n\n return layoutResult;\n};\n\n// ─── Hook ─────────────────────────────────────────────────────────────\n\nexport interface UseSchemaGraphResult {\n nodes: Node[];\n edges: Edge[];\n direction: LayoutDirection;\n setDirection: (dir: LayoutDirection) => void;\n relayout: () => void;\n isLoading: boolean;\n tableCount: number;\n relationCount: number;\n}\n\nexport const useSchemaGraph = (\n collections: EntityCollection[] | undefined\n): UseSchemaGraphResult => {\n const [direction, setDirection] = useState<LayoutDirection>(\"LR\");\n const [version, setVersion] = useState(0);\n\n const relayout = useCallback(() => setVersion((v) => v + 1), []);\n\n // Re-layout on direction change\n useEffect(() => {\n setVersion((v) => v + 1);\n }, [direction]);\n\n const { nodes, edges, tableCount, relationCount } = useMemo(() => {\n if (!collections || collections.length === 0) {\n return { nodes: [],\nedges: [],\ntableCount: 0,\nrelationCount: 0 };\n }\n const result = buildGraph(collections, direction);\n return {\n ...result,\n tableCount: result.nodes.length,\n relationCount: result.edges.length\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [collections, direction, version]);\n\n return {\n nodes,\n edges,\n direction,\n setDirection,\n relayout,\n isLoading: !collections,\n tableCount,\n relationCount\n };\n};\n","import React, { memo, useMemo } from \"react\";\nimport { Handle, Position } from \"@xyflow/react\";\nimport type { NodeProps } from \"@xyflow/react\";\nimport { Typography, Chip, Tooltip, cls } from \"@rebasepro/ui\";\nimport { IconForView } from \"@rebasepro/core\";\nimport type { TableNodeData, ColumnInfo } from \"./useSchemaGraph\";\nimport { getColumnRowY, getHeaderHeight } from \"./schema-visualizer.utils\";\n\n/**\n * Custom React Flow node that renders a database table as a card.\n *\n * Every PK and FK column renders handles on BOTH Left and Right sides.\n * The edge builder picks which side to use based on relative node position.\n */\nconst TableNodeInner = ({ data, selected }: NodeProps) => {\n const {\n tableName,\n collectionName,\n columns,\n isJunction,\n rlsEnabled,\n historyEnabled,\n icon\n } = data as TableNodeData;\n\n // Build handles: every PK/FK column gets Left + Right handles\n const handles = useMemo(() => {\n const result: { id: string; type: \"source\" | \"target\"; position: Position; top: number }[] = [];\n const cols = columns as ColumnInfo[];\n const headerH = getHeaderHeight({\n isJunction: Boolean(isJunction),\n collectionName: collectionName as string,\n tableName: tableName as string\n });\n const midY = cols.length > 0 ? getColumnRowY(Math.floor(cols.length / 2), headerH) : 30;\n\n cols.forEach((col, idx) => {\n const y = getColumnRowY(idx, headerH);\n\n if (col.isForeignKey && !col.isPrimaryKey) {\n // FK: source handles on both sides\n result.push({ id: `source-${col.name}-right`,\ntype: \"source\",\nposition: Position.Right,\ntop: y });\n result.push({ id: `source-${col.name}-left`,\ntype: \"source\",\nposition: Position.Left,\ntop: y });\n }\n if (col.isPrimaryKey) {\n // PK: target + source handles on both sides\n result.push({ id: `target-${col.name}-right`,\ntype: \"target\",\nposition: Position.Right,\ntop: y });\n result.push({ id: `target-${col.name}-left`,\ntype: \"target\",\nposition: Position.Left,\ntop: y });\n result.push({ id: `source-${col.name}-right`,\ntype: \"source\",\nposition: Position.Right,\ntop: y });\n result.push({ id: `source-${col.name}-left`,\ntype: \"source\",\nposition: Position.Left,\ntop: y });\n }\n });\n\n // Default handles on both sides\n result.push({ id: \"target-default-right\",\ntype: \"target\",\nposition: Position.Right,\ntop: midY });\n result.push({ id: \"target-default-left\",\ntype: \"target\",\nposition: Position.Left,\ntop: midY });\n result.push({ id: \"source-default-right\",\ntype: \"source\",\nposition: Position.Right,\ntop: midY });\n result.push({ id: \"source-default-left\",\ntype: \"source\",\nposition: Position.Left,\ntop: midY });\n\n return result;\n }, [columns, isJunction, collectionName, tableName]);\n\n return (\n <div\n className={cls(\n \"relative rounded-lg border bg-white dark:bg-surface-900 shadow-sm transition-all duration-200 min-w-[240px] max-w-[320px]\",\n selected\n ? \"border-primary ring-2 ring-primary/20 shadow-md\"\n : \"border-surface-200/40 dark:border-surface-700/40 hover:shadow-md hover:border-surface-300 dark:hover:border-surface-600\",\n isJunction && \"border-dashed\"\n )}\n >\n {/* ── Header ── */}\n <div\n className={cls(\n \"flex items-center gap-2 px-3 py-2 border-b rounded-t-lg\",\n isJunction\n ? \"bg-surface-50 dark:bg-surface-950/50 border-surface-200/30 dark:border-surface-700/30\"\n : \"bg-surface-50 dark:bg-surface-950 border-surface-200/40 dark:border-surface-700/40\"\n )}\n >\n {icon && !isJunction && (\n <div className=\"text-primary shrink-0\">\n <IconForView\n collectionOrView={{ slug: tableName,\nname: collectionName,\nicon }}\n size=\"smallest\"\n />\n </div>\n )}\n {isJunction && (\n <svg\n className=\"w-3.5 h-3.5 text-text-disabled dark:text-text-disabled-dark shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4\"\n />\n </svg>\n )}\n <div className=\"flex flex-col min-w-0\">\n <Typography\n variant=\"caption\"\n className={cls(\n \"font-semibold truncate text-[12px]\",\n isJunction\n ? \"text-text-secondary dark:text-text-secondary-dark\"\n : \"text-text-primary dark:text-text-primary-dark\"\n )}\n >\n {tableName}\n </Typography>\n {collectionName !== tableName && !isJunction && (\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark truncate\"\n >\n {collectionName}\n </Typography>\n )}\n </div>\n\n {/* Badges */}\n <div className=\"ml-auto flex items-center gap-1 shrink-0\">\n {rlsEnabled && (\n <Tooltip title=\"RLS enabled\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n </Tooltip>\n )}\n {historyEnabled && (\n <Tooltip title=\"History enabled\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-blue-400\"/>\n </Tooltip>\n )}\n </div>\n </div>\n\n {/* ── Columns ── */}\n <div className=\"divide-y divide-surface-100 dark:divide-surface-950/60\">\n {(columns as ColumnInfo[]).map((col: ColumnInfo) => (\n <div\n key={col.name}\n className={cls(\n \"flex items-center gap-2 px-3 py-1.5 text-xs transition-colors\",\n col.isPrimaryKey && \"bg-amber-50/50 dark:bg-amber-950/10\",\n col.isForeignKey &&\n !col.isPrimaryKey &&\n \"bg-blue-50/40 dark:bg-blue-950/10\"\n )}\n >\n <span className=\"w-3 shrink-0 text-center\">\n {col.isPrimaryKey && (\n <Tooltip title=\"Primary Key\">\n <span className=\"text-amber-500 text-[10px] font-bold\">🔑</span>\n </Tooltip>\n )}\n {col.isForeignKey && !col.isPrimaryKey && (\n <Tooltip title={`FK → ${col.relationName ?? \"?\"}`}>\n <span className=\"text-blue-400 text-[10px] font-bold\">🔗</span>\n </Tooltip>\n )}\n </span>\n\n <Typography\n variant=\"caption\"\n className={cls(\n \"font-mono text-[11px] truncate flex-1 min-w-0\",\n col.isPrimaryKey\n ? \"font-semibold text-amber-700 dark:text-amber-400\"\n : col.isForeignKey\n ? \"text-blue-600 dark:text-blue-400\"\n : \"text-text-primary dark:text-text-primary-dark\"\n )}\n >\n {col.name}\n </Typography>\n\n {col.isEnum ? (\n <Chip\n size=\"smallest\"\n className=\"bg-violet-100 text-violet-700 dark:bg-violet-900/30 dark:text-violet-400 border-violet-200 dark:border-violet-800 text-[9px] py-0\"\n >\n enum\n </Chip>\n ) : (\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark font-mono shrink-0\"\n >\n {col.typeLabel}\n </Typography>\n )}\n\n {col.isRequired && !col.isPrimaryKey && (\n <Tooltip title=\"Required\">\n <span className=\"text-red-400 text-[9px]\">•</span>\n </Tooltip>\n )}\n </div>\n ))}\n </div>\n\n {/* ── Handles at node root ── */}\n {handles.map((h) => (\n <Handle\n key={h.id}\n id={h.id}\n type={h.type}\n position={h.position}\n style={{ top: h.top }}\n className={cls(\n \"!w-2 !h-2 !border-2 !border-white dark:!border-surface-900\",\n h.type === \"source\" ? \"!bg-blue-400\" : \"!bg-amber-400\"\n )}\n />\n ))}\n </div>\n );\n};\n\nexport const TableNode = memo(TableNodeInner);\n","import React, { memo } from \"react\";\nimport { BaseEdge, getSmoothStepPath, EdgeLabelRenderer } from \"@xyflow/react\";\nimport type { EdgeProps } from \"@xyflow/react\";\nimport { cls } from \"@rebasepro/ui\";\nimport type { RelationEdgeData } from \"./schema-visualizer.utils\";\n\n/**\n * Custom React Flow edge that renders relations with style variations\n * based on cardinality and direction.\n *\n * - Owning one-to-one: solid, primary color\n * - Many-to-many (junction): solid, violet\n * - Inverse: dashed, muted\n * - Join path: dotted, muted\n */\nconst RelationEdgeInner = ({\n id,\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourcePosition,\n targetPosition,\n data,\n selected\n}: EdgeProps) => {\n const edgeData = data as RelationEdgeData | undefined;\n\n const [edgePath, labelX, labelY] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: 8\n });\n\n const isInverse = edgeData?.direction === \"inverse\";\n const isJoinPath = edgeData?.hasJoinPath;\n const isJunction = edgeData?.hasJunction;\n\n // Determine stroke style\n let strokeColor = \"var(--rf-edge-stroke, #94a3b8)\";\n let strokeDasharray: string | undefined;\n let strokeWidth = 1.5;\n\n if (selected) {\n strokeColor = \"var(--rf-edge-stroke-selected, #6366f1)\";\n strokeWidth = 2.5;\n } else if (isJunction) {\n strokeColor = \"#8b5cf6\"; // violet\n } else if (isInverse) {\n strokeDasharray = \"6 3\";\n strokeColor = \"#94a3b8\";\n } else if (isJoinPath) {\n strokeDasharray = \"3 3\";\n strokeColor = \"#94a3b8\";\n } else {\n strokeColor = \"#6366f1\"; // primary/indigo\n }\n\n return (\n <>\n <BaseEdge\n id={id}\n path={edgePath}\n style={{\n stroke: strokeColor,\n strokeWidth,\n strokeDasharray\n }}\n />\n {edgeData?.label && (\n <EdgeLabelRenderer>\n <div\n style={{\n position: \"absolute\",\n transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`,\n pointerEvents: \"all\"\n }}\n className={cls(\n \"px-1.5 py-0.5 rounded text-[9px] font-mono font-semibold leading-none\",\n \"bg-white dark:bg-surface-900 border\",\n selected\n ? \"border-primary text-primary\"\n : isJunction\n ? \"border-violet-200 dark:border-violet-800 text-violet-600 dark:text-violet-400\"\n : isInverse || isJoinPath\n ? \"border-surface-200 dark:border-surface-700 text-text-disabled dark:text-text-disabled-dark\"\n : \"border-primary/30 dark:border-primary/30 text-primary\"\n )}\n >\n {edgeData.label}\n </div>\n </EdgeLabelRenderer>\n )}\n </>\n );\n};\n\nexport const RelationEdge = memo(RelationEdgeInner);\n","import React, { useState, useCallback, useMemo, useEffect, useRef } from \"react\";\nimport {\n ReactFlow,\n Controls,\n MiniMap,\n Background,\n BackgroundVariant,\n useReactFlow,\n ReactFlowProvider,\n applyNodeChanges,\n applyEdgeChanges\n} from \"@xyflow/react\";\nimport type { Node, Edge, NodeChange, EdgeChange } from \"@xyflow/react\";\nimport \"@xyflow/react/dist/style.css\";\nimport {\n Typography,\n TextField,\n cls,\n defaultBorderMixin,\n CircularProgress,\n ResizablePanels,\n Tooltip,\n IconButton\n} from \"@rebasepro/ui\";\nimport {\n useStudioCollectionRegistry,\n IconForView\n} from \"@rebasepro/core\";\nimport type { EntityCollection } from \"@rebasepro/types\";\nimport { isPostgresCollection } from \"@rebasepro/types\";\nimport { useSchemaGraph } from \"./useSchemaGraph\";\nimport type { TableNodeData } from \"./useSchemaGraph\";\nimport { TableNode } from \"./TableNode\";\nimport { RelationEdge } from \"./RelationEdge\";\n\n\n// ─── Custom node / edge type registrations ────────────────────────────\n\nconst nodeTypes = {\n tableNode: TableNode\n};\n\nconst edgeTypes = {\n relationEdge: RelationEdge\n};\n\n// ─── Inner component (needs ReactFlowProvider) ─────────────────────────\n\nfunction SchemaVisualizerCanvas({\n collections\n}: {\n collections: EntityCollection[];\n}) {\n const reactFlowInstance = useReactFlow();\n const {\n nodes: layoutedNodes,\n edges: layoutedEdges,\n direction,\n setDirection,\n relayout,\n tableCount,\n relationCount\n } = useSchemaGraph(collections);\n\n const [nodes, setNodes] = useState<Node[]>([]);\n const [edges, setEdges] = useState<Edge[]>([]);\n const [selectedTable, setSelectedTable] = useState<string | null>(null);\n const [searchQuery, setSearchQuery] = useState(\"\");\n const initialFitDone = useRef(false);\n\n // Sync layouted data into state\n useEffect(() => {\n setNodes(layoutedNodes);\n setEdges(layoutedEdges);\n }, [layoutedNodes, layoutedEdges]);\n\n const onNodesChange = useCallback(\n (changes: NodeChange[]) => setNodes((nds) => applyNodeChanges(changes, nds)),\n []\n );\n const onEdgesChange = useCallback(\n (changes: EdgeChange[]) => setEdges((eds) => applyEdgeChanges(changes, eds)),\n []\n );\n\n // Fit view on first load\n useEffect(() => {\n if (nodes.length > 0 && !initialFitDone.current) {\n const timer = setTimeout(() => {\n reactFlowInstance.fitView({ padding: 0.15,\nduration: 400 });\n initialFitDone.current = true;\n }, 200);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [nodes.length, reactFlowInstance]);\n\n const handleFitView = useCallback(() => {\n reactFlowInstance.fitView({ padding: 0.15,\nduration: 400 });\n }, [reactFlowInstance]);\n\n const handleNodeClick = useCallback((_: React.MouseEvent, node: Node) => {\n setSelectedTable(node.id);\n }, []);\n\n const handlePaneClick = useCallback(() => {\n setSelectedTable(null);\n }, []);\n\n // Focus on a table from the sidebar\n const handleTableSelect = useCallback(\n (nodeId: string) => {\n setSelectedTable(nodeId);\n const node = nodes.find((n) => n.id === nodeId);\n if (node) {\n reactFlowInstance.setCenter(\n node.position.x + 140,\n node.position.y + 60,\n { zoom: 1.2,\nduration: 400 }\n );\n }\n },\n [nodes, reactFlowInstance]\n );\n\n // Sidebar panel size\n const [sidebarSize, setSidebarSize] = useState(() => {\n try {\n const saved = localStorage.getItem(\"rebase_schema_viz_sidebar_size\");\n return saved !== null ? parseFloat(saved) : 20;\n } catch {\n return 20;\n }\n });\n\n useEffect(() => {\n try {\n localStorage.setItem(\n \"rebase_schema_viz_sidebar_size\",\n sidebarSize.toString()\n );\n } catch {\n // Ignore\n }\n }, [sidebarSize]);\n\n // Group collections for sidebar\n const postgresCollections = useMemo(\n () => collections.filter(isPostgresCollection),\n [collections]\n );\n\n const filteredCollections = useMemo(() => {\n if (!searchQuery.trim()) return postgresCollections;\n const q = searchQuery.toLowerCase();\n return postgresCollections.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.table?.toLowerCase().includes(q) ||\n c.slug?.toLowerCase().includes(q)\n );\n }, [postgresCollections, searchQuery]);\n\n // Junction table nodes\n const junctionNodes = useMemo(\n () =>\n nodes.filter(\n (n) => (n.data as TableNodeData).isJunction\n ),\n [nodes]\n );\n\n // Stats\n const stats = useMemo(\n () => ({\n tables: tableCount,\n relations: relationCount,\n junctions: junctionNodes.length,\n withRls: postgresCollections.filter(\n (c) =>\n isPostgresCollection(c) &&\n c.securityRules &&\n c.securityRules.length > 0\n ).length\n }),\n [\n tableCount,\n relationCount,\n junctionNodes.length,\n postgresCollections\n ]\n );\n\n return (\n <ResizablePanels\n orientation=\"horizontal\"\n panelSizePercent={sidebarSize}\n onPanelSizeChange={setSidebarSize}\n minPanelSizePx={220}\n firstPanel={\n <div\n className={cls(\n \"flex flex-col h-full w-full bg-white dark:bg-surface-950 border-r\",\n defaultBorderMixin\n )}\n >\n {/* Sidebar header */}\n <div\n className={cls(\n \"flex items-center justify-between px-3 py-2 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\",\n defaultBorderMixin\n )}\n >\n <Typography\n variant=\"caption\"\n className=\"font-bold uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark\"\n >\n Tables\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark font-mono\"\n >\n {stats.tables}\n </Typography>\n </div>\n\n {/* Search */}\n <div className=\"px-2 py-1.5 border-b border-surface-200/40 dark:border-surface-700/40\">\n <TextField\n size=\"smallest\"\n placeholder=\"Filter tables…\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n inputClassName=\"text-xs\"\n />\n </div>\n\n {/* Table list */}\n <div className=\"flex-grow overflow-y-auto no-scrollbar p-1\">\n {/* Regular collections */}\n <div className=\"space-y-0.5\">\n {filteredCollections.map((collection) => {\n const table = collection.table ?? collection.slug;\n const nodeId = `table-${table}`;\n const isSelected = selectedTable === nodeId;\n return (\n <div\n key={nodeId}\n onClick={() =>\n handleTableSelect(nodeId)\n }\n className={cls(\n \"flex items-center p-1.5 cursor-pointer rounded transition-colors group\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20 dark:text-primary-light\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-secondary dark:text-text-secondary-dark\"\n )}\n >\n <div className=\"shrink-0 mr-1.5 text-text-disabled dark:text-text-disabled-dark\">\n <IconForView\n collectionOrView={{\n slug: collection.slug,\n name: collection.name,\n icon:\n typeof collection.icon ===\n \"string\"\n ? collection.icon\n : undefined\n }}\n size=\"smallest\"\n />\n </div>\n <div className=\"flex flex-col min-w-0 flex-1\">\n <Typography\n variant=\"caption\"\n className=\"text-xs truncate font-medium\"\n >\n {collection.name}\n </Typography>\n {table !== collection.name && (\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark font-mono truncate\"\n >\n {table}\n </Typography>\n )}\n </div>\n <div className=\"flex items-center gap-1 shrink-0 ml-1\">\n {isPostgresCollection(collection) &&\n collection.securityRules &&\n collection.securityRules\n .length > 0 && (\n <Tooltip title=\"RLS enabled\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n </Tooltip>\n )}\n {collection.history && (\n <Tooltip title=\"History enabled\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-blue-400\"/>\n </Tooltip>\n )}\n </div>\n </div>\n );\n })}\n </div>\n\n {/* Junction tables */}\n {junctionNodes.length > 0 && (\n <div className=\"mt-3\">\n <Typography\n variant=\"caption\"\n className=\"px-1.5 text-[10px] uppercase tracking-wider text-text-disabled dark:text-text-disabled-dark font-medium\"\n >\n Junction Tables\n </Typography>\n <div className=\"mt-1 space-y-0.5\">\n {junctionNodes.map((node) => {\n const d =\n node.data as TableNodeData;\n const isSelected =\n selectedTable === node.id;\n return (\n <div\n key={node.id}\n onClick={() =>\n handleTableSelect(\n node.id\n )\n }\n className={cls(\n \"flex items-center p-1.5 cursor-pointer rounded transition-colors\",\n isSelected\n ? \"bg-primary/10 text-primary dark:bg-primary/20\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950 text-text-disabled dark:text-text-disabled-dark\"\n )}\n >\n <svg\n className=\"w-3.5 h-3.5 mr-1.5 shrink-0\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4\"\n />\n </svg>\n <Typography\n variant=\"caption\"\n className=\"text-xs font-mono truncate\"\n >\n {d.tableName}\n </Typography>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </div>\n\n {/* Stats footer */}\n <div\n className={cls(\n \"px-3 py-2 border-t bg-surface-50 dark:bg-surface-900 space-y-1\",\n defaultBorderMixin\n )}\n >\n <div className=\"flex items-center justify-between\">\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n Tables\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] font-mono font-medium\"\n >\n {stats.tables}\n </Typography>\n </div>\n <div className=\"flex items-center justify-between\">\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n Relations\n </Typography>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] font-mono font-medium\"\n >\n {stats.relations}\n </Typography>\n </div>\n <div className=\"flex items-center justify-between\">\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n RLS protected\n </Typography>\n <div className=\"flex items-center gap-1\">\n <div className=\"w-1.5 h-1.5 rounded-full bg-green-500\"/>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] font-mono font-medium\"\n >\n {stats.withRls}\n </Typography>\n </div>\n </div>\n </div>\n </div>\n }\n secondPanel={\n <div className=\"flex-grow flex flex-col min-w-0 h-full w-full bg-white dark:bg-surface-950\">\n {/* Toolbar */}\n <div\n className={cls(\n \"flex items-center justify-between pr-2 border-b bg-white dark:bg-surface-950 min-h-[46px]\",\n defaultBorderMixin\n )}\n >\n <div className=\"flex items-center gap-2 px-4\">\n <Typography\n variant=\"subtitle2\"\n className=\"font-mono text-text-secondary dark:text-text-secondary-dark\"\n >\n Schema Visualizer\n </Typography>\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n {/* Direction toggle */}\n <div className=\"flex items-center bg-surface-100 dark:bg-surface-950 rounded-md border border-surface-200/40 dark:border-surface-700/40\">\n <Tooltip title=\"Left to right layout\">\n <button\n onClick={() => setDirection(\"LR\")}\n className={cls(\n \"px-2 py-1 text-[10px] font-mono rounded-l-md transition-colors\",\n direction === \"LR\"\n ? \"bg-primary text-white\"\n : \"text-text-secondary dark:text-text-secondary-dark hover:bg-surface-200 dark:hover:bg-surface-700\"\n )}\n >\n LR\n </button>\n </Tooltip>\n <Tooltip title=\"Top to bottom layout\">\n <button\n onClick={() => setDirection(\"TB\")}\n className={cls(\n \"px-2 py-1 text-[10px] font-mono rounded-r-md transition-colors\",\n direction === \"TB\"\n ? \"bg-primary text-white\"\n : \"text-text-secondary dark:text-text-secondary-dark hover:bg-surface-200 dark:hover:bg-surface-700\"\n )}\n >\n TB\n </button>\n </Tooltip>\n </div>\n\n <div className=\"h-4 w-px bg-surface-200 dark:bg-surface-950 mx-0.5\"/>\n\n {/* Fit view */}\n <Tooltip title=\"Fit to view\">\n <IconButton\n size=\"small\"\n onClick={handleFitView}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4\"\n />\n </svg>\n </IconButton>\n </Tooltip>\n\n {/* Re-layout */}\n <Tooltip title=\"Re-layout\">\n <IconButton\n size=\"small\"\n onClick={relayout}\n >\n <svg\n className=\"w-4 h-4\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15\"\n />\n </svg>\n </IconButton>\n </Tooltip>\n </div>\n </div>\n\n {/* Canvas */}\n <div className=\"flex-grow relative\">\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n onNodeClick={handleNodeClick}\n onPaneClick={handlePaneClick}\n nodeTypes={nodeTypes}\n edgeTypes={edgeTypes}\n fitView\n fitViewOptions={{ padding: 0.15 }}\n minZoom={0.1}\n maxZoom={2}\n proOptions={{ hideAttribution: true }}\n className=\"bg-surface-50 dark:bg-surface-950\"\n >\n <Background\n variant={BackgroundVariant.Dots}\n gap={20}\n size={1}\n className=\"!bg-surface-50 dark:!bg-surface-950\"\n color=\"var(--rf-bg-dot, #d4d4d8)\"\n />\n <Controls\n showInteractive={false}\n className=\"!bg-white dark:!bg-surface-900 !border !border-surface-200/40 dark:!border-surface-700/40 !shadow-sm !rounded-lg\"\n />\n <MiniMap\n nodeStrokeColor={(n) => {\n const d = n.data as TableNodeData;\n if (d.isJunction) return \"#a78bfa\";\n if (d.rlsEnabled) return \"#22c55e\";\n return \"#6366f1\";\n }}\n nodeColor={(n) => {\n const d = n.data as TableNodeData;\n if (d.isJunction) return \"#ede9fe\";\n return \"#eef2ff\";\n }}\n maskColor=\"rgba(0,0,0,0.08)\"\n className=\"!bg-white dark:!bg-surface-900 !border !border-surface-200/40 dark:!border-surface-700/40 !shadow-sm !rounded-lg\"\n />\n </ReactFlow>\n\n {/* Legend overlay */}\n <div className=\"absolute bottom-4 left-4 flex items-center gap-3 px-3 py-2 bg-white/90 dark:bg-surface-900/90 backdrop-blur-sm rounded-lg border border-surface-200/40 dark:border-surface-700/40 shadow-sm\">\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-6 h-0.5 bg-indigo-500 rounded\"/>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n Owning\n </Typography>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div className=\"w-6 h-0.5 bg-violet-500 rounded\"/>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n M:N\n </Typography>\n </div>\n <div className=\"flex items-center gap-1.5\">\n <div\n className=\"w-6 h-0.5 rounded\"\n style={{\n backgroundImage:\n \"repeating-linear-gradient(90deg, #94a3b8, #94a3b8 4px, transparent 4px, transparent 7px)\"\n }}\n />\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n Inverse\n </Typography>\n </div>\n <div className=\"h-3 w-px bg-surface-200 dark:bg-surface-700\"/>\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[9px]\">🔑</span>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n PK\n </Typography>\n </div>\n <div className=\"flex items-center gap-1\">\n <span className=\"text-[9px]\">🔗</span>\n <Typography\n variant=\"caption\"\n className=\"text-[10px] text-text-disabled dark:text-text-disabled-dark\"\n >\n FK\n </Typography>\n </div>\n </div>\n </div>\n </div>\n }\n />\n );\n}\n\n// ─── Outer wrapper (provides ReactFlowProvider) ────────────────────────\n\nexport const SchemaVisualizer = () => {\n const { collections: registryCollections } =\n useStudioCollectionRegistry() as {\n collections?: EntityCollection[];\n };\n\n // Merge registry collections with any passed collections\n const collections = useMemo(() => {\n return registryCollections ?? [];\n }, [registryCollections]);\n\n if (!collections || collections.length === 0) {\n return (\n <div className=\"flex items-center justify-center h-full w-full\">\n <div className=\"text-center space-y-3\">\n <CircularProgress size=\"small\"/>\n <Typography\n variant=\"body2\"\n color=\"secondary\"\n >\n Loading schema…\n </Typography>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"flex h-full w-full bg-white dark:bg-surface-950 overflow-hidden text-text-primary dark:text-text-primary-dark\">\n <ReactFlowProvider>\n <SchemaVisualizerCanvas collections={collections}/>\n </ReactFlowProvider>\n </div>\n );\n};\n","\nimport React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport { Typography, cls, defaultBorderMixin, Button, Chip, CircularProgress, IconButton, Paper, Dialog, DialogTitle, DialogContent, DialogActions, TextField, Select, SelectItem, Alert , iconSize } from \"@rebasepro/ui\";\nimport { GitBranchIcon, Trash2Icon, RefreshCwIcon, PlusIcon, CopyIcon } from \"lucide-react\";\nimport { useRebaseContext, useSnackbarController, ConfirmationDialog } from \"@rebasepro/core\";\nimport { isBranchAdmin } from \"@rebasepro/types\";\nimport type { BranchInfo } from \"@rebasepro/types\";\n\nfunction formatSize(bytes: number | undefined): string {\n if (bytes === undefined || bytes === null) return \"—\";\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(2)} GB`;\n}\n\nfunction formatRelative(date: Date | string | undefined): string {\n if (!date) return \"—\";\n const d = date instanceof Date ? date : new Date(date);\n if (isNaN(d.getTime())) return \"—\";\n const now = Date.now();\n const diff = now - d.getTime();\n if (diff < 60_000) return \"just now\";\n if (diff < 3_600_000) { const m = Math.round(diff / 60_000); return `${m}m ago`; }\n if (diff < 86_400_000) { const h = Math.round(diff / 3_600_000); return `${h}h ago`; }\n if (diff < 604_800_000) { const d2 = Math.round(diff / 86_400_000); return `${d2}d ago`; }\n return d.toLocaleDateString();\n}\n\nexport function BranchesView() {\n const { databaseAdmin } = useRebaseContext();\n const snackbar = useSnackbarController();\n\n const [branches, setBranches] = useState<BranchInfo[]>([]);\n const [loading, setLoading] = useState(true);\n const [selectedBranch, setSelectedBranch] = useState<string | null>(null);\n\n // Create dialog\n const [createOpen, setCreateOpen] = useState(false);\n const [newBranchName, setNewBranchName] = useState(\"\");\n const [sourceBranch, setSourceBranch] = useState<string | undefined>(undefined);\n const [creating, setCreating] = useState(false);\n\n // Delete confirm\n const [deleteTarget, setDeleteTarget] = useState<string | null>(null);\n const [deleting, setDeleting] = useState(false);\n\n // Refs\n const snackbarRef = useRef(snackbar);\n snackbarRef.current = snackbar;\n\n const branchAdmin = isBranchAdmin(databaseAdmin) ? databaseAdmin : undefined;\n\n const loadBranches = useCallback(async () => {\n if (!branchAdmin) {\n setLoading(false);\n return;\n }\n try {\n const result = await branchAdmin.listBranches();\n setBranches(result);\n } catch (e: unknown) {\n snackbarRef.current.open({\n type: \"error\",\n message: e instanceof Error ? e.message : String(e)\n });\n } finally {\n setLoading(false);\n }\n }, [branchAdmin]);\n\n useEffect(() => {\n loadBranches();\n }, [loadBranches]);\n\n const handleCreate = async () => {\n if (!branchAdmin || !newBranchName.trim()) return;\n setCreating(true);\n try {\n await branchAdmin.createBranch(newBranchName.trim(), sourceBranch ? { source: sourceBranch } : undefined);\n snackbarRef.current.open({\n type: \"success\",\n message: `Branch \"${newBranchName.trim()}\" created successfully`\n });\n setCreateOpen(false);\n setNewBranchName(\"\");\n setSourceBranch(undefined);\n await loadBranches();\n } catch (e: unknown) {\n snackbarRef.current.open({\n type: \"error\",\n message: e instanceof Error ? e.message : String(e)\n });\n } finally {\n setCreating(false);\n }\n };\n\n const handleDelete = async () => {\n if (!branchAdmin || !deleteTarget) return;\n setDeleting(true);\n try {\n await branchAdmin.deleteBranch(deleteTarget);\n snackbarRef.current.open({\n type: \"success\",\n message: `Branch \"${deleteTarget}\" deleted`\n });\n if (selectedBranch === deleteTarget) setSelectedBranch(null);\n setDeleteTarget(null);\n await loadBranches();\n } catch (e: unknown) {\n snackbarRef.current.open({\n type: \"error\",\n message: e instanceof Error ? e.message : String(e)\n });\n } finally {\n setDeleting(false);\n }\n };\n\n // Not supported\n if (!branchAdmin) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-4 text-center p-8\">\n <GitBranchIcon size={iconSize.large} className=\"text-surface-300 dark:text-surface-600\"/>\n <Typography variant=\"h6\" color=\"secondary\">Database Branching Not Available</Typography>\n <Typography variant=\"body2\" color=\"disabled\" className=\"max-w-md\">\n Branching requires a PostgreSQL backend with an admin connection configured.\n Set <code className=\"text-xs bg-surface-100 dark:bg-surface-950 px-1.5 py-0.5 rounded font-mono\">adminConnectionString</code> in your server configuration.\n </Typography>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"flex items-center justify-center h-full\">\n <CircularProgress/>\n </div>\n );\n }\n\n const selected = branches.find(b => b.name === selectedBranch);\n\n return (\n <div className=\"flex h-full w-full overflow-hidden bg-white dark:bg-surface-950\">\n {/* ── Branch List ── */}\n <div className={cls(\"flex flex-col w-[340px] min-w-[280px] border-r h-full\", defaultBorderMixin)}>\n <div className={cls(\"flex items-center justify-between px-4 py-2.5 border-b bg-surface-50 dark:bg-surface-900 min-h-[48px]\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-2\">\n <GitBranchIcon size={iconSize.small} className=\"text-primary\"/>\n <Typography variant=\"subtitle2\" className=\"font-semibold\">Branches</Typography>\n <Chip size=\"smallest\" className=\"bg-surface-200 dark:bg-surface-700 text-surface-600 dark:text-surface-300\">{branches.length}</Chip>\n </div>\n <div className=\"flex items-center gap-1\">\n <IconButton size=\"small\" onClick={loadBranches} title=\"Refresh\">\n <RefreshCwIcon size={iconSize.smallest}/>\n </IconButton>\n <IconButton size=\"small\" onClick={() => setCreateOpen(true)} title=\"Create branch\" className=\"text-primary\">\n <PlusIcon size={iconSize.smallest}/>\n </IconButton>\n </div>\n </div>\n <div className=\"flex-1 overflow-y-auto p-2 space-y-1\">\n {branches.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center h-full gap-3 text-center px-4\">\n <CopyIcon size={iconSize.small} className=\"text-surface-300 dark:text-surface-600\"/>\n <Typography variant=\"body2\" color=\"disabled\" className=\"text-[13px]\">\n No branches yet. Create one to start working with an isolated database copy.\n </Typography>\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => setCreateOpen(true)}\n startIcon={<PlusIcon size={iconSize.smallest}/>}\n >\n Create Branch\n </Button>\n </div>\n ) : (\n branches.map(branch => (\n <div\n key={branch.name}\n onClick={() => setSelectedBranch(branch.name)}\n className={cls(\n \"flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-all\",\n selectedBranch === branch.name\n ? \"bg-primary/10 dark:bg-primary/15 ring-1 ring-primary/30\"\n : \"hover:bg-surface-100 dark:hover:bg-surface-950\"\n )}\n >\n <div className=\"w-2 h-2 rounded-full shrink-0 bg-emerald-500\"/>\n <div className=\"flex-1 min-w-0\">\n <Typography variant=\"body2\" className=\"truncate font-medium text-[13px]\">{branch.name}</Typography>\n <Typography variant=\"caption\" color=\"secondary\" className=\"truncate text-[11px]\">\n from {branch.parentDatabase} · {formatRelative(branch.createdAt)}\n </Typography>\n </div>\n {branch.sizeBytes !== undefined && (\n <Typography variant=\"caption\" color=\"disabled\" className=\"font-mono text-[10px] shrink-0\">\n {formatSize(branch.sizeBytes)}\n </Typography>\n )}\n </div>\n ))\n )}\n </div>\n </div>\n\n {/* ── Detail Panel ── */}\n <div className=\"flex-1 flex flex-col min-w-0 h-full overflow-hidden\">\n {!selected ? (\n <div className=\"flex flex-col items-center justify-center h-full gap-3\">\n <GitBranchIcon size={iconSize.large} className=\"text-surface-200 dark:text-surface-700\"/>\n <Typography variant=\"body2\" color=\"disabled\">\n {branches.length === 0 ? \"Create a branch to get started\" : \"Select a branch to view details\"}\n </Typography>\n </div>\n ) : (\n <>\n {/* Header */}\n <div className={cls(\"flex items-center justify-between px-5 py-3 border-b bg-white dark:bg-surface-950 min-h-[56px]\", defaultBorderMixin)}>\n <div className=\"flex items-center gap-3 min-w-0\">\n <div className=\"w-2.5 h-2.5 rounded-full bg-emerald-500\"/>\n <div className=\"min-w-0\">\n <Typography variant=\"subtitle1\" className=\"font-semibold truncate\">{selected.name}</Typography>\n <Typography variant=\"caption\" color=\"secondary\" className=\"truncate\">\n Created from <span className=\"font-mono text-[11px]\">{selected.parentDatabase}</span>\n </Typography>\n </div>\n </div>\n <div className=\"flex items-center gap-2 shrink-0\">\n <Button\n size=\"small\"\n color=\"error\"\n variant=\"outlined\"\n onClick={() => setDeleteTarget(selected.name)}\n startIcon={<Trash2Icon size={iconSize.smallest}/>}\n >\n Delete\n </Button>\n </div>\n </div>\n\n {/* Info Cards */}\n <div className=\"px-5 py-4 bg-surface-50 dark:bg-surface-900/50\">\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-3\">\n <StatCard label=\"Branch Name\" value={selected.name} mono/>\n <StatCard label=\"Source Database\" value={selected.parentDatabase} mono/>\n <StatCard label=\"Created\" value={formatRelative(selected.createdAt)}/>\n <StatCard label=\"Size\" value={formatSize(selected.sizeBytes)}/>\n </div>\n </div>\n\n {/* Usage Info */}\n <div className=\"flex-1 overflow-y-auto px-5 py-4\">\n <Alert color=\"info\">\n <Typography variant=\"body2\" className=\"text-[13px]\">\n <strong>How to use this branch:</strong> Switch your application's database connection to\n <code className=\"mx-1 px-1.5 py-0.5 rounded bg-surface-100 dark:bg-surface-950 font-mono text-[12px]\">{selected.name}</code>\n to work with an isolated copy of your data. Changes made to this branch won't affect your main database.\n </Typography>\n </Alert>\n <div className=\"mt-4 p-4 rounded-lg border bg-surface-50 dark:bg-surface-900 border-surface-200 dark:border-surface-700\">\n <Typography variant=\"caption\" className=\"text-[10px] uppercase tracking-wider text-surface-400 mb-2 block font-medium\">Connection Details</Typography>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2\">\n <Typography variant=\"caption\" color=\"secondary\" className=\"w-24 shrink-0 text-[11px]\">Database:</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[12px]\">{selected.name}</Typography>\n </div>\n <div className=\"flex items-center gap-2\">\n <Typography variant=\"caption\" color=\"secondary\" className=\"w-24 shrink-0 text-[11px]\">Branched from:</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[12px]\">{selected.parentDatabase}</Typography>\n </div>\n <div className=\"flex items-center gap-2\">\n <Typography variant=\"caption\" color=\"secondary\" className=\"w-24 shrink-0 text-[11px]\">Created at:</Typography>\n <Typography variant=\"body2\" className=\"font-mono text-[12px]\">\n {selected.createdAt instanceof Date\n ? selected.createdAt.toLocaleString()\n : new Date(selected.createdAt).toLocaleString()}\n </Typography>\n </div>\n </div>\n </div>\n </div>\n </>\n )}\n </div>\n\n {/* ── Create Dialog ── */}\n <Dialog open={createOpen} onOpenChange={setCreateOpen}>\n <DialogTitle>Create New Branch</DialogTitle>\n <DialogContent className=\"space-y-4 min-w-[400px]\">\n <Typography variant=\"body2\" color=\"secondary\" className=\"text-[13px]\">\n Create an isolated database copy. The branch will be a full clone of the source database at this point in time.\n </Typography>\n <div>\n <TextField\n label=\"Branch Name\"\n value={newBranchName}\n onChange={(e) => setNewBranchName(e.target.value)}\n placeholder=\"e.g. feature-auth, staging, preview-pr-42\"\n size=\"small\"\n autoFocus\n />\n </div>\n {branches.length > 0 && (\n <div>\n <Select\n label=\"Source Database\"\n value={sourceBranch ?? \"\"}\n onValueChange={(v) => setSourceBranch(v || undefined)}\n placeholder=\"Default (main database)\"\n size=\"small\"\n renderValue={(v) => v || \"Default (main database)\"}\n >\n <SelectItem value=\"\">Default (main database)</SelectItem>\n {branches.map(b => (\n <SelectItem key={b.name} value={b.name}>{b.name}</SelectItem>\n ))}\n </Select>\n </div>\n )}\n </DialogContent>\n <DialogActions>\n <Button variant=\"text\" onClick={() => setCreateOpen(false)} disabled={creating}>\n Cancel\n </Button>\n <Button\n color=\"primary\"\n onClick={handleCreate}\n disabled={!newBranchName.trim() || creating}\n startIcon={creating ? <CircularProgress size=\"smallest\"/> : <PlusIcon size={iconSize.smallest}/>}\n >\n {creating ? \"Creating...\" : \"Create Branch\"}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* ── Delete Confirm ── */}\n <ConfirmationDialog\n open={!!deleteTarget}\n onAccept={handleDelete}\n onCancel={() => setDeleteTarget(null)}\n title=\"Delete Branch\"\n body={\n <Typography variant=\"body2\">\n Are you sure you want to permanently delete the branch <strong>{deleteTarget}</strong>?\n This action cannot be undone and all data in this branch will be lost.\n </Typography>\n }\n loading={deleting}\n />\n </div>\n );\n}\n\nfunction StatCard({ label, value, mono }: {\n label: string; value: string; mono?: boolean;\n}) {\n return (\n <div className={cls(\"px-3 py-2 rounded-lg border bg-white dark:bg-surface-900\", defaultBorderMixin)}>\n <Typography variant=\"caption\" color=\"secondary\" className=\"text-[10px] uppercase tracking-wider font-medium\">{label}</Typography>\n <Typography variant=\"body2\" className={cls(\n \"mt-0.5 font-semibold text-[13px] truncate\",\n mono && \"font-mono\"\n )}>{value}</Typography>\n </div>\n );\n}\n","import type { OpenApiSpec, ParsedEndpoint, EndpointGroup } from \"./types\";\n\n/**\n * Parse an OpenAPI 3.x spec into grouped, sorted endpoints for the sidebar.\n */\nexport function parseOpenApiSpec(spec: OpenApiSpec): {\n groups: EndpointGroup[];\n allEndpoints: ParsedEndpoint[];\n} {\n const allEndpoints: ParsedEndpoint[] = [];\n const tagMap = new Map<string, ParsedEndpoint[]>();\n\n // Build tag description lookup\n const tagDescriptions = new Map<string, string>();\n for (const t of spec.tags ?? []) {\n tagDescriptions.set(t.name, t.description ?? \"\");\n }\n\n for (const [path, methods] of Object.entries(spec.paths ?? {})) {\n for (const [method, op] of Object.entries(methods)) {\n if ([\"get\", \"post\", \"put\", \"patch\", \"delete\"].indexOf(method) === -1) continue;\n\n const tags = op.tags?.length ? op.tags : [\"Other\"];\n const shortPath = path.replace(/^\\/api\\/data/, \"\");\n\n const endpoint: ParsedEndpoint = {\n id: `${method}:${path}`,\n method,\n path,\n shortPath: shortPath || \"/\",\n summary: op.summary ?? \"\",\n description: op.description ?? \"\",\n tags,\n parameters: op.parameters ?? [],\n requestBody: op.requestBody,\n responses: op.responses ?? {},\n security: op.security,\n operationId: op.operationId\n };\n\n allEndpoints.push(endpoint);\n for (const tag of tags) {\n if (!tagMap.has(tag)) tagMap.set(tag, []);\n tagMap.get(tag)!.push(endpoint);\n }\n }\n }\n\n // Method sort order\n const ORDER: Record<string, number> = { get: 0,\npost: 1,\nput: 2,\npatch: 3,\ndelete: 4 };\n\n const groups: EndpointGroup[] = [];\n // Sort tags: use spec.tags order if available, else alphabetical\n const tagOrder = (spec.tags ?? []).map((t) => t.name);\n const sortedTags = [...tagMap.keys()].sort((a, b) => {\n const ai = tagOrder.indexOf(a);\n const bi = tagOrder.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return a.localeCompare(b);\n });\n\n for (const tag of sortedTags) {\n const endpoints = tagMap.get(tag)!;\n endpoints.sort((a, b) => {\n const pa = a.path.localeCompare(b.path);\n if (pa !== 0) return pa;\n return (ORDER[a.method] ?? 99) - (ORDER[b.method] ?? 99);\n });\n groups.push({\n tag,\n description: tagDescriptions.get(tag),\n endpoints\n });\n }\n\n return { groups,\nallEndpoints };\n}\n\n/**\n * Resolve a $ref string (e.g. \"#/components/schemas/Author\") to a schema name.\n */\nexport function resolveRefName(ref: string): string {\n const parts = ref.split(\"/\");\n return parts[parts.length - 1];\n}\n\n/**\n * Resolve a $ref to its actual schema from the spec.\n */\nexport function resolveRef(spec: OpenApiSpec, ref: string): any {\n const parts = ref.replace(\"#/\", \"\").split(\"/\");\n let current: any = spec;\n for (const part of parts) {\n current = current?.[part];\n }\n return current ?? {};\n}\n","import React from \"react\";\nimport { Typography, Chip, cls, defaultBorderMixin, iconSize } from \"@rebasepro/ui\";\nimport { SlidersHorizontalIcon, UploadIcon, ArrowRightFromLineIcon } from \"lucide-react\";\nimport type { ParsedEndpoint, OpenApiSpec, OpenApiSchema } from \"./types\";\nimport { resolveRef, resolveRefName } from \"./parseSpec\";\n\n/**\n * Renders the documentation view for a single API endpoint:\n * parameters, request body schema, response schemas.\n */\nexport function EndpointDetail({ endpoint, spec }: { endpoint: ParsedEndpoint; spec: OpenApiSpec }) {\n return (\n <div className=\"p-6 space-y-8 max-w-4xl\">\n {/* Summary / Description */}\n {(endpoint.summary || endpoint.description) && (\n <div>\n {endpoint.summary && (\n <Typography variant=\"h6\" className=\"font-semibold mb-1\">\n {endpoint.summary}\n </Typography>\n )}\n {endpoint.description && (\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n {endpoint.description}\n </Typography>\n )}\n </div>\n )}\n\n {/* Parameters */}\n {endpoint.parameters.length > 0 && (\n <section>\n <SectionHeading icon={<SlidersHorizontalIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Parameters\"/>\n <div className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"bg-surface-100 dark:bg-surface-900 text-left\">\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Name\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n In\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Type\n </th>\n <th className=\"px-4 py-2 font-medium text-text-secondary dark:text-text-secondary-dark\">\n Description\n </th>\n </tr>\n </thead>\n <tbody>\n {endpoint.parameters.map((p, i) => (\n <tr\n key={p.name + i}\n className={cls(\"border-t\", defaultBorderMixin)}\n >\n <td className=\"px-4 py-2.5\">\n <code className=\"text-xs font-mono font-semibold\">{p.name}</code>\n {p.required && <span className=\"text-red-500 ml-1 text-xs\">*</span>}\n </td>\n <td className=\"px-4 py-2.5\">\n <Chip\n size=\"smallest\"\n colorScheme={p.in === \"path\" ? \"orangeDarker\" : \"cyanDarker\"}\n >\n {p.in}\n </Chip>\n </td>\n <td className=\"px-4 py-2.5 text-xs font-mono text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(p.schema)}\n </td>\n <td className=\"px-4 py-2.5 text-xs text-text-secondary dark:text-text-secondary-dark\">\n {p.description ?? \"—\"}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </section>\n )}\n\n {/* Request Body */}\n {endpoint.requestBody && (\n <section>\n <SectionHeading icon={<UploadIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Request Body\"/>\n {Object.entries(endpoint.requestBody.content ?? {}).map(([contentType, media]) => (\n <div key={contentType}>\n <Chip size=\"smallest\" colorScheme=\"blueDarker\" className=\"mb-3\">\n {contentType}\n </Chip>\n {media.schema && <SchemaBlock schema={media.schema} spec={spec} depth={0}/>}\n </div>\n ))}\n </section>\n )}\n\n {/* Responses */}\n <section>\n <SectionHeading icon={<ArrowRightFromLineIcon size={iconSize.small} className=\"text-text-secondary dark:text-text-secondary-dark\" />} title=\"Responses\"/>\n <div className=\"space-y-3\">\n {Object.entries(endpoint.responses).map(([code, res]) => (\n <div\n key={code}\n className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}\n >\n <div\n className={cls(\n \"flex items-center gap-3 px-4 py-2.5\",\n \"bg-surface-50 dark:bg-surface-900/50\"\n )}\n >\n <StatusBadge code={code}/>\n <Typography\n variant=\"body2\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs\"\n >\n {res.description}\n </Typography>\n </div>\n {res.content &&\n Object.entries(res.content).map(\n ([ct, media]) =>\n media.schema && (\n <div\n key={ct}\n className={cls(\"px-4 py-3 border-t\", defaultBorderMixin)}\n >\n <SchemaBlock schema={media.schema} spec={spec} depth={0}/>\n </div>\n )\n )}\n </div>\n ))}\n </div>\n </section>\n </div>\n );\n}\n\n/* ── Schema Block ─────────────────────────────────────────────────── */\n\nfunction SchemaBlock({ schema, spec, depth }: { schema: OpenApiSchema; spec: OpenApiSpec; depth: number }) {\n // Resolve $ref\n if (schema.$ref) {\n const name = resolveRefName(schema.$ref);\n const resolved = resolveRef(spec, schema.$ref);\n return (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-primary dark:text-primary-dark font-mono text-xs mb-2 block\"\n >\n {name}\n </Typography>\n <SchemaBlock schema={resolved} spec={spec} depth={depth}/>\n </div>\n );\n }\n\n // Object with properties\n if (schema.properties) {\n const required = new Set(schema.required ?? []);\n return (\n <div\n className={cls(\n \"rounded-lg overflow-hidden\",\n depth > 0 && `border ml-4 mt-1 ${defaultBorderMixin}`\n )}\n >\n <table className=\"w-full text-xs\">\n <tbody>\n {Object.entries(schema.properties).map(([key, prop]) => (\n <tr\n key={key}\n className={cls(\"border-t first:border-t-0\", defaultBorderMixin)}\n >\n <td className=\"px-3 py-2 align-top w-36\">\n <code className=\"font-mono font-semibold text-text-primary dark:text-text-primary-dark\">\n {key}\n </code>\n {required.has(key) && <span className=\"text-red-500 ml-0.5\">*</span>}\n {prop.readOnly && (\n <span className=\"ml-1.5 text-[9px] text-text-secondary dark:text-text-secondary-dark italic\">\n read-only\n </span>\n )}\n </td>\n <td className=\"px-3 py-2 align-top w-28\">\n <span className=\"font-mono text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(prop)}\n </span>\n </td>\n <td className=\"px-3 py-2 align-top text-text-secondary dark:text-text-secondary-dark\">\n {prop.description ?? \"\"}\n {prop.enum && (\n <div className=\"flex flex-wrap gap-1 mt-1\">\n {prop.enum.map((v) => (\n <span\n key={String(v)}\n className=\"px-1.5 py-0.5 rounded bg-surface-200 dark:bg-surface-800 text-[10px] font-mono\"\n >\n {String(v)}\n </span>\n ))}\n </div>\n )}\n {prop.properties && <SchemaBlock schema={prop} spec={spec} depth={depth + 1}/>}\n {prop.$ref && <SchemaBlock schema={prop} spec={spec} depth={depth + 1}/>}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n }\n\n // Array\n if (schema.type === \"array\" && schema.items) {\n return (\n <div>\n <span className=\"font-mono text-xs text-text-secondary dark:text-text-secondary-dark\">Array of:</span>\n <SchemaBlock schema={schema.items} spec={spec} depth={depth + 1}/>\n </div>\n );\n }\n\n // Primitive\n return (\n <span className=\"font-mono text-xs text-text-secondary dark:text-text-secondary-dark\">\n {schemaTypeLabel(schema)}\n </span>\n );\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────── */\n\nfunction schemaTypeLabel(schema?: OpenApiSchema): string {\n if (!schema) return \"any\";\n if (schema.$ref) return resolveRefName(schema.$ref);\n if (schema.type === \"array\") return `${schemaTypeLabel(schema.items)}[]`;\n if (schema.format) return `${schema.type} (${schema.format})`;\n return schema.type ?? \"object\";\n}\n\nfunction SectionHeading({ icon, title }: { icon: React.ReactNode; title: string }) {\n return (\n <div className=\"flex items-center gap-2 mb-3\">\n {icon}\n <Typography variant=\"subtitle2\" className=\"font-semibold text-sm\">\n {title}\n </Typography>\n </div>\n );\n}\n\nfunction StatusBadge({ code }: { code: string }) {\n const n = parseInt(code, 10);\n const color =\n n < 300\n ? \"text-emerald-600 dark:text-emerald-400\"\n : n < 400\n ? \"text-blue-600 dark:text-blue-400\"\n : n < 500\n ? \"text-amber-600 dark:text-amber-400\"\n : \"text-red-600 dark:text-red-400\";\n\n return <span className={cls(\"text-xs font-bold font-mono\", color)}>{code}</span>;\n}\n","import React, { useState, useCallback, useMemo, useEffect } from \"react\";\nimport { Typography, Button, cls, defaultBorderMixin, iconSize } from \"@rebasepro/ui\";\nimport { LoaderIcon, SendIcon, PlusIcon, XIcon } from \"lucide-react\";\nimport { useRebaseContext, UserSelectPopover, SelectableUser } from \"@rebasepro/core\";\nimport { AuthSimulationSelector } from \"../AuthSimulationSelector\";\nimport type { ParsedEndpoint } from \"./types\";\nimport type { User } from \"@rebasepro/types\";\n\ninterface TryItPanelProps {\n endpoint: ParsedEndpoint;\n apiUrl: string;\n getAuthToken: () => Promise<string | null | undefined>;\n user: User | null;\n basePath?: string;\n}\n\n/**\n * Interactive \"Try It\" panel that lets the user execute API requests\n * using their current JWT token directly from the Studio.\n */\nexport function TryItPanel({ endpoint, apiUrl, getAuthToken, user, basePath = \"\" }: TryItPanelProps) {\n const storageKey = `rebase_apiexplorer_${endpoint.method}_${endpoint.path}`;\n\n const [pathParams, setPathParams] = useState<Record<string, string>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_path`); if (v) return JSON.parse(v); } catch {}\n return {};\n });\n const [queryParams, setQueryParams] = useState<Record<string, string>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_query`); if (v) return JSON.parse(v); } catch {}\n return {};\n });\n const [customHeaders, setCustomHeaders] = useState<Array<{ key: string; value: string }>>(() => {\n try { const v = localStorage.getItem(`${storageKey}_headers`); if (v) return JSON.parse(v); } catch {}\n return [{ key: \"rebase-branch\", value: \"\" }];\n });\n const [body, setBody] = useState(() => {\n try { const v = localStorage.getItem(`${storageKey}_body`); if (v) return JSON.parse(v); } catch {}\n return buildBodyTemplate(endpoint);\n });\n const [response, setResponse] = useState<{ status: number; statusText: string; body: string; time: number } | null>(\n null\n );\n const [loading, setLoading] = useState(false);\n const [authMode, setAuthMode] = useState<\"jwt\" | \"none\">(\"jwt\");\n const [validationError, setValidationError] = useState<string | null>(null);\n\n const rebaseContext = useRebaseContext();\n const userManagement = rebaseContext.userManagement;\n const currentUser = rebaseContext.authController?.user;\n\n const users = useMemo((): SelectableUser[] => {\n const managed = (userManagement?.users ?? []).map(u => ({\n uid: u.uid,\n displayName: u.displayName,\n email: u.email,\n photoURL: u.photoURL,\n roles: u.roles\n }));\n if (currentUser && !managed.some(u => u.uid === currentUser.uid)) {\n managed.unshift({\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n });\n }\n return managed;\n }, [userManagement?.users, currentUser]);\n\n const currentSelectableUser = useMemo((): SelectableUser | null => {\n if (!currentUser) return null;\n return {\n uid: currentUser.uid,\n displayName: currentUser.displayName,\n email: currentUser.email,\n photoURL: currentUser.photoURL,\n roles: currentUser.roles\n };\n }, [currentUser]);\n\n const [selectedUser, setSelectedUser] = useState<SelectableUser | null>(null);\n\n useEffect(() => {\n localStorage.setItem(`${storageKey}_path`, JSON.stringify(pathParams));\n localStorage.setItem(`${storageKey}_query`, JSON.stringify(queryParams));\n localStorage.setItem(`${storageKey}_headers`, JSON.stringify(customHeaders));\n localStorage.setItem(`${storageKey}_body`, JSON.stringify(body));\n }, [storageKey, pathParams, queryParams, customHeaders, body]);\n\n // Build the final URL\n const resolvedUrl = useMemo(() => {\n const base = basePath.startsWith(\"/\") ? basePath : `/${basePath}`;\n const cleanBase = base === \"/\" ? \"\" : base;\n let url = `${apiUrl.replace(/\\/+$/, \"\")}${cleanBase}${endpoint.path}`;\n // Replace path params\n for (const [key, val] of Object.entries(pathParams)) {\n url = url.replace(`{${key}}`, encodeURIComponent(val));\n }\n // Append query params\n const qp = Object.entries(queryParams).filter(([, v]) => v.trim() !== \"\");\n if (qp.length > 0) {\n url += \"?\" + qp.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`).join(\"&\");\n }\n return url;\n }, [apiUrl, basePath, endpoint.path, pathParams, queryParams]);\n\n const pathParamDefs = endpoint.parameters.filter((p) => p.in === \"path\");\n const queryParamDefs = endpoint.parameters.filter((p) => p.in === \"query\");\n const hasBody = [\"post\", \"put\", \"patch\"].includes(endpoint.method);\n\n const execute = useCallback(async () => {\n setValidationError(null);\n if (hasBody && body.trim()) {\n try {\n JSON.parse(body);\n } catch (err: any) {\n setValidationError(`Invalid JSON: ${err.message}`);\n return;\n }\n }\n\n setLoading(true);\n setResponse(null);\n const start = performance.now();\n\n try {\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n \n for (const h of customHeaders) {\n if (h.key.trim()) headers[h.key.trim()] = h.value;\n }\n\n if (authMode === \"jwt\") {\n const token = await getAuthToken();\n if (token) headers[\"Authorization\"] = `Bearer ${token}`;\n if (selectedUser && selectedUser.uid !== currentUser?.uid) {\n headers[\"x-rebase-impersonate\"] = selectedUser.uid;\n }\n }\n\n const res = await fetch(resolvedUrl, {\n method: endpoint.method.toUpperCase(),\n headers,\n body: hasBody && body.trim() ? body : undefined\n });\n\n const elapsed = Math.round(performance.now() - start);\n let text: string;\n \n const rawText = await res.text();\n try {\n const json = JSON.parse(rawText);\n text = JSON.stringify(json, null, 2);\n } catch {\n text = rawText;\n }\n\n setResponse({ status: res.status,\nstatusText: res.statusText,\nbody: text,\ntime: elapsed });\n } catch (err: any) {\n setResponse({\n status: 0,\n statusText: \"Network Error\",\n body: err.message ?? \"Request failed\",\n time: Math.round(performance.now() - start)\n });\n } finally {\n setLoading(false);\n }\n }, [resolvedUrl, endpoint.method, hasBody, body, authMode, getAuthToken, customHeaders, selectedUser, currentUser?.uid]);\n\n return (\n <div className=\"flex flex-col h-full\">\n <div className=\"p-5 space-y-5 overflow-y-auto flex-1\">\n {/* Auth Mode */}\n <AuthSimulationSelector\n authMode={authMode}\n setAuthMode={setAuthMode}\n selectedUser={selectedUser}\n setSelectedUser={setSelectedUser}\n users={users}\n loading={userManagement?.loading}\n currentUser={currentSelectableUser}\n />\n\n {/* Path Params */}\n {pathParamDefs.length > 0 && (\n <ParamSection\n title=\"Path Parameters\"\n params={pathParamDefs}\n values={pathParams}\n onChange={(k, v) => setPathParams((prev) => ({ ...prev,\n[k]: v }))}\n />\n )}\n\n {/* Query Params */}\n {queryParamDefs.length > 0 && (\n <ParamSection\n title=\"Query Parameters\"\n params={queryParamDefs}\n values={queryParams}\n onChange={(k, v) => setQueryParams((prev) => ({ ...prev, [k]: v }))}\n />\n )}\n\n {/* Custom Headers */}\n <CustomKeyValueSection\n title=\"Custom Headers\"\n values={customHeaders}\n onChange={(i, k, v) => {\n const next = [...customHeaders];\n next[i] = { key: k, value: v };\n setCustomHeaders(next);\n }}\n onAdd={() => setCustomHeaders((prev) => [...prev, { key: \"\", value: \"\" }])}\n onRemove={(i) => {\n const next = [...customHeaders];\n next.splice(i, 1);\n setCustomHeaders(next);\n }}\n />\n\n {/* Request Body */}\n {hasBody && (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider mb-2 block\"\n >\n Request Body\n </Typography>\n <textarea\n value={body}\n onChange={(e) => { setBody(e.target.value); setValidationError(null); }}\n rows={10}\n spellCheck={false}\n className={cls(\n \"w-full font-mono text-xs p-3 rounded-lg resize-y\",\n \"bg-surface-50 dark:bg-surface-900\",\n validationError ? \"border-red-500 focus:ring-red-500/30\" : cls(\"border focus:ring-primary/30 dark:focus:ring-primary-dark/30\", defaultBorderMixin),\n \"text-text-primary dark:text-text-primary-dark\",\n \"focus:outline-none focus:ring-2\",\n \"transition-all\"\n )}\n />\n {validationError && (\n <Typography variant=\"caption\" className=\"text-red-500 mt-1 block text-xs\">\n {validationError}\n </Typography>\n )}\n </div>\n )}\n\n {/* URL Preview */}\n <div className=\"rounded-lg bg-surface-100 dark:bg-surface-900 p-3\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-[10px] uppercase tracking-wider block mb-1\"\n >\n Request URL\n </Typography>\n <code className=\"text-xs font-mono text-text-primary dark:text-text-primary-dark break-all\">\n {resolvedUrl}\n </code>\n </div>\n\n {/* Execute Button */}\n <Button variant=\"filled\" onClick={execute} disabled={loading} className=\"w-full\">\n {loading ? (\n <span className=\"flex items-center gap-2\">\n <LoaderIcon size={iconSize.small} className=\"animate-spin\" />\n Sending…\n </span>\n ) : (\n <span className=\"flex items-center gap-2\">\n <SendIcon size={iconSize.small} />\n Send Request\n </span>\n )}\n </Button>\n\n {/* Response */}\n {response && (\n <div className={cls(\"rounded-lg border overflow-hidden\", defaultBorderMixin)}>\n <div\n className={cls(\n \"flex items-center justify-between px-4 py-2.5\",\n \"bg-surface-50 dark:bg-surface-900/50\"\n )}\n >\n <div className=\"flex items-center gap-3\">\n <ResponseBadge status={response.status}/>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs\"\n >\n {response.statusText}\n </Typography>\n </div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-mono\"\n >\n {response.time}ms\n </Typography>\n </div>\n <pre\n className={cls(\n \"p-4 text-xs font-mono overflow-auto max-h-96\",\n \"bg-surface-950 text-emerald-400\",\n \"dark:bg-surface-900 dark:text-emerald-400\"\n )}\n >\n {response.body}\n </pre>\n </div>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Param Section ────────────────────────────────────────────────── */\n\nfunction ParamSection({\n title,\n params,\n values,\n onChange\n}: {\n title: string;\n params: ParsedEndpoint[\"parameters\"];\n values: Record<string, string>;\n onChange: (_key: string, _value: string) => void;\n}) {\n return (\n <div>\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider mb-2 block\"\n >\n {title}\n </Typography>\n <div className=\"space-y-2\">\n {params.map((p) => (\n <div key={p.name} className=\"flex items-center gap-3\">\n <label className=\"w-32 shrink-0\">\n <code className=\"text-xs font-mono font-semibold\">{p.name}</code>\n {p.required && <span className=\"text-red-500 ml-0.5 text-xs\">*</span>}\n </label>\n <input\n type=\"text\"\n placeholder={p.description ?? p.name}\n value={values[p.name] ?? \"\"}\n onChange={(e) => onChange(p.name, e.target.value)}\n className={cls(\n \"flex-1 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction CustomKeyValueSection({\n title,\n values,\n onChange,\n onAdd,\n onRemove\n}: {\n title: string;\n values: Array<{ key: string; value: string }>;\n onChange: (index: number, key: string, value: string) => void;\n onAdd: () => void;\n onRemove: (index: number) => void;\n}) {\n return (\n <div>\n <div className=\"flex items-center justify-between mb-2\">\n <Typography\n variant=\"caption\"\n className=\"text-text-secondary dark:text-text-secondary-dark text-xs font-semibold uppercase tracking-wider block\"\n >\n {title}\n </Typography>\n <button\n onClick={onAdd}\n className=\"text-xs text-primary dark:text-primary-dark hover:underline flex items-center gap-1 font-medium\"\n >\n <PlusIcon size={iconSize.small} className=\"mr-1\" /> Add Header\n </button>\n </div>\n <div className=\"space-y-2\">\n {values.map((v, i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"Header name\"\n value={v.key}\n onChange={(e) => onChange(i, e.target.value, v.value)}\n className={cls(\n \"w-1/3 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n <input\n type=\"text\"\n placeholder=\"Value\"\n value={v.value}\n onChange={(e) => onChange(i, v.key, e.target.value)}\n className={cls(\n \"flex-1 px-3 py-1.5 text-xs rounded-lg font-mono\",\n \"bg-surface-50 dark:bg-surface-900\",\n \"border\",\n defaultBorderMixin,\n \"text-text-primary dark:text-text-primary-dark\",\n \"placeholder:text-text-secondary/50\",\n \"focus:outline-none focus:ring-2 focus:ring-primary/30\",\n \"transition-all\"\n )}\n />\n <button\n onClick={() => onRemove(i)}\n className=\"p-1.5 text-text-secondary hover:text-red-500 rounded transition-colors flex items-center justify-center shrink-0\"\n title=\"Remove\"\n >\n <XIcon size={iconSize.small} />\n </button>\n </div>\n ))}\n {values.length === 0 && (\n <Typography variant=\"caption\" className=\"text-text-secondary/50 italic text-xs\">\n No custom headers added.\n </Typography>\n )}\n </div>\n </div>\n );\n}\n\n/* ── Helpers ──────────────────────────────────────────────────────── */\n\nfunction ResponseBadge({ status }: { status: number }) {\n let colorClass = \"text-red-500\";\n if (status >= 200 && status < 300) colorClass = \"text-emerald-500\";\n else if (status >= 300 && status < 400) colorClass = \"text-blue-500\";\n else if (status >= 400 && status < 500) colorClass = \"text-amber-500\";\n\n return (\n <span className={cls(\"text-xs font-bold font-mono\", colorClass)}>\n {status || \"ERR\"}\n </span>\n );\n}\n\nfunction buildBodyTemplate(endpoint: ParsedEndpoint): string {\n if (!endpoint.requestBody?.content) return \"{\\n \\n}\";\n const json = endpoint.requestBody.content[\"application/json\"];\n if (!json?.schema?.properties) return \"{\\n \\n}\";\n\n const props = json.schema.properties;\n const lines: string[] = [\"{\"];\n const keys = Object.keys(props);\n keys.forEach((key, i) => {\n const prop = props[key];\n if (prop.readOnly) return;\n const comma = i < keys.length - 1 ? \",\" : \"\";\n const val = defaultValue(prop);\n lines.push(` \"${key}\": ${val}${comma}`);\n });\n lines.push(\"}\");\n return lines.join(\"\\n\");\n}\n\nfunction defaultValue(schema: any): string {\n if (schema.enum) return JSON.stringify(schema.enum[0]);\n switch (schema.type) {\n case \"string\":\n return schema.format === \"date-time\" ? `\"${new Date().toISOString()}\"` : '\"\"';\n case \"number\":\n case \"integer\":\n return \"0\";\n case \"boolean\":\n return \"false\";\n case \"array\":\n return \"[]\";\n default:\n return \"null\";\n }\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { useApiConfig, useAuthController } from \"@rebasepro/core\";\nimport {\n CircularProgress,\n Typography,\n Alert,\n cls,\n Button,\n Chip,\n defaultBorderMixin,\n SearchBar,\n iconSize\n} from \"@rebasepro/ui\";\nimport { BookOpenIcon, PlayIcon } from \"lucide-react\";\nimport { EndpointDetail } from \"./EndpointDetail\";\nimport { TryItPanel } from \"./TryItPanel\";\nimport type { OpenApiSpec, ParsedEndpoint } from \"./types\";\nimport { parseOpenApiSpec } from \"./parseSpec\";\n\n/**\n * Custom-built API Explorer for Rebase Studio.\n * No external dependencies — renders the OpenAPI spec natively\n * with deep integration into the Rebase auth system.\n */\nexport function ApiExplorer() {\n const apiConfig = useApiConfig();\n const authController = useAuthController();\n const apiUrl = apiConfig?.apiUrl;\n\n const [spec, setSpec] = useState<OpenApiSpec | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n const [selectedEndpoint, setSelectedEndpoint] = useState<ParsedEndpoint | null>(null);\n const [sidebarFilter, setSidebarFilter] = useState(\"\");\n const [tryItOpen, setTryItOpen] = useState(false);\n\n // Fetch OpenAPI spec\n useEffect(() => {\n if (!apiUrl) return;\n let cancelled = false;\n const specUrl = `${apiUrl.replace(/\\/+$/, \"\")}/api/docs`;\n\n (async () => {\n try {\n const res = await fetch(specUrl);\n if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);\n const data = await res.json();\n if (!cancelled) {\n setSpec(data);\n setLoading(false);\n }\n } catch (err: any) {\n if (!cancelled) {\n setError(err.message ?? \"Failed to load API spec\");\n setLoading(false);\n }\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [apiUrl]);\n\n // Parse spec into grouped endpoints\n const { groups, allEndpoints } = useMemo(() => {\n if (!spec) return { groups: [],\nallEndpoints: [] };\n return parseOpenApiSpec(spec);\n }, [spec]);\n\n // Filter\n const filteredGroups = useMemo(() => {\n if (!sidebarFilter.trim()) return groups;\n const q = sidebarFilter.toLowerCase();\n return groups\n .map((g) => ({\n ...g,\n endpoints: g.endpoints.filter(\n (e) =>\n e.path.toLowerCase().includes(q) ||\n e.summary.toLowerCase().includes(q) ||\n e.method.toLowerCase().includes(q)\n )\n }))\n .filter((g) => g.endpoints.length > 0);\n }, [groups, sidebarFilter]);\n\n // Auto-select first endpoint\n useEffect(() => {\n if (!selectedEndpoint && allEndpoints.length > 0) {\n setSelectedEndpoint(allEndpoints[0]);\n }\n }, [allEndpoints, selectedEndpoint]);\n\n // ── States ───────────────────────────────────────────────────────\n if (!apiUrl) {\n return (\n <div className=\"flex items-center justify-center h-full w-full p-8\">\n <Alert color=\"warning\">\n <Typography variant=\"body2\">\n No API URL configured. Ensure your app provides an{\" \"}\n <code className=\"font-mono text-xs\">apiUrl</code>.\n </Typography>\n </Alert>\n </div>\n );\n }\n\n if (loading) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full w-full gap-4\">\n <CircularProgress size=\"medium\"/>\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark animate-pulse\">\n Loading API specification…\n </Typography>\n </div>\n );\n }\n\n if (error || !spec) {\n return (\n <div className=\"flex items-center justify-center h-full w-full p-8\">\n <Alert color=\"error\">\n <Typography variant=\"body2\">{error ?? \"Unknown error\"}</Typography>\n </Alert>\n </div>\n );\n }\n\n const METHOD_COLORS: Record<string, string> = {\n get: \"text-blue-600 dark:text-blue-400\",\n post: \"text-emerald-600 dark:text-emerald-400\",\n put: \"text-amber-600 dark:text-amber-400\",\n patch: \"text-orange-600 dark:text-orange-400\",\n delete: \"text-red-600 dark:text-red-400\"\n };\n\n return (\n <div className=\"flex h-full w-full overflow-hidden\">\n {/* ── Sidebar ──────────────────────────────────────── */}\n <div\n className={cls(\n \"w-72 min-w-[272px] flex flex-col h-full overflow-hidden border-r\",\n defaultBorderMixin,\n \"bg-surface-50 dark:bg-surface-900\"\n )}\n >\n {/* Header */}\n <div className=\"p-4 space-y-3\">\n <div className=\"flex items-center gap-2\">\n <BookOpenIcon size={iconSize.medium} className=\"text-primary dark:text-primary-dark\" />\n <Typography variant=\"subtitle2\" className=\"font-semibold\">\n {spec.info?.title ?? \"API Reference\"}\n </Typography>\n </div>\n {spec.info?.version && (\n <Chip size=\"smallest\" colorScheme=\"cyanDarker\">\n v{spec.info.version}\n </Chip>\n )}\n {/* Search */}\n <div className=\"mb-2\">\n <SearchBar\n placeholder=\"Filter endpoints…\"\n size=\"small\"\n onTextSearch={(val) => setSidebarFilter(val || \"\")}\n />\n </div>\n\n {/* Auth status removed to avoid redundancy with the AuthSimulationSelector */}\n </div>\n\n {/* Endpoint list */}\n <div className=\"flex-1 overflow-y-auto px-2 pb-4\">\n {filteredGroups.map((group) => (\n <div key={group.tag} className=\"mb-3\">\n <Typography\n variant=\"caption\"\n className=\"px-2 py-1.5 text-text-secondary dark:text-text-secondary-dark uppercase tracking-wider font-semibold text-[10px]\"\n >\n {group.tag}\n </Typography>\n {group.endpoints.map((ep) => {\n const isSelected = selectedEndpoint?.id === ep.id;\n return (\n <button\n key={ep.id}\n onClick={() => {\n setSelectedEndpoint(ep);\n setTryItOpen(false);\n }}\n className={cls(\n \"w-full flex items-center justify-between gap-2 px-2.5 py-1.5 rounded-lg text-left text-sm transition-all\",\n \"hover:bg-surface-200 dark:hover:bg-surface-800\",\n isSelected\n ? \"bg-surface-200 dark:bg-surface-800 font-medium\"\n : \"text-text-primary dark:text-text-primary-dark\"\n )}\n >\n <span className=\"truncate text-[13px] opacity-90\">{ep.summary || ep.shortPath}</span>\n <span\n className={cls(\n \"text-[10px] font-bold uppercase shrink-0\",\n METHOD_COLORS[ep.method] ?? \"text-text-secondary\"\n )}\n >\n {ep.method}\n </span>\n </button>\n );\n })}\n </div>\n ))}\n {filteredGroups.length === 0 && (\n <Typography\n variant=\"body2\"\n className=\"text-center text-text-secondary dark:text-text-secondary-dark py-8\"\n >\n No endpoints match\n </Typography>\n )}\n </div>\n </div>\n\n {/* ── Main content ─────────────────────────────────── */}\n <div className=\"flex-1 flex flex-col h-full overflow-hidden\">\n {selectedEndpoint ? (\n <>\n {/* Top bar */}\n <div\n className={cls(\n \"flex items-center justify-between px-5 py-3 gap-4 shrink-0 border-b z-10\",\n defaultBorderMixin,\n \"bg-surface-50/80 dark:bg-surface-950/80 backdrop-blur-md sticky top-0\"\n )}\n >\n <div className=\"flex items-center gap-3 min-w-0\">\n <span\n className={cls(\n \"text-xs font-bold uppercase\",\n METHOD_COLORS[selectedEndpoint.method] ?? \"\"\n )}\n >\n {selectedEndpoint.method}\n </span>\n <code className=\"text-sm font-mono text-text-primary dark:text-text-primary-dark truncate\">\n {selectedEndpoint.path}\n </code>\n </div>\n <Button\n variant={tryItOpen ? \"filled\" : \"outlined\"}\n size=\"small\"\n onClick={() => setTryItOpen((v) => !v)}\n >\n <PlayIcon size={iconSize.small} className=\"mr-1\" />\n Try It\n </Button>\n </div>\n\n {/* Body */}\n <div className=\"flex-1 overflow-y-auto\">\n {tryItOpen ? (\n <TryItPanel\n key={selectedEndpoint.operationId || selectedEndpoint.path}\n endpoint={selectedEndpoint}\n apiUrl={apiUrl}\n getAuthToken={apiConfig?.getAuthToken ?? authController.getAuthToken}\n user={authController.user}\n basePath={spec?.servers?.[0]?.url || \"\"}\n />\n ) : (\n <EndpointDetail endpoint={selectedEndpoint} spec={spec}/>\n )}\n </div>\n </>\n ) : (\n <div className=\"flex items-center justify-center h-full\">\n <Typography variant=\"body2\" className=\"text-text-secondary dark:text-text-secondary-dark\">\n Select an endpoint from the sidebar\n </Typography>\n </div>\n )}\n </div>\n </div>\n );\n}\n\nApiExplorer.displayName = \"ApiExplorer\";\n\n"],"names":["SECTIONS","label","dotColor","iconColor","tools","path","name","description","icon","StudioHomePage","t0","$","_c","additionalActions","additionalChildrenStart","additionalChildrenEnd","sections","context","useRebaseContext","breadcrumbs","useStudioBreadcrumbs","navigate","useNavigate","t1","set","t2","useEffect","containerRef","useRestoreScroll","t3","sectionProps","pluginActions","useSlot","t4","jsxs","t5","map","section","jsx","Typography","tool","Card","analyticsController","onAnalyticsEvent","cls","IconForView","slug","alignSelf","ArrowRightIcon","iconSize","small","t6","t7","Symbol","for","t8","t9","t10","t11","_temp","t12","Container","t13","s","title","children","key","SyntaxHighlightedSnippet","kw","tx","fn","str","op","t14","t15","t16","t17","typ","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","t31","t32","cm","t33","t34","t35","t36","t37","t38","t39","t40","t41","t42","t43","t44","t45","t46","t47","t48","t49","SQLEditor","lazy","then","m","default","JSEditor","RLSEditor","StorageView","CronJobsView","SchemaVisualizer","BranchesView","ApiExplorer","DEFAULT_HOME_PAGE","RebaseStudio","homePage","dispatch","useRebaseRegistryDispatch","resolvedHomePage","devViews","useMemo","views","activeTools","suspense","el","Suspense","CircularProgressCenter","includes","push","group","view","homePageRef","React","useRef","current","useLayoutEffect","registerStudio","unregisterStudio","MonacoEditor","value","onChange","onRun","className","readOnly","autoFocus","schemas","mode","useModeController","editorRef","monacoRef","onRunRef","schemasRef","handleEditorOnMount","editor","monaco","addAction","id","keybindings","KeyMod","CtrlCmd","KeyCode","Enter","contextMenuGroupId","contextMenuOrder","run","selection","getSelection","selectedText","undefined","isEmpty","getModel","getValueInRange","trim","sqlKeywords","languages","registerCompletionItemProvider","triggerCharacters","provideCompletionItems","model","position","word","getWordUntilPosition","range","startLineNumber","lineNumber","endLineNumber","startColumn","endColumn","textUntilPosition","column","match","tableNameMatch","suggestions","allSchemas","tables","Object","entries","table","find","t","tableName","columns","forEach","col","kind","CompletionItemKind","Field","insertText","detail","sortText","sName","Class","keyword","Keyword","fullText","getValue","activeTables","Set","regex","RegExp","test","add","addedColumns","has","focus","minimap","enabled","fontSize","lineNumbers","scrollBeyondLastLine","automaticLayout","tabSize","wordWrap","SchemaBrowser","onTableClick","isSchemaLoading","schemaError","onRetrySchema","expandedSchemas","setExpandedSchemas","useState","public","expandedTables","setExpandedTables","useTranslation","CircularProgress","ErrorView","defaultBorderMixin","IconButton","RefreshCwIcon","smallest","keys","length","schemaName","prev","e","stopPropagation","navigator","clipboard","writeText","CopyIcon","Menu","MoreVerticalIcon","MenuItem","c","join","Button","dataType","SQLEditorSidebar","onSelectSnippet","snippets","history","onDeleteSnippet","activeTab","setActiveTab","Tabs","v","Tab","favorites","filter","isFavorite","others","Fragment","snippet","sql","Trash2Icon","reverse","i","extractTablesFromQuery","sqlString","ast","parseFirst","type","processFrom","fromItems","item","alias","left","right","from","resolveQueryCollections","collections","resultColumns","selectColumns","expr","results","matched","toSnakeCase","tableColumns","schemaEntries","values","tableInfo","pkColumn","tableRef","idSelectCol","sc","tableAlias","collection","determineTableAndPK","columnKey","error","resolvedColumn","actualDbColumnName","columnTableRef","resolvedTableName","matchedTable","matchedTables","schema","ti","some","pkDbColumns","isPrimaryKey","tableEntry","primaryKeys","dbCol","selectCol","dbColumn","resultColumn","console","warn","message","Error","String","ExplainVisualizer","plan","isRoot","expanded","setExpanded","hasChildren","Plans","cost","costColor","Alias","toFixed","Filter","Collapse","childPlan","idx","VirtualTableInput","cms","require","STORAGE_KEY_TABS","STORAGE_KEY_ACTIVE_TAB","FixedEditorOverlay","displayValue","onSave","onCancel","rect","setRect","width","height","windowSize","setWindowSize","anchorRef","parentElement","getBoundingClientRect","window","innerWidth","innerHeight","handleResize","addEventListener","removeEventListener","top","minWidth","Math","max","minHeight","maxAvailableHeight","resolvedMaxHeight","min","maxWidth","val","target","style","scrollHeight","e_0","e_1","e_2","shiftKey","preventDefault","currentTarget","createPortal","document","body","databaseAdmin","sideEntityController","useStudioSideEntityController","snackbarController","useSnackbarController","collectionRegistry","useStudioCollectionRegistry","setSchemas","setIsSchemaLoading","schemaFetchedRef","setSchemaError","selectedDatabase","setSelectedDatabase","localStorage","getItem","selectedRole","setSelectedRole","availableDatabases","setAvailableDatabases","availableRoles","setAvailableRoles","isLoadingConfig","setIsLoadingConfig","connectionConfigError","setConnectionConfigError","tabs","setTabs","saved","parsed","JSON","parse","loading","execTime","lastExecutedSql","database","role","activeTabId","setActiveTabId","updateActiveTab","useCallback","update","setSql","newSql","mounted","fetchConnectionConfig","fetchAvailableDatabases","fetchAvailableRoles","dbs","roles","currentDbFromApi","Promise","all","fetchCurrentDatabase","resolve","loadedDb","loadedRole","initialActiveTabId","initialTabs","savedTabs","currentActiveTab","actualDb","setItem","actualRole","err","handleDatabaseChange","db","tabId","handleRoleChange","handleTabChange","newTabId","newTab","fetchSchema","executeSql","result","processGrouped","data","grouped","reduce","acc","curr","SCHEMA","table_schema","TABLE","table_name","COLUMN","column_name","data_type","DATA_TYPE","is_pk","Array","isArray","rows","autoLimit","setAutoLimit","isConfirmDialogOpen","setIsConfirmDialogOpen","pendingAction","setPendingAction","editingCell","setEditingCell","handleDoubleClick","rowIndex","initialValue","rowData","open","resolution","missingPKs","pk","handleCellSave","newValue","formatValue","replace","resolveDbColumnName","resultColKey","colName","dbColumnName","whereConditions","updateSql","newResults","columnWidths","setColumnWidths","setSnippets","setHistory","isSaveDialogOpen","setIsSaveDialogOpen","newSnippetName","setNewSnippetName","savedSnippets","savedHistory","sanitizedTabs","stringify","saveSnippets","newSnippets","saveHistory","newHistory","slice","handleDeleteSnippet","handleAddTab","newId","random","toString","substring","maxNumber","tab","num","parseInt","handleCloseTab","tabIndex","findIndex","newTabs","nextIndex","handleColumnResize","newWidths","handlePrettify","formatted","handleExplain","explainSql","start","performance","now","round","executeRun","sqlOverride","sqlToRun","upperSql","toUpperCase","isAggregate","isExplain","handleRun","sqlTarget","destructiveKeywords","hasDestructive","hasWhere","handleKeyDown","metaKey","ctrlKey","activeElement","isInput","tagName","isMonaco","handleSaveSnippet","newSnippet","createdAt","Date","handleExportCSV","headers","row","csv","blob","Blob","url","URL","createObjectURL","a","createElement","href","download","toISOString","click","revokeObjectURL","handleExportJSON","json","handleExportMarkdown","headerRow","dividerRow","dataRows","header","markdown","catch","renderResults","Plan","savedWidths","resultColumnKeys","matchedCollections","actionableCollections","mc","getRowEntityActions","entityId","dataColumns","sortable","resizable","Tooltip","VirtualTable","rowActions","ra","updateUrl","PencilIcon","isEditing","sidebarSize","setSidebarSize","parseFloat","editorHeight","setEditorHeight","activeSnippet","ResizablePanels","TerminalIcon","XIcon","PlusIcon","MenuIcon","checked","DatabaseIcon","PlayIcon","Dialog","DialogTitle","DialogContent","TextField","DialogActions","ConfirmationDialog","REBASE_CLIENT_TYPES","JSMonacoEditor","collectionSlugs","typesRegisteredRef","editorInstance","ts","typescript","typescriptDefaults","setCompilerOptions","ScriptTarget","ESNext","module","ModuleKind","allowJs","checkJs","strict","noEmit","allowNonTsExtensions","setDiagnosticsOptions","diagnosticCodesToIgnore","addExtraLib","lines","ifaceName","propsType","properties","p","collectionHints","suggestOnTriggerCharacters","quickSuggestions","parameterHints","QUICK_REFERENCE","code","JSEditorSidebar","onInsertCode","ref","CollectionItem","prop","SnippetItem","onSelect","onDelete","AuthSimulationSelector","authMode","setAuthMode","selectedUser","setSelectedUser","users","currentUser","KeyRoundIcon","UserSelectPopover","STORAGE_PREFIX","DEFAULT_CODE","loadFromStorage","fallback","raw","saveToStorage","formatJSON","detectCollectionsInResult","resultValue","mentionedSlugs","collectionCallRegex","exec","dotAccessRegex","size","hasId","r","normalised","collectionSlug","rebaseContext","rebaseClient","useRebaseClient","apiConfig","useApiConfig","snackbar","userManagement","authController","user","setResult","isRunning","setIsRunning","showSaveDialog","setShowSaveDialog","snippetName","setSnippetName","resultView","setResultView","stored","Number","collectionInfos","managed","u","uid","displayName","email","photoURL","unshift","currentSelectableUser","updateActiveCode","addTab","closeTab","filtered","fresh","buildClient","apiUrl","getAuthToken","client","createRebaseClient","baseUrl","token","isScoped","executeCode","codeOverride","deduped","h","consoleEntries","startTime","scopedClientToCleanUp","originalConsole","log","info","captureConsole","args","timestamp","AsyncFunction","getPrototypeOf","constructor","duration","ws","disconnect","saveSnippet","deleteSnippet","exportResult","tableData","entity","k","SaveIcon","DownloadIcon","Chip","entry","JSONHighlight","themes","vsDark","github","Highlight","tokens","getLineProps","getTokenProps","backgroundColor","line","COMMAND_OPTIONS","ROLE_OPTIONS","POLICY_PRESETS","policyname","cmd","permissive","qual","with_check","PolicyEditor","policy","setName","helpOpen","setHelpOpen","behavior","setBehavior","command","setCommand","setRoles","usingExpr","setUsingExpr","checkExpr","setCheckExpr","selectedPreset","setSelectedPreset","initialRoles","presetId","preset","handlePresetChange","showCheck","handleSave","HelpCircleIcon","Select","SelectItem","_temp2","t50","MultiSelect","t51","t52","Paper","t53","t54","v_0","t55","t56","t57","t58","t59","t60","t61","t62","t63","t64","t65","t66","t67","t68","t69","t70","t71","t72","t73","t74","t75","t76","t77","t78","t79","t80","t81","t82","t83","t84","t85","t86","t87","t88","t89","t90","t91","t92","t93","t94","t95","t96","t97","t98","t99","t100","t101","t102","t103","t104","t105","t106","t107","t108","t109","t110","t111","t112","t113","t114","t115","t116","t117","t118","t119","t120","t121","t122","t123","t124","t125","t126","t127","t128","t129","t130","t131","t132","preset_0","MultiSelectItem","isLoading","setIsLoading","setError","setTables","selectedTable","setSelectedTable","editingPolicy","setEditingPolicy","sidebarTab","setSidebarTab","fetchRLSData","tablesSql","tablesResult","policiesSql","policiesResult","extractRows","tRows","pRows","tableMap","tRow","schemaname","SCHEMANAME","tablename","TABLENAME","rlsEnabled","rowsecurity","ROWSECURITY","policies","pRow","parsedRoles","ROLES","split","POLICYNAME","PERMISSIVE","CMD","QUAL","WITH_CHECK","sortedTables","sort","b","localeCompare","activeTableData","groupedTables","groups","activeCollection","collectionId","mergedPolicies","policiesMap","status","isPostgresCollection","securityRules","rule","ruleName","operation","using","withCheck","rlsStats","total","withPolicies","totalPolicies","sum","renderPolicyTag","schemaTables","isSelected","ShieldIcon","action","confirm","toLowerCase","newPolicy","existingRules","newRules","response","fetch","method","collectionData","ok","Alert","AlertTriangleIcon","KeyIcon","formatFileSize","bytes","getFileIcon","contentType","FileTextIcon","startsWith","ImageIcon","VideoIcon","Music2Icon","getExtension","parts","breadcrumbSegments","Boolean","segments","accumulated","part","UploadDialog","currentPath","onClose","onUpload","uploading","setUploading","selectedFiles","setSelectedFiles","handleFilesAdded","files","handleRemoveFile","index","_","handleUpload","handleClose","o","FileUpload","UploadCloudIcon","file","FilePreviewPanel","downloadUrl","FileIconComponent","deleteDialogOpen","setDeleteDialogOpen","ext","isImage_0","isVideo_0","isAudio_0","downloadUrl_0","isImage","isVideo","isAudio","fullPath","StorageSidebar","folders","onNavigate","HomeIcon","folder","FolderIcon","storageSource","useStorageSource","setCurrentPath","setLoading","setFolders","setFiles","selectedFile","setSelectedFile","selectedDownloadUrl","setSelectedDownloadUrl","uploadDialogOpen","setUploadDialogOpen","viewMode","setViewMode","fetchContents","listObjects","folderItems","prefixes","isFolder","fileItems","items","downloadConfig","getSignedUrl","metadata","handleNavigate","handleNavigateUp","pop","handleSelectFile","config","uploadFiles","putObject","handleDeleteFile","deleteObject","handleRefresh","renderContents","allItems","FileIconComp","ArrowLeftIcon","seg","LayoutGridIcon","ListIcon","formatDuration","ms","formatRelative","iso","d","diff","getTime","abs","toLocaleString","stateColors","idle","running","success","disabled","jobs","setJobs","selectedId","setSelectedId","logs","setLogs","logsLoading","setLogsLoading","triggering","setTriggering","clientRef","snackbarRef","cancelled","load","cron","res","listJobs","setInterval","clearInterval","getJobLogs","limit","finally","refreshJobs","refreshLogs","handleTrigger","triggerJob","handleToggle","toggleJob","selectedJob","j","CalendarIcon","medium","job","state","schedule","PauseIcon","StatCard","lastRunAt","nextRunAt","lastDurationMs","totalRuns","totalFailures","lastError","AlertCircleIcon","HistoryIcon","mono","chipColor","highlight","LogRow","CheckCircleIcon","startedAt","manual","durationMs","NODE_WIDTH","HEADER_HEIGHT_SINGLE","HEADER_HEIGHT_DOUBLE","ROW_HEIGHT","getHeaderHeight","opts","isJunction","collectionName","estimateNodeHeight","columnCount","headerHeight","getColumnRowY","getLayoutedElements","nodes","edges","direction","g","dagre","graphlib","Graph","setGraph","rankdir","nodesep","ranksep","edgesep","marginx","marginy","setDefaultEdgeLabel","nodeHeights","Map","node","headerH","setNode","edge","setEdge","source","layout","layoutedNodes","nodeWithPosition","get","layoutDirection","x","y","TYPE_LABELS","string","number","boolean","date","array","relation","getTypeLabel","getCardinalityLabel","cardinality","extractColumns","propName","isPk","isId","isEnum","enum","enumValues","enumProp","typeLabel","isForeignKey","isRequired","validation","required","resolvedRelations","resolveCollectionRelations","rel","localKey","relationName","existing","buildGraph","tableToNodeId","nodeColumns","getPkHandle","nodeId","cols","getFkHandle","fk","nodeData","isUnmanaged","historyEnabled","processedJunctions","sourceNodeId","relationKey","targetCollection","targetTable","targetNodeId","edgeData","hasJunction","through","hasJoinPath","joinPath","junctionNodeId","junctionColumns","sourceColumn","targetColumn","sourcePk","sourceHandle","targetHandle","markerEnd","MarkerType","ArrowClosed","layoutResult","nodePositions","srcPos","tgtPos","srcBaseHandle","tgtBaseHandle","srcCenterX","tgtCenterX","sourceIsLeft","useSchemaGraph","setDirection","version","setVersion","relayout","tableCount","relationCount","TableNodeInner","selected","midY","floor","Position","Right","Left","handles","TableNode","memo","col_0","Handle","RelationEdgeInner","sourceX","sourceY","targetX","targetY","sourcePosition","targetPosition","getSmoothStepPath","borderRadius","edgePath","labelX","labelY","isInverse","isJoinPath","strokeColor","strokeDasharray","strokeWidth","stroke","BaseEdge","EdgeLabelRenderer","transform","pointerEvents","RelationEdge","nodeTypes","tableNode","edgeTypes","relationEdge","SchemaVisualizerCanvas","reactFlowInstance","useReactFlow","layoutedEdges","setNodes","setEdges","searchQuery","setSearchQuery","initialFitDone","onNodesChange","changes","nds","applyNodeChanges","onEdgesChange","eds","applyEdgeChanges","timer","setTimeout","fitView","padding","clearTimeout","handleFitView","handleNodeClick","handlePaneClick","handleTableSelect","n","setCenter","zoom","postgresCollections","filteredCollections","q","junctionNodes","stats","relations","junctions","withRls","ReactFlow","hideAttribution","Background","BackgroundVariant","Dots","Controls","MiniMap","backgroundImage","registryCollections","ReactFlowProvider","formatSize","isNaN","d2","toLocaleDateString","branches","setBranches","selectedBranch","setSelectedBranch","createOpen","setCreateOpen","newBranchName","setNewBranchName","sourceBranch","setSourceBranch","creating","setCreating","deleteTarget","setDeleteTarget","deleting","setDeleting","branchAdmin","isBranchAdmin","loadBranches","listBranches","handleCreate","createBranch","handleDelete","deleteBranch","GitBranchIcon","large","branch","parentDatabase","sizeBytes","parseOpenApiSpec","spec","allEndpoints","tagMap","tagDescriptions","tags","methods","paths","indexOf","shortPath","endpoint","summary","parameters","requestBody","responses","security","operationId","tag","ORDER","post","put","patch","delete","tagOrder","sortedTags","ai","bi","endpoints","pa","resolveRefName","resolveRef","EndpointDetail","SlidersHorizontalIcon","UploadIcon","content","media","ArrowRightFromLineIcon","ct","media_0","in","schemaTypeLabel","SchemaBlock","depth","$ref","resolved","format","SectionHeading","StatusBadge","color","TryItPanel","basePath","storageKey","pathParams","setPathParams","queryParams","setQueryParams","customHeaders","setCustomHeaders","setBody","buildBodyTemplate","setResponse","validationError","setValidationError","resolvedUrl","base","cleanBase","encodeURIComponent","qp","pathParamDefs","queryParamDefs","hasBody","execute","elapsed","text","rawText","statusText","time","next","splice","LoaderIcon","SendIcon","ParamSection","params","CustomKeyValueSection","onAdd","onRemove","ResponseBadge","colorClass","props","comma","defaultValue","useAuthController","setSpec","selectedEndpoint","setSelectedEndpoint","sidebarFilter","setSidebarFilter","tryItOpen","setTryItOpen","specUrl","filteredGroups","METHOD_COLORS","BookOpenIcon","SearchBar","ep","servers"],"mappings":";;;;AA2BA,QAAMA,WAA4B,CAC9B;AAAA,IACIC,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,WAAW;AAAA,IACXC,OAAO,CACH;AAAA,MAAEC,MAAM;AAAA,MAAWC,MAAM;AAAA,MAAeC,aAAa;AAAA,MAA4DC,MAAM;AAAA,IAAA,GACvH;AAAA,MAAEH,MAAM;AAAA,MAAsBC,MAAM;AAAA,MAAqBC,aAAa;AAAA,MAA8DC,MAAM;AAAA,IAAA,GAC1I;AAAA,MAAEH,MAAM;AAAA,MAAQC,MAAM;AAAA,MAAeC,aAAa;AAAA,MAA0DC,MAAM;AAAA,IAAA,GAClH;AAAA,MAAEH,MAAM;AAAA,MAAaC,MAAM;AAAA,MAAYC,aAAa;AAAA,MAA8DC,MAAM;AAAA,IAAA,GACxH;AAAA,MAAEH,MAAM;AAAA,MAAQC,MAAM;AAAA,MAAgBC,aAAa;AAAA,MAA6DC,MAAM;AAAA,IAAA,CAAe;AAAA,EAE7I,GACA;AAAA,IACIP,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,WAAW;AAAA,IACXC,OAAO,CACH;AAAA,MAAEC,MAAM;AAAA,MAAOC,MAAM;AAAA,MAAcC,aAAa;AAAA,MAAwDC,MAAM;AAAA,IAAA,GAC9G;AAAA,MAAEH,MAAM;AAAA,MAASC,MAAM;AAAA,MAAaC,aAAa;AAAA,MAAiDC,MAAM;AAAA,IAAA,CAAS;AAAA,EAEzH,GACA;AAAA,IACIP,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,WAAW;AAAA,IACXC,OAAO,CACH;AAAA,MAAEC,MAAM;AAAA,MAAQC,MAAM;AAAA,MAAgBC,aAAa;AAAA,MAA2DC,MAAM;AAAA,IAAA,CAAY;AAAA,EAExI,GACA;AAAA,IACIP,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,WAAW;AAAA,IACXC,OAAO,CACH;AAAA,MAAEC,MAAM;AAAA,MAAYC,MAAM;AAAA,MAAWC,aAAa;AAAA,MAA2DC,MAAM;AAAA,IAAA,CAAa;AAAA,EAExI,GACA;AAAA,IACIP,OAAO;AAAA,IACPC,UAAU;AAAA,IACVC,WAAW;AAAA,IACXC,OAAO,CACH;AAAA,MAAEC,MAAM;AAAA,MAAUC,MAAM;AAAA,MAASC,aAAa;AAAA,MAAwDC,MAAM;AAAA,IAAA,GAC5G;AAAA,MAAEH,MAAM;AAAA,MAAUC,MAAM;AAAA,MAASC,aAAa;AAAA,MAAwDC,MAAM;AAAA,IAAA,CAAkB;AAAA,EAEtI,CAAC;AAKE,WAAAC,eAAAC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAwB,UAAA;AAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAN;AAa3B,UAAAO,UAAgBC,KAAAA,iBAAAA;AAChB,UAAAC,cAAoBC,KAAAA,qBAAAA;AACpB,UAAAC,WAAiBC,eAAAA,YAAAA;AAAc,QAAAC;AAAA,QAAAZ,SAAAQ,aAAA;AAErBI,WAAAA,MAAA;AACNJ,oBAAWK,IAAA;AAAA,UAAAL,aAAA,CAAA;AAAA,QAAA,CAAwB;AAAA,MAAC;AACvCR,aAAAQ;AAAAR,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAAQ,YAAAK,KAAA;AAAEC,WAAA,CAACN,YAAWK,GAAA;AAAKb,QAAA,CAAA,IAAAQ,YAAAK;AAAAb,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAFpBe,UAAAA,UAAUH,IAEPE,EAAiB;AAEpB,UAAA;AAAA,MAAAE;AAAAA,IAAAA,IAAyBC,sBAAAA;AAAmB,QAAAC;AAAA,QAAAlB,SAAAM,SAAA;AAEHY,WAAA;AAAA,QAAAZ;AAAAA,MAAAA;AAAWN,aAAAM;AAAAN,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAApD,UAAAmB,eAAyCD;AAEzC,UAAAE,gBAAsBC,KAAAA,QAAQ,gBAAgBF,YAAY;AAAE,QAAAG;AAAA,QAAAtB,EAAA,CAAA,MAAAE,qBAAAF,SAAAoB,eAAA;AAM/CE,YAACpB,qBAAqBkB,kBACnBG,2BAAAA,cAAe,WAAA,yGACVrB,UAAAA;AAAAA,QAAAA;AAAAA;SAEL;AACHF,aAAAE;AAAAF,aAAAoB;AAAApB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,EAAA,CAAA,MAAAM,WAAAN,UAAAU,UAAA;AAMIc,WAAAnC,SAAAoC,IAAAC,CAAAA,4CACG,WAAA,EAAyC,cAAAA,QAAOpC,OAE5C,UAAA;AAAA,QAAAqC,2BAAAA,IAACC,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,MACJ,OAAA,aACI,WAAA,6EAETF,UAAAA,QAAOpC,MAAAA,CACZ;AAAA,QAGAqC,2BAAAA,IAAA,OAAA,EAAe,WAAA,6DACVD,UAAAA,QAAOjC,MAAAgC,IAAAI,CAAAA,SACJF,2BAAAA,IAACG,GAAAA,MAAA,EAEY,SAAA,MAAA;AACLpB,mBAASmB,KAAInC,IAAK;AAClBY,kBAAOyB,qBAAAC,mBACH,yBAAuB;AAAA,YAAAtC,MACfmC,KAAInC;AAAAA,UAAAA,CAAA;AAAA,QAAA,GAGT,WAAAuC,OACP,6EACA,+DACJ,GAEA,UAAAV,2BAAAA,cAAe,WAAA,oCACX,UAAA;AAAA,UAAAA,2BAAAA,cAAe,WAAA,eAEX,UAAA;AAAA,YAAAI,2BAAAA,IAAA,OAAA,EAAgB,WAAAM,GAAAA,IAAI,yBAAyBP,QAAOlC,SAAU,GAC1D,UAAAmC,2BAAAA,IAACO,KAAAA,aAAA,EACqB,kBAAA;AAAA,cAAAC,MAAQN,KAAInC;AAAAA,cAAAC,MAChFkC,KAAIlC;AAAAA,cAAAE,MACJgC,KAAIhC;AAAAA,YAAAA,GACmD,MAAA,QAAA,CAAO,GAEpB;AAAA,YAGA8B,2BAAAA,IAACC,GAAAA,YAAA,EACG,cAAA,MACQ,SAAA,aACE,WAAA,sBACA,WAAA,MAETC,UAAAA,KAAIlC,KAAAA,CACT;AAAA,YAGAgC,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,WAAgB,OAAA,aAAsB,WAAA,OACrDC,UAAAA,KAAIjC,YAAAA,CACT;AAAA,UAAA,GACJ;AAAA,UAGA+B,+BAAA,SAAY,OAAA;AAAA,YAAAS,WAAa;AAAA,UAAA,GACrB,UAAAT,2BAAAA,IAAA,OAAA,EAAe,WAAA,OACX,UAAAA,2BAAAA,IAACU,YAAAA,gBAAA,EAAyB,WAAA,gBAAqB,MAAAC,GAAAA,SAAAC,MAAAA,CAAc,GACjE,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ,EAAA,GA/CKV,KAAInC,IAgDb,CACH,EAAA,CACL;AAAA,MAAA,KAjEUgC,QAAOpC,KAkErB,CACH;AAACU,aAAAM;AAAAN,cAAAU;AAAAV,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,UAAAwB,IAAA;AArENgB,WAAAb,2BAAAA,IAAA,OAAA,EAAe,WAAA,4BACVH,UAAAA,IAqEL;AAAMxB,cAAAwB;AAAAxB,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIFF,WAAAd,2BAAAA,IAAA,OAAA,EAAe,WAAA,0BACX,yCAACC,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,MACJ,OAAA,aACI,WAAA,6EACb,yBAED,GACJ;AAAM5B,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAENC,2CAAChB,eAAA,EAAmB,SAAA,SAAc,OAAA,aAAsB,WAAA,kBAAiB,UAAA;AAAA,QAAA;AAAA,QACf;AAAA,QACtDD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,8EAA6E,UAAA,2BAE7F;AAAA,QACC;AAAA,QAAI;AAAA,MAAA,GACT;AAAa3B,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAITE,WAAAtB,2BAAAA,KAAA,OAAA,EAAe,WAAA,gJACX,UAAA;AAAA,QAAAA,2BAAAA,KAAA,OAAA,EAAe,WAAA,6BACX,UAAA;AAAA,UAAAA,2BAAAA,KAAA,OAAA,EAAe,WAAA,gBACX,UAAA;AAAA,YAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,yCAAA,CAAwC;AAAA,YACxDA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,2CAAA,CAA0C;AAAA,YAC1DA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6CAAA,CAA4C;AAAA,UAAA,GAChE;AAAA,UACAA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,iEAAgE,UAAA,SAAA,CAEhF;AAAA,QAAA,GACJ;AAAA,QACAA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,4DAA2D,UAAA,aAAA,CAE3E;AAAA,MAAA,GACJ;AAAM3B,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AApCdG,qDAAe,WAAA,cACXL,UAAAA;AAAAA,QAAAA;AAAAA,QAWAG;AAAAA,QAQArB,2BAAAA,KAAA,OAAA,EAAe,WAAA,mHAEXsB,UAAAA;AAAAA,UAAAA;AAAAA,yCAiBA,OAAA,EAAe,WAAA,6DACX,UAAAlB,2BAAAA,IAAC,4BAAwB,EAAA,CAC7B;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GACJ;AAAM3B,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,UAAAK,UAAA;AAGL0C,YAAA1C,UAAQoB,IAAAuB,OAAA;AAYPhD,cAAAK;AAAAL,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAAI,yBAAAJ,EAAA,EAAA,MAAAG,2BAAAH,EAAA,EAAA,MAAA+C,OAAA/C,EAAA,EAAA,MAAAsB,MAAAtB,UAAAwC,IAAA;AA/INS,YAAA1B,2BAAAA,KAAC2B,GAAAA,WAAA,EAAmB,UAAA,OAEf5B,UAAAA;AAAAA,QAAAA;AAAAA,QAOAnB;AAAAA,QAGDqC;AAAAA,QAyEAM;AAAAA,QA8CCC;AAAAA,QAcA3C;AAAAA,MAAAA,GACL;AAAYJ,cAAAI;AAAAJ,cAAAG;AAAAH,cAAA+C;AAAA/C,cAAAsB;AAAAtB,cAAAwC;AAAAxC,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAAgB,gBAAAhB,UAAAiD,KAAA;AAnJhBE,2CAAA,OAAA,EAAUnC,mBAAwB,WAAA,oCAC9BiC,UAAAA,KAmJJ;AAAMjD,cAAAgB;AAAAhB,cAAAiD;AAAAjD,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,WApJNmD;AAAAA,EAoJM;AAhLP,WAAAH,QAAAI,GAAA;AAAA,WAiKa7B,2BAAAA,KAAA,OAAA,EAA2B,WAAA,SACvB,UAAA;AAAA,MAAAI,2BAAAA,IAACC,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,MACJ,OAAA,aACI,WAAA,yFAETwB,UAAAA,EAACC,MAAAA,CACN;AAAA,MACA1B,2BAAAA,IAAA,OAAA,EAAe,WAAA,QAAQyB,YAACE,SAAAA,CAAU;AAAA,IAAA,EAAA,GAT5BF,EAACG,GAUX;AAAA,EAAM;AAe1B,WAAAC,2BAAA;AAAA,UAAAxD,IAAAC,qBAAAA,EAAA,EAAA;AAAA,QAAAF;AAAA,QAAAa;AAAA,QAAAE;AAAA,QAAAI;AAAA,QAAAI;AAAA,QAAAE;AAAA,QAAAgB;AAAA,QAAAC;AAAA,QAAAzC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAWY5C,WAAA4B,2BAAAA,IAAA,QAAA,EAAiB8B,WAVd,wCAUkB,UAAA,UAAM;AAC3B7C,WAAAe,2BAAAA,IAAA,QAAA,EAAiB+B,WALd,0CAKmB,UAAA,OAAM;AAC5B5C,WAAAa,2BAAAA,IAAA,QAAA,EAAiBgC,WATd,oCASkB,UAAA,sBAAkB;AACvCzC,WAAAS,2BAAAA,IAAA,QAAA,EAAiB+B,WAPd,0CAOmB,UAAA,OAAM;AAC5BpC,WAAAK,2BAAAA,IAAA,QAAA,EAAiB8B,WAdd,wCAckB,UAAA,QAAI;AACzBjC,WAAAG,2BAAAA,IAAA,QAAA,EAAiB+B,WATd,0CASkB,UAAA,KAAC;AACtBlB,WAAAb,2BAAAA,IAAA,QAAA,EAAiBiC,WAfb,0CAekB,UAAA,uBAA6B;AACnDnB,WAAAd,2BAAAA,IAAA,QAAA,EAAiBkC,WAZd,0CAYkB,UAAA,KAAC;AAAO7D,aAAAD;AAAAC,aAAAY;AAAAZ,aAAAc;AAAAd,aAAAkB;AAAAlB,aAAAsB;AAAAtB,aAAAwB;AAAAxB,aAAAwC;AAAAxC,aAAAyC;AAAAA,IAAA,OAAA;AAAA1C,WAAAC,EAAA,CAAA;AAAAY,WAAAZ,EAAA,CAAA;AAAAc,WAAAd,EAAA,CAAA;AAAAkB,WAAAlB,EAAA,CAAA;AAAAsB,WAAAtB,EAAA,CAAA;AAAAwB,WAAAxB,EAAA,CAAA;AAAAwC,WAAAxC,EAAA,CAAA;AAAAyC,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAAC;AAAA,QAAAE;AAAA,QAAAE;AAAA,QAAAW;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAArB;AAAA,QAAAC;AAAA,QAAA7C,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG7BC,WAAAjB,2BAAAA,IAAA,QAAA,EAAiB8B,WApBd,wCAoBkB,UAAA,UAAM;AAC3BZ,WAAAlB,2BAAAA,IAAA,QAAA,EAAiB+B,WAfd,0CAekB,UAAA,KAAC;AACtBZ,YAAAnB,2BAAAA,IAAA,QAAA,EAAiB8B,WAtBd,wCAsBkB,UAAA,QAAI;AACzBV,YAAApB,2BAAAA,IAAA,QAAA,EAAiB+B,WAjBd,0CAiBmB,UAAA,OAAM;AAC5BT,YAAAtB,2BAAAA,IAAA,QAAA,EAAiBuC,WAtBb,sCAsBkB,UAAA,YAAQ;AAC9Bf,YAAAxB,2BAAAA,IAAA,QAAA,EAAiB+B,WAnBd,0CAmBmB,UAAA,OAAM;AAC5BI,YAAAnC,2BAAAA,IAAA,QAAA,EAAiB8B,WA1Bd,wCA0BkB,UAAA,QAAI;AACzBM,YAAApC,2BAAAA,IAAA,QAAA,EAAiB+B,WArBd,0CAqBkB,UAAA,KAAC;AACtBM,YAAArC,2BAAAA,IAAA,QAAA,EAAiBiC,WA3Bb,0CA2BkB,UAAA,sBAA4B;AAClDK,YAAAtC,2BAAAA,IAAA,QAAA,EAAiBkC,WAxBd,0CAwBkB,UAAA,KAAC;AAAO7D,aAAA8C;AAAA9C,aAAA+C;AAAA/C,cAAAiD;AAAAjD,cAAAmD;AAAAnD,cAAA8D;AAAA9D,cAAA+D;AAAA/D,cAAAgE;AAAAhE,cAAAiE;AAAAjE,cAAA4C;AAAA5C,cAAA6C;AAAAA,IAAA,OAAA;AAAAC,YAAA9C,EAAA,CAAA;AAAA+C,YAAA/C,EAAA,CAAA;AAAAiD,YAAAjD,EAAA,EAAA;AAAAmD,YAAAnD,EAAA,EAAA;AAAA8D,YAAA9D,EAAA,EAAA;AAAA+D,YAAA/D,EAAA,EAAA;AAAAgE,YAAAhE,EAAA,EAAA;AAAAiE,YAAAjE,EAAA,EAAA;AAAA4C,WAAA5C,EAAA,EAAA;AAAA6C,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmE;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAA1E,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG7BwB,YAAAxC,2BAAAA,IAAA,QAAA,EAAiB8B,WAhCd,wCAgCkB,UAAA,SAAK;AAC1BW,YAAAzC,2BAAAA,IAAA,QAAA,EAAiB+B,WA3Bd,0CA2BkB,UAAA,YAAQ;AAC7BW,YAAA1C,2BAAAA,IAAA,QAAA,EAAiBkC,WA7Bd,0CA6BkB,UAAA,MAAE;AACvBS,YAAA3C,2BAAAA,IAAA,QAAA,EAAiBgC,WAhCd,oCAgCkB,UAAA,sBAAkB;AACvCY,YAAA5C,2BAAAA,IAAA,QAAA,EAAiBkC,WA/Bd,0CA+BmB,UAAA,KAAI;AAC1BW,YAAA7C,2BAAAA,IAAA,QAAA,EAAiBuC,WAnCb,sCAmCkB,UAAA,YAAQ;AAC9BO,YAAA9C,2BAAAA,IAAA,QAAA,EAAiBkC,WAjCd,0CAiCmB,UAAA,MAAK;AAC3Ba,YAAA/C,2BAAAA,IAAA,QAAA,EAAiB+B,WAjCd,0CAiCmB,UAAA,KAAI;AAAO1D,cAAAmE;AAAAnE,cAAAoE;AAAApE,cAAAqE;AAAArE,cAAAsE;AAAAtE,cAAAuE;AAAAvE,cAAAwE;AAAAxE,cAAAyE;AAAAzE,cAAA0E;AAAAA,IAAA,OAAA;AAAAP,YAAAnE,EAAA,EAAA;AAAAoE,YAAApE,EAAA,EAAA;AAAAqE,YAAArE,EAAA,EAAA;AAAAsE,YAAAtE,EAAA,EAAA;AAAAuE,YAAAvE,EAAA,EAAA;AAAAwE,YAAAxE,EAAA,EAAA;AAAAyE,YAAAzE,EAAA,EAAA;AAAA0E,YAAA1E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA2E;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAA9E,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEjCgC,YAAAhD,2BAAAA,IAAA,QAAA,EAAiB+B,WAnCd,0CAmCmB,UAAA,eAAc;AACpCkB,YAAAjD,2BAAAA,IAAA,QAAA,EAAiBkC,WArCd,0CAqCkB,UAAA,MAAE;AACvBgB,YAAAlD,2BAAAA,IAAA,QAAA,EAAiBiC,WA1Cb,0CA0CkB,UAAA,2BAAiC;AACvDkB,YAAAnD,2BAAAA,IAAA,QAAA,EAAiBkC,WAvCd,0CAuCkB,UAAA,KAAC;AAAO7D,cAAA2E;AAAA3E,cAAA4E;AAAA5E,cAAA6E;AAAA7E,cAAA8E;AAAAA,IAAA,OAAA;AAAAH,YAAA3E,EAAA,EAAA;AAAA4E,YAAA5E,EAAA,EAAA;AAAA6E,YAAA7E,EAAA,EAAA;AAAA8E,YAAA9E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+E;AAAA,QAAAC;AAAA,QAAAhF,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAE7BoC,YAAApD,2BAAAA,IAAA,QAAA,EAAiB+B,WAxCd,0CAwCmB,UAAA,KAAI;AAC1BsB,YAAArD,2BAAAA,IAAA,QAAA,EAAiBkC,WA1Cd,0CA0CkB,UAAA,MAAE;AAAO7D,cAAA+E;AAAA/E,cAAAgF;AAAAA,IAAA,OAAA;AAAAD,YAAA/E,EAAA,EAAA;AAAAgF,YAAAhF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiF;AAAA,QAAAjF,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG9BsC,YAAAtD,2BAAAA,IAAA,QAAA,EAAiBuD,WA9Cd,iDA8CmB,UAAA,0DAAyD;AAAOlF,cAAAiF;AAAAA,IAAA,OAAA;AAAAA,YAAAjF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmF;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAC;AAAA,QAAAlG,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEtFwC,YAAAxD,2BAAAA,IAAA,QAAA,EAAiB8B,WApDd,wCAoDkB,UAAA,SAAK;AAC1B2B,YAAAzD,2BAAAA,IAAA,QAAA,EAAiB+B,WA/Cd,0CA+CmB,UAAA,OAAM;AAC5B2B,YAAA1D,2BAAAA,IAAA,QAAA,EAAiB+B,WAhDd,0CAgDkB,UAAA,QAAI;AACzB4B,YAAA3D,2BAAAA,IAAA,QAAA,EAAiBkC,WAlDd,0CAkDkB,UAAA,MAAE;AACvB0B,YAAA5D,2BAAAA,IAAA,QAAA,EAAiB+B,WAlDd,0CAkDkB,UAAA,SAAK;AAC1B8B,YAAA7D,2BAAAA,IAAA,QAAA,EAAiB+B,WAnDd,0CAmDmB,UAAA,OAAM;AAC5B+B,YAAA9D,2BAAAA,IAAA,QAAA,EAAiBkC,WArDd,0CAqDkB,UAAA,MAAE;AACvB6B,YAAA/D,2BAAAA,IAAA,QAAA,EAAiB8B,WA3Dd,wCA2DkB,UAAA,SAAK;AAC1BkC,YAAAhE,2BAAAA,IAAA,QAAA,EAAiB+B,WAtDd,0CAsDkB,UAAA,WAAO;AAC5BkC,YAAAjE,2BAAAA,IAAA,QAAA,EAAiBkC,WAxDd,0CAwDkB,UAAA,KAAC;AACtBgC,YAAAlE,2BAAAA,IAAA,QAAA,EAAiB+B,WAxDd,0CAwDkB,UAAA,QAAI;AACzBoC,YAAAnE,2BAAAA,IAAA,QAAA,EAAiBkC,WA1Dd,0CA0DkB,UAAA,KAAC;AACtBkC,YAAApE,2BAAAA,IAAA,QAAA,EAAiB+B,WA1Dd,0CA0DkB,UAAA,SAAK;AAC1BsC,YAAArE,2BAAAA,IAAA,QAAA,EAAiBkC,WA5Dd,0CA4DkB,UAAA,KAAC;AACtBoC,YAAAtE,2BAAAA,IAAA,QAAA,EAAiBgC,WA/Dd,oCA+DkB,UAAA,QAAI;AACzBuC,YAAAvE,2BAAAA,IAAA,QAAA,EAAiBkC,WA9Dd,0CA8DkB,UAAA,OAAG;AAAO7D,cAAAmF;AAAAnF,cAAAoF;AAAApF,cAAAqF;AAAArF,cAAAsF;AAAAtF,cAAAuF;AAAAvF,cAAAwF;AAAAxF,cAAAyF;AAAAzF,cAAA0F;AAAA1F,cAAA2F;AAAA3F,cAAA4F;AAAA5F,cAAA6F;AAAA7F,cAAA8F;AAAA9F,cAAA+F;AAAA/F,cAAAgG;AAAAhG,cAAAiG;AAAAjG,cAAAkG;AAAAA,IAAA,OAAA;AAAAf,YAAAnF,EAAA,EAAA;AAAAoF,YAAApF,EAAA,EAAA;AAAAqF,YAAArF,EAAA,EAAA;AAAAsF,YAAAtF,EAAA,EAAA;AAAAuF,YAAAvF,EAAA,EAAA;AAAAwF,YAAAxF,EAAA,EAAA;AAAAyF,YAAAzF,EAAA,EAAA;AAAA0F,YAAA1F,EAAA,EAAA;AAAA2F,YAAA3F,EAAA,EAAA;AAAA4F,YAAA5F,EAAA,EAAA;AAAA6F,YAAA7F,EAAA,EAAA;AAAA8F,YAAA9F,EAAA,EAAA;AAAA+F,YAAA/F,EAAA,EAAA;AAAAgG,YAAAhG,EAAA,EAAA;AAAAiG,YAAAjG,EAAA,EAAA;AAAAkG,YAAAlG,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmG;AAAA,QAAAnG,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AA1DnCwD,qDAAe,WAAA,sBACXpG,UAAAA;AAAAA,QAAAA;AAAAA,QACAa;AAAAA,QACAE;AAAAA,QACAI;AAAAA,QACAI;AAAAA,QACAE;AAAAA,QACAgB;AAAAA,QACAC;AAAAA,QACC;AAAA,QAEDG;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAE;AAAAA,QACAE;AAAAA,QACAW;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACC;AAAA,QAEDE;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACC;AAAA,QACDC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA;QAEAC;AAAAA,QACAC;AAAAA,QACC;AAAA,QAEDC;AAAAA,QACC;AAAA,QACDE;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA,QACAC;AAAAA;QAGAvE,2BAAAA,IAAA,QAAA,EAAiB8B,WAtEd,wCAsEkB,UAAA,SAAK;AAAA,QAC1B9B,2BAAAA,cAAiB+B,WAjEd,0CAiEmB,UAAA,OAAM;AAAA,QAC5B/B,2BAAAA,cAAiB+B,WAlEd,0CAkEkB,UAAA,QAAI;AAAA,QACzB/B,2BAAAA,IAAA,QAAA,EAAiBkC,WApEd,0CAoEkB,UAAA,MAAE;AAAA,QACvBlC,2BAAAA,IAAA,QAAA,EAAiB+B,WApEd,0CAoEkB,UAAA,SAAK;AAAA,QAC1B/B,2BAAAA,IAAA,QAAA,EAAiB+B,WArEd,0CAqEmB,UAAA,OAAM;AAAA,QAC5B/B,2BAAAA,IAAA,QAAA,EAAiBkC,WAvEd,0CAuEkB,UAAA,MAAE;AAAA,QACvBlC,2BAAAA,cAAiB8B,WA7Ed,wCA6EkB,UAAA,SAAK;AAAA,QAC1B9B,2BAAAA,IAAA,QAAA,EAAiB+B,WAxEd,0CAwEkB,UAAA,WAAO;AAAA,QAC5B/B,2BAAAA,cAAiBkC,WA1Ed,0CA0EkB,UAAA,KAAC;AAAA,QACtBlC,2BAAAA,IAAA,QAAA,EAAiB+B,WA1Ed,0CA0EkB,UAAA,QAAI;AAAA,QACzB/B,2BAAAA,cAAiBkC,WA5Ed,0CA4EkB,UAAA,KAAC;AAAA,QACtBlC,2BAAAA,IAAA,QAAA,EAAiBgC,WA/Ed,oCA+EkB,UAAA,cAAU;AAAA,QAC/BhC,2BAAAA,IAAA,QAAA,EAAiBkC,WA9Ed,0CA8EkB,UAAA,KAAC;AAAA,QACtBlC,2BAAAA,IAAA,QAAA,EAAiBiC,WAnFb,0CAmFkB,UAAA,WAAiB;AAAA,QACvCjC,2BAAAA,IAAA,QAAA,EAAiBkC,WAhFd,0CAgFkB,UAAA,KAAC;AAAA,QACtBlC,2BAAAA,IAAA,QAAA,EAAiBkC,WAjFd,0CAiFkB,UAAA,KAAC;AAAA,QACtBlC,2BAAAA,IAAA,QAAA,EAAiBgC,WApFd,oCAoFkB,UAAA,QAAI;AAAA,QACzBhC,2BAAAA,IAAA,QAAA,EAAiBkC,WAnFd,0CAmFkB,UAAA,MAAA,CAAG;AAAA,MAAA,GAC5B;AAAM7D,cAAAmG;AAAAA,IAAA,OAAA;AAAAA,YAAAnG,EAAA,EAAA;AAAA,IAAA;AAAA,WAhFNmG;AAAAA,EAgFM;AC3Vd,QAAMC,cAAYC,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,WAAA,EAAgCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEH;AAAAA,EAAU,EAAE,CAAC;AAClG,QAAMK,aAAWJ,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,UAAA,EAA8BC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEE;AAAAA,EAAS,EAAE,CAAC;AAC9F,QAAMC,cAAYL,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,WAAA,EAAgCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEG;AAAAA,EAAU,EAAE,CAAC;AAClG,QAAMC,gBAAcN,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,aAAA,EAAoCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEI;AAAAA,EAAY,EAAE,CAAC;AAC1G,QAAMC,iBAAeP,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,cAAA,EAAkCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEK;AAAAA,EAAa,EAAE,CAAC;AAC1G,QAAMC,qBAAmBR,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,kBAAA,EAA8CC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEM;AAAAA,EAAiB,EAAE,CAAC;AAC9H,QAAMC,iBAAeT,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,cAAA,EAAkCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEO;AAAAA,EAAa,EAAE,CAAC;AAC1G,QAAMC,gBAAcV,MAAAA,KAAK,MAAM,QAAA,QAAA,EAAA,KAAA,MAAA,aAAA,EAAoCC,KAAKC,CAAAA,OAAM;AAAA,IAAEC,SAASD,EAAEQ;AAAAA,EAAY,EAAE,CAAC;AAY1G,QAAMC,mDAAqB,gBAAA,EAAc;AAElC,WAASC,aAAa;AAAA,IAAExH;AAAAA,IAAOyH;AAAAA,EAA6B,GAAG;AAClE,UAAMC,WAAWC,KAAAA,0BAAAA;AAEjB,UAAMC,mBAAmBH,YAAYF;AAErC,UAAMM,WAAsBC,MAAAA,QAAQ,MAAM;AACtC,YAAMC,QAAmB,CAAA;AACzB,YAAMC,cAAchI,SAAS,CAAC,OAAO,MAAM,OAAO,WAAW,QAAQ,qBAAqB,YAAY,KAAK;AAC3G,YAAMiI,WAAWA,CAACC,OAAwBhG,2BAAAA,IAACiG,MAAAA,YAAS,UAAUjG,2BAAAA,IAACkG,GAAAA,wBAAA,CAAA,CAAsB,GAAKF,UAAAA,GAAAA,CAAG;AAE7F,UAAIF,YAAYK,SAAS,KAAK,GAAG;AAC7BN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACyE,aAAA,CAAA,CAAS,CAAE;AAAA,QAAA,CAAG;AAAA,MACtB;AACA,UAAIqB,YAAYK,SAAS,IAAI,GAAG;AAC5BN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAAC8E,YAAA,CAAA,CAAQ,CAAE;AAAA,QAAA,CAAG;AAAA,MACrB;AACA,UAAIgB,YAAYK,SAAS,KAAK,GAAG;AAC7BN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAAC+E,aAAA,CAAA,CAAS,CAAE;AAAA,QAAA,CAAG;AAAA,MACtB;AACA,UAAIe,YAAYK,SAAS,SAAS,GAAG;AACjCN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACgF,eAAA,CAAA,CAAW,CAAE;AAAA,QAAA,CAAG;AAAA,MACxB;AACA,UAAIc,YAAYK,SAAS,MAAM,GAAG;AAC9BN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACiF,gBAAA,CAAA,CAAY,CAAE;AAAA,QAAA,CAAG;AAAA,MACzB;AACA,UAAIa,YAAYK,SAAS,mBAAmB,GAAG;AAC3CN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACkF,oBAAA,CAAA,CAAgB,CAAE;AAAA,QAAA,CAAG;AAAA,MAC7B;AACA,UAAIY,YAAYK,SAAS,UAAU,GAAG;AAClCN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACmF,gBAAA,CAAA,CAAY,CAAE;AAAA,QAAA,CAAG;AAAA,MACzB;AACA,UAAIW,YAAYK,SAAS,KAAK,GAAG;AAC7BN,cAAMO,KAAK;AAAA,UAAE5F,MAAM;AAAA,UAC/BxC,MAAM;AAAA,UACNqI,OAAO;AAAA,UACPnI,MAAM;AAAA,UACND,aAAa;AAAA,UACbqI,MAAMP,SAAS/F,+BAACoF,eAAA,CAAA,CAAW,CAAE;AAAA,QAAA,CAAG;AAAA,MACxB;AAGA,aAAOS;AAAAA,IACX,GAAG,CAAC/H,KAAK,CAAC;AAIV,UAAMyI,cAAcC,MAAMC,OAAOf,gBAAgB;AACjDa,gBAAYG,UAAUhB;AAEtBiB,UAAAA,gBAAgB,MAAM;AAClBnB,eAASoB,eAAe;AAAA,QAAE9I;AAAAA,QAClCyH,UAAUgB,YAAYG;AAAAA,QACtBf;AAAAA,MAAAA,CAAU;AACF,aAAO,MAAMH,SAASqB,iBAAAA;AAAAA,IAC1B,GAAG,CAACrB,UAAU1H,OAAO6H,QAAQ,CAAC;AAE9B,WAAO;AAAA,EACX;ACxGO,QAAMmB,eAAeA,CAAC;AAAA,IACzBC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,WAAW;AAAA,IACXC,YAAY;AAAA,IACZC;AAAAA,EACe,MAAM;AACrB,UAAM;AAAA,MAAEC;AAAAA,IAAAA,IAASC,uBAAAA;AACjB,UAAMC,YAAYf,MAAAA,OAA4C,IAAI;AAClE,UAAMgB,YAAYhB,MAAAA,OAAsB,IAAI;AAC5C,UAAMiB,WAAWjB,MAAAA,OAAOQ,KAAK;AAC7BS,aAAShB,UAAUO;AAEnB,UAAMU,aAAalB,MAAAA,OAAOY,OAAO;AACjCM,eAAWjB,UAAUW;AAErB,UAAMO,sBAA+BA,CAACC,QAAQC,WAAW;AACrDN,gBAAUd,UAAUmB;AACpBJ,gBAAUf,UAAUoB;AAEpBD,aAAOE,UAAU;AAAA,QACbC,IAAI;AAAA,QACJrK,OAAO;AAAA,QACPsK,aAAa,CAACH,OAAOI,OAAOC,UAAUL,OAAOM,QAAQC,KAAK;AAAA,QAC1DC,oBAAoB;AAAA,QACpBC,kBAAkB;AAAA,QAClBC,KAAKA,MAAM;AACP,cAAId,SAAShB,SAAS;AAClB,kBAAM+B,YAAYZ,OAAOa,aAAAA;AACzB,gBAAIC,eAAmCC;AACvC,gBAAIH,aAAa,CAACA,UAAUI,WAAW;AACnCF,6BAAed,OAAOiB,SAAAA,GAAYC,gBAAgBN,SAAS,GAAGO,KAAAA;AAAAA,YAClE;AACAtB,qBAAShB,QAAQiC,gBAAgBC,MAAS;AAAA,UAC9C;AAAA,QACJ;AAAA,MAAA,CACH;AAGD,YAAMK,cAAc,CAChB,UAAU,QAAQ,SAAS,eAAe,UAAU,UAAU,OAC9D,eAAe,QAAQ,cAAc,aAAa,cAAc,aAChE,MAAM,YAAY,UAAU,YAAY,OAAO,QAAQ,SAAS,UAChE,MAAM,OAAO,MAAM,OAAO,MAAM,WAAW,QAAQ,WAAW,eAC9D,gBAAgB,eAAe,cAAc,eAAe,eAC5D,SAAS,OAAO,OAAO,OAAO,OAAO,YAAY,SAAS,OAAO,UACjE,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,QAAQ,UAAU;AAG7DnB,aAAOoB,UAAUC,+BAA+B,SAAS;AAAA,QACrDC,mBAAmB,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,QAChSC,wBAAwBA,CAACC,OAA0BC,aAAuB;AACtE,gBAAMC,OAAOF,MAAMG,qBAAqBF,QAAQ;AAChD,gBAAMG,QAAQ;AAAA,YACVC,iBAAiBJ,SAASK;AAAAA,YAC1BC,eAAeN,SAASK;AAAAA,YACxBE,aAAaN,KAAKM;AAAAA,YAClBC,WAAWP,KAAKO;AAAAA,UAAAA;AAGpB,gBAAMC,oBAAoBV,MAAMP,gBAAgB;AAAA,YAC5CY,iBAAiBJ,SAASK;AAAAA,YAC1BE,aAAa;AAAA,YACbD,eAAeN,SAASK;AAAAA,YACxBG,WAAWR,SAASU;AAAAA,UAAAA,CACvB;AAGD,gBAAMC,QAAQF,kBAAkBE,MAAM,oBAAoB;AAC1D,gBAAMC,iBAAiBD,QAAQA,MAAM,CAAC,IAAI;AAE1C,gBAAME,cAAsH,CAAA;AAC5H,gBAAMC,aAAa1C,WAAWjB,WAAW,CAAA;AAEzC,cAAIyD,gBAAgB;AAEhB,uBAAW,CAAA,EAAGG,MAAM,KAAKC,OAAOC,QAAQH,UAAU,GAAG;AACjD,oBAAMI,QAAQH,OAAOI,KAAKC,CAAAA,MAAKA,EAAEC,cAAcT,cAAc;AAC7D,kBAAIM,OAAO;AACPA,sBAAMI,QAAQC,QAAQC,CAAAA,QAAO;AACzBX,8BAAYhE,KAAK;AAAA,oBACbzI,OAAOoN,IAAI/M;AAAAA,oBACXgN,MAAMlD,OAAOoB,UAAU+B,mBAAmBC;AAAAA,oBAC1CC,YAAYJ,IAAI/M;AAAAA,oBAChB0L;AAAAA,oBACA0B,QAAQ;AAAA,oBACRC,UAAU;AAAA,kBAAA,CACb;AAAA,gBACL,CAAC;AAAA,cACL;AAAA,YACJ;AAAA,UACJ,OAAO;AAEH,uBAAW,CAACC,OAAOhB,QAAM,KAAKC,OAAOC,QAAQH,UAAU,GAAG;AACtDC,uBAAOQ,QAAQL,CAAAA,YAAS;AACpBL,4BAAYhE,KAAK;AAAA,kBACbzI,OAAO8M,QAAMG;AAAAA,kBACbI,MAAMlD,OAAOoB,UAAU+B,mBAAmBM;AAAAA,kBAC1CJ,YAAYV,QAAMG;AAAAA,kBAClBlB;AAAAA,kBACA0B,QAAQ,UAAUE,KAAK;AAAA,kBACvBD,UAAU;AAAA,gBAAA,CACb;AAAA,cACL,CAAC;AAAA,YACL;AAGApC,wBAAY6B,QAAQU,CAAAA,YAAW;AAC3BpB,0BAAYhE,KAAK;AAAA,gBACbzI,OAAO6N;AAAAA,gBACPR,MAAMlD,OAAOoB,UAAU+B,mBAAmBQ;AAAAA,gBAC1CN,YAAYK,UAAU;AAAA,gBACtB9B;AAAAA,gBACA0B,QAAQ;AAAA,gBACRC,UAAU;AAAA,cAAA,CACb;AAAA,YACL,CAAC;AAGD,kBAAMK,WAAWpC,MAAMqC,SAAAA;AACvB,kBAAMC,mCAAmBC,IAAAA;AACzB,uBAAW,CAAA,EAAGvB,QAAM,KAAKC,OAAOC,QAAQH,UAAU,GAAG;AACjDC,uBAAOQ,QAAQL,CAAAA,YAAS;AACpB,sBAAMqB,QAAQ,IAAIC,OAAO,MAAMtB,QAAMG,SAAS,OAAO,GAAG;AACxD,oBAAIkB,MAAME,KAAKN,QAAQ,GAAG;AACtBE,+BAAaK,IAAIxB,QAAMG,SAAS;AAAA,gBACpC;AAAA,cACJ,CAAC;AAAA,YACL;AAEA,kBAAMsB,mCAAmBL,IAAAA;AACzB,uBAAW,CAAA,EAAGvB,QAAM,KAAKC,OAAOC,QAAQH,UAAU,GAAG;AACjDC,uBAAOQ,QAAQL,CAAAA,YAAS;AACpB,oBAAImB,aAAaO,IAAI1B,QAAMG,SAAS,GAAG;AACnCH,0BAAMI,QAAQC,QAAQC,CAAAA,UAAO;AACzB,wBAAI,CAACmB,aAAaC,IAAIpB,MAAI/M,IAAI,GAAG;AAC7BkO,mCAAaD,IAAIlB,MAAI/M,IAAI;AACzBoM,kCAAYhE,KAAK;AAAA,wBACbzI,OAAOoN,MAAI/M;AAAAA,wBACXgN,MAAMlD,OAAOoB,UAAU+B,mBAAmBC;AAAAA,wBAC1CC,YAAYJ,MAAI/M;AAAAA,wBAChB0L;AAAAA,wBACA0B,QAAQ,WAAWX,QAAMG,SAAS;AAAA,wBAClCS,UAAU;AAAA;AAAA,sBAAA,CACb;AAAA,oBACL;AAAA,kBACJ,CAAC;AAAA,gBACL;AAAA,cACJ,CAAC;AAAA,YACL;AAAA,UACJ;AAEA,iBAAO;AAAA,YAAEjB;AAAAA,UAAAA;AAAAA,QAEb;AAAA,MAAA,CACH;AAED,UAAIhD,WAAW;AACXS,eAAOuE,MAAAA;AAAAA,MACX;AAAA,IACJ;AAEA,WACIpM,+BAAC,SAAI,WAAWM,GAAAA,IAAI,0CAA0C4G,SAAS,GACnE,UAAAlH,+BAAC,QAAA,EACG,QAAO,QACP,iBAAgB,SAChB,OACA,UACA,SAAS4H,qBACT,OAAON,SAAS,SAAS,YAAY,MACrC,SAAS;AAAA,MACL+E,SAAS;AAAA,QAAEC,SAAS;AAAA,MAAA;AAAA,MACpBC,UAAU;AAAA,MACVC,aAAa;AAAA,MACbC,sBAAsB;AAAA,MACtBC,iBAAiB;AAAA,MACjBvF;AAAAA,MACAwF,SAAS;AAAA,MACTC,UAAU;AAAA,IAAA,GACZ,EAAA,CAEV;AAAA,EAER;ACnMO,QAAMC,gBAAgBA,CAAC;AAAA,IAC1BC;AAAAA,IACAzF;AAAAA,IACA0F;AAAAA,IACAC;AAAAA,IACAC;AAAAA,EAOJ,MAAM;AACF,UAAM,CAACC,iBAAiBC,kBAAkB,IAAIC,eAAkC;AAAA,MAAEC,QAAQ;AAAA,IAAA,CAAM;AAChG,UAAM,CAACC,gBAAgBC,iBAAiB,IAAIH,MAAAA,SAAkC,CAAA,CAAE;AAChF,UAAM;AAAA,MAAEzC;AAAAA,IAAAA,IAAM6C,oBAAAA;AAEd,QAAIT,gBAAiB,QAAO/M,2BAAAA,IAAC,OAAA,EAAI,WAAU,2BAA0B,UAAAA,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,QAAA,CAAO,EAAA,CAAE;AACrG,QAAIT,YAAa,QACbhN,2BAAAA,IAAC,OAAA,EAAI,WAAU,OACX,UAAAA,2BAAAA,IAAC0N,KAAAA,WAAA,EAAU,OAAOV,aAAa,SAASC,cAAAA,CAAc,GAC1D;AAGJ,WACIrN,2BAAAA,KAAC,OAAA,EAAI,WAAU,wCACX,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA;AAAA,QAAA3N,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,sFAAsF0K,UAAAA,EAAE,sBAAsB,GAAE;AAAA,QACxJ3K,2BAAAA,IAAC4N,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAASX,eAAe,OAAM,kBACnD,UAAAjN,2BAAAA,IAAC6N,2BAAA,EAAc,MAAMlN,GAAAA,SAASmN,UAAS,EAAA,CAC3C;AAAA,MAAA,GACJ;AAAA,qCAEC,OAAA,EAAI,WAAU,8CACVvD,UAAAA,OAAOwD,KAAK1G,OAAO,EAAE2G,WAAW,mCAC5B,OAAA,EAAI,WAAU,mBACX,UAAAhO,2BAAAA,IAACC,eAAA,EAAW,SAAQ,WAAU,WAAU,0DAA0D0K,UAAAA,EAAE,yBAAyB,EAAA,CAAE,GACnI,IACAJ,OAAOC,QAAQnD,OAAO,EAAEvH,IAAI,CAAC,CAACmO,YAAY3D,MAAM,MAChD1K,2BAAAA,KAAC,OAAA,EAAqB,WAAU,QAC5B,UAAA;AAAA,QAAAA,gCAAC,SACG,WAAU,iHACV,SAAS,MAAMuN,mBAAmBe,CAAAA,UAAS;AAAA,UAAE,GAAGA;AAAAA,UAC5E,CAACD,UAAU,GAAG,CAACC,KAAKD,UAAU;AAAA,QAAA,EAAI,GAEN,UAAA;AAAA,UAAAjO,+BAAC,SAAI,WAAWM,GAAAA,IAAI,qCAAqC4M,gBAAgBe,UAAU,IAAI,cAAc,EAAE,GAAG,MAAK,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,GAAE,sHAAoH,GAAE;AAAA,yCAC/QhO,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,wFAAwFgO,UAAAA,WAAAA,CAAW;AAAA,QAAA,GAC7I;AAAA,QAECf,gBAAgBe,UAAU,KACvBjO,2BAAAA,IAAC,OAAA,EAAI,WAAU,uBACVsK,UAAAA,OAAOxK,IAAI2K,CAAAA,UACR7K,2BAAAA,KAAC,OAAA,EACG,UAAA;AAAA,UAAAA,gCAAC,SACG,WAAU,gIACV,SAAS,MAAM2N,kBAAkBW,CAAAA,YAAS;AAAA,YAAE,GAAGA;AAAAA,YAC3F,CAAC,GAAGD,UAAU,IAAIxD,MAAMG,SAAS,EAAE,GAAG,CAACsD,OAAK,GAAGD,UAAU,IAAIxD,MAAMG,SAAS,EAAE;AAAA,UAAA,EAAI,GAEtC,UAAA;AAAA,YAAA5K,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,8CAA8CgN,eAAe,GAAGW,UAAU,IAAIxD,MAAMG,SAAS,EAAE,IAAI,cAAc,EAAE,GAAG,MAAK,gBAAe,SAAQ,aAAY,UAAA5K,2BAAAA,IAAC,QAAA,EAAK,GAAE,qHAAA,CAAoH,EAAA,CAAE;AAAA,YAChTA,2BAAAA,IAAC,SAAI,WAAU,6EAA4E,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,6FAA2F,EAAA,CAAE;AAAA,2CAClTC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qFAAqFwK,gBAAMG,WAAU;AAAA,YAE3IhL,2BAAAA,KAAC,OAAA,EAAI,WAAU,0KACX,UAAA;AAAA,cAAAI,+BAAC4N,GAAAA,cACG,MAAK,YACL,WAAU,qFACV,SAAUO,CAAAA,MAAM;AACZA,kBAAEC,gBAAAA;AACFC,0BAAUC,UAAUC,UAAU9D,MAAMG,SAAS;AAAA,cACjD,GACA,OAAM,uBAEN,UAAA5K,2BAAAA,IAACwO,wBAAS,MAAM7N,GAAAA,SAASmN,UAAS,EAAA,CACtC;AAAA,cAEAlO,2BAAAA,KAAC6O,GAAAA,QACG,SACIzO,2BAAAA,IAAC4N,GAAAA,cACG,MAAM,YACN,WAAU,qFACV,SAAUO,CAAAA,QAAMA,IAAEC,gBAAAA,GAClB,OAAM,0BAEN,UAAApO,2BAAAA,IAAC0O,YAAAA,oBAAiB,MAAM/N,GAAAA,SAASmN,SAAAA,CAAS,EAAA,CAC9C,GAGJ,UAAA;AAAA,gBAAA9N,+BAAC2O,GAAAA,YAAS,OAAK,MAAC,WAAU,WAAU,SAAS,CAACR,QAAwB;AAClEA,sBAAEC,gBAAAA;AACFtB,iCAAe,iBAAiBmB,eAAe,WAAW,GAAGA,UAAU,MAAM,EAAE,GAAGxD,MAAMG,SAAS,aAAa;AAAA,gBAClH,GAAG,UAAA,oBAAgB;AAAA,gBACnB5K,+BAAC2O,GAAAA,YAAS,OAAK,MAAC,WAAU,WAAU,SAAS,CAACR,QAAwB;AAClEA,sBAAEC,gBAAAA;AACFtB,iCAAe;AAAA,IAAcrC,MAAMI,QAAQ/K,IAAI8O,CAAAA,MAAKA,EAAE5Q,IAAI,EAAE6Q,KAAK,OAAO,CAAC;AAAA,OAAUZ,eAAe,WAAW,GAAGA,UAAU,MAAM,EAAE,GAAGxD,MAAMG,SAAS,GAAG;AAAA,gBAC3J,GAAG,UAAA,wBAAoB;AAAA,gBACvB5K,+BAAC2O,GAAAA,YAAS,OAAK,MAAC,WAAU,WAAU,SAAS,CAACR,QAAwB;AAClEA,sBAAEC,gBAAAA;AACFtB,iCAAe,eAAemB,eAAe,WAAW,GAAGA,UAAU,MAAM,EAAE,GAAGxD,MAAMG,SAAS;AAAA,IAASH,MAAMI,QAAQ/K,IAAI8O,CAAAA,QAAKA,IAAE5Q,IAAI,EAAE6Q,KAAK,OAAO,CAAC;AAAA;AAAA,IAAmBpE,MAAMI,QAAQ/K,IAAI,MAAM,GAAG,EAAE+O,KAAK,OAAO,CAAC;AAAA,GAAM;AAAA,gBAC3N,GAAG,UAAA,oBAAgB;AAAA,gBACnB7O,+BAAC2O,GAAAA,YAAS,OAAK,MAAC,WAAU,WAAU,SAAS,CAACR,QAAwB;AAClEA,sBAAEC,gBAAAA;AACFtB,iCAAe,UAAUmB,eAAe,WAAW,GAAGA,UAAU,MAAM,EAAE,GAAGxD,MAAMG,SAAS;AAAA;AAAA,IAAcH,MAAMI,QAAQ/K,IAAI8O,CAAAA,QAAK,GAAGA,IAAE5Q,IAAI,MAAM,EAAE6Q,KAAK,OAAO,CAAC;AAAA,cAAiB;AAAA,gBAClL,GAAG,UAAA,mBAAA,CAAgB;AAAA,cAAA,GACvB;AAAA,cAEA7O,2BAAAA,IAAC8O,GAAAA,UACG,SAAQ,QACR,MAAK,SACL,WAAU,+GACV,SAAUX,CAAAA,QAAM;AACZA,oBAAEC,gBAAAA;AACFtB,+BAAe,iBAAiBmB,eAAe,WAAW,GAAGA,UAAU,MAAM,EAAE,GAAGxD,MAAMG,SAAS,aAAa;AAAA,cAClH,GAAE,UAAA,SAAA,CAGN;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UAEC0C,eAAe,GAAGW,UAAU,IAAIxD,MAAMG,SAAS,EAAE,KAC9C5K,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,kCAAkCqN,GAAAA,kBAAkB,GACnElD,UAAAA,MAAMI,QAAQ/K,IAAIiL,CAAAA,QACfnL,2BAAAA,KAAC,OAAA,EAAmB,WAAU,kHAC1B,UAAA;AAAA,YAAAI,2BAAAA,IAAC,SAAI,WAAU,2EAA0E,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,KAAK,GAAE,0KAAwK,EAAA,CAAE;AAAA,2CAC/XC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,qFAAqF8K,cAAI/M,MAAK;AAAA,YACtIgC,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,+FAA8F,OAAO8K,IAAIgE,UAAWhE,UAAAA,IAAIgE,SAAAA,CAAS;AAAA,2CACxKnB,GAAAA,YAAA,EACG,MAAK,YACL,WAAU,8HACV,SAAUO,CAAAA,QAAM;AACZA,kBAAEC,gBAAAA;AACFC,wBAAUC,UAAUC,UAAUxD,IAAI/M,IAAI;AAAA,YAC1C,GACA,OAAM,wBAEN,UAAAgC,2BAAAA,IAACwO,wBAAS,MAAM7N,GAAAA,SAASmN,UAAS,EAAA,CACtC;AAAA,UAAA,KAdM/C,IAAI/M,IAed,CACH,EAAA,CACL;AAAA,QAAA,KAvFEyM,MAAMG,SAyFhB,CACH,EAAA,CACL;AAAA,MAAA,EAAA,GAxGEqD,UA0GV,CACH,EAAA,CACL;AAAA,IAAA,GACJ;AAAA,EAER;ACjIO,QAAMe,mBAAmBA,CAAC;AAAA,IAC7BC;AAAAA,IACAnC;AAAAA,IACAoC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACA/H;AAAAA,IACA0F;AAAAA,IACAC;AAAAA,IACAC;AAAAA,EACmB,MAAM;AACzB,UAAM,CAACoC,WAAWC,YAAY,IAAIlC,MAAAA,SAA4C,QAAQ;AACtF,UAAM;AAAA,MAAEzC;AAAAA,IAAAA,IAAM6C,oBAAAA;AAEd,2CACK,OAAA,EAAI,WAAWlN,GAAAA,IAAI,qEAAqEqN,GAAAA,kBAAkB,GACvG,UAAA;AAAA,MAAA/N,2BAAAA,KAAC2P,GAAAA,MAAA,EAAK,OAAOF,WAAW,eAAgBG,CAAAA,MAAMF,aAAaE,CAAsC,GAAG,SAAQ,QAAO,WAAU,uDACzH,UAAA;AAAA,QAAAxP,+BAACyP,GAAAA,KAAA,EAAI,OAAM,UAAU9E,UAAAA,EAAE,2BAA2B,GAAE;AAAA,uCACnD8E,GAAAA,KAAA,EAAI,OAAM,YAAY9E,UAAAA,EAAE,6BAA6B,GAAE;AAAA,uCACvD8E,GAAAA,KAAA,EAAI,OAAM,WAAW9E,UAAAA,EAAE,4BAA4B,EAAA,CAAE;AAAA,MAAA,GAC1D;AAAA,MAEA/K,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCACVyP,UAAAA;AAAAA,QAAAA,cAAc,YACXrP,2BAAAA,IAAC,eAAA,EACG,cACA,SACA,iBACA,aACA,eAA6B;AAAA,QAIpCqP,cAAc,eAAe,MAAM;AAChC,gBAAMK,YAAYR,SAASS,OAAOlO,CAAAA,MAAKA,EAAEmO,UAAU;AACnD,gBAAMC,SAASX,SAASS,OAAOlO,CAAAA,QAAK,CAACA,IAAEmO,UAAU;AAEjD,iBACIhQ,2BAAAA,KAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,YAAAI,+BAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAsF0K,UAAAA,EAAE,6BAA6B,GAAE,GACnK;AAAA,YACA3K,2BAAAA,IAAC,SAAI,WAAU,wDACVkP,mBAASlB,WAAW,IACjBhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,mBACX,yCAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mDAAmD0K,YAAE,gCAAgC,EAAA,CAAE,EAAA,CACnI,IAEA/K,2BAAAA,KAAAkQ,WAAAA,UAAA,EACKJ,UAAAA;AAAAA,cAAAA,UAAU1B,SAAS,KAChBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,gBAAAA,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,8HACpC,UAAA;AAAA,kBAAAD,+BAAC,OAAA,EAAI,WAAU,6BAA4B,MAAK,gBAAe,SAAQ,aAAY,UAAAA,2BAAAA,IAAC,QAAA,EAAK,UAAS,WAAU,GAAE,iHAAgH,UAAS,WAAS,GAAE;AAAA,kBAAK;AAAA,gBAAA,GAE3P;AAAA,+CACC,OAAA,EAAI,WAAU,aACV0P,UAAAA,UAAU5P,IAAIiQ,aACXnQ,gCAAC,OAAA,EAEG,WAAWU,GAAAA,IAAI,uJAAuJqN,GAAAA,kBAAkB,GACxL,SAAS,MAAMsB,gBAAgBc,QAAQC,GAAG,GAE1C,UAAA;AAAA,kBAAAhQ,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,uFAAuF8P,kBAAQ/R,MAAK;AAAA,iDACzIiC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,qFAAqF8P,kBAAQC,KAAI;AAAA,iDACxIpC,GAAAA,YAAA,EACG,MAAK,YACL,WAAU,qHACV,SAAUO,CAAAA,MAAM;AACZA,sBAAEC,gBAAAA;AACFgB,oCAAgBW,QAAQ/H,EAAE;AAAA,kBAC9B,GAEA,UAAAhI,2BAAAA,IAACiQ,YAAAA,YAAA,EAAW,MAAMtP,GAAAA,SAASmN,UAAS,EAAA,CACxC;AAAA,gBAAA,KAfKiC,QAAQ/H,EAgBjB,CACH,EAAA,CACL;AAAA,cAAA,GACJ;AAAA,cAEH6H,OAAO7B,SAAS,KACbpO,2BAAAA,KAAC,OAAA,EACI8P,UAAAA;AAAAA,gBAAAA,UAAU1B,SAAS,KAChBhO,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,iHAA+G,UAAA,SAAA,CAEvJ;AAAA,+CAEH,OAAA,EAAI,WAAU,aACV4P,UAAAA,OAAO/P,IAAIiQ,eACRnQ,gCAAC,OAAA,EAEG,WAAWU,GAAAA,IAAI,uJAAuJqN,GAAAA,kBAAkB,GACxL,SAAS,MAAMsB,gBAAgBc,UAAQC,GAAG,GAE1C,UAAA;AAAA,kBAAAhQ,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,uFAAuF8P,oBAAQ/R,MAAK;AAAA,iDACzIiC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,qFAAqF8P,oBAAQC,KAAI;AAAA,iDACxIpC,GAAAA,YAAA,EACG,MAAK,YACL,WAAU,qHACV,SAAUO,CAAAA,QAAM;AACZA,wBAAEC,gBAAAA;AACFgB,oCAAgBW,UAAQ/H,EAAE;AAAA,kBAC9B,GAEA,UAAAhI,2BAAAA,IAACiQ,YAAAA,YAAA,EAAW,MAAMtP,GAAAA,SAASmN,UAAS,EAAA,CACxC;AAAA,gBAAA,KAfKiC,UAAQ/H,EAgBjB,CACH,EAAA,CACL;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,CAER,EAAA,CAER;AAAA,UAAA,GACJ;AAAA,QAER,GAAA;AAAA,QAECqH,cAAc,aACXzP,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAI,+BAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAsF0K,UAAAA,EAAE,4BAA4B,GAAE,GAClK;AAAA,yCACC,OAAA,EAAI,WAAU,wDACVwE,UAAAA,QAAQnB,WAAW,IAChBhO,+BAAC,OAAA,EAAI,WAAU,mBACX,yCAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mDAAmD0K,YAAE,+BAA+B,GAAE,EAAA,CAClI,IAEA,CAAC,GAAGwE,OAAO,EAAEe,UAAUpQ,IAAI,CAACkQ,KAAKG,MAC7BvQ,2BAAAA,KAAC,SAEG,WAAU,6HACV,SAAS,MAAMqP,gBAAgBe,GAAG,GAElC,UAAA;AAAA,YAAAhQ,2BAAAA,IAAC,SAAI,WAAU,8HAA6H,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,+CAA6C,EAAA,CAAE;AAAA,2CACrTC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,4KAA4K+P,UAAAA,IAAAA,CAAI;AAAA,UAAA,EAAA,GALnNG,CAMT,CACH,EAAA,CAET;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,EAER;AC7IO,WAASC,uBAAuBC,WAAqC;AACxE,QAAI;AACA,YAAMC,MAAMC,eAAAA,WAAWF,SAAS;AAChC,UAAIC,IAAIE,SAAS,SAAU,QAAO,CAAA;AAElC,YAAMlG,SAA2B,CAAA;AAIjC,YAAMmG,cAAcA,CAACC,cAA0B;AAC3C,mBAAWC,QAAQD,WAAW;AAC1B,cAAIC,KAAKH,SAAS,WAAWG,KAAK3S,MAAM;AACpCsM,mBAAOlE,KAAK;AAAA,cAAEpI,MAAM2S,KAAK3S,KAAKA;AAAAA,cAClD4S,OAAOD,KAAK3S,KAAK4S;AAAAA,YAAAA,CAAO;AAAA,UACR;AACA,cAAID,KAAKH,SAAS,QAAQ;AACtB,gBAAIG,KAAKE,KAAMJ,aAAY,CAACE,KAAKE,IAAI,CAAC;AACtC,gBAAIF,KAAKG,MAAOL,aAAY,CAACE,KAAKG,KAAK,CAAC;AAAA,UAC5C;AAAA,QACJ;AAAA,MACJ;AAEA,UAAIR,IAAIS,MAAM;AACVN,oBAAYH,IAAIS,IAAI;AAAA,MACxB;AAEA,aAAOzG;AAAAA,IACX,QAAQ;AACJ,aAAO,CAAA;AAAA,IACX;AAAA,EACJ;AAcO,WAAS0G,wBACZX,WACAhJ,SACA4J,aACAC,eACyB;AACzB,UAAM5G,SAAS8F,uBAAuBC,SAAS;AAC/C,QAAI/F,OAAO0D,WAAW,EAAG,QAAO,CAAA;AAGhC,UAAMmD,gBAAsE,CAAA;AAC5E,QAAI;AACA,YAAMb,MAAMC,eAAAA,WAAWF,SAAS;AAChC,UAAIC,IAAIE,SAAS,YAAYF,IAAIzF,SAAS;AACtC,mBAAWE,OAAOuF,IAAIzF,SAAS;AAC3B,cAAIE,IAAIqG,MAAMZ,SAAS,OAAO;AAC1BW,0BAAc/K,KAAK;AAAA,cACfqE,OAAOM,IAAIqG,KAAK3G,OAAOzM;AAAAA,cACvBiM,QAAQc,IAAIqG,KAAKpT;AAAAA,cACjB4S,OAAO7F,IAAI6F,OAAO5S;AAAAA,YAAAA,CACrB;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,QAAQ;AAAA,IAAE;AAEV,UAAMqT,UAAqC,CAAA;AAE3C,eAAW5G,SAASH,QAAQ;AAExB,YAAMgH,UAAUL,YAAYvG,KAAKkE,CAAAA,MAAK;AAClC,cAAMhE,YAAagE,EAAUnE,SAAS8G,MAAAA,YAAY3C,EAAEpO,IAAI;AACxD,eAAOoK,cAAcH,MAAMzM;AAAAA,MAC/B,CAAC;AAED,UAAI,CAACsT,QAAS;AAGd,YAAME,eAAyB,CAAA;AAC/B,iBAAWC,iBAAiBlH,OAAOmH,OAAOrK,OAAO,GAAG;AAChD,cAAMsK,YAAYF,cAAc/G,KAAKC,OAAKA,EAAEC,cAAcH,MAAMzM,IAAI;AACpE,YAAI2T,WAAW;AACXH,uBAAapL,KAAK,GAAGuL,UAAU9G,QAAQ/K,IAAI8O,CAAAA,MAAKA,EAAE5Q,IAAI,CAAC;AACvD;AAAA,QACJ;AAAA,MACJ;AAKA,UAAI4T;AAGJ,YAAMC,WAAWpH,MAAMmG,SAASnG,MAAMzM;AACtC,YAAM8T,cAAcX,cAAczG,KAC9BqH,CAAAA,OAAMA,GAAG9H,WAAW,SAAS,CAAC8H,GAAGtH,SAASsH,GAAGtH,UAAUoH,YAAYE,GAAGtH,UAAUA,MAAMzM,KAC1F;AACA,UAAI8T,aAAa;AACbF,mBAAWE,YAAYlB,SAASkB,YAAY7H;AAAAA,MAChD;AAGA,UAAI,CAAC2H,YAAYV,eAAe;AAC5B,YAAIA,cAAc/K,SAAS,IAAI,GAAG;AAC9ByL,qBAAW;AAAA,QACf;AAAA,MACJ;AAGA,UAAI,CAACA,YAAYJ,aAAarL,SAAS,IAAI,GAAG;AAC1CyL,mBAAW;AAAA,MACf;AAEAP,cAAQjL,KAAK;AAAA,QACTwE,WAAWH,MAAMzM;AAAAA,QACjBgU,YAAYvH,MAAMmG;AAAAA,QAClBqB,YAAYX;AAAAA,QACZzG,SAAS2G;AAAAA,QACTI;AAAAA,MAAAA,CACH;AAAA,IACL;AAEA,WAAOP;AAAAA,EACX;AAeO,WAASa,oBAAoB7B,WAAmB8B,WAAmB9K,SAAwD;AAC9H,QAAI;AACA,YAAMiD,SAAS8F,uBAAuBC,SAAS;AAE/C,YAAMC,MAAMC,eAAAA,WAAWF,SAAS;AAChC,UAAIC,IAAIE,SAAS,UAAU;AACvB,eAAO;AAAA,UAAE4B,OAAO;AAAA,QAAA;AAAA,MACpB;AAEA,UAAI9H,OAAO0D,WAAW,GAAG;AACrB,eAAO;AAAA,UAAEoE,OAAO;AAAA,QAAA;AAAA,MACpB;AAGA,YAAMjB,gBAAsE,CAAA;AAC5E,UAAIb,IAAIzF,SAAS;AACb,mBAAWE,OAAOuF,IAAIzF,SAAS;AAC3B,cAAIE,IAAIqG,MAAMZ,SAAS,OAAO;AAC1BW,0BAAc/K,KAAK;AAAA,cACfqE,OAAOM,IAAIqG,KAAK3G,OAAOzM;AAAAA,cACvBiM,QAAQc,IAAIqG,KAAKpT;AAAAA,cACjB4S,OAAO7F,IAAI6F,OAAO5S;AAAAA,YAAAA,CACrB;AAAA,UACL;AAAA,QACJ;AAAA,MACJ;AAGA,YAAMqU,iBAAiBlB,cAAczG,KACjCqH,CAAAA,OAAOA,GAAGnB,UAAUuB,aAAe,CAACJ,GAAGnB,SAASmB,GAAG9H,WAAWkI,SAClE;AACA,YAAMG,qBAAqBD,gBAAgBpI,UAAUkI;AACrD,YAAMI,iBAAiBF,gBAAgB5H;AAGvC,UAAI+H,oBAAmC;AAEvC,UAAIlI,OAAO0D,WAAW,GAAG;AACrBwE,4BAAoBlI,OAAO,CAAC,EAAEtM;AAAAA,MAClC,OAAO;AAEH,YAAIuU,gBAAgB;AAChB,gBAAME,eAAenI,OAAOI,KACxBC,CAAAA,MAAKA,EAAEiG,UAAU2B,kBAAkB5H,EAAE3M,SAASuU,cAClD;AACA,cAAIE,cAAc;AACdD,gCAAoBC,aAAazU;AAAAA,UACrC;AAAA,QACJ;AAGA,YAAI,CAACwU,mBAAmB;AACpB,gBAAME,gBAAgBpI,OAAOqF,OAAOhF,CAAAA,MAAK;AACrC,uBAAWgI,UAAUpI,OAAOmH,OAAOrK,OAAO,GAAG;AACzC,oBAAMsK,YAAYgB,OAAOjI,KAAKkI,QAAMA,GAAGhI,cAAcD,EAAE3M,IAAI;AAC3D,kBAAI2T,aAAaA,UAAU9G,QAAQgI,KAAKjE,OAAKA,EAAE5Q,SAASsU,kBAAkB,GAAG;AACzE,uBAAO;AAAA,cACX;AAAA,YACJ;AACA,mBAAO;AAAA,UACX,CAAC;AAED,cAAII,cAAc1E,WAAW,GAAG;AAC5BwE,gCAAoBE,cAAc,CAAC,EAAE1U;AAAAA,UACzC,WAAW0U,cAAc1E,SAAS,GAAG;AACjC,mBAAO;AAAA,cAAEoE,OAAO,qBAAqBD,SAAS;AAAA,YAAA;AAAA,UAClD,OAAO;AACH,mBAAO;AAAA,cAAEC,OAAO,0BAA0BD,SAAS;AAAA,YAAA;AAAA,UACvD;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAACK,mBAAmB;AACpB,eAAO;AAAA,UAAEJ,OAAO;AAAA,QAAA;AAAA,MACpB;AAGA,UAAIU,cAAwB,CAAA;AAC5B,iBAAWH,UAAUpI,OAAOmH,OAAOrK,OAAO,GAAG;AACzC,cAAMsK,YAAYgB,OAAOjI,KAAKC,CAAAA,MAAKA,EAAEC,cAAc4H,iBAAiB;AACpE,YAAIb,WAAW;AACXmB,wBAAcnB,UAAU9G,QACnB8E,OAAOf,CAAAA,MAAKA,EAAEmE,YAAY,EAC1BjT,IAAI8O,CAAAA,MAAKA,EAAE5Q,IAAI;AACpB;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI8U,YAAY9E,WAAW,GAAG;AAC1B,eAAO;AAAA,UAAEoE,OAAO,UAAUI,iBAAiB;AAAA,QAAA;AAAA,MAC/C;AAGA,YAAMQ,aAAa1I,OAAOI,KAAKC,CAAAA,MAAKA,EAAE3M,SAASwU,iBAAiB;AAChE,YAAMR,aAAagB,YAAYpC;AAG/B,YAAMqC,cAA2BH,YAAYhT,IAAIoT,CAAAA,UAAS;AAEtD,cAAMC,YAAYhC,cAAczG,KAC5BqH,CAAAA,OAAMA,GAAG9H,WAAWiJ,UACf,CAACnB,GAAGtH,SAASsH,GAAGtH,WAAWuH,cAAcQ,mBAClD;AACA,eAAO;AAAA,UACHY,UAAUF;AAAAA,UACVG,cAAcF,WAAWvC,SAASuC,WAAWlJ,UAAUiJ;AAAAA,QAAAA;AAAAA,MAE/D,CAAC;AAED,aAAO;AAAA,QAAEtI,WAAW4H;AAAAA,QAC5BS;AAAAA,MAAAA;AAAAA,IACI,SAAS9E,GAAY;AACjBmF,cAAQC,KAAK,4BAA4BpF,CAAC;AAC1C,YAAMqF,UAAUrF,aAAasF,QAAQtF,EAAEqF,UAAUE,OAAOvF,CAAC;AACzD,aAAO;AAAA,QAAEiE,OAAO,oDAAoDoB,OAAO;AAAA,MAAA;AAAA,IAC/E;AAAA,EACJ;ACvQO,QAAMG,oBAAsDvV,CAAAA,OAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAC,UAAA;AAAA,MAAAsV;AAAAA,MAAAC,QAAA5U;AAAAA,IAAAA,IAAAb;AAAQ,UAAAyV,SAAA5U,OAAa2J,gBAAb3J;AACxE,UAAA,CAAA6U,UAAAC,WAAA,IAAgC3G,MAAAA,aAAa;AAE7C,UAAA4G,cAAoBJ,KAAIK,SAAUL,KAAIK,MAAAjG,SAAA;AAGtC,UAAAkG,OAAaN,KAAK,YAAY;AAC9B,QAAAO,YAAgB;AAAqC,QACjDD,OAAI,KAAO;AAAEC,kBAAYA;AAAAA,IAAH,OAAA;AAAA,UACjBD,OAAI,KAAM;AAAEC,oBAAYA;AAAAA,MAAH;AAAA,IAAA;AAGW,UAAAhV,KAAA0U,SAAS,QAAQ;AAAoB,QAAAtU;AAAA,QAAAlB,SAAAc,IAAA;AAA1DI,WAAAe,GAAAA,IAAI,iBAAiBnB,EAAqC;AAACd,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,SAAAwV,QAAA;AAEtElU,WAAA,CAACkU,UACE7T,2BAAAA,IAAA,OAAA,EAAe,WAAA,kFAAgF;AAClG3B,aAAAwV;AAAAxV,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAAwV,QAAA;AACAhU,WAAA,CAACgU,UACE7T,2BAAAA,IAAA,OAAA,EAAe,WAAA,6EAA2E;AAC7F3B,aAAAwV;AAAAxV,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAC;AAAA,QAAAzC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEeH,WAAAP,GAAAA,IAAI,6IAA2IqN,qBAAoB;AAEhK7M,WAAAR,GAAAA,IAAI,wEAAwE;AAACjC,aAAAwC;AAAAxC,aAAAyC;AAAAA,IAAA,OAAA;AAAAD,WAAAxC,EAAA,CAAA;AAAAyC,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,SAAAyV,UAAA;AAC/E7S,WAAAA,MAAM8S,YAAW,CAAED,QAAQ;AAACzV,aAAAyV;AAAAzV,aAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,EAAA,MAAAyV,YAAAzV,UAAA2V,aAAA;AAGhC9S,WAAA8S,cACGhU,+BAAA,OAAA,EAAgB,WAAAM,GAAAA,IAAI,oDAAoD,CAACwT,WAAW,eAAe,EAAE,GAAQ,MAAA,QAAc,QAAA,gBAAuB,SAAA,aAAY,UAAA9T,2BAAAA,IAAA,QAAA,EAAoB,eAAA,SAAuB,gBAAA,SAAqB,aAAA,GAAK,GAAA,iBAAA,CAAgB,EAAA,CAAE,IAErPA,2BAAAA,IAAA,OAAA,EAAe,WAAA,WAAS;AAC3B3B,cAAAyV;AAAAzV,cAAA2V;AAAA3V,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAGI,UAAA8C,MAAAyS,KAAK,WAAW;AAAC,QAAAxS;AAAA,QAAA/C,UAAA8C,KAAA;AADtBC,2CAACnB,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,qBACjCkB,UAAAA,KACL;AAAa9C,cAAA8C;AAAA9C,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,UAAAuV,MAAA;AAEZtS,YAAAsS,KAAK,eAAe,KACjBhU,2BAAAA,KAAA,QAAA,EAAgB,WAAA,uIAAsI,UAAA;AAAA,QAAA;AAAA,QAC9IgU,KAAK,eAAe;AAAA,QAAE;AAAA,QAAEA,KAAIQ,SAAUR,KAAIQ,UAAWR,KAAK,eAAe,IAAI,IAAIA,KAAIQ,KAAA,MAAY;AAAA,MAAA,GACzG;AACH/V,cAAAuV;AAAAvV,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAA+C,OAAA/C,UAAAiD,OAAAjD,EAAA,EAAA,MAAA6C,IAAA;AAfLM,qDAAe,WAAA,+BACVN,UAAAA;AAAAA,QAAAA;AAAAA,QAMDE;AAAAA,QAICE;AAAAA,MAAAA,GAKL;AAAMjD,cAAA+C;AAAA/C,cAAAiD;AAAAjD,cAAA6C;AAAA7C,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIEmB,YAAAnC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,0HAAyH,UAAA,QAAI;AAAO3B,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,UAAA8V,WAAA;AACnI/R,YAAA9B,GAAAA,IAAI,kDAAkD6T,SAAS;AAAC9V,cAAA8V;AAAA9V,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgE;AAAA,QAAAhE,UAAA6V,MAAA;AAAG7R,YAAA6R,KAAIG,SAAU;AAAChW,cAAA6V;AAAA7V,cAAAgE;AAAAA,IAAA,OAAA;AAAAA,YAAAhE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiE;AAAA,QAAAjE,EAAA,EAAA,MAAA+D,OAAA/D,UAAAgE,KAAA;AAFvGC,YAAA1C,2BAAAA,KAAA,OAAA,EAAe,WAAA,4BACXuC,UAAAA;AAAAA,QAAAA;AAAAA,QACAnC,2BAAAA,IAAA,QAAA,EAAiB,WAAAoC,KAAmEC,UAAAA,IAAAA,CAAgB;AAAA,MAAA,GACxG;AAAMhE,cAAA+D;AAAA/D,cAAAgE;AAAAhE,cAAAiE;AAAAA,IAAA,OAAA;AAAAA,YAAAjE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmE;AAAA,QAAAnE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEFwB,YAAAxC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,0HAAyH,UAAA,QAAI;AAAO3B,cAAAmE;AAAAA,IAAA,OAAA;AAAAA,YAAAnE,EAAA,EAAA;AAAA,IAAA;AAC5C,UAAAoE,MAAAmR,KAAK,WAAW;AAAC,QAAAlR;AAAA,QAAArE,UAAAoE,KAAA;AAF7HC,YAAA9C,2BAAAA,KAAA,OAAA,EAAe,WAAA,4BACX4C,UAAAA;AAAAA,QAAAA;AAAAA,QACAxC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,wFAAwFyC,UAAAA,IAAAA,CAAkB;AAAA,MAAA,GAC9H;AAAMpE,cAAAoE;AAAApE,cAAAqE;AAAAA,IAAA,OAAA;AAAAA,YAAArE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsE;AAAA,QAAAtE,EAAA,EAAA,MAAAiE,OAAAjE,UAAAqE,KAAA;AARVC,YAAA/C,2BAAAA,KAAA,OAAA,EAAe,WAAA,+BACX0C,UAAAA;AAAAA,QAAAA;AAAAA,QAIAI;AAAAA,MAAAA,GAIJ;AAAMrE,cAAAiE;AAAAjE,cAAAqE;AAAArE,cAAAsE;AAAAA,IAAA,OAAA;AAAAA,YAAAtE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuE;AAAA,QAAAvE,EAAA,EAAA,MAAAmD,OAAAnD,UAAAsE,OAAAtE,EAAA,EAAA,MAAA4C,IAAA;AA/BV2B,YAAAhD,2BAAAA,KAAA,OAAA,EACe,WAAAkB,IACF,SAAAG,IAETO,UAAAA;AAAAA,QAAAA;AAAAA,QAkBAmB;AAAAA,MAAAA,GAUJ;AAAMtE,cAAAmD;AAAAnD,cAAAsE;AAAAtE,cAAA4C;AAAA5C,cAAAuE;AAAAA,IAAA,OAAA;AAAAA,YAAAvE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwE;AAAA,QAAAxE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAMU6B,YAAA7C,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mDAAkD,UAAA,iBAAa;AAAO3B,cAAAwE;AAAAA,IAAA,OAAA;AAAAA,YAAAxE,EAAA,EAAA;AAAA,IAAA;AAC7C,UAAAyE,MAAA8Q,KAAK,cAAc;AAAC,QAAA7Q;AAAA,QAAA1E,UAAAyE,KAAA;AAApBC,YAAAD,IAAoBuR,SAAU;AAAChW,cAAAyE;AAAAzE,cAAA0E;AAAAA,IAAA,OAAA;AAAAA,YAAA1E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA2E;AAAA,QAAA3E,UAAA0E,KAAA;AAF5EC,YAAApD,2BAAAA,KAAA,OAAA,EAAe,WAAA,+BACXiD,UAAAA;AAAAA,QAAAA;AAAAA,QACA7C,2BAAAA,IAAA,QAAA,EAAgB,WAAA,yBAAyB+C,UAAAA,IAAAA,CAAgC;AAAA,MAAA,GAC7E;AAAM1E,cAAA0E;AAAA1E,cAAA2E;AAAAA,IAAA,OAAA;AAAAA,YAAA3E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4E;AAAA,QAAA5E,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEFiC,YAAAjD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mDAAkD,UAAA,UAAM;AAAO3B,cAAA4E;AAAAA,IAAA,OAAA;AAAAA,YAAA5E,EAAA,EAAA;AAAA,IAAA;AACtC,UAAA6E,MAAA0Q,KAAK,YAAY;AAAC,QAAAzQ;AAAA,QAAA9E,UAAA6E,KAAA;AAF/DC,YAAAvD,2BAAAA,KAAA,OAAA,EAAe,WAAA,+BACXqD,UAAAA;AAAAA,QAAAA;AAAAA,QACArD,2BAAAA,KAAA,QAAA,EAAgB,WAAA,yBAAyBsD,UAAAA;AAAAA,UAAAA;AAAAA,UAAmB;AAAA,QAAA,EAAA,CAAM;AAAA,MAAA,GACtE;AAAM7E,cAAA6E;AAAA7E,cAAA8E;AAAAA,IAAA,OAAA;AAAAA,YAAA9E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+E;AAAA,QAAA/E,EAAA,EAAA,MAAA2E,OAAA3E,UAAA8E,KAAA;AARVC,YAAAxD,2BAAAA,KAAA,OAAA,EAAe,WAAA,+BACXoD,UAAAA;AAAAA,QAAAA;AAAAA,QAIAG;AAAAA,MAAAA,GAIJ;AAAM9E,cAAA2E;AAAA3E,cAAA8E;AAAA9E,cAAA+E;AAAAA,IAAA,OAAA;AAAAA,YAAA/E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgF;AAAA,QAAAhF,EAAA,EAAA,MAAAuV,KAAAU,QAAA;AAELjR,YAAAuQ,KAAIU,UACD1U,2BAAAA,cAAe,WAAA,QACX,UAAA;AAAA,QAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,8DAA6D,UAAA,WAAO;AAAA,QACpFA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,4HAA4H4T,eAAIU,OAAAA,CAAQ;AAAA,MAAA,GAC5J;AACHjW,QAAA,EAAA,IAAAuV,KAAAU;AAAAjW,cAAAgF;AAAAA,IAAA,OAAA;AAAAA,YAAAhF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiF;AAAA,QAAAjF,UAAAuV,MAAA;AACAtQ,YAAAsQ,KAAK,YAAY,KACdhU,2BAAAA,cAAe,WAAA,QACX,UAAA;AAAA,QAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,8DAA6D,UAAA,eAAW;AAAA,uCACxF,QAAA,EAAgB,WAAA,4HAA4H4T,UAAAA,KAAK,YAAY,EAAA,CAAE;AAAA,MAAA,GACnK;AACHvV,cAAAuV;AAAAvV,cAAAiF;AAAAA,IAAA,OAAA;AAAAA,YAAAjF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmF;AAAA,QAAAnF,UAAAuV,MAAA;AACApQ,YAAAoQ,KAAK,WAAW,KACbhU,2BAAAA,cAAe,WAAA,QACX,UAAA;AAAA,QAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,8DAA6D,UAAA,cAAU;AAAA,uCACvF,QAAA,EAAgB,WAAA,4HAA4H4T,UAAAA,KAAK,WAAW,EAAA,CAAE;AAAA,MAAA,GAClK;AACHvV,cAAAuV;AAAAvV,cAAAmF;AAAAA,IAAA,OAAA;AAAAA,YAAAnF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAoF;AAAA,QAAApF,EAAA,EAAA,MAAA+E,OAAA/E,EAAA,EAAA,MAAAgF,OAAAhF,EAAA,EAAA,MAAAiF,OAAAjF,UAAAmF,KAAA;AA7BLC,qDAAe,WAAA,iGACXL,UAAAA;AAAAA,QAAAA;AAAAA,QAWCC;AAAAA,QAMAC;AAAAA,QAMAE;AAAAA,MAAAA,GAML;AAAMnF,cAAA+E;AAAA/E,cAAAgF;AAAAhF,cAAAiF;AAAAjF,cAAAmF;AAAAnF,cAAAoF;AAAAA,IAAA,OAAA;AAAAA,YAAApF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqF;AAAA,QAAArF,EAAA,EAAA,MAAAyV,YAAAzV,UAAAoF,KAAA;AA/BVC,YAAA1D,2BAAAA,IAACuU,aAAA,EAAaT,IAAAA,UACVrQ,UAAAA,KA+BJ;AAAWpF,cAAAyV;AAAAzV,cAAAoF;AAAApF,cAAAqF;AAAAA,IAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsF;AAAA,QAAAtF,EAAA,EAAA,MAAAuE,OAAAvE,UAAAqF,KAAA;AAnEfC,YAAA/D,2BAAAA,KAAA,OAAA,EAAgB,WAAAiB,IACZ+B,UAAAA;AAAAA,QAAAA;AAAAA,QAkCAc;AAAAA,MAAAA,GAiCJ;AAAMrF,cAAAuE;AAAAvE,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuF;AAAA,QAAAvF,EAAA,EAAA,MAAAyV,YAAAzV,EAAA,EAAA,MAAA2V,eAAA3V,EAAA,EAAA,MAAAuV,KAAAK,OAAA;AAELrQ,YAAAkQ,YAAYE,eACThU,2BAAAA,IAAA,OAAA,EAAe,WAAA,qCACV4T,UAAAA,KAAIK,MAAAnU,IAAAuB,OAEJ,EAAA,CACL;AACHhD,cAAAyV;AAAAzV,cAAA2V;AAAA3V,QAAA,EAAA,IAAAuV,KAAAK;AAAA5V,cAAAuF;AAAAA,IAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwF;AAAA,QAAAxF,EAAA,EAAA,MAAAkB,MAAAlB,EAAA,EAAA,MAAAsF,OAAAtF,EAAA,EAAA,MAAAuF,OAAAvF,EAAA,EAAA,MAAAsB,MAAAtB,UAAAwB,IAAA;AArFLgE,YAAAjE,2BAAAA,KAAA,OAAA,EAAgB,WAAAL,IAEXI,UAAAA;AAAAA,QAAAA;AAAAA,QAGAE;AAAAA,QAID8D;AAAAA,QAsECC;AAAAA,MAAAA,GAOL;AAAMvF,cAAAkB;AAAAlB,cAAAsF;AAAAtF,cAAAuF;AAAAvF,cAAAsB;AAAAtB,cAAAwB;AAAAxB,cAAAwF;AAAAA,IAAA,OAAA;AAAAA,YAAAxF,EAAA,EAAA;AAAA,IAAA;AAAA,WAtFNwF;AAAAA,EAsFM;AAlGqD,WAAAxC,QAAAmT,WAAAC,KAAA;AAAA,0CA8F1C,mBAAA,EAAkCD,iBAAmB,QAAA,YAAK;AAAA,EAAG;ACjHtF,MAAIE,oBAAqD;AACzD,MAAI;AAGA,UAAMC,MAAMC,QAAQ,kBAAkB;AACtCF,wBAAoBC,IAAID;AAAAA,EAC5B,QAAQ;AAAA,EAAE;AA8CV,QAAMG,mBAAmB;AACzB,QAAMC,yBAAyB;AAE/B,QAAMC,qBAAqB3W,CAAAA,OAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAC,UAAA;AAAA,MAAA0W;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAA9W;AASxB,UAAA,CAAA+W,MAAAC,OAAA,IAAwBhI,MAAAA,aAA6B;AAAE,QAAAnO;AAAA,QAAAZ,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACV/B,WAAA;AAAA,QAAAoW,OAAA;AAAA,QAAAC,QAAA;AAAA,MAAA;AAA6BjX,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAA1E,UAAA,CAAAkX,YAAAC,aAAA,IAAoCpI,MAAAA,SAASnO,EAA6B;AAC1E,UAAAwW,YAAkBhP,MAAAA,OAAA,IAA2B;AAAE,QAAAtH;AAAA,QAAAI;AAAA,QAAAlB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAErC7B,WAAAA,MAAA;AAAA,YACFsW,UAAS/O,WAAY+O,UAAS/O,QAAAgP,eAAsB;AACpDN,kBAAQK,UAAS/O,QAAAgP,cAAAC,sBAAAA,CAA8C;AAAA,QAAC;AAAA,YAEhE,OAAAC,WAAkB,aAAW;AAC7BJ,wBAAa;AAAA,YAAAH,OAAAO,OAAAC;AAAAA,YAAAP,QAAAM,OAAAE;AAAAA,UAAAA,CAAyD;AACtE,gBAAAC,eAAAA,MAA2BP,cAAa;AAAA,YAAAH,OAAAO,OAAAC;AAAAA,YAAAP,QAAAM,OAAAE;AAAAA,UAAAA,CAAyD;AACjGF,iBAAAI,iBAAwB,UAAUD,YAAY;AAAC,iBAAA,MAClCH,OAAAK,oBAA2B,UAAUF,YAAY;AAAA,QAAC;AAAA,MAAA;AAGpExW,WAAA,CAAA;AAAElB,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAJ,WAAAd,EAAA,CAAA;AAAAkB,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAXLe,UAAAA,UAAUD,IAWPI,EAAE;AAAC,QAAA,CAED4V,MAAI;AAAA,UAAAxV;AAAA,UAAAtB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACErB,cAAAK,2BAAAA,IAAA,OAAA,EAAUyV,KAAAA,WAAqB,WAAA,8BAA4B;AAAGpX,eAAAsB;AAAAA,MAAA,OAAA;AAAAA,cAAAtB,EAAA,CAAA;AAAA,MAAA;AAAA,aAA9DsB;AAAAA,IAA8D;AAGzE,QAAAuW,MAAUf,KAAIe,MAAA;AACd,QAAArF,OAAWsE,KAAItE,OAAA;AACf,UAAAsF,WAAiBC,KAAAC,IAASlB,KAAIE,QAAA,GAAU,GAAK;AAC7C,UAAAiB,YAAkBnB,KAAIG,SAAA;AAAY,QAE9BzE,OAAOsF,WAAWZ,WAAUF,OAAM;AAClCxE,aAAOA,KAAAA,IAAAA,IAAa0E,WAAUF,QAASc,WAAQ,EAAK;AAAA,IAAhD;AAIR,UAAAI,qBAA2BH,KAAAC,IAAA,IAAad,WAAUD,SAAUY,MAAG,EAAK;AACpE,UAAAM,oBAA0BJ,KAAAK,IAAA,KAAcF,kBAAkB;AAAE,QAGxDL,MAAMI,YAAYf,WAAUD,QAAO;AACnCY,YAAMA,KAAAA,IAAAA,IAAaX,WAAUD,SAAUgB,YAAS,EAAK;AAAA,IAAlD;AASaJ,UAAAA,KAAAA;AACArF,UAAAA,KAAAA;AAGU,UAAAhQ,KAAAuV,KAAAK,IAAA,KAAclB,WAAUF,QAASxE,OAAI,EAAK;AAAC,QAAA/P;AAAA,QAAAzC,EAAA,CAAA,MAAAwS,QAAAxS,EAAA,CAAA,MAAAiY,aAAAjY,EAAA,CAAA,MAAA8X,YAAA9X,EAAA,CAAA,MAAAwC,MAAAxC,SAAA6X,KAAA;AALlDpV,WAAA;AAAA,QAAAoV,KACHA;AAAAA,QAAGrF,MACHA;AAAAA,QAAIsF;AAAAA,QAAAG;AAAAA,QAAAI,UAGM7V;AAAAA,MAAAA;AACbxC,aAAAwS;AAAAxS,aAAAiY;AAAAjY,aAAA8X;AAAA9X,aAAAwC;AAAAxC,aAAA6X;AAAA7X,aAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAMUC,WAAA;AAAA,QAAAqV,WAAa;AAAA,MAAA;AAAQjY,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAAD;AAAA,QAAA7C,UAAAmY,mBAAA;AACnBtV,WAAAiN,CAAAA,MAAA;AACL,cAAAwI,MAAYxI,EAACyI,OAAA7P;AACboH,UAACyI,OAAA7P,QAAgB;AACjBoH,UAACyI,OAAA7P,QAAgB4P;AACjBxI,UAACyI,OAAAC,MAAAvB,SAAuB;AACxBnH,UAACyI,OAAAC,MAAAvB,SAAuB,GAAGc,KAAAK,IAAStI,EAACyI,OAAAE,cAAsBN,iBAAiB,CAAC;AAAA,MAAI;AAE3ErV,YAAA4V,CAAAA,QAAA;AACN5I,YAACyI,OAAAC,MAAAvB,SAAuB;AACxBnH,YAACyI,OAAAC,MAAAvB,SAAuB,GAAGc,KAAAK,IAAStI,IAACyI,OAAAE,cAAsBN,iBAAiB,CAAC;AAAA,MAAI;AACpFnY,cAAAmY;AAAAnY,cAAA8C;AAAA9C,cAAA6C;AAAAA,IAAA,OAAA;AAAAC,YAAA9C,EAAA,EAAA;AAAA6C,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAAE;AAAA,QAAAjD,EAAA,EAAA,MAAA6W,YAAA7W,UAAA4W,QAAA;AACO7T,YAAA4V,CAAAA,QAAA;AACJ/B,eAAO9G,IAACyI,OAAA7P,aAAqB;AAC7BmO,iBAAAA;AAAAA,MAAU;AAEH5T,YAAA2V,CAAAA,QAAA;AAAA,YACH9I,IAACvM,QAAS,WAAO,CAAKuM,IAAC+I,UAAS;AAChC/I,cAACgJ,eAAAA;AACDlC,iBAAQ9G,IAACiJ,cAAqCrQ,SAAA,IAAe;AAC7DmO,mBAAAA;AAAAA,QAAU;AAAA,YAEV/G,IAACvM,QAAS,UAAQ;AAAEsT,mBAAAA;AAAAA,QAAU;AAAA,MAAA;AACrC7W,cAAA6W;AAAA7W,cAAA4W;AAAA5W,cAAA+C;AAAA/C,cAAAiD;AAAAA,IAAA,OAAA;AAAAF,YAAA/C,EAAA,EAAA;AAAAiD,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAA2W,gBAAA3W,EAAA,EAAA,MAAA8C,OAAA9C,EAAA,EAAA,MAAA+C,OAAA/C,EAAA,EAAA,MAAAiD,OAAAjD,UAAA6C,IAAA;AA3BLM,2CAAA,YAAA,EACc,WAAA,4KACIwT,cAAAA,cACd,iBACO,OAAA/T,IACE,SAAAC,IAOC,UAAAC,KAIF,QAAAC,KAIG,WAAAE,KAOV;AACHjD,cAAA2W;AAAA3W,cAAA8C;AAAA9C,cAAA+C;AAAA/C,cAAAiD;AAAAjD,cAAA6C;AAAA7C,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,EAAA,EAAA,MAAAmD,OAAAnD,UAAAyC,IAAA;AAvCTqB,YAAAkV,SAAAA,aACGrX,2BAAAA,IAAA,OAAA,EACc,WAAA,6HACH,OAAAc,IAQPU,UAAAA,IAAAA,CA6BJ,GAAM8V,SAAAC,IAEV;AAAClZ,cAAAmD;AAAAnD,cAAAyC;AAAAzC,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,UAAA8D,KAAA;AA3CLC,2CAAA,OAAA,EAAUqT,gBAAqB,WAAA,8BAC1BtT,UAAAA,KA2CL;AAAM9D,cAAA8D;AAAA9D,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,WA5CN+D;AAAAA,EA4CM;AAIP,QAAMqC,YAAYA,MAAM;AAC3B,UAAM;AAAA,MAAE+S;AAAAA,IAAAA,IAAkB5Y,sBAAAA;AAC1B,UAAM6Y,uBAAuBC,KAAAA,8BAAAA;AAC7B,UAAMC,qBAAqBC,KAAAA,sBAAAA;AAC3B,UAAMC,qBAAqBC,KAAAA,4BAAAA;AAE3B,UAAM;AAAA,MAAEnN;AAAAA,IAAAA,IAAM6C,oBAAAA;AAGd,UAAM,CAACnG,SAAS0Q,UAAU,IAAI3K,MAAAA,SAAsC,CAAA,CAAE;AACtE,UAAM,CAACL,iBAAiBiL,kBAAkB,IAAI5K,MAAAA,SAAS,IAAI;AAC3D,UAAM6K,mBAAmBxR,MAAAA,OAAO,KAAK;AACrC,UAAM,CAACuG,aAAakL,cAAc,IAAI9K,MAAAA,SAAwB,IAAI;AAGlE,UAAM,CAAC+K,kBAAkBC,mBAAmB,IAAIhL,MAAAA,SAA6B,MAAM;AAC/E,aAAOiL,aAAaC,QAAQ,wBAAwB,KAAK1P;AAAAA,IAC7D,CAAC;AACD,UAAM,CAAC2P,cAAcC,eAAe,IAAIpL,MAAAA,SAA6B,MAAM;AACvE,aAAOiL,aAAaC,QAAQ,0BAA0B,KAAK1P;AAAAA,IAC/D,CAAC;AAED,UAAM,CAAC6P,oBAAoBC,qBAAqB,IAAItL,MAAAA,SAAmB,CAAA,CAAE;AACzE,UAAM,CAACuL,gBAAgBC,iBAAiB,IAAIxL,MAAAA,SAAmB,CAAA,CAAE;AACjE,UAAM,CAACyL,iBAAiBC,kBAAkB,IAAI1L,MAAAA,SAAS,IAAI;AAC3D,UAAM,CAAC2L,uBAAuBC,wBAAwB,IAAI5L,MAAAA,SAAwB,IAAI;AAGtF,UAAM,CAAC6L,MAAMC,OAAO,IAAI9L,MAAAA,SAWpB,MAAM;AACN,YAAM+L,QAAQd,aAAaC,QAAQzD,gBAAgB;AACnD,UAAIsE,OAAO;AACP,cAAMC,SAASC,KAAKC,MAAMH,KAAK;AAC/B,eAAOC,OAAOtZ,IAAI,CAAC6K,SAAgC;AAAA,UAC/C,GAAGA;AAAAA,UACH0G,SAAS;AAAA,UACTkI,SAAS;AAAA,UACTnH,OAAO;AAAA,UACPoH,UAAU;AAAA,UACVC,iBAAiB;AAAA,QAAA,EACnB;AAAA,MACN;AACA,aAAO,CAAC;AAAA,QACJzR,IAAI;AAAA,QACJhK,MAAM;AAAA,QACNgS,KAAK;AAAA,QACL0J,UAAUrB,aAAaC,QAAQ,wBAAwB,KAAK1P;AAAAA,QAC5D+Q,MAAMtB,aAAaC,QAAQ,0BAA0B,KAAK1P;AAAAA,QAC1DyI,SAAS;AAAA,QACTkI,SAAS;AAAA,QACTnH,OAAO;AAAA,QACPoH,UAAU;AAAA,QACVC,iBAAiB;AAAA,MAAA,CACpB;AAAA,IACL,CAAC;AACD,UAAM,CAACG,aAAaC,cAAc,IAAIzM,MAAAA,SAAiB,MAAM;AACzD,aAAOiL,aAAaC,QAAQxD,sBAAsB,KAAK;AAAA,IAC3D,CAAC;AAED,UAAMzF,YAAY4J,KAAKvO,KAAKC,CAAAA,QAAKA,IAAE3C,OAAO4R,WAAW,KAAKX,KAAK,CAAC;AAGhE,UAAMa,kBAAkBC,kBAAY,CAACC,WAAsC;AACvEd,cAAQhL,UAAQA,KAAKpO,IAAI6K,CAAAA,QAAKA,IAAE3C,OAAO4R,cAAc;AAAA,QAAE,GAAGjP;AAAAA,QAClE,GAAGqP;AAAAA,MAAAA,IAAWrP,GAAC,CAAC;AAAA,IACZ,GAAG,CAACiP,WAAW,CAAC;AAEhB,UAAM5J,MAAMX,UAAUW;AACtB,UAAMqB,UAAUhC,UAAUgC;AAC1B,UAAMkI,UAAUlK,UAAUkK;AAC1B,UAAMnH,QAAQ/C,UAAU+C;AACxB,UAAMoH,WAAWnK,UAAUmK;AAE3B,UAAMS,SAASA,CAACC,WAAmBJ,gBAAgB;AAAA,MAAE9J,KAAKkK;AAAAA,IAAAA,CAAQ;AAKlE9a,UAAAA,UAAU,MAAM;AACZ,UAAI+a,UAAU;AACd,YAAMC,wBAAwB,YAAY;AACtC,YAAI,CAAC5C,eAAe6C,2BAA2B,CAAC7C,eAAe8C,qBAAqB;AAChFtB,mCAAyBrO,EAAE,8BAA8B,CAAC;AAC1DmO,6BAAmB,KAAK;AACxB;AAAA,QACJ;AAEA,YAAI;AACA,gBAAM,CAACyB,KAAKC,OAAOC,gBAAgB,IAAI,MAAMC,QAAQC,IAAI,CACrDnD,cAAc6C,wBAAAA,GACd7C,cAAc8C,uBACd,OAAO9C,eAAeoD,yBAAyB,aAAapD,cAAcoD,qBAAAA,IAAyBF,QAAQG,QAAQjS,MAAS,CAAC,CAChI;AAED,cAAIuR,SAAS;AACTzB,kCAAsB6B,GAAG;AACzB3B,8BAAkB4B,KAAK;AAEvB,kBAAMM,WAAWzC,aAAaC,QAAQ,wBAAwB,KAAK1P;AACnE,kBAAMmS,aAAa1C,aAAaC,QAAQ,0BAA0B,KAAK1P;AAEvE,kBAAMoS,qBAAqB3C,aAAaC,QAAQxD,sBAAsB,KAAK;AAC3E,gBAAImG,cAAqB,CAAA;AACzB,gBAAI;AACA,oBAAMC,YAAY7C,aAAaC,QAAQzD,gBAAgB;AACvD,kBAAIqG,UAAWD,eAAc5B,KAAKC,MAAM4B,SAAS;AAAA,YACrD,SAAS/M,GAAG;AAAA,YAAE;AACd,kBAAMgN,mBAAmBF,YAAYvQ,KAAKC,CAAAA,QAAKA,IAAE3C,OAAOgT,kBAAkB;AAE1E,gBAAII,WAAWD,kBAAkBzB,YAAYoB;AAC7C,gBAAIM,YAAY,CAACb,IAAIpU,SAASiV,QAAQ,EAAGA,YAAWxS;AACpD,gBAAI,CAACwS,YAAYb,IAAIvM,SAAS,GAAG;AAC7BoN,yBAAWX,oBAAoBF,IAAIpU,SAASsU,gBAAgB,IAAIA,mBAAmBF,IAAI,CAAC;AAAA,YAC5F;AAEA,gBAAIa,UAAU;AACVhD,kCAAoBgD,QAAQ;AAC5B/C,2BAAagD,QAAQ,0BAA0BD,QAAQ;AACvDlC,sBAAQhL,CAAAA,WAAQA,OAAKpO,IAAI6K,CAAAA,QAAKA,IAAE3C,OAAOgT,sBAAsB,CAACrQ,IAAE+O,WAAW;AAAA,gBAAE,GAAG/O;AAAAA,gBACxG+O,UAAU0B;AAAAA,cAAAA,IAAazQ,GAAC,CAAC;AAAA,YACL;AAEA,gBAAI2Q,aAAaH,kBAAkBxB,QAAQoB;AAC3C,gBAAIO,cAAc,CAACd,MAAMrU,SAASmV,UAAU,EAAGA,cAAa1S;AAC5D,gBAAI,CAAC0S,cAAcd,MAAMxM,SAAS,GAAG;AACjCsN,2BAAad,MAAMrU,SAAS,UAAU,IAAI,aAAaqU,MAAM,CAAC;AAAA,YAClE;AAEA,gBAAIc,YAAY;AACZ9C,8BAAgB8C,UAAU;AAC1BjD,2BAAagD,QAAQ,4BAA4BC,UAAU;AAC3DpC,sBAAQhL,CAAAA,WAAQA,OAAKpO,IAAI6K,CAAAA,QAAKA,IAAE3C,OAAOgT,sBAAsB,CAACrQ,IAAEgP,OAAO;AAAA,gBAAE,GAAGhP;AAAAA,gBACpGgP,MAAM2B;AAAAA,cAAAA,IAAe3Q,GAAC,CAAC;AAAA,YACH;AAAA,UACJ;AAAA,QACJ,SAAS4Q,KAAc;AACnBjI,kBAAQlB,MAAM,uCAAuCmJ,GAAG;AACxD,cAAIpB,SAAS;AACT,kBAAM3G,UAAU+H,eAAe9H,QAAQ8H,IAAI/H,UAAUE,OAAO6H,GAAG;AAC/DvC,qCAAyBrO,EAAE,0BAA0B;AAAA,cAAE6I;AAAAA,YAAAA,CAAS,CAAC;AAAA,UACrE;AAAA,QACJ,UAAA;AACI,cAAI2G,SAAS;AACTrB,+BAAmB,KAAK;AAAA,UAC5B;AAAA,QACJ;AAAA,MACJ;AAEAsB,4BAAAA;AAEA,aAAO,MAAM;AAAED,kBAAU;AAAA,MAAO;AAAA,IACpC,GAAG,CAAC3C,aAAa,CAAC;AAElB,UAAMgE,uBAAuBA,CAACC,IAAYC,UAAmB;AACzDtD,0BAAoBqD,EAAE;AACtBpD,mBAAagD,QAAQ,0BAA0BI,EAAE;AACjDvC,cAAQhL,YAAQA,OAAKpO,IAAI6K,SAAKA,IAAE3C,OAAiB4R,cAAe;AAAA,QAAE,GAAGjP;AAAAA,QAC7E+O,UAAU+B;AAAAA,MAAAA,IAAO9Q,GAAC,CAAC;AAEXsN,uBAAiBvR,UAAU;AAAA,IAC/B;AAEA,UAAMiV,mBAAmBA,CAAChC,MAAc+B,YAAmB;AACvDlD,sBAAgBmB,IAAI;AACpBtB,mBAAagD,QAAQ,4BAA4B1B,IAAI;AACrDT,cAAQhL,YAAQA,OAAKpO,IAAI6K,SAAKA,IAAE3C,OAAiB4R,cAAe;AAAA,QAAE,GAAGjP;AAAAA,QAC7EgP;AAAAA,MAAAA,IAAShP,GAAC,CAAC;AAAA,IACP;AAEA,UAAMiR,kBAAkB7B,kBAAY,CAAC8B,aAAqB;AACtDhC,qBAAegC,QAAQ;AACvB,YAAMC,SAAS7C,KAAKvO,KAAKC,CAAAA,QAAKA,IAAE3C,OAAO6T,QAAQ;AAC/C,UAAIC,QAAQ;AACR,YAAIA,OAAOpC,YAAYoC,OAAOpC,aAAavB,kBAAkB;AACzDC,8BAAoB0D,OAAOpC,QAAQ;AACnCrB,uBAAagD,QAAQ,0BAA0BS,OAAOpC,QAAQ;AAC9DzB,2BAAiBvR,UAAU;AAAA,QAC/B,WAAW,CAACoV,OAAOpC,YAAYvB,kBAAkB;AAC7Ce,kBAAQhL,YAAQA,OAAKpO,IAAI6K,CAAAA,QAAKA,IAAE3C,OAAO6T,WAAW;AAAA,YAAE,GAAGlR;AAAAA,YACvE+O,UAAUvB;AAAAA,UAAAA,IAAqBxN,GAAC,CAAC;AAAA,QACrB;AAEA,YAAImR,OAAOnC,QAAQmC,OAAOnC,SAASpB,cAAc;AAC7CC,0BAAgBsD,OAAOnC,IAAI;AAC3BtB,uBAAagD,QAAQ,4BAA4BS,OAAOnC,IAAI;AAAA,QAChE,WAAW,CAACmC,OAAOnC,QAAQpB,cAAc;AACrCW,kBAAQhL,YAAQA,OAAKpO,IAAI6K,CAAAA,SAAKA,KAAE3C,OAAO6T,WAAW;AAAA,YAAE,GAAGlR;AAAAA,YACvEgP,MAAMpB;AAAAA,UAAAA,IAAiB5N,IAAC,CAAC;AAAA,QACb;AAAA,MACJ;AAAA,IACJ,GAAG,CAACsO,MAAMd,kBAAkBI,YAAY,CAAC;AAEzC,UAAMwD,cAAchC,MAAAA,YAAY,YAAY;AACxC,UAAI,CAACvC,eAAewE,YAAY;AAC5B9D,uBAAevN,EAAE,8BAA8B,CAAC;AAChDqN,2BAAmB,KAAK;AACxB;AAAA,MACJ;AAEAA,yBAAmB,IAAI;AACvBE,qBAAe,IAAI;AACnB,UAAI;AACA,cAAMlI,QAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBZ,cAAMiM,SAAS,MAAMzE,cAAewE,WAAYhM,OAAK;AAAA,UAAE0J,UAAUvB;AAAAA,QAAAA,CAAkB;AAEnF,cAAM+D,iBAAiBA,CAACC,SAAoC;AACxD,gBAAMC,UAAUD,KAAKE,OAAO,CAACC,KAAkCC,SAAkC;AAC7F,kBAAM5J,SAAU4J,KAAK5J,UAAU4J,KAAKC,UAAUD,KAAKE,gBAAgB;AACnE,kBAAMhS,QAAS8R,KAAK9R,SAAS8R,KAAKG,SAASH,KAAKI;AAChD,kBAAM1S,SAAUsS,KAAKtS,UAAUsS,KAAKK,UAAUL,KAAKM;AACnD,kBAAM9N,WAAYwN,KAAKO,aAAaP,KAAKQ,aAAa;AACtD,kBAAMhK,eAAewJ,KAAKS,UAAU,QAAQT,KAAKS,UAAU;AAE3D,gBAAI,CAACV,IAAI3J,MAAM,EAAG2J,KAAI3J,MAAM,IAAI,CAAA;AAChC,gBAAIhB,YAAY2K,IAAI3J,MAAM,EAAEjI,KAAKC,CAAAA,SAAKA,KAAEC,cAAcH,KAAK;AAC3D,gBAAI,CAACkH,WAAW;AACZA,0BAAY;AAAA,gBAAE1D,YAAY0E;AAAAA,gBAClD/H,WAAWH;AAAAA,gBACXI,SAAS,CAAA;AAAA,cAAA;AACeyR,kBAAI3J,MAAM,EAAEvM,KAAKuL,SAAS;AAAA,YAC9B;AACAA,sBAAU9G,QAAQzE,KAAK;AAAA,cAAEpI,MAAMiM;AAAAA,cACnD8E;AAAAA,cACAgE;AAAAA,YAAAA,CAAc;AACM,mBAAOuJ;AAAAA,UACX,GAAG,CAAA,CAAE;AACLvE,qBAAWqE,OAAO;AAAA,QACtB;AAEA,YAAI,CAACH,UAAU,CAACgB,MAAMC,QAAQjB,MAAM,GAAG;AACnC,cAAIA,UAAU,OAAOA,WAAW,YAAY,UAAUA,UAAUgB,MAAMC,QAASjB,OAA+CkB,IAAI,GAAG;AACjIjB,2BAAgBD,OAA+CkB,IAAI;AAAA,UACvE,OAAO;AACHjF,2BAAevN,EAAE,gCAAgC;AAAA,cAAE6F,MAAM,OAAOyL;AAAAA,YAAAA,CAAQ,CAAC;AACzElE,uBAAW,CAAA,CAAE;AAAA,UACjB;AAAA,QACJ,WAAWkE,OAAOjO,WAAW,GAAG;AAC5B+J,qBAAW,CAAA,CAAE;AACbG,yBAAevN,EAAE,sBAAsB,CAAC;AAAA,QAC5C,OAAO;AACHuR,yBAAeD,MAAM;AAAA,QACzB;AAEAhE,yBAAiBvR,UAAU;AAAA,MAC/B,SAASyH,KAAY;AACjBmF,gBAAQlB,MAAM,uBAAuBjE,GAAC;AACtC,cAAMqF,YAAUrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AACzD+J,uBAAevN,EAAE,iCAAiC;AAAA,UAAE6I,SAAAA;AAAAA,QAAAA,CAAS,CAAC;AAAA,MAClE,UAAA;AACIwE,2BAAmB,KAAK;AAAA,MAC5B;AAAA,IACJ,GAAG,CAACR,eAAeW,gBAAgB,CAAC;AAEpC/Y,UAAAA,UAAU,MAAM;AAEZ,UAAI,CAACyZ,mBAAmB,CAACZ,iBAAiBvR,SAAS;AAC/CqV,oBAAAA;AAAAA,MACJ;AAAA,IACJ,GAAG,CAACA,aAAalD,iBAAiBV,gBAAgB,CAAC;AAEnD,UAAM,CAACiF,WAAWC,YAAY,IAAIjQ,MAAAA,SAAS,IAAI;AAC/C,UAAM,CAACkQ,qBAAqBC,sBAAsB,IAAInQ,MAAAA,SAAS,KAAK;AACpE,UAAM,CAACoQ,eAAeC,gBAAgB,IAAIrQ,MAAAA,SAA8B,IAAI;AAG5E,UAAM,CAACsQ,aAAaC,cAAc,IAAIvQ,MAAAA,SAAgF,IAAI;AAE1H,UAAMwQ,oBAAoB7D,MAAAA,YAAY,CAAC8D,UAAkB1L,WAAmB2L,cAAuBC,YAAqC;AACpI,UAAI,CAAC1O,UAAUoK,iBAAiB;AAC5B9B,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAAS7I,EAAE,sCAAsC;AAAA,QAAA,CACpD;AACD;AAAA,MACJ;AAEA,YAAMsT,aAAa/L,oBAAoB7C,UAAUoK,iBAAiBtH,WAAW9K,OAAO;AAEpF,UAAI4W,WAAW7L,SAAS,CAAC6L,WAAWhL,eAAegL,WAAWhL,YAAYjF,WAAW,GAAG;AACpF2J,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAASyK,WAAW7L,SAASzH,EAAE,iCAAiC;AAAA,QAAA,CACnE;AACD;AAAA,MACJ;AAGA,YAAMuT,aAAaD,WAAWhL,YAAYtD,OACtCwO,QAAMJ,QAAQI,GAAG9K,YAAY,MAAMzK,UAAamV,QAAQI,GAAG9K,YAAY,MAAM,IACjF;AACA,UAAI6K,WAAWlQ,SAAS,GAAG;AACvB2J,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAAS7I,EAAE,yBAAyB;AAAA,YAAEE,SAASqT,WAAWpe,IAAIqe,CAAAA,SAAM,IAAIA,KAAG9K,YAAY,GAAG,EAAExE,KAAK,IAAI;AAAA,UAAA,CAAG;AAAA,QAAA,CAC3G;AACD;AAAA,MACJ;AAEA8O,qBAAe;AAAA,QAAEE;AAAAA,QACzB1L;AAAAA,QACA2L;AAAAA,MAAAA,CAAc;AAAA,IACV,GAAG,CAACzO,UAAUoK,iBAAiBpS,SAASsQ,kBAAkB,CAAC;AAE3D,UAAMyG,iBAAiBrE,MAAAA,YAAY,OAAOsE,UAAyBN,WAAkC5L,aAAmB0L,eAAqB;AACzI,UAAI,CAACH,eAAe,CAACrO,UAAUoK,gBAAiB;AAEhDkE,qBAAe,IAAI;AAEnB,UAAIU,aAAaX,YAAYI,aAAc;AAE3C,YAAMG,eAAa/L,oBAAoB7C,UAAUoK,iBAAiBtH,aAAW9K,OAAO;AACpF,UAAI4W,aAAW7L,SAAS,CAAC6L,aAAWrT,aAAa,CAACqT,aAAWhL,eAAegL,aAAWhL,YAAYjF,WAAW,GAAG;AAC7G2J,2BAAmBqG,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC5CgD,SAASyK,aAAW7L,SAAS;AAAA,QAAA,CAAsB;AACvC;AAAA,MACJ;AAEA,YAAMxH,YAAYqT,aAAWrT;AAE7B,YAAM0T,cAAcA,CAAC3H,QAAiB;AAClC,YAAIA,QAAQ,QAAQA,QAAQ/N,OAAW,QAAO;AAC9C,YAAI,OAAO+N,QAAQ,SAAU,QAAOA;AACpC,YAAI,OAAOA,QAAQ,UAAW,QAAOA,MAAM,SAAS;AACpD,eAAO,IAAIjD,OAAOiD,GAAG,EAAE4H,QAAQ,MAAM,IAAI,CAAC;AAAA,MAC9C;AAIA,YAAMC,sBAAsBA,CAACC,iBAAiC;AAC1D,YAAI;AACA,gBAAMnO,MAAMC,eAAAA,WAAWlB,UAAUoK,eAAgB;AACjD,cAAInJ,IAAIE,SAAS,YAAYF,IAAIzF,SAAS;AACtC,uBAAWE,OAAOuF,IAAIzF,SAAS;AAC3B,kBAAIE,IAAIqG,MAAMZ,SAAS,OAAO;AAC1B,sBAAMI,QAAQ7F,IAAI6F,OAAO5S;AACzB,sBAAM0gB,UAAU3T,IAAIqG,KAAKpT;AACzB,oBAAI4S,UAAU6N,gBAAiB,CAAC7N,SAAS8N,YAAYD,cAAe;AAChE,yBAAOC;AAAAA,gBACX;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,QAAQ;AAAA,QAAE;AACV,eAAOD;AAAAA,MACX;AAEA,YAAME,eAAeH,oBAAoBrM,WAAS;AAGlD,YAAMyM,kBAAkBX,aAAWhL,YAAYnT,IAC3Cqe,CAAAA,SAAM,IAAIA,KAAG/K,QAAQ,OAAOkL,YAAYP,UAAQI,KAAG9K,YAAY,CAAC,CAAC,EACrE,EAAExE,KAAK,OAAO;AAEd,YAAMgQ,YAAY,WAAWjU,SAAS,UAAU+T,YAAY,OAAOL,YAAYD,QAAQ,CAAC,UAAUO,eAAe;AAEjH,UAAI;AACA,YAAIpH,eAAewE,YAAY;AAC3B,gBAAMxE,cAAcwE,WAAW6C,WAAW;AAAA,YAAEnF,UAAUvB;AAAAA,YACtEwB,MAAMpB;AAAAA,UAAAA,CAAc;AAEJ,gBAAMuG,eAAa,CAAC,GAAIzP,UAAUgC,WAAW,CAAA,CAAG;AAChD,cAAIyN,aAAWjB,UAAQ,GAAG;AACtBiB,yBAAWjB,UAAQ,IAAI;AAAA,cAAE,GAAGiB,aAAWjB,UAAQ;AAAA,cACnE,CAAC1L,WAAS,GAAGkM;AAAAA,YAAAA;AAAAA,UACG;AACAvE,0BAAgB;AAAA,YAAEzI,SAASyN;AAAAA,UAAAA,CAAY;AAEvCnH,6BAAmBqG,KAAK;AAAA,YACpBxN,MAAM;AAAA,YACNgD,SAAS7I,EAAE,wBAAwB;AAAA,UAAA,CACtC;AAAA,QACL;AAAA,MACJ,SAASwD,KAAY;AACjBwJ,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAAS7I,EAAE,4BAA4B;AAAA,YAAE6I,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,UAAA,CAAG;AAAA,QAAA,CACjG;AAAA,MACL;AAAA,IACJ,GAAG,CAACuP,aAAarW,SAASgI,UAAUoK,iBAAiBpK,UAAUgC,SAASmG,eAAesC,iBAAiBnC,oBAAoBQ,kBAAkBI,YAAY,CAAC;AAE3J,UAAM,CAACwG,cAAcC,eAAe,IAAI5R,MAAAA,SAAiD,MAAM;AAC3F,YAAM+L,UAAQd,aAAaC,QAAQ,0BAA0B;AAC7D,aAAOa,UAAQE,KAAKC,MAAMH,OAAK,IAAI,CAAA;AAAA,IACvC,CAAC;AACD,UAAM,CAACjK,UAAU+P,WAAW,IAAI7R,MAAAA,SAAoB,CAAA,CAAE;AACtD,UAAM,CAAC+B,SAAS+P,UAAU,IAAI9R,MAAAA,SAAmB,CAAA,CAAE;AACnD,UAAM,CAAC+R,kBAAkBC,mBAAmB,IAAIhS,MAAAA,SAAS,KAAK;AAC9D,UAAM,CAACiS,gBAAgBC,iBAAiB,IAAIlS,MAAAA,SAAS,EAAE;AAGvDhO,UAAAA,UAAU,MAAM;AACZ,YAAMmgB,gBAAgBlH,aAAaC,QAAQ,qBAAqB;AAChE,UAAIiH,cAAeN,aAAY5F,KAAKC,MAAMiG,aAAa,CAAC;AAExD,YAAMC,eAAenH,aAAaC,QAAQ,oBAAoB;AAC9D,UAAIkH,aAAcN,YAAW7F,KAAKC,MAAMkG,YAAY,CAAC;AAAA,IACzD,GAAG,CAAA,CAAE;AAGLpgB,UAAAA,UAAU,MAAM;AACZ,YAAMqgB,gBAAgBxG,KAAKnZ,IAAI6K,CAAAA,UAAM;AAAA,QACjC3C,IAAI2C,KAAE3C;AAAAA,QACNhK,MAAM2M,KAAE3M;AAAAA,QACRgS,KAAKrF,KAAEqF;AAAAA,QACP0J,UAAU/O,KAAE+O;AAAAA,QACZC,MAAMhP,KAAEgP;AAAAA,MAAAA,EACV;AACFtB,mBAAagD,QAAQxG,kBAAkBwE,KAAKqG,UAAUD,aAAa,CAAC;AAAA,IACxE,GAAG,CAACxG,IAAI,CAAC;AAET7Z,UAAAA,UAAU,MAAM;AACZiZ,mBAAagD,QAAQvG,wBAAwB8E,WAAW;AAAA,IAC5D,GAAG,CAACA,WAAW,CAAC;AAEhB,UAAM+F,eAAeA,CAACC,gBAA2B;AAC7CX,kBAAYW,WAAW;AACvBvH,mBAAagD,QAAQ,uBAAuBhC,KAAKqG,UAAUE,WAAW,CAAC;AAAA,IAC3E;AAEA,UAAMC,cAAcA,CAACC,eAAyB;AAC1CZ,iBAAWY,UAAU;AACrBzH,mBAAagD,QAAQ,sBAAsBhC,KAAKqG,UAAUI,WAAWC,MAAM,GAAG,CAAC,CAAC;AAAA,IACpF;AAEA,UAAMC,sBAAsBA,CAAChY,OAAe;AACxC2X,mBAAazQ,SAASS,OAAOlO,CAAAA,MAAKA,EAAEuG,OAAOA,EAAE,CAAC;AAAA,IAClD;AAEA,UAAMiY,eAAeA,MAAM;AACvB,YAAMC,QAAQ9J,KAAK+J,SAASC,SAAS,EAAE,EAAEC,UAAU,GAAG,CAAC;AAGvD,UAAIC,YAAY;AAChBrH,WAAKnO,QAAQyV,CAAAA,QAAO;AAChB,cAAMrW,QAAQqW,IAAIviB,KAAKkM,MAAM,eAAe;AAC5C,YAAIA,OAAO;AACP,gBAAMsW,MAAMC,SAASvW,MAAM,CAAC,GAAG,EAAE;AACjC,cAAIsW,MAAMF,UAAWA,aAAYE;AAAAA,QACrC;AAAA,MACJ,CAAC;AACD,YAAMxiB,OAAO,SAASsiB,YAAY,CAAC;AACnCpH,cAAQhL,CAAAA,WAAQ,CAAC,GAAGA,QAAM;AAAA,QACtBlG,IAAIkY;AAAAA,QACJliB;AAAAA,QACAgS,KAAK;AAAA,QACL0J,UAAUvB;AAAAA,QACVwB,MAAMpB;AAAAA,QACNlH,SAAS;AAAA,QACTkI,SAAS;AAAA,QACTnH,OAAO;AAAA,QACPoH,UAAU;AAAA,QACVC,iBAAiB;AAAA,MAAA,CACpB,CAAC;AACFI,qBAAeqG,KAAK;AAAA,IACxB;AAEA,UAAMQ,iBAAiBA,CAAC1Y,MAAYmG,QAAwB;AACxDA,UAAEC,gBAAAA;AACF,UAAI6K,KAAKjL,WAAW,EAAG;AAEvB,YAAM2S,WAAW1H,KAAK2H,UAAUjW,CAAAA,SAAKA,KAAE3C,OAAOA,IAAE;AAChD,YAAM6Y,UAAU5H,KAAKtJ,OAAOhF,CAAAA,SAAKA,KAAE3C,OAAOA,IAAE;AAC5CkR,cAAQ2H,OAAO;AAEf,UAAIjH,gBAAgB5R,MAAI;AAEpB,cAAM8Y,YAAY1K,KAAKK,IAAIkK,UAAUE,QAAQ7S,SAAS,CAAC;AACvD,YAAI6S,QAAQC,SAAS,GAAG;AACpBjH,yBAAegH,QAAQC,SAAS,EAAE9Y,EAAE;AAAA,QACxC;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM+Y,qBAAqBhH,MAAAA,YAAY,CAAC;AAAA,MAAEnY;AAAAA,MAAKyT;AAAAA,IAAAA,MAA4C;AACvF2J,sBAAgB9Q,CAAAA,WAAQ;AACpB,cAAM8S,YAAY;AAAA,UACd,GAAG9S;AAAAA,UACH,CAACmB,UAAUW,GAAG,GAAG;AAAA,YACb,GAAI9B,OAAKmB,UAAUW,GAAG,KAAK,CAAA;AAAA,YAC3B,CAACpO,GAAG,GAAGyT;AAAAA,UAAAA;AAAAA,QACX;AAEJgD,qBAAagD,QAAQ,4BAA4BhC,KAAKqG,UAAUsB,SAAS,CAAC;AAC1E,eAAOA;AAAAA,MACX,CAAC;AAAA,IACL,GAAG,CAAC3R,UAAUW,GAAG,CAAC;AAElB,UAAMiR,iBAAiBA,MAAM;AAEzB,YAAMC,YAAY7R,UAAUW,IACvBuO,QAAQ,QAAQ,GAAG,EACnBA,QAAQ,YAAY,IAAI,EACxBA,QAAQ,YAAY,KAAK,EACzBvV,KAAAA;AACLiR,aAAOiH,SAAS;AAAA,IACpB;AAEA,UAAMC,gBAAgB,YAAY;AAC9B,YAAMC,aAAa,kCAAkC/R,UAAUW,GAAG;AAClE8J,sBAAgB;AAAA,QAAEP,SAAS;AAAA,QACnCnH,OAAO;AAAA,QACPf,SAAS;AAAA,MAAA,CAAM;AACP,YAAMgQ,QAAQC,YAAYC,IAAAA;AAC1B,UAAI;AACA,YAAI/J,eAAewE,YAAY;AAC3B,gBAAMC,WAAS,MAAMzE,cAAcwE,WAAWoF,YAAY;AAAA,YAAE1H,UAAUvB;AAAAA,YACtFwB,MAAMpB;AAAAA,UAAAA,CAAc;AACJuB,0BAAgB;AAAA,YAAEzI,SAAS4K;AAAAA,YAC3CzC,UAAUpD,KAAKoL,MAAMF,YAAYC,IAAAA,IAAQF,KAAK;AAAA,UAAA,CAAG;AAAA,QACrC;AAAA,MACJ,SAASlT,KAAY;AACjB,cAAMqF,YAAUrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AACzD2L,wBAAgB;AAAA,UAAE1H,OAAOoB,aAAW7I,EAAE,6BAA6B;AAAA,QAAA,CAAG;AAAA,MAC1E,UAAA;AACImP,wBAAgB;AAAA,UAAEP,SAAS;AAAA,QAAA,CAAO;AAAA,MACtC;AAAA,IACJ;AAEA,UAAMkI,aAAa1H,kBAAY,OAAO2H,gBAAyB;AAC3D,UAAIC,WAAWD,eAAerS,UAAUW;AACxC,YAAM4R,WAAWD,SAASE,YAAAA;AAE1B,YAAMC,cAAc,kCAAkC9V,KAAK2V,QAAQ;AACnE,YAAMI,YAAY,eAAe/V,KAAK2V,QAAQ;AAE9C,UAAIvE,aAAawE,SAASzb,SAAS,QAAQ,KAAK,CAACyb,SAASzb,SAAS,OAAO,KAAK,CAAC2b,eAAe,CAACC,WAAW;AAEvGJ,mBAAWA,SAAS3Y,KAAAA,EAAOuV,QAAQ,MAAM,EAAE;AAC3CoD,mBAAW,GAAGA,QAAQ;AAAA,MAC1B;AAEA7H,sBAAgB;AAAA,QAAEP,SAAS;AAAA,QACnCnH,OAAO;AAAA,QACPf,SAAS;AAAA,MAAA,CAAM;AACP,YAAMgQ,UAAQC,YAAYC,IAAAA;AAE1B,UAAI;AACA,YAAI/J,eAAewE,YAAY;AAC3B,gBAAMC,WAAS,MAAMzE,cAAcwE,WAAW2F,UAAU;AAAA,YAAEjI,UAAUvB;AAAAA,YACpFwB,MAAMpB;AAAAA,UAAAA,CAAc;AACJuB,0BAAgB;AAAA,YACZzI,SAAS4K;AAAAA,YACTzC,UAAUpD,KAAKoL,MAAMF,YAAYC,IAAAA,IAAQF,OAAK;AAAA,YAC9C5H,iBAAiBkI;AAAAA,UAAAA,CACpB;AAED,cAAIxS,QAAQA,QAAQnB,SAAS,CAAC,MAAMqB,UAAUW,KAAK;AAC/C6P,wBAAY,CAAC,GAAG1Q,SAASE,UAAUW,GAAG,CAAC;AAAA,UAC3C;AAAA,QACJ,OAAO;AACH8J,0BAAgB;AAAA,YAAE1H,OAAOzH,EAAE,oCAAoC;AAAA,UAAA,CAAG;AAAA,QACtE;AAAA,MACJ,SAASwD,KAAY;AACjB,cAAMqF,YAAUrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AACzD2L,wBAAgB;AAAA,UAAE1H,OAAOoB,aAAW7I,EAAE,4BAA4B;AAAA,QAAA,CAAG;AAAA,MACzE,UAAA;AACImP,wBAAgB;AAAA,UAAEP,SAAS;AAAA,QAAA,CAAO;AAAA,MACtC;AAAA,IACJ,GAAG,CAAClK,UAAUW,KAAKoN,WAAW5F,eAAerI,SAAS2K,eAAe,CAAC;AAEtE,UAAMkI,YAAYjI,kBAAY,OAAOpR,iBAA0B;AAC3D,YAAMsZ,YAAYtZ,gBAAgB0G,UAAUW;AAC5C,UAAI,CAACiS,UAAUjZ,OAAQ;AAGvB,YAAMkZ,sBAAsB,CAAC,UAAU,QAAQ,YAAY,QAAQ;AACnE,YAAMC,iBAAiBD,oBAAoBrP,KAAK/Q,CAAAA,OAAMmgB,UAAUJ,YAAAA,EAAc1b,SAASrE,EAAE,CAAC;AAC1F,YAAMsgB,WAAWH,UAAUJ,YAAAA,EAAc1b,SAAS,OAAO;AAEzD,UAAIgc,mBAAmB,CAACC,YAAYH,UAAUJ,cAAc1b,SAAS,MAAM,KAAK8b,UAAUJ,YAAAA,EAAc1b,SAAS,UAAU,IAAI;AAC3HsX,yBAAiB,MAAM,MAAMgE,WAAW9Y,YAAY,CAAC;AACrD4U,+BAAuB,IAAI;AAC3B;AAAA,MACJ;AAEAkE,iBAAW9Y,YAAY;AAAA,IAC3B,GAAG,CAAC0G,UAAUW,KAAKyR,UAAU,CAAC;AAG9BriB,UAAAA,UAAU,MAAM;AACZ,YAAMijB,gBAAgBA,CAAClU,QAAqB;AACxC,aAAKA,IAAEmU,WAAWnU,IAAEoU,YAAYpU,IAAEvM,QAAQ,SAAS;AAE/C,gBAAM4gB,gBAAgBlL,SAASkL;AAC/B,gBAAMC,UAAUD,eAAeE,YAAY,WAAWF,eAAeE,YAAY;AAKjF,gBAAMC,WAAWH,eAAetb,WAAWf,SAAS,0BAA0B;AAE9E,cAAI,CAACwc,YAAY,CAACF,SAAS;AACvBtU,gBAAEgJ,eAAAA;AACF6K,sBAAAA;AAAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AACApM,aAAOI,iBAAiB,WAAWqM,aAAa;AAChD,aAAO,MAAMzM,OAAOK,oBAAoB,WAAWoM,aAAa;AAAA,IACpE,GAAG,CAACL,SAAS,CAAC;AAEd,UAAMY,oBAAoBA,MAAM;AAC5B,UAAI,CAACvD,eAAerW,KAAAA,KAAU,CAACgH,IAAIhH,OAAQ;AAE3C,YAAM6Z,aAAsB;AAAA,QACxB7a,IAAIoO,KAAK+J,SAASC,SAAS,EAAE,EAAEC,UAAU,GAAG,CAAC;AAAA,QAC7CriB,MAAMqhB;AAAAA,QACNrP;AAAAA,QACA8S,WAAWC,KAAKxB,IAAAA;AAAAA,MAAI;AAGxB5B,mBAAa,CAAC,GAAGzQ,UAAU2T,UAAU,CAAC;AACtCvD,wBAAkB,EAAE;AACpBF,0BAAoB,KAAK;AACzBzH,yBAAmBqG,KAAK;AAAA,QACpBxN,MAAM;AAAA,QACNgD,SAAS7I,EAAE,4BAA4B;AAAA,UAAE3M,MAAMqhB;AAAAA,QAAAA,CAAgB;AAAA,MAAA,CAClE;AAAA,IACL;AAEA,UAAM2D,kBAAkBA,MAAM;AAC1B,UAAI,CAAC3R,WAAWA,QAAQrD,WAAW,EAAG;AAEtC,YAAMiV,UAAU1Y,OAAOwD,KAAKsD,QAAQ,CAAC,CAAC,EAAExC,KAAK,GAAG;AAChD,YAAMsO,OAAO9L,QAAQvR,IAAIojB,CAAAA,QACrB3Y,OAAOmH,OAAOwR,GAAG,EAAEpjB,IAAI6W,CAAAA,UAAO;AAC1B,cAAM1U,MAAMyR,OAAOiD,KAAG;AACtB,eAAO1U,IAAIkE,SAAS,GAAG,IAAI,IAAIlE,GAAG,MAAMA;AAAAA,MAC5C,CAAC,EAAE4M,KAAK,GAAG,CACf;AACA,YAAMsU,MAAM,CAACF,SAAS,GAAG9F,IAAI,EAAEtO,KAAK,IAAI;AACxC,YAAMuU,OAAO,IAAIC,KAAK,CAACF,GAAG,GAAG;AAAA,QAAE3S,MAAM;AAAA,MAAA,CAAY;AACjD,YAAM8S,MAAM1N,OAAO2N,IAAIC,gBAAgBJ,IAAI;AAC3C,YAAMK,IAAInM,SAASoM,cAAc,GAAG;AACpCD,QAAEE,OAAOL;AACTG,QAAEG,WAAW,kBAAiB,oBAAIb,KAAAA,GAAOc,cAAc9D,MAAM,GAAG,EAAE,CAAC;AACnE0D,QAAEK,MAAAA;AACFlO,aAAO2N,IAAIQ,gBAAgBT,GAAG;AAAA,IAClC;AAEA,UAAMU,mBAAmBA,MAAM;AAC3B,UAAI,CAAC3S,WAAWA,QAAQrD,WAAW,EAAG;AAEtC,YAAMiW,OAAO5K,KAAKqG,UAAUrO,SAAS,MAAM,CAAC;AAC5C,YAAM+R,SAAO,IAAIC,KAAK,CAACY,IAAI,GAAG;AAAA,QAAEzT,MAAM;AAAA,MAAA,CAAoB;AAC1D,YAAM8S,QAAM1N,OAAO2N,IAAIC,gBAAgBJ,MAAI;AAC3C,YAAMK,MAAInM,SAASoM,cAAc,GAAG;AACpCD,UAAEE,OAAOL;AACTG,UAAEG,WAAW,kBAAiB,oBAAIb,KAAAA,GAAOc,cAAc9D,MAAM,GAAG,EAAE,CAAC;AACnE0D,UAAEK,MAAAA;AACFlO,aAAO2N,IAAIQ,gBAAgBT,KAAG;AAAA,IAClC;AAEA,UAAMY,uBAAuBA,MAAM;AAC/B,UAAI,CAAC7S,WAAWA,QAAQrD,WAAW,EAAG;AAEtC,YAAMiV,YAAU1Y,OAAOwD,KAAKsD,QAAQ,CAAC,CAAC;AACtC,YAAM8S,YAAY,KAAKlB,UAAQpU,KAAK,KAAK,CAAC;AAC1C,YAAMuV,aAAa,KAAKnB,UAAQnjB,IAAI,MAAM,KAAK,EAAE+O,KAAK,KAAK,CAAC;AAC5D,YAAMwV,WAAWhT,QAAQvR,IAAIojB,WACzB,KAAKD,UAAQnjB,IAAIwkB,CAAAA,WAAU;AACvB,cAAM3N,QAAMuM,MAAIoB,MAAM;AACtB,YAAI3N,UAAQ,KAAM,QAAO;AACzB,YAAIA,UAAQ/N,OAAW,QAAO;AAE9B,eAAO8K,OAAOiD,KAAG,EAAE4H,QAAQ,OAAO,KAAK,EAAEA,QAAQ,OAAO,GAAG;AAAA,MAC/D,CAAC,EAAE1P,KAAK,KAAK,CAAC,IAClB;AAEA,YAAM0V,WAAW,CAACJ,WAAWC,YAAY,GAAGC,QAAQ,EAAExV,KAAK,IAAI;AAC/DR,gBAAUC,UAAUC,UAAUgW,QAAQ,EAAE5f,KAAK,MAAM;AAC/CgT,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAAS7I,EAAE,4BAA4B;AAAA,QAAA,CAC1C;AAAA,MACL,CAAC,EAAE6Z,MAAM,MAAM;AACX7M,2BAAmBqG,KAAK;AAAA,UACpBxN,MAAM;AAAA,UACNgD,SAAS7I,EAAE,iCAAiC;AAAA,QAAA,CAC/C;AAAA,MACL,CAAC;AAAA,IACL;AAEA,UAAM8Z,gBAAgBA,MAAM;AACxB,UAAIlL,SAAS;AACT,8CACK,OAAA,EAAI,WAAU,8CACX,UAAA3Z,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,UAAAI,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,SAAA,CAAQ;AAAA,UAC/BzN,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,iGAAiG0K,UAAAA,EAAE,4BAA4B,EAAA,CAAE;AAAA,QAAA,EAAA,CAC3K,EAAA,CACJ;AAAA,MAER;AAEA,UAAIyH,OAAO;AACP,eACIpS,2BAAAA,IAAC,OAAA,EAAI,WAAU,gEACX,UAAAA,2BAAAA,IAAC0N,KAAAA,WAAA,EAAU,OAAO/C,EAAE,wBAAwB,GAAG,MAAA,CAAa,EAAA,CAChE;AAAA,MAER;AAEA,UAAI,CAAC0G,SAAS;AACV,8CACK,OAAA,EAAI,WAAU,8FACX,UAAAzR,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,SAAI,WAAU,qCAAoC,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,kJAAgJ,EAAA,CAAE;AAAA,yCAC/TC,GAAAA,YAAA,EAAW,SAAQ,SAAS0K,UAAAA,EAAE,kCAAkC,EAAA,CAAE;AAAA,QAAA,EAAA,CACvE,EAAA,CACJ;AAAA,MAER;AAGA,UAAI0G,QAAQrD,WAAW,KAAKqD,QAAQ,CAAC,EAAE,YAAY,KAAK4L,MAAMC,QAAQ7L,QAAQ,CAAC,EAAE,YAAY,CAAC,GAAG;AAC7F,YAAI;AACA,gBAAMuC,OAAOvC,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC,EAAEqT;AACzC,cAAI9Q,MAAM;AACN,mBACIhU,2BAAAA,KAAC,OAAA,EAAI,WAAU,2FACX,UAAA;AAAA,cAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,+DAA+D0K,UAAAA,EAAE,kCAAkC,GAAE;AAAA,6CAC5I,OAAA,EAAI,WAAU,SACX,UAAA3K,2BAAAA,IAAC,mBAAA,EAAkB,MAAW,EAAA,CAClC;AAAA,YAAA,GACJ;AAAA,UAER;AAAA,QACJ,SAASmO,KAAG;AACRmF,kBAAQC,KAAK,wCAAwCpF,GAAC;AAAA,QAC1D;AAAA,MACJ;AAEA,UAAIkD,QAAQrD,WAAW,GAAG;AACtB,eACIpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,2DACX,UAAA;AAAA,UAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,6HAA6H0K,UAAAA,EAAE,oBAAoB,GAAE;AAAA,UAC3L3K,+BAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,mDAAmD0K,UAAAA,EAAE,uBAAuB,EAAA,CAAE;AAAA,QAAA,GAC1H;AAAA,MAER;AAEA,YAAMga,cAAc5F,aAAa1P,UAAUW,GAAG,KAAK,CAAA;AACnD,YAAM4U,mBAAmBra,OAAOwD,KAAKsD,QAAQ,CAAC,CAAC;AAG/C,YAAMwT,sBAAiD,MAAM;AACzD,YAAI,CAACxV,UAAUoK,mBAAmB,CAAC5B,mBAAmB5G,oBAAoB,CAAA;AAC1E,YAAI;AACA,iBAAOD,wBAAwB3B,UAAUoK,iBAAiBpS,SAASwQ,mBAAmB5G,aAAa2T,gBAAgB;AAAA,QACvH,QAAQ;AACJ,iBAAO,CAAA;AAAA,QACX;AAAA,MACJ,GAAA;AAGA,YAAME,wBAAwBD,mBAAmBlV,OAAOoV,CAAAA,OAAMA,GAAGnT,YAAYgT,iBAAiBze,SAAS4e,GAAGnT,QAAQ,CAAC;AAGnH,YAAMoT,sBAAsBA,CAACjH,cAA2G;AACpI,YAAI,CAACA,UAAS,QAAO,CAAA;AACrB,eAAO+G,sBACFnV,OAAOoV,CAAAA,SAAMhH,UAAQgH,KAAGnT,QAAS,KAAK,IAAI,EAC1C9R,IAAIilB,CAAAA,UAAO;AAAA,UACR9S,YAAY8S;AAAAA,UACZE,UAAUlH,UAAQgH,KAAGnT,QAAS;AAAA,QAAA,EAChC;AAAA,MACV;AAGA,YAAMsT,cAAoCN,iBAAiB9kB,IAAI8B,CAAAA,WAAQ;AAAA,QACnEA,KAAAA;AAAAA,QACAF,OAAOE;AAAAA,QACPyT,OAAOsP,YAAY/iB,KAAG,KAAK;AAAA,QAC3BujB,UAAU;AAAA,QACVC,WAAW;AAAA,MAAA,EACb;AAEF,YAAMva,UAAgCia,sBAAsB9W,SAAS,IAC/D,CAAC;AAAA,QAAEpM,KAAK;AAAA,QACtBF,OAAO;AAAA,QACP2T,OAAO;AAAA,QACP8P,UAAU;AAAA,QACVC,WAAW;AAAA,MAAA,GAAS,GAAGF,WAAW,IACpBA;AAEN,aACItlB,2BAAAA,KAAC,OAAA,EAAI,WAAU,mDAEVklB,UAAAA;AAAAA,QAAAA,sBAAsB9W,SAAS,KAC5BpO,2BAAAA,KAAC,OAAA,EAAI,WAAWU,OAAI,2FAA2FqN,GAAAA,kBAAkB,GAC7H,UAAA;AAAA,UAAA3N,+BAACqlB,GAAAA,SAAA,EAAQ,OAAO1a,EAAE,oCAAoC,GAClD,UAAA3K,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,6HAA6H0K,UAAAA,EAAE,gBAAgB,GAAE,GAC7L;AAAA,UACA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,0DACV8kB,UAAAA,sBAAsBhlB,IAAIilB,CAAAA,SACvB/kB,2BAAAA,IAACqlB,GAAAA,SAAA,EAA2B,OAAO,UAAUN,KAAGna,SAAS,OAAOma,KAAG9S,WAAWjU,IAAI,SAAS+mB,KAAGnT,QAAQ,KAClG,UAAAhS,2BAAAA,KAAC,QAAA,EAAK,WAAU,oOACX,UAAA;AAAA,YAAA,OAAOmlB,KAAG9S,WAAW/T,SAAS,YAC3B8B,2BAAAA,IAACO,KAAAA,eAAY,kBAAkBwkB,KAAG9S,YAAY,WAAU,cAAA,CAAa;AAAA,YAExE8S,KAAG9S,WAAWjU;AAAAA,UAAAA,EAAAA,CACnB,EAAA,GANU+mB,KAAGna,SAOjB,CACH,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,uCAEH,OAAA,EAAI,WAAU,6CACX,UAAA5K,+BAACslB,GAAAA,cAAA,EACG,MAAMjU,SACN,SACA,WAAW,IACX,cAAc,IACd,WAAWqM,aACX,mBAAmBqD,oBACnB,cAAc,CAAC;AAAA,UAAEhD,SAAAA;AAAAA,UAAS9T,QAAAA;AAAAA,UAAQ4T,UAAAA;AAAAA,QAAAA,MAAe;AAE7C,cAAI5T,SAAOrI,QAAQ,kBAAkB;AACjC,kBAAM2jB,aAAaP,oBAAoBjH,SAAO;AAC9C,gBAAIwH,WAAWvX,WAAW,GAAG;AACzB,qBAAOhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,gBAAA,CAAe;AAAA,YACzC;AACA,gBAAIulB,WAAWvX,WAAW,GAAG;AACzB,oBAAMwX,KAAKD,WAAW,CAAC;AACvB,qBACIvlB,+BAAC,SAAI,WAAU,2CACX,yCAACqlB,YAAA,EAAQ,OAAO1a,EAAE,0BAA0B;AAAA,gBAAE3M,MAAMwnB,GAAGvT,WAAWA,WAAWjU;AAAAA,gBACzHgK,IAAI0L,OAAO8R,GAAGP,QAAQ;AAAA,cAAA,CAAG,GACuB,UAAAjlB,+BAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,WAAU,+GACV,SAAUO,CAAAA,QAAM;AACZA,oBAAEC,gBAAAA;AACFqJ,sCAAsBuG,KAAK;AAAA,kBACvBjgB,MAAMynB,GAAGvT,WAAWA,WAAWzR;AAAAA,kBAC/BykB,UAAUO,GAAGP;AAAAA,kBACbhT,YAAYuT,GAAGvT,WAAWA;AAAAA,kBAC1BwT,WAAW;AAAA,gBAAA,CACd;AAAA,cACL,GAEA,yCAACC,YAAAA,YAAA,EAAW,MAAM/kB,GAAAA,SAASmN,SAAAA,CAAS,GACxC,GACJ,EAAA,CACJ;AAAA,YAER;AAEA,mBACI9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,yCAACyO,GAAAA,MAAA,EACG,SACIzO,2BAAAA,IAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,WAAU,+GACV,SAAUO,CAAAA,QAAMA,IAAEC,gBAAAA,GAElB,UAAApO,2BAAAA,IAAC0O,8BAAA,EAAiB,MAAM/N,YAASmN,UAAS,EAAA,CAC9C,GAGHyX,UAAAA,WAAWzlB,IAAI0lB,UACZxlB,2BAAAA,IAAC2O,GAAAA,UAAA,EAEG,OAAK,MACL,SAAS,MAAM;AACX8I,oCAAsBuG,KAAK;AAAA,gBACvBjgB,MAAMynB,KAAGvT,WAAWA,WAAWzR;AAAAA,gBAC/BykB,UAAUO,KAAGP;AAAAA,gBACbhT,YAAYuT,KAAGvT,WAAWA;AAAAA,gBAC1BwT,WAAW;AAAA,cAAA,CACd;AAAA,YACL,GAEC9a,YAAE,0BAA0B;AAAA,cAAE3M,MAAMwnB,KAAGvT,WAAWA,WAAWjU;AAAAA,cAClHgK,IAAI0L,OAAO8R,KAAGP,QAAQ;AAAA,YAAA,CAAG,EAAA,GAZgCO,KAAGvT,WAAWrH,SAavB,CACH,GACL,GACJ;AAAA,UAER;AAGA,gBAAM+a,YAAYjI,aAAaG,aAAaA,cAAYH,aAAavL,cAAclI,SAAOrI;AAC1F,gBAAMmF,QAAQgX,YAAUA,UAAQ9T,SAAOrI,GAAG,IAAI;AAC9C,gBAAMoT,eAAe,OAAOjO,UAAU,YAAYA,UAAU,OAAOsS,KAAKqG,UAAU3Y,KAAK,IAAI2M,OAAO3M,SAAS,EAAE;AAE7G,cAAI4e,WAAW;AACX,kDACK,oBAAA,EACG,cACA,QAAShP,CAAAA,UAAQyH,eAAezH,OAAKoH,WAAS9T,SAAOrI,KAAKic,UAAQ,GAClE,UAAU,MAAMF,eAAe,IAAI,GAAE;AAAA,UAGjD;AAEA,iBACI3d,2BAAAA,IAAC,OAAA,EACG,WAAU,qJACV,eAAe,MAAM4d,kBAAkBC,YAAU5T,SAAOrI,KAAKoT,cAAc+I,SAAO,GAElF,UAAA/d,2BAAAA,IAAC,OAAA,EAAI,WAAU,sBAAqB,OAAOgV,cACtCA,UAAAA,iBAAiB,KAAKhV,+BAAC,QAAA,EAAK,WAAU,sEAAqE,UAAA,OAAA,CAAI,IAAUgV,aAAAA,CAC9H,GACJ;AAAA,QAER,GAAE,EAAA,CAEV;AAAA,wCAEC,OAAA,EAAI,WAAW1U,GAAAA,IAAI,kGAAkGqN,GAAAA,kBAAkB,GACpI,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,cAAAI,+BAAC,QAAA,EAAK,WAAU,6FAA6F2K,UAAAA,EAAE,iBAAiB,GAAE;AAAA,cAClI3K,2BAAAA,IAAC,QAAA,EAAK,WAAU,+DAA+DqR,kBAAQrD,OAAAA,CAAO;AAAA,YAAA,GAClG;AAAA,YACApO,2BAAAA,KAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,cAAAI,+BAAC,QAAA,EAAK,WAAU,6FAA6F2K,UAAAA,EAAE,iBAAiB,GAAE;AAAA,cAClI/K,2BAAAA,KAAC,QAAA,EAAK,WAAU,+DAA+D4Z,UAAAA;AAAAA,gBAAAA;AAAAA,gBAAS;AAAA,cAAA,EAAA,CAAE;AAAA,YAAA,EAAA,CAC9F;AAAA,UAAA,GACJ;AAAA,UACA5Z,2BAAAA,KAAC,OAAA,EAAI,WAAU,6DACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASoV,sBAERvZ,UAAAA,EAAE,0BAA0B,EAAA,CACjC;AAAA,YACA3K,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASkV,kBAERrZ,UAAAA,EAAE,wBAAwB,EAAA,CAC/B;AAAA,YACA3K,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASkU,iBAERrY,UAAAA,EAAE,uBAAuB,EAAA,CAC9B;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,IAER;AAEA,UAAM,CAACib,aAAaC,cAAc,IAAIzY,MAAAA,SAAS,MAAM;AACjD,UAAI;AACA,cAAM+L,UAAQd,aAAaC,QAAQ,gCAAgC;AACnE,eAAOa,YAAU,OAAO2M,WAAW3M,OAAK,IAAI;AAAA,MAChD,SAAShL,KAAG;AACR,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,UAAM,CAAC4X,cAAcC,eAAe,IAAI5Y,MAAAA,SAAS,MAAM;AACnD,UAAI;AACA,cAAM+L,UAAQd,aAAaC,QAAQ,0BAA0B;AAC7D,eAAOa,YAAU,OAAO2M,WAAW3M,OAAK,IAAI;AAAA,MAChD,SAAShL,MAAG;AACR,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED/O,UAAAA,UAAU,MAAM;AACZ,UAAI;AACAiZ,qBAAagD,QAAQ,kCAAkCuK,YAAYxF,SAAAA,CAAU;AAAA,MACjF,SAASjS,MAAG;AAAA,MAAE;AAAA,IAClB,GAAG,CAACyX,WAAW,CAAC;AAEhBxmB,UAAAA,UAAU,MAAM;AACZ,UAAI;AACAiZ,qBAAagD,QAAQ,4BAA4B0K,aAAa3F,SAAAA,CAAU;AAAA,MAC5E,SAASjS,MAAG;AAAA,MAAE;AAAA,IAClB,GAAG,CAAC4X,YAAY,CAAC;AAEjB,UAAME,gBAAgB/W,SAASxE,KAAKjJ,SAAKA,IAAEuO,QAAQX,UAAUW,GAAG;AAChE,UAAMJ,aAAaqW,eAAerW,cAAc;AAEhD,WACIhQ,2BAAAA,KAAC,OAAA,EAAI,WAAU,iHACX,UAAA;AAAA,MAAAI,2BAAAA,IAACkmB,GAAAA,iBAAA,EACG,aAAY,cACZ,kBAAkBN,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACI7lB,2BAAAA,IAAC,kBAAA,EACG,UACA,SACA,iBAAiBia,QACjB,cAAcA,QACd,iBAAiB+F,qBACjB,SACA,iBACA,aACA,eAAejE,YAAAA,IAGvB,aACInc,gCAAC,OAAA,EAAI,WAAU,iDAEX,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,gFAAgFqN,GAAAA,kBAAkB,GAClH,UAAA;AAAA,UAAA3N,2BAAAA,IAAC,SAAI,WAAU,oDACX,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,YAAAI,2BAAAA,IAACuP,GAAAA,MAAA,EAAK,OAAOqK,aAAa,eAAegC,iBAAiB,SAAQ,QAAO,WAAU,2BAA0B,gBAAe,gCACvH3C,UAAAA,KAAKnZ,IAAIygB,WACN3gB,2BAAAA,KAAC6P,GAAAA,KAAA,EAAiB,OAAO8Q,MAAIvY,IAAI,WAAU,yDACvC,UAAA;AAAA,cAAAhI,2BAAAA,IAACmmB,YAAAA,cAAA,EAAa,MAAMxlB,GAAAA,SAASmN,UAAU,WAAU,sCAAoC;AAAA,cACrF9N,2BAAAA,IAAC,QAAA,EAAK,WAAU,YAAYugB,gBAAIviB,MAAK;AAAA,cACpCib,KAAKjL,SAAS,KACXhO,2BAAAA,IAAC4N,GAAAA,cACG,MAAK,YACL,SAAUO,CAAAA,SAAMuS,eAAeH,MAAIvY,IAAImG,IAAC,GACxC,WAAU,uFAEV,yCAACiY,YAAAA,OAAA,EAAM,MAAMzlB,YAASmN,SAAAA,CAAS,EAAA,CACnC;AAAA,YAAA,EAAA,GAVEyS,MAAIvY,EAYd,CACH,GACL;AAAA,YACAhI,2BAAAA,IAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,SAASqS,cACT,WAAU,sBAEV,UAAAjgB,2BAAAA,IAACqmB,sBAAA,EAAS,MAAM1lB,GAAAA,SAASmN,UAAS,EAAA,CACtC;AAAA,UAAA,EAAA,CACJ,EAAA,CACJ;AAAA,UACAlO,2BAAAA,KAAC,OAAA,EAAI,WAAU,uDACX,UAAA;AAAA,YAAAI,2BAAAA,IAACqlB,GAAAA,WAAQ,OAAO1a,EAAE,uBAAuB,GACrC,UAAA3K,+BAAC4N,GAAAA,cAAW,MAAK,SAAQ,SAASqT,gBAAgB,WAAU,iEACxD,UAAAjhB,2BAAAA,IAACsmB,YAAAA,UAAA,EAAS,MAAM3lB,YAASmN,UAAS,GACtC,EAAA,CACJ;AAAA,YAEA9N,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,SAAQ,QACR,MAAK,SACL,SAASqS,eACT,UAAU5H,SAET5O,UAAAA,EAAE,oBAAoB,EAAA,CAC3B;AAAA,YAEA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,YAElEJ,gCAAC,SAAI,WAAU,mDAAkD,SAAS,MAAMyd,aAAa,CAACD,SAAS,GACnG,UAAA;AAAA,cAAApd,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,8DAA8D0K,UAAAA,EAAE,uBAAuB,GAAE;AAAA,6CAChI,SAAA,EACG,MAAK,YACL,SAASyS,WACT,UAAWjP,CAAAA,SAAMkP,aAAalP,KAAEyI,OAAO2P,OAAO,GAC9C,SAAUpY,CAAAA,SAAMA,KAAEC,gBAAAA,GAClB,WAAU,wFAAA,CAAuF;AAAA,YAAA,GAEzG;AAAA,YAEApO,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,YAElEA,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAOzV,aAAajF,EAAE,kCAAkC,IAAIA,EAAE,6BAA6B,GAChG,UAAA3K,2BAAAA,IAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,SAAS,MAAM;AACX,kBAAI,CAACqY,eAAe;AAChBtO,mCAAmBqG,KAAK;AAAA,kBACpBxN,MAAM;AAAA,kBACNgD,SAAS7I,EAAE,mCAAmC;AAAA,gBAAA,CACjD;AACD;AAAA,cACJ;AACAgV,2BAAazQ,SAASpP,IAAI2B,CAAAA,QAAKA,IAAEuG,OAAOie,cAAcje,KAAK;AAAA,gBAAE,GAAGvG;AAAAA,gBAC5GmO,YAAY,CAACnO,IAAEmO;AAAAA,cAAAA,IAAenO,GAAC,CAAC;AAAA,YACQ,GAEA,UAAAzB,2BAAAA,IAAC,OAAA,EAAI,WAAW,WAAW4P,aAAa,8BAA8B,yEAAyE,IAAI,MAAMA,aAAa,iBAAiB,QAAQ,QAAO,gBAAe,aAAa,GAAG,SAAQ,aAAY,UAAA5P,2BAAAA,IAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,GAAE,8HAAA,CAA6H,EAAA,CAAE,GACjb,GACJ;AAAA,YAEAA,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,SAAQ,QACR,MAAK,SACL,SAAS,MAAMsQ,oBAAoB,IAAI,GAEtCzU,UAAAA,EAAE,iBAAiB,EAAA,CACxB;AAAA,YAEA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAmD;AAAA,YAElEA,2BAAAA,IAACyO,GAAAA,MAAA,EACG,SACI7O,2BAAAA,KAACkP,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,YACR,WAAU,sEAEV,UAAA;AAAA,cAAA9O,2BAAAA,IAACwmB,YAAAA,cAAA,EAAa,MAAM7lB,GAAAA,SAASC,OAAO,WAAU,0DAAwD;AAAA,cACtGZ,2BAAAA,IAAC,UAAK,WAAU,yBAAyB6Y,4BAAkB,QAASV,oBAAoBxN,EAAE,sBAAsB,EAAA,CAAG;AAAA,YAAA,EAAA,CACvH,GAGJ,UAAA/K,2BAAAA,KAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,cAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,wEACX,UAAAA,2BAAAA,IAACC,eAAA,EAAW,SAAQ,WAAU,WAAU,iGAAiG0K,UAAAA,EAAE,qBAAqB,EAAA,CAAE,GACtK;AAAA,cACCkO,kBACG7Y,2BAAAA,IAAC,OAAA,EAAI,WAAU,wCACX,UAAAA,2BAAAA,IAACyN,GAAAA,oBAAiB,MAAK,QAAA,CAAO,EAAA,CAClC,IACAsL,wBACA/Y,2BAAAA,IAAC,OAAA,EAAI,WAAU,8EACV+Y,UAAAA,sBAAAA,CACL,IAEAnZ,2BAAAA,KAAAkQ,WAAAA,UAAA,EACK2I,UAAAA;AAAAA,gBAAAA,mBAAmB3Y,IAAI2b,UACpBzb,+BAAC2O,GAAAA,UAAA,EAAkB,OAAK,MAAC,SAAS,MAAM6M,qBAAqBC,IAAE,GAAG,WAAWnb,GAAAA,IAAI,WAAW6X,qBAAqBsD,QAAM,qCAAqC,GACvJA,UAAAA,QADUA,IAEf,CACH;AAAA,gBAEDzb,2BAAAA,IAAC,OAAA,EAAI,WAAU,6EACX,UAAAA,2BAAAA,IAACC,eAAA,EAAW,SAAQ,WAAU,WAAU,iGAAiG0K,UAAAA,EAAE,iBAAiB,GAAE,GAClK;AAAA,gBACCgO,eAAe7Y,IAAI6Z,CAAAA,2CACfhL,GAAAA,UAAA,EAAoB,OAAK,MAAC,SAAS,MAAMgN,iBAAiBhC,MAAI,GAAG,WAAWrZ,OAAI,WAAWiY,iBAAiBoB,UAAQ,qCAAqC,GACrJA,UAAAA;AAAAA,kBAAAA;AAAAA,kBAAMA,WAAS,aAAa,MAAMhP,EAAE,kBAAkB,IAAI;AAAA,gBAAA,EAAA,GADhDgP,MAEf,CACH;AAAA,cAAA,EAAA,CACL;AAAA,YAAA,EAAA,CAER,EAAA,CACJ;AAAA,YAEA/Z,2BAAAA,KAACkP,GAAAA,QAAA,EACG,SAAS,MAAMkT,UAAAA,GACf,UAAUzI,SACV,MAAK,SACL,OAAM,WAELA,UAAAA;AAAAA,cAAAA,UAAUvZ,2BAAAA,IAACyN,qBAAA,EAAiB,MAAK,YAAW,WAAU,OAAA,CAAM,IAAKzN,2BAAAA,IAACymB,YAAAA,UAAA,EAAS,MAAM9lB,GAAAA,SAASmN,UAAU,WAAU,QAAM;AAAA,cACpHnD,EAAE,gBAAgB;AAAA,YAAA,EAAA,CACvB;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,QAEA3K,+BAACkmB,GAAAA,iBAAA,EACG,aAAY,YACZ,kBAAkBH,cAClB,mBAAmBC,iBACnB,gBAAgB,KAChB,YACIhmB,2BAAAA,IAAC,OAAA,EAAI,WAAU,gDACX,UAAAA,2BAAAA,IAAC,cAAA,EACG,OAAOgQ,KACP,UAAWR,CAAAA,MAAMyK,OAAOzK,KAAK,EAAE,GAC/B,OAAOwS,WACP,SAAiB,GAEzB,GAEJ,aACIpiB,2BAAAA,KAAC,OAAA,EAAI,WAAU,yFACX,UAAA;AAAA,UAAAI,+BAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,mFAAmFqN,GAAAA,kBAAkB,GACrH,UAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mGAAmG0K,UAAAA,EAAE,0BAA0B,GAAE,GAC7K;AAAA,UACA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDACVykB,0BAAc,CACnB;AAAA,QAAA,EAAA,CACJ,EAAA,CACH;AAAA,MAAA,EAAA,CAGT,EAAA,CACH;AAAA,MAGL7kB,2BAAAA,KAAC8mB,GAAAA,QAAA,EAAO,MAAMvH,kBAAkB,cAAcC,qBAC1C,UAAA;AAAA,QAAApf,2BAAAA,IAAC2mB,GAAAA,aAAA,EAAahc,UAAAA,EAAE,yBAAyB,EAAA,CAAE;AAAA,QAC3C3K,+BAAC4mB,GAAAA,eAAA,EACG,UAAAhnB,2BAAAA,KAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC6mB,GAAAA,WAAA,EACG,OAAOlc,EAAE,yBAAyB,GAClC,WAAS,MACT,aAAaA,EAAE,qCAAqC,GACpD,OAAO0U,gBACP,UAAWlR,CAAAA,SAAMmR,kBAAkBnR,KAAEyI,OAAO7P,KAAK,GACjD,WAAYoH,CAAAA,SAAM;AACd,gBAAIA,KAAEvM,QAAQ,SAAS;AACnBuM,mBAAEgJ,eAAAA;AACFyL,gCAAAA;AAAAA,YACJ;AAAA,UACJ,GAAE;AAAA,UAEN5iB,+BAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,yDAAyD0K,UAAAA,EAAE,gCAAgC,EAAA,CAAE;AAAA,QAAA,EAAA,CACzI,EAAA,CACJ;AAAA,wCACCmc,GAAAA,eAAA,EACG,UAAA;AAAA,UAAA9mB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAQ,QAAO,SAAS,MAAMsQ,oBAAoB,KAAK,GAAIzU,UAAAA,EAAE,mBAAmB,EAAA,CAAE;AAAA,UAC1F3K,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAS8T,mBAAmB,OAAM,WAAU,UAAU,CAACvD,eAAerW,KAAAA,GAAS2B,UAAAA,EAAE,iBAAiB,EAAA,CAAE;AAAA,QAAA,EAAA,CAChH;AAAA,MAAA,GACJ;AAAA,qCAECoc,KAAAA,oBAAA,EACG,MAAMzJ,qBACN,UAAU,MAAMC,uBAAuB,KAAK,GAC5C,OAAO5S,EAAE,gCAAgC,GACzC,MAAMA,EAAE,qCAAqC,GAC7C,UAAU,MAAM;AACZ,YAAI6S,cAAeA,eAAAA;AACnBD,+BAAuB,KAAK;AAAA,MAChC,EAAA,CAAE;AAAA,IAAA,GAEV;AAAA,EAER;;;;;ACj4CA,QAAMyJ,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAwPrB,QAAMC,iBAAiBA,CAAC;AAAA,IAC3BlgB;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC;AAAAA,IACAC,WAAW;AAAA,IACXC,YAAY;AAAA,IACZ8f,kBAAkB,CAAA;AAAA,IAClBjW,cAAc,CAAA;AAAA,EACG,MAAM;AACvB,UAAM;AAAA,MAAE3J;AAAAA,IAAAA,IAASC,uBAAAA;AACjB,UAAMC,YAAYf,MAAAA,OAA4C,IAAI;AAClE,UAAMgB,YAAYhB,MAAAA,OAAsB,IAAI;AAC5C,UAAMiB,WAAWjB,MAAAA,OAAOQ,KAAK;AAC7BS,aAAShB,UAAUO;AACnB,UAAMkgB,qBAAqB1gB,MAAAA,OAAO,KAAK;AAEvC,UAAMmB,sBAA+BA,CAACwf,gBAAgBtf,WAAW;AAC7DN,gBAAUd,UAAU0gB;AACpB3f,gBAAUf,UAAUoB;AAGpBsf,qBAAerf,UAAU;AAAA,QACrBC,IAAI;AAAA,QACJrK,OAAO;AAAA,QACPsK,aAAa,CAACH,OAAOI,OAAOC,UAAUL,OAAOM,QAAQC,KAAK;AAAA,QAC1DC,oBAAoB;AAAA,QACpBC,kBAAkB;AAAA,QAClBC,KAAKA,MAAM;AACP,cAAId,SAAShB,SAAS;AAClB,kBAAM+B,YAAY2e,eAAe1e,aAAAA;AACjC,gBAAIC;AACJ,gBAAIF,aAAa,CAACA,UAAUI,WAAW;AACnCF,6BAAeye,eAAete,SAAAA,GAAYC,gBAAgBN,SAAS,GAAGO,KAAAA;AAAAA,YAC1E;AACAtB,qBAAShB,QAAQiC,gBAAgBC,MAAS;AAAA,UAC9C;AAAA,QACJ;AAAA,MAAA,CACH;AAGD,UAAI,CAACue,mBAAmBzgB,SAAS;AAC7BygB,2BAAmBzgB,UAAU;AAM7B,cAAM2gB,KAAMvf,OAAOoB,UAAkBoe;AACrCD,WAAGE,mBAAmBC,mBAAmB;AAAA,UACrC5Q,QAAQyQ,GAAGI,aAAaC;AAAAA,UACxBC,QAAQN,GAAGO,WAAWF;AAAAA,UACtBG,SAAS;AAAA,UACTC,SAAS;AAAA,UACTC,QAAQ;AAAA,UACRC,QAAQ;AAAA,UACRC,sBAAsB;AAAA,QAAA,CACzB;AAKDZ,WAAGE,mBAAmBW,sBAAsB;AAAA,UACxCC,yBAAyB,CAAC,MAAM,IAAI;AAAA,QAAA,CACvC;AAGDd,WAAGE,mBAAmBa,YAClBpB,qBACA,uBACJ;AAGA,YAAI/V,YAAYjD,SAAS,GAAG;AACxB,gBAAMqa,QAAkB,CAAA;AACxB,qBAAWtd,OAAOkG,aAAa;AAE3B,kBAAMqX,YAAYvd,IAAIvK,KAAK+d,QAAQ,kBAAkB,GAAG;AACxD,kBAAMgK,YAAYxd,IAAIyd,WAAWxa,SAAS,IACpC,KAAKjD,IAAIyd,WAAW1oB,IAAI2oB,CAAAA,MAAK,GAAGA,CAAC,OAAO,EAAE5Z,KAAK,IAAI,CAAC,OACpD;AACNwZ,kBAAMjiB,KAAK,mBAAmB2E,IAAI/M,IAAI,KAAK+M,IAAIvK,IAAI,MAAM;AACzD6nB,kBAAMjiB,KAAK,aAAakiB,SAAS,QAAQC,SAAS,EAAE;AACpDF,kBAAMjiB,KAAK,yCAAyC2E,IAAIvK,IAAI,sBAAsB8nB,SAAS,UAAU;AAAA,UACzG;AACAjB,aAAGE,mBAAmBa,YAClBC,MAAMxZ,KAAK,IAAI,GACf,4BACJ;AAAA,QACJ,WAAWqY,gBAAgBlZ,SAAS,GAAG;AAEnC,gBAAM0a,kBAAkBxB,gBAAgBpnB,IAAIU,CAAAA,SACxC,mBAAmBA,IAAI;AAAA,wCAA8CA,IAAI,uBAC7E,EAAEqO,KAAK,IAAI;AACXwY,aAAGE,mBAAmBa,YAClBM,iBACA,4BACJ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAIthB,WAAW;AACXggB,uBAAehb,MAAAA;AAAAA,MACnB;AAAA,IACJ;AAEA,WACIpM,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,0CAA0C4G,SAAS,GACnE,UAAAlH,2BAAAA,IAAC,QAAA,EACG,QAAO,QACP,iBAAgB,cAChB,MAAK,oBACL,OACA,UACA,SAAS4H,qBACT,OAAON,SAAS,SAAS,YAAY,MACrC,SAAS;AAAA,MACL+E,SAAS;AAAA,QAAEC,SAAS;AAAA,MAAA;AAAA,MACpBC,UAAU;AAAA,MACVC,aAAa;AAAA,MACbC,sBAAsB;AAAA,MACtBC,iBAAiB;AAAA,MACjBvF;AAAAA,MACAwF,SAAS;AAAA,MACTC,UAAU;AAAA,MACV+b,4BAA4B;AAAA,MAC5BC,kBAAkB;AAAA,MAClBC,gBAAgB;AAAA,QAAEvc,SAAS;AAAA,MAAA;AAAA,IAAK,GAClC,EAAA,CAEV;AAAA,EAER;AC1WA,QAAMwc,kBAA0E,CAC5E;AAAA,IACInrB,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,GACA;AAAA,IACIN,OAAO;AAAA,IACPorB,MAAM;AAAA,IACN9qB,aAAa;AAAA,EACjB,CAAC;AAGE,QAAM+qB,kBAAkBA,CAAC;AAAA,IAC5B/X;AAAAA,IACA/B;AAAAA,IACAC;AAAAA,IACAF;AAAAA,IACAG;AAAAA,IACA6Z;AAAAA,EACkB,MAAM;AACxB,UAAM,CAAC5Z,WAAWC,YAAY,IAAIlC,MAAAA,SAA+D,aAAa;AAE9G,2CACK,OAAA,EAAI,WAAW9M,GAAAA,IAAI,qEAAqEqN,GAAAA,kBAAkB,GACvG,UAAA;AAAA,MAAA/N,2BAAAA,KAAC2P,GAAAA,MAAA,EAAK,OAAOF,WAAW,eAAgBG,CAAAA,MAAMF,aAAaE,CAAyD,GAAG,SAAQ,QAAO,WAAU,uDAC5I,UAAA;AAAA,QAAAxP,+BAACyP,GAAAA,KAAA,EAAI,OAAM,eACP,UAAAzP,2BAAAA,IAACqlB,YAAA,EAAQ,OAAM,sBACX,UAAArlB,2BAAAA,IAAC,QAAA,EAAK,WAAU,WAAU,UAAA,cAAA,CAAW,GACzC,GACJ;AAAA,QACAA,+BAACyP,GAAAA,KAAA,EAAI,OAAM,aACP,yCAAC4V,YAAA,EAAQ,OAAM,uBACX,UAAArlB,2BAAAA,IAAC,QAAA,EAAK,WAAU,WAAU,UAAA,YAAA,CAAS,GACvC,GACJ;AAAA,QACAA,2BAAAA,IAACyP,GAAAA,OAAI,OAAM,YACP,yCAAC,QAAA,EAAK,WAAU,WAAU,UAAA,WAAA,CAAQ,EAAA,CACtC;AAAA,QACAzP,2BAAAA,IAACyP,GAAAA,OAAI,OAAM,WACP,yCAAC,QAAA,EAAK,WAAU,WAAU,UAAA,UAAA,CAAO,EAAA,CACrC;AAAA,MAAA,GACJ;AAAA,MAEA7P,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCAEVyP,UAAAA;AAAAA,QAAAA,cAAc,iBACXzP,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAoF,yBAE5H,GACJ;AAAA,UACAD,2BAAAA,IAAC,OAAA,EAAI,WAAU,wDACViR,UAAAA,YAAYjD,WAAW,IACpBhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,mBACX,UAAAA,+BAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,mDAAiD,UAAA,uBAAA,CAEzF,EAAA,CACJ,IAEAgR,YAAYnR,IAAIiL,CAAAA,QACZ/K,2BAAAA,IAAC,gBAAA,EAEG,YAAY+K,KACZ,aAAA,GAFKA,IAAIvK,KAIhB,EAAA,CAET;AAAA,QAAA,GACJ;AAAA,QAIH6O,cAAc,eACXzP,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAoF,2BAE5H,GACJ;AAAA,UACAD,2BAAAA,IAAC,SAAI,WAAU,wDACV8oB,0BAAgBhpB,IAAI,CAACopB,KAAK/Y,MACvBvQ,2BAAAA,KAAC,OAAA,EAEG,WAAWU,GAAAA,IACP,sFACA,8DACAqN,GAAAA,kBACJ,GACA,SAAS,MAAMsb,aAAaC,IAAIH,IAAI,GAEpC,UAAA;AAAA,YAAAnpB,2BAAAA,KAAC,OAAA,EAAI,WAAU,0CACX,UAAA;AAAA,cAAAI,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,2EACjCipB,cAAIvrB,OACT;AAAA,cACAqC,2BAAAA,IAAC,SAAI,WAAU,6EAA4E,MAAK,QAAO,QAAO,gBAAe,SAAQ,aACjI,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,yHAAuH,EAAA,CAChM;AAAA,YAAA,GACJ;AAAA,2CACCC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,6EACnCipB,cAAIjrB,YAAAA,CACT;AAAA,UAAA,EAAA,GAlBKkS,CAmBT,CACH,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAIHd,cAAc,eAAe,MAAM;AAChC,gBAAMK,YAAYR,SAASS,OAAOlO,CAAAA,MAAKA,EAAEmO,UAAU;AACnD,gBAAMC,SAASX,SAASS,OAAOlO,CAAAA,QAAK,CAACA,IAAEmO,UAAU;AAEjD,iBACIhQ,2BAAAA,KAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAqF,sBAAQ,GACzI;AAAA,YACAD,2BAAAA,IAAC,SAAI,WAAU,wDACVkP,mBAASlB,WAAW,mCAChB,OAAA,EAAI,WAAU,mBACX,UAAAhO,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mDAAiD,UAAA,qEAAA,CAEzF,EAAA,CACJ,IAEAL,2BAAAA,KAAAkQ,WAAAA,UAAA,EACKJ,UAAAA;AAAAA,cAAAA,UAAU1B,SAAS,KAChBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,gBAAAA,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,8HACpC,UAAA;AAAA,kBAAAD,2BAAAA,IAAC,OAAA,EAAI,WAAU,+BAA8B,MAAK,gBAAe,SAAQ,aAAY,UAAAA,2BAAAA,IAAC,QAAA,EAAK,GAAE,2VAAA,CAA0V,GAAE;AAAA,kBAAK;AAAA,gBAAA,GAElc;AAAA,+CACC,OAAA,EAAI,WAAU,aACV0P,UAAAA,UAAU5P,IAAIiQ,CAAAA,YACX/P,2BAAAA,IAAC,aAAA,EAA6B,SAAkB,UAAUiP,iBAAiB,UAAUG,mBAAnEW,QAAQ/H,GAC7B,EAAA,CACL;AAAA,cAAA,GACJ;AAAA,cAEH6H,OAAO7B,SAAS,KACbpO,2BAAAA,KAAC,OAAA,EACI8P,UAAAA;AAAAA,gBAAAA,UAAU1B,SAAS,KAChBhO,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,4GAA0G,UAAA,SAAA,CAElJ;AAAA,+CAEH,OAAA,EAAI,WAAU,aACV4P,UAAAA,OAAO/P,IAAIiQ,eACR/P,2BAAAA,IAAC,aAAA,EAA6B,SAAS+P,WAAS,UAAUd,iBAAiB,UAAUG,mBAAnEW,UAAQ/H,GAC7B,EAAA,CACL;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,CAER,EAAA,CAER;AAAA,UAAA,GACJ;AAAA,QAER,GAAA;AAAA,QAGCqH,cAAc,aACXzP,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAqF,qBAAO,GACxI;AAAA,yCACC,OAAA,EAAI,WAAU,wDACVkP,UAAAA,QAAQnB,WAAW,IAChBhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,mBACX,UAAAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mDAAiD,UAAA,2BAAA,CAEzF,EAAA,CACJ,IAEA,CAAC,GAAGkP,OAAO,EAAEe,QAAAA,EAAUpQ,IAAI,CAACipB,MAAM5Y,QAC9BvQ,gCAAC,SAEG,WAAU,6HACV,SAAS,MAAMqP,gBAAgB8Z,IAAI,GAEnC,UAAA;AAAA,YAAA/oB,2BAAAA,IAAC,SAAI,WAAU,8HAA6H,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAClL,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,+CAA6C,EAAA,CACtH;AAAA,YACAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sLACnC8oB,UAAAA,KAAK/a,SAAS,MAAM+a,KAAK1I,UAAU,GAAG,GAAG,IAAI,MAAM0I,KAAAA,CACxD;AAAA,UAAA,EAAA,GATK5Y,GAUT,CACH,EAAA,CAET;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,EAER;AAIA,WAAAgZ,eAAA/qB,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAwB,UAAA;AAAA,MAAA2T;AAAAA,MAAAgX;AAAAA,IAAAA,IAAA7qB;AACpB,UAAA,CAAA0V,UAAAC,WAAA,IAAgC3G,MAAAA,cAAc;AAAE,QAAAnO;AAAA,QAAAZ,SAAAyV,UAAA;AAM3B7U,WAAAA,MAAM8U,YAAW,CAAED,QAAQ;AAACzV,aAAAyV;AAAAzV,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAGmB,UAAAc,KAAA2U,YAAY;AAAW,QAAAvU;AAAA,QAAAlB,SAAAc,IAAA;AAAhEI,WAAAe,GAAAA,IAAI,qCAAqCnB,EAAuB;AAACd,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG5ErB,WAAAK,2BAAAA,IAAA,QAAA,EAAQ,GAAA,qHAAA,CAAoH;AAAE3B,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAAkB,IAAA;AAJlIM,WAAAG,2BAAAA,IAAA,SACe,WAAAT,IACN,MAAA,gBAAuB,SAAA,aAE5BI,UAAAA,GAAAA,CACJ;AAAMtB,aAAAkB;AAAAlB,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACNH,mDAAe,WAAA,6EAAiF,MAAA,QAAc,QAAA,gBAAuB,SAAA,aACjI,yCAAA,QAAA,EAAoB,eAAA,SAAuB,gBAAA,SAAqB,gBAAK,GAAA,+GAA6G,EAAA,CACtL;AAAMxC,aAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,CAAA,MAAA4T,WAAAzR,MAAA;AACNM,0CAACb,eAAA,EAAmB,SAAA,SAAkB,WAAA,qFACjCgS,qBAAUzR,KAAAA,CACf;AAAanC,QAAA,CAAA,IAAA4T,WAAAzR;AAAAnC,aAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,UAAA4T,WAAAzR,QAAAnC,UAAA4qB,cAAA;AAKIhoB,WAAAkN,CAAAA,MAAA;AACLA,UAACC,gBAAAA;AACD6a,qBAAa,oCAAoChX,WAAUzR,IAAA;AAAA,eAA4C;AAAA,MAAC;AAC3GnC,QAAA,EAAA,IAAA4T,WAAAzR;AAAAnC,cAAA4qB;AAAA5qB,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEDE,WAAAlB,2BAAAA,IAACqmB,YAAAA,UAAA,EAAe,MAAA1lB,GAAAA,SAAAmN,UAAiB;AAAGzP,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,UAAA4C,IAAA;AAT5CE,YAAAnB,2BAAAA,IAACqlB,GAAAA,SAAA,EAAc,OAAA,yBACX,UAAArlB,2BAAAA,IAAC4N,eAAA,EACQ,MAAA,YACK,WAAA,0FACD,SAAA3M,IAKTC,cACJ,GACJ;AAAU7C,cAAA4C;AAAA5C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,EAAA,EAAA,MAAAY,MAAAZ,EAAA,EAAA,MAAA8C,OAAA9C,EAAA,EAAA,MAAAwB,MAAAxB,UAAAyC,IAAA;AA3BdM,YAAAxB,2BAAAA,KAAA,OAAA,EACc,WAAA,gIACD,SAAAX,IAETY,UAAAA;AAAAA,QAAAA;AAAAA,QAMAgB;AAAAA,QAGAC;AAAAA,QAGAK;AAAAA,MAAAA,GAYJ;AAAM9C,cAAAY;AAAAZ,cAAA8C;AAAA9C,cAAAwB;AAAAxB,cAAAyC;AAAAzC,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAA4T,WAAAuW,cAAAnqB,EAAA,EAAA,MAAAyV,YAAAzV,EAAA,EAAA,MAAA4qB,cAAA;AACL3nB,YAAAwS,YAAY7B,WAAUuW,WAAAxa,SAAA,KACnBhO,2BAAAA,IAAA,OAAA,EAAgB,WAAAM,GAAAA,IAAI,kCAAgCqN,GAAAA,kBAAoB,GACnEsE,UAAAA,WAAUuW,WAAA1oB,IAAAspB,CAAAA,SACPxpB,2BAAAA,KAAA,OAAA,EAEc,WAAA,wJACD,SAAA,MAAMqpB,aAAa,IAAIG,IAAI,GAAG,GAEvC,UAAA;AAAA,QAAAppB,2BAAAA,IAAA,SAAe,WAAA,2EAA+E,MAAA,QAAc,QAAA,gBAAuB,SAAA,aAAY,yCAAA,QAAA,EAAoB,eAAA,SAAuB,gBAAA,SAAqB,aAAA,KAAO,GAAA,0KAAwK,EAAA,CAAE;AAAA,uCAC/XC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,0FAA0FmpB,UAAAA,KAAAA,CAAK;AAAA,MAAA,KALlIA,IAMT,CACH,GACL;AACH/qB,QAAA,EAAA,IAAA4T,WAAAuW;AAAAnqB,cAAAyV;AAAAzV,cAAA4qB;AAAA5qB,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAA+C,OAAA/C,UAAAiD,KAAA;AA3CLE,4CAAA,OAAA,EACIJ,UAAAA;AAAAA,QAAAA;AAAAA,QA6BCE;AAAAA,MAAAA,GAcL;AAAMjD,cAAA+C;AAAA/C,cAAAiD;AAAAjD,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,WA5CNmD;AAAAA,EA4CM;AAId,WAAA6nB,YAAAjrB,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAqB,UAAA;AAAA,MAAAyR;AAAAA,MAAAuZ;AAAAA,MAAAC;AAAAA,IAAAA,IAAAnrB;AAAyH,QAAAa;AAAA,QAAAZ,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGvH/B,WAAAqB,GAAAA,IAAI,uJAAqJqN,qBAAoB;AAACtP,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,SAAAirB,YAAAjrB,EAAA,CAAA,MAAA0R,QAAAgZ,MAAA;AAChL5pB,WAAAA,MAAMmqB,SAASvZ,QAAOgZ,IAAK;AAAC1qB,aAAAirB;AAAAjrB,QAAA,CAAA,IAAA0R,QAAAgZ;AAAA1qB,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,EAAA,CAAA,MAAA0R,QAAA/R,MAAA;AAErCuB,0CAACU,eAAA,EAAmB,SAAA,SAAkB,WAAA,uFACjC8P,kBAAO/R,KAAAA,CACZ;AAAaK,QAAA,CAAA,IAAA0R,QAAA/R;AAAAK,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,CAAA,MAAA0R,QAAAgZ,MAAA;AACbppB,0CAACM,eAAA,EAAmB,SAAA,WAAoB,WAAA,+FACnC8P,kBAAOgZ,KAAAA,CACZ;AAAa1qB,QAAA,CAAA,IAAA0R,QAAAgZ;AAAA1qB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAAkrB,YAAAlrB,EAAA,CAAA,MAAA0R,QAAA/H,IAAA;AAIAnI,WAAAsO,CAAAA,MAAA;AACLA,UAACC,gBAAAA;AACDmb,iBAASxZ,QAAO/H,EAAG;AAAA,MAAC;AACvB3J,aAAAkrB;AAAAlrB,QAAA,CAAA,IAAA0R,QAAA/H;AAAA3J,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEDH,WAAAb,2BAAAA,IAACiQ,YAAAA,YAAA,EAAiB,MAAAtP,GAAAA,SAAAmN,UAAiB;AAAGzP,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,UAAAwB,IAAA;AAR1CiB,WAAAd,2BAAAA,IAAC4N,iBACQ,MAAA,YACK,WAAA,qHACD,SAAA/N,IAKTgB,UAAAA,GAAAA,CACJ;AAAaxC,cAAAwB;AAAAxB,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,EAAA,MAAAc,MAAAd,EAAA,EAAA,MAAAkB,MAAAlB,EAAA,EAAA,MAAAsB,MAAAtB,UAAAyC,IAAA;AAnBjBG,WAAArB,2BAAAA,KAAA,OAAA,EACe,WAAAX,IACF,SAAAE,IAETI,UAAAA;AAAAA,QAAAA;AAAAA,QAGAI;AAAAA,QAGAmB;AAAAA,MAAAA,GAUJ;AAAMzC,cAAAc;AAAAd,cAAAkB;AAAAlB,cAAAsB;AAAAtB,cAAAyC;AAAAzC,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,WApBN4C;AAAAA,EAoBM;AClUP,WAAAuoB,uBAAAprB,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAgC,UAAA;AAAA,MAAAmrB;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAtQ;AAAAA,MAAAuQ;AAAAA,IAAAA,IAAA1rB;AAQT,QAAAa;AAAA,QAAAE;AAAA,QAAAd,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGlB/B,0CAAC8qB,YAAAA,cAAA,EAAmB,MAAAppB,GAAAA,SAAAC,OAA0B,WAAA,qDAAmD;AACjGzB,0CAACc,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,yEACb,UAAA,SAED;AAAa5B,aAAAY;AAAAZ,aAAAc;AAAAA,IAAA,OAAA;AAAAF,WAAAZ,EAAA,CAAA;AAAAc,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,SAAAqrB,aAAA;AAEAnqB,WAAAA,MAAMmqB,YAAY,KAAK;AAACrrB,aAAAqrB;AAAArrB,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAG7B,UAAAsB,KAAA8pB,aAAa,QACP,oFACA;AAAsH,QAAA5pB;AAAA,QAAAxB,SAAAsB,IAAA;AAJrHE,WAAAS,GAAAA,IACP,wDACAX,EAGJ;AAACtB,aAAAsB;AAAAtB,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,CAAA,MAAAkB,MAAAlB,SAAAwB,IAAA;AAPLgB,sDACa,SAAAtB,IACE,WAAAM,IAMd,UAAA,aAED;AAASxB,aAAAkB;AAAAlB,aAAAwB;AAAAxB,aAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,SAAAqrB,aAAA;AAEI5oB,WAAAA,MAAM4oB,YAAY,MAAM;AAACrrB,aAAAqrB;AAAArrB,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAG9B,UAAA4C,KAAAwoB,aAAa,SACP,+EACA;AAAsH,QAAAvoB;AAAA,QAAA7C,UAAA4C,IAAA;AAJrHC,WAAAZ,GAAAA,IACP,wDACAW,EAGJ;AAAC5C,cAAA4C;AAAA5C,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAAyC,MAAAzC,UAAA6C,IAAA;AAPLC,uDACa,SAAAL,IACE,WAAAI,IAMd,UAAA,WAED;AAAS7C,cAAAyC;AAAAzC,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,UAAAorB,YAAAprB,EAAA,EAAA,MAAAyrB,eAAAzrB,EAAA,EAAA,MAAAkb,WAAAlb,EAAA,EAAA,MAAAsrB,gBAAAtrB,UAAAurB,mBAAAvrB,EAAA,EAAA,MAAAwrB,OAAA;AAERzoB,YAAAqoB,aAAa,SAAK7pB,2BAAAA,KAAAkQ,WAAAA,UAAA,EAEX,UAAA;AAAA,QAAA9P,2BAAAA,aAAe,WAAA,mDAAA,CAAkD;AAAA,uCAChEC,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,yEACb,UAAA,WAED;AAAA,uCACC+pB,KAAAA,mBAAA,EACiBL,cACEC,gBAAAA,iBACTC,OACEtQ,SACIuQ,YAAAA,CAAW;AAAA,MAAA,GAC1B;AAETzrB,cAAAorB;AAAAprB,cAAAyrB;AAAAzrB,cAAAkb;AAAAlb,cAAAsrB;AAAAtrB,cAAAurB;AAAAvrB,cAAAwrB;AAAAxrB,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAA8C,OAAA9C,UAAA+C,OAAA/C,EAAA,EAAA,MAAAwC,IAAA;AAhDLS,YAAA1B,2BAAAA,KAAA,OAAA,EAAe,WAAA,qCACXX,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAMA0B;AAAAA,QAWAM;AAAAA,QAYCC;AAAAA,MAAAA,GAkBL;AAAM/C,cAAA8C;AAAA9C,cAAA+C;AAAA/C,cAAAwC;AAAAxC,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,WAjDNiD;AAAAA,EAiDM;AClCd,QAAM2oB,iBAAiB;AAGvB,QAAMC,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrB,WAASC,gBAAmBvoB,KAAawoB,UAAgB;AACrD,QAAI;AACA,YAAMC,MAAMhS,aAAaC,QAAQ2R,iBAAiBroB,GAAG;AACrD,aAAOyoB,MAAMhR,KAAKC,MAAM+Q,GAAG,IAAID;AAAAA,IACnC,QAAQ;AACJ,aAAOA;AAAAA,IACX;AAAA,EACJ;AAEA,WAASE,cAAiB1oB,KAAamF,OAAU;AAC7C,QAAI;AACAsR,mBAAagD,QAAQ4O,iBAAiBroB,KAAKyX,KAAKqG,UAAU3Y,KAAK,CAAC;AAAA,IACpE,QAAQ;AAAA,IAAE;AAAA,EACd;AAEA,WAASwjB,WAAWxjB,OAAoB;AACpC,QAAI;AACA,aAAOsS,KAAKqG,UAAU3Y,OAAO,MAAM,CAAC;AAAA,IACxC,QAAQ;AACJ,aAAO2M,OAAO3M,KAAK;AAAA,IACvB;AAAA,EACJ;AAgBA,WAASyjB,0BACLzB,MACA0B,aACAxZ,aACqB;AACrB,QAAI,CAACwZ,eAAe,CAACxZ,aAAajD,eAAe,CAAA;AAGjD,UAAM0c,qCAAqB7e,IAAAA;AAG3B,UAAM8e,sBAAsB;AAC5B,QAAI/lB;AACJ,YAAQA,IAAI+lB,oBAAoBC,KAAK7B,IAAI,OAAO,MAAM;AAClD2B,qBAAeze,IAAIrH,EAAE,CAAC,CAAC;AAAA,IAC3B;AAGA,UAAMimB,iBAAiB;AACvB,YAAQjmB,IAAIimB,eAAeD,KAAK7B,IAAI,OAAO,MAAM;AAC7C,UAAI,CAAC,CAAC,cAAc,QAAQ,YAAY,UAAU,UAAU,QAAQ,EAAE5iB,SAASvB,EAAE,CAAC,CAAC,GAAG;AAClF8lB,uBAAeze,IAAIrH,EAAE,CAAC,CAAC;AAAA,MAC3B;AAAA,IACJ;AAEA,QAAI8lB,eAAeI,SAAS,EAAG,QAAO,CAAA;AAGtC,QAAI3N,OAAc,CAAA;AAClB,QAAIsN,aAAatO,QAAQc,MAAMC,QAAQuN,YAAYtO,IAAI,GAAG;AACtDgB,aAAOsN,YAAYtO;AAAAA,IACvB,WAAWc,MAAMC,QAAQuN,WAAW,GAAG;AACnCtN,aAAOsN;AAAAA,IACX;AAEA,UAAMM,QAAQ5N,KAAKnP,SAAS,KAAKmP,KAAKtK,KAAKmY,CAAAA,MAAKA,GAAGhjB,MAAM,IAAI;AAC7D,QAAI,CAAC+iB,MAAO,QAAO,CAAA;AAEnB,UAAMzZ,UAAiC,CAAA;AACvC,eAAW9Q,QAAQkqB,gBAAgB;AAC/B,YAAMO,aAAa1Z,MAAAA,YAAY/Q,IAAI;AACnC,YAAMuK,MAAMkG,YAAYvG,KAAKkE,CAAAA,MAAK;AAC9B,cAAMhE,YAAagE,EAAUnE,SAAS8G,MAAAA,YAAY3C,EAAEpO,IAAI;AACxD,eAAOoO,EAAEpO,SAASA,QAAQoK,cAAcqgB,cAAc1Z,kBAAY3C,EAAEpO,IAAI,MAAMyqB;AAAAA,MAClF,CAAC;AACD,UAAIlgB,KAAK;AACLuG,gBAAQlL,KAAK;AAAA,UACT8kB,gBAAgBngB,IAAIvK;AAAAA,UACpByR,YAAYlH;AAAAA,UACZ6G,UAAU;AAAA,QAAA,CACb;AAAA,MACL;AAAA,IACJ;AAEA,WAAON;AAAAA,EACX;AAIO,WAASxM,WAAW;AAEvB,UAAMqmB,gBAAgBvsB,KAAAA,iBAAAA;AACtB,UAAMwsB,eAAeC,KAAAA,gBAAAA;AACrB,UAAMC,YAAYC,KAAAA,aAAAA;AAClB,UAAMC,WAAW5T,KAAAA,sBAAAA;AACjB,UAAMC,qBAAqBC,KAAAA,4BAAAA;AAC3B,UAAML,uBAAuBC,KAAAA,8BAAAA;AAC7B,UAAM;AAAA,MAAE/M;AAAAA,IAAAA,IAAM6C,oBAAAA;AAGd,UAAMie,iBAAiBN,cAAcM;AACrC,UAAM3B,cAAcqB,cAAcO,gBAAgBC;AAGlD,UAAM,CAAC1S,MAAMC,OAAO,IAAI9L,MAAAA,SAAsB,MAC1C+c,gBAAgB,QAAQ,CAAC;AAAA,MAAEniB,IAAI;AAAA,MACvChK,MAAM;AAAA,MACN+qB,MAAMmB;AAAAA,IAAAA,CAAc,CAAC,CACjB;AACA,UAAM,CAACtQ,aAAaC,cAAc,IAAIzM,MAAAA,SAAiB,MACnD+c,gBAAgB,aAAa,GAAG,CACpC;AACA,UAAM,CAAClO,QAAQ2P,SAAS,IAAIxe,MAAAA,SAAiC,IAAI;AACjE,UAAM,CAACye,WAAWC,YAAY,IAAI1e,MAAAA,SAAS,KAAK;AAChD,UAAM,CAAC8B,UAAU+P,WAAW,IAAI7R,MAAAA,SAAsB,MAClD+c,gBAAgB,YAAY,CAAA,CAAE,CAClC;AACA,UAAM,CAAChb,SAAS+P,UAAU,IAAI9R,MAAAA,SAAmB,MAC7C+c,gBAAgB,WAAW,CAAA,CAAE,CACjC;AACA,UAAM,CAAC4B,gBAAgBC,iBAAiB,IAAI5e,MAAAA,SAAS,KAAK;AAC1D,UAAM,CAAC6e,aAAaC,cAAc,IAAI9e,MAAAA,SAAS,EAAE;AACjD,UAAM,CAAC+e,YAAYC,aAAa,IAAIhf,MAAAA,SAAuC,MAAM;AAGjF,UAAM,CAACuc,cAAcC,eAAe,IAAIxc,MAAAA,SAAgC,IAAI;AAC5E,UAAM,CAACqc,UAAUC,WAAW,IAAItc,MAAAA,SAAyB,KAAK;AAE9D,UAAM,CAACwY,aAAaC,cAAc,IAAIzY,MAAAA,SAAiB,MAAM;AACzD,UAAI;AACA,cAAMif,SAAShU,aAAaC,QAAQ2R,iBAAiB,cAAc;AACnE,eAAOoC,SAASC,OAAOD,MAAM,IAAI;AAAA,MACrC,QAAQ;AAAE,eAAO;AAAA,MAAI;AAAA,IACzB,CAAC;AACD,UAAM,CAACtG,cAAcC,eAAe,IAAI5Y,MAAAA,SAAiB,MAAM;AAC3D,UAAI;AACA,cAAMif,WAAShU,aAAaC,QAAQ2R,iBAAiB,eAAe;AACpE,eAAOoC,WAASC,OAAOD,QAAM,IAAI;AAAA,MACrC,QAAQ;AAAE,eAAO;AAAA,MAAI;AAAA,IACzB,CAAC;AAGD,UAAMhd,YAAY4J,KAAKvO,KAAKC,CAAAA,QAAKA,IAAE3C,OAAO4R,WAAW,KAAKX,KAAK,CAAC;AAGhE,UAAMsT,kBAAkB3mB,MAAAA,QAAQ,MAAM;AAClC,YAAMqL,cAAc4G,oBAAoB5G,eAAe,CAAA;AACvD,aAAOA,YAAYnR,IAAIiL,CAAAA,SAAQ;AAAA,QAC3BvK,MAAMuK,IAAIvK;AAAAA,QACVxC,MAAM+M,IAAI/M;AAAAA,QACVwqB,YAAYje,OAAOwD,KAAKhD,IAAIyd,cAAc,CAAA,CAAE;AAAA,MAAA,EAC9C;AAAA,IACN,GAAG,CAAC3Q,oBAAoB5G,WAAW,CAAC;AAEpC,UAAMiW,kBAAkBthB,MAAAA,QAAQ,MAAM2mB,gBAAgBzsB,IAAI8O,CAAAA,MAAKA,EAAEpO,IAAI,GAAG,CAAC+rB,eAAe,CAAC;AAGzF,UAAM1C,QAAQjkB,MAAAA,QAAQ,MAAwB;AAC1C,YAAM4mB,WAAWf,gBAAgB5B,SAAS,CAAA,GAAI/pB,IAAI2sB,CAAAA,OAAM;AAAA,QACpDC,KAAKD,EAAEC;AAAAA,QACPC,aAAaF,EAAEE;AAAAA,QACfC,OAAOH,EAAEG;AAAAA,QACTC,UAAUJ,EAAEI;AAAAA,QACZrS,OAAOiS,EAAEjS;AAAAA,MAAAA,EACX;AAEF,UAAIsP,eAAe,CAAC0C,QAAQ3Z,KAAK4Z,SAAKA,IAAEC,QAAQ5C,YAAY4C,GAAG,GAAG;AAC9DF,gBAAQM,QAAQ;AAAA,UACZJ,KAAK5C,YAAY4C;AAAAA,UACjBC,aAAa7C,YAAY6C;AAAAA,UACzBC,OAAO9C,YAAY8C;AAAAA,UACnBC,UAAU/C,YAAY+C;AAAAA,UACtBrS,OAAOsP,YAAYtP;AAAAA,QAAAA,CACtB;AAAA,MACL;AACA,aAAOgS;AAAAA,IACX,GAAG,CAACf,gBAAgB5B,OAAOC,WAAW,CAAC;AAGvC,UAAMiD,wBAAwBnnB,MAAAA,QAAQ,MAA6B;AAC/D,UAAI,CAACkkB,YAAa,QAAO;AACzB,aAAO;AAAA,QACH4C,KAAK5C,YAAY4C;AAAAA,QACjBC,aAAa7C,YAAY6C;AAAAA,QACzBC,OAAO9C,YAAY8C;AAAAA,QACnBC,UAAU/C,YAAY+C;AAAAA,QACtBrS,OAAOsP,YAAYtP;AAAAA,MAAAA;AAAAA,IAE3B,GAAG,CAACsP,WAAW,CAAC;AAIhB1qB,UAAAA,UAAU,MAAM;AAAEkrB,oBAAc,QAAQrR,IAAI;AAAA,IAAG,GAAG,CAACA,IAAI,CAAC;AACxD7Z,UAAAA,UAAU,MAAM;AAAEkrB,oBAAc,aAAa1Q,WAAW;AAAA,IAAG,GAAG,CAACA,WAAW,CAAC;AAC3Exa,UAAAA,UAAU,MAAM;AAAEkrB,oBAAc,YAAYpb,QAAQ;AAAA,IAAG,GAAG,CAACA,QAAQ,CAAC;AACpE9P,UAAAA,UAAU,MAAM;AAAEkrB,oBAAc,WAAWnb,OAAO;AAAA,IAAG,GAAG,CAACA,OAAO,CAAC;AAEjE/P,UAAAA,UAAU,MAAM;AACZ,UAAI;AAAEiZ,qBAAagD,QAAQ4O,iBAAiB,gBAAgBrE,YAAYxF,UAAU;AAAA,MAAG,QAAQ;AAAA,MAAE;AAAA,IACnG,GAAG,CAACwF,WAAW,CAAC;AAEhBxmB,UAAAA,UAAU,MAAM;AACZ,UAAI;AAAEiZ,qBAAagD,QAAQ4O,iBAAiB,iBAAiBlE,aAAa3F,UAAU;AAAA,MAAG,QAAQ;AAAA,MAAE;AAAA,IACrG,GAAG,CAAC2F,YAAY,CAAC;AAIjB,UAAMiH,mBAAmBjT,kBAAY,CAACgP,SAA6B;AAC/D7P,cAAQhL,UAAQA,KAAKpO,IAAI6K,CAAAA,QAAKA,IAAE3C,OAAO4R,cAAc;AAAA,QAAE,GAAGjP;AAAAA,QAClEoe,MAAMA,QAAQ;AAAA,MAAA,IAAOpe,GAAC,CAAC;AAAA,IACnB,GAAG,CAACiP,WAAW,CAAC;AAEhB,UAAMqT,SAASlT,MAAAA,YAAY,MAAM;AAC7B,YAAM/R,KAAK0L,OAAOqP,KAAKxB,IAAAA,CAAK;AAC5B,YAAMzF,SAAoB;AAAA,QAAE9T;AAAAA,QACpChK,MAAM,UAAUib,KAAKjL,SAAS,CAAC;AAAA,QAC/B+a,MAAMmB;AAAAA,MAAAA;AACEhR,cAAQhL,CAAAA,WAAQ,CAAC,GAAGA,QAAM4N,MAAM,CAAC;AACjCjC,qBAAe7R,EAAE;AAAA,IACrB,GAAG,CAACiR,KAAKjL,MAAM,CAAC;AAEhB,UAAMkf,WAAWnT,kBAAY,CAAC2B,UAAkB;AAC5CxC,cAAQhL,CAAAA,WAAQ;AACZ,cAAMif,WAAWjf,OAAKyB,OAAOhF,CAAAA,QAAKA,IAAE3C,OAAO0T,KAAK;AAChD,YAAIyR,SAASnf,WAAW,GAAG;AACvB,gBAAMof,QAAQ;AAAA,YAAEplB,IAAI0L,OAAOqP,KAAKxB,KAAK;AAAA,YACrDvjB,MAAM;AAAA,YACN+qB,MAAMmB;AAAAA,UAAAA;AACUrQ,yBAAeuT,MAAMplB,EAAE;AACvB,iBAAO,CAAColB,KAAK;AAAA,QACjB;AACA,YAAIxT,gBAAgB8B,OAAO;AACvB7B,yBAAesT,SAASA,SAASnf,SAAS,CAAC,EAAEhG,EAAE;AAAA,QACnD;AACA,eAAOmlB;AAAAA,MACX,CAAC;AAAA,IACL,GAAG,CAACvT,WAAW,CAAC;AAIhB,UAAMyT,cAActT,MAAAA,YAAY,YAAY;AACxC,YAAMuT,SAAShC,WAAWgC;AAC1B,YAAMC,eAAejC,WAAWiC;AAEhC,UAAI,CAACD,QAAQ;AACT,cAAM,IAAI7Z,MAAM,kDAAkD;AAAA,MACtE;AAEA,UAAIgW,aAAa,QAAQ;AACrB,cAAM+D,WAASC,OAAAA,mBAAmB;AAAA,UAC9BC,SAASJ;AAAAA,UACTK,OAAO/kB;AAAAA,QAAAA,CACV;AACD,eAAO;AAAA,UAAA,QAAE4kB;AAAAA,UAAQI,UAAU;AAAA,QAAA;AAAA,MAC/B;AAGA,UAAI,CAACjE,gBAAiBG,eAAeH,aAAa+C,QAAQ5C,YAAY4C,KAAM;AACxE,YAAI,CAACtB,cAAc;AACf,gBAAM,IAAI3X,MAAM,wCAAwC;AAAA,QAC5D;AACA,eAAO;AAAA,UAAE+Z,QAAQpC;AAAAA,UAAcwC,UAAU;AAAA,QAAA;AAAA,MAC7C;AAGA,UAAID;AACJ,UAAIJ,cAAc;AACdI,gBAAS,MAAMJ,kBAAmB3kB;AAAAA,MACtC;AAEA,UAAI,CAAC+kB,OAAO;AACR,cAAM,IAAIla,MAAM,gDAAgD;AAAA,MACpE;AAIA,YAAM+Z,WAASC,OAAAA,mBAAmB;AAAA,QAC9BC,SAASJ;AAAAA,QACTK;AAAAA,MAAAA,CACH;AAED,aAAO;AAAA,QAAEH,QAAAA;AAAAA,QACjBI,UAAU;AAAA,MAAA;AAAA,IACN,GAAG,CAACtC,WAAWF,cAAczB,cAAcG,aAAaL,QAAQ,CAAC;AAIjE,UAAMoE,cAAc9T,kBAAY,OAAO+T,iBAA0B;AAC7D,YAAM/E,SAAO+E,gBAAgBze,WAAW0Z,QAAQ;AAChD,UAAI,CAACA,OAAK/f,OAAQ;AAElB8iB,mBAAa,IAAI;AACjBF,gBAAU,IAAI;AAGd1M,iBAAWhR,CAAAA,WAAQ;AACf,cAAM6f,UAAU7f,OAAKyB,OAAOqe,CAAAA,MAAKA,MAAMjF,MAAI;AAC3C,eAAO,CAAC,GAAGgF,SAAShF,MAAI,EAAEhJ,MAAM,GAAY;AAAA,MAChD,CAAC;AAED,YAAMkO,iBAAiC,CAAA;AACvC,YAAMC,YAAY5M,YAAYC,IAAAA;AAC9B,UAAI4M,wBAA6B;AAGjC,YAAMC,kBAAkB;AAAA,QACpBC,KAAK/a,QAAQ+a;AAAAA,QACb9a,MAAMD,QAAQC;AAAAA,QACdnB,OAAOkB,QAAQlB;AAAAA,QACfkc,MAAMhb,QAAQgb;AAAAA,MAAAA;AAGlB,YAAMC,iBAAiBA,CAAC/d,SAA+B,IAAIge,SAAgB;AACvEP,uBAAe7nB,KAAK;AAAA,UAAEoK;AAAAA,UAClCge;AAAAA,UACAC,WAAW1L,KAAKxB,IAAAA;AAAAA,QAAI,CAAG;AACX6M,wBAAgB5d,IAAI,EAAE,GAAGge,IAAI;AAAA,MACjC;AAEA,UAAI;AACAlb,gBAAQ+a,MAAME,eAAe,KAAK;AAClCjb,gBAAQC,OAAOgb,eAAe,MAAM;AACpCjb,gBAAQlB,QAAQmc,eAAe,OAAO;AACtCjb,gBAAQgb,OAAOC,eAAe,MAAM;AAGpC,cAAM;AAAA,UAAEf,QAAAA;AAAAA,UAAQI;AAAAA,QAAAA,IAAa,MAAMP,YAAAA;AACnC,YAAIO,UAAU;AACVO,kCAAwBX;AAAAA,QAC5B;AAGA,cAAM7uB,UAAU;AAAA,UACZgtB,MAAMhC,iBAAiBG,cAAc;AAAA,YACjC4C,KAAK5C,YAAY4C;AAAAA,YACjBC,aAAa7C,YAAY6C;AAAAA,YACzBC,OAAO9C,YAAY8C;AAAAA,YACnBpS,OAAOsP,YAAYtP;AAAAA,UAAAA,IACnB;AAAA,UACJvJ,aAAasb;AAAAA,QAAAA;AAKjB,cAAMmC,gBAAgBnkB,OAAOokB,eAAe,iBAAkB;AAAA,QAAE,CAAC,EAAEC;AACnE,cAAM5sB,KAAK,IAAI0sB,cAAc,UAAU,WAAW3F,MAAI;AAEtD,cAAMhiB,QAAQ,MAAM/E,GAAGwrB,UAAQ7uB,OAAO;AACtC,cAAMkwB,aAAWvN,YAAYC,IAAAA,IAAQ2M;AAErCtC,kBAAU;AAAA,UACN7kB;AAAAA,UACAuM,SAAS2a;AAAAA,UACTY,UAAAA;AAAAA,UACAJ,WAAW1L,KAAKxB,IAAAA;AAAAA,QAAI,CACvB;AAGD,YAAIxa,OAAOoV,QAAQc,MAAMC,QAAQnW,MAAMoV,IAAI,GAAG;AAC1CiQ,wBAAc,OAAO;AAAA,QACzB,WAAW6B,eAAejgB,SAAS,KAAKjH,UAAU6B,QAAW;AACzDwjB,wBAAc,SAAS;AAAA,QAC3B,OAAO;AACHA,wBAAc,MAAM;AAAA,QACxB;AAAA,MACJ,SAAS7Q,KAAU;AACf,cAAMsT,WAAWvN,YAAYC,IAAAA,IAAQ2M;AACrCtC,kBAAU;AAAA,UACN7kB,OAAO6B;AAAAA,UACP0K,SAAS2a;AAAAA,UACTY;AAAAA,UACAzc,OAAOmJ,KAAK/H,WAAWE,OAAO6H,GAAG;AAAA,UACjCkT,WAAW1L,KAAKxB,IAAAA;AAAAA,QAAI,CACvB;AACD6K,sBAAc,MAAM;AAAA,MACxB,UAAA;AACI9Y,gBAAQ+a,MAAMD,gBAAgBC;AAC9B/a,gBAAQC,OAAO6a,gBAAgB7a;AAC/BD,gBAAQlB,QAAQgc,gBAAgBhc;AAChCkB,gBAAQgb,OAAOF,gBAAgBE;AAC/BxC,qBAAa,KAAK;AAElB,YAAIqC,uBAAuB;AAEvBA,gCAAsBW,IAAIC,WAAAA;AAAAA,QAC9B;AAAA,MACJ;AAAA,IACJ,GAAG,CAAC1f,WAAW0Z,MAAMsE,aAAa1D,cAAcG,aAAayC,eAAe,CAAC;AAI7E,UAAMyC,cAAcjV,MAAAA,YAAY,MAAM;AAClC,UAAI,CAACkS,YAAYjjB,KAAAA,KAAU,CAACqG,WAAW0Z,KAAK/f,OAAQ;AACpD,YAAM+G,UAAqB;AAAA,QACvB/H,IAAI0L,OAAOqP,KAAKxB,KAAK;AAAA,QACrBvjB,MAAMiuB,YAAYjjB,KAAAA;AAAAA,QAClB+f,MAAM1Z,UAAU0Z;AAAAA,QAChBjG,WAAWC,KAAKxB,IAAAA;AAAAA,MAAI;AAExBtC,kBAAY/Q,CAAAA,WAAQ,CAAC6B,SAAS,GAAG7B,MAAI,CAAC;AACtC8d,wBAAkB,KAAK;AACvBE,qBAAe,EAAE;AACjBV,eAASxN,KAAK;AAAA,QAAExN,MAAM;AAAA,QAC9BgD,SAAS;AAAA,MAAA,CAAiB;AAAA,IACtB,GAAG,CAACyY,aAAa5c,WAAW0Z,MAAMyC,QAAQ,CAAC;AAE3C,UAAMyD,gBAAgBlV,kBAAY,CAAC/R,SAAe;AAC9CiX,kBAAY/Q,YAAQA,OAAKyB,OAAOlO,OAAKA,EAAEuG,OAAOA,IAAE,CAAC;AAAA,IACrD,GAAG,CAAA,CAAE;AAIL,UAAMknB,eAAenV,MAAAA,YAAY,MAAM;AACnC,UAAI,CAACkC,QAAQlV,MAAO;AACpB,YAAMqc,OAAO,IAAIC,KAAK,CAACkH,WAAWtO,OAAOlV,KAAK,CAAC,GAAG;AAAA,QAAEyJ,MAAM;AAAA,MAAA,CAAoB;AAC9E,YAAM8S,MAAMC,IAAIC,gBAAgBJ,IAAI;AACpC,YAAMK,IAAInM,SAASoM,cAAc,GAAG;AACpCD,QAAEE,OAAOL;AACTG,QAAEG,WAAW,iBAAiBb,KAAKxB,IAAAA,CAAK;AACxCkC,QAAEK,MAAAA;AACFP,UAAIQ,gBAAgBT,GAAG;AAAA,IAC3B,GAAG,CAACrH,MAAM,CAAC;AAIX,UAAMkT,YAAYvpB,MAAAA,QAAQ,MAAM;AAC5B,UAAI,CAACqW,QAAQlV,MAAO,QAAO;AAAA,QAAE8D,SAAS,CAAA;AAAA,QAC9CsR,MAAM,CAAA;AAAA;AAEE,UAAIgB,OAAc,CAAA;AAClB,UAAIlB,OAAOlV,OAAOoV,QAAQc,MAAMC,QAAQjB,OAAOlV,MAAMoV,IAAI,GAAG;AACxDgB,eAAOlB,OAAOlV,MAAMoV,KAAKrc,IAAI,CAACsvB,YAAiB;AAAA,UAC3CpnB,IAAIonB,OAAOpnB;AAAAA,UACX,GAAGonB,OAAO1d;AAAAA,UACV,GAAI0d,OAAO1d,SAAS,KAAK0d;AAAAA,QAAAA,EAC3B;AAAA,MACN,WAAWnS,MAAMC,QAAQjB,OAAOlV,KAAK,GAAG;AACpCoW,eAAOlB,OAAOlV;AAAAA,MAClB;AAEA,UAAIoW,KAAKnP,WAAW,EAAG,QAAO;AAAA,QAAEnD,SAAS,CAAA;AAAA,QACjDsR,MAAM,CAAA;AAAA;AAEE,YAAMpO,2BAAWlC,IAAAA;AACjBsR,WAAK4C,MAAM,GAAG,EAAE,EAAEjV,QAAQoY,CAAAA,QAAO;AAC7B,YAAIA,OAAO,OAAOA,QAAQ,UAAU;AAChC3Y,iBAAOwD,KAAKmV,GAAG,EAAEpY,QAAQukB,OAAKthB,KAAK9B,IAAIojB,CAAC,CAAC;AAAA,QAC7C;AAAA,MACJ,CAAC;AAED,YAAMxkB,UAAgCoS,MAAMlM,KAAKhD,IAAI,EAAEjO,IAAI8B,CAAAA,SAAQ;AAAA,QAC/DA;AAAAA,QACAF,OAAOE;AAAAA,QACPyT,OAAOzT,QAAQ,OAAO,MAAM;AAAA,MAAA,EAC9B;AAEF,aAAO;AAAA,QAAEiJ;AAAAA,QACjBsR,MAAMgB;AAAAA,MAAAA;AAAAA,IACF,GAAG,CAAClB,MAAM,CAAC;AAIX,UAAM4I,qBAAqBjf,MAAAA,QAAQ,MAAM;AACrC,UAAI,CAACqW,QAAQlV,SAASkV,OAAO7J,cAAc,CAAA;AAC3C,aAAOoY,0BACHnb,WAAW0Z,QAAQ,IACnB9M,OAAOlV,OACP8Q,oBAAoB5G,eAAe,EACvC;AAAA,IACJ,GAAG,CAACgL,QAAQ5M,WAAW0Z,MAAMlR,oBAAoB5G,WAAW,CAAC;AAE7D,UAAM+T,sBAAsBjL,kBAAY,CAACgE,YAAmF;AACxH,UAAI,CAACA,WAAW8G,mBAAmB7W,WAAW,UAAU,CAAA;AACxD,aAAO6W,mBACFlV,OAAOoV,CAAAA,OAAMhH,QAAQgH,GAAGnT,QAAQ,KAAK,IAAI,EACzC9R,IAAIilB,CAAAA,UAAO;AAAA,QACR9S,YAAY8S;AAAAA,QACZE,UAAUlH,QAAQgH,KAAGnT,QAAQ;AAAA,MAAA,EAC/B;AAAA,IACV,GAAG,CAACiT,kBAAkB,CAAC;AAIvB,UAAM7B,kBAAkBjJ,MAAAA,YAAY,MAAM;AACtC,UAAIoV,UAAUhT,KAAKnO,WAAW,EAAG;AACjC,YAAMiV,UAAUkM,UAAUtkB,QAAQ/K,IAAI8O,SAAKA,IAAEhN,GAAG,EAAEiN,KAAK,GAAG;AAC1D,YAAMsO,SAAOgS,UAAUhT,KAAKrc,IAAIojB,WAC5BiM,UAAUtkB,QAAQ/K,IAAI8O,CAAAA,QAAK;AACvB,cAAM+H,MAAMuM,MAAItU,IAAEhN,GAAG;AACrB,cAAMK,MAAM0U,QAAQ,QAAQA,QAAQ/N,SAAY,KAAK8K,OAAOiD,GAAG;AAC/D,eAAO1U,IAAIkE,SAAS,GAAG,IAAI,IAAIlE,GAAG,MAAMA;AAAAA,MAC5C,CAAC,EAAE4M,KAAK,GAAG,CACf;AACA,YAAMsU,MAAM,CAACF,SAAS,GAAG9F,MAAI,EAAEtO,KAAK,IAAI;AACxC,YAAMuU,SAAO,IAAIC,KAAK,CAACF,GAAG,GAAG;AAAA,QAAE3S,MAAM;AAAA,MAAA,CAAY;AACjD,YAAM8S,QAAMC,IAAIC,gBAAgBJ,MAAI;AACpC,YAAMK,MAAInM,SAASoM,cAAc,GAAG;AACpCD,UAAEE,OAAOL;AACTG,UAAEG,WAAW,eAAc,oBAAIb,KAAAA,GAAOc,cAAc9D,MAAM,GAAG,EAAE,CAAC;AAChE0D,UAAEK,MAAAA;AACFP,UAAIQ,gBAAgBT,KAAG;AAAA,IAC3B,GAAG,CAAC6L,SAAS,CAAC;AAEd,UAAMjL,uBAAuBnK,MAAAA,YAAY,MAAM;AAC3C,UAAIoV,UAAUhT,KAAKnO,WAAW,EAAG;AACjC,YAAMiV,YAAUkM,UAAUtkB,QAAQ/K,IAAI8O,CAAAA,QAAKA,IAAEhN,GAAG;AAChD,YAAMuiB,YAAY,KAAKlB,UAAQpU,KAAK,KAAK,CAAC;AAC1C,YAAMuV,aAAa,KAAKnB,UAAQnjB,IAAI,MAAM,KAAK,EAAE+O,KAAK,KAAK,CAAC;AAC5D,YAAMwV,WAAW8K,UAAUhT,KAAKrc,IAAIojB,WAChC,KAAKD,UAAQnjB,IAAIkuB,CAAAA,QAAK;AAClB,cAAMrX,QAAMuM,MAAI8K,GAAC;AACjB,YAAIrX,UAAQ,QAAQA,UAAQ/N,OAAW,QAAO;AAC9C,eAAO8K,OAAOiD,KAAG,EAAE4H,QAAQ,OAAO,KAAK,EAAEA,QAAQ,OAAO,GAAG;AAAA,MAC/D,CAAC,EAAE1P,KAAK,KAAK,CAAC,IAClB;AACA,YAAM0V,WAAW,CAACJ,WAAWC,YAAY,GAAGC,QAAQ,EAAExV,KAAK,IAAI;AAC/DR,gBAAUC,UAAUC,UAAUgW,QAAQ,EAAE5f,KAAK,MAAM;AAC/C6mB,iBAASxN,KAAK;AAAA,UAAExN,MAAM;AAAA,UAClCgD,SAAS7I,EAAE,4BAA4B;AAAA,QAAA,CAAG;AAAA,MAClC,CAAC,EAAE6Z,MAAM,MAAM;AACXgH,iBAASxN,KAAK;AAAA,UAAExN,MAAM;AAAA,UAClCgD,SAAS7I,EAAE,iCAAiC;AAAA,QAAA,CAAG;AAAA,MACvC,CAAC;AAAA,IACL,GAAG,CAACwkB,WAAW3D,UAAU7gB,CAAC,CAAC;AAI3B,WACI/K,2BAAAA,KAAC,OAAA,EAAI,WAAU,+BAEX,UAAA;AAAA,MAAAI,+BAAC,SAAI,WAAU,6BACX,UAAAA,+BAACkmB,GAAAA,iBAAA,EACG,aAAY,cACZ,kBAAkBN,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACI7lB,2BAAAA,IAAC,mBACG,aAAausB,iBACb,UACA,SACA,iBAAkBxD,CAAAA,WAASiE,iBAAiBjE,MAAI,GAChD,iBAAiBkG,eACjB,cAAelG,CAAAA,WAASiE,iBAAiBjE,MAAI,EAAA,CAAE,GAGvD,aACInpB,gCAAC,OAAA,EAAI,WAAU,wCAEX,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,gFAAgFqN,GAAAA,kBAAkB,GAClH,UAAA;AAAA,UAAA3N,2BAAAA,IAAC,SAAI,WAAU,oDACX,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,YAAAI,2BAAAA,IAACuP,GAAAA,MAAA,EAAK,OAAOqK,aAAa,eAAeC,gBAAgB,SAAQ,QAAO,WAAU,2BAA0B,gBAAe,gCACtHZ,UAAAA,KAAKnZ,IAAIygB,SACN3gB,2BAAAA,KAAC6P,GAAAA,KAAA,EAAiB,OAAO8Q,IAAIvY,IAAI,WAAU,yDACvC,UAAA;AAAA,cAAAhI,2BAAAA,IAACmmB,YAAAA,cAAA,EAAa,MAAMxlB,GAAAA,SAASmN,UAAU,WAAU,uCAAqC;AAAA,cACtF9N,2BAAAA,IAAC,QAAA,EAAK,WAAU,YAAYugB,cAAIviB,MAAK;AAAA,cACpCib,KAAKjL,SAAS,KACXhO,+BAAC4N,GAAAA,cACG,MAAK,YACL,SAAUO,CAAAA,MAAM;AAAEA,kBAAEC,gBAAAA;AAAmB8e,yBAAS3M,IAAIvY,EAAE;AAAA,cAAG,GACzD,WAAU,uFAEV,UAAAhI,2BAAAA,IAAComB,qBAAM,MAAMzlB,GAAAA,SAASmN,UAAS,EAAA,CACnC;AAAA,YAAA,EAAA,GAVEyS,IAAIvY,EAYd,CACH,GACL;AAAA,YACAhI,2BAAAA,IAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,SAASqf,QACT,WAAU,sBAEV,UAAAjtB,2BAAAA,IAACqmB,sBAAA,EAAS,MAAM1lB,GAAAA,SAASmN,UAAS,EAAA,CACtC;AAAA,UAAA,EAAA,CACJ,EAAA,CACJ;AAAA,UACAlO,2BAAAA,KAAC,OAAA,EAAI,WAAU,kDACX,UAAA;AAAA,YAAAI,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,uBACX,UAAArlB,+BAAC4N,GAAAA,cACG,MAAK,SACL,SAAS,MAAM;AACXse,6BAAe,EAAE;AACjBF,gCAAkB,IAAI;AAAA,YAC1B,GACA,UAAU,CAAC3c,WAAW0Z,KAAK/f,KAAAA,GAE3B,UAAAhJ,2BAAAA,IAACsvB,YAAAA,UAAA,EAAS,MAAM3uB,GAAAA,SAASmN,SAAAA,CAAS,GACtC,GACJ;AAAA,YAECmO,QAAQlV,SACL/G,+BAACqlB,GAAAA,WAAQ,OAAM,yBACX,yCAACzX,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAASshB,cAC9B,UAAAlvB,2BAAAA,IAACuvB,YAAAA,cAAA,EAAa,MAAM5uB,YAASmN,UAAS,GAC1C,EAAA,CACJ;AAAA,4CAGHgB,GAAAA,QAAA,EACG,MAAK,SACL,OAAM,WACN,UAAU+c,aAAa,CAACxc,WAAW0Z,KAAK/f,KAAAA,GACxC,SAAS,MAAM6kB,eAEdhC,UAAAA;AAAAA,cAAAA,YAAY7rB,2BAAAA,IAACyN,qBAAA,EAAiB,MAAK,YAAW,WAAU,OAAA,CAAM,IAAKzN,2BAAAA,IAACymB,YAAAA,UAAA,EAAS,MAAM9lB,GAAAA,SAASmN,UAAU,WAAU,QAAM;AAAA,cAAE;AAAA,YAAA,EAAA,CAE7H;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,uCAGC,OAAA,EAAI,WAAU,6BACX,UAAA9N,2BAAAA,IAACkmB,oBAAA,EACG,aAAY,YACZ,kBAAkBH,cAClB,mBAAmBC,iBACnB,gBAAgB,KAChB,YACIpmB,gCAAC,OAAA,EAAI,WAAU,+CAEX,UAAA;AAAA,UAAAI,+BAAC,OAAA,EAAI,WAAU,6HACX,UAAAA,2BAAAA,IAAC,0BACG,UACA,aACA,cACA,iBACA,OACA,SAASyrB,gBAAgBlS,SACzB,aAAawT,uBAAsB,GAE3C;AAAA,UACA/sB,2BAAAA,IAAC,SAAI,WAAU,kBACX,yCAAC,gBAAA,EACG,OAAOqP,WAAW0Z,QAAQ,IAC1B,UAAUiE,kBACV,OAAQrkB,CAAAA,iBAAiBklB,YAAYllB,YAAY,GACjD,iBACA,aAAa4jB,iBACb,WAAS,KAAA,CAAA,EAAA,CAEjB;AAAA,QAAA,EAAA,CACJ,GAEJ,aACI3sB,2BAAAA,KAAC,OAAA,EAAI,WAAU,yFAEX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,mFAAmFqN,GAAAA,kBAAkB,GACrH,UAAA;AAAA,YAAA3N,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,mGACnC0K,UAAAA,EAAE,0BAA0B,GACjC;AAAA,YAECsR,UACGrc,2BAAAA,KAAAkQ,qBAAA,EACI,UAAA;AAAA,cAAA9P,2BAAAA,IAAC,OAAA,EAAI,WAAU,YAAA,CAAW;AAAA,cAE1BJ,2BAAAA,KAAC2P,GAAAA,MAAA,EAAK,OAAO4c,YAAY,eAAgBxV,CAAAA,UAAQyV,cAAczV,KAAmC,GAAG,SAAQ,QAAO,WAAU,kBAC1H,UAAA;AAAA,gBAAA3W,2BAAAA,IAACyP,GAAAA,KAAA,EAAI,OAAM,QAAO,UAAA,QAAI;AAAA,gBACrB0f,UAAUhT,KAAKnO,SAAS,oCAAMyB,QAAA,EAAI,OAAM,SAAQ,UAAA,QAAA,CAAK;AAAA,gBACrDwM,OAAO3I,QAAQtF,SAAS,KAAKpO,2BAAAA,KAAC6P,GAAAA,KAAA,EAAI,OAAM,WAAU,UAAA;AAAA,kBAAA;AAAA,kBAAUwM,OAAO3I,QAAQtF;AAAAA,kBAAO;AAAA,gBAAA,EAAA,CAAC;AAAA,cAAA,GACxF;AAAA,6CAECwhB,GAAAA,MAAA,EAAK,MAAK,YAAW,aAAavT,OAAO7J,QAAQ,cAAc,eAC3D6J,UAAAA,OAAO7J,QAAQ,UAAU,GAAG6J,OAAO4S,SAASxa,QAAQ,CAAC,CAAC,KAAA,CAC3D;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GAER;AAAA,UAGAzU,2BAAAA,KAAC,OAAA,EAAI,WAAU,mDACVisB,UAAAA;AAAAA,YAAAA,4CACI,OAAA,EAAI,WAAU,8CACX,UAAAjsB,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,cAAAI,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,SAAA,CAAQ;AAAA,6CAC9BxN,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,iGAA+F,UAAA,sBAAA,CAErI;AAAA,YAAA,EAAA,CACJ,EAAA,CACJ;AAAA,YAGH,CAAC4rB,aAAa,CAAC5P,UACZjc,2BAAAA,IAAC,OAAA,EAAI,WAAU,8FACX,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,cAAAI,2BAAAA,IAAC,SAAI,WAAU,qCAAoC,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,wFAAsF,EAAA,CAAE;AAAA,cACtQJ,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,SAAQ,UAAA;AAAA,gBAAA;AAAA,gBAA2BD,2BAAAA,IAAC,OAAA,EAAI,WAAU,kFAAiF,UAAA,WAAO;AAAA,gBAAM;AAAA,cAAA,EAAA,CAAO;AAAA,YAAA,EAAA,CAC/K,EAAA,CACJ;AAAA,YAGH,CAAC6rB,aAAa5P,QAAQ7J,wCAClB,OAAA,EAAI,WAAU,gEACX,UAAApS,2BAAAA,IAAC0N,KAAAA,aACG,OAAM,mBACN,OAAOuO,OAAO7J,OAAM,GAE5B;AAAA,YAGH,CAACyZ,aAAa5P,UAAU,CAACA,OAAO7J,SAAS+Z,eAAe,UACrDnsB,2BAAAA,IAAC,OAAA,EAAI,WAAU,mJACVic,UAAAA,OAAOlV,UAAU6B,SACd5I,2BAAAA,IAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,8BAAA,CAA2B,IAEvEA,2BAAAA,IAAC,eAAA,EAAc,OAAOic,OAAOlV,MAAAA,CAAM,EAAA,CAE3C;AAAA,YAGH,CAAC8kB,aAAa5P,UAAU,CAACA,OAAO7J,SAAS+Z,eAAe,WAAWgD,UAAUhT,KAAKnO,SAAS,KACxFpO,gCAAC,OAAA,EAAI,WAAU,mDAEVilB,UAAAA;AAAAA,cAAAA,mBAAmB7W,SAAS,KACzBpO,2BAAAA,KAAC,OAAA,EAAI,WAAWU,OAAI,2FAA2FqN,GAAAA,kBAAkB,GAC7H,UAAA;AAAA,gBAAA3N,+BAACqlB,GAAAA,SAAA,EAAQ,OAAO1a,EAAE,oCAAoC,GAClD,UAAA3K,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,6HAA6H0K,UAAAA,EAAE,gBAAgB,GAAE,GAC7L;AAAA,gBACA3K,2BAAAA,IAAC,SAAI,WAAU,0DACV6kB,6BAAmB/kB,IAAIilB,CAAAA,wCACnBM,GAAAA,SAAA,EAAgC,OAAO,GAAGN,KAAG9S,WAAWjU,IAAI,KAAK+mB,KAAGmG,cAAc,KAC/E,UAAAtrB,2BAAAA,KAAC,QAAA,EAAK,WAAU,oOACX,UAAA;AAAA,kBAAA,OAAOmlB,KAAG9S,WAAW/T,SAAS,YAC3B8B,+BAACO,KAAAA,eAAY,kBAAkB;AAAA,oBAAErC,MAAM6mB,KAAG9S,WAAW/T;AAAAA,kBAAAA,GAAiB,WAAU,eAAa;AAAA,kBAEhG6mB,KAAG9S,WAAWjU;AAAAA,gBAAAA,EAAAA,CACnB,EAAA,GANU+mB,KAAGmG,cAOjB,CACH,EAAA,CACL;AAAA,cAAA,GACJ;AAAA,cAEJlrB,2BAAAA,IAAC,OAAA,EAAI,WAAU,6CACX,UAAAA,2BAAAA,IAACslB,GAAAA,cAAA,EACG,MAAM6J,UAAUhT,MAChB,SACI0I,mBAAmB7W,SAAS,IACtB,CAAC;AAAA,gBAAEpM,KAAK;AAAA,gBAClFF,OAAO;AAAA,gBACP2T,OAAO;AAAA,gBACP8P,UAAU;AAAA,gBACVC,WAAW;AAAA,cAAA,GAAS,GAAG+J,UAAUtkB,OAAO,IACkCskB,UAAUtkB,SAEpB,WAAW,IACX,cAAc,IACd,cAAc,CAAC;AAAA,gBAAEkT,SAAAA;AAAAA,gBAAS9T;AAAAA,gBAAQ4T;AAAAA,cAAAA,MAA4D;AAE1F,oBAAI5T,OAAOrI,QAAQ,qBAAqB;AACpC,wBAAM2jB,aAAaP,oBAAoBjH,SAAO;AAC9C,sBAAIwH,WAAWvX,WAAW,UAAUhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,iBAAe;AAClE,sBAAIulB,WAAWvX,WAAW,GAAG;AACzB,0BAAMwX,KAAKD,WAAW,CAAC;AACvB,2BACIvlB,+BAAC,SAAI,WAAU,2CACX,yCAACqlB,YAAA,EAAQ,OAAO1a,EAAE,0BAA0B;AAAA,sBAAE3M,MAAMwnB,GAAGvT,WAAWA,WAAWjU;AAAAA,sBACjKgK,IAAI0L,OAAO8R,GAAGP,QAAQ;AAAA,oBAAA,CAAG,GAC+D,UAAAjlB,+BAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,WAAU,6FACV,SAAUO,CAAAA,QAAM;AACZA,0BAAEC,gBAAAA;AACFqJ,2CAAqBuG,KAAK;AAAA,wBACtBjgB,MAAMynB,GAAGvT,WAAWiZ;AAAAA,wBACpBjG,UAAUO,GAAGP;AAAAA,wBACbhT,YAAYuT,GAAGvT,WAAWA;AAAAA,wBAC1BwT,WAAW;AAAA,sBAAA,CACd;AAAA,oBACL,GAEA,yCAACC,YAAAA,YAAA,EAAW,MAAM/kB,GAAAA,SAASmN,SAAAA,CAAS,GACxC,GACJ,EAAA,CACJ;AAAA,kBAER;AAEA,yBACI9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,yCAACyO,GAAAA,MAAA,EACG,SACIzO,2BAAAA,IAAC4N,GAAAA,YAAA,EACG,MAAM,SACN,WAAU,6FACV,SAAUO,CAAAA,QAAMA,IAAEC,gBAAAA,GAElB,UAAApO,2BAAAA,IAAC0O,8BAAA,EAAiB,MAAM/N,YAASmN,UAAS,EAAA,CAC9C,GAGHyX,UAAAA,WAAWzlB,IAAI0lB,UACZxlB,2BAAAA,IAAC2O,GAAAA,UAAA,EAEG,OAAK,MACL,SAAS,MAAM;AACX8I,yCAAqBuG,KAAK;AAAA,sBACtBjgB,MAAMynB,KAAGvT,WAAWiZ;AAAAA,sBACpBjG,UAAUO,KAAGP;AAAAA,sBACbhT,YAAYuT,KAAGvT,WAAWA;AAAAA,sBAC1BwT,WAAW;AAAA,oBAAA,CACd;AAAA,kBACL,GAEC9a,YAAE,0BAA0B;AAAA,oBAAE3M,MAAMwnB,KAAGvT,WAAWA,WAAWjU;AAAAA,oBAC1JgK,IAAI0L,OAAO8R,KAAGP,QAAQ;AAAA,kBAAA,CAAG,EAAA,GAZwEO,KAAGvT,WAAWiZ,cAavB,CACH,GACL,GACJ;AAAA,gBAER;AAGA,oBAAI,CAACnN,UAAS,QAAO;AACrB,sBAAMpH,QAAMoH,UAAQ9T,OAAOrI,GAAG;AAC9B,sBAAMoT,eAAe,OAAO2B,UAAQ,YAAYA,UAAQ,OAAO0C,KAAKqG,UAAU/I,KAAG,IAAIjD,OAAOiD,SAAO,EAAE;AACrG,sDACK,OAAA,EAAI,WAAU,8HACX,UAAA3W,2BAAAA,IAAC,OAAA,EAAI,WAAU,sBAAqB,OAAOgV,cACtCA,UAAAA,iBAAiB,oCAAM,QAAA,EAAK,WAAU,sEAAqE,UAAA,OAAA,CAAI,IAAUA,cAC9H,EAAA,CACJ;AAAA,cAER,GAAE,EAAA,CAEV;AAAA,YAAA,GACJ;AAAA,YAGH,CAAC6W,aAAa5P,UAAUkQ,eAAe,aACpCvsB,gCAAC,OAAA,EAAI,WAAU,+DACVqc,UAAAA;AAAAA,cAAAA,OAAO3I,QAAQtF,WAAW,IACvBhO,2BAAAA,IAACC,eAAA,EAAW,SAAQ,WAAU,WAAU,0BAAyB,UAAA,qBAAiB,IAElFgc,OAAO3I,QAAQxT,IAAI,CAAC2vB,OAAOtf,MACvBvQ,gCAAC,OAAA,EAEG,WAAWU,GAAAA,IACP,4CACAmvB,MAAMjf,SAAS,WAAW,+DAC1Bif,MAAMjf,SAAS,UAAU,uEACzBif,MAAMjf,SAAS,SAAS,iDACxBif,MAAMjf,SAAS,UAAU,kCAC7B,GAEA,UAAA;AAAA,gBAAAxQ,+BAAC,QAAA,EAAK,WAAU,+CACXyvB,UAAAA,MAAMjf,SAAS,UAAU,MAAMif,MAAMjf,SAAS,SAAS,OAAOif,MAAMjf,SAAS,SAAS,OAAO,KAClG;AAAA,gBACAxQ,2BAAAA,IAAC,UAAK,WAAU,mCACXyvB,gBAAMjB,KAAK1uB,IAAI2jB,CAAAA,QAAK,OAAOA,QAAM,WAAWpK,KAAKqG,UAAU+D,KAAG,MAAM,CAAC,IAAI/P,OAAO+P,GAAC,CAAC,EAAE5U,KAAK,GAAG,EAAA,CACjG;AAAA,cAAA,EAAA,GAdKsB,CAeT,CACH;AAAA,cAGJ8L,OAAOlV,UAAU6B,UACdhJ,2BAAAA,KAAC,SAAI,WAAWU,OAAI,gCAAgCqN,GAAAA,kBAAkB,GAClE,UAAA;AAAA,gBAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sEAAqE,UAAA,gBAAY;AAAA,+CACxH,OAAA,EAAI,WAAU,6FACVsqB,UAAAA,WAAWtO,OAAOlV,KAAK,EAAA,CAC5B;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,CAER;AAAA,UAAA,GAER;AAAA,UAGC,CAAC8kB,aAAa5P,UAAU,CAACA,OAAO7J,SAAS+Z,eAAe,WAAWgD,UAAUhT,KAAKnO,SAAS,KACxFpO,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,kGAAkGqN,qBAAkB,GACpI,UAAA;AAAA,YAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,cAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,gBAAAI,+BAAC,QAAA,EAAK,WAAU,6FAA6F2K,UAAAA,EAAE,iBAAiB,GAAE;AAAA,+CACjI,QAAA,EAAK,WAAU,+DAA+DwkB,UAAAA,UAAUhT,KAAKnO,OAAAA,CAAO;AAAA,cAAA,GACzG;AAAA,cACApO,2BAAAA,KAAC,OAAA,EAAI,WAAU,iCACX,UAAA;AAAA,gBAAAI,+BAAC,QAAA,EAAK,WAAU,6FAA6F2K,UAAAA,EAAE,iBAAiB,GAAE;AAAA,gBAClI/K,2BAAAA,KAAC,QAAA,EAAK,WAAU,+DAA+Dqc,UAAAA;AAAAA,kBAAAA,OAAO4S,SAASxa,QAAQ,CAAC;AAAA,kBAAE;AAAA,gBAAA,EAAA,CAAE;AAAA,cAAA,EAAA,CAChH;AAAA,YAAA,GACJ;AAAA,YACAzU,2BAAAA,KAAC,OAAA,EAAI,WAAU,6DACX,UAAA;AAAA,cAAAI,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASoV,sBAERvZ,UAAAA,EAAE,0BAA0B,EAAA,CACjC;AAAA,cACA3K,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASogB,cAERvkB,UAAAA,EAAE,wBAAwB,EAAA,CAC/B;AAAA,cACA3K,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,QACR,WAAU,uGACV,SAASkU,iBAERrY,UAAAA,EAAE,uBAAuB,EAAA,CAC9B;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CAER,GACH,EAAA,CAET;AAAA,MAAA,EAAA,CACJ,GACH,GAET;AAAA,MAGA/K,2BAAAA,KAAC8mB,GAAAA,QAAA,EAAO,MAAMqF,gBAAgB,cAAcC,mBACxC,UAAA;AAAA,QAAAhsB,2BAAAA,IAAC2mB,GAAAA,eAAY,UAAA,mBAAA,CAAgB;AAAA,QAC7B3mB,2BAAAA,IAAC4mB,GAAAA,iBACG,UAAA5mB,+BAAC6mB,GAAAA,WAAA,EACG,OAAM,gBACN,OAAOoF,aACP,UAAW9d,CAAAA,QAAM+d,eAAe/d,IAAEyI,OAAO7P,KAAK,GAC9C,aAAY,0BACZ,WAAS,MACT,WAAYoH,CAAAA,QAAM;AACd,cAAIA,IAAEvM,QAAQ,QAASotB,aAAAA;AAAAA,QAC3B,GAAE,EAAA,CAEV;AAAA,wCACClI,GAAAA,eAAA,EACG,UAAA;AAAA,UAAA9mB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAQ,QAAO,SAAS,MAAMkd,kBAAkB,KAAK,GAAG,UAAA,SAAA,CAAM;AAAA,UACtEhsB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAQ,UAAS,OAAM,WAAU,SAASkgB,aAAa,UAAU,CAAC/C,YAAYjjB,KAAAA,GAAQ,UAAA,OAAA,CAAI;AAAA,QAAA,EAAA,CACtG;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,EAER;AAIA,WAAA0mB,cAAAtxB,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAuB,UAAA;AAAA,MAAAyI;AAAAA,IAAAA,IAAA3I;AAAyB,QAAAa;AAAA,QAAAZ,SAAA0I,OAAA;AAC/B9H,WAAAsrB,WAAWxjB,KAAK;AAAC1I,aAAA0I;AAAA1I,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAA9B,UAAA4lB,OAAahlB;AACb,UAAA;AAAA,MAAAqI;AAAAA,IAAAA,IAAiBC,uBAAAA;AAIF,UAAApI,KAAAmI,SAAS,SAAMqoB,mBAAAA,OAAAC,SAAAD,mBAAAA,OAAAE;AAAgC,QAAAtwB;AAAA,QAAAlB,EAAA,CAAA,MAAA4lB,QAAA5lB,SAAAc,IAAA;AAD1DI,WAAAS,2BAAAA,IAAC8vB,gCACU,OAAA3wB,IACD8kB,YACG,UAAA,QAER5iB,UAAAA,QAAAA,CAYL;AAAYhD,aAAA4lB;AAAA5lB,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,WAjBZkB;AAAAA,EAiBY;AAtBpB,WAAA8B,QAAAjD,IAAA;AAUc,UAAA;AAAA,MAAAyY;AAAAA,MAAAkZ;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAA7xB;AAA8C,WAC5C4B,2BAAAA,IAAA,UAAa,OAAA;AAAA,MAAA,GAAK6W;AAAAA,MAAKqZ,iBACtB;AAAA,IAAA,GACIH,iBAAMjwB,KAAAqwB,MAAAhgB,MACHnQ,2CAAiBgwB,aAAY;AAAA,MAAAG;AAAAA,IAAAA,CAAS,GACjCA,UAAAA,KAAIrwB,KAAA6tB,OAAA/rB,QACD5B,4CAAoBiwB,cAAa;AAAA,MAAAtC;AAAAA,IAAAA,CAAU,EAAA,GAAhC/rB,IACd,EAAA,GAHKuO,CAIV,CACH,EAAA,CACL;AAAA,EAAO;;;;;ACn/BvB,QAAMigB,kBAAmC,CAAC,OAAO,UAAU,UAAU,UAAU,QAAQ;AACvF,QAAMC,eAAe,CAAC,UAAU,iBAAiB,QAAQ,OAAO;AAchE,QAAMC,iBAAiC,CACnC;AAAA,IACItoB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,QAAQ;AAAA,IAChBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,GACA;AAAA,IACI3oB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,eAAe;AAAA,IACvBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,GACA;AAAA,IACI3oB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,eAAe;AAAA,IACvBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,GACA;AAAA,IACI3oB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,eAAe;AAAA,IACvBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,GACA;AAAA,IACI3oB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,eAAe;AAAA,IACvBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,GACA;AAAA,IACI3oB,IAAI;AAAA,IACJrK,OAAO;AAAA,IACPM,aAAa;AAAA,IACbsyB,YAAY;AAAA,IACZC,KAAK;AAAA,IACLC,YAAY;AAAA,IACZjW,OAAO,CAAC,eAAe;AAAA,IACvBkW,MAAM;AAAA,IACNC,YAAY;AAAA,EAChB,CAAC;AAGE,QAAMC,eAAexyB,CAAAA,OAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,GAAA;AAAC,UAAA;AAAA,MAAAuyB;AAAAA,MAAAle;AAAAA,MAAAlI;AAAAA,MAAAwK;AAAAA,MAAAC;AAAAA,IAAAA,IAAA9W;AAQzB,UAAA;AAAA,MAAAuM;AAAAA,IAAAA,IAAc6C,oBAAAA;AACd,UAAA,CAAAxP,MAAA8yB,OAAA,IAAwB1jB,MAAAA,SAAS,EAAE;AACnC,UAAA,CAAA2jB,UAAAC,WAAA,IAAgC5jB,MAAAA,cAAc;AAC9C,UAAA,CAAA6jB,UAAAC,WAAA,IAAgC9jB,MAAAA,SAAuC,YAAY;AACnF,UAAA,CAAA+jB,SAAAC,UAAA,IAA8BhkB,MAAAA,SAAwB,KAAK;AAAE,QAAAnO;AAAA,QAAAZ,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAChB/B,YAAC,QAAQ;AAACZ,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAvD,UAAA,CAAAmc,OAAA6W,QAAA,IAA0BjkB,MAAAA,SAAmBnO,EAAU;AACvD,UAAA,CAAAqyB,WAAAC,YAAA,IAAkCnkB,MAAAA,SAAiB,EAAE;AACrD,UAAA,CAAAokB,WAAAC,YAAA,IAAkCrkB,MAAAA,SAAiB,EAAE;AAErD,UAAA,CAAAskB,gBAAAC,iBAAA,IAA4CvkB,MAAAA,SAAiB,EAAE;AAAE,QAAAjO;AAAA,QAAAI;AAAA,QAAAlB,SAAAwyB,QAAA;AAEvD1xB,WAAAA,MAAA;AAAA,YACF0xB,QAAM;AACNC,kBAAQD,OAAMN,cAAe,EAAE;AAC/BW,sBAAYL,OAAMJ,cAAe,YAAY;AAC7CW,qBAAYP,OAAML,OAA0B,KAAK;AAEjD,gBAAAoB,eAAqBf,OAAMrW,QACpByC,MAAAC,QAAc2T,OAAMrW,KAAM,IAAIqW,OAAMrW,QAAA,CAAUqW,OAAMrW,KAAA,IAAO,CAC3D,QAAQ;AACf6W,mBAASO,YAAwB;AAEjCL,uBAAaV,OAAMH,QAAS,EAAE;AAC9Be,uBAAaZ,OAAMF,cAAe,EAAE;AAAA,QAAC,OAAA;AAErCG,kBAAQ,EAAE;AACVI,sBAAY,YAAY;AACxBE,qBAAW,KAAK;AAChBC,mBAAQ,CAAE,QAAQ,CAAC;AACnBE,uBAAa,EAAE;AACfE,uBAAa,EAAE;AACfE,4BAAkB,EAAE;AAAA,QAAC;AAAA,MAAA;AAE1BpyB,YAACsxB,MAAM;AAACxyB,aAAAwyB;AAAAxyB,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAJ,WAAAd,EAAA,CAAA;AAAAkB,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAtBXe,UAAAA,UAAUD,IAsBPI,EAAQ;AAAC,QAAAI;AAAA,QAAAtB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEerB,WAAAkyB,CAAAA,aAAA;AACvB,cAAAC,SAAexB,eAAA5lB,KAAA+d,CAAAA,MAAyBA,EAACzgB,OAAQ6pB,QAAQ;AAAE,YAAA,CACtDC,QAAM;AAAA;AAAA,QAAA;AAEXH,0BAAkBE,QAAQ;AAC1Bf,gBAAQgB,OAAMvB,UAAW;AACzBW,oBAAYY,OAAMrB,UAAW;AAC7BW,mBAAWU,OAAMtB,GAAI;AACrBa,iBAASS,OAAMtX,KAAM;AACrB+W,qBAAaO,OAAMpB,IAAK;AACxBe,qBAAaK,OAAMnB,UAAW;AAAA,MAAC;AAClCtyB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAXD,UAAA0zB,qBAA2BpyB;AAa3B,UAAAqyB,YAAkBb,YAAY,SAASA,YAAY,YAAYA,YAAY;AAAS,QAAAtxB;AAAA,QAAAxB,EAAA,CAAA,MAAA4yB,YAAA5yB,EAAA,CAAA,MAAAmzB,aAAAnzB,EAAA,CAAA,MAAA8yB,WAAA9yB,EAAA,CAAA,MAAAL,QAAAK,EAAA,CAAA,MAAA4W,UAAA5W,EAAA,EAAA,MAAAmc,SAAAnc,EAAA,EAAA,MAAA2zB,aAAA3zB,UAAAizB,WAAA;AAEjEzxB,WAAAA,MAAA;AACfoV,eAAM;AAAA,UAAAsb,YACUvyB;AAAAA,UAAIyyB,YACJQ;AAAAA,UAAQT,KACfW;AAAAA,UAAO3W;AAAAA,UAAAkW,MAENY;AAAAA,UAASX,YACHqB,YAAYR,YAAS;AAAA,QAAA,CACpC;AAAA,MAAC;AACLnzB,aAAA4yB;AAAA5yB,aAAAmzB;AAAAnzB,aAAA8yB;AAAA9yB,aAAAL;AAAAK,aAAA4W;AAAA5W,cAAAmc;AAAAnc,cAAA2zB;AAAA3zB,cAAAizB;AAAAjzB,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AATD,UAAA4zB,aAAmBpyB;AASjB,QAAAgB;AAAA,QAAAxC,EAAA,EAAA,MAAAwyB,UAAAxyB,UAAAsM,GAAA;AAMoB9J,WAAAgwB,SAASlmB,EAAE,oBAAoB,IAAIA,EAAE,sBAAsB;AAACtM,cAAAwyB;AAAAxyB,cAAAsM;AAAAtM,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,UAAAwC,IAAA;AAAlEC,mDAAMD,UAAAA,GAAAA,CAA6D;AAAMxC,cAAAwC;AAAAxC,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,UAAAsM,GAAA;AAEpE1J,WAAA0J,EAAE,8BAA8B;AAACtM,cAAAsM;AAAAtM,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,EAAA,MAAAsU,UAAAtU,UAAAoM,OAAA;AAAEvJ,WAAAtB,2BAAAA,KAAA,QAAA,EAAgB,WAAA,oFAAoF+S,UAAAA;AAAAA,QAAAA;AAAAA,QAAO;AAAA,QAAElI;AAAAA,MAAAA,GAAM;AAAOpM,cAAAsU;AAAAtU,cAAAoM;AAAApM,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAA4C,MAAA5C,UAAA6C,IAAA;AADlKC,YAAAvB,2BAAAA,KAAA,OAAA,EAAe,WAAA,4FACVqB,UAAAA;AAAAA,QAAAA;AAAAA,QAAkC;AAAA,QAACC;AAAAA,MAAAA,GACxC;AAAM7C,cAAA4C;AAAA5C,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,EAAA,EAAA,MAAA8C,OAAA9C,UAAAyC,IAAA;AAJVM,4CAAA,OAAA,EACIN,UAAAA;AAAAA,QAAAA;AAAAA,QACAK;AAAAA,MAAAA,GAGJ;AAAM9C,cAAA8C;AAAA9C,cAAAyC;AAAAzC,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACNM,YAAAtB,2BAAAA,IAAC4N,eAAA,EAAgB,MAAA,SAAiB,SAAA,MAAMojB,YAAW,IAAK,GACpD,UAAAhxB,2BAAAA,IAACkyB,4BAAA,EAAqB,MAAAvxB,YAAAmN,UAAiB,GAC3C;AAAazP,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,UAAA+C,KAAA;AATjBI,4CAACmlB,GAAAA,aAAA,EAAsB,WAAA,4CAAmD,SAAA,MACtEvlB,UAAAA;AAAAA,QAAAA;AAAAA,QAMAE;AAAAA,MAAAA,GAGJ;AAAcjD,cAAA+C;AAAA/C,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIQmB,YAAA7B,GAAAA,IAAI,sHAAoHqN,qBAAoB;AAACtP,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,EAAA,EAAA,MAAAwyB,UAAAxyB,UAAAqzB,kBAAArzB,EAAA,EAAA,MAAAsM,GAAA;AAG1JvI,YAAA,CAACyuB,UACFjxB,2BAAAA,KAAA,OAAA,EAAe,WAAA,uIACX,UAAA;AAAA,QAAAI,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,iEAAiE0K,UAAAA,EAAE,wBAAwB,GAAE;AAAA,uCACpIwnB,GAAAA,QAAA,EACQ,MAAA,SACET,OAAAA,gBACQK,mCACN,UAAA,gBACI,aAAApnB,EAAE,+BAA+B,GACpC,WAAA,gCAET2lB,UAAAA,eAAAxwB,IAAAuB,OAOA,EAAA,CACL;AAAA,MAAA,GACJ;AACChD,cAAAwyB;AAAAxyB,cAAAqzB;AAAArzB,cAAAsM;AAAAtM,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgE;AAAA,QAAAhE,UAAAsM,GAAA;AAK+FtI,YAAAsI,EAAE,oBAAoB;AAACtM,cAAAsM;AAAAtM,cAAAgE;AAAAA,IAAA,OAAA;AAAAA,YAAAhE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiE;AAAA,QAAAjE,UAAAgE,KAAA;AAA/GC,2CAACrC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,gDAAgDoC,UAAAA,KAAwB;AAAahE,cAAAgE;AAAAhE,cAAAiE;AAAAA,IAAA,OAAA;AAAAA,YAAAjE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmE;AAAA,QAAAnE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAI/GwB,YAAA2L,CAAAA,MAAO2iB,QAAQ3iB,EAACyI,OAAA7P,KAAa;AAAC1I,cAAAmE;AAAAA,IAAA,OAAA;AAAAA,YAAAnE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAoE;AAAA,QAAApE,UAAAsM,GAAA;AAC3BlI,YAAAkI,EAAE,gCAAgC;AAACtM,cAAAsM;AAAAtM,cAAAoE;AAAAA,IAAA,OAAA;AAAAA,YAAApE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqE;AAAA,QAAArE,EAAA,EAAA,MAAAL,QAAAK,UAAAoE,KAAA;AAJpDC,YAAA1C,2BAAAA,IAAC6mB,gBAEU7oB,OAAAA,MACG,UAAAwE,KACG,aAAAC,KACH,WAAA,SAAA,CAAQ;AACpBpE,cAAAL;AAAAK,cAAAoE;AAAApE,cAAAqE;AAAAA,IAAA,OAAA;AAAAA,YAAArE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsE;AAAA,QAAAtE,EAAA,EAAA,MAAAiE,OAAAjE,UAAAqE,KAAA;AARNC,YAAA/C,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACX0C,UAAAA;AAAAA,QAAAA;AAAAA,QACAI;AAAAA,MAAAA,GAOJ;AAAMrE,cAAAiE;AAAAjE,cAAAqE;AAAArE,cAAAsE;AAAAA,IAAA,OAAA;AAAAA,YAAAtE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuE;AAAA,QAAAvE,UAAAsM,GAAA;AAKG/H,YAAA+H,EAAE,wBAAwB;AAACtM,cAAAsM;AAAAtM,cAAAuE;AAAAA,IAAA,OAAA;AAAAA,YAAAvE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwE;AAAA,QAAAxE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAAE6B,YAAA7C,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6HAA4H,UAAA,MAAE;AAAO3B,cAAAwE;AAAAA,IAAA,OAAA;AAAAA,YAAAxE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyE;AAAA,QAAAzE,UAAAuE,KAAA;AADvLE,YAAAlD,2BAAAA,KAACK,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,gDACnC2C,UAAAA;AAAAA,QAAAA;AAAAA,QAA4B;AAAA,QAACC;AAAAA,MAAAA,GAClC;AAAaxE,cAAAuE;AAAAvE,cAAAyE;AAAAA,IAAA,OAAA;AAAAA,YAAAzE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA0E;AAAA,QAAA1E,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGM+B,YAAA4T,CAAAA,QAASua,YAAYva,GAAmC;AAACtY,cAAA0E;AAAAA,IAAA,OAAA;AAAAA,YAAA1E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA2E;AAAA,QAAA3E,UAAAsM,GAAA;AAK5C3H,YAAA2H,EAAE,0BAA0B;AAACtM,cAAAsM;AAAAtM,cAAA2E;AAAAA,IAAA,OAAA;AAAAA,YAAA3E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4E;AAAA,QAAA5E,UAAA2E,KAAA;AAAjDC,YAAAjD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,IAAIgD,UAAAA,KAA8B;AAAO3E,cAAA2E;AAAA3E,cAAA4E;AAAAA,IAAA,OAAA;AAAAA,YAAA5E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6E;AAAA,QAAA7E,UAAAsM,GAAA;AACoBzH,YAAAyH,EAAE,+BAA+B;AAACtM,cAAAsM;AAAAtM,cAAA6E;AAAAA,IAAA,OAAA;AAAAA,YAAA7E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8E;AAAA,QAAA9E,UAAA6E,KAAA;AAA/GC,YAAAnD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6DAA6DkD,UAAAA,KAAmC;AAAO7E,cAAA6E;AAAA7E,cAAA8E;AAAAA,IAAA,OAAA;AAAAA,YAAA9E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+E;AAAA,QAAA/E,EAAA,EAAA,MAAA4E,OAAA5E,UAAA8E,KAAA;AAH/HC,2CAACgvB,eAAA,EAAiB,OAAA,cACd,UAAAxyB,2BAAAA,KAAA,OAAA,EAAe,WAAA,2BACXqD,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,MAAAA,EAAAA,CACJ,EAAA,CACJ;AAAa9E,cAAA4E;AAAA5E,cAAA8E;AAAA9E,cAAA+E;AAAAA,IAAA,OAAA;AAAAA,YAAA/E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgF;AAAA,QAAAhF,UAAAsM,GAAA;AAGetH,YAAAsH,EAAE,2BAA2B;AAACtM,cAAAsM;AAAAtM,cAAAgF;AAAAA,IAAA,OAAA;AAAAA,YAAAhF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiF;AAAA,QAAAjF,UAAAgF,KAAA;AAAlDC,YAAAtD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,IAAIqD,UAAAA,KAA+B;AAAOhF,cAAAgF;AAAAhF,cAAAiF;AAAAA,IAAA,OAAA;AAAAA,YAAAjF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmF;AAAA,QAAAnF,UAAAsM,GAAA;AACmBnH,YAAAmH,EAAE,gCAAgC;AAACtM,cAAAsM;AAAAtM,cAAAmF;AAAAA,IAAA,OAAA;AAAAA,YAAAnF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAoF;AAAA,QAAApF,UAAAmF,KAAA;AAAhHC,YAAAzD,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6DAA6DwD,UAAAA,KAAoC;AAAOnF,cAAAmF;AAAAnF,cAAAoF;AAAAA,IAAA,OAAA;AAAAA,YAAApF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqF;AAAA,QAAArF,EAAA,EAAA,MAAAiF,OAAAjF,UAAAoF,KAAA;AAHhIC,2CAAC0uB,eAAA,EAAiB,OAAA,eACd,UAAAxyB,2BAAAA,KAAA,OAAA,EAAe,WAAA,2BACX0D,UAAAA;AAAAA,QAAAA;AAAAA,QACAG;AAAAA,MAAAA,EAAAA,CACJ,EAAA,CACJ;AAAapF,cAAAiF;AAAAjF,cAAAoF;AAAApF,cAAAqF;AAAAA,IAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsF;AAAA,QAAAtF,EAAA,EAAA,MAAA4yB,YAAA5yB,UAAA+E,OAAA/E,EAAA,EAAA,MAAAqF,KAAA;AAhBjBC,4CAACwuB,WAAA,EACUlB,OAAAA,UACQ,eAAAluB,KACN,UAAA,gBAETK,UAAAA;AAAAA,QAAAA;AAAAA,QAMAM;AAAAA,MAAAA,GAMJ;AAASrF,cAAA4yB;AAAA5yB,cAAA+E;AAAA/E,cAAAqF;AAAArF,cAAAsF;AAAAA,IAAA,OAAA;AAAAA,YAAAtF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuF;AAAA,QAAAvF,EAAA,EAAA,MAAAyE,OAAAzE,UAAAsF,KAAA;AArBbC,YAAAhE,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACXkD,UAAAA;AAAAA,QAAAA;AAAAA,QAGAa;AAAAA,MAAAA,GAkBJ;AAAMtF,cAAAyE;AAAAzE,cAAAsF;AAAAtF,cAAAuF;AAAAA,IAAA,OAAA;AAAAA,YAAAvF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwF;AAAA,QAAAxF,EAAA,EAAA,MAAAsE,OAAAtE,UAAAuF,KAAA;AApCVC,YAAAjE,2BAAAA,KAAA,OAAA,EAAe,WAAA,kDAEX+C,UAAAA;AAAAA,QAAAA;AAAAA,QAYAiB;AAAAA,MAAAA,GAuBJ;AAAMvF,cAAAsE;AAAAtE,cAAAuF;AAAAvF,cAAAwF;AAAAA,IAAA,OAAA;AAAAA,YAAAxF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyF;AAAA,QAAAzF,UAAAsM,GAAA;AAKG7G,YAAA6G,EAAE,uBAAuB;AAACtM,cAAAsM;AAAAtM,cAAAyF;AAAAA,IAAA,OAAA;AAAAA,YAAAzF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA0F;AAAA,QAAA1F,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAAE+C,YAAA/D,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6HAA4H,UAAA,OAAG;AAAO3B,cAAA0F;AAAAA,IAAA,OAAA;AAAAA,YAAA1F,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA2F;AAAA,QAAA3F,UAAAyF,KAAA;AADvLE,YAAApE,2BAAAA,KAACK,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,gDACnC6D,UAAAA;AAAAA,QAAAA;AAAAA,QAA2B;AAAA,QAACC;AAAAA,MAAAA,GACjC;AAAa1F,cAAAyF;AAAAzF,cAAA2F;AAAAA,IAAA,OAAA;AAAAA,YAAA3F,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4F;AAAA,QAAA5F,UAAA8yB,SAAA;AAERltB,YAAAmsB,gBAAAtwB,IAAA0wB,CAAAA,QACGxwB,2BAAAA,IAAC8O,aAEQ,MAAA,SACI,SAAAqiB,YAAYX,MAAM,WAAW,QAChC,OAAA,WACG,SAAA,MAAMY,WAAWZ,GAAG,GACnB,WAAA,oCAGd,CACH;AAACnyB,cAAA8yB;AAAA9yB,cAAA4F;AAAAA,IAAA,OAAA;AAAAA,YAAA5F,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6F;AAAA,QAAA7F,UAAA4F,KAAA;AAZNC,YAAAlE,2BAAAA,IAAA,OAAA,EAAe,WAAA,0BACViE,UAAAA,KAYL;AAAM5F,cAAA4F;AAAA5F,cAAA6F;AAAAA,IAAA,OAAA;AAAAA,YAAA7F,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8F;AAAA,QAAA9F,EAAA,EAAA,MAAA2F,OAAA3F,UAAA6F,KAAA;AAjBVC,YAAAvE,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACXoE,UAAAA;AAAAA,QAAAA;AAAAA,QAGAE;AAAAA,MAAAA,GAcJ;AAAM7F,cAAA2F;AAAA3F,cAAA6F;AAAA7F,eAAA8F;AAAAA,IAAA,OAAA;AAAAA,YAAA9F,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+F;AAAA,QAAA/F,WAAAsM,GAAA;AAKGvG,YAAAuG,EAAE,4BAA4B;AAACtM,eAAAsM;AAAAtM,eAAA+F;AAAAA,IAAA,OAAA;AAAAA,YAAA/F,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAgG;AAAA,QAAAhG,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAAEqD,YAAArE,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6HAA4H,UAAA,MAAE;AAAO3B,eAAAgG;AAAAA,IAAA,OAAA;AAAAA,YAAAhG,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAiG;AAAA,QAAAjG,WAAA+F,KAAA;AAD3LE,YAAA1E,2BAAAA,KAACK,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,gDACnCmE,UAAAA;AAAAA,QAAAA;AAAAA,QAAgC;AAAA,QAACC;AAAAA,MAAAA,GACtC;AAAahG,eAAA+F;AAAA/F,eAAAiG;AAAAA,IAAA,OAAA;AAAAA,YAAAjG,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAkG;AAAA,QAAAlG,WAAAsM,GAAA;AAKIpG,YAAAoG,EAAE,iCAAiC;AAACtM,eAAAsM;AAAAtM,eAAAkG;AAAAA,IAAA,OAAA;AAAAA,YAAAlG,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAmG;AAAA,QAAAnG,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEhDwD,YAAA6rB,aAAAvwB,IAAAuyB,QAIA;AAACh0B,eAAAmG;AAAAA,IAAA,OAAA;AAAAA,YAAAnG,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi0B;AAAA,QAAAj0B,EAAA,GAAA,MAAAmc,SAAAnc,WAAAkG,KAAA;AAVN+tB,YAAAtyB,2BAAAA,IAACuyB,GAAAA,aAAA,EACQ,MAAA,SACE/X,OAAAA,OACQ6W,eAAAA,UACF,aAAA9sB,KAEZC,UAAAA,IAAAA,CAKL;AAAcnG,eAAAmc;AAAAnc,eAAAkG;AAAAlG,eAAAi0B;AAAAA,IAAA,OAAA;AAAAA,YAAAj0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm0B;AAAA,QAAAn0B,EAAA,GAAA,MAAAiG,OAAAjG,WAAAi0B,KAAA;AAflBE,YAAA5yB,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACX0E,UAAAA;AAAAA,QAAAA;AAAAA,QAGAguB;AAAAA,MAAAA,GAYJ;AAAMj0B,eAAAiG;AAAAjG,eAAAi0B;AAAAj0B,eAAAm0B;AAAAA,IAAA,OAAA;AAAAA,YAAAn0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo0B;AAAA,QAAAp0B,EAAA,GAAA,MAAA+D,OAAA/D,EAAA,GAAA,MAAAwF,OAAAxF,EAAA,GAAA,MAAA8F,OAAA9F,WAAAm0B,KAAA;AAvGVC,YAAA7yB,2BAAAA,KAAC8yB,GAAAA,OAAA,EAAiB,WAAAvwB,KAGbC,UAAAA;AAAAA,QAAAA;AAAAA,QAuBDyB;AAAAA,QAwCAM;AAAAA,QAqBAquB;AAAAA,MAAAA,GAkBJ;AAAQn0B,eAAA+D;AAAA/D,eAAAwF;AAAAxF,eAAA8F;AAAA9F,eAAAm0B;AAAAn0B,eAAAo0B;AAAAA,IAAA,OAAA;AAAAA,YAAAp0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs0B;AAAA,QAAAt0B,EAAA,GAAA,MAAA8yB,WAAA9yB,WAAAsM,KAAAtM,EAAA,GAAA,MAAAizB,WAAA;AAIHqB,YAAAxB,YAAY,YACTvxB,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACX,UAAA;AAAA,QAAAA,2BAAAA,cAAe,WAAA,yBACX,UAAA;AAAA,UAAAI,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,gDAAgD0K,UAAAA,EAAE,0BAA0B,GAAE;AAAA,UACtH3K,+BAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,kCAAkC0K,UAAAA,EAAE,+BAA+B,EAAA,CAAE;AAAA,QAAA,GACjH;AAAA,QACA3K,2BAAAA,aAAgB,WAAAM,OAAI,qEAAmEqN,GAAAA,kBAAoB,GACvG,yCAAC,cAAA,EACU2jB,OAAAA,WACG,UAAA9hB,CAAAA,MAAO+hB,aAAa/hB,KAAK,EAAE,GAC3B,UAAA,OACC,WAAA,KAAA,CAAI,EAAA,CAEvB;AAAA,MAAA,GACJ;AACHnR,eAAA8yB;AAAA9yB,eAAAsM;AAAAtM,eAAAizB;AAAAjzB,eAAAs0B;AAAAA,IAAA,OAAA;AAAAA,YAAAt0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAu0B;AAAA,QAAAv0B,EAAA,GAAA,MAAAmzB,aAAAnzB,EAAA,GAAA,MAAA8yB,WAAA9yB,EAAA,GAAA,MAAA2zB,aAAA3zB,WAAAsM,GAAA;AAGAioB,YAAAZ,aACGpyB,gCAAA,OAAA,EAAe,WAAA,8BACX,UAAA;AAAA,QAAAA,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACX,UAAA;AAAA,UAAAI,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,gDAAgD0K,UAAAA,EAAE,0BAA0B,GAAE;AAAA,UACtH3K,+BAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,kCAAkC0K,UAAAA,EAAE,+BAA+B,EAAA,CAAE;AAAA,QAAA,GACjH;AAAA,QACA3K,2BAAAA,aAAgB,WAAAM,GAAAA,IAAI,qEAAmEqN,qBAAoB,GACvG,UAAA3N,2BAAAA,IAAC,cAAA,EACUwxB,kBACG,UAAAqB,CAAAA,QAAOpB,aAAajiB,OAAK,EAAE,GAC3B,UAAA,OACC,WAAA2hB,YAAY,SAAA,CAAQ,EAAA,CAEvC;AAAA,MAAA,GACJ;AACH9yB,eAAAmzB;AAAAnzB,eAAA8yB;AAAA9yB,eAAA2zB;AAAA3zB,eAAAsM;AAAAtM,eAAAu0B;AAAAA,IAAA,OAAA;AAAAA,YAAAv0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAy0B;AAAA,QAAAz0B,EAAA,GAAA,MAAAs0B,OAAAt0B,WAAAu0B,KAAA;AAnCLE,YAAAlzB,2BAAAA,KAAA,OAAA,EAAe,WAAA,4BAEV+yB,UAAAA;AAAAA,QAAAA;AAAAA,QAkBAC;AAAAA,MAAAA,GAgBL;AAAMv0B,eAAAs0B;AAAAt0B,eAAAu0B;AAAAv0B,eAAAy0B;AAAAA,IAAA,OAAA;AAAAA,YAAAz0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA00B;AAAA,QAAA10B,EAAA,GAAA,MAAAo0B,OAAAp0B,WAAAy0B,KAAA;AAjJVC,YAAA/yB,2BAAAA,IAAC4mB,GAAAA,iBAAwB,WAAA,iFAA+F,eAAA,OACpH,UAAAhnB,2BAAAA,KAAA,OAAA,EAAe,WAAA,qBACf6yB,UAAAA;AAAAA,QAAAA;AAAAA,QA2GAK;AAAAA,MAAAA,EAAAA,CAsCA,EAAA,CACJ;AAAgBz0B,eAAAo0B;AAAAp0B,eAAAy0B;AAAAz0B,eAAA00B;AAAAA,IAAA,OAAA;AAAAA,YAAA10B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA20B;AAAA,QAAA30B,WAAAsM,GAAA;AAIPqoB,YAAAroB,EAAE,sBAAsB;AAACtM,eAAAsM;AAAAtM,eAAA20B;AAAAA,IAAA,OAAA;AAAAA,YAAA30B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA40B;AAAA,QAAA50B,EAAA,GAAA,MAAA6W,YAAA7W,WAAA20B,KAAA;AAD9BC,YAAAjzB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAY,MAAA,SAAgB,SAAA,QAAa,OAAA,WAAmBoG,SAAAA,UACxD8d,UAAAA,IAAAA,CACL;AAAS30B,eAAA6W;AAAA7W,eAAA20B;AAAA30B,eAAA40B;AAAAA,IAAA,OAAA;AAAAA,YAAA50B,EAAA,GAAA;AAAA,IAAA;AAC4E,UAAA60B,OAACl1B;AAAI,QAAAm1B;AAAA,QAAA90B,WAAAsM,GAAA;AACrFwoB,YAAAxoB,EAAE,oBAAoB;AAACtM,eAAAsM;AAAAtM,eAAA80B;AAAAA,IAAA,OAAA;AAAAA,YAAA90B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+0B;AAAA,QAAA/0B,EAAA,GAAA,MAAA4zB,cAAA5zB,WAAA60B,OAAA70B,EAAA,GAAA,MAAA80B,KAAA;AAD5BC,YAAApzB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAY,MAAA,SAAgB,SAAA,UAAe,OAAA,WAAmBmjB,SAAAA,YAAsB,UAAAiB,KAChFC,UAAAA,KACL;AAAS90B,eAAA4zB;AAAA5zB,eAAA60B;AAAA70B,eAAA80B;AAAA90B,eAAA+0B;AAAAA,IAAA,OAAA;AAAAA,YAAA/0B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAg1B;AAAA,QAAAh1B,EAAA,GAAA,MAAA40B,OAAA50B,WAAA+0B,KAAA;AANbC,4CAACvM,kBAAA,EACGmM,UAAAA;AAAAA,QAAAA;AAAAA,QAGAG;AAAAA,MAAAA,GAGJ;AAAgB/0B,eAAA40B;AAAA50B,eAAA+0B;AAAA/0B,eAAAg1B;AAAAA,IAAA,OAAA;AAAAA,YAAAh1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi1B;AAAA,QAAAj1B,WAAAsM,GAAA;AAKuC2oB,YAAA3oB,EAAE,0BAA0B;AAACtM,eAAAsM;AAAAtM,eAAAi1B;AAAAA,IAAA,OAAA;AAAAA,YAAAj1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAk1B;AAAA,QAAAl1B,WAAAi1B,KAAA;AAAxEC,2CAACtzB,GAAAA,YAAA,EAAmB,SAAA,MAAe,WAAA,QAAQqzB,UAAAA,KAA8B;AAAaj1B,eAAAi1B;AAAAj1B,eAAAk1B;AAAAA,IAAA,OAAA;AAAAA,YAAAl1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm1B;AAAA,QAAAn1B,WAAAsM,GAAA;AAEjF6oB,YAAA7oB,EAAE,0BAA0B;AAACtM,eAAAsM;AAAAtM,eAAAm1B;AAAAA,IAAA,OAAA;AAAAA,YAAAn1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo1B;AAAA,QAAAp1B,WAAAm1B,KAAA;AADlCC,YAAAzzB,2BAAAA,IAACC,eAAA,EAAqB,WAAA,qDACjBuzB,UAAAA,KACL;AAAan1B,eAAAm1B;AAAAn1B,eAAAo1B;AAAAA,IAAA,OAAA;AAAAA,YAAAp1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAq1B;AAAA,QAAAr1B,EAAA,GAAA,MAAAk1B,OAAAl1B,WAAAo1B,KAAA;AAJjBC,4CAAA,OAAA,EACIH,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,MAAAA,GAGJ;AAAMp1B,eAAAk1B;AAAAl1B,eAAAo1B;AAAAp1B,eAAAq1B;AAAAA,IAAA,OAAA;AAAAA,YAAAr1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs1B;AAAA,QAAAt1B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGgB2yB,YAAArzB,GAAAA,IAAI,kCAAgCqN,qBAAoB;AAACtP,eAAAs1B;AAAAA,IAAA,OAAA;AAAAA,YAAAt1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAu1B;AAAA,QAAAv1B,WAAAsM,GAAA;AACuBipB,YAAAjpB,EAAE,gCAAgC;AAACtM,eAAAsM;AAAAtM,eAAAu1B;AAAAA,IAAA,OAAA;AAAAA,YAAAv1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAw1B;AAAA,QAAAx1B,WAAAu1B,KAAA;AAAjIC,2CAAC5zB,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,oDAAoD2zB,UAAAA,KAAoC;AAAav1B,eAAAu1B;AAAAv1B,eAAAw1B;AAAAA,IAAA,OAAA;AAAAA,YAAAx1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAy1B;AAAA,QAAAz1B,WAAAsM,GAAA;AAE1ImpB,YAAAnpB,EAAE,+BAA+B;AAACtM,eAAAsM;AAAAtM,eAAAy1B;AAAAA,IAAA,OAAA;AAAAA,YAAAz1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA01B;AAAA,QAAA11B,WAAAy1B,KAAA;AADvCC,2CAAC9zB,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,qDACjC6zB,UAAAA,KACL;AAAaz1B,eAAAy1B;AAAAz1B,eAAA01B;AAAAA,IAAA,OAAA;AAAAA,YAAA11B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA21B;AAAA,QAAA31B,EAAA,GAAA,MAAAw1B,OAAAx1B,WAAA01B,KAAA;AAJjBC,4CAACtB,GAAAA,OAAA,EAAiB,WAAAiB,KACdE,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,MAAAA,GAGJ;AAAQ11B,eAAAw1B;AAAAx1B,eAAA01B;AAAA11B,eAAA21B;AAAAA,IAAA,OAAA;AAAAA,YAAA31B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA41B;AAAA,QAAA51B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEUizB,YAAA3zB,GAAAA,IAAI,kCAAgCqN,qBAAoB;AAACtP,eAAA41B;AAAAA,IAAA,OAAA;AAAAA,YAAA51B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA61B;AAAA,QAAA71B,WAAAsM,GAAA;AACuBupB,YAAAvpB,EAAE,gCAAgC;AAACtM,eAAAsM;AAAAtM,eAAA61B;AAAAA,IAAA,OAAA;AAAAA,YAAA71B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA81B;AAAA,QAAA91B,WAAA61B,KAAA;AAAjIC,2CAACl0B,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,oDAAoDi0B,UAAAA,KAAoC;AAAa71B,eAAA61B;AAAA71B,eAAA81B;AAAAA,IAAA,OAAA;AAAAA,YAAA91B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+1B;AAAA,QAAA/1B,WAAAsM,GAAA;AAE1IypB,YAAAzpB,EAAE,+BAA+B;AAACtM,eAAAsM;AAAAtM,eAAA+1B;AAAAA,IAAA,OAAA;AAAAA,YAAA/1B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAg2B;AAAA,QAAAh2B,WAAA+1B,KAAA;AADvCC,2CAACp0B,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,0DACjCm0B,UAAAA,KACL;AAAa/1B,eAAA+1B;AAAA/1B,eAAAg2B;AAAAA,IAAA,OAAA;AAAAA,YAAAh2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi2B;AAAA,QAAAj2B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAELszB,YAAAt0B,2BAAAA,IAAA,YAAQ,UAAA,SAAA,CAAM;AAAS3B,eAAAi2B;AAAAA,IAAA,OAAA;AAAAA,YAAAj2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAk2B;AAAA,QAAAl2B,WAAAsM,GAAA;AAAG4pB,YAAA5pB,EAAE,gCAAgC;AAACtM,eAAAsM;AAAAtM,eAAAk2B;AAAAA,IAAA,OAAA;AAAAA,YAAAl2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm2B;AAAA,QAAAn2B,WAAAk2B,KAAA;AAAjEC,4CAAA,MAAA,EAAIF,UAAAA;AAAAA,QAAAA;AAAAA,QAAuB;AAAA,QAAGC;AAAAA,MAAAA,GAAoC;AAAKl2B,eAAAk2B;AAAAl2B,eAAAm2B;AAAAA,IAAA,OAAA;AAAAA,YAAAn2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo2B;AAAA,QAAAp2B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACnEyzB,YAAAz0B,2BAAAA,IAAA,YAAQ,UAAA,gBAAA,CAAa;AAAS3B,eAAAo2B;AAAAA,IAAA,OAAA;AAAAA,YAAAp2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAq2B;AAAA,QAAAr2B,WAAAsM,GAAA;AAAG+pB,YAAA/pB,EAAE,uCAAuC;AAACtM,eAAAsM;AAAAtM,eAAAq2B;AAAAA,IAAA,OAAA;AAAAA,YAAAr2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs2B;AAAA,QAAAt2B,WAAAq2B,KAAA;AAA/EC,4CAAA,MAAA,EAAIF,UAAAA;AAAAA,QAAAA;AAAAA,QAA8B;AAAA,QAAGC;AAAAA,MAAAA,GAA2C;AAAKr2B,eAAAq2B;AAAAr2B,eAAAs2B;AAAAA,IAAA,OAAA;AAAAA,YAAAt2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAu2B;AAAA,QAAAv2B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACjF4zB,YAAA50B,2BAAAA,IAAA,YAAQ,UAAA,OAAA,CAAI;AAAS3B,eAAAu2B;AAAAA,IAAA,OAAA;AAAAA,YAAAv2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAw2B;AAAA,QAAAx2B,WAAAsM,GAAA;AAAGkqB,YAAAlqB,EAAE,8BAA8B;AAACtM,eAAAsM;AAAAtM,eAAAw2B;AAAAA,IAAA,OAAA;AAAAA,YAAAx2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAy2B;AAAA,QAAAz2B,WAAAw2B,KAAA;AAA7DC,4CAAA,MAAA,EAAIF,UAAAA;AAAAA,QAAAA;AAAAA,QAAqB;AAAA,QAAGC;AAAAA,MAAAA,GAAkC;AAAKx2B,eAAAw2B;AAAAx2B,eAAAy2B;AAAAA,IAAA,OAAA;AAAAA,YAAAz2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA02B;AAAA,QAAA12B,EAAA,GAAA,MAAAm2B,OAAAn2B,WAAAs2B,OAAAt2B,EAAA,GAAA,MAAAy2B,KAAA;AAHvEC,oDAAc,WAAA,sFACVP,UAAAA;AAAAA,QAAAA;AAAAA,QACAG;AAAAA,QACAG;AAAAA,MAAAA,GACJ;AAAKz2B,eAAAm2B;AAAAn2B,eAAAs2B;AAAAt2B,eAAAy2B;AAAAz2B,eAAA02B;AAAAA,IAAA,OAAA;AAAAA,YAAA12B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA22B;AAAA,QAAA32B,EAAA,GAAA,MAAA81B,OAAA91B,WAAAg2B,OAAAh2B,EAAA,GAAA,MAAA02B,KAAA;AATTC,YAAAp1B,2BAAAA,KAAC8yB,GAAAA,OAAA,EAAiB,WAAAuB,KACdE,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAGAU;AAAAA,MAAAA,GAKJ;AAAQ12B,eAAA81B;AAAA91B,eAAAg2B;AAAAh2B,eAAA02B;AAAA12B,eAAA22B;AAAAA,IAAA,OAAA;AAAAA,YAAA32B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA42B;AAAA,QAAA52B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEUi0B,YAAA30B,GAAAA,IAAI,kCAAgCqN,qBAAoB;AAACtP,eAAA42B;AAAAA,IAAA,OAAA;AAAAA,YAAA52B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA62B;AAAA,QAAA72B,WAAAsM,GAAA;AACuBuqB,YAAAvqB,EAAE,gCAAgC;AAACtM,eAAAsM;AAAAtM,eAAA62B;AAAAA,IAAA,OAAA;AAAAA,YAAA72B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA82B;AAAA,QAAA92B,WAAA62B,KAAA;AAAjIC,2CAACl1B,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,oDAAoDi1B,UAAAA,KAAoC;AAAa72B,eAAA62B;AAAA72B,eAAA82B;AAAAA,IAAA,OAAA;AAAAA,YAAA92B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+2B;AAAA,QAAA/2B,WAAAsM,GAAA;AAE1IyqB,YAAAzqB,EAAE,+BAA+B;AAACtM,eAAAsM;AAAAtM,eAAA+2B;AAAAA,IAAA,OAAA;AAAAA,YAAA/2B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAg3B;AAAA,QAAAh3B,WAAA+2B,KAAA;AADvCC,2CAACp1B,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,0DACjCm1B,UAAAA,KACL;AAAa/2B,eAAA+2B;AAAA/2B,eAAAg3B;AAAAA,IAAA,OAAA;AAAAA,YAAAh3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi3B;AAAA,QAAAj3B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACbs0B,2CAAA,OAAA,EAAgB,WAAAh1B,GAAAA,IAAI,kFAAgFqN,qBAAoB,GAAG,UAAA,iCAE3H;AAAMtP,eAAAi3B;AAAAA,IAAA,OAAA;AAAAA,YAAAj3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAk3B;AAAA,QAAAl3B,WAAAsM,GAAA;AAED4qB,YAAA5qB,EAAE,kCAAkC;AAACtM,eAAAsM;AAAAtM,eAAAk3B;AAAAA,IAAA,OAAA;AAAAA,YAAAl3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm3B;AAAA,QAAAn3B,WAAAk3B,KAAA;AAD1CC,2CAACv1B,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,qDACnCs1B,UAAAA,KACL;AAAal3B,eAAAk3B;AAAAl3B,eAAAm3B;AAAAA,IAAA,OAAA;AAAAA,YAAAn3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo3B;AAAA,QAAAp3B,EAAA,GAAA,MAAA82B,OAAA92B,WAAAg3B,OAAAh3B,EAAA,GAAA,MAAAm3B,KAAA;AAVjBC,YAAA71B,2BAAAA,KAAC8yB,GAAAA,OAAA,EAAiB,WAAAuC,KACdE,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAGAC;AAAAA,QAGAE;AAAAA,MAAAA,GAGJ;AAAQn3B,eAAA82B;AAAA92B,eAAAg3B;AAAAh3B,eAAAm3B;AAAAn3B,eAAAo3B;AAAAA,IAAA,OAAA;AAAAA,YAAAp3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAq3B;AAAA,QAAAr3B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEU00B,YAAAp1B,GAAAA,IAAI,kCAAgCqN,qBAAoB;AAACtP,eAAAq3B;AAAAA,IAAA,OAAA;AAAAA,YAAAr3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs3B;AAAA,QAAAt3B,WAAAsM,GAAA;AACuBgrB,aAAAhrB,EAAE,gCAAgC;AAACtM,eAAAsM;AAAAtM,eAAAs3B;AAAAA,IAAA,OAAA;AAAAA,aAAAt3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAu3B;AAAA,QAAAv3B,WAAAs3B,MAAA;AAAjIC,4CAAC31B,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,oDAAoD01B,UAAAA,MAAoC;AAAat3B,eAAAs3B;AAAAt3B,eAAAu3B;AAAAA,IAAA,OAAA;AAAAA,aAAAv3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAw3B;AAAA,QAAAx3B,WAAAsM,GAAA;AAE1IkrB,aAAAlrB,EAAE,+BAA+B;AAACtM,eAAAsM;AAAAtM,eAAAw3B;AAAAA,IAAA,OAAA;AAAAA,aAAAx3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAy3B;AAAA,QAAAz3B,WAAAw3B,MAAA;AADvCC,4CAAC71B,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,0DACjC41B,UAAAA,MACL;AAAax3B,eAAAw3B;AAAAx3B,eAAAy3B;AAAAA,IAAA,OAAA;AAAAA,aAAAz3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA03B;AAAA,QAAA13B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AACb+0B,4CAAA,OAAA,EAAgB,WAAAz1B,GAAAA,IAAI,kFAAgFqN,qBAAoB,GAAG,UAAA,iCAE3H;AAAMtP,eAAA03B;AAAAA,IAAA,OAAA;AAAAA,aAAA13B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA23B;AAAA,QAAA33B,WAAAsM,GAAA;AAEDqrB,aAAArrB,EAAE,kCAAkC;AAACtM,eAAAsM;AAAAtM,eAAA23B;AAAAA,IAAA,OAAA;AAAAA,aAAA33B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA43B;AAAA,QAAA53B,WAAA23B,MAAA;AAD1CC,4CAACh2B,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,qDACnC+1B,UAAAA,MACL;AAAa33B,eAAA23B;AAAA33B,eAAA43B;AAAAA,IAAA,OAAA;AAAAA,aAAA53B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA63B;AAAA,QAAA73B,EAAA,GAAA,MAAAu3B,QAAAv3B,WAAAy3B,QAAAz3B,EAAA,GAAA,MAAA43B,MAAA;AAVjBC,aAAAt2B,2BAAAA,KAAC8yB,GAAAA,OAAA,EAAiB,WAAAgD,KACdE,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAGAC;AAAAA,QAGAE;AAAAA,MAAAA,GAGJ;AAAQ53B,eAAAu3B;AAAAv3B,eAAAy3B;AAAAz3B,eAAA43B;AAAA53B,eAAA63B;AAAAA,IAAA,OAAA;AAAAA,aAAA73B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA83B;AAAA,QAAA93B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEUm1B,aAAA71B,GAAAA,IAAI,0EAAwEqN,qBAAoB;AAACtP,eAAA83B;AAAAA,IAAA,OAAA;AAAAA,aAAA93B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+3B;AAAA,QAAA/3B,WAAAsM,GAAA;AACjByrB,aAAAzrB,EAAE,oCAAoC;AAACtM,eAAAsM;AAAAtM,eAAA+3B;AAAAA,IAAA,OAAA;AAAAA,aAAA/3B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAg4B;AAAA,QAAAh4B,WAAA+3B,MAAA;AAArIC,4CAACp2B,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,oDAAoDm2B,UAAAA,MAAwC;AAAa/3B,eAAA+3B;AAAA/3B,eAAAg4B;AAAAA,IAAA,OAAA;AAAAA,aAAAh4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi4B;AAAA,QAAAj4B,WAAAsM,GAAA;AAE9I2rB,aAAA3rB,EAAE,mCAAmC;AAACtM,eAAAsM;AAAAtM,eAAAi4B;AAAAA,IAAA,OAAA;AAAAA,aAAAj4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAk4B;AAAA,QAAAl4B,WAAAi4B,MAAA;AAD3CC,4CAACt2B,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,qDACjCq2B,UAAAA,MACL;AAAaj4B,eAAAi4B;AAAAj4B,eAAAk4B;AAAAA,IAAA,OAAA;AAAAA,aAAAl4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm4B;AAAA,QAAAn4B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGLw1B,aAAAx2B,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mFAAkF,UAAA,cAAU;AAAO3B,eAAAm4B;AAAAA,IAAA,OAAA;AAAAA,aAAAn4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo4B;AAAA,QAAAC;AAAA,QAAAr4B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AADvHy1B,6CAAA,MAAA,EACID,UAAAA;AAAAA,QAAAA;AAAAA,QACA52B,2BAAAA,eAAgB,WAAA,gBAAe,UAAA;AAAA,UAAA;AAAA,UAAqDI,2BAAAA,cAAgB,WAAA,sEAAqE,UAAA,uBAAA,CAAoB;AAAA,QAAA,EAAA,CAAO;AAAA,MAAA,GACxM;AAEI02B,aAAA12B,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mFAAkF,UAAA,cAAU;AAAO3B,eAAAo4B;AAAAp4B,eAAAq4B;AAAAA,IAAA,OAAA;AAAAD,aAAAp4B,EAAA,GAAA;AAAAq4B,aAAAr4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs4B;AAAA,QAAAC;AAAA,QAAAv4B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AADvH21B,6CAAA,MAAA,EACID,UAAAA;AAAAA,QAAAA;AAAAA,QACA92B,2BAAAA,KAAA,QAAA,EAAgB,WAAA,gBAAe,UAAA;AAAA,UAAA;AAAA,UAA+EI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,sEAAqE,UAAA,+CAAA,CAAsE;AAAA,QAAA,EAAA,CAAO;AAAA,MAAA,GACpR;AAEI42B,aAAA52B,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mFAAkF,UAAA,gBAAY;AAAO3B,eAAAs4B;AAAAt4B,eAAAu4B;AAAAA,IAAA,OAAA;AAAAD,aAAAt4B,EAAA,GAAA;AAAAu4B,aAAAv4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAw4B;AAAA,QAAAx4B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAV7H61B,qDAAc,WAAA,kGACVJ,UAAAA;AAAAA,QAAAA;AAAAA,QAIAE;AAAAA,wCAIA,MAAA,EACIC,UAAAA;AAAAA,UAAAA;AAAAA,UACAh3B,2BAAAA,eAAgB,WAAA,gBAAe,UAAA;AAAA,YAAA;AAAA,YAA8EI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,sEAAqE,UAAA,uDAAA,CAA2E;AAAA,UAAA,EAAA;WACjR;AAAA,MAAA,GACJ;AAAK3B,eAAAw4B;AAAAA,IAAA,OAAA;AAAAA,aAAAx4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAy4B;AAAA,QAAAz4B,EAAA,GAAA,MAAAg4B,QAAAh4B,WAAAk4B,MAAA;AAlBTO,aAAAl3B,2BAAAA,KAAC8yB,GAAAA,OAAA,EAAiB,WAAAyD,MACdE,UAAAA;AAAAA,QAAAA;AAAAA,QACAE;AAAAA,QAGAM;AAAAA,MAAAA,GAcJ;AAAQx4B,eAAAg4B;AAAAh4B,eAAAk4B;AAAAl4B,eAAAy4B;AAAAA,IAAA,OAAA;AAAAA,aAAAz4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA04B;AAAA,QAAA14B,EAAA,GAAA,MAAA63B,QAAA73B,EAAA,GAAA,MAAAy4B,QAAAz4B,EAAA,GAAA,MAAA21B,OAAA31B,EAAA,GAAA,MAAA22B,OAAA32B,WAAAo3B,KAAA;AAjEZsB,aAAAn3B,2BAAAA,KAAA,OAAA,EAAe,WAAA,uBACXo0B,UAAAA;AAAAA,QAAAA;AAAAA,QAOAgB;AAAAA,QAYAS;AAAAA,QAaAS;AAAAA,QAaAY;AAAAA,MAAAA,GAoBJ;AAAMz4B,eAAA63B;AAAA73B,eAAAy4B;AAAAz4B,eAAA21B;AAAA31B,eAAA22B;AAAA32B,eAAAo3B;AAAAp3B,eAAA04B;AAAAA,IAAA,OAAA;AAAAA,aAAA14B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA24B;AAAA,QAAA34B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEUg2B,aAAA12B,GAAAA,IAAI,qLAAmLqN,qBAAoB;AAACtP,eAAA24B;AAAAA,IAAA,OAAA;AAAAA,aAAA34B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA44B;AAAA,QAAA54B,WAAAsM,GAAA;AAEnNssB,aAAAtsB,EAAE,6BAA6B;AAACtM,eAAAsM;AAAAtM,eAAA44B;AAAAA,IAAA,OAAA;AAAAA,aAAA54B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA64B;AAAA,QAAA74B,WAAA44B,MAAA;AADrCC,4CAACj3B,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,8DACjCg3B,UAAAA,MACL;AAAa54B,eAAA44B;AAAA54B,eAAA64B;AAAAA,IAAA,OAAA;AAAAA,aAAA74B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA84B;AAAA,QAAA94B,WAAAsM,GAAA;AAURwsB,aAAAxsB,EAAE,8BAA8B;AAACtM,eAAAsM;AAAAtM,eAAA84B;AAAAA,IAAA,OAAA;AAAAA,aAAA94B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAA+4B;AAAA,QAAA/4B,WAAA84B,MAAA;AATtCC,4CAACtoB,GAAAA,QAAA,EACa,WAAA,KACL,MAAA,iEACE,QAAA,UACC,SAAA,YACF,OAAA,WACD,MAAA,SACK,WAAA,mCAETqoB,UAAAA,MACL;AAAS94B,eAAA84B;AAAA94B,eAAA+4B;AAAAA,IAAA,OAAA;AAAAA,aAAA/4B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAg5B;AAAA,QAAAh5B,EAAA,GAAA,MAAA64B,QAAA74B,WAAA+4B,MAAA;AAdbC,aAAAz3B,2BAAAA,KAAA,OAAA,EAAgB,WAAAo3B,MACZE,UAAAA;AAAAA,QAAAA;AAAAA,QAGAE;AAAAA,MAAAA,GAWJ;AAAM/4B,eAAA64B;AAAA74B,eAAA+4B;AAAA/4B,eAAAg5B;AAAAA,IAAA,OAAA;AAAAA,aAAAh5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAi5B;AAAA,QAAAj5B,EAAA,GAAA,MAAA04B,QAAA14B,WAAAg5B,QAAAh5B,EAAA,GAAA,MAAAq1B,KAAA;AA3FV4D,6CAAC1Q,GAAAA,eAAA,EAAwB,WAAA,yCACrB8M,UAAAA;AAAAA,QAAAA;AAAAA,QAOAqD;AAAAA,QAoEAM;AAAAA,MAAAA,GAgBJ;AAAgBh5B,eAAA04B;AAAA14B,eAAAg5B;AAAAh5B,eAAAq1B;AAAAr1B,eAAAi5B;AAAAA,IAAA,OAAA;AAAAA,aAAAj5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAk5B;AAAA,QAAAl5B,EAAA,GAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEKu2B,aAAAA,MAAMvG,iBAAiB;AAAC3yB,eAAAk5B;AAAAA,IAAA,OAAA;AAAAA,aAAAl5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAm5B;AAAA,QAAAn5B,WAAAsM,GAAA;AAAoC6sB,aAAA7sB,EAAE,2BAA2B;AAACtM,eAAAsM;AAAAtM,eAAAm5B;AAAAA,IAAA,OAAA;AAAAA,aAAAn5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAo5B;AAAA,QAAAp5B,WAAAm5B,MAAA;AAD/GC,aAAAz3B,2BAAAA,IAAC8mB,GAAAA,eAAA,EAAwB,WAAA,uCACrB,UAAA9mB,2BAAAA,IAAC8O,WAAA,EAAgB,SAAAyoB,MAAkC,SAAA,UAAe,OAAA,WAAWC,gBAA+B,GAChH;AAAgBn5B,eAAAm5B;AAAAn5B,eAAAo5B;AAAAA,IAAA,OAAA;AAAAA,aAAAp5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAq5B;AAAA,QAAAr5B,EAAA,GAAA,MAAA0yB,YAAA1yB,WAAAi5B,QAAAj5B,EAAA,GAAA,MAAAo5B,MAAA;AAhGpBC,6CAAChR,WAAA,EAAaqK,gBAAwBC,cAAAA,aAAsB,UAAA,OACxDsG,UAAAA;AAAAA,QAAAA;AAAAA,QA6FAG;AAAAA,MAAAA,GAGJ;AAASp5B,eAAA0yB;AAAA1yB,eAAAi5B;AAAAj5B,eAAAo5B;AAAAp5B,eAAAq5B;AAAAA,IAAA,OAAA;AAAAA,aAAAr5B,EAAA,GAAA;AAAA,IAAA;AAAA,QAAAs5B;AAAA,QAAAt5B,EAAA,GAAA,MAAAmD,OAAAnD,EAAA,GAAA,MAAAq5B,QAAAr5B,EAAA,GAAA,MAAA00B,OAAA10B,WAAAg1B,KAAA;AA7QbsE,aAAA/3B,2BAAAA,KAAAkQ,qBAAA,EACItO,UAAAA;AAAAA,QAAAA;AAAAA,QAYAuxB;AAAAA,QAsJAM;AAAAA,QASAqE;AAAAA,MAAAA,GAiGS;AACVr5B,eAAAmD;AAAAnD,eAAAq5B;AAAAr5B,eAAA00B;AAAA10B,eAAAg1B;AAAAh1B,eAAAs5B;AAAAA,IAAA,OAAA;AAAAA,aAAAt5B,EAAA,GAAA;AAAA,IAAA;AAAA,WA9QHs5B;AAAAA,EA8QG;AApViB,WAAAt2B,QAAAu2B,UAAA;AAAA,WAoGI53B,2BAAAA,IAACoyB,GAAAA,cAAkC,OAAAN,SAAM9pB,IACrC,UAAApI,2BAAAA,KAAA,OAAA,EAAe,WAAA,2BACX,UAAA;AAAA,MAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,WAAW8xB,UAAAA,SAAMn0B,OAAO;AAAA,MACxCqC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6DAA6D8xB,mBAAM7zB,YAAAA,CAAa;AAAA,IAAA,GACpG,EAAA,GAJa6zB,SAAM9pB,EAKvB;AAAA,EAAa;AAzGjB,WAAAqqB,SAAA1Y,MAAA;AAAA,WAuLI3Z,2BAAAA,IAAC63B,GAAAA,iBAAA,EAAkCle,mCAEnC;AAAA,EAAkB;ACnQ3C,QAAM5U,YAAYA,CAAC;AAAA,IAAEuoB,SAAS;AAAA,EAAwB,MAAM;AAC/D,UAAM;AAAA,MAAE9V;AAAAA,IAAAA,IAAkB5Y,sBAAAA;AAC1B,UAAM+Y,qBAAqBC,KAAAA,sBAAAA;AAC3B,UAAMC,qBAAqBC,KAAAA,4BAAAA;AAC3B,UAAM;AAAA,MAAEnN;AAAAA,IAAAA,IAAM6C,oBAAAA;AAEd,UAAM,CAACsqB,WAAWC,YAAY,IAAI3qB,MAAAA,SAAS,IAAI;AAC/C,UAAM,CAACgF,OAAO4lB,QAAQ,IAAI5qB,MAAAA,SAAwB,IAAI;AACtD,UAAM,CAAC9C,QAAQ2tB,SAAS,IAAI7qB,MAAAA,SAA2B,CAAA,CAAE;AACzD,UAAM,CAAC8qB,eAAeC,gBAAgB,IAAI/qB,MAAAA,SAAwB,IAAI;AACtE,UAAM,CAACiC,WAAWC,YAAY,IAAIlC,MAAAA,SAAS,CAAC;AAE5C,UAAM,CAACgrB,eAAeC,gBAAgB,IAAIjrB,MAAAA,SAAwC,IAAI;AAEtF,UAAM,CAACwY,aAAaC,cAAc,IAAIzY,MAAAA,SAAS,MAAM;AACjD,UAAI;AACA,cAAM+L,QAAQd,aAAaC,QAAQ,gCAAgC;AACnE,eAAOa,UAAU,OAAO2M,WAAW3M,KAAK,IAAI;AAAA,MAChD,SAAShL,GAAG;AACR,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED,UAAM,CAACjB,iBAAiBC,kBAAkB,IAAIC,eAAkC;AAAA,MAAEC,QAAQ;AAAA,IAAA,CAAM;AAGhG,UAAM,CAACirB,YAAYC,aAAa,IAAInrB,MAAAA,SAA4B,QAAQ;AAExEhO,UAAAA,UAAU,MAAM;AACZ,UAAI;AACAiZ,qBAAagD,QAAQ,kCAAkCuK,YAAYxF,SAAAA,CAAU;AAAA,MACjF,SAASjS,KAAG;AAAA,MAAE;AAAA,IAClB,GAAG,CAACyX,WAAW,CAAC;AAEhB,UAAM4S,eAAeze,MAAAA,YAAY,YAAY;AACzC,UAAI,CAACvC,eAAewE,YAAY;AAC5Bgc,iBAASrtB,EAAE,8BAA8B,CAAC;AAC1CotB,qBAAa,KAAK;AAClB;AAAA,MACJ;AAEAA,mBAAa,IAAI;AACjBC,eAAS,IAAI;AACb,UAAI;AAEA,cAAMS,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASlB,cAAMC,eAAe,MAAMlhB,cAAewE,WAAYyc,SAAS;AAG/D,cAAME,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAapB,cAAMC,iBAAiB,MAAMphB,cAAewE,WAAY2c,WAAW;AAEnE,cAAME,cAAcA,CAAC5c,WAA+C;AAChE,cAAIA,UAAU,OAAOA,WAAW,YAAY,UAAUA,UAAUgB,MAAMC,QAASjB,OAA+CkB,IAAI,GAAG;AACjI,mBAAQlB,OAA+CkB;AAAAA,UAC3D;AACA,cAAIF,MAAMC,QAAQjB,MAAM,EAAG,QAAOA;AAClC,iBAAO,CAAA;AAAA,QACX;AAEA,cAAM6c,QAAQD,YAAYH,YAAY;AACtC,cAAMK,QAAQF,YAAYD,cAAc;AAExC,cAAMI,WAA2C,CAAA;AAEjDF,cAAMhuB,QAAQ,CAACmuB,SAAkC;AAC7C,gBAAMtuB,MAAIsuB;AACV,gBAAMtmB,SAAShI,IAAEuuB,cAAcvuB,IAAEwuB,cAAc;AAC/C,gBAAM1uB,QAAQE,IAAEyuB,aAAazuB,IAAE0uB,aAAa;AAC5C,gBAAMC,aAAa3uB,IAAE4uB,eAAe5uB,IAAE6uB,eAAe;AAErD,gBAAM53B,MAAM,GAAG+Q,MAAM,IAAIlI,KAAK;AAC9BuuB,mBAASp3B,GAAG,IAAI;AAAA,YACZqM,YAAY0E;AAAAA,YACZ/H,WAAWH;AAAAA,YACX6uB;AAAAA,YACAG,UAAU,CAAA;AAAA,UAAA;AAAA,QAElB,CAAC;AAEDV,cAAMjuB,QAAQ,CAAC4uB,SAAkC;AAC7C,gBAAMjR,IAAIiR;AACV,gBAAM/mB,WAAS8V,EAAEyQ,cAAczQ,EAAE0Q,cAAc;AAC/C,gBAAM1uB,UAAQge,EAAE2Q,aAAa3Q,EAAE4Q,aAAa;AAC5C,gBAAMz3B,QAAM,GAAG+Q,QAAM,IAAIlI,OAAK;AAE9B,cAAIuuB,SAASp3B,KAAG,GAAG;AAEf,gBAAI+3B,cAAwB,CAAA;AAC5B,kBAAM3O,IAAIvC,EAAEjO,SAASiO,EAAEmR;AACvB,gBAAI3c,MAAMC,QAAQ8N,CAAC,GAAG;AAClB2O,4BAAc3O;AAAAA,YAClB,WAAW,OAAOA,MAAM,UAAU;AAC9B2O,4BAAc3O,EAAEzM,QAAQ,UAAU,EAAE,EAAEsb,MAAM,GAAG,EAAE/5B,IAAI2B,CAAAA,MAAKA,EAAEuH,KAAAA,CAAM;AAAA,YACtE;AAEAgwB,qBAASp3B,KAAG,EAAE63B,SAASrzB,KAAK;AAAA,cACxBmqB,YAAY9H,EAAE8H,cAAc9H,EAAEqR,cAAc;AAAA,cAC5CV,WAAW3uB;AAAAA,cACXgmB,YAAYhI,EAAEgI,cAAchI,EAAEsR,cAAc;AAAA,cAC5Cvf,OAAOmf;AAAAA,cACPnJ,KAAK/H,EAAE+H,OAAO/H,EAAEuR,OAAO;AAAA,cACvBtJ,MAAMjI,EAAEiI,QAAQjI,EAAEwR,QAAQ;AAAA,cAC1BtJ,YAAYlI,EAAEkI,cAAclI,EAAEyR,cAAc;AAAA,YAAA,CAC/C;AAAA,UACL;AAAA,QACJ,CAAC;AAED,cAAMC,eAAe5vB,OAAOmH,OAAOsnB,QAAQ,EAAEoB,KAAK,CAAC3W,GAAG4W,MAAM5W,EAAE7Y,UAAU0vB,cAAcD,EAAEzvB,SAAS,CAAC;AAClGqtB,kBAAUkC,YAAY;AAEtB,YAAIA,aAAansB,SAAS,KAAK,CAACkqB,eAAe;AAC3CC,2BAAiB,GAAGgC,aAAa,CAAC,EAAElsB,UAAU,IAAIksB,aAAa,CAAC,EAAEvvB,SAAS,EAAE;AAAA,QACjF;AAAA,MAEJ,SAASuD,KAAY;AACjBmF,gBAAQlB,MAAM,oBAAoBjE,GAAC;AACnC6pB,iBAAS,oCAAoC7pB,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC,EAAE;AAAA,MAC5F,UAAA;AACI4pB,qBAAa,KAAK;AAAA,MACtB;AAAA,IACJ,GAAG,CAACvgB,eAAe0gB,aAAa,CAAC;AAEjC94B,UAAAA,UAAU,MAAM;AACZi5B,uBAAiB,IAAI;AAAA,IACzB,GAAG,CAACH,aAAa,CAAC;AAElB94B,UAAAA,UAAU,MAAM;AACZo5B,mBAAAA;AAAAA,IACJ,GAAG,CAACA,YAAY,CAAC;AAEjB,UAAM+B,kBAAkB30B,MAAAA,QAAQ,MAAM;AAClC,UAAI,CAACsyB,cAAe,QAAO;AAC3B,aAAO5tB,OAAOI,KAAKC,CAAAA,QAAK,GAAGA,IAAEsD,UAAU,IAAItD,IAAEC,SAAS,OAAOstB,aAAa,KAAK;AAAA,IACnF,GAAG,CAACA,eAAe5tB,MAAM,CAAC;AAE1B,UAAMkwB,gBAAgB50B,MAAAA,QAAQ,MAAM;AAChC,YAAM60B,SAA2C,CAAA;AACjDnwB,aAAOQ,QAAQL,CAAAA,YAAS;AACpB,YAAI,CAACgwB,OAAOhwB,QAAMwD,UAAU,GAAG;AAC3BwsB,iBAAOhwB,QAAMwD,UAAU,IAAI,CAAA;AAAA,QAC/B;AACAwsB,eAAOhwB,QAAMwD,UAAU,EAAE7H,KAAKqE,OAAK;AAAA,MACvC,CAAC;AACD,aAAOgwB;AAAAA,IACX,GAAG,CAACnwB,MAAM,CAAC;AAEX,UAAMowB,mBAAmB90B,MAAAA,QAAQ,MAAM;AACnC,UAAI,CAAC20B,gBAAiB,QAAO;AAC7B,aAAO1iB,mBAAmB5G,aAAavG,KAAK,CAACkE,MACzCA,EAAE5G,OAAOuyB,gBAAgB3vB,aACzBgE,EAAE7Q,SAASw8B,gBAAgB3vB,aAC3BgE,EAAEnE,UAAU8vB,gBAAgB3vB,aAC5BgE,EAAEpO,SAAS+5B,gBAAgB3vB,aAC3BgE,EAAE+rB,iBAAiBJ,gBAAgB3vB,SACvC,KAAK;AAAA,IACT,GAAG,CAAC2vB,iBAAiB1iB,mBAAmB5G,WAAW,CAAC;AAEpD,UAAM2pB,iBAAiBh1B,MAAAA,QAAQ,MAAM;AACjC,UAAI,CAAC20B,gBAAiB,QAAO,CAAA;AAE7B,YAAMM,cAA8C,CAAA;AAGpD,OAACN,gBAAgBd,YAAY,CAAA,GAAI3uB,QAAQ2d,CAAAA,QAAK;AAC1CoS,oBAAYpS,IAAE8H,UAAU,IAAI;AAAA,UAAE,GAAG9H;AAAAA,UAC7CqS,QAAQ;AAAA,QAAA;AAAA,MACA,CAAC;AAGD,UAAIJ,oBAAoBK,MAAAA,qBAAqBL,gBAAgB,KAAKA,iBAAiBM,eAAe;AAC9FN,yBAAiBM,cAAclwB,QAAQ,CAACmwB,SAAqH;AACzJ,gBAAMC,WAAWD,KAAKj9B;AACtB,cAAI,CAACk9B,SAAU;AAEf,cAAIL,YAAYK,QAAQ,GAAG;AAEvBL,wBAAYK,QAAQ,IAAI;AAAA,cACpB3K,YAAY2K;AAAAA,cACZ9B,WAAWmB,gBAAgB3vB;AAAAA,cAC3B6lB,aAAawK,KAAK3zB,QAAQ,cAAcua,YAAAA;AAAAA,cACxC2O,MAAMyK,KAAKE,aAAa,OAAOtZ,YAAAA;AAAAA,cAC/BrH,OAAOygB,KAAKzgB,SAAS,CAAC,QAAQ;AAAA,cAC9BkW,MAAMuK,KAAKG,SAAS;AAAA,cACpBzK,YAAYsK,KAAKI,aAAa;AAAA,cAC9BP,QAAQ;AAAA,YAAA;AAAA,UAEhB,OAAO;AACHD,wBAAYK,QAAQ,IAAI;AAAA,cACpB3K,YAAY2K;AAAAA,cACZ9B,WAAWmB,gBAAgB3vB;AAAAA,cAC3B6lB,aAAawK,KAAK3zB,QAAQ,cAAcua,YAAAA;AAAAA,cACxC2O,MAAMyK,KAAKE,aAAa,OAAOtZ,YAAAA;AAAAA,cAC/BrH,OAAOygB,KAAKzgB,SAAS,CAAC,QAAQ;AAAA,cAC9BkW,MAAMuK,KAAKG,SAAS;AAAA,cACpBzK,YAAYsK,KAAKI,aAAa;AAAA,cAC9BP,QAAQ;AAAA,YAAA;AAAA,UAEhB;AAAA,QACJ,CAAC;AAAA,MACL;AAEA,aAAOvwB,OAAOmH,OAAOmpB,WAAW,EAAET,KAAK,CAAC3W,KAAG4W,QAAM5W,IAAE8M,WAAW+J,cAAcD,IAAE9J,UAAU,CAAC;AAAA,IAC7F,GAAG,CAACgK,iBAAiBG,gBAAgB,CAAC;AAGtC,UAAMY,WAAW11B,MAAAA,QAAQ,MAAM;AAC3B,YAAM21B,QAAQjxB,OAAO0D;AACrB,YAAM1B,UAAUhC,OAAOqF,OAAOhF,CAAAA,QAAKA,IAAE2uB,UAAU,EAAEtrB;AACjD,YAAMwtB,eAAelxB,OAAOqF,OAAOhF,CAAAA,QAAKA,IAAE8uB,SAASzrB,SAAS,CAAC,EAAEA;AAC/D,YAAMytB,gBAAgBnxB,OAAO+R,OAAO,CAACqf,KAAK/wB,QAAM+wB,MAAM/wB,IAAE8uB,SAASzrB,QAAQ,CAAC;AAC1E,aAAO;AAAA,QAAEutB;AAAAA,QACjBjvB;AAAAA,QACAkvB;AAAAA,QACAC;AAAAA,MAAAA;AAAAA,IACI,GAAG,CAACnxB,MAAM,CAAC;AAEX,UAAMqxB,kBAAkBA,CAACh+B,OAAeoJ,UAAkB;AACtD,aACInH,2BAAAA,KAAC,OAAA,EAAI,WAAU,0IACX,UAAA;AAAA,QAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,sGACXjC,UAAAA;AAAAA,UAAAA;AAAAA,UAAM;AAAA,QAAA,GACX;AAAA,QACAqC,2BAAAA,IAAC,QAAA,EAAK,WAAU,6EACX+G,UAAAA,MAAAA,CACL;AAAA,MAAA,GACJ;AAAA,IAER;AAEA,WACI/G,+BAAC,SAAI,WAAU,iHACX,yCAACkmB,GAAAA,iBAAA,EACG,aAAY,cACZ,kBAAkBN,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACIjmB,2BAAAA,KAAC,SAAI,WAAWU,GAAAA,IAAI,qEAAqEqN,GAAAA,kBAAkB,GACvG,UAAA;AAAA,MAAA/N,2BAAAA,KAAC2P,GAAAA,MAAA,EAAK,OAAO+oB,YAAY,eAAgB9oB,CAAAA,MAAM+oB,cAAc/oB,CAAsB,GAAG,SAAQ,QAAO,WAAU,uDAC3G,UAAA;AAAA,QAAAxP,2BAAAA,IAACyP,GAAAA,KAAA,EAAI,OAAM,UAAS,UAAA,UAAM;AAAA,QAC1BzP,2BAAAA,IAACyP,GAAAA,KAAA,EAAI,OAAM,QAAO,UAAA,OAAA,CAAI;AAAA,MAAA,GAC1B;AAAA,MAEA7P,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCACV04B,UAAAA;AAAAA,QAAAA,eAAe,YACZ14B,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA;AAAA,YAAA3N,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,sFACnC0K,UAAAA,EAAE,sBAAsB,GAC7B;AAAA,YACA3K,2BAAAA,IAAC4N,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAAS4qB,cAAc,OAAM,WAClD,UAAAx4B,2BAAAA,IAAC6N,2BAAA,EAAc,MAAMlN,GAAAA,SAASmN,UAAS,EAAA,CAC3C;AAAA,UAAA,GACJ;AAAA,UACA9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,8CACV83B,UAAAA,aAAaxtB,OAAO0D,WAAW,IAC5BhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,2BAA0B,yCAACyN,GAAAA,kBAAA,EAAiB,MAAK,QAAA,CAAO,EAAA,CAAE,IACzElD,OAAOwD,KAAKysB,aAAa,EAAExsB,WAAW,IACtChO,2BAAAA,IAAC,OAAA,EAAI,WAAU,mBACX,UAAAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,0DAA0D0K,UAAAA,EAAE,sBAAsB,EAAA,CAAE,EAAA,CAChI,IAEAJ,OAAOC,QAAQgwB,aAAa,EAAE16B,IAAI,CAAC,CAACmO,YAAY2tB,YAAY,MACxDh8B,2BAAAA,KAAC,OAAA,EAAqB,WAAU,QAC5B,UAAA;AAAA,YAAAA,gCAAC,SACG,WAAU,iHACV,SAAS,MAAMuN,mBAAmBe,CAAAA,UAAS;AAAA,cAAE,GAAGA;AAAAA,cACxG,CAACD,UAAU,GAAG,CAACC,KAAKD,UAAU;AAAA,YAAA,EAAI,GAEsB,UAAA;AAAA,cAAAjO,+BAAC,SAAI,WAAWM,GAAAA,IAAI,qCAAqC4M,gBAAgBe,UAAU,IAAI,cAAc,EAAE,GAAG,MAAK,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,GAAE,sHAAoH,GAAE;AAAA,6CAC/QhO,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,wFAAwFgO,UAAAA,WAAAA,CAAW;AAAA,YAAA,GAC7I;AAAA,YAECf,gBAAgBe,UAAU,KACvBjO,2BAAAA,IAAC,SAAI,WAAU,yBACV47B,UAAAA,aAAa97B,IAAI2K,CAAAA,YAAS;AACvB,oBAAM7I,QAAM,GAAG6I,QAAMwD,UAAU,IAAIxD,QAAMG,SAAS;AAClD,oBAAMixB,aAAa3D,kBAAkBt2B;AACrC,qBACIhC,2BAAAA,KAAC,OAAA,EAEG,SAAS,MAAMu4B,iBAAiBv2B,KAAG,GACnC,WAAWtB,GAAAA,IACP,iFACAu7B,aACM,0EACA,kGACV,GAEA,UAAA;AAAA,gBAAA77B,2BAAAA,IAAC,SAAI,WAAU,6EAA4E,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,6FAA2F,EAAA,CAAE;AAAA,+CAClTC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,mCAAmCwK,kBAAMG,WAAU;AAAA,gBACzFhL,2BAAAA,KAAC,OAAA,EAAI,WAAU,2CACV6K,UAAAA;AAAAA,kBAAAA,QAAM6uB,4CACFjU,GAAAA,SAAA,EAAQ,OAAO1a,EAAE,oBAAoB,GAClC,UAAA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,wCAAA,CAAuC,GAC1D,IAEAA,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAO1a,EAAE,qBAAqB,GACnC,UAAA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,oDAAA,CAAmD,EAAA,CACtE;AAAA,iDAEH,QAAA,EAAK,WAAU,wFACXyK,UAAAA,QAAMgvB,SAASzrB,OAAAA,CACpB;AAAA,gBAAA,EAAA,CACJ;AAAA,cAAA,EAAA,GAxBKpM,KAyBT;AAAA,YAER,CAAC,EAAA,CACL;AAAA,UAAA,EAAA,GA7CEqM,UA+CV,CACH,EAAA,CAET;AAAA,QAAA,GACJ;AAAA,QAGHqqB,eAAe,UACZ14B,gCAAC,OAAA,EAAI,WAAU,wBACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,uGAAuGqN,GAAAA,kBAAkB,GACzI,UAAA3N,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,sFAAoF,sBAE5H,GACJ;AAAA,UACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,wDACX,UAAA;AAAA,YAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,sDAAsDqN,GAAAA,kBAAkB,GACxF,UAAA;AAAA,cAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,gBAAAI,2BAAAA,IAAC87B,YAAAA,YAAA,EAAW,MAAMn7B,GAAAA,SAASmN,UAAU,WAAU,gBAAc;AAAA,+CAC5D7N,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,6BAA4B,UAAA,aAAA,CAAU;AAAA,cAAA,GAChF;AAAA,6CACCA,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,uFAAqF,UAAA,qHAAA,CAE7H;AAAA,YAAA,GACJ;AAAA,YAEAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,cAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,uFAAuFqN,GAAAA,kBAAkB,GACzH,UAAA;AAAA,gBAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,iEAAgE,UAAA,gBAAY;AAAA,+CACnHA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qCAAqCq7B,mBAASC,MAAAA,CAAM;AAAA,cAAA,GAC9F;AAAA,8CACC,OAAA,EAAI,WAAWj7B,GAAAA,IAAI,uFAAuFqN,GAAAA,kBAAkB,GACzH,UAAA;AAAA,gBAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,iEAAgE,UAAA,eAAW;AAAA,gBACnHL,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,kBAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,wCAAA,CAAuC;AAAA,iDACrDC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qCAAqCq7B,mBAAShvB,QAAAA,CAAQ;AAAA,gBAAA,EAAA,CAChG;AAAA,cAAA,GACJ;AAAA,8CACC,OAAA,EAAI,WAAWhM,GAAAA,IAAI,uFAAuFqN,GAAAA,kBAAkB,GACzH,UAAA;AAAA,gBAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,iEAAgE,UAAA,wBAAoB;AAAA,+CAC3HA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qCAAqCq7B,mBAASE,aAAAA,CAAa;AAAA,cAAA,GACrG;AAAA,8CACC,OAAA,EAAI,WAAWl7B,GAAAA,IAAI,uFAAuFqN,GAAAA,kBAAkB,GACzH,UAAA;AAAA,gBAAA3N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,iEAAgE,UAAA,kBAAc;AAAA,+CACrHA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qCAAqCq7B,mBAASG,cAAAA,CAAc;AAAA,cAAA,EAAA,CACtG;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CAER;AAAA,IAAA,EAAA,CACJ,GAEJ,aACI77B,2BAAAA,KAAC,OAAA,EAAI,WAAU,8EAEX,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,6FAA6FqN,GAAAA,kBAAkB,GAC/H,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,oDACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EAAW,SAAQ,aAAY,WAAU,wEACrCs6B,UAAAA,kBAAkB,GAAGA,gBAAgBtsB,UAAU,IAAIssB,gBAAgB3vB,SAAS,KAAKD,EAAE,yBAAyB,GACjH;AAAA,UACC4vB,mBACGv6B,2BAAAA,IAAC,OAAA,EAAI,WAAU,QACVu6B,UAAAA,gBAAgBjB,aACbt5B,2BAAAA,IAACwvB,GAAAA,MAAA,EAAK,MAAK,YAAW,WAAU,+GAA+G7kB,YAAE,oBAAoB,EAAA,CAAE,IAEvK3K,2BAAAA,IAACwvB,GAAAA,MAAA,EAAK,MAAK,YAAW,WAAU,qHAAqH7kB,UAAAA,EAAE,qBAAqB,EAAA,CAAE,EAAA,CAEtL;AAAA,QAAA,GAER;AAAA,QACA3K,+BAAC,OAAA,EAAI,WAAU,kDACVu6B,6BACG36B,2BAAAA,KAAAkQ,qBAAA,EACI,UAAA;AAAA,UAAA9P,2BAAAA,IAAC8O,GAAAA,UACG,SAAQ,QACR,MAAK,SACL,SAAS,YAAY;AACjB,kBAAMrE,UAAQ8vB,gBAAgB3vB;AAC9B,kBAAMmxB,SAASxB,gBAAgBjB,aAAa,YAAY;AACxD,gBAAI,CAAC0C,QAAQ,4BAA4BD,OAAOE,aAAa,2BAA2BxxB,OAAK,IAAI,EAAG;AACpG,gBAAI;AACA,oBAAM+M,cAAewE,WAAY,gBAAgBvR,OAAK,KAAKsxB,MAAM,qBAAqB;AACtFpkB,iCAAmBqG,KAAK;AAAA,gBAAExN,MAAM;AAAA,gBACpFgD,SAAS,OAAOuoB,OAAOE,YAAAA,CAAa,QAAQxxB,OAAK;AAAA,cAAA,CAAI;AACD+tB,2BAAAA;AAAAA,YACJ,SAASrqB,KAAY;AACjBwJ,iCAAmBqG,KAAK;AAAA,gBAAExN,MAAM;AAAA,gBACpFgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,cAAA,CAAG;AAAA,YACL;AAAA,UACJ,GAECosB,0BAAgBjB,aAAa3uB,EAAE,wBAAwB,IAAIA,EAAE,uBAAuB,GACzF;AAAA,UAEA3K,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAkD;AAAA,UAEjEA,+BAAC8O,GAAAA,QAAA,EACG,SAAQ,QACR,MAAK,SACL,SAAS0pB,cACT,0CAAY3qB,YAAAA,eAAA,EAAc,MAAMlN,GAAAA,SAASmN,SAAAA,IAAY,UAAA,WAGzD;AAAA,UAEA9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDAAA,CAAkD;AAAA,yCAEhE8O,GAAAA,QAAA,EACG,MAAK,SACL,OAAM,WACN,UAAU,CAAC4rB,kBACX,SAAS,MAAMrC,iBAAiB,KAAK,GAEpC1tB,UAAAA,EAAE,0BAA0B,EAAA,CACjC;AAAA,QAAA,EAAA,CACJ,EAAA,CAER;AAAA,MAAA,GACJ;AAAA,MAECyH,QACGpS,2BAAAA,IAAC,OAAA,EAAI,WAAU,+CACX,yCAAC0N,KAAAA,WAAA,EAAU,OAAO/C,EAAE,kBAAkB,GAAG,OAAc,SAAS6tB,aAAAA,CAAa,EAAA,CACjF,IACA,CAAC+B,kBACDv6B,2BAAAA,IAAC,OAAA,EAAI,WAAU,wEACX,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,QAAAI,2BAAAA,IAAC,SAAI,WAAU,qCAAoC,MAAK,QAAO,QAAO,gBAAe,SAAQ,aAAY,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,wGAAsG,EAAA,CAAE;AAAA,uCACrRC,GAAAA,YAAA,EAAW,SAAQ,SAAS0K,UAAAA,EAAE,yBAAyB,EAAA,CAAE;AAAA,MAAA,GAC9D,GACJ,IACAytB,+CACC,cAAA,EACG,QAAQA,kBAAkB,QAAQxvB,SAAYwvB,eAC9C,QAAQmC,gBAAgBtsB,YACxB,OAAOssB,gBAAgB3vB,WACvB,QAAQ,OAAOsxB,cAAc;AACzB,YAAI,CAACxB,iBAAkB;AACvB,cAAMO,SAAgC;AAAA,UAClCj9B,MAAMk+B,UAAU3L;AAAAA,UAChB4K,WAAWe,UAAU1L,KAAKyL,YAAAA;AAAAA,UAC1B30B,MAAM40B,UAAUzL,YAAYwL,YAAAA;AAAAA,UAC5Bb,OAAOc,UAAUxL,QAAQ9nB;AAAAA,UACzByyB,WAAWa,UAAUvL,cAAc/nB;AAAAA,UACnC4R,OAAO0hB,UAAU1hB;AAAAA,QAAAA;AAGrB,cAAM2hB,iBAAiBpB,2BAAqBL,gBAAgB,IAAIA,iBAAiBM,gBAAgBpyB,WAAc,CAAA;AAC/G,YAAIwzB;AACJ,YAAIhE,kBAAkB,OAAO;AACzBgE,qBAAW,CAAC,GAAGD,eAAelB,MAAI;AAAA,QACtC,OAAO;AACHmB,qBAAWD,cAAcr8B,IAAI,CAACkrB,QAAyBA,IAAEhtB,SAASo6B,cAAc7H,aAAa0K,SAAOjQ,GAAC;AAAA,QACzG;AAEA,YAAI;AACA,gBAAMqR,WAAW,MAAMC,MAAM,GAAGhP,MAAM,sCAAsC;AAAA,YACxEiP,QAAQ;AAAA,YACRtZ,SAAS;AAAA,cAAE,gBAAgB;AAAA,YAAA;AAAA,YAC3B1L,MAAM8B,KAAKqG,UAAU;AAAA,cACjBib,cAAeD,iBAAoE1yB,MAAO0yB,iBAAoE38B,QAAS28B,iBAAoE9pB,SAAS2pB,gBAAgB3vB;AAAAA,cACpQ4xB,gBAAgB;AAAA,gBAAExB,eAAeoB;AAAAA,cAAAA;AAAAA,YAAS,CAC7C;AAAA,UAAA,CACJ;AACD,cAAI,CAACC,SAASI,GAAI,OAAM,IAAIhpB,MAAM,uBAAuB;AAEzDkE,6BAAmBqG,KAAK;AAAA,YAAExN,MAAM;AAAA,YACxEgD,SAAS;AAAA,UAAA,CAA6B;AACE6kB,2BAAiB,IAAI;AACrBG,uBAAAA;AAAAA,QACJ,SAASrqB,KAAY;AACjBwJ,6BAAmBqG,KAAK;AAAA,YAAExN,MAAM;AAAA,YACxEgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,UAAA,CAAG;AAAA,QACjB;AAAA,MACJ,GACA,UAAU,MAAMkqB,iBAAiB,IAAI,EAAA,KAGzCr4B,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,yCAAC,OAAA,EAAI,WAAU,sEACX,UAAAJ,gCAAC,OAAA,EAAI,WAAU,yCACd26B,UAAAA;AAAAA,QAAAA,mBAAmB,CAACG,oBACjB96B,2BAAAA,KAAC88B,GAAAA,OAAA,EACG,OAAM,WAEN,UAAA;AAAA,UAAA18B,+BAACC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,QAAM,UAAA,+BAE5C;AAAA,yCACCA,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,cAAY,UAAA,+JAAA,CAEpD;AAAA,QAAA,GACJ;AAAA,QAGHs6B,mBAAmB,CAACA,gBAAgBjB,cACjC15B,2BAAAA,KAAC,SAAI,WAAWU,OAAI,2LAA2LqN,GAAAA,kBAAkB,GAC7N,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,0BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,uGACX,UAAAA,2BAAAA,IAAC28B,YAAAA,qBAAkB,MAAMh8B,GAAAA,SAASmN,UAAS,EAAA,CAC/C;AAAA,4CACC,OAAA,EACG,UAAA;AAAA,cAAA9N,+BAACC,GAAAA,YAAA,EAAW,SAAQ,aAAY,WAAU,wCAAsC,UAAA,wCAEhF;AAAA,6CACCA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,0DAAwD,UAAA,wJAAA,CAE9F;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UACAD,+BAAC8O,GAAAA,UACG,MAAK,UACL,SAAQ,UACR,OAAM,WACN,SAAS,MAAMupB,iBAAiB,KAAK,GACrC,WAAU,8BACV,UAAU,CAACqC,kBAEV/vB,UAAAA,EAAE,0BAA0B,EAAA,CACjC;AAAA,QAAA,GACJ;AAAA,QAGH4vB,mBAAmBK,kBAAkBA,eAAe5sB,SAAS,KAC1DpO,gCAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,UAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,aAAY,WAAU,mFAAmF0K,UAAAA,EAAE,qBAAqB,GAAE;AAAA,UACrJiwB,eAAe96B,IAAI+wB,CAAAA,WAChBjxB,2BAAAA,KAAC8yB,GAAAA,SAA8B,WAAWpyB,OAAI,yGAAyGqN,GAAAA,kBAAkB,GACrK,UAAA;AAAA,YAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,cAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAAI,2BAAAA,IAAC48B,YAAAA,SAAA,EAAQ,MAAMj8B,GAAAA,SAASmN,UAAU,WAAU,8DAA4D;AAAA,+CACvG7N,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,YAAY4wB,iBAAON,YAAW;AAAA,gBACnEM,OAAOiK,WAAW,eACf96B,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,oFACX,UAAArlB,2BAAAA,IAAC,OAAA,EAAI,WAAU,4GAA0G,UAAA,YAAA,CAEzH,GACJ;AAAA,gBAEH6wB,OAAOiK,WAAW,UACf96B,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,8EACX,UAAArlB,2BAAAA,IAAC,OAAA,EAAI,WAAU,qHAAmH,UAAA,UAAA,CAElI,EAAA,CACJ;AAAA,cAAA,GAER;AAAA,cACAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,kCACV+7B,UAAAA;AAAAA,gBAAAA,gBAAgB,UAAU9K,OAAOL,GAAG;AAAA,gBACpCmL,gBAAgB,SAAS1e,MAAMC,QAAQ2T,OAAOrW,KAAK,IAAIqW,OAAOrW,MAAM3L,KAAK,IAAI,IAAIgiB,OAAOrW,KAAK;AAAA,cAAA,EAAA,CAClG;AAAA,YAAA,GACJ;AAAA,YACA5a,2BAAAA,KAAC,OAAA,EAAI,WAAU,oCACVixB,UAAAA;AAAAA,cAAAA,OAAOiK,WAAW,UAAUJ,oBACzB16B,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,YACR,OAAM,WACN,SAAS,YAAY;AACjB,sBAAMmsB,SAAgC;AAAA,kBAClCj9B,MAAM6yB,OAAON;AAAAA,kBACb4K,WAAWtK,OAAOL,KAAKyL,YAAAA;AAAAA,kBACvB30B,MAAMupB,OAAOJ,YAAYwL,YAAAA;AAAAA,kBACzBb,OAAOvK,OAAOH,QAAQ9nB;AAAAA,kBACtByyB,WAAWxK,OAAOF,cAAc/nB;AAAAA,kBAChC4R,OAAOqW,OAAOrW;AAAAA,gBAAAA;AAGlB,sBAAM2hB,mBAAiBpB,2BAAqBL,gBAAgB,IAAIA,iBAAiBM,gBAAgBpyB,WAAc,CAAA;AAC/G,sBAAMwzB,aAAW,CAAC,GAAGD,iBAAelB,MAAI;AAExC,oBAAI;AACA,wBAAMoB,aAAW,MAAMC,MAAM,GAAGhP,MAAM,sCAAsC;AAAA,oBACxEiP,QAAQ;AAAA,oBACRtZ,SAAS;AAAA,sBAAE,gBAAgB;AAAA,oBAAA;AAAA,oBAC3B1L,MAAM8B,KAAKqG,UAAU;AAAA,sBACjBib,cAAeD,iBAAoE1yB,MAAO0yB,iBAAoE38B,QAAS28B,iBAAoE9pB,SAAS2pB,gBAAiB3vB;AAAAA,sBACrQ4xB,gBAAgB;AAAA,wBAAExB,eAAeoB;AAAAA,sBAAAA;AAAAA,oBAAS,CAC7C;AAAA,kBAAA,CACJ;AACD,sBAAI,CAACC,WAASI,GAAI,OAAM,IAAIhpB,MAAM,uBAAuB;AAEzDkE,qCAAmBqG,KAAK;AAAA,oBAAExN,MAAM;AAAA,oBACxGgD,SAAS;AAAA,kBAAA,CAAgC;AAC+BglB,+BAAAA;AAAAA,gBACJ,SAASrqB,KAAY;AACjBwJ,qCAAmBqG,KAAK;AAAA,oBAAExN,MAAM;AAAA,oBACxGgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,kBAAA,CAAG;AAAA,gBACe;AAAA,cACJ,GAAE,UAAA,sBAGN;AAAA,6CAEHW,GAAAA,QAAA,EAAO,MAAK,SAAQ,SAAQ,QAAO,OAAM,WAAU,SAAS,MAAMupB,iBAAiBxH,MAAM,GAAG,UAAU,CAAC6J,kBACnG/vB,UAAAA,EAAE,iBAAiB,GACxB;AAAA,cACCkmB,OAAOiK,WAAW,eACf96B,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAO1a,EAAE,mBAAmB,GAAG,SAAS,MAC7C,UAAA3K,+BAAC4N,GAAAA,YAAA,EACG,MAAK,SACL,SAAS,YAAY;AACjB,sBAAMnD,UAAQ8vB,gBAAiB3vB;AAC/B,oBAAI,CAACoxB,QAAQ,gBAAgBnL,OAAON,UAAU,iBAAiB9lB,OAAK,IAAI,EAAG;AAC3E,oBAAI;AACA,wBAAM+M,cAAewE,WAAY,gBAAgB6U,OAAON,UAAU,SAAS9lB,OAAK,GAAG;AACnFkN,qCAAmBqG,KAAK;AAAA,oBAAExN,MAAM;AAAA,oBAC5GgD,SAAS,WAAWqd,OAAON,UAAU;AAAA,kBAAA,CAAa;AAC0BiI,+BAAAA;AAAAA,gBACJ,SAASrqB,KAAY;AACjBwJ,qCAAmBqG,KAAK;AAAA,oBAAExN,MAAM;AAAA,oBAC5GgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,kBAAA,CAAG;AAAA,gBACmB;AAAA,cACJ,GAEA,UAAAnO,2BAAAA,IAACiQ,wBAAA,EAAW,MAAMtP,YAASmN,UAAS,GACxC,EAAA,CACJ;AAAA,YAAA,EAAA,CAER;AAAA,UAAA,EAAA,GA5FQ+iB,OAAON,UA6FnB,CACH;AAAA,QAAA,EAAA,CACL;AAAA,MAAA,EAAA,CAGJ,GACJ,EAAA,CACJ;AAAA,IAAA,EAAA,CAER,GACH,GAET;AAAA,EAER;;;;;AC1pBA,WAASsM,eAAeC,OAAuB;AAC3C,QAAIA,QAAQ,KAAM,QAAO,GAAGA,KAAK;AACjC,QAAIA,QAAQ,OAAO,KAAM,QAAO,IAAIA,QAAQ,MAAMzoB,QAAQ,CAAC,CAAC;AAC5D,QAAIyoB,QAAQ,OAAO,OAAO,KAAM,QAAO,IAAIA,SAAS,OAAO,OAAOzoB,QAAQ,CAAC,CAAC;AAC5E,WAAO,IAAIyoB,SAAS,OAAO,OAAO,OAAOzoB,QAAQ,CAAC,CAAC;AAAA,EACvD;AAEA,WAAS0oB,YAAYC,aAAsB;AACvC,QAAI,CAACA,YAAa,QAAOC,YAAAA;AACzB,QAAID,YAAYE,WAAW,QAAQ,EAAG,QAAOC,YAAAA;AAC7C,QAAIH,YAAYE,WAAW,QAAQ,EAAG,QAAOE,YAAAA;AAC7C,QAAIJ,YAAYE,WAAW,QAAQ,EAAG,QAAOG,YAAAA;AAC7C,WAAOJ,YAAAA;AAAAA,EACX;AAEA,WAASK,aAAat/B,MAAsB;AACxC,UAAMu/B,QAAQv/B,KAAK67B,MAAM,GAAG;AAC5B,WAAO0D,MAAMvvB,SAAS,IAAIuvB,MAAMA,MAAMvvB,SAAS,CAAC,EAAE6T,YAAAA,IAAgB;AAAA,EACtE;AAEA,WAAS2b,mBAAmBz/B,MAAiD;AACzE,QAAI,CAACA,QAAQA,SAAS,YAAY,CAAC;AAAA,MAAEJ,OAAO;AAAA,MAChDI,MAAM;AAAA,IAAA,CAAI;AACN,UAAMw/B,QAAQx/B,KAAK87B,MAAM,GAAG,EAAElqB,OAAO8tB,OAAO;AAC5C,UAAMC,WAAW,CAAC;AAAA,MAAE//B,OAAO;AAAA,MAC/BI,MAAM;AAAA,IAAA,CAAI;AACN,QAAI4/B,cAAc;AAClB,eAAWC,QAAQL,OAAO;AACtBI,oBAAcA,cAAc,GAAGA,WAAW,IAAIC,IAAI,KAAKA;AACvDF,eAASt3B,KAAK;AAAA,QAAEzI,OAAOigC;AAAAA,QAC/B7/B,MAAM4/B;AAAAA,MAAAA,CAAa;AAAA,IACf;AACA,WAAOD;AAAAA,EACX;AAMA,WAASG,aAAa;AAAA,IAClB7f;AAAAA,IACA8f;AAAAA,IACAC;AAAAA,IACAC;AAAAA,EAMJ,GAAG;AACC,UAAM,CAACC,WAAWC,YAAY,IAAI9wB,MAAAA,SAAS,KAAK;AAChD,UAAM,CAAC+wB,eAAeC,gBAAgB,IAAIhxB,MAAAA,SAAiB,CAAA,CAAE;AAC7D,UAAM,CAACgF,OAAO4lB,QAAQ,IAAI5qB,MAAAA,SAAwB,IAAI;AAEtD,UAAMixB,mBAAmBtkB,kBAAY,CAACukB,UAAkB;AACpDF,uBAAiBlwB,UAAQ,CAAC,GAAGA,MAAM,GAAGowB,KAAK,CAAC;AAAA,IAChD,GAAG,CAAA,CAAE;AAEL,UAAMC,mBAAmBxkB,kBAAY,CAACykB,UAAkB;AACpDJ,uBAAiBlwB,CAAAA,WAAQA,OAAKyB,OAAO,CAAC8uB,GAAGtuB,MAAMA,MAAMquB,KAAK,CAAC;AAAA,IAC/D,GAAG,CAAA,CAAE;AAEL,UAAME,eAAe3kB,MAAAA,YAAY,YAAY;AACzC,UAAIokB,cAAcnwB,WAAW,EAAG;AAChCkwB,mBAAa,IAAI;AACjBlG,eAAS,IAAI;AACb,UAAI;AACA,cAAMgG,SAASG,aAAa;AAC5BC,yBAAiB,CAAA,CAAE;AACnBL,gBAAAA;AAAAA,MACJ,SAASxiB,KAAK;AACVyc,iBAASzc,eAAe9H,QAAQ8H,IAAI/H,UAAU,eAAe;AAAA,MACjE,UAAA;AACI0qB,qBAAa,KAAK;AAAA,MACtB;AAAA,IACJ,GAAG,CAACC,eAAeH,UAAUD,OAAO,CAAC;AAErC,UAAMY,cAAc5kB,MAAAA,YAAY,MAAM;AAClC,UAAI,CAACkkB,WAAW;AACZG,yBAAiB,CAAA,CAAE;AACnBpG,iBAAS,IAAI;AACb+F,gBAAAA;AAAAA,MACJ;AAAA,IACJ,GAAG,CAACE,WAAWF,OAAO,CAAC;AAEvB,WACIn+B,2BAAAA,KAAC8mB,GAAAA,QAAA,EAAO,MAAY,cAAekY,CAAAA,MAAM,CAACA,KAAKD,YAAAA,GAAe,UAAS,MACnE,UAAA;AAAA,MAAA/+B,2BAAAA,KAACgnB,GAAAA,eAAA,EAAc,WAAU,OACrB,UAAA;AAAA,QAAAhnB,2BAAAA,KAAC,OAAA,EAAI,WAAU,yEACX,UAAA;AAAA,UAAAI,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,MAAK,UAAA,gBAAY;AAAA,UACrCL,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,gEAA8D,UAAA;AAAA,YAAA;AAAA,YAC/FL,2BAAAA,KAAC,QAAA,EAAK,WAAU,0BAAyB,UAAA;AAAA,cAAA;AAAA,cAAEk+B,eAAe;AAAA,YAAA,EAAA,CAAO;AAAA,UAAA,EAAA,CACxE;AAAA,QAAA,GACJ;AAAA,QAEAl+B,2BAAAA,KAAC,OAAA,EAAI,WAAU,OAEX,UAAA;AAAA,UAAAI,2BAAAA,IAAC6+B,GAAAA,YAAA,EACG,QAAQ,CAAA,GACR,cAAcR,kBACd,MAAK,SACL,mBACIz+B,2BAAAA,KAAC,OAAA,EAAI,WAAU,sEACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC8+B,YAAAA,iBAAA,EAAgB,WAAU,uCAAA,CAAsC;AAAA,2CAChE7+B,GAAAA,YAAA,EAAW,SAAQ,MAAK,WAAU,aAAW,UAAA,sCAE9C;AAAA,2CACCA,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,uCAAqC,UAAA,0BAAA,CAE7E;AAAA,UAAA,EAAA,CACJ,EAAA,CACH;AAAA,UAGJmS,SACGpS,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,+CACnCmS,UAAAA,OACL;AAAA,UAGH+rB,cAAcnwB,SAAS,KACpBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAAA,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,2BAAyB,UAAA;AAAA,cAAA;AAAA,cAC5Ck+B,cAAcnwB;AAAAA,cAAO;AAAA,YAAA,GAC1C;AAAA,YACAhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCACVm+B,wBAAcr+B,IAAI,CAACi/B,MAAMP,4CACrB,OAAA,EAEG,WAAWl+B,GAAAA,IACP,iDACA,iDACJ,GAEA,UAAA;AAAA,cAAAV,2BAAAA,KAAC,OAAA,EAAI,WAAU,uBACX,UAAA;AAAA,gBAAAI,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,YACjC8+B,eAAK/gC,MACV;AAAA,gBACAgC,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,2BACnC48B,UAAAA,eAAekC,KAAKjU,IAAI,EAAA,CAC7B;AAAA,cAAA,GACJ;AAAA,6CACChc,GAAAA,QAAA,EACG,SAAQ,QACR,MAAK,SACL,SAAUX,CAAAA,MAAM;AACZA,kBAAEC,gBAAAA;AACFmwB,iCAAiBC,OAAK;AAAA,cAC1B,GACA,UAAUP,WAAU,UAAA,SAAA,CAGxB;AAAA,YAAA,EAAA,GAxBK,GAAGc,KAAK/gC,IAAI,IAAIwgC,OAAK,EAyB9B,CACH,EAAA,CACL;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CAER;AAAA,MAAA,GACJ;AAAA,sCAEC1X,GAAAA,eAAA,EACG,UAAA;AAAA,QAAA9mB,2BAAAA,IAAC8O,GAAAA,UAAO,SAAQ,QAAO,SAAS6vB,aAAa,UAAUV,WAAU,UAAA,SAAA,CAEjE;AAAA,QACAj+B,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,SAAQ,UACR,SAAS4vB,cACT,UAAUP,cAAcnwB,WAAW,KAAKiwB,WAEvCA,UAAAA,YACGr+B,gCAAAkQ,WAAAA,UAAA,EACI,UAAA;AAAA,UAAA9P,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,WAAA,CAAU;AAAA,UAAA;AAAA,QAAA,EAAA,CAErC,IAEA,UAAU0wB,cAAcnwB,SAAS,IAAI,IAAImwB,cAAcnwB,MAAM,MAAM,EAAE,GAAA,CAE7E;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,EAER;AAMA,WAAAgxB,iBAAA5gC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAA0B,UAAA;AAAA,MAAAygC;AAAAA,MAAAhB;AAAAA,MAAAxU;AAAAA,MAAA0V;AAAAA,IAAAA,IAAA7gC;AAWN2gC,SAAI/B,aAAAE,WAAyB,QAAQ;AACrC6B,SAAI/B,aAAAE,WAAyB,QAAQ;AACrC6B,SAAI/B,aAAAE,WAAyB,QAAQ;AAAA,QAAAj+B;AAAA,QAAAZ,EAAA,CAAA,MAAA0gC,KAAA/B,aAAA;AAC3B/9B,WAAA89B,YAAYgC,KAAI/B,WAAY;AAAC3+B,QAAA,CAAA,IAAA0gC,KAAA/B;AAAA3+B,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAvD,UAAA6gC,oBAA0BjgC;AAC1B,UAAA,CAAAkgC,kBAAAC,mBAAA,IAAgDhyB,MAAAA,cAAc;AAAE,QAAAjO;AAAA,QAAAI;AAAA,QAAAlB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIxC7B,WAAAmB,GAAAA,IACZ,iCAA+BqN,GAAAA,oBAE/B,8BACJ;AAEoBpO,WAAAe,GAAAA,IAAI,2DAAyDqN,qBAAoB;AAACtP,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAJ,WAAAd,EAAA,CAAA;AAAAkB,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,CAAA,MAAA0gC,KAAA/gC,MAAA;AAC9F2B,0CAACM,eAAA,EAAmB,SAAA,SAAkB,WAAA,oCACjC8+B,eAAI/gC,KAAAA,CACT;AAAaK,QAAA,CAAA,IAAA0gC,KAAA/gC;AAAAK,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAA4gC,aAAA;AAERp/B,WAAAo/B,8CACI5Z,GAAAA,SAAA,EAAc,OAAA,YACX,UAAArlB,2BAAAA,IAAC4N,GAAAA,YAAA,EACQ,MAAA,SACI,eAAMgI,OAAAoI,KAAYihB,aAAa,QAAQ,GAEhD,UAAAj/B,2BAAAA,IAACuvB,4BAAmB,MAAA5uB,GAAAA,SAAAmN,SAAAA,CAAiB,EAAA,CACzC,EAAA,CACJ;AACHzP,aAAA4gC;AAAA5gC,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIgBH,WAAAA,MAAMu+B,wBAAwB;AAAC/gC,aAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAHhDF,0CAACukB,YAAA,EAAc,OAAA,UACX,UAAArlB,+BAAC4N,GAAAA,YAAA,EACQ,MAAA,SACI,SAAA/M,IACC,WAAA,yDAEV,UAAAb,2BAAAA,IAACiQ,YAAAA,YAAA,EAAiB,MAAAtP,YAAAmN,UAAiB,GACvC,EAAA,CACJ;AAAUzP,aAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAENC,WAAAjB,2BAAAA,IAAComB,YAAAA,OAAA,EAAY,MAAAzlB,GAAAA,SAAAmN,UAAiB;AAAGzP,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,UAAA0/B,SAAA;AADrC78B,0CAAC0M,GAAAA,YAAA,EAAgB,MAAA,SAAiBmwB,SAAAA,SAC9B98B,UAAAA,IACJ;AAAa5C,cAAA0/B;AAAA1/B,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAAwB,MAAAxB,UAAA6C,IAAA;AAtBjBC,qDAAe,WAAA,6BACVtB,UAAAA;AAAAA,QAAAA;AAAAA,QAUDiB;AAAAA,QASAI;AAAAA,MAAAA,GAGJ;AAAM7C,cAAAwB;AAAAxB,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,EAAA,EAAA,MAAA8C,OAAA9C,UAAAsB,IAAA;AA3BVyB,YAAAxB,2BAAAA,KAAA,OAAA,EAAgB,WAAAL,IACZI,UAAAA;AAAAA,QAAAA;AAAAA,QAGAwB;AAAAA,MAAAA,GAwBJ;AAAM9C,cAAA8C;AAAA9C,cAAAsB;AAAAtB,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAMM,UAAA+9B,MAAY/B,aAAayB,KAAI/gC,IAAK,GAACi+B,iBAAmB;AACtD,UAAAqD,YAAgBP,KAAI/B,aAAAE,WAAyB,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK,EAAA/2B,SAAWk5B,GAAG;AACnH,UAAAE,YAAgBR,KAAI/B,aAAAE,WAAyB,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,KAAK,EAAA/2B,SAAWk5B,GAAG;AACpG,UAAAG,YAAgBT,KAAI/B,aAAAE,WAAyB,QAAQ,KAAK,CAAC,OAAO,OAAO,OAAO,KAAK,EAAA/2B,SAAWk5B,GAAG;AACnG,UAAAI,gBAAoBV,KAAIE;AAAa,QAEjCS,aAAWT,eAAW;AAAA,UAAAz9B;AAAA,UAAAnD,UAAAohC,iBAAAphC,EAAA,EAAA,MAAA0gC,KAAA/gC,MAAA;AAElBwD,uDACSy9B,KAAAA,eACA,KAAAF,KAAI/gC,MACC,WAAA,+DAAA,CAA8D;AAC1EK,gBAAAohC;AAAAphC,UAAA,EAAA,IAAA0gC,KAAA/gC;AAAAK,gBAAAmD;AAAAA,MAAA,OAAA;AAAAA,eAAAnD,EAAA,EAAA;AAAA,MAAA;AALNiD,YACIE;AAAAA,IAKF,OAAA;AAAA,UACKm+B,aAAWV,eAAW;AAAA,YAAAz9B;AAAA,YAAAnD,UAAAohC,eAAA;AAEzBj+B,gDAAA,SAAA,EACSy9B,oBACK,WAAA,uCACV,UAAA,MAAQ;AACV5gC,kBAAAohC;AAAAphC,kBAAAmD;AAAAA,QAAA,OAAA;AAAAA,iBAAAnD,EAAA,EAAA;AAAA,QAAA;AALNiD,cACIE;AAAAA,MAKF,OAAA;AAAA,YACKo+B,aAAWX,eAAW;AAAA,cAAAz9B;AAAA,cAAAnD,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGrBQ,kDAAC67B,YAAAA,YAAA,EAAqB,WAAA,oCAAA,CAAmC;AAAEh/B,oBAAAmD;AAAAA,UAAA,OAAA;AAAAA,mBAAAnD,EAAA,EAAA;AAAA,UAAA;AAAA,cAAA8D;AAAA,cAAA9D,UAAAohC,eAAA;AAD/Dt9B,mBAAAvC,2BAAAA,KAAA,OAAA,EAAe,WAAA,oCACX4B,UAAAA;AAAAA,cAAAA;AAAAA,6CACA,SAAA,EAAYy9B,oBAAa,UAAA,MAAmB,WAAA,kBAAA,CAAiB;AAAA,YAAA,GACjE;AAAM5gC,oBAAAohC;AAAAphC,oBAAA8D;AAAAA,UAAA,OAAA;AAAAA,mBAAA9D,EAAA,EAAA;AAAA,UAAA;AAJViD,gBACIa;AAAAA,QAIF,OAAA;AAAA,cAAAX;AAAA,cAAAnD,UAAA6gC,mBAAA;AAIM19B,kDAAC,mBAAA,EAA4B,WAAA,YAAA,CAAW;AAAEnD,oBAAA6gC;AAAA7gC,oBAAAmD;AAAAA,UAAA,OAAA;AAAAA,mBAAAnD,EAAA,EAAA;AAAA,UAAA;AAAA,cAAA8D;AAAA,cAAA9D,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAC1CmB,mBAAAnC,2BAAAA,IAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,mDAAkD,UAAA,wBAE1F;AAAa5B,oBAAA8D;AAAAA,UAAA,OAAA;AAAAA,mBAAA9D,EAAA,EAAA;AAAA,UAAA;AAAA,cAAA+D;AAAA,cAAA/D,UAAAmD,MAAA;AAJjBY,mBAAAxC,2BAAAA,KAAA,OAAA,EAAe,WAAA,4DACX4B,UAAAA;AAAAA,cAAAA;AAAAA,cACAW;AAAAA,YAAAA,GAGJ;AAAM9D,oBAAAmD;AAAAnD,oBAAA+D;AAAAA,UAAA,OAAA;AAAAA,mBAAA/D,EAAA,EAAA;AAAA,UAAA;AANViD,gBACIc;AAAAA,QAMF;AAAA,MAAA;AAAA,IAAA;AAAA,QAAAZ;AAAA,QAAAnD,UAAAiD,KAAA;AAxClBE,oDAAe,WAAA,wBACX,kDAAe,WAAA,mKACVF,UAAAA,IAAAA,CAyCL,EAAA,CACJ;AAAMjD,cAAAiD;AAAAjD,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIEmB,oDACI,UAAAnC,2BAAAA,IAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,6GAA4G,UAAA,YAAA,CAEpJ,EAAA,CACJ;AAAM5B,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAGEoB,2CAACnC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uCAAsC,UAAA,QAE9E;AAAa5B,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgE;AAAA,QAAAhE,EAAA,EAAA,MAAA0gC,KAAA/gC,MAAA;AAHjBqE,4CAAA,OAAA,EACID,UAAAA;AAAAA,QAAAA;AAAAA,uCAGCnC,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,yBACjC8+B,eAAI/gC,KAAAA,CACT;AAAA,MAAA,GACJ;AAAMK,QAAA,EAAA,IAAA0gC,KAAA/gC;AAAAK,cAAAgE;AAAAA,IAAA,OAAA;AAAAA,YAAAhE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiE;AAAA,QAAAjE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEFsB,2CAACrC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uCAAsC,UAAA,QAE9E;AAAa5B,cAAAiE;AAAAA,IAAA,OAAA;AAAAA,YAAAjE,EAAA,EAAA;AAAA,IAAA;AAER,UAAAmE,MAAAu8B,KAAI/B,eAAgB;AAAS,QAAAv6B;AAAA,QAAApE,UAAAmE,KAAA;AALtCC,4CAAA,OAAA,EACIH,UAAAA;AAAAA,QAAAA;AAAAA,uCAGCrC,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,eACjCuC,UAAAA,IAAAA,CACL;AAAA,MAAA,GACJ;AAAMnE,cAAAmE;AAAAnE,cAAAoE;AAAAA,IAAA,OAAA;AAAAA,YAAApE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqE;AAAA,QAAArE,EAAA,EAAA,MAAA0gC,KAAAjU,MAAA;AACLpoB,YAAAq8B,KAAIjU,SAAAliB,UACDhJ,2BAAAA,cACI,UAAA;AAAA,QAAAI,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uCAAsC,UAAA,QAE9E;AAAA,QACAD,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,SAAkB,WAAA,eACjC48B,UAAAA,eAAekC,KAAIjU,IAAK,EAAA,CAC7B;AAAA,MAAA,GACJ;AACHzsB,QAAA,EAAA,IAAA0gC,KAAAjU;AAAAzsB,cAAAqE;AAAAA,IAAA,OAAA;AAAAA,YAAArE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsE;AAAA,QAAAtE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEG2B,2CAAC1C,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uCAAsC,UAAA,aAE9E;AAAa5B,cAAAsE;AAAAA,IAAA,OAAA;AAAAA,YAAAtE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuE;AAAA,QAAAvE,EAAA,EAAA,MAAA0gC,KAAA/gC,MAAA;AAER4E,YAAA06B,aAAayB,KAAI/gC,IAAK,KAAK;AAAGK,QAAA,EAAA,IAAA0gC,KAAA/gC;AAAAK,cAAAuE;AAAAA,IAAA,OAAA;AAAAA,YAAAvE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwE;AAAA,QAAAxE,UAAAuE,KAAA;AALvCC,4CAAA,OAAA,EACIF,UAAAA;AAAAA,QAAAA;AAAAA,uCAGC1C,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,yBACjC2C,UAAAA,IAAAA,CACL;AAAA,MAAA,GACJ;AAAMvE,cAAAuE;AAAAvE,cAAAwE;AAAAA,IAAA,OAAA;AAAAA,YAAAxE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyE;AAAA,QAAAzE,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEF8B,2CAAC7C,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uCAAsC,UAAA,QAE9E;AAAa5B,cAAAyE;AAAAA,IAAA,OAAA;AAAAA,YAAAzE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA0E;AAAA,QAAA1E,EAAA,EAAA,MAAA0gC,KAAAc,UAAA;AAHjB98B,YAAAnD,2BAAAA,KAAA,OAAA,EAAe,WAAA,cACXkD,UAAAA;AAAAA,QAAAA;AAAAA,uCAGC7C,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,mCACjC8+B,eAAIc,SAAAA,CACT;AAAA,MAAA,GACJ;AAAMxhC,QAAA,EAAA,IAAA0gC,KAAAc;AAAAxhC,cAAA0E;AAAAA,IAAA,OAAA;AAAAA,YAAA1E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA2E;AAAA,QAAA3E,EAAA,EAAA,MAAAgE,OAAAhE,EAAA,EAAA,MAAAoE,OAAApE,EAAA,EAAA,MAAAqE,OAAArE,EAAA,EAAA,MAAAwE,OAAAxE,UAAA0E,KAAA;AA1CVC,YAAApD,2BAAAA,KAAA,OAAA,EAAe,WAAA,0BACXyC,UAAAA;AAAAA,QAAAA;AAAAA,QAQAI;AAAAA,QAQCC;AAAAA,QAUDG;AAAAA,QAQAE;AAAAA,MAAAA,GAQJ;AAAM1E,cAAAgE;AAAAhE,cAAAoE;AAAApE,cAAAqE;AAAArE,cAAAwE;AAAAxE,cAAA0E;AAAA1E,cAAA2E;AAAAA,IAAA,OAAA;AAAAA,YAAA3E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4E;AAAA,QAAA5E,UAAA4gC,aAAA;AAELh8B,YAAAg8B,eACGr/B,gCAAA,OAAA,EAAe,WAAA,QACX,UAAA;AAAA,QAAAI,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,kDAAiD,UAAA,OAEzF;AAAA,QACAL,2BAAAA,KAAA,OAAA,EACc,WAAA,kIACD,SAAA,MAAA;AACLyO,oBAAAC,UAAAC,UAA8B0wB,WAAW;AAAA,QAAC,GAG9C,UAAA;AAAA,UAAAj/B,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,uEAExC;AAAA,yCACCA,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,0EAAyE,UAAA,gBAAA,CAEjH;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GACJ;AACH5B,cAAA4gC;AAAA5gC,cAAA4E;AAAAA,IAAA,OAAA;AAAAA,YAAA5E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6E;AAAA,QAAA7E,EAAA,EAAA,MAAA2E,OAAA3E,UAAA4E,KAAA;AAtELC,qDAAe,WAAA,iBACXf,UAAAA;AAAAA,QAAAA;AAAAA,QAKAa;AAAAA,QA6CCC;AAAAA,MAAAA,GAoBL;AAAM5E,cAAA2E;AAAA3E,cAAA4E;AAAA5E,cAAA6E;AAAAA,IAAA,OAAA;AAAAA,YAAA7E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8E;AAAA,QAAA9E,EAAA,EAAA,MAAA+C,OAAA/C,UAAAmD,OAAAnD,EAAA,EAAA,MAAA6E,KAAA;AA3JdC,qDAAgB,WAAAhE,IAMZiC,UAAAA;AAAAA,QAAAA;AAAAA,QA+BAI;AAAAA,QA+CI0B;AAAAA,MAAAA,GAwEJ;AAAM7E,cAAA+C;AAAA/C,cAAAmD;AAAAnD,cAAA6E;AAAA7E,cAAA8E;AAAAA,IAAA,OAAA;AAAAA,YAAA9E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+E;AAAA,QAAA/E,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAKFoC,2CAACnD,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,QAAO,UAAA,gBAEjD;AAAa5B,cAAA+E;AAAAA,IAAA,OAAA;AAAAA,YAAA/E,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgF;AAAA,QAAAhF,EAAA,EAAA,MAAA0gC,KAAA/gC,MAAA;AAHjBqF,4CAACujB,kBAAA,EACGxjB,UAAAA;AAAAA,QAAAA;AAAAA,QAGAxD,2BAAAA,KAACK,GAAAA,YAAA,EAAqB,WAAA,wDAAuD,UAAA;AAAA,UAAA;AAAA,UAClC8+B,KAAI/gC;AAAAA,UAAM;AAAA,QAAA,EAAA,CAErD;AAAA,MAAA,GACJ;AAAgBK,QAAA,EAAA,IAAA0gC,KAAA/gC;AAAAK,cAAAgF;AAAAA,IAAA,OAAA;AAAAA,YAAAhF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiF;AAAA,QAAAjF,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEZsC,2CAACwL,aAAe,SAAA,QAAgB,SAAA,MAAMswB,oBAAmB,KAAM,GAAG,UAAA,SAAA,CAElE;AAAS/gC,cAAAiF;AAAAA,IAAA,OAAA;AAAAA,YAAAjF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmF;AAAA,QAAAnF,UAAAkrB,UAAA;AAHb/lB,4CAACsjB,kBAAA,EACGxjB,UAAAA;AAAAA,QAAAA;AAAAA,uCAGCwL,GAAAA,QAAA,EACW,SAAA,UACF,OAAA,SACG,SAAA,MAAA;AACLswB,mCAAyB;AACzB7V,mBAAAA;AAAAA,QAAU,GAEjB,UAAA,SAAA,CAED;AAAA,MAAA,GACJ;AAAgBlrB,cAAAkrB;AAAAlrB,cAAAmF;AAAAA,IAAA,OAAA;AAAAA,YAAAnF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAoF;AAAA,QAAApF,EAAA,EAAA,MAAA8gC,oBAAA9gC,UAAAgF,OAAAhF,EAAA,EAAA,MAAAmF,KAAA;AAxBpBC,YAAA7D,2BAAAA,KAAC8mB,GAAAA,QAAA,EAAayY,MAAAA,kBAAgCC,mCAC1C/7B,UAAAA;AAAAA,QAAAA;AAAAA,QASAG;AAAAA,MAAAA,GAeJ;AAASnF,cAAA8gC;AAAA9gC,cAAAgF;AAAAhF,cAAAmF;AAAAnF,cAAAoF;AAAAA,IAAA,OAAA;AAAAA,YAAApF,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqF;AAAA,QAAArF,EAAA,EAAA,MAAA8E,OAAA9E,UAAAoF,KAAA;AAzLbC,mEACIP,UAAAA;AAAAA,QAAAA;AAAAA,QA+JAM;AAAAA,MAAAA,GAyBS;AACVpF,cAAA8E;AAAA9E,cAAAoF;AAAApF,cAAAqF;AAAAA,IAAA,OAAA;AAAAA,YAAArF,EAAA,EAAA;AAAA,IAAA;AAAA,WA1LHqF;AAAAA,EA0LG;AAQX,WAAAo8B,eAAA1hC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAwB,UAAA;AAAA,MAAAyhC;AAAAA,MAAAjC;AAAAA,MAAAkC;AAAAA,MAAAzmB;AAAAA,IAAAA,IAAAnb;AAWHo/B,uBAAmBM,WAAW;AAAC,QAAA7+B;AAAA,QAAAE;AAAA,QAAAd,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG5B/B,WAAAqB,GAAAA,IAAI,qEAAmEqN,qBAAoB;AACvGxO,WAAAa,2BAAAA,IAAA,OAAA,EAAgB,WAAAM,GAAAA,IAAI,6FAA2FqN,GAAAA,kBAAoB,GAC/H,UAAA3N,2BAAAA,IAACC,eAAA,EAAmB,SAAA,WAAoB,WAAA,sFAAqF,qBAE7H,GACJ;AAAM5B,aAAAY;AAAAZ,aAAAc;AAAAA,IAAA,OAAA;AAAAF,WAAAZ,EAAA,CAAA;AAAAc,WAAAd,EAAA,CAAA;AAAA,IAAA;AAOM,UAAAkB,KAAAu+B,gBAAgB,OAAOA,cACjB,0EACA;AAAkG,QAAAn+B;AAAA,QAAAtB,SAAAkB,IAAA;AAJjGI,WAAAW,GAAAA,IACP,oEACAf,EAGJ;AAAClB,aAAAkB;AAAAlB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAA2hC,YAAA;AACQngC,WAAAA,MAAMmgC,WAAW,EAAE;AAAC3hC,aAAA2hC;AAAA3hC,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAC;AAAA,QAAAzC,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAE7BH,0CAACo/B,YAAAA,UAAA,EAAe,MAAAt/B,GAAAA,SAAAmN,UAA6B,WAAA,mBAAiB;AAC9DhN,0CAACb,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,oBAAmB,UAAA,QAAI;AAAa5B,aAAAwC;AAAAxC,aAAAyC;AAAAA,IAAA,OAAA;AAAAD,WAAAxC,EAAA,CAAA;AAAAyC,WAAAzC,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,CAAA,MAAAsB,MAAAtB,SAAAwB,IAAA;AAV9EoB,WAAArB,2BAAAA,KAAA,OAAA,EACe,WAAAD,IAMF,SAAAE,IAETgB,UAAAA;AAAAA,QAAAA;AAAAA,QACAC;AAAAA,MAAAA,GACJ;AAAMzC,aAAAsB;AAAAtB,aAAAwB;AAAAxB,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,EAAA,MAAAy/B,eAAAz/B,EAAA,EAAA,MAAA0hC,WAAA1hC,EAAA,EAAA,MAAAkb,WAAAlb,UAAA2hC,YAAA;AAEL9+B,WAAAqY,WAAWwmB,QAAO/xB,WAAA,mCACf,OAAA,EAAe,WAAA,2BACX,UAAAhO,2BAAAA,IAACyN,GAAAA,kBAAA,EAAsB,MAAA,QAAA,CAAO,EAAA,CAClC,IAEAzN,2BAAAA,aAAe,WAAA,oBACV+/B,UAAAA,QAAOjgC,IAAAogC,CAAAA,WAAA;AACJ,cAAArE,aAAmBiC,gBAAgBoC,OAAML;AAAU,eAE/CjgC,2BAAAA,KAAA,OAAA,EAEe,WAAAU,GAAAA,IACP,0EACAu7B,aACM,0EACA,kGACV,GACS,SAAA,MAAMmE,WAAWE,OAAML,QAAS,GAEzC,UAAA;AAAA,UAAA7/B,2BAAAA,IAACmgC,YAAAA,YAAA,EAAiB,MAAAx/B,GAAAA,SAAAmN,UAA6B,WAAA,sDAAoD;AAAA,yCAClG7N,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,mCACjCigC,iBAAMliC,KAAAA,CACX;AAAA,QAAA,EAAA,GAZKkiC,OAAML,QAaf;AAAA,MAAM,CAEb,EAAA,CACL;AACHxhC,cAAAy/B;AAAAz/B,cAAA0hC;AAAA1hC,cAAAkb;AAAAlb,cAAA2hC;AAAA3hC,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAA4C,MAAA5C,UAAA6C,IAAA;AAjDTC,YAAAvB,2BAAAA,KAAA,OAAA,EAAgB,WAAAX,IACZE,UAAAA;AAAAA,QAAAA;AAAAA,QAMAS,2BAAAA,KAAA,OAAA,EAAe,WAAA,8CAEXqB,UAAAA;AAAAA,UAAAA;AAAAA,UAaCC;AAAAA,QAAAA,EAAAA,CA4BL;AAAA,MAAA,GACJ;AAAM7C,cAAA4C;AAAA5C,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,WAnDN8C;AAAAA,EAmDM;AAQP,QAAM6D,cAAcA,MAAM;AAC7B,UAAMo7B,gBAAgBC,KAAAA,iBAAAA;AACtB,UAAM1oB,qBAAqBC,KAAAA,sBAAAA;AAG3B,UAAM,CAACkmB,aAAawC,cAAc,IAAIlzB,MAAAA,SAAS,EAAE;AACjD,UAAM,CAACmM,SAASgnB,UAAU,IAAInzB,MAAAA,SAAS,IAAI;AAC3C,UAAM,CAACgF,OAAO4lB,QAAQ,IAAI5qB,MAAAA,SAAwB,IAAI;AAGtD,UAAM,CAAC2yB,SAASS,UAAU,IAAIpzB,MAAAA,SAAwB,CAAA,CAAE;AACxD,UAAM,CAACkxB,OAAOmC,QAAQ,IAAIrzB,MAAAA,SAAwB,CAAA,CAAE;AAGpD,UAAM,CAACszB,cAAcC,eAAe,IAAIvzB,MAAAA,SAA6B,IAAI;AACzE,UAAM,CAACwzB,qBAAqBC,sBAAsB,IAAIzzB,MAAAA,SAAwB,IAAI;AAGlF,UAAM,CAAC0zB,kBAAkBC,mBAAmB,IAAI3zB,MAAAA,SAAS,KAAK;AAG9D,UAAM,CAAC4zB,UAAUC,WAAW,IAAI7zB,MAAAA,SAA0B,MAAM;AAKhE,UAAM,CAACwY,aAAaC,cAAc,IAAIzY,MAAAA,SAAS,MAAM;AACjD,UAAI;AACA,cAAM+L,QAAQd,aAAaC,QAAQ,6BAA6B;AAChE,eAAOa,UAAU,OAAO2M,WAAW3M,KAAK,IAAI;AAAA,MAChD,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED/Z,UAAAA,UAAU,MAAM;AACZ,UAAI;AACAiZ,qBAAagD,QAAQ,+BAA+BuK,YAAYxF,SAAAA,CAAU;AAAA,MAC9E,QAAQ;AAAA,MAAE;AAAA,IACd,GAAG,CAACwF,WAAW,CAAC;AAGhB,UAAMsb,gBAAgBnnB,kBAAY,OAAOhc,SAAiB;AACtDwiC,iBAAW,IAAI;AACfvI,eAAS,IAAI;AACb,UAAI;AACA,cAAM/b,SAA4B,MAAMmkB,cAAce,YAAYpjC,IAAI;AAEtE,cAAMqjC,eAA8BnlB,OAAOolB,YAAY,CAAA,GAAIvhC,IAAIopB,CAAAA,SAAQ;AAAA,UACnElrB,MAAMkrB,IAAIlrB;AAAAA,UACV6hC,UAAU3W,IAAI2W;AAAAA,UACdyB,UAAU;AAAA,QAAA,EACZ;AAGF,cAAMC,YAA2B,MAAM7mB,QAAQC,KAC1CsB,OAAOulB,SAAS,CAAA,GAAI1hC,IAAI,OAAOopB,UAAQ;AACpC,cAAI;AACA,kBAAMuY,iBAAiB,MAAMrB,cAAcsB,aAAaxY,MAAI2W,QAAQ;AACpE,mBAAO;AAAA,cACH7hC,MAAMkrB,MAAIlrB;AAAAA,cACV6hC,UAAU3W,MAAI2W;AAAAA,cACdyB,UAAU;AAAA,cACVxW,MAAM2W,eAAeE,UAAU7W;AAAAA,cAC/BkS,aAAayE,eAAeE,UAAU3E;AAAAA,cACtCiC,aAAawC,eAAene,OAAO1a;AAAAA,YAAAA;AAAAA,UAE3C,QAAQ;AACJ,mBAAO;AAAA,cACH5K,MAAMkrB,MAAIlrB;AAAAA,cACV6hC,UAAU3W,MAAI2W;AAAAA,cACdyB,UAAU;AAAA,YAAA;AAAA,UAElB;AAAA,QACJ,CAAC,CACL;AAEAd,mBAAWY,WAAW;AACtBX,iBAASc,SAAS;AAAA,MACtB,SAASpzB,GAAG;AACRmF,gBAAQlB,MAAM,uBAAuBjE,CAAC;AACtC6pB,iBAAS7pB,aAAasF,QAAQtF,EAAEqF,UAAUE,OAAOvF,CAAC,CAAC;AAAA,MACvD,UAAA;AACIoyB,mBAAW,KAAK;AAAA,MACpB;AAAA,IACJ,GAAG,CAACH,aAAa,CAAC;AAElBhhC,UAAAA,UAAU,MAAM;AACZ8hC,oBAAcpD,WAAW;AAAA,IAC7B,GAAG,CAACA,aAAaoD,aAAa,CAAC;AAG/B,UAAMU,iBAAiB7nB,kBAAY,CAAChc,WAAiB;AACjDuiC,qBAAeviC,MAAI;AACnB4iC,sBAAgB,IAAI;AACpBE,6BAAuB,IAAI;AAAA,IAC/B,GAAG,CAAA,CAAE;AAGL,UAAMgB,mBAAmB9nB,MAAAA,YAAY,MAAM;AACvC,YAAMwjB,QAAQO,YAAYjE,MAAM,GAAG,EAAElqB,OAAO8tB,OAAO;AACnDF,YAAMuE,IAAAA;AACNF,qBAAerE,MAAM1uB,KAAK,GAAG,CAAC;AAAA,IAClC,GAAG,CAACivB,aAAa8D,cAAc,CAAC;AAGhC,UAAMG,mBAAmBhoB,kBAAY,OAAOglB,SAAsB;AAC9D4B,sBAAgB5B,IAAI;AACpB,UAAIA,KAAKE,aAAa;AAClB4B,+BAAuB9B,KAAKE,WAAW;AAAA,MAC3C,OAAO;AACH,YAAI;AACA,gBAAM+C,SAAS,MAAM5B,cAAcsB,aAAa3C,KAAKc,QAAQ;AAC7DgB,iCAAuBmB,OAAO1e,GAAG;AAAA,QACrC,QAAQ;AACJud,iCAAuB,IAAI;AAAA,QAC/B;AAAA,MACJ;AAAA,IACJ,GAAG,CAACT,aAAa,CAAC;AAGlB,UAAM1B,eAAe3kB,kBAAY,OAAOkoB,gBAAwB;AAC5D,iBAAWlD,UAAQkD,aAAa;AAC5B,cAAMrgC,MAAMk8B,cAAc,GAAGA,WAAW,IAAIiB,OAAK/gC,IAAI,KAAK+gC,OAAK/gC;AAC/D,cAAMoiC,cAAc8B,UAAU;AAAA,UAC1BnD,MAAAA;AAAAA,UACAn9B;AAAAA,QAAAA,CACH;AAAA,MACL;AACA+V,yBAAmBqG,KAAK;AAAA,QACpBxN,MAAM;AAAA,QACNgD,SAAS,GAAGyuB,YAAYj0B,MAAM,QAAQi0B,YAAYj0B,SAAS,IAAI,MAAM,EAAE;AAAA,MAAA,CAC1E;AACDkzB,oBAAcpD,WAAW;AAAA,IAC7B,GAAG,CAACsC,eAAetC,aAAanmB,oBAAoBupB,aAAa,CAAC;AAGlE,UAAMiB,mBAAmBpoB,kBAAY,OAAOglB,WAAsB;AAC9D,UAAI;AACA,cAAMqB,cAAcgC,aAAarD,OAAKc,QAAQ;AAC9CloB,2BAAmBqG,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC5CgD,SAAS,IAAIurB,OAAK/gC,IAAI;AAAA,QAAA,CAAa;AACvB2iC,wBAAgB,IAAI;AACpBE,+BAAuB,IAAI;AAC3BK,sBAAcpD,WAAW;AAAA,MAC7B,SAAS3vB,KAAG;AACRwJ,2BAAmBqG,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC5CgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,QAAA,CAAG;AAAA,MAC7C;AAAA,IACJ,GAAG,CAACiyB,eAAetC,aAAanmB,oBAAoBupB,aAAa,CAAC;AAGlE,UAAMmB,gBAAgBtoB,MAAAA,YAAY,MAAM;AACpCmnB,oBAAcpD,WAAW;AAAA,IAC7B,GAAG,CAACA,aAAaoD,aAAa,CAAC;AAE/B,UAAMxD,WAAWF,mBAAmBM,WAAW;AAG/C,UAAMwE,iBAAiBA,MAAM;AACzB,UAAI/oB,SAAS;AACT,8CACK,OAAA,EAAI,WAAU,8CACX,UAAA3Z,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,UAAAI,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,SAAA,CAAQ;AAAA,yCAC9BxN,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,iGAA+F,UAAA,aAAA,CAErI;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAER;AAEA,UAAImS,OAAO;AACP,eACIpS,2BAAAA,IAAC,OAAA,EAAI,WAAU,gEACX,UAAAA,2BAAAA,IAAC0N,KAAAA,WAAA,EAAU,OAAM,yBAAwB,OAAc,SAAS20B,cAAAA,CAAc,GAClF;AAAA,MAER;AAEA,YAAME,WAAW,CAAC,GAAGxC,SAAS,GAAGzB,KAAK;AAEtC,UAAIiE,SAASv0B,WAAW,GAAG;AACvB,8CACK,OAAA,EAAI,WAAU,8FACX,UAAApO,2BAAAA,KAAC,OAAA,EAAI,WAAU,eACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC,SAAI,WAAU,qCAAoC,MAAK,QAAO,QAAO,gBAAe,SAAQ,aACzF,yCAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,6EAA2E,EAAA,CACpJ;AAAA,UACAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,SAAO,UAAA,wBAE3B;AAAA,UACAL,gCAACkP,GAAAA,UAAO,WAAU,QAAO,SAAS,MAAMiyB,oBAAoB,IAAI,GAC5D,UAAA;AAAA,YAAA/gC,2BAAAA,IAACqmB,YAAAA,UAAA,EAAS,MAAM1lB,GAAAA,SAASmN,SAAAA,CAAS;AAAA,YAAA;AAAA,UAAA,EAAA,CAEtC;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAER;AAEA,UAAIkzB,aAAa,QAAQ;AACrB,8CACK,OAAA,EAAI,WAAU,2BACX,UAAAphC,2BAAAA,KAAC,SAAA,EAAM,WAAU,UACb,UAAA;AAAA,UAAAI,2BAAAA,IAAC,WACG,UAAAJ,2BAAAA,KAAC,MAAA,EAAG,WAAWU,OAAI,2GAA2GqN,GAAAA,kBAAkB,GAC5I,UAAA;AAAA,YAAA3N,2BAAAA,IAAC,MAAA,EAAG,WAAU,uBAAsB,UAAA,QAAI;AAAA,YACxCA,2BAAAA,IAAC,MAAA,EAAG,WAAU,4BAA2B,UAAA,QAAI;AAAA,YAC7CA,2BAAAA,IAAC,MAAA,EAAG,WAAU,uCAAsC,UAAA,OAAA,CAAI;AAAA,UAAA,EAAA,CAC5D,EAAA,CACJ;AAAA,0CACC,SAAA,EACI+/B,UAAAA;AAAAA,YAAAA,QAAQjgC,IAAIogC,CAAAA,WACTtgC,2BAAAA,KAAC,MAAA,EAEG,WAAU,0IACV,SAAS,MAAMgiC,eAAe1B,OAAOL,QAAQ,GAE7C,UAAA;AAAA,cAAA7/B,2BAAAA,IAAC,QAAG,WAAU,eACV,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAAI,2BAAAA,IAACmgC,YAAAA,YAAA,EAAW,MAAMx/B,GAAAA,SAASmN,UAAU,WAAU,+CAA6C;AAAA,+CAC3F7N,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,oCACjCigC,iBAAOliC,KAAAA,CACZ;AAAA,cAAA,EAAA,CACJ,EAAA,CACJ;AAAA,cACAgC,2BAAAA,IAAC,MAAA,EAAG,WAAU,eACV,UAAAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,qDAAmD,UAAA,SAAA,CAE3F,GACJ;AAAA,cACAD,2BAAAA,IAAC,MAAA,EAAG,WAAU,0BACV,UAAAA,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mDAAiD,UAAA,IAAA,CAEzF,EAAA,CACJ;AAAA,YAAA,KArBKigC,OAAOL,QAsBhB,CACH;AAAA,YACAvB,MAAMx+B,IAAIi/B,CAAAA,WAAQ;AACf,oBAAMyD,eAAezF,YAAYgC,OAAK/B,WAAW;AACjD,oBAAMnB,aAAa6E,cAAcb,aAAad,OAAKc;AACnD,qBACIjgC,2BAAAA,KAAC,MAAA,EAEG,WAAWU,GAAAA,IACP,2FACAu7B,aACM,oCACA,gDACV,GACA,SAAS,MAAMkG,iBAAiBhD,MAAI,GAEpC,UAAA;AAAA,gBAAA/+B,2BAAAA,IAAC,QAAG,WAAU,eACV,UAAAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,kBAAAI,2BAAAA,IAAC,cAAA,EAAa,MAAMW,GAAAA,SAASmN,UAAU,WAAU,oCAAkC;AAAA,iDAClF7N,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,wBACjC8+B,iBAAK/gC,KAAAA,CACV;AAAA,gBAAA,EAAA,CACJ,EAAA,CACJ;AAAA,gBACAgC,2BAAAA,IAAC,MAAA,EAAG,WAAU,eACV,UAAAA,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,WAAU,qDACnCq9B,UAAAA,aAAayB,OAAK/gC,IAAI,KAAK+gC,OAAK/B,aAAanD,MAAM,GAAG,EAAE,CAAC,GAAGhY,YAAAA,KAAiB,IAAA,CAClF,EAAA,CACJ;AAAA,+CACC,MAAA,EAAG,WAAU,0BACV,UAAA7hB,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,2EACnC8+B,UAAAA,OAAKjU,SAASliB,SAAYi0B,eAAekC,OAAKjU,IAAI,IAAI,KAC3D,EAAA,CACJ;AAAA,cAAA,EAAA,GA1BKiU,OAAKc,QA2Bd;AAAA,YAER,CAAC;AAAA,UAAA,EAAA,CACL;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAER;AAGA,aACIjgC,2BAAAA,KAAC,OAAA,EAAI,WAAU,+BAEVmgC,UAAAA;AAAAA,QAAAA,QAAQ/xB,SAAS,KACdpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,6GAA2G,UAAA,WAEnJ;AAAA,UACAD,2BAAAA,IAAC,SAAI,WAAU,sFACV+/B,kBAAQjgC,IAAIogC,CAAAA,6CACR,OAAA,EAEG,WAAW5/B,GAAAA,IACP,oEACAqN,uBACA,kEACA,yBACJ,GACA,SAAS,MAAMi0B,eAAe1B,SAAOL,QAAQ,GAE7C,UAAA;AAAA,YAAA7/B,2BAAAA,IAACmgC,YAAAA,YAAA,EAAW,MAAMx/B,GAAAA,SAASmN,UAAU,WAAU,+CAA6C;AAAA,2CAC3F7N,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,oCACjCigC,mBAAOliC,KAAAA,CACZ;AAAA,UAAA,KAZKkiC,SAAOL,QAahB,CACH,EAAA,CACL;AAAA,QAAA,GACJ;AAAA,QAIHvB,MAAMtwB,SAAS,KACZpO,2BAAAA,KAAC,OAAA,EACG,UAAA;AAAA,UAAAA,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,6GAA2G,UAAA;AAAA,YAAA;AAAA,YACvIq+B,MAAMtwB;AAAAA,YAAO;AAAA,UAAA,GACzB;AAAA,yCACC,OAAA,EAAI,WAAU,sFACVswB,UAAAA,MAAMx+B,IAAIi/B,CAAAA,WAAQ;AACf,kBAAMyD,iBAAezF,YAAYgC,OAAK/B,WAAW;AACjD,kBAAMqC,MAAM/B,aAAayB,OAAK/gC,IAAI,GAAGi+B,iBAAiB;AACtD,kBAAMyD,UAAUX,OAAK/B,aAAaE,WAAW,QAAQ,KAAK,CAAC,OAAO,QAAQ,OAAO,OAAO,QAAQ,KAAK,EAAE/2B,SAASk5B,GAAG;AACnH,kBAAMxD,eAAa6E,cAAcb,aAAad,OAAKc;AAEnD,mBACIjgC,2BAAAA,KAAC,OAAA,EAEG,WAAWU,GAAAA,IACP,sFACAqN,uBACA,0CACAkuB,gBAAc,qBAClB,GACA,SAAS,MAAMkG,iBAAiBhD,MAAI,GAGpC,UAAA;AAAA,cAAAn/B,2BAAAA,KAAC,OAAA,EAAI,WAAU,8GACV8/B,UAAAA;AAAAA,gBAAAA,WAAWX,OAAKE,cACbj/B,+BAAC,SACG,KAAK++B,OAAKE,aACV,KAAKF,OAAK/gC,MACV,WAAU,sFACV,SAAQ,OAAA,CAAM,IAGlBgC,2BAAAA,IAAC,gBAAA,EAAa,WAAU,gEAA8D;AAAA,gBAIzFs9B,aAAayB,OAAK/gC,IAAI,KACnBgC,2BAAAA,IAAC,OAAA,EAAI,WAAU,8HACVs9B,UAAAA,aAAayB,OAAK/gC,IAAI,EAAA,CAC3B;AAAA,+CAIH,OAAA,EAAI,WAAWsC,GAAAA,IACZ,uDACA,gCACJ,EAAA,CAAE;AAAA,cAAA,GACN;AAAA,cAGAV,2BAAAA,KAAC,OAAA,EAAI,WAAU,SACX,UAAA;AAAA,gBAAAI,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,qEACjC8+B,iBAAK/gC,MACV;AAAA,gBACAgC,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,qCACrD8+B,UAAAA,OAAKjU,SAASliB,SAAYi0B,eAAekC,OAAKjU,IAAI,IAAI,IAAA,CAC3D;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,GA5CKiU,OAAKc,QA6Cd;AAAA,UAER,CAAC,EAAA,CACL;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GAER;AAAA,IAER;AAEA,WACIjgC,2BAAAA,KAAC,OAAA,EAAI,WAAU,iHACX,UAAA;AAAA,MAAAI,2BAAAA,IAACkmB,GAAAA,iBAAA,EACG,aAAY,cACZ,kBAAkBN,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACI7lB,2BAAAA,IAAC,kBACG,SACA,aACA,YAAY4hC,gBACZ,QAAA,CAAiB,GAGzB,aACIhiC,2BAAAA,KAAC,OAAA,EAAI,WAAU,sBAEX,UAAA;AAAA,QAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,0CAEX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,yFAAyFqN,GAAAA,kBAAkB,GAC3H,UAAA;AAAA,YAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,iEAEVk+B,UAAAA;AAAAA,cAAAA,8CACIzY,GAAAA,SAAA,EAAQ,OAAM,SACX,UAAArlB,2BAAAA,IAAC4N,iBAAW,MAAK,SAAQ,SAASi0B,kBAC9B,yCAACY,2BAAA,EAAc,MAAM9hC,GAAAA,SAASmN,SAAAA,CAAS,GAC3C,GACJ;AAAA,cAEJ9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,0DACV09B,UAAAA,SAAS59B,IAAI,CAAC4iC,KAAKvyB,MAChBvQ,2BAAAA,KAAC,MAAM,UAAN,EACIuQ,UAAAA;AAAAA,gBAAAA,IAAI,KACDnQ,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,0DAAyD,UAAA,IAAA,CAAC;AAAA,gBAEtGD,2BAAAA,IAAC8O,GAAAA,UACG,SAAQ,QACR,MAAK,SACL,WAAWxO,GAAAA,IACP,uFACA6P,MAAMutB,SAAS1vB,SAAS,IAClB,8DACA,mDACV,GACA,SAAS,MAAM4zB,eAAec,IAAI3kC,IAAI,GAErC2kC,UAAAA,IAAI/kC,MAAAA,CACT;AAAA,cAAA,EAAA,GAhBiB+kC,IAAI3kC,IAiBzB,CACH,GACL;AAAA,cAEAiC,2BAAAA,IAAC,OAAA,EAAI,WAAU,SAAA,CAAQ;AAAA,cAGtB,CAACuZ,WACE3Z,2BAAAA,KAAC4vB,WAAK,MAAK,SAAQ,WAAU,wBACxB8O,UAAAA;AAAAA,gBAAAA,MAAMtwB;AAAAA,gBAAO;AAAA,gBAAMswB,MAAMtwB,WAAW,IAAI,MAAM;AAAA,gBAC9C+xB,QAAQ/xB,SAAS,IAAI,KAAK+xB,QAAQ/xB,MAAM,UAAU+xB,QAAQ/xB,WAAW,IAAI,MAAM,EAAE,KAAK;AAAA,cAAA,EAAA,CAC3F;AAAA,YAAA,GAER;AAAA,YAEApO,2BAAAA,KAAC,OAAA,EAAI,WAAU,uDAEX,UAAA;AAAA,cAAAI,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,aACX,UAAArlB,2BAAAA,IAAC4N,eAAA,EACG,MAAK,SACL,SAAS,MAAMqzB,YAAY,MAAM,GACjC,WAAW3gC,GAAAA,IAAI0gC,aAAa,UAAU,oCAAoC,GAE1E,UAAAhhC,2BAAAA,IAAC2iC,8BAAe,MAAMhiC,GAAAA,SAASmN,SAAAA,CAAS,EAAA,CAC5C,EAAA,CACJ;AAAA,cACA9N,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,aACX,UAAArlB,2BAAAA,IAAC4N,iBACG,MAAK,SACL,SAAS,MAAMqzB,YAAY,MAAM,GACjC,WAAW3gC,GAAAA,IAAI0gC,aAAa,UAAU,oCAAoC,GAE1E,UAAAhhC,2BAAAA,IAAC4iC,sBAAA,EAAS,MAAMjiC,GAAAA,SAASmN,SAAAA,CAAS,EAAA,CACtC,EAAA,CACJ;AAAA,cAEA9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,qDAAA,CAAoD;AAAA,6CAElEqlB,GAAAA,SAAA,EAAQ,OAAM,WACX,UAAArlB,2BAAAA,IAAC4N,eAAA,EAAW,MAAK,SAAQ,SAASy0B,eAAe,UAAU9oB,SACvD,UAAAvZ,2BAAAA,IAAC6N,YAAAA,eAAA,EAAc,MAAMlN,YAASmN,UAAS,GAC3C,EAAA,CACJ;AAAA,cAEAlO,2BAAAA,KAACkP,GAAAA,QAAA,EACG,MAAK,SACL,OAAM,WACN,SAAS,MAAMiyB,oBAAoB,IAAI,GAEvC,UAAA;AAAA,gBAAA/gC,2BAAAA,IAAC8+B,YAAAA,iBAAA,EAAgB,MAAMn+B,GAAAA,SAASmN,UAAU,WAAU,QAAM;AAAA,gBAAA;AAAA,cAAA,EAAA,CAE9D;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UAGA9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,mDACVsiC,4BACL;AAAA,0CAGC,OAAA,EAAI,WAAWhiC,GAAAA,IAAI,qGAAqGqN,GAAAA,kBAAkB,GACvI,UAAA;AAAA,YAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,uCACX,UAAA;AAAA,cAAAI,2BAAAA,IAAC,QAAA,EAAK,WAAU,wFAAsF,UAAA,QAEtG;AAAA,cACAJ,2BAAAA,KAAC,QAAA,EAAK,WAAU,+DAA6D,UAAA;AAAA,gBAAA;AAAA,gBACvEk+B,eAAe;AAAA,cAAA,EAAA,CACrB;AAAA,YAAA,GACJ;AAAA,YACC4C,gBACG9gC,2BAAAA,KAAC,OAAA,EAAI,WAAU,iEAA+D,UAAA;AAAA,cAAA;AAAA,cAChEI,2BAAAA,IAAC,QAAA,EAAK,WAAU,aAAa0gC,uBAAa1iC,KAAAA,CAAK;AAAA,YAAA,EAAA,CAC7D;AAAA,UAAA,EAAA,CAER;AAAA,QAAA,GACJ;AAAA,QAGC0iC,gBACG1gC,2BAAAA,IAAC,OAAA,EAAI,WAAU,yBACX,UAAAA,2BAAAA,IAAC,kBAAA,EACG,MAAM0gC,cACN,aAAaE,qBACb,SAAS,MAAM;AACXD,0BAAgB,IAAI;AACpBE,iCAAuB,IAAI;AAAA,QAC/B,GACA,UAAU,MAAMsB,iBAAiBzB,YAAY,GAAE,EAAA,CAEvD;AAAA,MAAA,EAAA,CAER,EAAA,CACH;AAAA,MAIL1gC,2BAAAA,IAAC,cAAA,EACG,MAAM8gC,kBACN,aACA,SAAS,MAAMC,oBAAoB,KAAK,GACxC,UAAUrC,aAAAA,CAAa;AAAA,IAAA,GAE/B;AAAA,EAER;;;;;AClgCA,WAASmE,eAAeC,IAAoB;AACxC,QAAIA,KAAK,IAAM,QAAO,GAAGA,EAAE;AAC3B,QAAIA,KAAK,IAAO,QAAO,IAAIA,KAAK,KAAMzuB,QAAQ,CAAC,CAAC;AAChD,WAAO,IAAIyuB,KAAK,KAAOzuB,QAAQ,CAAC,CAAC;AAAA,EACrC;AAEA,WAAS0uB,iBAAeC,KAAiC;AACrD,QAAI,CAACA,IAAK,QAAO;AACjB,UAAMC,IAAI,IAAIlgB,KAAKigB,GAAG;AACtB,UAAMzhB,MAAMwB,KAAKxB,IAAAA;AACjB,UAAM2hB,OAAOD,EAAEE,QAAAA,IAAY5hB;AAC3B,UAAM6hB,MAAMhtB,KAAKgtB,IAAIF,IAAI;AACzB,QAAIE,MAAM,IAAO,QAAOF,OAAO,IAAI,WAAW;AAC9C,QAAIE,MAAM,MAAS;AAAE,YAAMx+B,IAAIwR,KAAKoL,MAAM4hB,MAAM,GAAK;AAAG,aAAOF,OAAO,IAAI,MAAMt+B,CAAC,MAAM,GAAGA,CAAC;AAAA,IAAS;AACpG,QAAIw+B,MAAM,OAAU;AAAE,YAAMpV,IAAI5X,KAAKoL,MAAM4hB,MAAM,IAAO;AAAG,aAAOF,OAAO,IAAI,MAAMlV,CAAC,MAAM,GAAGA,CAAC;AAAA,IAAS;AACvG,WAAOiV,EAAEI,eAAAA;AAAAA,EACb;AAEA,QAAMC,cAAsC;AAAA,IACxCC,MAAM;AAAA,IACVC,SAAS;AAAA,IACTC,SAAS;AAAA,IACLrxB,OAAO;AAAA,IACXsxB,UAAU;AAAA,EACV;AAEO,WAASz+B,eAAe;AAC3B,UAAMuoB,UAASnC,KAAAA,gBAAAA;AACf,UAAMG,WAAW5T,KAAAA,sBAAAA;AACjB,UAAM,CAAC+rB,MAAMC,OAAO,IAAIx2B,MAAAA,SAA0B,CAAA,CAAE;AACpD,UAAM,CAACmM,SAASgnB,UAAU,IAAInzB,MAAAA,SAAS,IAAI;AAC3C,UAAM,CAACy2B,YAAYC,aAAa,IAAI12B,MAAAA,SAAwB,IAAI;AAChE,UAAM,CAAC22B,MAAMC,OAAO,IAAI52B,MAAAA,SAA4B,CAAA,CAAE;AACtD,UAAM,CAAC62B,aAAaC,cAAc,IAAI92B,MAAAA,SAAS,KAAK;AACpD,UAAM,CAAC+2B,YAAYC,aAAa,IAAIh3B,MAAAA,SAAwB,IAAI;AAGhE,UAAMi3B,YAAY59B,MAAAA,OAAO+mB,OAAM;AAC/B6W,cAAU39B,UAAU8mB;AACpB,UAAM8W,cAAc79B,MAAAA,OAAO+kB,QAAQ;AACnC8Y,gBAAY59B,UAAU8kB;AAGtBpsB,UAAAA,UAAU,MAAM;AACZ,UAAImlC,YAAY;AAEhB,qBAAeC,OAAO;AAClB,cAAM51B,IAAIy1B,UAAU39B;AACpB,YAAI,CAACkI,GAAG61B,MAAM;AACVlE,qBAAW,KAAK;AAChB;AAAA,QACJ;AACA,YAAI;AACA,gBAAMmE,MAAM,MAAM91B,EAAE61B,KAAKE,SAAAA;AACzB,cAAI,CAACJ,UAAWX,SAAQc,IAAIf,IAAI;AAAA,QACpC,SAASx1B,GAAY;AACjB,cAAI,CAACo2B,WAAW;AACZD,wBAAY59B,QAAQsX,KAAK;AAAA,cACrBxN,MAAM;AAAA,cACNgD,SAASrF,aAAasF,QAAQtF,EAAEqF,UAAUE,OAAOvF,CAAC;AAAA,YAAA,CACrD;AAAA,UACL;AAAA,QACJ,UAAA;AACI,cAAI,CAACo2B,UAAWhE,YAAW,KAAK;AAAA,QACpC;AAAA,MACJ;AAEAiE,WAAAA;AACA,YAAM75B,IAAIi6B,YAAYJ,MAAM,IAAM;AAClC,aAAO,MAAM;AAAED,oBAAY;AAAMM,sBAAcl6B,CAAC;AAAA,MAAG;AAAA,IACvD,GAAG,CAAA,CAAE;AAGLvL,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACykC,YAAY;AACbG,gBAAQ,CAAA,CAAE;AACV;AAAA,MACJ;AACA,UAAIO,cAAY;AAChB,YAAM31B,MAAIy1B,UAAU39B;AACpB,UAAI,CAACkI,KAAG61B,KAAM;AAEdP,qBAAe,IAAI;AACnBt1B,UAAE61B,KAAKK,WAAWjB,YAAY;AAAA,QAAEkB,OAAO;AAAA,MAAA,CAAI,EACtCpgC,KAAK+/B,CAAAA,UAAO;AAAE,YAAI,CAACH,YAAWP,SAAQU,MAAIX,IAAI;AAAA,MAAG,CAAC,EAClDvf,MAAM,MAAM;AAAE,YAAI,CAAC+f,YAAWP,SAAQ,EAAE;AAAA,MAAG,CAAC,EAC5CgB,QAAQ,MAAM;AAAE,YAAI,CAACT,YAAWL,gBAAe,KAAK;AAAA,MAAG,CAAC;AAE7D,aAAO,MAAM;AAAEK,sBAAY;AAAA,MAAM;AAAA,IACrC,GAAG,CAACV,UAAU,CAAC;AAGf,mBAAeoB,cAAc;AACzB,YAAMr2B,MAAIy1B,UAAU39B;AACpB,UAAI,CAACkI,KAAG61B,KAAM;AACd,UAAI;AACA,cAAMC,QAAM,MAAM91B,IAAE61B,KAAKE,SAAAA;AACzBf,gBAAQc,MAAIf,IAAI;AAAA,MACpB,QAAQ;AAAA,MAAE;AAAA,IACd;AAEA,mBAAeuB,YAAYl9B,IAAY;AACnC,YAAM4G,MAAIy1B,UAAU39B;AACpB,UAAI,CAACkI,KAAG61B,KAAM;AACdP,qBAAe,IAAI;AACnB,UAAI;AACA,cAAMQ,QAAM,MAAM91B,IAAE61B,KAAKK,WAAW98B,IAAI;AAAA,UAAE+8B,OAAO;AAAA,QAAA,CAAI;AACrDf,gBAAQU,MAAIX,IAAI;AAAA,MACpB,QAAQ;AAAEC,gBAAQ,CAAA,CAAE;AAAA,MAAG,UAAA;AACbE,uBAAe,KAAK;AAAA,MAAG;AAAA,IACrC;AAEA,UAAMiB,gBAAgB,OAAOn9B,SAAe;AACxC,YAAM4G,MAAIy1B,UAAU39B;AACpB,UAAI,CAACkI,KAAG61B,KAAM;AACdL,oBAAcp8B,IAAE;AAChB,UAAI;AACA,cAAM4G,IAAE61B,KAAKW,WAAWp9B,IAAE;AAC1Bs8B,oBAAY59B,QAAQsX,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC7CgD,SAAS;AAAA,QAAA,CAAiB;AACd,cAAMyxB,YAAAA;AACN,YAAIpB,eAAe77B,KAAIk9B,aAAYl9B,IAAE;AAAA,MACzC,SAASmG,KAAY;AACjBm2B,oBAAY59B,QAAQsX,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC7CgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,QAAA,CAAG;AAAA,MAC7C,UAAA;AAAYi2B,sBAAc,IAAI;AAAA,MAAG;AAAA,IACrC;AAEA,UAAMiB,eAAe,OAAOr9B,MAAYsE,YAAqB;AACzD,YAAMsC,MAAIy1B,UAAU39B;AACpB,UAAI,CAACkI,KAAG61B,KAAM;AACd,UAAI;AACA,cAAM71B,IAAE61B,KAAKa,UAAUt9B,MAAIsE,OAAO;AAClCg4B,oBAAY59B,QAAQsX,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC7CgD,SAASlH,UAAU,gBAAgB;AAAA,QAAA,CAAc;AACrC,cAAM24B,YAAAA;AAAAA,MACV,SAAS92B,KAAY;AACjBm2B,oBAAY59B,QAAQsX,KAAK;AAAA,UAAExN,MAAM;AAAA,UAC7CgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,QAAA,CAAG;AAAA,MAC7C;AAAA,IACJ;AAEA,UAAMo3B,cAAc5B,KAAKj5B,KAAK86B,CAAAA,MAAKA,EAAEx9B,OAAO67B,UAAU;AAEtD,QAAItqB,gBAAgBvZ,+BAAC,OAAA,EAAI,WAAU,2CAA0C,UAAAA,2BAAAA,IAACyN,uBAAgB,EAAA,CAAE;AAEhG,QAAIk2B,KAAK31B,WAAW,UAChBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,0EACX,UAAA;AAAA,MAAAI,2BAAAA,IAACylC,YAAAA,cAAA,EAAa,MAAM9kC,GAAAA,SAAS+kC,QAAQ,WAAU,0CAAwC;AAAA,qCACtFzlC,GAAAA,YAAA,EAAW,SAAQ,MAAK,OAAM,aAAY,UAAA,2BAAuB;AAAA,sCACjEA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,OAAM,YAAW,WAAU,YAAU,UAAA;AAAA,QAAA;AAAA,QACvCD,2BAAAA,IAAC,QAAA,EAAK,WAAU,8EAA6E,UAAA,UAAM;AAAA,QAAO;AAAA,QAAkCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,8EAA6E,UAAA,qBAAiB;AAAA,QAAO;AAAA,MAAA,EAAA,CAC3R;AAAA,IAAA,GACJ;AAGJ,WACIJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,mEAEX,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,yDAAyDqN,GAAAA,kBAAkB,GAC3F,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,yGAAyGqN,GAAAA,kBAAkB,GAC3I,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAACylC,YAAAA,cAAA,EAAa,MAAM9kC,GAAAA,SAASmN,UAAU,WAAU,gBAAc;AAAA,2CAC9D7N,GAAAA,YAAA,EAAW,SAAQ,aAAY,WAAU,iBAAgB,UAAA,aAAS;AAAA,2CAClEuvB,GAAAA,MAAA,EAAK,MAAK,YAAW,WAAU,6EAA6EmU,eAAK31B,OAAAA,CAAO;AAAA,UAAA,GAC7H;AAAA,UACAhO,2BAAAA,IAAC4N,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAASq3B,aAAa,OAAM,WAAU,UAAAjlC,2BAAAA,IAAC6N,2BAAA,EAAc,MAAMlN,GAAAA,SAASmN,UAAS,EAAA,CAAE;AAAA,QAAA,GAC5G;AAAA,QACA9N,2BAAAA,IAAC,SAAI,WAAU,wCACV2jC,eAAK7jC,IAAI6lC,CAAAA,QACN/lC,gCAAC,OAAA,EAEG,SAAS,MAAMkkC,cAAc6B,IAAI39B,EAAE,GACnC,WAAW1H,GAAAA,IACP,gFACAujC,eAAe8B,IAAI39B,KACb,4DACA,gDACV,GAEA,UAAA;AAAA,UAAAhI,2BAAAA,IAAC,OAAA,EAAI,WAAWM,OAAI,iCAAiCgjC,YAAYqC,IAAIC,KAAK,KAAK,gBAAgB,EAAA,CAAE;AAAA,UACjGhmC,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAAI,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,oCAAoC0lC,cAAI3nC,MAAK;AAAA,YACnFgC,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,kCAAkC0lC,UAAAA,IAAIE,SAAAA,CAAS;AAAA,UAAA,GAC7G;AAAA,UACCF,IAAIC,UAAU,aAAa5lC,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,WAAA,CAAU;AAAA,QAAA,KAdxDk4B,IAAI39B,EAeb,CACH,EAAA,CACL;AAAA,MAAA,GACJ;AAAA,qCAGC,OAAA,EAAI,WAAU,uDACV,UAAA,CAACu9B,6CACG,OAAA,EAAI,WAAU,2CACX,UAAAvlC,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,OAAM,YAAW,UAAA,oCAAA,CAAiC,EAAA,CAClF,IAEAL,2BAAAA,KAAAkQ,WAAAA,UAAA,EAEI,UAAA;AAAA,QAAAlQ,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,kGAAkGqN,GAAAA,kBAAkB,GACpI,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACX,UAAA;AAAA,YAAAI,+BAAC,OAAA,EAAI,WAAWM,GAAAA,IAAI,4BAA4BgjC,YAAYiC,YAAYK,KAAK,CAAC,GAAE;AAAA,YAChFhmC,2BAAAA,KAAC,OAAA,EAAI,WAAU,WACX,UAAA;AAAA,cAAAI,+BAACC,GAAAA,cAAW,SAAQ,aAAY,WAAU,0BAA0BslC,sBAAYvnC,MAAK;AAAA,cACpFunC,YAAYtnC,eAAe+B,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,YAAYslC,UAAAA,YAAYtnC,YAAAA,CAAY;AAAA,YAAA,EAAA,CAC9H;AAAA,UAAA,GACJ;AAAA,UACA2B,2BAAAA,KAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC4N,GAAAA,YAAA,EAAW,OAAO23B,YAAYj5B,UAAU,cAAc,cAAc,MAAK,SAAQ,SAAS,MAAM+4B,aAAaE,YAAYv9B,IAAI,CAACu9B,YAAYj5B,OAAO,GAC7Ii5B,UAAAA,YAAYj5B,UAAUtM,2BAAAA,IAAC8lC,YAAAA,WAAA,EAAU,MAAMnlC,YAASC,MAAAA,CAAM,IAAKZ,2BAAAA,IAACymB,YAAAA,UAAA,EAAS,MAAM9lB,GAAAA,SAASmN,UAAS,GAClG;AAAA,YACA9N,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,OAAM,WACN,SAAS,MAAMq2B,cAAcI,YAAYv9B,EAAE,GAC3C,UAAUm8B,eAAeoB,YAAYv9B,IACrC,WAAWm8B,eAAeoB,YAAYv9B,KAAKhI,2BAAAA,IAACyN,GAAAA,oBAAiB,MAAK,YAAU,IAAKzN,2BAAAA,IAACymB,YAAAA,UAAA,EAAS,MAAM9lB,GAAAA,SAASmN,SAAAA,IAAY,UAAA,UAAA,CAG1H;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,QAGAlO,2BAAAA,KAAC,OAAA,EAAI,WAAU,kDACX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,yCACX,UAAA;AAAA,YAAAI,+BAAC+lC,cAAS,OAAM,YAAW,OAAOR,YAAYM,UAAU,MAAI,MAAA;AAAA,YAC5D7lC,+BAAC+lC,cAAS,OAAM,YAAW,OAAOhD,iBAAewC,YAAYS,SAAS,GAAE;AAAA,YACxEhmC,2BAAAA,IAAC+lC,YAAA,EAAS,OAAM,YAAW,OAAOR,YAAYj5B,UAAUy2B,iBAAewC,YAAYU,SAAS,IAAI,SAAA,CAAS;AAAA,YACzGjmC,2BAAAA,IAAC+lC,YAAA,EAAS,OAAM,YAAW,OAAOR,YAAYW,mBAAmBt9B,SAAYi6B,eAAe0C,YAAYW,cAAc,IAAI,IAAA,CAAI;AAAA,UAAA,GAClI;AAAA,UACAtmC,2BAAAA,KAAC,OAAA,EAAI,WAAU,+BACX,UAAA;AAAA,YAAAI,+BAAC+lC,cAAS,OAAM,UAAS,OAAOR,YAAYK,MAAM/jB,eAAe,WAAW0jB,YAAYK,UAAU,UAAU,QAAQL,YAAYK,UAAU,aAAa,SAAS,SAAQ;AAAA,YACxK5lC,+BAAC+lC,cAAS,OAAM,cAAa,OAAOryB,OAAO6xB,YAAYY,SAAS,GAAE;AAAA,YAClEnmC,2BAAAA,IAAC+lC,YAAA,EAAS,OAAM,YAAW,OAAOryB,OAAO6xB,YAAYa,aAAa,GAAG,WAAWb,YAAYa,gBAAgB,EAAA,CAAE;AAAA,UAAA,GAClH;AAAA,UACCb,YAAYc,aACTzmC,gCAAC,OAAA,EAAI,WAAU,iGACX,UAAA;AAAA,YAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,cAAAI,2BAAAA,IAACsmC,YAAAA,iBAAA,EAAgB,MAAM3lC,GAAAA,SAASmN,UAAU,WAAU,gBAAc;AAAA,6CACjE7N,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,gDAA+C,UAAA,aAAA,CAAU;AAAA,YAAA,GACrG;AAAA,2CACCA,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,kEAAkEslC,sBAAYc,UAAAA,CAAU;AAAA,UAAA,EAAA,CACpI;AAAA,QAAA,GAER;AAAA,wCAGC,OAAA,EAAI,WAAW/lC,GAAAA,IAAI,qFAAqFqN,GAAAA,kBAAkB,GACvH,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAACumC,YAAAA,aAAA,EAAY,MAAM5lC,GAAAA,SAASmN,UAAU,WAAU,oBAAkB;AAAA,2CACjE7N,GAAAA,YAAA,EAAW,SAAQ,aAAY,WAAU,6BAA4B,UAAA,oBAAA,CAAiB;AAAA,UAAA,GAC3F;AAAA,yCACC2N,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAAS,MAAMs3B,YAAYK,YAAYv9B,EAAE,GAAG,OAAM,gBAAe,UAAAhI,+BAAC6N,YAAAA,iBAAc,MAAMlN,GAAAA,SAASmN,UAAS,EAAA,CAAE;AAAA,QAAA,GACvI;AAAA,QACA9N,2BAAAA,IAAC,SAAI,WAAU,0BACVikC,wBACGjkC,2BAAAA,IAAC,OAAA,EAAI,WAAU,2BAA0B,UAAAA,2BAAAA,IAACyN,uBAAiB,MAAK,QAAA,CAAO,GAAE,IACzEs2B,KAAK/1B,WAAW,IAChBhO,2BAAAA,IAAC,OAAA,EAAI,WAAU,yCACX,UAAAA,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,OAAM,YAAW,UAAA,oBAAA,CAAiB,GAClE,IAEAD,+BAAC,SAAI,WAAU,uDACV+jC,eAAKjkC,IAAI,CAACuuB,KAAK5Z,QACZzU,2BAAAA,IAAC,UAAiB,IAAA,GAALyU,GAAc,CAC9B,EAAA,CACL,EAAA,CAER;AAAA,MAAA,EAAA,CACJ,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,EAER;AAEA,WAAAsxB,WAAA3nC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAkB,UAAA;AAAA,MAAAX;AAAAA,MAAAoJ;AAAAA,MAAAy/B;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,IAAAA,IAAAtoC;AAEjB,QAAAa;AAAA,QAAAZ,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEuB/B,WAAAqB,GAAAA,IAAI,4DAA0DqN,qBAAoB;AAACtP,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,SAAAV,OAAA;AAC/FwB,0CAACc,iBAAmB,SAAA,WAAgB,OAAA,aAAsB,WAAA,qEAA0D;AAAa5B,aAAAV;AAAAU,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAG7H,UAAAkB,KAAAinC,QAAQ;AACR,UAAA7mC,KAAA+mC,aAAa;AACb,UAAA7mC,KAAA4mC,cAAc,SAAS;AACvB,UAAA5lC,KAAA4lC,cAAc,WAAW;AACzB,UAAA3lC,KAAA2lC,cAAc,UAAU;AAAkB,QAAAxlC;AAAA,QAAA5C,EAAA,CAAA,MAAAkB,MAAAlB,EAAA,CAAA,MAAAsB,MAAAtB,EAAA,CAAA,MAAAwB,MAAAxB,EAAA,CAAA,MAAAwC,MAAAxC,SAAAyC,IAAA;AANPG,WAAAX,GAAAA,IACnC,oCACAf,IACAI,IACAE,IACAgB,IACAC,EACJ;AAACzC,aAAAkB;AAAAlB,aAAAsB;AAAAtB,aAAAwB;AAAAxB,aAAAwC;AAAAxC,aAAAyC;AAAAzC,aAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,CAAA;AAAA,IAAA;AAAA,QAAA6C;AAAA,QAAA7C,EAAA,CAAA,MAAA4C,MAAA5C,UAAA0I,OAAA;AAPD7F,0CAACjB,GAAAA,YAAA,EAAmB,SAAA,SAAmB,WAAAgB,qBAO7B;AAAa5C,aAAA4C;AAAA5C,cAAA0I;AAAA1I,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAAc,MAAAd,UAAA6C,IAAA;AAT3BC,YAAAvB,2BAAAA,KAAA,OAAA,EAAgB,WAAAX,IACZE,UAAAA;AAAAA,QAAAA;AAAAA,QACA+B;AAAAA,MAAAA,GAQJ;AAAM7C,cAAAc;AAAAd,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,WAVN8C;AAAAA,EAUM;AAId,WAAAwlC,OAAAvoC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAgB,UAAA;AAAA,MAAA+vB;AAAAA,IAAAA,IAAAjwB;AACZ,UAAA,CAAA0V,UAAAC,WAAA,IAAgC3G,MAAAA,cAAc;AAAE,QAAAnO;AAAA,QAAAZ,SAAAyV,UAAA;AAGyB7U,WAAAA,MAAM8U,YAAW,CAAED,QAAQ;AAACzV,aAAAyV;AAAAzV,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAAgwB,IAAAoV,SAAA;AACxFtkC,WAAAkvB,IAAGoV,UACEzjC,2BAAAA,IAAC4mC,YAAAA,iBAAA,EAAsB,MAAAjmC,YAAAmN,UAA6B,WAAA,4BAAA,oCACnDw4B,YAAAA,iBAAA,EAAsB,MAAA3lC,GAAAA,SAAAmN,UAA6B,WAAA,yBAAuB;AAAEzP,QAAA,CAAA,IAAAgwB,IAAAoV;AAAAplC,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,EAAA,CAAA,MAAAgwB,IAAAwY,WAAA;AAEGtnC,WAAA,IAAAwjB,KAASsL,IAAGwY,SAAA,EAAAxD,eAAAA;AAA4BhlC,QAAA,CAAA,IAAAgwB,IAAAwY;AAAAxoC,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,SAAAkB,IAAA;AAD9HI,WAAAK,2BAAAA,IAAA,OAAA,EAAe,WAAA,kBACX,UAAAA,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,0CAA0CV,UAAAA,GAAAA,CAAyC,GAC/H;AAAMlB,aAAAkB;AAAAlB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,EAAA,CAAA,MAAAgwB,IAAAyY,QAAA;AAEDjnC,WAAAwuB,IAAGyY,UAAW9mC,2BAAAA,IAACwvB,GAAAA,MAAA,EAAU,MAAA,YAAqB,WAAA,oEAAmE,UAAA,SAAA,CAAM;AAAOnxB,QAAA,CAAA,IAAAgwB,IAAAyY;AAAAzoC,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,EAAA,MAAAgwB,IAAA0Y,YAAA;AAC9DlmC,WAAAgiC,eAAexU,IAAG0Y,UAAW;AAAC1oC,QAAA,EAAA,IAAAgwB,IAAA0Y;AAAA1oC,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,UAAAwC,IAAA;AAA/FC,0CAACb,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,yBAAyBY,UAAAA,IAA+B;AAAaxC,cAAAwC;AAAAxC,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AACxC,UAAA4C,KAAA6S,YAAY;AAAY,QAAA5S;AAAA,QAAA7C,UAAA4C,IAAA;AAA7EC,WAAAZ,GAAAA,IAAI,iDAAiDW,EAAwB;AAAC5C,cAAA4C;AAAA5C,cAAA6C;AAAAA,IAAA,OAAA;AAAAA,WAAA7C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8C;AAAA,QAAA9C,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAA0CG,YAAAnB,2BAAAA,IAAA,QAAA,EAAQ,GAAA,qHAAA,CAAoH;AAAE3B,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,UAAA6C,IAAA;AAAtQE,YAAApB,2BAAAA,IAAA,SAAgB,WAAAkB,IAAqF,MAAA,gBAAuB,SAAA,aAAYC,UAAAA,IAAAA,CAA8H;AAAM9C,cAAA6C;AAAA7C,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAA+C,OAAA/C,UAAAwB,MAAAxB,EAAA,EAAA,MAAAyC,IAAA;AAHhRQ,qDAAe,WAAA,oCACVzB,UAAAA;AAAAA,QAAAA;AAAAA,QACDiB;AAAAA,QACAM;AAAAA,MAAAA,GACJ;AAAM/C,cAAA+C;AAAA/C,cAAAwB;AAAAxB,cAAAyC;AAAAzC,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAAY,MAAAZ,EAAA,EAAA,MAAAiD,OAAAjD,EAAA,EAAA,MAAAc,MAAAd,UAAAsB,IAAA;AAXV6B,YAAA5B,2BAAAA,KAAA,OAAA,EAAe,WAAA,0CAAkD,SAAAX,IAC5DE,UAAAA;AAAAA,QAAAA;AAAAA,QAGDQ;AAAAA,QAGA2B;AAAAA,MAAAA,GAKJ;AAAMjD,cAAAY;AAAAZ,cAAAiD;AAAAjD,cAAAc;AAAAd,cAAAsB;AAAAtB,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,UAAAyV,YAAAzV,EAAA,EAAA,MAAAgwB,IAAAjc,SAAA/T,EAAA,EAAA,MAAAgwB,IAAA0V,QAAA1lC,EAAA,EAAA,MAAAgwB,IAAApS,QAAA;AACL9Z,YAAA2R,YACGlU,gCAAA,OAAA,EAAe,WAAA,uBACVyuB,UAAAA;AAAAA,QAAAA,IAAGjc,SACApS,2BAAAA,IAAA,OAAA,EAAe,WAAA,yFACX,UAAAA,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,kEAAkEouB,UAAAA,IAAGjc,OAAO,GACxH;AAAA,QAEHic,IAAG0V,KAAA/1B,SAAA,KACAhO,2BAAAA,IAAA,OAAA,EAAe,WAAA,0HACVquB,UAAAA,IAAG0V,KAAAjkC,IAAAuB,OAEH,EAAA,CACL;AAAA,QAEHgtB,IAAGpS,WAAArT,UACAhJ,2BAAAA,KAAA,OAAA,EAAe,WAAA,mGACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EAAmB,SAAA,WAAoB,WAAA,oEAAmE,UAAA,UAAM;AAAA,UACjHD,2BAAAA,IAAA,OAAA,EAAe,WAAA,8FAA8FqZ,UAAAA,KAAAqG,UAAe2O,IAAGpS,QAAA,MAAA,CAAgB,EAAA,CAAE;AAAA,QAAA,EAAA,CACrJ;AAAA,MAAA,GAER;AACH5d,cAAAyV;AAAAzV,QAAA,EAAA,IAAAgwB,IAAAjc;AAAA/T,QAAA,EAAA,IAAAgwB,IAAA0V;AAAA1lC,QAAA,EAAA,IAAAgwB,IAAApS;AAAA5d,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,EAAA,EAAA,MAAAmD,OAAAnD,UAAA8D,KAAA;AAnCLC,YAAAxC,2BAAAA,KAAA,OAAA,EAAe,WAAA,kFACX4B,UAAAA;AAAAA,QAAAA;AAAAA,QAaCW;AAAAA,MAAAA,GAsBL;AAAM9D,cAAAmD;AAAAnD,cAAA8D;AAAA9D,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,WApCN+D;AAAAA,EAoCM;AAvCd,WAAAf,QAAA8uB,MAAAhgB,GAAA;AAAA,WA2BgCnQ,2BAAAA,IAAA,OAAA,EAAuB,WAAA,gFAAgFmwB,mBAAK;AAAA,EAAM;;;;;ACvU3I,QAAM6W,aAAa;AAEnB,QAAMC,uBAAuB;AAE7B,QAAMC,uBAAuB;AACpC,QAAMC,aAAa;AAKZ,QAAMC,kBAAkBA,CAACC,SAIlB;AACV,QAAIA,KAAKC,WAAY,QAAOL;AAC5B,WAAOI,KAAKE,mBAAmBF,KAAKz8B,YAC9Bs8B,uBACAD;AAAAA,EACV;AAKO,QAAMO,qBAAqBA,CAACC,aAAqBC,eAAuBR,yBAC3EQ,eAAetxB,KAAKC,IAAIoxB,aAAa,CAAC,IAAIN,aAAa;AAMpD,QAAMQ,gBAAgBA,CAAC9pB,UAAkB6pB,eAAuBR,yBACnEQ,eAAe7pB,WAAWspB,aAAaA,aAAa;AAUjD,QAAMS,sBAAsBA,CAC/BC,OACAC,OACAC,YAA6B,SACM;AACnC,UAAMC,IAAI,IAAIC,MAAMC,SAASC,MAAAA;AAC7BH,MAAEI,SAAS;AAAA,MACPC,SAASN;AAAAA,MACTO,SAAS;AAAA,MACTC,SAAS;AAAA,MACTC,SAAS;AAAA,MACTC,SAAS;AAAA,MACTC,SAAS;AAAA,IAAA,CACZ;AACDV,MAAEW,oBAAoB,OAAO,CAAA,EAAG;AAEhC,UAAMC,kCAAkBC,IAAAA;AAExBhB,UAAM/8B,QAASg+B,CAAAA,SAAS;AACpB,YAAM3sB,OAAO2sB,KAAK3sB;AAClB,YAAMsrB,cAActrB,KAAKtR,SAASmD,UAAU;AAC5C,YAAM+6B,UAAU3B,gBAAgB;AAAA,QAC5BE,YAAY7J,QAAQthB,KAAKmrB,UAAU;AAAA,QACnCC,gBAAgBprB,KAAKorB,kBAAkB;AAAA,QACvC38B,WAAWuR,KAAKvR,aAAa;AAAA,MAAA,CAChC;AACD,YAAMojB,IAAIwZ,mBAAmBC,aAAasB,OAAO;AACjDH,kBAAY1pC,IAAI4pC,KAAK9gC,IAAIgmB,CAAC;AAC1Bga,QAAEgB,QAAQF,KAAK9gC,IAAI;AAAA,QACfqN,OAAO2xB;AAAAA,QACP1xB,QAAQ0Y;AAAAA,MAAAA,CACX;AAAA,IACL,CAAC;AAED8Z,UAAMh9B,QAASm+B,CAAAA,SAAS;AACpBjB,QAAEkB,QAAQD,KAAKE,QAAQF,KAAKryB,MAAM;AAAA,IACtC,CAAC;AAEDqxB,UAAMmB,OAAOpB,CAAC;AAEd,UAAMqB,gBAAgBxB,MAAM/nC,IAAKgpC,CAAAA,SAAS;AACtC,YAAMQ,mBAAmBtB,EAAEc,KAAKA,KAAK9gC,EAAE;AACvC,YAAMgmB,IAAI4a,YAAYW,IAAIT,KAAK9gC,EAAE,KAAKw/B,mBAAmB,CAAC;AAC1D,aAAO;AAAA,QACH,GAAGsB;AAAAA,QACH3sB,MAAM;AAAA,UACF,GAAG2sB,KAAK3sB;AAAAA,UACRqtB,iBAAiBzB;AAAAA,QAAAA;AAAAA,QAErBx+B,UAAU;AAAA,UACNkgC,GAAGH,iBAAiBG,IAAIzC,aAAa;AAAA,UACrC0C,GAAGJ,iBAAiBI,IAAI1b,IAAI;AAAA,QAAA;AAAA,MAChC;AAAA,IAER,CAAC;AAED,WAAO;AAAA,MAAE6Z,OAAOwB;AAAAA,MACpBvB;AAAAA,IAAAA;AAAAA,EACA;AAIA,QAAM6B,cAAsC;AAAA,IACxCC,QAAQ;AAAA,IACRC,QAAQ;AAAA,IACRC,SAAS;AAAA,IACTC,MAAM;AAAA,IACNjqC,KAAK;AAAA,IACLkqC,OAAO;AAAA,IACPC,UAAU;AAAA,EACd;AAEO,QAAMC,eAAeA,CAAC15B,SACzBm5B,YAAYn5B,IAAI,KAAKA;AAalB,QAAM25B,sBAAsBA,CAC/BC,aACArC,cACS;AACT,QAAIqC,gBAAgB,OAAQ,QAAO;AACnC,QAAIrC,cAAc,UAAW,QAAO;AACpC,WAAO;AAAA,EACX;ACnGA,QAAMsC,iBAAiBA,CAACp4B,eAA+C;AACnE,UAAMpH,UAAwB,CAAA;AAC9B,UAAM2d,aAAavW,WAAWuW,cAAc,CAAA;AAE5C,eAAW,CAAC8hB,UAAUlhB,IAAI,KAAK7e,OAAOC,QAAQge,UAAU,GAAG;AACvD,UAAIY,KAAK5Y,SAAS,WAAY;AAE9B,YAAM+5B,OACD,UAAUnhB,QAAQqU,QAASrU,KAA4CohB,IAAI,KAC3E,CAACjgC,OAAOmH,OAAO8W,UAAU,EAAE3V,KACvB4V,OAAM,UAAUA,KAAKgV,QAAShV,EAAyC+hB,IAAI,CAChF,KACIF,aAAa;AAErB,YAAMG,SAASrhB,KAAK5Y,SAAS,YAAY,UAAU4Y,QAAQqU,QAAQrU,KAAKshB,IAAI;AAE5E,UAAIC;AACJ,UAAIF,UAAU,UAAUrhB,QAAQA,KAAKshB,MAAM;AACvC,cAAME,WAAWxhB,KAAKshB;AACtB,YAAIztB,MAAMC,QAAQ0tB,QAAQ,GAAG;AACzBD,uBAAaC,SAAS9qC,IAAI,CAAC0P,MACvB,OAAOA,MAAM,WAAWA,IAAIkE,OAAQlE,GAA+BxH,MAAMwH,CAAC,CAC9E;AAAA,QACJ,WAAW,OAAOo7B,aAAa,YAAYA,aAAa,MAAM;AAC1DD,uBAAapgC,OAAOwD,KAAK68B,QAAQ;AAAA,QACrC;AAAA,MACJ;AAEA//B,cAAQzE,KAAK;AAAA,QACTpI,MAAMssC;AAAAA,QACN95B,MAAM4Y,KAAK5Y;AAAAA,QACXq6B,WAAWX,aAAa9gB,KAAK5Y,IAAI;AAAA,QACjCuC,cAAcw3B;AAAAA,QACdO,cAAc;AAAA,QACdC,YAAYtN,QAAQrU,KAAK4hB,YAAYC,QAAQ;AAAA,QAC7CR;AAAAA,QACAE;AAAAA,MAAAA,CACH;AAAA,IACL;AAGA,QAAI5P,MAAAA,qBAAqB9oB,UAAU,GAAG;AAClC,UAAI;AACA,cAAMi5B,oBAAoBC,OAAAA,2BAA2Bl5B,UAAU;AAC/D,mBAAWm5B,OAAO7gC,OAAOmH,OAAOw5B,iBAAiB,GAAG;AAChD,cAAIE,IAAIrD,cAAc,YAAYqD,IAAIhB,gBAAgB,SAASgB,IAAIC,UAAU;AAEzE,gBAAI,CAACxgC,QAAQgI,KAAMjE,CAAAA,MAAMA,EAAE5Q,SAASotC,IAAIC,QAAQ,GAAG;AAC/CxgC,sBAAQzE,KAAK;AAAA,gBACTpI,MAAMotC,IAAIC;AAAAA,gBACV76B,MAAM;AAAA,gBACNq6B,WAAW;AAAA,gBACX93B,cAAc;AAAA,gBACd+3B,cAAc;AAAA,gBACdC,YAAY;AAAA,gBACZN,QAAQ;AAAA,gBACRa,cAAcF,IAAIE;AAAAA,cAAAA,CACrB;AAAA,YACL,OAAO;AAEH,oBAAMC,WAAW1gC,QAAQH,KAAMkE,OAAMA,EAAE5Q,SAASotC,IAAIC,QAAQ;AAC5D,kBAAIE,UAAU;AACVA,yBAAST,eAAe;AACxBS,yBAASD,eAAeF,IAAIE;AAAAA,cAChC;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ,QAAQ;AAAA,MACJ;AAAA,IAER;AAEA,WAAOzgC;AAAAA,EACX;AAIA,QAAM2gC,aAAaA,CACfv6B,aACA82B,cACmC;AACnC,UAAMF,QAAgB,CAAA;AACtB,UAAMC,QAAgB,CAAA;AACtB,UAAM2D,oCAAoB5C,IAAAA;AAE1B,UAAM6C,kCAAkB7C,IAAAA;AAGxB,UAAM8C,cAAcA,CAACC,WAA2B;AAC5C,YAAMC,OAAOH,YAAYnC,IAAIqC,MAAM;AACnC,YAAMztB,KAAK0tB,MAAMnhC,KAAMkE,CAAAA,MAAMA,EAAEmE,YAAY;AAC3C,aAAOoL,KAAK,UAAUA,GAAGngB,IAAI,KAAK;AAAA,IACtC;AAGA,UAAM8tC,cAAcA,CAACF,QAAgBP,aAAyC;AAC1E,UAAI,CAACA,SAAU,QAAO;AACtB,YAAMQ,OAAOH,YAAYnC,IAAIqC,MAAM;AACnC,YAAMG,KAAKF,MAAMnhC,KAAMkE,CAAAA,MAAMA,EAAE5Q,SAASqtC,QAAQ;AAChD,aAAOU,KAAK,UAAUA,GAAG/tC,IAAI,KAAK;AAAA,IACtC;AAGA,eAAWiU,cAAchB,aAAa;AAClC,UAAI,CAAC8pB,MAAAA,qBAAqB9oB,UAAU,EAAG;AAEvC,YAAMrH,YAAYqH,WAAWxH,SAASwH,WAAWzR;AACjD,YAAMorC,SAAS,SAAShhC,SAAS;AACjC6gC,oBAAcvsC,IAAI0L,WAAWghC,MAAM;AAEnC,YAAM/gC,UAAUw/B,eAAep4B,UAAU;AACzCy5B,kBAAYxsC,IAAI0sC,QAAQ/gC,OAAO;AAE/B,YAAMmhC,WAA0B;AAAA,QAC5BphC;AAAAA,QACA28B,gBAAgBt1B,WAAWjU;AAAAA,QAC3BwC,MAAMyR,WAAWzR;AAAAA,QACjBqK;AAAAA,QACAy8B,YAAY;AAAA,QACZ2E,aAAa;AAAA,QACb3S,YAAYmE,QAAQxrB,WAAW+oB,iBAAiB/oB,WAAW+oB,cAAchtB,SAAS,CAAC;AAAA,QACnFk+B,gBAAgBzO,QAAQxrB,WAAW9C,OAAO;AAAA,QAC1CjR,MAAM,OAAO+T,WAAW/T,SAAS,WAAW+T,WAAW/T,OAAO0K;AAAAA,MAAAA;AAGlEi/B,YAAMzhC,KAAK;AAAA,QACP4B,IAAI4jC;AAAAA,QACJp7B,MAAM;AAAA,QACNjH,UAAU;AAAA,UAAEkgC,GAAG;AAAA,UAC3BC,GAAG;AAAA,QAAA;AAAA,QACSvtB,MAAM6vB;AAAAA,MAAAA,CACT;AAAA,IACL;AAGA,UAAMG,yCAAyBtgC,IAAAA;AAE/B,eAAWoG,cAAchB,aAAa;AAClC,UAAI,CAAC8pB,MAAAA,qBAAqB9oB,UAAU,EAAG;AAEvC,YAAMrH,YAAYqH,WAAWxH,SAASwH,WAAWzR;AACjD,YAAM4rC,eAAeX,cAAclC,IAAI3+B,SAAS;AAChD,UAAI,CAACwhC,aAAc;AAEnB,UAAIlB;AACJ,UAAI;AACAA,4BAAoBC,OAAAA,2BAA2Bl5B,UAAU;AAAA,MAC7D,QAAQ;AACJ;AAAA,MACJ;AAEA,iBAAW,CAACo6B,aAAajB,GAAG,KAAK7gC,OAAOC,QAAQ0gC,iBAAiB,GAAG;AAChE,YAAIoB;AACJ,YAAI;AACAA,6BAAmBlB,IAAIx0B,OAAAA;AAAAA,QAC3B,QAAQ;AACJ;AAAA,QACJ;AAEA,YAAI,CAACmkB,MAAAA,qBAAqBuR,gBAAgB,EAAG;AAE7C,cAAMC,cAAcD,iBAAiB7hC,SAAS6hC,iBAAiB9rC;AAC/D,cAAMgsC,eAAef,cAAclC,IAAIgD,WAAW;AAClD,YAAI,CAACC,aAAc;AAGnB,YAAIpB,IAAIrD,cAAc,UAAW;AAEjC,cAAM0E,WAA6B;AAAA,UAC/BrC,aAAagB,IAAIhB;AAAAA,UACjBrC,WAAWqD,IAAIrD,aAAa;AAAA,UAC5BuD,cAAcF,IAAIE,gBAAgBe;AAAAA,UAClCK,aAAajP,QAAQ2N,IAAIuB,OAAO;AAAA,UAChCC,aAAanP,QAAQ2N,IAAIyB,QAAQ;AAAA,UACjClvC,OAAOwsC,oBAAoBiB,IAAIhB,aAAagB,IAAIrD,aAAa,QAAQ;AAAA,QAAA;AAGzE,YAAIqD,IAAIuB,WAAW,CAACR,mBAAmBhgC,IAAIi/B,IAAIuB,QAAQliC,KAAK,GAAG;AAE3D0hC,6BAAmBlgC,IAAIm/B,IAAIuB,QAAQliC,KAAK;AACxC,gBAAMqiC,iBAAiB,YAAY1B,IAAIuB,QAAQliC,KAAK;AAEpD,gBAAMsiC,kBAAgC,CAClC;AAAA,YACI/uC,MAAMotC,IAAIuB,QAAQK;AAAAA,YAClBx8B,MAAM;AAAA,YACNq6B,WAAW;AAAA,YACX93B,cAAc;AAAA,YACd+3B,cAAc;AAAA,YACdC,YAAY;AAAA,YACZN,QAAQ;AAAA,UAAA,GAEZ;AAAA,YACIzsC,MAAMotC,IAAIuB,QAAQM;AAAAA,YAClBz8B,MAAM;AAAA,YACNq6B,WAAW;AAAA,YACX93B,cAAc;AAAA,YACd+3B,cAAc;AAAA,YACdC,YAAY;AAAA,YACZN,QAAQ;AAAA,UAAA,CACX;AAELiB,sBAAYxsC,IAAI4tC,gBAAgBC,eAAe;AAE/ClF,gBAAMzhC,KAAK;AAAA,YACP4B,IAAI8kC;AAAAA,YACJt8B,MAAM;AAAA,YACNjH,UAAU;AAAA,cAAEkgC,GAAG;AAAA,cACnCC,GAAG;AAAA,YAAA;AAAA,YACiBvtB,MAAM;AAAA,cACFvR,WAAWwgC,IAAIuB,QAAQliC;AAAAA,cACvB88B,gBAAgB6D,IAAIuB,QAAQliC;AAAAA,cAC5BjK,MAAM4qC,IAAIuB,QAAQliC;AAAAA,cAClBI,SAASkiC;AAAAA,cACTzF,YAAY;AAAA,cACZ2E,aAAa;AAAA,cACb3S,YAAY;AAAA,cACZ4S,gBAAgB;AAAA,YAAA;AAAA,UACpB,CACH;AAGD,gBAAMgB,WAAWxB,YAAYnC,IAAI6C,YAAY,GAAG1hC,KAAMkE,CAAAA,MAAMA,EAAEmE,YAAY;AAC1E+0B,gBAAM1hC,KAAK;AAAA,YACP4B,IAAI,QAAQokC,YAAY,IAAIU,cAAc;AAAA,YAC1C3D,QAAQiD;AAAAA,YACRx1B,QAAQk2B;AAAAA,YACRK,cAAcD,WAAW,UAAUA,SAASlvC,IAAI,KAAK;AAAA,YACrDovC,cAAc,UAAUhC,IAAIuB,QAAQK,YAAY;AAAA,YAChDx8B,MAAM;AAAA,YACN2L,MAAM;AAAA,cAAE,GAAGswB;AAAAA,cAC/B9uC,OAAO;AAAA,YAAA;AAAA,YACa0vC,WAAW;AAAA,cAAE78B,MAAM88B,MAAAA,WAAWC;AAAAA,cAClDl4B,OAAO;AAAA,cACPC,QAAQ;AAAA,YAAA;AAAA,UAAG,CACM;AAGDwyB,gBAAM1hC,KAAK;AAAA,YACP4B,IAAI,QAAQ8kC,cAAc,IAAIN,YAAY;AAAA,YAC1CrD,QAAQ2D;AAAAA,YACRl2B,QAAQ41B;AAAAA,YACRW,cAAc,UAAU/B,IAAIuB,QAAQM,YAAY;AAAA,YAChDG,cAAczB,YAAYa,YAAY;AAAA,YACtCh8B,MAAM;AAAA,YACN2L,MAAM;AAAA,cAAE,GAAGswB;AAAAA,cAC/B9uC,OAAO;AAAA,YAAA;AAAA,YACa0vC,WAAW;AAAA,cAAE78B,MAAM88B,MAAAA,WAAWC;AAAAA,cAClDl4B,OAAO;AAAA,cACPC,QAAQ;AAAA,YAAA;AAAA,UAAG,CACM;AAAA,QACL,WAAW,CAAC81B,IAAIuB,SAAS;AAErB7E,gBAAM1hC,KAAK;AAAA,YACP4B,IAAI,QAAQokC,YAAY,IAAII,YAAY,IAAIH,WAAW;AAAA,YACvDlD,QAAQiD;AAAAA,YACRx1B,QAAQ41B;AAAAA,YACRW,cAAcrB,YAAYM,cAAchB,IAAIC,QAAQ;AAAA,YACpD+B,cAAczB,YAAYa,YAAY;AAAA,YACtCh8B,MAAM;AAAA,YACN2L,MAAM;AAAA,cAAE,GAAGswB;AAAAA,YAAAA;AAAAA,YACXY,WAAW;AAAA,cAAE78B,MAAM88B,MAAAA,WAAWC;AAAAA,cAClDl4B,OAAO;AAAA,cACPC,QAAQ;AAAA,YAAA;AAAA,UAAG,CACM;AAAA,QACL;AAAA,MACJ;AAAA,IACJ;AAEA,UAAMk4B,eAAe5F,oBAAoBC,OAAOC,OAAOC,SAAS;AAGhE,UAAM0F,oCAAoB5E,IAAAA;AAC1B,eAAWC,QAAQ0E,aAAa3F,OAAO;AACnC4F,oBAAcvuC,IAAI4pC,KAAK9gC,IAAI;AAAA,QAAEyhC,GAAGX,KAAKv/B,SAASkgC;AAAAA,MAAAA,CAAG;AAAA,IACrD;AAKA,eAAWR,QAAQuE,aAAa1F,OAAO;AACnC,YAAM4F,SAASD,cAAclE,IAAIN,KAAKE,MAAM;AAC5C,YAAMwE,SAASF,cAAclE,IAAIN,KAAKryB,MAAM;AAE5C,YAAMg3B,gBAAiB3E,KAAKkE,gBAAgB;AAC5C,YAAMU,gBAAiB5E,KAAKmE,gBAAgB;AAE5C,UAAIM,UAAUC,QAAQ;AAClB,cAAMG,aAAaJ,OAAOjE,IAAIzC,aAAa;AAC3C,cAAM+G,aAAaJ,OAAOlE,IAAIzC,aAAa;AAC3C,cAAMgH,eAAeF,cAAcC;AAEnC9E,aAAKkE,eAAe,GAAGS,aAAa,IAAII,eAAe,UAAU,MAAM;AACvE/E,aAAKmE,eAAe,GAAGS,aAAa,IAAIG,eAAe,SAAS,OAAO;AAAA,MAC3E,OAAO;AACH/E,aAAKkE,eAAe,GAAGS,aAAa;AACpC3E,aAAKmE,eAAe,GAAGS,aAAa;AAAA,MACxC;AAAA,IACJ;AAEA,WAAOL;AAAAA,EACX;AAeO,QAAMS,iBAAiBA,CAC1Bh9B,gBACuB;AACvB,UAAM,CAAC82B,WAAWmG,YAAY,IAAI9gC,MAAAA,SAA0B,IAAI;AAChE,UAAM,CAAC+gC,SAASC,UAAU,IAAIhhC,MAAAA,SAAS,CAAC;AAExC,UAAMihC,WAAWt0B,MAAAA,YAAY,MAAMq0B,WAAY5+B,OAAMA,IAAI,CAAC,GAAG,EAAE;AAG/DpQ,UAAAA,UAAU,MAAM;AACZgvC,iBAAY5+B,CAAAA,MAAMA,IAAI,CAAC;AAAA,IAC3B,GAAG,CAACu4B,SAAS,CAAC;AAEd,UAAM;AAAA,MAAEF;AAAAA,MAAOC;AAAAA,MAAOwG;AAAAA,MAAYC;AAAAA,IAAAA,IAAkB3oC,MAAAA,QAAQ,MAAM;AAC9D,UAAI,CAACqL,eAAeA,YAAYjD,WAAW,GAAG;AAC1C,eAAO;AAAA,UAAE65B,OAAO,CAAA;AAAA,UAC5BC,OAAO,CAAA;AAAA,UACPwG,YAAY;AAAA,UACZC,eAAe;AAAA,QAAA;AAAA,MACP;AACA,YAAMtyB,SAASuvB,WAAWv6B,aAAa82B,SAAS;AAChD,aAAO;AAAA,QACH,GAAG9rB;AAAAA,QACHqyB,YAAYryB,OAAO4rB,MAAM75B;AAAAA,QACzBugC,eAAetyB,OAAO6rB,MAAM95B;AAAAA,MAAAA;AAAAA,IAGpC,GAAG,CAACiD,aAAa82B,WAAWoG,OAAO,CAAC;AAEpC,WAAO;AAAA,MACHtG;AAAAA,MACAC;AAAAA,MACAC;AAAAA,MACAmG;AAAAA,MACAG;AAAAA,MACAvW,WAAW,CAAC7mB;AAAAA,MACZq9B;AAAAA,MACAC;AAAAA,IAAAA;AAAAA,EAER;AC9XA,QAAMC,iBAAiBpwC,CAAAA,OAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAC,UAAA;AAAA,MAAA6d;AAAAA,MAAAsyB;AAAAA,IAAAA,IAAArwC;AACpB,UAAA;AAAA,MAAAwM;AAAAA,MAAA28B;AAAAA,MAAA18B;AAAAA,MAAAy8B;AAAAA,MAAAhO;AAAAA,MAAA4S;AAAAA,MAAAhuC;AAAAA,IAAAA,IAQIie;AAAsB,QAAAld;AAAA,QAAAgd;AAAA,QAAA5d,EAAA,CAAA,MAAAkpC,kBAAAlpC,EAAA,CAAA,MAAAwM,WAAAxM,EAAA,CAAA,MAAAipC,cAAAjpC,SAAAuM,WAAA;AAItBqR,eAAA,CAAA;AACA,YAAA4vB,OAAahhC;AACb,YAAAk+B,UAAgB3B,gBAAA;AAAA,QAAAE,YACA7J,QAAQ6J,UAAU;AAAA,QAACC;AAAAA,QACS38B;AAAAA,MAAAA,CAE3C;AACD,YAAA8jC,OAAa7C,KAAI79B,SAAA,IAAc25B,cAAcvxB,KAAAu4B,MAAW9C,KAAI79B,UAAW,GAAG+6B,OAAO,IAAC;AAElF8C,WAAI/gC,QAAA,CAAAC,KAAA0J,QAAA;AACA,cAAAi1B,IAAU/B,cAAclzB,KAAKs0B,OAAO;AAAE,YAElCh+B,IAAG+/B,gBAAA,CAAkB//B,IAAGgI,cAAa;AAErCkJ,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAawS,MACtD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAC;AAAAA,YAAA34B,KAETwzB;AAAAA,UAAAA,CAAG;AACQztB,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAYwS,MACrD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAE;AAAAA,YAAA54B,KAETwzB;AAAAA,UAAAA,CAAG;AAAA,QAAC;AAAA,YAEO3+B,IAAGgI,cAAA;AAEHkJ,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAawS,MACtD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAC;AAAAA,YAAA34B,KAETwzB;AAAAA,UAAAA,CAAG;AACQztB,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAYwS,MACrD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAE;AAAAA,YAAA54B,KAETwzB;AAAAA,UAAAA,CAAG;AACQztB,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAawS,MACtD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAC;AAAAA,YAAA34B,KAETwzB;AAAAA,UAAAA,CAAG;AACQztB,iBAAM7V,KAAA;AAAA,YAAA4B,IAAY,UAAU+C,IAAG/M,IAAA;AAAA,YAAYwS,MACrD;AAAA,YAAQjH,UAAAqlC,MAAAA,SAAAE;AAAAA,YAAA54B,KAETwzB;AAAAA,UAAAA,CAAG;AAAA,QAAC;AAAA,MAAA,CAEA;AAAC,UAAAvqC;AAAA,UAAAd,SAAAqwC,MAAA;AAGUvvC,cAAA;AAAA,UAAA6I,IAAM;AAAA,UAAsBwI,MAC1C;AAAA,UAAQjH,UAAAqlC,MAAAA,SAAAC;AAAAA,UAAA34B,KAETw4B;AAAAA,QAAAA;AAAMrwC,eAAAqwC;AAAArwC,eAAAc;AAAAA,MAAA,OAAA;AAAAA,cAAAd,EAAA,CAAA;AAAA,MAAA;AAHH4d,aAAM7V,KAAMjH,GAGT;AAAC,UAAAI;AAAA,UAAAlB,SAAAqwC,MAAA;AACQnvC,cAAA;AAAA,UAAAyI,IAAM;AAAA,UAAqBwI,MACzC;AAAA,UAAQjH,UAAAqlC,MAAAA,SAAAE;AAAAA,UAAA54B,KAETw4B;AAAAA,QAAAA;AAAMrwC,eAAAqwC;AAAArwC,eAAAkB;AAAAA,MAAA,OAAA;AAAAA,cAAAlB,EAAA,CAAA;AAAA,MAAA;AAHH4d,aAAM7V,KAAM7G,GAGT;AAAC,UAAAI;AAAA,UAAAtB,SAAAqwC,MAAA;AACQ/uC,cAAA;AAAA,UAAAqI,IAAM;AAAA,UAAsBwI,MAC1C;AAAA,UAAQjH,UAAAqlC,MAAAA,SAAAC;AAAAA,UAAA34B,KAETw4B;AAAAA,QAAAA;AAAMrwC,eAAAqwC;AAAArwC,gBAAAsB;AAAAA,MAAA,OAAA;AAAAA,cAAAtB,EAAA,EAAA;AAAA,MAAA;AAHH4d,aAAM7V,KAAMzG,GAGT;AAAC,UAAAE;AAAA,UAAAxB,UAAAqwC,MAAA;AACQ7uC,cAAA;AAAA,UAAAmI,IAAM;AAAA,UAAqBwI,MACzC;AAAA,UAAQjH,UAAAqlC,MAAAA,SAAAE;AAAAA,UAAA54B,KAETw4B;AAAAA,QAAAA;AAAMrwC,gBAAAqwC;AAAArwC,gBAAAwB;AAAAA,MAAA,OAAA;AAAAA,cAAAxB,EAAA,EAAA;AAAA,MAAA;AAHH4d,aAAM7V,KAAMvG,GAGT;AAACxB,aAAAkpC;AAAAlpC,aAAAwM;AAAAxM,aAAAipC;AAAAjpC,aAAAuM;AAAAvM,aAAA4d;AAAAA,IAAA,OAAA;AAAAA,eAAA5d,EAAA,CAAA;AAAA,IAAA;AAEJY,SAAOgd;AA/DX,UAAA8yB,UAAgB9vC;AAsEJ,UAAAE,KAAAsvC,WACM,oDACA;AACN,UAAAlvC,KAAA+nC,cAAc;AAAe,QAAA3nC;AAAA,QAAAtB,EAAA,EAAA,MAAAc,MAAAd,UAAAkB,IAAA;AALtBI,WAAAW,GAAAA,IACP,6HACAnB,IAGAI,EACJ;AAAClB,cAAAc;AAAAd,cAAAkB;AAAAlB,cAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,EAAA;AAAA,IAAA;AAMO,UAAAwB,KAAAynC,aACM,0FACA;AAAoF,QAAAzmC;AAAA,QAAAxC,UAAAwB,IAAA;AAJnFgB,WAAAP,GAAAA,IACP,2DACAT,EAGJ;AAACxB,cAAAwB;AAAAxB,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,EAAA,MAAAkpC,kBAAAlpC,EAAA,EAAA,MAAAH,QAAAG,EAAA,EAAA,MAAAipC,cAAAjpC,UAAAuM,WAAA;AAEA9J,WAAA5C,QAAI,CAAKopC,cACNtnC,2BAAAA,IAAA,SAAe,WAAA,yBACX,UAAAA,2BAAAA,IAACO,KAAAA,aAAA,EACqB,kBAAA;AAAA,QAAAC,MAAQoK;AAAAA,QAAS5M,MACzDupC;AAAAA,QAAcrpC;AAAAA,MAAAA,GAEa,MAAA,WAAA,CAAU,GAEvB;AACHG,cAAAkpC;AAAAlpC,cAAAH;AAAAG,cAAAipC;AAAAjpC,cAAAuM;AAAAvM,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,UAAAipC,YAAA;AACArmC,WAAAqmC,sDAEiB,WAAA,wEACL,MAAA,QACE,QAAA,gBACC,SAAA,aAER,UAAAtnC,2BAAAA,IAAA,QAAA,EACkB,eAAA,SACC,gBAAA,SACF,aAAA,GACX,GAAA,mDAAA,CAAkD,EAAA,CAE5D;AACH3B,cAAAipC;AAAAjpC,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAMW,UAAA6C,KAAAomC,aACM,sDACA;AAA+C,QAAAnmC;AAAA,QAAA9C,UAAA6C,IAAA;AAJ9CC,YAAAb,GAAAA,IACP,sCACAY,EAGJ;AAAC7C,cAAA6C;AAAA7C,cAAA8C;AAAAA,IAAA,OAAA;AAAAA,YAAA9C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+C;AAAA,QAAA/C,EAAA,EAAA,MAAA8C,OAAA9C,UAAAuM,WAAA;AAPLxJ,2CAACnB,GAAAA,YAAA,EACW,SAAA,WACG,WAAAkB,0BAQf;AAAa9C,cAAA8C;AAAA9C,cAAAuM;AAAAvM,cAAA+C;AAAAA,IAAA,OAAA;AAAAA,YAAA/C,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiD;AAAA,QAAAjD,EAAA,EAAA,MAAAkpC,kBAAAlpC,UAAAipC,cAAAjpC,EAAA,EAAA,MAAAuM,WAAA;AACZtJ,YAAAimC,mBAAmB38B,cAAc08B,cAC9BtnC,2BAAAA,IAACC,GAAAA,cACW,SAAA,WACE,WAAA,wEAETsnC,UAAAA,eAAAA,CACL;AACHlpC,cAAAkpC;AAAAlpC,cAAAipC;AAAAjpC,cAAAuM;AAAAvM,cAAAiD;AAAAA,IAAA,OAAA;AAAAA,YAAAjD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAmD;AAAA,QAAAnD,EAAA,EAAA,MAAA+C,OAAA/C,UAAAiD,KAAA;AAnBLE,YAAA5B,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACXwB,UAAAA;AAAAA,QAAAA;AAAAA,QAWCE;AAAAA,MAAAA,GAQL;AAAMjD,cAAA+C;AAAA/C,cAAAiD;AAAAjD,cAAAmD;AAAAA,IAAA,OAAA;AAAAA,YAAAnD,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA8D;AAAA,QAAA9D,UAAAi7B,YAAA;AAIDn3B,YAAAm3B,6CACIjU,GAAAA,SAAA,EAAc,OAAA,eACX,UAAArlB,2BAAAA,IAAA,OAAA,EAAe,WAAA,wCAAA,CAAuC,EAAA,CAC1D;AACH3B,cAAAi7B;AAAAj7B,cAAA8D;AAAAA,IAAA,OAAA;AAAAA,YAAA9D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA+D;AAAA,QAAA/D,UAAA6tC,gBAAA;AACA9pC,YAAA8pC,iDACI7mB,GAAAA,SAAA,EAAc,OAAA,mBACX,UAAArlB,2BAAAA,IAAA,OAAA,EAAe,WAAA,uCAAA,CAAsC,EAAA,CACzD;AACH3B,cAAA6tC;AAAA7tC,cAAA+D;AAAAA,IAAA,OAAA;AAAAA,YAAA/D,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAgE;AAAA,QAAAhE,EAAA,EAAA,MAAA8D,OAAA9D,UAAA+D,KAAA;AAVLC,YAAAzC,2BAAAA,KAAA,OAAA,EAAe,WAAA,4CACVuC,UAAAA;AAAAA,QAAAA;AAAAA,QAKAC;AAAAA,MAAAA,GAKL;AAAM/D,cAAA8D;AAAA9D,cAAA+D;AAAA/D,cAAAgE;AAAAA,IAAA,OAAA;AAAAA,YAAAhE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAiE;AAAA,QAAAjE,EAAA,EAAA,MAAAmD,OAAAnD,EAAA,EAAA,MAAAgE,OAAAhE,EAAA,EAAA,MAAAwC,MAAAxC,EAAA,EAAA,MAAAyC,MAAAzC,UAAA4C,IAAA;AAnEVqB,YAAA1C,2BAAAA,KAAA,OAAA,EACe,WAAAiB,IAOVC,UAAAA;AAAAA,QAAAA;AAAAA,QAUAG;AAAAA,QAeDO;AAAAA,QAuBAa;AAAAA,MAAAA,GAYJ;AAAMhE,cAAAmD;AAAAnD,cAAAgE;AAAAhE,cAAAwC;AAAAxC,cAAAyC;AAAAzC,cAAA4C;AAAA5C,cAAAiE;AAAAA,IAAA,OAAA;AAAAA,YAAAjE,EAAA,EAAA;AAAA,IAAA;AAIA,UAAAmE,MAAAqI;AAAuB,QAAApI;AAAA,QAAApE,UAAAmE,KAAA;AAAxBC,YAACD,IAAuB1C,IAAAuB,OA4DxB;AAAChD,cAAAmE;AAAAnE,cAAAoE;AAAAA,IAAA,OAAA;AAAAA,YAAApE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAqE;AAAA,QAAArE,UAAAoE,KAAA;AA7DNC,YAAA1C,2BAAAA,IAAA,OAAA,EAAe,WAAA,0DACVyC,UAAAA,KA6DL;AAAMpE,cAAAoE;AAAApE,cAAAqE;AAAAA,IAAA,OAAA;AAAAA,YAAArE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsE;AAAA,QAAAtE,UAAA0wC,SAAA;AAGLpsC,YAAAosC,QAAOjvC,IAAAuyB,QAYP;AAACh0B,cAAA0wC;AAAA1wC,cAAAsE;AAAAA,IAAA,OAAA;AAAAA,YAAAtE,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAuE;AAAA,QAAAvE,EAAA,EAAA,MAAAiE,OAAAjE,EAAA,EAAA,MAAAqE,OAAArE,EAAA,EAAA,MAAAsE,OAAAtE,UAAAsB,IAAA;AA9JNiD,qDACe,WAAAjD,IASX2C,UAAAA;AAAAA,QAAAA;AAAAA,QAuEAI;AAAAA,QAiECC;AAAAA,MAAAA,GAaL;AAAMtE,cAAAiE;AAAAjE,cAAAqE;AAAArE,cAAAsE;AAAAtE,cAAAsB;AAAAtB,cAAAuE;AAAAA,IAAA,OAAA;AAAAA,YAAAvE,EAAA,EAAA;AAAA,IAAA;AAAA,WA/JNuE;AAAAA,EA+JM;AAIP,QAAMosC,YAAYC,MAAAA,KAAKT,cAAc;AAlPrB,WAAAntC,QAAA6tC,OAAA;AAAA,WAkKHtvC,2BAAAA,KAAA,OAAA,EAEe,WAAAU,GAAAA,IACP,iEACAyK,MAAGgI,gBAAiB,uCACpBhI,MAAG+/B,gBAAA,CACE//B,MAAGgI,gBACJ,mCACR,GAEA,UAAA;AAAA,MAAAnT,2BAAAA,KAAA,QAAA,EAAgB,WAAA,4BACXmL,UAAAA;AAAAA,QAAAA,MAAGgI,gBACA/S,2BAAAA,IAACqlB,GAAAA,SAAA,EAAc,OAAA,eACX,mDAAgB,WAAA,wCAAuC,UAAA,KAAA,CAAE,GAC7D;AAAA,QAEHta,MAAG+/B,gBAAA,CAAkB//B,MAAGgI,gBACrB/S,+BAACqlB,GAAAA,WAAe,OAAA,QAAQta,MAAGugC,gBAAiB,GAAG,IAC3C,UAAAtrC,2BAAAA,IAAA,UAAgB,WAAA,uCAAsC,gBAAE,EAAA,CAC5D;AAAA,MAAA,GAER;AAAA,qCAECC,GAAAA,YAAA,EACW,SAAA,WACG,WAAAK,GAAAA,IACP,iDACAyK,MAAGgI,eACG,qDACAhI,MAAG+/B,eACD,qCACA,+CACZ,GAEC//B,gBAAG/M,MACR;AAAA,MAEC+M,MAAG0/B,SACAzqC,2BAAAA,IAACwvB,SAAA,EACQ,MAAA,YACK,WAAA,qIACb,UAAA,OAAA,CAED,mCAECvvB,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,kFAET8K,gBAAG8/B,WACR;AAAA,MAGH9/B,MAAGggC,cAAA,CAAgBhgC,MAAGgI,gBACnB/S,+BAACqlB,GAAAA,SAAA,EAAc,OAAA,YACX,UAAArlB,2BAAAA,IAAA,QAAA,EAAgB,WAAA,2BAA0B,eAAC,EAAA,CAC/C;AAAA,IAAA,EAAA,GAvDC+K,MAAG/M,IAyDZ;AAAA,EAAM;AA5NH,WAAAq0B,SAAArE,GAAA;AAAA,WAkOPhuB,2BAAAA,IAACmvC,MAAAA,QAAA,EAEO,IAAAnhB,EAAChmB,IACC,MAAAgmB,EAACxd,MACG,UAAAwd,EAACzkB,UACJ,OAAA;AAAA,MAAA2M,KAAO8X,EAAC9X;AAAAA,IAAAA,GACJ,WAAA5V,GAAAA,IACP,8DACA0tB,EAACxd,SAAU,WAAW,iBAAiB,eAC3C,KARKwd,EAAChmB,EAQL;AAAA,EACH;AC3OlB,QAAMonC,oBAAoBhxC,CAAAA,OAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAC,UAAA;AAAA,MAAA0J;AAAAA,MAAAqnC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAC;AAAAA,MAAAvzB;AAAAA,MAAAsyB;AAAAA,IAAAA,IAAArwC;AAWvB,UAAAquC,WAAiBtwB;AAAqC,QAAAld;AAAA,QAAAZ,SAAAoxC,kBAAApxC,EAAA,CAAA,MAAAgxC,WAAAhxC,EAAA,CAAA,MAAAixC,WAAAjxC,EAAA,CAAA,MAAAqxC,kBAAArxC,SAAAkxC,WAAAlxC,EAAA,CAAA,MAAAmxC,SAAA;AAEnBvwC,WAAA0wC,MAAAA,kBAAA;AAAA,QAAAN;AAAAA,QAAAC;AAAAA,QAAAG;AAAAA,QAAAF;AAAAA,QAAAC;AAAAA,QAAAE;AAAAA,QAAAE,cAAA;AAAA,MAAA,CAQlC;AAACvxC,aAAAoxC;AAAApxC,aAAAgxC;AAAAhxC,aAAAixC;AAAAjxC,aAAAqxC;AAAArxC,aAAAkxC;AAAAlxC,aAAAmxC;AAAAnxC,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AARF,UAAA,CAAAwxC,UAAAC,QAAAC,MAAA,IAAmC9wC;AAUnC,UAAA+wC,YAAkBvD,UAAQ1E,cAAgB;AAC1C,UAAAkI,aAAmBxD,UAAQG;AAC3B,UAAAtF,aAAmBmF,UAAQC;AAG3B,QAAAwD;AACIC,QAAAA;AACJ,QAAAC,cAAA;AAAsB,QAElB3B,UAAQ;AACRyB,oBAAcA;AACdE,oBAAAA;AAAAA,IAAW,OAAA;AAAA,UACJ9I,YAAU;AACjB4I,sBAAcA;AAAAA,MAAH,OAAA;AAAA,YACJF,WAAS;AAChBG,4BAAkBA;AAClBD,wBAAcA;AAAAA,QAAH,OAAA;AAAA,cACJD,YAAU;AACjBE,8BAAkBA;AAClBD,0BAAcA;AAAAA,UAAH,OAAA;AAEXA,0BAAcA;AAAAA,UAAH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,QAAA/wC;AAAA,QAAAd,EAAA,CAAA,MAAA6xC,eAAA7xC,SAAA8xC,mBAAA9xC,EAAA,CAAA,MAAA+xC,aAAA;AAQIjxC,WAAA;AAAA,QAAAkxC,QACKH;AAAAA,QAAWE;AAAAA,QAAAD;AAAAA,MAAAA;AAGtB9xC,aAAA6xC;AAAA7xC,aAAA8xC;AAAA9xC,aAAA+xC;AAAA/xC,cAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,EAAA,EAAA,MAAAwxC,YAAAxxC,UAAA2J,MAAA3J,EAAA,EAAA,MAAAc,IAAA;AAPLI,0CAAC+wC,MAAAA,UAAA,EACOtoC,IACE6nC,MAAAA,UACC,OAAA1wC,IAIN;AACHd,cAAAwxC;AAAAxxC,cAAA2J;AAAA3J,cAAAc;AAAAd,cAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,EAAA,MAAAouC,YAAApuC,EAAA,EAAA,MAAA2xC,aAAA3xC,EAAA,EAAA,MAAA4xC,cAAA5xC,UAAAipC,cAAAjpC,EAAA,EAAA,MAAAyxC,UAAAzxC,EAAA,EAAA,MAAA0xC,UAAA1xC,EAAA,EAAA,MAAAowC,UAAA;AACD9uC,WAAA8sC,UAAQ9uC,SACLqC,+BAACuwC,MAAAA,mBAAA,EACG,UAAAvwC,2BAAAA,IAAA,SACW,OAAA;AAAA,QAAAuJ,UACO;AAAA,QAAUinC,WACT,mCAAmCV,MAAM,MAAMC,MAAM;AAAA,QAAKU,eACtD;AAAA,MAAA,GAER,WAAAnwC,GAAAA,IACP,yEACA,uCACAmuC,WACM,gCACAnH,aACE,kFACA0I,aAAaC,aACX,+FACA,uDACd,GAECxD,UAAAA,SAAQ9uC,OACb,GACJ;AACHU,cAAAouC;AAAApuC,cAAA2xC;AAAA3xC,cAAA4xC;AAAA5xC,cAAAipC;AAAAjpC,cAAAyxC;AAAAzxC,cAAA0xC;AAAA1xC,cAAAowC;AAAApwC,cAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,EAAA,EAAA,MAAAkB,MAAAlB,UAAAsB,IAAA;AAjCLE,kEACIN,UAAAA;AAAAA,QAAAA;AAAAA,QASCI;AAAAA,MAAAA,GAuBA;AACFtB,cAAAkB;AAAAlB,cAAAsB;AAAAtB,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AAAA,WAlCHwB;AAAAA,EAkCG;AAIJ,QAAM6wC,eAAezB,MAAAA,KAAKG,iBAAiB;AC/DlD,QAAMuB,YAAY;AAAA,IACdC,WAAW5B;AAAAA,EACf;AAEA,QAAM6B,YAAY;AAAA,IACdC,cAAcJ;AAAAA,EAClB;AAIA,WAASK,uBAAuB;AAAA,IAC5B9/B;AAAAA,EAGJ,GAAG;AACC,UAAM+/B,oBAAoBC,MAAAA,aAAAA;AAC1B,UAAM;AAAA,MACFpJ,OAAOwB;AAAAA,MACPvB,OAAOoJ;AAAAA,MACPnJ;AAAAA,MACAmG;AAAAA,MACAG;AAAAA,MACAC;AAAAA,MACAC;AAAAA,IAAAA,IACAN,eAAeh9B,WAAW;AAE9B,UAAM,CAAC42B,OAAOsJ,QAAQ,IAAI/jC,MAAAA,SAAiB,CAAA,CAAE;AAC7C,UAAM,CAAC06B,OAAOsJ,QAAQ,IAAIhkC,MAAAA,SAAiB,CAAA,CAAE;AAC7C,UAAM,CAAC8qB,eAAeC,gBAAgB,IAAI/qB,MAAAA,SAAwB,IAAI;AACtE,UAAM,CAACikC,aAAaC,cAAc,IAAIlkC,MAAAA,SAAS,EAAE;AACjD,UAAMmkC,iBAAiB9qC,MAAAA,OAAO,KAAK;AAGnCrH,UAAAA,UAAU,MAAM;AACZ+xC,eAAS9H,aAAa;AACtB+H,eAASF,aAAa;AAAA,IAC1B,GAAG,CAAC7H,eAAe6H,aAAa,CAAC;AAEjC,UAAMM,gBAAgBz3B,MAAAA,YAClB,CAAC03B,YAA0BN,SAAUO,CAAAA,QAAQC,MAAAA,iBAAiBF,SAASC,GAAG,CAAC,GAC3E,CAAA,CACJ;AACA,UAAME,gBAAgB73B,MAAAA,YAClB,CAAC03B,cAA0BL,SAAUS,CAAAA,QAAQC,MAAAA,iBAAiBL,WAASI,GAAG,CAAC,GAC3E,CAAA,CACJ;AAGAzyC,UAAAA,UAAU,MAAM;AACZ,UAAIyoC,MAAM75B,SAAS,KAAK,CAACujC,eAAe7qC,SAAS;AAC7C,cAAMqrC,QAAQC,WAAW,MAAM;AAC3BhB,4BAAkBiB,QAAQ;AAAA,YAAEC,SAAS;AAAA,YACrDrjB,UAAU;AAAA,UAAA,CAAK;AACC0iB,yBAAe7qC,UAAU;AAAA,QAC7B,GAAG,GAAG;AACN,eAAO,MAAMyrC,aAAaJ,KAAK;AAAA,MACnC;AACA,aAAOnpC;AAAAA,IACX,GAAG,CAACi/B,MAAM75B,QAAQgjC,iBAAiB,CAAC;AAEpC,UAAMoB,gBAAgBr4B,MAAAA,YAAY,MAAM;AACpCi3B,wBAAkBiB,QAAQ;AAAA,QAAEC,SAAS;AAAA,QAC7CrjB,UAAU;AAAA,MAAA,CAAK;AAAA,IACX,GAAG,CAACmiB,iBAAiB,CAAC;AAEtB,UAAMqB,kBAAkBt4B,MAAAA,YAAY,CAAC0kB,GAAqBqK,SAAe;AACrE3Q,uBAAiB2Q,KAAK9gC,EAAE;AAAA,IAC5B,GAAG,CAAA,CAAE;AAEL,UAAMsqC,kBAAkBv4B,MAAAA,YAAY,MAAM;AACtCoe,uBAAiB,IAAI;AAAA,IACzB,GAAG,CAAA,CAAE;AAGL,UAAMoa,oBAAoBx4B,kBACtB,CAAC6xB,WAAmB;AAChBzT,uBAAiByT,MAAM;AACvB,YAAM9C,SAAOjB,MAAMn9B,KAAM8nC,CAAAA,MAAMA,EAAExqC,OAAO4jC,MAAM;AAC9C,UAAI9C,QAAM;AACNkI,0BAAkByB,UACd3J,OAAKv/B,SAASkgC,IAAI,KAClBX,OAAKv/B,SAASmgC,IAAI,IAClB;AAAA,UAAEgJ,MAAM;AAAA,UAC5B7jB,UAAU;AAAA,QAAA,CACM;AAAA,MACJ;AAAA,IACJ,GACA,CAACgZ,OAAOmJ,iBAAiB,CAC7B;AAGA,UAAM,CAACprB,aAAaC,cAAc,IAAIzY,MAAAA,SAAS,MAAM;AACjD,UAAI;AACA,cAAM+L,QAAQd,aAAaC,QAAQ,gCAAgC;AACnE,eAAOa,UAAU,OAAO2M,WAAW3M,KAAK,IAAI;AAAA,MAChD,QAAQ;AACJ,eAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAED/Z,UAAAA,UAAU,MAAM;AACZ,UAAI;AACAiZ,qBAAagD,QACT,kCACAuK,YAAYxF,SAAAA,CAChB;AAAA,MACJ,QAAQ;AAAA,MACJ;AAAA,IAER,GAAG,CAACwF,WAAW,CAAC;AAGhB,UAAM+sB,sBAAsB/sC,MAAAA,QACxB,MAAMqL,YAAYtB,OAAOorB,0BAAoB,GAC7C,CAAC9pB,WAAW,CAChB;AAEA,UAAM2hC,sBAAsBhtC,MAAAA,QAAQ,MAAM;AACtC,UAAI,CAACyrC,YAAYroC,KAAAA,EAAQ,QAAO2pC;AAChC,YAAME,IAAIxB,YAAYpV,YAAAA;AACtB,aAAO0W,oBAAoBhjC,OACtBf,CAAAA,MACGA,EAAE5Q,KAAKi+B,YAAAA,EAAc91B,SAAS0sC,CAAC,KAC/BjkC,EAAEnE,OAAOwxB,YAAAA,EAAc91B,SAAS0sC,CAAC,KACjCjkC,EAAEpO,MAAMy7B,YAAAA,EAAc91B,SAAS0sC,CAAC,CACxC;AAAA,IACJ,GAAG,CAACF,qBAAqBtB,WAAW,CAAC;AAGrC,UAAMyB,gBAAgBltC,MAAAA,QAClB,MACIiiC,MAAMl4B,OACD6iC,CAAAA,QAAOA,IAAEr2B,KAAuBmrB,UACrC,GACJ,CAACO,KAAK,CACV;AAGA,UAAMkL,QAAQntC,MAAAA,QACV,OAAO;AAAA,MACH0E,QAAQgkC;AAAAA,MACR0E,WAAWzE;AAAAA,MACX0E,WAAWH,cAAc9kC;AAAAA,MACzBklC,SAASP,oBAAoBhjC,OACxBf,CAAAA,QACGmsB,MAAAA,qBAAqBnsB,GAAC,KACtBA,IAAEosB,iBACFpsB,IAAEosB,cAAchtB,SAAS,CACjC,EAAEA;AAAAA,IAAAA,IAEN,CACIsgC,YACAC,eACAuE,cAAc9kC,QACd2kC,mBAAmB,CAE3B;AAEA,0CACKzsB,GAAAA,iBAAA,EACG,aAAY,cACZ,kBAAkBN,aAClB,mBAAmBC,gBACnB,gBAAgB,KAChB,YACIjmB,gCAAC,OAAA,EACG,WAAWU,GAAAA,IACP,qEACAqN,qBACJ,GAGA,UAAA;AAAA,MAAA/N,2BAAAA,KAAC,OAAA,EACG,WAAWU,GAAAA,IACP,uGACAqN,GAAAA,kBACJ,GAEA,UAAA;AAAA,QAAA3N,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,sFAAoF,UAAA,UAGlG;AAAA,uCACCA,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,yEAET8yC,gBAAMzoC,OAAAA,CACX;AAAA,MAAA,GACJ;AAAA,MAGAtK,2BAAAA,IAAC,SAAI,WAAU,yEACX,yCAAC6mB,GAAAA,WAAA,EACG,MAAK,YACL,aAAY,kBACZ,OAAOwqB,aACP,UAAWljC,OAAMmjC,eAAenjC,EAAEyI,OAAO7P,KAAK,GAC9C,gBAAe,UAAA,CAAS,EAAA,CAEhC;AAAA,MAGAnH,2BAAAA,KAAC,OAAA,EAAI,WAAU,8CAEX,UAAA;AAAA,QAAAI,+BAAC,OAAA,EAAI,WAAU,eACV4yC,UAAAA,oBAAoB9yC,IAAKmS,CAAAA,eAAe;AACrC,gBAAMxH,QAAQwH,WAAWxH,SAASwH,WAAWzR;AAC7C,gBAAMorC,WAAS,SAASnhC,KAAK;AAC7B,gBAAMoxB,aAAa3D,kBAAkB0T;AACrC,iBACIhsC,2BAAAA,KAAC,OAAA,EAEG,SAAS,MACL2yC,kBAAkB3G,QAAM,GAE5B,WAAWtrC,GAAAA,IACP,0EACAu7B,aACM,0EACA,kGACV,GAEA,UAAA;AAAA,YAAA77B,+BAAC,OAAA,EAAI,WAAU,mEACX,UAAAA,2BAAAA,IAACO,oBACG,kBAAkB;AAAA,cACdC,MAAMyR,WAAWzR;AAAAA,cACjBxC,MAAMiU,WAAWjU;AAAAA,cACjBE,MACI,OAAO+T,WAAW/T,SAClB,WACM+T,WAAW/T,OACX0K;AAAAA,YAAAA,GAEd,MAAK,WAAA,CAAU,GAEvB;AAAA,YACAhJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,gCACX,UAAA;AAAA,cAAAI,+BAACC,GAAAA,cACG,SAAQ,WACR,WAAU,gCAETgS,qBAAWjU,MAChB;AAAA,cACCyM,UAAUwH,WAAWjU,QAClBgC,2BAAAA,IAACC,GAAAA,cACG,SAAQ,WACR,WAAU,kFAETwK,UAAAA,MAAAA,CACL;AAAA,YAAA,GAER;AAAA,YACA7K,2BAAAA,KAAC,OAAA,EAAI,WAAU,yCACVm7B,UAAAA;AAAAA,cAAAA,2BAAqB9oB,UAAU,KAC5BA,WAAW+oB,iBACX/oB,WAAW+oB,cACNhtB,SAAS,KACVhO,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,eACX,UAAArlB,2BAAAA,IAAC,OAAA,EAAI,WAAU,yCAAuC,GAC1D;AAAA,cAEPiS,WAAW9C,WACRnP,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,mBACX,UAAArlB,2BAAAA,IAAC,OAAA,EAAI,WAAU,uCAAA,CAAsC,EAAA,CACzD;AAAA,YAAA,EAAA,CAER;AAAA,UAAA,EAAA,GAvDK4rC,QAwDT;AAAA,QAER,CAAC,EAAA,CACL;AAAA,QAGCkH,cAAc9kC,SAAS,KACpBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,QACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,2GAAyG,UAAA,mBAGvH;AAAA,yCACC,OAAA,EAAI,WAAU,oBACV6yC,UAAAA,cAAchzC,IAAKgpC,CAAAA,WAAS;AACzB,kBAAM7F,IACF6F,OAAK3sB;AACT,kBAAM0f,eACF3D,kBAAkB4Q,OAAK9gC;AAC3B,mBACIpI,2BAAAA,KAAC,OAAA,EAEG,SAAS,MACL2yC,kBACIzJ,OAAK9gC,EACT,GAEJ,WAAW1H,GAAAA,IACP,oEACAu7B,eACM,kDACA,gGACV,GAEA,UAAA;AAAA,cAAA77B,2BAAAA,IAAC,SACG,WAAU,+BACV,MAAK,QACL,QAAO,gBACP,SAAQ,aAER,yCAAC,QAAA,EACG,eAAc,SACd,gBAAe,SACf,aAAa,GACb,GAAE,oDAAkD,EAAA,CAE5D;AAAA,6CACCC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,8BAETgjC,YAAEr4B,UAAAA,CACP;AAAA,YAAA,EAAA,GA/BKk+B,OAAK9gC,EAgCd;AAAA,UAER,CAAC,EAAA,CACL;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GAER;AAAA,sCAGC,OAAA,EACG,WAAW1H,GAAAA,IACP,kEACAqN,GAAAA,kBACJ,GAEA,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,UAG3E;AAAA,yCACCA,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,qCAET8yC,gBAAMzoC,OAAAA,CACX;AAAA,QAAA,GACJ;AAAA,QACA1K,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,aAG3E;AAAA,yCACCA,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,qCAET8yC,gBAAMC,UAAAA,CACX;AAAA,QAAA,GACJ;AAAA,QACApzC,2BAAAA,KAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,UAAAI,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,iBAG3E;AAAA,UACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,wCAAA,CAAuC;AAAA,2CACrDC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,qCAET8yC,gBAAMG,QAAAA,CACX;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ,GAEJ,aACItzC,2BAAAA,KAAC,OAAA,EAAI,WAAU,8EAEX,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EACG,WAAWU,GAAAA,IACP,6FACAqN,GAAAA,kBACJ,GAEA,UAAA;AAAA,QAAA3N,2BAAAA,IAAC,OAAA,EAAI,WAAU,gCACX,UAAAA,2BAAAA,IAACC,GAAAA,YAAA,EACG,SAAQ,aACR,WAAU,+DAA6D,UAAA,oBAAA,CAG3E,GACJ;AAAA,QACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCAEX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2HACX,UAAA;AAAA,YAAAI,2BAAAA,IAACqlB,GAAAA,WAAQ,OAAM,wBACX,yCAAC,UAAA,EACG,SAAS,MAAM6oB,aAAa,IAAI,GAChC,WAAW5tC,GAAAA,IACP,kEACAynC,cAAc,OACR,0BACA,kGACV,GAAE,gBAGN,EAAA,CACJ;AAAA,YACA/nC,2BAAAA,IAACqlB,GAAAA,WAAQ,OAAM,wBACX,yCAAC,UAAA,EACG,SAAS,MAAM6oB,aAAa,IAAI,GAChC,WAAW5tC,GAAAA,IACP,kEACAynC,cAAc,OACR,0BACA,kGACV,GAAE,gBAGN,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UAEA/nC,2BAAAA,IAAC,OAAA,EAAI,WAAU,qDAAA,CAAoD;AAAA,UAGnEA,+BAACqlB,GAAAA,SAAA,EAAQ,OAAM,eACX,yCAACzX,GAAAA,YAAA,EACG,MAAK,SACL,SAASwkC,eAET,UAAApyC,2BAAAA,IAAC,OAAA,EACG,WAAU,WACV,MAAK,QACL,QAAO,gBACP,SAAQ,aAER,UAAAA,2BAAAA,IAAC,QAAA,EACG,eAAc,SACd,gBAAe,SACf,aAAa,GACb,GAAE,4FAAA,CAA2F,EAAA,CAErG,GACJ,GACJ;AAAA,UAGAA,2BAAAA,IAACqlB,GAAAA,SAAA,EAAQ,OAAM,aACX,yCAACzX,GAAAA,YAAA,EACG,MAAK,SACL,SAASygC,UAET,UAAAruC,2BAAAA,IAAC,OAAA,EACG,WAAU,WACV,MAAK,QACL,QAAO,gBACP,SAAQ,aAER,UAAAA,+BAAC,QAAA,EACG,eAAc,SACd,gBAAe,SACf,aAAa,GACb,GAAE,+GAA6G,EAAA,CAEvH,GACJ,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,MAGAJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,sBACX,UAAA;AAAA,QAAAA,2BAAAA,KAACuzC,MAAAA,WAAA,EACG,OACA,OACA,eACA,eACA,aAAad,iBACb,aAAaC,iBACb,WACA,WACA,SAAO,MACP,gBAAgB;AAAA,UAAEJ,SAAS;AAAA,QAAA,GAC3B,SAAS,KACT,SAAS,GACT,YAAY;AAAA,UAAEkB,iBAAiB;AAAA,QAAA,GAC/B,WAAU,qCAEV,UAAA;AAAA,UAAApzC,2BAAAA,IAACqzC,MAAAA,YAAA,EACG,SAASC,MAAAA,kBAAkBC,MAC3B,KAAK,IACL,MAAM,GACN,WAAU,uCACV,OAAM,4BAAA,CAA2B;AAAA,UAErCvzC,2BAAAA,IAACwzC,MAAAA,UAAA,EACG,iBAAiB,OACjB,WAAU,oHAAkH;AAAA,UAEhIxzC,2BAAAA,IAACyzC,MAAAA,SAAA,EACG,iBAAkBjB,CAAAA,QAAM;AACpB,kBAAMvP,MAAIuP,IAAEr2B;AACZ,gBAAI8mB,IAAEqE,WAAY,QAAO;AACzB,gBAAIrE,IAAE3J,WAAY,QAAO;AACzB,mBAAO;AAAA,UACX,GACA,WAAYkZ,CAAAA,QAAM;AACd,kBAAMvP,MAAIuP,IAAEr2B;AACZ,gBAAI8mB,IAAEqE,WAAY,QAAO;AACzB,mBAAO;AAAA,UACX,GACA,WAAU,oBACV,WAAU,mHAAA,CAAkH;AAAA,QAAA,GAEpI;AAAA,QAGA1nC,2BAAAA,KAAC,OAAA,EAAI,WAAU,+LACX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,kCAAA,CAAiC;AAAA,2CAC/CC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,SAAA,CAG3E;AAAA,UAAA,GACJ;AAAA,UACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,kCAAA,CAAiC;AAAA,2CAC/CC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,MAAA,CAG3E;AAAA,UAAA,GACJ;AAAA,UACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EACG,WAAU,qBACV,OAAO;AAAA,cACH0zC,iBACI;AAAA,YAAA,GACN;AAAA,2CAELzzC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,UAAA,CAG3E;AAAA,UAAA,GACJ;AAAA,UACAD,2BAAAA,IAAC,OAAA,EAAI,WAAU,8CAAA,CAA6C;AAAA,UAC5DJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,QAAA,EAAK,WAAU,cAAa,UAAA,MAAE;AAAA,2CAC9BC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,KAAA,CAG3E;AAAA,UAAA,GACJ;AAAA,UACAL,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,QAAA,EAAK,WAAU,cAAa,UAAA,MAAE;AAAA,2CAC9BC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+DAA6D,UAAA,KAAA,CAG3E;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CACJ,EAAA,CACH;AAAA,EAGb;AAIO,QAAMiF,mBAAmBA,MAAA;AAAA,UAAA7G,IAAAC,qBAAAA,EAAA,CAAA;AAC5B,UAAA;AAAA,MAAA2S,aAAA0iC;AAAAA,IAAAA,IACI77B,iCAAAA;AAEE,QAAA1Z;AAAA,QAAAa;AAAA,QAAAZ,SAAAs1C,qBAAA;AAIK10C,WAAA00C,uBAAmB,CAAA;AAAMt1C,aAAAs1C;AAAAt1C,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAhCD,SAAOa;AADX,UAAAgS,cAAoB7S;AAEM,QAEtB,CAAC6S,eAAeA,YAAWjD,WAAA,GAAa;AAAA,UAAA7O;AAAA,UAAAd,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEpC7B,sDAAe,WAAA,kDACX,UAAAS,2BAAAA,KAAA,OAAA,EAAe,WAAA,yBACX,UAAA;AAAA,UAAAI,2BAAAA,IAACyN,GAAAA,kBAAA,EAAsB,MAAA,QAAA,CAAO;AAAA,yCAC7BxN,GAAAA,YAAA,EACW,SAAA,SACF,OAAA,aACT,UAAA,kBAAA,CAED;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAM5B,eAAAc;AAAAA,MAAA,OAAA;AAAAA,cAAAd,EAAA,CAAA;AAAA,MAAA;AAAA,aAVNc;AAAAA,IAUM;AAAA,QAAAA;AAAA,QAAAd,SAAA4S,aAAA;AAKV9R,WAAAa,2BAAAA,IAAA,OAAA,EAAe,WAAA,iHACX,UAAAA,2BAAAA,IAAC4zC,MAAAA,qBACG,UAAA5zC,2BAAAA,IAAC,wBAAA,EAAoCiR,YAAAA,IACzC,GACJ;AAAM5S,aAAA4S;AAAA5S,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,WAJNc;AAAAA,EAIM;;;;;AC9oBd,WAAS00C,WAAW/W,OAAmC;AACnD,QAAIA,UAAUl0B,UAAak0B,UAAU,KAAM,QAAO;AAClD,QAAIA,QAAQ,KAAM,QAAO,GAAGA,KAAK;AACjC,QAAIA,QAAQ,OAAO,KAAM,QAAO,IAAIA,QAAQ,MAAMzoB,QAAQ,CAAC,CAAC;AAC5D,QAAIyoB,QAAQ,OAAO,OAAO,KAAM,QAAO,IAAIA,SAAS,OAAO,OAAOzoB,QAAQ,CAAC,CAAC;AAC5E,WAAO,IAAIyoB,SAAS,OAAO,OAAO,OAAOzoB,QAAQ,CAAC,CAAC;AAAA,EACvD;AAEA,WAAS0uB,eAAegH,MAAyC;AAC7D,QAAI,CAACA,KAAM,QAAO;AAClB,UAAM9G,IAAI8G,gBAAgBhnB,OAAOgnB,OAAO,IAAIhnB,KAAKgnB,IAAI;AACrD,QAAI+J,MAAM7Q,EAAEE,QAAAA,CAAS,EAAG,QAAO;AAC/B,UAAM5hB,MAAMwB,KAAKxB,IAAAA;AACjB,UAAM2hB,OAAO3hB,MAAM0hB,EAAEE,QAAAA;AACrB,QAAID,OAAO,IAAQ,QAAO;AAC1B,QAAIA,OAAO,MAAW;AAAE,YAAMt+B,IAAIwR,KAAKoL,MAAM0hB,OAAO,GAAM;AAAG,aAAO,GAAGt+B,CAAC;AAAA,IAAS;AACjF,QAAIs+B,OAAO,OAAY;AAAE,YAAMlV,IAAI5X,KAAKoL,MAAM0hB,OAAO,IAAS;AAAG,aAAO,GAAGlV,CAAC;AAAA,IAAS;AACrF,QAAIkV,OAAO,QAAa;AAAE,YAAM6Q,KAAK39B,KAAKoL,MAAM0hB,OAAO,KAAU;AAAG,aAAO,GAAG6Q,EAAE;AAAA,IAAS;AACzF,WAAO9Q,EAAE+Q,mBAAAA;AAAAA,EACb;AAEO,WAAS7uC,eAAe;AAC3B,UAAM;AAAA,MAAEqS;AAAAA,IAAAA,IAAkB5Y,sBAAAA;AAC1B,UAAM4sB,WAAW5T,KAAAA,sBAAAA;AAEjB,UAAM,CAACq8B,UAAUC,WAAW,IAAI9mC,MAAAA,SAAuB,CAAA,CAAE;AACzD,UAAM,CAACmM,SAASgnB,UAAU,IAAInzB,MAAAA,SAAS,IAAI;AAC3C,UAAM,CAAC+mC,gBAAgBC,iBAAiB,IAAIhnC,MAAAA,SAAwB,IAAI;AAGxE,UAAM,CAACinC,YAAYC,aAAa,IAAIlnC,MAAAA,SAAS,KAAK;AAClD,UAAM,CAACmnC,eAAeC,gBAAgB,IAAIpnC,MAAAA,SAAS,EAAE;AACrD,UAAM,CAACqnC,cAAcC,eAAe,IAAItnC,MAAAA,SAA6BxE,MAAS;AAC9E,UAAM,CAAC+rC,UAAUC,WAAW,IAAIxnC,MAAAA,SAAS,KAAK;AAG9C,UAAM,CAACynC,cAAcC,eAAe,IAAI1nC,MAAAA,SAAwB,IAAI;AACpE,UAAM,CAAC2nC,UAAUC,WAAW,IAAI5nC,MAAAA,SAAS,KAAK;AAG9C,UAAMk3B,cAAc79B,MAAAA,OAAO+kB,QAAQ;AACnC8Y,gBAAY59B,UAAU8kB;AAEtB,UAAMypB,cAAcC,MAAAA,cAAc19B,aAAa,IAAIA,gBAAgB5O;AAEnE,UAAMusC,eAAep7B,MAAAA,YAAY,YAAY;AACzC,UAAI,CAACk7B,aAAa;AACd1U,mBAAW,KAAK;AAChB;AAAA,MACJ;AACA,UAAI;AACA,cAAMtkB,SAAS,MAAMg5B,YAAYG,aAAAA;AACjClB,oBAAYj4B,MAAM;AAAA,MACtB,SAAS9N,GAAY;AACjBm2B,oBAAY59B,QAAQsX,KAAK;AAAA,UACrBxN,MAAM;AAAA,UACNgD,SAASrF,aAAasF,QAAQtF,EAAEqF,UAAUE,OAAOvF,CAAC;AAAA,QAAA,CACrD;AAAA,MACL,UAAA;AACIoyB,mBAAW,KAAK;AAAA,MACpB;AAAA,IACJ,GAAG,CAAC0U,WAAW,CAAC;AAEhB71C,UAAAA,UAAU,MAAM;AACZ+1C,mBAAAA;AAAAA,IACJ,GAAG,CAACA,YAAY,CAAC;AAEjB,UAAME,eAAe,YAAY;AAC7B,UAAI,CAACJ,eAAe,CAACV,cAAcvrC,OAAQ;AAC3C4rC,kBAAY,IAAI;AAChB,UAAI;AACA,cAAMK,YAAYK,aAAaf,cAAcvrC,KAAAA,GAAQyrC,eAAe;AAAA,UAAEtL,QAAQsL;AAAAA,QAAAA,IAAiB7rC,MAAS;AACxG07B,oBAAY59B,QAAQsX,KAAK;AAAA,UACrBxN,MAAM;AAAA,UACNgD,SAAS,WAAW+gC,cAAcvrC,KAAAA,CAAM;AAAA,QAAA,CAC3C;AACDsrC,sBAAc,KAAK;AACnBE,yBAAiB,EAAE;AACnBE,wBAAgB9rC,MAAS;AACzB,cAAMusC,aAAAA;AAAAA,MACV,SAAShnC,KAAY;AACjBm2B,oBAAY59B,QAAQsX,KAAK;AAAA,UACrBxN,MAAM;AAAA,UACNgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,QAAA,CACrD;AAAA,MACL,UAAA;AACIymC,oBAAY,KAAK;AAAA,MACrB;AAAA,IACJ;AAEA,UAAMW,eAAe,YAAY;AAC7B,UAAI,CAACN,eAAe,CAACJ,aAAc;AACnCG,kBAAY,IAAI;AAChB,UAAI;AACA,cAAMC,YAAYO,aAAaX,YAAY;AAC3CvQ,oBAAY59B,QAAQsX,KAAK;AAAA,UACrBxN,MAAM;AAAA,UACNgD,SAAS,WAAWqhC,YAAY;AAAA,QAAA,CACnC;AACD,YAAIV,mBAAmBU,aAAcT,mBAAkB,IAAI;AAC3DU,wBAAgB,IAAI;AACpB,cAAMK,aAAAA;AAAAA,MACV,SAAShnC,KAAY;AACjBm2B,oBAAY59B,QAAQsX,KAAK;AAAA,UACrBxN,MAAM;AAAA,UACNgD,SAASrF,eAAasF,QAAQtF,IAAEqF,UAAUE,OAAOvF,GAAC;AAAA,QAAA,CACrD;AAAA,MACL,UAAA;AACI6mC,oBAAY,KAAK;AAAA,MACrB;AAAA,IACJ;AAGA,QAAI,CAACC,aAAa;AACd,aACIr1C,2BAAAA,KAAC,OAAA,EAAI,WAAU,0EACX,UAAA;AAAA,QAAAI,2BAAAA,IAACy1C,YAAAA,eAAA,EAAc,MAAM90C,GAAAA,SAAS+0C,OAAO,WAAU,0CAAwC;AAAA,uCACtFz1C,GAAAA,YAAA,EAAW,SAAQ,MAAK,OAAM,aAAY,UAAA,oCAAgC;AAAA,wCAC1EA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,OAAM,YAAW,WAAU,YAAU,UAAA;AAAA,UAAA;AAAA,UAEzDD,2BAAAA,IAAC,QAAA,EAAK,WAAU,8EAA6E,UAAA,yBAAqB;AAAA,UAAO;AAAA,QAAA,EAAA,CACjI;AAAA,MAAA,GACJ;AAAA,IAER;AAEA,QAAIuZ,SAAS;AACT,4CACK,OAAA,EAAI,WAAU,2CACX,UAAAvZ,+BAACyN,GAAAA,oBAAgB,GACrB;AAAA,IAER;AAEA,UAAMghC,WAAWwF,SAASvpC,KAAK2vB,CAAAA,MAAKA,EAAEr8B,SAASm2C,cAAc;AAE7D,WACIv0C,2BAAAA,KAAC,OAAA,EAAI,WAAU,mEAEX,UAAA;AAAA,MAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,yDAAyDqN,GAAAA,kBAAkB,GAC3F,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,yGAAyGqN,GAAAA,kBAAkB,GAC3I,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAACy1C,YAAAA,eAAA,EAAc,MAAM90C,GAAAA,SAASC,OAAO,WAAU,gBAAc;AAAA,2CAC5DX,GAAAA,YAAA,EAAW,SAAQ,aAAY,WAAU,iBAAgB,UAAA,YAAQ;AAAA,2CACjEuvB,GAAAA,MAAA,EAAK,MAAK,YAAW,WAAU,6EAA6EykB,mBAASjmC,OAAAA,CAAO;AAAA,UAAA,GACjI;AAAA,UACApO,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC4N,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAASunC,cAAc,OAAM,WAClD,UAAAn1C,2BAAAA,IAAC6N,YAAAA,eAAA,EAAc,MAAMlN,GAAAA,SAASmN,SAAAA,CAAS,GAC3C;AAAA,2CACCF,GAAAA,YAAA,EAAW,MAAK,SAAQ,SAAS,MAAM0mC,cAAc,IAAI,GAAG,OAAM,iBAAgB,WAAU,gBACzF,UAAAt0C,+BAACqmB,YAAAA,YAAS,MAAM1lB,GAAAA,SAASmN,UAAS,EAAA,CACtC;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,QACA9N,2BAAAA,IAAC,OAAA,EAAI,WAAU,wCACVi0C,UAAAA,SAASjmC,WAAW,IACjBpO,2BAAAA,KAAC,OAAA,EAAI,WAAU,2EACX,UAAA;AAAA,UAAAI,2BAAAA,IAACwO,YAAAA,UAAA,EAAS,MAAM7N,GAAAA,SAASC,OAAO,WAAU,0CAAwC;AAAA,UAClFZ,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,SAAQ,OAAM,YAAW,WAAU,eAAa,UAAA,+EAAA,CAEpE;AAAA,yCACC6O,GAAAA,QAAA,EACG,MAAK,SACL,SAAQ,YACR,SAAS,MAAMwlC,cAAc,IAAI,GACjC,WAAWt0C,2BAAAA,IAACqmB,YAAAA,UAAA,EAAS,MAAM1lB,GAAAA,SAASmN,SAAAA,IAAY,UAAA,gBAAA,CAGpD;AAAA,QAAA,GACJ,IAEAmmC,SAASn0C,IAAI61C,CAAAA,2CACR,OAAA,EAEG,SAAS,MAAMvB,kBAAkBuB,OAAO33C,IAAI,GAC5C,WAAWsC,OACP,gFACA6zC,mBAAmBwB,OAAO33C,OACpB,4DACA,gDACV,GAEA,UAAA;AAAA,UAAAgC,2BAAAA,IAAC,OAAA,EAAI,WAAU,+CAAA,CAA8C;AAAA,UAC7DJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,kBACX,UAAA;AAAA,YAAAI,+BAACC,GAAAA,cAAW,SAAQ,SAAQ,WAAU,oCAAoC01C,iBAAO33C,MAAK;AAAA,4CACrFiC,GAAAA,YAAA,EAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,wBAAsB,UAAA;AAAA,cAAA;AAAA,cACtE01C,OAAOC;AAAAA,cAAe;AAAA,cAAI7S,eAAe4S,OAAO7yB,SAAS;AAAA,YAAA,EAAA,CACnE;AAAA,UAAA,GACJ;AAAA,UACC6yB,OAAOE,cAAcjtC,UAClB5I,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,OAAM,YAAW,WAAU,kCACpD4zC,UAAAA,WAAW8B,OAAOE,SAAS,EAAA,CAChC;AAAA,QAAA,KAnBCF,OAAO33C,IAqBhB,CACH,EAAA,CAET;AAAA,MAAA,GACJ;AAAA,MAGAgC,2BAAAA,IAAC,SAAI,WAAU,uDACV,WAACyuC,WACE7uC,2BAAAA,KAAC,OAAA,EAAI,WAAU,0DACX,UAAA;AAAA,QAAAI,2BAAAA,IAACy1C,YAAAA,eAAA,EAAc,MAAM90C,GAAAA,SAAS+0C,OAAO,WAAU,0CAAwC;AAAA,QACvF11C,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,OAAM,YAC7Bg0C,UAAAA,SAASjmC,WAAW,IAAI,mCAAmC,kCAAA,CAChE;AAAA,MAAA,EAAA,CACJ,IAEApO,2BAAAA,KAAAkQ,WAAAA,UAAA,EAEI,UAAA;AAAA,QAAAlQ,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,kGAAkGqN,GAAAA,kBAAkB,GACpI,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,OAAA,EAAI,WAAU,0CAAA,CAAyC;AAAA,YACxDJ,2BAAAA,KAAC,OAAA,EAAI,WAAU,WACX,UAAA;AAAA,cAAAI,+BAACC,GAAAA,cAAW,SAAQ,aAAY,WAAU,0BAA0BwuC,mBAASzwC,MAAK;AAAA,8CACjFiC,GAAAA,YAAA,EAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,YAAU,UAAA;AAAA,gBAAA;AAAA,gBACnDD,2BAAAA,IAAC,QAAA,EAAK,WAAU,yBAAyByuC,mBAASmH,eAAAA,CAAe;AAAA,cAAA,EAAA,CAClF;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GACJ;AAAA,UACA51C,2BAAAA,IAAC,OAAA,EAAI,WAAU,oCACX,UAAAA,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,MAAK,SACL,OAAM,SACN,SAAQ,YACR,SAAS,MAAMgmC,gBAAgBrG,SAASzwC,IAAI,GAC5C,WAAWgC,2BAAAA,IAACiQ,YAAAA,YAAA,EAAW,MAAMtP,GAAAA,SAASmN,SAAAA,IAAY,UAAA,SAAA,CAGtD,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,uCAGC,OAAA,EAAI,WAAU,kDACX,UAAAlO,2BAAAA,KAAC,OAAA,EAAI,WAAU,yCACX,UAAA;AAAA,UAAAI,+BAAC,YAAS,OAAM,eAAc,OAAOyuC,SAASzwC,MAAM,MAAI,MAAA;AAAA,UACxDgC,+BAAC,YAAS,OAAM,mBAAkB,OAAOyuC,SAASmH,gBAAgB,MAAI,MAAA;AAAA,UACtE51C,+BAAC,YAAS,OAAM,WAAU,OAAO+iC,eAAe0L,SAAS3rB,SAAS,GAAE;AAAA,UACpE9iB,+BAAC,YAAS,OAAM,QAAO,OAAO6zC,WAAWpF,SAASoH,SAAS,EAAA,CAAE;AAAA,QAAA,EAAA,CACjE,EAAA,CACJ;AAAA,QAGAj2C,2BAAAA,KAAC,OAAA,EAAI,WAAU,oCACX,UAAA;AAAA,UAAAI,2BAAAA,IAAC08B,GAAAA,OAAA,EAAM,OAAM,QACT,UAAA98B,2BAAAA,KAACK,GAAAA,cAAW,SAAQ,SAAQ,WAAU,eAClC,UAAA;AAAA,YAAAD,2BAAAA,IAAC,YAAO,UAAA,0BAAA,CAAuB;AAAA,YAAS;AAAA,YACxCA,2BAAAA,IAAC,QAAA,EAAK,WAAU,uFAAuFyuC,mBAASzwC,MAAK;AAAA,YAAM;AAAA,UAAA,EAAA,CAE/H,EAAA,CACJ;AAAA,UACA4B,2BAAAA,KAAC,OAAA,EAAI,WAAU,2GACX,UAAA;AAAA,YAAAI,+BAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,gFAA+E,UAAA,sBAAkB;AAAA,YACzIL,2BAAAA,KAAC,OAAA,EAAI,WAAU,aACX,UAAA;AAAA,cAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,6BAA4B,UAAA,YAAA,CAAS;AAAA,+CAC9FA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,yBAAyBwuC,mBAASzwC,KAAAA,CAAK;AAAA,cAAA,GACjF;AAAA,cACA4B,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,6BAA4B,UAAA,iBAAA,CAAc;AAAA,+CACnGA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,yBAAyBwuC,mBAASmH,eAAAA,CAAe;AAAA,cAAA,GAC3F;AAAA,cACAh2C,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,gBAAAI,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,WAAU,OAAM,aAAY,WAAU,6BAA4B,UAAA,cAAA,CAAW;AAAA,+CAChGA,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,yBACjCwuC,mBAAS3rB,qBAAqBC,OACzB0rB,SAAS3rB,UAAUugB,mBACnB,IAAItgB,KAAK0rB,SAAS3rB,SAAS,EAAEugB,iBAAe,CACtD;AAAA,cAAA,EAAA,CACJ;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ,EAAA,CAER;AAAA,MAGAzjC,2BAAAA,KAAC8mB,GAAAA,QAAA,EAAO,MAAM2tB,YAAY,cAAcC,eACpC,UAAA;AAAA,QAAAt0C,2BAAAA,IAAC2mB,GAAAA,eAAY,UAAA,oBAAA,CAAiB;AAAA,QAC9B/mB,2BAAAA,KAACgnB,GAAAA,eAAA,EAAc,WAAU,2BACrB,UAAA;AAAA,UAAA5mB,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,SAAQ,OAAM,aAAY,WAAU,eAAa,UAAA,kHAAA,CAErE;AAAA,UACAD,2BAAAA,IAAC,SACG,UAAAA,2BAAAA,IAAC6mB,GAAAA,WAAA,EACG,OAAM,eACN,OAAO0tB,eACP,UAAWpmC,CAAAA,QAAMqmC,iBAAiBrmC,IAAEyI,OAAO7P,KAAK,GAChD,aAAY,6CACZ,MAAK,SACL,WAAS,KAAA,CAAA,EAAA,CAEjB;AAAA,UACCktC,SAASjmC,SAAS,KACfhO,2BAAAA,IAAC,OAAA,EACG,0CAACmyB,GAAAA,QAAA,EACG,OAAM,mBACN,OAAOsiB,gBAAgB,IACvB,eAAgBjlC,CAAAA,MAAMklC,gBAAgBllC,KAAK5G,MAAS,GACpD,aAAY,2BACZ,MAAK,SACL,aAAc4G,CAAAA,QAAMA,OAAK,2BAEzB,UAAA;AAAA,YAAAxP,2BAAAA,IAACoyB,GAAAA,YAAA,EAAW,OAAM,IAAG,UAAA,2BAAuB;AAAA,YAC3C6hB,SAASn0C,IAAIu6B,CAAAA,QACVr6B,2BAAAA,IAACoyB,GAAAA,YAAA,EAAwB,OAAOiI,IAAEr8B,MAAOq8B,UAAAA,IAAEr8B,KAAAA,GAA1Bq8B,IAAEr8B,IAA6B,CACnD;AAAA,UAAA,EAAA,CACL,EAAA,CACJ;AAAA,QAAA,GAER;AAAA,wCACC8oB,GAAAA,eAAA,EACG,UAAA;AAAA,UAAA9mB,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAQ,QAAO,SAAS,MAAMwlC,cAAc,KAAK,GAAG,UAAUK,UAAS,UAAA,SAAA,CAE/E;AAAA,UACA30C,2BAAAA,IAAC8O,GAAAA,QAAA,EACG,OAAM,WACN,SAASumC,cACT,UAAU,CAACd,cAAcvrC,KAAAA,KAAU2rC,UACnC,WAAWA,WAAW30C,2BAAAA,IAACyN,qBAAA,EAAiB,MAAK,WAAA,CAAU,IAAKzN,2BAAAA,IAACqmB,YAAAA,UAAA,EAAS,MAAM1lB,GAAAA,SAASmN,SAAAA,CAAS,GAE7F6mC,UAAAA,WAAW,gBAAgB,gBAAA,CAChC;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,GACJ;AAAA,qCAGC5tB,KAAAA,oBAAA,EACG,MAAM,CAAC,CAAC8tB,cACR,UAAUU,cACV,UAAU,MAAMT,gBAAgB,IAAI,GACpC,OAAM,iBACN,MACIl1C,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,SAAO,UAAA;AAAA,QAAA;AAAA,QACgCD,2BAAAA,IAAC,YAAQ60C,UAAAA,aAAAA,CAAa;AAAA,QAAS;AAAA,MAAA,GAE1F,GAEJ,SAASE,SAAAA,CAAS;AAAA,IAAA,GAE1B;AAAA,EAER;AAEA,WAAAhP,SAAA3nC,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAkB,UAAA;AAAA,MAAAX;AAAAA,MAAAoJ;AAAAA,MAAAy/B;AAAAA,IAAAA,IAAApoC;AAEjB,QAAAa;AAAA,QAAAZ,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAEuB/B,WAAAqB,GAAAA,IAAI,4DAA0DqN,qBAAoB;AAACtP,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,SAAAV,OAAA;AAC/FwB,0CAACc,iBAAmB,SAAA,WAAgB,OAAA,aAAsB,WAAA,qEAA0D;AAAa5B,aAAAV;AAAAU,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAG7H,UAAAkB,KAAAinC,QAAQ;AAAW,QAAA7mC;AAAA,QAAAtB,SAAAkB,IAAA;AAFgBI,WAAAW,GAAAA,IACnC,6CACAf,EACJ;AAAClB,aAAAkB;AAAAlB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,EAAA,CAAA,MAAAsB,MAAAtB,SAAA0I,OAAA;AAHDlH,0CAACI,GAAAA,YAAA,EAAmB,SAAA,SAAmB,WAAAN,qBAG7B;AAAatB,aAAAsB;AAAAtB,aAAA0I;AAAA1I,aAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,CAAA,MAAAc,MAAAd,SAAAwB,IAAA;AAL3BgB,WAAAjB,2BAAAA,KAAA,OAAA,EAAgB,WAAAX,IACZE,UAAAA;AAAAA,QAAAA;AAAAA,QACAU;AAAAA,MAAAA,GAIJ;AAAMxB,aAAAc;AAAAd,aAAAwB;AAAAxB,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,WANNwC;AAAAA,EAMM;;;;;AC1WP,WAASi1C,iBAAiBC,MAG/B;AACE,UAAMC,eAAiC,CAAA;AACvC,UAAMC,6BAAapN,IAAAA;AAGnB,UAAMqN,sCAAsBrN,IAAAA;AAC5B,eAAWl+B,KAAKorC,KAAKI,QAAQ,CAAA,GAAI;AAC7BD,sBAAgBh3C,IAAIyL,EAAE3M,MAAM2M,EAAE1M,eAAe,EAAE;AAAA,IACnD;AAEA,eAAW,CAACF,MAAMq4C,OAAO,KAAK7rC,OAAOC,QAAQurC,KAAKM,SAAS,CAAA,CAAE,GAAG;AAC5D,iBAAW,CAAC9Z,QAAQr6B,EAAE,KAAKqI,OAAOC,QAAQ4rC,OAAO,GAAG;AAChD,YAAI,CAAC,OAAO,QAAQ,OAAO,SAAS,QAAQ,EAAEE,QAAQ/Z,MAAM,MAAM,GAAI;AAEtE,cAAM4Z,OAAOj0C,GAAGi0C,MAAMnoC,SAAS9L,GAAGi0C,OAAO,CAAC,OAAO;AACjD,cAAMI,YAAYx4C,KAAKwgB,QAAQ,gBAAgB,EAAE;AAEjD,cAAMi4B,WAA2B;AAAA,UAC7BxuC,IAAI,GAAGu0B,MAAM,IAAIx+B,IAAI;AAAA,UACrBw+B;AAAAA,UACAx+B;AAAAA,UACAw4C,WAAWA,aAAa;AAAA,UACxBE,SAASv0C,GAAGu0C,WAAW;AAAA,UACvBx4C,aAAaiE,GAAGjE,eAAe;AAAA,UAC/Bk4C;AAAAA,UACAO,YAAYx0C,GAAGw0C,cAAc,CAAA;AAAA,UAC7BC,aAAaz0C,GAAGy0C;AAAAA,UAChBC,WAAW10C,GAAG00C,aAAa,CAAA;AAAA,UAC3BC,UAAU30C,GAAG20C;AAAAA,UACbC,aAAa50C,GAAG40C;AAAAA,QAAAA;AAGpBd,qBAAa5vC,KAAKowC,QAAQ;AAC1B,mBAAWO,OAAOZ,MAAM;AACpB,cAAI,CAACF,OAAO9pC,IAAI4qC,GAAG,EAAGd,QAAO/2C,IAAI63C,KAAK,EAAE;AACxCd,iBAAO1M,IAAIwN,GAAG,EAAG3wC,KAAKowC,QAAQ;AAAA,QAClC;AAAA,MACJ;AAAA,IACJ;AAGA,UAAMQ,QAAgC;AAAA,MAAEzN,KAAK;AAAA,MACjD0N,MAAM;AAAA,MACNC,KAAK;AAAA,MACLC,OAAO;AAAA,MACPC,QAAQ;AAAA,IAAA;AAEJ,UAAM3c,SAA0B,CAAA;AAEhC,UAAM4c,YAAYtB,KAAKI,QAAQ,CAAA,GAAIr2C,IAAK6K,CAAAA,MAAMA,EAAE3M,IAAI;AACpD,UAAMs5C,aAAa,CAAC,GAAGrB,OAAOloC,KAAAA,CAAM,EAAEqsB,KAAK,CAAC3W,GAAG4W,MAAM;AACjD,YAAMkd,KAAKF,SAASf,QAAQ7yB,CAAC;AAC7B,YAAM+zB,KAAKH,SAASf,QAAQjc,CAAC;AAC7B,UAAIkd,OAAO,MAAMC,OAAO,WAAWD,KAAKC;AACxC,UAAID,OAAO,GAAI,QAAO;AACtB,UAAIC,OAAO,GAAI,QAAO;AACtB,aAAO/zB,EAAE6W,cAAcD,CAAC;AAAA,IAC5B,CAAC;AAED,eAAW0c,OAAOO,YAAY;AAC1B,YAAMG,YAAYxB,OAAO1M,IAAIwN,GAAG;AAChCU,gBAAUrd,KAAK,CAAC3W,GAAG4W,MAAM;AACrB,cAAMqd,KAAKj0B,EAAE1lB,KAAKu8B,cAAcD,EAAEt8B,IAAI;AACtC,YAAI25C,OAAO,EAAG,QAAOA;AACrB,gBAAQV,MAAMvzB,EAAE8Y,MAAM,KAAK,OAAOya,MAAM3c,EAAEkC,MAAM,KAAK;AAAA,MACzD,CAAC;AACD9B,aAAOr0B,KAAK;AAAA,QACR2wC;AAAAA,QACA94C,aAAai4C,gBAAgB3M,IAAIwN,GAAG;AAAA,QACpCU;AAAAA,MAAAA,CACH;AAAA,IACL;AAEA,WAAO;AAAA,MAAEhd;AAAAA,MACbub;AAAAA,IAAAA;AAAAA,EACA;AAKO,WAAS2B,eAAezuB,KAAqB;AAChD,UAAMqU,QAAQrU,IAAI2Q,MAAM,GAAG;AAC3B,WAAO0D,MAAMA,MAAMvvB,SAAS,CAAC;AAAA,EACjC;AAKO,WAAS4pC,WAAW7B,MAAmB7sB,KAAkB;AAC5D,UAAMqU,QAAQrU,IAAI3K,QAAQ,MAAM,EAAE,EAAEsb,MAAM,GAAG;AAC7C,QAAInzB,UAAeqvC;AACnB,eAAWnY,QAAQL,OAAO;AACtB72B,gBAAUA,UAAUk3B,IAAI;AAAA,IAC5B;AACA,WAAOl3B,WAAW,CAAA;AAAA,EACtB;AC7FO,WAAAmxC,eAAAz5C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAwB,UAAA;AAAA,MAAAk4C;AAAAA,MAAAT;AAAAA,IAAAA,IAAA33C;AAAmE,QAAAa;AAAA,QAAAZ,EAAA,CAAA,MAAAm4C,SAAAv4C,eAAAI,EAAA,CAAA,MAAAm4C,SAAAC,SAAA;AAIrFx3C,YAACu3C,SAAQC,WAAYD,SAAQv4C,gDAC1B,OAAA,EACKu4C,UAAAA;AAAAA,QAAAA,SAAQC,0CACJx2C,GAAAA,YAAA,EAAmB,SAAA,MAAe,WAAA,sBAC9Bu2C,mBAAQC,QAAAA,CACb;AAAA,QAEHD,SAAQv4C,eACL+B,+BAACC,GAAAA,YAAA,EAAmB,SAAA,SAAkB,WAAA,qDACjCu2C,UAAAA,SAAQv4C,YAAAA,CACb;AAAA,MAAA,GAER;AACHI,QAAA,CAAA,IAAAm4C,SAAAv4C;AAAAI,QAAA,CAAA,IAAAm4C,SAAAC;AAAAp4C,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAAm4C,SAAAE,YAAA;AAGAv3C,WAAAq3C,SAAQE,WAAA1oC,SAAA,qCACL,WAAA,EACI,UAAA;AAAA,QAAAhO,2BAAAA,IAAC,gBAAA,EAAqB,MAAAA,2BAAAA,IAAC83C,YAAAA,uBAAA,EAA4B,MAAAn3C,GAAAA,SAAAC,OAA0B,WAAA,oDAAA,CAAmD,GAAW,OAAA,aAAA,CAAY;AAAA,QACvJZ,2BAAAA,IAAA,OAAA,EAAgB,WAAAM,GAAAA,IAAI,qCAAmCqN,GAAAA,kBAAoB,GACvE,UAAA/N,2BAAAA,KAAA,SAAA,EAAiB,WAAA,kBACb,UAAA;AAAA,UAAAI,+BAAA,SAAA,EACI,UAAAJ,2BAAAA,KAAA,MAAA,EAAc,WAAA,gDACV,UAAA;AAAA,YAAAI,2BAAAA,YAAc,WAAA,2EAA0E,UAAA,QAExF;AAAA,YACAA,2BAAAA,IAAA,MAAA,EAAc,WAAA,2EAA0E,UAAA,MAExF;AAAA,YACAA,2BAAAA,IAAA,MAAA,EAAc,WAAA,2EAA0E,UAAA,QAExF;AAAA,YACAA,2BAAAA,IAAA,MAAA,EAAc,WAAA,2EAA0E,UAAA,cAAA,CAExF;AAAA,UAAA,EAAA,CACJ,EAAA,CACJ;AAAA,yCACA,SAAA,EACKw2C,UAAAA,SAAQE,WAAA52C,IAAAuB,KAwBR,EAAA,CACL;AAAA,QAAA,EAAA,CACJ,EAAA,CACJ;AAAA,MAAA,GACJ;AACHhD,QAAA,CAAA,IAAAm4C,SAAAE;AAAAr4C,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,SAAAm4C,SAAAG,eAAAt4C,SAAA03C,MAAA;AAGAx2C,WAAAi3C,SAAQG,eACL/2C,2BAAAA,KAAA,WAAA,EACI,UAAA;AAAA,QAAAI,2BAAAA,IAAC,gBAAA,EAAqB,MAAAA,2BAAAA,IAAC+3C,YAAAA,YAAA,EAAiB,MAAAp3C,GAAAA,SAAAC,OAA0B,WAAA,oDAAA,CAAmD,GAAW,OAAA,eAAA,CAAc;AAAA,QAC7I2J,OAAAC,QAAegsC,SAAQG,YAAAqB,aAA0B,EAACl4C,IAAAH,CAAAA,QAAA;AAAM,gBAAA,CAAAq9B,aAAAib,KAAA,IAAAt4C;AAAoB,iDACzE,OAAA,EACI,UAAA;AAAA,YAAAK,2BAAAA,IAACwvB,GAAAA,QAAU,MAAA,YAAuB,aAAA,cAAuB,WAAA,QACpDwN,UAAAA,YAAAA,CACL;AAAA,YACCib,MAAKtlC,UAAW3S,+BAAC,aAAA,EAAoB,QAAAi4C,MAAKtlC,QAAeojC,MAAa,OAAA,EAAA,CAAC;AAAA,UAAA,EAAA,GAJlE/Y,WAKV;AAAA,QAAM,CACT;AAAA,MAAA,GACL;AACH3+B,QAAA,CAAA,IAAAm4C,SAAAG;AAAAt4C,aAAA03C;AAAA13C,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAIGrB,WAAAK,2BAAAA,IAAC,gBAAA,EAAqB,qCAACk4C,YAAAA,wBAAA,EAA6B,MAAAv3C,GAAAA,SAAAC,OAA0B,WAAA,oDAAA,CAAmD,GAAW,OAAA,aAAW;AAAEvC,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,SAAAm4C,SAAAI,aAAAv4C,UAAA03C,MAAA;AAAA,UAAAl1C;AAAA,UAAAxC,UAAA03C,MAAA;AAE7Gl1C,cAAAC,CAAAA,QAAA;AAAC,gBAAA,CAAAioB,MAAA2b,GAAA,IAAA5jC;AAAW,iDAChD,OAAA,EAEe,WAAAR,GAAAA,IAAI,qCAAmCqN,GAAAA,kBAAoB,GAEtE,UAAA;AAAA,YAAA/N,2BAAAA,KAAA,OAAA,EACe,WAAAU,GAAAA,IACP,uCACA,sCACJ,GAEA,UAAA;AAAA,cAAAN,+BAAC,eAAkB+oB,MAAI;AAAA,6CACtB9oB,GAAAA,YAAA,EACW,SAAA,SACE,WAAA,6DAETykC,cAAGzmC,YAAAA,CACR;AAAA,YAAA,GACJ;AAAA,YACCymC,IAAGsT,WACAztC,OAAAC,QAAek6B,IAAGsT,OAAQ,EAACl4C,IAAAmB,CAAAA,OAAA;AACtB,oBAAA,CAAAk3C,IAAAC,OAAA,IAAAn3C;AAAW,qBACRg3C,QAAKtlC,UACD3S,2BAAAA,IAAA,SAEe,WAAAM,OAAI,sBAAoBqN,GAAAA,kBAAoB,GAEvD,UAAA3N,2BAAAA,IAAC,aAAA,EAAoB,QAAAi4C,QAAKtlC,QAAeojC,MAAa,UAAC,KAHlDoC,EAIT;AAAA,YACH,CACT;AAAA,UAAA,EAAA,OACR;AAAA,QAAM;AACT95C,gBAAA03C;AAAA13C,gBAAAwC;AAAAA,MAAA,OAAA;AAAAA,cAAAxC,EAAA,EAAA;AAAA,MAAA;AAhCAwB,WAAA0K,OAAAC,QAAegsC,SAAQI,SAAU,EAAC92C,IAAKe,GAgCvC;AAACxC,QAAA,CAAA,IAAAm4C,SAAAI;AAAAv4C,cAAA03C;AAAA13C,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,UAAAwB,IAAA;AAnCVgB,wDACIlB,UAAAA;AAAAA,QAAAA;AAAAA,QACAK,2BAAAA,IAAA,OAAA,EAAe,WAAA,aACVH,UAAAA,GAAAA,CAiCL;AAAA,MAAA,GACJ;AAAUxB,cAAAwB;AAAAxB,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,EAAA,MAAAY,MAAAZ,EAAA,EAAA,MAAAc,MAAAd,EAAA,EAAA,MAAAkB,MAAAlB,UAAAwC,IAAA;AA5HdC,oDAAe,WAAA,2BAEV7B,UAAAA;AAAAA,QAAAA;AAAAA,QAgBAE;AAAAA,QAsDAI;AAAAA,QAeDsB;AAAAA,MAAAA,GAsCJ;AAAMxC,cAAAY;AAAAZ,cAAAc;AAAAd,cAAAkB;AAAAlB,cAAAwC;AAAAxC,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,WA7HNyC;AAAAA,EA6HM;AA/HP,WAAAO,MAAAonB,GAAAtY,GAAA;AAAA,2CA2C6B,MAAA,EAEe,WAAA7P,GAAAA,IAAI,YAAUqN,GAAAA,kBAAoB,GAE7C,UAAA;AAAA,MAAA/N,2BAAAA,KAAA,MAAA,EAAc,WAAA,eACV,UAAA;AAAA,QAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mCAAmCyoB,UAAAA,EAACzqB,MAAM;AAAA,QACzDyqB,EAACwiB,YAAajrC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,6BAA4B,UAAA,IAAA,CAAC;AAAA,MAAA,GAChE;AAAA,qCACA,MAAA,EAAc,WAAA,eACV,UAAAA,+BAACwvB,GAAAA,QACQ,MAAA,YACQ,aAAA/G,EAAC4vB,OAAQ,SAAS,iBAAiB,cAE/C5vB,UAAAA,EAAC4vB,IACN,GACJ;AAAA,qCACA,MAAA,EAAc,WAAA,mFACTC,UAAAA,gBAAgB7vB,EAAC9V,MAAO,GAC7B;AAAA,qCACA,MAAA,EAAc,WAAA,yEACT8V,UAAAA,EAACxqB,eAAgB,IAAA,CACtB;AAAA,IAAA,KApBKwqB,EAACzqB,OAAQmS,CAqBlB;AAAA,EAAK;AAoEzC,WAAAooC,YAAAn6C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAqB,UAAA;AAAA,MAAAqU;AAAAA,MAAAojC;AAAAA,MAAAyC;AAAAA,IAAAA,IAAAp6C;AAAoF,QAEjGuU,OAAM8lC,MAAA;AAAA,UAAAx5C;AAAA,UAAAZ,EAAA,CAAA,MAAAsU,OAAA8lC,MAAA;AACOx5C,cAAA04C,eAAehlC,OAAM8lC,IAAK;AAACp6C,UAAA,CAAA,IAAAsU,OAAA8lC;AAAAp6C,eAAAY;AAAAA,MAAA,OAAA;AAAAA,cAAAZ,EAAA,CAAA;AAAA,MAAA;AAAxC,YAAAL,OAAaiB;AAA4B,UAAAE;AAAA,UAAAd,SAAAsU,OAAA8lC,QAAAp6C,SAAA03C,MAAA;AACxB52C,cAAAy4C,WAAW7B,MAAMpjC,OAAM8lC,IAAK;AAACp6C,UAAA,CAAA,IAAAsU,OAAA8lC;AAAAp6C,eAAA03C;AAAA13C,eAAAc;AAAAA,MAAA,OAAA;AAAAA,cAAAd,EAAA,CAAA;AAAA,MAAA;AAA9C,YAAAq6C,WAAiBv5C;AAA8B,UAAAI;AAAA,UAAAlB,SAAAL,MAAA;AAGvCuB,4CAACU,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,oEAETjC,UAAAA,MACL;AAAaK,eAAAL;AAAAK,eAAAkB;AAAAA,MAAA,OAAA;AAAAA,aAAAlB,EAAA,CAAA;AAAA,MAAA;AAAA,UAAAsB;AAAA,UAAAtB,EAAA,CAAA,MAAAm6C,SAAAn6C,SAAAq6C,YAAAr6C,EAAA,CAAA,MAAA03C,MAAA;AACbp2C,4CAAC,aAAA,EAAoB+4C,kBAAgB3C,MAAayC,OAAK;AAAGn6C,eAAAm6C;AAAAn6C,eAAAq6C;AAAAr6C,eAAA03C;AAAA13C,gBAAAsB;AAAAA,MAAA,OAAA;AAAAA,aAAAtB,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAwB;AAAA,UAAAxB,EAAA,EAAA,MAAAkB,MAAAlB,UAAAsB,IAAA;AAP9DE,6CAAA,OAAA,EACIN,UAAAA;AAAAA,UAAAA;AAAAA,UAMAI;AAAAA,QAAAA,GACJ;AAAMtB,gBAAAkB;AAAAlB,gBAAAsB;AAAAtB,gBAAAwB;AAAAA,MAAA,OAAA;AAAAA,aAAAxB,EAAA,EAAA;AAAA,MAAA;AAAA,aARNwB;AAAAA,IAQM;AAAA,QAKV8S,OAAM6V,YAAA;AAAA,UAAAvpB;AAAA,UAAAZ,EAAA,EAAA,MAAAsU,OAAAs4B,UAAA;AACmBhsC,cAAA0T,OAAMs4B,YAAA,CAAA;AAAe5sC,UAAA,EAAA,IAAAsU,OAAAs4B;AAAA5sC,gBAAAY;AAAAA,MAAA,OAAA;AAAAA,cAAAZ,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAc;AAAA,UAAAd,UAAAY,KAAA;AAA7BE,cAAA,IAAA0M,IAAQ5M,GAAqB;AAACZ,gBAAAY;AAAAZ,gBAAAc;AAAAA,MAAA,OAAA;AAAAA,cAAAd,EAAA,EAAA;AAAA,MAAA;AAA/C,YAAA4sC,WAAiB9rC;AAKL,YAAAI,KAAAi5C,aAAa,oBAAA7qC,GAAAA,kBAAA;AAAwC,UAAAhO;AAAA,UAAAtB,UAAAkB,IAAA;AAF9CI,aAAAW,GAAAA,IACP,8BACAf,EACJ;AAAClB,gBAAAkB;AAAAlB,gBAAAsB;AAAAA,MAAA,OAAA;AAAAA,aAAAtB,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAwB;AAAA,UAAAxB,EAAA,EAAA,MAAAm6C,SAAAn6C,UAAA4sC,YAAA5sC,EAAA,EAAA,MAAAsU,OAAA6V,cAAAnqB,UAAA03C,MAAA;AAAA,YAAAl1C;AAAA,YAAAxC,EAAA,EAAA,MAAAm6C,SAAAn6C,UAAA4sC,YAAA5sC,EAAA,EAAA,MAAA03C,MAAA;AAI8Cl1C,gBAAAC,CAAAA,QAAA;AAAC,kBAAA,CAAAc,KAAAwnB,IAAA,IAAAtoB;AAAW,mDAC/C,MAAA,EAEe,WAAAR,GAAAA,IAAI,6BAA2BqN,GAAAA,kBAAoB,GAE9D,UAAA;AAAA,cAAA/N,2BAAAA,KAAA,MAAA,EAAc,WAAA,4BACV,UAAA;AAAA,gBAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,yEACX4B,UAAAA,KACL;AAAA,gBACCqpC,SAAQ9+B,IAAKvK,GAAG,oCAAK,QAAA,EAAgB,WAAA,uBAAsB,UAAA,KAAC;AAAA,gBAC5DwnB,KAAIjiB,YACDnH,2BAAAA,cAAgB,WAAA,8EAA6E,UAAA,YAAA,CAE7F;AAAA,cAAA,GAER;AAAA,cACAA,2BAAAA,IAAA,MAAA,EAAc,WAAA,4BACV,UAAAA,2BAAAA,IAAA,QAAA,EAAgB,WAAA,+DACXs4C,UAAAA,gBAAgBlvB,IAAI,EAAA,CACzB,GACJ;AAAA,cACAxpB,2BAAAA,KAAA,MAAA,EAAc,WAAA,yEACTwpB,UAAAA;AAAAA,gBAAAA,KAAInrB,eAAgB;AAAA,gBACpBmrB,KAAIshB,QACD1qC,2BAAAA,IAAA,OAAA,EAAe,WAAA,6BACVopB,UAAAA,KAAIshB,KAAA5qC,IAAAuyB,MAOJ,EAAA,CACL;AAAA,gBAEHjJ,KAAIZ,cAAexoB,+BAAC,aAAA,EAAoBopB,cAAY2sB,MAAa,OAAAyC,WAAS;AAAA,gBAC1EpvB,KAAIqvB,QAASz4C,+BAAC,aAAA,EAAoBopB,QAAAA,MAAY2sB,MAAa,OAAAyC,QAAK,EAAA,CAAI;AAAA,cAAA,EAAA,CACzE;AAAA,YAAA,EAAA,MACJ;AAAA,UAAK;AACRn6C,kBAAAm6C;AAAAn6C,kBAAA4sC;AAAA5sC,kBAAA03C;AAAA13C,kBAAAwC;AAAAA,QAAA,OAAA;AAAAA,gBAAAxC,EAAA,EAAA;AAAA,QAAA;AAvCAwB,aAAA0K,OAAAC,QAAemI,OAAM6V,UAAW,EAAC1oB,IAAKe,GAuCtC;AAACxC,gBAAAm6C;AAAAn6C,gBAAA4sC;AAAA5sC,UAAA,EAAA,IAAAsU,OAAA6V;AAAAnqB,gBAAA03C;AAAA13C,gBAAAwB;AAAAA,MAAA,OAAA;AAAAA,aAAAxB,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAwC;AAAA,UAAAxC,UAAAwB,IAAA;AAzCVgB,4CAAA,SAAA,EAAiB,WAAA,kBACb,UAAAb,2BAAAA,IAAA,SAAA,EACKH,cAwCL,EAAA,CACJ;AAAQxB,gBAAAwB;AAAAxB,gBAAAwC;AAAAA,MAAA,OAAA;AAAAA,aAAAxC,EAAA,EAAA;AAAA,MAAA;AAAA,UAAAyC;AAAA,UAAAzC,EAAA,EAAA,MAAAsB,MAAAtB,UAAAwC,IAAA;AAjDZC,aAAAd,2BAAAA,IAAA,OAAA,EACe,WAAAL,IAKXkB,UAAAA,IA4CJ;AAAMxC,gBAAAsB;AAAAtB,gBAAAwC;AAAAxC,gBAAAyC;AAAAA,MAAA,OAAA;AAAAA,aAAAzC,EAAA,EAAA;AAAA,MAAA;AAAA,aAlDNyC;AAAAA,IAkDM;AAAA,QAKV6R,OAAMnC,SAAU,WAAWmC,OAAM6uB,OAAM;AAAA,UAAAviC;AAAA,UAAAZ,EAAA,EAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAG/B/B,cAAAe,2BAAAA,IAAA,QAAA,EAAgB,WAAA,uEAAsE,UAAA,aAAS;AAAO3B,gBAAAY;AAAAA,MAAA,OAAA;AAAAA,cAAAZ,EAAA,EAAA;AAAA,MAAA;AAChD,YAAAc,MAAAq5C,QAAK;AAAI,UAAAj5C;AAAA,UAAAlB,EAAA,EAAA,MAAAsU,OAAA6uB,SAAAnjC,EAAA,EAAA,MAAA03C,QAAA13C,EAAA,EAAA,MAAAc,KAAA;AAFnEI,6CAAA,OAAA,EACIN,UAAAA;AAAAA,UAAAA;AAAAA,yCACC,aAAA,EAAoB,QAAA0T,OAAM6uB,OAAcuU,MAAa,OAAA52C,IAAAA,CAAS;AAAA,QAAA,GACnE;AAAMd,UAAA,EAAA,IAAAsU,OAAA6uB;AAAAnjC,gBAAA03C;AAAA13C,gBAAAc;AAAAd,gBAAAkB;AAAAA,MAAA,OAAA;AAAAA,aAAAlB,EAAA,EAAA;AAAA,MAAA;AAAA,aAHNkB;AAAAA,IAGM;AAAA,QAAAN;AAAA,QAAAZ,UAAAsU,QAAA;AAOL1T,WAAAq5C,gBAAgB3lC,MAAM;AAACtU,cAAAsU;AAAAtU,cAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,UAAAY,IAAA;AAD5BE,WAAAa,2BAAAA,IAAA,QAAA,EAAgB,WAAA,uEACXf,UAAAA,IACL;AAAOZ,cAAAY;AAAAZ,cAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,EAAA;AAAA,IAAA;AAAA,WAFPc;AAAAA,EAEO;AA1Ff,WAAAkzB,OAAA7iB,GAAA;AAAA,WAwDgDxP,+BAAA,UAEc,WAAA,kFAET0T,iBAAOlE,CAAC,EAAA,GAHJkE,OAAOlE,CAAC,CAIjB;AAAA,EAAO;AAmCvD,WAAS8oC,gBAAgB3lC,QAAgC;AACrD,QAAI,CAACA,OAAQ,QAAO;AACpB,QAAIA,OAAO8lC,KAAM,QAAOd,eAAehlC,OAAO8lC,IAAI;AAClD,QAAI9lC,OAAOnC,SAAS,QAAS,QAAO,GAAG8nC,gBAAgB3lC,OAAO6uB,KAAK,CAAC;AACpE,QAAI7uB,OAAOgmC,OAAQ,QAAO,GAAGhmC,OAAOnC,IAAI,KAAKmC,OAAOgmC,MAAM;AAC1D,WAAOhmC,OAAOnC,QAAQ;AAAA,EAC1B;AAEA,WAAAooC,eAAAx6C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAwB,UAAA;AAAA,MAAAJ;AAAAA,MAAAwD;AAAAA,IAAAA,IAAAtD;AAAyD,QAAAa;AAAA,QAAAZ,SAAAqD,OAAA;AAIrEzC,0CAACgB,GAAAA,YAAA,EAAmB,SAAA,aAAsB,WAAA,yBACrCyB,UAAAA,OACL;AAAarD,aAAAqD;AAAArD,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAAH,QAAAG,SAAAY,IAAA;AAJjBE,WAAAS,2BAAAA,KAAA,OAAA,EAAe,WAAA,gCACV1B,UAAAA;AAAAA,QAAAA;AAAAA,QACDe;AAAAA,MAAAA,GAGJ;AAAMZ,aAAAH;AAAAG,aAAAY;AAAAZ,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,WALNc;AAAAA,EAKM;AAId,WAAA05C,YAAAz6C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAqB,UAAA;AAAA,MAAAyqB;AAAAA,IAAAA,IAAA3qB;AACjB,UAAAo0C,IAAU/xB,SAASsI,QAAQ;AAC3B,UAAA+vB,QACItG,IAAC,MACK,2CACAA,IAAC,MACC,qCACAA,UACE,uCACA;AAAiC,QAAAvzC;AAAA,QAAAZ,SAAAy6C,OAAA;AAEvB75C,WAAAqB,GAAAA,IAAI,+BAA+Bw4C,KAAK;AAACz6C,aAAAy6C;AAAAz6C,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAA0qB,QAAA1qB,SAAAY,IAAA;AAA1DE,WAAAa,2BAAAA,IAAA,QAAA,EAAiB,WAAAf,IAA4C8pB,UAAAA,MAAK;AAAO1qB,aAAA0qB;AAAA1qB,aAAAY;AAAAZ,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,WAAzEc;AAAAA,EAAyE;ACzP7E,WAAS45C,WAAW;AAAA,IAAEvC;AAAAA,IAAUlpB;AAAAA,IAAQC;AAAAA,IAAc5B;AAAAA,IAAMqtB,WAAW;AAAA,EAAoB,GAAG;AACjG,UAAMC,aAAa,sBAAsBzC,SAASja,MAAM,IAAIia,SAASz4C,IAAI;AAEzE,UAAM,CAACm7C,YAAYC,aAAa,IAAI/rC,MAAAA,SAAiC,MAAM;AACvE,UAAI;AAAE,cAAMoC,IAAI6I,aAAaC,QAAQ,GAAG2gC,UAAU,OAAO;AAAG,YAAIzpC,EAAG,QAAO6J,KAAKC,MAAM9J,CAAC;AAAA,MAAG,QAAQ;AAAA,MAAC;AAClG,aAAO,CAAA;AAAA,IACX,CAAC;AACD,UAAM,CAAC4pC,aAAaC,cAAc,IAAIjsC,MAAAA,SAAiC,MAAM;AACzE,UAAI;AAAE,cAAMoC,MAAI6I,aAAaC,QAAQ,GAAG2gC,UAAU,QAAQ;AAAG,YAAIzpC,IAAG,QAAO6J,KAAKC,MAAM9J,GAAC;AAAA,MAAG,QAAQ;AAAA,MAAC;AACnG,aAAO,CAAA;AAAA,IACX,CAAC;AACD,UAAM,CAAC8pC,eAAeC,gBAAgB,IAAInsC,MAAAA,SAAgD,MAAM;AAC5F,UAAI;AAAE,cAAMoC,MAAI6I,aAAaC,QAAQ,GAAG2gC,UAAU,UAAU;AAAG,YAAIzpC,IAAG,QAAO6J,KAAKC,MAAM9J,GAAC;AAAA,MAAG,QAAQ;AAAA,MAAC;AACrG,aAAO,CAAC;AAAA,QAAE5N,KAAK;AAAA,QAAiBmF,OAAO;AAAA,MAAA,CAAI;AAAA,IAC/C,CAAC;AACD,UAAM,CAACwQ,MAAMiiC,OAAO,IAAIpsC,MAAAA,SAAS,MAAM;AACnC,UAAI;AAAE,cAAMoC,MAAI6I,aAAaC,QAAQ,GAAG2gC,UAAU,OAAO;AAAG,YAAIzpC,IAAG,QAAO6J,KAAKC,MAAM9J,GAAC;AAAA,MAAG,QAAQ;AAAA,MAAC;AAClG,aAAOiqC,kBAAkBjD,QAAQ;AAAA,IACrC,CAAC;AACD,UAAM,CAACna,UAAUqd,WAAW,IAAItsC,MAAAA,SAC5B,IACJ;AACA,UAAM,CAACmM,SAASgnB,UAAU,IAAInzB,MAAAA,SAAS,KAAK;AAC5C,UAAM,CAACqc,UAAUC,WAAW,IAAItc,MAAAA,SAAyB,KAAK;AAC9D,UAAM,CAACusC,iBAAiBC,kBAAkB,IAAIxsC,MAAAA,SAAwB,IAAI;AAE1E,UAAM+d,gBAAgBvsB,KAAAA,iBAAAA;AACtB,UAAM6sB,iBAAiBN,cAAcM;AACrC,UAAM3B,cAAcqB,cAAcO,gBAAgBC;AAElD,UAAM9B,QAAQjkB,MAAAA,QAAQ,MAAwB;AAC1C,YAAM4mB,WAAWf,gBAAgB5B,SAAS,CAAA,GAAI/pB,IAAI2sB,CAAAA,OAAM;AAAA,QACpDC,KAAKD,EAAEC;AAAAA,QACPC,aAAaF,EAAEE;AAAAA,QACfC,OAAOH,EAAEG;AAAAA,QACTC,UAAUJ,EAAEI;AAAAA,QACZrS,OAAOiS,EAAEjS;AAAAA,MAAAA,EACX;AACF,UAAIsP,eAAe,CAAC0C,QAAQ3Z,KAAK4Z,SAAKA,IAAEC,QAAQ5C,YAAY4C,GAAG,GAAG;AAC9DF,gBAAQM,QAAQ;AAAA,UACZJ,KAAK5C,YAAY4C;AAAAA,UACjBC,aAAa7C,YAAY6C;AAAAA,UACzBC,OAAO9C,YAAY8C;AAAAA,UACnBC,UAAU/C,YAAY+C;AAAAA,UACtBrS,OAAOsP,YAAYtP;AAAAA,QAAAA,CACtB;AAAA,MACL;AACA,aAAOgS;AAAAA,IACX,GAAG,CAACf,gBAAgB5B,OAAOC,WAAW,CAAC;AAEvC,UAAMiD,wBAAwBnnB,MAAAA,QAAQ,MAA6B;AAC/D,UAAI,CAACkkB,YAAa,QAAO;AACzB,aAAO;AAAA,QACH4C,KAAK5C,YAAY4C;AAAAA,QACjBC,aAAa7C,YAAY6C;AAAAA,QACzBC,OAAO9C,YAAY8C;AAAAA,QACnBC,UAAU/C,YAAY+C;AAAAA,QACtBrS,OAAOsP,YAAYtP;AAAAA,MAAAA;AAAAA,IAE3B,GAAG,CAACsP,WAAW,CAAC;AAEhB,UAAM,CAACH,cAAcC,eAAe,IAAIxc,MAAAA,SAAgC,IAAI;AAE5EhO,UAAAA,UAAU,MAAM;AACZiZ,mBAAagD,QAAQ,GAAG49B,UAAU,SAAS5/B,KAAKqG,UAAUw5B,UAAU,CAAC;AACrE7gC,mBAAagD,QAAQ,GAAG49B,UAAU,UAAU5/B,KAAKqG,UAAU05B,WAAW,CAAC;AACvE/gC,mBAAagD,QAAQ,GAAG49B,UAAU,YAAY5/B,KAAKqG,UAAU45B,aAAa,CAAC;AAC3EjhC,mBAAagD,QAAQ,GAAG49B,UAAU,SAAS5/B,KAAKqG,UAAUnI,IAAI,CAAC;AAAA,IACnE,GAAG,CAAC0hC,YAAYC,YAAYE,aAAaE,eAAe/hC,IAAI,CAAC;AAG7D,UAAMsiC,cAAcj0C,MAAAA,QAAQ,MAAM;AAC9B,YAAMk0C,OAAOd,SAAS9b,WAAW,GAAG,IAAI8b,WAAW,IAAIA,QAAQ;AAC/D,YAAMe,YAAYD,SAAS,MAAM,KAAKA;AACtC,UAAIx2B,MAAM,GAAGgK,OAAO/O,QAAQ,QAAQ,EAAE,CAAC,GAAGw7B,SAAS,GAAGvD,SAASz4C,IAAI;AAEnE,iBAAW,CAAC6D,KAAK+U,GAAG,KAAKpM,OAAOC,QAAQ0uC,UAAU,GAAG;AACjD51B,cAAMA,IAAI/E,QAAQ,IAAI3c,GAAG,KAAKo4C,mBAAmBrjC,GAAG,CAAC;AAAA,MACzD;AAEA,YAAMsjC,KAAK1vC,OAAOC,QAAQ4uC,WAAW,EAAEzpC,OAAO,CAAC,CAAA,EAAGH,GAAC,MAAMA,IAAExG,KAAAA,MAAW,EAAE;AACxE,UAAIixC,GAAGjsC,SAAS,GAAG;AACfsV,eAAO,MAAM22B,GAAGn6C,IAAI,CAAC,CAACuvB,GAAG7f,GAAC,MAAM,GAAGwqC,mBAAmB3qB,CAAC,CAAC,IAAI2qB,mBAAmBxqC,GAAC,CAAC,EAAE,EAAEX,KAAK,GAAG;AAAA,MACjG;AACA,aAAOyU;AAAAA,IACX,GAAG,CAACgK,QAAQ0rB,UAAUxC,SAASz4C,MAAMm7C,YAAYE,WAAW,CAAC;AAE7D,UAAMc,gBAAgB1D,SAASE,WAAW/mC,OAAQ8Y,CAAAA,MAAMA,EAAE4vB,OAAO,MAAM;AACvE,UAAM8B,iBAAiB3D,SAASE,WAAW/mC,OAAQ8Y,CAAAA,QAAMA,IAAE4vB,OAAO,OAAO;AACzE,UAAM+B,UAAU,CAAC,QAAQ,OAAO,OAAO,EAAEj0C,SAASqwC,SAASja,MAAM;AAEjE,UAAM8d,UAAUtgC,MAAAA,YAAY,YAAY;AACpC6/B,yBAAmB,IAAI;AACvB,UAAIQ,WAAW7iC,KAAKvO,QAAQ;AACxB,YAAI;AACAqQ,eAAKC,MAAM/B,IAAI;AAAA,QACnB,SAASgE,KAAU;AACfq+B,6BAAmB,iBAAiBr+B,IAAI/H,OAAO,EAAE;AACjD;AAAA,QACJ;AAAA,MACJ;AAEA+sB,iBAAW,IAAI;AACfmZ,kBAAY,IAAI;AAChB,YAAMr4B,QAAQC,YAAYC,IAAAA;AAE1B,UAAI;AACA,cAAM0B,UAAkC;AAAA,UAAE,gBAAgB;AAAA,QAAA;AAE1D,mBAAW+K,KAAKsrB,eAAe;AAC3B,cAAItrB,EAAEpsB,IAAIoH,KAAAA,EAAQia,SAAQ+K,EAAEpsB,IAAIoH,KAAAA,CAAM,IAAIglB,EAAEjnB;AAAAA,QAChD;AAEA,YAAI0iB,aAAa,OAAO;AACpB,gBAAMkE,QAAQ,MAAMJ,aAAAA;AACpB,cAAII,MAAO1K,SAAQ,eAAe,IAAI,UAAU0K,KAAK;AACrD,cAAIhE,gBAAgBA,aAAa+C,QAAQ5C,aAAa4C,KAAK;AACvDzJ,oBAAQ,sBAAsB,IAAI0G,aAAa+C;AAAAA,UACnD;AAAA,QACJ;AAEA,cAAMgY,MAAM,MAAMpI,MAAMud,aAAa;AAAA,UACjCtd,QAAQia,SAASja,OAAO1a,YAAAA;AAAAA,UACxBoB;AAAAA,UACA1L,MAAM6iC,WAAW7iC,KAAKvO,KAAAA,IAASuO,OAAO3O;AAAAA,QAAAA,CACzC;AAED,cAAM0xC,UAAUlkC,KAAKoL,MAAMF,YAAYC,IAAAA,IAAQF,KAAK;AACpD,YAAIk5B;AAEJ,cAAMC,UAAU,MAAM9V,IAAI6V,KAAAA;AAC1B,YAAI;AACA,gBAAMt2B,OAAO5K,KAAKC,MAAMkhC,OAAO;AAC/BD,iBAAOlhC,KAAKqG,UAAUuE,MAAM,MAAM,CAAC;AAAA,QACvC,QAAQ;AACJs2B,iBAAOC;AAAAA,QACX;AAEAd,oBAAY;AAAA,UAAE5e,QAAQ4J,IAAI5J;AAAAA,UACtC2f,YAAY/V,IAAI+V;AAAAA,UAChBljC,MAAMgjC;AAAAA,UACNG,MAAMJ;AAAAA,QAAAA,CAAS;AAAA,MACP,SAAS/+B,OAAU;AACfm+B,oBAAY;AAAA,UACR5e,QAAQ;AAAA,UACR2f,YAAY;AAAA,UACZljC,MAAMgE,MAAI/H,WAAW;AAAA,UACrBknC,MAAMtkC,KAAKoL,MAAMF,YAAYC,IAAAA,IAAQF,KAAK;AAAA,QAAA,CAC7C;AAAA,MACL,UAAA;AACIkf,mBAAW,KAAK;AAAA,MACpB;AAAA,IACJ,GAAG,CAACsZ,aAAarD,SAASja,QAAQ6d,SAAS7iC,MAAMkS,UAAU8D,cAAc+rB,eAAe3vB,cAAcG,aAAa4C,GAAG,CAAC;AAEvH,0CACK,OAAA,EAAI,WAAU,wBACX,UAAA9sB,2BAAAA,KAAC,OAAA,EAAI,WAAU,wCAEX,UAAA;AAAA,MAAAI,2BAAAA,IAAC,wBAAA,EACG,UACA,aACA,cACA,iBACA,OACA,SAASyrB,gBAAgBlS,SACzB,aAAawT,sBAAAA,CAAsB;AAAA,MAItCmtB,cAAclsC,SAAS,KACpBhO,2BAAAA,IAAC,cAAA,EACG,OAAM,mBACN,QAAQk6C,eACR,QAAQhB,YACR,UAAU,CAAC7pB,KAAG7f,QAAM2pC,cAAejrC,CAAAA,UAAU;AAAA,QAAE,GAAGA;AAAAA,QAC1E,CAACmhB,GAAC,GAAG7f;AAAAA,MAAAA,EAAI,EAAA,CAAE;AAAA,MAKM2qC,eAAensC,SAAS,KACrBhO,2BAAAA,IAAC,cAAA,EACG,OAAM,oBACN,QAAQm6C,gBACR,QAAQf,aACR,UAAU,CAAC/pB,KAAG7f,QAAM6pC,eAAgBnrC,CAAAA,YAAU;AAAA,QAAE,GAAGA;AAAAA,QAAM,CAACmhB,GAAC,GAAG7f;AAAAA,MAAAA,EAAI,EAAA,CAAE;AAAA,MAK5ExP,2BAAAA,IAAC,uBAAA,EACG,OAAM,kBACN,QAAQs5C,eACR,UAAU,CAACnpC,GAAGkf,KAAG7f,QAAM;AACnB,cAAMmrC,OAAO,CAAC,GAAGrB,aAAa;AAC9BqB,aAAKxqC,CAAC,IAAI;AAAA,UAAEvO,KAAKytB;AAAAA,UAAGtoB,OAAOyI;AAAAA,QAAAA;AAC3B+pC,yBAAiBoB,IAAI;AAAA,MACzB,GACA,OAAO,MAAMpB,iBAAkBrrC,CAAAA,WAAS,CAAC,GAAGA,QAAM;AAAA,QAAEtM,KAAK;AAAA,QAAImF,OAAO;AAAA,MAAA,CAAI,CAAC,GACzE,UAAWoJ,CAAAA,QAAM;AACb,cAAMwqC,SAAO,CAAC,GAAGrB,aAAa;AAC9BqB,eAAKC,OAAOzqC,KAAG,CAAC;AAChBopC,yBAAiBoB,MAAI;AAAA,MACzB,GAAE;AAAA,MAILP,2CACI,OAAA,EACG,UAAA;AAAA,QAAAp6C,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,+GAA6G,UAAA,gBAG3H;AAAA,QACAD,2BAAAA,IAAC,YAAA,EACG,OAAOuX,MACP,UAAWpJ,CAAAA,MAAM;AAAEqrC,kBAAQrrC,EAAEyI,OAAO7P,KAAK;AAAG6yC,6BAAmB,IAAI;AAAA,QAAG,GACtE,MAAM,IACN,YAAY,OACZ,WAAWt5C,GAAAA,IACP,oDACA,qCACAq5C,kBAAkB,yCAAyCr5C,GAAAA,IAAI,gEAAgEqN,GAAAA,kBAAkB,GACjJ,iDACA,mCACA,gBACJ,GAAE;AAAA,QAELgsC,mBACG35C,2BAAAA,IAACC,GAAAA,YAAA,EAAW,SAAQ,WAAU,WAAU,mCACnC05C,UAAAA,gBAAAA,CACL;AAAA,MAAA,GAER;AAAA,MAIJ/5C,2BAAAA,KAAC,OAAA,EAAI,WAAU,qDACX,UAAA;AAAA,QAAAI,+BAACC,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,qGAAmG,UAAA,eAGjH;AAAA,QACAD,2BAAAA,IAAC,QAAA,EAAK,WAAU,6EACX65C,UAAAA,YAAAA,CACL;AAAA,MAAA,GACJ;AAAA,MAGA75C,2BAAAA,IAAC8O,GAAAA,QAAA,EAAO,SAAQ,UAAS,SAASurC,SAAS,UAAU9gC,SAAS,WAAU,UACnEA,UAAAA,UACG3Z,2BAAAA,KAAC,QAAA,EAAK,WAAU,2BACZ,UAAA;AAAA,QAAAI,2BAAAA,IAAC66C,YAAAA,YAAA,EAAW,MAAMl6C,GAAAA,SAASC,OAAO,WAAU,gBAAc;AAAA,QAAA;AAAA,MAAA,EAAA,CAE9D,IAEAhB,2BAAAA,KAAC,QAAA,EAAK,WAAU,2BACZ,UAAA;AAAA,QAAAI,2BAAAA,IAAC86C,YAAAA,UAAA,EAAS,MAAMn6C,GAAAA,SAASC,MAAAA,CAAM;AAAA,QAAA;AAAA,MAAA,EAAA,CAEnC,EAAA,CAER;AAAA,MAGCy7B,YACGz8B,2BAAAA,KAAC,OAAA,EAAI,WAAWU,GAAAA,IAAI,qCAAqCqN,qBAAkB,GACvE,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EACG,WAAWU,GAAAA,IACP,iDACA,sCACJ,GAEA,UAAA;AAAA,UAAAV,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,eAAA,EAAc,QAAQq8B,SAASvB,OAAAA,CAAO;AAAA,2CACtC76B,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,6DAETo8B,mBAASoe,WAAAA,CACd;AAAA,UAAA,GACJ;AAAA,UACA76C,2BAAAA,KAACK,GAAAA,YAAA,EACG,SAAQ,WACR,WAAU,uEAETo8B,UAAAA;AAAAA,YAAAA,SAASqe;AAAAA,YAAK;AAAA,UAAA,EAAA,CACnB;AAAA,QAAA,GACJ;AAAA,QACA16C,2BAAAA,IAAC,SACG,WAAWM,OACP,gDACA,mCACA,2CACJ,GAEC+7B,UAAAA,SAAS9kB,KAAAA,CACd;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,EAAA,CAER,EAAA,CACJ;AAAA,EAER;AAIA,WAAAwjC,aAAA38C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAAsB,UAAA;AAAA,MAAAoD;AAAAA,MAAAs5C;AAAAA,MAAAtpC;AAAAA,MAAA1K;AAAAA,IAAAA,IAAA5I;AAUrB,QAAAa;AAAA,QAAAZ,SAAAqD,OAAA;AAGWzC,0CAACgB,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,+GAETyB,UAAAA,OACL;AAAarD,aAAAqD;AAAArD,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAA2I,YAAA3I,SAAA28C,UAAA38C,EAAA,CAAA,MAAAqT,QAAA;AAAA,UAAAnS;AAAA,UAAAlB,EAAA,CAAA,MAAA2I,YAAA3I,SAAAqT,QAAA;AAEGnS,cAAAkpB,CAAAA,MACR7oB,2BAAAA,KAAA,OAAA,EAA4B,WAAA,2BACxB,UAAA;AAAA,UAAAA,2BAAAA,KAAA,SAAA,EAAiB,WAAA,iBACb,UAAA;AAAA,YAAAI,2BAAAA,IAAA,QAAA,EAAgB,WAAA,mCAAmCyoB,UAAAA,EAACzqB,MAAM;AAAA,YACzDyqB,EAACwiB,YAAajrC,2BAAAA,IAAA,QAAA,EAAgB,WAAA,+BAA8B,UAAA,IAAA,CAAC;AAAA,UAAA,GAClE;AAAA,UACAA,2BAAAA,IAAA,SAAA,EACS,MAAA,QACQ,aAAAyoB,EAACxqB,eAAgBwqB,EAACzqB,MACxB,OAAA0T,OAAO+W,EAACzqB,IAAA,KAAU,IACf,UAAAmQ,CAAAA,MAAOnH,SAASyhB,EAACzqB,MAAOmQ,EAACyI,OAAA7P,KAAa,GACrC,WAAAzG,GAAAA,IACP,mDACA,qCACA,UAAQqN,uBAER,iDACA,sCACA,yDACA,gBACJ,EAAA,CAAC;AAAA,QAAA,EAAA,GAnBC8a,EAACzqB,IAqBX;AACHK,eAAA2I;AAAA3I,eAAAqT;AAAArT,eAAAkB;AAAAA,MAAA,OAAA;AAAAA,cAAAlB,EAAA,CAAA;AAAA,MAAA;AAvBAc,WAAA67C,OAAMl7C,IAAKP,GAuBX;AAAClB,aAAA2I;AAAA3I,aAAA28C;AAAA38C,aAAAqT;AAAArT,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,SAAAc,IAAA;AAxBNI,WAAAS,2BAAAA,IAAA,OAAA,EAAe,WAAA,aACVb,UAAAA,IAwBL;AAAMd,aAAAc;AAAAd,cAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,EAAA,MAAAY,MAAAZ,UAAAkB,IAAA;AAhCVI,2CAAA,OAAA,EACIV,UAAAA;AAAAA,QAAAA;AAAAA,QAMAM;AAAAA,MAAAA,GA0BJ;AAAMlB,cAAAY;AAAAZ,cAAAkB;AAAAlB,cAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,EAAA;AAAA,IAAA;AAAA,WAjCNsB;AAAAA,EAiCM;AAId,WAAAs7C,sBAAA78C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,EAAA;AAA+B,UAAA;AAAA,MAAAoD;AAAAA,MAAAgQ;AAAAA,MAAA1K;AAAAA,MAAAk0C;AAAAA,MAAAC;AAAAA,IAAAA,IAAA/8C;AAY9B,QAAAa;AAAA,QAAAZ,SAAAqD,OAAA;AAIezC,0CAACgB,GAAAA,YAAA,EACW,SAAA,WACE,WAAA,0GAETyB,UAAAA,OACL;AAAarD,aAAAqD;AAAArD,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAc;AAAA,QAAAd,EAAA,CAAA,MAAA0C,uBAAAC,IAAA,2BAAA,GAAA;AAKT7B,0CAACknB,YAAAA,UAAA,EAAe,MAAA1lB,GAAAA,SAAAC,OAA0B,WAAA,QAAM;AAAGvC,aAAAc;AAAAA,IAAA,OAAA;AAAAA,WAAAd,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAkB;AAAA,QAAAlB,SAAA68C,OAAA;AAJvD37C,uDACa27C,SAAAA,OACC,WAAA,mGAEV/7C,UAAAA;AAAAA,QAAAA;AAAAA,QAAmD;AAAA,MAAA,GACvD;AAASd,aAAA68C;AAAA78C,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAsB;AAAA,QAAAtB,EAAA,CAAA,MAAAY,MAAAZ,SAAAkB,IAAA;AAZbI,WAAAC,2BAAAA,KAAA,OAAA,EAAe,WAAA,0CACXX,UAAAA;AAAAA,QAAAA;AAAAA,QAMAM;AAAAA,MAAAA,GAMJ;AAAMlB,aAAAY;AAAAZ,aAAAkB;AAAAlB,aAAAsB;AAAAA,IAAA,OAAA;AAAAA,WAAAtB,EAAA,CAAA;AAAA,IAAA;AAAA,QAAAwB;AAAA,QAAAxB,EAAA,CAAA,MAAA2I,YAAA3I,SAAA88C,YAAA98C,EAAA,EAAA,MAAAqT,QAAA;AAAA,UAAA7Q;AAAA,UAAAxC,EAAA,EAAA,MAAA2I,YAAA3I,UAAA88C,UAAA;AAEUt6C,cAAAA,CAAA2O,GAAAW,MACRvQ,2BAAAA,KAAA,OAAA,EAAuB,WAAA,2BACnB,UAAA;AAAA,UAAAI,2BAAAA,IAAA,SAAA,EACS,MAAA,QACO,aAAA,eACL,OAAAwP,EAAC5N,KACE,UAAAuM,CAAAA,MAAOnH,SAASmJ,GAAGhC,EAACyI,OAAA7P,OAAeyI,EAACzI,KAAM,GACzC,WAAAzG,GAAAA,IACP,kDACA,qCACA,UAAQqN,GAAAA,oBAER,iDACA,sCACA,yDACA,gBACJ,EAAA;UAEJ3N,2BAAAA,IAAA,SAAA,EACS,MAAA,QACO,aAAA,SACL,OAAAwP,EAACzI,OACE,UAAAgQ,CAAAA,QAAO/P,SAASmJ,GAAGX,EAAC5N,KAAMuM,IAACyI,OAAA7P,KAAa,GACvC,WAAAzG,GAAAA,IACP,mDACA,qCACA,UAAQqN,GAAAA,oBAER,iDACA,sCACA,yDACA,gBACJ,EAAA;yCAEJ,UAAA,EACa,eAAMwtC,SAAShrC,CAAC,GACf,WAAA,oHACJ,OAAA,UAEN,UAAAnQ,2BAAAA,IAAComB,YAAAA,OAAA,EAAY,MAAAzlB,GAAAA,SAAAC,OAAc,EAAA,CAC/B;AAAA,QAAA,EAAA,IACJ;AACHvC,gBAAA2I;AAAA3I,gBAAA88C;AAAA98C,gBAAAwC;AAAAA,MAAA,OAAA;AAAAA,cAAAxC,EAAA,EAAA;AAAA,MAAA;AA1CAwB,WAAA6R,OAAM5R,IAAKe,GA0CX;AAACxC,aAAA2I;AAAA3I,aAAA88C;AAAA98C,cAAAqT;AAAArT,cAAAwB;AAAAA,IAAA,OAAA;AAAAA,WAAAxB,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAwC;AAAA,QAAAxC,EAAA,EAAA,MAAAqT,OAAA1D,QAAA;AACDnN,WAAA6Q,OAAM1D,gBACHhO,2BAAAA,IAACC,GAAAA,cAAmB,SAAA,WAAoB,WAAA,yCAAwC,UAAA,2BAAA,CAEhF;AACH5B,QAAA,EAAA,IAAAqT,OAAA1D;AAAA3P,cAAAwC;AAAAA,IAAA,OAAA;AAAAA,WAAAxC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAAyC;AAAA,QAAAzC,EAAA,EAAA,MAAAwB,MAAAxB,UAAAwC,IAAA;AAhDLC,WAAAlB,2BAAAA,KAAA,OAAA,EAAe,WAAA,aACVC,UAAAA;AAAAA,QAAAA;AAAAA,QA2CAgB;AAAAA,MAAAA,GAKL;AAAMxC,cAAAwB;AAAAxB,cAAAwC;AAAAxC,cAAAyC;AAAAA,IAAA,OAAA;AAAAA,WAAAzC,EAAA,EAAA;AAAA,IAAA;AAAA,QAAA4C;AAAA,QAAA5C,EAAA,EAAA,MAAAsB,MAAAtB,UAAAyC,IAAA;AAhEVG,2CAAA,OAAA,EACItB,UAAAA;AAAAA,QAAAA;AAAAA,QAcAmB;AAAAA,MAAAA,GAkDJ;AAAMzC,cAAAsB;AAAAtB,cAAAyC;AAAAzC,cAAA4C;AAAAA,IAAA,OAAA;AAAAA,WAAA5C,EAAA,EAAA;AAAA,IAAA;AAAA,WAjEN4C;AAAAA,EAiEM;AAMd,WAAAm6C,cAAAh9C,IAAA;AAAA,UAAAC,IAAAC,qBAAAA,EAAA,CAAA;AAAuB,UAAA;AAAA,MAAAw8B;AAAAA,IAAAA,IAAA18B;AACnB,QAAAi9C,aAAiB;AAAe,QAC5BvgB,UAAM,OAAWA,SAAM,KAAM;AAAEugB,mBAAaA;AAAAA,IAAH,OAAA;AAAA,UACpCvgB,UAAM,OAAWA,SAAM,KAAM;AAAEugB,qBAAaA;AAAAA,MAAH,OAAA;AAAA,YACzCvgB,UAAM,OAAWA,SAAM,KAAM;AAAEugB,uBAAaA;AAAAA,QAAH;AAAA,MAAA;AAAA,IAAA;AAAA,QAAAp8C;AAAA,QAAAZ,SAAAg9C,YAAA;AAG7Bp8C,WAAAqB,GAAAA,IAAI,+BAA+B+6C,UAAU;AAACh9C,aAAAg9C;AAAAh9C,aAAAY;AAAAA,IAAA,OAAA;AAAAA,WAAAZ,EAAA,CAAA;AAAA,IAAA;AAC1D,UAAAc,KAAA27B,UAAU;AAAK,QAAAv7B;AAAA,QAAAlB,EAAA,CAAA,MAAAY,MAAAZ,SAAAc,IAAA;AADpBI,WAAAS,2BAAAA,IAAA,QAAA,EAAiB,WAAAf,IACZE,UAAAA,IACL;AAAOd,aAAAY;AAAAZ,aAAAc;AAAAd,aAAAkB;AAAAA,IAAA,OAAA;AAAAA,WAAAlB,EAAA,CAAA;AAAA,IAAA;AAAA,WAFPkB;AAAAA,EAEO;AAIf,WAASk6C,kBAAkBjD,UAAkC;AACzD,QAAI,CAACA,SAASG,aAAaqB,QAAS,QAAO;AAC3C,UAAM/zB,OAAOuyB,SAASG,YAAYqB,QAAQ,kBAAkB;AAC5D,QAAI,CAAC/zB,MAAMtR,QAAQ6V,WAAY,QAAO;AAEtC,UAAM8yB,QAAQr3B,KAAKtR,OAAO6V;AAC1B,UAAMH,QAAkB,CAAC,GAAG;AAC5B,UAAMta,OAAOxD,OAAOwD,KAAKutC,KAAK;AAC9BvtC,SAAKjD,QAAQ,CAAClJ,KAAKuO,MAAM;AACrB,YAAMiZ,OAAOkyB,MAAM15C,GAAG;AACtB,UAAIwnB,KAAKjiB,SAAU;AACnB,YAAMo0C,QAAQprC,IAAIpC,KAAKC,SAAS,IAAI,MAAM;AAC1C,YAAM2I,MAAM6kC,aAAapyB,IAAI;AAC7Bf,YAAMjiB,KAAK,MAAMxE,GAAG,MAAM+U,GAAG,GAAG4kC,KAAK,EAAE;AAAA,IAC3C,CAAC;AACDlzB,UAAMjiB,KAAK,GAAG;AACd,WAAOiiB,MAAMxZ,KAAK,IAAI;AAAA,EAC1B;AAEA,WAAS2sC,aAAa7oC,QAAqB;AACvC,QAAIA,OAAO+3B,KAAM,QAAOrxB,KAAKqG,UAAU/M,OAAO+3B,KAAK,CAAC,CAAC;AACrD,YAAQ/3B,OAAOnC,MAAAA;AAAAA,MACX,KAAK;AACD,eAAOmC,OAAOgmC,WAAW,cAAc,yBAAQ51B,QAAOc,aAAa,MAAM;AAAA,MAC7E,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IAAA;AAAA,EAEnB;ACreO,WAASze,cAAc;AAC1B,UAAMkmB,YAAYC,KAAAA,aAAAA;AAClB,UAAMG,iBAAiB+vB,KAAAA,kBAAAA;AACvB,UAAMnuB,SAAShC,WAAWgC;AAE1B,UAAM,CAACyoB,MAAM2F,OAAO,IAAItuC,MAAAA,SAA6B,IAAI;AACzD,UAAM,CAACmM,SAASgnB,UAAU,IAAInzB,MAAAA,SAAS,IAAI;AAC3C,UAAM,CAACgF,OAAO4lB,QAAQ,IAAI5qB,MAAAA,SAAwB,IAAI;AAEtD,UAAM,CAACuuC,kBAAkBC,mBAAmB,IAAIxuC,MAAAA,SAAgC,IAAI;AACpF,UAAM,CAACyuC,eAAeC,gBAAgB,IAAI1uC,MAAAA,SAAS,EAAE;AACrD,UAAM,CAAC2uC,WAAWC,YAAY,IAAI5uC,MAAAA,SAAS,KAAK;AAGhDhO,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACkuB,OAAQ;AACb,UAAIiX,YAAY;AAChB,YAAM0X,UAAU,GAAG3uB,OAAO/O,QAAQ,QAAQ,EAAE,CAAC;AAE7C,OAAC,YAAY;AACT,YAAI;AACA,gBAAMmmB,MAAM,MAAMpI,MAAM2f,OAAO;AAC/B,cAAI,CAACvX,IAAIjI,GAAI,OAAM,IAAIhpB,MAAM,GAAGixB,IAAI5J,MAAM,IAAI4J,IAAI+V,UAAU,EAAE;AAC9D,gBAAMt+B,OAAO,MAAMuoB,IAAIzgB,KAAAA;AACvB,cAAI,CAACsgB,WAAW;AACZmX,oBAAQv/B,IAAI;AACZokB,uBAAW,KAAK;AAAA,UACpB;AAAA,QACJ,SAAShlB,KAAU;AACf,cAAI,CAACgpB,WAAW;AACZvM,qBAASzc,IAAI/H,WAAW,yBAAyB;AACjD+sB,uBAAW,KAAK;AAAA,UACpB;AAAA,QACJ;AAAA,MACJ,GAAA;AACA,aAAO,MAAM;AACTgE,oBAAY;AAAA,MAChB;AAAA,IACJ,GAAG,CAACjX,MAAM,CAAC;AAGX,UAAM;AAAA,MAAEmN;AAAAA,MAAQub;AAAAA,IAAAA,IAAiBpwC,MAAAA,QAAQ,MAAM;AAC3C,UAAI,CAACmwC,KAAM,QAAO;AAAA,QAAEtb,QAAQ,CAAA;AAAA,QACpCub,cAAc,CAAA;AAAA,MAAA;AACN,aAAOF,iBAAiBC,IAAI;AAAA,IAChC,GAAG,CAACA,IAAI,CAAC;AAGT,UAAMmG,iBAAiBt2C,MAAAA,QAAQ,MAAM;AACjC,UAAI,CAACi2C,cAAc7yC,KAAAA,EAAQ,QAAOyxB;AAClC,YAAMoY,IAAIgJ,cAAc5f,YAAAA;AACxB,aAAOxB,OACF36B,IAAKkoC,CAAAA,OAAO;AAAA,QACT,GAAGA;AAAAA,QACHyP,WAAWzP,EAAEyP,UAAU9nC,OAClBxB,CAAAA,MACGA,EAAEpQ,KAAKk+B,cAAc91B,SAAS0sC,CAAC,KAC/B1kC,EAAEsoC,QAAQxa,cAAc91B,SAAS0sC,CAAC,KAClC1kC,EAAEouB,OAAON,cAAc91B,SAAS0sC,CAAC,CACzC;AAAA,MAAA,EACF,EACDljC,OAAQq4B,SAAMA,IAAEyP,UAAUzpC,SAAS,CAAC;AAAA,IAC7C,GAAG,CAACysB,QAAQohB,aAAa,CAAC;AAG1Bz8C,UAAAA,UAAU,MAAM;AACZ,UAAI,CAACu8C,oBAAoB3F,aAAahoC,SAAS,GAAG;AAC9C4tC,4BAAoB5F,aAAa,CAAC,CAAC;AAAA,MACvC;AAAA,IACJ,GAAG,CAACA,cAAc2F,gBAAgB,CAAC;AAGnC,QAAI,CAACruB,QAAQ;AACT,aACIttB,2BAAAA,IAAC,OAAA,EAAI,WAAU,sDACX,UAAAA,2BAAAA,IAAC08B,GAAAA,OAAA,EAAM,OAAM,WACT,UAAA98B,2BAAAA,KAACK,GAAAA,YAAA,EAAW,SAAQ,SAAO,UAAA;AAAA,QAAA;AAAA,QAC4B;AAAA,QACnDD,2BAAAA,IAAC,QAAA,EAAK,WAAU,qBAAoB,UAAA,UAAM;AAAA,QAAO;AAAA,MAAA,EAAA,CACrD,GACJ,GACJ;AAAA,IAER;AAEA,QAAIuZ,SAAS;AACT,aACI3Z,2BAAAA,KAAC,OAAA,EAAI,WAAU,iEACX,UAAA;AAAA,QAAAI,2BAAAA,IAACyN,GAAAA,kBAAA,EAAiB,MAAK,SAAA,CAAQ;AAAA,uCAC9BxN,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,mEAAiE,UAAA,6BAAA,CAEvG;AAAA,MAAA,GACJ;AAAA,IAER;AAEA,QAAImS,SAAS,CAAC2jC,MAAM;AAChB,aACI/1C,2BAAAA,IAAC,OAAA,EAAI,WAAU,sDACX,yCAAC08B,GAAAA,OAAA,EAAM,OAAM,SACT,UAAA18B,+BAACC,GAAAA,cAAW,SAAQ,SAASmS,UAAAA,SAAS,gBAAA,CAAgB,GAC1D,GACJ;AAAA,IAER;AAEA,UAAM+pC,gBAAwC;AAAA,MAC1C5S,KAAK;AAAA,MACL0N,MAAM;AAAA,MACNC,KAAK;AAAA,MACLC,OAAO;AAAA,MACPC,QAAQ;AAAA,IAAA;AAGZ,WACIx3C,2BAAAA,KAAC,OAAA,EAAI,WAAU,sCAEX,UAAA;AAAA,MAAAA,gCAAC,SACG,WAAWU,GAAAA,IACP,oEACAqN,GAAAA,oBACA,mCACJ,GAGA,UAAA;AAAA,QAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,iBACX,UAAA;AAAA,UAAAA,2BAAAA,KAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAAI,2BAAAA,IAACo8C,YAAAA,cAAA,EAAa,MAAMz7C,GAAAA,SAAS+kC,QAAQ,WAAU,uCAAqC;AAAA,YACpF1lC,2BAAAA,IAACC,GAAAA,cAAW,SAAQ,aAAY,WAAU,iBACrC81C,UAAAA,KAAKznB,MAAM5sB,SAAS,gBAAA,CACzB;AAAA,UAAA,GACJ;AAAA,UACCq0C,KAAKznB,MAAM6f,WACRvuC,2BAAAA,KAAC4vB,GAAAA,QAAK,MAAK,YAAW,aAAY,cAAY,UAAA;AAAA,YAAA;AAAA,YACxCumB,KAAKznB,KAAK6f;AAAAA,UAAAA,GAChB;AAAA,yCAGH,OAAA,EAAI,WAAU,QACX,UAAAnuC,2BAAAA,IAACq8C,GAAAA,aACG,aAAY,qBACZ,MAAK,SACL,cAAe1lC,CAAAA,QAAQmlC,iBAAiBnlC,OAAO,EAAE,GAAE,EAAA,CAE3D;AAAA,QAAA,GAGJ;AAAA,QAGA/W,2BAAAA,KAAC,OAAA,EAAI,WAAU,oCACVs8C,UAAAA;AAAAA,UAAAA,eAAep8C,IAAKuG,CAAAA,UACjBzG,2BAAAA,KAAC,OAAA,EAAoB,WAAU,QAC3B,UAAA;AAAA,YAAAI,+BAACC,GAAAA,cACG,SAAQ,WACR,WAAU,oHAEToG,gBAAM0wC,KACX;AAAA,YACC1wC,MAAMoxC,UAAU33C,IAAKw8C,CAAAA,OAAO;AACzB,oBAAMzgB,aAAa8f,kBAAkB3zC,OAAOs0C,GAAGt0C;AAC/C,qBACIpI,gCAAC,UAAA,EAEG,SAAS,MAAM;AACXg8C,oCAAoBU,EAAE;AACtBN,6BAAa,KAAK;AAAA,cACtB,GACA,WAAW17C,GAAAA,IACP,4GACA,kDACAu7B,aACM,mDACA,+CACV,GAEA,UAAA;AAAA,gBAAA77B,+BAAC,UAAK,WAAU,mCAAmCs8C,UAAAA,GAAG7F,WAAW6F,GAAG/F,WAAU;AAAA,gBAC9Ev2C,2BAAAA,IAAC,QAAA,EACG,WAAWM,GAAAA,IACP,4CACA67C,cAAcG,GAAG/f,MAAM,KAAK,qBAChC,GAEC+f,UAAAA,GAAG/f,OAAAA,CACR;AAAA,cAAA,EAAA,GArBK+f,GAAGt0C,EAsBZ;AAAA,YAER,CAAC;AAAA,UAAA,KAnCK3B,MAAM0wC,GAoChB,CACH;AAAA,UACAmF,eAAeluC,WAAW,KACvBhO,2BAAAA,IAACC,GAAAA,cACG,SAAQ,SACR,WAAU,sEAAoE,UAAA,qBAAA,CAGlF;AAAA,QAAA,EAAA,CAER;AAAA,MAAA,GACJ;AAAA,MAGAD,+BAAC,OAAA,EAAI,WAAU,+CACV27C,6BACG/7C,2BAAAA,KAAAkQ,qBAAA,EAEI,UAAA;AAAA,QAAAlQ,gCAAC,SACG,WAAWU,GAAAA,IACP,4EACAqN,GAAAA,oBACA,uEACJ,GAEA,UAAA;AAAA,UAAA/N,2BAAAA,KAAC,OAAA,EAAI,WAAU,mCACX,UAAA;AAAA,YAAAI,2BAAAA,IAAC,QAAA,EACG,WAAWM,GAAAA,IACP,+BACA67C,cAAcR,iBAAiBpf,MAAM,KAAK,EAC9C,GAECof,UAAAA,iBAAiBpf,OAAAA,CACtB;AAAA,YACAv8B,2BAAAA,IAAC,QAAA,EAAK,WAAU,4EACX27C,2BAAiB59C,KAAAA,CACtB;AAAA,UAAA,GACJ;AAAA,UACA6B,2BAAAA,KAACkP,GAAAA,QAAA,EACG,SAASitC,YAAY,WAAW,YAChC,MAAK,SACL,SAAS,MAAMC,aAAcxsC,CAAAA,MAAM,CAACA,CAAC,GAErC,UAAA;AAAA,YAAAxP,2BAAAA,IAACymB,YAAAA,UAAA,EAAS,MAAM9lB,GAAAA,SAASC,OAAO,WAAU,QAAM;AAAA,YAAA;AAAA,UAAA,EAAA,CAEpD;AAAA,QAAA,GACJ;AAAA,QAGAZ,2BAAAA,IAAC,OAAA,EAAI,WAAU,0BACV+7C,sBACG/7C,2BAAAA,IAAC,YAAA,EAEG,UAAU27C,kBACV,QACA,cAAcrwB,WAAWiC,gBAAgB7B,eAAe6B,cACxD,MAAM7B,eAAeC,MACrB,UAAUoqB,MAAMwG,UAAU,CAAC,GAAGj5B,OAAO,MALhCq4B,iBAAiB7E,eAAe6E,iBAAiB59C,IAKd,IAG5CiC,2BAAAA,IAAC,gBAAA,EAAe,UAAU27C,kBAAkB,MAAW,EAAA,CAE/D;AAAA,MAAA,EAAA,CACJ,IAEA37C,2BAAAA,IAAC,OAAA,EAAI,WAAU,2CACX,UAAAA,+BAACC,GAAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,qDAAmD,UAAA,sCAAA,CAEzF,GACJ,EAAA,CAER;AAAA,IAAA,GACJ;AAAA,EAER;AAEAmF,cAAYunB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|