react-inspector-devtools 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +199 -2
- package/dist/DevtoolsApp.d.ts +1 -0
- package/dist/InspectorDevTools.d.ts +8 -0
- package/dist/components/ConfirmDialog/index.d.ts +12 -0
- package/dist/components/ContextMenu/index.d.ts +27 -0
- package/dist/components/DevToolsContainer/index.d.ts +3 -0
- package/dist/components/ErrorBoundary/index.d.ts +18 -0
- package/dist/components/Icons/index.d.ts +39 -0
- package/dist/components/ObjectInspector/index.d.ts +28 -0
- package/dist/components/SplitPane/index.d.ts +17 -0
- package/dist/components/StatusBar/index.d.ts +2 -0
- package/dist/components/Toolbar/index.d.ts +6 -0
- package/dist/core/eventBus.d.ts +32 -0
- package/dist/core/ownership.d.ts +9 -0
- package/dist/core/panelRegistry.d.ts +9 -0
- package/dist/hooks/useConfig.d.ts +13 -0
- package/dist/hooks/useDevtoolsContext.d.ts +8 -0
- package/dist/hooks/useDrag.d.ts +6 -0
- package/dist/hooks/useThemeResolved.d.ts +2 -0
- package/dist/index.cjs +10667 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +10662 -0
- package/dist/index.js.map +1 -0
- package/dist/inspectors/CSSInspector/BoxModel.d.ts +4 -0
- package/dist/inspectors/CSSInspector/ComputedPane.d.ts +3 -0
- package/dist/inspectors/CSSInspector/StylesPane.d.ts +3 -0
- package/dist/inspectors/CSSInspector/cssModel.d.ts +72 -0
- package/dist/inspectors/CookieInspector/index.d.ts +1 -0
- package/dist/inspectors/DOMInspector/DOMTree.d.ts +1 -0
- package/dist/inspectors/DOMInspector/Overlay.d.ts +2 -0
- package/dist/inspectors/DOMInspector/PropertiesPane.d.ts +7 -0
- package/dist/inspectors/DOMInspector/treeModel.d.ts +19 -0
- package/dist/inspectors/DOMInspector/usePicker.d.ts +6 -0
- package/dist/inspectors/StorageInspector/index.d.ts +10 -0
- package/dist/inspectors/StorageInspector/providers.d.ts +2 -0
- package/dist/instrumentation/console/index.d.ts +10 -0
- package/dist/instrumentation/dom/index.d.ts +9 -0
- package/dist/instrumentation/errors/index.d.ts +5 -0
- package/dist/instrumentation/index.d.ts +26 -0
- package/dist/instrumentation/network/fetch.d.ts +9 -0
- package/dist/instrumentation/network/resources.d.ts +15 -0
- package/dist/instrumentation/network/shared.d.ts +26 -0
- package/dist/instrumentation/network/xhr.d.ts +10 -0
- package/dist/instrumentation/storage/index.d.ts +9 -0
- package/dist/panels/Application/index.d.ts +1 -0
- package/dist/panels/Console/ConsoleInput.d.ts +3 -0
- package/dist/panels/Console/evaluate.d.ts +26 -0
- package/dist/panels/Console/format.d.ts +8 -0
- package/dist/panels/Console/index.d.ts +1 -0
- package/dist/panels/DeviceToolbar/emulation.d.ts +34 -0
- package/dist/panels/DeviceToolbar/index.d.ts +1 -0
- package/dist/panels/Elements/index.d.ts +1 -0
- package/dist/panels/Network/RequestDetails.d.ts +5 -0
- package/dist/panels/Network/index.d.ts +1 -0
- package/dist/panels/Network/util.d.ts +11 -0
- package/dist/panels/Settings/index.d.ts +1 -0
- package/dist/panels/index.d.ts +3 -0
- package/dist/store/applicationStore.d.ts +10 -0
- package/dist/store/consoleStore.d.ts +30 -0
- package/dist/store/deviceStore.d.ts +24 -0
- package/dist/store/devtoolsStore.d.ts +49 -0
- package/dist/store/elementsStore.d.ts +24 -0
- package/dist/store/networkStore.d.ts +33 -0
- package/dist/themes/index.d.ts +1 -0
- package/dist/types/index.d.ts +158 -0
- package/dist/utils/cookies.d.ts +32 -0
- package/dist/utils/domSelector.d.ts +4 -0
- package/dist/utils/format.d.ts +15 -0
- package/dist/utils/mediaQuery.d.ts +19 -0
- package/dist/utils/safeStorage.d.ts +10 -0
- package/dist/utils/shortcut.d.ts +15 -0
- package/dist/utils/specificity.d.ts +6 -0
- package/dist/utils/stack.d.ts +2 -0
- package/package.json +66 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["base","container","elements","consoleCss","network","application","device","create","create","PRESERVE_KEY","createContext","useContext","useSyncExternalStore","createContext","useContext","useRef","useState","createPortal","create","create","memo","useState","_Fragment","Component","useRef","_Fragment","useRef","useState","useRef","useMemo","memo","dt","_Fragment","useState","useMemo","useRef","SIDES","useState","_Fragment","useState","useMemo","useState","round","useRef","useState","useState","useRef","useRef","useState","useMemo","memo","_Fragment","create","useMemo","useState","useMemo","_Fragment","create","useState","useMemo","useState","_Fragment","useState","useCallback","useState","useState","_Fragment","useMemo","useState","_Fragment","useState","_Fragment","useState","useRef","_Fragment","useState","useRef","createRoot"],"sources":["../src/core/ownership.ts","../src/themes/base.css?inline","../src/themes/container.css?inline","../src/themes/elements.css?inline","../src/themes/console.css?inline","../src/themes/network.css?inline","../src/themes/application.css?inline","../src/themes/device.css?inline","../src/themes/index.ts","../src/utils/safeStorage.ts","../src/store/devtoolsStore.ts","../src/store/consoleStore.ts","../src/hooks/useConfig.ts","../src/hooks/useThemeResolved.ts","../src/core/panelRegistry.ts","../src/hooks/useDrag.ts","../src/utils/format.ts","../src/hooks/useDevtoolsContext.ts","../src/components/ContextMenu/index.tsx","../src/components/Icons/index.tsx","../src/utils/shortcut.ts","../src/components/Toolbar/index.tsx","../src/store/deviceStore.ts","../src/store/elementsStore.ts","../src/components/ObjectInspector/index.tsx","../src/components/StatusBar/index.tsx","../src/components/ErrorBoundary/index.tsx","../src/components/SplitPane/index.tsx","../src/components/ConfirmDialog/index.tsx","../src/utils/domSelector.ts","../src/panels/Network/util.ts","../src/core/eventBus.ts","../src/inspectors/DOMInspector/treeModel.ts","../src/inspectors/DOMInspector/DOMTree.tsx","../src/utils/specificity.ts","../src/inspectors/CSSInspector/cssModel.ts","../src/inspectors/CSSInspector/StylesPane.tsx","../src/inspectors/CSSInspector/BoxModel.tsx","../src/inspectors/CSSInspector/ComputedPane.tsx","../src/inspectors/DOMInspector/PropertiesPane.tsx","../src/panels/Elements/index.tsx","../src/panels/Console/format.tsx","../src/panels/Console/evaluate.ts","../src/panels/Console/ConsoleInput.tsx","../src/panels/Console/index.tsx","../src/store/networkStore.ts","../src/panels/Network/RequestDetails.tsx","../src/panels/Network/index.tsx","../src/store/applicationStore.ts","../src/inspectors/StorageInspector/index.tsx","../src/inspectors/StorageInspector/providers.tsx","../src/utils/cookies.ts","../src/inspectors/CookieInspector/index.tsx","../src/panels/Application/index.tsx","../src/panels/Settings/index.tsx","../src/panels/index.ts","../src/components/DevToolsContainer/index.tsx","../src/inspectors/DOMInspector/Overlay.tsx","../src/inspectors/DOMInspector/usePicker.ts","../src/utils/mediaQuery.ts","../src/panels/DeviceToolbar/emulation.ts","../src/panels/DeviceToolbar/index.tsx","../src/DevtoolsApp.tsx","../src/utils/stack.ts","../src/instrumentation/console/index.ts","../src/instrumentation/errors/index.ts","../src/instrumentation/network/shared.ts","../src/instrumentation/network/fetch.ts","../src/instrumentation/network/xhr.ts","../src/instrumentation/network/resources.ts","../src/instrumentation/storage/index.ts","../src/instrumentation/dom/index.ts","../src/instrumentation/index.ts","../src/InspectorDevTools.tsx"],"sourcesContent":["/** Attribute placed on the devtools shadow host. Everything inside it is ignored by inspectors. */\nexport const HOST_ATTR = 'data-rid-host';\n\nlet hostEl: HTMLElement | null = null;\n\nexport function setHostElement(el: HTMLElement | null): void {\n hostEl = el;\n}\n\nexport function getHostElement(): HTMLElement | null {\n return hostEl;\n}\n\n/** True when the node is the devtools host, or lives inside it. */\nexport function isDevtoolsNode(node: Node | null | undefined): boolean {\n if (!node) return false;\n if (hostEl && (node === hostEl || hostEl.contains(node))) return true;\n if (node.nodeType === 1 && (node as Element).hasAttribute?.(HOST_ATTR)) return true;\n // Nodes inside our shadow root\n const root = node.getRootNode?.();\n if (root && root instanceof ShadowRoot && root.host === hostEl) return true;\n return false;\n}\n\n/** True when an event originated from inside the devtools UI. */\nexport function isDevtoolsEvent(e: Event): boolean {\n if (!hostEl) return false;\n const path = e.composedPath?.();\n return path ? path.includes(hostEl) : isDevtoolsNode(e.target as Node);\n}\n\nexport const isBrowser = (): boolean => typeof window !== 'undefined' && typeof document !== 'undefined';\n","/* Shadow root styles — host page CSS cannot reach in, ours cannot leak out. */\n:host {\n all: initial;\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: var(--rid-z, 2147483000);\n contain: layout style;\n}\n\n.rid-root {\n --rid-font: system-ui, -apple-system, 'Segoe UI', Roboto, Ubuntu, Arial, sans-serif;\n --rid-mono: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n --rid-fs: 12px;\n --rid-fs-mono: 11px;\n --rid-row: 20px;\n font-family: var(--rid-font);\n font-size: var(--rid-fs);\n line-height: 1.4;\n color: var(--rid-text);\n -webkit-font-smoothing: antialiased;\n}\n\n.rid-root,\n.rid-root * {\n box-sizing: border-box;\n}\n\n.rid-root[data-theme='light'] {\n color-scheme: light;\n --rid-bg: #ffffff;\n --rid-bg-alt: #f8f9fa;\n --rid-toolbar: #f1f3f4;\n --rid-border: #d3d6da;\n --rid-border-strong: #b9bdc1;\n --rid-text: #1f1f1f;\n --rid-text-dim: #5f6368;\n --rid-text-faint: #9aa0a6;\n --rid-hover: #e8eaed;\n --rid-active: #dadce0;\n --rid-selected: #cfe8fc;\n --rid-selected-inactive: #e8eaed;\n --rid-accent: #1a73e8;\n --rid-accent-text: #ffffff;\n --rid-focus: #1a73e8;\n --rid-input: #ffffff;\n --rid-shadow: 0 2px 10px rgba(0, 0, 0, 0.18);\n --rid-error-bg: #fcebeb;\n --rid-error-border: #f9d1d1;\n --rid-error-text: #d93025;\n --rid-warn-bg: #fffbe5;\n --rid-warn-border: #fff5c2;\n --rid-warn-text: #5c3c00;\n --rid-warn-icon: #e37400;\n --rid-info-icon: #1a73e8;\n --rid-tag: #881280;\n --rid-attr-name: #994500;\n --rid-attr-value: #1a1aa6;\n --rid-comment: #236e25;\n --rid-string: #c41a16;\n --rid-number: #1a1aa6;\n --rid-keyword: #aa0d91;\n --rid-null: #80868b;\n --rid-prop: #881280;\n --rid-prop-dim: #a875a6;\n --rid-css-prop: #c80000;\n --rid-css-value: #1f1f1f;\n --rid-link: #1a0dab;\n --rid-pending: #80868b;\n --rid-scrollbar: #c1c4c8;\n}\n\n.rid-root[data-theme='dark'] {\n color-scheme: dark;\n --rid-bg: #202124;\n --rid-bg-alt: #26272a;\n --rid-toolbar: #292a2d;\n --rid-border: #3c4043;\n --rid-border-strong: #5f6368;\n --rid-text: #e3e3e3;\n --rid-text-dim: #9aa0a6;\n --rid-text-faint: #6b7075;\n --rid-hover: #35363a;\n --rid-active: #3c4043;\n --rid-selected: #0d3a5c;\n --rid-selected-inactive: #3c4043;\n --rid-accent: #8ab4f8;\n --rid-accent-text: #202124;\n --rid-focus: #8ab4f8;\n --rid-input: #1b1c1e;\n --rid-shadow: 0 2px 12px rgba(0, 0, 0, 0.6);\n --rid-error-bg: #3c1e1e;\n --rid-error-border: #5c2b2b;\n --rid-error-text: #f28b82;\n --rid-warn-bg: #332b00;\n --rid-warn-border: #594a00;\n --rid-warn-text: #fdd663;\n --rid-warn-icon: #fdd663;\n --rid-info-icon: #8ab4f8;\n --rid-tag: #5db0d7;\n --rid-attr-name: #9bbbdc;\n --rid-attr-value: #f29766;\n --rid-comment: #898989;\n --rid-string: #f28b54;\n --rid-number: #9980ff;\n --rid-keyword: #cc7832;\n --rid-null: #8b8b8b;\n --rid-prop: #7cacf8;\n --rid-prop-dim: #8e9eb8;\n --rid-css-prop: #5db0d7;\n --rid-css-value: #e3e3e3;\n --rid-link: #8ab4f8;\n --rid-pending: #9aa0a6;\n --rid-scrollbar: #4a4d51;\n}\n\n.rid-root ::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n}\n.rid-root ::-webkit-scrollbar-thumb {\n background: var(--rid-scrollbar);\n border-radius: 6px;\n border: 2px solid transparent;\n background-clip: padding-box;\n}\n.rid-root ::-webkit-scrollbar-corner {\n background: transparent;\n}\n.rid-root * {\n scrollbar-width: thin;\n scrollbar-color: var(--rid-scrollbar) transparent;\n}\n\n.rid-mono {\n font-family: var(--rid-mono);\n font-size: var(--rid-fs-mono);\n}\n\n/* ---------------------------------------------------------------- buttons/inputs */\n\n.rid-icon-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 26px;\n height: 26px;\n padding: 0 4px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--rid-text-dim);\n cursor: pointer;\n font: inherit;\n flex: none;\n}\n.rid-icon-btn:hover {\n background: var(--rid-hover);\n color: var(--rid-text);\n}\n.rid-icon-btn[aria-pressed='true'],\n.rid-icon-btn.rid-on {\n color: var(--rid-accent);\n}\n.rid-icon-btn:disabled {\n opacity: 0.4;\n cursor: default;\n}\n.rid-icon-btn:focus-visible,\n.rid-btn:focus-visible,\n.rid-tab:focus-visible {\n outline: 2px solid var(--rid-focus);\n outline-offset: -2px;\n}\n\n.rid-btn {\n height: 24px;\n padding: 0 10px;\n border: 1px solid var(--rid-border-strong);\n border-radius: 4px;\n background: var(--rid-bg);\n color: var(--rid-text);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n}\n.rid-btn:hover {\n background: var(--rid-hover);\n}\n.rid-btn.rid-primary {\n background: var(--rid-accent);\n border-color: var(--rid-accent);\n color: var(--rid-accent-text);\n}\n.rid-btn.rid-danger {\n color: var(--rid-error-text);\n}\n\n.rid-input,\n.rid-select {\n height: 22px;\n padding: 0 6px;\n border: 1px solid var(--rid-border);\n border-radius: 4px;\n background: var(--rid-input);\n color: var(--rid-text);\n font: inherit;\n outline: none;\n min-width: 0;\n}\n.rid-input:focus,\n.rid-select:focus {\n border-color: var(--rid-focus);\n}\n.rid-input::placeholder {\n color: var(--rid-text-faint);\n}\n\n.rid-checkbox {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n white-space: nowrap;\n cursor: pointer;\n user-select: none;\n}\n.rid-checkbox input {\n margin: 0;\n accent-color: var(--rid-accent);\n}\n\n.rid-sep {\n width: 1px;\n height: 16px;\n background: var(--rid-border);\n margin: 0 4px;\n flex: none;\n}\n\n.rid-spacer {\n flex: 1;\n}\n\n/* ---------------------------------------------------------------- generic toolbars */\n\n.rid-subtoolbar {\n display: flex;\n align-items: center;\n gap: 2px;\n min-height: 28px;\n padding: 0 4px;\n border-bottom: 1px solid var(--rid-border);\n background: var(--rid-toolbar);\n flex: none;\n overflow-x: auto;\n overflow-y: hidden;\n}\n.rid-subtoolbar .rid-input {\n height: 20px;\n}\n\n.rid-tabs {\n display: flex;\n align-items: stretch;\n height: 26px;\n border-bottom: 1px solid var(--rid-border);\n background: var(--rid-toolbar);\n flex: none;\n overflow-x: auto;\n overflow-y: hidden;\n}\n.rid-tab {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 0 10px;\n border: none;\n border-bottom: 2px solid transparent;\n background: transparent;\n color: var(--rid-text-dim);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n}\n.rid-tab:hover {\n background: var(--rid-hover);\n color: var(--rid-text);\n}\n.rid-tab[aria-selected='true'] {\n color: var(--rid-text);\n border-bottom-color: var(--rid-accent);\n}\n\n.rid-chip {\n height: 20px;\n padding: 0 8px;\n border: 1px solid transparent;\n border-radius: 10px;\n background: transparent;\n color: var(--rid-text);\n font: inherit;\n cursor: pointer;\n white-space: nowrap;\n}\n.rid-chip:hover {\n background: var(--rid-hover);\n}\n.rid-chip[aria-pressed='true'] {\n background: var(--rid-selected);\n border-color: var(--rid-accent);\n}\n\n.rid-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 6px;\n height: 100%;\n padding: 16px;\n color: var(--rid-text-dim);\n text-align: center;\n}\n\n.rid-note {\n padding: 6px 8px;\n color: var(--rid-text-dim);\n background: var(--rid-bg-alt);\n border-bottom: 1px solid var(--rid-border);\n font-size: 11px;\n}\n\n/* ---------------------------------------------------------------- split pane */\n\n.rid-split {\n display: flex;\n flex: 1;\n min-height: 0;\n min-width: 0;\n}\n.rid-split.rid-vertical {\n flex-direction: column;\n}\n.rid-split-pane {\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.rid-split-main {\n flex: 1;\n}\n.rid-split-handle {\n flex: none;\n width: 1px;\n background: var(--rid-border);\n position: relative;\n cursor: col-resize;\n}\n.rid-split-handle::after {\n content: '';\n position: absolute;\n inset: 0 -3px;\n}\n.rid-split.rid-vertical > .rid-split-handle {\n width: auto;\n height: 1px;\n cursor: row-resize;\n}\n.rid-split.rid-vertical > .rid-split-handle::after {\n inset: -3px 0;\n}\n\n/* ---------------------------------------------------------------- tables */\n\n.rid-table-wrap {\n flex: 1;\n overflow: auto;\n min-height: 0;\n}\n.rid-table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.rid-table th,\n.rid-table td {\n height: 21px;\n padding: 1px 6px;\n border-right: 1px solid var(--rid-border);\n text-align: left;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n vertical-align: middle;\n}\n.rid-table th {\n position: sticky;\n top: 0;\n z-index: 1;\n background: var(--rid-toolbar);\n border-bottom: 1px solid var(--rid-border);\n font-weight: normal;\n color: var(--rid-text);\n user-select: none;\n}\n.rid-table th.rid-sortable {\n cursor: pointer;\n}\n.rid-table th.rid-sortable:hover {\n background: var(--rid-hover);\n}\n.rid-table tbody tr:nth-child(even) {\n background: var(--rid-bg-alt);\n}\n.rid-table tbody tr:hover {\n background: var(--rid-hover);\n}\n.rid-table tbody tr.rid-selected {\n background: var(--rid-selected);\n}\n.rid-table td.rid-edit {\n padding: 0;\n}\n.rid-table td.rid-edit input {\n width: 100%;\n height: 20px;\n border: 1px solid var(--rid-focus);\n border-radius: 0;\n background: var(--rid-input);\n color: var(--rid-text);\n font: inherit;\n padding: 0 5px;\n outline: none;\n}\n\n/* ---------------------------------------------------------------- dialogs/menus */\n\n.rid-menu {\n position: fixed;\n min-width: 180px;\n padding: 4px 0;\n background: var(--rid-bg);\n border: 1px solid var(--rid-border);\n border-radius: 6px;\n box-shadow: var(--rid-shadow);\n pointer-events: auto;\n z-index: 100;\n}\n.rid-menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n height: 24px;\n padding: 0 12px;\n border: none;\n background: transparent;\n color: var(--rid-text);\n font: inherit;\n text-align: left;\n cursor: pointer;\n white-space: nowrap;\n}\n.rid-menu-item:hover,\n.rid-menu-item:focus {\n background: var(--rid-selected);\n outline: none;\n}\n.rid-menu-item .rid-menu-hint {\n margin-left: auto;\n color: var(--rid-text-faint);\n}\n.rid-menu-sep {\n height: 1px;\n margin: 4px 0;\n background: var(--rid-border);\n}\n.rid-menu-label {\n padding: 2px 12px;\n color: var(--rid-text-dim);\n font-size: 11px;\n}\n.rid-menu-row {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 2px 8px;\n}\n\n.rid-dialog-backdrop {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.25);\n pointer-events: auto;\n z-index: 200;\n}\n.rid-dialog {\n min-width: 300px;\n max-width: 440px;\n padding: 16px;\n background: var(--rid-bg);\n border: 1px solid var(--rid-border);\n border-radius: 8px;\n box-shadow: var(--rid-shadow);\n}\n.rid-dialog h3 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n}\n.rid-dialog p {\n margin: 0 0 14px;\n color: var(--rid-text-dim);\n}\n.rid-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n.rid-form-grid {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 6px 10px;\n align-items: center;\n margin-bottom: 14px;\n}\n\n/* ---------------------------------------------------------------- value rendering */\n\n.rid-v-string {\n color: var(--rid-string);\n}\n.rid-v-number,\n.rid-v-bigint,\n.rid-v-boolean {\n color: var(--rid-number);\n}\n.rid-v-null,\n.rid-v-undefined {\n color: var(--rid-null);\n}\n.rid-v-symbol {\n color: var(--rid-string);\n}\n.rid-v-function {\n font-style: italic;\n}\n.rid-v-function .rid-v-fkw {\n color: var(--rid-keyword);\n font-style: italic;\n}\n.rid-v-key {\n color: var(--rid-prop);\n}\n.rid-v-key.rid-v-dim {\n color: var(--rid-prop-dim);\n}\n.rid-v-regexp {\n color: var(--rid-string);\n}\n.rid-v-node {\n color: var(--rid-tag);\n cursor: pointer;\n}\n.rid-v-node:hover {\n background: var(--rid-selected);\n}\n.rid-v-faint {\n color: var(--rid-text-faint);\n}\n.rid-v-italic {\n font-style: italic;\n}\n\n.rid-obj {\n font-family: var(--rid-mono);\n font-size: var(--rid-fs-mono);\n}\n.rid-obj-row {\n display: flex;\n align-items: flex-start;\n min-height: 16px;\n white-space: pre;\n}\n.rid-obj-toggle {\n display: inline-flex;\n width: 12px;\n flex: none;\n cursor: pointer;\n color: var(--rid-text-dim);\n user-select: none;\n}\n.rid-obj-toggle svg {\n transition: transform 0.08s;\n}\n.rid-obj-toggle[data-open='true'] svg {\n transform: rotate(90deg);\n}\n.rid-obj-children {\n padding-left: 12px;\n}\n.rid-obj-summary {\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.rid-obj-getter {\n color: var(--rid-text-dim);\n cursor: pointer;\n text-decoration: underline dotted;\n}\n\n.rid-chevron {\n display: inline-block;\n width: 0;\n height: 0;\n border-left: 4px solid currentColor;\n border-top: 3.5px solid transparent;\n border-bottom: 3.5px solid transparent;\n transition: transform 0.08s;\n}\n.rid-chevron.rid-open {\n transform: rotate(90deg);\n}\n\n.rid-kv {\n display: grid;\n grid-template-columns: minmax(120px, max-content) 1fr;\n gap: 2px 12px;\n padding: 4px 12px 8px 24px;\n font-family: var(--rid-mono);\n font-size: var(--rid-fs-mono);\n}\n.rid-kv dt {\n color: var(--rid-text-dim);\n font-weight: 600;\n word-break: break-all;\n}\n.rid-kv dd {\n margin: 0;\n word-break: break-all;\n user-select: text;\n}\n\n.rid-section-title {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n height: 24px;\n padding: 0 8px;\n border: none;\n border-bottom: 1px solid var(--rid-border);\n background: var(--rid-bg-alt);\n color: var(--rid-text);\n font: inherit;\n font-weight: 600;\n cursor: pointer;\n text-align: left;\n}\n",".rid-panel {\n position: fixed;\n display: flex;\n flex-direction: column;\n background: var(--rid-bg);\n color: var(--rid-text);\n pointer-events: auto;\n overflow: hidden;\n box-shadow: 0 0 0 1px var(--rid-border-strong);\n}\n.rid-panel[data-dock='bottom'] {\n left: 0;\n right: 0;\n bottom: 0;\n}\n.rid-panel[data-dock='right'] {\n top: 0;\n right: 0;\n bottom: 0;\n}\n.rid-panel[data-dock='floating'] {\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3), 0 0 0 1px var(--rid-border-strong);\n}\n.rid-panel[data-maximized='true'] {\n inset: 0 !important;\n width: auto !important;\n height: auto !important;\n border-radius: 0;\n}\n.rid-panel[data-minimized='true'] {\n height: auto !important;\n}\n.rid-panel[data-minimized='true'][data-dock='right'] {\n bottom: auto;\n}\n\n.rid-resize {\n position: absolute;\n z-index: 10;\n}\n.rid-resize-top {\n top: 0;\n left: 0;\n right: 0;\n height: 5px;\n cursor: ns-resize;\n}\n.rid-resize-left {\n left: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n}\n.rid-resize-right {\n right: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n cursor: ew-resize;\n}\n.rid-resize-bottom {\n bottom: 0;\n left: 0;\n right: 0;\n height: 5px;\n cursor: ns-resize;\n}\n.rid-resize-corner {\n right: 0;\n bottom: 0;\n width: 12px;\n height: 12px;\n cursor: nwse-resize;\n}\n\n.rid-main-toolbar {\n display: flex;\n align-items: stretch;\n height: 30px;\n border-bottom: 1px solid var(--rid-border);\n background: var(--rid-toolbar);\n flex: none;\n user-select: none;\n}\n.rid-main-toolbar[data-draggable='true'] {\n cursor: move;\n}\n.rid-main-toolbar .rid-icon-btn {\n align-self: center;\n cursor: pointer;\n}\n.rid-tool-group {\n display: flex;\n align-items: center;\n gap: 1px;\n padding: 0 2px;\n flex: none;\n}\n.rid-nav {\n display: flex;\n align-items: stretch;\n overflow-x: auto;\n overflow-y: hidden;\n scrollbar-width: none;\n min-width: 0;\n}\n.rid-nav::-webkit-scrollbar {\n display: none;\n}\n.rid-nav .rid-tab {\n cursor: pointer;\n padding: 0 12px;\n}\n.rid-counters {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 0 6px;\n font-size: 11px;\n cursor: pointer;\n border: none;\n background: transparent;\n color: var(--rid-text);\n font-family: inherit;\n}\n.rid-counters:hover {\n background: var(--rid-hover);\n}\n.rid-counter {\n display: inline-flex;\n align-items: center;\n gap: 2px;\n}\n\n.rid-workspace {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n position: relative;\n}\n.rid-panel-body {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n.rid-panel-body[hidden] {\n display: none;\n}\n\n.rid-statusbar {\n display: flex;\n align-items: center;\n gap: 12px;\n height: 20px;\n padding: 0 8px;\n border-top: 1px solid var(--rid-border);\n background: var(--rid-toolbar);\n color: var(--rid-text-dim);\n font-size: 11px;\n flex: none;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.rid-launcher {\n position: fixed;\n right: 16px;\n bottom: 16px;\n width: 36px;\n height: 36px;\n display: flex;\n align-items: center;\n justify-content: center;\n border: 1px solid var(--rid-border-strong);\n border-radius: 50%;\n background: var(--rid-toolbar);\n color: var(--rid-accent);\n box-shadow: var(--rid-shadow);\n cursor: pointer;\n pointer-events: auto;\n opacity: 0.85;\n transition: opacity 0.15s, transform 0.15s;\n}\n.rid-launcher:hover {\n opacity: 1;\n transform: scale(1.06);\n}\n.rid-launcher .rid-launcher-badge {\n position: absolute;\n top: -4px;\n right: -4px;\n min-width: 16px;\n height: 16px;\n padding: 0 4px;\n border-radius: 8px;\n background: var(--rid-error-text);\n color: #fff;\n font-size: 10px;\n line-height: 16px;\n text-align: center;\n}\n\n.rid-crash {\n padding: 16px;\n color: var(--rid-error-text);\n font-family: var(--rid-mono);\n white-space: pre-wrap;\n overflow: auto;\n}\n\n/* Settings panel */\n.rid-settings {\n overflow: auto;\n padding: 12px 20px 24px;\n flex: 1;\n}\n.rid-settings h2 {\n margin: 0 0 12px;\n font-size: 15px;\n font-weight: 500;\n}\n.rid-settings h3 {\n margin: 18px 0 8px;\n font-size: 12px;\n font-weight: 600;\n color: var(--rid-text-dim);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.rid-settings-row {\n display: flex;\n align-items: center;\n gap: 10px;\n min-height: 26px;\n}\n.rid-settings-row > label:first-child {\n min-width: 160px;\n color: var(--rid-text);\n}\n.rid-kbd {\n display: inline-block;\n padding: 0 5px;\n border: 1px solid var(--rid-border-strong);\n border-radius: 3px;\n background: var(--rid-bg-alt);\n font-family: var(--rid-mono);\n font-size: 11px;\n}\n","/* ---------------------------------------------------------------- overlay */\n.rid-overlay {\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: 1;\n}\n.rid-overlay-tip {\n position: fixed;\n max-width: 320px;\n padding: 6px 8px;\n border-radius: 4px;\n background: #fff;\n color: #303942;\n box-shadow: 0 1px 6px rgba(0, 0, 0, 0.3);\n font: 11px/1.4 var(--rid-font);\n pointer-events: none;\n white-space: nowrap;\n}\n.rid-root[data-theme='dark'] .rid-overlay-tip {\n background: #292a2d;\n color: #e3e3e3;\n}\n.rid-overlay-tip-head {\n display: flex;\n gap: 0;\n align-items: baseline;\n font-family: var(--rid-mono);\n}\n.rid-ot-tag {\n color: #881280;\n font-weight: 600;\n}\n.rid-root[data-theme='dark'] .rid-ot-tag {\n color: #5db0d7;\n}\n.rid-ot-id {\n color: #1a1aa6;\n}\n.rid-root[data-theme='dark'] .rid-ot-id {\n color: #f29766;\n}\n.rid-ot-cls {\n color: #1a1aa6;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.rid-root[data-theme='dark'] .rid-ot-cls {\n color: #9bbbdc;\n}\n.rid-ot-size {\n margin-left: 12px;\n color: #80868b;\n}\n.rid-overlay-tip-rows {\n display: grid;\n grid-template-columns: auto auto;\n gap: 0 12px;\n margin-top: 4px;\n padding-top: 4px;\n border-top: 1px solid rgba(128, 128, 128, 0.25);\n}\n.rid-overlay-tip-rows span:nth-child(odd) {\n color: #80868b;\n}\n.rid-overlay-hint {\n margin-top: 4px;\n color: #1a73e8;\n}\n\n/* ---------------------------------------------------------------- elements panel */\n.rid-elements {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.rid-elements-main {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-dom-tree {\n flex: 1;\n overflow: auto;\n min-height: 0;\n outline: none;\n padding: 2px 0;\n}\n.rid-dom-row {\n position: absolute;\n left: 0;\n right: 0;\n height: 18px;\n line-height: 18px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: default;\n padding-right: 8px;\n}\n.rid-dom-row.rid-hovered {\n background: var(--rid-hover);\n}\n.rid-dom-row.rid-selected {\n background: var(--rid-selected-inactive);\n}\n.rid-dom-tree:focus-within .rid-dom-row.rid-selected {\n background: var(--rid-selected);\n}\n.rid-dom-toggle {\n position: absolute;\n width: 12px;\n top: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n height: 18px;\n color: var(--rid-text-dim);\n cursor: pointer;\n}\n.rid-dom-tag {\n color: var(--rid-tag);\n}\n.rid-dom-tagname {\n color: var(--rid-tag);\n}\n.rid-dom-attr {\n color: var(--rid-attr-name);\n}\n.rid-dom-value {\n color: var(--rid-attr-value);\n}\n.rid-dom-text {\n color: var(--rid-text);\n}\n.rid-dom-comment {\n color: var(--rid-comment);\n}\n.rid-dom-shadow {\n color: var(--rid-text-dim);\n}\n.rid-dom-ellipsis {\n display: inline-block;\n padding: 0 3px;\n margin: 0 1px;\n line-height: 11px;\n border-radius: 6px;\n background: var(--rid-hover);\n color: var(--rid-text-dim);\n cursor: pointer;\n}\n.rid-dom-dollar {\n color: var(--rid-text-faint);\n}\n.rid-inline-edit {\n height: 16px;\n padding: 0 2px;\n margin: 0;\n border: 1px solid var(--rid-focus);\n border-radius: 2px;\n background: var(--rid-input);\n color: var(--rid-text);\n outline: none;\n box-shadow: var(--rid-shadow);\n vertical-align: baseline;\n max-width: 100%;\n}\n.rid-html-editor {\n display: block;\n width: 400px;\n max-width: 70vw;\n height: 220px;\n padding: 6px;\n margin-bottom: 12px;\n resize: vertical;\n white-space: pre;\n}\n.rid-dom-search-btn {\n position: absolute;\n top: 2px;\n right: 10px;\n z-index: 2;\n background: var(--rid-toolbar);\n border: 1px solid var(--rid-border);\n}\n.rid-breadcrumbs {\n display: flex;\n height: 22px;\n align-items: center;\n border-top: 1px solid var(--rid-border);\n background: var(--rid-toolbar);\n overflow-x: auto;\n overflow-y: hidden;\n white-space: nowrap;\n flex: none;\n scrollbar-width: none;\n}\n.rid-crumb {\n padding: 0 6px;\n height: 100%;\n display: inline-flex;\n align-items: center;\n cursor: pointer;\n color: var(--rid-text);\n}\n.rid-crumb:hover {\n background: var(--rid-hover);\n}\n.rid-crumb.rid-active {\n background: var(--rid-selected);\n}\n\n.rid-elements-side {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-elements-side-body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n/* ---------------------------------------------------------------- styles pane */\n.rid-styles {\n display: flex;\n flex-direction: column;\n min-height: 0;\n flex: 1;\n}\n.rid-styles-body {\n flex: 1;\n overflow: auto;\n}\n.rid-cls-bar {\n padding: 4px 8px;\n border-bottom: 1px solid var(--rid-border);\n background: var(--rid-bg-alt);\n}\n.rid-cls-bar .rid-input {\n width: 100%;\n}\n.rid-cls-list {\n display: flex;\n flex-wrap: wrap;\n gap: 2px 10px;\n margin-top: 4px;\n font-family: var(--rid-mono);\n font-size: var(--rid-fs-mono);\n}\n.rid-css-rule {\n padding: 4px 8px 4px 8px;\n border-bottom: 1px solid var(--rid-border);\n line-height: 16px;\n}\n.rid-css-media {\n color: var(--rid-text-dim);\n font-size: 10.5px;\n}\n.rid-css-rule-head {\n display: flex;\n align-items: baseline;\n gap: 4px;\n}\n.rid-css-selector {\n color: var(--rid-text);\n word-break: break-word;\n}\n.rid-css-sel-nomatch {\n color: var(--rid-text-faint);\n}\n.rid-css-source {\n margin-left: auto;\n padding-left: 12px;\n color: var(--rid-text-dim);\n text-decoration: underline;\n text-decoration-color: var(--rid-border-strong);\n font-family: var(--rid-font);\n font-size: 11px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 50%;\n}\n.rid-css-decl {\n position: relative;\n padding-left: 18px;\n word-break: break-word;\n}\n.rid-css-toggle {\n position: absolute;\n left: 0;\n top: 2px;\n width: 12px;\n height: 12px;\n margin: 0;\n opacity: 0;\n accent-color: var(--rid-accent);\n}\n.rid-css-decl:hover .rid-css-toggle,\n.rid-css-decl.rid-disabled .rid-css-toggle {\n opacity: 1;\n}\n.rid-css-toggle-space {\n display: inline-block;\n}\n.rid-css-prop {\n color: var(--rid-css-prop);\n cursor: text;\n}\n.rid-css-value {\n color: var(--rid-css-value);\n cursor: text;\n}\n.rid-css-important {\n color: var(--rid-text-dim);\n}\n.rid-css-decl.rid-overridden .rid-css-prop,\n.rid-css-decl.rid-overridden .rid-css-value {\n text-decoration: line-through;\n opacity: 0.6;\n}\n.rid-css-decl.rid-disabled .rid-css-prop,\n.rid-css-decl.rid-disabled .rid-css-value,\n.rid-css-decl.rid-disabled .rid-css-colon {\n color: var(--rid-text-faint);\n text-decoration: line-through;\n}\n.rid-css-rule-end {\n cursor: text;\n}\n.rid-css-swatch {\n position: relative;\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 0 4px -1px 0;\n border: 1px solid rgba(128, 128, 128, 0.6);\n border-radius: 1px;\n cursor: pointer;\n overflow: hidden;\n}\n.rid-css-swatch input {\n position: absolute;\n inset: -4px;\n opacity: 0;\n cursor: pointer;\n}\n.rid-styles-inherited {\n padding: 4px 8px;\n background: var(--rid-bg-alt);\n border-bottom: 1px solid var(--rid-border);\n color: var(--rid-text-dim);\n font-family: var(--rid-font);\n font-size: 11px;\n}\n.rid-styles-note {\n padding: 8px;\n color: var(--rid-text-dim);\n font-family: var(--rid-font);\n font-size: 11px;\n}\n\n/* ---------------------------------------------------------------- computed */\n.rid-computed,\n.rid-layout,\n.rid-props {\n overflow: auto;\n flex: 1;\n}\n.rid-computed .rid-subtoolbar {\n position: sticky;\n top: 0;\n z-index: 1;\n}\n.rid-computed-list {\n padding: 2px 0;\n}\n.rid-computed-row {\n display: flex;\n gap: 8px;\n padding: 1px 8px 1px 16px;\n line-height: 16px;\n}\n.rid-computed-row:hover {\n background: var(--rid-hover);\n}\n.rid-computed-row .rid-css-prop {\n min-width: 45%;\n max-width: 45%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.rid-computed-row .rid-css-value {\n word-break: break-all;\n}\n.rid-computed-row.rid-dim {\n opacity: 0.55;\n}\n\n/* ---------------------------------------------------------------- box model */\n.rid-boxmodel {\n display: flex;\n justify-content: center;\n padding: 12px 8px;\n border-bottom: 1px solid var(--rid-border);\n font-size: 10px;\n color: #222;\n}\n.rid-bm-box {\n position: relative;\n display: grid;\n grid-template-columns: auto 1fr auto;\n grid-template-rows: auto 1fr auto;\n grid-template-areas: 'label top .' 'left mid right' '. bottom .';\n align-items: center;\n justify-items: center;\n padding: 2px 4px;\n border: 1px dashed #808080;\n min-width: 0;\n}\n.rid-bm-box > .rid-bm-box,\n.rid-bm-box > .rid-bm-content {\n grid-area: mid;\n margin: 2px 2px;\n}\n.rid-bm-position {\n background: transparent;\n border-style: dotted;\n color: var(--rid-text);\n}\n.rid-bm-margin {\n background: #f9cc9d;\n}\n.rid-bm-border {\n background: #fddd9b;\n border: 1px solid #000;\n}\n.rid-bm-padding {\n background: #c3d08b;\n}\n.rid-bm-content {\n padding: 6px 10px;\n background: #8cb6c0;\n border: 1px solid #808080;\n white-space: nowrap;\n}\n.rid-bm-label {\n grid-area: label;\n justify-self: start;\n padding-right: 6px;\n font-size: 9.5px;\n}\n.rid-bm-v {\n min-width: 14px;\n padding: 1px 3px;\n text-align: center;\n cursor: default;\n}\n.rid-bm-v:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n.rid-bm-top {\n grid-area: top;\n}\n.rid-bm-bottom {\n grid-area: bottom;\n}\n.rid-bm-left {\n grid-area: left;\n}\n.rid-bm-right {\n grid-area: right;\n}\ninput.rid-bm-input {\n width: 40px;\n height: 15px;\n padding: 0 2px;\n border: 1px solid var(--rid-focus);\n font: inherit;\n text-align: center;\n background: #fff;\n color: #222;\n}\n\n.rid-summary h4 {\n margin: 0;\n padding: 6px 8px 4px;\n font-size: 11px;\n font-weight: 600;\n color: var(--rid-text-dim);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.rid-summary .rid-kv {\n padding-left: 12px;\n}\n.rid-attr-table {\n table-layout: fixed;\n}\n",".rid-console {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-con-list {\n flex: 1;\n overflow: auto;\n min-height: 0;\n font-family: var(--rid-mono);\n font-size: var(--rid-fs-mono);\n cursor: text;\n}\n.rid-con-msg {\n position: relative;\n display: flex;\n align-items: flex-start;\n gap: 4px;\n min-height: 21px;\n padding: 3px 8px 3px 22px;\n border-bottom: 1px solid var(--rid-border);\n border-top: 1px solid transparent;\n margin-top: -1px;\n line-height: 15px;\n word-break: break-word;\n user-select: text;\n cursor: default;\n content-visibility: auto;\n contain-intrinsic-size: auto 21px;\n}\n.rid-con-msg:hover {\n background: var(--rid-bg-alt);\n}\n.rid-con-icon {\n position: absolute;\n left: 6px;\n top: 5px;\n display: flex;\n}\n.rid-con-msg.rid-con-warn {\n background: var(--rid-warn-bg);\n border-color: var(--rid-warn-border);\n color: var(--rid-warn-text);\n z-index: 1;\n}\n.rid-con-msg.rid-con-error {\n background: var(--rid-error-bg);\n border-color: var(--rid-error-border);\n color: var(--rid-error-text);\n z-index: 1;\n}\n.rid-con-msg.rid-con-debug {\n color: var(--rid-text-dim);\n}\n.rid-con-k-system {\n color: var(--rid-text-dim);\n font-style: italic;\n}\n.rid-con-k-input .rid-con-code {\n color: var(--rid-accent);\n white-space: pre-wrap;\n}\n.rid-con-k-input,\n.rid-con-k-result {\n border-bottom-color: transparent;\n}\n.rid-con-k-result {\n border-bottom-color: var(--rid-border);\n}\n.rid-con-body {\n flex: 1;\n min-width: 0;\n white-space: pre-wrap;\n}\n.rid-con-body .rid-inline-obj {\n display: inline-block;\n vertical-align: top;\n}\n.rid-con-body .rid-obj-row {\n white-space: pre-wrap;\n}\n.rid-con-repeat {\n flex: none;\n min-width: 16px;\n height: 14px;\n padding: 0 4px;\n margin-top: 1px;\n border-radius: 7px;\n background: var(--rid-text-dim);\n color: var(--rid-bg);\n font-family: var(--rid-font);\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n}\n.rid-con-error .rid-con-repeat {\n background: var(--rid-error-text);\n}\n.rid-con-warn .rid-con-repeat {\n background: var(--rid-warn-icon);\n}\n.rid-con-source {\n flex: none;\n margin-left: 12px;\n max-width: 220px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--rid-text-dim);\n text-decoration: underline;\n text-decoration-color: var(--rid-border-strong);\n font-family: var(--rid-font);\n font-size: 11px;\n}\n.rid-con-time {\n color: var(--rid-text-faint);\n}\n.rid-con-group {\n cursor: pointer;\n user-select: none;\n}\n.rid-con-stack-toggle {\n cursor: pointer;\n user-select: none;\n}\n.rid-con-stack {\n color: inherit;\n opacity: 0.85;\n white-space: pre;\n overflow-x: auto;\n}\n.rid-con-stack-text {\n white-space: pre-wrap;\n}\n.rid-con-table {\n max-width: 100%;\n overflow: auto;\n margin: 2px 0;\n}\n.rid-con-table .rid-table {\n width: auto;\n min-width: 300px;\n table-layout: auto;\n border: 1px solid var(--rid-border);\n}\n.rid-con-table .rid-table th {\n position: static;\n}\n\n.rid-con-input {\n position: relative;\n display: flex;\n align-items: flex-start;\n min-height: 24px;\n padding: 3px 8px 3px 22px;\n}\n.rid-con-prompt {\n position: absolute;\n left: 5px;\n top: 5px;\n}\n.rid-con-editor {\n position: relative;\n flex: 1;\n}\n.rid-con-editor textarea {\n display: block;\n width: 100%;\n min-height: 17px;\n padding: 1px 0;\n border: none;\n outline: none;\n resize: none;\n background: transparent;\n color: var(--rid-text);\n line-height: 15px;\n overflow: hidden;\n}\n.rid-con-suggest {\n position: absolute;\n left: 0;\n bottom: 100%;\n max-height: 180px;\n min-width: 200px;\n overflow: auto;\n background: var(--rid-bg);\n border: 1px solid var(--rid-border);\n border-radius: 4px;\n box-shadow: var(--rid-shadow);\n z-index: 5;\n}\n.rid-con-suggest > div {\n padding: 1px 8px;\n cursor: pointer;\n white-space: nowrap;\n}\n.rid-con-suggest > div.rid-active {\n background: var(--rid-selected);\n}\n",".rid-network {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-net-table td {\n cursor: default;\n}\n.rid-net-table tbody tr.rid-net-failed td {\n color: var(--rid-error-text);\n}\n.rid-net-table tbody tr.rid-net-pending td {\n color: var(--rid-pending);\n}\n.rid-net-table tbody tr.rid-net-preserved td {\n opacity: 0.7;\n}\n.rid-net-table tbody tr.rid-selected td {\n color: var(--rid-text);\n}\n.rid-net-icon {\n display: inline-block;\n width: 10px;\n height: 12px;\n margin-right: 6px;\n vertical-align: -2px;\n border-radius: 2px;\n background: var(--rid-text-faint);\n opacity: 0.8;\n}\n.rid-net-icon-fetch,\n.rid-net-icon-xhr {\n background: #1a73e8;\n}\n.rid-net-icon-js {\n background: #f9ab00;\n}\n.rid-net-icon-css {\n background: #a142f4;\n}\n.rid-net-icon-doc {\n background: #4285f4;\n border-radius: 0 4px 0 0;\n}\n.rid-net-icon-img {\n background: #1e8e3e;\n}\n.rid-net-icon-font {\n background: #d93025;\n}\n.rid-net-icon-media {\n background: #e52592;\n}\n.rid-net-icon-ws {\n background: #12b5cb;\n border-radius: 50%;\n width: 10px;\n height: 10px;\n}\n.rid-net-icon-manifest {\n background: #5f6368;\n}\n.rid-net-wf-cell {\n position: relative;\n}\n.rid-net-wf {\n position: absolute;\n top: 7px;\n height: 7px;\n min-width: 2px;\n border-radius: 1px;\n background: #1a73e8;\n}\n.rid-net-wf.rid-pending {\n background: repeating-linear-gradient(45deg, #9aa0a6 0 4px, transparent 4px 8px);\n}\n.rid-net-failed .rid-net-wf {\n background: var(--rid-error-text);\n}\n\n.rid-net-details {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-net-details-body {\n flex: 1;\n min-height: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n.rid-net-details-body > div {\n flex: none;\n}\n.rid-net-raw {\n margin: 0;\n padding: 8px 12px;\n white-space: pre-wrap;\n word-break: break-all;\n user-select: text;\n overflow: auto;\n}\n.rid-net-html {\n flex: 1;\n width: 100%;\n min-height: 300px;\n border: none;\n background: #fff;\n}\n.rid-net-image {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 20px;\n}\n.rid-net-image img {\n max-width: 100%;\n max-height: 300px;\n background: repeating-conic-gradient(#ddd 0 25%, #fff 0 50%) 0 0 / 12px 12px;\n border: 1px solid var(--rid-border);\n}\n.rid-net-timing {\n width: 100%;\n margin-top: 8px;\n border-collapse: collapse;\n}\n.rid-net-timing td {\n padding: 3px 6px;\n white-space: nowrap;\n}\n.rid-link-btn {\n color: var(--rid-accent);\n font-weight: normal;\n cursor: pointer;\n}\n.rid-link-btn:hover {\n text-decoration: underline;\n}\n.rid-ws-send td {\n background: rgba(26, 115, 232, 0.08);\n}\n.rid-net-footer .rid-sep {\n height: 12px;\n}\n",".rid-application {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.rid-app-nav {\n flex: 1;\n overflow: auto;\n padding: 4px 0;\n background: var(--rid-bg-alt);\n}\n.rid-app-nav-title {\n padding: 6px 10px 2px;\n font-weight: 600;\n color: var(--rid-text-dim);\n font-size: 11px;\n}\n.rid-app-nav-item {\n display: flex;\n align-items: center;\n gap: 6px;\n width: 100%;\n min-height: 22px;\n padding: 2px 10px 2px 18px;\n border: none;\n background: transparent;\n color: var(--rid-text);\n font: inherit;\n text-align: left;\n cursor: pointer;\n flex-wrap: wrap;\n}\n.rid-app-nav-item:hover {\n background: var(--rid-hover);\n}\n.rid-app-nav-item.rid-active {\n background: var(--rid-selected);\n}\n.rid-app-origin {\n flex-basis: 100%;\n padding-left: 19px;\n color: var(--rid-text-faint);\n font-size: 10.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.rid-app-main {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-storage {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n}\n.rid-storage-preview {\n flex: 1;\n overflow: auto;\n min-height: 0;\n}\n",".rid-device-bar {\n position: fixed;\n top: 0;\n left: 0;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 0 8px;\n background: var(--rid-toolbar);\n border-bottom: 1px solid var(--rid-border);\n color: var(--rid-text);\n pointer-events: auto;\n overflow-x: auto;\n white-space: nowrap;\n z-index: 0;\n}\n.rid-device-num {\n width: 56px;\n text-align: center;\n}\n.rid-device-handle {\n position: fixed;\n pointer-events: auto;\n background: var(--rid-border-strong);\n border-radius: 3px;\n opacity: 0.6;\n}\n.rid-device-handle:hover {\n opacity: 1;\n background: var(--rid-accent);\n}\n.rid-device-handle-r {\n width: 8px;\n cursor: ew-resize;\n}\n.rid-device-handle-b {\n height: 8px;\n cursor: ns-resize;\n}\n.rid-device-handle-c {\n width: 10px;\n height: 10px;\n cursor: nwse-resize;\n}\n.rid-device-size {\n position: fixed;\n text-align: center;\n color: var(--rid-text-dim);\n font-size: 11px;\n pointer-events: none;\n}\n.rid-root-dialog .rid-dialog-backdrop {\n position: fixed;\n}\n.rid-preset-list {\n max-height: 160px;\n overflow: auto;\n margin-bottom: 12px;\n border: 1px solid var(--rid-border);\n border-radius: 4px;\n padding: 4px;\n}\n.rid-preset-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 2px 4px;\n}\n","import base from './base.css?inline';\nimport container from './container.css?inline';\nimport elements from './elements.css?inline';\nimport consoleCss from './console.css?inline';\nimport network from './network.css?inline';\nimport application from './application.css?inline';\nimport device from './device.css?inline';\n\nexport const STYLES = [base, container, elements, consoleCss, network, application, device].join('\\n');\n","/**\n * Storage helpers that use the *original* Storage methods so devtools' own\n * persistence never shows up as application activity.\n */\nexport const INTERNAL_PREFIX = '__rid_';\n\ntype Fns = { get: Storage['getItem']; set: Storage['setItem']; remove: Storage['removeItem'] };\nlet originals: Fns | null = null;\n\nfunction fns(): Fns | null {\n if (typeof Storage === 'undefined') return null;\n if (!originals) {\n originals = {\n get: Storage.prototype.getItem,\n set: Storage.prototype.setItem,\n remove: Storage.prototype.removeItem,\n };\n }\n return originals;\n}\n\n/** Must be called before any Storage patching so we keep the real methods. */\nexport function captureStorageOriginals(): void {\n fns();\n}\n\nfunction area(kind: 'local' | 'session'): Storage | null {\n try {\n return kind === 'local' ? window.localStorage : window.sessionStorage;\n } catch {\n return null;\n }\n}\n\nexport function readInternal<T>(key: string, fallback: T, kind: 'local' | 'session' = 'local'): T {\n const f = fns();\n const s = area(kind);\n if (!f || !s) return fallback;\n try {\n const raw = f.get.call(s, INTERNAL_PREFIX + key);\n return raw == null ? fallback : (JSON.parse(raw) as T);\n } catch {\n return fallback;\n }\n}\n\nexport function writeInternal(key: string, value: unknown, kind: 'local' | 'session' = 'local'): void {\n const f = fns();\n const s = area(kind);\n if (!f || !s) return;\n try {\n if (value === undefined) f.remove.call(s, INTERNAL_PREFIX + key);\n else f.set.call(s, INTERNAL_PREFIX + key, JSON.stringify(value));\n } catch {\n // quota exceeded or storage disabled — ignore\n }\n}\n\nexport function isInternalKey(key: string): boolean {\n return key.startsWith(INTERNAL_PREFIX);\n}\n","import { create } from 'zustand';\nimport type { DockPosition, PanelId, ThemeSetting } from '../types';\nimport { readInternal, writeInternal } from '../utils/safeStorage';\n\nexport interface FloatingRect {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface DevToolsSettings {\n dock: DockPosition;\n theme: ThemeSetting;\n bottomHeight: number;\n rightWidth: number;\n floating: FloatingRect;\n activePanel: PanelId;\n preserveConsoleLog: boolean;\n preserveNetworkLog: boolean;\n disableCache: boolean;\n consoleTimestamps: boolean;\n groupSimilar: boolean;\n shortcutOverride: string | null;\n /** Panels hidden by the user from the Settings panel */\n hiddenPanels: string[];\n elementsSidebarWidth: number;\n networkDetailWidth: number;\n}\n\ninterface DevToolsState extends DevToolsSettings {\n open: boolean;\n minimized: boolean;\n maximized: boolean;\n pickerActive: boolean;\n deviceMode: boolean;\n systemDark: boolean;\n set: (patch: Partial<DevToolsState>) => void;\n setOpen: (open: boolean) => void;\n toggle: () => void;\n updateSettings: (patch: Partial<DevToolsSettings>) => void;\n resetSettings: () => void;\n}\n\nconst SETTINGS_KEY = 'settings';\n\nexport const defaultSettings: DevToolsSettings = {\n dock: 'bottom',\n theme: 'system',\n bottomHeight: 360,\n rightWidth: 520,\n floating: { x: 80, y: 80, width: 820, height: 480 },\n activePanel: 'elements',\n preserveConsoleLog: false,\n preserveNetworkLog: false,\n disableCache: false,\n consoleTimestamps: false,\n groupSimilar: true,\n shortcutOverride: null,\n hiddenPanels: [],\n elementsSidebarWidth: 340,\n networkDetailWidth: 520,\n};\n\nconst SETTING_KEYS = Object.keys(defaultSettings) as (keyof DevToolsSettings)[];\n\nfunction pickSettings(s: Partial<DevToolsState>): Partial<DevToolsSettings> {\n const out: Partial<DevToolsSettings> = {};\n for (const k of SETTING_KEYS) if (k in s) (out as any)[k] = (s as any)[k];\n return out;\n}\n\nexport const useDevtools = create<DevToolsState>()((set, get) => ({\n ...defaultSettings,\n open: false,\n minimized: false,\n maximized: false,\n pickerActive: false,\n deviceMode: false,\n systemDark: false,\n set: (patch) => set(patch),\n setOpen: (open) => set({ open, minimized: false, pickerActive: open ? get().pickerActive : false }),\n toggle: () => get().setOpen(!get().open),\n updateSettings: (patch) => {\n set(patch);\n persistSettings();\n },\n resetSettings: () => {\n set({ ...defaultSettings });\n persistSettings();\n },\n}));\n\nlet persistTimer: ReturnType<typeof setTimeout> | undefined;\nexport function persistSettings(): void {\n clearTimeout(persistTimer);\n persistTimer = setTimeout(() => {\n const s = useDevtools.getState();\n writeInternal(SETTINGS_KEY, { ...pickSettings(s), open: s.open });\n }, 150);\n}\n\n/**\n * Loads persisted settings. Component props act as defaults (like Chrome DevTools,\n * the user's last choices are remembered and win over the initial configuration).\n */\nexport function hydrateSettings(defaults: Partial<DevToolsSettings> & { open?: boolean }): void {\n const saved = readInternal<(Partial<DevToolsSettings> & { open?: boolean }) | null>(SETTINGS_KEY, null);\n const cleanDefaults: Partial<DevToolsSettings> = {};\n for (const [k, v] of Object.entries(pickSettings(defaults as any))) if (v !== undefined) (cleanDefaults as any)[k] = v;\n const merged: Partial<DevToolsState> = {\n ...defaultSettings,\n ...cleanDefaults,\n ...(saved ? pickSettings(saved as any) : {}),\n open: typeof saved?.open === 'boolean' ? saved.open : !!defaults.open,\n };\n useDevtools.setState(merged);\n}\n\nuseDevtools.subscribe((s, prev) => {\n if (s.open !== prev.open) persistSettings();\n});\n","import { create } from 'zustand';\nimport type { ConsoleEntry, ConsoleLevel } from '../types';\nimport type { DevToolsEvents } from '../core/eventBus';\nimport { readInternal, writeInternal } from '../utils/safeStorage';\n\nexport type LevelFilter = 'verbose' | 'info' | 'warnings' | 'errors';\n\ninterface ConsoleState {\n entries: ConsoleEntry[];\n max: number;\n filterText: string;\n levels: Record<LevelFilter, boolean>;\n /** user-toggled group collapse overrides (group-start entry id -> collapsed) */\n groupToggles: Record<number, boolean>;\n history: string[];\n clear: () => void;\n setFilterText: (t: string) => void;\n toggleLevel: (l: LevelFilter) => void;\n setLevels: (l: Record<LevelFilter, boolean>) => void;\n toggleGroup: (id: number, collapsed: boolean) => void;\n pushHistory: (cmd: string) => void;\n}\n\nconst HISTORY_KEY = 'console-history';\n\nexport const levelToFilter = (l: ConsoleLevel): LevelFilter =>\n l === 'debug' ? 'verbose' : l === 'warn' ? 'warnings' : l === 'error' ? 'errors' : 'info';\n\nexport const useConsole = create<ConsoleState>()((set, get) => ({\n entries: [],\n max: 1000,\n filterText: '',\n levels: { verbose: false, info: true, warnings: true, errors: true },\n groupToggles: {},\n history: [],\n clear: () => {\n groupStack = [];\n pending = [];\n set({ entries: [], groupToggles: {} });\n },\n setFilterText: (filterText) => set({ filterText }),\n toggleLevel: (l) => set({ levels: { ...get().levels, [l]: !get().levels[l] } }),\n setLevels: (levels) => set({ levels }),\n toggleGroup: (id, collapsed) => set({ groupToggles: { ...get().groupToggles, [id]: collapsed } }),\n pushHistory: (cmd) => {\n const h = get().history.filter((c) => c !== cmd);\n h.push(cmd);\n const history = h.slice(-200);\n set({ history });\n writeInternal(HISTORY_KEY, history);\n },\n}));\n\nexport function loadConsoleHistory(): void {\n useConsole.setState({ history: readInternal<string[]>(HISTORY_KEY, []) });\n}\n\n/* ---------------------------------------------------------- ingestion */\n\nlet nextEntryId = 1;\nlet groupStack: number[] = [];\nlet pending: ConsoleEntry[] = [];\nlet flushTimer: ReturnType<typeof setTimeout> | undefined;\nlet groupSimilar = true;\n\nexport function setGroupSimilar(v: boolean): void {\n groupSimilar = v;\n}\n\nconst isPrimitive = (v: unknown) => v === null || (typeof v !== 'object' && typeof v !== 'function');\n\nfunction sameArgs(a: unknown[], b: unknown[]): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!isPrimitive(a[i]) || !Object.is(a[i], b[i])) return false;\n }\n return true;\n}\n\nexport function addConsoleEntry(raw: DevToolsEvents['console:entry']): void {\n if (raw.kind === 'group-end') {\n groupStack.pop();\n return;\n }\n const entry: ConsoleEntry = {\n ...raw,\n id: nextEntryId++,\n depth: groupStack.length,\n groupPath: groupStack.slice(),\n repeat: 1,\n };\n if (raw.kind === 'group-start') groupStack.push(entry.id);\n pending.push(entry);\n scheduleFlush();\n}\n\nfunction scheduleFlush() {\n if (flushTimer !== undefined) return;\n flushTimer = setTimeout(flush, 16);\n}\n\n/** Applies buffered entries to the store. Batched so heavy logging stays cheap. */\nexport function flush(): void {\n flushTimer = undefined;\n if (!pending.length) return;\n const { entries, max } = useConsole.getState();\n const next = entries.slice();\n for (const e of pending) {\n const last = next[next.length - 1];\n if (\n groupSimilar &&\n last &&\n e.kind === 'log' &&\n last.kind === 'log' &&\n last.level === e.level &&\n last.depth === e.depth &&\n last.source === e.source &&\n sameArgs(last.args, e.args)\n ) {\n next[next.length - 1] = { ...last, repeat: last.repeat + 1, timestamp: e.timestamp };\n } else {\n next.push(e);\n }\n }\n pending = [];\n useConsole.setState({ entries: next.length > max ? next.slice(next.length - max) : next });\n}\n\nexport function resetGroupStack(): void {\n groupStack = [];\n}\n\n/* ---------------------------------------------------------- preserve log across reloads */\n\nconst PRESERVE_KEY = 'console-preserved';\n\nexport function stringifyForPreserve(v: unknown): string {\n if (typeof v === 'string') return v;\n if (v instanceof Error) return `${v.name}: ${v.message}`;\n if (typeof Element !== 'undefined' && v instanceof Element) return `<${v.localName}>`;\n if (typeof v === 'function') return `ƒ ${v.name || 'anonymous'}()`;\n try {\n const seen = new WeakSet();\n const s = JSON.stringify(v, (_k, val) => {\n if (typeof val === 'object' && val !== null) {\n if (seen.has(val)) return '[Circular]';\n seen.add(val);\n }\n if (typeof val === 'bigint') return `${val}n`;\n return val;\n });\n return s === undefined ? String(v) : s;\n } catch {\n return String(v);\n }\n}\n\nexport function savePreservedConsole(): void {\n flush();\n const entries = useConsole.getState().entries.slice(-300).map((e) => ({\n ...e,\n args: e.args.map(stringifyForPreserve),\n preserved: true,\n }));\n writeInternal(PRESERVE_KEY, entries, 'session');\n}\n\nexport function restorePreservedConsole(): void {\n const saved = readInternal<ConsoleEntry[] | null>(PRESERVE_KEY, null, 'session');\n writeInternal(PRESERVE_KEY, undefined, 'session');\n if (!saved?.length) return;\n const restored = saved.map((e) => ({ ...e, id: nextEntryId++, groupPath: [], depth: 0 }));\n restored.push({\n id: nextEntryId++,\n level: 'info',\n kind: 'system',\n args: [`Navigated to ${location.href}`],\n timestamp: Date.now(),\n depth: 0,\n groupPath: [],\n repeat: 1,\n });\n useConsole.setState({ entries: [...restored, ...useConsole.getState().entries] });\n}\n","import { createContext, useContext } from 'react';\nimport type { BuiltInPanelId, InspectorOptions, PanelDefinition } from '../types';\n\nexport interface ResolvedConfig {\n panels: BuiltInPanelId[];\n customPanels: PanelDefinition[];\n options: Required<InspectorOptions>;\n shortcut: string | false;\n showLauncher: boolean;\n dockPushesContent: boolean;\n target?: string | HTMLElement;\n}\n\nexport const defaultOptions: Required<InspectorOptions> = {\n enableElementPicker: true,\n enableDeviceToolbar: true,\n enableConsole: true,\n enableNetwork: true,\n enableApplication: true,\n emulateMediaQueries: true,\n};\n\nexport const ConfigContext = createContext<ResolvedConfig>({\n panels: ['elements', 'console', 'network', 'application'],\n customPanels: [],\n options: defaultOptions,\n shortcut: 'Ctrl+Shift+D',\n showLauncher: true,\n dockPushesContent: false,\n});\n\nexport const useConfig = (): ResolvedConfig => useContext(ConfigContext);\n","import { useEffect } from 'react';\nimport { useDevtools } from '../store/devtoolsStore';\nimport type { ResolvedTheme } from '../types';\n\nexport function useResolvedTheme(): ResolvedTheme {\n const theme = useDevtools((s) => s.theme);\n const systemDark = useDevtools((s) => s.systemDark);\n useEffect(() => {\n if (typeof window === 'undefined' || !window.matchMedia) return;\n // Use the prototype getter directly: the device toolbar may emulate media queries.\n const mql = window.matchMedia('(prefers-color-scheme: dark)');\n const update = () => useDevtools.setState({ systemDark: mql.matches });\n update();\n mql.addEventListener?.('change', update);\n return () => mql.removeEventListener?.('change', update);\n }, []);\n if (theme === 'system') return systemDark ? 'dark' : 'light';\n return theme;\n}\n","import { useSyncExternalStore } from 'react';\nimport type { PanelDefinition } from '../types';\n\nconst panels = new Map<string, PanelDefinition>();\nconst listeners = new Set<() => void>();\nlet snapshot: PanelDefinition[] = [];\n\nfunction emit() {\n snapshot = Array.from(panels.values()).sort((a, b) => (a.order ?? 100) - (b.order ?? 100));\n listeners.forEach((l) => l());\n}\n\n/**\n * Registers an additional panel (tab) in the devtools. Returns an unregister function.\n *\n * @example\n * registerPanel({ id: 'redux', title: 'Redux', component: ReduxPanel });\n */\nexport function registerPanel(def: PanelDefinition): () => void {\n panels.set(def.id, def);\n emit();\n return () => {\n if (panels.get(def.id) === def) {\n panels.delete(def.id);\n emit();\n }\n };\n}\n\nexport function useRegisteredPanels(): PanelDefinition[] {\n return useSyncExternalStore(\n (cb) => {\n listeners.add(cb);\n return () => listeners.delete(cb);\n },\n () => snapshot,\n () => snapshot,\n );\n}\n","import type React from 'react';\n\n/**\n * Starts a pointer drag from a pointerdown event. Uses pointer capture so the\n * drag keeps working when the pointer leaves the handle (or crosses iframes).\n */\nexport function startDrag(\n e: React.PointerEvent<Element>,\n onMove: (dx: number, dy: number, ev: PointerEvent) => void,\n onEnd?: (ev: PointerEvent) => void,\n): void {\n if (e.button !== 0) return;\n e.preventDefault();\n e.stopPropagation();\n const target = e.currentTarget as Element;\n const startX = e.clientX;\n const startY = e.clientY;\n const id = e.pointerId;\n try {\n target.setPointerCapture(id);\n } catch {}\n const move = (ev: PointerEvent) => {\n if (ev.pointerId !== id) return;\n onMove(ev.clientX - startX, ev.clientY - startY, ev);\n };\n const up = (ev: PointerEvent) => {\n if (ev.pointerId !== id) return;\n target.removeEventListener('pointermove', move as EventListener);\n target.removeEventListener('pointerup', up as EventListener);\n target.removeEventListener('pointercancel', up as EventListener);\n try {\n target.releasePointerCapture(id);\n } catch {}\n onEnd?.(ev);\n };\n target.addEventListener('pointermove', move as EventListener);\n target.addEventListener('pointerup', up as EventListener);\n target.addEventListener('pointercancel', up as EventListener);\n}\n","export function formatBytes(bytes: number | undefined | null): string {\n if (bytes == null || isNaN(bytes)) return '';\n if (bytes < 1000) return `${bytes} B`;\n if (bytes < 1000 * 1000) return `${(bytes / 1000).toFixed(1)} kB`;\n return `${(bytes / 1000 / 1000).toFixed(1)} MB`;\n}\n\nexport function formatDuration(ms: number | undefined | null): string {\n if (ms == null || isNaN(ms)) return '';\n if (ms < 1000) return `${Math.round(ms)} ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(2)} s`;\n return `${(ms / 60_000).toFixed(1)} min`;\n}\n\nexport function formatClock(ts: number): string {\n const d = new Date(ts);\n const p = (n: number, l = 2) => String(n).padStart(l, '0');\n return `${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}.${p(d.getMilliseconds(), 3)}`;\n}\n\nexport function byteLength(str: string): number {\n if (typeof TextEncoder !== 'undefined') return new TextEncoder().encode(str).length;\n return str.length;\n}\n\nexport function truncate(str: string, max: number): string {\n return str.length > max ? str.slice(0, max) + '…' : str;\n}\n\nexport function tryParseJSON(text: string | undefined): { ok: true; value: unknown } | { ok: false } {\n if (text == null) return { ok: false };\n const t = text.trim();\n if (!t || (t[0] !== '{' && t[0] !== '[' && t[0] !== '\"')) return { ok: false };\n try {\n return { ok: true, value: JSON.parse(t) };\n } catch {\n return { ok: false };\n }\n}\n\nexport function clamp(n: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, n));\n}\n\n/** Extracts \"file.js:12\" from a stack line. */\nexport function sourceFromStack(stack: string | undefined, skip = 0): string | undefined {\n if (!stack) return undefined;\n const lines = stack.split('\\n').filter((l) => /(\\w+:\\/\\/|@|\\bat\\b)/.test(l));\n const line = lines[skip];\n if (!line) return undefined;\n const m = line.match(/([^/\\s()]+?):(\\d+)(?::\\d+)?\\)?\\s*$/);\n if (!m) return undefined;\n return `${m[1].split('?')[0]}:${m[2]}`;\n}\n\nlet uid = 0;\nexport const nextId = (prefix = ''): string => `${prefix}${Date.now().toString(36)}${(uid++).toString(36)}`;\n","import { createContext, useContext } from 'react';\n\nexport interface DevtoolsContextValue {\n shadowRoot: ShadowRoot | null;\n /** The element that panels' popups (menus, dialogs) should be rendered into. */\n container: HTMLElement | null;\n targetSelector?: string | HTMLElement;\n}\n\nexport const DevtoolsContext = createContext<DevtoolsContextValue>({ shadowRoot: null, container: null });\n\nexport const useDevtoolsContext = (): DevtoolsContextValue => useContext(DevtoolsContext);\n","import { useEffect, useLayoutEffect, useRef, useState, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { useDevtoolsContext } from '../../hooks/useDevtoolsContext';\n\nexport interface MenuItem {\n label?: ReactNode;\n hint?: string;\n onSelect?: () => void;\n separator?: boolean;\n disabled?: boolean;\n custom?: ReactNode;\n}\n\ninterface ContextMenuProps {\n x: number;\n y: number;\n items: MenuItem[];\n onClose: () => void;\n}\n\nexport function ContextMenu({ x, y, items, onClose }: ContextMenuProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { container } = useDevtoolsContext();\n const [pos, setPos] = useState({ left: x, top: y });\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n setPos({\n left: Math.max(4, Math.min(x, window.innerWidth - r.width - 4)),\n top: Math.max(4, Math.min(y, window.innerHeight - r.height - 4)),\n });\n (el.querySelector('button') as HTMLButtonElement | null)?.focus();\n }, [x, y]);\n\n useEffect(() => {\n const onDown = (e: Event) => {\n if (ref.current && !e.composedPath().includes(ref.current)) onClose();\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n }\n };\n const t = setTimeout(() => {\n window.addEventListener('pointerdown', onDown, true);\n window.addEventListener('keydown', onKey, true);\n window.addEventListener('blur', onClose);\n });\n return () => {\n clearTimeout(t);\n window.removeEventListener('pointerdown', onDown, true);\n window.removeEventListener('keydown', onKey, true);\n window.removeEventListener('blur', onClose);\n };\n }, [onClose]);\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return;\n e.preventDefault();\n const buttons = Array.from(ref.current?.querySelectorAll<HTMLButtonElement>('button.rid-menu-item:not(:disabled)') ?? []);\n const root = ref.current?.getRootNode() as ShadowRoot | Document;\n const i = buttons.indexOf(root.activeElement as HTMLButtonElement);\n const next = buttons[(i + (e.key === 'ArrowDown' ? 1 : -1) + buttons.length) % buttons.length];\n next?.focus();\n };\n\n const menu = (\n <div ref={ref} className=\"rid-menu\" role=\"menu\" style={pos} onKeyDown={onKeyDown} onContextMenu={(e) => e.preventDefault()}>\n {items.map((it, i) =>\n it.separator ? (\n <div key={i} className=\"rid-menu-sep\" />\n ) : it.custom ? (\n <div key={i}>{it.custom}</div>\n ) : (\n <button\n key={i}\n type=\"button\"\n role=\"menuitem\"\n className=\"rid-menu-item\"\n disabled={it.disabled}\n onClick={() => {\n onClose();\n it.onSelect?.();\n }}\n >\n {it.label}\n {it.hint && <span className=\"rid-menu-hint\">{it.hint}</span>}\n </button>\n ),\n )}\n </div>\n );\n return container ? createPortal(menu, container) : menu;\n}\n\n/** Convenience hook managing context-menu state. */\nexport function useContextMenu() {\n const [menu, setMenu] = useState<{ x: number; y: number; items: MenuItem[] } | null>(null);\n const open = (e: { clientX: number; clientY: number; preventDefault?: () => void }, items: MenuItem[]) => {\n e.preventDefault?.();\n setMenu({ x: e.clientX, y: e.clientY, items });\n };\n const close = () => setMenu(null);\n const element = menu ? <ContextMenu x={menu.x} y={menu.y} items={menu.items} onClose={close} /> : null;\n return { open, close, element };\n}\n","import type { ReactNode } from 'react';\n\nexport interface IconProps {\n size?: number;\n title?: string;\n className?: string;\n}\n\nfunction Svg({ size = 16, title, className, children }: IconProps & { children: ReactNode }) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.3}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden={title ? undefined : true}\n role={title ? 'img' : undefined}\n className={className}\n style={{ flex: 'none', display: 'block' }}\n >\n {title && <title>{title}</title>}\n {children}\n </svg>\n );\n}\n\nexport const InspectIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M6 13.5H2.5v-11h11V6\" />\n <path d=\"M7.5 7.5l2.2 7 1.2-2.9 2.9-1.2z\" fill=\"currentColor\" />\n </Svg>\n);\n\nexport const DeviceIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"1.5\" y=\"2.5\" width=\"8\" height=\"11\" rx=\"1\" />\n <rect x=\"10.5\" y=\"5.5\" width=\"4\" height=\"8\" rx=\"0.8\" />\n <path d=\"M4.5 11.5h2\" />\n </Svg>\n);\n\nexport const CloseIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M4 4l8 8M12 4l-8 8\" />\n </Svg>\n);\n\nexport const GearIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"8\" cy=\"8\" r=\"2\" />\n <path d=\"M8 1.5v2M8 12.5v2M14.5 8h-2M3.5 8h-2M12.6 3.4l-1.4 1.4M4.8 11.2l-1.4 1.4M12.6 12.6l-1.4-1.4M4.8 4.8L3.4 3.4\" />\n </Svg>\n);\n\nexport const KebabIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"8\" cy=\"3.5\" r=\"0.9\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"8\" r=\"0.9\" fill=\"currentColor\" />\n <circle cx=\"8\" cy=\"12.5\" r=\"0.9\" fill=\"currentColor\" />\n </Svg>\n);\n\nexport const ClearIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"8\" cy=\"8\" r=\"5.5\" />\n <path d=\"M4.2 11.8l7.6-7.6\" />\n </Svg>\n);\n\nexport const FilterIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M2 3h12l-4.5 5.5V13l-3-1.5v-3z\" />\n </Svg>\n);\n\nexport const RefreshIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M13 8a5 5 0 1 1-1.5-3.6\" />\n <path d=\"M13 2.5v3h-3\" />\n </Svg>\n);\n\nexport const PlusIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M8 3v10M3 8h10\" />\n </Svg>\n);\n\nexport const TrashIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M3 4.5h10M6.5 4.5V3h3v1.5M4.5 4.5l.6 9h5.8l.6-9\" />\n </Svg>\n);\n\nexport const ErrorIcon = (p: IconProps) => (\n <svg width={p.size ?? 12} height={p.size ?? 12} viewBox=\"0 0 12 12\" style={{ flex: 'none', display: 'block' }} aria-hidden>\n <circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"var(--rid-error-text)\" />\n <path d=\"M3.8 3.8l4.4 4.4M8.2 3.8L3.8 8.2\" stroke=\"#fff\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n);\n\nexport const WarnIcon = (p: IconProps) => (\n <svg width={p.size ?? 12} height={p.size ?? 12} viewBox=\"0 0 12 12\" style={{ flex: 'none', display: 'block' }} aria-hidden>\n <path d=\"M6 .8l5.6 10.2H.4z\" fill=\"var(--rid-warn-icon)\" />\n <path d=\"M6 4.3v3\" stroke=\"#fff\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n <circle cx=\"6\" cy=\"9\" r=\".75\" fill=\"#fff\" />\n </svg>\n);\n\nexport const InfoIcon = (p: IconProps) => (\n <svg width={p.size ?? 12} height={p.size ?? 12} viewBox=\"0 0 12 12\" style={{ flex: 'none', display: 'block' }} aria-hidden>\n <circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"var(--rid-info-icon)\" />\n <path d=\"M6 5.4v3.2\" stroke=\"#fff\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n <circle cx=\"6\" cy=\"3.6\" r=\".75\" fill=\"#fff\" />\n </svg>\n);\n\nexport const SearchIcon = (p: IconProps) => (\n <Svg {...p}>\n <circle cx=\"7\" cy=\"7\" r=\"4.5\" />\n <path d=\"M10.5 10.5L14 14\" />\n </Svg>\n);\n\nexport const DockBottomIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"2\" y=\"2.5\" width=\"12\" height=\"11\" rx=\"1\" />\n <path d=\"M2 9.5h12\" />\n <rect x=\"2\" y=\"9.5\" width=\"12\" height=\"4\" fill=\"currentColor\" stroke=\"none\" opacity=\".45\" />\n </Svg>\n);\n\nexport const DockRightIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"2\" y=\"2.5\" width=\"12\" height=\"11\" rx=\"1\" />\n <path d=\"M9.5 2.5v11\" />\n <rect x=\"9.5\" y=\"2.5\" width=\"4.5\" height=\"11\" fill=\"currentColor\" stroke=\"none\" opacity=\".45\" />\n </Svg>\n);\n\nexport const UndockIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"2\" y=\"2.5\" width=\"12\" height=\"11\" rx=\"1\" />\n <rect x=\"5\" y=\"5.5\" width=\"7\" height=\"5\" rx=\".5\" fill=\"currentColor\" stroke=\"none\" opacity=\".45\" />\n </Svg>\n);\n\nexport const MinimizeIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M3.5 11.5h9\" />\n </Svg>\n);\n\nexport const MaximizeIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"3\" y=\"3\" width=\"10\" height=\"10\" rx=\"1\" />\n </Svg>\n);\n\nexport const RestoreIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"3\" y=\"5\" width=\"8\" height=\"8\" rx=\"1\" />\n <path d=\"M5.5 5V3h7.5v7.5h-2\" />\n </Svg>\n);\n\nexport const RotateIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"5\" y=\"1.5\" width=\"6\" height=\"9\" rx=\"1\" />\n <path d=\"M2 9a6 6 0 0 0 6 5.5M2 9v2.5M2 9h2.5\" />\n </Svg>\n);\n\nexport const RecordIcon = ({ on, ...p }: IconProps & { on?: boolean }) => (\n <svg width={p.size ?? 16} height={p.size ?? 16} viewBox=\"0 0 16 16\" style={{ flex: 'none', display: 'block' }} aria-hidden>\n <circle cx=\"8\" cy=\"8\" r=\"5\" fill={on ? 'var(--rid-error-text)' : 'none'} stroke={on ? 'var(--rid-error-text)' : 'currentColor'} strokeWidth=\"1.3\" />\n </svg>\n);\n\nexport const ChevronRightIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M6 4l4 4-4 4\" />\n </Svg>\n);\n\nexport const PromptIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M5 4l4 4-4 4\" stroke=\"var(--rid-accent)\" strokeWidth=\"1.6\" />\n </Svg>\n);\n\nexport const ResultIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M11 4L7 8l4 4\" stroke=\"var(--rid-text-faint)\" />\n </Svg>\n);\n\nexport const ElementsIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M5.5 4.5L2 8l3.5 3.5M10.5 4.5L14 8l-3.5 3.5\" />\n </Svg>\n);\n\nexport const ConsoleIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"1.5\" y=\"2.5\" width=\"13\" height=\"11\" rx=\"1\" />\n <path d=\"M4 6l2 2-2 2M8 10h4\" />\n </Svg>\n);\n\nexport const NetworkIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M5 2.5v10M2.5 10L5 12.5 7.5 10M11 13.5v-10M8.5 6L11 3.5 13.5 6\" />\n </Svg>\n);\n\nexport const ApplicationIcon = (p: IconProps) => (\n <Svg {...p}>\n <ellipse cx=\"8\" cy=\"4\" rx=\"5.5\" ry=\"2\" />\n <path d=\"M2.5 4v8c0 1.1 2.5 2 5.5 2s5.5-.9 5.5-2V4M2.5 8c0 1.1 2.5 2 5.5 2s5.5-.9 5.5-2\" />\n </Svg>\n);\n\nexport const EditIcon = (p: IconProps) => (\n <Svg {...p}>\n <path d=\"M10.5 2.5l3 3-8 8h-3v-3z\" />\n </Svg>\n);\n\nexport const CopyIcon = (p: IconProps) => (\n <Svg {...p}>\n <rect x=\"5\" y=\"5\" width=\"8.5\" height=\"8.5\" rx=\"1\" />\n <path d=\"M3 10.5H2.5v-8h8V3\" />\n </Svg>\n);\n\nexport const LauncherIcon = (p: IconProps) => (\n <Svg {...p} size={p.size ?? 18}>\n <path d=\"M5.5 4.5L2 8l3.5 3.5M10.5 4.5L14 8l-3.5 3.5M9 3l-2 10\" />\n </Svg>\n);\n","export interface ParsedShortcut {\n key: string;\n ctrlOrMeta: boolean;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n alt: boolean;\n}\n\n/**\n * Parses strings like \"Ctrl+Shift+D\", \"Cmd+Alt+I\", \"Mod+K\".\n * \"Ctrl\" and \"Mod\" match either Ctrl or Cmd (macOS), mirroring Chrome DevTools conventions.\n */\nexport function parseShortcut(input: string): ParsedShortcut | null {\n const parts = input\n .split('+')\n .map((p) => p.trim().toLowerCase())\n .filter(Boolean);\n if (!parts.length) return null;\n const s: ParsedShortcut = { key: '', ctrlOrMeta: false, ctrl: false, meta: false, shift: false, alt: false };\n for (const p of parts) {\n if (p === 'ctrl' || p === 'control' || p === 'mod') s.ctrlOrMeta = true;\n else if (p === 'cmd' || p === 'meta' || p === 'command') s.meta = true;\n else if (p === 'rawctrl') s.ctrl = true;\n else if (p === 'shift') s.shift = true;\n else if (p === 'alt' || p === 'option' || p === 'opt') s.alt = true;\n else s.key = p;\n }\n return s.key ? s : null;\n}\n\nexport function matchesShortcut(e: KeyboardEvent, s: ParsedShortcut): boolean {\n const key = (e.key || '').toLowerCase();\n // e.code handles Alt/Option producing special characters on macOS.\n const code = (e.code || '').toLowerCase().replace(/^key|^digit/, '');\n if (key !== s.key && code !== s.key) return false;\n if (s.shift !== e.shiftKey || s.alt !== e.altKey) return false;\n if (s.ctrlOrMeta) {\n if (!(e.ctrlKey || e.metaKey)) return false;\n } else {\n if (s.ctrl !== e.ctrlKey || s.meta !== e.metaKey) return false;\n }\n return true;\n}\n\nexport function formatShortcut(input: string): string {\n const isMac = typeof navigator !== 'undefined' && /Mac|iP(hone|ad|od)/.test(navigator.platform || navigator.userAgent);\n return input\n .split('+')\n .map((p) => {\n const l = p.trim().toLowerCase();\n if (isMac && (l === 'ctrl' || l === 'mod' || l === 'cmd')) return '⌘';\n if (isMac && l === 'shift') return '⇧';\n if (isMac && (l === 'alt' || l === 'option')) return '⌥';\n return p.trim().length === 1 ? p.trim().toUpperCase() : p.trim();\n })\n .join(isMac ? '' : '+');\n}\n","import { useDevtools } from '../../store/devtoolsStore';\nimport { useConsole } from '../../store/consoleStore';\nimport { useConfig } from '../../hooks/useConfig';\nimport { startDrag } from '../../hooks/useDrag';\nimport { useContextMenu } from '../ContextMenu';\nimport {\n CloseIcon,\n DeviceIcon,\n DockBottomIcon,\n DockRightIcon,\n ErrorIcon,\n GearIcon,\n InspectIcon,\n KebabIcon,\n MaximizeIcon,\n MinimizeIcon,\n RestoreIcon,\n UndockIcon,\n WarnIcon,\n} from '../Icons';\nimport type { PanelDefinition } from '../../types';\nimport { formatShortcut } from '../../utils/shortcut';\nimport { clamp } from '../../utils/format';\n\ninterface ToolbarProps {\n panels: PanelDefinition[];\n}\n\nfunction useCounts() {\n return useConsole((s) => {\n let errors = 0;\n let warnings = 0;\n for (const e of s.entries) {\n if (e.level === 'error') errors += e.repeat;\n else if (e.level === 'warn') warnings += e.repeat;\n }\n return errors * 100000 + warnings; // primitive selector result → cheap equality\n });\n}\n\nexport function MainToolbar({ panels }: ToolbarProps) {\n const cfg = useConfig();\n const s = useDevtools();\n const packed = useCounts();\n const errors = Math.floor(packed / 100000);\n const warnings = packed % 100000;\n const menu = useContextMenu();\n const shortcut = s.shortcutOverride ?? cfg.shortcut;\n\n const select = (id: string) => s.updateSettings({ activePanel: id });\n\n const onToolbarPointerDown = (e: React.PointerEvent) => {\n if (s.dock !== 'floating' || s.maximized) return;\n const t = e.target as HTMLElement;\n if (t.closest('button,input,select')) return;\n const start = { ...s.floating };\n startDrag(\n e,\n (dx, dy) => {\n useDevtools.setState({\n floating: {\n ...start,\n x: clamp(start.x + dx, -start.width + 80, window.innerWidth - 80),\n y: clamp(start.y + dy, 0, window.innerHeight - 30),\n },\n });\n },\n () => s.updateSettings({}),\n );\n };\n\n const onNavKey = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;\n const ids = panels.map((p) => p.id);\n const i = ids.indexOf(s.activePanel);\n const next = ids[(i + (e.key === 'ArrowRight' ? 1 : -1) + ids.length) % ids.length];\n select(next);\n const root = (e.currentTarget.getRootNode() as ShadowRoot);\n setTimeout(() => (root.querySelector(`[data-panel-tab=\"${next}\"]`) as HTMLElement | null)?.focus());\n };\n\n const openMenu = (e: React.MouseEvent) => {\n const r = (e.currentTarget as HTMLElement).getBoundingClientRect();\n menu.open({ clientX: r.right - 190, clientY: r.bottom + 2 }, [\n {\n custom: (\n <div className=\"rid-menu-row\">\n <span className=\"rid-menu-label\" style={{ padding: '0 6px 0 4px' }}>\n Dock side\n </span>\n <span className=\"rid-spacer\" />\n {(\n [\n ['floating', UndockIcon, 'Undock into separate window'],\n ['bottom', DockBottomIcon, 'Dock to bottom'],\n ['right', DockRightIcon, 'Dock to right'],\n ] as const\n ).map(([dock, Icon, title]) => (\n <button\n key={dock}\n className={`rid-icon-btn${s.dock === dock ? ' rid-on' : ''}`}\n title={title}\n aria-label={title}\n aria-pressed={s.dock === dock}\n onClick={() => {\n s.updateSettings({ dock });\n useDevtools.setState({ maximized: false });\n menu.close();\n }}\n >\n <Icon />\n </button>\n ))}\n </div>\n ),\n },\n { separator: true },\n { label: 'Theme: System', onSelect: () => s.updateSettings({ theme: 'system' }), hint: s.theme === 'system' ? '✓' : '' },\n { label: 'Theme: Light', onSelect: () => s.updateSettings({ theme: 'light' }), hint: s.theme === 'light' ? '✓' : '' },\n { label: 'Theme: Dark', onSelect: () => s.updateSettings({ theme: 'dark' }), hint: s.theme === 'dark' ? '✓' : '' },\n { separator: true },\n ...panels.map((p) => ({ label: `Show ${p.title}`, onSelect: () => select(p.id) })),\n { separator: true },\n { label: 'Settings', onSelect: () => select('settings'), hint: 'F1' },\n ]);\n };\n\n return (\n <div className=\"rid-main-toolbar\" data-draggable={s.dock === 'floating' && !s.maximized} onPointerDown={onToolbarPointerDown} onDoubleClick={(e) => {\n if (!(e.target as HTMLElement).closest('button')) useDevtools.setState({ maximized: !s.maximized });\n }}>\n <div className=\"rid-tool-group\">\n {cfg.options.enableElementPicker && (\n <button\n className=\"rid-icon-btn\"\n aria-pressed={s.pickerActive}\n title={`Select an element in the page to inspect it${shortcut ? '' : ''} (Ctrl+Shift+C)`}\n aria-label=\"Select an element in the page to inspect it\"\n onClick={() => useDevtools.setState({ pickerActive: !s.pickerActive })}\n >\n <InspectIcon />\n </button>\n )}\n {cfg.options.enableDeviceToolbar && (\n <button\n className=\"rid-icon-btn\"\n aria-pressed={s.deviceMode}\n title=\"Toggle device toolbar (Ctrl+Shift+M)\"\n aria-label=\"Toggle device toolbar\"\n onClick={() => useDevtools.setState({ deviceMode: !s.deviceMode })}\n >\n <DeviceIcon />\n </button>\n )}\n <span className=\"rid-sep\" />\n </div>\n <div className=\"rid-nav\" role=\"tablist\" aria-label=\"Panels\" onKeyDown={onNavKey}>\n {panels.map((p) => (\n <button\n key={p.id}\n role=\"tab\"\n data-panel-tab={p.id}\n className=\"rid-tab\"\n aria-selected={s.activePanel === p.id}\n tabIndex={s.activePanel === p.id ? 0 : -1}\n onClick={() => select(p.id)}\n >\n {p.title}\n </button>\n ))}\n </div>\n <div className=\"rid-spacer\" />\n <div className=\"rid-tool-group\">\n {(errors > 0 || warnings > 0) && (\n <button className=\"rid-counters\" title=\"Open Console\" onClick={() => select('console')}>\n {errors > 0 && (\n <span className=\"rid-counter\">\n <ErrorIcon size={11} />\n {errors}\n </span>\n )}\n {warnings > 0 && (\n <span className=\"rid-counter\">\n <WarnIcon size={11} />\n {warnings}\n </span>\n )}\n </button>\n )}\n <button\n className={`rid-icon-btn${s.activePanel === 'settings' ? ' rid-on' : ''}`}\n title=\"Settings\"\n aria-label=\"Settings\"\n onClick={() => select('settings')}\n >\n <GearIcon />\n </button>\n <button className=\"rid-icon-btn\" title=\"Customize and control DevTools\" aria-label=\"Customize and control DevTools\" onClick={openMenu}>\n <KebabIcon />\n </button>\n <span className=\"rid-sep\" />\n <button\n className=\"rid-icon-btn\"\n title={s.minimized ? 'Restore' : 'Minimize'}\n aria-label={s.minimized ? 'Restore' : 'Minimize'}\n onClick={() => useDevtools.setState({ minimized: !s.minimized, maximized: false })}\n >\n <MinimizeIcon />\n </button>\n <button\n className=\"rid-icon-btn\"\n title={s.maximized ? 'Restore size' : 'Maximize'}\n aria-label={s.maximized ? 'Restore size' : 'Maximize'}\n onClick={() => useDevtools.setState({ maximized: !s.maximized, minimized: false })}\n >\n {s.maximized ? <RestoreIcon /> : <MaximizeIcon />}\n </button>\n <button\n className=\"rid-icon-btn\"\n title={shortcut ? `Close DevTools (${formatShortcut(shortcut)})` : 'Close DevTools'}\n aria-label=\"Close DevTools\"\n onClick={() => s.setOpen(false)}\n >\n <CloseIcon />\n </button>\n </div>\n {menu.element}\n </div>\n );\n}\n","import { create } from 'zustand';\nimport type { DevicePreset } from '../types';\nimport { readInternal, writeInternal } from '../utils/safeStorage';\n\nexport const BUILTIN_PRESETS: DevicePreset[] = [\n { id: 'iphone-se', name: 'iPhone SE', width: 375, height: 667, dpr: 2, category: 'mobile', touch: true },\n { id: 'iphone-14', name: 'iPhone 14 / 15', width: 390, height: 844, dpr: 3, category: 'mobile', touch: true },\n { id: 'iphone-16', name: 'iPhone 16 / 16 Pro', width: 393, height: 852, dpr: 3, category: 'mobile', touch: true },\n { id: 'iphone-pro-max', name: 'iPhone 16 Pro Max', width: 440, height: 956, dpr: 3, category: 'mobile', touch: true },\n { id: 'galaxy-s24', name: 'Samsung Galaxy S24', width: 360, height: 780, dpr: 3, category: 'mobile', touch: true },\n { id: 'galaxy-s24-ultra', name: 'Samsung Galaxy S24 Ultra', width: 412, height: 915, dpr: 3.5, category: 'mobile', touch: true },\n { id: 'pixel-8', name: 'Pixel 8', width: 412, height: 915, dpr: 2.625, category: 'mobile', touch: true },\n { id: 'pixel-8-pro', name: 'Pixel 8 Pro', width: 448, height: 998, dpr: 3, category: 'mobile', touch: true },\n { id: 'ipad-mini', name: 'iPad Mini', width: 768, height: 1024, dpr: 2, category: 'tablet', touch: true },\n { id: 'ipad-air', name: 'iPad Air', width: 820, height: 1180, dpr: 2, category: 'tablet', touch: true },\n { id: 'ipad-pro-12', name: 'iPad Pro 12.9\"', width: 1024, height: 1366, dpr: 2, category: 'tablet', touch: true },\n { id: 'galaxy-tab-s9', name: 'Galaxy Tab S9', width: 800, height: 1280, dpr: 2, category: 'tablet', touch: true },\n { id: 'laptop', name: 'Laptop', width: 1366, height: 768, dpr: 1, category: 'desktop' },\n { id: 'laptop-l', name: 'Laptop L', width: 1440, height: 900, dpr: 2, category: 'desktop' },\n { id: 'desktop', name: 'Desktop 1080p', width: 1920, height: 1080, dpr: 1, category: 'desktop' },\n];\n\nexport const RESPONSIVE_ID = 'responsive';\n\nexport type ZoomSetting = number | 'fit';\n\ninterface DeviceState {\n presetId: string;\n width: number;\n height: number;\n dpr: number;\n zoom: ZoomSetting;\n landscape: boolean;\n showFrame: boolean;\n touch: boolean;\n customPresets: DevicePreset[];\n set: (patch: Partial<DeviceState>) => void;\n applyPreset: (id: string) => void;\n rotate: () => void;\n saveCustomPreset: (p: DevicePreset) => void;\n deleteCustomPreset: (id: string) => void;\n}\n\nconst KEY = 'device';\ntype Persisted = Pick<DeviceState, 'presetId' | 'width' | 'height' | 'dpr' | 'zoom' | 'landscape' | 'showFrame' | 'touch' | 'customPresets'>;\n\nexport function allPresets(custom: DevicePreset[]): DevicePreset[] {\n return [...BUILTIN_PRESETS, ...custom];\n}\n\nexport const useDevice = create<DeviceState>()((set, get) => ({\n presetId: RESPONSIVE_ID,\n width: 400,\n height: 800,\n dpr: 1,\n zoom: 'fit',\n landscape: false,\n showFrame: false,\n touch: false,\n customPresets: [],\n set: (patch) => {\n set(patch);\n persist();\n },\n applyPreset: (id) => {\n if (id === RESPONSIVE_ID) {\n set({ presetId: id, touch: false });\n } else {\n const p = allPresets(get().customPresets).find((x) => x.id === id);\n if (!p) return;\n set({\n presetId: id,\n width: p.width,\n height: p.height,\n dpr: p.dpr,\n touch: !!p.touch,\n landscape: false,\n });\n }\n persist();\n },\n rotate: () => {\n const { width, height, landscape } = get();\n set({ width: height, height: width, landscape: !landscape });\n persist();\n },\n saveCustomPreset: (p) => {\n const list = get().customPresets.filter((x) => x.id !== p.id);\n set({ customPresets: [...list, { ...p, category: 'custom' }] });\n persist();\n },\n deleteCustomPreset: (id) => {\n set({ customPresets: get().customPresets.filter((x) => x.id !== id) });\n if (get().presetId === id) set({ presetId: RESPONSIVE_ID });\n persist();\n },\n}));\n\nfunction persist() {\n const s = useDevice.getState();\n const data: Persisted = {\n presetId: s.presetId,\n width: s.width,\n height: s.height,\n dpr: s.dpr,\n zoom: s.zoom,\n landscape: s.landscape,\n showFrame: s.showFrame,\n touch: s.touch,\n customPresets: s.customPresets,\n };\n writeInternal(KEY, data);\n}\n\nexport function hydrateDevice(): void {\n const saved = readInternal<Partial<Persisted> | null>(KEY, null);\n if (saved) useDevice.setState(saved);\n}\n","import { create } from 'zustand';\n\nexport type ElementsSidebarTab = 'styles' | 'computed' | 'layout' | 'properties';\n\ninterface ElementsState {\n selected: Node | null;\n hovered: Node | null;\n /** Bumped whenever the observed DOM changes. */\n domVersion: number;\n /** Bumped when the expansion set changes. */\n expandVersion: number;\n /** Bumped when styles were edited through the inspector. */\n styleVersion: number;\n sidebarTab: ElementsSidebarTab;\n /** Request to scroll the selected node into view in the tree */\n revealToken: number;\n select: (node: Node | null, reveal?: boolean) => void;\n hover: (node: Node | null) => void;\n setSidebarTab: (t: ElementsSidebarTab) => void;\n bumpStyles: () => void;\n}\n\n/** Expanded tree nodes. Kept outside React state: a WeakSet does not leak removed nodes. */\nexport const expandedNodes = new WeakSet<Node>();\n\nexport const useElements = create<ElementsState>()((set, get) => ({\n selected: null,\n hovered: null,\n domVersion: 0,\n expandVersion: 0,\n styleVersion: 0,\n sidebarTab: 'styles',\n revealToken: 0,\n select: (node, reveal = false) => {\n if (node && reveal) {\n let p = node.parentNode;\n while (p && p.nodeType !== 9) {\n expandedNodes.add(p);\n p = p.parentNode;\n }\n }\n set({\n selected: node,\n expandVersion: reveal ? get().expandVersion + 1 : get().expandVersion,\n revealToken: reveal ? get().revealToken + 1 : get().revealToken,\n });\n },\n hover: (hovered) => {\n if (get().hovered !== hovered) set({ hovered });\n },\n setSidebarTab: (sidebarTab) => set({ sidebarTab }),\n bumpStyles: () => set({ styleVersion: get().styleVersion + 1 }),\n}));\n\nexport function setExpanded(node: Node, expanded: boolean): void {\n if (expanded) expandedNodes.add(node);\n else expandedNodes.delete(node);\n useElements.setState({ expandVersion: useElements.getState().expandVersion + 1 });\n}\n\nexport function bumpDomVersion(): void {\n useElements.setState({ domVersion: useElements.getState().domVersion + 1 });\n}\n","import { memo, useState, type ReactNode } from 'react';\nimport { useElements } from '../../store/elementsStore';\nimport { useDevtools } from '../../store/devtoolsStore';\n\n/* ------------------------------------------------------------------ helpers */\n\ntype Kind =\n | 'string'\n | 'number'\n | 'bigint'\n | 'boolean'\n | 'undefined'\n | 'null'\n | 'symbol'\n | 'function'\n | 'array'\n | 'typedarray'\n | 'map'\n | 'set'\n | 'weak'\n | 'date'\n | 'regexp'\n | 'error'\n | 'node'\n | 'promise'\n | 'object';\n\nexport function kindOf(v: unknown): Kind {\n if (v === null) return 'null';\n const t = typeof v;\n if (t !== 'object' && t !== 'function') return t as Kind;\n if (t === 'function') return 'function';\n try {\n if (Array.isArray(v)) return 'array';\n if (ArrayBuffer.isView(v) && !(v instanceof DataView)) return 'typedarray';\n if (v instanceof Map) return 'map';\n if (v instanceof Set) return 'set';\n if (v instanceof WeakMap || v instanceof WeakSet) return 'weak';\n if (v instanceof Date) return 'date';\n if (v instanceof RegExp) return 'regexp';\n if (v instanceof Error) return 'error';\n if (typeof Node !== 'undefined' && v instanceof Node) return 'node';\n if (typeof Promise !== 'undefined' && v instanceof Promise) return 'promise';\n } catch {}\n return 'object';\n}\n\nfunction constructorName(v: object): string {\n try {\n const proto = Object.getPrototypeOf(v);\n if (proto === null) return 'Object';\n const name = proto?.constructor?.name;\n return typeof name === 'string' && name ? name : 'Object';\n } catch {\n return 'Object';\n }\n}\n\nexport function isExpandable(v: unknown): boolean {\n const k = kindOf(v);\n return !['string', 'number', 'bigint', 'boolean', 'undefined', 'null', 'symbol'].includes(k) && k !== 'node';\n}\n\nfunction safeGet(obj: any, key: PropertyKey): { ok: true; value: unknown } | { ok: false; error: unknown } {\n try {\n return { ok: true, value: obj[key] };\n } catch (error) {\n return { ok: false, error };\n }\n}\n\ntype AnyFn = (...args: unknown[]) => unknown;\n\nfunction fnSignature(f: AnyFn): string {\n try {\n const src = Function.prototype.toString.call(f);\n const isClass = /^class\\b/.test(src);\n if (isClass) return `class ${f.name || ''}`;\n const m = src.match(/^(?:async\\s+)?(?:function\\s*\\*?\\s*[\\w$]*)?\\s*(\\([^)]*\\))/);\n const arrow = src.match(/^(?:async\\s+)?(\\([^)]*\\)|[\\w$]+)\\s*=>/);\n const params = m?.[1] ?? (arrow ? (arrow[1].startsWith('(') ? arrow[1] : `(${arrow[1]})`) : '()');\n return `${f.name || ''}${params}`;\n } catch {\n return `${f.name || 'anonymous'}()`;\n }\n}\n\nexport function nodeLabel(n: Node): string {\n if (n.nodeType === 1) {\n const el = n as Element;\n let s = el.localName;\n if (el.id) s += `#${el.id}`;\n const cls = el.getAttribute('class');\n if (cls) s += '.' + cls.trim().split(/\\s+/).join('.');\n return s;\n }\n if (n.nodeType === 3) return `\"${n.textContent ?? ''}\"`;\n if (n.nodeType === 8) return `<!--${n.textContent ?? ''}-->`;\n if (n.nodeType === 9) return '#document';\n if (n.nodeType === 11) return '#document-fragment';\n return n.nodeName;\n}\n\n/* ------------------------------------------------------------------ inline preview */\n\ninterface PreviewProps {\n value: unknown;\n /** Top-level strings are rendered without quotes in console messages. */\n quoteStrings?: boolean;\n depth?: number;\n}\n\nexport const ValuePreview = memo(function ValuePreview({ value, quoteStrings = true, depth = 0 }: PreviewProps): ReactNode {\n const k = kindOf(value);\n switch (k) {\n case 'string': {\n const s = value as string;\n if (!quoteStrings) return <span>{s}</span>;\n const shown = depth > 0 && s.length > 100 ? s.slice(0, 100) + '…' : s;\n return <span className=\"rid-v-string\">{depth > 0 ? `'${shown}'` : `\"${shown}\"`}</span>;\n }\n case 'number':\n return <span className=\"rid-v-number\">{Object.is(value, -0) ? '-0' : String(value)}</span>;\n case 'bigint':\n return <span className=\"rid-v-bigint\">{String(value)}n</span>;\n case 'boolean':\n return <span className=\"rid-v-boolean\">{String(value)}</span>;\n case 'undefined':\n return <span className=\"rid-v-undefined\">undefined</span>;\n case 'null':\n return <span className=\"rid-v-null\">null</span>;\n case 'symbol':\n return <span className=\"rid-v-symbol\">{String(value)}</span>;\n case 'function':\n return (\n <span className=\"rid-v-function\">\n <span className=\"rid-v-fkw\">ƒ</span> {depth > 0 ? '' : fnSignature(value as AnyFn)}\n </span>\n );\n case 'date':\n return <span>{safeString(() => (value as Date).toString())}</span>;\n case 'regexp':\n return <span className=\"rid-v-regexp\">{String(value)}</span>;\n case 'error': {\n const e = value as Error;\n if (depth > 0) return <span>{`${e.name}: ${e.message}`}</span>;\n return <span>{e.stack && e.stack.includes(e.message) ? e.stack : `${e.name}: ${e.message}${e.stack ? '\\n' + e.stack : ''}`}</span>;\n }\n case 'node':\n return <NodeRef node={value as Node} />;\n case 'promise':\n return <span>Promise {'{'}<span className=\"rid-v-faint\"><pending></span>{'}'}</span>;\n case 'weak':\n return <span>{constructorName(value as object)} {'{}'}</span>;\n case 'array':\n case 'typedarray':\n return <ArrayPreview arr={value as ArrayLike<unknown>} depth={depth} />;\n case 'map':\n case 'set':\n return <CollectionPreview coll={value as Map<unknown, unknown> | Set<unknown>} depth={depth} />;\n default:\n return <ObjectPreview obj={value as object} depth={depth} />;\n }\n});\n\nfunction safeString(fn: () => string): string {\n try {\n return fn();\n } catch {\n return '[unprintable]';\n }\n}\n\nfunction ArrayPreview({ arr, depth }: { arr: ArrayLike<unknown>; depth: number }) {\n const name = Array.isArray(arr) ? 'Array' : constructorName(arr as object);\n const len = safeGet(arr, 'length');\n const n = len.ok ? (len.value as number) : 0;\n if (depth > 0) return <span>{name}({n})</span>;\n const items: ReactNode[] = [];\n const max = Math.min(n, 100);\n for (let i = 0; i < max; i++) {\n if (i) items.push(', ');\n const r = safeGet(arr, i);\n items.push(<ValuePreview key={i} value={r.ok ? r.value : undefined} depth={depth + 1} />);\n }\n if (n > max) items.push(', …');\n return (\n <span>\n {n > 1 || name !== 'Array' ? <span className=\"rid-v-faint\">{name !== 'Array' ? name : ''}({n}) </span> : null}[{items}]\n </span>\n );\n}\n\nfunction CollectionPreview({ coll, depth }: { coll: Map<unknown, unknown> | Set<unknown>; depth: number }) {\n const name = coll instanceof Map ? 'Map' : 'Set';\n if (depth > 0) return <span>{name}({coll.size})</span>;\n const items: ReactNode[] = [];\n let i = 0;\n try {\n for (const entry of coll instanceof Map ? coll.entries() : coll.values()) {\n if (i >= 5) {\n items.push(', …');\n break;\n }\n if (i) items.push(', ');\n if (coll instanceof Map) {\n const [k, v] = entry as [unknown, unknown];\n items.push(\n <span key={i}>\n <ValuePreview value={k} depth={1} /> => <ValuePreview value={v} depth={1} />\n </span>,\n );\n } else items.push(<ValuePreview key={i} value={entry} depth={1} />);\n i++;\n }\n } catch {}\n return (\n <span>\n {name}({coll.size}) {'{'}\n {items}\n {'}'}\n </span>\n );\n}\n\nfunction ObjectPreview({ obj, depth }: { obj: object; depth: number }) {\n const name = constructorName(obj);\n if (depth > 0) return <span>{name === 'Object' ? '{…}' : name}</span>;\n let keys: string[] = [];\n try {\n keys = Object.keys(obj);\n } catch {}\n const items: ReactNode[] = [];\n const max = 5;\n keys.slice(0, max).forEach((k, i) => {\n if (i) items.push(', ');\n const r = safeGet(obj, k);\n items.push(\n <span key={k}>\n <span className=\"rid-v-key rid-v-dim\">{/^[A-Za-z_$][\\w$]*$/.test(k) ? k : `'${k}'`}</span>: {r.ok ? <ValuePreview value={r.value} depth={1} /> : <span className=\"rid-v-faint\">(…)</span>}\n </span>,\n );\n });\n if (keys.length > max) items.push(', …');\n return (\n <span>\n {name !== 'Object' && <span className=\"rid-v-italic\">{name} </span>}\n {'{'}\n {items}\n {'}'}\n </span>\n );\n}\n\nexport function NodeRef({ node }: { node: Node }) {\n const hover = useElements((s) => s.hover);\n const reveal = () => {\n useDevtools.getState().updateSettings({ activePanel: 'elements' });\n useElements.getState().select(node, true);\n };\n return (\n <span\n className=\"rid-v-node\"\n title=\"Click to reveal in Elements panel\"\n onMouseEnter={() => hover(node)}\n onMouseLeave={() => hover(null)}\n onClick={(e) => {\n e.stopPropagation();\n reveal();\n }}\n >\n {nodeLabel(node)}\n </span>\n );\n}\n\n/* ------------------------------------------------------------------ expandable tree */\n\ninterface Prop {\n key: string;\n value?: unknown;\n getter?: () => unknown;\n dim?: boolean;\n /** synthetic entries like [[Entries]] */\n virtual?: boolean;\n}\n\nfunction listProperties(v: unknown): Prop[] {\n const out: Prop[] = [];\n const k = kindOf(v);\n const obj = v as any;\n\n if (k === 'map' || k === 'set') {\n const entries: unknown[] = [];\n try {\n if (k === 'map') (obj as Map<unknown, unknown>).forEach((val, key) => entries.push({ key, value: val, __entry: true }));\n else (obj as Set<unknown>).forEach((val) => entries.push(val));\n } catch {}\n out.push({ key: '[[Entries]]', value: new EntriesView(entries, k === 'map'), virtual: true });\n out.push({ key: 'size', value: obj.size });\n }\n\n if (k === 'array' || k === 'typedarray') {\n const len = obj.length as number;\n if (len > 100) {\n for (let start = 0; start < len; start += 100) {\n const end = Math.min(len, start + 100) - 1;\n out.push({ key: `[${start} … ${end}]`, value: new ChunkView(obj, start, end), virtual: true });\n }\n } else {\n for (let i = 0; i < len; i++) {\n const r = safeGet(obj, i);\n out.push({ key: String(i), value: r.ok ? r.value : r.error });\n }\n }\n }\n\n if (v instanceof EntriesView) {\n v.entries.forEach((e, i) => out.push({ key: String(i), value: v.isMap ? new MapEntry((e as any).key, (e as any).value) : e }));\n return out;\n }\n if (v instanceof ChunkView) {\n for (let i = v.start; i <= v.end; i++) {\n const r = safeGet(v.target, i);\n out.push({ key: String(i), value: r.ok ? r.value : r.error });\n }\n return out;\n }\n if (v instanceof MapEntry) {\n return [\n { key: 'key', value: v.key },\n { key: 'value', value: v.value },\n ];\n }\n\n let names: (string | symbol)[] = [];\n try {\n names = [...Object.getOwnPropertyNames(obj), ...Object.getOwnPropertySymbols(obj)];\n } catch {}\n for (const name of names) {\n if ((k === 'array' || k === 'typedarray') && typeof name === 'string' && /^\\d+$/.test(name)) continue;\n let desc: PropertyDescriptor | undefined;\n try {\n desc = Object.getOwnPropertyDescriptor(obj, name);\n } catch {}\n const key = typeof name === 'symbol' ? name.toString() : name;\n if (desc && 'get' in desc && desc.get && !('value' in desc)) {\n const g = desc.get;\n out.push({ key, getter: () => g.call(obj), dim: !desc.enumerable });\n } else {\n const r = safeGet(obj, name);\n out.push({ key, value: r.ok ? r.value : r.error, dim: desc ? !desc.enumerable : false });\n }\n }\n\n if (k === 'error') {\n if (!names.includes('stack')) out.push({ key: 'stack', value: obj.stack, dim: true });\n if (!names.includes('message')) out.push({ key: 'message', value: obj.message, dim: true });\n }\n\n // Getters defined on prototypes (e.g. class accessors, DOM properties) are shown like Chrome does.\n if (k === 'object' || k === 'node') {\n try {\n let proto = Object.getPrototypeOf(obj);\n const seen = new Set(names.map(String));\n while (proto && proto !== Object.prototype) {\n for (const name of Object.getOwnPropertyNames(proto)) {\n if (seen.has(name) || name === 'constructor') continue;\n const d = Object.getOwnPropertyDescriptor(proto, name);\n if (d?.get) {\n seen.add(name);\n const g = d.get;\n out.push({ key: name, getter: () => g.call(obj), dim: true });\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n } catch {}\n }\n\n try {\n const proto = Object.getPrototypeOf(obj);\n if (proto !== null && proto !== undefined) out.push({ key: '[[Prototype]]', value: proto, dim: true, virtual: true });\n } catch {}\n return out;\n}\n\nclass EntriesView {\n constructor(\n public entries: unknown[],\n public isMap: boolean,\n ) {}\n}\nclass ChunkView {\n constructor(\n public target: ArrayLike<unknown>,\n public start: number,\n public end: number,\n ) {}\n}\nclass MapEntry {\n constructor(\n public key: unknown,\n public value: unknown,\n ) {}\n}\n\nfunction VirtualPreview({ value }: { value: unknown }) {\n if (value instanceof EntriesView) return <span className=\"rid-v-faint\">Array({value.entries.length})</span>;\n if (value instanceof ChunkView) return null;\n if (value instanceof MapEntry)\n return (\n <span>\n {'{'}\n <ValuePreview value={value.key} depth={1} /> => <ValuePreview value={value.value} depth={1} />\n {'}'}\n </span>\n );\n return <ValuePreview value={value} depth={1} />;\n}\n\ninterface InspectorProps {\n value: unknown;\n name?: string;\n dimName?: boolean;\n defaultExpanded?: boolean;\n quoteStrings?: boolean;\n /** Nesting level, used to prevent runaway recursion. */\n level?: number;\n /** Allow expanding DOM nodes into their JS properties (Properties pane). */\n expandNodes?: boolean;\n}\n\n/** Chrome-style expandable object tree. Properties are read lazily on expand. */\nexport function ObjectInspector({ value, name, dimName, defaultExpanded = false, quoteStrings = true, level = 0, expandNodes }: InspectorProps) {\n const [open, setOpen] = useState(defaultExpanded);\n const virtual = value instanceof EntriesView || value instanceof ChunkView || value instanceof MapEntry;\n const expandable = virtual || isExpandable(value) || (!!expandNodes && kindOf(value) === 'node');\n const label =\n name !== undefined ? (\n <>\n <span className={`rid-v-key${dimName ? ' rid-v-dim' : ''}`}>{name}</span>\n {value instanceof ChunkView ? '' : ': '}\n </>\n ) : null;\n\n if (!expandable) {\n return (\n <div className=\"rid-obj-row\">\n <span className=\"rid-obj-toggle\" />\n <span className=\"rid-obj-summary\">\n {label}\n <ValuePreview value={value} quoteStrings={quoteStrings || name !== undefined} depth={name !== undefined ? 1 : 0} />\n </span>\n </div>\n );\n }\n\n return (\n <div>\n <div className=\"rid-obj-row\" onClick={() => setOpen(!open)}>\n <span className=\"rid-obj-toggle\" data-open={open}>\n <span className={`rid-chevron${open ? ' rid-open' : ''}`} />\n </span>\n <span className=\"rid-obj-summary\">\n {label}\n {virtual ? (\n <VirtualPreview value={value} />\n ) : name !== undefined && !open ? (\n <ValuePreview value={value} depth={kindOf(value) === 'function' ? 0 : 1} />\n ) : (\n <ValuePreview value={value} depth={0} />\n )}\n </span>\n </div>\n {open && level < 40 && (\n <div className=\"rid-obj-children\">\n {listProperties(value).map((p, i) =>\n p.getter ? (\n <GetterRow key={p.key + i} prop={p} level={level} />\n ) : (\n <ObjectInspector key={p.key + i} name={p.key} dimName={p.dim} value={p.value} level={level + 1} />\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction GetterRow({ prop, level }: { prop: Prop; level: number }) {\n const [state, setState] = useState<{ value: unknown } | null>(null);\n if (state) return <ObjectInspector name={prop.key} dimName={prop.dim} value={state.value} level={level + 1} />;\n return (\n <div className=\"rid-obj-row\">\n <span className=\"rid-obj-toggle\" />\n <span>\n <span className={`rid-v-key${prop.dim ? ' rid-v-dim' : ''}`}>{prop.key}</span>:{' '}\n <span\n className=\"rid-obj-getter\"\n title=\"Invoke property getter\"\n onClick={() => {\n try {\n setState({ value: prop.getter!() });\n } catch (e) {\n setState({ value: e });\n }\n }}\n >\n (...)\n </span>\n </span>\n </div>\n );\n}\n","import { useDevtools } from '../../store/devtoolsStore';\nimport { useDevice } from '../../store/deviceStore';\nimport { useElements } from '../../store/elementsStore';\nimport { nodeLabel } from '../ObjectInspector';\n\n/** Bottom information strip; shows context for the active panel. */\nexport function StatusBar() {\n const active = useDevtools((s) => s.activePanel);\n const deviceMode = useDevtools((s) => s.deviceMode);\n const device = useDevice((s) => `${s.width}×${s.height} @${s.dpr}x`);\n const selected = useElements((s) => s.selected);\n\n let left: string;\n switch (active) {\n case 'elements':\n left = selected ? `Selected: ${nodeLabel(selected)}` : 'No element selected';\n break;\n default:\n left = '';\n }\n return (\n <div className=\"rid-statusbar\" role=\"status\">\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>{left}</span>\n <span className=\"rid-spacer\" />\n {deviceMode && <span>Device: {device}</span>}\n <span>react-inspector-devtools</span>\n </div>\n );\n}\n","import { Component, type ReactNode } from 'react';\n\ninterface Props {\n children: ReactNode;\n label?: string;\n}\n\n/** Keeps a crashing panel from taking down the rest of devtools (or the host app). */\nexport class ErrorBoundary extends Component<Props, { error: Error | null }> {\n state = { error: null as Error | null };\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n render() {\n if (this.state.error) {\n return (\n <div className=\"rid-crash\">\n {this.props.label ?? 'Panel'} crashed: {String(this.state.error?.stack || this.state.error)}\n {'\\n\\n'}\n <button className=\"rid-btn\" onClick={() => this.setState({ error: null })}>\n Reload panel\n </button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import { useRef, type ReactNode } from 'react';\nimport { startDrag } from '../../hooks/useDrag';\nimport { clamp } from '../../utils/format';\n\ninterface SplitPaneProps {\n /** Size in px of the secondary (side) pane. */\n size: number;\n onResize: (size: number) => void;\n vertical?: boolean;\n /** Where the secondary pane sits. */\n side?: 'end' | 'start';\n min?: number;\n minMain?: number;\n main: ReactNode;\n secondary: ReactNode;\n hideSecondary?: boolean;\n className?: string;\n}\n\nexport function SplitPane({ size, onResize, vertical, side = 'end', min = 120, minMain = 120, main, secondary, hideSecondary, className }: SplitPaneProps) {\n const ref = useRef<HTMLDivElement>(null);\n const onPointerDown = (e: React.PointerEvent) => {\n const start = size;\n const total = vertical ? ref.current!.clientHeight : ref.current!.clientWidth;\n startDrag(e, (dx, dy) => {\n const delta = vertical ? dy : dx;\n const next = side === 'end' ? start - delta : start + delta;\n onResize(clamp(next, min, Math.max(min, total - minMain)));\n });\n };\n const secondaryEl = (\n <div className=\"rid-split-pane\" style={vertical ? { height: size } : { width: size }}>\n {secondary}\n </div>\n );\n const handle = <div className=\"rid-split-handle\" onPointerDown={onPointerDown} role=\"separator\" aria-orientation={vertical ? 'horizontal' : 'vertical'} />;\n return (\n <div ref={ref} className={`rid-split${vertical ? ' rid-vertical' : ''}${className ? ' ' + className : ''}`}>\n {!hideSecondary && side === 'start' && (\n <>\n {secondaryEl}\n {handle}\n </>\n )}\n <div className=\"rid-split-pane rid-split-main\">{main}</div>\n {!hideSecondary && side === 'end' && (\n <>\n {handle}\n {secondaryEl}\n </>\n )}\n </div>\n );\n}\n","import { useEffect, useRef, type ReactNode } from 'react';\n\ninterface ConfirmDialogProps {\n title: string;\n message?: ReactNode;\n confirmLabel?: string;\n danger?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n children?: ReactNode;\n}\n\nexport function ConfirmDialog({ title, message, confirmLabel = 'OK', danger, onConfirm, onCancel, children }: ConfirmDialogProps) {\n const okRef = useRef<HTMLButtonElement>(null);\n useEffect(() => {\n if (!children) okRef.current?.focus();\n }, [children]);\n return (\n <div\n className=\"rid-dialog-backdrop\"\n onPointerDown={(e) => e.target === e.currentTarget && onCancel()}\n onKeyDown={(e) => {\n if (e.key === 'Escape') {\n e.stopPropagation();\n onCancel();\n }\n }}\n >\n <form\n className=\"rid-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n onSubmit={(e) => {\n e.preventDefault();\n onConfirm();\n }}\n >\n <h3>{title}</h3>\n {message && <p>{message}</p>}\n {children}\n <div className=\"rid-dialog-actions\">\n <button type=\"button\" className=\"rid-btn\" onClick={onCancel}>\n Cancel\n </button>\n <button ref={okRef} type=\"submit\" className={`rid-btn ${danger ? 'rid-danger' : 'rid-primary'}`}>\n {confirmLabel}\n </button>\n </div>\n </form>\n </div>\n );\n}\n","/** Builds a reasonably short unique CSS selector for an element. */\nexport function cssPath(el: Element): string {\n const parts: string[] = [];\n let node: Element | null = el;\n while (node && node.nodeType === 1 && node !== document.documentElement) {\n if (node.id && /^[A-Za-z][\\w-]*$/.test(node.id)) {\n parts.unshift(`#${node.id}`);\n break;\n }\n let part = node.localName;\n const parent: Element | null = node.parentElement;\n if (parent) {\n const same = Array.from(parent.children).filter((c) => c.localName === node!.localName);\n if (same.length > 1) part += `:nth-of-type(${same.indexOf(node) + 1})`;\n }\n parts.unshift(part);\n node = parent;\n }\n if (!parts.length) return el.localName;\n if (!parts[0].startsWith('#')) parts.unshift('html');\n return parts.join(' > ');\n}\n\n/** Short label like div#app.container.main */\nexport function elementLabel(el: Element, maxClasses = 3): string {\n let s = el.localName;\n if (el.id) s += `#${el.id}`;\n const cls = typeof el.className === 'string' ? el.className : el.getAttribute('class') || '';\n const list = cls.split(/\\s+/).filter(Boolean);\n if (list.length) s += '.' + list.slice(0, maxClasses).join('.');\n return s;\n}\n","import type { NetworkRequest } from '../../types';\n\nexport function statusText(r: NetworkRequest): string {\n if (r.state === 'pending') return '(pending)';\n if (r.state === 'aborted') return '(canceled)';\n if (r.state === 'failed' && !r.status) return r.statusText || '(failed)';\n if (r.status === 0 && r.responseType === 'opaque') return '(opaque)';\n if (!r.status) return r.fromCache ? '(cache)' : 'Finished';\n return `${r.status}${r.statusText ? ' ' + r.statusText : ''}`;\n}\n\nexport function displayName(url: string): { name: string; host: string } {\n try {\n const u = new URL(url);\n if (u.protocol === 'data:') return { name: url.slice(0, 40), host: '' };\n const segs = u.pathname.split('/').filter(Boolean);\n const last = segs[segs.length - 1] ?? u.host;\n return { name: decodeURIComponent(last) + u.search, host: u.host };\n } catch {\n return { name: url, host: '' };\n }\n}\n\nexport const TYPE_LABEL: Record<string, string> = {\n fetch: 'fetch',\n xhr: 'xhr',\n js: 'script',\n css: 'stylesheet',\n doc: 'document',\n font: 'font',\n img: 'img',\n media: 'media',\n manifest: 'manifest',\n ws: 'websocket',\n other: 'other',\n};\n\nexport function isFailed(r: NetworkRequest): boolean {\n return r.state === 'failed' || r.state === 'aborted' || (r.status ?? 0) >= 400;\n}\n\nexport function toCurl(r: NetworkRequest): string {\n const q = (s: string) => `'${s.replace(/'/g, `'\\\\''`)}'`;\n let s = `curl ${q(r.url)}`;\n if (r.method !== 'GET') s += ` \\\\\\n -X ${r.method}`;\n for (const [k, v] of r.requestHeaders) s += ` \\\\\\n -H ${q(`${k}: ${v}`)}`;\n if (r.payload?.text && r.payload.kind !== 'binary') s += ` \\\\\\n --data-raw ${q(r.payload.text)}`;\n return s;\n}\n\nexport function toFetch(r: NetworkRequest): string {\n const init: Record<string, unknown> = { method: r.method };\n if (r.requestHeaders.length) init.headers = Object.fromEntries(r.requestHeaders);\n if (r.payload?.text && r.payload.kind !== 'binary') init.body = r.payload.text;\n return `fetch(${JSON.stringify(r.url)}, ${JSON.stringify(init, null, 2)});`;\n}\n\nexport function copyText(text: string): void {\n navigator.clipboard?.writeText(text).catch(() => {\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.position = 'fixed';\n ta.style.opacity = '0';\n document.body.appendChild(ta);\n ta.select();\n try {\n document.execCommand('copy');\n } catch {}\n ta.remove();\n });\n}\n","import type { ConsoleEntry, NetworkRequest, StorageArea } from '../types';\n\nexport interface DevToolsEvents {\n 'console:entry': Omit<ConsoleEntry, 'id' | 'depth' | 'groupPath' | 'repeat'>;\n 'console:clear': { fromApp: boolean };\n 'network:start': NetworkRequest;\n 'network:update': { id: string; patch: Partial<NetworkRequest> };\n 'network:resource': NetworkRequest;\n 'dom:mutation': { records: number };\n 'storage:change': { area: StorageArea | 'cookie' };\n}\n\ntype Handler<T> = (payload: T) => void;\n\n/**\n * Minimal typed pub/sub used to decouple instrumentation (which patches globals)\n * from the stores/panels (which render data).\n */\nexport class EventBus<E extends object> {\n private handlers = new Map<keyof E, Set<Handler<any>>>();\n\n on<K extends keyof E>(event: K, handler: Handler<E[K]>): () => void {\n let set = this.handlers.get(event);\n if (!set) {\n set = new Set();\n this.handlers.set(event, set);\n }\n set.add(handler);\n return () => {\n set!.delete(handler);\n };\n }\n\n emit<K extends keyof E>(event: K, payload: E[K]): void {\n const set = this.handlers.get(event);\n if (!set) return;\n for (const h of Array.from(set)) {\n try {\n h(payload);\n } catch {\n // A faulty subscriber must never break the host application.\n }\n }\n }\n\n clear(): void {\n this.handlers.clear();\n }\n}\n\nexport const bus = new EventBus<DevToolsEvents>();\n","import { isDevtoolsNode } from '../../core/ownership';\nimport { expandedNodes } from '../../store/elementsStore';\n\nexport type RowKind = 'open' | 'close' | 'inline' | 'text' | 'comment' | 'doctype' | 'shadow';\n\nexport interface TreeRow {\n node: Node;\n depth: number;\n kind: RowKind;\n expandable: boolean;\n expanded: boolean;\n}\n\nexport const VOID_ELEMENTS = new Set(['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr']);\n\nconst INLINE_TEXT_LIMIT = 80;\n\n/** Child nodes shown in the tree (whitespace-only text and devtools nodes hidden). */\nexport function visibleChildren(node: Node): Node[] {\n const out: Node[] = [];\n const el = node as Element;\n if (el.nodeType === 1 && el.shadowRoot && !isDevtoolsNode(el)) out.push(el.shadowRoot);\n const kids = node.nodeType === 1 && (el as HTMLTemplateElement).content && el.localName === 'template' ? (el as HTMLTemplateElement).content.childNodes : node.childNodes;\n for (const c of Array.from(kids)) {\n if (isDevtoolsNode(c)) continue;\n if (c.nodeType === 3 && !c.textContent?.trim()) continue;\n if (c.nodeType === 1 || c.nodeType === 3 || c.nodeType === 8 || c.nodeType === 10) out.push(c);\n }\n return out;\n}\n\n/** An element whose only child is short text renders on one line: <p>text</p> */\nexport function inlineText(el: Element): string | null {\n if (el.shadowRoot) return null;\n const kids = visibleChildren(el);\n if (kids.length === 0) return '';\n if (kids.length === 1 && kids[0].nodeType === 3) {\n const t = kids[0].textContent ?? '';\n if (t.length <= INLINE_TEXT_LIMIT && !t.includes('\\n')) return t;\n }\n return null;\n}\n\n/** Flattens the expanded DOM into rows (with closing-tag rows like Chrome). */\nexport function flattenTree(root: Document): TreeRow[] {\n const rows: TreeRow[] = [];\n const visit = (node: Node, depth: number) => {\n if (node.nodeType === 10) {\n rows.push({ node, depth, kind: 'doctype', expandable: false, expanded: false });\n return;\n }\n if (node.nodeType === 3) {\n rows.push({ node, depth, kind: 'text', expandable: false, expanded: false });\n return;\n }\n if (node.nodeType === 8) {\n rows.push({ node, depth, kind: 'comment', expandable: false, expanded: false });\n return;\n }\n if (node.nodeType === 11) {\n const expanded = expandedNodes.has(node);\n rows.push({ node, depth, kind: 'shadow', expandable: true, expanded });\n if (expanded) for (const c of visibleChildren(node)) visit(c, depth + 1);\n return;\n }\n if (node.nodeType !== 1) return;\n const el = node as Element;\n const isVoid = VOID_ELEMENTS.has(el.localName);\n const inline = isVoid ? '' : inlineText(el);\n if (isVoid || inline !== null) {\n rows.push({ node, depth, kind: 'inline', expandable: false, expanded: false });\n return;\n }\n const expanded = expandedNodes.has(el);\n rows.push({ node, depth, kind: 'open', expandable: true, expanded });\n if (expanded) {\n for (const c of visibleChildren(el)) visit(c, depth + 1);\n rows.push({ node, depth, kind: 'close', expandable: false, expanded: true });\n }\n };\n for (const c of Array.from(root.childNodes)) visit(c, 0);\n return rows;\n}\n\nexport function expandRecursively(node: Node, maxDepth = 50): void {\n if (maxDepth < 0) return;\n if (node.nodeType === 1 || node.nodeType === 11) {\n expandedNodes.add(node);\n for (const c of visibleChildren(node)) expandRecursively(c, maxDepth - 1);\n }\n}\n\nexport function collapseRecursively(node: Node): void {\n expandedNodes.delete(node);\n for (const c of visibleChildren(node)) collapseRecursively(c);\n}\n\n/** Finds nodes matching a CSS selector, falling back to a text/attribute search. */\nexport function searchDom(query: string): Element[] {\n const q = query.trim();\n if (!q) return [];\n let results: Element[] = [];\n try {\n results = Array.from(document.querySelectorAll(q));\n } catch {\n results = [];\n }\n if (!results.length) {\n if (q.startsWith('/') || q.startsWith('(')) {\n try {\n const res = document.evaluate(q, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n for (let i = 0; i < res.snapshotLength; i++) {\n const n = res.snapshotItem(i);\n const el = n?.nodeType === 1 ? (n as Element) : n?.parentElement;\n if (el) results.push(el);\n }\n } catch {}\n }\n }\n if (!results.length) {\n const lower = q.toLowerCase();\n const walker = document.createTreeWalker(document.documentElement, NodeFilter.SHOW_ELEMENT);\n let n = walker.currentNode as Element | null;\n while (n) {\n if (!isDevtoolsNode(n)) {\n const own = Array.from(n.childNodes)\n .filter((c) => c.nodeType === 3)\n .map((c) => c.textContent)\n .join('');\n const attrs = Array.from(n.attributes)\n .map((a) => `${a.name}=\"${a.value}\"`)\n .join(' ');\n if (`<${n.localName} ${attrs}>${own}`.toLowerCase().includes(lower)) results.push(n);\n }\n n = walker.nextNode() as Element | null;\n }\n }\n return results.filter((r) => !isDevtoolsNode(r));\n}\n","import { memo, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { expandedNodes, setExpanded, useElements } from '../../store/elementsStore';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport { ConfirmDialog } from '../../components/ConfirmDialog';\nimport { cssPath } from '../../utils/domSelector';\nimport { copyText } from '../../panels/Network/util';\nimport { bus } from '../../core/eventBus';\nimport { collapseRecursively, expandRecursively, flattenTree, inlineText, type TreeRow } from './treeModel';\n\nconst ROW_H = 18;\nconst OVERSCAN = 20;\n\ntype Editing =\n | { node: Element; kind: 'attr'; attr: string }\n | { node: Element; kind: 'newattr' }\n | { node: Node; kind: 'text' };\n\n/* ---------------------------------------------------------- hide element (H key) */\n\nlet hideStyle: HTMLStyleElement | null = null;\nconst HIDE_ATTR = 'data-rid-hidden';\nfunction toggleHidden(el: Element) {\n if (!hideStyle || !hideStyle.isConnected) {\n hideStyle = document.createElement('style');\n hideStyle.textContent = `[${HIDE_ATTR}]{visibility:hidden!important}`;\n document.head.appendChild(hideStyle);\n }\n el.toggleAttribute(HIDE_ATTR);\n}\n\n/* ---------------------------------------------------------- undo for delete */\n\nlet lastDeleted: { node: Node; parent: Node; next: Node | null } | null = null;\n\nfunction deleteNode(node: Node) {\n const parent = node.parentNode;\n if (!parent || node === document.documentElement || node === document.body || node === document.head) return;\n lastDeleted = { node, parent, next: node.nextSibling };\n const sel = (node as Element).nextElementSibling ?? (node as Element).previousElementSibling ?? parent;\n parent.removeChild(node);\n useElements.getState().select(sel as Node);\n}\n\nfunction undoDelete() {\n if (!lastDeleted) return;\n const { node, parent, next } = lastDeleted;\n try {\n parent.insertBefore(node, next && next.parentNode === parent ? next : null);\n useElements.getState().select(node, true);\n } catch {}\n lastDeleted = null;\n}\n\n/** Parses `a=\"1\" b='2' c` into attribute pairs. */\nfunction parseAttributes(text: string): [string, string][] {\n const out: [string, string][] = [];\n const re = /([^\\s=/>\"']+)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'>]+)))?/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(text))) out.push([m[1], m[2] ?? m[3] ?? m[4] ?? '']);\n return out;\n}\n\nexport function DOMTree() {\n const domVersion = useElements((s) => s.domVersion);\n const expandVersion = useElements((s) => s.expandVersion);\n const selected = useElements((s) => s.selected);\n const hovered = useElements((s) => s.hovered);\n const revealToken = useElements((s) => s.revealToken);\n const [scrollTop, setScrollTop] = useState(0);\n const [height, setHeight] = useState(400);\n const [editing, setEditing] = useState<Editing | null>(null);\n const [htmlEdit, setHtmlEdit] = useState<{ el: Element; text: string } | null>(null);\n const ref = useRef<HTMLDivElement>(null);\n const menu = useContextMenu();\n\n // Expand <html> and <body> initially, select <body>.\n useEffect(() => {\n if (!expandedNodes.has(document.documentElement)) {\n expandedNodes.add(document.documentElement);\n expandedNodes.add(document.body);\n useElements.setState({ expandVersion: useElements.getState().expandVersion + 1 });\n }\n if (!useElements.getState().selected) useElements.getState().select(document.body);\n }, []);\n\n // If the selected node was removed from the document (e.g. React re-render), fall back to <body>.\n useEffect(() => {\n if (selected && !selected.isConnected) useElements.getState().select(document.body);\n }, [domVersion, selected]);\n\n const rows = useMemo(\n () => flattenTree(document),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [domVersion, expandVersion],\n );\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const ro = new ResizeObserver(() => setHeight(el.clientHeight));\n ro.observe(el);\n setHeight(el.clientHeight);\n return () => ro.disconnect();\n }, []);\n\n // Scroll the selected node into view when revealed (e.g. via the element picker).\n useLayoutEffect(() => {\n if (!revealToken || !selected) return;\n const idx = rows.findIndex((r) => r.node === selected && r.kind !== 'close');\n const el = ref.current;\n if (idx === -1 || !el) return;\n const top = idx * ROW_H;\n if (top < el.scrollTop || top > el.scrollTop + el.clientHeight - ROW_H * 2) {\n el.scrollTop = Math.max(0, top - el.clientHeight / 3);\n setScrollTop(el.scrollTop);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [revealToken]);\n\n const start = Math.max(0, Math.floor(scrollTop / ROW_H) - OVERSCAN);\n const end = Math.min(rows.length, Math.ceil((scrollTop + height) / ROW_H) + OVERSCAN);\n\n const ensureVisible = (idx: number) => {\n const el = ref.current;\n if (!el) return;\n const top = idx * ROW_H;\n if (top < el.scrollTop) el.scrollTop = top;\n else if (top + ROW_H > el.scrollTop + el.clientHeight) el.scrollTop = top + ROW_H - el.clientHeight;\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (editing || (e.target as HTMLElement).tagName === 'INPUT') return;\n const sel = useElements.getState().selected;\n const idx = rows.findIndex((r) => r.node === sel && r.kind !== 'close');\n const move = (dir: 1 | -1) => {\n for (let i = idx + dir; i >= 0 && i < rows.length; i += dir) {\n if (rows[i].kind !== 'close') {\n useElements.getState().select(rows[i].node);\n ensureVisible(i);\n return;\n }\n }\n };\n if ((e.ctrlKey || e.metaKey) && e.key === 'z') {\n e.preventDefault();\n undoDelete();\n return;\n }\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n move(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n move(-1);\n break;\n case 'ArrowRight': {\n e.preventDefault();\n const row = rows[idx];\n if (row?.expandable && !row.expanded) setExpanded(row.node, true);\n else move(1);\n break;\n }\n case 'ArrowLeft': {\n e.preventDefault();\n const row = rows[idx];\n if (row?.expandable && row.expanded) setExpanded(row.node, false);\n else if (sel?.parentNode && sel.parentNode.nodeType !== 9) {\n useElements.getState().select(sel.parentNode as Node);\n const pi = rows.findIndex((r) => r.node === sel.parentNode && r.kind !== 'close');\n if (pi >= 0) ensureVisible(pi);\n }\n break;\n }\n case 'Delete':\n case 'Backspace':\n if (sel) {\n e.preventDefault();\n deleteNode(sel);\n }\n break;\n case 'h':\n if (sel?.nodeType === 1) toggleHidden(sel as Element);\n break;\n case 'Enter':\n if (sel?.nodeType === 1) setEditing({ node: sel as Element, kind: 'newattr' });\n break;\n }\n };\n\n const openMenu = (e: React.MouseEvent, node: Node) => {\n useElements.getState().select(node);\n const el = node.nodeType === 1 ? (node as Element) : null;\n menu.open(e, [\n { label: 'Add attribute', disabled: !el, onSelect: () => el && setEditing({ node: el, kind: 'newattr' }) },\n { label: 'Edit as HTML', disabled: !el || el === document.documentElement, onSelect: () => el && setHtmlEdit({ el, text: el.outerHTML }) },\n { label: 'Edit text', disabled: node.nodeType !== 3, onSelect: () => setEditing({ node, kind: 'text' }) },\n { separator: true },\n { label: 'Copy outerHTML', disabled: !el, onSelect: () => el && copyText(el.outerHTML) },\n { label: 'Copy selector', disabled: !el, onSelect: () => el && copyText(cssPath(el)) },\n { label: 'Copy JS path', disabled: !el, onSelect: () => el && copyText(`document.querySelector(${JSON.stringify(cssPath(el))})`) },\n { label: 'Copy text content', onSelect: () => copyText(node.textContent ?? '') },\n { separator: true },\n { label: 'Hide element', hint: 'H', disabled: !el, onSelect: () => el && toggleHidden(el) },\n { label: 'Delete element', hint: 'Del', onSelect: () => deleteNode(node) },\n { label: 'Undo delete', hint: 'Ctrl+Z', disabled: !lastDeleted, onSelect: undoDelete },\n { separator: true },\n {\n label: 'Expand recursively',\n onSelect: () => {\n expandRecursively(node);\n useElements.setState({ expandVersion: useElements.getState().expandVersion + 1 });\n },\n },\n {\n label: 'Collapse children',\n onSelect: () => {\n collapseRecursively(node);\n useElements.setState({ expandVersion: useElements.getState().expandVersion + 1 });\n },\n },\n { label: 'Scroll into view', disabled: !el, onSelect: () => el?.scrollIntoView({ block: 'center', behavior: 'smooth' }) },\n {\n label: 'Store as global variable',\n onSelect: () => {\n const w = window as any;\n let i = 1;\n while (`temp${i}` in w) i++;\n w[`temp${i}`] = node;\n bus.emit('console:entry', { level: 'log', kind: 'input', args: [`temp${i}`], timestamp: Date.now() });\n bus.emit('console:entry', { level: 'log', kind: 'result', args: [node], timestamp: Date.now() });\n },\n },\n {\n label: 'Reveal in Console',\n onSelect: () => {\n bus.emit('console:entry', { level: 'log', kind: 'result', args: [node], timestamp: Date.now() });\n useDevtools.getState().updateSettings({ activePanel: 'console' });\n },\n },\n ]);\n };\n\n return (\n <div\n ref={ref}\n className=\"rid-dom-tree rid-mono\"\n tabIndex={0}\n role=\"tree\"\n aria-label=\"DOM tree\"\n onScroll={(e) => setScrollTop(e.currentTarget.scrollTop)}\n onKeyDown={onKeyDown}\n onMouseLeave={() => useElements.getState().hover(null)}\n >\n <div style={{ height: rows.length * ROW_H, position: 'relative' }}>\n {rows.slice(start, end).map((row, i) => (\n <Row\n key={start + i}\n row={row}\n top={(start + i) * ROW_H}\n selected={row.node === selected}\n hovered={row.node === hovered}\n editing={editing && editing.node === row.node && row.kind !== 'close' ? editing : null}\n setEditing={setEditing}\n onContextMenu={openMenu}\n />\n ))}\n </div>\n {htmlEdit && (\n <ConfirmDialog\n title=\"Edit as HTML\"\n confirmLabel=\"Apply\"\n onCancel={() => setHtmlEdit(null)}\n onConfirm={() => {\n const { el, text } = htmlEdit;\n const parent = el.parentNode;\n const next = el.nextSibling;\n try {\n el.outerHTML = text;\n const replacement = next ? next.previousSibling : parent?.lastChild;\n if (replacement) useElements.getState().select(replacement, true);\n } catch {}\n setHtmlEdit(null);\n }}\n >\n <textarea\n className=\"rid-input rid-mono rid-html-editor\"\n value={htmlEdit.text}\n autoFocus\n spellCheck={false}\n onChange={(e) => setHtmlEdit({ ...htmlEdit, text: e.target.value })}\n />\n </ConfirmDialog>\n )}\n {menu.element}\n </div>\n );\n}\n\ninterface RowProps {\n row: TreeRow;\n top: number;\n selected: boolean;\n hovered: boolean;\n editing: Editing | null;\n setEditing: (e: Editing | null) => void;\n onContextMenu: (e: React.MouseEvent, node: Node) => void;\n}\n\nconst Row = memo(function Row({ row, top, selected, hovered, editing, setEditing, onContextMenu }: RowProps) {\n const { node, depth, kind } = row;\n const cls = ['rid-dom-row', selected ? 'rid-selected' : '', hovered ? 'rid-hovered' : '', kind === 'close' ? 'rid-close' : ''].join(' ');\n const toggle = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.altKey) {\n if (row.expanded) collapseRecursively(node);\n else expandRecursively(node);\n useElements.setState({ expandVersion: useElements.getState().expandVersion + 1 });\n } else setExpanded(node, !row.expanded);\n };\n\n let content: React.ReactNode;\n switch (kind) {\n case 'doctype': {\n const dt = node as DocumentType;\n content = <span className=\"rid-dom-comment\">{`<!DOCTYPE ${dt.name}>`}</span>;\n break;\n }\n case 'text':\n content =\n editing?.kind === 'text' ? (\n <InlineEditor\n initial={node.textContent ?? ''}\n onCommit={(v) => {\n node.textContent = v;\n setEditing(null);\n }}\n onCancel={() => setEditing(null)}\n />\n ) : (\n <span className=\"rid-dom-text\" onDoubleClick={() => setEditing({ node, kind: 'text' })}>\n \"{truncate(node.textContent ?? '', 200)}\"\n </span>\n );\n break;\n case 'comment':\n content = <span className=\"rid-dom-comment\">{`<!--${truncate(node.textContent ?? '', 200)}-->`}</span>;\n break;\n case 'shadow':\n content = <span className=\"rid-dom-shadow\">#shadow-root ({(node as ShadowRoot).mode})</span>;\n break;\n case 'close':\n content = (\n <span className=\"rid-dom-tag\">\n </<span className=\"rid-dom-tagname\">{(node as Element).localName}</span>>\n </span>\n );\n break;\n default: {\n const el = node as Element;\n const inline = kind === 'inline' ? inlineText(el) : null;\n content = (\n <>\n <OpenTag el={el} editing={editing} setEditing={setEditing} />\n {kind === 'inline' && inline !== null && !isVoid(el) && (\n <>\n {inline && <span className=\"rid-dom-text\">{inline}</span>}\n <span className=\"rid-dom-tag\">\n </<span className=\"rid-dom-tagname\">{el.localName}</span>>\n </span>\n </>\n )}\n {kind === 'open' && !row.expanded && (\n <>\n <span className=\"rid-dom-ellipsis\" onClick={toggle}>\n …\n </span>\n <span className=\"rid-dom-tag\">\n </<span className=\"rid-dom-tagname\">{el.localName}</span>>\n </span>\n </>\n )}\n </>\n );\n }\n }\n\n return (\n <div\n className={cls}\n style={{ top, paddingLeft: depth * 14 + 16 }}\n role=\"treeitem\"\n aria-selected={selected}\n aria-expanded={row.expandable ? row.expanded : undefined}\n onMouseDown={() => useElements.getState().select(node)}\n onMouseEnter={() => useElements.getState().hover(node)}\n onContextMenu={(e) => onContextMenu(e, node)}\n onDoubleClick={(e) => {\n if (row.expandable && (e.target as HTMLElement).classList.contains('rid-dom-row')) setExpanded(node, !row.expanded);\n }}\n >\n {row.expandable && (\n <span className=\"rid-dom-toggle\" style={{ left: depth * 14 + 4 }} onMouseDown={(e) => e.stopPropagation()} onClick={toggle}>\n <span className={`rid-chevron${row.expanded ? ' rid-open' : ''}`} />\n </span>\n )}\n {content}\n {selected && kind !== 'close' && <span className=\"rid-dom-dollar\"> == $0</span>}\n </div>\n );\n});\n\nfunction isVoid(el: Element) {\n return ['area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', 'track', 'wbr'].includes(el.localName);\n}\n\nfunction truncate(s: string, n: number) {\n const t = s.replace(/\\s+/g, ' ');\n return t.length > n ? t.slice(0, n) + '…' : t;\n}\n\nfunction OpenTag({ el, editing, setEditing }: { el: Element; editing: Editing | null; setEditing: (e: Editing | null) => void }) {\n const attrs = Array.from(el.attributes).filter((a) => a.name !== 'data-rid-hidden');\n const commitAttr = (oldName: string | null, text: string) => {\n const pairs = parseAttributes(text);\n try {\n if (oldName && !pairs.some(([n]) => n === oldName)) el.removeAttribute(oldName);\n for (const [n, v] of pairs) el.setAttribute(n, v);\n } catch {}\n setEditing(null);\n };\n return (\n <span className=\"rid-dom-tag\">\n <\n <span className=\"rid-dom-tagname\">{el.localName}</span>\n {attrs.map((a) =>\n editing?.kind === 'attr' && editing.attr === a.name ? (\n <span key={a.name}>\n {' '}\n <InlineEditor initial={`${a.name}=\"${a.value}\"`} onCommit={(v) => commitAttr(a.name, v)} onCancel={() => setEditing(null)} />\n </span>\n ) : (\n <span key={a.name} onDoubleClick={(e) => {\n e.stopPropagation();\n setEditing({ node: el, kind: 'attr', attr: a.name });\n }}>\n {' '}\n <span className=\"rid-dom-attr\">{a.name}</span>\n {a.value !== '' && (\n <>\n =\"<span className=\"rid-dom-value\">{truncate(a.value, 150)}</span>\"\n </>\n )}\n </span>\n ),\n )}\n {editing?.kind === 'newattr' && (\n <span>\n {' '}\n <InlineEditor initial=\"\" onCommit={(v) => commitAttr(null, v)} onCancel={() => setEditing(null)} />\n </span>\n )}\n >\n </span>\n );\n}\n\nfunction InlineEditor({ initial, onCommit, onCancel }: { initial: string; onCommit: (v: string) => void; onCancel: () => void }) {\n const [v, setV] = useState(initial);\n const done = useRef(false);\n return (\n <input\n className=\"rid-inline-edit rid-mono\"\n autoFocus\n value={v}\n size={Math.max(4, v.length + 1)}\n onChange={(e) => setV(e.target.value)}\n onMouseDown={(e) => e.stopPropagation()}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter') {\n done.current = true;\n onCommit(v);\n } else if (e.key === 'Escape') {\n done.current = true;\n onCancel();\n }\n }}\n onBlur={() => {\n if (!done.current) onCommit(v);\n }}\n onFocus={(e) => e.currentTarget.select()}\n />\n );\n}\n","export type Specificity = [number, number, number];\n\n/** Splits a selector list on top-level commas. */\nexport function splitSelectorList(selector: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let quote: string | null = null;\n let cur = '';\n for (const ch of selector) {\n if (quote) {\n if (ch === quote) quote = null;\n cur += ch;\n continue;\n }\n if (ch === '\"' || ch === \"'\") quote = ch;\n else if (ch === '(' || ch === '[') depth++;\n else if (ch === ')' || ch === ']') depth--;\n if (ch === ',' && depth === 0) {\n out.push(cur.trim());\n cur = '';\n } else cur += ch;\n }\n if (cur.trim()) out.push(cur.trim());\n return out;\n}\n\n/** Approximate CSS specificity calculation (Selectors Level 4). */\nexport function specificity(selector: string): Specificity {\n let a = 0;\n let b = 0;\n let c = 0;\n let s = selector;\n // :is/:not/:has take the most specific argument; :where is zero.\n s = s.replace(/:where\\((?:[^()]|\\([^()]*\\))*\\)/g, '');\n s = s.replace(/:(is|not|has|matches)\\(((?:[^()]|\\([^()]*\\))*)\\)/g, (_, _n, inner: string) => {\n const best = splitSelectorList(inner)\n .map(specificity)\n .sort(compareSpecificity)\n .pop();\n if (best) {\n a += best[0];\n b += best[1];\n c += best[2];\n }\n return '';\n });\n s = s.replace(/\\[[^\\]]*\\]/g, () => {\n b++;\n return '';\n });\n s = s.replace(/\"[^\"]*\"|'[^']*'/g, '');\n a += (s.match(/#[\\w-]+/g) || []).length;\n s = s.replace(/#[\\w-]+/g, '');\n const pseudoEl = s.match(/::[\\w-]+(\\([^)]*\\))?|:(before|after|first-line|first-letter)\\b/g) || [];\n c += pseudoEl.length;\n s = s.replace(/::[\\w-]+(\\([^)]*\\))?|:(before|after|first-line|first-letter)\\b/g, '');\n b += (s.match(/\\.[\\w-]+/g) || []).length;\n s = s.replace(/\\.[\\w-]+/g, '');\n b += (s.match(/:[\\w-]+(\\([^)]*\\))?/g) || []).length;\n s = s.replace(/:[\\w-]+(\\([^)]*\\))?/g, '');\n c += (s.match(/(^|[\\s>+~])[a-zA-Z][\\w-]*/g) || []).length;\n return [a, b, c];\n}\n\nexport function compareSpecificity(x: Specificity, y: Specificity): number {\n return x[0] - y[0] || x[1] - y[1] || x[2] - y[2];\n}\n","import { compareSpecificity, specificity, splitSelectorList, type Specificity } from '../../utils/specificity';\nimport { isDevtoolsNode } from '../../core/ownership';\n\nexport interface Declaration {\n name: string;\n value: string;\n important: boolean;\n /** Disabled through the inspector checkbox (temporarily removed from the style). */\n disabled: boolean;\n /** Overridden by a declaration with higher precedence. */\n overridden: boolean;\n /** Only meaningful for inherited sections: whether the property inherits. */\n inherited?: boolean;\n}\n\nexport interface RuleModel {\n key: string;\n kind: 'inline' | 'rule';\n selector: string;\n /** Selectors from the list that matched the element (for highlighting). */\n matchedSelectors: string[];\n source: string;\n media: string[];\n style: CSSStyleDeclaration;\n rule?: CSSStyleRule;\n element?: Element;\n declarations: Declaration[];\n specificity: Specificity;\n order: number;\n editable: boolean;\n}\n\nexport interface InheritedSection {\n ancestor: Element;\n rules: RuleModel[];\n}\n\nexport interface MatchedStyles {\n rules: RuleModel[];\n inherited: InheritedSection[];\n blockedSheets: string[];\n}\n\n/* ---------------------------------------------------------- cssText parsing */\n\n/** Splits a cssText string into declarations, respecting parentheses and quotes. */\nexport function parseCssText(text: string): { name: string; value: string; important: boolean }[] {\n const out: { name: string; value: string; important: boolean }[] = [];\n let depth = 0;\n let quote: string | null = null;\n let cur = '';\n const push = () => {\n const d = cur.trim();\n cur = '';\n if (!d) return;\n const i = d.indexOf(':');\n if (i <= 0) return;\n const name = d.slice(0, i).trim();\n let value = d.slice(i + 1).trim();\n let important = false;\n const m = value.match(/\\s*!\\s*important\\s*$/i);\n if (m) {\n important = true;\n value = value.slice(0, m.index).trim();\n }\n out.push({ name, value, important });\n };\n for (const ch of text) {\n if (quote) {\n cur += ch;\n if (ch === quote) quote = null;\n continue;\n }\n if (ch === '\"' || ch === \"'\") quote = ch;\n else if (ch === '(') depth++;\n else if (ch === ')') depth--;\n if (ch === ';' && depth === 0) push();\n else cur += ch;\n }\n push();\n return out;\n}\n\n/* ---------------------------------------------------------- disabled declarations */\n\ninterface DisabledDecl {\n name: string;\n value: string;\n important: boolean;\n index: number;\n}\nconst disabledMap = new WeakMap<CSSStyleDeclaration, DisabledDecl[]>();\n\n/* ---------------------------------------------------------- change tracking (for \"revert\") */\n\nconst originalRuleText = new Map<CSSStyleDeclaration, string>();\nconst originalInline = new Map<Element, string | null>();\nlet inspectorSheet: HTMLStyleElement | null = null;\n\nfunction remember(style: CSSStyleDeclaration, element?: Element): void {\n if (element) {\n if (!originalInline.has(element)) originalInline.set(element, element.getAttribute('style'));\n } else if (!originalRuleText.has(style)) originalRuleText.set(style, style.cssText);\n}\n\nexport function hasChanges(): boolean {\n return originalRuleText.size > 0 || originalInline.size > 0 || !!inspectorSheet;\n}\n\n/** Reverts every style change made through the inspector. */\nexport function revertAllChanges(): void {\n for (const [style, text] of originalRuleText) {\n try {\n style.cssText = text;\n } catch {}\n disabledMap.delete(style);\n }\n for (const [el, attr] of originalInline) {\n if (attr == null) el.removeAttribute('style');\n else el.setAttribute('style', attr);\n disabledMap.delete((el as HTMLElement).style);\n }\n originalRuleText.clear();\n originalInline.clear();\n inspectorSheet?.remove();\n inspectorSheet = null;\n}\n\n/* ---------------------------------------------------------- mutations */\n\nexport function setDeclaration(model: RuleModel, name: string, value: string, important: boolean, oldName?: string): boolean {\n const style = model.style;\n remember(style, model.kind === 'inline' ? model.element : undefined);\n if (oldName && oldName !== name) style.removeProperty(oldName);\n if (!name) return true;\n // Strip a trailing \"!important\" typed in the value field.\n const m = value.match(/\\s*!\\s*important\\s*$/i);\n if (m) {\n important = true;\n value = value.slice(0, m.index).trim();\n }\n if (value === '') {\n style.removeProperty(name);\n return true;\n }\n style.setProperty(name, value, important ? 'important' : '');\n return style.getPropertyValue(name) !== '';\n}\n\nexport function removeDeclaration(model: RuleModel, name: string): void {\n remember(model.style, model.kind === 'inline' ? model.element : undefined);\n model.style.removeProperty(name);\n const list = disabledMap.get(model.style);\n if (list) disabledMap.set(model.style, list.filter((d) => d.name !== name));\n}\n\nexport function toggleDeclaration(model: RuleModel, decl: Declaration, enable: boolean): void {\n const style = model.style;\n remember(style, model.kind === 'inline' ? model.element : undefined);\n const list = disabledMap.get(style) ?? [];\n if (enable) {\n const d = list.find((x) => x.name === decl.name);\n disabledMap.set(\n style,\n list.filter((x) => x !== d),\n );\n style.setProperty(decl.name, decl.value, decl.important ? 'important' : '');\n } else {\n const index = model.declarations.findIndex((x) => x.name === decl.name);\n list.push({ name: decl.name, value: decl.value, important: decl.important, index });\n disabledMap.set(style, list);\n style.removeProperty(decl.name);\n }\n}\n\n/** Creates a new rule for the element in a devtools-owned \"inspector stylesheet\". */\nexport function addNewRule(el: Element): CSSStyleRule | null {\n if (!inspectorSheet || !inspectorSheet.isConnected) {\n inspectorSheet = document.createElement('style');\n inspectorSheet.setAttribute('data-rid-inspector-stylesheet', '');\n document.head.appendChild(inspectorSheet);\n }\n const sheet = inspectorSheet.sheet;\n if (!sheet) return null;\n const sel = el.id && /^[A-Za-z][\\w-]*$/.test(el.id) ? `#${el.id}` : el.classList.length ? `${el.localName}.${Array.from(el.classList).map(cssEscape).join('.')}` : el.localName;\n const idx = sheet.insertRule(`${sel} {}`, sheet.cssRules.length);\n return sheet.cssRules[idx] as CSSStyleRule;\n}\n\nexport function setRuleSelector(rule: CSSStyleRule, selector: string): boolean {\n remember(rule.style);\n const prev = rule.selectorText;\n rule.selectorText = selector;\n return rule.selectorText !== prev || selector === prev;\n}\n\nfunction cssEscape(s: string): string {\n return typeof CSS !== 'undefined' && CSS.escape ? CSS.escape(s) : s.replace(/[^\\w-]/g, '\\\\$&');\n}\n\n/* ---------------------------------------------------------- matching */\n\nfunction sheetLabel(sheet: CSSStyleSheet): string {\n const owner = sheet.ownerNode as Element | null;\n if (owner?.hasAttribute?.('data-rid-inspector-stylesheet')) return 'inspector-stylesheet';\n if (sheet.href) {\n try {\n const u = new URL(sheet.href);\n return u.pathname.split('/').pop() || u.host;\n } catch {\n return sheet.href;\n }\n }\n if (owner) {\n const id = owner.getAttribute('data-vite-dev-id') || owner.getAttribute('data-emotion') || owner.getAttribute('data-styled') || owner.id;\n if (id) return `<style> ${id.split('/').pop()}`;\n return '<style>';\n }\n return 'constructed stylesheet';\n}\n\nfunction lineOf(rule: CSSRule): string {\n // Line numbers aren't exposed by the CSSOM; use the rule index instead.\n const parent = rule.parentStyleSheet;\n if (!parent) return '';\n try {\n const idx = Array.prototype.indexOf.call(parent.cssRules, rule);\n return idx >= 0 ? `:${idx + 1}` : '';\n } catch {\n return '';\n }\n}\n\nfunction safeMatches(el: Element, selector: string): boolean {\n try {\n return el.matches(selector);\n } catch {\n return false;\n }\n}\n\nfunction conditionMatches(rule: CSSRule): boolean {\n try {\n if (rule instanceof CSSMediaRule) return window.matchMedia(rule.media.mediaText).matches;\n if (typeof CSSSupportsRule !== 'undefined' && rule instanceof CSSSupportsRule) return CSS.supports(rule.conditionText);\n } catch {}\n return true;\n}\n\nfunction collectSheets(el: Element): CSSStyleSheet[] {\n const sheets: CSSStyleSheet[] = [];\n const root = el.getRootNode() as Document | ShadowRoot;\n const docs: (Document | ShadowRoot)[] = root instanceof ShadowRoot ? [root] : [document];\n for (const d of docs) {\n for (const s of Array.from(d.styleSheets)) {\n const owner = s.ownerNode as Node | null;\n if (owner && isDevtoolsNode(owner)) continue;\n if (s.disabled) continue;\n sheets.push(s as CSSStyleSheet);\n }\n const adopted = (d as Document & { adoptedStyleSheets?: CSSStyleSheet[] }).adoptedStyleSheets;\n if (adopted) sheets.push(...adopted);\n }\n return sheets;\n}\n\n/**\n * Returns all rules matching an element, in Chrome's display order\n * (inline style first, then by cascade precedence).\n */\nexport function getMatchedRules(el: Element, { inheritedOnly = false } = {}): { rules: RuleModel[]; blockedSheets: string[] } {\n const rules: RuleModel[] = [];\n const blocked: string[] = [];\n let order = 0;\n\n const walk = (list: CSSRuleList, sheet: CSSStyleSheet, media: string[]) => {\n for (const rule of Array.from(list)) {\n order++;\n if (rule instanceof CSSStyleRule) {\n const selectors = splitSelectorList(rule.selectorText);\n const matched = selectors.filter((s) => !/::?(before|after|placeholder|selection|marker|backdrop|first-line|first-letter|-webkit-)/.test(s) && safeMatches(el, s));\n if (matched.length) {\n const spec = matched.map(specificity).sort(compareSpecificity).pop()!;\n rules.push({\n key: `r${order}-${sheetLabel(sheet)}`,\n kind: 'rule',\n selector: rule.selectorText,\n matchedSelectors: matched,\n source: sheetLabel(sheet) + lineOf(rule),\n media,\n style: rule.style,\n rule,\n declarations: [],\n specificity: spec,\n order,\n editable: true,\n });\n }\n } else if (rule instanceof CSSMediaRule) {\n if (conditionMatches(rule)) walk(rule.cssRules, sheet, [...media, `@media ${rule.media.mediaText}`]);\n } else if (typeof CSSSupportsRule !== 'undefined' && rule instanceof CSSSupportsRule) {\n if (conditionMatches(rule)) walk(rule.cssRules, sheet, [...media, `@supports ${rule.conditionText}`]);\n } else if ('cssRules' in rule && (rule as CSSGroupingRule).cssRules) {\n // @layer, @container, @scope… (conditions not evaluated)\n const label = (rule as any).name ? `@layer ${(rule as any).name}` : rule.cssText.slice(0, rule.cssText.indexOf('{')).trim();\n walk((rule as CSSGroupingRule).cssRules, sheet, [...media, label]);\n } else if (typeof CSSImportRule !== 'undefined' && rule instanceof CSSImportRule && rule.styleSheet) {\n try {\n walk(rule.styleSheet.cssRules, rule.styleSheet, media);\n } catch {\n blocked.push(rule.href);\n }\n }\n }\n };\n\n for (const sheet of collectSheets(el)) {\n let list: CSSRuleList;\n try {\n list = sheet.cssRules;\n } catch {\n blocked.push(sheet.href ?? '(unknown stylesheet)');\n continue;\n }\n walk(list, sheet, sheet.media && sheet.media.mediaText ? [`@media ${sheet.media.mediaText}`] : []);\n }\n\n // Cascade order: higher specificity, then later source order, wins.\n rules.sort((a, b) => compareSpecificity(b.specificity, a.specificity) || b.order - a.order);\n\n const html = el as HTMLElement;\n if (html.style && !inheritedOnly) {\n rules.unshift({\n key: 'inline',\n kind: 'inline',\n selector: 'element.style',\n matchedSelectors: [],\n source: '',\n media: [],\n style: html.style,\n element: el,\n declarations: [],\n specificity: [1000, 0, 0],\n order: Infinity,\n editable: true,\n });\n } else if (html.style && inheritedOnly && html.style.length) {\n rules.unshift({\n key: 'inline',\n kind: 'inline',\n selector: 'style attribute',\n matchedSelectors: [],\n source: '',\n media: [],\n style: html.style,\n element: el,\n declarations: [],\n specificity: [1000, 0, 0],\n order: Infinity,\n editable: true,\n });\n }\n\n for (const r of rules) r.declarations = readDeclarations(r.style);\n return { rules, blockedSheets: Array.from(new Set(blocked)) };\n}\n\nfunction readDeclarations(style: CSSStyleDeclaration): Declaration[] {\n const decls: Declaration[] = parseCssText(style.cssText).map((d) => ({ ...d, disabled: false, overridden: false }));\n const disabled = disabledMap.get(style);\n if (disabled) {\n for (const d of disabled) {\n if (decls.some((x) => x.name === d.name)) continue;\n decls.splice(Math.min(d.index, decls.length), 0, { name: d.name, value: d.value, important: d.important, disabled: true, overridden: false });\n }\n }\n return decls;\n}\n\n/** Inheritable CSS properties (subset covering everything commonly used). */\nexport const INHERITED_PROPERTIES = new Set([\n 'border-collapse', 'border-spacing', 'caption-side', 'color', 'cursor', 'direction', 'empty-cells', 'font', 'font-family',\n 'font-feature-settings', 'font-kerning', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant',\n 'font-variant-caps', 'font-variant-numeric', 'font-weight', 'hyphens', 'letter-spacing', 'line-height', 'list-style',\n 'list-style-image', 'list-style-position', 'list-style-type', 'orphans', 'quotes', 'tab-size', 'text-align', 'text-align-last',\n 'text-indent', 'text-justify', 'text-shadow', 'text-transform', 'text-rendering', 'visibility', 'white-space', 'widows',\n 'word-break', 'word-spacing', 'overflow-wrap', 'word-wrap', 'writing-mode', 'color-scheme', 'accent-color', 'caret-color',\n '-webkit-font-smoothing', 'pointer-events', 'user-select', 'text-decoration-color', 'fill', 'stroke', 'stroke-width',\n]);\n\nexport const isInheritable = (name: string): boolean => name.startsWith('--') || INHERITED_PROPERTIES.has(name);\n\n/** Marks overridden declarations across an ordered list of rules (most specific first). */\nfunction markOverridden(sections: RuleModel[][]): void {\n const importantWinner = new Set<string>();\n const normalWinner = new Set<string>();\n const all = sections.flat();\n // Important declarations win first, in display order.\n for (const r of all) for (const d of r.declarations) if (!d.disabled && d.important && !importantWinner.has(d.name)) importantWinner.add(d.name);\n const seenImportant = new Set<string>();\n for (const r of all) {\n for (const d of r.declarations) {\n if (d.disabled) continue;\n if (d.inherited === false) continue;\n if (d.important) {\n d.overridden = seenImportant.has(d.name);\n seenImportant.add(d.name);\n } else {\n d.overridden = importantWinner.has(d.name) || normalWinner.has(d.name);\n normalWinner.add(d.name);\n }\n }\n }\n}\n\n/** Full style information for the Styles pane. */\nexport function getMatchedStyles(el: Element, maxAncestors = 8): MatchedStyles {\n const { rules, blockedSheets } = getMatchedRules(el);\n const inherited: InheritedSection[] = [];\n let parent = el.parentElement;\n let n = 0;\n while (parent && n < maxAncestors) {\n const { rules: pr } = getMatchedRules(parent, { inheritedOnly: true });\n const withInherited = pr\n .map((r) => {\n r.declarations = r.declarations.map((d) => ({ ...d, inherited: isInheritable(d.name) }));\n return r;\n })\n .filter((r) => r.declarations.some((d) => d.inherited));\n if (withInherited.length) inherited.push({ ancestor: parent, rules: withInherited });\n parent = parent.parentElement;\n n++;\n }\n markOverridden([rules, ...inherited.map((s) => s.rules)]);\n return { rules, inherited, blockedSheets };\n}\n\n/* ---------------------------------------------------------- computed defaults */\n\nlet defaultsFrame: HTMLIFrameElement | null = null;\nconst defaultsCache = new Map<string, Map<string, string>>();\n\n/**\n * Computed style of a pristine element with the same tag, used by the Computed\n * pane to hide properties that still have their default value.\n */\nexport function getDefaultComputed(tag: string, host: ShadowRoot | null): Map<string, string> | null {\n const cached = defaultsCache.get(tag);\n if (cached) return cached;\n try {\n if (!defaultsFrame || !defaultsFrame.isConnected) {\n defaultsFrame = document.createElement('iframe');\n defaultsFrame.setAttribute('aria-hidden', 'true');\n defaultsFrame.tabIndex = -1;\n defaultsFrame.style.cssText = 'position:absolute;width:0;height:0;border:0;visibility:hidden;pointer-events:none';\n (host ?? document.body).appendChild(defaultsFrame);\n }\n const doc = defaultsFrame.contentDocument;\n if (!doc || !doc.body) return null;\n const el = doc.createElement(tag);\n doc.body.appendChild(el);\n const cs = defaultsFrame.contentWindow!.getComputedStyle(el);\n const map = new Map<string, string>();\n for (let i = 0; i < cs.length; i++) map.set(cs[i], cs.getPropertyValue(cs[i]));\n el.remove();\n defaultsCache.set(tag, map);\n return map;\n } catch {\n return null;\n }\n}\n","import { useEffect, useMemo, useRef, useState } from 'react';\nimport { useElements } from '../../store/elementsStore';\nimport { elementLabel } from '../../utils/domSelector';\nimport { PlusIcon } from '../../components/Icons';\nimport {\n addNewRule,\n getMatchedStyles,\n hasChanges,\n removeDeclaration,\n revertAllChanges,\n setDeclaration,\n setRuleSelector,\n toggleDeclaration,\n type Declaration,\n type RuleModel,\n} from './cssModel';\n\n/** Recompute styles on DOM changes, debounced so busy pages stay responsive. */\nfunction useDebouncedDomVersion(delay = 250): number {\n const domVersion = useElements((s) => s.domVersion);\n const [v, setV] = useState(domVersion);\n useEffect(() => {\n const t = setTimeout(() => setV(domVersion), delay);\n return () => clearTimeout(t);\n }, [domVersion, delay]);\n return v;\n}\n\nexport function StylesPane({ el }: { el: Element }) {\n const styleVersion = useElements((s) => s.styleVersion);\n const bump = useElements((s) => s.bumpStyles);\n const domVersion = useDebouncedDomVersion();\n const [filter, setFilter] = useState('');\n const [showCls, setShowCls] = useState(false);\n const [newRuleKey, setNewRuleKey] = useState<string | null>(null);\n\n const styles = useMemo(\n () => getMatchedStyles(el),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [el, styleVersion, domVersion],\n );\n\n const f = filter.trim().toLowerCase();\n const matchesFilter = (d: Declaration) => !f || d.name.includes(f) || d.value.toLowerCase().includes(f);\n\n return (\n <div className=\"rid-styles\">\n <div className=\"rid-subtoolbar\">\n <input className=\"rid-input\" style={{ flex: 1 }} placeholder=\"Filter\" aria-label=\"Filter styles\" value={filter} onChange={(e) => setFilter(e.target.value)} />\n <button className={`rid-icon-btn${showCls ? ' rid-on' : ''}`} title=\"Element classes\" onClick={() => setShowCls(!showCls)}>\n .cls\n </button>\n <button\n className=\"rid-icon-btn\"\n title=\"New style rule\"\n aria-label=\"New style rule\"\n onClick={() => {\n const rule = addNewRule(el);\n if (rule) setNewRuleKey(rule.selectorText);\n bump();\n }}\n >\n <PlusIcon size={14} />\n </button>\n {hasChanges() && (\n <button\n className=\"rid-btn\"\n style={{ height: 20, padding: '0 6px' }}\n title=\"Revert all CSS changes made in the inspector\"\n onClick={() => {\n revertAllChanges();\n bump();\n }}\n >\n Revert changes\n </button>\n )}\n </div>\n {showCls && <ClassEditor el={el} />}\n <div className=\"rid-styles-body rid-mono\">\n {styles.rules.map((r) => (\n <RuleBlock key={r.key + styleVersion} rule={r} filter={matchesFilter} autoFocusSelector={r.kind === 'rule' && r.source.startsWith('inspector-stylesheet') && newRuleKey === r.selector} onChange={bump} />\n ))}\n {styles.inherited.map((section, i) => (\n <div key={i}>\n <div className=\"rid-styles-inherited\">\n Inherited from{' '}\n <span className=\"rid-v-node\" onClick={() => useElements.getState().select(section.ancestor, true)}>\n {elementLabel(section.ancestor)}\n </span>\n </div>\n {section.rules.map((r) => (\n <RuleBlock key={r.key + styleVersion} rule={r} filter={(d) => !!d.inherited && matchesFilter(d)} inherited onChange={bump} />\n ))}\n </div>\n ))}\n {styles.blockedSheets.length > 0 && (\n <div className=\"rid-styles-note\">\n {styles.blockedSheets.length} cross-origin stylesheet(s) cannot be inspected (browser security restriction):\n {styles.blockedSheets.map((s) => (\n <div key={s} className=\"rid-v-faint\">\n {s}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction ClassEditor({ el }: { el: Element }) {\n const [, force] = useState(0);\n const [disabled, setDisabled] = useState<string[]>([]);\n const [value, setValue] = useState('');\n const classes = Array.from(new Set([...Array.from(el.classList), ...disabled]));\n return (\n <div className=\"rid-cls-bar\">\n <input\n className=\"rid-input\"\n placeholder=\"Add new class\"\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && value.trim()) {\n value.trim().split(/\\s+/).forEach((c) => el.classList.add(c));\n setValue('');\n force((x) => x + 1);\n }\n }}\n />\n <div className=\"rid-cls-list\">\n {classes.map((c) => (\n <label key={c} className=\"rid-checkbox\">\n <input\n type=\"checkbox\"\n checked={el.classList.contains(c)}\n onChange={(e) => {\n if (e.target.checked) {\n el.classList.add(c);\n setDisabled(disabled.filter((x) => x !== c));\n } else {\n el.classList.remove(c);\n setDisabled([...disabled, c]);\n }\n }}\n />\n {c}\n </label>\n ))}\n </div>\n </div>\n );\n}\n\nfunction RuleBlock({\n rule,\n filter,\n inherited,\n autoFocusSelector,\n onChange,\n}: {\n rule: RuleModel;\n filter: (d: Declaration) => boolean;\n inherited?: boolean;\n autoFocusSelector?: boolean;\n onChange: () => void;\n}) {\n const [adding, setAdding] = useState(false);\n const [editingSelector, setEditingSelector] = useState(!!autoFocusSelector);\n const decls = rule.declarations.filter(filter);\n if (!decls.length && inherited) return null;\n if (!decls.length && rule.declarations.length && !adding) {\n // All declarations filtered out\n return null;\n }\n\n const selector =\n rule.kind === 'inline' ? (\n <span className=\"rid-css-selector\">{rule.selector}</span>\n ) : editingSelector && rule.rule ? (\n <TextEdit\n initial={rule.selector}\n onCommit={(v) => {\n setEditingSelector(false);\n if (v.trim() && v !== rule.selector) setRuleSelector(rule.rule!, v.trim());\n onChange();\n }}\n onCancel={() => setEditingSelector(false)}\n />\n ) : (\n <span className=\"rid-css-selector\" onClick={() => rule.source.startsWith('inspector-stylesheet') && setEditingSelector(true)}>\n {highlightSelector(rule.selector, rule.matchedSelectors)}\n </span>\n );\n\n return (\n <div className=\"rid-css-rule\">\n {rule.media.map((m) => (\n <div key={m} className=\"rid-css-media\">\n {m}\n </div>\n ))}\n <div className=\"rid-css-rule-head\">\n {selector} {'{'}\n <span className=\"rid-css-source\" title={rule.source}>\n {rule.source}\n </span>\n </div>\n {decls.map((d) => (\n <DeclRow key={d.name} rule={rule} decl={d} onChange={onChange} />\n ))}\n {adding && (\n <NewDeclRow\n onDone={(name, value) => {\n setAdding(false);\n if (name && value) setDeclaration(rule, name.trim(), value.trim(), false);\n onChange();\n }}\n />\n )}\n <div\n className=\"rid-css-rule-end\"\n onClick={() => !inherited && setAdding(true)}\n title={inherited ? undefined : 'Click to add a declaration'}\n >\n {'}'}\n </div>\n </div>\n );\n}\n\nfunction highlightSelector(selector: string, matched: string[]) {\n if (!matched.length) return selector;\n const parts = selector.split(/\\s*,\\s*/);\n return parts.map((p, i) => (\n <span key={i}>\n {i > 0 && ', '}\n <span className={matched.includes(p) ? 'rid-css-sel-match' : 'rid-css-sel-nomatch'}>{p}</span>\n </span>\n ));\n}\n\nconst COLOR_RE = /(#[0-9a-fA-F]{3,8}\\b|rgba?\\([^)]*\\)|hsla?\\([^)]*\\)|\\b(?:red|blue|green|white|black|gray|grey|orange|purple|yellow|pink|transparent|currentcolor)\\b)/i;\n\nlet colorCtx: CanvasRenderingContext2D | null | undefined;\nfunction toHex(color: string): string | null {\n if (colorCtx === undefined) colorCtx = document.createElement('canvas').getContext('2d');\n if (!colorCtx) return null;\n colorCtx.fillStyle = '#000';\n colorCtx.fillStyle = color;\n const v = colorCtx.fillStyle;\n return v.startsWith('#') ? v : null;\n}\n\nfunction DeclRow({ rule, decl, onChange }: { rule: RuleModel; decl: Declaration; onChange: () => void }) {\n const [edit, setEdit] = useState<'name' | 'value' | null>(null);\n const original = useRef(decl.value);\n const cls = ['rid-css-decl', decl.disabled ? 'rid-disabled' : '', decl.overridden ? 'rid-overridden' : ''].join(' ');\n const color = !decl.disabled ? decl.value.match(COLOR_RE)?.[0] : undefined;\n const hex = color ? toHex(color) : null;\n return (\n <div className={cls}>\n <input\n type=\"checkbox\"\n className=\"rid-css-toggle\"\n checked={!decl.disabled}\n title={decl.disabled ? 'Enable declaration' : 'Disable declaration'}\n aria-label={`Toggle ${decl.name}`}\n onChange={(e) => {\n toggleDeclaration(rule, decl, e.target.checked);\n onChange();\n }}\n />\n {edit === 'name' ? (\n <TextEdit\n initial={decl.name}\n onCommit={(v) => {\n setEdit(null);\n const name = v.trim();\n if (!name) removeDeclaration(rule, decl.name);\n else if (name !== decl.name) setDeclaration(rule, name, decl.value, decl.important, decl.name);\n onChange();\n }}\n onCancel={() => setEdit(null)}\n />\n ) : (\n <span className=\"rid-css-prop\" onClick={() => !decl.disabled && setEdit('name')}>\n {decl.name}\n </span>\n )}\n <span className=\"rid-css-colon\">: </span>\n {hex && (\n <span className=\"rid-css-swatch\" style={{ background: color }} title=\"Pick color\">\n <input\n type=\"color\"\n value={hex}\n aria-label={`Pick color for ${decl.name}`}\n onChange={(e) => {\n setDeclaration(rule, decl.name, e.target.value, decl.important);\n onChange();\n }}\n />\n </span>\n )}\n {edit === 'value' ? (\n <TextEdit\n initial={decl.value + (decl.important ? ' !important' : '')}\n numeric\n onLive={(v) => setDeclaration(rule, decl.name, v, false)}\n onCommit={(v) => {\n setEdit(null);\n if (!v.trim()) removeDeclaration(rule, decl.name);\n else setDeclaration(rule, decl.name, v.trim(), false);\n onChange();\n }}\n onCancel={() => {\n setEdit(null);\n setDeclaration(rule, decl.name, original.current, decl.important);\n onChange();\n }}\n />\n ) : (\n <span\n className=\"rid-css-value\"\n onClick={() => {\n if (decl.disabled) return;\n original.current = decl.value;\n setEdit('value');\n }}\n >\n {decl.value}\n {decl.important && <span className=\"rid-css-important\"> !important</span>}\n </span>\n )}\n <span>;</span>\n </div>\n );\n}\n\nfunction NewDeclRow({ onDone }: { onDone: (name: string, value: string) => void }) {\n const [name, setName] = useState<string | null>(null);\n if (name === null) {\n return (\n <div className=\"rid-css-decl\">\n <span className=\"rid-css-toggle-space\" />\n <TextEdit\n initial=\"\"\n placeholder=\"property\"\n onCommit={(v) => (v.trim() ? setName(v.trim()) : onDone('', ''))}\n onCancel={() => onDone('', '')}\n splitOnColon={(n, v) => onDone(n, v)}\n />\n </div>\n );\n }\n return (\n <div className=\"rid-css-decl\">\n <span className=\"rid-css-toggle-space\" />\n <span className=\"rid-css-prop\">{name}</span>: <TextEdit initial=\"\" placeholder=\"value\" onCommit={(v) => onDone(name, v)} onCancel={() => onDone('', '')} />\n </div>\n );\n}\n\nfunction bumpNumber(value: string, caret: number, delta: number): string | null {\n const re = /-?\\d*\\.?\\d+/g;\n let m: RegExpExecArray | null;\n let target: RegExpExecArray | null = null;\n while ((m = re.exec(value))) {\n if (caret >= m.index && caret <= m.index + m[0].length) {\n target = m;\n break;\n }\n if (!target) target = m;\n }\n if (!target) return null;\n const n = parseFloat(target[0]) + delta;\n const s = String(Math.round(n * 1000) / 1000);\n return value.slice(0, target.index) + s + value.slice(target.index + target[0].length);\n}\n\nfunction TextEdit({\n initial,\n onCommit,\n onCancel,\n onLive,\n numeric,\n placeholder,\n splitOnColon,\n}: {\n initial: string;\n onCommit: (v: string) => void;\n onCancel: () => void;\n onLive?: (v: string) => void;\n numeric?: boolean;\n placeholder?: string;\n splitOnColon?: (name: string, value: string) => void;\n}) {\n const [v, setV] = useState(initial);\n const done = useRef(false);\n const finish = (fn: () => void) => {\n if (done.current) return;\n done.current = true;\n fn();\n };\n return (\n <input\n className=\"rid-inline-edit rid-mono\"\n autoFocus\n value={v}\n placeholder={placeholder}\n size={Math.max(placeholder ? placeholder.length : 2, v.length + 1)}\n spellCheck={false}\n onFocus={(e) => e.currentTarget.select()}\n onChange={(e) => {\n const val = e.target.value;\n // Typing \"color: red\" in the name field splits into name/value.\n if (splitOnColon && val.includes(':')) {\n const [n, ...rest] = val.split(':');\n const value = rest.join(':').replace(/;\\s*$/, '').trim();\n if (value) {\n finish(() => splitOnColon(n.trim(), value));\n return;\n }\n }\n setV(val);\n onLive?.(val);\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter' || e.key === 'Tab') {\n e.preventDefault();\n finish(() => onCommit(v));\n } else if (e.key === 'Escape') {\n e.preventDefault();\n finish(onCancel);\n } else if (numeric && (e.key === 'ArrowUp' || e.key === 'ArrowDown')) {\n e.preventDefault();\n const step = e.shiftKey ? 10 : e.altKey ? 0.1 : 1;\n const next = bumpNumber(v, e.currentTarget.selectionStart ?? 0, e.key === 'ArrowUp' ? step : -step);\n if (next != null) {\n setV(next);\n onLive?.(next);\n }\n }\n }}\n onBlur={() => finish(() => onCommit(v))}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useElements } from '../../store/elementsStore';\n\nconst SIDES = ['top', 'right', 'bottom', 'left'] as const;\ntype Layer = 'position' | 'margin' | 'border' | 'padding';\n\nfunction fmt(v: string): string {\n const n = parseFloat(v);\n if (isNaN(n)) return '-';\n return n === 0 ? '-' : String(Math.round(n * 100) / 100);\n}\n\nfunction prop(layer: Layer, side: (typeof SIDES)[number]): string {\n if (layer === 'position') return side;\n if (layer === 'border') return `border-${side}-width`;\n return `${layer}-${side}`;\n}\n\n/** Chrome-style box model diagram. Values are editable (applied as inline styles). */\nexport function BoxModel({ el }: { el: Element }) {\n const domVersion = useElements((s) => s.domVersion);\n const styleVersion = useElements((s) => s.styleVersion);\n const bump = useElements((s) => s.bumpStyles);\n const hover = useElements((s) => s.hover);\n const [, setTick] = useState(0);\n const [editing, setEditing] = useState<string | null>(null);\n useEffect(() => setTick((t) => t + 1), [domVersion, styleVersion]);\n\n const cs = getComputedStyle(el);\n const rect = el.getBoundingClientRect();\n const positioned = cs.position !== 'static';\n const html = el as HTMLElement;\n const contentW = (html.clientWidth || rect.width) - parseFloat(cs.paddingLeft) - parseFloat(cs.paddingRight);\n const contentH = (html.clientHeight || rect.height) - parseFloat(cs.paddingTop) - parseFloat(cs.paddingBottom);\n\n const apply = (name: string, v: string) => {\n setEditing(null);\n const t = v.trim();\n if (!t || t === '-') return;\n html.style.setProperty(name, /^-?\\d*\\.?\\d+$/.test(t) ? `${t}px` : t);\n bump();\n };\n\n const Values = ({ layer }: { layer: Layer }) => (\n <>\n {SIDES.map((s) => {\n const name = prop(layer, s);\n const shown = fmt(cs.getPropertyValue(name));\n return editing === name ? (\n <input\n key={s}\n className={`rid-bm-v rid-bm-${s} rid-bm-input`}\n autoFocus\n defaultValue={shown === '-' ? '0' : shown}\n onFocus={(e) => e.currentTarget.select()}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter') apply(name, e.currentTarget.value);\n if (e.key === 'Escape') setEditing(null);\n }}\n onBlur={(e) => apply(name, e.currentTarget.value)}\n />\n ) : (\n <span key={s} className={`rid-bm-v rid-bm-${s}`} onDoubleClick={() => setEditing(name)} title={`${name} (double-click to edit)`}>\n {shown}\n </span>\n );\n })}\n </>\n );\n\n const inner = (\n <div className=\"rid-bm-margin rid-bm-box\" onMouseEnter={() => hover(el)} onMouseLeave={() => hover(null)}>\n <span className=\"rid-bm-label\">margin</span>\n <Values layer=\"margin\" />\n <div className=\"rid-bm-border rid-bm-box\">\n <span className=\"rid-bm-label\">border</span>\n <Values layer=\"border\" />\n <div className=\"rid-bm-padding rid-bm-box\">\n <span className=\"rid-bm-label\">padding</span>\n <Values layer=\"padding\" />\n <div className=\"rid-bm-content\">\n {fmt(String(cs.boxSizing === 'border-box' || contentW >= 0 ? Math.max(0, contentW) : rect.width))} ×{' '}\n {fmt(String(Math.max(0, contentH)))}\n </div>\n </div>\n </div>\n </div>\n );\n\n return (\n <div className=\"rid-boxmodel rid-mono\">\n {positioned ? (\n <div className=\"rid-bm-position rid-bm-box\">\n <span className=\"rid-bm-label\">position</span>\n <Values layer=\"position\" />\n {inner}\n </div>\n ) : (\n inner\n )}\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { useElements } from '../../store/elementsStore';\nimport { useDevtoolsContext } from '../../hooks/useDevtoolsContext';\nimport { getDefaultComputed, getMatchedStyles } from './cssModel';\nimport { BoxModel } from './BoxModel';\n\nexport function ComputedPane({ el }: { el: Element }) {\n const domVersion = useElements((s) => s.domVersion);\n const styleVersion = useElements((s) => s.styleVersion);\n const { shadowRoot } = useDevtoolsContext();\n const [filter, setFilter] = useState('');\n const [showAll, setShowAll] = useState(false);\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const t = setTimeout(() => setTick((x) => x + 1), 200);\n return () => clearTimeout(t);\n }, [domVersion, styleVersion]);\n\n const { props, authored } = useMemo(() => {\n const cs = getComputedStyle(el);\n const defaults = getDefaultComputed(el.localName, shadowRoot);\n const authored = new Map<string, string>();\n try {\n const ms = getMatchedStyles(el, 0);\n for (const r of ms.rules) for (const d of r.declarations) if (!d.disabled && !d.overridden && !authored.has(d.name)) authored.set(d.name, r.kind === 'inline' ? 'element.style' : r.selector);\n } catch {}\n const list: { name: string; value: string; isDefault: boolean }[] = [];\n for (let i = 0; i < cs.length; i++) {\n const name = cs[i];\n const value = cs.getPropertyValue(name);\n list.push({ name, value, isDefault: !!defaults && defaults.get(name) === value && !authored.has(name) });\n }\n list.sort((a, b) => (a.name.startsWith('-') === b.name.startsWith('-') ? a.name.localeCompare(b.name) : a.name.startsWith('-') ? 1 : -1));\n return { props: list, authored };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [el, tick]);\n\n const f = filter.trim().toLowerCase();\n const visible = props.filter((p) => (showAll || !p.isDefault) && (!f || p.name.includes(f) || p.value.toLowerCase().includes(f)));\n\n return (\n <div className=\"rid-computed\">\n <BoxModel el={el} />\n <div className=\"rid-subtoolbar\">\n <input className=\"rid-input\" style={{ flex: 1 }} placeholder=\"Filter\" aria-label=\"Filter computed styles\" value={filter} onChange={(e) => setFilter(e.target.value)} />\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={showAll} onChange={(e) => setShowAll(e.target.checked)} /> Show all\n </label>\n </div>\n <div className=\"rid-computed-list rid-mono\">\n {visible.map((p) => (\n <div key={p.name} className={`rid-computed-row${p.isDefault ? ' rid-dim' : ''}`} title={authored.get(p.name) ? `Set by ${authored.get(p.name)}` : undefined}>\n <span className=\"rid-css-prop\">{p.name}</span>\n <span className=\"rid-css-value\">{p.value}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useElements } from '../../store/elementsStore';\nimport { ObjectInspector } from '../../components/ObjectInspector';\nimport { PlusIcon, TrashIcon } from '../../components/Icons';\nimport { BoxModel } from '../CSSInspector/BoxModel';\n\n/** Layout / properties / attributes summary of the selected element. */\nexport function LayoutPane({ el }: { el: Element }) {\n const domVersion = useElements((s) => s.domVersion);\n const styleVersion = useElements((s) => s.styleVersion);\n const [, setTick] = useState(0);\n useEffect(() => setTick((t) => t + 1), [domVersion, styleVersion]);\n const cs = getComputedStyle(el);\n const r = el.getBoundingClientRect();\n const html = el as HTMLElement;\n const rows: [string, string][] = [\n ['Rendered size', `${round(r.width)} × ${round(r.height)} px`],\n ['Offset size', html.offsetWidth != null ? `${html.offsetWidth} × ${html.offsetHeight} px` : '-'],\n ['Client size', `${el.clientWidth} × ${el.clientHeight} px`],\n ['Scroll size', `${el.scrollWidth} × ${el.scrollHeight} px`],\n ['Viewport position', `x ${round(r.left)}, y ${round(r.top)}`],\n ['display', cs.display],\n ['position', cs.position],\n ['box-sizing', cs.boxSizing],\n ['z-index', cs.zIndex],\n ['overflow', cs.overflow],\n ['float', cs.cssFloat],\n ['visibility', cs.visibility],\n ['opacity', cs.opacity],\n ];\n if (cs.display.includes('flex')) rows.push(['flex-direction', cs.flexDirection], ['justify-content', cs.justifyContent], ['align-items', cs.alignItems], ['gap', cs.gap]);\n if (cs.display.includes('grid')) rows.push(['grid-template-columns', cs.gridTemplateColumns], ['grid-template-rows', cs.gridTemplateRows], ['gap', cs.gap]);\n const typo: [string, string][] = [\n ['font-family', cs.fontFamily],\n ['font-size', cs.fontSize],\n ['font-weight', cs.fontWeight],\n ['font-style', cs.fontStyle],\n ['line-height', cs.lineHeight],\n ['letter-spacing', cs.letterSpacing],\n ['color', cs.color],\n ['text-align', cs.textAlign],\n ['background-color', cs.backgroundColor],\n ];\n const borders: [string, string][] = SIDES.map((s) => [\n `border-${s}`,\n `${cs.getPropertyValue(`border-${s}-width`)} ${cs.getPropertyValue(`border-${s}-style`)} ${cs.getPropertyValue(`border-${s}-color`)}`,\n ]);\n borders.push(['border-radius', cs.borderRadius]);\n return (\n <div className=\"rid-layout\">\n <BoxModel el={el} />\n <SummaryTable title=\"Dimensions & layout\" rows={rows} />\n <SummaryTable title=\"Border\" rows={borders} />\n <SummaryTable title=\"Typography\" rows={typo} color />\n </div>\n );\n}\n\nconst SIDES = ['top', 'right', 'bottom', 'left'];\nconst round = (n: number) => Math.round(n * 100) / 100;\n\nfunction SummaryTable({ title, rows, color }: { title: string; rows: [string, string][]; color?: boolean }) {\n return (\n <section className=\"rid-summary\">\n <h4>{title}</h4>\n <dl className=\"rid-kv\">\n {rows.map(([k, v]) => (\n <div key={k} style={{ display: 'contents' }}>\n <dt>{k}</dt>\n <dd>\n {color && /color/.test(k) && <span className=\"rid-css-swatch\" style={{ background: v }} />}\n {v}\n </dd>\n </div>\n ))}\n </dl>\n </section>\n );\n}\n\nexport function PropertiesPane({ el }: { el: Element }) {\n const domVersion = useElements((s) => s.domVersion);\n const [, setTick] = useState(0);\n useEffect(() => setTick((t) => t + 1), [domVersion]);\n const [newName, setNewName] = useState('');\n const [newValue, setNewValue] = useState('');\n const attrs = Array.from(el.attributes);\n return (\n <div className=\"rid-props\">\n <section className=\"rid-summary\">\n <h4>Attributes</h4>\n <table className=\"rid-table rid-attr-table\">\n <tbody>\n {attrs.map((a) => (\n <tr key={a.name}>\n <td className=\"rid-dom-attr rid-mono\" style={{ width: '35%' }}>\n {a.name}\n </td>\n <td className=\"rid-edit\">\n <input\n className=\"rid-mono\"\n defaultValue={a.value}\n key={a.value}\n aria-label={`Value of ${a.name}`}\n onKeyDown={(e) => e.key === 'Enter' && (e.currentTarget as HTMLInputElement).blur()}\n onBlur={(e) => e.target.value !== a.value && el.setAttribute(a.name, e.target.value)}\n />\n </td>\n <td style={{ width: 28, padding: 0 }}>\n <button className=\"rid-icon-btn\" title=\"Remove attribute\" aria-label={`Remove ${a.name}`} onClick={() => el.removeAttribute(a.name)}>\n <TrashIcon size={13} />\n </button>\n </td>\n </tr>\n ))}\n <tr>\n <td className=\"rid-edit\">\n <input className=\"rid-mono\" placeholder=\"name\" value={newName} onChange={(e) => setNewName(e.target.value)} aria-label=\"New attribute name\" />\n </td>\n <td className=\"rid-edit\">\n <input\n className=\"rid-mono\"\n placeholder=\"value\"\n value={newValue}\n onChange={(e) => setNewValue(e.target.value)}\n aria-label=\"New attribute value\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && newName.trim()) {\n try {\n el.setAttribute(newName.trim(), newValue);\n } catch {}\n setNewName('');\n setNewValue('');\n }\n }}\n />\n </td>\n <td style={{ width: 28, padding: 0 }}>\n <button\n className=\"rid-icon-btn\"\n title=\"Add attribute\"\n aria-label=\"Add attribute\"\n onClick={() => {\n if (!newName.trim()) return;\n try {\n el.setAttribute(newName.trim(), newValue);\n } catch {}\n setNewName('');\n setNewValue('');\n }}\n >\n <PlusIcon size={13} />\n </button>\n </td>\n </tr>\n </tbody>\n </table>\n </section>\n <section className=\"rid-summary\">\n <h4>Properties</h4>\n <div style={{ padding: '2px 8px' }}>\n <ObjectInspector value={el} name={el.localName} defaultExpanded expandNodes />\n </div>\n </section>\n </div>\n );\n}\n","import { useLayoutEffect, useRef, useState } from 'react';\nimport { useElements, type ElementsSidebarTab } from '../../store/elementsStore';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { SplitPane } from '../../components/SplitPane';\nimport { DOMTree } from '../../inspectors/DOMInspector/DOMTree';\nimport { searchDom } from '../../inspectors/DOMInspector/treeModel';\nimport { StylesPane } from '../../inspectors/CSSInspector/StylesPane';\nimport { ComputedPane } from '../../inspectors/CSSInspector/ComputedPane';\nimport { LayoutPane, PropertiesPane } from '../../inspectors/DOMInspector/PropertiesPane';\nimport { elementLabel } from '../../utils/domSelector';\nimport { SearchIcon } from '../../components/Icons';\nimport { ErrorBoundary } from '../../components/ErrorBoundary';\n\nconst TABS: [ElementsSidebarTab, string][] = [\n ['styles', 'Styles'],\n ['computed', 'Computed'],\n ['layout', 'Layout'],\n ['properties', 'Properties'],\n];\n\nexport function ElementsPanel() {\n const sidebarWidth = useDevtools((s) => s.elementsSidebarWidth);\n const ref = useRef<HTMLDivElement>(null);\n const [narrow, setNarrow] = useState(false);\n const [sideHeight, setSideHeight] = useState(240);\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n const ro = new ResizeObserver(() => setNarrow(el.clientWidth < 640));\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n\n return (\n <div className=\"rid-elements\" ref={ref}>\n <SplitPane\n vertical={narrow}\n size={narrow ? sideHeight : sidebarWidth}\n onResize={(s) => (narrow ? setSideHeight(s) : useDevtools.setState({ elementsSidebarWidth: s }))}\n min={narrow ? 80 : 220}\n minMain={narrow ? 80 : 200}\n main={\n <div className=\"rid-elements-main\">\n <DomSearch />\n <DOMTree />\n <Breadcrumbs />\n </div>\n }\n secondary={<Sidebar />}\n />\n </div>\n );\n}\n\nfunction DomSearch() {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<Element[]>([]);\n const [index, setIndex] = useState(0);\n\n const run = (q: string, next: number) => {\n const r = q === query && results.length ? results : searchDom(q);\n setResults(r);\n if (!r.length) return;\n const i = ((next % r.length) + r.length) % r.length;\n setIndex(i);\n useElements.getState().select(r[i], true);\n useElements.getState().hover(r[i]);\n };\n\n if (!open) {\n return (\n <button className=\"rid-icon-btn rid-dom-search-btn\" title=\"Search DOM (string, selector, XPath)\" aria-label=\"Search DOM\" onClick={() => setOpen(true)}>\n <SearchIcon size={14} />\n </button>\n );\n }\n return (\n <div className=\"rid-subtoolbar rid-dom-search\">\n <SearchIcon size={14} />\n <input\n className=\"rid-input\"\n autoFocus\n style={{ flex: 1 }}\n placeholder=\"Find by string, selector, or XPath\"\n aria-label=\"Find in DOM\"\n value={query}\n onChange={(e) => {\n setQuery(e.target.value);\n setResults([]);\n }}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter') run(query, e.shiftKey ? index - 1 : results.length ? index + 1 : 0);\n if (e.key === 'Escape') {\n setOpen(false);\n useElements.getState().hover(null);\n }\n }}\n />\n <span className=\"rid-v-faint\" style={{ minWidth: 60, textAlign: 'right' }}>\n {results.length ? `${index + 1} of ${results.length}` : query ? '0 results' : ''}\n </span>\n <button className=\"rid-icon-btn\" aria-label=\"Previous result\" onClick={() => run(query, index - 1)}>\n ▲\n </button>\n <button className=\"rid-icon-btn\" aria-label=\"Next result\" onClick={() => run(query, results.length ? index + 1 : 0)}>\n ▼\n </button>\n <button\n className=\"rid-btn\"\n style={{ height: 20 }}\n onClick={() => {\n setOpen(false);\n useElements.getState().hover(null);\n }}\n >\n Cancel\n </button>\n </div>\n );\n}\n\nfunction Breadcrumbs() {\n const selected = useElements((s) => s.selected);\n useElements((s) => s.domVersion);\n if (!selected) return <div className=\"rid-breadcrumbs\" />;\n const chain: Element[] = [];\n let n: Node | null = selected.nodeType === 1 ? selected : selected.parentNode;\n while (n && n.nodeType === 1) {\n chain.unshift(n as Element);\n n = n.parentNode;\n }\n return (\n <div className=\"rid-breadcrumbs rid-mono\" ref={(el) => {\n if (el) el.scrollLeft = el.scrollWidth;\n }}>\n {chain.map((el, i) => (\n <span\n key={i}\n className={`rid-crumb${el === selected ? ' rid-active' : ''}`}\n onClick={() => useElements.getState().select(el, true)}\n onMouseEnter={() => useElements.getState().hover(el)}\n onMouseLeave={() => useElements.getState().hover(null)}\n >\n <span className=\"rid-dom-tagname\">{el.localName}</span>\n {elementLabel(el).slice(el.localName.length)}\n </span>\n ))}\n {selected.nodeType === 3 && <span className=\"rid-crumb rid-active\">#text</span>}\n </div>\n );\n}\n\nfunction Sidebar() {\n const tab = useElements((s) => s.sidebarTab);\n const selected = useElements((s) => s.selected);\n const el = selected && selected.nodeType === 1 ? (selected as Element) : selected?.parentElement ?? null;\n return (\n <div className=\"rid-elements-side\">\n <div className=\"rid-tabs\" role=\"tablist\">\n {TABS.map(([id, label]) => (\n <button key={id} role=\"tab\" className=\"rid-tab\" aria-selected={tab === id} onClick={() => useElements.getState().setSidebarTab(id)}>\n {label}\n </button>\n ))}\n </div>\n <div className=\"rid-elements-side-body\">\n {!el || !el.isConnected ? (\n <div className=\"rid-empty\">Select an element to inspect its styles.</div>\n ) : (\n <ErrorBoundary label={tab}>\n {tab === 'styles' && <StylesPane el={el} />}\n {tab === 'computed' && <ComputedPane el={el} />}\n {tab === 'layout' && <LayoutPane el={el} />}\n {tab === 'properties' && <PropertiesPane key={elementLabel(el)} el={el} />}\n </ErrorBoundary>\n )}\n </div>\n </div>\n );\n}\n","import type { CSSProperties, ReactNode } from 'react';\nimport { ObjectInspector, ValuePreview, isExpandable } from '../../components/ObjectInspector';\n\n/** Only a safe subset of CSS is allowed in %c (like Chrome DevTools). */\nconst ALLOWED_CSS = /^(color|background(-color)?|font(-\\w+)?|text-(decoration|transform|shadow)|line-height|padding(-\\w+)?|margin(-\\w+)?|border(-\\w+)*|letter-spacing|word-spacing|white-space|display)$/i;\n\nfunction parseStyle(css: string): CSSProperties {\n const out: Record<string, string> = {};\n for (const decl of css.split(';')) {\n const i = decl.indexOf(':');\n if (i === -1) continue;\n const prop = decl.slice(0, i).trim();\n const value = decl.slice(i + 1).trim();\n if (!ALLOWED_CSS.test(prop) || /url\\s*\\(/i.test(value)) continue;\n out[prop.replace(/-([a-z])/g, (_, c) => c.toUpperCase())] = value;\n }\n return out as CSSProperties;\n}\n\n/**\n * Renders console arguments, applying printf-style substitutions\n * (%s %d %i %f %o %O %c) to the first string argument.\n */\nexport function formatArgs(args: unknown[], preserved?: boolean): ReactNode[] {\n if (preserved) return args.map((a, i) => <span key={i}>{i ? ' ' : ''}{String(a)}</span>);\n const out: ReactNode[] = [];\n let rest = args;\n if (typeof args[0] === 'string' && args[0].includes('%')) {\n const fmt = args[0];\n rest = args.slice(1);\n let style: CSSProperties | undefined;\n let buf = '';\n let key = 0;\n const pushText = () => {\n if (buf) out.push(<span key={`t${key++}`} style={style}>{buf}</span>);\n buf = '';\n };\n for (let i = 0; i < fmt.length; i++) {\n const ch = fmt[i];\n if (ch !== '%' || i === fmt.length - 1) {\n buf += ch;\n continue;\n }\n const spec = fmt[i + 1];\n if (spec === '%') {\n buf += '%';\n i++;\n continue;\n }\n if (!'sdifoOc'.includes(spec)) {\n buf += ch;\n continue;\n }\n i++;\n if (spec === 'c') {\n pushText();\n style = parseStyle(String(rest.shift() ?? ''));\n continue;\n }\n if (!rest.length) {\n buf += '%' + spec;\n continue;\n }\n const v = rest.shift();\n if (spec === 's') buf += typeof v === 'string' ? v : stringish(v);\n else if (spec === 'd' || spec === 'i') buf += typeof v === 'symbol' ? 'NaN' : String(parseInt(String(v), 10));\n else if (spec === 'f') buf += typeof v === 'symbol' ? 'NaN' : String(parseFloat(String(v)));\n else {\n pushText();\n out.push(\n <span key={`o${key++}`} style={style} className=\"rid-inline-obj\">\n {isExpandable(v) ? <ObjectInspector value={v} /> : <ValuePreview value={v} />}\n </span>,\n );\n }\n }\n pushText();\n }\n rest.forEach((a, i) => {\n if (out.length || i) out.push(' ');\n if (typeof a === 'string') out.push(<span key={`r${i}`}>{a}</span>);\n else if (isExpandable(a)) out.push(<span key={`r${i}`} className=\"rid-inline-obj\"><ObjectInspector value={a} /></span>);\n else out.push(<ValuePreview key={`r${i}`} value={a} />);\n });\n return out;\n}\n\nfunction stringish(v: unknown): string {\n try {\n if (typeof v === 'object' && v !== null) return Object.prototype.toString.call(v);\n return String(v);\n } catch {\n return '[object]';\n }\n}\n\n/** Plain-text representation used for searching/filtering. */\nexport function argsToText(args: unknown[]): string {\n return args\n .map((a) => {\n if (typeof a === 'string') return a;\n try {\n if (a instanceof Error) return `${a.name}: ${a.message}`;\n if (typeof a === 'object' && a !== null) return JSON.stringify(a)?.slice(0, 2000) ?? '';\n return String(a);\n } catch {\n return '';\n }\n })\n .join(' ');\n}\n","import { useElements } from '../../store/elementsStore';\nimport { bus } from '../../core/eventBus';\n\nlet lastResult: unknown;\n\n/** Chrome-style command line API helpers made available while evaluating. */\nfunction helpers(): Record<string, unknown> {\n return {\n $0: useElements.getState().selected,\n $_: lastResult,\n $: (sel: string, root: ParentNode = document) => root.querySelector(sel),\n $$: (sel: string, root: ParentNode = document) => Array.from(root.querySelectorAll(sel)),\n $x: (xpath: string, ctx: Node = document) => {\n const res = document.evaluate(xpath, ctx, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n return Array.from({ length: res.snapshotLength }, (_, i) => res.snapshotItem(i));\n },\n copy: (v: unknown) => {\n const text = typeof v === 'string' ? v : JSON.stringify(v, null, 2);\n navigator.clipboard?.writeText(text).catch(() => {});\n return undefined;\n },\n clear: () => bus.emit('console:clear', { fromApp: false }),\n keys: (o: object) => Object.keys(o),\n values: (o: object) => Object.values(o),\n inspect: (n: unknown) => {\n if (typeof Node !== 'undefined' && n instanceof Node) useElements.getState().select(n, true);\n return n;\n },\n };\n}\n\n/**\n * Turns top-level `let`/`const` into `var` so declarations persist between\n * evaluations, like they do in Chrome's console.\n */\nexport function hoistDeclarations(code: string): string {\n return code.replace(/(^|[;\\n]\\s*)(let|const)(\\s+[A-Za-z_$])/g, '$1var$3');\n}\n\nexport type EvalResult = { ok: true; value: unknown; awaited: boolean } | { ok: false; error: unknown };\n\n/**\n * Evaluates code in the page's global scope (indirect eval).\n * Requires the page CSP to allow 'unsafe-eval'.\n */\nexport async function evaluate(code: string): Promise<EvalResult> {\n const src = hoistDeclarations(code);\n const hasAwait = /\\bawait\\b/.test(src);\n const h = helpers();\n const win = window as unknown as Record<string, unknown>;\n const installed: string[] = [];\n // Only define helpers the page does not already define (e.g. jQuery's `$`).\n for (const [k, v] of Object.entries(h)) {\n if (k in win) continue;\n try {\n Object.defineProperty(win, k, { value: v, configurable: true, writable: true });\n installed.push(k);\n } catch {}\n }\n const indirectEval = eval;\n const run = (s: string) => indirectEval(s);\n try {\n let value: unknown;\n let awaited = false;\n if (hasAwait) {\n awaited = true;\n try {\n value = await run(`(async () => (${src}\\n))()`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n value = await run(`(async () => {${src}\\n})()`);\n }\n } else {\n const trimmed = src.trim();\n // \"{a: 1}\" should be an object literal, not a block.\n if (trimmed.startsWith('{') && trimmed.endsWith('}')) {\n try {\n value = run(`(${trimmed})`);\n } catch (e) {\n if (!(e instanceof SyntaxError)) throw e;\n value = run(src);\n }\n } else value = run(src);\n }\n lastResult = value;\n return { ok: true, value, awaited };\n } catch (error) {\n if (error instanceof EvalError || /unsafe-eval|Content Security Policy/i.test(String(error))) {\n return {\n ok: false,\n error: new Error(\n \"Evaluation blocked by the page's Content Security Policy. Allow 'unsafe-eval' in development to use the console input.\",\n ),\n };\n }\n return { ok: false, error };\n } finally {\n for (const k of installed) {\n try {\n delete win[k];\n } catch {}\n }\n }\n}\n\nconst KEYWORDS = ['await', 'async', 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger', 'default', 'delete', 'do', 'else', 'export', 'extends', 'false', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', 'let', 'new', 'null', 'return', 'super', 'switch', 'this', 'throw', 'true', 'try', 'typeof', 'undefined', 'var', 'void', 'while', 'with', 'yield'];\n\nfunction allPropertyNames(obj: unknown): string[] {\n const names = new Set<string>();\n let cur: any = obj;\n let depth = 0;\n try {\n while (cur != null && depth < 20) {\n for (const n of Object.getOwnPropertyNames(cur)) names.add(n);\n cur = Object.getPrototypeOf(cur);\n depth++;\n }\n } catch {}\n return Array.from(names);\n}\n\n/**\n * Side-effect-conscious autocompletion: only simple identifier paths\n * (e.g. `document.body.cl`) are resolved — nothing is ever called.\n */\nexport function completions(input: string): { prefix: string; items: string[] } {\n const m = input.match(/((?:[A-Za-z_$][\\w$]*\\.)*)([A-Za-z_$][\\w$]*)?$/);\n if (!m) return { prefix: '', items: [] };\n const path = m[1] ? m[1].slice(0, -1) : '';\n const prefix = m[2] ?? '';\n if (!path && !prefix) return { prefix, items: [] };\n let candidates: string[];\n if (path) {\n let obj: any = window;\n try {\n for (const part of path.split('.')) {\n if (part === 'window' && obj === window) continue;\n const desc = findDescriptor(obj, part);\n // Avoid invoking getters on non-host objects; host (DOM) getters are side-effect free.\n if (desc && desc.get && !isHostObject(obj)) return { prefix, items: [] };\n obj = obj[part];\n if (obj == null) return { prefix, items: [] };\n }\n } catch {\n return { prefix, items: [] };\n }\n candidates = allPropertyNames(obj);\n } else {\n candidates = [...allPropertyNames(window), ...KEYWORDS, '$0', '$_', '$', '$$', '$x', 'copy', 'clear', 'keys', 'values', 'inspect'];\n }\n const lower = prefix.toLowerCase();\n const items = Array.from(new Set(candidates))\n .filter((c) => c !== prefix && c.toLowerCase().startsWith(lower) && !/^__rid/.test(c))\n .sort((a, b) => (a.startsWith(prefix) === b.startsWith(prefix) ? a.localeCompare(b) : a.startsWith(prefix) ? -1 : 1))\n .slice(0, 50);\n return { prefix, items };\n}\n\nfunction findDescriptor(obj: any, key: string): PropertyDescriptor | undefined {\n let cur = obj;\n for (let i = 0; cur && i < 20; i++) {\n const d = Object.getOwnPropertyDescriptor(cur, key);\n if (d) return d;\n cur = Object.getPrototypeOf(cur);\n }\n return undefined;\n}\n\nfunction isHostObject(obj: unknown): boolean {\n return (\n obj === window ||\n obj === document ||\n (typeof Node !== 'undefined' && obj instanceof Node) ||\n obj === location ||\n obj === navigator ||\n (typeof Storage !== 'undefined' && obj instanceof Storage)\n );\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useConsole } from '../../store/consoleStore';\nimport { bus } from '../../core/eventBus';\nimport { PromptIcon } from '../../components/Icons';\nimport { completions, evaluate } from './evaluate';\n\nexport function ConsoleInput({ focusToken }: { focusToken: number }) {\n const [value, setValue] = useState('');\n const [historyIndex, setHistoryIndex] = useState<number | null>(null);\n const [draft, setDraft] = useState('');\n const [suggest, setSuggest] = useState<{ prefix: string; items: string[]; index: number } | null>(null);\n const ref = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n ref.current?.focus();\n }, [focusToken]);\n\n // Auto-grow\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = 'auto';\n el.style.height = `${Math.min(el.scrollHeight, 200)}px`;\n }, [value]);\n\n const run = async () => {\n const code = value.trim();\n if (!code) return;\n useConsole.getState().pushHistory(code);\n setValue('');\n setHistoryIndex(null);\n setSuggest(null);\n bus.emit('console:entry', { level: 'log', kind: 'input', args: [code], timestamp: Date.now() });\n const res = await evaluate(code);\n if (res.ok) {\n bus.emit('console:entry', { level: 'log', kind: 'result', args: [res.value], timestamp: Date.now() });\n } else {\n bus.emit('console:entry', {\n level: 'error',\n kind: 'exception',\n method: 'eval',\n args: [res.error],\n timestamp: Date.now(),\n stack: (res.error as Error)?.stack,\n });\n }\n };\n\n const updateSuggestions = (text: string, caret: number) => {\n if (caret !== text.length) return setSuggest(null);\n const { prefix, items } = completions(text);\n setSuggest(items.length ? { prefix, items, index: 0 } : null);\n };\n\n const accept = () => {\n if (!suggest) return false;\n const item = suggest.items[suggest.index];\n setValue(value.slice(0, value.length - suggest.prefix.length) + item);\n setSuggest(null);\n return true;\n };\n\n const onKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n const el = e.currentTarget;\n if (suggest) {\n if (e.key === 'Tab' || (e.key === 'ArrowRight' && el.selectionStart === value.length)) {\n e.preventDefault();\n accept();\n return;\n }\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const n = suggest.items.length;\n setSuggest({ ...suggest, index: (suggest.index + (e.key === 'ArrowDown' ? 1 : -1) + n) % n });\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n setSuggest(null);\n return;\n }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n void run();\n return;\n }\n if (e.key === 'l' && (e.ctrlKey || e.metaKey)) {\n e.preventDefault();\n bus.emit('console:clear', { fromApp: false });\n return;\n }\n const history = useConsole.getState().history;\n const firstLine = !value.slice(0, el.selectionStart).includes('\\n');\n const lastLine = !value.slice(el.selectionEnd).includes('\\n');\n if (e.key === 'ArrowUp' && firstLine && history.length) {\n e.preventDefault();\n const idx = historyIndex === null ? history.length - 1 : Math.max(0, historyIndex - 1);\n if (historyIndex === null) setDraft(value);\n setHistoryIndex(idx);\n setValue(history[idx]);\n } else if (e.key === 'ArrowDown' && lastLine && historyIndex !== null) {\n e.preventDefault();\n const idx = historyIndex + 1;\n if (idx >= history.length) {\n setHistoryIndex(null);\n setValue(draft);\n } else {\n setHistoryIndex(idx);\n setValue(history[idx]);\n }\n }\n };\n\n return (\n <div className=\"rid-con-input\">\n <span className=\"rid-con-prompt\">\n <PromptIcon size={14} />\n </span>\n <div className=\"rid-con-editor\">\n <textarea\n ref={ref}\n className=\"rid-mono\"\n rows={1}\n value={value}\n spellCheck={false}\n autoCapitalize=\"off\"\n autoComplete=\"off\"\n aria-label=\"Console prompt\"\n placeholder=\"\"\n onChange={(e) => {\n setValue(e.target.value);\n setHistoryIndex(null);\n updateSuggestions(e.target.value, e.target.selectionStart);\n }}\n onKeyDown={onKeyDown}\n onBlur={() => setTimeout(() => setSuggest(null), 150)}\n />\n {suggest && (\n <div className=\"rid-con-suggest rid-mono\" role=\"listbox\">\n {suggest.items.map((item, i) => (\n <div\n key={item}\n role=\"option\"\n aria-selected={i === suggest.index}\n className={i === suggest.index ? 'rid-active' : ''}\n onMouseDown={(e) => {\n e.preventDefault();\n setSuggest({ ...suggest, index: i });\n setValue(value.slice(0, value.length - suggest.prefix.length) + item);\n setSuggest(null);\n }}\n >\n <b>{item.slice(0, suggest.prefix.length)}</b>\n {item.slice(suggest.prefix.length)}\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { memo, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport { levelToFilter, useConsole, type LevelFilter } from '../../store/consoleStore';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { bus } from '../../core/eventBus';\nimport { ClearIcon, ErrorIcon, InfoIcon, ResultIcon, WarnIcon, PromptIcon } from '../../components/Icons';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport { ObjectInspector, ValuePreview, isExpandable } from '../../components/ObjectInspector';\nimport type { ConsoleEntry } from '../../types';\nimport { formatClock } from '../../utils/format';\nimport { argsToText, formatArgs } from './format';\nimport { ConsoleInput } from './ConsoleInput';\n\nconst LEVEL_LABELS: Record<LevelFilter, string> = {\n verbose: 'Verbose',\n info: 'Info',\n warnings: 'Warnings',\n errors: 'Errors',\n};\n\nfunction levelsSummary(levels: Record<LevelFilter, boolean>): string {\n const on = (Object.keys(levels) as LevelFilter[]).filter((l) => levels[l]);\n if (on.length === 4) return 'All levels';\n if (on.length === 3 && !levels.verbose) return 'Default levels';\n if (on.length === 0) return 'Hide all';\n if (on.length === 1) return `${LEVEL_LABELS[on[0]]} only`;\n return 'Custom levels';\n}\n\nfunction buildMatcher(text: string): ((s: string) => boolean) | null {\n const t = text.trim();\n if (!t) return null;\n const re = t.match(/^\\/(.+)\\/([a-z]*)$/);\n if (re) {\n try {\n const r = new RegExp(re[1], re[2].includes('i') ? re[2] : re[2] + 'i');\n return (s) => r.test(s);\n } catch {}\n }\n const neg = t.startsWith('-');\n const needle = (neg ? t.slice(1) : t).toLowerCase();\n return (s) => s.toLowerCase().includes(needle) !== neg;\n}\n\nexport function ConsolePanel() {\n const entries = useConsole((s) => s.entries);\n const levels = useConsole((s) => s.levels);\n const filterText = useConsole((s) => s.filterText);\n const toggles = useConsole((s) => s.groupToggles);\n const preserve = useDevtools((s) => s.preserveConsoleLog);\n const timestamps = useDevtools((s) => s.consoleTimestamps);\n const updateSettings = useDevtools((s) => s.updateSettings);\n const menu = useContextMenu();\n const listRef = useRef<HTMLDivElement>(null);\n const stickToBottom = useRef(true);\n const [focusToken, setFocusToken] = useState(0);\n\n const visible = useMemo(() => {\n const match = buildMatcher(filterText);\n const defaultCollapsed = new Map<number, boolean>();\n for (const e of entries) if (e.kind === 'group-start') defaultCollapsed.set(e.id, !!e.collapsed);\n return entries.filter((e) => {\n if (e.groupPath.some((g) => toggles[g] ?? defaultCollapsed.get(g) ?? false)) return false;\n if (e.kind === 'input' || e.kind === 'result' || e.kind === 'system' || e.kind === 'group-start') {\n if (e.kind === 'group-start') return levels.info && (!match || match(argsToText(e.args)));\n return !match || match(argsToText(e.args));\n }\n if (!levels[levelToFilter(e.level)]) return false;\n if (match && !match(argsToText(e.args) + ' ' + (e.source ?? ''))) return false;\n return true;\n });\n }, [entries, levels, filterText, toggles]);\n\n const hiddenCount = entries.length - visible.length;\n\n useLayoutEffect(() => {\n const el = listRef.current;\n if (el && stickToBottom.current) el.scrollTop = el.scrollHeight;\n }, [visible]);\n\n const onScroll = () => {\n const el = listRef.current;\n if (!el) return;\n stickToBottom.current = el.scrollHeight - el.scrollTop - el.clientHeight < 30;\n };\n\n const openLevels = (e: React.MouseEvent) => {\n const r = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const st = useConsole.getState();\n menu.open({ clientX: r.left, clientY: r.bottom + 2 }, [\n ...(Object.keys(LEVEL_LABELS) as LevelFilter[]).map((l) => ({\n label: LEVEL_LABELS[l],\n hint: st.levels[l] ? '✓' : '',\n onSelect: () => st.toggleLevel(l),\n })),\n { separator: true },\n { label: 'Default', onSelect: () => st.setLevels({ verbose: false, info: true, warnings: true, errors: true }) },\n { label: 'All levels', onSelect: () => st.setLevels({ verbose: true, info: true, warnings: true, errors: true }) },\n ]);\n };\n\n const clear = () => bus.emit('console:clear', { fromApp: false });\n\n return (\n <div className=\"rid-console\" onClick={(e) => {\n // Clicking empty console space focuses the prompt (like Chrome), unless text is being selected.\n if ((e.target as HTMLElement).classList.contains('rid-con-list') && !window.getSelection()?.toString()) setFocusToken((t) => t + 1);\n }}>\n <div className=\"rid-subtoolbar\">\n <button className=\"rid-icon-btn\" title=\"Clear console (Ctrl+L)\" aria-label=\"Clear console\" onClick={clear}>\n <ClearIcon />\n </button>\n <span className=\"rid-sep\" />\n <input\n className=\"rid-input\"\n style={{ flex: 1, maxWidth: 360 }}\n placeholder=\"Filter (text, /regex/, -exclude)\"\n aria-label=\"Filter console messages\"\n value={filterText}\n onChange={(e) => useConsole.getState().setFilterText(e.target.value)}\n />\n <button className=\"rid-chip\" onClick={openLevels} aria-haspopup=\"menu\">\n {levelsSummary(levels)} ▾\n </button>\n <span className=\"rid-sep\" />\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={preserve} onChange={(e) => updateSettings({ preserveConsoleLog: e.target.checked })} />\n Preserve log\n </label>\n <label className=\"rid-checkbox\" style={{ marginLeft: 8 }}>\n <input type=\"checkbox\" checked={timestamps} onChange={(e) => updateSettings({ consoleTimestamps: e.target.checked })} />\n Timestamps\n </label>\n <span className=\"rid-spacer\" />\n {hiddenCount > 0 && <span className=\"rid-v-faint\" style={{ paddingRight: 6 }}>{hiddenCount} hidden</span>}\n </div>\n <div className=\"rid-con-list\" ref={listRef} onScroll={onScroll} role=\"log\" aria-live=\"polite\">\n {visible.map((e) => (\n <ConsoleRow key={e.id} entry={e} timestamps={timestamps} collapsed={toggles[e.id] ?? !!e.collapsed} />\n ))}\n <ConsoleInput focusToken={focusToken} />\n </div>\n {menu.element}\n </div>\n );\n}\n\nconst ConsoleRow = memo(function ConsoleRow({ entry: e, timestamps, collapsed }: { entry: ConsoleEntry; timestamps: boolean; collapsed: boolean }) {\n const [stackOpen, setStackOpen] = useState(e.kind === 'trace');\n const cls = ['rid-con-msg', `rid-con-${e.level}`, `rid-con-k-${e.kind}`].join(' ');\n const icon =\n e.kind === 'input' ? (\n <PromptIcon size={12} />\n ) : e.kind === 'result' ? (\n <ResultIcon size={12} />\n ) : e.level === 'error' ? (\n <ErrorIcon size={11} />\n ) : e.level === 'warn' ? (\n <WarnIcon size={11} />\n ) : e.kind === 'system' ? (\n <InfoIcon size={11} />\n ) : null;\n\n let body: React.ReactNode;\n if (e.kind === 'input') body = <span className=\"rid-con-code\">{String(e.args[0])}</span>;\n else if (e.kind === 'result') {\n const v = e.args[0];\n body = e.preserved ? String(v) : isExpandable(v) ? <ObjectInspector value={v} /> : <ValuePreview value={v} />;\n } else if (e.kind === 'table') body = e.preserved ? String(e.args[0]) : <ConsoleTable data={e.args[0]} columns={e.columns} />;\n else if (e.kind === 'exception' || e.kind === 'rejection') {\n const v = e.args[0];\n const prefix = e.kind === 'rejection' ? 'Uncaught (in promise) ' : 'Uncaught ';\n body = (\n <>\n {prefix}\n {e.preserved ? String(v) : v instanceof Error ? <span className=\"rid-con-stack-text\">{v.stack?.includes(v.message) ? v.stack : `${v.name}: ${v.message}\\n${v.stack ?? ''}`}</span> : isExpandable(v) ? <ObjectInspector value={v} /> : <ValuePreview value={v} />}\n </>\n );\n } else if (e.kind === 'group-start') {\n body = (\n <span\n className=\"rid-con-group\"\n onClick={() => useConsole.getState().toggleGroup(e.id, !collapsed)}\n role=\"button\"\n aria-expanded={!collapsed}\n >\n <span className={`rid-chevron${collapsed ? '' : ' rid-open'}`} /> <b>{formatArgs(e.args, e.preserved)}</b>\n </span>\n );\n } else body = formatArgs(e.args, e.preserved);\n\n const showStackToggle = e.stack && (e.kind === 'trace' || (e.kind === 'log' && (e.level === 'error' || e.level === 'warn') && !(e.args[0] instanceof Error)));\n\n return (\n <div className={cls} style={{ paddingLeft: 22 + e.depth * 14 }}>\n <span className=\"rid-con-icon\">{icon}</span>\n {e.repeat > 1 && <span className=\"rid-con-repeat\">{e.repeat}</span>}\n <div className=\"rid-con-body\">\n {timestamps && <span className=\"rid-con-time\">{formatClock(e.timestamp)} </span>}\n {showStackToggle && (\n <span className=\"rid-con-stack-toggle\" onClick={() => setStackOpen(!stackOpen)} role=\"button\" aria-expanded={stackOpen}>\n <span className={`rid-chevron${stackOpen ? ' rid-open' : ''}`} />{' '}\n </span>\n )}\n {e.kind === 'trace' && <span>console.trace </span>}\n {body}\n {showStackToggle && stackOpen && <div className=\"rid-con-stack\">{cleanStack(e.stack!)}</div>}\n </div>\n {e.source && e.kind !== 'input' && e.kind !== 'result' && <span className=\"rid-con-source\" title={e.source}>{e.source}</span>}\n </div>\n );\n});\n\nfunction cleanStack(stack: string): string {\n return stack\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean)\n .map((l) => ' ' + l.replace(/^at\\s+/, 'at '))\n .join('\\n');\n}\n\nfunction ConsoleTable({ data, columns }: { data: unknown; columns?: string[] }) {\n const rows: [string, unknown][] = [];\n try {\n if (data instanceof Map) data.forEach((v, k) => rows.push([String(k), v]));\n else if (Array.isArray(data)) data.forEach((v, i) => rows.push([String(i), v]));\n else Object.entries(data as object).forEach(([k, v]) => rows.push([k, v]));\n } catch {}\n const cols = new Set<string>();\n let hasValueCol = false;\n for (const [, v] of rows.slice(0, 1000)) {\n if (v && typeof v === 'object') Object.keys(v).forEach((k) => cols.add(k));\n else hasValueCol = true;\n }\n const colList = columns?.length ? columns : Array.from(cols);\n return (\n <div className=\"rid-con-table\">\n <table className=\"rid-table\">\n <thead>\n <tr>\n <th>(index)</th>\n {colList.map((c) => (\n <th key={c}>{c}</th>\n ))}\n {hasValueCol && <th>Value</th>}\n </tr>\n </thead>\n <tbody>\n {rows.slice(0, 1000).map(([k, v]) => (\n <tr key={k}>\n <td>{k}</td>\n {colList.map((c) => (\n <td key={c}>{v && typeof v === 'object' && c in (v as object) ? <ValuePreview value={(v as any)[c]} depth={1} /> : ''}</td>\n ))}\n {hasValueCol && <td>{v === null || typeof v !== 'object' ? <ValuePreview value={v} depth={1} /> : ''}</td>}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n","import { create } from 'zustand';\nimport type { NetworkRequest, ResourceType } from '../types';\nimport { readInternal, writeInternal } from '../utils/safeStorage';\n\nexport type TypeFilter = 'all' | 'fetch-xhr' | Exclude<ResourceType, 'fetch' | 'xhr'>;\nexport type StatusFilter = 'all' | '1xx' | '2xx' | '3xx' | '4xx' | '5xx' | 'failed' | 'pending';\n\ninterface NetworkState {\n requests: NetworkRequest[];\n max: number;\n selectedId: string | null;\n filterText: string;\n invert: boolean;\n typeFilters: TypeFilter[];\n methodFilter: string;\n statusFilter: StatusFilter;\n domainFilter: string;\n recording: boolean;\n sort: { column: string; dir: 1 | -1 } | null;\n select: (id: string | null) => void;\n clear: () => void;\n set: (patch: Partial<NetworkState>) => void;\n toggleType: (t: TypeFilter, multi: boolean) => void;\n}\n\nexport const useNetwork = create<NetworkState>()((set, get) => ({\n requests: [],\n max: 500,\n selectedId: null,\n filterText: '',\n invert: false,\n typeFilters: ['all'],\n methodFilter: 'all',\n statusFilter: 'all',\n domainFilter: '',\n recording: true,\n sort: null,\n select: (selectedId) => set({ selectedId }),\n clear: () => {\n for (const r of get().requests) if (r.responseObjectUrl) URL.revokeObjectURL(r.responseObjectUrl);\n pendingStarts = [];\n pendingPatches.clear();\n set({ requests: [], selectedId: null });\n },\n set: (patch) => set(patch),\n toggleType: (t, multi) => {\n if (t === 'all') return set({ typeFilters: ['all'] });\n let cur = get().typeFilters.filter((x) => x !== 'all');\n if (multi) cur = cur.includes(t) ? cur.filter((x) => x !== t) : [...cur, t];\n else cur = [t];\n set({ typeFilters: cur.length ? cur : ['all'] });\n },\n}));\n\nexport function matchesType(r: NetworkRequest, filters: TypeFilter[]): boolean {\n if (filters.includes('all')) return true;\n return filters.some((f) => (f === 'fetch-xhr' ? r.type === 'fetch' || r.type === 'xhr' : r.type === f));\n}\n\n/* ------------------------------------------------------------ batched ingestion */\n\nlet pendingStarts: NetworkRequest[] = [];\nconst pendingPatches = new Map<string, Partial<NetworkRequest>>();\nlet timer: ReturnType<typeof setTimeout> | undefined;\n\nfunction schedule() {\n if (timer !== undefined) return;\n timer = setTimeout(flushNetwork, 30);\n}\n\nexport function addRequest(r: NetworkRequest): void {\n if (!useNetwork.getState().recording) return;\n pendingStarts.push(r);\n schedule();\n}\n\nexport function patchRequest(id: string, patch: Partial<NetworkRequest>): void {\n const prev = pendingPatches.get(id);\n pendingPatches.set(id, prev ? { ...prev, ...patch } : patch);\n schedule();\n}\n\nexport function flushNetwork(): void {\n timer = undefined;\n if (!pendingStarts.length && !pendingPatches.size) return;\n const { requests, max } = useNetwork.getState();\n let next = pendingStarts.length ? requests.concat(pendingStarts) : requests.slice();\n pendingStarts = [];\n if (pendingPatches.size) {\n const index = new Map<string, number>();\n next.forEach((r, i) => index.set(r.id, i));\n for (const [id, patch] of pendingPatches) {\n const i = index.get(id);\n if (i !== undefined) next[i] = { ...next[i], ...patch };\n }\n pendingPatches.clear();\n }\n if (next.length > max) {\n const dropped = next.slice(0, next.length - max);\n for (const r of dropped) if (r.responseObjectUrl) URL.revokeObjectURL(r.responseObjectUrl);\n next = next.slice(next.length - max);\n }\n useNetwork.setState({ requests: next });\n}\n\n/** Finds a request (including not-yet-flushed ones). */\nexport function findRequest(predicate: (r: NetworkRequest) => boolean): NetworkRequest | undefined {\n for (let i = pendingStarts.length - 1; i >= 0; i--) if (predicate(pendingStarts[i])) return pendingStarts[i];\n const reqs = useNetwork.getState().requests;\n for (let i = reqs.length - 1; i >= 0; i--) if (predicate(reqs[i])) return reqs[i];\n return undefined;\n}\n\n/* ------------------------------------------------------------ preserve across reloads */\n\nconst PRESERVE_KEY = 'network-preserved';\n\nexport function savePreservedNetwork(): void {\n flushNetwork();\n const reqs = useNetwork\n .getState()\n .requests.slice(-200)\n .map((r) => ({\n ...r,\n responseObjectUrl: undefined,\n responseBody: r.responseBody && r.responseBody.length > 20_000 ? undefined : r.responseBody,\n bodyState: r.responseBody && r.responseBody.length > 20_000 ? ('unavailable' as const) : r.bodyState,\n state: r.state === 'pending' ? ('failed' as const) : r.state,\n preserved: true,\n }));\n writeInternal(PRESERVE_KEY, reqs, 'session');\n}\n\nexport function restorePreservedNetwork(): void {\n const saved = readInternal<NetworkRequest[] | null>(PRESERVE_KEY, null, 'session');\n writeInternal(PRESERVE_KEY, undefined, 'session');\n if (saved?.length) useNetwork.setState({ requests: [...saved, ...useNetwork.getState().requests] });\n}\n","import { useMemo, useState, type ReactNode } from 'react';\nimport type { NetworkRequest } from '../../types';\nimport { CloseIcon } from '../../components/Icons';\nimport { ObjectInspector } from '../../components/ObjectInspector';\nimport { formatBytes, formatDuration, tryParseJSON } from '../../utils/format';\nimport { statusText } from './util';\n\ntype Tab = 'headers' | 'payload' | 'preview' | 'response' | 'messages' | 'timing' | 'initiator';\n\nexport function RequestDetails({ req, onClose }: { req: NetworkRequest; onClose: () => void }) {\n const query = useMemo(() => {\n try {\n return Array.from(new URL(req.url).searchParams.entries());\n } catch {\n return [];\n }\n }, [req.url]);\n const tabs: [Tab, string][] = [['headers', 'Headers']];\n if (req.payload || query.length) tabs.push(['payload', 'Payload']);\n if (req.type === 'ws') tabs.push(['messages', 'Messages']);\n else tabs.push(['preview', 'Preview'], ['response', 'Response']);\n if (req.initiatorStack) tabs.push(['initiator', 'Initiator']);\n tabs.push(['timing', 'Timing']);\n\n const [tab, setTab] = useState<Tab>('headers');\n const active = tabs.some(([t]) => t === tab) ? tab : 'headers';\n\n return (\n <div className=\"rid-net-details\">\n <div className=\"rid-tabs\" role=\"tablist\">\n <button className=\"rid-icon-btn\" style={{ alignSelf: 'center' }} title=\"Close\" aria-label=\"Close request details\" onClick={onClose}>\n <CloseIcon size={14} />\n </button>\n {tabs.map(([id, label]) => (\n <button key={id} role=\"tab\" className=\"rid-tab\" aria-selected={active === id} onClick={() => setTab(id)}>\n {label}\n </button>\n ))}\n </div>\n <div className=\"rid-net-details-body\">\n {active === 'headers' && <HeadersTab req={req} />}\n {active === 'payload' && <PayloadTab req={req} query={query} />}\n {active === 'preview' && <PreviewTab req={req} />}\n {active === 'response' && <ResponseTab req={req} />}\n {active === 'messages' && <MessagesTab req={req} />}\n {active === 'initiator' && <pre className=\"rid-net-raw rid-mono\">{req.initiatorStack}</pre>}\n {active === 'timing' && <TimingTab req={req} />}\n </div>\n </div>\n );\n}\n\nfunction Section({ title, children, extra, defaultOpen = true }: { title: string; children: ReactNode; extra?: ReactNode; defaultOpen?: boolean }) {\n const [open, setOpen] = useState(defaultOpen);\n return (\n <section>\n <button className=\"rid-section-title\" onClick={() => setOpen(!open)} aria-expanded={open}>\n <span className={`rid-chevron${open ? ' rid-open' : ''}`} />\n {title}\n <span className=\"rid-spacer\" />\n {extra}\n </button>\n {open && children}\n </section>\n );\n}\n\nfunction KV({ rows, empty }: { rows: [string, ReactNode][]; empty?: string }) {\n if (!rows.length) return <div className=\"rid-kv rid-v-faint\">{empty ?? 'None'}</div>;\n return (\n <dl className=\"rid-kv\">\n {rows.map(([k, v], i) => (\n <div key={k + i} style={{ display: 'contents' }}>\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n ))}\n </dl>\n );\n}\n\nfunction HeadersTab({ req }: { req: NetworkRequest }) {\n const [raw, setRaw] = useState(false);\n const general: [string, ReactNode][] = [\n ['Request URL', req.url],\n ['Request Method', req.method],\n ['Status Code', <StatusDot key=\"s\" req={req} />],\n ];\n if (req.responseType) general.push(['Response Type', req.responseType]);\n if (req.fromCache) general.push(['Served From', 'cache']);\n if (req.redirected) general.push(['Redirected', 'yes']);\n if (req.error) general.push(['Error', <span key=\"e\" style={{ color: 'var(--rid-error-text)' }}>{req.error}</span>]);\n const noHeaders = !req.responseHeaders.length && req.state !== 'pending';\n return (\n <div>\n <Section title=\"General\">\n <KV rows={general} />\n </Section>\n <Section\n title={`Response Headers (${req.responseHeaders.length})`}\n extra={\n <label className=\"rid-checkbox\" onClick={(e) => e.stopPropagation()} style={{ fontWeight: 'normal' }}>\n <input type=\"checkbox\" checked={raw} onChange={(e) => setRaw(e.target.checked)} /> Raw\n </label>\n }\n >\n {raw ? (\n <pre className=\"rid-net-raw rid-mono\">{req.responseHeaders.map(([k, v]) => `${k}: ${v}`).join('\\n')}</pre>\n ) : (\n <KV\n rows={req.responseHeaders}\n empty={\n noHeaders\n ? req.initiator === 'fetch' || req.initiator === 'xhr'\n ? 'No response headers (request failed, or headers were hidden by CORS).'\n : 'Headers are not available for resources loaded by the browser outside fetch/XHR.'\n : 'Pending…'\n }\n />\n )}\n </Section>\n <Section title={`Request Headers (${req.requestHeaders.length})`}>\n <KV\n rows={req.requestHeaders}\n empty=\"Only headers set explicitly by the application are visible; browser-added headers (cookies, user-agent…) cannot be read from JavaScript.\"\n />\n </Section>\n </div>\n );\n}\n\nfunction StatusDot({ req }: { req: NetworkRequest }) {\n const color =\n req.state === 'failed' || req.state === 'aborted' || (req.status ?? 0) >= 400\n ? 'var(--rid-error-text)'\n : (req.status ?? 0) >= 300\n ? 'var(--rid-warn-icon)'\n : req.state === 'pending'\n ? 'var(--rid-pending)'\n : '#1e8e3e';\n return (\n <span style={{ display: 'inline-flex', alignItems: 'center', gap: 6 }}>\n <span style={{ width: 9, height: 9, borderRadius: '50%', background: color, display: 'inline-block' }} />\n {statusText(req)}\n </span>\n );\n}\n\nfunction PayloadTab({ req, query }: { req: NetworkRequest; query: [string, string][] }) {\n const [source, setSource] = useState(false);\n const p = req.payload;\n const json = p?.kind === 'json' || p?.kind === 'text' ? tryParseJSON(p.text) : { ok: false as const };\n return (\n <div>\n {query.length > 0 && (\n <Section title={`Query String Parameters (${query.length})`}>\n <KV rows={query} />\n </Section>\n )}\n {p && (\n <Section\n title={p.kind === 'form' ? 'Form Data' : p.kind === 'urlencoded' ? 'Form Data (urlencoded)' : 'Request Payload'}\n extra={\n p.text ? (\n <span\n className=\"rid-link-btn\"\n onClick={(e) => {\n e.stopPropagation();\n setSource(!source);\n }}\n >\n {source ? 'view parsed' : 'view source'}\n </span>\n ) : null\n }\n >\n {source ? (\n <pre className=\"rid-net-raw rid-mono\">{p.text}</pre>\n ) : p.fields ? (\n <KV rows={p.fields} />\n ) : json.ok ? (\n <div style={{ padding: '4px 12px' }}>\n <ObjectInspector value={json.value} defaultExpanded />\n </div>\n ) : (\n <pre className=\"rid-net-raw rid-mono\">{p.text ?? '(empty)'}</pre>\n )}\n </Section>\n )}\n </div>\n );\n}\n\nfunction BodyUnavailable({ req }: { req: NetworkRequest }) {\n let msg = 'No response body.';\n switch (req.bodyState) {\n case 'pending':\n msg = req.state === 'pending' ? 'Waiting for response…' : 'Reading response body…';\n break;\n case 'unavailable':\n msg =\n req.initiator === 'fetch' || req.initiator === 'xhr'\n ? req.error ?? 'The response body is not available (opaque/cross-origin response or the body could not be read).'\n : 'Response bodies of resources loaded directly by the browser (scripts, stylesheets, images, fonts) cannot be read from JavaScript.';\n break;\n case 'streaming':\n msg = 'Streaming response (text/event-stream) — body is not buffered to avoid interfering with the stream.';\n break;\n case 'binary':\n msg = `Binary response (${formatBytes(req.responseSize)}).`;\n break;\n case 'none':\n if (req.state === 'failed' || req.state === 'aborted') msg = req.error ?? 'Request failed.';\n break;\n }\n return <div className=\"rid-empty\">{msg}</div>;\n}\n\nfunction PreviewTab({ req }: { req: NetworkRequest }) {\n if (req.responseObjectUrl && /^image\\//.test(req.mimeType ?? '')) {\n return (\n <div className=\"rid-net-image\">\n <img src={req.responseObjectUrl} alt=\"\" />\n <div className=\"rid-v-faint\">\n {req.mimeType} · {formatBytes(req.responseSize)}\n </div>\n </div>\n );\n }\n if (req.type === 'img' && req.bodyState === 'unavailable') {\n return (\n <div className=\"rid-net-image\">\n <img src={req.url} alt=\"\" />\n </div>\n );\n }\n if (req.responseBody == null) return <BodyUnavailable req={req} />;\n const json = tryParseJSON(req.responseBody);\n if (json.ok) {\n return (\n <div style={{ padding: '6px 10px' }}>\n <ObjectInspector value={json.value} defaultExpanded />\n </div>\n );\n }\n if (/html/.test(req.mimeType ?? '') || /^\\s*<(!doctype|html)/i.test(req.responseBody)) {\n // sandbox=\"\" disables scripts, forms, and same-origin access.\n return <iframe className=\"rid-net-html\" sandbox=\"\" srcDoc={req.responseBody} title=\"HTML preview\" />;\n }\n return <pre className=\"rid-net-raw rid-mono\">{req.responseBody}</pre>;\n}\n\nfunction ResponseTab({ req }: { req: NetworkRequest }) {\n const [pretty, setPretty] = useState(false);\n if (req.responseBody == null) return <BodyUnavailable req={req} />;\n const json = pretty ? tryParseJSON(req.responseBody) : { ok: false as const };\n return (\n <div style={{ display: 'flex', flexDirection: 'column', minHeight: 0, flex: 1 }}>\n <div className=\"rid-subtoolbar\">\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={pretty} onChange={(e) => setPretty(e.target.checked)} /> Pretty print\n </label>\n <span className=\"rid-spacer\" />\n {req.bodyState === 'truncated' && <span className=\"rid-v-faint\">Truncated to 1 MB</span>}\n </div>\n <pre className=\"rid-net-raw rid-mono\" style={{ flex: 1 }}>\n {json.ok ? JSON.stringify(json.value, null, 2) : req.responseBody || '(empty)'}\n </pre>\n </div>\n );\n}\n\nfunction MessagesTab({ req }: { req: NetworkRequest }) {\n const frames = req.frames ?? [];\n if (!frames.length) return <div className=\"rid-empty\">No messages yet.</div>;\n return (\n <div className=\"rid-table-wrap\">\n <table className=\"rid-table rid-mono\">\n <thead>\n <tr>\n <th style={{ width: 24 }} />\n <th>Data</th>\n <th style={{ width: 70 }}>Length</th>\n <th style={{ width: 100 }}>Time</th>\n </tr>\n </thead>\n <tbody>\n {frames.map((f, i) => (\n <tr key={i} className={f.direction === 'send' ? 'rid-ws-send' : 'rid-ws-recv'}>\n <td>{f.direction === 'send' ? '↑' : '↓'}</td>\n <td title={f.data}>{f.data}</td>\n <td>{f.size}</td>\n <td>{new Date(f.time).toLocaleTimeString()}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction TimingTab({ req }: { req: NetworkRequest }) {\n const t = req.timing;\n const total = req.endTime != null ? req.endTime - req.startTime : t?.total;\n const phases: [string, number | undefined, string][] = t\n ? [\n ['Redirect', t.redirect, '#9aa0a6'],\n ['DNS Lookup', t.dns, '#1ea446'],\n ['Initial connection', t.connect, '#e37400'],\n ['SSL', t.ssl, '#c5221f'],\n ['Request sent / queueing', t.request, '#80868b'],\n ['Waiting for server response', t.waiting, '#1a73e8'],\n ['Content Download', t.download, '#12b5cb'],\n ]\n : [];\n const max = Math.max(1, ...phases.map(([, v]) => v ?? 0));\n return (\n <div style={{ padding: 12 }}>\n <KV\n rows={[\n ['Started at', new Date(req.wallTime).toLocaleTimeString() + `.${String(Math.floor(req.wallTime % 1000)).padStart(3, '0')}`],\n ['Queued at', `${formatDuration(req.startTime)} since page load`],\n ['Duration', req.state === 'pending' ? 'Pending…' : formatDuration(total)],\n ]}\n />\n {t ? (\n <table className=\"rid-net-timing\">\n <tbody>\n {phases\n .filter(([, v]) => v != null && v > 0)\n .map(([label, v, color]) => (\n <tr key={label}>\n <td>{label}</td>\n <td style={{ width: '50%' }}>\n <div style={{ marginLeft: 0, width: `${Math.max(1, ((v ?? 0) / max) * 100)}%`, height: 8, background: color, borderRadius: 2 }} />\n </td>\n <td style={{ textAlign: 'right' }}>{formatDuration(v)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n ) : null}\n <p className=\"rid-v-faint\" style={{ marginTop: 12 }}>\n {t\n ? 'Detailed phases come from the Resource Timing API. Cross-origin servers must send Timing-Allow-Origin for DNS/connect/TTFB values to be visible.'\n : 'Detailed timing phases are not available for this request (Resource Timing entry not found).'}\n </p>\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport { matchesType, useNetwork, type StatusFilter, type TypeFilter } from '../../store/networkStore';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { ClearIcon, RecordIcon } from '../../components/Icons';\nimport { SplitPane } from '../../components/SplitPane';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport type { NetworkRequest } from '../../types';\nimport { formatBytes, formatDuration } from '../../utils/format';\nimport { RequestDetails } from './RequestDetails';\nimport { TYPE_LABEL, copyText, displayName, isFailed, statusText, toCurl, toFetch } from './util';\n\nconst TYPE_CHIPS: [TypeFilter, string][] = [\n ['all', 'All'],\n ['fetch-xhr', 'Fetch/XHR'],\n ['doc', 'Doc'],\n ['css', 'CSS'],\n ['js', 'JS'],\n ['font', 'Font'],\n ['img', 'Img'],\n ['media', 'Media'],\n ['manifest', 'Manifest'],\n ['ws', 'WS'],\n ['other', 'Other'],\n];\n\ntype Column = 'name' | 'status' | 'method' | 'type' | 'initiator' | 'size' | 'time' | 'waterfall';\nconst COLUMNS: { id: Column; label: string; width?: number | string }[] = [\n { id: 'name', label: 'Name', width: '30%' },\n { id: 'status', label: 'Status', width: 90 },\n { id: 'method', label: 'Method', width: 62 },\n { id: 'type', label: 'Type', width: 82 },\n { id: 'initiator', label: 'Initiator', width: 80 },\n { id: 'size', label: 'Size', width: 80 },\n { id: 'time', label: 'Time', width: 72 },\n { id: 'waterfall', label: 'Waterfall' },\n];\n\nfunction sizeOf(r: NetworkRequest): number {\n return r.transferSize ?? r.responseSize ?? 0;\n}\n\nfunction sortValue(r: NetworkRequest, col: string): string | number {\n switch (col) {\n case 'name':\n return displayName(r.url).name.toLowerCase();\n case 'status':\n return r.status ?? (r.state === 'pending' ? -1 : 0);\n case 'method':\n return r.method;\n case 'type':\n return r.type;\n case 'initiator':\n return r.initiator;\n case 'size':\n return sizeOf(r);\n case 'time':\n return r.endTime != null ? r.endTime - r.startTime : Infinity;\n default:\n return r.startTime;\n }\n}\n\nfunction hostOf(url: string): string {\n try {\n return new URL(url).host;\n } catch {\n return '';\n }\n}\n\nfunction matchStatus(r: NetworkRequest, f: StatusFilter): boolean {\n if (f === 'all') return true;\n if (f === 'pending') return r.state === 'pending';\n if (f === 'failed') return isFailed(r);\n const s = r.status ?? 0;\n return Math.floor(s / 100) === Number(f[0]);\n}\n\nexport function NetworkPanel() {\n const n = useNetwork();\n const preserve = useDevtools((s) => s.preserveNetworkLog);\n const disableCache = useDevtools((s) => s.disableCache);\n const detailWidth = useDevtools((s) => s.networkDetailWidth);\n const updateSettings = useDevtools((s) => s.updateSettings);\n const menu = useContextMenu();\n\n const visible = useMemo(() => {\n let re: RegExp | null = null;\n const t = n.filterText.trim();\n const m = t.match(/^\\/(.+)\\/([a-z]*)$/);\n if (m) {\n try {\n re = new RegExp(m[1], m[2]);\n } catch {}\n }\n const domain = n.domainFilter.trim().toLowerCase();\n const list = n.requests.filter((r) => {\n if (!matchesType(r, n.typeFilters)) return false;\n if (n.methodFilter !== 'all' && r.method !== n.methodFilter) return false;\n if (!matchStatus(r, n.statusFilter)) return false;\n if (domain && !hostOf(r.url).toLowerCase().includes(domain)) return false;\n if (t) {\n const hit = re ? re.test(r.url) : r.url.toLowerCase().includes(t.toLowerCase());\n if (hit === n.invert) return false;\n }\n return true;\n });\n if (n.sort) {\n const { column, dir } = n.sort;\n list.sort((a, b) => {\n const x = sortValue(a, column);\n const y = sortValue(b, column);\n return (x < y ? -1 : x > y ? 1 : 0) * dir;\n });\n }\n return list;\n }, [n.requests, n.filterText, n.invert, n.typeFilters, n.methodFilter, n.statusFilter, n.domainFilter, n.sort]);\n\n const methods = useMemo(() => Array.from(new Set(n.requests.map((r) => r.method))).sort(), [n.requests]);\n const selected = n.selectedId ? n.requests.find((r) => r.id === n.selectedId) ?? null : null;\n\n // Waterfall scale\n const live = visible.filter((r) => !r.preserved);\n const t0 = live.length ? Math.min(...live.map((r) => r.startTime)) : 0;\n const now = performance.now();\n const t1 = live.length ? Math.max(...live.map((r) => r.endTime ?? now)) : 1;\n const span = Math.max(1, t1 - t0);\n\n const transferred = visible.reduce((a, r) => a + (r.transferSize ?? 0), 0);\n const resources = visible.reduce((a, r) => a + (r.responseSize ?? 0), 0);\n\n const onSort = (col: Column) => {\n const cur = n.sort;\n if (!cur || cur.column !== col) n.set({ sort: { column: col, dir: 1 } });\n else if (cur.dir === 1) n.set({ sort: { column: col, dir: -1 } });\n else n.set({ sort: null });\n };\n\n const rowMenu = (e: React.MouseEvent, r: NetworkRequest) =>\n menu.open(e, [\n { label: 'Copy URL', onSelect: () => copyText(r.url) },\n { label: 'Copy as cURL', onSelect: () => copyText(toCurl(r)) },\n { label: 'Copy as fetch', onSelect: () => copyText(toFetch(r)) },\n { label: 'Copy response', disabled: r.responseBody == null, onSelect: () => copyText(r.responseBody ?? '') },\n { label: 'Copy request headers', onSelect: () => copyText(r.requestHeaders.map(([k, v]) => `${k}: ${v}`).join('\\n')) },\n { label: 'Copy response headers', onSelect: () => copyText(r.responseHeaders.map(([k, v]) => `${k}: ${v}`).join('\\n')) },\n { separator: true },\n { label: 'Open in new tab', onSelect: () => window.open(r.url, '_blank', 'noopener') },\n { separator: true },\n { label: 'Clear network log', onSelect: () => n.clear() },\n ]);\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return;\n e.preventDefault();\n const i = visible.findIndex((r) => r.id === n.selectedId);\n const next = visible[Math.max(0, Math.min(visible.length - 1, i + (e.key === 'ArrowDown' ? 1 : -1)))];\n if (next) n.select(next.id);\n };\n\n const compact = !!selected;\n const cols = compact ? COLUMNS.filter((c) => c.id === 'name') : COLUMNS;\n\n const table = (\n <div className=\"rid-table-wrap\" tabIndex={0} onKeyDown={onKeyDown}>\n <table className=\"rid-table rid-net-table\">\n <colgroup>\n {cols.map((c) => (\n <col key={c.id} style={{ width: compact ? undefined : c.width }} />\n ))}\n </colgroup>\n <thead>\n <tr>\n {cols.map((c) => (\n <th key={c.id} className=\"rid-sortable\" onClick={() => onSort(c.id)} aria-sort={n.sort?.column === c.id ? (n.sort.dir === 1 ? 'ascending' : 'descending') : 'none'}>\n {c.label}\n {n.sort?.column === c.id && <span className=\"rid-v-faint\"> {n.sort.dir === 1 ? '▲' : '▼'}</span>}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {visible.map((r) => {\n const { name, host } = displayName(r.url);\n const dur = r.endTime != null ? r.endTime - r.startTime : null;\n const cls = [r.id === n.selectedId ? 'rid-selected' : '', isFailed(r) ? 'rid-net-failed' : '', r.state === 'pending' ? 'rid-net-pending' : '', r.preserved ? 'rid-net-preserved' : '']\n .filter(Boolean)\n .join(' ');\n return (\n <tr key={r.id} className={cls} onClick={() => n.select(r.id)} onContextMenu={(e) => rowMenu(e, r)}>\n {cols.map((c) => {\n switch (c.id) {\n case 'name':\n return (\n <td key=\"name\" title={r.url}>\n <span className={`rid-net-icon rid-net-icon-${r.type}`} />\n {name}\n {!compact && host && host !== location.host && <span className=\"rid-v-faint\"> · {host}</span>}\n </td>\n );\n case 'status':\n return (\n <td key=\"status\" title={r.error}>\n {statusText(r)}\n </td>\n );\n case 'method':\n return <td key=\"method\">{r.method}</td>;\n case 'type':\n return <td key=\"type\">{TYPE_LABEL[r.type] ?? r.type}</td>;\n case 'initiator':\n return (\n <td key=\"initiator\" title={r.initiatorStack}>\n {r.initiator}\n </td>\n );\n case 'size':\n return <td key=\"size\">{r.fromCache && !r.transferSize ? '(cache)' : formatBytes(sizeOf(r)) || (r.state === 'pending' ? '' : '0 B')}</td>;\n case 'time':\n return <td key=\"time\">{dur == null ? (r.state === 'pending' ? 'Pending' : '') : formatDuration(dur)}</td>;\n case 'waterfall': {\n if (r.preserved) return <td key=\"wf\" />;\n const left = ((r.startTime - t0) / span) * 100;\n const width = Math.max(0.4, (((r.endTime ?? now) - r.startTime) / span) * 100);\n return (\n <td key=\"wf\" className=\"rid-net-wf-cell\">\n <div className={`rid-net-wf${r.state === 'pending' ? ' rid-pending' : ''}`} style={{ left: `${left}%`, width: `${Math.min(width, 100 - left)}%` }} />\n </td>\n );\n }\n }\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n {!visible.length && (\n <div className=\"rid-empty\" style={{ height: 'auto', paddingTop: 40 }}>\n {n.requests.length ? 'No requests match the current filters.' : n.recording ? 'Recording network activity… Perform a request or reload the page.' : 'Recording is paused. Click record to start.'}\n </div>\n )}\n </div>\n );\n\n return (\n <div className=\"rid-network\">\n <div className=\"rid-subtoolbar\">\n <button\n className=\"rid-icon-btn\"\n title={n.recording ? 'Stop recording network log' : 'Record network log'}\n aria-label={n.recording ? 'Stop recording network log' : 'Record network log'}\n aria-pressed={n.recording}\n onClick={() => n.set({ recording: !n.recording })}\n >\n <RecordIcon on={n.recording} />\n </button>\n <button className=\"rid-icon-btn\" title=\"Clear network log\" aria-label=\"Clear network log\" onClick={n.clear}>\n <ClearIcon />\n </button>\n <span className=\"rid-sep\" />\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={preserve} onChange={(e) => updateSettings({ preserveNetworkLog: e.target.checked })} /> Preserve log\n </label>\n <label className=\"rid-checkbox\" style={{ marginLeft: 8 }} title=\"Simulated: adds cache: 'no-store' to fetch and a cache-busting parameter to XHR GET requests.\">\n <input type=\"checkbox\" checked={disableCache} onChange={(e) => updateSettings({ disableCache: e.target.checked })} /> Disable cache\n </label>\n <span className=\"rid-sep\" />\n <select className=\"rid-select\" aria-label=\"Filter by method\" value={n.methodFilter} onChange={(e) => n.set({ methodFilter: e.target.value })}>\n <option value=\"all\">All methods</option>\n {methods.map((m) => (\n <option key={m}>{m}</option>\n ))}\n </select>\n <select className=\"rid-select\" aria-label=\"Filter by status\" value={n.statusFilter} onChange={(e) => n.set({ statusFilter: e.target.value as StatusFilter })}>\n <option value=\"all\">All statuses</option>\n <option value=\"2xx\">2xx Success</option>\n <option value=\"3xx\">3xx Redirect</option>\n <option value=\"4xx\">4xx Client error</option>\n <option value=\"5xx\">5xx Server error</option>\n <option value=\"failed\">Failed / blocked</option>\n <option value=\"pending\">Pending</option>\n </select>\n <input className=\"rid-input\" style={{ width: 120 }} placeholder=\"Domain\" aria-label=\"Filter by domain\" value={n.domainFilter} onChange={(e) => n.set({ domainFilter: e.target.value })} />\n </div>\n <div className=\"rid-subtoolbar\">\n <input\n className=\"rid-input\"\n style={{ width: 220 }}\n placeholder=\"Filter URL (text or /regex/)\"\n aria-label=\"Filter requests by URL\"\n value={n.filterText}\n onChange={(e) => n.set({ filterText: e.target.value })}\n />\n <label className=\"rid-checkbox\" style={{ margin: '0 6px' }}>\n <input type=\"checkbox\" checked={n.invert} onChange={(e) => n.set({ invert: e.target.checked })} /> Invert\n </label>\n <span className=\"rid-sep\" />\n {TYPE_CHIPS.map(([t, label]) => (\n <button\n key={t}\n className=\"rid-chip\"\n aria-pressed={n.typeFilters.includes(t)}\n title={t === 'all' ? undefined : 'Ctrl/Cmd+click to select multiple'}\n onClick={(e) => n.toggleType(t, e.ctrlKey || e.metaKey)}\n >\n {label}\n </button>\n ))}\n </div>\n <SplitPane\n size={detailWidth}\n onResize={(w) => useDevtools.setState({ networkDetailWidth: w })}\n hideSecondary={!selected}\n min={260}\n minMain={160}\n main={table}\n secondary={selected ? <RequestDetails req={selected} onClose={() => n.select(null)} /> : null}\n />\n <div className=\"rid-statusbar rid-net-footer\">\n <span>\n {visible.length} / {n.requests.length} requests\n </span>\n <span className=\"rid-sep\" />\n <span>{formatBytes(transferred) || '0 B'} transferred</span>\n <span className=\"rid-sep\" />\n <span>{formatBytes(resources) || '0 B'} resources</span>\n {live.length > 0 && (\n <>\n <span className=\"rid-sep\" />\n <span>Finish: {formatDuration(t1 - t0)}</span>\n </>\n )}\n {n.requests.some((r) => r.state === 'pending') && (\n <>\n <span className=\"rid-sep\" />\n <span>{n.requests.filter((r) => r.state === 'pending').length} pending</span>\n </>\n )}\n </div>\n {menu.element}\n </div>\n );\n}\n","import { create } from 'zustand';\n\nexport type AppSection = 'local' | 'session' | 'cookies' | 'indexeddb' | 'cache';\n\ninterface ApplicationState {\n section: AppSection;\n /** Bumped on storage changes to trigger refresh. */\n versions: Record<'local' | 'session' | 'cookie', number>;\n setSection: (s: AppSection) => void;\n bump: (area: 'local' | 'session' | 'cookie') => void;\n}\n\nexport const useApplication = create<ApplicationState>()((set, get) => ({\n section: 'local',\n versions: { local: 0, session: 0, cookie: 0 },\n setSection: (section) => set({ section }),\n bump: (area) => set({ versions: { ...get().versions, [area]: get().versions[area] + 1 } }),\n}));\n","import { useEffect, useMemo, useState } from 'react';\nimport { useApplication } from '../../store/applicationStore';\nimport { SplitPane } from '../../components/SplitPane';\nimport { ConfirmDialog } from '../../components/ConfirmDialog';\nimport { ObjectInspector } from '../../components/ObjectInspector';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport { ClearIcon, CloseIcon, PlusIcon, RefreshIcon } from '../../components/Icons';\nimport { isInternalKey } from '../../utils/safeStorage';\nimport { tryParseJSON } from '../../utils/format';\nimport { copyText } from '../../panels/Network/util';\n\nfunction getStorage(area: 'local' | 'session'): Storage | null {\n try {\n return area === 'local' ? window.localStorage : window.sessionStorage;\n } catch {\n return null;\n }\n}\n\nfunction readEntries(s: Storage): [string, string][] {\n const out: [string, string][] = [];\n for (let i = 0; i < s.length; i++) {\n const k = s.key(i);\n if (k == null || isInternalKey(k)) continue;\n out.push([k, s.getItem(k) ?? '']);\n }\n return out.sort((a, b) => a[0].localeCompare(b[0]));\n}\n\ntype EditCell = { key: string; field: 'key' | 'value' } | { key: null; field: 'key' | 'value' };\n\n/** Key/value inspector for localStorage and sessionStorage. Changes apply to the live page immediately. */\nexport function StorageInspector({ area }: { area: 'local' | 'session' }) {\n const version = useApplication((s) => s.versions[area]);\n const [manual, setManual] = useState(0);\n const [filter, setFilter] = useState('');\n const [selected, setSelected] = useState<string | null>(null);\n const [edit, setEdit] = useState<EditCell | null>(null);\n const [draftKey, setDraftKey] = useState('');\n const [confirm, setConfirm] = useState(false);\n const [previewHeight, setPreviewHeight] = useState(160);\n const [error, setError] = useState<string | null>(null);\n const menu = useContextMenu();\n const storage = getStorage(area);\n\n const entries = useMemo(\n () => (storage ? readEntries(storage) : []),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [storage, version, manual],\n );\n const refresh = () => setManual((m) => m + 1);\n\n const f = filter.trim().toLowerCase();\n const visible = f ? entries.filter(([k, v]) => k.toLowerCase().includes(f) || v.toLowerCase().includes(f)) : entries;\n const selectedValue = selected != null ? entries.find(([k]) => k === selected)?.[1] : undefined;\n\n useEffect(() => setSelected(null), [area]);\n\n const write = (fn: () => void) => {\n try {\n fn();\n setError(null);\n } catch (e) {\n setError(String((e as Error)?.message ?? e));\n }\n refresh();\n };\n\n if (!storage) return <div className=\"rid-empty\">{area === 'local' ? 'localStorage' : 'sessionStorage'} is not available (blocked by browser settings).</div>;\n\n const commit = (cell: EditCell, text: string) => {\n setEdit(null);\n if (cell.key === null) {\n // New entry: first the key, then the value.\n if (cell.field === 'key') {\n if (!text.trim()) return;\n setDraftKey(text);\n write(() => storage.setItem(text, ''));\n setSelected(text);\n setEdit({ key: text, field: 'value' });\n }\n return;\n }\n if (cell.field === 'value') write(() => storage.setItem(cell.key!, text));\n else if (text !== cell.key && text.trim()) {\n const value = storage.getItem(cell.key) ?? '';\n write(() => {\n storage.removeItem(cell.key!);\n storage.setItem(text, value);\n });\n setSelected(text);\n }\n };\n\n const remove = (key: string) => {\n write(() => storage.removeItem(key));\n if (selected === key) setSelected(null);\n };\n\n const parsed = selectedValue != null ? tryParseJSON(selectedValue) : { ok: false as const };\n\n const table = (\n <div\n className=\"rid-table-wrap\"\n tabIndex={0}\n onKeyDown={(e) => {\n if (edit) return;\n if ((e.key === 'Delete' || e.key === 'Backspace') && selected != null) remove(selected);\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n const i = visible.findIndex(([k]) => k === selected);\n const n = visible[Math.max(0, Math.min(visible.length - 1, i + (e.key === 'ArrowDown' ? 1 : -1)))];\n if (n) setSelected(n[0]);\n }\n }}\n >\n <table className=\"rid-table rid-mono\">\n <colgroup>\n <col style={{ width: '35%' }} />\n <col />\n </colgroup>\n <thead>\n <tr>\n <th>Key</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n {visible.map(([k, v]) => (\n <tr\n key={k}\n className={selected === k ? 'rid-selected' : ''}\n onClick={() => setSelected(k)}\n onContextMenu={(e) => {\n setSelected(k);\n menu.open(e, [\n { label: 'Edit key', onSelect: () => setEdit({ key: k, field: 'key' }) },\n { label: 'Edit value', onSelect: () => setEdit({ key: k, field: 'value' }) },\n { label: 'Copy key', onSelect: () => copyText(k) },\n { label: 'Copy value', onSelect: () => copyText(v) },\n { separator: true },\n { label: 'Delete', onSelect: () => remove(k) },\n ]);\n }}\n >\n {(['key', 'value'] as const).map((field) =>\n edit && edit.key === k && edit.field === field ? (\n <td key={field} className=\"rid-edit\">\n <CellInput initial={field === 'key' ? k : v} onCommit={(t) => commit(edit, t)} onCancel={() => setEdit(null)} />\n </td>\n ) : (\n <td key={field} title={field === 'value' ? v.slice(0, 500) : k} onDoubleClick={() => setEdit({ key: k, field })}>\n {field === 'key' ? k : v}\n </td>\n ),\n )}\n </tr>\n ))}\n {edit && edit.key === null && (\n <tr>\n <td className=\"rid-edit\">\n <CellInput initial={draftKey} placeholder=\"key\" onCommit={(t) => commit(edit, t)} onCancel={() => setEdit(null)} />\n </td>\n <td />\n </tr>\n )}\n </tbody>\n </table>\n {!visible.length && !edit && <div className=\"rid-empty\" style={{ height: 'auto', paddingTop: 30 }}>{entries.length ? 'No entries match the filter.' : 'No entries. Click + to add one.'}</div>}\n </div>\n );\n\n return (\n <div className=\"rid-storage\">\n <div className=\"rid-subtoolbar\">\n <button className=\"rid-icon-btn\" title=\"Refresh\" aria-label=\"Refresh\" onClick={refresh}>\n <RefreshIcon size={14} />\n </button>\n <input className=\"rid-input\" style={{ width: 200 }} placeholder=\"Filter keys and values\" aria-label=\"Filter\" value={filter} onChange={(e) => setFilter(e.target.value)} />\n <span className=\"rid-sep\" />\n <button\n className=\"rid-icon-btn\"\n title=\"Add entry\"\n aria-label=\"Add entry\"\n onClick={() => {\n setDraftKey('');\n setEdit({ key: null, field: 'key' });\n }}\n >\n <PlusIcon size={14} />\n </button>\n <button className=\"rid-icon-btn\" title=\"Delete selected\" aria-label=\"Delete selected\" disabled={selected == null} onClick={() => selected != null && remove(selected)}>\n <CloseIcon size={14} />\n </button>\n <button className=\"rid-icon-btn\" title=\"Clear all\" aria-label=\"Clear all\" disabled={!entries.length} onClick={() => setConfirm(true)}>\n <ClearIcon size={14} />\n </button>\n <span className=\"rid-spacer\" />\n <span className=\"rid-v-faint\" style={{ paddingRight: 6 }}>\n {entries.length} entr{entries.length === 1 ? 'y' : 'ies'} · {location.origin}\n </span>\n </div>\n {error && <div className=\"rid-note\" style={{ color: 'var(--rid-error-text)' }}>{error}</div>}\n <SplitPane\n vertical\n size={previewHeight}\n onResize={setPreviewHeight}\n min={60}\n minMain={80}\n main={table}\n secondary={\n <div className=\"rid-storage-preview\">\n {selectedValue == null ? (\n <div className=\"rid-empty\">Select a value to preview</div>\n ) : parsed.ok ? (\n <div style={{ padding: '4px 8px' }}>\n <ObjectInspector value={parsed.value} defaultExpanded />\n </div>\n ) : (\n <pre className=\"rid-net-raw rid-mono\">{selectedValue}</pre>\n )}\n </div>\n }\n />\n {confirm && (\n <ConfirmDialog\n title={`Clear ${area === 'local' ? 'Local' : 'Session'} Storage?`}\n message={`This removes all ${entries.length} entries for ${location.origin}. The application will see this change immediately.`}\n confirmLabel=\"Clear all\"\n danger\n onCancel={() => setConfirm(false)}\n onConfirm={() => {\n setConfirm(false);\n // Keep devtools' own settings; remove everything else.\n write(() => entries.forEach(([k]) => storage.removeItem(k)));\n setSelected(null);\n }}\n />\n )}\n {menu.element}\n </div>\n );\n}\n\nexport function CellInput({ initial, onCommit, onCancel, placeholder }: { initial: string; onCommit: (v: string) => void; onCancel: () => void; placeholder?: string }) {\n const [v, setV] = useState(initial);\n const [done, setDone] = useState(false);\n return (\n <input\n autoFocus\n className=\"rid-mono\"\n value={v}\n placeholder={placeholder}\n onFocus={(e) => e.currentTarget.select()}\n onChange={(e) => setV(e.target.value)}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter') {\n setDone(true);\n onCommit(v);\n } else if (e.key === 'Escape') {\n setDone(true);\n onCancel();\n }\n }}\n onBlur={() => !done && onCommit(v)}\n />\n );\n}\n","import { useEffect, useState } from 'react';\nimport { ObjectInspector } from '../../components/ObjectInspector';\nimport { RefreshIcon } from '../../components/Icons';\nimport { SplitPane } from '../../components/SplitPane';\nimport { formatBytes } from '../../utils/format';\n\n/* ======================================================================== IndexedDB */\n\ninterface IdbStore {\n db: string;\n version: number;\n store: string;\n keyPath: string | string[] | null;\n autoIncrement: boolean;\n indexes: string[];\n}\n\n/**\n * Lists databases and object stores. Each database is opened only for the\n * duration of the read and closed immediately, so the application's own version\n * upgrades are never blocked.\n */\nasync function listIndexedDB(): Promise<IdbStore[]> {\n const factory = window.indexedDB as IDBFactory & { databases?: () => Promise<{ name?: string; version?: number }[]> };\n if (!factory?.databases) throw new Error('indexedDB.databases() is not supported in this browser.');\n const dbs = await factory.databases();\n const out: IdbStore[] = [];\n for (const info of dbs) {\n if (!info.name) continue;\n const db = await openExisting(info.name);\n if (!db) continue;\n try {\n const names = Array.from(db.objectStoreNames);\n if (names.length) {\n const tx = db.transaction(names, 'readonly');\n for (const n of names) {\n const s = tx.objectStore(n);\n out.push({ db: db.name, version: db.version, store: n, keyPath: s.keyPath as string | string[] | null, autoIncrement: s.autoIncrement, indexes: Array.from(s.indexNames) });\n }\n } else {\n out.push({ db: db.name, version: db.version, store: '', keyPath: null, autoIncrement: false, indexes: [] });\n }\n } finally {\n db.close();\n }\n }\n return out;\n}\n\nfunction openExisting(name: string): Promise<IDBDatabase | null> {\n return new Promise((resolve) => {\n let created = false;\n const req = indexedDB.open(name);\n req.onupgradeneeded = () => {\n // The database disappeared between listing and opening; abort so we never create one.\n created = true;\n req.transaction?.abort();\n };\n req.onsuccess = () => {\n if (created) {\n req.result.close();\n resolve(null);\n } else resolve(req.result);\n };\n req.onerror = () => resolve(null);\n req.onblocked = () => resolve(null);\n });\n}\n\nasync function readRecords(db: string, store: string, limit = 200): Promise<{ key: unknown; value: unknown }[]> {\n const conn = await openExisting(db);\n if (!conn) return [];\n try {\n return await new Promise((resolve, reject) => {\n const out: { key: unknown; value: unknown }[] = [];\n const req = conn.transaction(store, 'readonly').objectStore(store).openCursor();\n req.onsuccess = () => {\n const cursor = req.result;\n if (cursor && out.length < limit) {\n out.push({ key: cursor.key, value: cursor.value });\n cursor.continue();\n } else resolve(out);\n };\n req.onerror = () => reject(req.error);\n });\n } finally {\n conn.close();\n }\n}\n\nexport function IndexedDBInspector() {\n const [stores, setStores] = useState<IdbStore[] | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [selected, setSelected] = useState<IdbStore | null>(null);\n const [records, setRecords] = useState<{ key: unknown; value: unknown }[]>([]);\n const [row, setRow] = useState<number | null>(null);\n const [h, setH] = useState(180);\n\n const load = () => {\n setError(null);\n listIndexedDB().then(setStores, (e) => setError(String(e?.message ?? e)));\n };\n useEffect(load, []);\n useEffect(() => {\n setRow(null);\n if (selected?.store) readRecords(selected.db, selected.store).then(setRecords, (e) => setError(String(e?.message ?? e)));\n else setRecords([]);\n }, [selected]);\n\n return (\n <div className=\"rid-storage\">\n <div className=\"rid-subtoolbar\">\n <button className=\"rid-icon-btn\" title=\"Refresh\" aria-label=\"Refresh IndexedDB\" onClick={() => (load(), selected && setSelected({ ...selected }))}>\n <RefreshIcon size={14} />\n </button>\n <select\n className=\"rid-select\"\n aria-label=\"Object store\"\n value={selected ? `${selected.db}/${selected.store}` : ''}\n onChange={(e) => setSelected(stores?.find((s) => `${s.db}/${s.store}` === e.target.value) ?? null)}\n >\n <option value=\"\">{stores?.length ? 'Select an object store…' : 'No databases'}</option>\n {stores?.map((s) => (\n <option key={`${s.db}/${s.store}`} value={`${s.db}/${s.store}`} disabled={!s.store}>\n {s.db} (v{s.version}) › {s.store || '(no object stores)'}\n </option>\n ))}\n </select>\n <span className=\"rid-spacer\" />\n <span className=\"rid-v-faint\">Read-only · first 200 records</span>\n </div>\n {error && <div className=\"rid-note\">{error}</div>}\n {selected?.store ? (\n <SplitPane\n vertical\n size={h}\n onResize={setH}\n min={60}\n minMain={60}\n main={\n <div className=\"rid-table-wrap\">\n <div className=\"rid-note\">\n keyPath: {JSON.stringify(selected.keyPath)} · autoIncrement: {String(selected.autoIncrement)}\n {selected.indexes.length ? ` · indexes: ${selected.indexes.join(', ')}` : ''}\n </div>\n <table className=\"rid-table rid-mono\">\n <colgroup>\n <col style={{ width: 40 }} />\n <col style={{ width: '30%' }} />\n <col />\n </colgroup>\n <thead>\n <tr>\n <th>#</th>\n <th>Key</th>\n <th>Value</th>\n </tr>\n </thead>\n <tbody>\n {records.map((r, i) => (\n <tr key={i} className={row === i ? 'rid-selected' : ''} onClick={() => setRow(i)}>\n <td>{i}</td>\n <td>{preview(r.key)}</td>\n <td>{preview(r.value)}</td>\n </tr>\n ))}\n </tbody>\n </table>\n {!records.length && <div className=\"rid-empty\" style={{ height: 'auto', paddingTop: 20 }}>Object store is empty.</div>}\n </div>\n }\n secondary={\n <div className=\"rid-storage-preview\" style={{ padding: '4px 8px' }}>\n {row != null && records[row] ? <ObjectInspector value={records[row].value} defaultExpanded /> : <div className=\"rid-empty\">Select a record to inspect it</div>}\n </div>\n }\n />\n ) : (\n <div className=\"rid-empty\">{stores && !stores.length ? 'No IndexedDB databases for this origin.' : 'Select an object store to view its records.'}</div>\n )}\n </div>\n );\n}\n\nfunction preview(v: unknown): string {\n try {\n const s = typeof v === 'string' ? JSON.stringify(v) : JSON.stringify(v);\n return s === undefined ? String(v) : s.length > 300 ? s.slice(0, 300) + '…' : s;\n } catch {\n return String(v);\n }\n}\n\n/* ======================================================================== Cache Storage */\n\ninterface CacheEntry {\n cache: string;\n url: string;\n method: string;\n}\n\nexport function CacheStorageInspector() {\n const [names, setNames] = useState<string[] | null>(null);\n const [cache, setCache] = useState<string>('');\n const [entries, setEntries] = useState<CacheEntry[]>([]);\n const [selected, setSelected] = useState<CacheEntry | null>(null);\n const [detail, setDetail] = useState<{ headers: [string, string][]; body?: string; size?: number; type?: string } | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [h, setH] = useState(180);\n\n const load = () => {\n if (typeof caches === 'undefined') {\n setError('Cache Storage is only available in secure contexts (HTTPS or localhost).');\n setNames([]);\n return;\n }\n caches.keys().then(setNames, (e) => setError(String(e)));\n };\n useEffect(load, []);\n useEffect(() => {\n setSelected(null);\n if (!cache) return setEntries([]);\n caches\n .open(cache)\n .then((c) => c.keys())\n .then((reqs) => setEntries(reqs.map((r) => ({ cache, url: r.url, method: r.method }))))\n .catch((e) => setError(String(e)));\n }, [cache]);\n useEffect(() => {\n setDetail(null);\n if (!selected) return;\n caches\n .open(selected.cache)\n .then((c) => c.match(selected.url))\n .then(async (res) => {\n if (!res) return;\n const headers = Array.from(res.headers.entries());\n const type = res.headers.get('content-type') ?? undefined;\n const blob = await res.clone().blob();\n let body: string | undefined;\n if (!type || /text|json|javascript|xml|svg/.test(type)) body = (await blob.text()).slice(0, 200_000);\n setDetail({ headers, body, size: blob.size, type });\n })\n .catch(() => {});\n }, [selected]);\n\n return (\n <div className=\"rid-storage\">\n <div className=\"rid-subtoolbar\">\n <button className=\"rid-icon-btn\" title=\"Refresh\" aria-label=\"Refresh caches\" onClick={load}>\n <RefreshIcon size={14} />\n </button>\n <select className=\"rid-select\" aria-label=\"Cache\" value={cache} onChange={(e) => setCache(e.target.value)}>\n <option value=\"\">{names?.length ? 'Select a cache…' : 'No caches'}</option>\n {names?.map((n) => (\n <option key={n}>{n}</option>\n ))}\n </select>\n <span className=\"rid-spacer\" />\n <span className=\"rid-v-faint\">Read-only</span>\n </div>\n {error && <div className=\"rid-note\">{error}</div>}\n {cache ? (\n <SplitPane\n vertical\n size={h}\n onResize={setH}\n min={60}\n minMain={60}\n main={\n <div className=\"rid-table-wrap\">\n <table className=\"rid-table rid-mono\">\n <colgroup>\n <col style={{ width: 70 }} />\n <col />\n </colgroup>\n <thead>\n <tr>\n <th>Method</th>\n <th>URL</th>\n </tr>\n </thead>\n <tbody>\n {entries.map((e) => (\n <tr key={e.url + e.method} className={selected === e ? 'rid-selected' : ''} onClick={() => setSelected(e)}>\n <td>{e.method}</td>\n <td title={e.url}>{e.url}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n }\n secondary={\n <div className=\"rid-storage-preview\">\n {detail ? (\n <>\n <dl className=\"rid-kv\">\n <dt>Size</dt>\n <dd>{formatBytes(detail.size)}</dd>\n {detail.headers.map(([k, v]) => (\n <div key={k} style={{ display: 'contents' }}>\n <dt>{k}</dt>\n <dd>{v}</dd>\n </div>\n ))}\n </dl>\n {detail.body && <pre className=\"rid-net-raw rid-mono\">{detail.body}</pre>}\n </>\n ) : (\n <div className=\"rid-empty\">Select an entry to view the cached response</div>\n )}\n </div>\n }\n />\n ) : (\n <div className=\"rid-empty\">{names && !names.length ? 'No Cache Storage caches for this origin.' : 'Select a cache to list its entries.'}</div>\n )}\n </div>\n );\n}\n","export interface CookieRecord {\n name: string;\n value: string;\n domain?: string;\n path?: string;\n /** epoch ms, or undefined for session cookies / unknown */\n expires?: number;\n size: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: string;\n partitioned?: boolean;\n /** Which attributes could actually be read from the browser. */\n source: 'document.cookie' | 'cookieStore';\n}\n\n/** Parses a document.cookie string. Only name/value are available through this API. */\nexport function parseDocumentCookie(str: string): CookieRecord[] {\n if (!str) return [];\n return str\n .split(';')\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => {\n const eq = part.indexOf('=');\n const name = eq === -1 ? '' : part.slice(0, eq);\n const value = eq === -1 ? part : part.slice(eq + 1);\n return { name, value, size: name.length + value.length, source: 'document.cookie' as const };\n });\n}\n\nexport interface CookieWrite {\n name: string;\n value: string;\n domain?: string;\n path?: string;\n expires?: number | null;\n maxAge?: number | null;\n secure?: boolean;\n sameSite?: string;\n}\n\nexport function serializeCookie(c: CookieWrite): string {\n let s = `${c.name}=${c.value}`;\n s += `; path=${c.path || '/'}`;\n if (c.domain) s += `; domain=${c.domain}`;\n if (c.maxAge != null) s += `; max-age=${c.maxAge}`;\n else if (c.expires != null) s += `; expires=${new Date(c.expires).toUTCString()}`;\n if (c.secure) s += '; secure';\n if (c.sameSite) s += `; samesite=${c.sameSite}`;\n return s;\n}\n\nexport async function readCookies(): Promise<CookieRecord[]> {\n const cs = (globalThis as any).cookieStore;\n if (cs && typeof cs.getAll === 'function') {\n try {\n const list: any[] = await cs.getAll();\n return list.map((c) => ({\n name: c.name,\n value: c.value,\n domain: c.domain ?? undefined,\n path: c.path ?? undefined,\n expires: c.expires ?? undefined,\n size: (c.name?.length ?? 0) + (c.value?.length ?? 0),\n secure: c.secure,\n sameSite: c.sameSite,\n partitioned: c.partitioned,\n httpOnly: false,\n source: 'cookieStore' as const,\n }));\n } catch {\n // fall through to document.cookie (e.g. insecure context)\n }\n }\n return parseDocumentCookie(typeof document !== 'undefined' ? document.cookie : '').map((c) => ({\n ...c,\n httpOnly: false,\n }));\n}\n\nexport function writeCookie(c: CookieWrite): void {\n document.cookie = serializeCookie(c);\n}\n\n/** Deletes a cookie, trying the provided path/domain plus common fallbacks. */\nexport function deleteCookie(name: string, path?: string, domain?: string): void {\n const paths = Array.from(new Set([path || '/', '/', location.pathname]));\n const domains = Array.from(new Set([domain, undefined, location.hostname]));\n for (const p of paths) {\n for (const d of domains) {\n document.cookie = serializeCookie({ name, value: '', path: p, domain: d, expires: 0 });\n }\n }\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { ConfirmDialog } from '../../components/ConfirmDialog';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport { ClearIcon, CloseIcon, PlusIcon, RefreshIcon } from '../../components/Icons';\nimport { deleteCookie, readCookies, writeCookie, type CookieRecord } from '../../utils/cookies';\nimport { formatBytes } from '../../utils/format';\nimport { copyText } from '../../panels/Network/util';\nimport { CellInput } from '../StorageInspector';\n\nconst NA = <span className=\"rid-v-faint\" title=\"Not readable from JavaScript in this browser (requires the Cookie Store API).\">—</span>;\n\nfunction useCookies() {\n const [cookies, setCookies] = useState<CookieRecord[]>([]);\n const refresh = useCallback(() => {\n readCookies().then(setCookies, () => setCookies([]));\n }, []);\n useEffect(() => {\n refresh();\n // document.cookie has no change event; poll cheaply while the view is open.\n let last = document.cookie;\n const t = setInterval(() => {\n if (document.cookie !== last) {\n last = document.cookie;\n refresh();\n }\n }, 1000);\n const cs = (globalThis as any).cookieStore;\n cs?.addEventListener?.('change', refresh);\n return () => {\n clearInterval(t);\n cs?.removeEventListener?.('change', refresh);\n };\n }, [refresh]);\n return { cookies, refresh };\n}\n\ninterface Draft {\n name: string;\n value: string;\n path: string;\n domain: string;\n days: string;\n secure: boolean;\n sameSite: string;\n}\n\nexport function CookieInspector() {\n const { cookies, refresh } = useCookies();\n const [filter, setFilter] = useState('');\n const [selected, setSelected] = useState<string | null>(null);\n const [editing, setEditing] = useState<string | null>(null);\n const [confirm, setConfirm] = useState(false);\n const [draft, setDraft] = useState<Draft | null>(null);\n const menu = useContextMenu();\n const rich = cookies.some((c) => c.source === 'cookieStore');\n\n const f = filter.trim().toLowerCase();\n const visible = f ? cookies.filter((c) => c.name.toLowerCase().includes(f) || c.value.toLowerCase().includes(f)) : cookies;\n const keyOf = (c: CookieRecord) => `${c.name}|${c.domain ?? ''}|${c.path ?? ''}`;\n\n const remove = (c: CookieRecord) => {\n deleteCookie(c.name, c.path, c.domain);\n setTimeout(refresh, 50);\n };\n\n const updateValue = (c: CookieRecord, value: string) => {\n setEditing(null);\n writeCookie({\n name: c.name,\n value,\n path: c.path ?? '/',\n domain: c.domain,\n expires: c.expires ?? null,\n secure: c.secure,\n sameSite: c.sameSite,\n });\n setTimeout(refresh, 50);\n };\n\n return (\n <div className=\"rid-storage\">\n <div className=\"rid-subtoolbar\">\n <button className=\"rid-icon-btn\" title=\"Refresh\" aria-label=\"Refresh\" onClick={refresh}>\n <RefreshIcon size={14} />\n </button>\n <input className=\"rid-input\" style={{ width: 200 }} placeholder=\"Filter\" aria-label=\"Filter cookies\" value={filter} onChange={(e) => setFilter(e.target.value)} />\n <span className=\"rid-sep\" />\n <button\n className=\"rid-icon-btn\"\n title=\"Add cookie\"\n aria-label=\"Add cookie\"\n onClick={() => setDraft({ name: '', value: '', path: '/', domain: '', days: '', secure: location.protocol === 'https:', sameSite: 'Lax' })}\n >\n <PlusIcon size={14} />\n </button>\n <button\n className=\"rid-icon-btn\"\n title=\"Delete selected\"\n aria-label=\"Delete selected\"\n disabled={!selected}\n onClick={() => {\n const c = cookies.find((x) => keyOf(x) === selected);\n if (c) remove(c);\n }}\n >\n <CloseIcon size={14} />\n </button>\n <button className=\"rid-icon-btn\" title=\"Clear all cookies\" aria-label=\"Clear all cookies\" disabled={!cookies.length} onClick={() => setConfirm(true)}>\n <ClearIcon size={14} />\n </button>\n <span className=\"rid-spacer\" />\n <span className=\"rid-v-faint\" style={{ paddingRight: 6 }}>\n {cookies.length} cookie{cookies.length === 1 ? '' : 's'} · {location.host}\n </span>\n </div>\n <div className=\"rid-note\">\n HttpOnly cookies are invisible to JavaScript and therefore not listed.{' '}\n {rich ? 'Attributes read via the Cookie Store API.' : 'Domain, Path, Expires, Secure and SameSite are not readable via document.cookie in this browser (shown as —).'}\n </div>\n <div className=\"rid-table-wrap\">\n <table className=\"rid-table rid-mono\">\n <colgroup>\n <col style={{ width: '16%' }} />\n <col style={{ width: '24%' }} />\n <col style={{ width: '12%' }} />\n <col style={{ width: '7%' }} />\n <col style={{ width: '14%' }} />\n <col style={{ width: '6%' }} />\n <col style={{ width: '6%' }} />\n <col style={{ width: '6%' }} />\n <col style={{ width: '7%' }} />\n </colgroup>\n <thead>\n <tr>\n <th>Name</th>\n <th>Value</th>\n <th>Domain</th>\n <th>Path</th>\n <th>Expires / Max-Age</th>\n <th>Size</th>\n <th>HttpOnly</th>\n <th>Secure</th>\n <th>SameSite</th>\n </tr>\n </thead>\n <tbody>\n {visible.map((c) => {\n const k = keyOf(c);\n const r = c.source === 'cookieStore';\n return (\n <tr\n key={k}\n className={selected === k ? 'rid-selected' : ''}\n onClick={() => setSelected(k)}\n onContextMenu={(e) => {\n setSelected(k);\n menu.open(e, [\n { label: 'Edit value', onSelect: () => setEditing(k) },\n { label: 'Copy value', onSelect: () => copyText(c.value) },\n { label: 'Copy as \"name=value\"', onSelect: () => copyText(`${c.name}=${c.value}`) },\n { separator: true },\n { label: 'Delete', onSelect: () => remove(c) },\n ]);\n }}\n >\n <td title={c.name}>{c.name}</td>\n {editing === k ? (\n <td className=\"rid-edit\">\n <CellInput initial={c.value} onCommit={(v) => updateValue(c, v)} onCancel={() => setEditing(null)} />\n </td>\n ) : (\n <td title={c.value} onDoubleClick={() => setEditing(k)}>\n {c.value}\n </td>\n )}\n <td>{r ? c.domain ?? location.hostname : NA}</td>\n <td>{r ? c.path ?? '/' : NA}</td>\n <td>{r ? (c.expires ? new Date(c.expires).toISOString() : 'Session') : NA}</td>\n <td>{formatBytes(c.size)}</td>\n <td title=\"HttpOnly cookies are never visible to JavaScript\">✗</td>\n <td>{r ? (c.secure ? '✓' : '') : NA}</td>\n <td>{r ? c.sameSite ?? '' : NA}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n {!visible.length && <div className=\"rid-empty\" style={{ height: 'auto', paddingTop: 30 }}>No cookies accessible to JavaScript.</div>}\n </div>\n {confirm && (\n <ConfirmDialog\n title=\"Clear all cookies?\"\n message={`This deletes ${cookies.length} cookie(s) visible to JavaScript for ${location.host}. HttpOnly cookies are not affected.`}\n confirmLabel=\"Clear all\"\n danger\n onCancel={() => setConfirm(false)}\n onConfirm={() => {\n setConfirm(false);\n cookies.forEach((c) => deleteCookie(c.name, c.path, c.domain));\n setTimeout(refresh, 50);\n }}\n />\n )}\n {draft && (\n <ConfirmDialog\n title=\"Add cookie\"\n confirmLabel=\"Save\"\n onCancel={() => setDraft(null)}\n onConfirm={() => {\n if (!draft.name.trim()) return;\n const days = parseFloat(draft.days);\n writeCookie({\n name: draft.name.trim(),\n value: draft.value,\n path: draft.path || '/',\n domain: draft.domain || undefined,\n maxAge: isNaN(days) ? null : Math.round(days * 86400),\n secure: draft.secure,\n sameSite: draft.sameSite || undefined,\n });\n setDraft(null);\n setTimeout(refresh, 50);\n }}\n >\n <div className=\"rid-form-grid\">\n <label htmlFor=\"rid-ck-name\">Name</label>\n <input id=\"rid-ck-name\" className=\"rid-input\" autoFocus value={draft.name} onChange={(e) => setDraft({ ...draft, name: e.target.value })} />\n <label htmlFor=\"rid-ck-value\">Value</label>\n <input id=\"rid-ck-value\" className=\"rid-input\" value={draft.value} onChange={(e) => setDraft({ ...draft, value: e.target.value })} />\n <label htmlFor=\"rid-ck-path\">Path</label>\n <input id=\"rid-ck-path\" className=\"rid-input\" value={draft.path} onChange={(e) => setDraft({ ...draft, path: e.target.value })} />\n <label htmlFor=\"rid-ck-domain\">Domain</label>\n <input id=\"rid-ck-domain\" className=\"rid-input\" placeholder={location.hostname} value={draft.domain} onChange={(e) => setDraft({ ...draft, domain: e.target.value })} />\n <label htmlFor=\"rid-ck-days\">Expires in (days)</label>\n <input id=\"rid-ck-days\" className=\"rid-input\" placeholder=\"Session cookie\" value={draft.days} onChange={(e) => setDraft({ ...draft, days: e.target.value })} />\n <label htmlFor=\"rid-ck-ss\">SameSite</label>\n <select id=\"rid-ck-ss\" className=\"rid-select\" value={draft.sameSite} onChange={(e) => setDraft({ ...draft, sameSite: e.target.value })}>\n <option value=\"\">(default)</option>\n <option>Lax</option>\n <option>Strict</option>\n <option>None</option>\n </select>\n <span />\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={draft.secure} onChange={(e) => setDraft({ ...draft, secure: e.target.checked })} /> Secure\n </label>\n </div>\n </ConfirmDialog>\n )}\n {menu.element}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useApplication, type AppSection } from '../../store/applicationStore';\nimport { SplitPane } from '../../components/SplitPane';\nimport { StorageInspector } from '../../inspectors/StorageInspector';\nimport { CacheStorageInspector, IndexedDBInspector } from '../../inspectors/StorageInspector/providers';\nimport { CookieInspector } from '../../inspectors/CookieInspector';\nimport { ApplicationIcon } from '../../components/Icons';\n\nconst GROUPS: { title: string; items: [AppSection, string][] }[] = [\n {\n title: 'Storage',\n items: [\n ['local', 'Local storage'],\n ['session', 'Session storage'],\n ['indexeddb', 'IndexedDB'],\n ['cookies', 'Cookies'],\n ],\n },\n { title: 'Cache', items: [['cache', 'Cache storage']] },\n];\n\nexport function ApplicationPanel() {\n const section = useApplication((s) => s.section);\n const setSection = useApplication((s) => s.setSection);\n const [width, setWidth] = useState(200);\n return (\n <div className=\"rid-application\">\n <SplitPane\n side=\"start\"\n size={width}\n onResize={setWidth}\n min={140}\n minMain={240}\n secondary={\n <nav className=\"rid-app-nav\" aria-label=\"Application sections\">\n {GROUPS.map((g) => (\n <div key={g.title}>\n <div className=\"rid-app-nav-title\">{g.title}</div>\n {g.items.map(([id, label]) => (\n <button key={id} className={`rid-app-nav-item${section === id ? ' rid-active' : ''}`} aria-current={section === id} onClick={() => setSection(id)}>\n <ApplicationIcon size={13} />\n <span>{label}</span>\n {(id === 'local' || id === 'session' || id === 'cookies') && <span className=\"rid-app-origin\">{location.origin}</span>}\n </button>\n ))}\n </div>\n ))}\n </nav>\n }\n main={\n <div className=\"rid-app-main\">\n {section === 'local' && <StorageInspector area=\"local\" />}\n {section === 'session' && <StorageInspector area=\"session\" />}\n {section === 'cookies' && <CookieInspector />}\n {section === 'indexeddb' && <IndexedDBInspector />}\n {section === 'cache' && <CacheStorageInspector />}\n </div>\n }\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { setGroupSimilar } from '../../store/consoleStore';\nimport { useConfig } from '../../hooks/useConfig';\nimport { useRegisteredPanels } from '../../core/panelRegistry';\nimport { BUILTIN_PANELS } from '../index';\nimport { formatShortcut } from '../../utils/shortcut';\nimport { hasChanges, revertAllChanges } from '../../inspectors/CSSInspector/cssModel';\nimport { useElements } from '../../store/elementsStore';\nimport { ConfirmDialog } from '../../components/ConfirmDialog';\nimport { INTERNAL_PREFIX } from '../../utils/safeStorage';\nimport type { DockPosition, ThemeSetting } from '../../types';\n\ndeclare const __RID_VERSION__: string | undefined;\nconst VERSION = typeof __RID_VERSION__ !== 'undefined' ? __RID_VERSION__ : 'dev';\n\nfunction ShortcutRecorder() {\n const cfg = useConfig();\n const override = useDevtools((s) => s.shortcutOverride);\n const update = useDevtools((s) => s.updateSettings);\n const [recording, setRecording] = useState(false);\n const current = override ?? cfg.shortcut;\n if (cfg.shortcut === false) return <span className=\"rid-v-faint\">Disabled by configuration</span>;\n return (\n <>\n <button\n className=\"rid-btn\"\n aria-label=\"Record new shortcut\"\n onClick={() => setRecording(true)}\n onBlur={() => setRecording(false)}\n onKeyDown={(e) => {\n if (!recording) return;\n e.preventDefault();\n e.stopPropagation();\n if (['Control', 'Meta', 'Shift', 'Alt'].includes(e.key)) return;\n if (e.key === 'Escape') return setRecording(false);\n const parts: string[] = [];\n if (e.ctrlKey || e.metaKey) parts.push('Ctrl');\n if (e.altKey) parts.push('Alt');\n if (e.shiftKey) parts.push('Shift');\n if (!parts.length) return;\n parts.push(e.code.startsWith('Key') ? e.code.slice(3) : e.key.length === 1 ? e.key.toUpperCase() : e.key);\n update({ shortcutOverride: parts.join('+') });\n setRecording(false);\n }}\n >\n {recording ? 'Press keys…' : current ? <span className=\"rid-kbd\">{formatShortcut(current)}</span> : 'None'}\n </button>\n {override && (\n <button className=\"rid-btn\" onClick={() => update({ shortcutOverride: null })}>\n Reset\n </button>\n )}\n </>\n );\n}\n\nexport function SettingsPanel() {\n const s = useDevtools();\n const cfg = useConfig();\n const registered = useRegisteredPanels();\n const update = s.updateSettings;\n const [confirm, setConfirm] = useState(false);\n useElements((x) => x.styleVersion);\n\n const allPanels = [...cfg.panels.map((id) => BUILTIN_PANELS[id]).filter(Boolean), ...cfg.customPanels, ...registered];\n\n return (\n <div className=\"rid-settings\">\n <h2>Settings</h2>\n\n <h3>Appearance</h3>\n <div className=\"rid-settings-row\">\n <label htmlFor=\"rid-set-theme\">Theme</label>\n <select id=\"rid-set-theme\" className=\"rid-select\" value={s.theme} onChange={(e) => update({ theme: e.target.value as ThemeSetting })}>\n <option value=\"system\">System preference</option>\n <option value=\"light\">Light</option>\n <option value=\"dark\">Dark</option>\n </select>\n </div>\n <div className=\"rid-settings-row\">\n <label htmlFor=\"rid-set-dock\">Dock position</label>\n <select id=\"rid-set-dock\" className=\"rid-select\" value={s.dock} onChange={(e) => update({ dock: e.target.value as DockPosition })}>\n <option value=\"bottom\">Bottom</option>\n <option value=\"right\">Right</option>\n <option value=\"floating\">Floating window</option>\n </select>\n </div>\n <div className=\"rid-settings-row\">\n <label>Toggle shortcut</label>\n <ShortcutRecorder />\n </div>\n <div className=\"rid-settings-row\">\n <label>Other shortcuts</label>\n <span className=\"rid-v-faint\">\n <span className=\"rid-kbd\">{formatShortcut('Ctrl+Shift+C')}</span> inspect element · <span className=\"rid-kbd\">{formatShortcut('Ctrl+Shift+M')}</span> device toolbar · <span className=\"rid-kbd\">Esc</span> cancel picker\n </span>\n </div>\n\n <h3>Panels</h3>\n {allPanels.map((p) => (\n <div className=\"rid-settings-row\" key={p.id}>\n <label className=\"rid-checkbox\">\n <input\n type=\"checkbox\"\n checked={!s.hiddenPanels.includes(p.id)}\n onChange={(e) => update({ hiddenPanels: e.target.checked ? s.hiddenPanels.filter((x) => x !== p.id) : [...s.hiddenPanels, p.id] })}\n />\n {p.title}\n </label>\n </div>\n ))}\n\n <h3>Console</h3>\n <div className=\"rid-settings-row\">\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={s.preserveConsoleLog} onChange={(e) => update({ preserveConsoleLog: e.target.checked })} /> Preserve log upon navigation\n </label>\n </div>\n <div className=\"rid-settings-row\">\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={s.consoleTimestamps} onChange={(e) => update({ consoleTimestamps: e.target.checked })} /> Show timestamps\n </label>\n </div>\n <div className=\"rid-settings-row\">\n <label className=\"rid-checkbox\">\n <input\n type=\"checkbox\"\n checked={s.groupSimilar}\n onChange={(e) => {\n setGroupSimilar(e.target.checked);\n update({ groupSimilar: e.target.checked });\n }}\n />{' '}\n Group similar consecutive messages\n </label>\n </div>\n\n <h3>Network</h3>\n <div className=\"rid-settings-row\">\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={s.preserveNetworkLog} onChange={(e) => update({ preserveNetworkLog: e.target.checked })} /> Preserve log upon navigation\n </label>\n </div>\n <div className=\"rid-settings-row\">\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={s.disableCache} onChange={(e) => update({ disableCache: e.target.checked })} /> Disable cache (simulated)\n </label>\n </div>\n\n <h3>Elements</h3>\n <div className=\"rid-settings-row\">\n <button\n className=\"rid-btn\"\n disabled={!hasChanges()}\n onClick={() => {\n revertAllChanges();\n useElements.getState().bumpStyles();\n }}\n >\n Revert all CSS changes\n </button>\n <span className=\"rid-v-faint\">Style edits are temporary and never written to source files.</span>\n </div>\n\n <h3>Data</h3>\n <div className=\"rid-settings-row\">\n <button className=\"rid-btn rid-danger\" onClick={() => setConfirm(true)}>\n Restore defaults and reload\n </button>\n <span className=\"rid-v-faint\">DevTools stores its preferences in localStorage keys prefixed with “{INTERNAL_PREFIX}”.</span>\n </div>\n\n <h3>About</h3>\n <p className=\"rid-v-faint\" style={{ maxWidth: 640 }}>\n react-inspector-devtools {VERSION}. Runs entirely inside the page: it cannot see browser-internal data (HttpOnly cookies, cross-origin\n response bodies, request headers added by the browser) and its device mode resizes the app root rather than emulating a physical device.\n </p>\n\n {confirm && (\n <ConfirmDialog\n title=\"Restore defaults?\"\n message=\"All DevTools preferences (dock, theme, sizes, custom devices, console history) will be removed and the page reloaded.\"\n confirmLabel=\"Restore & reload\"\n danger\n onCancel={() => setConfirm(false)}\n onConfirm={() => {\n for (const area of [localStorage, sessionStorage]) {\n for (let i = area.length - 1; i >= 0; i--) {\n const k = area.key(i);\n if (k?.startsWith(INTERNAL_PREFIX)) Storage.prototype.removeItem.call(area, k);\n }\n }\n location.reload();\n }}\n />\n )}\n </div>\n );\n}\n","import type { BuiltInPanelId, PanelDefinition } from '../types';\nimport { ElementsPanel } from './Elements';\nimport { ConsolePanel } from './Console';\nimport { NetworkPanel } from './Network';\nimport { ApplicationPanel } from './Application';\nimport { ApplicationIcon, ConsoleIcon, ElementsIcon, NetworkIcon } from '../components/Icons';\n\nexport { SettingsPanel } from './Settings';\n\nexport const BUILTIN_PANELS: Record<BuiltInPanelId, PanelDefinition> = {\n elements: { id: 'elements', title: 'Elements', icon: ElementsIcon, component: ElementsPanel, order: 10 },\n console: { id: 'console', title: 'Console', icon: ConsoleIcon, component: ConsolePanel, order: 20 },\n network: { id: 'network', title: 'Network', icon: NetworkIcon, component: NetworkPanel, order: 30 },\n application: { id: 'application', title: 'Application', icon: ApplicationIcon, component: ApplicationPanel, order: 40 },\n};\n","import { useEffect, useMemo, useState } from 'react';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { useConfig } from '../../hooks/useConfig';\nimport { useRegisteredPanels } from '../../core/panelRegistry';\nimport { startDrag } from '../../hooks/useDrag';\nimport { clamp } from '../../utils/format';\nimport { MainToolbar } from '../Toolbar';\nimport { StatusBar } from '../StatusBar';\nimport { ErrorBoundary } from '../ErrorBoundary';\nimport { BUILTIN_PANELS, SettingsPanel } from '../../panels';\nimport type { PanelDefinition } from '../../types';\n\nconst MIN_H = 120;\nconst MIN_W = 280;\n\nexport function useVisiblePanels(): PanelDefinition[] {\n const cfg = useConfig();\n const hidden = useDevtools((s) => s.hiddenPanels);\n const registered = useRegisteredPanels();\n return useMemo(() => {\n const enabled: Record<string, boolean> = {\n elements: true,\n console: cfg.options.enableConsole,\n network: cfg.options.enableNetwork,\n application: cfg.options.enableApplication,\n };\n const builtins = cfg.panels\n .filter((id) => enabled[id] !== false && !hidden.includes(id))\n .map((id) => BUILTIN_PANELS[id])\n .filter(Boolean);\n const extra = [...cfg.customPanels, ...registered].filter((p, i, arr) => arr.findIndex((x) => x.id === p.id) === i && !hidden.includes(p.id));\n return [...builtins, ...extra];\n }, [cfg, hidden, registered]);\n}\n\nexport function DevToolsContainer() {\n const s = useDevtools();\n const panels = useVisiblePanels();\n const cfg = useConfig();\n // Panels are mounted lazily and then kept alive so their state survives tab switches.\n const [visited, setVisited] = useState<string[]>([]);\n const active = s.activePanel === 'settings' || panels.some((p) => p.id === s.activePanel) ? s.activePanel : panels[0]?.id ?? 'settings';\n useEffect(() => {\n if (!visited.includes(active)) setVisited((v) => [...v, active]);\n }, [active, visited]);\n\n // Optionally push page content aside when docked.\n useEffect(() => {\n if (!cfg.dockPushesContent || s.dock === 'floating' || s.maximized) return;\n const html = document.documentElement;\n const prop = s.dock === 'bottom' ? 'paddingBottom' : 'paddingRight';\n const prev = html.style[prop];\n html.style[prop] = `${s.minimized ? 31 : s.dock === 'bottom' ? s.bottomHeight : s.rightWidth}px`;\n return () => {\n html.style[prop] = prev;\n };\n }, [cfg.dockPushesContent, s.dock, s.bottomHeight, s.rightWidth, s.minimized, s.maximized]);\n\n const style: React.CSSProperties = {};\n if (s.dock === 'bottom') style.height = clamp(s.bottomHeight, MIN_H, window.innerHeight - 40);\n else if (s.dock === 'right') style.width = clamp(s.rightWidth, MIN_W, window.innerWidth - 40);\n else {\n style.left = s.floating.x;\n style.top = s.floating.y;\n style.width = s.floating.width;\n style.height = s.floating.height;\n }\n\n const resize = (edge: 'top' | 'left' | 'right' | 'bottom' | 'corner') => (e: React.PointerEvent) => {\n const start = { h: s.bottomHeight, w: s.rightWidth, f: { ...s.floating } };\n startDrag(\n e,\n (dx, dy) => {\n if (s.dock === 'bottom') useDevtools.setState({ bottomHeight: clamp(start.h - dy, MIN_H, window.innerHeight - 40) });\n else if (s.dock === 'right') useDevtools.setState({ rightWidth: clamp(start.w - dx, MIN_W, window.innerWidth - 40) });\n else {\n const f = { ...start.f };\n if (edge === 'right' || edge === 'corner') f.width = Math.max(MIN_W, start.f.width + dx);\n if (edge === 'bottom' || edge === 'corner') f.height = Math.max(MIN_H, start.f.height + dy);\n if (edge === 'left') {\n f.width = Math.max(MIN_W, start.f.width - dx);\n f.x = start.f.x + (start.f.width - f.width);\n }\n if (edge === 'top') {\n f.height = Math.max(MIN_H, start.f.height - dy);\n f.y = start.f.y + (start.f.height - f.height);\n }\n useDevtools.setState({ floating: f });\n }\n },\n () => s.updateSettings({}),\n );\n };\n\n const all = [...panels];\n return (\n <div\n className=\"rid-panel\"\n data-dock={s.dock}\n data-maximized={s.maximized}\n data-minimized={s.minimized}\n style={style}\n role=\"region\"\n aria-label=\"Developer tools\"\n >\n {!s.maximized && !s.minimized && (\n <>\n {s.dock === 'bottom' && <div className=\"rid-resize rid-resize-top\" onPointerDown={resize('top')} />}\n {s.dock === 'right' && <div className=\"rid-resize rid-resize-left\" onPointerDown={resize('left')} />}\n {s.dock === 'floating' && (\n <>\n <div className=\"rid-resize rid-resize-top\" onPointerDown={resize('top')} />\n <div className=\"rid-resize rid-resize-left\" onPointerDown={resize('left')} />\n <div className=\"rid-resize rid-resize-right\" onPointerDown={resize('right')} />\n <div className=\"rid-resize rid-resize-bottom\" onPointerDown={resize('bottom')} />\n <div className=\"rid-resize rid-resize-corner\" onPointerDown={resize('corner')} />\n </>\n )}\n </>\n )}\n <MainToolbar panels={panels} />\n {!s.minimized && (\n <>\n <div className=\"rid-workspace\">\n {all.map((p) =>\n visited.includes(p.id) || p.id === active ? (\n <div key={p.id} className=\"rid-panel-body\" hidden={p.id !== active} role=\"tabpanel\" aria-label={p.title}>\n <ErrorBoundary label={p.title}>\n <p.component />\n </ErrorBoundary>\n </div>\n ) : null,\n )}\n {active === 'settings' && (\n <div className=\"rid-panel-body\" role=\"tabpanel\" aria-label=\"Settings\">\n <ErrorBoundary label=\"Settings\">\n <SettingsPanel />\n </ErrorBoundary>\n </div>\n )}\n </div>\n <StatusBar />\n </>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { useElements } from '../../store/elementsStore';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { isDevtoolsNode } from '../../core/ownership';\n\ninterface Geometry {\n border: DOMRect;\n margin: [number, number, number, number];\n borderW: [number, number, number, number];\n padding: [number, number, number, number];\n tag: string;\n id: string;\n classes: string;\n width: number;\n height: number;\n position: string;\n display: string;\n color?: string;\n font?: string;\n}\n\nconst px = (v: string) => parseFloat(v) || 0;\n\nfunction measure(node: Node): Geometry | null {\n if (!node.isConnected || isDevtoolsNode(node)) return null;\n if (node.nodeType === 3) {\n const range = document.createRange();\n range.selectNodeContents(node);\n const r = range.getBoundingClientRect();\n if (!r.width && !r.height) return null;\n return {\n border: r,\n margin: [0, 0, 0, 0],\n borderW: [0, 0, 0, 0],\n padding: [0, 0, 0, 0],\n tag: '#text',\n id: '',\n classes: '',\n width: r.width,\n height: r.height,\n position: '',\n display: 'inline',\n };\n }\n if (node.nodeType !== 1) return null;\n const el = node as Element;\n const r = el.getBoundingClientRect();\n const cs = getComputedStyle(el);\n if (cs.display === 'none') return null;\n // Account for transforms such as the device toolbar zoom.\n const offsetW = (el as HTMLElement).offsetWidth;\n const scale = offsetW ? r.width / offsetW : 1;\n const s = (v: string) => px(v) * (isFinite(scale) && scale > 0 ? scale : 1);\n const cls = el.getAttribute('class')?.trim().split(/\\s+/).filter(Boolean) ?? [];\n return {\n border: r,\n margin: [s(cs.marginTop), s(cs.marginRight), s(cs.marginBottom), s(cs.marginLeft)],\n borderW: [s(cs.borderTopWidth), s(cs.borderRightWidth), s(cs.borderBottomWidth), s(cs.borderLeftWidth)],\n padding: [s(cs.paddingTop), s(cs.paddingRight), s(cs.paddingBottom), s(cs.paddingLeft)],\n tag: el.localName,\n id: el.id,\n classes: cls.length ? '.' + cls.slice(0, 4).join('.') + (cls.length > 4 ? '…' : '') : '',\n width: r.width / (scale || 1),\n height: r.height / (scale || 1),\n position: cs.position,\n display: cs.display,\n color: cs.color,\n font: `${cs.fontSize} ${cs.fontFamily.split(',')[0].replace(/[\"']/g, '')}`,\n };\n}\n\nconst round = (n: number) => Math.round(n * 100) / 100;\n\nfunction Box({ x, y, w, h, color }: { x: number; y: number; w: number; h: number; color: string }) {\n if (w <= 0 || h <= 0) return null;\n return <div style={{ position: 'fixed', left: x, top: y, width: w, height: h, background: color, pointerEvents: 'none' }} />;\n}\n\n/** Chrome-style element highlight (margin/border/padding/content) with an info tooltip. */\nexport function HighlightOverlay() {\n const hovered = useElements((s) => s.hovered);\n const picker = useDevtools((s) => s.pickerActive);\n const [geo, setGeo] = useState<Geometry | null>(null);\n\n useEffect(() => {\n if (!hovered) {\n setGeo(null);\n return;\n }\n let frame = 0;\n let last = '';\n const loop = () => {\n const g = measure(hovered);\n const key = g ? `${g.border.x},${g.border.y},${g.border.width},${g.border.height}` : '';\n if (key !== last) {\n last = key;\n setGeo(g);\n }\n frame = requestAnimationFrame(loop);\n };\n loop();\n return () => cancelAnimationFrame(frame);\n }, [hovered]);\n\n if (!geo) return null;\n const b = geo.border;\n const [mt, mr, mb, ml] = geo.margin;\n const [bt, br, bb, bl] = geo.borderW;\n const [pt, pr, pb, pl] = geo.padding;\n\n const marginBox = { x: b.left - ml, y: b.top - mt, w: b.width + ml + mr, h: b.height + mt + mb };\n const paddingBox = { x: b.left + bl, y: b.top + bt, w: b.width - bl - br, h: b.height - bt - bb };\n const contentBox = { x: paddingBox.x + pl, y: paddingBox.y + pt, w: paddingBox.w - pl - pr, h: paddingBox.h - pt - pb };\n\n // Tooltip placement: below the element when there's room, otherwise above.\n const tipH = 62;\n const below = marginBox.y + marginBox.h + 8;\n const tipTop = below + tipH < window.innerHeight ? below : Math.max(4, marginBox.y - tipH - 8);\n const tipLeft = Math.max(4, Math.min(b.left, window.innerWidth - 300));\n\n return (\n <div className=\"rid-overlay\" aria-hidden>\n <Box {...marginBox} color=\"rgba(246, 178, 107, 0.55)\" />\n <Box x={b.left} y={b.top} w={b.width} h={b.height} color=\"rgba(255, 229, 153, 0.6)\" />\n <Box {...paddingBox} color=\"rgba(147, 196, 125, 0.55)\" />\n <Box {...contentBox} color=\"rgba(111, 168, 220, 0.66)\" />\n <div className=\"rid-overlay-tip\" style={{ left: tipLeft, top: tipTop }}>\n <div className=\"rid-overlay-tip-head\">\n <span className=\"rid-ot-tag\">{geo.tag}</span>\n {geo.id && <span className=\"rid-ot-id\">#{geo.id}</span>}\n <span className=\"rid-ot-cls\">{geo.classes}</span>\n <span className=\"rid-ot-size\">\n {round(geo.width)} × {round(geo.height)}\n </span>\n </div>\n {geo.tag !== '#text' && (\n <div className=\"rid-overlay-tip-rows\">\n <span>Position</span>\n <span>\n {geo.position} · x {Math.round(b.left)}, y {Math.round(b.top)}\n </span>\n <span>Display</span>\n <span>{geo.display}</span>\n {geo.font && (\n <>\n <span>Font</span>\n <span>{geo.font}</span>\n </>\n )}\n </div>\n )}\n {picker && <div className=\"rid-overlay-hint\">Click to select · Esc to cancel</div>}\n </div>\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { useElements } from '../../store/elementsStore';\nimport { isDevtoolsEvent, isDevtoolsNode } from '../../core/ownership';\n\nconst BLOCKED = ['pointerdown', 'pointerup', 'mousedown', 'mouseup', 'click', 'dblclick', 'contextmenu', 'touchstart', 'touchend', 'auxclick'];\n\nfunction eventTarget(e: Event): Element | null {\n const path = e.composedPath?.() ?? [];\n const first = (path[0] ?? e.target) as Node | null;\n if (!first) return null;\n const el = first.nodeType === 1 ? (first as Element) : first.parentElement;\n return el && !isDevtoolsNode(el) ? el : null;\n}\n\n/**\n * Element-selection mode (\"Select an element in the page to inspect it\").\n * While active, page interactions are intercepted in the capture phase so the\n * application does not react to clicks; Escape cancels.\n */\nexport function usePicker(): void {\n const active = useDevtools((s) => s.pickerActive);\n\n useEffect(() => {\n if (!active) return;\n const { hover } = useElements.getState();\n\n const onMove = (e: Event) => {\n if (isDevtoolsEvent(e)) return;\n const el = eventTarget(e);\n if (el) hover(el);\n };\n const onBlock = (e: Event) => {\n if (isDevtoolsEvent(e)) return;\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n if (e.type === 'click' || (e.type === 'touchend' && e.cancelable)) {\n const el = eventTarget(e);\n if (!el) return;\n useElements.getState().select(el, true);\n hover(null);\n const d = useDevtools.getState();\n d.updateSettings({ activePanel: 'elements' });\n useDevtools.setState({ pickerActive: false, open: true, minimized: false });\n }\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n useDevtools.setState({ pickerActive: false });\n }\n };\n\n window.addEventListener('pointermove', onMove, true);\n window.addEventListener('mouseover', onMove, true);\n BLOCKED.forEach((t) => window.addEventListener(t, onBlock, { capture: true, passive: false }));\n window.addEventListener('keydown', onKey, true);\n return () => {\n window.removeEventListener('pointermove', onMove, true);\n window.removeEventListener('mouseover', onMove, true);\n BLOCKED.forEach((t) => window.removeEventListener(t, onBlock, true));\n window.removeEventListener('keydown', onKey, true);\n useElements.getState().hover(null);\n };\n }, [active]);\n}\n","/**\n * A small media query evaluator used by the device toolbar to emulate\n * viewport-dependent media queries against a virtual viewport.\n *\n * Features that do not depend on the viewport (prefers-color-scheme, etc.)\n * are delegated to the real `matchMedia` through the `fallback` callback.\n */\n\nexport interface MediaEnv {\n width: number;\n height: number;\n dpr: number;\n touch: boolean;\n}\n\nexport const VIEWPORT_FEATURE_RE =\n /\\b(width|height|aspect-ratio|orientation|resolution|device-pixel-ratio|hover|pointer)\\b/i;\n\nexport function dependsOnViewport(query: string): boolean {\n return VIEWPORT_FEATURE_RE.test(query);\n}\n\ntype Fallback = (query: string) => boolean;\n\nclass ParseError extends Error {}\n\nexport function evaluateMediaQueryList(text: string, env: MediaEnv, fallback: Fallback): boolean {\n const queries = splitTopLevel(text.trim());\n if (!queries.length || (queries.length === 1 && queries[0] === '')) return true;\n return queries.some((q) => {\n try {\n return evaluateQuery(q.trim().toLowerCase(), env, fallback);\n } catch {\n return fallback(q);\n }\n });\n}\n\nfunction splitTopLevel(text: string): string[] {\n const out: string[] = [];\n let depth = 0;\n let cur = '';\n for (const ch of text) {\n if (ch === '(') depth++;\n if (ch === ')') depth--;\n if (ch === ',' && depth === 0) {\n out.push(cur);\n cur = '';\n } else cur += ch;\n }\n out.push(cur);\n return out;\n}\n\nfunction evaluateQuery(q: string, env: MediaEnv, fallback: Fallback): boolean {\n let s = q.trim();\n if (!s) return true;\n // [not|only] media-type [and condition]\n const typeMatch = s.match(/^(not\\s+|only\\s+)?([a-z-]+)(\\s+and\\s+([\\s\\S]*))?$/);\n if (typeMatch && typeMatch[2] !== 'not') {\n const negate = typeMatch[1]?.trim() === 'not';\n const type = typeMatch[2];\n const typeOk = type === 'all' || type === 'screen';\n const condText = typeMatch[4];\n let result = typeOk && (condText ? new CondParser(condText, env, fallback).parseAll() : true);\n if (negate) result = !result;\n return result;\n }\n s = s.replace(/^only\\s+/, '');\n return new CondParser(s, env, fallback).parseAll();\n}\n\nclass CondParser {\n pos = 0;\n constructor(\n private src: string,\n private env: MediaEnv,\n private fallback: Fallback,\n ) {}\n\n parseAll(): boolean {\n const v = this.condition();\n this.ws();\n if (this.pos < this.src.length) throw new ParseError('trailing');\n return v;\n }\n\n private ws() {\n while (this.pos < this.src.length && /\\s/.test(this.src[this.pos])) this.pos++;\n }\n\n private keyword(k: string): boolean {\n this.ws();\n if (this.src.startsWith(k, this.pos) && !/[a-z-]/.test(this.src[this.pos + k.length] || '')) {\n this.pos += k.length;\n return true;\n }\n return false;\n }\n\n private condition(): boolean {\n if (this.keyword('not')) return !this.inParens();\n let v = this.inParens();\n if (this.keyword('and')) {\n v = this.inParens() && v;\n while (this.keyword('and')) v = this.inParens() && v;\n } else if (this.keyword('or')) {\n v = this.inParens() || v;\n while (this.keyword('or')) v = this.inParens() || v;\n }\n return v;\n }\n\n private inParens(): boolean {\n this.ws();\n if (this.src[this.pos] !== '(') throw new ParseError('expected (');\n // find matching paren\n let depth = 0;\n let end = this.pos;\n for (; end < this.src.length; end++) {\n if (this.src[end] === '(') depth++;\n else if (this.src[end] === ')') {\n depth--;\n if (depth === 0) break;\n }\n }\n if (depth !== 0) throw new ParseError('unbalanced');\n const inner = this.src.slice(this.pos + 1, end).trim();\n this.pos = end + 1;\n if (inner.startsWith('(') || inner.startsWith('not ') || inner.startsWith('not(')) {\n return new CondParser(inner, this.env, this.fallback).parseAll();\n }\n return evaluateFeature(inner, this.env, this.fallback);\n }\n}\n\nfunction toPx(value: string): number | null {\n const m = value.trim().match(/^(-?[\\d.]+)(px|em|rem)?$/);\n if (!m) return null;\n const n = parseFloat(m[1]);\n return m[2] === 'em' || m[2] === 'rem' ? n * 16 : n;\n}\n\nfunction toDppx(value: string): number | null {\n const m = value.trim().match(/^([\\d.]+)(dppx|x|dpi|dpcm)?$/);\n if (!m) return null;\n const n = parseFloat(m[1]);\n switch (m[2]) {\n case 'dpi':\n return n / 96;\n case 'dpcm':\n return (n * 2.54) / 96;\n default:\n return n;\n }\n}\n\nfunction toRatio(value: string): number | null {\n const m = value.trim().match(/^([\\d.]+)\\s*(?:\\/\\s*([\\d.]+))?$/);\n if (!m) return null;\n return parseFloat(m[1]) / (m[2] ? parseFloat(m[2]) : 1);\n}\n\ntype NumericFeature = 'width' | 'height' | 'aspect-ratio' | 'resolution';\n\nfunction normalizeName(raw: string): { name: string; prefix: 'min' | 'max' | null } {\n let name = raw.trim().replace(/^-webkit-/, '');\n let prefix: 'min' | 'max' | null = null;\n const m = name.match(/^(min|max)-(.*)$/);\n if (m) {\n prefix = m[1] as 'min' | 'max';\n name = m[2];\n }\n if (name === 'device-width') name = 'width';\n if (name === 'device-height') name = 'height';\n if (name === 'device-aspect-ratio') name = 'aspect-ratio';\n if (name === 'device-pixel-ratio') name = 'resolution';\n return { name, prefix };\n}\n\nfunction actual(name: NumericFeature, env: MediaEnv): number {\n switch (name) {\n case 'width':\n return env.width;\n case 'height':\n return env.height;\n case 'aspect-ratio':\n return env.width / env.height;\n case 'resolution':\n return env.dpr;\n }\n}\n\nfunction parseValue(name: NumericFeature, value: string, rawName: string): number | null {\n if (name === 'width' || name === 'height') return toPx(value);\n if (name === 'aspect-ratio') return toRatio(value);\n // -webkit-device-pixel-ratio uses plain numbers\n if (/pixel-ratio/.test(rawName)) return parseFloat(value);\n return toDppx(value);\n}\n\nfunction compare(a: number, op: string, b: number): boolean {\n const eps = 1e-6;\n switch (op) {\n case '<':\n return a < b - eps;\n case '<=':\n return a <= b + eps;\n case '>':\n return a > b + eps;\n case '>=':\n return a >= b - eps;\n case '=':\n return Math.abs(a - b) < eps;\n default:\n throw new ParseError('op');\n }\n}\n\nconst NUMERIC = new Set(['width', 'height', 'aspect-ratio', 'resolution']);\n\nexport function evaluateFeature(inner: string, env: MediaEnv, fallback: Fallback): boolean {\n // Range syntax: \"width >= 600px\", \"400px < width <= 800px\"\n if (/[<>=]/.test(inner) && !inner.includes(':')) {\n const tokens = inner.split(/\\s*(<=|>=|<|>|=)\\s*/).map((t) => t.trim());\n if (tokens.length === 3 || tokens.length === 5) {\n const featIdx = tokens.findIndex((t, i) => i % 2 === 0 && NUMERIC.has(normalizeName(t).name));\n if (featIdx === -1) return fallback(`(${inner})`);\n const rawName = tokens[featIdx];\n const name = normalizeName(rawName).name as NumericFeature;\n const val = actual(name, env);\n let ok = true;\n for (let i = 1; i < tokens.length; i += 2) {\n const left = tokens[i - 1];\n const op = tokens[i];\n const right = tokens[i + 1];\n const l = i - 1 === featIdx ? val : parseValue(name, left, rawName);\n const r = i + 1 === featIdx ? val : parseValue(name, right, rawName);\n if (l == null || r == null) return fallback(`(${inner})`);\n ok = ok && compare(l, op, r);\n }\n return ok;\n }\n return fallback(`(${inner})`);\n }\n\n const colon = inner.indexOf(':');\n const rawName = colon === -1 ? inner : inner.slice(0, colon);\n const value = colon === -1 ? null : inner.slice(colon + 1).trim();\n const { name, prefix } = normalizeName(rawName);\n\n if (NUMERIC.has(name)) {\n const n = name as NumericFeature;\n const val = actual(n, env);\n if (value == null) return val > 0;\n const target = parseValue(n, value, rawName);\n if (target == null) return fallback(`(${inner})`);\n if (prefix === 'min') return compare(val, '>=', target);\n if (prefix === 'max') return compare(val, '<=', target);\n return compare(val, '=', target);\n }\n if (name === 'orientation') {\n const o = env.height >= env.width ? 'portrait' : 'landscape';\n return value == null ? true : value === o;\n }\n if (name === 'hover' || name === 'any-hover') {\n const h = env.touch ? 'none' : 'hover';\n return value == null ? h === 'hover' : value === h;\n }\n if (name === 'pointer' || name === 'any-pointer') {\n const p = env.touch ? 'coarse' : 'fine';\n return value == null ? true : value === p;\n }\n return fallback(`(${inner})`);\n}\n","import { isDevtoolsNode, HOST_ATTR } from '../../core/ownership';\nimport { dependsOnViewport, evaluateMediaQueryList, type MediaEnv } from '../../utils/mediaQuery';\n\n/**\n * Viewport emulation by constraining the application's root element.\n *\n * This is NOT full device emulation: the browser window keeps its real size,\n * user agent and input devices. What we can do from inside the page:\n * - size/zoom the app root to the device viewport;\n * - rewrite same-origin CSS media rules that depend on the viewport;\n * - make matchMedia(), innerWidth/innerHeight, devicePixelRatio and screen.* report the device;\n * - synthesize touch events from mouse input.\n */\n\nlet env: MediaEnv | null = null;\nlet realMatchMedia: ((q: string) => MediaQueryList) | null = null;\n\n/* ================================================================= matchMedia */\n\nconst tracked = new Set<WeakRef<MediaQueryList>>();\nconst lastMatches = new WeakMap<MediaQueryList, boolean>();\nconst supportsWeakRef = typeof WeakRef !== 'undefined';\n\nfunction protoMatches(mql: MediaQueryList): boolean {\n const desc = Object.getOwnPropertyDescriptor(MediaQueryList.prototype, 'matches');\n return desc?.get ? (desc.get.call(mql) as boolean) : false;\n}\n\nfunction emulatedMatches(query: string): boolean {\n return evaluateMediaQueryList(query, env!, (q) => (realMatchMedia ? protoMatches(realMatchMedia.call(window, q)) : false));\n}\n\n/**\n * Patches window.matchMedia so lists created from now on report emulated values\n * while device mode is active (and real values otherwise). The returned object is\n * still a genuine MediaQueryList, so `instanceof` and listeners keep working.\n */\nexport function installMatchMediaPatch(): () => void {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function' || typeof MediaQueryList === 'undefined') return () => {};\n const original = window.matchMedia;\n realMatchMedia = original;\n const patched = function matchMedia(this: unknown, query: string): MediaQueryList {\n const mql = original.call(window, query);\n if (!dependsOnViewport(String(query))) return mql;\n try {\n Object.defineProperty(mql, 'matches', {\n configurable: true,\n enumerable: true,\n get() {\n return env ? emulatedMatches(mql.media) : protoMatches(mql);\n },\n });\n lastMatches.set(mql, mql.matches);\n if (supportsWeakRef) tracked.add(new WeakRef(mql));\n } catch {}\n return mql;\n };\n window.matchMedia = patched as typeof window.matchMedia;\n return () => {\n if (window.matchMedia === (patched as unknown)) window.matchMedia = original;\n realMatchMedia = null;\n };\n}\n\nfunction notifyMediaQueryLists(): void {\n for (const ref of Array.from(tracked)) {\n const mql = ref.deref();\n if (!mql) {\n tracked.delete(ref);\n continue;\n }\n const now = mql.matches;\n if (lastMatches.get(mql) !== now) {\n lastMatches.set(mql, now);\n let ev: Event;\n try {\n ev = new MediaQueryListEvent('change', { media: mql.media, matches: now });\n } catch {\n ev = new Event('change');\n Object.assign(ev, { media: mql.media, matches: now });\n }\n try {\n mql.dispatchEvent(ev);\n } catch {}\n }\n }\n}\n\n/* ================================================================= stylesheet rewriting */\n\nconst originalRuleMedia = new Map<CSSMediaRule, string>();\nconst originalSheetMedia = new Map<CSSStyleSheet, string>();\n\nfunction rewriteRules(list: CSSRuleList): void {\n for (const rule of Array.from(list)) {\n if (rule instanceof CSSMediaRule) {\n const original = originalRuleMedia.get(rule) ?? rule.media.mediaText;\n if (dependsOnViewport(original)) {\n if (!originalRuleMedia.has(rule)) originalRuleMedia.set(rule, original);\n const next = emulatedMatches(original) ? 'all' : 'not all';\n if (rule.media.mediaText !== next) rule.media.mediaText = next;\n }\n rewriteRules(rule.cssRules);\n } else if ('cssRules' in rule && (rule as CSSGroupingRule).cssRules) {\n rewriteRules((rule as CSSGroupingRule).cssRules);\n }\n }\n}\n\nfunction rewriteStylesheets(): void {\n for (const sheet of Array.from(document.styleSheets)) {\n if (sheet.ownerNode && isDevtoolsNode(sheet.ownerNode)) continue;\n try {\n const sm = originalSheetMedia.get(sheet) ?? sheet.media.mediaText;\n if (sm && dependsOnViewport(sm)) {\n if (!originalSheetMedia.has(sheet)) originalSheetMedia.set(sheet, sm);\n sheet.media.mediaText = emulatedMatches(sm) ? 'all' : 'not all';\n }\n rewriteRules(sheet.cssRules);\n } catch {\n // cross-origin stylesheet: cannot be rewritten\n }\n }\n}\n\nfunction restoreStylesheets(): void {\n for (const [rule, text] of originalRuleMedia) {\n try {\n rule.media.mediaText = text;\n } catch {}\n }\n for (const [sheet, text] of originalSheetMedia) {\n try {\n sheet.media.mediaText = text;\n } catch {}\n }\n originalRuleMedia.clear();\n originalSheetMedia.clear();\n}\n\n/* ================================================================= globals */\n\ntype Restore = () => void;\n\nfunction override(obj: object, prop: string, get: () => unknown): Restore {\n const own = Object.getOwnPropertyDescriptor(obj, prop);\n try {\n Object.defineProperty(obj, prop, { configurable: true, enumerable: true, get });\n } catch {\n return () => {};\n }\n return () => {\n try {\n if (own) Object.defineProperty(obj, prop, own);\n else delete (obj as Record<string, unknown>)[prop];\n } catch {}\n };\n}\n\n/** Saves specific inline style properties so only those are restored later. */\nfunction saveProps(el: HTMLElement, props: string[]): Restore {\n const saved = props.map((p) => [p, el.style.getPropertyValue(p), el.style.getPropertyPriority(p)] as const);\n return () => {\n for (const [p, v, prio] of saved) {\n if (v) el.style.setProperty(p, v, prio);\n else el.style.removeProperty(p);\n }\n if (el.getAttribute('style') === '') el.removeAttribute('style');\n };\n}\n\n/* ================================================================= touch */\n\nfunction installTouch(target: HTMLElement): Restore {\n const restores: Restore[] = [];\n const w = window as unknown as Record<string, unknown>;\n if (!('ontouchstart' in window)) {\n w.ontouchstart = null;\n restores.push(() => delete w.ontouchstart);\n }\n restores.push(override(navigator, 'maxTouchPoints', () => 5));\n\n const canTouch = typeof Touch === 'function' && typeof TouchEvent === 'function';\n let active: Element | null = null;\n const fire = (type: string, e: MouseEvent, el: Element) => {\n if (!canTouch) return;\n try {\n const touch = new Touch({ identifier: 1, target: el, clientX: e.clientX, clientY: e.clientY, pageX: e.pageX, pageY: e.pageY, screenX: e.screenX, screenY: e.screenY, radiusX: 11, radiusY: 11, force: 1 });\n const list = type === 'touchend' ? [] : [touch];\n el.dispatchEvent(new TouchEvent(type, { bubbles: true, cancelable: true, composed: true, touches: list, targetTouches: list, changedTouches: [touch] }));\n } catch {}\n };\n const down = (e: MouseEvent) => {\n if (e.button !== 0 || isDevtoolsNode(e.target as Node)) return;\n active = e.target as Element;\n fire('touchstart', e, active);\n };\n const move = (e: MouseEvent) => active && fire('touchmove', e, active);\n const up = (e: MouseEvent) => {\n if (!active) return;\n fire('touchend', e, active);\n active = null;\n };\n target.addEventListener('mousedown', down, true);\n window.addEventListener('mousemove', move, true);\n window.addEventListener('mouseup', up, true);\n restores.push(() => {\n target.removeEventListener('mousedown', down, true);\n window.removeEventListener('mousemove', move, true);\n window.removeEventListener('mouseup', up, true);\n });\n return () => restores.reverse().forEach((r) => r());\n}\n\n/* ================================================================= target */\n\nexport function resolveTarget(target?: string | HTMLElement): HTMLElement | null {\n if (target instanceof HTMLElement) return target;\n if (typeof target === 'string') return document.querySelector<HTMLElement>(target);\n for (const sel of ['#root', '#__next', '#app', '[data-reactroot]']) {\n const el = document.querySelector<HTMLElement>(sel);\n if (el) return el;\n }\n return Array.from(document.body.children).find((c): c is HTMLElement => c instanceof HTMLElement && !c.hasAttribute(HOST_ATTR) && c.localName !== 'script') ?? null;\n}\n\nexport interface EmulationState {\n width: number;\n height: number;\n dpr: number;\n touch: boolean;\n zoom: number;\n left: number;\n top: number;\n frame: 'none' | 'mobile' | 'tablet' | 'desktop';\n dark: boolean;\n emulateMedia: boolean;\n}\n\nconst TOUCH_CURSOR = `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Ccircle cx='12' cy='12' r='10' fill='rgba(0,0,0,.25)' stroke='rgba(0,0,0,.5)'/%3E%3C/svg%3E\") 12 12, auto`;\n\n/** Applies and later restores device emulation for one target element. */\nexport class DeviceEmulator {\n private savedTarget: string | null;\n private restorePage: Restore;\n private restoreGlobals: Restore[] = [];\n private restoreTouch: Restore | null = null;\n private headObserver: MutationObserver | null = null;\n private interval: ReturnType<typeof setInterval> | undefined;\n private state: EmulationState | null = null;\n\n constructor(private target: HTMLElement) {\n this.savedTarget = target.getAttribute('style');\n const props = ['overflow', 'background'];\n this.restorePage = [document.body, document.documentElement]\n .map((el) => saveProps(el, props))\n .reduce((a, b) => () => (a(), b()));\n }\n\n apply(s: EmulationState): void {\n const prev = this.state;\n this.state = s;\n const t = this.target.style;\n t.setProperty('position', 'fixed', 'important');\n t.setProperty('left', `${s.left}px`, 'important');\n t.setProperty('top', `${s.top}px`, 'important');\n t.setProperty('width', `${s.width}px`, 'important');\n t.setProperty('height', `${s.height}px`, 'important');\n t.setProperty('max-width', 'none', 'important');\n t.setProperty('max-height', 'none', 'important');\n t.setProperty('min-width', '0', 'important');\n t.setProperty('min-height', '0', 'important');\n t.setProperty('margin', '0', 'important');\n t.setProperty('overflow', 'auto', 'important');\n t.setProperty('transform', s.zoom === 1 ? 'none' : `scale(${s.zoom})`, 'important');\n t.setProperty('transform-origin', '0 0', 'important');\n t.setProperty('z-index', '2147482000', 'important');\n t.setProperty('box-sizing', 'border-box', 'important');\n t.setProperty('cursor', s.touch ? TOUCH_CURSOR : '');\n const radius = s.frame === 'mobile' ? 28 : s.frame === 'tablet' ? 18 : s.frame === 'desktop' ? 6 : 0;\n t.setProperty('border-radius', `${radius}px`, 'important');\n t.setProperty(\n 'box-shadow',\n s.frame === 'none'\n ? '0 0 0 1px rgba(0,0,0,.18), 0 4px 18px rgba(0,0,0,.18)'\n : `0 0 0 ${s.frame === 'desktop' ? 6 : 12}px #1f1f1f, 0 0 0 ${s.frame === 'desktop' ? 7 : 13}px #5f6368, 0 12px 40px rgba(0,0,0,.4)`,\n 'important',\n );\n // Give the \"viewport\" the page's own background.\n if (!prev) {\n const bodyBg = getComputedStyle(document.body).backgroundColor;\n const htmlBg = getComputedStyle(document.documentElement).backgroundColor;\n const bg = bodyBg && bodyBg !== 'rgba(0, 0, 0, 0)' ? bodyBg : htmlBg && htmlBg !== 'rgba(0, 0, 0, 0)' ? htmlBg : '#fff';\n t.setProperty('background', bg);\n }\n const backdrop = s.dark ? '#18191b' : '#e8eaed';\n document.body.style.setProperty('overflow', 'hidden', 'important');\n document.body.style.setProperty('background', backdrop, 'important');\n document.documentElement.style.setProperty('background', backdrop, 'important');\n document.documentElement.style.setProperty('overflow', 'hidden', 'important');\n\n // Globals + media emulation\n const sizeChanged = !prev || prev.width !== s.width || prev.height !== s.height || prev.dpr !== s.dpr || prev.touch !== s.touch;\n if (s.emulateMedia) {\n env = { width: s.width, height: s.height, dpr: s.dpr, touch: s.touch };\n if (!prev || !prev.emulateMedia) this.installGlobals();\n if (sizeChanged) {\n rewriteStylesheets();\n notifyMediaQueryLists();\n window.dispatchEvent(new Event('resize'));\n }\n }\n if (s.touch && !this.restoreTouch) this.restoreTouch = installTouch(this.target);\n if (!s.touch && this.restoreTouch) {\n this.restoreTouch();\n this.restoreTouch = null;\n }\n }\n\n private installGlobals(): void {\n const w = () => this.state!.width;\n const h = () => this.state!.height;\n const root = document.documentElement;\n this.restoreGlobals.push(\n override(window, 'innerWidth', w),\n override(window, 'innerHeight', h),\n override(window, 'outerWidth', w),\n override(window, 'outerHeight', h),\n override(window, 'devicePixelRatio', () => this.state!.dpr),\n override(screen, 'width', w),\n override(screen, 'height', h),\n override(screen, 'availWidth', w),\n override(screen, 'availHeight', h),\n override(root, 'clientWidth', w),\n override(root, 'clientHeight', h),\n );\n // Re-apply media rewriting when stylesheets are added (code splitting, CSS-in-JS).\n let pending = false;\n this.headObserver = new MutationObserver(() => {\n if (pending) return;\n pending = true;\n requestAnimationFrame(() => {\n pending = false;\n if (env) rewriteStylesheets();\n });\n });\n this.headObserver.observe(document.head, { childList: true, subtree: true, characterData: true });\n // CSS-in-JS libraries often use insertRule, which is not observable: re-scan periodically.\n this.interval = setInterval(() => env && rewriteStylesheets(), 2000);\n }\n\n restore(): void {\n const wasEmulating = !!env;\n env = null;\n this.headObserver?.disconnect();\n clearInterval(this.interval);\n restoreStylesheets();\n this.restoreGlobals.reverse().forEach((r) => r());\n this.restoreGlobals = [];\n this.restoreTouch?.();\n this.restoreTouch = null;\n if (this.savedTarget == null) this.target.removeAttribute('style');\n else this.target.setAttribute('style', this.savedTarget);\n this.restorePage();\n if (wasEmulating) {\n notifyMediaQueryLists();\n window.dispatchEvent(new Event('resize'));\n }\n this.state = null;\n }\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { useDevtools } from '../../store/devtoolsStore';\nimport { BUILTIN_PRESETS, RESPONSIVE_ID, allPresets, useDevice } from '../../store/deviceStore';\nimport { useConfig } from '../../hooks/useConfig';\nimport { useResolvedTheme } from '../../hooks/useThemeResolved';\nimport { startDrag } from '../../hooks/useDrag';\nimport { useContextMenu } from '../../components/ContextMenu';\nimport { ConfirmDialog } from '../../components/ConfirmDialog';\nimport { CloseIcon, KebabIcon, RotateIcon, TrashIcon } from '../../components/Icons';\nimport { clamp } from '../../utils/format';\nimport { DeviceEmulator, resolveTarget } from './emulation';\nimport type { DevicePreset } from '../../types';\n\nconst BAR_H = 34;\nconst GAP = 24;\n\n/** Computes the area of the page not covered by the docked devtools panel. */\nfunction useAvailableArea() {\n const s = useDevtools();\n const [win, setWin] = useState(() => ({ w: document.documentElement.clientWidth || window.innerWidth, h: window.innerHeight }));\n useEffect(() => {\n // Read the real window size; innerWidth may be emulated while device mode is on.\n const read = () => setWin({ w: visualViewportWidth(), h: visualViewportHeight() });\n window.addEventListener('resize', read);\n return () => window.removeEventListener('resize', read);\n }, []);\n let { w, h } = win;\n const docked = s.open && !s.maximized && s.dock !== 'floating';\n if (docked && s.dock === 'bottom') h -= s.minimized ? 31 : s.bottomHeight;\n if (docked && s.dock === 'right') w -= s.rightWidth;\n return { x: 0, y: BAR_H, w: Math.max(100, w), h: Math.max(100, h - BAR_H) };\n}\n\n// visualViewport is not overridden by the emulator, so it always reports the real window size.\nfunction visualViewportWidth() {\n return window.visualViewport?.width ?? window.innerWidth;\n}\nfunction visualViewportHeight() {\n return window.visualViewport?.height ?? window.innerHeight;\n}\n\nexport function DeviceLayer() {\n const cfg = useConfig();\n const d = useDevice();\n const theme = useResolvedTheme();\n const area = useAvailableArea();\n const [target, setTarget] = useState<HTMLElement | null>(null);\n const emu = useRef<DeviceEmulator | null>(null);\n const menu = useContextMenu();\n const [editor, setEditor] = useState(false);\n\n const presets = allPresets(d.customPresets);\n const preset = presets.find((p) => p.id === d.presetId);\n const frameKind = !d.showFrame ? 'none' : preset?.category === 'tablet' ? 'tablet' : preset?.category === 'desktop' ? 'desktop' : 'mobile';\n const pad = frameKind === 'none' ? 0 : 14;\n const fit = Math.min(1, (area.w - GAP * 2 - pad * 2) / d.width, (area.h - GAP * 2 - pad * 2) / d.height);\n const zoom = d.zoom === 'fit' ? Math.max(0.1, Math.floor(fit * 100) / 100) : d.zoom;\n const left = Math.round(area.x + Math.max(GAP + pad, (area.w - d.width * zoom) / 2));\n const top = Math.round(area.y + GAP / 2 + pad);\n\n // Mount: resolve target and create emulator. Unmount: restore everything.\n useEffect(() => {\n const t = resolveTarget(cfg.target);\n setTarget(t);\n if (!t) return;\n emu.current = new DeviceEmulator(t);\n return () => {\n emu.current?.restore();\n emu.current = null;\n };\n }, [cfg.target]);\n\n useLayoutEffect(() => {\n emu.current?.apply({\n width: d.width,\n height: d.height,\n dpr: d.dpr,\n touch: d.touch,\n zoom,\n left,\n top,\n frame: frameKind,\n dark: theme === 'dark',\n emulateMedia: cfg.options.emulateMediaQueries,\n });\n }, [d.width, d.height, d.dpr, d.touch, zoom, left, top, frameKind, theme, cfg.options.emulateMediaQueries, target]);\n\n const resize = (edge: 'right' | 'bottom' | 'corner') => (e: React.PointerEvent) => {\n const start = { w: d.width, h: d.height };\n startDrag(e, (dx, dy) => {\n const patch: Partial<{ width: number; height: number; presetId: string }> = { presetId: RESPONSIVE_ID };\n // Width grows symmetrically because the viewport is centered.\n if (edge !== 'bottom') patch.width = clamp(Math.round(start.w + (dx * 2) / zoom), 50, 4000);\n if (edge !== 'right') patch.height = clamp(Math.round(start.h + dy / zoom), 50, 4000);\n useDevice.getState().set(patch);\n });\n };\n\n const openMenu = (e: React.MouseEvent) => {\n const r = (e.currentTarget as HTMLElement).getBoundingClientRect();\n menu.open({ clientX: r.right - 200, clientY: r.bottom + 2 }, [\n { label: d.showFrame ? 'Hide device frame' : 'Show device frame', onSelect: () => d.set({ showFrame: !d.showFrame }) },\n { label: d.touch ? 'Disable touch simulation' : 'Enable touch simulation', onSelect: () => d.set({ touch: !d.touch }) },\n { separator: true },\n {\n label: 'Save current size as device…',\n onSelect: () => {\n const name = `Custom ${d.width}×${d.height}`;\n const id = `custom-${Date.now().toString(36)}`;\n d.saveCustomPreset({ id, name, width: d.width, height: d.height, dpr: d.dpr, touch: d.touch, category: 'custom' });\n d.applyPreset(id);\n },\n },\n { label: 'Edit custom devices…', onSelect: () => setEditor(true) },\n { separator: true },\n { label: 'Reset to Responsive', onSelect: () => d.applyPreset(RESPONSIVE_ID) },\n ]);\n };\n\n const sw = Math.round(d.width * zoom);\n const sh = Math.round(d.height * zoom);\n\n return (\n <>\n <div className=\"rid-device-bar\" role=\"toolbar\" aria-label=\"Device toolbar\" style={{ width: area.w }}>\n <span className=\"rid-v-faint\">Dimensions:</span>\n <select className=\"rid-select\" aria-label=\"Device\" value={d.presetId} onChange={(e) => d.applyPreset(e.target.value)}>\n <option value={RESPONSIVE_ID}>Responsive</option>\n {(['mobile', 'tablet', 'desktop', 'custom'] as const).map((cat) => {\n const list = presets.filter((p) => p.category === cat);\n if (!list.length) return null;\n return (\n <optgroup key={cat} label={cat[0].toUpperCase() + cat.slice(1)}>\n {list.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </optgroup>\n );\n })}\n </select>\n <NumberField label=\"Width\" value={d.width} onChange={(width) => d.set({ width, presetId: RESPONSIVE_ID })} />\n <span className=\"rid-v-faint\">×</span>\n <NumberField label=\"Height\" value={d.height} onChange={(height) => d.set({ height, presetId: RESPONSIVE_ID })} />\n <span className=\"rid-sep\" />\n <label className=\"rid-v-faint\" htmlFor=\"rid-dpr\">\n DPR\n </label>\n <select id=\"rid-dpr\" className=\"rid-select\" value={d.dpr} onChange={(e) => d.set({ dpr: parseFloat(e.target.value) })}>\n {Array.from(new Set([1, 1.5, 2, 2.625, 3, 3.5, 4, d.dpr])).sort((a, b) => a - b).map((v) => (\n <option key={v} value={v}>\n {v}\n </option>\n ))}\n </select>\n <select className=\"rid-select\" aria-label=\"Zoom\" value={String(d.zoom)} onChange={(e) => d.set({ zoom: e.target.value === 'fit' ? 'fit' : parseFloat(e.target.value) })}>\n <option value=\"fit\">Fit ({Math.round(zoom * 100)}%)</option>\n {[0.5, 0.75, 1, 1.25, 1.5, 2].map((z) => (\n <option key={z} value={z}>\n {z * 100}%\n </option>\n ))}\n </select>\n <button className=\"rid-icon-btn\" title=\"Rotate\" aria-label=\"Rotate\" onClick={d.rotate}>\n <RotateIcon />\n </button>\n <span className=\"rid-sep\" />\n <label className=\"rid-checkbox\" title=\"Emulates touch events from mouse input and reports (hover: none), (pointer: coarse)\">\n <input type=\"checkbox\" checked={d.touch} onChange={(e) => d.set({ touch: e.target.checked })} /> Touch\n </label>\n <label className=\"rid-checkbox\" style={{ marginLeft: 6 }}>\n <input type=\"checkbox\" checked={d.showFrame} onChange={(e) => d.set({ showFrame: e.target.checked })} /> Frame\n </label>\n <button className=\"rid-icon-btn\" title=\"More options\" aria-label=\"More device options\" onClick={openMenu}>\n <KebabIcon />\n </button>\n <button className=\"rid-icon-btn\" title=\"Close device toolbar\" aria-label=\"Close device toolbar\" onClick={() => useDevtools.setState({ deviceMode: false })}>\n <CloseIcon size={14} />\n </button>\n {!target && <span style={{ color: 'var(--rid-error-text)' }}>App root not found — pass the `target` prop.</span>}\n </div>\n {target && (\n <>\n <div className=\"rid-device-handle rid-device-handle-r\" style={{ left: left + sw + pad + 4, top, height: sh }} onPointerDown={resize('right')} title=\"Drag to resize\" />\n <div className=\"rid-device-handle rid-device-handle-b\" style={{ left, top: top + sh + pad + 4, width: sw }} onPointerDown={resize('bottom')} title=\"Drag to resize\" />\n <div className=\"rid-device-handle rid-device-handle-c\" style={{ left: left + sw + pad + 4, top: top + sh + pad + 4 }} onPointerDown={resize('corner')} />\n <div className=\"rid-device-size\" style={{ left, top: top + sh + pad + 14, width: sw }}>\n {d.width} × {d.height} {zoom !== 1 && `· ${Math.round(zoom * 100)}%`} {d.dpr !== 1 && `· DPR ${d.dpr}`}\n </div>\n </>\n )}\n {editor && <PresetEditor onClose={() => setEditor(false)} />}\n {menu.element}\n </>\n );\n}\n\nfunction NumberField({ label, value, onChange }: { label: string; value: number; onChange: (v: number) => void }) {\n const [text, setText] = useState(String(value));\n useEffect(() => setText(String(value)), [value]);\n const commit = () => {\n const n = parseInt(text, 10);\n if (!isNaN(n) && n >= 50 && n <= 10000) onChange(n);\n else setText(String(value));\n };\n return (\n <input\n className=\"rid-input rid-device-num\"\n aria-label={label}\n inputMode=\"numeric\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onBlur={commit}\n onKeyDown={(e) => {\n e.stopPropagation();\n if (e.key === 'Enter') commit();\n if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n e.preventDefault();\n const step = (e.shiftKey ? 10 : 1) * (e.key === 'ArrowUp' ? 1 : -1);\n onChange(clamp(value + step, 50, 10000));\n }\n }}\n />\n );\n}\n\nfunction PresetEditor({ onClose }: { onClose: () => void }) {\n const d = useDevice();\n const [draft, setDraft] = useState<DevicePreset>({ id: '', name: '', width: 390, height: 844, dpr: 3, category: 'custom', touch: true });\n return (\n <div className=\"rid-root-dialog\">\n <ConfirmDialog\n title=\"Custom devices\"\n confirmLabel=\"Add device\"\n onCancel={onClose}\n onConfirm={() => {\n if (!draft.name.trim()) return;\n d.saveCustomPreset({ ...draft, id: draft.id || `custom-${Date.now().toString(36)}`, name: draft.name.trim() });\n setDraft({ ...draft, id: '', name: '' });\n }}\n >\n <div className=\"rid-preset-list\">\n {d.customPresets.length === 0 && <div className=\"rid-v-faint\">No custom devices yet.</div>}\n {d.customPresets.map((p) => (\n <div key={p.id} className=\"rid-preset-row\">\n <span style={{ flex: 1 }}>{p.name}</span>\n <span className=\"rid-v-faint\">\n {p.width}×{p.height} @{p.dpr}x{p.touch ? ' · touch' : ''}\n </span>\n <button type=\"button\" className=\"rid-icon-btn\" aria-label={`Edit ${p.name}`} onClick={() => setDraft({ ...p })}>\n ✎\n </button>\n <button type=\"button\" className=\"rid-icon-btn\" aria-label={`Delete ${p.name}`} onClick={() => d.deleteCustomPreset(p.id)}>\n <TrashIcon size={13} />\n </button>\n </div>\n ))}\n </div>\n <div className=\"rid-form-grid\">\n <label htmlFor=\"rid-pd-name\">Device name</label>\n <input id=\"rid-pd-name\" className=\"rid-input\" value={draft.name} onChange={(e) => setDraft({ ...draft, name: e.target.value })} placeholder=\"My phone\" />\n <label htmlFor=\"rid-pd-w\">Width</label>\n <input id=\"rid-pd-w\" className=\"rid-input\" type=\"number\" value={draft.width} onChange={(e) => setDraft({ ...draft, width: parseInt(e.target.value, 10) || 0 })} />\n <label htmlFor=\"rid-pd-h\">Height</label>\n <input id=\"rid-pd-h\" className=\"rid-input\" type=\"number\" value={draft.height} onChange={(e) => setDraft({ ...draft, height: parseInt(e.target.value, 10) || 0 })} />\n <label htmlFor=\"rid-pd-dpr\">Device pixel ratio</label>\n <input id=\"rid-pd-dpr\" className=\"rid-input\" type=\"number\" step=\"0.125\" value={draft.dpr} onChange={(e) => setDraft({ ...draft, dpr: parseFloat(e.target.value) || 1 })} />\n <span />\n <label className=\"rid-checkbox\">\n <input type=\"checkbox\" checked={!!draft.touch} onChange={(e) => setDraft({ ...draft, touch: e.target.checked })} /> Touch\n </label>\n </div>\n <div className=\"rid-v-faint\" style={{ marginBottom: 10 }}>\n Built-in presets: {BUILTIN_PRESETS.length}. Custom devices are stored in this browser's localStorage.\n </div>\n </ConfirmDialog>\n </div>\n );\n}\n","import { useEffect } from 'react';\nimport { useDevtools } from './store/devtoolsStore';\nimport { useConsole } from './store/consoleStore';\nimport { useConfig } from './hooks/useConfig';\nimport { useResolvedTheme } from './hooks/useThemeResolved';\nimport { DevToolsContainer } from './components/DevToolsContainer';\nimport { HighlightOverlay } from './inspectors/DOMInspector/Overlay';\nimport { usePicker } from './inspectors/DOMInspector/usePicker';\nimport { DeviceLayer } from './panels/DeviceToolbar';\nimport { LauncherIcon } from './components/Icons';\nimport { matchesShortcut, parseShortcut, formatShortcut } from './utils/shortcut';\nimport { isDevtoolsEvent } from './core/ownership';\nimport { ErrorBoundary } from './components/ErrorBoundary';\n\nfunction Launcher() {\n const cfg = useConfig();\n const errors = useConsole((s) => s.entries.reduce((n, e) => n + (e.level === 'error' ? e.repeat : 0), 0));\n const shortcut = useDevtools((s) => s.shortcutOverride) ?? cfg.shortcut;\n return (\n <button\n className=\"rid-launcher\"\n title={`Open DevTools${shortcut ? ` (${formatShortcut(shortcut)})` : ''}`}\n aria-label=\"Open developer tools\"\n onClick={() => useDevtools.getState().setOpen(true)}\n >\n <LauncherIcon />\n {errors > 0 && <span className=\"rid-launcher-badge\">{errors > 99 ? '99+' : errors}</span>}\n </button>\n );\n}\n\nfunction useShortcuts() {\n const cfg = useConfig();\n const override = useDevtools((s) => s.shortcutOverride);\n const shortcut = override ?? cfg.shortcut;\n useEffect(() => {\n const toggle = shortcut ? parseShortcut(shortcut) : null;\n const picker = parseShortcut('Ctrl+Shift+C');\n const device = parseShortcut('Ctrl+Shift+M');\n const onKey = (e: KeyboardEvent) => {\n const s = useDevtools.getState();\n if (toggle && matchesShortcut(e, toggle)) {\n e.preventDefault();\n e.stopPropagation();\n s.toggle();\n return;\n }\n if (!s.open) return;\n if (cfg.options.enableElementPicker && picker && matchesShortcut(e, picker)) {\n e.preventDefault();\n useDevtools.setState({ pickerActive: !s.pickerActive });\n } else if (cfg.options.enableDeviceToolbar && device && matchesShortcut(e, device) && isDevtoolsEvent(e)) {\n e.preventDefault();\n useDevtools.setState({ deviceMode: !s.deviceMode });\n } else if (e.key === 'F1' && isDevtoolsEvent(e)) {\n e.preventDefault();\n s.updateSettings({ activePanel: 'settings' });\n }\n };\n window.addEventListener('keydown', onKey, true);\n return () => window.removeEventListener('keydown', onKey, true);\n }, [shortcut, cfg.options.enableElementPicker, cfg.options.enableDeviceToolbar]);\n}\n\nexport function DevtoolsApp() {\n const cfg = useConfig();\n const open = useDevtools((s) => s.open);\n const deviceMode = useDevtools((s) => s.deviceMode);\n const theme = useResolvedTheme();\n useShortcuts();\n usePicker();\n\n return (\n <div className=\"rid-root\" data-theme={theme}>\n <ErrorBoundary label=\"Device toolbar\">{deviceMode && cfg.options.enableDeviceToolbar && <DeviceLayer />}</ErrorBoundary>\n <HighlightOverlay />\n {open ? <DevToolsContainer /> : cfg.showLauncher && <Launcher />}\n </div>\n );\n}\n","/** URL of the bundle containing devtools code, used to strip our own frames from stacks. */\nlet ownFile: string | null | undefined;\n\nfunction detectOwnFile(): string | null {\n const line = (new Error().stack || '').split('\\n').find((l) => /(https?|file|webpack|blob):\\/\\//.test(l));\n const m = line?.match(/((?:https?|file|webpack|blob):\\/\\/[^\\s)]+?)(?::\\d+){1,2}\\)?\\s*$/);\n return m ? m[1].split('?')[0] : null;\n}\n\nconst OWN_PATH = /react-inspector-devtools(?:[/\\\\](?:src|dist)[/\\\\]|\\.js|\\.mjs|\\.cjs)/;\n\nfunction isOwnFrame(line: string): boolean {\n if (ownFile === undefined) ownFile = detectOwnFile();\n return OWN_PATH.test(line) || (!!ownFile && line.includes(ownFile));\n}\n\n/** Current call stack with devtools-internal frames removed. */\nexport function callerStack(max = 30): string | undefined {\n const s = new Error().stack;\n if (!s) return undefined;\n const lines = s.split('\\n');\n const frames = lines.slice(lines[0].startsWith('Error') ? 1 : 0);\n return frames\n .filter((l) => !isOwnFrame(l))\n .slice(0, max)\n .join('\\n');\n}\n","import type { EventBus, DevToolsEvents } from '../../core/eventBus';\nimport type { ConsoleLevel } from '../../types';\nimport { sourceFromStack } from '../../utils/format';\nimport { callerStack } from '../../utils/stack';\n\ntype Bus = EventBus<DevToolsEvents>;\n\nconst PATCHED = [\n 'log',\n 'info',\n 'warn',\n 'error',\n 'debug',\n 'table',\n 'group',\n 'groupCollapsed',\n 'groupEnd',\n 'time',\n 'timeLog',\n 'timeEnd',\n 'count',\n 'countReset',\n 'trace',\n 'assert',\n 'clear',\n 'dir',\n 'dirxml',\n] as const;\n\ntype Method = (typeof PATCHED)[number];\n\n/** Errors already reported via console.error, used to de-duplicate uncaught error reports. */\nexport const reportedErrors = new WeakSet<object>();\n\n/** Original console methods, captured at install time. Used by devtools for its own diagnostics. */\nexport const originalConsole: Partial<Record<Method, (...args: any[]) => void>> = {};\n\nlet reentrant = false;\n\nexport function installConsole(bus: Bus): () => void {\n const c = console as unknown as Record<string, (...args: any[]) => void>;\n const timers = new Map<string, number>();\n const counters = new Map<string, number>();\n const wrappers: Partial<Record<Method, (...args: any[]) => void>> = {};\n\n const emit = (\n level: ConsoleLevel,\n kind: DevToolsEvents['console:entry']['kind'],\n method: string,\n args: unknown[],\n extra: Partial<DevToolsEvents['console:entry']> = {},\n ) => {\n const stack = extra.stack ?? callerStack();\n bus.emit('console:entry', {\n level,\n kind,\n method,\n args,\n timestamp: Date.now(),\n source: sourceFromStack(stack, 0),\n ...extra,\n stack: kind === 'trace' || level === 'error' || level === 'warn' ? stack : undefined,\n });\n };\n\n const handle = (method: Method, args: unknown[]) => {\n switch (method) {\n case 'log':\n case 'info':\n case 'warn':\n case 'error':\n case 'debug': {\n if (method === 'error') for (const a of args) if (a && typeof a === 'object') reportedErrors.add(a);\n emit(method, 'log', method, args);\n break;\n }\n case 'dir':\n case 'dirxml':\n emit('log', 'log', method, args.slice(0, 1));\n break;\n case 'table': {\n const data = args[0];\n if (data && typeof data === 'object') {\n emit('log', 'table', method, [data], {\n columns: Array.isArray(args[1]) ? (args[1] as unknown[]).map(String) : undefined,\n });\n } else emit('log', 'log', method, args);\n break;\n }\n case 'group':\n case 'groupCollapsed':\n emit('log', 'group-start', method, args.length ? args : [method === 'group' ? 'console.group' : 'console.groupCollapsed'], {\n collapsed: method === 'groupCollapsed',\n });\n break;\n case 'groupEnd':\n bus.emit('console:entry', { level: 'log', kind: 'group-end', method, args: [], timestamp: Date.now() });\n break;\n case 'time': {\n const label = args[0] === undefined ? 'default' : String(args[0]);\n if (timers.has(label)) emit('warn', 'log', method, [`Timer '${label}' already exists`]);\n else timers.set(label, performance.now());\n break;\n }\n case 'timeLog':\n case 'timeEnd': {\n const label = args[0] === undefined ? 'default' : String(args[0]);\n const start = timers.get(label);\n if (start === undefined) {\n emit('warn', 'log', method, [`Timer '${label}' does not exist`]);\n } else {\n const ms = performance.now() - start;\n if (method === 'timeEnd') timers.delete(label);\n emit('log', 'log', method, [`${label}: ${ms.toFixed(3)} ms${method === 'timeEnd' ? '' : ''}`, ...args.slice(1)]);\n }\n break;\n }\n case 'count': {\n const label = args[0] === undefined ? 'default' : String(args[0]);\n const n = (counters.get(label) ?? 0) + 1;\n counters.set(label, n);\n emit('log', 'log', method, [`${label}: ${n}`]);\n break;\n }\n case 'countReset': {\n const label = args[0] === undefined ? 'default' : String(args[0]);\n counters.set(label, 0);\n break;\n }\n case 'trace':\n emit('log', 'trace', method, args.length ? args : ['console.trace']);\n break;\n case 'assert':\n if (!args[0]) emit('error', 'log', method, ['Assertion failed:', ...(args.length > 1 ? args.slice(1) : ['console.assert'])]);\n break;\n case 'clear':\n bus.emit('console:clear', { fromApp: true });\n break;\n }\n };\n\n for (const m of PATCHED) {\n const orig = c[m];\n if (typeof orig !== 'function') continue;\n originalConsole[m] = orig;\n const wrapper = function (this: unknown, ...args: unknown[]) {\n if (!reentrant) {\n reentrant = true;\n try {\n handle(m, args);\n } catch {\n // Never let devtools break logging.\n } finally {\n reentrant = false;\n }\n }\n return orig.apply(this === undefined ? console : this, args);\n };\n try {\n Object.defineProperty(wrapper, 'name', { value: orig.name || m });\n } catch {}\n wrappers[m] = wrapper;\n c[m] = wrapper;\n }\n\n return () => {\n for (const m of PATCHED) {\n const w = wrappers[m];\n // Only restore if nobody else has wrapped our wrapper in the meantime.\n if (w && c[m] === w) c[m] = originalConsole[m]!;\n }\n };\n}\n","import type { EventBus, DevToolsEvents } from '../../core/eventBus';\nimport { isDevtoolsNode } from '../../core/ownership';\nimport { reportedErrors } from '../console';\n\ntype Bus = EventBus<DevToolsEvents>;\n\n/** Captures uncaught exceptions, unhandled promise rejections and failed resource loads. */\nexport function installErrors(bus: Bus): () => void {\n const seen = new WeakSet<object>();\n\n const onError = (e: Event) => {\n // Resource loading errors (img/script/link) do not bubble; they arrive here in the capture phase.\n if (!(e instanceof ErrorEvent)) {\n const t = e.target as (Element & { src?: string; href?: string }) | null;\n if (t && t !== (window as unknown) && t.nodeType === 1 && !isDevtoolsNode(t)) {\n const url = t.src || t.href || t.getAttribute?.('src') || '';\n bus.emit('console:entry', {\n level: 'error',\n kind: 'log',\n args: [`Failed to load resource: <${t.localName}> ${url}`],\n timestamp: Date.now(),\n });\n }\n return;\n }\n const err = e.error;\n if (err && typeof err === 'object') {\n if (seen.has(err)) return; // e.g. React dev-mode replays the same error\n seen.add(err);\n }\n const fromConsole = err && typeof err === 'object' && reportedErrors.has(err);\n bus.emit('console:entry', {\n level: 'error',\n kind: 'exception',\n args: [err ?? e.message],\n timestamp: Date.now(),\n stack: err?.stack,\n source: e.filename ? `${e.filename.split('/').pop()}:${e.lineno}` : undefined,\n method: fromConsole ? 'uncaught-after-log' : undefined,\n });\n };\n\n const onRejection = (e: PromiseRejectionEvent) => {\n const reason = e.reason;\n if (reason && typeof reason === 'object') {\n if (seen.has(reason)) return;\n seen.add(reason);\n }\n bus.emit('console:entry', {\n level: 'error',\n kind: 'rejection',\n args: [reason],\n timestamp: Date.now(),\n stack: reason?.stack,\n });\n };\n\n window.addEventListener('error', onError, true);\n window.addEventListener('unhandledrejection', onRejection);\n return () => {\n window.removeEventListener('error', onError, true);\n window.removeEventListener('unhandledrejection', onRejection);\n };\n}\n","import type { RequestPayload, ResourceType } from '../../types';\nimport { byteLength, nextId } from '../../utils/format';\nimport { callerStack } from '../../utils/stack';\n\nexport interface NetworkConfig {\n ignoreUrls: (string | RegExp)[];\n isCacheDisabled: () => boolean;\n}\n\n/** Max response body we keep in memory per request. */\nexport const MAX_BODY = 1024 * 1024; // 1 MB of text\nexport const MAX_BINARY_PREVIEW = 5 * 1024 * 1024;\n\nexport const newRequestId = (): string => nextId('r');\n\nexport function shouldIgnore(url: string, cfg: NetworkConfig): boolean {\n for (const p of cfg.ignoreUrls) {\n if (typeof p === 'string' ? url.includes(p) : p.test(url)) return true;\n }\n return false;\n}\n\nexport function absoluteUrl(url: string): string {\n try {\n return new URL(url, location.href).href;\n } catch {\n return url;\n }\n}\n\nexport function headersToList(h: HeadersInit | Headers | undefined | null): [string, string][] {\n if (!h) return [];\n try {\n if (typeof Headers !== 'undefined' && h instanceof Headers) return Array.from(h.entries());\n if (Array.isArray(h)) return h.map(([k, v]) => [String(k), String(v)]);\n return Object.entries(h as Record<string, string>).map(([k, v]) => [k, String(v)]);\n } catch {\n return [];\n }\n}\n\nexport function parseRawHeaders(raw: string): [string, string][] {\n return raw\n .trim()\n .split(/[\\r\\n]+/)\n .filter(Boolean)\n .map((line) => {\n const i = line.indexOf(':');\n return [line.slice(0, i).trim().toLowerCase(), line.slice(i + 1).trim()] as [string, string];\n });\n}\n\nexport function getHeader(list: [string, string][], name: string): string | undefined {\n const n = name.toLowerCase();\n return list.find(([k]) => k.toLowerCase() === n)?.[1];\n}\n\n/** Describes a request body without consuming or mutating it. */\nexport function describeBody(body: unknown): RequestPayload | undefined {\n if (body == null) return undefined;\n try {\n if (typeof body === 'string') {\n const t = body.trim();\n const isJson = (t.startsWith('{') || t.startsWith('[')) && safeJson(t);\n if (!isJson && /^[^=&\\s]+=[^&]*(&[^=&\\s]+=[^&]*)*$/.test(t)) {\n return { kind: 'urlencoded', text: body, fields: Array.from(new URLSearchParams(body).entries()), size: byteLength(body) };\n }\n return { kind: isJson ? 'json' : 'text', text: body, size: byteLength(body) };\n }\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n const text = body.toString();\n return { kind: 'urlencoded', text, fields: Array.from(body.entries()), size: byteLength(text) };\n }\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n const fields: [string, string][] = [];\n body.forEach((v, k) => {\n fields.push([k, typeof v === 'string' ? v : `(binary) ${(v as File).name ?? 'blob'} · ${(v as Blob).size} B`]);\n });\n return { kind: 'form', fields };\n }\n if (typeof Blob !== 'undefined' && body instanceof Blob) return { kind: 'binary', size: body.size, text: `Blob(${body.size}) ${body.type}` };\n if (body instanceof ArrayBuffer) return { kind: 'binary', size: body.byteLength, text: `ArrayBuffer(${body.byteLength})` };\n if (ArrayBuffer.isView(body)) return { kind: 'binary', size: body.byteLength, text: `${body.constructor.name}(${body.byteLength})` };\n if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream) return { kind: 'binary', text: 'ReadableStream (not inspectable)' };\n if (typeof Document !== 'undefined' && body instanceof Document) {\n const text = new XMLSerializer().serializeToString(body);\n return { kind: 'text', text, size: byteLength(text) };\n }\n } catch {\n // fall through\n }\n return { kind: 'unknown', text: String(body) };\n}\n\nfunction safeJson(t: string): boolean {\n try {\n JSON.parse(t);\n return true;\n } catch {\n return false;\n }\n}\n\nconst EXT_TYPES: [RegExp, ResourceType][] = [\n [/\\.(m?js|jsx|ts|tsx|cjs)(\\?|#|$)/i, 'js'],\n [/\\.css(\\?|#|$)/i, 'css'],\n [/\\.(png|jpe?g|gif|webp|avif|svg|ico|bmp)(\\?|#|$)/i, 'img'],\n [/\\.(woff2?|ttf|otf|eot)(\\?|#|$)/i, 'font'],\n [/\\.(mp4|webm|ogg|mp3|wav|m4a|m3u8|mov)(\\?|#|$)/i, 'media'],\n [/(\\.webmanifest|manifest\\.json)(\\?|#|$)/i, 'manifest'],\n [/\\.html?(\\?|#|$)/i, 'doc'],\n];\n\nexport function typeFromUrl(url: string): ResourceType | null {\n for (const [re, t] of EXT_TYPES) if (re.test(url)) return t;\n return null;\n}\n\nexport function typeFromInitiator(initiatorType: string, url: string): ResourceType {\n switch (initiatorType) {\n case 'script':\n return 'js';\n case 'css':\n return typeFromUrl(url) ?? 'img'; // url() inside CSS: usually fonts or images\n case 'img':\n case 'image':\n return 'img';\n case 'video':\n case 'audio':\n return 'media';\n case 'navigation':\n case 'iframe':\n case 'frame':\n return 'doc';\n case 'fetch':\n return 'fetch';\n case 'xmlhttprequest':\n return 'xhr';\n case 'link':\n return typeFromUrl(url) ?? 'other';\n default:\n return typeFromUrl(url) ?? 'other';\n }\n}\n\nexport function isTextual(mime: string | undefined): boolean {\n if (!mime) return true;\n return /^(text\\/|application\\/(json|javascript|xml|x-www-form-urlencoded|ld\\+json|graphql|problem\\+json|manifest\\+json|.*\\+json|.*\\+xml))|image\\/svg/i.test(mime);\n}\n\nexport function shortStack(): string | undefined {\n return callerStack(10);\n}\n\n/** Reads at most `limit` bytes from a (cloned) response body stream. Never touches the original. */\nexport async function readLimitedText(res: Response, limit: number): Promise<{ text: string; truncated: boolean; size: number }> {\n if (!res.body || typeof res.body.getReader !== 'function') {\n const text = await res.text();\n return { text: text.slice(0, limit), truncated: text.length > limit, size: byteLength(text) };\n }\n const reader = res.body.getReader();\n const decoder = new TextDecoder();\n let text = '';\n let size = 0;\n let truncated = false;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (text.length < limit) text += decoder.decode(value, { stream: true });\n else truncated = true;\n }\n text += decoder.decode();\n if (text.length > limit) {\n text = text.slice(0, limit);\n truncated = true;\n }\n return { text, truncated, size };\n}\n","import type { DevToolsEvents, EventBus } from '../../core/eventBus';\nimport type { NetworkRequest } from '../../types';\nimport {\n MAX_BINARY_PREVIEW,\n MAX_BODY,\n absoluteUrl,\n describeBody,\n getHeader,\n headersToList,\n isTextual,\n newRequestId,\n readLimitedText,\n shortStack,\n shouldIgnore,\n type NetworkConfig,\n} from './shared';\n\ntype Bus = EventBus<DevToolsEvents>;\n\n/**\n * Wraps window.fetch. The original promise is returned untouched; response bodies\n * are read from `response.clone()` so the application's stream is never consumed.\n */\nexport function installFetch(bus: Bus, cfg: NetworkConfig): () => void {\n if (typeof window.fetch !== 'function') return () => {};\n const original = window.fetch;\n\n const patched = function fetch(this: unknown, input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n let url: string;\n let method: string;\n let reqHeaders: [string, string][];\n const isRequest = typeof Request !== 'undefined' && input instanceof Request;\n try {\n url = absoluteUrl(isRequest ? (input as Request).url : String(input));\n method = (init?.method || (isRequest ? (input as Request).method : 'GET')).toUpperCase();\n reqHeaders = headersToList(init?.headers ?? (isRequest ? (input as Request).headers : undefined));\n } catch {\n return original.call(window, input as RequestInfo, init);\n }\n\n if (shouldIgnore(url, cfg)) return original.call(window, input as RequestInfo, init);\n\n // \"Disable cache\" simulation: ask the browser to bypass the HTTP cache.\n let effectiveInit = init;\n if (cfg.isCacheDisabled() && !(init && init.cache)) effectiveInit = { ...(init || {}), cache: 'no-store' };\n\n const id = newRequestId();\n const startTime = performance.now();\n const entry: NetworkRequest = {\n id,\n url,\n method,\n type: 'fetch',\n initiator: 'fetch',\n initiatorStack: shortStack(),\n state: 'pending',\n requestHeaders: reqHeaders,\n responseHeaders: [],\n payload: describeBody(init?.body),\n bodyState: 'pending',\n startTime,\n wallTime: Date.now(),\n };\n if (!init?.body && isRequest && method !== 'GET' && method !== 'HEAD') {\n const req = input as Request;\n if (!req.bodyUsed) {\n try {\n // Clone so the application's Request body stays unread.\n req\n .clone()\n .text()\n .then((t) => bus.emit('network:update', { id, patch: { payload: describeBody(t) } }))\n .catch(() => {});\n } catch {}\n }\n }\n if (entry.payload?.size != null) entry.requestSize = entry.payload.size;\n bus.emit('network:start', entry);\n\n let promise: Promise<Response>;\n try {\n promise = original.call(window, input as RequestInfo, effectiveInit);\n } catch (err) {\n bus.emit('network:update', {\n id,\n patch: { state: 'failed', error: String(err), endTime: performance.now(), bodyState: 'none' },\n });\n throw err;\n }\n\n promise.then(\n (res) => {\n const headers = headersToList(res.headers);\n const mime = getHeader(headers, 'content-type')?.split(';')[0].trim();\n const len = getHeader(headers, 'content-length');\n const opaque = res.type === 'opaque' || res.type === 'opaqueredirect';\n bus.emit('network:update', {\n id,\n patch: {\n status: res.status,\n statusText: res.statusText || (opaque ? '(opaque)' : ''),\n responseHeaders: headers,\n mimeType: mime,\n responseType: res.type,\n redirected: res.redirected,\n responseSize: len ? Number(len) : undefined,\n },\n });\n\n const finish = (patch: Partial<NetworkRequest>) =>\n bus.emit('network:update', { id, patch: { state: 'complete', endTime: performance.now(), ...patch } });\n\n if (opaque) return finish({ bodyState: 'unavailable', error: 'Opaque response (no-cors): body and headers are hidden by the browser.' });\n if (mime === 'text/event-stream') return finish({ bodyState: 'streaming' });\n if (!res.body && res.status !== 200) return finish({ bodyState: 'none' });\n\n let clone: Response;\n try {\n clone = res.clone();\n } catch {\n return finish({ bodyState: 'unavailable' });\n }\n\n if (isTextual(mime)) {\n readLimitedText(clone, MAX_BODY).then(\n ({ text, truncated, size }) =>\n finish({ responseBody: text, bodyState: truncated ? 'truncated' : 'available', responseSize: size }),\n (err) => finish({ bodyState: 'unavailable', error: isAbort(err) ? 'Response body aborted' : undefined }),\n );\n } else {\n clone.blob().then(\n (blob) => {\n const objectUrl = blob.size <= MAX_BINARY_PREVIEW && /^(image|video|audio|font)\\//.test(blob.type) ? URL.createObjectURL(blob) : undefined;\n finish({ bodyState: 'binary', responseSize: blob.size, responseObjectUrl: objectUrl });\n },\n () => finish({ bodyState: 'unavailable' }),\n );\n }\n },\n (err) => {\n bus.emit('network:update', {\n id,\n patch: {\n state: isAbort(err) ? 'aborted' : 'failed',\n error: isAbort(err) ? 'Request aborted' : String(err?.message ?? err),\n endTime: performance.now(),\n bodyState: 'none',\n statusText: isAbort(err) ? '(canceled)' : '(failed)',\n },\n });\n },\n );\n\n return promise;\n };\n\n try {\n Object.defineProperty(patched, 'name', { value: 'fetch' });\n } catch {}\n window.fetch = patched as typeof window.fetch;\n\n return () => {\n if (window.fetch === (patched as unknown)) window.fetch = original;\n };\n}\n\nfunction isAbort(err: any): boolean {\n return err && (err.name === 'AbortError' || err.code === 20);\n}\n","import type { DevToolsEvents, EventBus } from '../../core/eventBus';\nimport type { NetworkRequest } from '../../types';\nimport { byteLength } from '../../utils/format';\nimport {\n MAX_BODY,\n absoluteUrl,\n describeBody,\n getHeader,\n newRequestId,\n parseRawHeaders,\n shortStack,\n shouldIgnore,\n type NetworkConfig,\n} from './shared';\n\ntype Bus = EventBus<DevToolsEvents>;\n\ninterface XhrMeta {\n id?: string;\n method: string;\n url: string;\n headers: [string, string][];\n ignored: boolean;\n}\n\n/**\n * Patches XMLHttpRequest.prototype.open/send/setRequestHeader. Only listeners are\n * added; responses are read through the normal getters after `loadend`, which does\n * not alter the request.\n */\nexport function installXHR(bus: Bus, cfg: NetworkConfig): () => void {\n if (typeof XMLHttpRequest === 'undefined') return () => {};\n const proto = XMLHttpRequest.prototype;\n const origOpen = proto.open;\n const origSend = proto.send;\n const origSetHeader = proto.setRequestHeader;\n const meta = new WeakMap<XMLHttpRequest, XhrMeta>();\n\n const open = function (this: XMLHttpRequest, method: string, url: string | URL, ...rest: any[]) {\n try {\n const abs = absoluteUrl(String(url));\n let finalUrl: string | URL = url;\n const m = String(method).toUpperCase();\n if (cfg.isCacheDisabled() && m === 'GET' && !shouldIgnore(abs, cfg)) {\n // \"Disable cache\" simulation for XHR: append a cache-busting parameter.\n const u = new URL(abs);\n u.searchParams.set('_rid', Date.now().toString(36));\n finalUrl = u.href;\n }\n meta.set(this, { method: m, url: abs, headers: [], ignored: shouldIgnore(abs, cfg) });\n return (origOpen as any).call(this, method, finalUrl, ...rest);\n } catch {\n if (meta.has(this)) meta.delete(this);\n return (origOpen as any).call(this, method, url, ...rest);\n }\n };\n\n const setRequestHeader = function (this: XMLHttpRequest, name: string, value: string) {\n meta.get(this)?.headers.push([name, value]);\n return origSetHeader.call(this, name, value);\n };\n\n const send = function (this: XMLHttpRequest, body?: Document | XMLHttpRequestBodyInit | null) {\n const m = meta.get(this);\n if (!m || m.ignored) return origSend.call(this, body);\n const id = newRequestId();\n m.id = id;\n // eslint-disable-next-line @typescript-eslint/no-this-alias -- listeners below need the instance\n const xhr = this;\n const payload = describeBody(body);\n const entry: NetworkRequest = {\n id,\n url: m.url,\n method: m.method,\n type: 'xhr',\n initiator: 'xhr',\n initiatorStack: shortStack(),\n state: 'pending',\n requestHeaders: m.headers.slice(),\n responseHeaders: [],\n payload,\n requestSize: payload?.size,\n bodyState: 'pending',\n startTime: performance.now(),\n wallTime: Date.now(),\n };\n bus.emit('network:start', entry);\n\n let outcome: 'abort' | 'error' | 'timeout' | null = null;\n const onReady = () => {\n if (xhr.readyState === 2) {\n try {\n const headers = parseRawHeaders(xhr.getAllResponseHeaders());\n bus.emit('network:update', {\n id,\n patch: {\n status: xhr.status,\n statusText: xhr.statusText,\n responseHeaders: headers,\n mimeType: getHeader(headers, 'content-type')?.split(';')[0].trim(),\n },\n });\n } catch {}\n }\n };\n const onAbort = () => (outcome = 'abort');\n const onError = () => (outcome = 'error');\n const onTimeout = () => (outcome = 'timeout');\n const onLoadEnd = () => {\n xhr.removeEventListener('readystatechange', onReady);\n xhr.removeEventListener('abort', onAbort);\n xhr.removeEventListener('error', onError);\n xhr.removeEventListener('timeout', onTimeout);\n xhr.removeEventListener('loadend', onLoadEnd);\n const endTime = performance.now();\n if (outcome) {\n bus.emit('network:update', {\n id,\n patch: {\n state: outcome === 'abort' ? 'aborted' : 'failed',\n statusText: outcome === 'abort' ? '(canceled)' : outcome === 'timeout' ? '(timeout)' : '(failed)',\n error: outcome === 'abort' ? 'Request aborted' : outcome === 'timeout' ? 'Request timed out' : 'Network error (CORS, DNS or connection failure)',\n endTime,\n bodyState: 'none',\n },\n });\n return;\n }\n const patch: Partial<NetworkRequest> = { state: 'complete', endTime, status: xhr.status, statusText: xhr.statusText };\n try {\n const headers = parseRawHeaders(xhr.getAllResponseHeaders());\n patch.responseHeaders = headers;\n patch.mimeType = getHeader(headers, 'content-type')?.split(';')[0].trim();\n const rt = xhr.responseType;\n patch.responseType = rt || 'text';\n if (rt === '' || rt === 'text') {\n const text = xhr.responseText;\n patch.responseSize = byteLength(text);\n patch.responseBody = text.length > MAX_BODY ? text.slice(0, MAX_BODY) : text;\n patch.bodyState = text.length > MAX_BODY ? 'truncated' : 'available';\n } else if (rt === 'json') {\n const text = xhr.response == null ? '' : JSON.stringify(xhr.response);\n patch.responseSize = byteLength(text);\n patch.responseBody = text.slice(0, MAX_BODY);\n patch.bodyState = text.length > MAX_BODY ? 'truncated' : 'available';\n } else if (rt === 'document') {\n const doc = xhr.responseXML;\n patch.responseBody = doc ? new XMLSerializer().serializeToString(doc).slice(0, MAX_BODY) : '';\n patch.bodyState = 'available';\n } else if (rt === 'blob') {\n const blob = xhr.response as Blob | null;\n patch.responseSize = blob?.size;\n patch.bodyState = 'binary';\n if (blob && blob.size < 5e6 && /^image\\//.test(blob.type)) patch.responseObjectUrl = URL.createObjectURL(blob);\n } else if (rt === 'arraybuffer') {\n patch.responseSize = (xhr.response as ArrayBuffer | null)?.byteLength;\n patch.bodyState = 'binary';\n }\n } catch {\n patch.bodyState = 'unavailable';\n }\n bus.emit('network:update', { id, patch });\n };\n xhr.addEventListener('readystatechange', onReady);\n xhr.addEventListener('abort', onAbort);\n xhr.addEventListener('error', onError);\n xhr.addEventListener('timeout', onTimeout);\n xhr.addEventListener('loadend', onLoadEnd);\n\n try {\n return origSend.call(this, body);\n } catch (err) {\n bus.emit('network:update', { id, patch: { state: 'failed', error: String(err), endTime: performance.now(), bodyState: 'none' } });\n throw err;\n }\n };\n\n proto.open = open as typeof proto.open;\n proto.send = send;\n proto.setRequestHeader = setRequestHeader;\n\n return () => {\n if (proto.open === (open as unknown)) proto.open = origOpen;\n if (proto.send === send) proto.send = origSend;\n if (proto.setRequestHeader === setRequestHeader) proto.setRequestHeader = origSetHeader;\n };\n}\n","import type { DevToolsEvents, EventBus } from '../../core/eventBus';\nimport type { NetworkRequest, NetworkTiming } from '../../types';\nimport { newRequestId, shouldIgnore, typeFromInitiator, type NetworkConfig } from './shared';\n\ntype Bus = EventBus<DevToolsEvents>;\n\nexport function timingFromEntry(e: PerformanceResourceTiming): NetworkTiming {\n const d = (a: number, b: number) => (a > 0 && b > 0 && b >= a ? b - a : undefined);\n return {\n startTime: e.startTime,\n redirect: d(e.redirectStart, e.redirectEnd),\n dns: d(e.domainLookupStart, e.domainLookupEnd),\n connect: d(e.connectStart, e.connectEnd),\n ssl: e.secureConnectionStart > 0 ? d(e.secureConnectionStart, e.connectEnd) : undefined,\n request: d(e.fetchStart, e.requestStart),\n waiting: d(e.requestStart, e.responseStart),\n download: d(e.responseStart, e.responseEnd),\n total: e.duration,\n };\n}\n\n/**\n * Uses the Resource Timing API to list resources loaded by the page (scripts,\n * stylesheets, images, fonts…) — including ones loaded before devtools mounted.\n * Fetch/XHR entries are emitted as 'network:resource' so the store can attach\n * timing data to requests captured by the fetch/XHR wrappers.\n */\nexport function installResources(bus: Bus, cfg: NetworkConfig): () => void {\n if (typeof PerformanceObserver === 'undefined' || typeof performance === 'undefined') return () => {};\n\n const toRequest = (e: PerformanceResourceTiming): NetworkRequest => {\n const anyE = e as PerformanceResourceTiming & { responseStatus?: number; deliveryType?: string; contentType?: string };\n const type = e.entryType === 'navigation' ? 'doc' : typeFromInitiator(e.initiatorType, e.name);\n const fromCache = anyE.deliveryType === 'cache' || (e.transferSize === 0 && e.decodedBodySize > 0);\n return {\n id: newRequestId(),\n url: e.name,\n method: 'GET',\n type,\n initiator: e.initiatorType || 'other',\n state: 'complete',\n status: anyE.responseStatus || undefined,\n statusText: fromCache ? '(cache)' : '',\n requestHeaders: [],\n responseHeaders: [],\n bodyState: 'unavailable',\n mimeType: anyE.contentType || undefined,\n startTime: e.startTime,\n endTime: e.responseEnd || e.startTime + e.duration,\n wallTime: performance.timeOrigin + e.startTime,\n transferSize: e.transferSize || undefined,\n responseSize: e.decodedBodySize || e.encodedBodySize || undefined,\n fromCache,\n timing: timingFromEntry(e),\n };\n };\n\n const handle = (list: PerformanceEntryList) => {\n for (const entry of list) {\n const e = entry as PerformanceResourceTiming;\n if (shouldIgnore(e.name, cfg)) continue;\n if (e.initiatorType === 'fetch' || e.initiatorType === 'xmlhttprequest' || e.initiatorType === 'beacon') {\n bus.emit('network:resource', toRequest(e));\n continue;\n }\n // Our own blob: previews and data: URLs are noise\n if (/^(blob|data):/.test(e.name)) continue;\n bus.emit('network:start', toRequest(e));\n }\n };\n\n let observer: PerformanceObserver | null = null;\n try {\n observer = new PerformanceObserver((list) => handle(list.getEntries()));\n observer.observe({ type: 'resource', buffered: true });\n } catch {\n try {\n handle(performance.getEntriesByType('resource'));\n observer?.observe({ entryTypes: ['resource'] });\n } catch {}\n }\n // Document request\n try {\n const nav = performance.getEntriesByType('navigation');\n handle(nav);\n } catch {}\n\n return () => observer?.disconnect();\n}\n\n/** Wraps the WebSocket constructor to record connections and frames. */\nexport function installWebSocket(bus: Bus, cfg: NetworkConfig): () => void {\n if (typeof WebSocket === 'undefined') return () => {};\n const Original = window.WebSocket;\n const MAX_FRAMES = 300;\n\n const frameData = (data: unknown): { data: string; size: number; opcode: 'text' | 'binary' } => {\n if (typeof data === 'string') return { data: data.slice(0, 10_000), size: data.length, opcode: 'text' };\n if (data instanceof ArrayBuffer) return { data: `Binary frame (${data.byteLength} B)`, size: data.byteLength, opcode: 'binary' };\n if (typeof Blob !== 'undefined' && data instanceof Blob) return { data: `Binary frame (${data.size} B)`, size: data.size, opcode: 'binary' };\n if (ArrayBuffer.isView(data)) return { data: `Binary frame (${data.byteLength} B)`, size: data.byteLength, opcode: 'binary' };\n return { data: String(data), size: 0, opcode: 'text' };\n };\n\n class InstrumentedWebSocket extends Original {\n constructor(url: string | URL, protocols?: string | string[]) {\n super(url, protocols);\n const href = String(url);\n if (shouldIgnore(href, cfg)) return;\n const id = newRequestId();\n const frames: NonNullable<NetworkRequest['frames']> = [];\n (this as any).__ridId = id;\n (this as any).__ridFrames = frames;\n bus.emit('network:start', {\n id,\n url: href,\n method: 'GET',\n type: 'ws',\n initiator: 'websocket',\n state: 'pending',\n status: 101,\n statusText: 'Switching Protocols',\n requestHeaders: [],\n responseHeaders: [],\n bodyState: 'none',\n startTime: performance.now(),\n wallTime: Date.now(),\n frames: [],\n });\n const push = (direction: 'send' | 'receive', data: unknown) => {\n frames.push({ direction, time: Date.now(), ...frameData(data) });\n if (frames.length > MAX_FRAMES) frames.splice(0, frames.length - MAX_FRAMES);\n bus.emit('network:update', { id, patch: { frames: frames.slice() } });\n };\n (this as any).__ridPush = push;\n this.addEventListener('message', (ev: MessageEvent) => push('receive', ev.data));\n this.addEventListener('close', (ev: CloseEvent) =>\n bus.emit('network:update', {\n id,\n patch: { state: 'complete', endTime: performance.now(), statusText: `Closed (${ev.code})` },\n }),\n );\n this.addEventListener('error', () =>\n bus.emit('network:update', { id, patch: { state: 'failed', error: 'WebSocket error', endTime: performance.now() } }),\n );\n }\n\n send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {\n super.send(data as any);\n try {\n (this as any).__ridPush?.('send', data);\n } catch {}\n }\n }\n\n window.WebSocket = InstrumentedWebSocket as typeof WebSocket;\n return () => {\n if (window.WebSocket === (InstrumentedWebSocket as unknown)) window.WebSocket = Original;\n };\n}\n","import type { DevToolsEvents, EventBus } from '../../core/eventBus';\nimport { captureStorageOriginals, isInternalKey } from '../../utils/safeStorage';\n\ntype Bus = EventBus<DevToolsEvents>;\n\n/**\n * Observes storage writes so the Application panel stays live. Writes from other\n * tabs arrive via the `storage` event; same-tab writes are observed by wrapping\n * Storage.prototype methods (behaviour is unchanged — the original is always called).\n */\nexport function installStorage(bus: Bus): () => void {\n if (typeof Storage === 'undefined') return () => {};\n captureStorageOriginals();\n const proto = Storage.prototype;\n const orig = { setItem: proto.setItem, removeItem: proto.removeItem, clear: proto.clear };\n\n const areaOf = (s: Storage): 'local' | 'session' | null => {\n try {\n if (s === window.localStorage) return 'local';\n if (s === window.sessionStorage) return 'session';\n } catch {}\n return null;\n };\n let scheduled = new Set<'local' | 'session'>();\n const notify = (s: Storage, key?: string) => {\n if (key != null && isInternalKey(key)) return;\n const area = areaOf(s);\n if (!area) return;\n if (!scheduled.size) {\n queueMicrotask(() => {\n const areas = scheduled;\n scheduled = new Set();\n areas.forEach((a) => bus.emit('storage:change', { area: a }));\n });\n }\n scheduled.add(area);\n };\n\n const setItem = function (this: Storage, key: string, value: string) {\n const r = orig.setItem.call(this, key, value);\n notify(this, String(key));\n return r;\n };\n const removeItem = function (this: Storage, key: string) {\n const r = orig.removeItem.call(this, key);\n notify(this, String(key));\n return r;\n };\n const clear = function (this: Storage) {\n const r = orig.clear.call(this);\n notify(this);\n return r;\n };\n proto.setItem = setItem;\n proto.removeItem = removeItem;\n proto.clear = clear;\n\n const onStorage = (e: StorageEvent) => {\n if (e.storageArea) notify(e.storageArea, e.key ?? undefined);\n };\n window.addEventListener('storage', onStorage);\n\n return () => {\n window.removeEventListener('storage', onStorage);\n if (proto.setItem === setItem) proto.setItem = orig.setItem;\n if (proto.removeItem === removeItem) proto.removeItem = orig.removeItem;\n if (proto.clear === clear) proto.clear = orig.clear;\n };\n}\n","import type { DevToolsEvents, EventBus } from '../../core/eventBus';\nimport { isDevtoolsNode } from '../../core/ownership';\n\ntype Bus = EventBus<DevToolsEvents>;\n\n/**\n * Watches the document for changes (including React re-renders) and emits a\n * single batched 'dom:mutation' per animation frame. Mutations to the devtools\n * host itself are ignored.\n */\nexport function installDomObserver(bus: Bus): () => void {\n if (typeof MutationObserver === 'undefined') return () => {};\n let count = 0;\n let frame = 0;\n const raf = typeof requestAnimationFrame === 'function' ? requestAnimationFrame : (cb: FrameRequestCallback) => setTimeout(() => cb(0), 16) as unknown as number;\n const caf = typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame : clearTimeout;\n\n const observer = new MutationObserver((records) => {\n let relevant = 0;\n for (const r of records) {\n if (isDevtoolsNode(r.target)) continue;\n if (r.type === 'childList') {\n const onlyHost = [...Array.from(r.addedNodes), ...Array.from(r.removedNodes)].every((n) => isDevtoolsNode(n));\n if (onlyHost && (r.addedNodes.length || r.removedNodes.length)) continue;\n }\n relevant++;\n }\n if (!relevant) return;\n count += relevant;\n if (!frame) {\n frame = raf(() => {\n frame = 0;\n const n = count;\n count = 0;\n bus.emit('dom:mutation', { records: n });\n });\n }\n });\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true,\n attributes: true,\n characterData: true,\n });\n return () => {\n observer.disconnect();\n if (frame) caf(frame);\n };\n}\n","import { bus } from '../core/eventBus';\nimport { isBrowser } from '../core/ownership';\nimport { addConsoleEntry, flush, resetGroupStack, restorePreservedConsole, savePreservedConsole, useConsole } from '../store/consoleStore';\nimport { addRequest, findRequest, patchRequest, restorePreservedNetwork, savePreservedNetwork, useNetwork } from '../store/networkStore';\nimport { bumpDomVersion } from '../store/elementsStore';\nimport { useApplication } from '../store/applicationStore';\nimport { useDevtools } from '../store/devtoolsStore';\nimport { installConsole } from './console';\nimport { installErrors } from './errors';\nimport { installFetch } from './network/fetch';\nimport { installXHR } from './network/xhr';\nimport { installResources, installWebSocket } from './network/resources';\nimport { installStorage } from './storage';\nimport { installDomObserver } from './dom';\nimport { installMatchMediaPatch } from '../panels/DeviceToolbar/emulation';\nimport type { NetworkConfig } from './network/shared';\nimport { readInternal } from '../utils/safeStorage';\n\nexport interface InstrumentationConfig {\n console?: boolean;\n network?: boolean;\n storage?: boolean;\n dom?: boolean;\n /** Patch matchMedia so the device toolbar can emulate viewport media queries. */\n media?: boolean;\n ignoreUrls?: (string | RegExp)[];\n maxConsoleEntries?: number;\n maxNetworkEntries?: number;\n}\n\ntype ModuleName = 'console' | 'errors' | 'fetch' | 'xhr' | 'resources' | 'websocket' | 'storage' | 'dom' | 'media';\n\nconst modules = new Map<ModuleName, { refs: number; uninstall: () => void }>();\n\nconst networkConfig: NetworkConfig = {\n ignoreUrls: [],\n isCacheDisabled: () => useDevtools.getState().disableCache,\n};\n\nfunction acquire(name: ModuleName, install: () => () => void): () => void {\n const m = modules.get(name);\n if (m) m.refs++;\n else {\n try {\n modules.set(name, { refs: 1, uninstall: install() });\n } catch {\n modules.set(name, { refs: 1, uninstall: () => {} });\n }\n }\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const cur = modules.get(name);\n if (!cur) return;\n cur.refs--;\n if (cur.refs <= 0) {\n modules.delete(name);\n try {\n cur.uninstall();\n } catch {}\n }\n };\n}\n\n/* ----------------------------------------------------------- bus -> stores */\n\nlet connected = false;\nlet disconnectStores: (() => void) | null = null;\n\nfunction connectStores(): void {\n if (connected) return;\n connected = true;\n const offs = [\n bus.on('console:entry', addConsoleEntry),\n bus.on('console:clear', ({ fromApp }) => {\n if (fromApp && useDevtools.getState().preserveConsoleLog) {\n addConsoleEntry({ level: 'info', kind: 'system', args: [\"console.clear() was prevented due to 'Preserve log'\"], timestamp: Date.now() });\n return;\n }\n flush();\n useConsole.getState().clear();\n resetGroupStack();\n addConsoleEntry({ level: 'info', kind: 'system', args: ['Console was cleared'], timestamp: Date.now() });\n }),\n bus.on('network:start', addRequest),\n bus.on('network:update', ({ id, patch }) => patchRequest(id, patch)),\n bus.on('network:resource', (res) => {\n const norm = (u: string) => u.replace(/([?&])_rid=[^&]*&?/, '$1').replace(/[?&]$/, '');\n const match = findRequest(\n (r) => (r.type === 'fetch' || r.type === 'xhr') && !r.timing && norm(r.url) === norm(res.url) && Math.abs(r.startTime - res.startTime) < 2000,\n );\n if (match) {\n patchRequest(match.id, {\n timing: res.timing,\n transferSize: res.transferSize,\n fromCache: res.fromCache,\n responseSize: match.responseSize ?? res.responseSize,\n });\n }\n }),\n bus.on('dom:mutation', bumpDomVersion),\n bus.on('storage:change', ({ area }) => useApplication.getState().bump(area === 'cookie' ? 'cookie' : area)),\n ];\n\n const onPageHide = () => {\n const s = useDevtools.getState();\n if (s.preserveConsoleLog) savePreservedConsole();\n if (s.preserveNetworkLog) savePreservedNetwork();\n };\n window.addEventListener('pagehide', onPageHide);\n\n // Settings may not be hydrated yet (installEarly runs before the component mounts).\n const saved = readInternal<{ preserveConsoleLog?: boolean; preserveNetworkLog?: boolean }>('settings', {});\n if (saved.preserveConsoleLog ?? useDevtools.getState().preserveConsoleLog) restorePreservedConsole();\n if (saved.preserveNetworkLog ?? useDevtools.getState().preserveNetworkLog) restorePreservedNetwork();\n\n disconnectStores = () => {\n offs.forEach((o) => o());\n window.removeEventListener('pagehide', onPageHide);\n connected = false;\n };\n}\n\nlet activeAcquisitions = 0;\n\n/**\n * Installs the requested instrumentation. Reference counted: multiple callers\n * (StrictMode double-mounts, installEarly + component) patch globals only once.\n * Returns a release function that restores the original globals when the last\n * user releases them.\n */\nexport function acquireInstrumentation(cfg: InstrumentationConfig = {}): () => void {\n if (!isBrowser()) return () => {};\n const { console: c = true, network = true, storage = true, dom = true } = cfg;\n if (cfg.ignoreUrls) networkConfig.ignoreUrls = cfg.ignoreUrls;\n if (cfg.maxConsoleEntries) useConsole.setState({ max: cfg.maxConsoleEntries });\n if (cfg.maxNetworkEntries) useNetwork.setState({ max: cfg.maxNetworkEntries });\n connectStores();\n activeAcquisitions++;\n\n const releases: (() => void)[] = [];\n if (c) {\n releases.push(acquire('console', () => installConsole(bus)));\n releases.push(acquire('errors', () => installErrors(bus)));\n }\n if (network) {\n releases.push(acquire('fetch', () => installFetch(bus, networkConfig)));\n releases.push(acquire('xhr', () => installXHR(bus, networkConfig)));\n releases.push(acquire('resources', () => installResources(bus, networkConfig)));\n releases.push(acquire('websocket', () => installWebSocket(bus, networkConfig)));\n }\n if (storage) releases.push(acquire('storage', () => installStorage(bus)));\n if (dom) releases.push(acquire('dom', () => installDomObserver(bus)));\n if (cfg.media) releases.push(acquire('media', installMatchMediaPatch));\n\n let released = false;\n return () => {\n if (released) return;\n released = true;\n releases.reverse().forEach((r) => r());\n activeAcquisitions--;\n if (activeAcquisitions <= 0 && disconnectStores) {\n disconnectStores();\n disconnectStores = null;\n }\n };\n}\n\nlet earlyRelease: (() => void) | null = null;\n\n/**\n * Starts capturing console output and network requests immediately — call this\n * in your entry file before rendering so logs/requests made during startup are captured.\n * Returns a function that undoes the early installation.\n */\nexport function installEarly(cfg: InstrumentationConfig = {}): () => void {\n if (!isBrowser()) return () => {};\n if (!earlyRelease) earlyRelease = acquireInstrumentation({ dom: false, media: true, ...cfg });\n return () => {\n earlyRelease?.();\n earlyRelease = null;\n };\n}\n\n/** For tests: whether any module is currently installed. */\nexport function installedModules(): string[] {\n return Array.from(modules.keys());\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { createRoot, type Root } from 'react-dom/client';\nimport type { InspectorDevToolsProps } from './types';\nimport { HOST_ATTR, isBrowser, setHostElement } from './core/ownership';\nimport { STYLES } from './themes';\nimport { DevtoolsApp } from './DevtoolsApp';\nimport { ConfigContext, defaultOptions, type ResolvedConfig } from './hooks/useConfig';\nimport { DevtoolsContext } from './hooks/useDevtoolsContext';\nimport { acquireInstrumentation } from './instrumentation';\nimport { hydrateSettings, useDevtools } from './store/devtoolsStore';\nimport { loadConsoleHistory, setGroupSimilar } from './store/consoleStore';\nimport { hydrateDevice } from './store/deviceStore';\nimport { ErrorBoundary } from './components/ErrorBoundary';\n\nconst DEFAULT_PANELS: ResolvedConfig['panels'] = ['elements', 'console', 'network', 'application'];\n\ninterface Mount {\n host: HTMLElement;\n shadow: ShadowRoot;\n container: HTMLElement;\n root: Root;\n}\n\n/**\n * Chrome DevTools-style developer tools for React applications.\n *\n * Renders into its own Shadow DOM and React root, so it neither inherits the\n * application's CSS nor participates in the application's React tree.\n */\nexport function InspectorDevTools(props: InspectorDevToolsProps) {\n if (props.enabled === false || !isBrowser()) return null;\n return <InspectorDevToolsImpl {...props} />;\n}\n\nfunction InspectorDevToolsImpl(props: InspectorDevToolsProps) {\n const {\n defaultOpen = false,\n open,\n onOpenChange,\n position,\n theme,\n height,\n width,\n shortcut = 'Ctrl+Shift+D',\n panels = DEFAULT_PANELS,\n customPanels,\n options,\n target,\n showLauncher = true,\n dockPushesContent = false,\n maxConsoleEntries,\n maxNetworkEntries,\n ignoreUrls,\n zIndex,\n } = props;\n\n const [mount, setMount] = useState<Mount | null>(null);\n const onOpenChangeRef = useRef(onOpenChange);\n onOpenChangeRef.current = onOpenChange;\n\n const opts = { ...defaultOptions, ...options };\n\n // 1. Create the shadow host + separate React root.\n useEffect(() => {\n hydrateSettings({\n dock: position,\n theme,\n bottomHeight: height,\n rightWidth: width,\n open: open ?? defaultOpen,\n });\n if (open !== undefined) useDevtools.setState({ open });\n hydrateDevice();\n loadConsoleHistory();\n\n const host = document.createElement('div');\n host.setAttribute(HOST_ATTR, '');\n host.setAttribute('aria-label', 'React Inspector DevTools');\n const shadow = host.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = STYLES;\n const container = document.createElement('div');\n container.className = 'rid-mount';\n shadow.append(style, container);\n document.body.appendChild(host);\n setHostElement(host);\n const root = createRoot(container);\n setMount({ host, shadow, container, root });\n\n return () => {\n setHostElement(null);\n useDevtools.setState({ pickerActive: false, deviceMode: false });\n // Unmount asynchronously: synchronously unmounting a root during a parent commit is not allowed.\n setTimeout(() => {\n root.unmount();\n host.remove();\n });\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // 2. Instrumentation (console, network, storage, DOM).\n const ignoreKey = (ignoreUrls ?? []).map(String).join('|');\n useEffect(() => {\n return acquireInstrumentation({\n console: opts.enableConsole,\n network: opts.enableNetwork,\n storage: opts.enableApplication,\n dom: true,\n media: opts.enableDeviceToolbar && opts.emulateMediaQueries,\n ignoreUrls,\n maxConsoleEntries,\n maxNetworkEntries,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [opts.enableConsole, opts.enableNetwork, opts.enableApplication, opts.enableDeviceToolbar, opts.emulateMediaQueries, ignoreKey, maxConsoleEntries, maxNetworkEntries]);\n\n // 3. Controlled `open` prop + change notifications.\n useEffect(() => {\n if (open !== undefined && useDevtools.getState().open !== open) useDevtools.getState().setOpen(open);\n }, [open]);\n useEffect(\n () =>\n useDevtools.subscribe((s, prev) => {\n if (s.open !== prev.open) onOpenChangeRef.current?.(s.open);\n }),\n [],\n );\n useEffect(() => {\n if (mount && zIndex !== undefined) mount.host.style.setProperty('--rid-z', String(zIndex));\n }, [mount, zIndex]);\n useEffect(() => setGroupSimilar(useDevtools.getState().groupSimilar), []);\n\n // 4. Render (re-render whenever configuration props change).\n const config: ResolvedConfig = {\n panels,\n customPanels: customPanels ?? [],\n options: opts,\n shortcut,\n showLauncher,\n dockPushesContent,\n target,\n };\n const configKey = JSON.stringify({ panels, options: opts, shortcut, showLauncher, dockPushesContent, t: typeof target === 'string' ? target : !!target, c: customPanels?.map((p) => p.id) });\n useEffect(() => {\n if (!mount) return;\n mount.root.render(\n <ErrorBoundary label=\"DevTools\">\n <DevtoolsContext.Provider value={{ shadowRoot: mount.shadow, container: mount.container, targetSelector: target }}>\n <ConfigContext.Provider value={config}>\n <DevtoolsApp />\n </ConfigContext.Provider>\n </DevtoolsContext.Provider>\n </ErrorBoundary>,\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mount, configKey, customPanels, target]);\n\n return null;\n}\n"],"mappings":";;;;;;;;;AACA,IAAa,YAAY;AAEzB,IAAI,SAA6B;AAEjC,SAAgB,eAAe,IAA8B;CAC3D,SAAS;AACX;;AAOA,SAAgB,eAAe,MAAwC;CACrE,IAAI,CAAC,MAAM,OAAO;CAClB,IAAI,WAAW,SAAS,UAAU,OAAO,SAAS,IAAI,IAAI,OAAO;CACjE,IAAI,KAAK,aAAa,KAAM,KAAiB,eAAA,eAAwB,GAAG,OAAO;CAE/E,MAAM,OAAO,KAAK,cAAc;CAChC,IAAI,QAAQ,gBAAgB,cAAc,KAAK,SAAS,QAAQ,OAAO;CACvE,OAAO;AACT;;AAGA,SAAgB,gBAAgB,GAAmB;CACjD,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,OAAO,EAAE,eAAe;CAC9B,OAAO,OAAO,KAAK,SAAS,MAAM,IAAI,eAAe,EAAE,MAAc;AACvE;AAEA,IAAa,kBAA2B,OAAO,WAAW,eAAe,OAAO,aAAa;;AQvB7F,IAAa,SAAS;CAACA;CAAMC;CAAWC;CAAUC;CAAYC;CAASC;CAAaC;AAAM,CAAC,CAAC,KAAK,IAAI;;;;;;ACJrG,IAAa,kBAAkB;AAG/B,IAAI,YAAwB;AAE5B,SAAS,MAAkB;CACzB,IAAI,OAAO,YAAY,aAAa,OAAO;CAC3C,IAAI,CAAC,WACH,YAAY;EACV,KAAK,QAAQ,UAAU;EACvB,KAAK,QAAQ,UAAU;EACvB,QAAQ,QAAQ,UAAU;CAC5B;CAEF,OAAO;AACT;;AAGA,SAAgB,0BAAgC;CAC9C,IAAI;AACN;AAEA,SAAS,KAAK,MAA2C;CACvD,IAAI;EACF,OAAO,SAAS,UAAU,OAAO,eAAe,OAAO;CACzD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,aAAgB,KAAa,UAAa,OAA4B,SAAY;CAChG,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,KAAK,IAAI;CACnB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO;CACrB,IAAI;EACF,MAAM,MAAM,EAAE,IAAI,KAAK,GAAG,kBAAkB,GAAG;EAC/C,OAAO,OAAO,OAAO,WAAY,KAAK,MAAM,GAAG;CACjD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,cAAc,KAAa,OAAgB,OAA4B,SAAe;CACpG,MAAM,IAAI,IAAI;CACd,MAAM,IAAI,KAAK,IAAI;CACnB,IAAI,CAAC,KAAK,CAAC,GAAG;CACd,IAAI;EACF,IAAI,UAAU,KAAA,GAAW,EAAE,OAAO,KAAK,GAAG,kBAAkB,GAAG;OAC1D,EAAE,IAAI,KAAK,GAAG,kBAAkB,KAAK,KAAK,UAAU,KAAK,CAAC;CACjE,QAAQ,CAER;AACF;AAEA,SAAgB,cAAc,KAAsB;CAClD,OAAO,IAAI,WAAW,eAAe;AACvC;;AChBA,IAAM,eAAe;AAErB,IAAa,kBAAoC;CAC/C,MAAM;CACN,OAAO;CACP,cAAc;CACd,YAAY;CACZ,UAAU;EAAE,GAAG;EAAI,GAAG;EAAI,OAAO;EAAK,QAAQ;CAAI;CAClD,aAAa;CACb,oBAAoB;CACpB,oBAAoB;CACpB,cAAc;CACd,mBAAmB;CACnB,cAAc;CACd,kBAAkB;CAClB,cAAc,CAAC;CACf,sBAAsB;CACtB,oBAAoB;AACtB;AAEA,IAAM,eAAe,OAAO,KAAK,eAAe;AAEhD,SAAS,aAAa,GAAsD;CAC1E,MAAM,MAAiC,CAAC;CACxC,KAAK,MAAM,KAAK,cAAc,IAAI,KAAK,GAAG,IAAa,KAAM,EAAU;CACvE,OAAO;AACT;AAEA,IAAa,eAAA,GAAcC,QAAAA,OAAAA,CAAsB,CAAC,EAAE,KAAK,SAAS;CAChE,GAAG;CACH,MAAM;CACN,WAAW;CACX,WAAW;CACX,cAAc;CACd,YAAY;CACZ,YAAY;CACZ,MAAM,UAAU,IAAI,KAAK;CACzB,UAAU,SAAS,IAAI;EAAE;EAAM,WAAW;EAAO,cAAc,OAAO,IAAI,CAAC,CAAC,eAAe;CAAM,CAAC;CAClG,cAAc,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI;CACvC,iBAAiB,UAAU;EACzB,IAAI,KAAK;EACT,gBAAgB;CAClB;CACA,qBAAqB;EACnB,IAAI,EAAE,GAAG,gBAAgB,CAAC;EAC1B,gBAAgB;CAClB;AACF,EAAE;AAEF,IAAI;AACJ,SAAgB,kBAAwB;CACtC,aAAa,YAAY;CACzB,eAAe,iBAAiB;EAC9B,MAAM,IAAI,YAAY,SAAS;EAC/B,cAAc,cAAc;GAAE,GAAG,aAAa,CAAC;GAAG,MAAM,EAAE;EAAK,CAAC;CAClE,GAAG,GAAG;AACR;;;;;AAMA,SAAgB,gBAAgB,UAAgE;CAC9F,MAAM,QAAQ,aAAsE,cAAc,IAAI;CACtG,MAAM,gBAA2C,CAAC;CAClD,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,aAAa,QAAe,CAAC,GAAG,IAAI,MAAM,KAAA,GAAW,cAAuB,KAAK;CACrH,MAAM,SAAiC;EACrC,GAAG;EACH,GAAG;EACH,GAAI,QAAQ,aAAa,KAAY,IAAI,CAAC;EAC1C,MAAM,OAAO,OAAO,SAAS,YAAY,MAAM,OAAO,CAAC,CAAC,SAAS;CACnE;CACA,YAAY,SAAS,MAAM;AAC7B;AAEA,YAAY,WAAW,GAAG,SAAS;CACjC,IAAI,EAAE,SAAS,KAAK,MAAM,gBAAgB;AAC5C,CAAC;;AClGD,IAAM,cAAc;AAEpB,IAAa,iBAAiB,MAC5B,MAAM,UAAU,YAAY,MAAM,SAAS,aAAa,MAAM,UAAU,WAAW;AAErF,IAAa,cAAA,GAAaC,QAAAA,OAAAA,CAAqB,CAAC,EAAE,KAAK,SAAS;CAC9D,SAAS,CAAC;CACV,KAAK;CACL,YAAY;CACZ,QAAQ;EAAE,SAAS;EAAO,MAAM;EAAM,UAAU;EAAM,QAAQ;CAAK;CACnE,cAAc,CAAC;CACf,SAAS,CAAC;CACV,aAAa;EACX,aAAa,CAAC;EACd,UAAU,CAAC;EACX,IAAI;GAAE,SAAS,CAAC;GAAG,cAAc,CAAC;EAAE,CAAC;CACvC;CACA,gBAAgB,eAAe,IAAI,EAAE,WAAW,CAAC;CACjD,cAAc,MAAM,IAAI,EAAE,QAAQ;EAAE,GAAG,IAAI,CAAC,CAAC;GAAS,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;CAAG,EAAE,CAAC;CAC9E,YAAY,WAAW,IAAI,EAAE,OAAO,CAAC;CACrC,cAAc,IAAI,cAAc,IAAI,EAAE,cAAc;EAAE,GAAG,IAAI,CAAC,CAAC;GAAe,KAAK;CAAU,EAAE,CAAC;CAChG,cAAc,QAAQ;EACpB,MAAM,IAAI,IAAI,CAAC,CAAC,QAAQ,QAAQ,MAAM,MAAM,GAAG;EAC/C,EAAE,KAAK,GAAG;EACV,MAAM,UAAU,EAAE,MAAM,IAAI;EAC5B,IAAI,EAAE,QAAQ,CAAC;EACf,cAAc,aAAa,OAAO;CACpC;AACF,EAAE;AAEF,SAAgB,qBAA2B;CACzC,WAAW,SAAS,EAAE,SAAS,aAAuB,aAAa,CAAC,CAAC,EAAE,CAAC;AAC1E;AAIA,IAAI,cAAc;AAClB,IAAI,aAAuB,CAAC;AAC5B,IAAI,UAA0B,CAAC;AAC/B,IAAI;AACJ,IAAI,eAAe;AAEnB,SAAgB,gBAAgB,GAAkB;CAChD,eAAe;AACjB;AAEA,IAAM,eAAe,MAAe,MAAM,QAAS,OAAO,MAAM,YAAY,OAAO,MAAM;AAEzF,SAAS,SAAS,GAAc,GAAuB;CACrD,IAAI,EAAE,WAAW,EAAE,QAAQ,OAAO;CAClC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC5B,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO;CAE3D,OAAO;AACT;AAEA,SAAgB,gBAAgB,KAA4C;CAC1E,IAAI,IAAI,SAAS,aAAa;EAC5B,WAAW,IAAI;EACf;CACF;CACA,MAAM,QAAsB;EAC1B,GAAG;EACH,IAAI;EACJ,OAAO,WAAW;EAClB,WAAW,WAAW,MAAM;EAC5B,QAAQ;CACV;CACA,IAAI,IAAI,SAAS,eAAe,WAAW,KAAK,MAAM,EAAE;CACxD,QAAQ,KAAK,KAAK;CAClB,cAAc;AAChB;AAEA,SAAS,gBAAgB;CACvB,IAAI,eAAe,KAAA,GAAW;CAC9B,aAAa,WAAW,OAAO,EAAE;AACnC;;AAGA,SAAgB,QAAc;CAC5B,aAAa,KAAA;CACb,IAAI,CAAC,QAAQ,QAAQ;CACrB,MAAM,EAAE,SAAS,QAAQ,WAAW,SAAS;CAC7C,MAAM,OAAO,QAAQ,MAAM;CAC3B,KAAK,MAAM,KAAK,SAAS;EACvB,MAAM,OAAO,KAAK,KAAK,SAAS;EAChC,IACE,gBACA,QACA,EAAE,SAAS,SACX,KAAK,SAAS,SACd,KAAK,UAAU,EAAE,SACjB,KAAK,UAAU,EAAE,SACjB,KAAK,WAAW,EAAE,UAClB,SAAS,KAAK,MAAM,EAAE,IAAI,GAE1B,KAAK,KAAK,SAAS,KAAK;GAAE,GAAG;GAAM,QAAQ,KAAK,SAAS;GAAG,WAAW,EAAE;EAAU;OAEnF,KAAK,KAAK,CAAC;CAEf;CACA,UAAU,CAAC;CACX,WAAW,SAAS,EAAE,SAAS,KAAK,SAAS,MAAM,KAAK,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK,CAAC;AAC3F;AAEA,SAAgB,kBAAwB;CACtC,aAAa,CAAC;AAChB;AAIA,IAAMC,iBAAe;AAErB,SAAgB,qBAAqB,GAAoB;CACvD,IAAI,OAAO,MAAM,UAAU,OAAO;CAClC,IAAI,aAAa,OAAO,OAAO,GAAG,EAAE,KAAK,IAAI,EAAE;CAC/C,IAAI,OAAO,YAAY,eAAe,aAAa,SAAS,OAAO,IAAI,EAAE,UAAU;CACnF,IAAI,OAAO,MAAM,YAAY,OAAO,KAAK,EAAE,QAAQ,YAAY;CAC/D,IAAI;EACF,MAAM,uBAAO,IAAI,QAAQ;EACzB,MAAM,IAAI,KAAK,UAAU,IAAI,IAAI,QAAQ;GACvC,IAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;IAC3C,IAAI,KAAK,IAAI,GAAG,GAAG,OAAO;IAC1B,KAAK,IAAI,GAAG;GACd;GACA,IAAI,OAAO,QAAQ,UAAU,OAAO,GAAG,IAAI;GAC3C,OAAO;EACT,CAAC;EACD,OAAO,MAAM,KAAA,IAAY,OAAO,CAAC,IAAI;CACvC,QAAQ;EACN,OAAO,OAAO,CAAC;CACjB;AACF;AAEA,SAAgB,uBAA6B;CAC3C,MAAM;CAMN,cAAcA,gBALE,WAAW,SAAS,CAAC,CAAC,QAAQ,MAAM,IAAI,CAAC,CAAC,KAAK,OAAO;EACpE,GAAG;EACH,MAAM,EAAE,KAAK,IAAI,oBAAoB;EACrC,WAAW;CACb,EAC4B,GAAS,SAAS;AAChD;AAEA,SAAgB,0BAAgC;CAC9C,MAAM,QAAQ,aAAoCA,gBAAc,MAAM,SAAS;CAC/E,cAAcA,gBAAc,KAAA,GAAW,SAAS;CAChD,IAAI,CAAC,OAAO,QAAQ;CACpB,MAAM,WAAW,MAAM,KAAK,OAAO;EAAE,GAAG;EAAG,IAAI;EAAe,WAAW,CAAC;EAAG,OAAO;CAAE,EAAE;CACxF,SAAS,KAAK;EACZ,IAAI;EACJ,OAAO;EACP,MAAM;EACN,MAAM,CAAC,gBAAgB,SAAS,MAAM;EACtC,WAAW,KAAK,IAAI;EACpB,OAAO;EACP,WAAW,CAAC;EACZ,QAAQ;CACV,CAAC;CACD,WAAW,SAAS,EAAE,SAAS,CAAC,GAAG,UAAU,GAAG,WAAW,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;AAClF;;AC1KA,IAAa,iBAA6C;CACxD,qBAAqB;CACrB,qBAAqB;CACrB,eAAe;CACf,eAAe;CACf,mBAAmB;CACnB,qBAAqB;AACvB;AAEA,IAAa,iBAAA,GAAgBC,MAAAA,cAAAA,CAA8B;CACzD,QAAQ;EAAC;EAAY;EAAW;EAAW;CAAa;CACxD,cAAc,CAAC;CACf,SAAS;CACT,UAAU;CACV,cAAc;CACd,mBAAmB;AACrB,CAAC;AAED,IAAa,mBAAA,GAAkCC,MAAAA,WAAAA,CAAW,aAAa;;AC3BvE,SAAgB,mBAAkC;CAChD,MAAM,QAAQ,aAAa,MAAM,EAAE,KAAK;CACxC,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,OAAO,WAAW,eAAe,CAAC,OAAO,YAAY;EAEzD,MAAM,MAAM,OAAO,WAAW,8BAA8B;EAC5D,MAAM,eAAe,YAAY,SAAS,EAAE,YAAY,IAAI,QAAQ,CAAC;EACrE,OAAO;EACP,IAAI,mBAAmB,UAAU,MAAM;EACvC,aAAa,IAAI,sBAAsB,UAAU,MAAM;CACzD,GAAG,CAAC,CAAC;CACL,IAAI,UAAU,UAAU,OAAO,aAAa,SAAS;CACrD,OAAO;AACT;;ACfA,IAAM,yBAAS,IAAI,IAA6B;AAChD,IAAM,4BAAY,IAAI,IAAgB;AACtC,IAAI,WAA8B,CAAC;AAEnC,SAAS,OAAO;CACd,WAAW,MAAM,KAAK,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,EAAE,SAAS,QAAQ,EAAE,SAAS,IAAI;CACzF,UAAU,SAAS,MAAM,EAAE,CAAC;AAC9B;;;;;;;AAQA,SAAgB,cAAc,KAAkC;CAC9D,OAAO,IAAI,IAAI,IAAI,GAAG;CACtB,KAAK;CACL,aAAa;EACX,IAAI,OAAO,IAAI,IAAI,EAAE,MAAM,KAAK;GAC9B,OAAO,OAAO,IAAI,EAAE;GACpB,KAAK;EACP;CACF;AACF;AAEA,SAAgB,sBAAyC;CACvD,QAAA,GAAOC,MAAAA,qBAAAA,EACJ,OAAO;EACN,UAAU,IAAI,EAAE;EAChB,aAAa,UAAU,OAAO,EAAE;CAClC,SACM,gBACA,QACR;AACF;;;;;;AChCA,SAAgB,UACd,GACA,QACA,OACM;CACN,IAAI,EAAE,WAAW,GAAG;CACpB,EAAE,eAAe;CACjB,EAAE,gBAAgB;CAClB,MAAM,SAAS,EAAE;CACjB,MAAM,SAAS,EAAE;CACjB,MAAM,SAAS,EAAE;CACjB,MAAM,KAAK,EAAE;CACb,IAAI;EACF,OAAO,kBAAkB,EAAE;CAC7B,QAAQ,CAAC;CACT,MAAM,QAAQ,OAAqB;EACjC,IAAI,GAAG,cAAc,IAAI;EACzB,OAAO,GAAG,UAAU,QAAQ,GAAG,UAAU,QAAQ,EAAE;CACrD;CACA,MAAM,MAAM,OAAqB;EAC/B,IAAI,GAAG,cAAc,IAAI;EACzB,OAAO,oBAAoB,eAAe,IAAqB;EAC/D,OAAO,oBAAoB,aAAa,EAAmB;EAC3D,OAAO,oBAAoB,iBAAiB,EAAmB;EAC/D,IAAI;GACF,OAAO,sBAAsB,EAAE;EACjC,QAAQ,CAAC;EACT,QAAQ,EAAE;CACZ;CACA,OAAO,iBAAiB,eAAe,IAAqB;CAC5D,OAAO,iBAAiB,aAAa,EAAmB;CACxD,OAAO,iBAAiB,iBAAiB,EAAmB;AAC9D;;ACtCA,SAAgB,YAAY,OAA0C;CACpE,IAAI,SAAS,QAAQ,MAAM,KAAK,GAAG,OAAO;CAC1C,IAAI,QAAQ,KAAM,OAAO,GAAG,MAAM;CAClC,IAAI,QAAQ,KAAa,OAAO,IAAI,QAAQ,IAAA,CAAM,QAAQ,CAAC,EAAE;CAC7D,OAAO,IAAI,QAAQ,MAAO,IAAA,CAAM,QAAQ,CAAC,EAAE;AAC7C;AAEA,SAAgB,eAAe,IAAuC;CACpE,IAAI,MAAM,QAAQ,MAAM,EAAE,GAAG,OAAO;CACpC,IAAI,KAAK,KAAM,OAAO,GAAG,KAAK,MAAM,EAAE,EAAE;CACxC,IAAI,KAAK,KAAQ,OAAO,IAAI,KAAK,IAAA,CAAM,QAAQ,CAAC,EAAE;CAClD,OAAO,IAAI,KAAK,IAAA,CAAQ,QAAQ,CAAC,EAAE;AACrC;AAEA,SAAgB,YAAY,IAAoB;CAC9C,MAAM,IAAI,IAAI,KAAK,EAAE;CACrB,MAAM,KAAK,GAAW,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG;CACzD,OAAO,GAAG,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,gBAAgB,GAAG,CAAC;AACjG;AAEA,SAAgB,WAAW,KAAqB;CAC9C,IAAI,OAAO,gBAAgB,aAAa,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;CAC7E,OAAO,IAAI;AACb;AAMA,SAAgB,aAAa,MAAwE;CACnG,IAAI,QAAQ,MAAM,OAAO,EAAE,IAAI,MAAM;CACrC,MAAM,IAAI,KAAK,KAAK;CACpB,IAAI,CAAC,KAAM,EAAE,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,OAAO,MAAM,OAAO,EAAE,IAAI,MAAM;CAC7E,IAAI;EACF,OAAO;GAAE,IAAI;GAAM,OAAO,KAAK,MAAM,CAAC;EAAE;CAC1C,QAAQ;EACN,OAAO,EAAE,IAAI,MAAM;CACrB;AACF;AAEA,SAAgB,MAAM,GAAW,KAAa,KAAqB;CACjE,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC;AACvC;;AAGA,SAAgB,gBAAgB,OAA2B,OAAO,GAAuB;CACvF,IAAI,CAAC,OAAO,OAAO,KAAA;CAEnB,MAAM,OADQ,MAAM,MAAM,IAAI,CAAC,CAAC,QAAQ,MAAM,sBAAsB,KAAK,CAAC,CAC7D,CAAA,CAAM;CACnB,IAAI,CAAC,MAAM,OAAO,KAAA;CAClB,MAAM,IAAI,KAAK,MAAM,oCAAoC;CACzD,IAAI,CAAC,GAAG,OAAO,KAAA;CACf,OAAO,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE;AACpC;AAEA,IAAI,MAAM;AACV,IAAa,UAAU,SAAS,OAAe,GAAG,SAAS,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,KAAK,MAAA,CAAO,SAAS,EAAE;;AC/CxG,IAAa,mBAAA,GAAkBC,MAAAA,cAAAA,CAAoC;CAAE,YAAY;CAAM,WAAW;AAAK,CAAC;AAExG,IAAa,4BAAA,GAAiDC,MAAAA,WAAAA,CAAW,eAAe;;ACSxF,SAAgB,YAAY,EAAE,GAAG,GAAG,OAAO,WAA6B;CACtE,MAAM,OAAA,GAAMC,MAAAA,OAAAA,CAAuB,IAAI;CACvC,MAAM,EAAE,cAAc,mBAAmB;CACzC,MAAM,CAAC,KAAK,WAAA,GAAUC,MAAAA,SAAAA,CAAS;EAAE,MAAM;EAAG,KAAK;CAAE,CAAC;CAElD,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,MAAM,IAAI,GAAG,sBAAsB;EACnC,OAAO;GACL,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,aAAa,EAAE,QAAQ,CAAC,CAAC;GAC9D,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC;EACjE,CAAC;EACD,GAAI,cAAc,QAAQ,CAAC,EAA+B,MAAM;CAClE,GAAG,CAAC,GAAG,CAAC,CAAC;CAET,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,UAAU,MAAa;GAC3B,IAAI,IAAI,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC,SAAS,IAAI,OAAO,GAAG,QAAQ;EACtE;EACA,MAAM,SAAS,MAAqB;GAClC,IAAI,EAAE,QAAQ,UAAU;IACtB,EAAE,gBAAgB;IAClB,QAAQ;GACV;EACF;EACA,MAAM,IAAI,iBAAiB;GACzB,OAAO,iBAAiB,eAAe,QAAQ,IAAI;GACnD,OAAO,iBAAiB,WAAW,OAAO,IAAI;GAC9C,OAAO,iBAAiB,QAAQ,OAAO;EACzC,CAAC;EACD,aAAa;GACX,aAAa,CAAC;GACd,OAAO,oBAAoB,eAAe,QAAQ,IAAI;GACtD,OAAO,oBAAoB,WAAW,OAAO,IAAI;GACjD,OAAO,oBAAoB,QAAQ,OAAO;EAC5C;CACF,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,aAAa,MAA2B;EAC5C,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;EAClD,EAAE,eAAe;EACjB,MAAM,UAAU,MAAM,KAAK,IAAI,SAAS,iBAAoC,qCAAqC,KAAK,CAAC,CAAC;EACxH,MAAM,OAAO,IAAI,SAAS,YAAY;EAGtC,SAFU,QAAQ,QAAQ,KAAK,aACT,KAAK,EAAE,QAAQ,cAAc,IAAI,MAAM,QAAQ,UAAU,QAAQ,OACvF,EAAM,MAAM;CACd;CAEA,MAAM,OACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAU;EAAK,WAAU;EAAW,MAAK;EAAO,OAAO;EAAgB;EAAW,gBAAgB,MAAM,EAAE,eAAe;EACtH,UAAA,MAAM,KAAK,IAAI,MACd,GAAG,YACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAa,WAAU,eAAgB,GAA7B,CAA6B,IACrC,GAAG,SACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAA,UAAc,GAAG,OAAY,GAAnB,CAAmB,IAE7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;GAEE,MAAK;GACL,MAAK;GACL,WAAU;GACV,UAAU,GAAG;GACb,eAAe;IACb,QAAQ;IACR,GAAG,WAAW;GAChB;GATF,UAAA,CAWG,GAAG,OACH,GAAG,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAiB,UAAA,GAAG;GAAW,CAAA,CACrD;EAZD,GAAA,CAYC,CAEZ;CACG,CAAA;CAEP,OAAO,aAAA,GAAYC,UAAAA,aAAAA,CAAa,MAAM,SAAS,IAAI;AACrD;;AAGA,SAAgB,iBAAiB;CAC/B,MAAM,CAAC,MAAM,YAAA,GAAWD,MAAAA,SAAAA,CAA6D,IAAI;CACzF,MAAM,QAAQ,GAAsE,UAAsB;EACxG,EAAE,iBAAiB;EACnB,QAAQ;GAAE,GAAG,EAAE;GAAS,GAAG,EAAE;GAAS;EAAM,CAAC;CAC/C;CACA,MAAM,cAAc,QAAQ,IAAI;CAEhC,OAAO;EAAE;EAAM;EAAO,SADN,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAa,GAAG,KAAK;GAAG,GAAG,KAAK;GAAG,OAAO,KAAK;GAAO,SAAS;EAAQ,CAAA,IAAI;CACpE;AAChC;;ACpGA,SAAS,IAAI,EAAE,OAAO,IAAI,OAAO,WAAW,YAAiD;CAC3F,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,OAAO;EACP,QAAQ;EACR,SAAQ;EACR,MAAK;EACL,QAAO;EACP,aAAa;EACb,eAAc;EACd,gBAAe;EACf,eAAa,QAAQ,KAAA,IAAY;EACjC,MAAM,QAAQ,QAAQ,KAAA;EACX;EACX,OAAO;GAAE,MAAM;GAAQ,SAAS;EAAQ;EAZ1C,UAAA,CAcG,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAQ,MAAa,CAAA,GAC9B,QACE;;AAET;AAEA,IAAa,eAAe,MAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,uBAAwB,CAAA,GAChC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAkC,MAAK;CAAgB,CAAA,CAC5D;;AAGP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAM,GAAE;GAAM,OAAM;GAAI,QAAO;GAAK,IAAG;EAAK,CAAA;EACpD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAO,GAAE;GAAM,OAAM;GAAI,QAAO;GAAI,IAAG;EAAO,CAAA;EACtD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,cAAe,CAAA;CACpB;;AAGP,IAAa,aAAa,MACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;AAC3B,CAAA;AAGP,IAAa,YAAY,MACvB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;CAAK,CAAA,GAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,8GAA+G,CAAA,CACpH;;AAGP,IAAa,aAAa,MACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAM,GAAE;GAAM,MAAK;EAAgB,CAAA;EACrD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAI,GAAE;GAAM,MAAK;EAAgB,CAAA;EACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAO,GAAE;GAAM,MAAK;EAAgB,CAAA;CACnD;;AAGP,IAAa,aAAa,MACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;CAAO,CAAA,GAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,oBAAqB,CAAA,CAC1B;;AASP,IAAa,eAAe,MAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,0BAA2B,CAAA,GACnC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,eAAgB,CAAA,CACrB;;AAGP,IAAa,YAAY,MACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,iBAAkB,CAAA;AACvB,CAAA;AAGP,IAAa,aAAa,MACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,kDAAmD,CAAA;AACxD,CAAA;AAGP,IAAa,aAAa,MACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CAAK,OAAO,EAAE,QAAQ;CAAI,QAAQ,EAAE,QAAQ;CAAI,SAAQ;CAAY,OAAO;EAAE,MAAM;EAAQ,SAAS;CAAQ;CAAG,eAAA;CAA/G,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;EAAI,MAAK;CAAyB,CAAA,GAC1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAmC,QAAO;EAAO,aAAY;EAAM,eAAc;CAAS,CAAA,CAC/F;;AAGP,IAAa,YAAY,MACvB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CAAK,OAAO,EAAE,QAAQ;CAAI,QAAQ,EAAE,QAAQ;CAAI,SAAQ;CAAY,OAAO;EAAE,MAAM;EAAQ,SAAS;CAAQ;CAAG,eAAA;CAA/G,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAqB,MAAK;EAAwB,CAAA;EAC1D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAW,QAAO;GAAO,aAAY;GAAM,eAAc;EAAS,CAAA;EAC1E,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAI,GAAE;GAAM,MAAK;EAAQ,CAAA;CACxC;;AAGP,IAAa,YAAY,MACvB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CAAK,OAAO,EAAE,QAAQ;CAAI,QAAQ,EAAE,QAAQ;CAAI,SAAQ;CAAY,OAAO;EAAE,MAAM;EAAQ,SAAS;CAAQ;CAAG,eAAA;CAA/G,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAI,GAAE;GAAI,MAAK;EAAwB,CAAA;EACzD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAa,QAAO;GAAO,aAAY;GAAM,eAAc;EAAS,CAAA;EAC5E,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,IAAG;GAAI,IAAG;GAAM,GAAE;GAAM,MAAK;EAAQ,CAAA;CAC1C;;AAGP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;CAAO,CAAA,GAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,mBAAoB,CAAA,CACzB;;AAGP,IAAa,kBAAkB,MAC7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAM,OAAM;GAAK,QAAO;GAAK,IAAG;EAAK,CAAA;EACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,YAAa,CAAA;EACrB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAM,OAAM;GAAK,QAAO;GAAI,MAAK;GAAe,QAAO;GAAO,SAAQ;EAAO,CAAA;CACxF;;AAGP,IAAa,iBAAiB,MAC5B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAI,GAAE;GAAM,OAAM;GAAK,QAAO;GAAK,IAAG;EAAK,CAAA;EACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,cAAe,CAAA;EACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,GAAE;GAAM,GAAE;GAAM,OAAM;GAAM,QAAO;GAAK,MAAK;GAAe,QAAO;GAAO,SAAQ;EAAO,CAAA;CAC5F;;AAGP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAI,GAAE;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;CAAK,CAAA,GACnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAI,GAAE;EAAM,OAAM;EAAI,QAAO;EAAI,IAAG;EAAK,MAAK;EAAe,QAAO;EAAO,SAAQ;CAAO,CAAA,CAC/F;;AAGP,IAAa,gBAAgB,MAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,cAAe,CAAA;AACpB,CAAA;AAGP,IAAa,gBAAgB,MAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAI,GAAE;EAAI,OAAM;EAAK,QAAO;EAAK,IAAG;CAAK,CAAA;AAC9C,CAAA;AAGP,IAAa,eAAe,MAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAI,GAAE;EAAI,OAAM;EAAI,QAAO;EAAI,IAAG;CAAK,CAAA,GAC/C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA,CAC5B;;AAGP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAI,GAAE;EAAM,OAAM;EAAI,QAAO;EAAI,IAAG;CAAK,CAAA,GACjD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,uCAAwC,CAAA,CAC7C;;AAGP,IAAa,cAAc,EAAE,IAAI,GAAG,QAClC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;CAAK,OAAO,EAAE,QAAQ;CAAI,QAAQ,EAAE,QAAQ;CAAI,SAAQ;CAAY,OAAO;EAAE,MAAM;EAAQ,SAAS;CAAQ;CAAG,eAAA;CAC7G,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,IAAG;EAAI,IAAG;EAAI,GAAE;EAAI,MAAM,KAAK,0BAA0B;EAAQ,QAAQ,KAAK,0BAA0B;EAAgB,aAAY;CAAO,CAAA;AAChJ,CAAA;AASP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAe,QAAO;EAAoB,aAAY;CAAO,CAAA;AAClE,CAAA;AAGP,IAAa,cAAc,MACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAgB,QAAO;CAAyB,CAAA;AACrD,CAAA;AAGP,IAAa,gBAAgB,MAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,8CAA+C,CAAA;AACpD,CAAA;AAGP,IAAa,eAAe,MAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,GAAE;EAAM,GAAE;EAAM,OAAM;EAAK,QAAO;EAAK,IAAG;CAAK,CAAA,GACrD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,sBAAuB,CAAA,CAC5B;;AAGP,IAAa,eAAe,MAC1B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CACP,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,iEAAkE,CAAA;AACvE,CAAA;AAGP,IAAa,mBAAmB,MAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;CAAK,GAAI;CAAT,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;EAAS,IAAG;EAAI,IAAG;EAAI,IAAG;EAAM,IAAG;CAAK,CAAA,GACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,iFAAkF,CAAA,CACvF;;AAgBP,IAAa,gBAAgB,MAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;CAAK,GAAI;CAAG,MAAM,EAAE,QAAQ;CAC1B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,wDAAyD,CAAA;AAC9D,CAAA;;;;;;ACtOP,SAAgB,cAAc,OAAsC;CAClE,MAAM,QAAQ,MACX,MAAM,GAAG,CAAC,CACV,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAClC,OAAO,OAAO;CACjB,IAAI,CAAC,MAAM,QAAQ,OAAO;CAC1B,MAAM,IAAoB;EAAE,KAAK;EAAI,YAAY;EAAO,MAAM;EAAO,MAAM;EAAO,OAAO;EAAO,KAAK;CAAM;CAC3G,KAAK,MAAM,KAAK,OACd,IAAI,MAAM,UAAU,MAAM,aAAa,MAAM,OAAO,EAAE,aAAa;MAC9D,IAAI,MAAM,SAAS,MAAM,UAAU,MAAM,WAAW,EAAE,OAAO;MAC7D,IAAI,MAAM,WAAW,EAAE,OAAO;MAC9B,IAAI,MAAM,SAAS,EAAE,QAAQ;MAC7B,IAAI,MAAM,SAAS,MAAM,YAAY,MAAM,OAAO,EAAE,MAAM;MAC1D,EAAE,MAAM;CAEf,OAAO,EAAE,MAAM,IAAI;AACrB;AAEA,SAAgB,gBAAgB,GAAkB,GAA4B;CAC5E,MAAM,OAAO,EAAE,OAAO,GAAA,CAAI,YAAY;CAEtC,MAAM,QAAQ,EAAE,QAAQ,GAAA,CAAI,YAAY,CAAC,CAAC,QAAQ,eAAe,EAAE;CACnE,IAAI,QAAQ,EAAE,OAAO,SAAS,EAAE,KAAK,OAAO;CAC5C,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,OAAO;CACzD,IAAI,EAAE,YACA;MAAA,EAAE,EAAE,WAAW,EAAE,UAAU,OAAO;CAAA,OAEtC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,OAAO;CAE3D,OAAO;AACT;AAEA,SAAgB,eAAe,OAAuB;CACpD,MAAM,QAAQ,OAAO,cAAc,eAAe,qBAAqB,KAAK,UAAU,YAAY,UAAU,SAAS;CACrH,OAAO,MACJ,MAAM,GAAG,CAAC,CACV,KAAK,MAAM;EACV,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY;EAC/B,IAAI,UAAU,MAAM,UAAU,MAAM,SAAS,MAAM,QAAQ,OAAO;EAClE,IAAI,SAAS,MAAM,SAAS,OAAO;EACnC,IAAI,UAAU,MAAM,SAAS,MAAM,WAAW,OAAO;EACrD,OAAO,EAAE,KAAK,CAAC,CAAC,WAAW,IAAI,EAAE,KAAK,CAAC,CAAC,YAAY,IAAI,EAAE,KAAK;CACjE,CAAC,CAAC,CACD,KAAK,QAAQ,KAAK,GAAG;AAC1B;;AC7BA,SAAS,YAAY;CACnB,OAAO,YAAY,MAAM;EACvB,IAAI,SAAS;EACb,IAAI,WAAW;EACf,KAAK,MAAM,KAAK,EAAE,SAChB,IAAI,EAAE,UAAU,SAAS,UAAU,EAAE;OAChC,IAAI,EAAE,UAAU,QAAQ,YAAY,EAAE;EAE7C,OAAO,SAAS,MAAS;CAC3B,CAAC;AACH;AAEA,SAAgB,YAAY,EAAE,UAAwB;CACpD,MAAM,MAAM,UAAU;CACtB,MAAM,IAAI,YAAY;CACtB,MAAM,SAAS,UAAU;CACzB,MAAM,SAAS,KAAK,MAAM,SAAS,GAAM;CACzC,MAAM,WAAW,SAAS;CAC1B,MAAM,OAAO,eAAe;CAC5B,MAAM,WAAW,EAAE,oBAAoB,IAAI;CAE3C,MAAM,UAAU,OAAe,EAAE,eAAe,EAAE,aAAa,GAAG,CAAC;CAEnE,MAAM,wBAAwB,MAA0B;EACtD,IAAI,EAAE,SAAS,cAAc,EAAE,WAAW;EAE1C,IADU,EAAE,OACN,QAAQ,qBAAqB,GAAG;EACtC,MAAM,QAAQ,EAAE,GAAG,EAAE,SAAS;EAC9B,UACE,IACC,IAAI,OAAO;GACV,YAAY,SAAS,EACnB,UAAU;IACR,GAAG;IACH,GAAG,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,QAAQ,IAAI,OAAO,aAAa,EAAE;IAChE,GAAG,MAAM,MAAM,IAAI,IAAI,GAAG,OAAO,cAAc,EAAE;GACnD,EACF,CAAC;EACH,SACM,EAAE,eAAe,CAAC,CAAC,CAC3B;CACF;CAEA,MAAM,YAAY,MAA2B;EAC3C,IAAI,EAAE,QAAQ,gBAAgB,EAAE,QAAQ,aAAa;EACrD,MAAM,MAAM,OAAO,KAAK,MAAM,EAAE,EAAE;EAElC,MAAM,OAAO,KADH,IAAI,QAAQ,EAAE,WACN,KAAK,EAAE,QAAQ,eAAe,IAAI,MAAM,IAAI,UAAU,IAAI;EAC5E,OAAO,IAAI;EACX,MAAM,OAAQ,EAAE,cAAc,YAAY;EAC1C,iBAAkB,KAAK,cAAc,oBAAoB,KAAK,GAAG,CAAC,EAAyB,MAAM,CAAC;CACpG;CAEA,MAAM,YAAY,MAAwB;EACxC,MAAM,IAAK,EAAE,cAA8B,sBAAsB;EACjE,KAAK,KAAK;GAAE,SAAS,EAAE,QAAQ;GAAK,SAAS,EAAE,SAAS;EAAE,GAAG;GAC3D,EACE,QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAiB,OAAO,EAAE,SAAS,cAAc;MAAG,UAAA;KAE9D,CAAA;KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAE5B;MACE;OAAC;OAAY;OAAY;MAA6B;MACtD;OAAC;OAAU;OAAgB;MAAgB;MAC3C;OAAC;OAAS;OAAe;MAAe;KAC1C,CAAC,CACD,KAAK,CAAC,MAAM,MAAM,WAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAEE,WAAW,eAAe,EAAE,SAAS,OAAO,YAAY;MACjD;MACP,cAAY;MACZ,gBAAc,EAAE,SAAS;MACzB,eAAe;OACb,EAAE,eAAe,EAAE,KAAK,CAAC;OACzB,YAAY,SAAS,EAAE,WAAW,MAAM,CAAC;OACzC,KAAK,MAAM;MACb;MAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,CAAO,CAAA;KACD,GAZD,IAYC,CACT;IACE;GAET,CAAA,EAAA;GACA,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAiB,gBAAgB,EAAE,eAAe,EAAE,OAAO,SAAS,CAAC;IAAG,MAAM,EAAE,UAAU,WAAW,MAAM;GAAG;GACvH;IAAE,OAAO;IAAgB,gBAAgB,EAAE,eAAe,EAAE,OAAO,QAAQ,CAAC;IAAG,MAAM,EAAE,UAAU,UAAU,MAAM;GAAG;GACpH;IAAE,OAAO;IAAe,gBAAgB,EAAE,eAAe,EAAE,OAAO,OAAO,CAAC;IAAG,MAAM,EAAE,UAAU,SAAS,MAAM;GAAG;GACjH,EAAE,WAAW,KAAK;GAClB,GAAG,OAAO,KAAK,OAAO;IAAE,OAAO,QAAQ,EAAE;IAAS,gBAAgB,OAAO,EAAE,EAAE;GAAE,EAAE;GACjF,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAY,gBAAgB,OAAO,UAAU;IAAG,MAAM;GAAK;EACtE,CAAC;CACH;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAmB,kBAAgB,EAAE,SAAS,cAAc,CAAC,EAAE;EAAW,eAAe;EAAsB,gBAAgB,MAAM;GAClJ,IAAI,CAAE,EAAE,OAAuB,QAAQ,QAAQ,GAAG,YAAY,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC;EACpG;EAFA,UAAA;GAGE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,IAAI,QAAQ,uBACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,gBAAc,EAAE;MAChB,OAAO,8CAA8C,WAAW,KAAK,GAAG;MACxE,cAAW;MACX,eAAe,YAAY,SAAS,EAAE,cAAc,CAAC,EAAE,aAAa,CAAC;MAErE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,CAAc,CAAA;KACR,CAAA;KAET,IAAI,QAAQ,uBACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,gBAAc,EAAE;MAChB,OAAM;MACN,cAAW;MACX,eAAe,YAAY,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;MAEjE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,CAAa,CAAA;KACP,CAAA;KAEV,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;IACxB;;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAU,MAAK;IAAU,cAAW;IAAS,WAAW;IACpE,UAAA,OAAO,KAAK,MACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAEE,MAAK;KACL,kBAAgB,EAAE;KAClB,WAAU;KACV,iBAAe,EAAE,gBAAgB,EAAE;KACnC,UAAU,EAAE,gBAAgB,EAAE,KAAK,IAAI;KACvC,eAAe,OAAO,EAAE,EAAE;KAEzB,UAAA,EAAE;IACG,GATD,EAAE,EASD,CACT;GACE,CAAA;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,WAAU,aAAc,CAAA;GAC7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;MACI,SAAS,KAAK,WAAW,MACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAe,eAAe,OAAO,SAAS;MAArF,UAAA,CACG,SAAS,KACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA,GACrB,MACG;MAEP,CAAA,GAAA,WAAW,KACV,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA,GACpB,QACG;MAEF,CAAA,CAAA;;KAEV,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAW,eAAe,EAAE,gBAAgB,aAAa,YAAY;MACrE,OAAM;MACN,cAAW;MACX,eAAe,OAAO,UAAU;MAEhC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA;KACL,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAiC,cAAW;MAAiC,SAAS;MAC3H,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KACN,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAO,EAAE,YAAY,YAAY;MACjC,cAAY,EAAE,YAAY,YAAY;MACtC,eAAe,YAAY,SAAS;OAAE,WAAW,CAAC,EAAE;OAAW,WAAW;MAAM,CAAC;MAEjF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,CAAe,CAAA;KACT,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAO,EAAE,YAAY,iBAAiB;MACtC,cAAY,EAAE,YAAY,iBAAiB;MAC3C,eAAe,YAAY,SAAS;OAAE,WAAW,CAAC,EAAE;OAAW,WAAW;MAAM,CAAC;MAEhF,UAAA,EAAE,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,CAAc,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,CAAe,CAAA;KAC1C,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAO,WAAW,mBAAmB,eAAe,QAAQ,EAAE,KAAK;MACnE,cAAW;MACX,eAAe,EAAE,QAAQ,KAAK;MAE9B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KACN,CAAA;IACL;;GACJ,KAAK;EACH;;AAET;;ACjOA,IAAa,kBAAkC;CAC7C;EAAE,IAAI;EAAa,MAAM;EAAa,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CACvG;EAAE,IAAI;EAAa,MAAM;EAAkB,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CAC5G;EAAE,IAAI;EAAa,MAAM;EAAsB,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CAChH;EAAE,IAAI;EAAkB,MAAM;EAAqB,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CACpH;EAAE,IAAI;EAAc,MAAM;EAAsB,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CACjH;EAAE,IAAI;EAAoB,MAAM;EAA4B,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAK,UAAU;EAAU,OAAO;CAAK;CAC/H;EAAE,IAAI;EAAW,MAAM;EAAW,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAO,UAAU;EAAU,OAAO;CAAK;CACvG;EAAE,IAAI;EAAe,MAAM;EAAe,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CAC3G;EAAE,IAAI;EAAa,MAAM;EAAa,OAAO;EAAK,QAAQ;EAAM,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CACxG;EAAE,IAAI;EAAY,MAAM;EAAY,OAAO;EAAK,QAAQ;EAAM,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CACtG;EAAE,IAAI;EAAe,MAAM;EAAkB,OAAO;EAAM,QAAQ;EAAM,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CAChH;EAAE,IAAI;EAAiB,MAAM;EAAiB,OAAO;EAAK,QAAQ;EAAM,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK;CAChH;EAAE,IAAI;EAAU,MAAM;EAAU,OAAO;EAAM,QAAQ;EAAK,KAAK;EAAG,UAAU;CAAU;CACtF;EAAE,IAAI;EAAY,MAAM;EAAY,OAAO;EAAM,QAAQ;EAAK,KAAK;EAAG,UAAU;CAAU;CAC1F;EAAE,IAAI;EAAW,MAAM;EAAiB,OAAO;EAAM,QAAQ;EAAM,KAAK;EAAG,UAAU;CAAU;AACjG;AAEA,IAAa,gBAAgB;AAqB7B,IAAM,MAAM;AAGZ,SAAgB,WAAW,QAAwC;CACjE,OAAO,CAAC,GAAG,iBAAiB,GAAG,MAAM;AACvC;AAEA,IAAa,aAAA,GAAYE,QAAAA,OAAAA,CAAoB,CAAC,EAAE,KAAK,SAAS;CAC5D,UAAU;CACV,OAAO;CACP,QAAQ;CACR,KAAK;CACL,MAAM;CACN,WAAW;CACX,WAAW;CACX,OAAO;CACP,eAAe,CAAC;CAChB,MAAM,UAAU;EACd,IAAI,KAAK;EACT,QAAQ;CACV;CACA,cAAc,OAAO;EACnB,IAAI,OAAA,cACF,IAAI;GAAE,UAAU;GAAI,OAAO;EAAM,CAAC;OAC7B;GACL,MAAM,IAAI,WAAW,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,MAAM,EAAE,OAAO,EAAE;GACjE,IAAI,CAAC,GAAG;GACR,IAAI;IACF,UAAU;IACV,OAAO,EAAE;IACT,QAAQ,EAAE;IACV,KAAK,EAAE;IACP,OAAO,CAAC,CAAC,EAAE;IACX,WAAW;GACb,CAAC;EACH;EACA,QAAQ;CACV;CACA,cAAc;EACZ,MAAM,EAAE,OAAO,QAAQ,cAAc,IAAI;EACzC,IAAI;GAAE,OAAO;GAAQ,QAAQ;GAAO,WAAW,CAAC;EAAU,CAAC;EAC3D,QAAQ;CACV;CACA,mBAAmB,MAAM;EAEvB,IAAI,EAAE,eAAe,CAAC,GADT,IAAI,CAAC,CAAC,cAAc,QAAQ,MAAM,EAAE,OAAO,EAAE,EACjC,GAAM;GAAE,GAAG;GAAG,UAAU;EAAS,CAAC,EAAE,CAAC;EAC9D,QAAQ;CACV;CACA,qBAAqB,OAAO;EAC1B,IAAI,EAAE,eAAe,IAAI,CAAC,CAAC,cAAc,QAAQ,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;EACrE,IAAI,IAAI,CAAC,CAAC,aAAa,IAAI,IAAI,EAAE,UAAU,cAAc,CAAC;EAC1D,QAAQ;CACV;AACF,EAAE;AAEF,SAAS,UAAU;CACjB,MAAM,IAAI,UAAU,SAAS;CAY7B,cAAc,KAAK;EAVjB,UAAU,EAAE;EACZ,OAAO,EAAE;EACT,QAAQ,EAAE;EACV,KAAK,EAAE;EACP,MAAM,EAAE;EACR,WAAW,EAAE;EACb,WAAW,EAAE;EACb,OAAO,EAAE;EACT,eAAe,EAAE;CAEA,CAAI;AACzB;AAEA,SAAgB,gBAAsB;CACpC,MAAM,QAAQ,aAAwC,KAAK,IAAI;CAC/D,IAAI,OAAO,UAAU,SAAS,KAAK;AACrC;;;AC9FA,IAAa,gCAAgB,IAAI,QAAc;AAE/C,IAAa,eAAA,GAAcC,QAAAA,OAAAA,CAAsB,CAAC,EAAE,KAAK,SAAS;CAChE,UAAU;CACV,SAAS;CACT,YAAY;CACZ,eAAe;CACf,cAAc;CACd,YAAY;CACZ,aAAa;CACb,SAAS,MAAM,SAAS,UAAU;EAChC,IAAI,QAAQ,QAAQ;GAClB,IAAI,IAAI,KAAK;GACb,OAAO,KAAK,EAAE,aAAa,GAAG;IAC5B,cAAc,IAAI,CAAC;IACnB,IAAI,EAAE;GACR;EACF;EACA,IAAI;GACF,UAAU;GACV,eAAe,SAAS,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC;GACxD,aAAa,SAAS,IAAI,CAAC,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;EACtD,CAAC;CACH;CACA,QAAQ,YAAY;EAClB,IAAI,IAAI,CAAC,CAAC,YAAY,SAAS,IAAI,EAAE,QAAQ,CAAC;CAChD;CACA,gBAAgB,eAAe,IAAI,EAAE,WAAW,CAAC;CACjD,kBAAkB,IAAI,EAAE,cAAc,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;AAChE,EAAE;AAEF,SAAgB,YAAY,MAAY,UAAyB;CAC/D,IAAI,UAAU,cAAc,IAAI,IAAI;MAC/B,cAAc,OAAO,IAAI;CAC9B,YAAY,SAAS,EAAE,eAAe,YAAY,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAClF;AAEA,SAAgB,iBAAuB;CACrC,YAAY,SAAS,EAAE,YAAY,YAAY,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;AAC5E;;ACnCA,SAAgB,OAAO,GAAkB;CACvC,IAAI,MAAM,MAAM,OAAO;CACvB,MAAM,IAAI,OAAO;CACjB,IAAI,MAAM,YAAY,MAAM,YAAY,OAAO;CAC/C,IAAI,MAAM,YAAY,OAAO;CAC7B,IAAI;EACF,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO;EAC7B,IAAI,YAAY,OAAO,CAAC,KAAK,EAAE,aAAa,WAAW,OAAO;EAC9D,IAAI,aAAa,KAAK,OAAO;EAC7B,IAAI,aAAa,KAAK,OAAO;EAC7B,IAAI,aAAa,WAAW,aAAa,SAAS,OAAO;EACzD,IAAI,aAAa,MAAM,OAAO;EAC9B,IAAI,aAAa,QAAQ,OAAO;EAChC,IAAI,aAAa,OAAO,OAAO;EAC/B,IAAI,OAAO,SAAS,eAAe,aAAa,MAAM,OAAO;EAC7D,IAAI,OAAO,YAAY,eAAe,aAAa,SAAS,OAAO;CACrE,QAAQ,CAAC;CACT,OAAO;AACT;AAEA,SAAS,gBAAgB,GAAmB;CAC1C,IAAI;EACF,MAAM,QAAQ,OAAO,eAAe,CAAC;EACrC,IAAI,UAAU,MAAM,OAAO;EAC3B,MAAM,OAAO,OAAO,aAAa;EACjC,OAAO,OAAO,SAAS,YAAY,OAAO,OAAO;CACnD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,aAAa,GAAqB;CAChD,MAAM,IAAI,OAAO,CAAC;CAClB,OAAO,CAAC;EAAC;EAAU;EAAU;EAAU;EAAW;EAAa;EAAQ;CAAQ,CAAC,CAAC,SAAS,CAAC,KAAK,MAAM;AACxG;AAEA,SAAS,QAAQ,KAAU,KAAgF;CACzG,IAAI;EACF,OAAO;GAAE,IAAI;GAAM,OAAO,IAAI;EAAK;CACrC,SAAS,OAAO;EACd,OAAO;GAAE,IAAI;GAAO;EAAM;CAC5B;AACF;AAIA,SAAS,YAAY,GAAkB;CACrC,IAAI;EACF,MAAM,MAAM,SAAS,UAAU,SAAS,KAAK,CAAC;EAE9C,IADgB,WAAW,KAAK,GAC5B,GAAS,OAAO,SAAS,EAAE,QAAQ;EACvC,MAAM,IAAI,IAAI,MAAM,0DAA0D;EAC9E,MAAM,QAAQ,IAAI,MAAM,uCAAuC;EAC/D,MAAM,SAAS,IAAI,OAAO,QAAS,MAAM,EAAE,CAAC,WAAW,GAAG,IAAI,MAAM,KAAK,IAAI,MAAM,GAAG,KAAM;EAC5F,OAAO,GAAG,EAAE,QAAQ,KAAK;CAC3B,QAAQ;EACN,OAAO,GAAG,EAAE,QAAQ,YAAY;CAClC;AACF;AAEA,SAAgB,UAAU,GAAiB;CACzC,IAAI,EAAE,aAAa,GAAG;EACpB,MAAM,KAAK;EACX,IAAI,IAAI,GAAG;EACX,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG;EACvB,MAAM,MAAM,GAAG,aAAa,OAAO;EACnC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,GAAG;EACpD,OAAO;CACT;CACA,IAAI,EAAE,aAAa,GAAG,OAAO,IAAI,EAAE,eAAe,GAAG;CACrD,IAAI,EAAE,aAAa,GAAG,OAAO,OAAO,EAAE,eAAe,GAAG;CACxD,IAAI,EAAE,aAAa,GAAG,OAAO;CAC7B,IAAI,EAAE,aAAa,IAAI,OAAO;CAC9B,OAAO,EAAE;AACX;AAWA,IAAa,gBAAA,GAAeC,MAAAA,KAAAA,CAAK,SAAS,aAAa,EAAE,OAAO,eAAe,MAAM,QAAQ,KAA8B;CAEzH,QADU,OAAO,KACT,GAAR;EACE,KAAK,UAAU;GACb,MAAM,IAAI;GACV,IAAI,CAAC,cAAc,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAQ,CAAA;GACzC,MAAM,QAAQ,QAAQ,KAAK,EAAE,SAAS,MAAM,EAAE,MAAM,GAAG,GAAG,IAAI,MAAM;GACpE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAgB,UAAA,QAAQ,IAAI,IAAI,MAAM,KAAK,IAAI,MAAM;GAAS,CAAA;EACvF;EACA,KAAK,UACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAgB,UAAA,OAAO,GAAG,OAAO,EAAE,IAAI,OAAO,OAAO,KAAK;EAAQ,CAAA;EAC3F,KAAK,UACH,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CAAgC,OAAO,KAAK,GAAE,GAAO;;EAC9D,KAAK,WACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAiB,UAAA,OAAO,KAAK;EAAQ,CAAA;EAC9D,KAAK,aACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAkB,UAAA;EAAe,CAAA;EAC1D,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAa,UAAA;EAAU,CAAA;EAChD,KAAK,UACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAgB,UAAA,OAAO,KAAK;EAAQ,CAAA;EAC7D,KAAK,YACH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAY,UAAA;IAAO,CAAA;IAAC;IAAE,QAAQ,IAAI,KAAK,YAAY,KAAc;GAC7E;;EAEV,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,iBAAkB,MAAe,SAAS,CAAC,EAAQ,CAAA;EACnE,KAAK,UACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAgB,UAAA,OAAO,KAAK;EAAQ,CAAA;EAC7D,KAAK,SAAS;GACZ,MAAM,IAAI;GACV,IAAI,QAAQ,GAAG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,GAAG,EAAE,KAAK,IAAI,EAAE,UAAgB,CAAA;GAC7D,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,EAAE,SAAS,EAAE,MAAM,SAAS,EAAE,OAAO,IAAI,EAAE,QAAQ,GAAG,EAAE,KAAK,IAAI,EAAE,UAAU,EAAE,QAAQ,OAAO,EAAE,QAAQ,KAAW,CAAA;EACnI;EACA,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAS,MAAM,MAAgB,CAAA;EACxC,KAAK,WACH,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;GAAM;GAAS;GAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAc,UAAA;GAAqB,CAAA;GAAE;EAAU,EAAA,CAAA;EAC3F,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;GAAO,gBAAgB,KAAe;GAAE;GAAE;EAAW,EAAA,CAAA;EAC9D,KAAK;EACL,KAAK,cACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAc,KAAK;GAAoC;EAAQ,CAAA;EACxE,KAAK;EACL,KAAK,OACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD;GAAmB,MAAM;GAAsD;EAAQ,CAAA;EAChG,SACE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;GAAe,KAAK;GAAwB;EAAQ,CAAA;CAC/D;AACF,CAAC;AAED,SAAS,WAAW,IAA0B;CAC5C,IAAI;EACF,OAAO,GAAG;CACZ,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,aAAa,EAAE,KAAK,SAAqD;CAChF,MAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,UAAU,gBAAgB,GAAa;CACzE,MAAM,MAAM,QAAQ,KAAK,QAAQ;CACjC,MAAM,IAAI,IAAI,KAAM,IAAI,QAAmB;CAC3C,IAAI,QAAQ,GAAG,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EAAO;EAAK;EAAE;EAAE;CAAO,EAAA,CAAA;CAC7C,MAAM,QAAqB,CAAC;CAC5B,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG;CAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;EAC5B,IAAI,GAAG,MAAM,KAAK,IAAI;EACtB,MAAM,IAAI,QAAQ,KAAK,CAAC;EACxB,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAsB,OAAO,EAAE,KAAK,EAAE,QAAQ,KAAA;GAAW,OAAO,QAAQ;EAAI,GAAzD,CAAyD,CAAC;CAC1F;CACA,IAAI,IAAI,KAAK,MAAM,KAAK,KAAK;CAC7B,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EACG,IAAI,KAAK,SAAS,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA;IAA+B,SAAS,UAAU,OAAO;IAAG;IAAE;IAAE;GAAQ;EAAI,CAAA,IAAA;EAAK;EAAE;EAAM;CAClH,EAAA,CAAA;AAEV;AAEA,SAAS,kBAAkB,EAAE,MAAM,SAAwE;CACzG,MAAM,OAAO,gBAAgB,MAAM,QAAQ;CAC3C,IAAI,QAAQ,GAAG,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EAAO;EAAK;EAAE,KAAK;EAAK;CAAO,EAAA,CAAA;CACrD,MAAM,QAAqB,CAAC;CAC5B,IAAI,IAAI;CACR,IAAI;EACF,KAAK,MAAM,SAAS,gBAAgB,MAAM,KAAK,QAAQ,IAAI,KAAK,OAAO,GAAG;GACxE,IAAI,KAAK,GAAG;IACV,MAAM,KAAK,KAAK;IAChB;GACF;GACA,IAAI,GAAG,MAAM,KAAK,IAAI;GACtB,IAAI,gBAAgB,KAAK;IACvB,MAAM,CAAC,GAAG,KAAK;IACf,MAAM,KACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;MAAc,OAAO;MAAG,OAAO;KAAI,CAAA;KAAC;KAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;MAAc,OAAO;MAAG,OAAO;KAAI,CAAA;IAC1E,EAAA,GAFK,CAEL,CACR;GACF,OAAO,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAsB,OAAO;IAAO,OAAO;GAAI,GAA5B,CAA4B,CAAC;GAClE;EACF;CACF,QAAQ,CAAC;CACT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EACG;EAAK;EAAE,KAAK;EAAK;EAAG;EACpB;EACA;CACG,EAAA,CAAA;AAEV;AAEA,SAAS,cAAc,EAAE,KAAK,SAAyC;CACrE,MAAM,OAAO,gBAAgB,GAAG;CAChC,IAAI,QAAQ,GAAG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,SAAS,WAAW,QAAQ,KAAW,CAAA;CACpE,IAAI,OAAiB,CAAC;CACtB,IAAI;EACF,OAAO,OAAO,KAAK,GAAG;CACxB,QAAQ,CAAC;CACT,MAAM,QAAqB,CAAC;CAC5B,MAAM,MAAM;CACZ,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,GAAG,MAAM;EACnC,IAAI,GAAG,MAAM,KAAK,IAAI;EACtB,MAAM,IAAI,QAAQ,KAAK,CAAC;EACxB,MAAM,KACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAuB,UAAA,qBAAqB,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE;GAAS,CAAA;GAAC;GAAG,EAAE,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,OAAO,EAAE;IAAO,OAAO;GAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAc,UAAA;GAAS,CAAA;EACpL,EAAA,GAFK,CAEL,CACR;CACF,CAAC;CACD,IAAI,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;CACvC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EACG,SAAS,YAAY,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CAAgC,MAAK,GAAO;;EACjE;EACA;EACA;CACG,EAAA,CAAA;AAEV;AAEA,SAAgB,QAAQ,EAAE,QAAwB;CAChD,MAAM,QAAQ,aAAa,MAAM,EAAE,KAAK;CACxC,MAAM,eAAe;EACnB,YAAY,SAAS,CAAC,CAAC,eAAe,EAAE,aAAa,WAAW,CAAC;EACjE,YAAY,SAAS,CAAC,CAAC,OAAO,MAAM,IAAI;CAC1C;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EACE,WAAU;EACV,OAAM;EACN,oBAAoB,MAAM,IAAI;EAC9B,oBAAoB,MAAM,IAAI;EAC9B,UAAU,MAAM;GACd,EAAE,gBAAgB;GAClB,OAAO;EACT;EAEC,UAAA,UAAU,IAAI;CACX,CAAA;AAEV;AAaA,SAAS,eAAe,GAAoB;CAC1C,MAAM,MAAc,CAAC;CACrB,MAAM,IAAI,OAAO,CAAC;CAClB,MAAM,MAAM;CAEZ,IAAI,MAAM,SAAS,MAAM,OAAO;EAC9B,MAAM,UAAqB,CAAC;EAC5B,IAAI;GACF,IAAI,MAAM,OAAO,IAA+B,SAAS,KAAK,QAAQ,QAAQ,KAAK;IAAE;IAAK,OAAO;IAAK,SAAS;GAAK,CAAC,CAAC;QACjH,IAAsB,SAAS,QAAQ,QAAQ,KAAK,GAAG,CAAC;EAC/D,QAAQ,CAAC;EACT,IAAI,KAAK;GAAE,KAAK;GAAe,OAAO,IAAI,YAAY,SAAS,MAAM,KAAK;GAAG,SAAS;EAAK,CAAC;EAC5F,IAAI,KAAK;GAAE,KAAK;GAAQ,OAAO,IAAI;EAAK,CAAC;CAC3C;CAEA,IAAI,MAAM,WAAW,MAAM,cAAc;EACvC,MAAM,MAAM,IAAI;EAChB,IAAI,MAAM,KACR,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,SAAS,KAAK;GAC7C,MAAM,MAAM,KAAK,IAAI,KAAK,QAAQ,GAAG,IAAI;GACzC,IAAI,KAAK;IAAE,KAAK,IAAI,MAAM,KAAK,IAAI;IAAI,OAAO,IAAI,UAAU,KAAK,OAAO,GAAG;IAAG,SAAS;GAAK,CAAC;EAC/F;OAEA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;GAC5B,MAAM,IAAI,QAAQ,KAAK,CAAC;GACxB,IAAI,KAAK;IAAE,KAAK,OAAO,CAAC;IAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;GAAM,CAAC;EAC9D;CAEJ;CAEA,IAAI,aAAa,aAAa;EAC5B,EAAE,QAAQ,SAAS,GAAG,MAAM,IAAI,KAAK;GAAE,KAAK,OAAO,CAAC;GAAG,OAAO,EAAE,QAAQ,IAAI,SAAU,EAAU,KAAM,EAAU,KAAK,IAAI;EAAE,CAAC,CAAC;EAC7H,OAAO;CACT;CACA,IAAI,aAAa,WAAW;EAC1B,KAAK,IAAI,IAAI,EAAE,OAAO,KAAK,EAAE,KAAK,KAAK;GACrC,MAAM,IAAI,QAAQ,EAAE,QAAQ,CAAC;GAC7B,IAAI,KAAK;IAAE,KAAK,OAAO,CAAC;IAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;GAAM,CAAC;EAC9D;EACA,OAAO;CACT;CACA,IAAI,aAAa,UACf,OAAO,CACL;EAAE,KAAK;EAAO,OAAO,EAAE;CAAI,GAC3B;EAAE,KAAK;EAAS,OAAO,EAAE;CAAM,CACjC;CAGF,IAAI,QAA6B,CAAC;CAClC,IAAI;EACF,QAAQ,CAAC,GAAG,OAAO,oBAAoB,GAAG,GAAG,GAAG,OAAO,sBAAsB,GAAG,CAAC;CACnF,QAAQ,CAAC;CACT,KAAK,MAAM,QAAQ,OAAO;EACxB,KAAK,MAAM,WAAW,MAAM,iBAAiB,OAAO,SAAS,YAAY,QAAQ,KAAK,IAAI,GAAG;EAC7F,IAAI;EACJ,IAAI;GACF,OAAO,OAAO,yBAAyB,KAAK,IAAI;EAClD,QAAQ,CAAC;EACT,MAAM,MAAM,OAAO,SAAS,WAAW,KAAK,SAAS,IAAI;EACzD,IAAI,QAAQ,SAAS,QAAQ,KAAK,OAAO,EAAE,WAAW,OAAO;GAC3D,MAAM,IAAI,KAAK;GACf,IAAI,KAAK;IAAE;IAAK,cAAc,EAAE,KAAK,GAAG;IAAG,KAAK,CAAC,KAAK;GAAW,CAAC;EACpE,OAAO;GACL,MAAM,IAAI,QAAQ,KAAK,IAAI;GAC3B,IAAI,KAAK;IAAE;IAAK,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE;IAAO,KAAK,OAAO,CAAC,KAAK,aAAa;GAAM,CAAC;EACzF;CACF;CAEA,IAAI,MAAM,SAAS;EACjB,IAAI,CAAC,MAAM,SAAS,OAAO,GAAG,IAAI,KAAK;GAAE,KAAK;GAAS,OAAO,IAAI;GAAO,KAAK;EAAK,CAAC;EACpF,IAAI,CAAC,MAAM,SAAS,SAAS,GAAG,IAAI,KAAK;GAAE,KAAK;GAAW,OAAO,IAAI;GAAS,KAAK;EAAK,CAAC;CAC5F;CAGA,IAAI,MAAM,YAAY,MAAM,QAC1B,IAAI;EACF,IAAI,QAAQ,OAAO,eAAe,GAAG;EACrC,MAAM,OAAO,IAAI,IAAI,MAAM,IAAI,MAAM,CAAC;EACtC,OAAO,SAAS,UAAU,OAAO,WAAW;GAC1C,KAAK,MAAM,QAAQ,OAAO,oBAAoB,KAAK,GAAG;IACpD,IAAI,KAAK,IAAI,IAAI,KAAK,SAAS,eAAe;IAC9C,MAAM,IAAI,OAAO,yBAAyB,OAAO,IAAI;IACrD,IAAI,GAAG,KAAK;KACV,KAAK,IAAI,IAAI;KACb,MAAM,IAAI,EAAE;KACZ,IAAI,KAAK;MAAE,KAAK;MAAM,cAAc,EAAE,KAAK,GAAG;MAAG,KAAK;KAAK,CAAC;IAC9D;GACF;GACA,QAAQ,OAAO,eAAe,KAAK;EACrC;CACF,QAAQ,CAAC;CAGX,IAAI;EACF,MAAM,QAAQ,OAAO,eAAe,GAAG;EACvC,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,IAAI,KAAK;GAAE,KAAK;GAAiB,OAAO;GAAO,KAAK;GAAM,SAAS;EAAK,CAAC;CACtH,QAAQ,CAAC;CACT,OAAO;AACT;AAEA,IAAM,cAAN,MAAkB;CAChB,YACE,SACA,OACA;EAFO,KAAA,UAAA;EACA,KAAA,QAAA;CACN;AACL;AACA,IAAM,YAAN,MAAgB;CACd,YACE,QACA,OACA,KACA;EAHO,KAAA,SAAA;EACA,KAAA,QAAA;EACA,KAAA,MAAA;CACN;AACL;AACA,IAAM,WAAN,MAAe;CACb,YACE,KACA,OACA;EAFO,KAAA,MAAA;EACA,KAAA,QAAA;CACN;AACL;AAEA,SAAS,eAAe,EAAE,SAA6B;CACrD,IAAI,iBAAiB,aAAa,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GAA8B;GAAO,MAAM,QAAQ;GAAO;EAAO;;CAC1G,IAAI,iBAAiB,WAAW,OAAO;CACvC,IAAI,iBAAiB,UACnB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;EACG;EACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAc,OAAO,MAAM;GAAK,OAAO;EAAI,CAAA;EAAC;EAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAc,OAAO,MAAM;GAAO,OAAO;EAAI,CAAA;EAC/F;CACG,EAAA,CAAA;CAEV,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;EAAqB;EAAO,OAAO;CAAI,CAAA;AAChD;;AAeA,SAAgB,gBAAgB,EAAE,OAAO,MAAM,SAAS,kBAAkB,OAAO,eAAe,MAAM,QAAQ,GAAG,eAA+B;CAC9I,MAAM,CAAC,MAAM,YAAA,GAAWC,MAAAA,SAAAA,CAAS,eAAe;CAChD,MAAM,UAAU,iBAAiB,eAAe,iBAAiB,aAAa,iBAAiB;CAC/F,MAAM,aAAa,WAAW,aAAa,KAAK,KAAM,CAAC,CAAC,eAAe,OAAO,KAAK,MAAM;CACzF,MAAM,QACJ,SAAS,KAAA,IACP,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAW,YAAY,UAAU,eAAe;EAAO,UAAA;CAAW,CAAA,GACvE,iBAAiB,YAAY,KAAK,IACnC,EAAA,CAAA,IACA;CAEN,IAAI,CAAC,YACH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,iBAAkB,CAAA,GAClC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACG,OACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAqB;IAAO,cAAc,gBAAgB,SAAS,KAAA;IAAW,OAAO,SAAS,KAAA,IAAY,IAAI;GAAI,CAAA,CAC9G;EACH,CAAA,CAAA;;CAIT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAc,eAAe,QAAQ,CAAC,IAAI;EAAzD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAiB,aAAW;GAC1C,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,cAAc,OAAO,cAAc,KAAO,CAAA;EACvD,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CACG,OACA,UACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD,EAAuB,MAAQ,CAAA,IAC7B,SAAS,KAAA,KAAa,CAAC,OACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAqB;IAAO,OAAO,OAAO,KAAK,MAAM,aAAa,IAAI;GAAI,CAAA,IAE1E,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAqB;IAAO,OAAO;GAAI,CAAA,CAErC;EACH,CAAA,CAAA;CACJ,CAAA,GAAA,QAAQ,QAAQ,MACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACZ,UAAA,eAAe,KAAK,CAAC,CAAC,KAAK,GAAG,MAC7B,EAAE,SACA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GAA2B,MAAM;GAAU;EAAQ,GAAnC,EAAE,MAAM,CAA2B,IAEnD,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;GAAiC,MAAM,EAAE;GAAK,SAAS,EAAE;GAAK,OAAO,EAAE;GAAO,OAAO,QAAQ;EAAI,GAA3E,EAAE,MAAM,CAAmE,CAErG;CACG,CAAA,CAEJ,EAAA,CAAA;AAET;AAEA,SAAS,UAAU,EAAE,MAAM,SAAwC;CACjE,MAAM,CAAC,OAAO,aAAA,GAAYD,MAAAA,SAAAA,CAAoC,IAAI;CAClE,IAAI,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;EAAiB,MAAM,KAAK;EAAK,SAAS,KAAK;EAAK,OAAO,MAAM;EAAO,OAAO,QAAQ;CAAI,CAAA;CAC7G,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,iBAAkB,CAAA,GAClC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAW,YAAY,KAAK,MAAM,eAAe;IAAO,UAAA,KAAK;GAAU,CAAA;GAAC;GAAE;GAChF,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IACE,WAAU;IACV,OAAM;IACN,eAAe;KACb,IAAI;MACF,SAAS,EAAE,OAAO,KAAK,OAAQ,EAAE,CAAC;KACpC,SAAS,GAAG;MACV,SAAS,EAAE,OAAO,EAAE,CAAC;KACvB;IACF;IACD,UAAA;GAEK,CAAA;EACF,EAAA,CAAA,CACH;;AAET;;;AC5fA,SAAgB,YAAY;CAC1B,MAAM,SAAS,aAAa,MAAM,EAAE,WAAW;CAC/C,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,SAAS,WAAW,MAAM,GAAG,EAAE,MAAM,GAAG,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE;CACnE,MAAM,WAAW,aAAa,MAAM,EAAE,QAAQ;CAE9C,IAAI;CACJ,QAAQ,QAAR;EACE,KAAK;GACH,OAAO,WAAW,aAAa,UAAU,QAAQ,MAAM;GACvD;EACF,SACE,OAAO;CACX;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAgB,MAAK;EAApC,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,OAAO;KAAE,UAAU;KAAU,cAAc;IAAW;IAAI,UAAA;GAAW,CAAA;GAC3E,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;GAC7B,cAAc,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAM,YAAS,MAAa,EAAA,CAAA;GAC3C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,2BAA8B,CAAA;EACjC;;AAET;;;ACpBA,IAAa,gBAAb,cAAmCE,MAAAA,UAA0C;;;EACnE,KAAA,QAAA,EAAE,OAAO,KAAqB;;CAEtC,OAAO,yBAAyB,OAAc;EAC5C,OAAO,EAAE,MAAM;CACjB;CAEA,SAAS;EACP,IAAI,KAAK,MAAM,OACb,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACG,KAAK,MAAM,SAAS;IAAQ;IAAW,OAAO,KAAK,MAAM,OAAO,SAAS,KAAK,MAAM,KAAK;IACzF;IACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,WAAU;KAAU,eAAe,KAAK,SAAS,EAAE,OAAO,KAAK,CAAC;KAAG,UAAA;IAEnE,CAAA;GACL;;EAGT,OAAO,KAAK,MAAM;CACpB;AACF;;ACVA,SAAgB,UAAU,EAAE,MAAM,UAAU,UAAU,OAAO,OAAO,MAAM,KAAK,UAAU,KAAK,MAAM,WAAW,eAAe,aAA6B;CACzJ,MAAM,OAAA,GAAMC,MAAAA,OAAAA,CAAuB,IAAI;CACvC,MAAM,iBAAiB,MAA0B;EAC/C,MAAM,QAAQ;EACd,MAAM,QAAQ,WAAW,IAAI,QAAS,eAAe,IAAI,QAAS;EAClE,UAAU,IAAI,IAAI,OAAO;GACvB,MAAM,QAAQ,WAAW,KAAK;GAE9B,SAAS,MADI,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,OACjC,KAAK,KAAK,IAAI,KAAK,QAAQ,OAAO,CAAC,CAAC;EAC3D,CAAC;CACH;CACA,MAAM,cACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAiB,OAAO,WAAW,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,KAAK;EAChF,UAAA;CACE,CAAA;CAEP,MAAM,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAkC;EAAe,MAAK;EAAY,oBAAkB,WAAW,eAAe;CAAa,CAAA;CACzJ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAU;EAAK,WAAW,YAAY,WAAW,kBAAkB,KAAK,YAAY,MAAM,YAAY;EAAtG,UAAA;GACG,CAAC,iBAAiB,SAAS,WAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACG,aACA,MACD,EAAA,CAAA;GAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAiC,UAAA;GAAU,CAAA;GACzD,CAAC,iBAAiB,SAAS,SAC1B,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA,CACG,QACA,WACD,EAAA,CAAA;EAED;;AAET;;ACzCA,SAAgB,cAAc,EAAE,OAAO,SAAS,eAAe,MAAM,QAAQ,WAAW,UAAU,YAAgC;CAChI,MAAM,SAAA,GAAQC,MAAAA,OAAAA,CAA0B,IAAI;CAC5C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,UAAU,MAAM,SAAS,MAAM;CACtC,GAAG,CAAC,QAAQ,CAAC;CACb,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,WAAU;EACV,gBAAgB,MAAM,EAAE,WAAW,EAAE,iBAAiB,SAAS;EAC/D,YAAY,MAAM;GAChB,IAAI,EAAE,QAAQ,UAAU;IACtB,EAAE,gBAAgB;IAClB,SAAS;GACX;EACF;EAEA,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GACE,WAAU;GACV,MAAK;GACL,cAAW;GACX,cAAY;GACZ,WAAW,MAAM;IACf,EAAE,eAAe;IACjB,UAAU;GACZ;GARF,UAAA;IAUE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,MAAU,CAAA;IACd,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAA,UAAI,QAAW,CAAA;IAC1B;IACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAAU,SAAS;MAAU,UAAA;KAErD,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,KAAK;MAAO,MAAK;MAAS,WAAW,WAAW,SAAS,eAAe;MAC7E,UAAA;KACK,CAAA,CACL;;GACD;;CACH,CAAA;AAET;;;ACnDA,SAAgB,QAAQ,IAAqB;CAC3C,MAAM,QAAkB,CAAC;CACzB,IAAI,OAAuB;CAC3B,OAAO,QAAQ,KAAK,aAAa,KAAK,SAAS,SAAS,iBAAiB;EACvE,IAAI,KAAK,MAAM,mBAAmB,KAAK,KAAK,EAAE,GAAG;GAC/C,MAAM,QAAQ,IAAI,KAAK,IAAI;GAC3B;EACF;EACA,IAAI,OAAO,KAAK;EAChB,MAAM,SAAyB,KAAK;EACpC,IAAI,QAAQ;GACV,MAAM,OAAO,MAAM,KAAK,OAAO,QAAQ,CAAC,CAAC,QAAQ,MAAM,EAAE,cAAc,KAAM,SAAS;GACtF,IAAI,KAAK,SAAS,GAAG,QAAQ,gBAAgB,KAAK,QAAQ,IAAI,IAAI,EAAE;EACtE;EACA,MAAM,QAAQ,IAAI;EAClB,OAAO;CACT;CACA,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;CAC7B,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,GAAG,GAAG,MAAM,QAAQ,MAAM;CACnD,OAAO,MAAM,KAAK,KAAK;AACzB;;AAGA,SAAgB,aAAa,IAAa,aAAa,GAAW;CAChE,IAAI,IAAI,GAAG;CACX,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG;CAEvB,MAAM,QADM,OAAO,GAAG,cAAc,WAAW,GAAG,YAAY,GAAG,aAAa,OAAO,KAAK,GAAA,CACzE,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO;CAC5C,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,MAAM,GAAG,UAAU,CAAC,CAAC,KAAK,GAAG;CAC9D,OAAO;AACT;;AC7BA,SAAgB,WAAW,GAA2B;CACpD,IAAI,EAAE,UAAU,WAAW,OAAO;CAClC,IAAI,EAAE,UAAU,WAAW,OAAO;CAClC,IAAI,EAAE,UAAU,YAAY,CAAC,EAAE,QAAQ,OAAO,EAAE,cAAc;CAC9D,IAAI,EAAE,WAAW,KAAK,EAAE,iBAAiB,UAAU,OAAO;CAC1D,IAAI,CAAC,EAAE,QAAQ,OAAO,EAAE,YAAY,YAAY;CAChD,OAAO,GAAG,EAAE,SAAS,EAAE,aAAa,MAAM,EAAE,aAAa;AAC3D;AAEA,SAAgB,YAAY,KAA6C;CACvE,IAAI;EACF,MAAM,IAAI,IAAI,IAAI,GAAG;EACrB,IAAI,EAAE,aAAa,SAAS,OAAO;GAAE,MAAM,IAAI,MAAM,GAAG,EAAE;GAAG,MAAM;EAAG;EACtE,MAAM,OAAO,EAAE,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;EACjD,MAAM,OAAO,KAAK,KAAK,SAAS,MAAM,EAAE;EACxC,OAAO;GAAE,MAAM,mBAAmB,IAAI,IAAI,EAAE;GAAQ,MAAM,EAAE;EAAK;CACnE,QAAQ;EACN,OAAO;GAAE,MAAM;GAAK,MAAM;EAAG;CAC/B;AACF;AAEA,IAAa,aAAqC;CAChD,OAAO;CACP,KAAK;CACL,IAAI;CACJ,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,OAAO;CACP,UAAU;CACV,IAAI;CACJ,OAAO;AACT;AAEA,SAAgB,SAAS,GAA4B;CACnD,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,cAAc,EAAE,UAAU,MAAM;AAC7E;AAEA,SAAgB,OAAO,GAA2B;CAChD,MAAM,KAAK,MAAc,IAAI,EAAE,QAAQ,MAAM,OAAO,EAAE;CACtD,IAAI,IAAI,QAAQ,EAAE,EAAE,GAAG;CACvB,IAAI,EAAE,WAAW,OAAO,KAAK,aAAa,EAAE;CAC5C,KAAK,MAAM,CAAC,GAAG,MAAM,EAAE,gBAAgB,KAAK,aAAa,EAAE,GAAG,EAAE,IAAI,GAAG;CACvE,IAAI,EAAE,SAAS,QAAQ,EAAE,QAAQ,SAAS,UAAU,KAAK,qBAAqB,EAAE,EAAE,QAAQ,IAAI;CAC9F,OAAO;AACT;AAEA,SAAgB,QAAQ,GAA2B;CACjD,MAAM,OAAgC,EAAE,QAAQ,EAAE,OAAO;CACzD,IAAI,EAAE,eAAe,QAAQ,KAAK,UAAU,OAAO,YAAY,EAAE,cAAc;CAC/E,IAAI,EAAE,SAAS,QAAQ,EAAE,QAAQ,SAAS,UAAU,KAAK,OAAO,EAAE,QAAQ;CAC1E,OAAO,SAAS,KAAK,UAAU,EAAE,GAAG,EAAE,IAAI,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE;AAC1E;AAEA,SAAgB,SAAS,MAAoB;CAC3C,UAAU,WAAW,UAAU,IAAI,CAAC,CAAC,YAAY;EAC/C,MAAM,KAAK,SAAS,cAAc,UAAU;EAC5C,GAAG,QAAQ;EACX,GAAG,MAAM,WAAW;EACpB,GAAG,MAAM,UAAU;EACnB,SAAS,KAAK,YAAY,EAAE;EAC5B,GAAG,OAAO;EACV,IAAI;GACF,SAAS,YAAY,MAAM;EAC7B,QAAQ,CAAC;EACT,GAAG,OAAO;CACZ,CAAC;AACH;;;;;;ACpDA,IAAa,WAAb,MAAwC;;EACnB,KAAA,2BAAA,IAAI,IAAgC;;CAEvD,GAAsB,OAAU,SAAoC;EAClE,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK;EACjC,IAAI,CAAC,KAAK;GACR,sBAAM,IAAI,IAAI;GACd,KAAK,SAAS,IAAI,OAAO,GAAG;EAC9B;EACA,IAAI,IAAI,OAAO;EACf,aAAa;GACX,IAAK,OAAO,OAAO;EACrB;CACF;CAEA,KAAwB,OAAU,SAAqB;EACrD,MAAM,MAAM,KAAK,SAAS,IAAI,KAAK;EACnC,IAAI,CAAC,KAAK;EACV,KAAK,MAAM,KAAK,MAAM,KAAK,GAAG,GAC5B,IAAI;GACF,EAAE,OAAO;EACX,QAAQ,CAER;CAEJ;CAEA,QAAc;EACZ,KAAK,SAAS,MAAM;CACtB;AACF;AAEA,IAAa,MAAM,IAAI,SAAyB;;ACrChD,IAAa,gCAAgB,IAAI,IAAI;CAAC;CAAQ;CAAQ;CAAM;CAAO;CAAS;CAAM;CAAO;CAAS;CAAQ;CAAQ;CAAS;CAAU;CAAS;AAAK,CAAC;AAEpJ,IAAM,oBAAoB;;AAG1B,SAAgB,gBAAgB,MAAoB;CAClD,MAAM,MAAc,CAAC;CACrB,MAAM,KAAK;CACX,IAAI,GAAG,aAAa,KAAK,GAAG,cAAc,CAAC,eAAe,EAAE,GAAG,IAAI,KAAK,GAAG,UAAU;CACrF,MAAM,OAAO,KAAK,aAAa,KAAM,GAA2B,WAAW,GAAG,cAAc,aAAc,GAA2B,QAAQ,aAAa,KAAK;CAC/J,KAAK,MAAM,KAAK,MAAM,KAAK,IAAI,GAAG;EAChC,IAAI,eAAe,CAAC,GAAG;EACvB,IAAI,EAAE,aAAa,KAAK,CAAC,EAAE,aAAa,KAAK,GAAG;EAChD,IAAI,EAAE,aAAa,KAAK,EAAE,aAAa,KAAK,EAAE,aAAa,KAAK,EAAE,aAAa,IAAI,IAAI,KAAK,CAAC;CAC/F;CACA,OAAO;AACT;;AAGA,SAAgB,WAAW,IAA4B;CACrD,IAAI,GAAG,YAAY,OAAO;CAC1B,MAAM,OAAO,gBAAgB,EAAE;CAC/B,IAAI,KAAK,WAAW,GAAG,OAAO;CAC9B,IAAI,KAAK,WAAW,KAAK,KAAK,EAAE,CAAC,aAAa,GAAG;EAC/C,MAAM,IAAI,KAAK,EAAE,CAAC,eAAe;EACjC,IAAI,EAAE,UAAU,qBAAqB,CAAC,EAAE,SAAS,IAAI,GAAG,OAAO;CACjE;CACA,OAAO;AACT;;AAGA,SAAgB,YAAY,MAA2B;CACrD,MAAM,OAAkB,CAAC;CACzB,MAAM,SAAS,MAAY,UAAkB;EAC3C,IAAI,KAAK,aAAa,IAAI;GACxB,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAW,YAAY;IAAO,UAAU;GAAM,CAAC;GAC9E;EACF;EACA,IAAI,KAAK,aAAa,GAAG;GACvB,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAQ,YAAY;IAAO,UAAU;GAAM,CAAC;GAC3E;EACF;EACA,IAAI,KAAK,aAAa,GAAG;GACvB,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAW,YAAY;IAAO,UAAU;GAAM,CAAC;GAC9E;EACF;EACA,IAAI,KAAK,aAAa,IAAI;GACxB,MAAM,WAAW,cAAc,IAAI,IAAI;GACvC,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAU,YAAY;IAAM;GAAS,CAAC;GACrE,IAAI,UAAU,KAAK,MAAM,KAAK,gBAAgB,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAC;GACvE;EACF;EACA,IAAI,KAAK,aAAa,GAAG;EACzB,MAAM,KAAK;EACX,MAAM,SAAS,cAAc,IAAI,GAAG,SAAS;EAC7C,MAAM,SAAS,SAAS,KAAK,WAAW,EAAE;EAC1C,IAAI,UAAU,WAAW,MAAM;GAC7B,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAU,YAAY;IAAO,UAAU;GAAM,CAAC;GAC7E;EACF;EACA,MAAM,WAAW,cAAc,IAAI,EAAE;EACrC,KAAK,KAAK;GAAE;GAAM;GAAO,MAAM;GAAQ,YAAY;GAAM;EAAS,CAAC;EACnE,IAAI,UAAU;GACZ,KAAK,MAAM,KAAK,gBAAgB,EAAE,GAAG,MAAM,GAAG,QAAQ,CAAC;GACvD,KAAK,KAAK;IAAE;IAAM;IAAO,MAAM;IAAS,YAAY;IAAO,UAAU;GAAK,CAAC;EAC7E;CACF;CACA,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,UAAU,GAAG,MAAM,GAAG,CAAC;CACvD,OAAO;AACT;AAEA,SAAgB,kBAAkB,MAAY,WAAW,IAAU;CACjE,IAAI,WAAW,GAAG;CAClB,IAAI,KAAK,aAAa,KAAK,KAAK,aAAa,IAAI;EAC/C,cAAc,IAAI,IAAI;EACtB,KAAK,MAAM,KAAK,gBAAgB,IAAI,GAAG,kBAAkB,GAAG,WAAW,CAAC;CAC1E;AACF;AAEA,SAAgB,oBAAoB,MAAkB;CACpD,cAAc,OAAO,IAAI;CACzB,KAAK,MAAM,KAAK,gBAAgB,IAAI,GAAG,oBAAoB,CAAC;AAC9D;;AAGA,SAAgB,UAAU,OAA0B;CAClD,MAAM,IAAI,MAAM,KAAK;CACrB,IAAI,CAAC,GAAG,OAAO,CAAC;CAChB,IAAI,UAAqB,CAAC;CAC1B,IAAI;EACF,UAAU,MAAM,KAAK,SAAS,iBAAiB,CAAC,CAAC;CACnD,QAAQ;EACN,UAAU,CAAC;CACb;CACA,IAAI,CAAC,QAAQ,QACP;MAAA,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,GAAG,GACvC,IAAI;GACF,MAAM,MAAM,SAAS,SAAS,GAAG,UAAU,MAAM,YAAY,4BAA4B,IAAI;GAC7F,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,gBAAgB,KAAK;IAC3C,MAAM,IAAI,IAAI,aAAa,CAAC;IAC5B,MAAM,KAAK,GAAG,aAAa,IAAK,IAAgB,GAAG;IACnD,IAAI,IAAI,QAAQ,KAAK,EAAE;GACzB;EACF,QAAQ,CAAC;;CAGb,IAAI,CAAC,QAAQ,QAAQ;EACnB,MAAM,QAAQ,EAAE,YAAY;EAC5B,MAAM,SAAS,SAAS,iBAAiB,SAAS,iBAAiB,WAAW,YAAY;EAC1F,IAAI,IAAI,OAAO;EACf,OAAO,GAAG;GACR,IAAI,CAAC,eAAe,CAAC,GAAG;IACtB,MAAM,MAAM,MAAM,KAAK,EAAE,UAAU,CAAC,CACjC,QAAQ,MAAM,EAAE,aAAa,CAAC,CAAC,CAC/B,KAAK,MAAM,EAAE,WAAW,CAAC,CACzB,KAAK,EAAE;IACV,MAAM,QAAQ,MAAM,KAAK,EAAE,UAAU,CAAC,CACnC,KAAK,MAAM,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,CACpC,KAAK,GAAG;IACX,IAAI,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,YAAY,CAAC,CAAC,SAAS,KAAK,GAAG,QAAQ,KAAK,CAAC;GACrF;GACA,IAAI,OAAO,SAAS;EACtB;CACF;CACA,OAAO,QAAQ,QAAQ,MAAM,CAAC,eAAe,CAAC,CAAC;AACjD;;AChIA,IAAM,QAAQ;AACd,IAAM,WAAW;AASjB,IAAI,YAAqC;AACzC,IAAM,YAAY;AAClB,SAAS,aAAa,IAAa;CACjC,IAAI,CAAC,aAAa,CAAC,UAAU,aAAa;EACxC,YAAY,SAAS,cAAc,OAAO;EAC1C,UAAU,cAAc,IAAI,UAAU;EACtC,SAAS,KAAK,YAAY,SAAS;CACrC;CACA,GAAG,gBAAgB,SAAS;AAC9B;AAIA,IAAI,cAAsE;AAE1E,SAAS,WAAW,MAAY;CAC9B,MAAM,SAAS,KAAK;CACpB,IAAI,CAAC,UAAU,SAAS,SAAS,mBAAmB,SAAS,SAAS,QAAQ,SAAS,SAAS,MAAM;CACtG,cAAc;EAAE;EAAM;EAAQ,MAAM,KAAK;CAAY;CACrD,MAAM,MAAO,KAAiB,sBAAuB,KAAiB,0BAA0B;CAChG,OAAO,YAAY,IAAI;CACvB,YAAY,SAAS,CAAC,CAAC,OAAO,GAAW;AAC3C;AAEA,SAAS,aAAa;CACpB,IAAI,CAAC,aAAa;CAClB,MAAM,EAAE,MAAM,QAAQ,SAAS;CAC/B,IAAI;EACF,OAAO,aAAa,MAAM,QAAQ,KAAK,eAAe,SAAS,OAAO,IAAI;EAC1E,YAAY,SAAS,CAAC,CAAC,OAAO,MAAM,IAAI;CAC1C,QAAQ,CAAC;CACT,cAAc;AAChB;;AAGA,SAAS,gBAAgB,MAAkC;CACzD,MAAM,MAA0B,CAAC;CACjC,MAAM,KAAK;CACX,IAAI;CACJ,OAAQ,IAAI,GAAG,KAAK,IAAI,GAAI,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;CACvE,OAAO;AACT;AAEA,SAAgB,UAAU;CACxB,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,gBAAgB,aAAa,MAAM,EAAE,aAAa;CACxD,MAAM,WAAW,aAAa,MAAM,EAAE,QAAQ;CAC9C,MAAM,UAAU,aAAa,MAAM,EAAE,OAAO;CAC5C,MAAM,cAAc,aAAa,MAAM,EAAE,WAAW;CACpD,MAAM,CAAC,WAAW,iBAAA,GAAgBC,MAAAA,SAAAA,CAAS,CAAC;CAC5C,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,GAAG;CACxC,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAyB,IAAI;CAC3D,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAA+C,IAAI;CACnF,MAAM,OAAA,GAAMC,MAAAA,OAAAA,CAAuB,IAAI;CACvC,MAAM,OAAO,eAAe;CAG5B,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,cAAc,IAAI,SAAS,eAAe,GAAG;GAChD,cAAc,IAAI,SAAS,eAAe;GAC1C,cAAc,IAAI,SAAS,IAAI;GAC/B,YAAY,SAAS,EAAE,eAAe,YAAY,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;EAClF;EACA,IAAI,CAAC,YAAY,SAAS,CAAC,CAAC,UAAU,YAAY,SAAS,CAAC,CAAC,OAAO,SAAS,IAAI;CACnF,GAAG,CAAC,CAAC;CAGL,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,YAAY,CAAC,SAAS,aAAa,YAAY,SAAS,CAAC,CAAC,OAAO,SAAS,IAAI;CACpF,GAAG,CAAC,YAAY,QAAQ,CAAC;CAEzB,MAAM,QAAA,GAAOC,MAAAA,QAAAA,OACL,YAAY,QAAQ,GAE1B,CAAC,YAAY,aAAa,CAC5B;CAEA,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,MAAM,KAAK,IAAI,qBAAqB,UAAU,GAAG,YAAY,CAAC;EAC9D,GAAG,QAAQ,EAAE;EACb,UAAU,GAAG,YAAY;EACzB,aAAa,GAAG,WAAW;CAC7B,GAAG,CAAC,CAAC;CAGL,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,IAAI,CAAC,eAAe,CAAC,UAAU;EAC/B,MAAM,MAAM,KAAK,WAAW,MAAM,EAAE,SAAS,YAAY,EAAE,SAAS,OAAO;EAC3E,MAAM,KAAK,IAAI;EACf,IAAI,QAAQ,MAAM,CAAC,IAAI;EACvB,MAAM,MAAM,MAAM;EAClB,IAAI,MAAM,GAAG,aAAa,MAAM,GAAG,YAAY,GAAG,eAAe,IAAW;GAC1E,GAAG,YAAY,KAAK,IAAI,GAAG,MAAM,GAAG,eAAe,CAAC;GACpD,aAAa,GAAG,SAAS;EAC3B;CAEF,GAAG,CAAC,WAAW,CAAC;CAEhB,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,KAAK,IAAI,QAAQ;CAClE,MAAM,MAAM,KAAK,IAAI,KAAK,QAAQ,KAAK,MAAM,YAAY,UAAU,KAAK,IAAI,QAAQ;CAEpF,MAAM,iBAAiB,QAAgB;EACrC,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,MAAM,MAAM,MAAM;EAClB,IAAI,MAAM,GAAG,WAAW,GAAG,YAAY;OAClC,IAAI,MAAM,QAAQ,GAAG,YAAY,GAAG,cAAc,GAAG,YAAY,MAAM,QAAQ,GAAG;CACzF;CAEA,MAAM,aAAa,MAA2B;EAC5C,IAAI,WAAY,EAAE,OAAuB,YAAY,SAAS;EAC9D,MAAM,MAAM,YAAY,SAAS,CAAC,CAAC;EACnC,MAAM,MAAM,KAAK,WAAW,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,OAAO;EACtE,MAAM,QAAQ,QAAgB;GAC5B,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,QAAQ,KAAK,KACtD,IAAI,KAAK,EAAE,CAAC,SAAS,SAAS;IAC5B,YAAY,SAAS,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,IAAI;IAC1C,cAAc,CAAC;IACf;GACF;EAEJ;EACA,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,KAAK;GAC7C,EAAE,eAAe;GACjB,WAAW;GACX;EACF;EACA,QAAQ,EAAE,KAAV;GACE,KAAK;IACH,EAAE,eAAe;IACjB,KAAK,CAAC;IACN;GACF,KAAK;IACH,EAAE,eAAe;IACjB,KAAK,EAAE;IACP;GACF,KAAK,cAAc;IACjB,EAAE,eAAe;IACjB,MAAM,MAAM,KAAK;IACjB,IAAI,KAAK,cAAc,CAAC,IAAI,UAAU,YAAY,IAAI,MAAM,IAAI;SAC3D,KAAK,CAAC;IACX;GACF;GACA,KAAK,aAAa;IAChB,EAAE,eAAe;IACjB,MAAM,MAAM,KAAK;IACjB,IAAI,KAAK,cAAc,IAAI,UAAU,YAAY,IAAI,MAAM,KAAK;SAC3D,IAAI,KAAK,cAAc,IAAI,WAAW,aAAa,GAAG;KACzD,YAAY,SAAS,CAAC,CAAC,OAAO,IAAI,UAAkB;KACpD,MAAM,KAAK,KAAK,WAAW,MAAM,EAAE,SAAS,IAAI,cAAc,EAAE,SAAS,OAAO;KAChF,IAAI,MAAM,GAAG,cAAc,EAAE;IAC/B;IACA;GACF;GACA,KAAK;GACL,KAAK;IACH,IAAI,KAAK;KACP,EAAE,eAAe;KACjB,WAAW,GAAG;IAChB;IACA;GACF,KAAK;IACH,IAAI,KAAK,aAAa,GAAG,aAAa,GAAc;IACpD;GACF,KAAK,SACH,IAAI,KAAK,aAAa,GAAG,WAAW;IAAE,MAAM;IAAgB,MAAM;GAAU,CAAC;EAEjF;CACF;CAEA,MAAM,YAAY,GAAqB,SAAe;EACpD,YAAY,SAAS,CAAC,CAAC,OAAO,IAAI;EAClC,MAAM,KAAK,KAAK,aAAa,IAAK,OAAmB;EACrD,KAAK,KAAK,GAAG;GACX;IAAE,OAAO;IAAiB,UAAU,CAAC;IAAI,gBAAgB,MAAM,WAAW;KAAE,MAAM;KAAI,MAAM;IAAU,CAAC;GAAE;GACzG;IAAE,OAAO;IAAgB,UAAU,CAAC,MAAM,OAAO,SAAS;IAAiB,gBAAgB,MAAM,YAAY;KAAE;KAAI,MAAM,GAAG;IAAU,CAAC;GAAE;GACzI;IAAE,OAAO;IAAa,UAAU,KAAK,aAAa;IAAG,gBAAgB,WAAW;KAAE;KAAM,MAAM;IAAO,CAAC;GAAE;GACxG,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAkB,UAAU,CAAC;IAAI,gBAAgB,MAAM,SAAS,GAAG,SAAS;GAAE;GACvF;IAAE,OAAO;IAAiB,UAAU,CAAC;IAAI,gBAAgB,MAAM,SAAS,QAAQ,EAAE,CAAC;GAAE;GACrF;IAAE,OAAO;IAAgB,UAAU,CAAC;IAAI,gBAAgB,MAAM,SAAS,0BAA0B,KAAK,UAAU,QAAQ,EAAE,CAAC,EAAE,EAAE;GAAE;GACjI;IAAE,OAAO;IAAqB,gBAAgB,SAAS,KAAK,eAAe,EAAE;GAAE;GAC/E,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAgB,MAAM;IAAK,UAAU,CAAC;IAAI,gBAAgB,MAAM,aAAa,EAAE;GAAE;GAC1F;IAAE,OAAO;IAAkB,MAAM;IAAO,gBAAgB,WAAW,IAAI;GAAE;GACzE;IAAE,OAAO;IAAe,MAAM;IAAU,UAAU,CAAC;IAAa,UAAU;GAAW;GACrF,EAAE,WAAW,KAAK;GAClB;IACE,OAAO;IACP,gBAAgB;KACd,kBAAkB,IAAI;KACtB,YAAY,SAAS,EAAE,eAAe,YAAY,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAClF;GACF;GACA;IACE,OAAO;IACP,gBAAgB;KACd,oBAAoB,IAAI;KACxB,YAAY,SAAS,EAAE,eAAe,YAAY,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAClF;GACF;GACA;IAAE,OAAO;IAAoB,UAAU,CAAC;IAAI,gBAAgB,IAAI,eAAe;KAAE,OAAO;KAAU,UAAU;IAAS,CAAC;GAAE;GACxH;IACE,OAAO;IACP,gBAAgB;KACd,MAAM,IAAI;KACV,IAAI,IAAI;KACR,OAAO,OAAO,OAAO,GAAG;KACxB,EAAE,OAAO,OAAO;KAChB,IAAI,KAAK,iBAAiB;MAAE,OAAO;MAAO,MAAM;MAAS,MAAM,CAAC,OAAO,GAAG;MAAG,WAAW,KAAK,IAAI;KAAE,CAAC;KACpG,IAAI,KAAK,iBAAiB;MAAE,OAAO;MAAO,MAAM;MAAU,MAAM,CAAC,IAAI;MAAG,WAAW,KAAK,IAAI;KAAE,CAAC;IACjG;GACF;GACA;IACE,OAAO;IACP,gBAAgB;KACd,IAAI,KAAK,iBAAiB;MAAE,OAAO;MAAO,MAAM;MAAU,MAAM,CAAC,IAAI;MAAG,WAAW,KAAK,IAAI;KAAE,CAAC;KAC/F,YAAY,SAAS,CAAC,CAAC,eAAe,EAAE,aAAa,UAAU,CAAC;IAClE;GACF;EACF,CAAC;CACH;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACO;EACL,WAAU;EACV,UAAU;EACV,MAAK;EACL,cAAW;EACX,WAAW,MAAM,aAAa,EAAE,cAAc,SAAS;EAC5C;EACX,oBAAoB,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;EARvD,UAAA;GAUE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,OAAO;KAAE,QAAQ,KAAK,SAAS;KAAO,UAAU;IAAW;IAC7D,UAAA,KAAK,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,KAAK,MAChC,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;KAEO;KACL,MAAM,QAAQ,KAAK;KACnB,UAAU,IAAI,SAAS;KACvB,SAAS,IAAI,SAAS;KACtB,SAAS,WAAW,QAAQ,SAAS,IAAI,QAAQ,IAAI,SAAS,UAAU,UAAU;KACtE;KACZ,eAAe;IAChB,GARM,QAAQ,CAQd,CACF;GACE,CAAA;GACJ,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IACE,OAAM;IACN,cAAa;IACb,gBAAgB,YAAY,IAAI;IAChC,iBAAiB;KACf,MAAM,EAAE,IAAI,SAAS;KACrB,MAAM,SAAS,GAAG;KAClB,MAAM,OAAO,GAAG;KAChB,IAAI;MACF,GAAG,YAAY;MACf,MAAM,cAAc,OAAO,KAAK,kBAAkB,QAAQ;MAC1D,IAAI,aAAa,YAAY,SAAS,CAAC,CAAC,OAAO,aAAa,IAAI;KAClE,QAAQ,CAAC;KACT,YAAY,IAAI;IAClB;IAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;KACE,WAAU;KACV,OAAO,SAAS;KAChB,WAAA;KACA,YAAY;KACZ,WAAW,MAAM,YAAY;MAAE,GAAG;MAAU,MAAM,EAAE,OAAO;KAAM,CAAC;IACnE,CAAA;GACY,CAAA;GAEhB,KAAK;EACH;;AAET;AAYA,IAAM,OAAA,GAAMC,MAAAA,KAAAA,CAAK,SAAS,IAAI,EAAE,KAAK,KAAK,UAAU,SAAS,SAAS,YAAY,iBAA2B;CAC3G,MAAM,EAAE,MAAM,OAAO,SAAS;CAC9B,MAAM,MAAM;EAAC;EAAe,WAAW,iBAAiB;EAAI,UAAU,gBAAgB;EAAI,SAAS,UAAU,cAAc;CAAE,CAAC,CAAC,KAAK,GAAG;CACvI,MAAM,UAAU,MAAwB;EACtC,EAAE,gBAAgB;EAClB,IAAI,EAAE,QAAQ;GACZ,IAAI,IAAI,UAAU,oBAAoB,IAAI;QACrC,kBAAkB,IAAI;GAC3B,YAAY,SAAS,EAAE,eAAe,YAAY,SAAS,CAAC,CAAC,gBAAgB,EAAE,CAAC;EAClF,OAAO,YAAY,MAAM,CAAC,IAAI,QAAQ;CACxC;CAEA,IAAI;CACJ,QAAQ,MAAR;EACE,KAAK;GAEH,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAmB,UAAA,aAAaC,KAAG,KAAK;GAAS,CAAA;GAC3E;EAEF,KAAK;GACH,UACE,SAAS,SAAS,SAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IACE,SAAS,KAAK,eAAe;IAC7B,WAAW,MAAM;KACf,KAAK,cAAc;KACnB,WAAW,IAAI;IACjB;IACA,gBAAgB,WAAW,IAAI;GAChC,CAAA,IAED,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAe,qBAAqB,WAAW;KAAE;KAAM,MAAM;IAAO,CAAC;IAArF,UAAA;KAAwF;KACpF,SAAS,KAAK,eAAe,IAAI,GAAG;KAAE;IACpC;;GAEV;EACF,KAAK;GACH,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAmB,UAAA,OAAO,SAAS,KAAK,eAAe,IAAI,GAAG,EAAE;GAAW,CAAA;GACrG;EACF,KAAK;GACH,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KAAiC;KAAgB,KAAoB;KAAK;IAAO;;GAC3F;EACF,KAAK;GACH,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAhB,UAAA;KAA8B;KACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAoB,UAAA,KAAiB;KAAgB,CAAA;KAAC;IACvE;;GAER;EACF,SAAS;GACP,MAAM,KAAK;GACX,MAAM,SAAS,SAAS,WAAW,WAAW,EAAE,IAAI;GACpD,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAa;KAAa;KAAqB;IAAa,CAAA;IAC3D,SAAS,YAAY,WAAW,QAAQ,CAAC,OAAO,EAAE,KACjD,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA,CACG,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAgB,UAAA;IAAa,CAAA,GACxD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA;MAA8B;MACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAmB,UAAA,GAAG;MAAgB,CAAA;MAAC;KACxD;IACN,CAAA,CAAA,EAAA,CAAA;IAEH,SAAS,UAAU,CAAC,IAAI,YACvB,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAmB,SAAS;KAAQ,UAAA;IAE9C,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA;MAA8B;MACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAmB,UAAA,GAAG;MAAgB,CAAA;MAAC;KACxD;IACN,CAAA,CAAA,EAAA,CAAA;GAEJ,EAAA,CAAA;EAEN;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAW;EACX,OAAO;GAAE;GAAK,aAAa,QAAQ,KAAK;EAAG;EAC3C,MAAK;EACL,iBAAe;EACf,iBAAe,IAAI,aAAa,IAAI,WAAW,KAAA;EAC/C,mBAAmB,YAAY,SAAS,CAAC,CAAC,OAAO,IAAI;EACrD,oBAAoB,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;EACrD,gBAAgB,MAAM,cAAc,GAAG,IAAI;EAC3C,gBAAgB,MAAM;GACpB,IAAI,IAAI,cAAe,EAAE,OAAuB,UAAU,SAAS,aAAa,GAAG,YAAY,MAAM,CAAC,IAAI,QAAQ;EACpH;EAXF,UAAA;GAaG,IAAI,cACH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAiB,OAAO,EAAE,MAAM,QAAQ,KAAK,EAAE;IAAG,cAAc,MAAM,EAAE,gBAAgB;IAAG,SAAS;IAClH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,cAAc,IAAI,WAAW,cAAc,KAAO,CAAA;GAC/D,CAAA;GAEP;GACA,YAAY,SAAS,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAiB,UAAA;GAAY,CAAA;EAC3E;;AAET,CAAC;AAED,SAAS,OAAO,IAAa;CAC3B,OAAO;EAAC;EAAQ;EAAQ;EAAM;EAAO;EAAS;EAAM;EAAO;EAAS;EAAQ;EAAQ;EAAS;EAAU;EAAS;CAAK,CAAC,CAAC,SAAS,GAAG,SAAS;AAC9I;AAEA,SAAS,SAAS,GAAW,GAAW;CACtC,MAAM,IAAI,EAAE,QAAQ,QAAQ,GAAG;CAC/B,OAAO,EAAE,SAAS,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,MAAM;AAC9C;AAEA,SAAS,QAAQ,EAAE,IAAI,SAAS,cAAiG;CAC/H,MAAM,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,QAAQ,MAAM,EAAE,SAAS,iBAAiB;CAClF,MAAM,cAAc,SAAwB,SAAiB;EAC3D,MAAM,QAAQ,gBAAgB,IAAI;EAClC,IAAI;GACF,IAAI,WAAW,CAAC,MAAM,MAAM,CAAC,OAAO,MAAM,OAAO,GAAG,GAAG,gBAAgB,OAAO;GAC9E,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC;EAClD,QAAQ,CAAC;EACT,WAAW,IAAI;CACjB;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GAA8B;GAE5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAmB,UAAA,GAAG;GAAgB,CAAA;GACrD,MAAM,KAAK,MACV,SAAS,SAAS,UAAU,QAAQ,SAAS,EAAE,OAC7C,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CACG,KACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,SAAS,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM;IAAI,WAAW,MAAM,WAAW,EAAE,MAAM,CAAC;IAAG,gBAAgB,WAAW,IAAI;GAAI,CAAA,CACxH,EAAA,GAHK,EAAE,IAGP,IAEN,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAmB,gBAAgB,MAAM;KACvC,EAAE,gBAAgB;KAClB,WAAW;MAAE,MAAM;MAAI,MAAM;MAAQ,MAAM,EAAE;KAAK,CAAC;IACrD;IAHA,UAAA;KAIG;KACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAgB,UAAA,EAAE;KAAW,CAAA;KAC5C,EAAE,UAAU,MACX,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA;MAAE;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAiB,UAAA,SAAS,EAAE,OAAO,GAAG;MAAQ,CAAA;MAAC;KACjE,EAAA,CAAA;IAEA;GAXK,GAAA,EAAE,IAWP,CAEV;GACC,SAAS,SAAS,aACjB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CACG,KACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,SAAQ;IAAG,WAAW,MAAM,WAAW,MAAM,CAAC;IAAG,gBAAgB,WAAW,IAAI;GAAI,CAAA,CAC9F,EAAA,CAAA;GACN;EAEE;;AAEV;AAEA,SAAS,aAAa,EAAE,SAAS,UAAU,YAAsF;CAC/H,MAAM,CAAC,GAAG,SAAA,GAAQL,MAAAA,SAAAA,CAAS,OAAO;CAClC,MAAM,QAAA,GAAOC,MAAAA,OAAAA,CAAO,KAAK;CACzB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EACE,WAAU;EACV,WAAA;EACA,OAAO;EACP,MAAM,KAAK,IAAI,GAAG,EAAE,SAAS,CAAC;EAC9B,WAAW,MAAM,KAAK,EAAE,OAAO,KAAK;EACpC,cAAc,MAAM,EAAE,gBAAgB;EACtC,YAAY,MAAM;GAChB,EAAE,gBAAgB;GAClB,IAAI,EAAE,QAAQ,SAAS;IACrB,KAAK,UAAU;IACf,SAAS,CAAC;GACZ,OAAO,IAAI,EAAE,QAAQ,UAAU;IAC7B,KAAK,UAAU;IACf,SAAS;GACX;EACF;EACA,cAAc;GACZ,IAAI,CAAC,KAAK,SAAS,SAAS,CAAC;EAC/B;EACA,UAAU,MAAM,EAAE,cAAc,OAAO;CACxC,CAAA;AAEL;;;AC7eA,SAAgB,kBAAkB,UAA4B;CAC5D,MAAM,MAAgB,CAAC;CACvB,IAAI,QAAQ;CACZ,IAAI,QAAuB;CAC3B,IAAI,MAAM;CACV,KAAK,MAAM,MAAM,UAAU;EACzB,IAAI,OAAO;GACT,IAAI,OAAO,OAAO,QAAQ;GAC1B,OAAO;GACP;EACF;EACA,IAAI,OAAO,QAAO,OAAO,KAAK,QAAQ;OACjC,IAAI,OAAO,OAAO,OAAO,KAAK;OAC9B,IAAI,OAAO,OAAO,OAAO,KAAK;EACnC,IAAI,OAAO,OAAO,UAAU,GAAG;GAC7B,IAAI,KAAK,IAAI,KAAK,CAAC;GACnB,MAAM;EACR,OAAO,OAAO;CAChB;CACA,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC;CACnC,OAAO;AACT;;AAGA,SAAgB,YAAY,UAA+B;CACzD,IAAI,IAAI;CACR,IAAI,IAAI;CACR,IAAI,IAAI;CACR,IAAI,IAAI;CAER,IAAI,EAAE,QAAQ,oCAAoC,EAAE;CACpD,IAAI,EAAE,QAAQ,sDAAsD,GAAG,IAAI,UAAkB;EAC3F,MAAM,OAAO,kBAAkB,KAAK,CAAC,CAClC,IAAI,WAAW,CAAC,CAChB,KAAK,kBAAkB,CAAC,CACxB,IAAI;EACP,IAAI,MAAM;GACR,KAAK,KAAK;GACV,KAAK,KAAK;GACV,KAAK,KAAK;EACZ;EACA,OAAO;CACT,CAAC;CACD,IAAI,EAAE,QAAQ,qBAAqB;EACjC;EACA,OAAO;CACT,CAAC;CACD,IAAI,EAAE,QAAQ,oBAAoB,EAAE;CACpC,MAAM,EAAE,MAAM,UAAU,KAAK,CAAC,EAAA,CAAG;CACjC,IAAI,EAAE,QAAQ,YAAY,EAAE;CAC5B,MAAM,WAAW,EAAE,MAAM,iEAAiE,KAAK,CAAC;CAChG,KAAK,SAAS;CACd,IAAI,EAAE,QAAQ,mEAAmE,EAAE;CACnF,MAAM,EAAE,MAAM,WAAW,KAAK,CAAC,EAAA,CAAG;CAClC,IAAI,EAAE,QAAQ,aAAa,EAAE;CAC7B,MAAM,EAAE,MAAM,sBAAsB,KAAK,CAAC,EAAA,CAAG;CAC7C,IAAI,EAAE,QAAQ,wBAAwB,EAAE;CACxC,MAAM,EAAE,MAAM,4BAA4B,KAAK,CAAC,EAAA,CAAG;CACnD,OAAO;EAAC;EAAG;EAAG;CAAC;AACjB;AAEA,SAAgB,mBAAmB,GAAgB,GAAwB;CACzE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AAChD;;;ACpBA,SAAgB,aAAa,MAAqE;CAChG,MAAM,MAA6D,CAAC;CACpE,IAAI,QAAQ;CACZ,IAAI,QAAuB;CAC3B,IAAI,MAAM;CACV,MAAM,aAAa;EACjB,MAAM,IAAI,IAAI,KAAK;EACnB,MAAM;EACN,IAAI,CAAC,GAAG;EACR,MAAM,IAAI,EAAE,QAAQ,GAAG;EACvB,IAAI,KAAK,GAAG;EACZ,MAAM,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;EAChC,IAAI,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK;EAChC,IAAI,YAAY;EAChB,MAAM,IAAI,MAAM,MAAM,uBAAuB;EAC7C,IAAI,GAAG;GACL,YAAY;GACZ,QAAQ,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK;EACvC;EACA,IAAI,KAAK;GAAE;GAAM;GAAO;EAAU,CAAC;CACrC;CACA,KAAK,MAAM,MAAM,MAAM;EACrB,IAAI,OAAO;GACT,OAAO;GACP,IAAI,OAAO,OAAO,QAAQ;GAC1B;EACF;EACA,IAAI,OAAO,QAAO,OAAO,KAAK,QAAQ;OACjC,IAAI,OAAO,KAAK;OAChB,IAAI,OAAO,KAAK;EACrB,IAAI,OAAO,OAAO,UAAU,GAAG,KAAK;OAC/B,OAAO;CACd;CACA,KAAK;CACL,OAAO;AACT;AAUA,IAAM,8BAAc,IAAI,QAA6C;AAIrE,IAAM,mCAAmB,IAAI,IAAiC;AAC9D,IAAM,iCAAiB,IAAI,IAA4B;AACvD,IAAI,iBAA0C;AAE9C,SAAS,SAAS,OAA4B,SAAyB;CACrE,IAAI,SACE;MAAA,CAAC,eAAe,IAAI,OAAO,GAAG,eAAe,IAAI,SAAS,QAAQ,aAAa,OAAO,CAAC;CAAA,OACtF,IAAI,CAAC,iBAAiB,IAAI,KAAK,GAAG,iBAAiB,IAAI,OAAO,MAAM,OAAO;AACpF;AAEA,SAAgB,aAAsB;CACpC,OAAO,iBAAiB,OAAO,KAAK,eAAe,OAAO,KAAK,CAAC,CAAC;AACnE;;AAGA,SAAgB,mBAAyB;CACvC,KAAK,MAAM,CAAC,OAAO,SAAS,kBAAkB;EAC5C,IAAI;GACF,MAAM,UAAU;EAClB,QAAQ,CAAC;EACT,YAAY,OAAO,KAAK;CAC1B;CACA,KAAK,MAAM,CAAC,IAAI,SAAS,gBAAgB;EACvC,IAAI,QAAQ,MAAM,GAAG,gBAAgB,OAAO;OACvC,GAAG,aAAa,SAAS,IAAI;EAClC,YAAY,OAAQ,GAAmB,KAAK;CAC9C;CACA,iBAAiB,MAAM;CACvB,eAAe,MAAM;CACrB,gBAAgB,OAAO;CACvB,iBAAiB;AACnB;AAIA,SAAgB,eAAe,OAAkB,MAAc,OAAe,WAAoB,SAA2B;CAC3H,MAAM,QAAQ,MAAM;CACpB,SAAS,OAAO,MAAM,SAAS,WAAW,MAAM,UAAU,KAAA,CAAS;CACnE,IAAI,WAAW,YAAY,MAAM,MAAM,eAAe,OAAO;CAC7D,IAAI,CAAC,MAAM,OAAO;CAElB,MAAM,IAAI,MAAM,MAAM,uBAAuB;CAC7C,IAAI,GAAG;EACL,YAAY;EACZ,QAAQ,MAAM,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC,KAAK;CACvC;CACA,IAAI,UAAU,IAAI;EAChB,MAAM,eAAe,IAAI;EACzB,OAAO;CACT;CACA,MAAM,YAAY,MAAM,OAAO,YAAY,cAAc,EAAE;CAC3D,OAAO,MAAM,iBAAiB,IAAI,MAAM;AAC1C;AAEA,SAAgB,kBAAkB,OAAkB,MAAoB;CACtE,SAAS,MAAM,OAAO,MAAM,SAAS,WAAW,MAAM,UAAU,KAAA,CAAS;CACzE,MAAM,MAAM,eAAe,IAAI;CAC/B,MAAM,OAAO,YAAY,IAAI,MAAM,KAAK;CACxC,IAAI,MAAM,YAAY,IAAI,MAAM,OAAO,KAAK,QAAQ,MAAM,EAAE,SAAS,IAAI,CAAC;AAC5E;AAEA,SAAgB,kBAAkB,OAAkB,MAAmB,QAAuB;CAC5F,MAAM,QAAQ,MAAM;CACpB,SAAS,OAAO,MAAM,SAAS,WAAW,MAAM,UAAU,KAAA,CAAS;CACnE,MAAM,OAAO,YAAY,IAAI,KAAK,KAAK,CAAC;CACxC,IAAI,QAAQ;EACV,MAAM,IAAI,KAAK,MAAM,MAAM,EAAE,SAAS,KAAK,IAAI;EAC/C,YAAY,IACV,OACA,KAAK,QAAQ,MAAM,MAAM,CAAC,CAC5B;EACA,MAAM,YAAY,KAAK,MAAM,KAAK,OAAO,KAAK,YAAY,cAAc,EAAE;CAC5E,OAAO;EACL,MAAM,QAAQ,MAAM,aAAa,WAAW,MAAM,EAAE,SAAS,KAAK,IAAI;EACtE,KAAK,KAAK;GAAE,MAAM,KAAK;GAAM,OAAO,KAAK;GAAO,WAAW,KAAK;GAAW;EAAM,CAAC;EAClF,YAAY,IAAI,OAAO,IAAI;EAC3B,MAAM,eAAe,KAAK,IAAI;CAChC;AACF;;AAGA,SAAgB,WAAW,IAAkC;CAC3D,IAAI,CAAC,kBAAkB,CAAC,eAAe,aAAa;EAClD,iBAAiB,SAAS,cAAc,OAAO;EAC/C,eAAe,aAAa,iCAAiC,EAAE;EAC/D,SAAS,KAAK,YAAY,cAAc;CAC1C;CACA,MAAM,QAAQ,eAAe;CAC7B,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,MAAM,GAAG,MAAM,mBAAmB,KAAK,GAAG,EAAE,IAAI,IAAI,GAAG,OAAO,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,GAAG,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,KAAK,GAAG,MAAM,GAAG;CACtK,MAAM,MAAM,MAAM,WAAW,GAAG,IAAI,MAAM,MAAM,SAAS,MAAM;CAC/D,OAAO,MAAM,SAAS;AACxB;AAEA,SAAgB,gBAAgB,MAAoB,UAA2B;CAC7E,SAAS,KAAK,KAAK;CACnB,MAAM,OAAO,KAAK;CAClB,KAAK,eAAe;CACpB,OAAO,KAAK,iBAAiB,QAAQ,aAAa;AACpD;AAEA,SAAS,UAAU,GAAmB;CACpC,OAAO,OAAO,QAAQ,eAAe,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,QAAQ,WAAW,MAAM;AAC/F;AAIA,SAAS,WAAW,OAA8B;CAChD,MAAM,QAAQ,MAAM;CACpB,IAAI,OAAO,eAAe,+BAA+B,GAAG,OAAO;CACnE,IAAI,MAAM,MACR,IAAI;EACF,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI;EAC5B,OAAO,EAAE,SAAS,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,EAAE;CAC1C,QAAQ;EACN,OAAO,MAAM;CACf;CAEF,IAAI,OAAO;EACT,MAAM,KAAK,MAAM,aAAa,kBAAkB,KAAK,MAAM,aAAa,cAAc,KAAK,MAAM,aAAa,aAAa,KAAK,MAAM;EACtI,IAAI,IAAI,OAAO,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI;EAC5C,OAAO;CACT;CACA,OAAO;AACT;AAEA,SAAS,OAAO,MAAuB;CAErC,MAAM,SAAS,KAAK;CACpB,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI;EACF,MAAM,MAAM,MAAM,UAAU,QAAQ,KAAK,OAAO,UAAU,IAAI;EAC9D,OAAO,OAAO,IAAI,IAAI,MAAM,MAAM;CACpC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,YAAY,IAAa,UAA2B;CAC3D,IAAI;EACF,OAAO,GAAG,QAAQ,QAAQ;CAC5B,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,iBAAiB,MAAwB;CAChD,IAAI;EACF,IAAI,gBAAgB,cAAc,OAAO,OAAO,WAAW,KAAK,MAAM,SAAS,CAAC,CAAC;EACjF,IAAI,OAAO,oBAAoB,eAAe,gBAAgB,iBAAiB,OAAO,IAAI,SAAS,KAAK,aAAa;CACvH,QAAQ,CAAC;CACT,OAAO;AACT;AAEA,SAAS,cAAc,IAA8B;CACnD,MAAM,SAA0B,CAAC;CACjC,MAAM,OAAO,GAAG,YAAY;CAC5B,MAAM,OAAkC,gBAAgB,aAAa,CAAC,IAAI,IAAI,CAAC,QAAQ;CACvF,KAAK,MAAM,KAAK,MAAM;EACpB,KAAK,MAAM,KAAK,MAAM,KAAK,EAAE,WAAW,GAAG;GACzC,MAAM,QAAQ,EAAE;GAChB,IAAI,SAAS,eAAe,KAAK,GAAG;GACpC,IAAI,EAAE,UAAU;GAChB,OAAO,KAAK,CAAkB;EAChC;EACA,MAAM,UAAW,EAA0D;EAC3E,IAAI,SAAS,OAAO,KAAK,GAAG,OAAO;CACrC;CACA,OAAO;AACT;;;;;AAMA,SAAgB,gBAAgB,IAAa,EAAE,gBAAgB,UAAU,CAAC,GAAoD;CAC5H,MAAM,QAAqB,CAAC;CAC5B,MAAM,UAAoB,CAAC;CAC3B,IAAI,QAAQ;CAEZ,MAAM,QAAQ,MAAmB,OAAsB,UAAoB;EACzE,KAAK,MAAM,QAAQ,MAAM,KAAK,IAAI,GAAG;GACnC;GACA,IAAI,gBAAgB,cAAc;IAEhC,MAAM,UADY,kBAAkB,KAAK,YACzB,CAAA,CAAU,QAAQ,MAAM,CAAC,2FAA2F,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;IACjK,IAAI,QAAQ,QAAQ;KAClB,MAAM,OAAO,QAAQ,IAAI,WAAW,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC,IAAI;KACnE,MAAM,KAAK;MACT,KAAK,IAAI,MAAM,GAAG,WAAW,KAAK;MAClC,MAAM;MACN,UAAU,KAAK;MACf,kBAAkB;MAClB,QAAQ,WAAW,KAAK,IAAI,OAAO,IAAI;MACvC;MACA,OAAO,KAAK;MACZ;MACA,cAAc,CAAC;MACf,aAAa;MACb;MACA,UAAU;KACZ,CAAC;IACH;GACF,OAAO,IAAI,gBAAgB,cACrB;QAAA,iBAAiB,IAAI,GAAG,KAAK,KAAK,UAAU,OAAO,CAAC,GAAG,OAAO,UAAU,KAAK,MAAM,WAAW,CAAC;GAAA,OAC9F,IAAI,OAAO,oBAAoB,eAAe,gBAAgB,iBAC/D;QAAA,iBAAiB,IAAI,GAAG,KAAK,KAAK,UAAU,OAAO,CAAC,GAAG,OAAO,aAAa,KAAK,eAAe,CAAC;GAAA,OAC/F,IAAI,cAAc,QAAS,KAAyB,UAAU;IAEnE,MAAM,QAAS,KAAa,OAAO,UAAW,KAAa,SAAS,KAAK,QAAQ,MAAM,GAAG,KAAK,QAAQ,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK;IAC1H,KAAM,KAAyB,UAAU,OAAO,CAAC,GAAG,OAAO,KAAK,CAAC;GACnE,OAAO,IAAI,OAAO,kBAAkB,eAAe,gBAAgB,iBAAiB,KAAK,YACvF,IAAI;IACF,KAAK,KAAK,WAAW,UAAU,KAAK,YAAY,KAAK;GACvD,QAAQ;IACN,QAAQ,KAAK,KAAK,IAAI;GACxB;EAEJ;CACF;CAEA,KAAK,MAAM,SAAS,cAAc,EAAE,GAAG;EACrC,IAAI;EACJ,IAAI;GACF,OAAO,MAAM;EACf,QAAQ;GACN,QAAQ,KAAK,MAAM,QAAQ,sBAAsB;GACjD;EACF;EACA,KAAK,MAAM,OAAO,MAAM,SAAS,MAAM,MAAM,YAAY,CAAC,UAAU,MAAM,MAAM,WAAW,IAAI,CAAC,CAAC;CACnG;CAGA,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,aAAa,EAAE,WAAW,KAAK,EAAE,QAAQ,EAAE,KAAK;CAE1F,MAAM,OAAO;CACb,IAAI,KAAK,SAAS,CAAC,eACjB,MAAM,QAAQ;EACZ,KAAK;EACL,MAAM;EACN,UAAU;EACV,kBAAkB,CAAC;EACnB,QAAQ;EACR,OAAO,CAAC;EACR,OAAO,KAAK;EACZ,SAAS;EACT,cAAc,CAAC;EACf,aAAa;GAAC;GAAM;GAAG;EAAC;EACxB,OAAO;EACP,UAAU;CACZ,CAAC;MACI,IAAI,KAAK,SAAS,iBAAiB,KAAK,MAAM,QACnD,MAAM,QAAQ;EACZ,KAAK;EACL,MAAM;EACN,UAAU;EACV,kBAAkB,CAAC;EACnB,QAAQ;EACR,OAAO,CAAC;EACR,OAAO,KAAK;EACZ,SAAS;EACT,cAAc,CAAC;EACf,aAAa;GAAC;GAAM;GAAG;EAAC;EACxB,OAAO;EACP,UAAU;CACZ,CAAC;CAGH,KAAK,MAAM,KAAK,OAAO,EAAE,eAAe,iBAAiB,EAAE,KAAK;CAChE,OAAO;EAAE;EAAO,eAAe,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC;CAAE;AAC9D;AAEA,SAAS,iBAAiB,OAA2C;CACnE,MAAM,QAAuB,aAAa,MAAM,OAAO,CAAC,CAAC,KAAK,OAAO;EAAE,GAAG;EAAG,UAAU;EAAO,YAAY;CAAM,EAAE;CAClH,MAAM,WAAW,YAAY,IAAI,KAAK;CACtC,IAAI,UACF,KAAK,MAAM,KAAK,UAAU;EACxB,IAAI,MAAM,MAAM,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG;EAC1C,MAAM,OAAO,KAAK,IAAI,EAAE,OAAO,MAAM,MAAM,GAAG,GAAG;GAAE,MAAM,EAAE;GAAM,OAAO,EAAE;GAAO,WAAW,EAAE;GAAW,UAAU;GAAM,YAAY;EAAM,CAAC;CAC9I;CAEF,OAAO;AACT;;AAGA,IAAa,uCAAuB,IAAI,IAAI;CAC1C;CAAmB;CAAkB;CAAgB;CAAS;CAAU;CAAa;CAAe;CAAQ;CAC5G;CAAyB;CAAgB;CAAa;CAAoB;CAAgB;CAAc;CACxG;CAAqB;CAAwB;CAAe;CAAW;CAAkB;CAAe;CACxG;CAAoB;CAAuB;CAAmB;CAAW;CAAU;CAAY;CAAc;CAC7G;CAAe;CAAgB;CAAe;CAAkB;CAAkB;CAAc;CAAe;CAC/G;CAAc;CAAgB;CAAiB;CAAa;CAAgB;CAAgB;CAAgB;CAC5G;CAA0B;CAAkB;CAAe;CAAyB;CAAQ;CAAU;AACxG,CAAC;AAED,IAAa,iBAAiB,SAA0B,KAAK,WAAW,IAAI,KAAK,qBAAqB,IAAI,IAAI;;AAG9G,SAAS,eAAe,UAA+B;CACrD,MAAM,kCAAkB,IAAI,IAAY;CACxC,MAAM,+BAAe,IAAI,IAAY;CACrC,MAAM,MAAM,SAAS,KAAK;CAE1B,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,EAAE,cAAc,IAAI,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,gBAAgB,IAAI,EAAE,IAAI,GAAG,gBAAgB,IAAI,EAAE,IAAI;CAC/I,MAAM,gCAAgB,IAAI,IAAY;CACtC,KAAK,MAAM,KAAK,KACd,KAAK,MAAM,KAAK,EAAE,cAAc;EAC9B,IAAI,EAAE,UAAU;EAChB,IAAI,EAAE,cAAc,OAAO;EAC3B,IAAI,EAAE,WAAW;GACf,EAAE,aAAa,cAAc,IAAI,EAAE,IAAI;GACvC,cAAc,IAAI,EAAE,IAAI;EAC1B,OAAO;GACL,EAAE,aAAa,gBAAgB,IAAI,EAAE,IAAI,KAAK,aAAa,IAAI,EAAE,IAAI;GACrE,aAAa,IAAI,EAAE,IAAI;EACzB;CACF;AAEJ;;AAGA,SAAgB,iBAAiB,IAAa,eAAe,GAAkB;CAC7E,MAAM,EAAE,OAAO,kBAAkB,gBAAgB,EAAE;CACnD,MAAM,YAAgC,CAAC;CACvC,IAAI,SAAS,GAAG;CAChB,IAAI,IAAI;CACR,OAAO,UAAU,IAAI,cAAc;EACjC,MAAM,EAAE,OAAO,OAAO,gBAAgB,QAAQ,EAAE,eAAe,KAAK,CAAC;EACrE,MAAM,gBAAgB,GACnB,KAAK,MAAM;GACV,EAAE,eAAe,EAAE,aAAa,KAAK,OAAO;IAAE,GAAG;IAAG,WAAW,cAAc,EAAE,IAAI;GAAE,EAAE;GACvF,OAAO;EACT,CAAC,CAAC,CACD,QAAQ,MAAM,EAAE,aAAa,MAAM,MAAM,EAAE,SAAS,CAAC;EACxD,IAAI,cAAc,QAAQ,UAAU,KAAK;GAAE,UAAU;GAAQ,OAAO;EAAc,CAAC;EACnF,SAAS,OAAO;EAChB;CACF;CACA,eAAe,CAAC,OAAO,GAAG,UAAU,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC;CACxD,OAAO;EAAE;EAAO;EAAW;CAAc;AAC3C;AAIA,IAAI,gBAA0C;AAC9C,IAAM,gCAAgB,IAAI,IAAiC;;;;;AAM3D,SAAgB,mBAAmB,KAAa,MAAqD;CACnG,MAAM,SAAS,cAAc,IAAI,GAAG;CACpC,IAAI,QAAQ,OAAO;CACnB,IAAI;EACF,IAAI,CAAC,iBAAiB,CAAC,cAAc,aAAa;GAChD,gBAAgB,SAAS,cAAc,QAAQ;GAC/C,cAAc,aAAa,eAAe,MAAM;GAChD,cAAc,WAAW;GACzB,cAAc,MAAM,UAAU;GAC9B,CAAC,QAAQ,SAAS,KAAA,CAAM,YAAY,aAAa;EACnD;EACA,MAAM,MAAM,cAAc;EAC1B,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,OAAO;EAC9B,MAAM,KAAK,IAAI,cAAc,GAAG;EAChC,IAAI,KAAK,YAAY,EAAE;EACvB,MAAM,KAAK,cAAc,cAAe,iBAAiB,EAAE;EAC3D,MAAM,sBAAM,IAAI,IAAoB;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,iBAAiB,GAAG,EAAE,CAAC;EAC7E,GAAG,OAAO;EACV,cAAc,IAAI,KAAK,GAAG;EAC1B,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;;;ACpcA,SAAS,uBAAuB,QAAQ,KAAa;CACnD,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,CAAC,GAAG,SAAA,GAAQK,MAAAA,SAAAA,CAAS,UAAU;CACrC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,IAAI,iBAAiB,KAAK,UAAU,GAAG,KAAK;EAClD,aAAa,aAAa,CAAC;CAC7B,GAAG,CAAC,YAAY,KAAK,CAAC;CACtB,OAAO;AACT;AAEA,SAAgB,WAAW,EAAE,MAAuB;CAClD,MAAM,eAAe,aAAa,MAAM,EAAE,YAAY;CACtD,MAAM,OAAO,aAAa,MAAM,EAAE,UAAU;CAC5C,MAAM,aAAa,uBAAuB;CAC1C,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,EAAE;CACvC,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAwB,IAAI;CAEhE,MAAM,UAAA,GAASC,MAAAA,QAAAA,OACP,iBAAiB,EAAE,GAEzB;EAAC;EAAI;EAAc;CAAU,CAC/B;CAEA,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,YAAY;CACpC,MAAM,iBAAiB,MAAmB,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,KAAK,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC;CAEtG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,WAAU;MAAY,OAAO,EAAE,MAAM,EAAE;MAAG,aAAY;MAAS,cAAW;MAAgB,OAAO;MAAQ,WAAW,MAAM,UAAU,EAAE,OAAO,KAAK;KAAI,CAAA;KAC7J,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAW,eAAe,UAAU,YAAY;MAAM,OAAM;MAAkB,eAAe,WAAW,CAAC,OAAO;MAAG,UAAA;KAEnH,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAM;MACN,cAAW;MACX,eAAe;OACb,MAAM,OAAO,WAAW,EAAE;OAC1B,IAAI,MAAM,cAAc,KAAK,YAAY;OACzC,KAAK;MACP;MAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA;KACf,CAAA;KACP,WAAW,KACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAO;OAAE,QAAQ;OAAI,SAAS;MAAQ;MACtC,OAAM;MACN,eAAe;OACb,iBAAiB;OACjB,KAAK;MACP;MACD,UAAA;KAEO,CAAA;IAEP;;GACJ,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAiB,GAAK,CAAA;GAClC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,OAAO,MAAM,KAAK,MACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;MAAsC,MAAM;MAAG,QAAQ;MAAe,mBAAmB,EAAE,SAAS,UAAU,EAAE,OAAO,WAAW,sBAAsB,KAAK,eAAe,EAAE;MAAU,UAAU;KAAO,GAAzL,EAAE,MAAM,YAAiL,CAC1M;KACA,OAAO,UAAU,KAAK,SAAS,MAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OAAsC;OACrB;OACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAa,eAAe,YAAY,SAAS,CAAC,CAAC,OAAO,QAAQ,UAAU,IAAI;QAC7F,UAAA,aAAa,QAAQ,QAAQ;OAC1B,CAAA;MACH;KACJ,CAAA,GAAA,QAAQ,MAAM,KAAK,MAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;MAAsC,MAAM;MAAG,SAAS,MAAM,CAAC,CAAC,EAAE,aAAa,cAAc,CAAC;MAAG,WAAA;MAAU,UAAU;KAAO,GAA5G,EAAE,MAAM,YAAoG,CAC7H,CACE,EAAA,GAVK,CAUL,CACN;KACA,OAAO,cAAc,SAAS,KAC7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACG,OAAO,cAAc;OAAO;OAC5B,OAAO,cAAc,KAAK,MACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;QAAa,WAAU;QACpB,UAAA;OACE,GAFK,CAEL,CACN;MACE;;IAEJ;;EACF;;AAET;AAEA,SAAS,YAAY,EAAE,MAAuB;CAC5C,MAAM,GAAG,UAAA,GAASD,MAAAA,SAAAA,CAAS,CAAC;CAC5B,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAmB,CAAC,CAAC;CACrD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,EAAE;CACrC,MAAM,UAAU,MAAM,qBAAK,IAAI,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,QAAQ,CAAC,CAAC;CAC9E,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GACE,WAAU;GACV,aAAY;GACL;GACP,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;GACxC,YAAY,MAAM;IAChB,IAAI,EAAE,QAAQ,WAAW,MAAM,KAAK,GAAG;KACrC,MAAM,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,UAAU,IAAI,CAAC,CAAC;KAC5D,SAAS,EAAE;KACX,OAAO,MAAM,IAAI,CAAC;IACpB;GACF;EACD,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACZ,UAAA,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;IAAe,WAAU;IAAzB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KACE,MAAK;KACL,SAAS,GAAG,UAAU,SAAS,CAAC;KAChC,WAAW,MAAM;MACf,IAAI,EAAE,OAAO,SAAS;OACpB,GAAG,UAAU,IAAI,CAAC;OAClB,YAAY,SAAS,QAAQ,MAAM,MAAM,CAAC,CAAC;MAC7C,OAAO;OACL,GAAG,UAAU,OAAO,CAAC;OACrB,YAAY,CAAC,GAAG,UAAU,CAAC,CAAC;MAC9B;KACF;IACD,CAAA,GACA,CACI;GAfK,GAAA,CAeL,CACR;EACE,CAAA,CACF;;AAET;AAEA,SAAS,UAAU,EACjB,MACA,QACA,WACA,mBACA,YAOC;CACD,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;CAC1C,MAAM,CAAC,iBAAiB,uBAAA,GAAsBA,MAAAA,SAAAA,CAAS,CAAC,CAAC,iBAAiB;CAC1E,MAAM,QAAQ,KAAK,aAAa,OAAO,MAAM;CAC7C,IAAI,CAAC,MAAM,UAAU,WAAW,OAAO;CACvC,IAAI,CAAC,MAAM,UAAU,KAAK,aAAa,UAAU,CAAC,QAEhD,OAAO;CAGT,MAAM,WACJ,KAAK,SAAS,WACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAoB,UAAA,KAAK;CAAe,CAAA,IACtD,mBAAmB,KAAK,OAC1B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,SAAS,KAAK;EACd,WAAW,MAAM;GACf,mBAAmB,KAAK;GACxB,IAAI,EAAE,KAAK,KAAK,MAAM,KAAK,UAAU,gBAAgB,KAAK,MAAO,EAAE,KAAK,CAAC;GACzE,SAAS;EACX;EACA,gBAAgB,mBAAmB,KAAK;CACzC,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAmB,eAAe,KAAK,OAAO,WAAW,sBAAsB,KAAK,mBAAmB,IAAI;EACxH,UAAA,kBAAkB,KAAK,UAAU,KAAK,gBAAgB;CACnD,CAAA;CAGV,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACG,KAAK,MAAM,KAAK,MACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAa,WAAU;IACpB,UAAA;GACE,GAFK,CAEL,CACN;GACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG;KAAS;KAAE;KACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAiB,OAAO,KAAK;MAC1C,UAAA,KAAK;KACF,CAAA;IACH;;GACJ,MAAM,KAAK,MACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAA4B;IAAM,MAAM;IAAa;GAAW,GAAlD,EAAE,IAAgD,CACjE;GACA,UACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EACE,SAAS,MAAM,UAAU;IACvB,UAAU,KAAK;IACf,IAAI,QAAQ,OAAO,eAAe,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,GAAG,KAAK;IACxE,SAAS;GACX,EACD,CAAA;GAEH,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IACE,WAAU;IACV,eAAe,CAAC,aAAa,UAAU,IAAI;IAC3C,OAAO,YAAY,KAAA,IAAY;IAE9B,UAAA;GACE,CAAA;EACF;;AAET;AAEA,SAAS,kBAAkB,UAAkB,SAAmB;CAC9D,IAAI,CAAC,QAAQ,QAAQ,OAAO;CAE5B,OADc,SAAS,MAAM,SACtB,CAAA,CAAM,KAAK,GAAG,MACnB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CACG,IAAI,KAAK,MACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAW,QAAQ,SAAS,CAAC,IAAI,sBAAsB;EAAwB,UAAA;CAAQ,CAAA,CACzF,EAAA,GAHK,CAGL,CACP;AACH;AAEA,IAAM,WAAW;AAEjB,IAAI;AACJ,SAAS,MAAM,OAA8B;CAC3C,IAAI,aAAa,KAAA,GAAW,WAAW,SAAS,cAAc,QAAQ,CAAC,CAAC,WAAW,IAAI;CACvF,IAAI,CAAC,UAAU,OAAO;CACtB,SAAS,YAAY;CACrB,SAAS,YAAY;CACrB,MAAM,IAAI,SAAS;CACnB,OAAO,EAAE,WAAW,GAAG,IAAI,IAAI;AACjC;AAEA,SAAS,QAAQ,EAAE,MAAM,MAAM,YAA0E;CACvG,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAkC,IAAI;CAC9D,MAAM,YAAA,GAAWE,MAAAA,OAAAA,CAAO,KAAK,KAAK;CAClC,MAAM,MAAM;EAAC;EAAgB,KAAK,WAAW,iBAAiB;EAAI,KAAK,aAAa,mBAAmB;CAAE,CAAC,CAAC,KAAK,GAAG;CACnH,MAAM,QAAQ,CAAC,KAAK,WAAW,KAAK,MAAM,MAAM,QAAQ,CAAC,GAAG,KAAK,KAAA;CACjE,MAAM,MAAM,QAAQ,MAAM,KAAK,IAAI;CACnC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAW;EAAhB,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IACE,MAAK;IACL,WAAU;IACV,SAAS,CAAC,KAAK;IACf,OAAO,KAAK,WAAW,uBAAuB;IAC9C,cAAY,UAAU,KAAK;IAC3B,WAAW,MAAM;KACf,kBAAkB,MAAM,MAAM,EAAE,OAAO,OAAO;KAC9C,SAAS;IACX;GACD,CAAA;GACA,SAAS,SACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IACE,SAAS,KAAK;IACd,WAAW,MAAM;KACf,QAAQ,IAAI;KACZ,MAAM,OAAO,EAAE,KAAK;KACpB,IAAI,CAAC,MAAM,kBAAkB,MAAM,KAAK,IAAI;UACvC,IAAI,SAAS,KAAK,MAAM,eAAe,MAAM,MAAM,KAAK,OAAO,KAAK,WAAW,KAAK,IAAI;KAC7F,SAAS;IACX;IACA,gBAAgB,QAAQ,IAAI;GAC7B,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAe,eAAe,CAAC,KAAK,YAAY,QAAQ,MAAM;IAC3E,UAAA,KAAK;GACF,CAAA;GAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAgB,UAAA;GAAQ,CAAA;GACvC,OACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAiB,OAAO,EAAE,YAAY,MAAM;IAAG,OAAM;IACnE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KACE,MAAK;KACL,OAAO;KACP,cAAY,kBAAkB,KAAK;KACnC,WAAW,MAAM;MACf,eAAe,MAAM,KAAK,MAAM,EAAE,OAAO,OAAO,KAAK,SAAS;MAC9D,SAAS;KACX;IACD,CAAA;GACG,CAAA;GAEP,SAAS,UACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IACE,SAAS,KAAK,SAAS,KAAK,YAAY,gBAAgB;IACxD,SAAA;IACA,SAAS,MAAM,eAAe,MAAM,KAAK,MAAM,GAAG,KAAK;IACvD,WAAW,MAAM;KACf,QAAQ,IAAI;KACZ,IAAI,CAAC,EAAE,KAAK,GAAG,kBAAkB,MAAM,KAAK,IAAI;UAC3C,eAAe,MAAM,KAAK,MAAM,EAAE,KAAK,GAAG,KAAK;KACpD,SAAS;IACX;IACA,gBAAgB;KACd,QAAQ,IAAI;KACZ,eAAe,MAAM,KAAK,MAAM,SAAS,SAAS,KAAK,SAAS;KAChE,SAAS;IACX;GACD,CAAA,IAED,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IACE,WAAU;IACV,eAAe;KACb,IAAI,KAAK,UAAU;KACnB,SAAS,UAAU,KAAK;KACxB,QAAQ,OAAO;IACjB;IANF,UAAA,CAQG,KAAK,OACL,KAAK,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAoB,UAAA;IAAiB,CAAA,CACpE;;GAER,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,IAAO,CAAA;EACV;;AAET;AAEA,SAAS,WAAW,EAAE,UAA6D;CACjF,MAAM,CAAC,MAAM,YAAA,GAAWF,MAAAA,SAAAA,CAAwB,IAAI;CACpD,IAAI,SAAS,MACX,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,uBAAwB,CAAA,GACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GACE,SAAQ;GACR,aAAY;GACZ,WAAW,MAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,CAAC,IAAI,OAAO,IAAI,EAAE;GAC9D,gBAAgB,OAAO,IAAI,EAAE;GAC7B,eAAe,GAAG,MAAM,OAAO,GAAG,CAAC;EACpC,CAAA,CACE;;CAGT,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,uBAAwB,CAAA;GACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAgB,UAAA;GAAW,CAAA;GAAC;GAAE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAU,SAAQ;IAAG,aAAY;IAAQ,WAAW,MAAM,OAAO,MAAM,CAAC;IAAG,gBAAgB,OAAO,IAAI,EAAE;GAAI,CAAA;EACvJ;;AAET;AAEA,SAAS,WAAW,OAAe,OAAe,OAA8B;CAC9E,MAAM,KAAK;CACX,IAAI;CACJ,IAAI,SAAiC;CACrC,OAAQ,IAAI,GAAG,KAAK,KAAK,GAAI;EAC3B,IAAI,SAAS,EAAE,SAAS,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ;GACtD,SAAS;GACT;EACF;EACA,IAAI,CAAC,QAAQ,SAAS;CACxB;CACA,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,IAAI,WAAW,OAAO,EAAE,IAAI;CAClC,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,GAAI,IAAI,GAAI;CAC5C,OAAO,MAAM,MAAM,GAAG,OAAO,KAAK,IAAI,IAAI,MAAM,MAAM,OAAO,QAAQ,OAAO,EAAE,CAAC,MAAM;AACvF;AAEA,SAAS,SAAS,EAChB,SACA,UACA,UACA,QACA,SACA,aACA,gBASC;CACD,MAAM,CAAC,GAAG,SAAA,GAAQA,MAAAA,SAAAA,CAAS,OAAO;CAClC,MAAM,QAAA,GAAOE,MAAAA,OAAAA,CAAO,KAAK;CACzB,MAAM,UAAU,OAAmB;EACjC,IAAI,KAAK,SAAS;EAClB,KAAK,UAAU;EACf,GAAG;CACL;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EACE,WAAU;EACV,WAAA;EACA,OAAO;EACM;EACb,MAAM,KAAK,IAAI,cAAc,YAAY,SAAS,GAAG,EAAE,SAAS,CAAC;EACjE,YAAY;EACZ,UAAU,MAAM,EAAE,cAAc,OAAO;EACvC,WAAW,MAAM;GACf,MAAM,MAAM,EAAE,OAAO;GAErB,IAAI,gBAAgB,IAAI,SAAS,GAAG,GAAG;IACrC,MAAM,CAAC,GAAG,GAAG,QAAQ,IAAI,MAAM,GAAG;IAClC,MAAM,QAAQ,KAAK,KAAK,GAAG,CAAC,CAAC,QAAQ,SAAS,EAAE,CAAC,CAAC,KAAK;IACvD,IAAI,OAAO;KACT,aAAa,aAAa,EAAE,KAAK,GAAG,KAAK,CAAC;KAC1C;IACF;GACF;GACA,KAAK,GAAG;GACR,SAAS,GAAG;EACd;EACA,YAAY,MAAM;GAChB,EAAE,gBAAgB;GAClB,IAAI,EAAE,QAAQ,WAAW,EAAE,QAAQ,OAAO;IACxC,EAAE,eAAe;IACjB,aAAa,SAAS,CAAC,CAAC;GAC1B,OAAO,IAAI,EAAE,QAAQ,UAAU;IAC7B,EAAE,eAAe;IACjB,OAAO,QAAQ;GACjB,OAAO,IAAI,YAAY,EAAE,QAAQ,aAAa,EAAE,QAAQ,cAAc;IACpE,EAAE,eAAe;IACjB,MAAM,OAAO,EAAE,WAAW,KAAK,EAAE,SAAS,KAAM;IAChD,MAAM,OAAO,WAAW,GAAG,EAAE,cAAc,kBAAkB,GAAG,EAAE,QAAQ,YAAY,OAAO,CAAC,IAAI;IAClG,IAAI,QAAQ,MAAM;KAChB,KAAK,IAAI;KACT,SAAS,IAAI;IACf;GACF;EACF;EACA,cAAc,aAAa,SAAS,CAAC,CAAC;CACvC,CAAA;AAEL;;AC9bA,IAAMC,UAAQ;CAAC;CAAO;CAAS;CAAU;AAAM;AAG/C,SAAS,IAAI,GAAmB;CAC9B,MAAM,IAAI,WAAW,CAAC;CACtB,IAAI,MAAM,CAAC,GAAG,OAAO;CACrB,OAAO,MAAM,IAAI,MAAM,OAAO,KAAK,MAAM,IAAI,GAAG,IAAI,GAAG;AACzD;AAEA,SAAS,KAAK,OAAc,MAAsC;CAChE,IAAI,UAAU,YAAY,OAAO;CACjC,IAAI,UAAU,UAAU,OAAO,UAAU,KAAK;CAC9C,OAAO,GAAG,MAAM,GAAG;AACrB;;AAGA,SAAgB,SAAS,EAAE,MAAuB;CAChD,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,eAAe,aAAa,MAAM,EAAE,YAAY;CACtD,MAAM,OAAO,aAAa,MAAM,EAAE,UAAU;CAC5C,MAAM,QAAQ,aAAa,MAAM,EAAE,KAAK;CACxC,MAAM,GAAG,YAAA,GAAWC,MAAAA,SAAAA,CAAS,CAAC;CAC9B,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAwB,IAAI;CAC1D,CAAA,GAAA,MAAA,UAAA,OAAgB,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC;CAEjE,MAAM,KAAK,iBAAiB,EAAE;CAC9B,MAAM,OAAO,GAAG,sBAAsB;CACtC,MAAM,aAAa,GAAG,aAAa;CACnC,MAAM,OAAO;CACb,MAAM,YAAY,KAAK,eAAe,KAAK,SAAS,WAAW,GAAG,WAAW,IAAI,WAAW,GAAG,YAAY;CAC3G,MAAM,YAAY,KAAK,gBAAgB,KAAK,UAAU,WAAW,GAAG,UAAU,IAAI,WAAW,GAAG,aAAa;CAE7G,MAAM,SAAS,MAAc,MAAc;EACzC,WAAW,IAAI;EACf,MAAM,IAAI,EAAE,KAAK;EACjB,IAAI,CAAC,KAAK,MAAM,KAAK;EACrB,KAAK,MAAM,YAAY,MAAM,gBAAgB,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,CAAC;EACnE,KAAK;CACP;CAEA,MAAM,UAAU,EAAE,YAChB,iBAAA,GAAA,kBAAA,IAAA,CAAAC,kBAAAA,UAAA,EAAA,UACGF,QAAM,KAAK,MAAM;EAChB,MAAM,OAAO,KAAK,OAAO,CAAC;EAC1B,MAAM,QAAQ,IAAI,GAAG,iBAAiB,IAAI,CAAC;EAC3C,OAAO,YAAY,OACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAEE,WAAW,mBAAmB,EAAE;GAChC,WAAA;GACA,cAAc,UAAU,MAAM,MAAM;GACpC,UAAU,MAAM,EAAE,cAAc,OAAO;GACvC,YAAY,MAAM;IAChB,EAAE,gBAAgB;IAClB,IAAI,EAAE,QAAQ,SAAS,MAAM,MAAM,EAAE,cAAc,KAAK;IACxD,IAAI,EAAE,QAAQ,UAAU,WAAW,IAAI;GACzC;GACA,SAAS,MAAM,MAAM,MAAM,EAAE,cAAc,KAAK;EACjD,GAXM,CAWN,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAc,WAAW,mBAAmB;GAAK,qBAAqB,WAAW,IAAI;GAAG,OAAO,GAAG,KAAK;GACpG,UAAA;EACG,GAFK,CAEL;CAEV,CAAC,EACD,CAAA;CAGJ,MAAM,QACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAA2B,oBAAoB,MAAM,EAAE;EAAG,oBAAoB,MAAM,IAAI;EAAvG,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAe,UAAA;GAAY,CAAA;GAC3C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAQ,OAAM,SAAU,CAAA;GACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAe,UAAA;KAAY,CAAA;KAC3C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAQ,OAAM,SAAU,CAAA;KACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAe,UAAA;OAAa,CAAA;OAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAQ,OAAM,UAAW,CAAA;OACzB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAK,WAAU;QAAf,UAAA;SACG,IAAI,OAAO,GAAG,cAAc,gBAAgB,YAAY,IAAI,KAAK,IAAI,GAAG,QAAQ,IAAI,KAAK,KAAK,CAAC;SAAE;SAAG;SACpG,IAAI,OAAO,KAAK,IAAI,GAAG,QAAQ,CAAC,CAAC;QAC/B;;MACF;;IACF;;EACF;;CAGP,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACZ,UAAA,aACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAe,UAAA;IAAc,CAAA;IAC7C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAQ,OAAM,WAAY,CAAA;IACzB;GACE;EAEL,CAAA,IAAA;CAEC,CAAA;AAET;;ACjGA,SAAgB,aAAa,EAAE,MAAuB;CACpD,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,eAAe,aAAa,MAAM,EAAE,YAAY;CACtD,MAAM,EAAE,eAAe,mBAAmB;CAC1C,MAAM,CAAC,QAAQ,cAAA,GAAaG,MAAAA,SAAAA,CAAS,EAAE;CACvC,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,CAAC;CAClC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,IAAI,iBAAiB,SAAS,MAAM,IAAI,CAAC,GAAG,GAAG;EACrD,aAAa,aAAa,CAAC;CAC7B,GAAG,CAAC,YAAY,YAAY,CAAC;CAE7B,MAAM,EAAE,OAAO,cAAA,GAAaC,MAAAA,QAAAA,OAAc;EACxC,MAAM,KAAK,iBAAiB,EAAE;EAC9B,MAAM,WAAW,mBAAmB,GAAG,WAAW,UAAU;EAC5D,MAAM,2BAAW,IAAI,IAAoB;EACzC,IAAI;GACF,MAAM,KAAK,iBAAiB,IAAI,CAAC;GACjC,KAAK,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,KAAK,EAAE,cAAc,IAAI,CAAC,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,SAAS,IAAI,EAAE,IAAI,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,SAAS,WAAW,kBAAkB,EAAE,QAAQ;EAC9L,QAAQ,CAAC;EACT,MAAM,OAA8D,CAAC;EACrE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;GAClC,MAAM,OAAO,GAAG;GAChB,MAAM,QAAQ,GAAG,iBAAiB,IAAI;GACtC,KAAK,KAAK;IAAE;IAAM;IAAO,WAAW,CAAC,CAAC,YAAY,SAAS,IAAI,IAAI,MAAM,SAAS,CAAC,SAAS,IAAI,IAAI;GAAE,CAAC;EACzG;EACA,KAAK,MAAM,GAAG,MAAO,EAAE,KAAK,WAAW,GAAG,MAAM,EAAE,KAAK,WAAW,GAAG,IAAI,EAAE,KAAK,cAAc,EAAE,IAAI,IAAI,EAAE,KAAK,WAAW,GAAG,IAAI,IAAI,EAAG;EACxI,OAAO;GAAE,OAAO;GAAM;EAAS;CAEjC,GAAG,CAAC,IAAI,IAAI,CAAC;CAEb,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,YAAY;CACpC,MAAM,UAAU,MAAM,QAAQ,OAAO,WAAW,CAAC,EAAE,eAAe,CAAC,KAAK,EAAE,KAAK,SAAS,CAAC,KAAK,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,EAAE;CAEhI,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAc,GAAK,CAAA;GACnB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAO,WAAU;KAAY,OAAO,EAAE,MAAM,EAAE;KAAG,aAAY;KAAS,cAAW;KAAyB,OAAO;KAAQ,WAAW,MAAM,UAAU,EAAE,OAAO,KAAK;IAAI,CAAA,GACtK,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS;MAAS,WAAW,MAAM,WAAW,EAAE,OAAO,OAAO;KAAI,CAAA,GAAC,WACrF;IACJ,CAAA,CAAA;;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACZ,UAAA,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAkB,WAAW,mBAAmB,EAAE,YAAY,aAAa;KAAM,OAAO,SAAS,IAAI,EAAE,IAAI,IAAI,UAAU,SAAS,IAAI,EAAE,IAAI,MAAM,KAAA;KAAlJ,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAgB,UAAA,EAAE;KAAW,CAAA,GAC7C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAiB,UAAA,EAAE;KAAY,CAAA,CAC5C;IAHK,GAAA,EAAE,IAGP,CACN;GACE,CAAA;EACF;;AAET;;;ACpDA,SAAgB,WAAW,EAAE,MAAuB;CAClD,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,eAAe,aAAa,MAAM,EAAE,YAAY;CACtD,MAAM,GAAG,YAAA,GAAWC,MAAAA,SAAAA,CAAS,CAAC;CAC9B,CAAA,GAAA,MAAA,UAAA,OAAgB,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,YAAY,CAAC;CACjE,MAAM,KAAK,iBAAiB,EAAE;CAC9B,MAAM,IAAI,GAAG,sBAAsB;CACnC,MAAM,OAAO;CACb,MAAM,OAA2B;EAC/B,CAAC,iBAAiB,GAAGC,QAAM,EAAE,KAAK,EAAE,KAAKA,QAAM,EAAE,MAAM,EAAE,IAAI;EAC7D,CAAC,eAAe,KAAK,eAAe,OAAO,GAAG,KAAK,YAAY,KAAK,KAAK,aAAa,OAAO,GAAG;EAChG,CAAC,eAAe,GAAG,GAAG,YAAY,KAAK,GAAG,aAAa,IAAI;EAC3D,CAAC,eAAe,GAAG,GAAG,YAAY,KAAK,GAAG,aAAa,IAAI;EAC3D,CAAC,qBAAqB,KAAKA,QAAM,EAAE,IAAI,EAAE,MAAMA,QAAM,EAAE,GAAG,GAAG;EAC7D,CAAC,WAAW,GAAG,OAAO;EACtB,CAAC,YAAY,GAAG,QAAQ;EACxB,CAAC,cAAc,GAAG,SAAS;EAC3B,CAAC,WAAW,GAAG,MAAM;EACrB,CAAC,YAAY,GAAG,QAAQ;EACxB,CAAC,SAAS,GAAG,QAAQ;EACrB,CAAC,cAAc,GAAG,UAAU;EAC5B,CAAC,WAAW,GAAG,OAAO;CACxB;CACA,IAAI,GAAG,QAAQ,SAAS,MAAM,GAAG,KAAK,KAAK,CAAC,kBAAkB,GAAG,aAAa,GAAG,CAAC,mBAAmB,GAAG,cAAc,GAAG,CAAC,eAAe,GAAG,UAAU,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;CACxK,IAAI,GAAG,QAAQ,SAAS,MAAM,GAAG,KAAK,KAAK,CAAC,yBAAyB,GAAG,mBAAmB,GAAG,CAAC,sBAAsB,GAAG,gBAAgB,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;CAC1J,MAAM,OAA2B;EAC/B,CAAC,eAAe,GAAG,UAAU;EAC7B,CAAC,aAAa,GAAG,QAAQ;EACzB,CAAC,eAAe,GAAG,UAAU;EAC7B,CAAC,cAAc,GAAG,SAAS;EAC3B,CAAC,eAAe,GAAG,UAAU;EAC7B,CAAC,kBAAkB,GAAG,aAAa;EACnC,CAAC,SAAS,GAAG,KAAK;EAClB,CAAC,cAAc,GAAG,SAAS;EAC3B,CAAC,oBAAoB,GAAG,eAAe;CACzC;CACA,MAAM,UAA8B,MAAM,KAAK,MAAM,CACnD,UAAU,KACV,GAAG,GAAG,iBAAiB,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,iBAAiB,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,iBAAiB,UAAU,EAAE,OAAO,GACpI,CAAC;CACD,QAAQ,KAAK,CAAC,iBAAiB,GAAG,YAAY,CAAC;CAC/C,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAc,GAAK,CAAA;GACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,OAAM;IAA4B;GAAO,CAAA;GACvD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,OAAM;IAAS,MAAM;GAAU,CAAA;GAC7C,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAc,OAAM;IAAa,MAAM;IAAM,OAAA;GAAO,CAAA;EACjD;;AAET;AAEA,IAAM,QAAQ;CAAC;CAAO;CAAS;CAAU;AAAM;AAC/C,IAAMA,WAAS,MAAc,KAAK,MAAM,IAAI,GAAG,IAAI;AAEnD,SAAS,aAAa,EAAE,OAAO,MAAM,SAAuE;CAC1G,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;EAAS,WAAU;EAAnB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,MAAU,CAAA,GACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAI,WAAU;GACX,UAAA,KAAK,KAAK,CAAC,GAAG,OACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAa,OAAO,EAAE,SAAS,WAAW;IAA1C,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA,GACX,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CACG,SAAS,QAAQ,KAAK,CAAC,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAiB,OAAO,EAAE,YAAY,EAAE;IAAI,CAAA,GACxF,CACC,EAAA,CAAA,CACD;GANK,GAAA,CAML,CACN;EACC,CAAA,CACG;;AAEb;AAEA,SAAgB,eAAe,EAAE,MAAuB;CACtD,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,GAAG,YAAA,GAAWD,MAAAA,SAAAA,CAAS,CAAC;CAC9B,CAAA,GAAA,MAAA,UAAA,OAAgB,SAAS,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;CACnD,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,EAAE;CACzC,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAS,EAAE;CAC3C,MAAM,QAAQ,MAAM,KAAK,GAAG,UAAU;CACtC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;GAAS,WAAU;GAAnB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,aAAc,CAAA,GAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAU;IACf,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD,EAAA,UAAA,CACG,MAAM,KAAK,MACV,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,WAAU;MAAwB,OAAO,EAAE,OAAO,MAAM;MACzD,UAAA,EAAE;KACD,CAAA;KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,WAAU;MACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OACE,WAAU;OACV,cAAc,EAAE;OAEhB,cAAY,YAAY,EAAE;OAC1B,YAAY,MAAM,EAAE,QAAQ,WAAY,EAAE,cAAmC,KAAK;OAClF,SAAS,MAAM,EAAE,OAAO,UAAU,EAAE,SAAS,GAAG,aAAa,EAAE,MAAM,EAAE,OAAO,KAAK;MACpF,GAJM,EAAE,KAIR;KACC,CAAA;KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,OAAO;OAAE,OAAO;OAAI,SAAS;MAAE;MACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,WAAU;OAAe,OAAM;OAAmB,cAAY,UAAU,EAAE;OAAQ,eAAe,GAAG,gBAAgB,EAAE,IAAI;OAChI,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;MAChB,CAAA;KACN,CAAA;IACF,EAAA,GAnBK,EAAE,IAmBP,CACL,GACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,WAAU;MACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,WAAU;OAAW,aAAY;OAAO,OAAO;OAAS,WAAW,MAAM,WAAW,EAAE,OAAO,KAAK;OAAG,cAAW;MAAsB,CAAA;KAC3I,CAAA;KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,WAAU;MACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OACE,WAAU;OACV,aAAY;OACZ,OAAO;OACP,WAAW,MAAM,YAAY,EAAE,OAAO,KAAK;OAC3C,cAAW;OACX,YAAY,MAAM;QAChB,IAAI,EAAE,QAAQ,WAAW,QAAQ,KAAK,GAAG;SACvC,IAAI;UACF,GAAG,aAAa,QAAQ,KAAK,GAAG,QAAQ;SAC1C,QAAQ,CAAC;SACT,WAAW,EAAE;SACb,YAAY,EAAE;QAChB;OACF;MACD,CAAA;KACC,CAAA;KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,OAAO;OAAE,OAAO;OAAI,SAAS;MAAE;MACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OACE,WAAU;OACV,OAAM;OACN,cAAW;OACX,eAAe;QACb,IAAI,CAAC,QAAQ,KAAK,GAAG;QACrB,IAAI;SACF,GAAG,aAAa,QAAQ,KAAK,GAAG,QAAQ;QAC1C,QAAQ,CAAC;QACT,WAAW,EAAE;QACb,YAAY,EAAE;OAChB;OAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA;MACf,CAAA;KACN,CAAA;IACF,EAAA,CAAA,CACC,EAAA,CAAA;GACF,CAAA,CACA;EACT,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;GAAS,WAAU;GAAnB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,aAAc,CAAA,GAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,OAAO,EAAE,SAAS,UAAU;IAC/B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;KAAiB,OAAO;KAAI,MAAM,GAAG;KAAW,iBAAA;KAAgB,aAAA;IAAa,CAAA;GAC1E,CAAA,CACE;EACN,CAAA,CAAA;;AAET;;ACzJA,IAAM,OAAuC;CAC3C,CAAC,UAAU,QAAQ;CACnB,CAAC,YAAY,UAAU;CACvB,CAAC,UAAU,QAAQ;CACnB,CAAC,cAAc,YAAY;AAC7B;AAEA,SAAgB,gBAAgB;CAC9B,MAAM,eAAe,aAAa,MAAM,EAAE,oBAAoB;CAC9D,MAAM,OAAA,GAAME,MAAAA,OAAAA,CAAuB,IAAI;CACvC,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAS,KAAK;CAC1C,MAAM,CAAC,YAAY,kBAAA,GAAiBA,MAAAA,SAAAA,CAAS,GAAG;CAEhD,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,MAAM,KAAK,IAAI,qBAAqB,UAAU,GAAG,cAAc,GAAG,CAAC;EACnE,GAAG,QAAQ,EAAE;EACb,aAAa,GAAG,WAAW;CAC7B,GAAG,CAAC,CAAC;CAEL,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAoB;EACjC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GACE,UAAU;GACV,MAAM,SAAS,aAAa;GAC5B,WAAW,MAAO,SAAS,cAAc,CAAC,IAAI,YAAY,SAAS,EAAE,sBAAsB,EAAE,CAAC;GAC9F,KAAK,SAAS,KAAK;GACnB,SAAS,SAAS,KAAK;GACvB,MACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,CAAU,CAAA;KACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,CAAc,CAAA;IACX;;GAEP,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,CAAU,CAAA;EACtB,CAAA;CACE,CAAA;AAET;AAEA,SAAS,YAAY;CACnB,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;CACtC,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,EAAE;CACrC,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAoB,CAAC,CAAC;CACpD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,CAAC;CAEpC,MAAM,OAAO,GAAW,SAAiB;EACvC,MAAM,IAAI,MAAM,SAAS,QAAQ,SAAS,UAAU,UAAU,CAAC;EAC/D,WAAW,CAAC;EACZ,IAAI,CAAC,EAAE,QAAQ;EACf,MAAM,KAAM,OAAO,EAAE,SAAU,EAAE,UAAU,EAAE;EAC7C,SAAS,CAAC;EACV,YAAY,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI;EACxC,YAAY,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE;CACnC;CAEA,IAAI,CAAC,MACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,WAAU;EAAkC,OAAM;EAAuC,cAAW;EAAa,eAAe,QAAQ,IAAI;EAClJ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,MAAM,GAAK,CAAA;CACjB,CAAA;CAGZ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,MAAM,GAAK,CAAA;GACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IACE,WAAU;IACV,WAAA;IACA,OAAO,EAAE,MAAM,EAAE;IACjB,aAAY;IACZ,cAAW;IACX,OAAO;IACP,WAAW,MAAM;KACf,SAAS,EAAE,OAAO,KAAK;KACvB,WAAW,CAAC,CAAC;IACf;IACA,YAAY,MAAM;KAChB,EAAE,gBAAgB;KAClB,IAAI,EAAE,QAAQ,SAAS,IAAI,OAAO,EAAE,WAAW,QAAQ,IAAI,QAAQ,SAAS,QAAQ,IAAI,CAAC;KACzF,IAAI,EAAE,QAAQ,UAAU;MACtB,QAAQ,KAAK;MACb,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;KACnC;IACF;GACD,CAAA;GACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAc,OAAO;KAAE,UAAU;KAAI,WAAW;IAAQ;IACrE,UAAA,QAAQ,SAAS,GAAG,QAAQ,EAAE,MAAM,QAAQ,WAAW,QAAQ,cAAc;GAC1E,CAAA;GACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,WAAU;IAAe,cAAW;IAAkB,eAAe,IAAI,OAAO,QAAQ,CAAC;IAAG,UAAA;GAE5F,CAAA;GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,WAAU;IAAe,cAAW;IAAc,eAAe,IAAI,OAAO,QAAQ,SAAS,QAAQ,IAAI,CAAC;IAAG,UAAA;GAE7G,CAAA;GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IACE,WAAU;IACV,OAAO,EAAE,QAAQ,GAAG;IACpB,eAAe;KACb,QAAQ,KAAK;KACb,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;IACnC;IACD,UAAA;GAEO,CAAA;EACL;;AAET;AAEA,SAAS,cAAc;CACrB,MAAM,WAAW,aAAa,MAAM,EAAE,QAAQ;CAC9C,aAAa,MAAM,EAAE,UAAU;CAC/B,IAAI,CAAC,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,WAAU,kBAAmB,CAAA;CACxD,MAAM,QAAmB,CAAC;CAC1B,IAAI,IAAiB,SAAS,aAAa,IAAI,WAAW,SAAS;CACnE,OAAO,KAAK,EAAE,aAAa,GAAG;EAC5B,MAAM,QAAQ,CAAY;EAC1B,IAAI,EAAE;CACR;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAA2B,MAAM,OAAO;GACnD,IAAI,IAAI,GAAG,aAAa,GAAG;EAC7B;EAFF,UAAA,CAGG,MAAM,KAAK,IAAI,MACd,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAEE,WAAW,YAAY,OAAO,WAAW,gBAAgB;GACzD,eAAe,YAAY,SAAS,CAAC,CAAC,OAAO,IAAI,IAAI;GACrD,oBAAoB,YAAY,SAAS,CAAC,CAAC,MAAM,EAAE;GACnD,oBAAoB,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;GALvD,UAAA,CAOE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAmB,UAAA,GAAG;GAAgB,CAAA,GACrD,aAAa,EAAE,CAAC,CAAC,MAAM,GAAG,UAAU,MAAM,CACvC;EARC,GAAA,CAQD,CACP,GACA,SAAS,aAAa,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAuB,UAAA;EAAW,CAAA,CAC3E;;AAET;AAEA,SAAS,UAAU;CACjB,MAAM,MAAM,aAAa,MAAM,EAAE,UAAU;CAC3C,MAAM,WAAW,aAAa,MAAM,EAAE,QAAQ;CAC9C,MAAM,KAAK,YAAY,SAAS,aAAa,IAAK,WAAuB,UAAU,iBAAiB;CACpG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAW,MAAK;GAC5B,UAAA,KAAK,KAAK,CAAC,IAAI,WACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAiB,MAAK;IAAM,WAAU;IAAU,iBAAe,QAAQ;IAAI,eAAe,YAAY,SAAS,CAAC,CAAC,cAAc,EAAE;IAC9H,UAAA;GACK,GAFK,EAEL,CACT;EACE,CAAA,GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACZ,UAAA,CAAC,MAAM,CAAC,GAAG,cACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAY,UAAA;GAA6C,CAAA,IAExE,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAD;IAAe,OAAO;IAAtB,UAAA;KACG,QAAQ,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAgB,GAAK,CAAA;KACzC,QAAQ,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAkB,GAAK,CAAA;KAC7C,QAAQ,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAgB,GAAK,CAAA;KACzC,QAAQ,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD,EAA2C,GAAK,GAA3B,aAAa,EAAE,CAAY;IAC5D;;EAEd,CAAA,CACF;;AAET;;;AClLA,IAAM,cAAc;AAEpB,SAAS,WAAW,KAA4B;CAC9C,MAAM,MAA8B,CAAC;CACrC,KAAK,MAAM,QAAQ,IAAI,MAAM,GAAG,GAAG;EACjC,MAAM,IAAI,KAAK,QAAQ,GAAG;EAC1B,IAAI,MAAM,IAAI;EACd,MAAM,OAAO,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK;EACnC,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK;EACrC,IAAI,CAAC,YAAY,KAAK,IAAI,KAAK,YAAY,KAAK,KAAK,GAAG;EACxD,IAAI,KAAK,QAAQ,cAAc,GAAG,MAAM,EAAE,YAAY,CAAC,KAAK;CAC9D;CACA,OAAO;AACT;;;;;AAMA,SAAgB,WAAW,MAAiB,WAAkC;CAC5E,IAAI,WAAW,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAe,IAAI,MAAM,IAAI,OAAO,CAAC,CAAQ,EAAA,GAAlC,CAAkC,CAAC;CACvF,MAAM,MAAmB,CAAC;CAC1B,IAAI,OAAO;CACX,IAAI,OAAO,KAAK,OAAO,YAAY,KAAK,EAAE,CAAC,SAAS,GAAG,GAAG;EACxD,MAAM,MAAM,KAAK;EACjB,OAAO,KAAK,MAAM,CAAC;EACnB,IAAI;EACJ,IAAI,MAAM;EACV,IAAI,MAAM;EACV,MAAM,iBAAiB;GACrB,IAAI,KAAK,IAAI,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAA+B;IAAQ,UAAA;GAAU,GAAtC,IAAI,OAAkC,CAAC;GACpE,MAAM;EACR;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GACnC,MAAM,KAAK,IAAI;GACf,IAAI,OAAO,OAAO,MAAM,IAAI,SAAS,GAAG;IACtC,OAAO;IACP;GACF;GACA,MAAM,OAAO,IAAI,IAAI;GACrB,IAAI,SAAS,KAAK;IAChB,OAAO;IACP;IACA;GACF;GACA,IAAI,CAAC,UAAU,SAAS,IAAI,GAAG;IAC7B,OAAO;IACP;GACF;GACA;GACA,IAAI,SAAS,KAAK;IAChB,SAAS;IACT,QAAQ,WAAW,OAAO,KAAK,MAAM,KAAK,EAAE,CAAC;IAC7C;GACF;GACA,IAAI,CAAC,KAAK,QAAQ;IAChB,OAAO,MAAM;IACb;GACF;GACA,MAAM,IAAI,KAAK,MAAM;GACrB,IAAI,SAAS,KAAK,OAAO,OAAO,MAAM,WAAW,IAAI,UAAU,CAAC;QAC3D,IAAI,SAAS,OAAO,SAAS,KAAK,OAAO,OAAO,MAAM,WAAW,QAAQ,OAAO,SAAS,OAAO,CAAC,GAAG,EAAE,CAAC;QACvG,IAAI,SAAS,KAAK,OAAO,OAAO,MAAM,WAAW,QAAQ,OAAO,WAAW,OAAO,CAAC,CAAC,CAAC;QACrF;IACH,SAAS;IACT,IAAI,KACF,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAA+B;KAAO,WAAU;KAC7C,UAAA,aAAa,CAAC,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAiB,OAAO,EAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAc,OAAO,EAAI,CAAA;IACxE,GAFK,IAAI,OAET,CACR;GACF;EACF;EACA,SAAS;CACX;CACA,KAAK,SAAS,GAAG,MAAM;EACrB,IAAI,IAAI,UAAU,GAAG,IAAI,KAAK,GAAG;EACjC,IAAI,OAAO,MAAM,UAAU,IAAI,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAqB,EAAQ,GAAlB,IAAI,GAAc,CAAC;OAC7D,IAAI,aAAa,CAAC,GAAG,IAAI,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAoB,WAAU;GAAiB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAiB,OAAO,EAAI,CAAA;EAAO,GAAvE,IAAI,GAAmE,CAAC;OACjH,IAAI,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAA4B,OAAO,EAAI,GAApB,IAAI,GAAgB,CAAC;CACxD,CAAC;CACD,OAAO;AACT;AAEA,SAAS,UAAU,GAAoB;CACrC,IAAI;EACF,IAAI,OAAO,MAAM,YAAY,MAAM,MAAM,OAAO,OAAO,UAAU,SAAS,KAAK,CAAC;EAChF,OAAO,OAAO,CAAC;CACjB,QAAQ;EACN,OAAO;CACT;AACF;;AAGA,SAAgB,WAAW,MAAyB;CAClD,OAAO,KACJ,KAAK,MAAM;EACV,IAAI,OAAO,MAAM,UAAU,OAAO;EAClC,IAAI;GACF,IAAI,aAAa,OAAO,OAAO,GAAG,EAAE,KAAK,IAAI,EAAE;GAC/C,IAAI,OAAO,MAAM,YAAY,MAAM,MAAM,OAAO,KAAK,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,GAAI,KAAK;GACrF,OAAO,OAAO,CAAC;EACjB,QAAQ;GACN,OAAO;EACT;CACF,CAAC,CAAC,CACD,KAAK,GAAG;AACb;;AC3GA,IAAI;;AAGJ,SAAS,UAAmC;CAC1C,OAAO;EACL,IAAI,YAAY,SAAS,CAAC,CAAC;EAC3B,IAAI;EACJ,IAAI,KAAa,OAAmB,aAAa,KAAK,cAAc,GAAG;EACvE,KAAK,KAAa,OAAmB,aAAa,MAAM,KAAK,KAAK,iBAAiB,GAAG,CAAC;EACvF,KAAK,OAAe,MAAY,aAAa;GAC3C,MAAM,MAAM,SAAS,SAAS,OAAO,KAAK,MAAM,YAAY,4BAA4B,IAAI;GAC5F,OAAO,MAAM,KAAK,EAAE,QAAQ,IAAI,eAAe,IAAI,GAAG,MAAM,IAAI,aAAa,CAAC,CAAC;EACjF;EACA,OAAO,MAAe;GACpB,MAAM,OAAO,OAAO,MAAM,WAAW,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC;GAClE,UAAU,WAAW,UAAU,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC;EAErD;EACA,aAAa,IAAI,KAAK,iBAAiB,EAAE,SAAS,MAAM,CAAC;EACzD,OAAO,MAAc,OAAO,KAAK,CAAC;EAClC,SAAS,MAAc,OAAO,OAAO,CAAC;EACtC,UAAU,MAAe;GACvB,IAAI,OAAO,SAAS,eAAe,aAAa,MAAM,YAAY,SAAS,CAAC,CAAC,OAAO,GAAG,IAAI;GAC3F,OAAO;EACT;CACF;AACF;;;;;AAMA,SAAgB,kBAAkB,MAAsB;CACtD,OAAO,KAAK,QAAQ,2CAA2C,SAAS;AAC1E;;;;;AAQA,eAAsB,SAAS,MAAmC;CAChE,MAAM,MAAM,kBAAkB,IAAI;CAClC,MAAM,WAAW,YAAY,KAAK,GAAG;CACrC,MAAM,IAAI,QAAQ;CAClB,MAAM,MAAM;CACZ,MAAM,YAAsB,CAAC;CAE7B,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAC,GAAG;EACtC,IAAI,KAAK,KAAK;EACd,IAAI;GACF,OAAO,eAAe,KAAK,GAAG;IAAE,OAAO;IAAG,cAAc;IAAM,UAAU;GAAK,CAAC;GAC9E,UAAU,KAAK,CAAC;EAClB,QAAQ,CAAC;CACX;CACA,MAAM,eAAe;CACrB,MAAM,OAAO,MAAc,aAAa,CAAC;CACzC,IAAI;EACF,IAAI;EACJ,IAAI,UAAU;EACd,IAAI,UAAU;GACZ,UAAU;GACV,IAAI;IACF,QAAQ,MAAM,IAAI,iBAAiB,IAAI,OAAO;GAChD,SAAS,GAAG;IACV,IAAI,EAAE,aAAa,cAAc,MAAM;IACvC,QAAQ,MAAM,IAAI,iBAAiB,IAAI,OAAO;GAChD;EACF,OAAO;GACL,MAAM,UAAU,IAAI,KAAK;GAEzB,IAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GACjD,IAAI;IACF,QAAQ,IAAI,IAAI,QAAQ,EAAE;GAC5B,SAAS,GAAG;IACV,IAAI,EAAE,aAAa,cAAc,MAAM;IACvC,QAAQ,IAAI,GAAG;GACjB;QACK,QAAQ,IAAI,GAAG;EACxB;EACA,aAAa;EACb,OAAO;GAAE,IAAI;GAAM;GAAO;EAAQ;CACpC,SAAS,OAAO;EACd,IAAI,iBAAiB,aAAa,uCAAuC,KAAK,OAAO,KAAK,CAAC,GACzF,OAAO;GACL,IAAI;GACJ,uBAAO,IAAI,MACT,wHACF;EACF;EAEF,OAAO;GAAE,IAAI;GAAO;EAAM;CAC5B,UAAU;EACR,KAAK,MAAM,KAAK,WACd,IAAI;GACF,OAAO,IAAI;EACb,QAAQ,CAAC;CAEb;AACF;AAEA,IAAM,WAAW;CAAC;CAAS;CAAS;CAAS;CAAQ;CAAS;CAAS;CAAS;CAAY;CAAY;CAAW;CAAU;CAAM;CAAQ;CAAU;CAAW;CAAS;CAAW;CAAO;CAAY;CAAM;CAAU;CAAM;CAAc;CAAO;CAAO;CAAQ;CAAU;CAAS;CAAU;CAAQ;CAAS;CAAQ;CAAO;CAAU;CAAa;CAAO;CAAQ;CAAS;CAAQ;AAAO;AAE5X,SAAS,iBAAiB,KAAwB;CAChD,MAAM,wBAAQ,IAAI,IAAY;CAC9B,IAAI,MAAW;CACf,IAAI,QAAQ;CACZ,IAAI;EACF,OAAO,OAAO,QAAQ,QAAQ,IAAI;GAChC,KAAK,MAAM,KAAK,OAAO,oBAAoB,GAAG,GAAG,MAAM,IAAI,CAAC;GAC5D,MAAM,OAAO,eAAe,GAAG;GAC/B;EACF;CACF,QAAQ,CAAC;CACT,OAAO,MAAM,KAAK,KAAK;AACzB;;;;;AAMA,SAAgB,YAAY,OAAoD;CAC9E,MAAM,IAAI,MAAM,MAAM,+CAA+C;CACrE,IAAI,CAAC,GAAG,OAAO;EAAE,QAAQ;EAAI,OAAO,CAAC;CAAE;CACvC,MAAM,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,IAAI;CACxC,MAAM,SAAS,EAAE,MAAM;CACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAAE;EAAQ,OAAO,CAAC;CAAE;CACjD,IAAI;CACJ,IAAI,MAAM;EACR,IAAI,MAAW;EACf,IAAI;GACF,KAAK,MAAM,QAAQ,KAAK,MAAM,GAAG,GAAG;IAClC,IAAI,SAAS,YAAY,QAAQ,QAAQ;IACzC,MAAM,OAAO,eAAe,KAAK,IAAI;IAErC,IAAI,QAAQ,KAAK,OAAO,CAAC,aAAa,GAAG,GAAG,OAAO;KAAE;KAAQ,OAAO,CAAC;IAAE;IACvE,MAAM,IAAI;IACV,IAAI,OAAO,MAAM,OAAO;KAAE;KAAQ,OAAO,CAAC;IAAE;GAC9C;EACF,QAAQ;GACN,OAAO;IAAE;IAAQ,OAAO,CAAC;GAAE;EAC7B;EACA,aAAa,iBAAiB,GAAG;CACnC,OACE,aAAa;EAAC,GAAG,iBAAiB,MAAM;EAAG,GAAG;EAAU;EAAM;EAAM;EAAK;EAAM;EAAM;EAAQ;EAAS;EAAQ;EAAU;CAAS;CAEnI,MAAM,QAAQ,OAAO,YAAY;CAKjC,OAAO;EAAE;EAAQ,OAJH,MAAM,KAAK,IAAI,IAAI,UAAU,CAAC,CAAC,CAC1C,QAAQ,MAAM,MAAM,UAAU,EAAE,YAAY,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CACrF,MAAM,GAAG,MAAO,EAAE,WAAW,MAAM,MAAM,EAAE,WAAW,MAAM,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,WAAW,MAAM,IAAI,KAAK,CAAE,CAAC,CACpH,MAAM,GAAG,EACK;CAAM;AACzB;AAEA,SAAS,eAAe,KAAU,KAA6C;CAC7E,IAAI,MAAM;CACV,KAAK,IAAI,IAAI,GAAG,OAAO,IAAI,IAAI,KAAK;EAClC,MAAM,IAAI,OAAO,yBAAyB,KAAK,GAAG;EAClD,IAAI,GAAG,OAAO;EACd,MAAM,OAAO,eAAe,GAAG;CACjC;AAEF;AAEA,SAAS,aAAa,KAAuB;CAC3C,OACE,QAAQ,UACR,QAAQ,YACP,OAAO,SAAS,eAAe,eAAe,QAC/C,QAAQ,YACR,QAAQ,aACP,OAAO,YAAY,eAAe,eAAe;AAEtD;;AC3KA,SAAgB,aAAa,EAAE,cAAsC;CACnE,MAAM,CAAC,OAAO,aAAA,GAAYC,MAAAA,SAAAA,CAAS,EAAE;CACrC,MAAM,CAAC,cAAc,oBAAA,GAAmBA,MAAAA,SAAAA,CAAwB,IAAI;CACpE,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAS,EAAE;CACrC,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAoE,IAAI;CACtG,MAAM,OAAA,GAAMC,MAAAA,OAAAA,CAA4B,IAAI;CAE5C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,SAAS,MAAM;CACrB,GAAG,CAAC,UAAU,CAAC;CAGf,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,KAAK,IAAI;EACf,IAAI,CAAC,IAAI;EACT,GAAG,MAAM,SAAS;EAClB,GAAG,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,cAAc,GAAG,EAAE;CACtD,GAAG,CAAC,KAAK,CAAC;CAEV,MAAM,MAAM,YAAY;EACtB,MAAM,OAAO,MAAM,KAAK;EACxB,IAAI,CAAC,MAAM;EACX,WAAW,SAAS,CAAC,CAAC,YAAY,IAAI;EACtC,SAAS,EAAE;EACX,gBAAgB,IAAI;EACpB,WAAW,IAAI;EACf,IAAI,KAAK,iBAAiB;GAAE,OAAO;GAAO,MAAM;GAAS,MAAM,CAAC,IAAI;GAAG,WAAW,KAAK,IAAI;EAAE,CAAC;EAC9F,MAAM,MAAM,MAAM,SAAS,IAAI;EAC/B,IAAI,IAAI,IACN,IAAI,KAAK,iBAAiB;GAAE,OAAO;GAAO,MAAM;GAAU,MAAM,CAAC,IAAI,KAAK;GAAG,WAAW,KAAK,IAAI;EAAE,CAAC;OAEpG,IAAI,KAAK,iBAAiB;GACxB,OAAO;GACP,MAAM;GACN,QAAQ;GACR,MAAM,CAAC,IAAI,KAAK;GAChB,WAAW,KAAK,IAAI;GACpB,OAAQ,IAAI,OAAiB;EAC/B,CAAC;CAEL;CAEA,MAAM,qBAAqB,MAAc,UAAkB;EACzD,IAAI,UAAU,KAAK,QAAQ,OAAO,WAAW,IAAI;EACjD,MAAM,EAAE,QAAQ,UAAU,YAAY,IAAI;EAC1C,WAAW,MAAM,SAAS;GAAE;GAAQ;GAAO,OAAO;EAAE,IAAI,IAAI;CAC9D;CAEA,MAAM,eAAe;EACnB,IAAI,CAAC,SAAS,OAAO;EACrB,MAAM,OAAO,QAAQ,MAAM,QAAQ;EACnC,SAAS,MAAM,MAAM,GAAG,MAAM,SAAS,QAAQ,OAAO,MAAM,IAAI,IAAI;EACpE,WAAW,IAAI;EACf,OAAO;CACT;CAEA,MAAM,aAAa,MAAgD;EACjE,MAAM,KAAK,EAAE;EACb,IAAI,SAAS;GACX,IAAI,EAAE,QAAQ,SAAU,EAAE,QAAQ,gBAAgB,GAAG,mBAAmB,MAAM,QAAS;IACrF,EAAE,eAAe;IACjB,OAAO;IACP;GACF;GACA,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;IAChD,EAAE,eAAe;IACjB,MAAM,IAAI,QAAQ,MAAM;IACxB,WAAW;KAAE,GAAG;KAAS,QAAQ,QAAQ,SAAS,EAAE,QAAQ,cAAc,IAAI,MAAM,KAAK;IAAE,CAAC;IAC5F;GACF;GACA,IAAI,EAAE,QAAQ,UAAU;IACtB,EAAE,eAAe;IACjB,EAAE,gBAAgB;IAClB,WAAW,IAAI;IACf;GACF;EACF;EACA,IAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,UAAU;GACpC,EAAE,eAAe;GACjB,IAAS;GACT;EACF;EACA,IAAI,EAAE,QAAQ,QAAQ,EAAE,WAAW,EAAE,UAAU;GAC7C,EAAE,eAAe;GACjB,IAAI,KAAK,iBAAiB,EAAE,SAAS,MAAM,CAAC;GAC5C;EACF;EACA,MAAM,UAAU,WAAW,SAAS,CAAC,CAAC;EACtC,MAAM,YAAY,CAAC,MAAM,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,SAAS,IAAI;EAClE,MAAM,WAAW,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,SAAS,IAAI;EAC5D,IAAI,EAAE,QAAQ,aAAa,aAAa,QAAQ,QAAQ;GACtD,EAAE,eAAe;GACjB,MAAM,MAAM,iBAAiB,OAAO,QAAQ,SAAS,IAAI,KAAK,IAAI,GAAG,eAAe,CAAC;GACrF,IAAI,iBAAiB,MAAM,SAAS,KAAK;GACzC,gBAAgB,GAAG;GACnB,SAAS,QAAQ,IAAI;EACvB,OAAO,IAAI,EAAE,QAAQ,eAAe,YAAY,iBAAiB,MAAM;GACrE,EAAE,eAAe;GACjB,MAAM,MAAM,eAAe;GAC3B,IAAI,OAAO,QAAQ,QAAQ;IACzB,gBAAgB,IAAI;IACpB,SAAS,KAAK;GAChB,OAAO;IACL,gBAAgB,GAAG;IACnB,SAAS,QAAQ,IAAI;GACvB;EACF;CACF;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GACd,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,MAAM,GAAK,CAAA;EACnB,CAAA,GACN,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;IACO;IACL,WAAU;IACV,MAAM;IACC;IACP,YAAY;IACZ,gBAAe;IACf,cAAa;IACb,cAAW;IACX,aAAY;IACZ,WAAW,MAAM;KACf,SAAS,EAAE,OAAO,KAAK;KACvB,gBAAgB,IAAI;KACpB,kBAAkB,EAAE,OAAO,OAAO,EAAE,OAAO,cAAc;IAC3D;IACW;IACX,cAAc,iBAAiB,WAAW,IAAI,GAAG,GAAG;GACrD,CAAA,GACA,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAA2B,MAAK;IAC5C,UAAA,QAAQ,MAAM,KAAK,MAAM,MACxB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAEE,MAAK;KACL,iBAAe,MAAM,QAAQ;KAC7B,WAAW,MAAM,QAAQ,QAAQ,eAAe;KAChD,cAAc,MAAM;MAClB,EAAE,eAAe;MACjB,WAAW;OAAE,GAAG;OAAS,OAAO;MAAE,CAAC;MACnC,SAAS,MAAM,MAAM,GAAG,MAAM,SAAS,QAAQ,OAAO,MAAM,IAAI,IAAI;MACpE,WAAW,IAAI;KACjB;KAVF,UAAA,CAYE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAA,UAAI,KAAK,MAAM,GAAG,QAAQ,OAAO,MAAM,EAAK,CAAA,GAC3C,KAAK,MAAM,QAAQ,OAAO,MAAM,CAC9B;IAbE,GAAA,IAaF,CACN;GACE,CAAA,CAEJ;EACF,CAAA,CAAA;;AAET;;ACvJA,IAAM,eAA4C;CAChD,SAAS;CACT,MAAM;CACN,UAAU;CACV,QAAQ;AACV;AAEA,SAAS,cAAc,QAA8C;CACnE,MAAM,KAAM,OAAO,KAAK,MAAM,CAAC,CAAmB,QAAQ,MAAM,OAAO,EAAE;CACzE,IAAI,GAAG,WAAW,GAAG,OAAO;CAC5B,IAAI,GAAG,WAAW,KAAK,CAAC,OAAO,SAAS,OAAO;CAC/C,IAAI,GAAG,WAAW,GAAG,OAAO;CAC5B,IAAI,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,GAAG,IAAI;CACnD,OAAO;AACT;AAEA,SAAS,aAAa,MAA+C;CACnE,MAAM,IAAI,KAAK,KAAK;CACpB,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,KAAK,EAAE,MAAM,oBAAoB;CACvC,IAAI,IACF,IAAI;EACF,MAAM,IAAI,IAAI,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG;EACrE,QAAQ,MAAM,EAAE,KAAK,CAAC;CACxB,QAAQ,CAAC;CAEX,MAAM,MAAM,EAAE,WAAW,GAAG;CAC5B,MAAM,UAAU,MAAM,EAAE,MAAM,CAAC,IAAI,EAAA,CAAG,YAAY;CAClD,QAAQ,MAAM,EAAE,YAAY,CAAC,CAAC,SAAS,MAAM,MAAM;AACrD;AAEA,SAAgB,eAAe;CAC7B,MAAM,UAAU,YAAY,MAAM,EAAE,OAAO;CAC3C,MAAM,SAAS,YAAY,MAAM,EAAE,MAAM;CACzC,MAAM,aAAa,YAAY,MAAM,EAAE,UAAU;CACjD,MAAM,UAAU,YAAY,MAAM,EAAE,YAAY;CAChD,MAAM,WAAW,aAAa,MAAM,EAAE,kBAAkB;CACxD,MAAM,aAAa,aAAa,MAAM,EAAE,iBAAiB;CACzD,MAAM,iBAAiB,aAAa,MAAM,EAAE,cAAc;CAC1D,MAAM,OAAO,eAAe;CAC5B,MAAM,WAAA,GAAUC,MAAAA,OAAAA,CAAuB,IAAI;CAC3C,MAAM,iBAAA,GAAgBA,MAAAA,OAAAA,CAAO,IAAI;CACjC,MAAM,CAAC,YAAY,kBAAA,GAAiBC,MAAAA,SAAAA,CAAS,CAAC;CAE9C,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OAAc;EAC5B,MAAM,QAAQ,aAAa,UAAU;EACrC,MAAM,mCAAmB,IAAI,IAAqB;EAClD,KAAK,MAAM,KAAK,SAAS,IAAI,EAAE,SAAS,eAAe,iBAAiB,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS;EAC/F,OAAO,QAAQ,QAAQ,MAAM;GAC3B,IAAI,EAAE,UAAU,MAAM,MAAM,QAAQ,MAAM,iBAAiB,IAAI,CAAC,KAAK,KAAK,GAAG,OAAO;GACpF,IAAI,EAAE,SAAS,WAAW,EAAE,SAAS,YAAY,EAAE,SAAS,YAAY,EAAE,SAAS,eAAe;IAChG,IAAI,EAAE,SAAS,eAAe,OAAO,OAAO,SAAS,CAAC,SAAS,MAAM,WAAW,EAAE,IAAI,CAAC;IACvF,OAAO,CAAC,SAAS,MAAM,WAAW,EAAE,IAAI,CAAC;GAC3C;GACA,IAAI,CAAC,OAAO,cAAc,EAAE,KAAK,IAAI,OAAO;GAC5C,IAAI,SAAS,CAAC,MAAM,WAAW,EAAE,IAAI,IAAI,OAAO,EAAE,UAAU,GAAG,GAAG,OAAO;GACzE,OAAO;EACT,CAAC;CACH,GAAG;EAAC;EAAS;EAAQ;EAAY;CAAO,CAAC;CAEzC,MAAM,cAAc,QAAQ,SAAS,QAAQ;CAE7C,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,KAAK,QAAQ;EACnB,IAAI,MAAM,cAAc,SAAS,GAAG,YAAY,GAAG;CACrD,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,iBAAiB;EACrB,MAAM,KAAK,QAAQ;EACnB,IAAI,CAAC,IAAI;EACT,cAAc,UAAU,GAAG,eAAe,GAAG,YAAY,GAAG,eAAe;CAC7E;CAEA,MAAM,cAAc,MAAwB;EAC1C,MAAM,IAAK,EAAE,cAA8B,sBAAsB;EACjE,MAAM,KAAK,WAAW,SAAS;EAC/B,KAAK,KAAK;GAAE,SAAS,EAAE;GAAM,SAAS,EAAE,SAAS;EAAE,GAAG;GACpD,GAAI,OAAO,KAAK,YAAY,CAAC,CAAmB,KAAK,OAAO;IAC1D,OAAO,aAAa;IACpB,MAAM,GAAG,OAAO,KAAK,MAAM;IAC3B,gBAAgB,GAAG,YAAY,CAAC;GAClC,EAAE;GACF,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAW,gBAAgB,GAAG,UAAU;KAAE,SAAS;KAAO,MAAM;KAAM,UAAU;KAAM,QAAQ;IAAK,CAAC;GAAE;GAC/G;IAAE,OAAO;IAAc,gBAAgB,GAAG,UAAU;KAAE,SAAS;KAAM,MAAM;KAAM,UAAU;KAAM,QAAQ;IAAK,CAAC;GAAE;EACnH,CAAC;CACH;CAEA,MAAM,cAAc,IAAI,KAAK,iBAAiB,EAAE,SAAS,MAAM,CAAC;CAEhE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAc,UAAU,MAAM;GAE3C,IAAK,EAAE,OAAuB,UAAU,SAAS,cAAc,KAAK,CAAC,OAAO,aAAa,CAAC,EAAE,SAAS,GAAG,eAAe,MAAM,IAAI,CAAC;EACpI;EAHA,UAAA;GAIE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAyB,cAAW;MAAgB,SAAS;MAClG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KACN,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MACE,WAAU;MACV,OAAO;OAAE,MAAM;OAAG,UAAU;MAAI;MAChC,aAAY;MACZ,cAAW;MACX,OAAO;MACP,WAAW,MAAM,WAAW,SAAS,CAAC,CAAC,cAAc,EAAE,OAAO,KAAK;KACpE,CAAA;KACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,WAAU;MAAW,SAAS;MAAY,iBAAc;MAAhE,UAAA,CACG,cAAc,MAAM,GAAE,IACjB;;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,MAAK;OAAW,SAAS;OAAU,WAAW,MAAM,eAAe,EAAE,oBAAoB,EAAE,OAAO,QAAQ,CAAC;MAAI,CAAA,GAAC,cAElH;;KACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAe,OAAO,EAAE,YAAY,EAAE;MAAvD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,MAAK;OAAW,SAAS;OAAY,WAAW,MAAM,eAAe,EAAE,mBAAmB,EAAE,OAAO,QAAQ,CAAC;MAAI,CAAA,GAAC,YAEnH;;KACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAC7B,cAAc,KAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAc,OAAO,EAAE,cAAc,EAAE;MAAvD,UAAA,CAA2D,aAAY,SAAa;;IACrG;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAe,KAAK;IAAmB;IAAU,MAAK;IAAM,aAAU;IAArF,UAAA,CACG,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;KAAuB,OAAO;KAAe;KAAY,WAAW,QAAQ,EAAE,OAAO,CAAC,CAAC,EAAE;IAAY,GAApF,EAAE,EAAkF,CACtG,GACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAA0B,WAAa,CAAA,CACpC;;GACJ,KAAK;EACH;;AAET;AAEA,IAAM,cAAA,GAAaC,MAAAA,KAAAA,CAAK,SAAS,WAAW,EAAE,OAAO,GAAG,YAAY,aAA+E;CACjJ,MAAM,CAAC,WAAW,iBAAA,GAAgBF,MAAAA,SAAAA,CAAS,EAAE,SAAS,OAAO;CAC7D,MAAM,MAAM;EAAC;EAAe,WAAW,EAAE;EAAS,aAAa,EAAE;CAAM,CAAC,CAAC,KAAK,GAAG;CACjF,MAAM,OACJ,EAAE,SAAS,UACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,MAAM,GAAK,CAAA,IACrB,EAAE,SAAS,WACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,MAAM,GAAK,CAAA,IACrB,EAAE,UAAU,UACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA,IACpB,EAAE,UAAU,SACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA,IACnB,EAAE,SAAS,WACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA,IACnB;CAEN,IAAI;CACJ,IAAI,EAAE,SAAS,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAgB,UAAA,OAAO,EAAE,KAAK,EAAE;CAAQ,CAAA;MAClF,IAAI,EAAE,SAAS,UAAU;EAC5B,MAAM,IAAI,EAAE,KAAK;EACjB,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,aAAa,CAAC,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAiB,OAAO,EAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAc,OAAO,EAAI,CAAA;CAC9G,OAAO,IAAI,EAAE,SAAS,SAAS,OAAO,EAAE,YAAY,OAAO,EAAE,KAAK,EAAE,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;EAAc,MAAM,EAAE,KAAK;EAAI,SAAS,EAAE;CAAU,CAAA;MACvH,IAAI,EAAE,SAAS,eAAe,EAAE,SAAS,aAAa;EACzD,MAAM,IAAI,EAAE,KAAK;EACjB,MAAM,SAAS,EAAE,SAAS,cAAc,2BAA2B;EACnE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAG,kBAAAA,UAAA,EAAA,UAAA,CACG,QACA,EAAE,YAAY,OAAO,CAAC,IAAI,aAAa,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAsB,UAAA,EAAE,OAAO,SAAS,EAAE,OAAO,IAAI,EAAE,QAAQ,GAAG,EAAE,KAAK,IAAI,EAAE,QAAQ,IAAI,EAAE,SAAS;EAAW,CAAA,IAAI,aAAa,CAAC,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAiB,OAAO,EAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAc,OAAO,EAAI,CAAA,CAChQ,EAAA,CAAA;CAEN,OAAO,IAAI,EAAE,SAAS,eACpB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EACE,WAAU;EACV,eAAe,WAAW,SAAS,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS;EACjE,MAAK;EACL,iBAAe,CAAC;EAJlB,UAAA;GAME,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,cAAc,YAAY,KAAK,cAAgB,CAAA;GAAC;GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAA,UAAI,WAAW,EAAE,MAAM,EAAE,SAAS,EAAK,CAAA;EACrG;;MAEH,OAAO,WAAW,EAAE,MAAM,EAAE,SAAS;CAE5C,MAAM,kBAAkB,EAAE,UAAU,EAAE,SAAS,WAAY,EAAE,SAAS,UAAU,EAAE,UAAU,WAAW,EAAE,UAAU,WAAW,EAAE,EAAE,KAAK,cAAc;CAErJ,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAW;EAAK,OAAO,EAAE,aAAa,KAAK,EAAE,QAAQ,GAAG;EAA7D,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAgB,UAAA;GAAW,CAAA;GAC1C,EAAE,SAAS,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAkB,UAAA,EAAE;GAAa,CAAA;GAClE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,cAAc,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CAAgC,YAAY,EAAE,SAAS,GAAE,GAAO;;KAC9E,mBACC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAuB,eAAe,aAAa,CAAC,SAAS;MAAG,MAAK;MAAS,iBAAe;MAA7G,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,cAAc,YAAY,cAAc,KAAO,CAAA,GAAE,GAC9D;;KAEP,EAAE,SAAS,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,iBAAoB,CAAA;KAChD;KACA,mBAAmB,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAiB,UAAA,WAAW,EAAE,KAAM;KAAO,CAAA;IACxF;;GACJ,EAAE,UAAU,EAAE,SAAS,WAAW,EAAE,SAAS,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAiB,OAAO,EAAE;IAAS,UAAA,EAAE;GAAa,CAAA;EACzH;;AAET,CAAC;AAED,SAAS,WAAW,OAAuB;CACzC,OAAO,MACJ,MAAM,IAAI,CAAC,CACX,KAAK,MAAM,EAAE,KAAK,CAAC,CAAC,CACpB,OAAO,OAAO,CAAC,CACf,KAAK,MAAM,SAAS,EAAE,QAAQ,UAAU,KAAK,CAAC,CAAC,CAC/C,KAAK,IAAI;AACd;AAEA,SAAS,aAAa,EAAE,MAAM,WAAkD;CAC9E,MAAM,OAA4B,CAAC;CACnC,IAAI;EACF,IAAI,gBAAgB,KAAK,KAAK,SAAS,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;OACpE,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK,SAAS,GAAG,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;OACzE,OAAO,QAAQ,IAAc,CAAC,CAAC,SAAS,CAAC,GAAG,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3E,QAAQ,CAAC;CACT,MAAM,uBAAO,IAAI,IAAY;CAC7B,IAAI,cAAc;CAClB,KAAK,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,GAAI,GACpC,IAAI,KAAK,OAAO,MAAM,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,KAAK,IAAI,CAAC,CAAC;MACpE,cAAc;CAErB,MAAM,UAAU,SAAS,SAAS,UAAU,MAAM,KAAK,IAAI;CAC3D,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,UAAW,CAAA;IACd,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAa,EAAM,GAAV,CAAU,CACpB;IACA,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,QAAS,CAAA;GAC3B,EAAA,CAAA,EACC,CAAA,GACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,KAAK,MAAM,GAAG,GAAI,CAAC,CAAC,KAAK,CAAC,GAAG,OAC5B,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA;IACV,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAa,KAAK,OAAO,MAAM,YAAY,KAAM,IAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;KAAc,OAAQ,EAAU;KAAI,OAAO;IAAI,CAAA,IAAI,GAAO,GAAjH,CAAiH,CAC3H;IACA,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,MAAM,QAAQ,OAAO,MAAM,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;KAAc,OAAO;KAAG,OAAO;IAAI,CAAA,IAAI,GAAO,CAAA;GACvG,EAAA,GANK,CAML,CACL,EACI,CAAA,CACF;;CACJ,CAAA;AAET;;AC5OA,IAAa,cAAA,GAAaC,QAAAA,OAAAA,CAAqB,CAAC,EAAE,KAAK,SAAS;CAC9D,UAAU,CAAC;CACX,KAAK;CACL,YAAY;CACZ,YAAY;CACZ,QAAQ;CACR,aAAa,CAAC,KAAK;CACnB,cAAc;CACd,cAAc;CACd,cAAc;CACd,WAAW;CACX,MAAM;CACN,SAAS,eAAe,IAAI,EAAE,WAAW,CAAC;CAC1C,aAAa;EACX,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,iBAAiB;EAChG,gBAAgB,CAAC;EACjB,eAAe,MAAM;EACrB,IAAI;GAAE,UAAU,CAAC;GAAG,YAAY;EAAK,CAAC;CACxC;CACA,MAAM,UAAU,IAAI,KAAK;CACzB,aAAa,GAAG,UAAU;EACxB,IAAI,MAAM,OAAO,OAAO,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,CAAC;EACpD,IAAI,MAAM,IAAI,CAAC,CAAC,YAAY,QAAQ,MAAM,MAAM,KAAK;EACrD,IAAI,OAAO,MAAM,IAAI,SAAS,CAAC,IAAI,IAAI,QAAQ,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;OACrE,MAAM,CAAC,CAAC;EACb,IAAI,EAAE,aAAa,IAAI,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC;CACjD;AACF,EAAE;AAEF,SAAgB,YAAY,GAAmB,SAAgC;CAC7E,IAAI,QAAQ,SAAS,KAAK,GAAG,OAAO;CACpC,OAAO,QAAQ,MAAM,MAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAAE,SAAS,QAAQ,EAAE,SAAS,CAAE;AACxG;AAIA,IAAI,gBAAkC,CAAC;AACvC,IAAM,iCAAiB,IAAI,IAAqC;AAChE,IAAI;AAEJ,SAAS,WAAW;CAClB,IAAI,UAAU,KAAA,GAAW;CACzB,QAAQ,WAAW,cAAc,EAAE;AACrC;AAEA,SAAgB,WAAW,GAAyB;CAClD,IAAI,CAAC,WAAW,SAAS,CAAC,CAAC,WAAW;CACtC,cAAc,KAAK,CAAC;CACpB,SAAS;AACX;AAEA,SAAgB,aAAa,IAAY,OAAsC;CAC7E,MAAM,OAAO,eAAe,IAAI,EAAE;CAClC,eAAe,IAAI,IAAI,OAAO;EAAE,GAAG;EAAM,GAAG;CAAM,IAAI,KAAK;CAC3D,SAAS;AACX;AAEA,SAAgB,eAAqB;CACnC,QAAQ,KAAA;CACR,IAAI,CAAC,cAAc,UAAU,CAAC,eAAe,MAAM;CACnD,MAAM,EAAE,UAAU,QAAQ,WAAW,SAAS;CAC9C,IAAI,OAAO,cAAc,SAAS,SAAS,OAAO,aAAa,IAAI,SAAS,MAAM;CAClF,gBAAgB,CAAC;CACjB,IAAI,eAAe,MAAM;EACvB,MAAM,wBAAQ,IAAI,IAAoB;EACtC,KAAK,SAAS,GAAG,MAAM,MAAM,IAAI,EAAE,IAAI,CAAC,CAAC;EACzC,KAAK,MAAM,CAAC,IAAI,UAAU,gBAAgB;GACxC,MAAM,IAAI,MAAM,IAAI,EAAE;GACtB,IAAI,MAAM,KAAA,GAAW,KAAK,KAAK;IAAE,GAAG,KAAK;IAAI,GAAG;GAAM;EACxD;EACA,eAAe,MAAM;CACvB;CACA,IAAI,KAAK,SAAS,KAAK;EACrB,MAAM,UAAU,KAAK,MAAM,GAAG,KAAK,SAAS,GAAG;EAC/C,KAAK,MAAM,KAAK,SAAS,IAAI,EAAE,mBAAmB,IAAI,gBAAgB,EAAE,iBAAiB;EACzF,OAAO,KAAK,MAAM,KAAK,SAAS,GAAG;CACrC;CACA,WAAW,SAAS,EAAE,UAAU,KAAK,CAAC;AACxC;;AAGA,SAAgB,YAAY,WAAuE;CACjG,KAAK,IAAI,IAAI,cAAc,SAAS,GAAG,KAAK,GAAG,KAAK,IAAI,UAAU,cAAc,EAAE,GAAG,OAAO,cAAc;CAC1G,MAAM,OAAO,WAAW,SAAS,CAAC,CAAC;CACnC,KAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,IAAI,UAAU,KAAK,EAAE,GAAG,OAAO,KAAK;AAEjF;AAIA,IAAM,eAAe;AAErB,SAAgB,uBAA6B;CAC3C,aAAa;CAYb,cAAc,cAXD,WACV,SAAS,CAAC,CACV,SAAS,MAAM,IAAI,CAAC,CACpB,KAAK,OAAO;EACX,GAAG;EACH,mBAAmB,KAAA;EACnB,cAAc,EAAE,gBAAgB,EAAE,aAAa,SAAS,MAAS,KAAA,IAAY,EAAE;EAC/E,WAAW,EAAE,gBAAgB,EAAE,aAAa,SAAS,MAAU,gBAA0B,EAAE;EAC3F,OAAO,EAAE,UAAU,YAAa,WAAqB,EAAE;EACvD,WAAW;CACb,EAC0B,GAAM,SAAS;AAC7C;AAEA,SAAgB,0BAAgC;CAC9C,MAAM,QAAQ,aAAsC,cAAc,MAAM,SAAS;CACjF,cAAc,cAAc,KAAA,GAAW,SAAS;CAChD,IAAI,OAAO,QAAQ,WAAW,SAAS,EAAE,UAAU,CAAC,GAAG,OAAO,GAAG,WAAW,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;AACpG;;AChIA,SAAgB,eAAe,EAAE,KAAK,WAAyD;CAC7F,MAAM,SAAA,GAAQC,MAAAA,QAAAA,OAAc;EAC1B,IAAI;GACF,OAAO,MAAM,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,QAAQ,CAAC;EAC3D,QAAQ;GACN,OAAO,CAAC;EACV;CACF,GAAG,CAAC,IAAI,GAAG,CAAC;CACZ,MAAM,OAAwB,CAAC,CAAC,WAAW,SAAS,CAAC;CACrD,IAAI,IAAI,WAAW,MAAM,QAAQ,KAAK,KAAK,CAAC,WAAW,SAAS,CAAC;CACjE,IAAI,IAAI,SAAS,MAAM,KAAK,KAAK,CAAC,YAAY,UAAU,CAAC;MACpD,KAAK,KAAK,CAAC,WAAW,SAAS,GAAG,CAAC,YAAY,UAAU,CAAC;CAC/D,IAAI,IAAI,gBAAgB,KAAK,KAAK,CAAC,aAAa,WAAW,CAAC;CAC5D,KAAK,KAAK,CAAC,UAAU,QAAQ,CAAC;CAE9B,MAAM,CAAC,KAAK,WAAA,GAAUC,MAAAA,SAAAA,CAAc,SAAS;CAC7C,MAAM,SAAS,KAAK,MAAM,CAAC,OAAO,MAAM,GAAG,IAAI,MAAM;CAErD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAW,MAAK;GAA/B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,WAAU;IAAe,OAAO,EAAE,WAAW,SAAS;IAAG,OAAM;IAAQ,cAAW;IAAwB,SAAS;IACzH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;GAChB,CAAA,GACP,KAAK,KAAK,CAAC,IAAI,WACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAiB,MAAK;IAAM,WAAU;IAAU,iBAAe,WAAW;IAAI,eAAe,OAAO,EAAE;IACnG,UAAA;GACK,GAFK,EAEL,CACT,CACE;EACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACG,WAAW,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAiB,IAAM,CAAA;IAC/C,WAAW,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;KAAiB;KAAY;IAAQ,CAAA;IAC7D,WAAW,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAiB,IAAM,CAAA;IAC/C,WAAW,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAkB,IAAM,CAAA;IACjD,WAAW,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAkB,IAAM,CAAA;IACjD,WAAW,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAwB,UAAA,IAAI;IAAoB,CAAA;IACzF,WAAW,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAgB,IAAM,CAAA;GAC3C;EACF,CAAA,CAAA;;AAET;AAEA,SAAS,QAAQ,EAAE,OAAO,UAAU,OAAO,cAAc,QAA0F;CACjJ,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,WAAW;CAC5C,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;EAAQ,WAAU;EAAoB,eAAe,QAAQ,CAAC,IAAI;EAAG,iBAAe;EAApF,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,cAAc,OAAO,cAAc,KAAO,CAAA;GAC1D;GACD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;GAC7B;EACK;CACP,CAAA,GAAA,QAAQ,QACF,EAAA,CAAA;AAEb;AAEA,SAAS,GAAG,EAAE,MAAM,SAA0D;CAC5E,IAAI,CAAC,KAAK,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAsB,UAAA,SAAS;CAAY,CAAA;CACnF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;EAAI,WAAU;EACX,UAAA,KAAK,KAAK,CAAC,GAAG,IAAI,MACjB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAiB,OAAO,EAAE,SAAS,WAAW;GAA9C,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA,GACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA,CACR;EAHK,GAAA,IAAI,CAGT,CACN;CACC,CAAA;AAER;AAEA,SAAS,WAAW,EAAE,OAAgC;CACpD,MAAM,CAAC,KAAK,WAAA,GAAUA,MAAAA,SAAAA,CAAS,KAAK;CACpC,MAAM,UAAiC;EACrC,CAAC,eAAe,IAAI,GAAG;EACvB,CAAC,kBAAkB,IAAI,MAAM;EAC7B,CAAC,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAwB,IAAM,GAAf,GAAe,CAAC;CACjD;CACA,IAAI,IAAI,cAAc,QAAQ,KAAK,CAAC,iBAAiB,IAAI,YAAY,CAAC;CACtE,IAAI,IAAI,WAAW,QAAQ,KAAK,CAAC,eAAe,OAAO,CAAC;CACxD,IAAI,IAAI,YAAY,QAAQ,KAAK,CAAC,cAAc,KAAK,CAAC;CACtD,IAAI,IAAI,OAAO,QAAQ,KAAK,CAAC,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAc,OAAO,EAAE,OAAO,wBAAwB;EAAI,UAAA,IAAI;CAAY,GAAhE,GAAgE,CAAC,CAAC;CAClH,MAAM,YAAY,CAAC,IAAI,gBAAgB,UAAU,IAAI,UAAU;CAC/D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAAS,OAAM;GACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD,EAAI,MAAM,QAAU,CAAA;EACb,CAAA;EACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GACE,OAAO,qBAAqB,IAAI,gBAAgB,OAAO;GACvD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;IAAO,WAAU;IAAe,UAAU,MAAM,EAAE,gBAAgB;IAAG,OAAO,EAAE,YAAY,SAAS;IAAnG,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAO,MAAK;KAAW,SAAS;KAAK,WAAW,MAAM,OAAO,EAAE,OAAO,OAAO;IAAI,CAAA,GAAC,MAC7E;;GAGR,UAAA,MACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAwB,UAAA,IAAI,gBAAgB,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI;GAAO,CAAA,IAEzG,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD;IACE,MAAM,IAAI;IACV,OACE,YACI,IAAI,cAAc,WAAW,IAAI,cAAc,QAC7C,0EACA,qFACF;GAEP,CAAA;EAEI,CAAA;EACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAAS,OAAO,oBAAoB,IAAI,eAAe,OAAO;GAC5D,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD;IACE,MAAM,IAAI;IACV,OAAM;GACP,CAAA;EACM,CAAA;CACN,EAAA,CAAA;AAET;AAEA,SAAS,UAAU,EAAE,OAAgC;CACnD,MAAM,QACJ,IAAI,UAAU,YAAY,IAAI,UAAU,cAAc,IAAI,UAAU,MAAM,MACtE,2BACC,IAAI,UAAU,MAAM,MACnB,yBACA,IAAI,UAAU,YACZ,uBACA;CACV,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,OAAO;GAAE,SAAS;GAAe,YAAY;GAAU,KAAK;EAAE;EAApE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,OAAO;GAAE,OAAO;GAAG,QAAQ;GAAG,cAAc;GAAO,YAAY;GAAO,SAAS;EAAe,EAAI,CAAA,GACvG,WAAW,GAAG,CACX;;AAEV;AAEA,SAAS,WAAW,EAAE,KAAK,SAA6D;CACtF,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;CAC1C,MAAM,IAAI,IAAI;CACd,MAAM,OAAO,GAAG,SAAS,UAAU,GAAG,SAAS,SAAS,aAAa,EAAE,IAAI,IAAI,EAAE,IAAI,MAAe;CACpG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA,CACG,MAAM,SAAS,KACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EAAS,OAAO,4BAA4B,MAAM,OAAO;EACvD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD,EAAI,MAAM,MAAQ,CAAA;CACX,CAAA,GAEV,KACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EACE,OAAO,EAAE,SAAS,SAAS,cAAc,EAAE,SAAS,eAAe,2BAA2B;EAC9F,OACE,EAAE,OACA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GACE,WAAU;GACV,UAAU,MAAM;IACd,EAAE,gBAAgB;IAClB,UAAU,CAAC,MAAM;GACnB;GAEC,UAAA,SAAS,gBAAgB;EACtB,CAAA,IACJ;EAGL,UAAA,SACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAwB,UAAA,EAAE;EAAU,CAAA,IACjD,EAAE,SACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD,EAAI,MAAM,EAAE,OAAS,CAAA,IACnB,KAAK,KACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,OAAO,EAAE,SAAS,WAAW;GAChC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;IAAiB,OAAO,KAAK;IAAO,iBAAA;GAAiB,CAAA;EAClD,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAwB,UAAA,EAAE,QAAQ;EAAe,CAAA;CAE3D,CAAA,CAER,EAAA,CAAA;AAET;AAEA,SAAS,gBAAgB,EAAE,OAAgC;CACzD,IAAI,MAAM;CACV,QAAQ,IAAI,WAAZ;EACE,KAAK;GACH,MAAM,IAAI,UAAU,YAAY,0BAA0B;GAC1D;EACF,KAAK;GACH,MACE,IAAI,cAAc,WAAW,IAAI,cAAc,QAC3C,IAAI,SAAS,qGACb;GACN;EACF,KAAK;GACH,MAAM;GACN;EACF,KAAK;GACH,MAAM,oBAAoB,YAAY,IAAI,YAAY,EAAE;GACxD;EACF,KAAK,QACH,IAAI,IAAI,UAAU,YAAY,IAAI,UAAU,WAAW,MAAM,IAAI,SAAS;CAE9E;CACA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAa,UAAA;CAAS,CAAA;AAC9C;AAEA,SAAS,WAAW,EAAE,OAAgC;CACpD,IAAI,IAAI,qBAAqB,WAAW,KAAK,IAAI,YAAY,EAAE,GAC7D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,KAAK,IAAI;GAAmB,KAAI;EAAI,CAAA,GACzC,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACG,IAAI;IAAS;IAAI,YAAY,IAAI,YAAY;GAC3C;EACF,CAAA,CAAA;;CAGT,IAAI,IAAI,SAAS,SAAS,IAAI,cAAc,eAC1C,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,KAAK,IAAI;GAAK,KAAI;EAAI,CAAA;CACxB,CAAA;CAGT,IAAI,IAAI,gBAAgB,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAsB,IAAM,CAAA;CACjE,MAAM,OAAO,aAAa,IAAI,YAAY;CAC1C,IAAI,KAAK,IACP,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,OAAO,EAAE,SAAS,WAAW;EAChC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;GAAiB,OAAO,KAAK;GAAO,iBAAA;EAAiB,CAAA;CAClD,CAAA;CAGT,IAAI,OAAO,KAAK,IAAI,YAAY,EAAE,KAAK,wBAAwB,KAAK,IAAI,YAAY,GAElF,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,WAAU;EAAe,SAAQ;EAAG,QAAQ,IAAI;EAAc,OAAM;CAAgB,CAAA;CAErG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAwB,UAAA,IAAI;CAAkB,CAAA;AACtE;AAEA,SAAS,YAAY,EAAE,OAAgC;CACrD,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;CAC1C,IAAI,IAAI,gBAAgB,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAsB,IAAM,CAAA;CACjE,MAAM,OAAO,SAAS,aAAa,IAAI,YAAY,IAAI,EAAE,IAAI,MAAe;CAC5E,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,OAAO;GAAE,SAAS;GAAQ,eAAe;GAAU,WAAW;GAAG,MAAM;EAAE;EAA9E,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA;IACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS;MAAQ,WAAW,MAAM,UAAU,EAAE,OAAO,OAAO;KAAI,CAAA,GAAC,eACnF;;IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;IAC7B,IAAI,cAAc,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAc,UAAA;IAAuB,CAAA;GACpF;EACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAuB,OAAO,EAAE,MAAM,EAAE;GACpD,UAAA,KAAK,KAAK,KAAK,UAAU,KAAK,OAAO,MAAM,CAAC,IAAI,IAAI,gBAAgB;EAClE,CAAA,CACF;;AAET;AAEA,SAAS,YAAY,EAAE,OAAgC;CACrD,MAAM,SAAS,IAAI,UAAU,CAAC;CAC9B,IAAI,CAAC,OAAO,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAY,UAAA;CAAqB,CAAA;CAC3E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAI,OAAO,EAAE,OAAO,GAAG,EAAI,CAAA;IAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;IACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAAI,OAAO,EAAE,OAAO,GAAG;KAAG,UAAA;IAAU,CAAA;IACpC,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAAI,OAAO,EAAE,OAAO,IAAI;KAAG,UAAA;IAAQ,CAAA;GACjC,EAAA,CAAA,EACC,CAAA,GACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,OAAO,KAAK,GAAG,MACd,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;IAAY,WAAW,EAAE,cAAc,SAAS,gBAAgB;IAAhE,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,cAAc,SAAS,MAAM,IAAQ,CAAA;KAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,OAAO,EAAE;MAAO,UAAA,EAAE;KAAS,CAAA;KAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,KAAS,CAAA;KAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,mBAAmB,EAAM,CAAA;IAC7C;GALK,GAAA,CAKL,CACL,EACI,CAAA,CACF;;CACJ,CAAA;AAET;AAEA,SAAS,UAAU,EAAE,OAAgC;CACnD,MAAM,IAAI,IAAI;CACd,MAAM,QAAQ,IAAI,WAAW,OAAO,IAAI,UAAU,IAAI,YAAY,GAAG;CACrE,MAAM,SAAiD,IACnD;EACE;GAAC;GAAY,EAAE;GAAU;EAAS;EAClC;GAAC;GAAc,EAAE;GAAK;EAAS;EAC/B;GAAC;GAAsB,EAAE;GAAS;EAAS;EAC3C;GAAC;GAAO,EAAE;GAAK;EAAS;EACxB;GAAC;GAA2B,EAAE;GAAS;EAAS;EAChD;GAAC;GAA+B,EAAE;GAAS;EAAS;EACpD;GAAC;GAAoB,EAAE;GAAU;EAAS;CAC5C,IACA,CAAC;CACL,MAAM,MAAM,KAAK,IAAI,GAAG,GAAG,OAAO,KAAK,GAAG,OAAO,KAAK,CAAC,CAAC;CACxD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,OAAO,EAAE,SAAS,GAAG;EAA1B,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,IAAD,EACE,MAAM;IACJ,CAAC,cAAc,IAAI,KAAK,IAAI,QAAQ,CAAC,CAAC,mBAAmB,IAAI,IAAI,OAAO,KAAK,MAAM,IAAI,WAAW,GAAI,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG;IAC3H,CAAC,aAAa,GAAG,eAAe,IAAI,SAAS,EAAE,iBAAiB;IAChE,CAAC,YAAY,IAAI,UAAU,YAAY,aAAa,eAAe,KAAK,CAAC;GAC3E,EACD,CAAA;GACA,IACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAU;IACf,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,OACE,QAAQ,GAAG,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,CACrC,KAAK,CAAC,OAAO,GAAG,WACf,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,MAAU,CAAA;KACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,OAAO,EAAE,OAAO,MAAM;MACxB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO;OAAE,YAAY;OAAG,OAAO,GAAG,KAAK,IAAI,IAAK,KAAK,KAAK,MAAO,GAAG,EAAE;OAAI,QAAQ;OAAG,YAAY;OAAO,cAAc;MAAE,EAAI,CAAA;KAC/H,CAAA;KACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAI,OAAO,EAAE,WAAW,QAAQ;MAAI,UAAA,eAAe,CAAC;KAAM,CAAA;IACxD,EAAA,GANK,KAML,CACL,EACE,CAAA;GACF,CAAA,IACL;GACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAG,WAAU;IAAc,OAAO,EAAE,WAAW,GAAG;IAC/C,UAAA,IACG,qJACA;GACH,CAAA;EACA;;AAET;;AClVA,IAAM,aAAqC;CACzC,CAAC,OAAO,KAAK;CACb,CAAC,aAAa,WAAW;CACzB,CAAC,OAAO,KAAK;CACb,CAAC,OAAO,KAAK;CACb,CAAC,MAAM,IAAI;CACX,CAAC,QAAQ,MAAM;CACf,CAAC,OAAO,KAAK;CACb,CAAC,SAAS,OAAO;CACjB,CAAC,YAAY,UAAU;CACvB,CAAC,MAAM,IAAI;CACX,CAAC,SAAS,OAAO;AACnB;AAGA,IAAM,UAAoE;CACxE;EAAE,IAAI;EAAQ,OAAO;EAAQ,OAAO;CAAM;CAC1C;EAAE,IAAI;EAAU,OAAO;EAAU,OAAO;CAAG;CAC3C;EAAE,IAAI;EAAU,OAAO;EAAU,OAAO;CAAG;CAC3C;EAAE,IAAI;EAAQ,OAAO;EAAQ,OAAO;CAAG;CACvC;EAAE,IAAI;EAAa,OAAO;EAAa,OAAO;CAAG;CACjD;EAAE,IAAI;EAAQ,OAAO;EAAQ,OAAO;CAAG;CACvC;EAAE,IAAI;EAAQ,OAAO;EAAQ,OAAO;CAAG;CACvC;EAAE,IAAI;EAAa,OAAO;CAAY;AACxC;AAEA,SAAS,OAAO,GAA2B;CACzC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB;AAC7C;AAEA,SAAS,UAAU,GAAmB,KAA8B;CAClE,QAAQ,KAAR;EACE,KAAK,QACH,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,KAAK,YAAY;EAC7C,KAAK,UACH,OAAO,EAAE,WAAW,EAAE,UAAU,YAAY,KAAK;EACnD,KAAK,UACH,OAAO,EAAE;EACX,KAAK,QACH,OAAO,EAAE;EACX,KAAK,aACH,OAAO,EAAE;EACX,KAAK,QACH,OAAO,OAAO,CAAC;EACjB,KAAK,QACH,OAAO,EAAE,WAAW,OAAO,EAAE,UAAU,EAAE,YAAY;EACvD,SACE,OAAO,EAAE;CACb;AACF;AAEA,SAAS,OAAO,KAAqB;CACnC,IAAI;EACF,OAAO,IAAI,IAAI,GAAG,CAAC,CAAC;CACtB,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,YAAY,GAAmB,GAA0B;CAChE,IAAI,MAAM,OAAO,OAAO;CACxB,IAAI,MAAM,WAAW,OAAO,EAAE,UAAU;CACxC,IAAI,MAAM,UAAU,OAAO,SAAS,CAAC;CACrC,MAAM,IAAI,EAAE,UAAU;CACtB,OAAO,KAAK,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,EAAE;AAC5C;AAEA,SAAgB,eAAe;CAC7B,MAAM,IAAI,WAAW;CACrB,MAAM,WAAW,aAAa,MAAM,EAAE,kBAAkB;CACxD,MAAM,eAAe,aAAa,MAAM,EAAE,YAAY;CACtD,MAAM,cAAc,aAAa,MAAM,EAAE,kBAAkB;CAC3D,MAAM,iBAAiB,aAAa,MAAM,EAAE,cAAc;CAC1D,MAAM,OAAO,eAAe;CAE5B,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OAAc;EAC5B,IAAI,KAAoB;EACxB,MAAM,IAAI,EAAE,WAAW,KAAK;EAC5B,MAAM,IAAI,EAAE,MAAM,oBAAoB;EACtC,IAAI,GACF,IAAI;GACF,KAAK,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE;EAC5B,QAAQ,CAAC;EAEX,MAAM,SAAS,EAAE,aAAa,KAAK,CAAC,CAAC,YAAY;EACjD,MAAM,OAAO,EAAE,SAAS,QAAQ,MAAM;GACpC,IAAI,CAAC,YAAY,GAAG,EAAE,WAAW,GAAG,OAAO;GAC3C,IAAI,EAAE,iBAAiB,SAAS,EAAE,WAAW,EAAE,cAAc,OAAO;GACpE,IAAI,CAAC,YAAY,GAAG,EAAE,YAAY,GAAG,OAAO;GAC5C,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO;GACpE,IAAI,GACU;SAAA,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,IAAI,YAAY,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,OAClE,EAAE,QAAQ,OAAO;GAAA;GAE/B,OAAO;EACT,CAAC;EACD,IAAI,EAAE,MAAM;GACV,MAAM,EAAE,QAAQ,QAAQ,EAAE;GAC1B,KAAK,MAAM,GAAG,MAAM;IAClB,MAAM,IAAI,UAAU,GAAG,MAAM;IAC7B,MAAM,IAAI,UAAU,GAAG,MAAM;IAC7B,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK;GACxC,CAAC;EACH;EACA,OAAO;CACT,GAAG;EAAC,EAAE;EAAU,EAAE;EAAY,EAAE;EAAQ,EAAE;EAAa,EAAE;EAAc,EAAE;EAAc,EAAE;EAAc,EAAE;CAAI,CAAC;CAE9G,MAAM,WAAA,GAAUA,MAAAA,QAAAA,OAAc,MAAM,KAAK,IAAI,IAAI,EAAE,SAAS,KAAK,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,QAAQ,CAAC;CACvG,MAAM,WAAW,EAAE,aAAa,EAAE,SAAS,MAAM,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO;CAGxF,MAAM,OAAO,QAAQ,QAAQ,MAAM,CAAC,EAAE,SAAS;CAC/C,MAAM,KAAK,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,SAAS,CAAC,IAAI;CACrE,MAAM,MAAM,YAAY,IAAI;CAC5B,MAAM,KAAK,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,EAAE,WAAW,GAAG,CAAC,IAAI;CAC1E,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,EAAE;CAEhC,MAAM,cAAc,QAAQ,QAAQ,GAAG,MAAM,KAAK,EAAE,gBAAgB,IAAI,CAAC;CACzE,MAAM,YAAY,QAAQ,QAAQ,GAAG,MAAM,KAAK,EAAE,gBAAgB,IAAI,CAAC;CAEvE,MAAM,UAAU,QAAgB;EAC9B,MAAM,MAAM,EAAE;EACd,IAAI,CAAC,OAAO,IAAI,WAAW,KAAK,EAAE,IAAI,EAAE,MAAM;GAAE,QAAQ;GAAK,KAAK;EAAE,EAAE,CAAC;OAClE,IAAI,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,MAAM;GAAE,QAAQ;GAAK,KAAK;EAAG,EAAE,CAAC;OAC3D,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;CAC3B;CAEA,MAAM,WAAW,GAAqB,MACpC,KAAK,KAAK,GAAG;EACX;GAAE,OAAO;GAAY,gBAAgB,SAAS,EAAE,GAAG;EAAE;EACrD;GAAE,OAAO;GAAgB,gBAAgB,SAAS,OAAO,CAAC,CAAC;EAAE;EAC7D;GAAE,OAAO;GAAiB,gBAAgB,SAAS,QAAQ,CAAC,CAAC;EAAE;EAC/D;GAAE,OAAO;GAAiB,UAAU,EAAE,gBAAgB;GAAM,gBAAgB,SAAS,EAAE,gBAAgB,EAAE;EAAE;EAC3G;GAAE,OAAO;GAAwB,gBAAgB,SAAS,EAAE,eAAe,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;EAAE;EACrH;GAAE,OAAO;GAAyB,gBAAgB,SAAS,EAAE,gBAAgB,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;EAAE;EACvH,EAAE,WAAW,KAAK;EAClB;GAAE,OAAO;GAAmB,gBAAgB,OAAO,KAAK,EAAE,KAAK,UAAU,UAAU;EAAE;EACrF,EAAE,WAAW,KAAK;EAClB;GAAE,OAAO;GAAqB,gBAAgB,EAAE,MAAM;EAAE;CAC1D,CAAC;CAEH,MAAM,aAAa,MAA2B;EAC5C,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;EAClD,EAAE,eAAe;EACjB,MAAM,IAAI,QAAQ,WAAW,MAAM,EAAE,OAAO,EAAE,UAAU;EACxD,MAAM,OAAO,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,SAAS,GAAG,KAAK,EAAE,QAAQ,cAAc,IAAI,GAAG,CAAC;EACnG,IAAI,MAAM,EAAE,OAAO,KAAK,EAAE;CAC5B;CAEA,MAAM,UAAU,CAAC,CAAC;CAClB,MAAM,OAAO,UAAU,QAAQ,QAAQ,MAAM,EAAE,OAAO,MAAM,IAAI;CAEhE,MAAM,QACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAiB,UAAU;EAAc;EAAxD,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAO,WAAU;GAAjB,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAA,UACG,KAAK,KAAK,MACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAgB,OAAO,EAAE,OAAO,UAAU,KAAA,IAAY,EAAE,MAAM,EAAI,GAAxD,EAAE,EAAsD,CACnE,EACO,CAAA;IACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UACG,KAAK,KAAK,MACT,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;KAAe,WAAU;KAAe,eAAe,OAAO,EAAE,EAAE;KAAG,aAAW,EAAE,MAAM,WAAW,EAAE,KAAM,EAAE,KAAK,QAAQ,IAAI,cAAc,eAAgB;KAA5J,UAAA,CACG,EAAE,OACF,EAAE,MAAM,WAAW,EAAE,MAAM,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CAA8B,KAAE,EAAE,KAAK,QAAQ,IAAI,MAAM,GAAU;KAC7F,CAAA,CAAA;IAHK,GAAA,EAAE,EAGP,CACL,EACC,CAAA,EACC,CAAA;IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,QAAQ,KAAK,MAAM;KAClB,MAAM,EAAE,MAAM,SAAS,YAAY,EAAE,GAAG;KACxC,MAAM,MAAM,EAAE,WAAW,OAAO,EAAE,UAAU,EAAE,YAAY;KAC1D,MAAM,MAAM;MAAC,EAAE,OAAO,EAAE,aAAa,iBAAiB;MAAI,SAAS,CAAC,IAAI,mBAAmB;MAAI,EAAE,UAAU,YAAY,oBAAoB;MAAI,EAAE,YAAY,sBAAsB;KAAE,CAAC,CACnL,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;KACX,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAe,WAAW;MAAK,eAAe,EAAE,OAAO,EAAE,EAAE;MAAG,gBAAgB,MAAM,QAAQ,GAAG,CAAC;MAC7F,UAAA,KAAK,KAAK,MAAM;OACf,QAAQ,EAAE,IAAV;QACE,KAAK,QACH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;SAAe,OAAO,EAAE;SAAxB,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAW,6BAA6B,EAAE,OAAS,CAAA;UACxD;UACA,CAAC,WAAW,QAAQ,SAAS,SAAS,QAAQ,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;WAAM,WAAU;WAAhB,UAAA,CAA8B,OAAI,IAAW;;SAC1F;QAJI,GAAA,MAIJ;QAER,KAAK,UACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;SAAiB,OAAO,EAAE;SACvB,UAAA,WAAW,CAAC;QACX,GAFI,QAEJ;QAER,KAAK,UACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAkB,EAAE,OAAW,GAAvB,QAAuB;QACxC,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAgB,WAAW,EAAE,SAAS,EAAE,KAAS,GAAzC,MAAyC;QAC1D,KAAK,aACH,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;SAAoB,OAAO,EAAE;SAC1B,UAAA,EAAE;QACD,GAFI,WAEJ;QAER,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAgB,EAAE,aAAa,CAAC,EAAE,eAAe,YAAY,YAAY,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,YAAY,KAAK,OAAW,GAAxH,MAAwH;QACzI,KAAK,QACH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAgB,OAAO,OAAQ,EAAE,UAAU,YAAY,YAAY,KAAM,eAAe,GAAG,EAAM,GAAzF,MAAyF;QAC1G,KAAK,aAAa;SAChB,IAAI,EAAE,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,CAAc,GAAN,IAAM;SACtC,MAAM,QAAS,EAAE,YAAY,MAAM,OAAQ;SAC3C,MAAM,QAAQ,KAAK,IAAI,MAAQ,EAAE,WAAW,OAAO,EAAE,aAAa,OAAQ,GAAG;SAC7E,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;UAAa,WAAU;UACrB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;WAAK,WAAW,aAAa,EAAE,UAAU,YAAY,iBAAiB;WAAM,OAAO;YAAE,MAAM,GAAG,KAAK;YAAI,OAAO,GAAG,KAAK,IAAI,OAAO,MAAM,IAAI,EAAE;WAAG;UAAI,CAAA;SAClJ,GAFI,IAEJ;QAER;OACF;MACF,CAAC;KACC,GA3CK,EAAE,EA2CP;IAER,CAAC,EACI,CAAA;GACF;EACN,CAAA,GAAA,CAAC,QAAQ,UACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAY,OAAO;IAAE,QAAQ;IAAQ,YAAY;GAAG;GAChE,UAAA,EAAE,SAAS,SAAS,2CAA2C,EAAE,YAAY,sEAAsE;EACjJ,CAAA,CAEJ;;CAGP,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAO,EAAE,YAAY,+BAA+B;MACpD,cAAY,EAAE,YAAY,+BAA+B;MACzD,gBAAc,EAAE;MAChB,eAAe,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC;MAEhD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,EAAY,IAAI,EAAE,UAAY,CAAA;KACxB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAoB,cAAW;MAAoB,SAAS,EAAE;MACnG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KACN,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,MAAK;OAAW,SAAS;OAAU,WAAW,MAAM,eAAe,EAAE,oBAAoB,EAAE,OAAO,QAAQ,CAAC;MAAI,CAAA,GAAC,eAClH;;KACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAe,OAAO,EAAE,YAAY,EAAE;MAAG,OAAM;MAAhE,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,MAAK;OAAW,SAAS;OAAc,WAAW,MAAM,eAAe,EAAE,cAAc,EAAE,OAAO,QAAQ,CAAC;MAAI,CAAA,GAAC,gBAChH;;KACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,WAAU;MAAa,cAAW;MAAmB,OAAO,EAAE;MAAc,WAAW,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,MAAM,CAAC;MAA3I,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAM,UAAA;MAAmB,CAAA,GACtC,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAA,UAAiB,EAAU,GAAd,CAAc,CAC5B,CACK;;KACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,WAAU;MAAa,cAAW;MAAmB,OAAO,EAAE;MAAc,WAAW,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,MAAsB,CAAC;MAA3J,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAM,UAAA;OAAoB,CAAA;OACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAM,UAAA;OAAmB,CAAA;OACvC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAM,UAAA;OAAoB,CAAA;OACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAM,UAAA;OAAwB,CAAA;OAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAM,UAAA;OAAwB,CAAA;OAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAS,UAAA;OAAwB,CAAA;OAC/C,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,OAAM;QAAU,UAAA;OAAe,CAAA;MACjC;;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,WAAU;MAAY,OAAO,EAAE,OAAO,IAAI;MAAG,aAAY;MAAS,cAAW;MAAmB,OAAO,EAAE;MAAc,WAAW,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,MAAM,CAAC;KAAI,CAAA;IACtL;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MACE,WAAU;MACV,OAAO,EAAE,OAAO,IAAI;MACpB,aAAY;MACZ,cAAW;MACX,OAAO,EAAE;MACT,WAAW,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,MAAM,CAAC;KACtD,CAAA;KACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAe,OAAO,EAAE,QAAQ,QAAQ;MAAzD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,MAAK;OAAW,SAAS,EAAE;OAAQ,WAAW,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,QAAQ,CAAC;MAAI,CAAA,GAAC,SAC7F;;KACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC1B,WAAW,KAAK,CAAC,GAAG,WACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAEE,WAAU;MACV,gBAAc,EAAE,YAAY,SAAS,CAAC;MACtC,OAAO,MAAM,QAAQ,KAAA,IAAY;MACjC,UAAU,MAAM,EAAE,WAAW,GAAG,EAAE,WAAW,EAAE,OAAO;MAErD,UAAA;KACK,GAPD,CAOC,CACT;IACE;;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;IACE,MAAM;IACN,WAAW,MAAM,YAAY,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAC/D,eAAe,CAAC;IAChB,KAAK;IACL,SAAS;IACT,MAAM;IACN,WAAW,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;KAAgB,KAAK;KAAU,eAAe,EAAE,OAAO,IAAI;IAAI,CAAA,IAAI;GAC1F,CAAA;GACD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;MACG,QAAQ;MAAO;MAAI,EAAE,SAAS;MAAO;KAClC,EAAA,CAAA;KACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAO,YAAY,WAAW,KAAK,OAAM,cAAkB,EAAA,CAAA;KAC3D,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAO,YAAY,SAAS,KAAK,OAAM,YAAgB,EAAA,CAAA;KACtD,KAAK,SAAS,KACb,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA,GAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAM,YAAS,eAAe,KAAK,EAAE,CAAQ,EAAA,CAAA,CAC7C,EAAA,CAAA;KAEH,EAAE,SAAS,MAAM,MAAM,EAAE,UAAU,SAAS,KAC3C,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA,GAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA,CAAO,EAAE,SAAS,QAAQ,MAAM,EAAE,UAAU,SAAS,CAAC,CAAC,QAAO,UAAc,EAAA,CAAA,CAC5E,EAAA,CAAA;IAED;;GACJ,KAAK;EACH;;AAET;;AC3UA,IAAa,kBAAA,GAAiBC,QAAAA,OAAAA,CAAyB,CAAC,EAAE,KAAK,SAAS;CACtE,SAAS;CACT,UAAU;EAAE,OAAO;EAAG,SAAS;EAAG,QAAQ;CAAE;CAC5C,aAAa,YAAY,IAAI,EAAE,QAAQ,CAAC;CACxC,OAAO,SAAS,IAAI,EAAE,UAAU;EAAE,GAAG,IAAI,CAAC,CAAC;GAAW,OAAO,IAAI,CAAC,CAAC,SAAS,QAAQ;CAAE,EAAE,CAAC;AAC3F,EAAE;;ACNF,SAAS,WAAW,MAA2C;CAC7D,IAAI;EACF,OAAO,SAAS,UAAU,OAAO,eAAe,OAAO;CACzD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,YAAY,GAAgC;CACnD,MAAM,MAA0B,CAAC;CACjC,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;EACjC,MAAM,IAAI,EAAE,IAAI,CAAC;EACjB,IAAI,KAAK,QAAQ,cAAc,CAAC,GAAG;EACnC,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;CAClC;CACA,OAAO,IAAI,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;AACpD;;AAKA,SAAgB,iBAAiB,EAAE,QAAuC;CACxE,MAAM,UAAU,gBAAgB,MAAM,EAAE,SAAS,KAAK;CACtD,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAS,CAAC;CACtC,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,EAAE;CACvC,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAwB,IAAI;CAC5D,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAA0B,IAAI;CACtD,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAS,EAAE;CAC3C,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,eAAe,qBAAA,GAAoBA,MAAAA,SAAAA,CAAS,GAAG;CACtD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;CACtD,MAAM,OAAO,eAAe;CAC5B,MAAM,UAAU,WAAW,IAAI;CAE/B,MAAM,WAAA,GAAUC,MAAAA,QAAAA,OACP,UAAU,YAAY,OAAO,IAAI,CAAC,GAEzC;EAAC;EAAS;EAAS;CAAM,CAC3B;CACA,MAAM,gBAAgB,WAAW,MAAM,IAAI,CAAC;CAE5C,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,YAAY;CACpC,MAAM,UAAU,IAAI,QAAQ,QAAQ,CAAC,GAAG,OAAO,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI;CAC7G,MAAM,gBAAgB,YAAY,OAAO,QAAQ,MAAM,CAAC,OAAO,MAAM,QAAQ,CAAC,GAAG,KAAK,KAAA;CAEtF,CAAA,GAAA,MAAA,UAAA,OAAgB,YAAY,IAAI,GAAG,CAAC,IAAI,CAAC;CAEzC,MAAM,SAAS,OAAmB;EAChC,IAAI;GACF,GAAG;GACH,SAAS,IAAI;EACf,SAAS,GAAG;GACV,SAAS,OAAQ,GAAa,WAAW,CAAC,CAAC;EAC7C;EACA,QAAQ;CACV;CAEA,IAAI,CAAC,SAAS,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAA4B,SAAS,UAAU,iBAAiB,kBAAiB,kDAAqD;;CAE3J,MAAM,UAAU,MAAgB,SAAiB;EAC/C,QAAQ,IAAI;EACZ,IAAI,KAAK,QAAQ,MAAM;GAErB,IAAI,KAAK,UAAU,OAAO;IACxB,IAAI,CAAC,KAAK,KAAK,GAAG;IAClB,YAAY,IAAI;IAChB,YAAY,QAAQ,QAAQ,MAAM,EAAE,CAAC;IACrC,YAAY,IAAI;IAChB,QAAQ;KAAE,KAAK;KAAM,OAAO;IAAQ,CAAC;GACvC;GACA;EACF;EACA,IAAI,KAAK,UAAU,SAAS,YAAY,QAAQ,QAAQ,KAAK,KAAM,IAAI,CAAC;OACnE,IAAI,SAAS,KAAK,OAAO,KAAK,KAAK,GAAG;GACzC,MAAM,QAAQ,QAAQ,QAAQ,KAAK,GAAG,KAAK;GAC3C,YAAY;IACV,QAAQ,WAAW,KAAK,GAAI;IAC5B,QAAQ,QAAQ,MAAM,KAAK;GAC7B,CAAC;GACD,YAAY,IAAI;EAClB;CACF;CAEA,MAAM,UAAU,QAAgB;EAC9B,YAAY,QAAQ,WAAW,GAAG,CAAC;EACnC,IAAI,aAAa,KAAK,YAAY,IAAI;CACxC;CAEA,MAAM,SAAS,iBAAiB,OAAO,aAAa,aAAa,IAAI,EAAE,IAAI,MAAe;CAE1F,MAAM,QACJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAU;EACV,UAAU;EACV,YAAY,MAAM;GAChB,IAAI,MAAM;GACV,KAAK,EAAE,QAAQ,YAAY,EAAE,QAAQ,gBAAgB,YAAY,MAAM,OAAO,QAAQ;GACtF,IAAI,EAAE,QAAQ,eAAe,EAAE,QAAQ,WAAW;IAChD,EAAE,eAAe;IACjB,MAAM,IAAI,QAAQ,WAAW,CAAC,OAAO,MAAM,QAAQ;IACnD,MAAM,IAAI,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,SAAS,GAAG,KAAK,EAAE,QAAQ,cAAc,IAAI,GAAG,CAAC;IAChG,IAAI,GAAG,YAAY,EAAE,EAAE;GACzB;EACF;EAZF,UAAA,CAcE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAO,WAAU;GAAjB,UAAA;IACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,YAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA,GAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,CAAM,CAAA,CACE,EAAA,CAAA;IACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,MAAO,CAAA,GACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,QAAS,CAAA,CACX,EAAA,CAAA,EACC,CAAA;IACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD,EAAA,UAAA,CACG,QAAQ,KAAK,CAAC,GAAG,OAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAEE,WAAW,aAAa,IAAI,iBAAiB;KAC7C,eAAe,YAAY,CAAC;KAC5B,gBAAgB,MAAM;MACpB,YAAY,CAAC;MACb,KAAK,KAAK,GAAG;OACX;QAAE,OAAO;QAAY,gBAAgB,QAAQ;SAAE,KAAK;SAAG,OAAO;QAAM,CAAC;OAAE;OACvE;QAAE,OAAO;QAAc,gBAAgB,QAAQ;SAAE,KAAK;SAAG,OAAO;QAAQ,CAAC;OAAE;OAC3E;QAAE,OAAO;QAAY,gBAAgB,SAAS,CAAC;OAAE;OACjD;QAAE,OAAO;QAAc,gBAAgB,SAAS,CAAC;OAAE;OACnD,EAAE,WAAW,KAAK;OAClB;QAAE,OAAO;QAAU,gBAAgB,OAAO,CAAC;OAAE;MAC/C,CAAC;KACH;KAEE,UAAA,CAAC,OAAO,OAAO,CAAC,CAAW,KAAK,UAChC,QAAQ,KAAK,QAAQ,KAAK,KAAK,UAAU,QACvC,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAgB,WAAU;MACxB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;OAAW,SAAS,UAAU,QAAQ,IAAI;OAAG,WAAW,MAAM,OAAO,MAAM,CAAC;OAAG,gBAAgB,QAAQ,IAAI;MAAI,CAAA;KAC7G,GAFK,KAEL,IAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;MAAgB,OAAO,UAAU,UAAU,EAAE,MAAM,GAAG,GAAG,IAAI;MAAG,qBAAqB,QAAQ;OAAE,KAAK;OAAG;MAAM,CAAC;MAC3G,UAAA,UAAU,QAAQ,IAAI;KACrB,GAFK,KAEL,CAER;IACE,GA1BG,CA0BH,CACL,GACA,QAAQ,KAAK,QAAQ,QACpB,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;KAAI,WAAU;KACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;MAAW,SAAS;MAAU,aAAY;MAAM,WAAW,MAAM,OAAO,MAAM,CAAC;MAAG,gBAAgB,QAAQ,IAAI;KAAI,CAAA;IAChH,CAAA,GACJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,CAAK,CAAA,CACH,EAAA,CAAA,CAED,EAAA,CAAA;GACF;EACN,CAAA,GAAA,CAAC,QAAQ,UAAU,CAAC,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAY,OAAO;IAAE,QAAQ;IAAQ,YAAY;GAAG;GAAI,UAAA,QAAQ,SAAS,iCAAiC;EAAuC,CAAA,CAC1L;;CAGP,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAU,cAAW;MAAU,SAAS;MAC7E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,MAAM,GAAK,CAAA;KAClB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,WAAU;MAAY,OAAO,EAAE,OAAO,IAAI;MAAG,aAAY;MAAyB,cAAW;MAAS,OAAO;MAAQ,WAAW,MAAM,UAAU,EAAE,OAAO,KAAK;KAAI,CAAA;KACzK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAM;MACN,cAAW;MACX,eAAe;OACb,YAAY,EAAE;OACd,QAAQ;QAAE,KAAK;QAAM,OAAO;OAAM,CAAC;MACrC;MAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA;KACf,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAkB,cAAW;MAAkB,UAAU,YAAY;MAAM,eAAe,YAAY,QAAQ,OAAO,QAAQ;MAClK,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAY,cAAW;MAAY,UAAU,CAAC,QAAQ;MAAQ,eAAe,WAAW,IAAI;MACjI,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAc,OAAO,EAAE,cAAc,EAAE;MAAvD,UAAA;OACG,QAAQ;OAAO;OAAM,QAAQ,WAAW,IAAI,MAAM;OAAM;OAAI,SAAS;MAClE;;IACH;;GACJ,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAW,OAAO,EAAE,OAAO,wBAAwB;IAAI,UAAA;GAAW,CAAA;GAC3F,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;IACE,UAAA;IACA,MAAM;IACN,UAAU;IACV,KAAK;IACL,SAAS;IACT,MAAM;IACN,WACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACZ,UAAA,iBAAiB,OAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAY,UAAA;KAA8B,CAAA,IACvD,OAAO,KACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,OAAO,EAAE,SAAS,UAAU;MAC/B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;OAAiB,OAAO,OAAO;OAAO,iBAAA;MAAiB,CAAA;KACpD,CAAA,IAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAwB,UAAA;KAAmB,CAAA;IAEzD,CAAA;GAER,CAAA;GACA,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IACE,OAAO,SAAS,SAAS,UAAU,UAAU,UAAU;IACvD,SAAS,oBAAoB,QAAQ,OAAO,eAAe,SAAS,OAAO;IAC3E,cAAa;IACb,QAAA;IACA,gBAAgB,WAAW,KAAK;IAChC,iBAAiB;KACf,WAAW,KAAK;KAEhB,YAAY,QAAQ,SAAS,CAAC,OAAO,QAAQ,WAAW,CAAC,CAAC,CAAC;KAC3D,YAAY,IAAI;IAClB;GACD,CAAA;GAEF,KAAK;EACH;;AAET;AAEA,SAAgB,UAAU,EAAE,SAAS,UAAU,UAAU,eAA+G;CACtK,MAAM,CAAC,GAAG,SAAA,GAAQD,MAAAA,SAAAA,CAAS,OAAO;CAClC,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;CACtC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EACE,WAAA;EACA,WAAU;EACV,OAAO;EACM;EACb,UAAU,MAAM,EAAE,cAAc,OAAO;EACvC,WAAW,MAAM,KAAK,EAAE,OAAO,KAAK;EACpC,YAAY,MAAM;GAChB,EAAE,gBAAgB;GAClB,IAAI,EAAE,QAAQ,SAAS;IACrB,QAAQ,IAAI;IACZ,SAAS,CAAC;GACZ,OAAO,IAAI,EAAE,QAAQ,UAAU;IAC7B,QAAQ,IAAI;IACZ,SAAS;GACX;EACF;EACA,cAAc,CAAC,QAAQ,SAAS,CAAC;CAClC,CAAA;AAEL;;;;;;;ACtPA,eAAe,gBAAqC;CAClD,MAAM,UAAU,OAAO;CACvB,IAAI,CAAC,SAAS,WAAW,MAAM,IAAI,MAAM,yDAAyD;CAClG,MAAM,MAAM,MAAM,QAAQ,UAAU;CACpC,MAAM,MAAkB,CAAC;CACzB,KAAK,MAAM,QAAQ,KAAK;EACtB,IAAI,CAAC,KAAK,MAAM;EAChB,MAAM,KAAK,MAAM,aAAa,KAAK,IAAI;EACvC,IAAI,CAAC,IAAI;EACT,IAAI;GACF,MAAM,QAAQ,MAAM,KAAK,GAAG,gBAAgB;GAC5C,IAAI,MAAM,QAAQ;IAChB,MAAM,KAAK,GAAG,YAAY,OAAO,UAAU;IAC3C,KAAK,MAAM,KAAK,OAAO;KACrB,MAAM,IAAI,GAAG,YAAY,CAAC;KAC1B,IAAI,KAAK;MAAE,IAAI,GAAG;MAAM,SAAS,GAAG;MAAS,OAAO;MAAG,SAAS,EAAE;MAAqC,eAAe,EAAE;MAAe,SAAS,MAAM,KAAK,EAAE,UAAU;KAAE,CAAC;IAC5K;GACF,OACE,IAAI,KAAK;IAAE,IAAI,GAAG;IAAM,SAAS,GAAG;IAAS,OAAO;IAAI,SAAS;IAAM,eAAe;IAAO,SAAS,CAAC;GAAE,CAAC;EAE9G,UAAU;GACR,GAAG,MAAM;EACX;CACF;CACA,OAAO;AACT;AAEA,SAAS,aAAa,MAA2C;CAC/D,OAAO,IAAI,SAAS,YAAY;EAC9B,IAAI,UAAU;EACd,MAAM,MAAM,UAAU,KAAK,IAAI;EAC/B,IAAI,wBAAwB;GAE1B,UAAU;GACV,IAAI,aAAa,MAAM;EACzB;EACA,IAAI,kBAAkB;GACpB,IAAI,SAAS;IACX,IAAI,OAAO,MAAM;IACjB,QAAQ,IAAI;GACd,OAAO,QAAQ,IAAI,MAAM;EAC3B;EACA,IAAI,gBAAgB,QAAQ,IAAI;EAChC,IAAI,kBAAkB,QAAQ,IAAI;CACpC,CAAC;AACH;AAEA,eAAe,YAAY,IAAY,OAAe,QAAQ,KAAkD;CAC9G,MAAM,OAAO,MAAM,aAAa,EAAE;CAClC,IAAI,CAAC,MAAM,OAAO,CAAC;CACnB,IAAI;EACF,OAAO,MAAM,IAAI,SAAS,SAAS,WAAW;GAC5C,MAAM,MAA0C,CAAC;GACjD,MAAM,MAAM,KAAK,YAAY,OAAO,UAAU,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,WAAW;GAC9E,IAAI,kBAAkB;IACpB,MAAM,SAAS,IAAI;IACnB,IAAI,UAAU,IAAI,SAAS,OAAO;KAChC,IAAI,KAAK;MAAE,KAAK,OAAO;MAAK,OAAO,OAAO;KAAM,CAAC;KACjD,OAAO,SAAS;IAClB,OAAO,QAAQ,GAAG;GACpB;GACA,IAAI,gBAAgB,OAAO,IAAI,KAAK;EACtC,CAAC;CACH,UAAU;EACR,KAAK,MAAM;CACb;AACF;AAEA,SAAgB,qBAAqB;CACnC,MAAM,CAAC,QAAQ,cAAA,GAAaE,MAAAA,SAAAA,CAA4B,IAAI;CAC5D,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;CACtD,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAA0B,IAAI;CAC9D,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAA6C,CAAC,CAAC;CAC7E,MAAM,CAAC,KAAK,WAAA,GAAUA,MAAAA,SAAAA,CAAwB,IAAI;CAClD,MAAM,CAAC,GAAG,SAAA,GAAQA,MAAAA,SAAAA,CAAS,GAAG;CAE9B,MAAM,aAAa;EACjB,SAAS,IAAI;EACb,cAAc,CAAC,CAAC,KAAK,YAAY,MAAM,SAAS,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;CAC1E;CACA,CAAA,GAAA,MAAA,UAAA,CAAU,MAAM,CAAC,CAAC;CAClB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,OAAO,IAAI;EACX,IAAI,UAAU,OAAO,YAAY,SAAS,IAAI,SAAS,KAAK,CAAC,CAAC,KAAK,aAAa,MAAM,SAAS,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC;OAClH,WAAW,CAAC,CAAC;CACpB,GAAG,CAAC,QAAQ,CAAC;CAEb,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAU,cAAW;MAAoB,gBAAgB,KAAK,GAAG,YAAY,YAAY,EAAE,GAAG,SAAS,CAAC;MAC7I,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,MAAM,GAAK,CAAA;KAClB,CAAA;KACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MACE,WAAU;MACV,cAAW;MACX,OAAO,WAAW,GAAG,SAAS,GAAG,GAAG,SAAS,UAAU;MACvD,WAAW,MAAM,YAAY,QAAQ,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,YAAY,EAAE,OAAO,KAAK,KAAK,IAAI;MAJnG,UAAA,CAME,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAI,UAAA,QAAQ,SAAS,4BAA4B;MAAuB,CAAA,GACrF,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;OAAmC,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE;OAAS,UAAU,CAAC,EAAE;OAA7E,UAAA;QACG,EAAE;QAAG;QAAI,EAAE;QAAQ;QAAK,EAAE,SAAS;OAC9B;MAFK,GAAA,GAAG,EAAE,GAAG,GAAG,EAAE,OAElB,CACT,CACK;;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAc,UAAA;KAAmC,CAAA;IAC9D;;GACJ,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAY,UAAA;GAAW,CAAA;GAC/C,UAAU,QACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;IACE,UAAA;IACA,MAAM;IACN,UAAU;IACV,KAAK;IACL,SAAS;IACT,MACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;OAAK,WAAU;OAAf,UAAA;QAA0B;QACd,KAAK,UAAU,SAAS,OAAO;QAAE;QAAmB,OAAO,SAAS,aAAa;QAC1F,SAAS,QAAQ,SAAS,eAAe,SAAS,QAAQ,KAAK,IAAI,MAAM;OACvE;;MACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;OAAO,WAAU;OAAjB,UAAA;QACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,YAAD,EAAA,UAAA;SACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,GAAG,EAAI,CAAA;SAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA;SAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,CAAM,CAAA;QACE,EAAA,CAAA;QACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;SACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,IAAK,CAAA;SACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,MAAO,CAAA;SACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,QAAS,CAAA;QACX,EAAA,CAAA,EACC,CAAA;QACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,QAAQ,KAAK,GAAG,MACf,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;SAAY,WAAW,QAAQ,IAAI,iBAAiB;SAAI,eAAe,OAAO,CAAC;SAA/E,UAAA;UACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA;UACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,QAAQ,EAAE,GAAG,EAAM,CAAA;UACxB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,QAAQ,EAAE,KAAK,EAAM,CAAA;SACxB;QAJK,GAAA,CAIL,CACL,EACI,CAAA;OACF;;MACN,CAAC,QAAQ,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;OAAK,WAAU;OAAY,OAAO;QAAE,QAAQ;QAAQ,YAAY;OAAG;OAAG,UAAA;MAA2B,CAAA;KAClH;;IAEP,WACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAsB,OAAO,EAAE,SAAS,UAAU;KAC9D,UAAA,OAAO,QAAQ,QAAQ,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD;MAAiB,OAAO,QAAQ,IAAI,CAAC;MAAO,iBAAA;KAAiB,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAY,UAAA;KAAkC,CAAA;IAC1J,CAAA;GAER,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAa,UAAA,UAAU,CAAC,OAAO,SAAS,4CAA4C;GAAmD,CAAA;EAErJ;;AAET;AAEA,SAAS,QAAQ,GAAoB;CACnC,IAAI;EACF,MAAM,IAAI,OAAO,MAAM,WAAW,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;EACtE,OAAO,MAAM,KAAA,IAAY,OAAO,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,MAAM,GAAG,GAAG,IAAI,MAAM;CAChF,QAAQ;EACN,OAAO,OAAO,CAAC;CACjB;AACF;AAUA,SAAgB,wBAAwB;CACtC,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAA0B,IAAI;CACxD,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAiB,EAAE;CAC7C,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAuB,CAAC,CAAC;CACvD,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAA4B,IAAI;CAChE,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAA8F,IAAI;CAC9H,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAwB,IAAI;CACtD,MAAM,CAAC,GAAG,SAAA,GAAQA,MAAAA,SAAAA,CAAS,GAAG;CAE9B,MAAM,aAAa;EACjB,IAAI,OAAO,WAAW,aAAa;GACjC,SAAS,0EAA0E;GACnF,SAAS,CAAC,CAAC;GACX;EACF;EACA,OAAO,KAAK,CAAC,CAAC,KAAK,WAAW,MAAM,SAAS,OAAO,CAAC,CAAC,CAAC;CACzD;CACA,CAAA,GAAA,MAAA,UAAA,CAAU,MAAM,CAAC,CAAC;CAClB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,YAAY,IAAI;EAChB,IAAI,CAAC,OAAO,OAAO,WAAW,CAAC,CAAC;EAChC,OACG,KAAK,KAAK,CAAC,CACX,MAAM,MAAM,EAAE,KAAK,CAAC,CAAC,CACrB,MAAM,SAAS,WAAW,KAAK,KAAK,OAAO;GAAE;GAAO,KAAK,EAAE;GAAK,QAAQ,EAAE;EAAO,EAAE,CAAC,CAAC,CAAC,CACtF,OAAO,MAAM,SAAS,OAAO,CAAC,CAAC,CAAC;CACrC,GAAG,CAAC,KAAK,CAAC;CACV,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,UAAU,IAAI;EACd,IAAI,CAAC,UAAU;EACf,OACG,KAAK,SAAS,KAAK,CAAC,CACpB,MAAM,MAAM,EAAE,MAAM,SAAS,GAAG,CAAC,CAAC,CAClC,KAAK,OAAO,QAAQ;GACnB,IAAI,CAAC,KAAK;GACV,MAAM,UAAU,MAAM,KAAK,IAAI,QAAQ,QAAQ,CAAC;GAChD,MAAM,OAAO,IAAI,QAAQ,IAAI,cAAc,KAAK,KAAA;GAChD,MAAM,OAAO,MAAM,IAAI,MAAM,CAAC,CAAC,KAAK;GACpC,IAAI;GACJ,IAAI,CAAC,QAAQ,+BAA+B,KAAK,IAAI,GAAG,QAAQ,MAAM,KAAK,KAAK,EAAA,CAAG,MAAM,GAAG,GAAO;GACnG,UAAU;IAAE;IAAS;IAAM,MAAM,KAAK;IAAM;GAAK,CAAC;EACpD,CAAC,CAAC,CACD,YAAY,CAAC,CAAC;CACnB,GAAG,CAAC,QAAQ,CAAC;CAEb,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAU,cAAW;MAAiB,SAAS;MACpF,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,MAAM,GAAK,CAAA;KAClB,CAAA;KACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,WAAU;MAAa,cAAW;MAAQ,OAAO;MAAO,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;MAAxG,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAI,UAAA,OAAO,SAAS,oBAAoB;MAAoB,CAAA,GACzE,OAAO,KAAK,MACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAA,UAAiB,EAAU,GAAd,CAAc,CAC5B,CACK;;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAc,UAAA;KAAe,CAAA;IAC1C;;GACJ,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAY,UAAA;GAAW,CAAA;GAC/C,QACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;IACE,UAAA;IACA,MAAM;IACN,UAAU;IACV,KAAK;IACL,SAAS;IACT,MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;MAAO,WAAU;MAAjB,UAAA;OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,YAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,GAAG,EAAI,CAAA,GAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,CAAM,CAAA,CACE,EAAA,CAAA;OACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,SAAU,CAAA,GACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,MAAO,CAAA,CACT,EAAA,CAAA,EACC,CAAA;OACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,QAAQ,KAAK,MACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;QAA2B,WAAW,aAAa,IAAI,iBAAiB;QAAI,eAAe,YAAY,CAAC;QAAxG,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAE,OAAW,CAAA,GAClB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;SAAI,OAAO,EAAE;SAAM,UAAA,EAAE;QAAQ,CAAA,CAC3B;OAHK,GAAA,EAAE,MAAM,EAAE,MAGf,CACL,EACI,CAAA;MACF;;IACJ,CAAA;IAEP,WACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KACZ,UAAA,SACC,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;MAAI,WAAU;MAAd,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;OACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,YAAY,OAAO,IAAI,EAAM,CAAA;OACjC,OAAO,QAAQ,KAAK,CAAC,GAAG,OACvB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;QAAa,OAAO,EAAE,SAAS,WAAW;QAA1C,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA,GACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,EAAM,CAAA,CACR;OAHK,GAAA,CAGL,CACN;MACC;KACH,CAAA,GAAA,OAAO,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAwB,UAAA,OAAO;KAAU,CAAA,CACxE,EAAA,CAAA,IAEF,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAY,UAAA;KAAgD,CAAA;IAE1E,CAAA;GAER,CAAA,IAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAa,UAAA,SAAS,CAAC,MAAM,SAAS,6CAA6C;GAA2C,CAAA;EAE5I;;AAET;;;AC/SA,SAAgB,oBAAoB,KAA6B;CAC/D,IAAI,CAAC,KAAK,OAAO,CAAC;CAClB,OAAO,IACJ,MAAM,GAAG,CAAC,CACV,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAC1B,OAAO,OAAO,CAAC,CACf,KAAK,SAAS;EACb,MAAM,KAAK,KAAK,QAAQ,GAAG;EAC3B,MAAM,OAAO,OAAO,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE;EAC9C,MAAM,QAAQ,OAAO,KAAK,OAAO,KAAK,MAAM,KAAK,CAAC;EAClD,OAAO;GAAE;GAAM;GAAO,MAAM,KAAK,SAAS,MAAM;GAAQ,QAAQ;EAA2B;CAC7F,CAAC;AACL;AAaA,SAAgB,gBAAgB,GAAwB;CACtD,IAAI,IAAI,GAAG,EAAE,KAAK,GAAG,EAAE;CACvB,KAAK,UAAU,EAAE,QAAQ;CACzB,IAAI,EAAE,QAAQ,KAAK,YAAY,EAAE;CACjC,IAAI,EAAE,UAAU,MAAM,KAAK,aAAa,EAAE;MACrC,IAAI,EAAE,WAAW,MAAM,KAAK,aAAa,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,YAAY;CAC9E,IAAI,EAAE,QAAQ,KAAK;CACnB,IAAI,EAAE,UAAU,KAAK,cAAc,EAAE;CACrC,OAAO;AACT;AAEA,eAAsB,cAAuC;CAC3D,MAAM,KAAM,WAAmB;CAC/B,IAAI,MAAM,OAAO,GAAG,WAAW,YAC7B,IAAI;EAEF,QAAO,MADmB,GAAG,OAAO,EAAA,CACxB,KAAK,OAAO;GACtB,MAAM,EAAE;GACR,OAAO,EAAE;GACT,QAAQ,EAAE,UAAU,KAAA;GACpB,MAAM,EAAE,QAAQ,KAAA;GAChB,SAAS,EAAE,WAAW,KAAA;GACtB,OAAO,EAAE,MAAM,UAAU,MAAM,EAAE,OAAO,UAAU;GAClD,QAAQ,EAAE;GACV,UAAU,EAAE;GACZ,aAAa,EAAE;GACf,UAAU;GACV,QAAQ;EACV,EAAE;CACJ,QAAQ,CAER;CAEF,OAAO,oBAAoB,OAAO,aAAa,cAAc,SAAS,SAAS,EAAE,CAAC,CAAC,KAAK,OAAO;EAC7F,GAAG;EACH,UAAU;CACZ,EAAE;AACJ;AAEA,SAAgB,YAAY,GAAsB;CAChD,SAAS,SAAS,gBAAgB,CAAC;AACrC;;AAGA,SAAgB,aAAa,MAAc,MAAe,QAAuB;CAC/E,MAAM,QAAQ,MAAM,qBAAK,IAAI,IAAI;EAAC,QAAQ;EAAK;EAAK,SAAS;CAAQ,CAAC,CAAC;CACvE,MAAM,UAAU,MAAM,qBAAK,IAAI,IAAI;EAAC;EAAQ,KAAA;EAAW,SAAS;CAAQ,CAAC,CAAC;CAC1E,KAAK,MAAM,KAAK,OACd,KAAK,MAAM,KAAK,SACd,SAAS,SAAS,gBAAgB;EAAE;EAAM,OAAO;EAAI,MAAM;EAAG,QAAQ;EAAG,SAAS;CAAE,CAAC;AAG3F;;ACrFA,IAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;CAAM,WAAU;CAAc,OAAM;CAAgF,UAAA;AAAO,CAAA;AAEtI,SAAS,aAAa;CACpB,MAAM,CAAC,SAAS,eAAA,GAAcC,MAAAA,SAAAA,CAAyB,CAAC,CAAC;CACzD,MAAM,WAAA,GAAUC,MAAAA,YAAAA,OAAkB;EAChC,YAAY,CAAC,CAAC,KAAK,kBAAkB,WAAW,CAAC,CAAC,CAAC;CACrD,GAAG,CAAC,CAAC;CACL,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,QAAQ;EAER,IAAI,OAAO,SAAS;EACpB,MAAM,IAAI,kBAAkB;GAC1B,IAAI,SAAS,WAAW,MAAM;IAC5B,OAAO,SAAS;IAChB,QAAQ;GACV;EACF,GAAG,GAAI;EACP,MAAM,KAAM,WAAmB;EAC/B,IAAI,mBAAmB,UAAU,OAAO;EACxC,aAAa;GACX,cAAc,CAAC;GACf,IAAI,sBAAsB,UAAU,OAAO;EAC7C;CACF,GAAG,CAAC,OAAO,CAAC;CACZ,OAAO;EAAE;EAAS;CAAQ;AAC5B;AAYA,SAAgB,kBAAkB;CAChC,MAAM,EAAE,SAAS,YAAY,WAAW;CACxC,MAAM,CAAC,QAAQ,cAAA,GAAaD,MAAAA,SAAAA,CAAS,EAAE;CACvC,MAAM,CAAC,UAAU,gBAAA,GAAeA,MAAAA,SAAAA,CAAwB,IAAI;CAC5D,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAwB,IAAI;CAC1D,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAuB,IAAI;CACrD,MAAM,OAAO,eAAe;CAC5B,MAAM,OAAO,QAAQ,MAAM,MAAM,EAAE,WAAW,aAAa;CAE3D,MAAM,IAAI,OAAO,KAAK,CAAC,CAAC,YAAY;CACpC,MAAM,UAAU,IAAI,QAAQ,QAAQ,MAAM,EAAE,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI;CACnH,MAAM,SAAS,MAAoB,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,GAAG,GAAG,EAAE,QAAQ;CAE5E,MAAM,UAAU,MAAoB;EAClC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;EACrC,WAAW,SAAS,EAAE;CACxB;CAEA,MAAM,eAAe,GAAiB,UAAkB;EACtD,WAAW,IAAI;EACf,YAAY;GACV,MAAM,EAAE;GACR;GACA,MAAM,EAAE,QAAQ;GAChB,QAAQ,EAAE;GACV,SAAS,EAAE,WAAW;GACtB,QAAQ,EAAE;GACV,UAAU,EAAE;EACd,CAAC;EACD,WAAW,SAAS,EAAE;CACxB;CAEA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAU,cAAW;MAAU,SAAS;MAC7E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAa,MAAM,GAAK,CAAA;KAClB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,WAAU;MAAY,OAAO,EAAE,OAAO,IAAI;MAAG,aAAY;MAAS,cAAW;MAAiB,OAAO;MAAQ,WAAW,MAAM,UAAU,EAAE,OAAO,KAAK;KAAI,CAAA;KACjK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;KAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAM;MACN,cAAW;MACX,eAAe,SAAS;OAAE,MAAM;OAAI,OAAO;OAAI,MAAM;OAAK,QAAQ;OAAI,MAAM;OAAI,QAAQ,SAAS,aAAa;OAAU,UAAU;MAAM,CAAC;MAEzI,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,MAAM,GAAK,CAAA;KACf,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MACE,WAAU;MACV,OAAM;MACN,cAAW;MACX,UAAU,CAAC;MACX,eAAe;OACb,MAAM,IAAI,QAAQ,MAAM,MAAM,MAAM,CAAC,MAAM,QAAQ;OACnD,IAAI,GAAG,OAAO,CAAC;MACjB;MAEA,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,WAAU;MAAe,OAAM;MAAoB,cAAW;MAAoB,UAAU,CAAC,QAAQ;MAAQ,eAAe,WAAW,IAAI;MACjJ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;KAChB,CAAA;KACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,aAAc,CAAA;KAC9B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAc,OAAO,EAAE,cAAc,EAAE;MAAvD,UAAA;OACG,QAAQ;OAAO;OAAQ,QAAQ,WAAW,IAAI,KAAK;OAAI;OAAI,SAAS;MACjE;;IACH;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KAA0B;KAC+C;KACtE,OAAO,8CAA8C;IACnD;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA;MACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,YAAD,EAAA,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA;OAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA;OAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA;OAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,KAAK,EAAI,CAAA;OAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,MAAM,EAAI,CAAA;OAC/B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,KAAK,EAAI,CAAA;OAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,KAAK,EAAI,CAAA;OAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,KAAK,EAAI,CAAA;OAC9B,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO,EAAE,OAAO,KAAK,EAAI,CAAA;MACtB,EAAA,CAAA;MACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;OACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,QAAS,CAAA;OACb,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,SAAU,CAAA;OACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;OACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,oBAAqB,CAAA;OACzB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;OACZ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,WAAY,CAAA;OAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,SAAU,CAAA;OACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,WAAY,CAAA;MACd,EAAA,CAAA,EACC,CAAA;MACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UACG,QAAQ,KAAK,MAAM;OAClB,MAAM,IAAI,MAAM,CAAC;OACjB,MAAM,IAAI,EAAE,WAAW;OACvB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD;QAEE,WAAW,aAAa,IAAI,iBAAiB;QAC7C,eAAe,YAAY,CAAC;QAC5B,gBAAgB,MAAM;SACpB,YAAY,CAAC;SACb,KAAK,KAAK,GAAG;UACX;WAAE,OAAO;WAAc,gBAAgB,WAAW,CAAC;UAAE;UACrD;WAAE,OAAO;WAAc,gBAAgB,SAAS,EAAE,KAAK;UAAE;UACzD;WAAE,OAAO;WAAwB,gBAAgB,SAAS,GAAG,EAAE,KAAK,GAAG,EAAE,OAAO;UAAE;UAClF,EAAE,WAAW,KAAK;UAClB;WAAE,OAAO;WAAU,gBAAgB,OAAO,CAAC;UAAE;SAC/C,CAAC;QACH;QAbF,UAAA;SAeE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;UAAI,OAAO,EAAE;UAAO,UAAA,EAAE;SAAS,CAAA;SAC9B,YAAY,IACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;UAAI,WAAU;UACZ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;WAAW,SAAS,EAAE;WAAO,WAAW,MAAM,YAAY,GAAG,CAAC;WAAG,gBAAgB,WAAW,IAAI;UAAI,CAAA;SAClG,CAAA,IAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;UAAI,OAAO,EAAE;UAAO,qBAAqB,WAAW,CAAC;UAClD,UAAA,EAAE;SACD,CAAA;SAEN,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAI,EAAE,UAAU,SAAS,WAAW,GAAO,CAAA;SAChD,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAI,EAAE,QAAQ,MAAM,GAAO,CAAA;SAChC,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAK,EAAE,UAAU,IAAI,KAAK,EAAE,OAAO,CAAC,CAAC,YAAY,IAAI,YAAa,GAAO,CAAA;SAC9E,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,YAAY,EAAE,IAAI,EAAM,CAAA;SAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;UAAI,OAAM;UAAmD,UAAA;SAAK,CAAA;SAClE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAK,EAAE,SAAS,MAAM,KAAM,GAAO,CAAA;SACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,IAAI,EAAE,YAAY,KAAK,GAAO,CAAA;QACjC;OA/BG,GAAA,CA+BH;MAER,CAAC,EACI,CAAA;KACF;IACN,CAAA,GAAA,CAAC,QAAQ,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAY,OAAO;MAAE,QAAQ;MAAQ,YAAY;KAAG;KAAG,UAAA;IAAyC,CAAA,CAChI;;GACJ,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IACE,OAAM;IACN,SAAS,gBAAgB,QAAQ,OAAO,uCAAuC,SAAS,KAAK;IAC7F,cAAa;IACb,QAAA;IACA,gBAAgB,WAAW,KAAK;IAChC,iBAAiB;KACf,WAAW,KAAK;KAChB,QAAQ,SAAS,MAAM,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAC7D,WAAW,SAAS,EAAE;IACxB;GACD,CAAA;GAEF,SACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IACE,OAAM;IACN,cAAa;IACb,gBAAgB,SAAS,IAAI;IAC7B,iBAAiB;KACf,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG;KACxB,MAAM,OAAO,WAAW,MAAM,IAAI;KAClC,YAAY;MACV,MAAM,MAAM,KAAK,KAAK;MACtB,OAAO,MAAM;MACb,MAAM,MAAM,QAAQ;MACpB,QAAQ,MAAM,UAAU,KAAA;MACxB,QAAQ,MAAM,IAAI,IAAI,OAAO,KAAK,MAAM,OAAO,KAAK;MACpD,QAAQ,MAAM;MACd,UAAU,MAAM,YAAY,KAAA;KAC9B,CAAC;KACD,SAAS,IAAI;KACb,WAAW,SAAS,EAAE;IACxB;IAEA,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAc,UAAA;MAAW,CAAA;MACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAc,WAAU;OAAY,WAAA;OAAU,OAAO,MAAM;OAAM,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,MAAM,EAAE,OAAO;OAAM,CAAC;MAAI,CAAA;MAC3I,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAe,UAAA;MAAY,CAAA;MAC1C,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAe,WAAU;OAAY,OAAO,MAAM;OAAO,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,OAAO,EAAE,OAAO;OAAM,CAAC;MAAI,CAAA;MACpI,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAc,UAAA;MAAW,CAAA;MACxC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAc,WAAU;OAAY,OAAO,MAAM;OAAM,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,MAAM,EAAE,OAAO;OAAM,CAAC;MAAI,CAAA;MACjI,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAgB,UAAA;MAAa,CAAA;MAC5C,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAgB,WAAU;OAAY,aAAa,SAAS;OAAU,OAAO,MAAM;OAAQ,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,QAAQ,EAAE,OAAO;OAAM,CAAC;MAAI,CAAA;MACvK,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAc,UAAA;MAAwB,CAAA;MACrD,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAc,WAAU;OAAY,aAAY;OAAiB,OAAO,MAAM;OAAM,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,MAAM,EAAE,OAAO;OAAM,CAAC;MAAI,CAAA;MAC9J,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAY,UAAA;MAAe,CAAA;MAC1C,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;OAAQ,IAAG;OAAY,WAAU;OAAa,OAAO,MAAM;OAAU,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,UAAU,EAAE,OAAO;OAAM,CAAC;OAArI,UAAA;QACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;SAAQ,OAAM;SAAG,UAAA;QAAiB,CAAA;QAClC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAA,UAAQ,MAAW,CAAA;QACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAA,UAAQ,SAAc,CAAA;QACtB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAA,UAAQ,OAAY,CAAA;OACd;;MACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,CAAO,CAAA;MACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;OAAO,WAAU;OAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;QAAO,MAAK;QAAW,SAAS,MAAM;QAAQ,WAAW,MAAM,SAAS;SAAE,GAAG;SAAO,QAAQ,EAAE,OAAO;QAAQ,CAAC;OAAI,CAAA,GAAC,SAC9G;;KACJ;;GACQ,CAAA;GAEhB,KAAK;EACH;;AAET;;ACpPA,IAAM,SAA6D,CACjE;CACE,OAAO;CACP,OAAO;EACL,CAAC,SAAS,eAAe;EACzB,CAAC,WAAW,iBAAiB;EAC7B,CAAC,aAAa,WAAW;EACzB,CAAC,WAAW,SAAS;CACvB;AACF,GACA;CAAE,OAAO;CAAS,OAAO,CAAC,CAAC,SAAS,eAAe,CAAC;AAAE,CACxD;AAEA,SAAgB,mBAAmB;CACjC,MAAM,UAAU,gBAAgB,MAAM,EAAE,OAAO;CAC/C,MAAM,aAAa,gBAAgB,MAAM,EAAE,UAAU;CACrD,MAAM,CAAC,OAAO,aAAA,GAAYE,MAAAA,SAAAA,CAAS,GAAG;CACtC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GACE,MAAK;GACL,MAAM;GACN,UAAU;GACV,KAAK;GACL,SAAS;GACT,WACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAc,cAAW;IACrC,UAAA,OAAO,KAAK,MACX,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAqB,UAAA,EAAE;IAAW,CAAA,GAChD,EAAE,MAAM,KAAK,CAAC,IAAI,WACjB,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAiB,WAAW,mBAAmB,YAAY,KAAK,gBAAgB;KAAM,gBAAc,YAAY;KAAI,eAAe,WAAW,EAAE;KAAhJ,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,EAAiB,MAAM,GAAK,CAAA;MAC5B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,MAAY,CAAA;OACjB,OAAO,WAAW,OAAO,aAAa,OAAO,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAkB,UAAA,SAAS;MAAa,CAAA;KAC/G;IAJK,GAAA,EAIL,CACT,CACE,EAAA,GATK,EAAE,KASP,CACN;GACE,CAAA;GAEP,MACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACG,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD,EAAkB,MAAK,QAAS,CAAA;KACvD,YAAY,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD,EAAkB,MAAK,UAAW,CAAA;KAC3D,YAAY,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,iBAAD,CAAkB,CAAA;KAC3C,YAAY,eAAe,iBAAA,GAAA,kBAAA,IAAA,CAAC,oBAAD,CAAqB,CAAA;KAChD,YAAY,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAD,CAAwB,CAAA;IAC7C;;EAER,CAAA;CACE,CAAA;AAET;;AC/CA,IAAM,UAAA;AAEN,SAAS,mBAAmB;CAC1B,MAAM,MAAM,UAAU;CACtB,MAAM,WAAW,aAAa,MAAM,EAAE,gBAAgB;CACtD,MAAM,SAAS,aAAa,MAAM,EAAE,cAAc;CAClD,MAAM,CAAC,WAAW,iBAAA,GAAgBC,MAAAA,SAAAA,CAAS,KAAK;CAChD,MAAM,UAAU,YAAY,IAAI;CAChC,IAAI,IAAI,aAAa,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAc,UAAA;CAA+B,CAAA;CAChG,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EACE,WAAU;EACV,cAAW;EACX,eAAe,aAAa,IAAI;EAChC,cAAc,aAAa,KAAK;EAChC,YAAY,MAAM;GAChB,IAAI,CAAC,WAAW;GAChB,EAAE,eAAe;GACjB,EAAE,gBAAgB;GAClB,IAAI;IAAC;IAAW;IAAQ;IAAS;GAAK,CAAC,CAAC,SAAS,EAAE,GAAG,GAAG;GACzD,IAAI,EAAE,QAAQ,UAAU,OAAO,aAAa,KAAK;GACjD,MAAM,QAAkB,CAAC;GACzB,IAAI,EAAE,WAAW,EAAE,SAAS,MAAM,KAAK,MAAM;GAC7C,IAAI,EAAE,QAAQ,MAAM,KAAK,KAAK;GAC9B,IAAI,EAAE,UAAU,MAAM,KAAK,OAAO;GAClC,IAAI,CAAC,MAAM,QAAQ;GACnB,MAAM,KAAK,EAAE,KAAK,WAAW,KAAK,IAAI,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,WAAW,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,GAAG;GACxG,OAAO,EAAE,kBAAkB,MAAM,KAAK,GAAG,EAAE,CAAC;GAC5C,aAAa,KAAK;EACpB;EAEC,UAAA,YAAY,gBAAgB,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAW,UAAA,eAAe,OAAO;EAAQ,CAAA,IAAI;CAC9F,CAAA,GACP,YACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;EAAQ,WAAU;EAAU,eAAe,OAAO,EAAE,kBAAkB,KAAK,CAAC;EAAG,UAAA;CAEvE,CAAA,CAEV,EAAA,CAAA;AAEN;AAEA,SAAgB,gBAAgB;CAC9B,MAAM,IAAI,YAAY;CACtB,MAAM,MAAM,UAAU;CACtB,MAAM,aAAa,oBAAoB;CACvC,MAAM,SAAS,EAAE;CACjB,MAAM,CAAC,SAAS,eAAA,GAAcD,MAAAA,SAAAA,CAAS,KAAK;CAC5C,aAAa,MAAM,EAAE,YAAY;CAEjC,MAAM,YAAY;EAAC,GAAG,IAAI,OAAO,KAAK,OAAO,eAAe,GAAG,CAAC,CAAC,OAAO,OAAO;EAAG,GAAG,IAAI;EAAc,GAAG;CAAU;CAEpH,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,WAAY,CAAA;GAEhB,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,aAAc,CAAA;GAClB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAO,SAAQ;KAAgB,UAAA;IAAY,CAAA,GAC3C,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,IAAG;KAAgB,WAAU;KAAa,OAAO,EAAE;KAAO,WAAW,MAAM,OAAO,EAAE,OAAO,EAAE,OAAO,MAAsB,CAAC;KAAnI,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAS,UAAA;MAAyB,CAAA;MAChD,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAQ,UAAA;MAAa,CAAA;MACnC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAO,UAAA;MAAY,CAAA;KAC3B;IACL,CAAA,CAAA;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAO,SAAQ;KAAe,UAAA;IAAoB,CAAA,GAClD,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,IAAG;KAAe,WAAU;KAAa,OAAO,EAAE;KAAM,WAAW,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO,MAAsB,CAAC;KAAhI,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAS,UAAA;MAAc,CAAA;MACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAQ,UAAA;MAAa,CAAA;MACnC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;OAAQ,OAAM;OAAW,UAAA;MAAuB,CAAA;KAC1C;IACL,CAAA,CAAA;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAO,kBAAsB,CAAA,GAC7B,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD,CAAmB,CAAA,CAChB;;GACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAO,kBAAsB,CAAA,GAC7B,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAW,UAAA,eAAe,cAAc;MAAQ,CAAA;MAAC;MAAmB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAW,UAAA,eAAe,cAAc;MAAQ,CAAA;MAAC;MAAkB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAU,UAAA;MAAS,CAAA;MAAC;KACvM;IACH,CAAA,CAAA;;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,SAAU,CAAA;GACb,UAAU,KAAK,MACd,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MACE,MAAK;MACL,SAAS,CAAC,EAAE,aAAa,SAAS,EAAE,EAAE;MACtC,WAAW,MAAM,OAAO,EAAE,cAAc,EAAE,OAAO,UAAU,EAAE,aAAa,QAAQ,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;KAClI,CAAA,GACA,EAAE,KACE;;GACJ,GATkC,EAAE,EASpC,CACN;GAED,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,UAAW,CAAA;GACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAoB,WAAW,MAAM,OAAO,EAAE,oBAAoB,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,+BACtH;;GACJ,CAAA;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAmB,WAAW,MAAM,OAAO,EAAE,mBAAmB,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,kBACpH;;GACJ,CAAA;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OACE,MAAK;OACL,SAAS,EAAE;OACX,WAAW,MAAM;QACf,gBAAgB,EAAE,OAAO,OAAO;QAChC,OAAO,EAAE,cAAc,EAAE,OAAO,QAAQ,CAAC;OAC3C;MACD,CAAA;MAAE;MAAI;KAEF;;GACJ,CAAA;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,UAAW,CAAA;GACf,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAoB,WAAW,MAAM,OAAO,EAAE,oBAAoB,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,+BACtH;;GACJ,CAAA;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAc,WAAW,MAAM,OAAO,EAAE,cAAc,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,4BAC1G;;GACJ,CAAA;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,WAAY,CAAA;GAChB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KACE,WAAU;KACV,UAAU,CAAC,WAAW;KACtB,eAAe;MACb,iBAAiB;MACjB,YAAY,SAAS,CAAC,CAAC,WAAW;KACpC;KACD,UAAA;IAEO,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAc,UAAA;IAAkE,CAAA,CAC7F;;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,OAAQ,CAAA;GACZ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,WAAU;KAAqB,eAAe,WAAW,IAAI;KAAG,UAAA;IAEhE,CAAA,GACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;KAAM,WAAU;KAAhB,UAAA;MAA8B;MAAqE;MAAgB;KAAQ;IACxH,CAAA,CAAA;;GAEL,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAI,QAAS,CAAA;GACb,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;IAAG,WAAU;IAAc,OAAO,EAAE,UAAU,IAAI;IAAlD,UAAA;KAAqD;KACzB;KAAQ;IAEjC;;GAEF,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IACE,OAAM;IACN,SAAQ;IACR,cAAa;IACb,QAAA;IACA,gBAAgB,WAAW,KAAK;IAChC,iBAAiB;KACf,KAAK,MAAM,QAAQ,CAAC,cAAc,cAAc,GAC9C,KAAK,IAAI,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;MACzC,MAAM,IAAI,KAAK,IAAI,CAAC;MACpB,IAAI,GAAG,WAAA,QAA0B,GAAG,QAAQ,UAAU,WAAW,KAAK,MAAM,CAAC;KAC/E;KAEF,SAAS,OAAO;IAClB;GACD,CAAA;EAEA;;AAET;;AC9LA,IAAa,iBAA0D;CACrE,UAAU;EAAE,IAAI;EAAY,OAAO;EAAY,MAAM;EAAc,WAAW;EAAe,OAAO;CAAG;CACvG,SAAS;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAa,WAAW;EAAc,OAAO;CAAG;CAClG,SAAS;EAAE,IAAI;EAAW,OAAO;EAAW,MAAM;EAAa,WAAW;EAAc,OAAO;CAAG;CAClG,aAAa;EAAE,IAAI;EAAe,OAAO;EAAe,MAAM;EAAiB,WAAW;EAAkB,OAAO;CAAG;AACxH;;ACFA,IAAM,QAAQ;AACd,IAAM,QAAQ;AAEd,SAAgB,mBAAsC;CACpD,MAAM,MAAM,UAAU;CACtB,MAAM,SAAS,aAAa,MAAM,EAAE,YAAY;CAChD,MAAM,aAAa,oBAAoB;CACvC,QAAA,GAAOE,MAAAA,QAAAA,OAAc;EACnB,MAAM,UAAmC;GACvC,UAAU;GACV,SAAS,IAAI,QAAQ;GACrB,SAAS,IAAI,QAAQ;GACrB,aAAa,IAAI,QAAQ;EAC3B;EACA,MAAM,WAAW,IAAI,OAClB,QAAQ,OAAO,QAAQ,QAAQ,SAAS,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAC7D,KAAK,OAAO,eAAe,GAAG,CAAC,CAC/B,OAAO,OAAO;EACjB,MAAM,QAAQ,CAAC,GAAG,IAAI,cAAc,GAAG,UAAU,CAAC,CAAC,QAAQ,GAAG,GAAG,QAAQ,IAAI,WAAW,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,KAAK,CAAC,OAAO,SAAS,EAAE,EAAE,CAAC;EAC5I,OAAO,CAAC,GAAG,UAAU,GAAG,KAAK;CAC/B,GAAG;EAAC;EAAK;EAAQ;CAAU,CAAC;AAC9B;AAEA,SAAgB,oBAAoB;CAClC,MAAM,IAAI,YAAY;CACtB,MAAM,SAAS,iBAAiB;CAChC,MAAM,MAAM,UAAU;CAEtB,MAAM,CAAC,SAAS,eAAA,GAAcC,MAAAA,SAAAA,CAAmB,CAAC,CAAC;CACnD,MAAM,SAAS,EAAE,gBAAgB,cAAc,OAAO,MAAM,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE,cAAc,OAAO,EAAE,EAAE,MAAM;CAC7H,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,QAAQ,SAAS,MAAM,GAAG,YAAY,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;CACjE,GAAG,CAAC,QAAQ,OAAO,CAAC;CAGpB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,IAAI,qBAAqB,EAAE,SAAS,cAAc,EAAE,WAAW;EACpE,MAAM,OAAO,SAAS;EACtB,MAAM,OAAO,EAAE,SAAS,WAAW,kBAAkB;EACrD,MAAM,OAAO,KAAK,MAAM;EACxB,KAAK,MAAM,QAAQ,GAAG,EAAE,YAAY,KAAK,EAAE,SAAS,WAAW,EAAE,eAAe,EAAE,WAAW;EAC7F,aAAa;GACX,KAAK,MAAM,QAAQ;EACrB;CACF,GAAG;EAAC,IAAI;EAAmB,EAAE;EAAM,EAAE;EAAc,EAAE;EAAY,EAAE;EAAW,EAAE;CAAS,CAAC;CAE1F,MAAM,QAA6B,CAAC;CACpC,IAAI,EAAE,SAAS,UAAU,MAAM,SAAS,MAAM,EAAE,cAAc,OAAO,OAAO,cAAc,EAAE;MACvF,IAAI,EAAE,SAAS,SAAS,MAAM,QAAQ,MAAM,EAAE,YAAY,OAAO,OAAO,aAAa,EAAE;MACvF;EACH,MAAM,OAAO,EAAE,SAAS;EACxB,MAAM,MAAM,EAAE,SAAS;EACvB,MAAM,QAAQ,EAAE,SAAS;EACzB,MAAM,SAAS,EAAE,SAAS;CAC5B;CAEA,MAAM,UAAU,UAA0D,MAA0B;EAClG,MAAM,QAAQ;GAAE,GAAG,EAAE;GAAc,GAAG,EAAE;GAAY,GAAG,EAAE,GAAG,EAAE,SAAS;EAAE;EACzE,UACE,IACC,IAAI,OAAO;GACV,IAAI,EAAE,SAAS,UAAU,YAAY,SAAS,EAAE,cAAc,MAAM,MAAM,IAAI,IAAI,OAAO,OAAO,cAAc,EAAE,EAAE,CAAC;QAC9G,IAAI,EAAE,SAAS,SAAS,YAAY,SAAS,EAAE,YAAY,MAAM,MAAM,IAAI,IAAI,OAAO,OAAO,aAAa,EAAE,EAAE,CAAC;QAC/G;IACH,MAAM,IAAI,EAAE,GAAG,MAAM,EAAE;IACvB,IAAI,SAAS,WAAW,SAAS,UAAU,EAAE,QAAQ,KAAK,IAAI,OAAO,MAAM,EAAE,QAAQ,EAAE;IACvF,IAAI,SAAS,YAAY,SAAS,UAAU,EAAE,SAAS,KAAK,IAAI,OAAO,MAAM,EAAE,SAAS,EAAE;IAC1F,IAAI,SAAS,QAAQ;KACnB,EAAE,QAAQ,KAAK,IAAI,OAAO,MAAM,EAAE,QAAQ,EAAE;KAC5C,EAAE,IAAI,MAAM,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE;IACvC;IACA,IAAI,SAAS,OAAO;KAClB,EAAE,SAAS,KAAK,IAAI,OAAO,MAAM,EAAE,SAAS,EAAE;KAC9C,EAAE,IAAI,MAAM,EAAE,KAAK,MAAM,EAAE,SAAS,EAAE;IACxC;IACA,YAAY,SAAS,EAAE,UAAU,EAAE,CAAC;GACtC;EACF,SACM,EAAE,eAAe,CAAC,CAAC,CAC3B;CACF;CAEA,MAAM,MAAM,CAAC,GAAG,MAAM;CACtB,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,WAAU;EACV,aAAW,EAAE;EACb,kBAAgB,EAAE;EAClB,kBAAgB,EAAE;EACX;EACP,MAAK;EACL,cAAW;EAPb,UAAA;GASG,CAAC,EAAE,aAAa,CAAC,EAAE,aAClB,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA;IACG,EAAE,SAAS,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAA4B,eAAe,OAAO,KAAK;IAAI,CAAA;IACjG,EAAE,SAAS,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAA6B,eAAe,OAAO,MAAM;IAAI,CAAA;IAClG,EAAE,SAAS,cACV,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA;KACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA4B,eAAe,OAAO,KAAK;KAAI,CAAA;KAC1E,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA6B,eAAe,OAAO,MAAM;KAAI,CAAA;KAC5E,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA8B,eAAe,OAAO,OAAO;KAAI,CAAA;KAC9E,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA+B,eAAe,OAAO,QAAQ;KAAI,CAAA;KAChF,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAA+B,eAAe,OAAO,QAAQ;KAAI,CAAA;IAChF,EAAA,CAAA;GAEJ,EAAA,CAAA;GAEJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,EAAqB,OAAS,CAAA;GAC7B,CAAC,EAAE,aACF,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACG,IAAI,KAAK,MACR,QAAQ,SAAS,EAAE,EAAE,KAAK,EAAE,OAAO,SACjC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAgB,WAAU;KAAiB,QAAQ,EAAE,OAAO;KAAQ,MAAK;KAAW,cAAY,EAAE;KAChG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;MAAe,OAAO,EAAE;MACtB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,EAAE,WAAH,CAAc,CAAA;KACD,CAAA;IACZ,GAJK,EAAE,EAIP,IACH,IACN,GACC,WAAW,cACV,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAiB,MAAK;KAAW,cAAW;KACzD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;MAAe,OAAM;MACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,CAAgB,CAAA;KACH,CAAA;IACZ,CAAA,CAEJ;GACL,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA,CACZ,EAAA,CAAA;EAED;;AAET;;AC7HA,IAAM,MAAM,MAAc,WAAW,CAAC,KAAK;AAE3C,SAAS,QAAQ,MAA6B;CAC5C,IAAI,CAAC,KAAK,eAAe,eAAe,IAAI,GAAG,OAAO;CACtD,IAAI,KAAK,aAAa,GAAG;EACvB,MAAM,QAAQ,SAAS,YAAY;EACnC,MAAM,mBAAmB,IAAI;EAC7B,MAAM,IAAI,MAAM,sBAAsB;EACtC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,OAAO;EAClC,OAAO;GACL,QAAQ;GACR,QAAQ;IAAC;IAAG;IAAG;IAAG;GAAC;GACnB,SAAS;IAAC;IAAG;IAAG;IAAG;GAAC;GACpB,SAAS;IAAC;IAAG;IAAG;IAAG;GAAC;GACpB,KAAK;GACL,IAAI;GACJ,SAAS;GACT,OAAO,EAAE;GACT,QAAQ,EAAE;GACV,UAAU;GACV,SAAS;EACX;CACF;CACA,IAAI,KAAK,aAAa,GAAG,OAAO;CAChC,MAAM,KAAK;CACX,MAAM,IAAI,GAAG,sBAAsB;CACnC,MAAM,KAAK,iBAAiB,EAAE;CAC9B,IAAI,GAAG,YAAY,QAAQ,OAAO;CAElC,MAAM,UAAW,GAAmB;CACpC,MAAM,QAAQ,UAAU,EAAE,QAAQ,UAAU;CAC5C,MAAM,KAAK,MAAc,GAAG,CAAC,KAAK,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;CACzE,MAAM,MAAM,GAAG,aAAa,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,KAAK,CAAC;CAC9E,OAAO;EACL,QAAQ;EACR,QAAQ;GAAC,EAAE,GAAG,SAAS;GAAG,EAAE,GAAG,WAAW;GAAG,EAAE,GAAG,YAAY;GAAG,EAAE,GAAG,UAAU;EAAC;EACjF,SAAS;GAAC,EAAE,GAAG,cAAc;GAAG,EAAE,GAAG,gBAAgB;GAAG,EAAE,GAAG,iBAAiB;GAAG,EAAE,GAAG,eAAe;EAAC;EACtG,SAAS;GAAC,EAAE,GAAG,UAAU;GAAG,EAAE,GAAG,YAAY;GAAG,EAAE,GAAG,aAAa;GAAG,EAAE,GAAG,WAAW;EAAC;EACtF,KAAK,GAAG;EACR,IAAI,GAAG;EACP,SAAS,IAAI,SAAS,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,IAAI,SAAS,IAAI,MAAM,MAAM;EACtF,OAAO,EAAE,SAAS,SAAS;EAC3B,QAAQ,EAAE,UAAU,SAAS;EAC7B,UAAU,GAAG;EACb,SAAS,GAAG;EACZ,OAAO,GAAG;EACV,MAAM,GAAG,GAAG,SAAS,GAAG,GAAG,WAAW,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,SAAS,EAAE;CACzE;AACF;AAEA,IAAM,SAAS,MAAc,KAAK,MAAM,IAAI,GAAG,IAAI;AAEnD,SAAS,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,SAAwE;CACjG,IAAI,KAAK,KAAK,KAAK,GAAG,OAAO;CAC7B,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAK,OAAO;EAAE,UAAU;EAAS,MAAM;EAAG,KAAK;EAAG,OAAO;EAAG,QAAQ;EAAG,YAAY;EAAO,eAAe;CAAO,EAAI,CAAA;AAC7H;;AAGA,SAAgB,mBAAmB;CACjC,MAAM,UAAU,aAAa,MAAM,EAAE,OAAO;CAC5C,MAAM,SAAS,aAAa,MAAM,EAAE,YAAY;CAChD,MAAM,CAAC,KAAK,WAAA,GAAUC,MAAAA,SAAAA,CAA0B,IAAI;CAEpD,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,SAAS;GACZ,OAAO,IAAI;GACX;EACF;EACA,IAAI,QAAQ;EACZ,IAAI,OAAO;EACX,MAAM,aAAa;GACjB,MAAM,IAAI,QAAQ,OAAO;GACzB,MAAM,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,MAAM,GAAG,EAAE,OAAO,WAAW;GACrF,IAAI,QAAQ,MAAM;IAChB,OAAO;IACP,OAAO,CAAC;GACV;GACA,QAAQ,sBAAsB,IAAI;EACpC;EACA,KAAK;EACL,aAAa,qBAAqB,KAAK;CACzC,GAAG,CAAC,OAAO,CAAC;CAEZ,IAAI,CAAC,KAAK,OAAO;CACjB,MAAM,IAAI,IAAI;CACd,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,IAAI;CAC7B,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,IAAI;CAC7B,MAAM,CAAC,IAAI,IAAI,IAAI,MAAM,IAAI;CAE7B,MAAM,YAAY;EAAE,GAAG,EAAE,OAAO;EAAI,GAAG,EAAE,MAAM;EAAI,GAAG,EAAE,QAAQ,KAAK;EAAI,GAAG,EAAE,SAAS,KAAK;CAAG;CAC/F,MAAM,aAAa;EAAE,GAAG,EAAE,OAAO;EAAI,GAAG,EAAE,MAAM;EAAI,GAAG,EAAE,QAAQ,KAAK;EAAI,GAAG,EAAE,SAAS,KAAK;CAAG;CAChG,MAAM,aAAa;EAAE,GAAG,WAAW,IAAI;EAAI,GAAG,WAAW,IAAI;EAAI,GAAG,WAAW,IAAI,KAAK;EAAI,GAAG,WAAW,IAAI,KAAK;CAAG;CAGtH,MAAM,OAAO;CACb,MAAM,QAAQ,UAAU,IAAI,UAAU,IAAI;CAC1C,MAAM,SAAS,QAAQ,OAAO,OAAO,cAAc,QAAQ,KAAK,IAAI,GAAG,UAAU,IAAI,OAAO,CAAC;CAC7F,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,MAAM,OAAO,aAAa,GAAG,CAAC;CAErE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAc,eAAA;EAA7B,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAK,GAAI;IAAW,OAAM;GAA6B,CAAA;GACvD,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAK,GAAG,EAAE;IAAM,GAAG,EAAE;IAAK,GAAG,EAAE;IAAO,GAAG,EAAE;IAAQ,OAAM;GAA4B,CAAA;GACrF,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAK,GAAI;IAAY,OAAM;GAA6B,CAAA;GACxD,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAK,GAAI;IAAY,OAAM;GAA6B,CAAA;GACxD,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAkB,OAAO;KAAE,MAAM;KAAS,KAAK;IAAO;IAArE,UAAA;KACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAc,UAAA,IAAI;OAAU,CAAA;OAC3C,IAAI,MAAM,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA,CAA4B,KAAE,IAAI,EAAS;;OACtD,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,WAAU;QAAc,UAAA,IAAI;OAAc,CAAA;OAChD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA;SACG,MAAM,IAAI,KAAK;SAAE;SAAI,MAAM,IAAI,MAAM;QAClC;;MACH;;KACJ,IAAI,QAAQ,WACX,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAK,WAAU;MAAf,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,WAAc,CAAA;OACpB,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;QACG,IAAI;QAAS;QAAM,KAAK,MAAM,EAAE,IAAI;QAAE;QAAK,KAAK,MAAM,EAAE,GAAG;OACxD,EAAA,CAAA;OACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,UAAa,CAAA;OACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,IAAI,QAAc,CAAA;OACxB,IAAI,QACH,iBAAA,GAAA,kBAAA,KAAA,CAAAC,kBAAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAM,OAAU,CAAA,GAChB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,IAAI,KAAW,CAAA,CACtB,EAAA,CAAA;MAED;;KAEN,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAmB,UAAA;KAAoC,CAAA;IAC9E;;EACF;;AAET;;ACtJA,IAAM,UAAU;CAAC;CAAe;CAAa;CAAa;CAAW;CAAS;CAAY;CAAe;CAAc;CAAY;AAAU;AAE7I,SAAS,YAAY,GAA0B;CAE7C,MAAM,SADO,EAAE,eAAe,KAAK,CAAC,EAAA,CAChB,MAAM,EAAE;CAC5B,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,KAAK,MAAM,aAAa,IAAK,QAAoB,MAAM;CAC7D,OAAO,MAAM,CAAC,eAAe,EAAE,IAAI,KAAK;AAC1C;;;;;;AAOA,SAAgB,YAAkB;CAChC,MAAM,SAAS,aAAa,MAAM,EAAE,YAAY;CAEhD,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,QAAQ;EACb,MAAM,EAAE,UAAU,YAAY,SAAS;EAEvC,MAAM,UAAU,MAAa;GAC3B,IAAI,gBAAgB,CAAC,GAAG;GACxB,MAAM,KAAK,YAAY,CAAC;GACxB,IAAI,IAAI,MAAM,EAAE;EAClB;EACA,MAAM,WAAW,MAAa;GAC5B,IAAI,gBAAgB,CAAC,GAAG;GACxB,EAAE,eAAe;GACjB,EAAE,gBAAgB;GAClB,EAAE,yBAAyB;GAC3B,IAAI,EAAE,SAAS,WAAY,EAAE,SAAS,cAAc,EAAE,YAAa;IACjE,MAAM,KAAK,YAAY,CAAC;IACxB,IAAI,CAAC,IAAI;IACT,YAAY,SAAS,CAAC,CAAC,OAAO,IAAI,IAAI;IACtC,MAAM,IAAI;IAEV,YADsB,SACtB,CAAA,CAAE,eAAe,EAAE,aAAa,WAAW,CAAC;IAC5C,YAAY,SAAS;KAAE,cAAc;KAAO,MAAM;KAAM,WAAW;IAAM,CAAC;GAC5E;EACF;EACA,MAAM,SAAS,MAAqB;GAClC,IAAI,EAAE,QAAQ,UAAU;IACtB,EAAE,eAAe;IACjB,EAAE,gBAAgB;IAClB,YAAY,SAAS,EAAE,cAAc,MAAM,CAAC;GAC9C;EACF;EAEA,OAAO,iBAAiB,eAAe,QAAQ,IAAI;EACnD,OAAO,iBAAiB,aAAa,QAAQ,IAAI;EACjD,QAAQ,SAAS,MAAM,OAAO,iBAAiB,GAAG,SAAS;GAAE,SAAS;GAAM,SAAS;EAAM,CAAC,CAAC;EAC7F,OAAO,iBAAiB,WAAW,OAAO,IAAI;EAC9C,aAAa;GACX,OAAO,oBAAoB,eAAe,QAAQ,IAAI;GACtD,OAAO,oBAAoB,aAAa,QAAQ,IAAI;GACpD,QAAQ,SAAS,MAAM,OAAO,oBAAoB,GAAG,SAAS,IAAI,CAAC;GACnE,OAAO,oBAAoB,WAAW,OAAO,IAAI;GACjD,YAAY,SAAS,CAAC,CAAC,MAAM,IAAI;EACnC;CACF,GAAG,CAAC,MAAM,CAAC;AACb;;ACpDA,IAAa,sBACX;AAEF,SAAgB,kBAAkB,OAAwB;CACxD,OAAO,oBAAoB,KAAK,KAAK;AACvC;AAIA,IAAM,aAAN,cAAyB,MAAM,CAAC;AAEhC,SAAgB,uBAAuB,MAAc,KAAe,UAA6B;CAC/F,MAAM,UAAU,cAAc,KAAK,KAAK,CAAC;CACzC,IAAI,CAAC,QAAQ,UAAW,QAAQ,WAAW,KAAK,QAAQ,OAAO,IAAK,OAAO;CAC3E,OAAO,QAAQ,MAAM,MAAM;EACzB,IAAI;GACF,OAAO,cAAc,EAAE,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,QAAQ;EAC5D,QAAQ;GACN,OAAO,SAAS,CAAC;EACnB;CACF,CAAC;AACH;AAEA,SAAS,cAAc,MAAwB;CAC7C,MAAM,MAAgB,CAAC;CACvB,IAAI,QAAQ;CACZ,IAAI,MAAM;CACV,KAAK,MAAM,MAAM,MAAM;EACrB,IAAI,OAAO,KAAK;EAChB,IAAI,OAAO,KAAK;EAChB,IAAI,OAAO,OAAO,UAAU,GAAG;GAC7B,IAAI,KAAK,GAAG;GACZ,MAAM;EACR,OAAO,OAAO;CAChB;CACA,IAAI,KAAK,GAAG;CACZ,OAAO;AACT;AAEA,SAAS,cAAc,GAAW,KAAe,UAA6B;CAC5E,IAAI,IAAI,EAAE,KAAK;CACf,IAAI,CAAC,GAAG,OAAO;CAEf,MAAM,YAAY,EAAE,MAAM,mDAAmD;CAC7E,IAAI,aAAa,UAAU,OAAO,OAAO;EACvC,MAAM,SAAS,UAAU,EAAE,EAAE,KAAK,MAAM;EACxC,MAAM,OAAO,UAAU;EACvB,MAAM,SAAS,SAAS,SAAS,SAAS;EAC1C,MAAM,WAAW,UAAU;EAC3B,IAAI,SAAS,WAAW,WAAW,IAAI,WAAW,UAAU,KAAK,QAAQ,CAAC,CAAC,SAAS,IAAI;EACxF,IAAI,QAAQ,SAAS,CAAC;EACtB,OAAO;CACT;CACA,IAAI,EAAE,QAAQ,YAAY,EAAE;CAC5B,OAAO,IAAI,WAAW,GAAG,KAAK,QAAQ,CAAC,CAAC,SAAS;AACnD;AAEA,IAAM,aAAN,MAAM,WAAW;CAEf,YACE,KACA,KACA,UACA;EAHQ,KAAA,MAAA;EACA,KAAA,MAAA;EACA,KAAA,WAAA;EAJJ,KAAA,MAAA;CAKH;CAEH,WAAoB;EAClB,MAAM,IAAI,KAAK,UAAU;EACzB,KAAK,GAAG;EACR,IAAI,KAAK,MAAM,KAAK,IAAI,QAAQ,MAAM,IAAI,WAAW,UAAU;EAC/D,OAAO;CACT;CAEA,KAAa;EACX,OAAO,KAAK,MAAM,KAAK,IAAI,UAAU,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK;CAC3E;CAEA,QAAgB,GAAoB;EAClC,KAAK,GAAG;EACR,IAAI,KAAK,IAAI,WAAW,GAAG,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,IAAI,KAAK,MAAM,EAAE,WAAW,EAAE,GAAG;GAC3F,KAAK,OAAO,EAAE;GACd,OAAO;EACT;EACA,OAAO;CACT;CAEA,YAA6B;EAC3B,IAAI,KAAK,QAAQ,KAAK,GAAG,OAAO,CAAC,KAAK,SAAS;EAC/C,IAAI,IAAI,KAAK,SAAS;EACtB,IAAI,KAAK,QAAQ,KAAK,GAAG;GACvB,IAAI,KAAK,SAAS,KAAK;GACvB,OAAO,KAAK,QAAQ,KAAK,GAAG,IAAI,KAAK,SAAS,KAAK;EACrD,OAAO,IAAI,KAAK,QAAQ,IAAI,GAAG;GAC7B,IAAI,KAAK,SAAS,KAAK;GACvB,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;EACpD;EACA,OAAO;CACT;CAEA,WAA4B;EAC1B,KAAK,GAAG;EACR,IAAI,KAAK,IAAI,KAAK,SAAS,KAAK,MAAM,IAAI,WAAW,YAAY;EAEjE,IAAI,QAAQ;EACZ,IAAI,MAAM,KAAK;EACf,OAAO,MAAM,KAAK,IAAI,QAAQ,OAC5B,IAAI,KAAK,IAAI,SAAS,KAAK;OACtB,IAAI,KAAK,IAAI,SAAS,KAAK;GAC9B;GACA,IAAI,UAAU,GAAG;EACnB;EAEF,IAAI,UAAU,GAAG,MAAM,IAAI,WAAW,YAAY;EAClD,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK;EACrD,KAAK,MAAM,MAAM;EACjB,IAAI,MAAM,WAAW,GAAG,KAAK,MAAM,WAAW,MAAM,KAAK,MAAM,WAAW,MAAM,GAC9E,OAAO,IAAI,WAAW,OAAO,KAAK,KAAK,KAAK,QAAQ,CAAC,CAAC,SAAS;EAEjE,OAAO,gBAAgB,OAAO,KAAK,KAAK,KAAK,QAAQ;CACvD;AACF;AAEA,SAAS,KAAK,OAA8B;CAC1C,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM,0BAA0B;CACvD,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,IAAI,WAAW,EAAE,EAAE;CACzB,OAAO,EAAE,OAAO,QAAQ,EAAE,OAAO,QAAQ,IAAI,KAAK;AACpD;AAEA,SAAS,OAAO,OAA8B;CAC5C,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM,8BAA8B;CAC3D,IAAI,CAAC,GAAG,OAAO;CACf,MAAM,IAAI,WAAW,EAAE,EAAE;CACzB,QAAQ,EAAE,IAAV;EACE,KAAK,OACH,OAAO,IAAI;EACb,KAAK,QACH,OAAQ,IAAI,OAAQ;EACtB,SACE,OAAO;CACX;AACF;AAEA,SAAS,QAAQ,OAA8B;CAC7C,MAAM,IAAI,MAAM,KAAK,CAAC,CAAC,MAAM,iCAAiC;CAC9D,IAAI,CAAC,GAAG,OAAO;CACf,OAAO,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,EAAE,IAAI;AACvD;AAIA,SAAS,cAAc,KAA6D;CAClF,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,QAAQ,aAAa,EAAE;CAC7C,IAAI,SAA+B;CACnC,MAAM,IAAI,KAAK,MAAM,kBAAkB;CACvC,IAAI,GAAG;EACL,SAAS,EAAE;EACX,OAAO,EAAE;CACX;CACA,IAAI,SAAS,gBAAgB,OAAO;CACpC,IAAI,SAAS,iBAAiB,OAAO;CACrC,IAAI,SAAS,uBAAuB,OAAO;CAC3C,IAAI,SAAS,sBAAsB,OAAO;CAC1C,OAAO;EAAE;EAAM;CAAO;AACxB;AAEA,SAAS,OAAO,MAAsB,KAAuB;CAC3D,QAAQ,MAAR;EACE,KAAK,SACH,OAAO,IAAI;EACb,KAAK,UACH,OAAO,IAAI;EACb,KAAK,gBACH,OAAO,IAAI,QAAQ,IAAI;EACzB,KAAK,cACH,OAAO,IAAI;CACf;AACF;AAEA,SAAS,WAAW,MAAsB,OAAe,SAAgC;CACvF,IAAI,SAAS,WAAW,SAAS,UAAU,OAAO,KAAK,KAAK;CAC5D,IAAI,SAAS,gBAAgB,OAAO,QAAQ,KAAK;CAEjD,IAAI,cAAc,KAAK,OAAO,GAAG,OAAO,WAAW,KAAK;CACxD,OAAO,OAAO,KAAK;AACrB;AAEA,SAAS,QAAQ,GAAW,IAAY,GAAoB;CAC1D,MAAM,MAAM;CACZ,QAAQ,IAAR;EACE,KAAK,KACH,OAAO,IAAI,IAAI;EACjB,KAAK,MACH,OAAO,KAAK,IAAI;EAClB,KAAK,KACH,OAAO,IAAI,IAAI;EACjB,KAAK,MACH,OAAO,KAAK,IAAI;EAClB,KAAK,KACH,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI;EAC3B,SACE,MAAM,IAAI,WAAW,IAAI;CAC7B;AACF;AAEA,IAAM,0BAAU,IAAI,IAAI;CAAC;CAAS;CAAU;CAAgB;AAAY,CAAC;AAEzE,SAAgB,gBAAgB,OAAe,KAAe,UAA6B;CAEzF,IAAI,QAAQ,KAAK,KAAK,KAAK,CAAC,MAAM,SAAS,GAAG,GAAG;EAC/C,MAAM,SAAS,MAAM,MAAM,qBAAqB,CAAC,CAAC,KAAK,MAAM,EAAE,KAAK,CAAC;EACrE,IAAI,OAAO,WAAW,KAAK,OAAO,WAAW,GAAG;GAC9C,MAAM,UAAU,OAAO,WAAW,GAAG,MAAM,IAAI,MAAM,KAAK,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;GAC5F,IAAI,YAAY,IAAI,OAAO,SAAS,IAAI,MAAM,EAAE;GAChD,MAAM,UAAU,OAAO;GACvB,MAAM,OAAO,cAAc,OAAO,CAAC,CAAC;GACpC,MAAM,MAAM,OAAO,MAAM,GAAG;GAC5B,IAAI,KAAK;GACT,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;IACzC,MAAM,OAAO,OAAO,IAAI;IACxB,MAAM,KAAK,OAAO;IAClB,MAAM,QAAQ,OAAO,IAAI;IACzB,MAAM,IAAI,IAAI,MAAM,UAAU,MAAM,WAAW,MAAM,MAAM,OAAO;IAClE,MAAM,IAAI,IAAI,MAAM,UAAU,MAAM,WAAW,MAAM,OAAO,OAAO;IACnE,IAAI,KAAK,QAAQ,KAAK,MAAM,OAAO,SAAS,IAAI,MAAM,EAAE;IACxD,KAAK,MAAM,QAAQ,GAAG,IAAI,CAAC;GAC7B;GACA,OAAO;EACT;EACA,OAAO,SAAS,IAAI,MAAM,EAAE;CAC9B;CAEA,MAAM,QAAQ,MAAM,QAAQ,GAAG;CAC/B,MAAM,UAAU,UAAU,KAAK,QAAQ,MAAM,MAAM,GAAG,KAAK;CAC3D,MAAM,QAAQ,UAAU,KAAK,OAAO,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,KAAK;CAChE,MAAM,EAAE,MAAM,WAAW,cAAc,OAAO;CAE9C,IAAI,QAAQ,IAAI,IAAI,GAAG;EACrB,MAAM,IAAI;EACV,MAAM,MAAM,OAAO,GAAG,GAAG;EACzB,IAAI,SAAS,MAAM,OAAO,MAAM;EAChC,MAAM,SAAS,WAAW,GAAG,OAAO,OAAO;EAC3C,IAAI,UAAU,MAAM,OAAO,SAAS,IAAI,MAAM,EAAE;EAChD,IAAI,WAAW,OAAO,OAAO,QAAQ,KAAK,MAAM,MAAM;EACtD,IAAI,WAAW,OAAO,OAAO,QAAQ,KAAK,MAAM,MAAM;EACtD,OAAO,QAAQ,KAAK,KAAK,MAAM;CACjC;CACA,IAAI,SAAS,eAAe;EAC1B,MAAM,IAAI,IAAI,UAAU,IAAI,QAAQ,aAAa;EACjD,OAAO,SAAS,OAAO,OAAO,UAAU;CAC1C;CACA,IAAI,SAAS,WAAW,SAAS,aAAa;EAC5C,MAAM,IAAI,IAAI,QAAQ,SAAS;EAC/B,OAAO,SAAS,OAAO,MAAM,UAAU,UAAU;CACnD;CACA,IAAI,SAAS,aAAa,SAAS,eAAe;EAChD,MAAM,IAAI,IAAI,QAAQ,WAAW;EACjC,OAAO,SAAS,OAAO,OAAO,UAAU;CAC1C;CACA,OAAO,SAAS,IAAI,MAAM,EAAE;AAC9B;;;;;;;;;;;;ACpQA,IAAI,MAAuB;AAC3B,IAAI,iBAAyD;AAI7D,IAAM,0BAAU,IAAI,IAA6B;AACjD,IAAM,8BAAc,IAAI,QAAiC;AACzD,IAAM,kBAAkB,OAAO,YAAY;AAE3C,SAAS,aAAa,KAA8B;CAClD,MAAM,OAAO,OAAO,yBAAyB,eAAe,WAAW,SAAS;CAChF,OAAO,MAAM,MAAO,KAAK,IAAI,KAAK,GAAG,IAAgB;AACvD;AAEA,SAAS,gBAAgB,OAAwB;CAC/C,OAAO,uBAAuB,OAAO,MAAO,MAAO,iBAAiB,aAAa,eAAe,KAAK,QAAQ,CAAC,CAAC,IAAI,KAAM;AAC3H;;;;;;AAOA,SAAgB,yBAAqC;CACnD,IAAI,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,cAAc,OAAO,mBAAmB,aAAa,aAAa,CAAC;CACrI,MAAM,WAAW,OAAO;CACxB,iBAAiB;CACjB,MAAM,UAAU,SAAS,WAA0B,OAA+B;EAChF,MAAM,MAAM,SAAS,KAAK,QAAQ,KAAK;EACvC,IAAI,CAAC,kBAAkB,OAAO,KAAK,CAAC,GAAG,OAAO;EAC9C,IAAI;GACF,OAAO,eAAe,KAAK,WAAW;IACpC,cAAc;IACd,YAAY;IACZ,MAAM;KACJ,OAAO,MAAM,gBAAgB,IAAI,KAAK,IAAI,aAAa,GAAG;IAC5D;GACF,CAAC;GACD,YAAY,IAAI,KAAK,IAAI,OAAO;GAChC,IAAI,iBAAiB,QAAQ,IAAI,IAAI,QAAQ,GAAG,CAAC;EACnD,QAAQ,CAAC;EACT,OAAO;CACT;CACA,OAAO,aAAa;CACpB,aAAa;EACX,IAAI,OAAO,eAAgB,SAAqB,OAAO,aAAa;EACpE,iBAAiB;CACnB;AACF;AAEA,SAAS,wBAA8B;CACrC,KAAK,MAAM,OAAO,MAAM,KAAK,OAAO,GAAG;EACrC,MAAM,MAAM,IAAI,MAAM;EACtB,IAAI,CAAC,KAAK;GACR,QAAQ,OAAO,GAAG;GAClB;EACF;EACA,MAAM,MAAM,IAAI;EAChB,IAAI,YAAY,IAAI,GAAG,MAAM,KAAK;GAChC,YAAY,IAAI,KAAK,GAAG;GACxB,IAAI;GACJ,IAAI;IACF,KAAK,IAAI,oBAAoB,UAAU;KAAE,OAAO,IAAI;KAAO,SAAS;IAAI,CAAC;GAC3E,QAAQ;IACN,KAAK,IAAI,MAAM,QAAQ;IACvB,OAAO,OAAO,IAAI;KAAE,OAAO,IAAI;KAAO,SAAS;IAAI,CAAC;GACtD;GACA,IAAI;IACF,IAAI,cAAc,EAAE;GACtB,QAAQ,CAAC;EACX;CACF;AACF;AAIA,IAAM,oCAAoB,IAAI,IAA0B;AACxD,IAAM,qCAAqB,IAAI,IAA2B;AAE1D,SAAS,aAAa,MAAyB;CAC7C,KAAK,MAAM,QAAQ,MAAM,KAAK,IAAI,GAChC,IAAI,gBAAgB,cAAc;EAChC,MAAM,WAAW,kBAAkB,IAAI,IAAI,KAAK,KAAK,MAAM;EAC3D,IAAI,kBAAkB,QAAQ,GAAG;GAC/B,IAAI,CAAC,kBAAkB,IAAI,IAAI,GAAG,kBAAkB,IAAI,MAAM,QAAQ;GACtE,MAAM,OAAO,gBAAgB,QAAQ,IAAI,QAAQ;GACjD,IAAI,KAAK,MAAM,cAAc,MAAM,KAAK,MAAM,YAAY;EAC5D;EACA,aAAa,KAAK,QAAQ;CAC5B,OAAO,IAAI,cAAc,QAAS,KAAyB,UACzD,aAAc,KAAyB,QAAQ;AAGrD;AAEA,SAAS,qBAA2B;CAClC,KAAK,MAAM,SAAS,MAAM,KAAK,SAAS,WAAW,GAAG;EACpD,IAAI,MAAM,aAAa,eAAe,MAAM,SAAS,GAAG;EACxD,IAAI;GACF,MAAM,KAAK,mBAAmB,IAAI,KAAK,KAAK,MAAM,MAAM;GACxD,IAAI,MAAM,kBAAkB,EAAE,GAAG;IAC/B,IAAI,CAAC,mBAAmB,IAAI,KAAK,GAAG,mBAAmB,IAAI,OAAO,EAAE;IACpE,MAAM,MAAM,YAAY,gBAAgB,EAAE,IAAI,QAAQ;GACxD;GACA,aAAa,MAAM,QAAQ;EAC7B,QAAQ,CAER;CACF;AACF;AAEA,SAAS,qBAA2B;CAClC,KAAK,MAAM,CAAC,MAAM,SAAS,mBACzB,IAAI;EACF,KAAK,MAAM,YAAY;CACzB,QAAQ,CAAC;CAEX,KAAK,MAAM,CAAC,OAAO,SAAS,oBAC1B,IAAI;EACF,MAAM,MAAM,YAAY;CAC1B,QAAQ,CAAC;CAEX,kBAAkB,MAAM;CACxB,mBAAmB,MAAM;AAC3B;AAMA,SAAS,SAAS,KAAa,MAAc,KAA6B;CACxE,MAAM,MAAM,OAAO,yBAAyB,KAAK,IAAI;CACrD,IAAI;EACF,OAAO,eAAe,KAAK,MAAM;GAAE,cAAc;GAAM,YAAY;GAAM;EAAI,CAAC;CAChF,QAAQ;EACN,aAAa,CAAC;CAChB;CACA,aAAa;EACX,IAAI;GACF,IAAI,KAAK,OAAO,eAAe,KAAK,MAAM,GAAG;QACxC,OAAQ,IAAgC;EAC/C,QAAQ,CAAC;CACX;AACF;;AAGA,SAAS,UAAU,IAAiB,OAA0B;CAC5D,MAAM,QAAQ,MAAM,KAAK,MAAM;EAAC;EAAG,GAAG,MAAM,iBAAiB,CAAC;EAAG,GAAG,MAAM,oBAAoB,CAAC;CAAC,CAAU;CAC1G,aAAa;EACX,KAAK,MAAM,CAAC,GAAG,GAAG,SAAS,OACzB,IAAI,GAAG,GAAG,MAAM,YAAY,GAAG,GAAG,IAAI;OACjC,GAAG,MAAM,eAAe,CAAC;EAEhC,IAAI,GAAG,aAAa,OAAO,MAAM,IAAI,GAAG,gBAAgB,OAAO;CACjE;AACF;AAIA,SAAS,aAAa,QAA8B;CAClD,MAAM,WAAsB,CAAC;CAC7B,MAAM,IAAI;CACV,IAAI,EAAE,kBAAkB,SAAS;EAC/B,EAAE,eAAe;EACjB,SAAS,WAAW,OAAO,EAAE,YAAY;CAC3C;CACA,SAAS,KAAK,SAAS,WAAW,wBAAwB,CAAC,CAAC;CAE5D,MAAM,WAAW,OAAO,UAAU,cAAc,OAAO,eAAe;CACtE,IAAI,SAAyB;CAC7B,MAAM,QAAQ,MAAc,GAAe,OAAgB;EACzD,IAAI,CAAC,UAAU;EACf,IAAI;GACF,MAAM,QAAQ,IAAI,MAAM;IAAE,YAAY;IAAG,QAAQ;IAAI,SAAS,EAAE;IAAS,SAAS,EAAE;IAAS,OAAO,EAAE;IAAO,OAAO,EAAE;IAAO,SAAS,EAAE;IAAS,SAAS,EAAE;IAAS,SAAS;IAAI,SAAS;IAAI,OAAO;GAAE,CAAC;GACzM,MAAM,OAAO,SAAS,aAAa,CAAC,IAAI,CAAC,KAAK;GAC9C,GAAG,cAAc,IAAI,WAAW,MAAM;IAAE,SAAS;IAAM,YAAY;IAAM,UAAU;IAAM,SAAS;IAAM,eAAe;IAAM,gBAAgB,CAAC,KAAK;GAAE,CAAC,CAAC;EACzJ,QAAQ,CAAC;CACX;CACA,MAAM,QAAQ,MAAkB;EAC9B,IAAI,EAAE,WAAW,KAAK,eAAe,EAAE,MAAc,GAAG;EACxD,SAAS,EAAE;EACX,KAAK,cAAc,GAAG,MAAM;CAC9B;CACA,MAAM,QAAQ,MAAkB,UAAU,KAAK,aAAa,GAAG,MAAM;CACrE,MAAM,MAAM,MAAkB;EAC5B,IAAI,CAAC,QAAQ;EACb,KAAK,YAAY,GAAG,MAAM;EAC1B,SAAS;CACX;CACA,OAAO,iBAAiB,aAAa,MAAM,IAAI;CAC/C,OAAO,iBAAiB,aAAa,MAAM,IAAI;CAC/C,OAAO,iBAAiB,WAAW,IAAI,IAAI;CAC3C,SAAS,WAAW;EAClB,OAAO,oBAAoB,aAAa,MAAM,IAAI;EAClD,OAAO,oBAAoB,aAAa,MAAM,IAAI;EAClD,OAAO,oBAAoB,WAAW,IAAI,IAAI;CAChD,CAAC;CACD,aAAa,SAAS,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;AACpD;AAIA,SAAgB,cAAc,QAAmD;CAC/E,IAAI,kBAAkB,aAAa,OAAO;CAC1C,IAAI,OAAO,WAAW,UAAU,OAAO,SAAS,cAA2B,MAAM;CACjF,KAAK,MAAM,OAAO;EAAC;EAAS;EAAW;EAAQ;CAAkB,GAAG;EAClE,MAAM,KAAK,SAAS,cAA2B,GAAG;EAClD,IAAI,IAAI,OAAO;CACjB;CACA,OAAO,MAAM,KAAK,SAAS,KAAK,QAAQ,CAAC,CAAC,MAAM,MAAwB,aAAa,eAAe,CAAC,EAAE,aAAA,eAAsB,KAAK,EAAE,cAAc,QAAQ,KAAK;AACjK;AAeA,IAAM,eAAe;;AAGrB,IAAa,iBAAb,MAA4B;CAS1B,YAAY,QAA6B;EAArB,KAAA,SAAA;EANgB,KAAA,iBAAA,CAAC;EACE,KAAA,eAAA;EACS,KAAA,eAAA;EAET,KAAA,QAAA;EAGrC,KAAK,cAAc,OAAO,aAAa,OAAO;EAC9C,MAAM,QAAQ,CAAC,YAAY,YAAY;EACvC,KAAK,cAAc,CAAC,SAAS,MAAM,SAAS,eAAe,CAAC,CACzD,KAAK,OAAO,UAAU,IAAI,KAAK,CAAC,CAAC,CACjC,QAAQ,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE;CACtC;CAEA,MAAM,GAAyB;EAC7B,MAAM,OAAO,KAAK;EAClB,KAAK,QAAQ;EACb,MAAM,IAAI,KAAK,OAAO;EACtB,EAAE,YAAY,YAAY,SAAS,WAAW;EAC9C,EAAE,YAAY,QAAQ,GAAG,EAAE,KAAK,KAAK,WAAW;EAChD,EAAE,YAAY,OAAO,GAAG,EAAE,IAAI,KAAK,WAAW;EAC9C,EAAE,YAAY,SAAS,GAAG,EAAE,MAAM,KAAK,WAAW;EAClD,EAAE,YAAY,UAAU,GAAG,EAAE,OAAO,KAAK,WAAW;EACpD,EAAE,YAAY,aAAa,QAAQ,WAAW;EAC9C,EAAE,YAAY,cAAc,QAAQ,WAAW;EAC/C,EAAE,YAAY,aAAa,KAAK,WAAW;EAC3C,EAAE,YAAY,cAAc,KAAK,WAAW;EAC5C,EAAE,YAAY,UAAU,KAAK,WAAW;EACxC,EAAE,YAAY,YAAY,QAAQ,WAAW;EAC7C,EAAE,YAAY,aAAa,EAAE,SAAS,IAAI,SAAS,SAAS,EAAE,KAAK,IAAI,WAAW;EAClF,EAAE,YAAY,oBAAoB,OAAO,WAAW;EACpD,EAAE,YAAY,WAAW,cAAc,WAAW;EAClD,EAAE,YAAY,cAAc,cAAc,WAAW;EACrD,EAAE,YAAY,UAAU,EAAE,QAAQ,eAAe,EAAE;EACnD,MAAM,SAAS,EAAE,UAAU,WAAW,KAAK,EAAE,UAAU,WAAW,KAAK,EAAE,UAAU,YAAY,IAAI;EACnG,EAAE,YAAY,iBAAiB,GAAG,OAAO,KAAK,WAAW;EACzD,EAAE,YACA,cACA,EAAE,UAAU,SACR,0DACA,SAAS,EAAE,UAAU,YAAY,IAAI,GAAG,oBAAoB,EAAE,UAAU,YAAY,IAAI,GAAG,yCAC/F,WACF;EAEA,IAAI,CAAC,MAAM;GACT,MAAM,SAAS,iBAAiB,SAAS,IAAI,CAAC,CAAC;GAC/C,MAAM,SAAS,iBAAiB,SAAS,eAAe,CAAC,CAAC;GAC1D,MAAM,KAAK,UAAU,WAAW,qBAAqB,SAAS,UAAU,WAAW,qBAAqB,SAAS;GACjH,EAAE,YAAY,cAAc,EAAE;EAChC;EACA,MAAM,WAAW,EAAE,OAAO,YAAY;EACtC,SAAS,KAAK,MAAM,YAAY,YAAY,UAAU,WAAW;EACjE,SAAS,KAAK,MAAM,YAAY,cAAc,UAAU,WAAW;EACnE,SAAS,gBAAgB,MAAM,YAAY,cAAc,UAAU,WAAW;EAC9E,SAAS,gBAAgB,MAAM,YAAY,YAAY,UAAU,WAAW;EAG5E,MAAM,cAAc,CAAC,QAAQ,KAAK,UAAU,EAAE,SAAS,KAAK,WAAW,EAAE,UAAU,KAAK,QAAQ,EAAE,OAAO,KAAK,UAAU,EAAE;EAC1H,IAAI,EAAE,cAAc;GAClB,MAAM;IAAE,OAAO,EAAE;IAAO,QAAQ,EAAE;IAAQ,KAAK,EAAE;IAAK,OAAO,EAAE;GAAM;GACrE,IAAI,CAAC,QAAQ,CAAC,KAAK,cAAc,KAAK,eAAe;GACrD,IAAI,aAAa;IACf,mBAAmB;IACnB,sBAAsB;IACtB,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;GAC1C;EACF;EACA,IAAI,EAAE,SAAS,CAAC,KAAK,cAAc,KAAK,eAAe,aAAa,KAAK,MAAM;EAC/E,IAAI,CAAC,EAAE,SAAS,KAAK,cAAc;GACjC,KAAK,aAAa;GAClB,KAAK,eAAe;EACtB;CACF;CAEA,iBAA+B;EAC7B,MAAM,UAAU,KAAK,MAAO;EAC5B,MAAM,UAAU,KAAK,MAAO;EAC5B,MAAM,OAAO,SAAS;EACtB,KAAK,eAAe,KAClB,SAAS,QAAQ,cAAc,CAAC,GAChC,SAAS,QAAQ,eAAe,CAAC,GACjC,SAAS,QAAQ,cAAc,CAAC,GAChC,SAAS,QAAQ,eAAe,CAAC,GACjC,SAAS,QAAQ,0BAA0B,KAAK,MAAO,GAAG,GAC1D,SAAS,QAAQ,SAAS,CAAC,GAC3B,SAAS,QAAQ,UAAU,CAAC,GAC5B,SAAS,QAAQ,cAAc,CAAC,GAChC,SAAS,QAAQ,eAAe,CAAC,GACjC,SAAS,MAAM,eAAe,CAAC,GAC/B,SAAS,MAAM,gBAAgB,CAAC,CAClC;EAEA,IAAI,UAAU;EACd,KAAK,eAAe,IAAI,uBAAuB;GAC7C,IAAI,SAAS;GACb,UAAU;GACV,4BAA4B;IAC1B,UAAU;IACV,IAAI,KAAK,mBAAmB;GAC9B,CAAC;EACH,CAAC;EACD,KAAK,aAAa,QAAQ,SAAS,MAAM;GAAE,WAAW;GAAM,SAAS;GAAM,eAAe;EAAK,CAAC;EAEhG,KAAK,WAAW,kBAAkB,OAAO,mBAAmB,GAAG,GAAI;CACrE;CAEA,UAAgB;EACd,MAAM,eAAe,CAAC,CAAC;EACvB,MAAM;EACN,KAAK,cAAc,WAAW;EAC9B,cAAc,KAAK,QAAQ;EAC3B,mBAAmB;EACnB,KAAK,eAAe,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;EAChD,KAAK,iBAAiB,CAAC;EACvB,KAAK,eAAe;EACpB,KAAK,eAAe;EACpB,IAAI,KAAK,eAAe,MAAM,KAAK,OAAO,gBAAgB,OAAO;OAC5D,KAAK,OAAO,aAAa,SAAS,KAAK,WAAW;EACvD,KAAK,YAAY;EACjB,IAAI,cAAc;GAChB,sBAAsB;GACtB,OAAO,cAAc,IAAI,MAAM,QAAQ,CAAC;EAC1C;EACA,KAAK,QAAQ;CACf;AACF;;ACrWA,IAAM,QAAQ;AACd,IAAM,MAAM;;AAGZ,SAAS,mBAAmB;CAC1B,MAAM,IAAI,YAAY;CACtB,MAAM,CAAC,KAAK,WAAA,GAAUC,MAAAA,SAAAA,QAAgB;EAAE,GAAG,SAAS,gBAAgB,eAAe,OAAO;EAAY,GAAG,OAAO;CAAY,EAAE;CAC9H,CAAA,GAAA,MAAA,UAAA,OAAgB;EAEd,MAAM,aAAa,OAAO;GAAE,GAAG,oBAAoB;GAAG,GAAG,qBAAqB;EAAE,CAAC;EACjF,OAAO,iBAAiB,UAAU,IAAI;EACtC,aAAa,OAAO,oBAAoB,UAAU,IAAI;CACxD,GAAG,CAAC,CAAC;CACL,IAAI,EAAE,GAAG,MAAM;CACf,MAAM,SAAS,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,SAAS;CACpD,IAAI,UAAU,EAAE,SAAS,UAAU,KAAK,EAAE,YAAY,KAAK,EAAE;CAC7D,IAAI,UAAU,EAAE,SAAS,SAAS,KAAK,EAAE;CACzC,OAAO;EAAE,GAAG;EAAG,GAAG;EAAO,GAAG,KAAK,IAAI,KAAK,CAAC;EAAG,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK;CAAE;AAC5E;AAGA,SAAS,sBAAsB;CAC7B,OAAO,OAAO,gBAAgB,SAAS,OAAO;AAChD;AACA,SAAS,uBAAuB;CAC9B,OAAO,OAAO,gBAAgB,UAAU,OAAO;AACjD;AAEA,SAAgB,cAAc;CAC5B,MAAM,MAAM,UAAU;CACtB,MAAM,IAAI,UAAU;CACpB,MAAM,QAAQ,iBAAiB;CAC/B,MAAM,OAAO,iBAAiB;CAC9B,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAA6B,IAAI;CAC7D,MAAM,OAAA,GAAMC,MAAAA,OAAAA,CAA8B,IAAI;CAC9C,MAAM,OAAO,eAAe;CAC5B,MAAM,CAAC,QAAQ,cAAA,GAAaD,MAAAA,SAAAA,CAAS,KAAK;CAE1C,MAAM,UAAU,WAAW,EAAE,aAAa;CAC1C,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,OAAO,EAAE,QAAQ;CACtD,MAAM,YAAY,CAAC,EAAE,YAAY,SAAS,QAAQ,aAAa,WAAW,WAAW,QAAQ,aAAa,YAAY,YAAY;CAClI,MAAM,MAAM,cAAc,SAAS,IAAI;CACvC,MAAM,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,KAAU,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAU,MAAM,KAAK,EAAE,MAAM;CACvG,MAAM,OAAO,EAAE,SAAS,QAAQ,KAAK,IAAI,IAAK,KAAK,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE;CAC/E,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,MAAM,MAAM,KAAK,IAAI,EAAE,QAAQ,QAAQ,CAAC,CAAC;CACnF,MAAM,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI,GAAG;CAG7C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,IAAI,cAAc,IAAI,MAAM;EAClC,UAAU,CAAC;EACX,IAAI,CAAC,GAAG;EACR,IAAI,UAAU,IAAI,eAAe,CAAC;EAClC,aAAa;GACX,IAAI,SAAS,QAAQ;GACrB,IAAI,UAAU;EAChB;CACF,GAAG,CAAC,IAAI,MAAM,CAAC;CAEf,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,IAAI,SAAS,MAAM;GACjB,OAAO,EAAE;GACT,QAAQ,EAAE;GACV,KAAK,EAAE;GACP,OAAO,EAAE;GACT;GACA;GACA;GACA,OAAO;GACP,MAAM,UAAU;GAChB,cAAc,IAAI,QAAQ;EAC5B,CAAC;CACH,GAAG;EAAC,EAAE;EAAO,EAAE;EAAQ,EAAE;EAAK,EAAE;EAAO;EAAM;EAAM;EAAK;EAAW;EAAO,IAAI,QAAQ;EAAqB;CAAM,CAAC;CAElH,MAAM,UAAU,UAAyC,MAA0B;EACjF,MAAM,QAAQ;GAAE,GAAG,EAAE;GAAO,GAAG,EAAE;EAAO;EACxC,UAAU,IAAI,IAAI,OAAO;GACvB,MAAM,QAAsE,EAAE,UAAU,cAAc;GAEtG,IAAI,SAAS,UAAU,MAAM,QAAQ,MAAM,KAAK,MAAM,MAAM,IAAK,KAAK,IAAK,IAAI,GAAG,IAAI,GAAI;GAC1F,IAAI,SAAS,SAAS,MAAM,SAAS,MAAM,KAAK,MAAM,MAAM,IAAI,KAAK,IAAI,GAAG,IAAI,GAAI;GACpF,UAAU,SAAS,CAAC,CAAC,IAAI,KAAK;EAChC,CAAC;CACH;CAEA,MAAM,YAAY,MAAwB;EACxC,MAAM,IAAK,EAAE,cAA8B,sBAAsB;EACjE,KAAK,KAAK;GAAE,SAAS,EAAE,QAAQ;GAAK,SAAS,EAAE,SAAS;EAAE,GAAG;GAC3D;IAAE,OAAO,EAAE,YAAY,sBAAsB;IAAqB,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC;GAAE;GACrH;IAAE,OAAO,EAAE,QAAQ,6BAA6B;IAA2B,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC;GAAE;GACtH,EAAE,WAAW,KAAK;GAClB;IACE,OAAO;IACP,gBAAgB;KACd,MAAM,OAAO,UAAU,EAAE,MAAM,GAAG,EAAE;KACpC,MAAM,KAAK,UAAU,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE;KAC3C,EAAE,iBAAiB;MAAE;MAAI;MAAM,OAAO,EAAE;MAAO,QAAQ,EAAE;MAAQ,KAAK,EAAE;MAAK,OAAO,EAAE;MAAO,UAAU;KAAS,CAAC;KACjH,EAAE,YAAY,EAAE;IAClB;GACF;GACA;IAAE,OAAO;IAAwB,gBAAgB,UAAU,IAAI;GAAE;GACjE,EAAE,WAAW,KAAK;GAClB;IAAE,OAAO;IAAuB,gBAAgB,EAAE,YAAY,aAAa;GAAE;EAC/E,CAAC;CACH;CAEA,MAAM,KAAK,KAAK,MAAM,EAAE,QAAQ,IAAI;CACpC,MAAM,KAAK,KAAK,MAAM,EAAE,SAAS,IAAI;CAErC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAAE,kBAAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAiB,MAAK;GAAU,cAAW;GAAiB,OAAO,EAAE,OAAO,KAAK,EAAE;GAAlG,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAc,UAAA;IAAiB,CAAA;IAC/C,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,WAAU;KAAa,cAAW;KAAS,OAAO,EAAE;KAAU,WAAW,MAAM,EAAE,YAAY,EAAE,OAAO,KAAK;KAAnH,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,OAAO;MAAe,UAAA;KAAkB,CAAA,GAC9C;MAAC;MAAU;MAAU;MAAW;KAAQ,CAAC,CAAW,KAAK,QAAQ;MACjE,MAAM,OAAO,QAAQ,QAAQ,MAAM,EAAE,aAAa,GAAG;MACrD,IAAI,CAAC,KAAK,QAAQ,OAAO;MACzB,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;OAAoB,OAAO,IAAI,EAAE,CAAC,YAAY,IAAI,IAAI,MAAM,CAAC;OAC1D,UAAA,KAAK,KAAK,MACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAmB,OAAO,EAAE;QACzB,UAAA,EAAE;OACG,GAFK,EAAE,EAEP,CACT;MACO,GANK,GAML;KAEd,CAAC,CACK;;IACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;KAAa,OAAM;KAAQ,OAAO,EAAE;KAAO,WAAW,UAAU,EAAE,IAAI;MAAE;MAAO,UAAU;KAAc,CAAC;IAAI,CAAA;IAC5G,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAc,UAAA;IAAO,CAAA;IACrC,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;KAAa,OAAM;KAAS,OAAO,EAAE;KAAQ,WAAW,WAAW,EAAE,IAAI;MAAE;MAAQ,UAAU;KAAc,CAAC;IAAI,CAAA;IAChH,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;IAC3B,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;KAAO,WAAU;KAAc,SAAQ;KAAU,UAAA;IAE1C,CAAA;IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,IAAG;KAAU,WAAU;KAAa,OAAO,EAAE;KAAK,WAAW,MAAM,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,OAAO,KAAK,EAAE,CAAC;KACjH,UAAA,MAAM,qBAAK,IAAI,IAAI;MAAC;MAAG;MAAK;MAAG;MAAO;MAAG;MAAK;MAAG,EAAE;KAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,MACpF,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAgB,OAAO;MACpB,UAAA;KACK,GAFK,CAEL,CACT;IACK,CAAA;IACR,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,WAAU;KAAa,cAAW;KAAO,OAAO,OAAO,EAAE,IAAI;KAAG,WAAW,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,UAAU,QAAQ,QAAQ,WAAW,EAAE,OAAO,KAAK,EAAE,CAAC;KAAtK,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAQ,OAAM;MAAd,UAAA;OAAoB;OAAM,KAAK,MAAM,OAAO,GAAG;OAAE;MAAU;KAC1D,CAAA,GAAA;MAAC;MAAK;MAAM;MAAG;MAAM;MAAK;KAAC,CAAC,CAAC,KAAK,MACjC,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;MAAgB,OAAO;MAAvB,UAAA,CACG,IAAI,KAAI,GACH;KAFK,GAAA,CAEL,CACT,CACK;;IACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,WAAU;KAAe,OAAM;KAAS,cAAW;KAAS,SAAS,EAAE;KAC7E,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD,CAAa,CAAA;IACP,CAAA;IACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,WAAU,UAAW,CAAA;IAC3B,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAe,OAAM;KAAtC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAO,WAAW,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,QAC3F;;IACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;KAAO,WAAU;KAAe,OAAO,EAAE,YAAY,EAAE;KAAvD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;MAAO,MAAK;MAAW,SAAS,EAAE;MAAW,WAAW,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,QAAQ,CAAC;KAAI,CAAA,GAAC,QACnG;;IACP,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,WAAU;KAAe,OAAM;KAAe,cAAW;KAAsB,SAAS;KAC9F,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;IACN,CAAA;IACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;KAAQ,WAAU;KAAe,OAAM;KAAuB,cAAW;KAAuB,eAAe,YAAY,SAAS,EAAE,YAAY,MAAM,CAAC;KACvJ,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;IAChB,CAAA;IACP,CAAC,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,OAAO,EAAE,OAAO,wBAAwB;KAAG,UAAA;IAAkD,CAAA;GAC5G;;EACJ,UACC,iBAAA,GAAA,kBAAA,KAAA,CAAAA,kBAAAA,UAAA,EAAA,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAwC,OAAO;KAAE,MAAM,OAAO,KAAK,MAAM;KAAG;KAAK,QAAQ;IAAG;IAAG,eAAe,OAAO,OAAO;IAAG,OAAM;GAAkB,CAAA;GACtK,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAwC,OAAO;KAAE;KAAM,KAAK,MAAM,KAAK,MAAM;KAAG,OAAO;IAAG;IAAG,eAAe,OAAO,QAAQ;IAAG,OAAM;GAAkB,CAAA;GACrK,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAwC,OAAO;KAAE,MAAM,OAAO,KAAK,MAAM;KAAG,KAAK,MAAM,KAAK,MAAM;IAAE;IAAG,eAAe,OAAO,QAAQ;GAAI,CAAA;GACxJ,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAkB,OAAO;KAAE;KAAM,KAAK,MAAM,KAAK,MAAM;KAAI,OAAO;IAAG;IAApF,UAAA;KACG,EAAE;KAAM;KAAI,EAAE;KAAO;KAAE,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO,GAAG,EAAE;KAAG;KAAE,EAAE,QAAQ,KAAK,SAAS,EAAE;IAC9F;;EACL,EAAA,CAAA;EAEH,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,EAAc,eAAe,UAAU,KAAK,EAAI,CAAA;EAC1D,KAAK;CACN,EAAA,CAAA;AAEN;AAEA,SAAS,YAAY,EAAE,OAAO,OAAO,YAA6E;CAChH,MAAM,CAAC,MAAM,YAAA,GAAWF,MAAAA,SAAAA,CAAS,OAAO,KAAK,CAAC;CAC9C,CAAA,GAAA,MAAA,UAAA,OAAgB,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;CAC/C,MAAM,eAAe;EACnB,MAAM,IAAI,SAAS,MAAM,EAAE;EAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,KAAK,KAAO,SAAS,CAAC;OAC7C,QAAQ,OAAO,KAAK,CAAC;CAC5B;CACA,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;EACE,WAAU;EACV,cAAY;EACZ,WAAU;EACV,OAAO;EACP,WAAW,MAAM,QAAQ,EAAE,OAAO,KAAK;EACvC,QAAQ;EACR,YAAY,MAAM;GAChB,EAAE,gBAAgB;GAClB,IAAI,EAAE,QAAQ,SAAS,OAAO;GAC9B,IAAI,EAAE,QAAQ,aAAa,EAAE,QAAQ,aAAa;IAChD,EAAE,eAAe;IAEjB,SAAS,MAAM,SADD,EAAE,WAAW,KAAK,MAAM,EAAE,QAAQ,YAAY,IAAI,KACnC,IAAI,GAAK,CAAC;GACzC;EACF;CACD,CAAA;AAEL;AAEA,SAAS,aAAa,EAAE,WAAoC;CAC1D,MAAM,IAAI,UAAU;CACpB,MAAM,CAAC,OAAO,aAAA,GAAYA,MAAAA,SAAAA,CAAuB;EAAE,IAAI;EAAI,MAAM;EAAI,OAAO;EAAK,QAAQ;EAAK,KAAK;EAAG,UAAU;EAAU,OAAO;CAAK,CAAC;CACvI,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EACb,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,eAAD;GACE,OAAM;GACN,cAAa;GACb,UAAU;GACV,iBAAiB;IACf,IAAI,CAAC,MAAM,KAAK,KAAK,GAAG;IACxB,EAAE,iBAAiB;KAAE,GAAG;KAAO,IAAI,MAAM,MAAM,UAAU,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE;KAAK,MAAM,MAAM,KAAK,KAAK;IAAE,CAAC;IAC7G,SAAS;KAAE,GAAG;KAAO,IAAI;KAAI,MAAM;IAAG,CAAC;GACzC;GARF,UAAA;IAUE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACG,EAAE,cAAc,WAAW,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;MAAK,WAAU;MAAc,UAAA;KAA2B,CAAA,GACxF,EAAE,cAAc,KAAK,MACpB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;MAAgB,WAAU;MAA1B,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;QAAM,OAAO,EAAE,MAAM,EAAE;QAAI,UAAA,EAAE;OAAW,CAAA;OACxC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;QAAM,WAAU;QAAhB,UAAA;SACG,EAAE;SAAM;SAAE,EAAE;SAAO;SAAG,EAAE;SAAI;SAAE,EAAE,QAAQ,aAAa;QAClD;;OACN,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,MAAK;QAAS,WAAU;QAAe,cAAY,QAAQ,EAAE;QAAQ,eAAe,SAAS,EAAE,GAAG,EAAE,CAAC;QAAG,UAAA;OAExG,CAAA;OACR,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;QAAQ,MAAK;QAAS,WAAU;QAAe,cAAY,UAAU,EAAE;QAAQ,eAAe,EAAE,mBAAmB,EAAE,EAAE;QACrH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,EAAW,MAAM,GAAK,CAAA;OAChB,CAAA;MACL;KAXK,GAAA,EAAE,EAWP,CACN,CACE;;IACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAc,UAAA;MAAkB,CAAA;MAC/C,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAc,WAAU;OAAY,OAAO,MAAM;OAAM,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,MAAM,EAAE,OAAO;OAAM,CAAC;OAAG,aAAY;MAAY,CAAA;MACxJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAW,UAAA;MAAY,CAAA;MACtC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAW,WAAU;OAAY,MAAK;OAAS,OAAO,MAAM;OAAO,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,OAAO,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK;OAAE,CAAC;MAAI,CAAA;MACjK,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAW,UAAA;MAAa,CAAA;MACvC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAW,WAAU;OAAY,MAAK;OAAS,OAAO,MAAM;OAAQ,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,QAAQ,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK;OAAE,CAAC;MAAI,CAAA;MACnK,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,SAAQ;OAAa,UAAA;MAAyB,CAAA;MACrD,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;OAAO,IAAG;OAAa,WAAU;OAAY,MAAK;OAAS,MAAK;OAAQ,OAAO,MAAM;OAAK,WAAW,MAAM,SAAS;QAAE,GAAG;QAAO,KAAK,WAAW,EAAE,OAAO,KAAK,KAAK;OAAE,CAAC;MAAI,CAAA;MAC1K,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,CAAO,CAAA;MACP,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;OAAO,WAAU;OAAjB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;QAAO,MAAK;QAAW,SAAS,CAAC,CAAC,MAAM;QAAO,WAAW,MAAM,SAAS;SAAE,GAAG;SAAO,OAAO,EAAE,OAAO;QAAQ,CAAC;OAAI,CAAA,GAAC,QAC9G;;KACJ;;IACL,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;KAAK,WAAU;KAAc,OAAO,EAAE,cAAc,GAAG;KAAvD,UAAA;MAA0D;MACrC,gBAAgB;MAAO;KACvC;;GACQ;;CACZ,CAAA;AAET;;ACzQA,SAAS,WAAW;CAClB,MAAM,MAAM,UAAU;CACtB,MAAM,SAAS,YAAY,MAAM,EAAE,QAAQ,QAAQ,GAAG,MAAM,KAAK,EAAE,UAAU,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC;CACxG,MAAM,WAAW,aAAa,MAAM,EAAE,gBAAgB,KAAK,IAAI;CAC/D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;EACE,WAAU;EACV,OAAO,gBAAgB,WAAW,KAAK,eAAe,QAAQ,EAAE,KAAK;EACrE,cAAW;EACX,eAAe,YAAY,SAAS,CAAC,CAAC,QAAQ,IAAI;EAJpD,UAAA,CAME,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD,CAAe,CAAA,GACd,SAAS,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAsB,UAAA,SAAS,KAAK,QAAQ;EAAa,CAAA,CAClF;;AAEZ;AAEA,SAAS,eAAe;CACtB,MAAM,MAAM,UAAU;CAEtB,MAAM,WADW,aAAa,MAAM,EAAE,gBACrB,KAAY,IAAI;CACjC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,SAAS,WAAW,cAAc,QAAQ,IAAI;EACpD,MAAM,SAAS,cAAc,cAAc;EAC3C,MAAM,SAAS,cAAc,cAAc;EAC3C,MAAM,SAAS,MAAqB;GAClC,MAAM,IAAI,YAAY,SAAS;GAC/B,IAAI,UAAU,gBAAgB,GAAG,MAAM,GAAG;IACxC,EAAE,eAAe;IACjB,EAAE,gBAAgB;IAClB,EAAE,OAAO;IACT;GACF;GACA,IAAI,CAAC,EAAE,MAAM;GACb,IAAI,IAAI,QAAQ,uBAAuB,UAAU,gBAAgB,GAAG,MAAM,GAAG;IAC3E,EAAE,eAAe;IACjB,YAAY,SAAS,EAAE,cAAc,CAAC,EAAE,aAAa,CAAC;GACxD,OAAO,IAAI,IAAI,QAAQ,uBAAuB,UAAU,gBAAgB,GAAG,MAAM,KAAK,gBAAgB,CAAC,GAAG;IACxG,EAAE,eAAe;IACjB,YAAY,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC;GACpD,OAAO,IAAI,EAAE,QAAQ,QAAQ,gBAAgB,CAAC,GAAG;IAC/C,EAAE,eAAe;IACjB,EAAE,eAAe,EAAE,aAAa,WAAW,CAAC;GAC9C;EACF;EACA,OAAO,iBAAiB,WAAW,OAAO,IAAI;EAC9C,aAAa,OAAO,oBAAoB,WAAW,OAAO,IAAI;CAChE,GAAG;EAAC;EAAU,IAAI,QAAQ;EAAqB,IAAI,QAAQ;CAAmB,CAAC;AACjF;AAEA,SAAgB,cAAc;CAC5B,MAAM,MAAM,UAAU;CACtB,MAAM,OAAO,aAAa,MAAM,EAAE,IAAI;CACtC,MAAM,aAAa,aAAa,MAAM,EAAE,UAAU;CAClD,MAAM,QAAQ,iBAAiB;CAC/B,aAAa;CACb,UAAU;CAEV,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAW,cAAY;EAAtC,UAAA;GACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IAAe,OAAM;IAAkB,UAAA,cAAc,IAAI,QAAQ,uBAAuB,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,CAAc,CAAA;GAAiB,CAAA;GACvH,iBAAA,GAAA,kBAAA,IAAA,CAAC,kBAAD,CAAmB,CAAA;GAClB,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,mBAAD,CAAoB,CAAA,IAAI,IAAI,gBAAgB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA;EAC5D;;AAET;;;AC9EA,IAAI;AAEJ,SAAS,gBAA+B;CAEtC,MAAM,sBADQ,IAAI,MAAM,EAAA,CAAE,SAAS,GAAA,CAAI,MAAM,IAAI,CAAC,CAAC,MAAM,MAAM,kCAAkC,KAAK,CAAC,CAC7F,CAAA,EAAM,MAAM,iEAAiE;CACvF,OAAO,IAAI,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK;AAClC;AAEA,IAAM,WAAW;AAEjB,SAAS,WAAW,MAAuB;CACzC,IAAI,YAAY,KAAA,GAAW,UAAU,cAAc;CACnD,OAAO,SAAS,KAAK,IAAI,KAAM,CAAC,CAAC,WAAW,KAAK,SAAS,OAAO;AACnE;;AAGA,SAAgB,YAAY,MAAM,IAAwB;CACxD,MAAM,qBAAI,IAAI,MAAM,EAAA,CAAE;CACtB,IAAI,CAAC,GAAG,OAAO,KAAA;CACf,MAAM,QAAQ,EAAE,MAAM,IAAI;CAE1B,OADe,MAAM,MAAM,MAAM,EAAE,CAAC,WAAW,OAAO,IAAI,IAAI,CACvD,CAAA,CACJ,QAAQ,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAC7B,MAAM,GAAG,GAAG,CAAC,CACb,KAAK,IAAI;AACd;;ACnBA,IAAM,UAAU;CACd;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;;AAKA,IAAa,iCAAiB,IAAI,QAAgB;;AAGlD,IAAa,kBAAqE,CAAC;AAEnF,IAAI,YAAY;AAEhB,SAAgB,eAAe,KAAsB;CACnD,MAAM,IAAI;CACV,MAAM,yBAAS,IAAI,IAAoB;CACvC,MAAM,2BAAW,IAAI,IAAoB;CACzC,MAAM,WAA8D,CAAC;CAErE,MAAM,QACJ,OACA,MACA,QACA,MACA,QAAkD,CAAC,MAChD;EACH,MAAM,QAAQ,MAAM,SAAS,YAAY;EACzC,IAAI,KAAK,iBAAiB;GACxB;GACA;GACA;GACA;GACA,WAAW,KAAK,IAAI;GACpB,QAAQ,gBAAgB,OAAO,CAAC;GAChC,GAAG;GACH,OAAO,SAAS,WAAW,UAAU,WAAW,UAAU,SAAS,QAAQ,KAAA;EAC7E,CAAC;CACH;CAEA,MAAM,UAAU,QAAgB,SAAoB;EAClD,QAAQ,QAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,IAAI,WAAW,SAAc;UAAA,MAAM,KAAK,MAAM,IAAI,KAAK,OAAO,MAAM,UAAU,eAAe,IAAI,CAAC;IAAA;IAClG,KAAK,QAAQ,OAAO,QAAQ,IAAI;IAChC;GAEF,KAAK;GACL,KAAK;IACH,KAAK,OAAO,OAAO,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC;IAC3C;GACF,KAAK,SAAS;IACZ,MAAM,OAAO,KAAK;IAClB,IAAI,QAAQ,OAAO,SAAS,UAC1B,KAAK,OAAO,SAAS,QAAQ,CAAC,IAAI,GAAG,EACnC,SAAS,MAAM,QAAQ,KAAK,EAAE,IAAK,KAAK,EAAE,CAAe,IAAI,MAAM,IAAI,KAAA,EACzE,CAAC;SACI,KAAK,OAAO,OAAO,QAAQ,IAAI;IACtC;GACF;GACA,KAAK;GACL,KAAK;IACH,KAAK,OAAO,eAAe,QAAQ,KAAK,SAAS,OAAO,CAAC,WAAW,UAAU,kBAAkB,wBAAwB,GAAG,EACzH,WAAW,WAAW,iBACxB,CAAC;IACD;GACF,KAAK;IACH,IAAI,KAAK,iBAAiB;KAAE,OAAO;KAAO,MAAM;KAAa;KAAQ,MAAM,CAAC;KAAG,WAAW,KAAK,IAAI;IAAE,CAAC;IACtG;GACF,KAAK,QAAQ;IACX,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,YAAY,OAAO,KAAK,EAAE;IAChE,IAAI,OAAO,IAAI,KAAK,GAAG,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,iBAAiB,CAAC;SACjF,OAAO,IAAI,OAAO,YAAY,IAAI,CAAC;IACxC;GACF;GACA,KAAK;GACL,KAAK,WAAW;IACd,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,YAAY,OAAO,KAAK,EAAE;IAChE,MAAM,QAAQ,OAAO,IAAI,KAAK;IAC9B,IAAI,UAAU,KAAA,GACZ,KAAK,QAAQ,OAAO,QAAQ,CAAC,UAAU,MAAM,iBAAiB,CAAC;SAC1D;KACL,MAAM,KAAK,YAAY,IAAI,IAAI;KAC/B,IAAI,WAAW,WAAW,OAAO,OAAO,KAAK;KAC7C,KAAK,OAAO,OAAO,QAAQ,CAAC,GAAG,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,KAAK,WAAW,YAAY,KAAK,MAAM,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC;IACjH;IACA;GACF;GACA,KAAK,SAAS;IACZ,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,YAAY,OAAO,KAAK,EAAE;IAChE,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,KAAK;IACvC,SAAS,IAAI,OAAO,CAAC;IACrB,KAAK,OAAO,OAAO,QAAQ,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC;IAC7C;GACF;GACA,KAAK,cAAc;IACjB,MAAM,QAAQ,KAAK,OAAO,KAAA,IAAY,YAAY,OAAO,KAAK,EAAE;IAChE,SAAS,IAAI,OAAO,CAAC;IACrB;GACF;GACA,KAAK;IACH,KAAK,OAAO,SAAS,QAAQ,KAAK,SAAS,OAAO,CAAC,eAAe,CAAC;IACnE;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,KAAK,SAAS,OAAO,QAAQ,CAAC,qBAAqB,GAAI,KAAK,SAAS,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAE,CAAC;IAC3H;GACF,KAAK,SACH,IAAI,KAAK,iBAAiB,EAAE,SAAS,KAAK,CAAC;EAE/C;CACF;CAEA,KAAK,MAAM,KAAK,SAAS;EACvB,MAAM,OAAO,EAAE;EACf,IAAI,OAAO,SAAS,YAAY;EAChC,gBAAgB,KAAK;EACrB,MAAM,UAAU,SAAyB,GAAG,MAAiB;GAC3D,IAAI,CAAC,WAAW;IACd,YAAY;IACZ,IAAI;KACF,OAAO,GAAG,IAAI;IAChB,QAAQ,CAER,UAAU;KACR,YAAY;IACd;GACF;GACA,OAAO,KAAK,MAAM,SAAS,KAAA,IAAY,UAAU,MAAM,IAAI;EAC7D;EACA,IAAI;GACF,OAAO,eAAe,SAAS,QAAQ,EAAE,OAAO,KAAK,QAAQ,EAAE,CAAC;EAClE,QAAQ,CAAC;EACT,SAAS,KAAK;EACd,EAAE,KAAK;CACT;CAEA,aAAa;EACX,KAAK,MAAM,KAAK,SAAS;GACvB,MAAM,IAAI,SAAS;GAEnB,IAAI,KAAK,EAAE,OAAO,GAAG,EAAE,KAAK,gBAAgB;EAC9C;CACF;AACF;;;ACrKA,SAAgB,cAAc,KAAsB;CAClD,MAAM,uBAAO,IAAI,QAAgB;CAEjC,MAAM,WAAW,MAAa;EAE5B,IAAI,EAAE,aAAa,aAAa;GAC9B,MAAM,IAAI,EAAE;GACZ,IAAI,KAAK,MAAO,UAAsB,EAAE,aAAa,KAAK,CAAC,eAAe,CAAC,GAAG;IAC5E,MAAM,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,eAAe,KAAK,KAAK;IAC1D,IAAI,KAAK,iBAAiB;KACxB,OAAO;KACP,MAAM;KACN,MAAM,CAAC,6BAA6B,EAAE,UAAU,IAAI,KAAK;KACzD,WAAW,KAAK,IAAI;IACtB,CAAC;GACH;GACA;EACF;EACA,MAAM,MAAM,EAAE;EACd,IAAI,OAAO,OAAO,QAAQ,UAAU;GAClC,IAAI,KAAK,IAAI,GAAG,GAAG;GACnB,KAAK,IAAI,GAAG;EACd;EACA,MAAM,cAAc,OAAO,OAAO,QAAQ,YAAY,eAAe,IAAI,GAAG;EAC5E,IAAI,KAAK,iBAAiB;GACxB,OAAO;GACP,MAAM;GACN,MAAM,CAAC,OAAO,EAAE,OAAO;GACvB,WAAW,KAAK,IAAI;GACpB,OAAO,KAAK;GACZ,QAAQ,EAAE,WAAW,GAAG,EAAE,SAAS,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,KAAA;GACpE,QAAQ,cAAc,uBAAuB,KAAA;EAC/C,CAAC;CACH;CAEA,MAAM,eAAe,MAA6B;EAChD,MAAM,SAAS,EAAE;EACjB,IAAI,UAAU,OAAO,WAAW,UAAU;GACxC,IAAI,KAAK,IAAI,MAAM,GAAG;GACtB,KAAK,IAAI,MAAM;EACjB;EACA,IAAI,KAAK,iBAAiB;GACxB,OAAO;GACP,MAAM;GACN,MAAM,CAAC,MAAM;GACb,WAAW,KAAK,IAAI;GACpB,OAAO,QAAQ;EACjB,CAAC;CACH;CAEA,OAAO,iBAAiB,SAAS,SAAS,IAAI;CAC9C,OAAO,iBAAiB,sBAAsB,WAAW;CACzD,aAAa;EACX,OAAO,oBAAoB,SAAS,SAAS,IAAI;EACjD,OAAO,oBAAoB,sBAAsB,WAAW;CAC9D;AACF;;;ACrDA,IAAa,WAAW;AAGxB,IAAa,qBAA6B,OAAO,GAAG;AAEpD,SAAgB,aAAa,KAAa,KAA6B;CACrE,KAAK,MAAM,KAAK,IAAI,YAClB,IAAI,OAAO,MAAM,WAAW,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,GAAG,OAAO;CAEpE,OAAO;AACT;AAEA,SAAgB,YAAY,KAAqB;CAC/C,IAAI;EACF,OAAO,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC;CACrC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,cAAc,GAAiE;CAC7F,IAAI,CAAC,GAAG,OAAO,CAAC;CAChB,IAAI;EACF,IAAI,OAAO,YAAY,eAAe,aAAa,SAAS,OAAO,MAAM,KAAK,EAAE,QAAQ,CAAC;EACzF,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EACrE,OAAO,OAAO,QAAQ,CAA2B,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CACnF,QAAQ;EACN,OAAO,CAAC;CACV;AACF;AAEA,SAAgB,gBAAgB,KAAiC;CAC/D,OAAO,IACJ,KAAK,CAAC,CACN,MAAM,SAAS,CAAC,CAChB,OAAO,OAAO,CAAC,CACf,KAAK,SAAS;EACb,MAAM,IAAI,KAAK,QAAQ,GAAG;EAC1B,OAAO,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;CACzE,CAAC;AACL;AAEA,SAAgB,UAAU,MAA0B,MAAkC;CACpF,MAAM,IAAI,KAAK,YAAY;CAC3B,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,MAAM,CAAC,CAAC,GAAG;AACrD;;AAGA,SAAgB,aAAa,MAA2C;CACtE,IAAI,QAAQ,MAAM,OAAO,KAAA;CACzB,IAAI;EACF,IAAI,OAAO,SAAS,UAAU;GAC5B,MAAM,IAAI,KAAK,KAAK;GACpB,MAAM,UAAU,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,GAAG,MAAM,SAAS,CAAC;GACrE,IAAI,CAAC,UAAU,qCAAqC,KAAK,CAAC,GACxD,OAAO;IAAE,MAAM;IAAc,MAAM;IAAM,QAAQ,MAAM,KAAK,IAAI,gBAAgB,IAAI,CAAC,CAAC,QAAQ,CAAC;IAAG,MAAM,WAAW,IAAI;GAAE;GAE3H,OAAO;IAAE,MAAM,SAAS,SAAS;IAAQ,MAAM;IAAM,MAAM,WAAW,IAAI;GAAE;EAC9E;EACA,IAAI,OAAO,oBAAoB,eAAe,gBAAgB,iBAAiB;GAC7E,MAAM,OAAO,KAAK,SAAS;GAC3B,OAAO;IAAE,MAAM;IAAc;IAAM,QAAQ,MAAM,KAAK,KAAK,QAAQ,CAAC;IAAG,MAAM,WAAW,IAAI;GAAE;EAChG;EACA,IAAI,OAAO,aAAa,eAAe,gBAAgB,UAAU;GAC/D,MAAM,SAA6B,CAAC;GACpC,KAAK,SAAS,GAAG,MAAM;IACrB,OAAO,KAAK,CAAC,GAAG,OAAO,MAAM,WAAW,IAAI,YAAa,EAAW,QAAQ,OAAO,KAAM,EAAW,KAAK,GAAG,CAAC;GAC/G,CAAC;GACD,OAAO;IAAE,MAAM;IAAQ;GAAO;EAChC;EACA,IAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM,OAAO;GAAE,MAAM;GAAU,MAAM,KAAK;GAAM,MAAM,QAAQ,KAAK,KAAK,IAAI,KAAK;EAAO;EAC3I,IAAI,gBAAgB,aAAa,OAAO;GAAE,MAAM;GAAU,MAAM,KAAK;GAAY,MAAM,eAAe,KAAK,WAAW;EAAG;EACzH,IAAI,YAAY,OAAO,IAAI,GAAG,OAAO;GAAE,MAAM;GAAU,MAAM,KAAK;GAAY,MAAM,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,WAAW;EAAG;EACnI,IAAI,OAAO,mBAAmB,eAAe,gBAAgB,gBAAgB,OAAO;GAAE,MAAM;GAAU,MAAM;EAAmC;EAC/I,IAAI,OAAO,aAAa,eAAe,gBAAgB,UAAU;GAC/D,MAAM,OAAO,IAAI,cAAc,CAAC,CAAC,kBAAkB,IAAI;GACvD,OAAO;IAAE,MAAM;IAAQ;IAAM,MAAM,WAAW,IAAI;GAAE;EACtD;CACF,QAAQ,CAER;CACA,OAAO;EAAE,MAAM;EAAW,MAAM,OAAO,IAAI;CAAE;AAC/C;AAEA,SAAS,SAAS,GAAoB;CACpC,IAAI;EACF,KAAK,MAAM,CAAC;EACZ,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AAEA,IAAM,YAAsC;CAC1C,CAAC,oCAAoC,IAAI;CACzC,CAAC,kBAAkB,KAAK;CACxB,CAAC,oDAAoD,KAAK;CAC1D,CAAC,mCAAmC,MAAM;CAC1C,CAAC,kDAAkD,OAAO;CAC1D,CAAC,2CAA2C,UAAU;CACtD,CAAC,oBAAoB,KAAK;AAC5B;AAEA,SAAgB,YAAY,KAAkC;CAC5D,KAAK,MAAM,CAAC,IAAI,MAAM,WAAW,IAAI,GAAG,KAAK,GAAG,GAAG,OAAO;CAC1D,OAAO;AACT;AAEA,SAAgB,kBAAkB,eAAuB,KAA2B;CAClF,QAAQ,eAAR;EACE,KAAK,UACH,OAAO;EACT,KAAK,OACH,OAAO,YAAY,GAAG,KAAK;EAC7B,KAAK;EACL,KAAK,SACH,OAAO;EACT,KAAK;EACL,KAAK,SACH,OAAO;EACT,KAAK;EACL,KAAK;EACL,KAAK,SACH,OAAO;EACT,KAAK,SACH,OAAO;EACT,KAAK,kBACH,OAAO;EACT,KAAK,QACH,OAAO,YAAY,GAAG,KAAK;EAC7B,SACE,OAAO,YAAY,GAAG,KAAK;CAC/B;AACF;AAEA,SAAgB,UAAU,MAAmC;CAC3D,IAAI,CAAC,MAAM,OAAO;CAClB,OAAO,gJAAgJ,KAAK,IAAI;AAClK;AAEA,SAAgB,aAAiC;CAC/C,OAAO,YAAY,EAAE;AACvB;;AAGA,eAAsB,gBAAgB,KAAe,OAA4E;CAC/H,IAAI,CAAC,IAAI,QAAQ,OAAO,IAAI,KAAK,cAAc,YAAY;EACzD,MAAM,OAAO,MAAM,IAAI,KAAK;EAC5B,OAAO;GAAE,MAAM,KAAK,MAAM,GAAG,KAAK;GAAG,WAAW,KAAK,SAAS;GAAO,MAAM,WAAW,IAAI;EAAE;CAC9F;CACA,MAAM,SAAS,IAAI,KAAK,UAAU;CAClC,MAAM,UAAU,IAAI,YAAY;CAChC,IAAI,OAAO;CACX,IAAI,OAAO;CACX,IAAI,YAAY;CAChB,SAAS;EACP,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;EAC1C,IAAI,MAAM;EACV,QAAQ,MAAM;EACd,IAAI,KAAK,SAAS,OAAO,QAAQ,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;OAClE,YAAY;CACnB;CACA,QAAQ,QAAQ,OAAO;CACvB,IAAI,KAAK,SAAS,OAAO;EACvB,OAAO,KAAK,MAAM,GAAG,KAAK;EAC1B,YAAY;CACd;CACA,OAAO;EAAE;EAAM;EAAW;CAAK;AACjC;;;;;;AC3JA,SAAgB,aAAa,KAAU,KAAgC;CACrE,IAAI,OAAO,OAAO,UAAU,YAAY,aAAa,CAAC;CACtD,MAAM,WAAW,OAAO;CAExB,MAAM,UAAU,SAAS,MAAqB,OAA0B,MAAuC;EAC7G,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,MAAM,YAAY,OAAO,YAAY,eAAe,iBAAiB;EACrE,IAAI;GACF,MAAM,YAAY,YAAa,MAAkB,MAAM,OAAO,KAAK,CAAC;GACpE,UAAU,MAAM,WAAW,YAAa,MAAkB,SAAS,OAAA,CAAQ,YAAY;GACvF,aAAa,cAAc,MAAM,YAAY,YAAa,MAAkB,UAAU,KAAA,EAAU;EAClG,QAAQ;GACN,OAAO,SAAS,KAAK,QAAQ,OAAsB,IAAI;EACzD;EAEA,IAAI,aAAa,KAAK,GAAG,GAAG,OAAO,SAAS,KAAK,QAAQ,OAAsB,IAAI;EAGnF,IAAI,gBAAgB;EACpB,IAAI,IAAI,gBAAgB,KAAK,EAAE,QAAQ,KAAK,QAAQ,gBAAgB;GAAE,GAAI,QAAQ,CAAC;GAAI,OAAO;EAAW;EAEzG,MAAM,KAAK,aAAa;EACxB,MAAM,YAAY,YAAY,IAAI;EAClC,MAAM,QAAwB;GAC5B;GACA;GACA;GACA,MAAM;GACN,WAAW;GACX,gBAAgB,WAAW;GAC3B,OAAO;GACP,gBAAgB;GAChB,iBAAiB,CAAC;GAClB,SAAS,aAAa,MAAM,IAAI;GAChC,WAAW;GACX;GACA,UAAU,KAAK,IAAI;EACrB;EACA,IAAI,CAAC,MAAM,QAAQ,aAAa,WAAW,SAAS,WAAW,QAAQ;GACrE,MAAM,MAAM;GACZ,IAAI,CAAC,IAAI,UACP,IAAI;IAEF,IACG,MAAM,CAAC,CACP,KAAK,CAAC,CACN,MAAM,MAAM,IAAI,KAAK,kBAAkB;KAAE;KAAI,OAAO,EAAE,SAAS,aAAa,CAAC,EAAE;IAAE,CAAC,CAAC,CAAC,CACpF,YAAY,CAAC,CAAC;GACnB,QAAQ,CAAC;EAEb;EACA,IAAI,MAAM,SAAS,QAAQ,MAAM,MAAM,cAAc,MAAM,QAAQ;EACnE,IAAI,KAAK,iBAAiB,KAAK;EAE/B,IAAI;EACJ,IAAI;GACF,UAAU,SAAS,KAAK,QAAQ,OAAsB,aAAa;EACrE,SAAS,KAAK;GACZ,IAAI,KAAK,kBAAkB;IACzB;IACA,OAAO;KAAE,OAAO;KAAU,OAAO,OAAO,GAAG;KAAG,SAAS,YAAY,IAAI;KAAG,WAAW;IAAO;GAC9F,CAAC;GACD,MAAM;EACR;EAEA,QAAQ,MACL,QAAQ;GACP,MAAM,UAAU,cAAc,IAAI,OAAO;GACzC,MAAM,OAAO,UAAU,SAAS,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;GACpE,MAAM,MAAM,UAAU,SAAS,gBAAgB;GAC/C,MAAM,SAAS,IAAI,SAAS,YAAY,IAAI,SAAS;GACrD,IAAI,KAAK,kBAAkB;IACzB;IACA,OAAO;KACL,QAAQ,IAAI;KACZ,YAAY,IAAI,eAAe,SAAS,aAAa;KACrD,iBAAiB;KACjB,UAAU;KACV,cAAc,IAAI;KAClB,YAAY,IAAI;KAChB,cAAc,MAAM,OAAO,GAAG,IAAI,KAAA;IACpC;GACF,CAAC;GAED,MAAM,UAAU,UACd,IAAI,KAAK,kBAAkB;IAAE;IAAI,OAAO;KAAE,OAAO;KAAY,SAAS,YAAY,IAAI;KAAG,GAAG;IAAM;GAAE,CAAC;GAEvG,IAAI,QAAQ,OAAO,OAAO;IAAE,WAAW;IAAe,OAAO;GAAyE,CAAC;GACvI,IAAI,SAAS,qBAAqB,OAAO,OAAO,EAAE,WAAW,YAAY,CAAC;GAC1E,IAAI,CAAC,IAAI,QAAQ,IAAI,WAAW,KAAK,OAAO,OAAO,EAAE,WAAW,OAAO,CAAC;GAExE,IAAI;GACJ,IAAI;IACF,QAAQ,IAAI,MAAM;GACpB,QAAQ;IACN,OAAO,OAAO,EAAE,WAAW,cAAc,CAAC;GAC5C;GAEA,IAAI,UAAU,IAAI,GAChB,gBAAgB,OAAO,QAAQ,CAAC,CAAC,MAC9B,EAAE,MAAM,WAAW,WAClB,OAAO;IAAE,cAAc;IAAM,WAAW,YAAY,cAAc;IAAa,cAAc;GAAK,CAAC,IACpG,QAAQ,OAAO;IAAE,WAAW;IAAe,OAAO,QAAQ,GAAG,IAAI,0BAA0B,KAAA;GAAU,CAAC,CACzG;QAEA,MAAM,KAAK,CAAC,CAAC,MACV,SAAS;IACR,MAAM,YAAY,KAAK,QAAA,WAA8B,8BAA8B,KAAK,KAAK,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,KAAA;IACjI,OAAO;KAAE,WAAW;KAAU,cAAc,KAAK;KAAM,mBAAmB;IAAU,CAAC;GACvF,SACM,OAAO,EAAE,WAAW,cAAc,CAAC,CAC3C;EAEJ,IACC,QAAQ;GACP,IAAI,KAAK,kBAAkB;IACzB;IACA,OAAO;KACL,OAAO,QAAQ,GAAG,IAAI,YAAY;KAClC,OAAO,QAAQ,GAAG,IAAI,oBAAoB,OAAO,KAAK,WAAW,GAAG;KACpE,SAAS,YAAY,IAAI;KACzB,WAAW;KACX,YAAY,QAAQ,GAAG,IAAI,eAAe;IAC5C;GACF,CAAC;EACH,CACF;EAEA,OAAO;CACT;CAEA,IAAI;EACF,OAAO,eAAe,SAAS,QAAQ,EAAE,OAAO,QAAQ,CAAC;CAC3D,QAAQ,CAAC;CACT,OAAO,QAAQ;CAEf,aAAa;EACX,IAAI,OAAO,UAAW,SAAqB,OAAO,QAAQ;CAC5D;AACF;AAEA,SAAS,QAAQ,KAAmB;CAClC,OAAO,QAAQ,IAAI,SAAS,gBAAgB,IAAI,SAAS;AAC3D;;;;;;;AC1IA,SAAgB,WAAW,KAAU,KAAgC;CACnE,IAAI,OAAO,mBAAmB,aAAa,aAAa,CAAC;CACzD,MAAM,QAAQ,eAAe;CAC7B,MAAM,WAAW,MAAM;CACvB,MAAM,WAAW,MAAM;CACvB,MAAM,gBAAgB,MAAM;CAC5B,MAAM,uBAAO,IAAI,QAAiC;CAElD,MAAM,OAAO,SAAgC,QAAgB,KAAmB,GAAG,MAAa;EAC9F,IAAI;GACF,MAAM,MAAM,YAAY,OAAO,GAAG,CAAC;GACnC,IAAI,WAAyB;GAC7B,MAAM,IAAI,OAAO,MAAM,CAAC,CAAC,YAAY;GACrC,IAAI,IAAI,gBAAgB,KAAK,MAAM,SAAS,CAAC,aAAa,KAAK,GAAG,GAAG;IAEnE,MAAM,IAAI,IAAI,IAAI,GAAG;IACrB,EAAE,aAAa,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IAClD,WAAW,EAAE;GACf;GACA,KAAK,IAAI,MAAM;IAAE,QAAQ;IAAG,KAAK;IAAK,SAAS,CAAC;IAAG,SAAS,aAAa,KAAK,GAAG;GAAE,CAAC;GACpF,OAAQ,SAAiB,KAAK,MAAM,QAAQ,UAAU,GAAG,IAAI;EAC/D,QAAQ;GACN,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,IAAI;GACpC,OAAQ,SAAiB,KAAK,MAAM,QAAQ,KAAK,GAAG,IAAI;EAC1D;CACF;CAEA,MAAM,mBAAmB,SAAgC,MAAc,OAAe;EACpF,KAAK,IAAI,IAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC;EAC1C,OAAO,cAAc,KAAK,MAAM,MAAM,KAAK;CAC7C;CAEA,MAAM,OAAO,SAAgC,MAAiD;EAC5F,MAAM,IAAI,KAAK,IAAI,IAAI;EACvB,IAAI,CAAC,KAAK,EAAE,SAAS,OAAO,SAAS,KAAK,MAAM,IAAI;EACpD,MAAM,KAAK,aAAa;EACxB,EAAE,KAAK;EAEP,MAAM,MAAM;EACZ,MAAM,UAAU,aAAa,IAAI;EACjC,MAAM,QAAwB;GAC5B;GACA,KAAK,EAAE;GACP,QAAQ,EAAE;GACV,MAAM;GACN,WAAW;GACX,gBAAgB,WAAW;GAC3B,OAAO;GACP,gBAAgB,EAAE,QAAQ,MAAM;GAChC,iBAAiB,CAAC;GAClB;GACA,aAAa,SAAS;GACtB,WAAW;GACX,WAAW,YAAY,IAAI;GAC3B,UAAU,KAAK,IAAI;EACrB;EACA,IAAI,KAAK,iBAAiB,KAAK;EAE/B,IAAI,UAAgD;EACpD,MAAM,gBAAgB;GACpB,IAAI,IAAI,eAAe,GACrB,IAAI;IACF,MAAM,UAAU,gBAAgB,IAAI,sBAAsB,CAAC;IAC3D,IAAI,KAAK,kBAAkB;KACzB;KACA,OAAO;MACL,QAAQ,IAAI;MACZ,YAAY,IAAI;MAChB,iBAAiB;MACjB,UAAU,UAAU,SAAS,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;KACnE;IACF,CAAC;GACH,QAAQ,CAAC;EAEb;EACA,MAAM,gBAAiB,UAAU;EACjC,MAAM,gBAAiB,UAAU;EACjC,MAAM,kBAAmB,UAAU;EACnC,MAAM,kBAAkB;GACtB,IAAI,oBAAoB,oBAAoB,OAAO;GACnD,IAAI,oBAAoB,SAAS,OAAO;GACxC,IAAI,oBAAoB,SAAS,OAAO;GACxC,IAAI,oBAAoB,WAAW,SAAS;GAC5C,IAAI,oBAAoB,WAAW,SAAS;GAC5C,MAAM,UAAU,YAAY,IAAI;GAChC,IAAI,SAAS;IACX,IAAI,KAAK,kBAAkB;KACzB;KACA,OAAO;MACL,OAAO,YAAY,UAAU,YAAY;MACzC,YAAY,YAAY,UAAU,eAAe,YAAY,YAAY,cAAc;MACvF,OAAO,YAAY,UAAU,oBAAoB,YAAY,YAAY,sBAAsB;MAC/F;MACA,WAAW;KACb;IACF,CAAC;IACD;GACF;GACA,MAAM,QAAiC;IAAE,OAAO;IAAY;IAAS,QAAQ,IAAI;IAAQ,YAAY,IAAI;GAAW;GACpH,IAAI;IACF,MAAM,UAAU,gBAAgB,IAAI,sBAAsB,CAAC;IAC3D,MAAM,kBAAkB;IACxB,MAAM,WAAW,UAAU,SAAS,cAAc,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;IACxE,MAAM,KAAK,IAAI;IACf,MAAM,eAAe,MAAM;IAC3B,IAAI,OAAO,MAAM,OAAO,QAAQ;KAC9B,MAAM,OAAO,IAAI;KACjB,MAAM,eAAe,WAAW,IAAI;KACpC,MAAM,eAAe,KAAK,SAAA,UAAoB,KAAK,MAAM,GAAG,QAAQ,IAAI;KACxE,MAAM,YAAY,KAAK,SAAA,UAAoB,cAAc;IAC3D,OAAO,IAAI,OAAO,QAAQ;KACxB,MAAM,OAAO,IAAI,YAAY,OAAO,KAAK,KAAK,UAAU,IAAI,QAAQ;KACpE,MAAM,eAAe,WAAW,IAAI;KACpC,MAAM,eAAe,KAAK,MAAM,GAAG,QAAQ;KAC3C,MAAM,YAAY,KAAK,SAAA,UAAoB,cAAc;IAC3D,OAAO,IAAI,OAAO,YAAY;KAC5B,MAAM,MAAM,IAAI;KAChB,MAAM,eAAe,MAAM,IAAI,cAAc,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI;KAC3F,MAAM,YAAY;IACpB,OAAO,IAAI,OAAO,QAAQ;KACxB,MAAM,OAAO,IAAI;KACjB,MAAM,eAAe,MAAM;KAC3B,MAAM,YAAY;KAClB,IAAI,QAAQ,KAAK,OAAO,OAAO,WAAW,KAAK,KAAK,IAAI,GAAG,MAAM,oBAAoB,IAAI,gBAAgB,IAAI;IAC/G,OAAO,IAAI,OAAO,eAAe;KAC/B,MAAM,eAAgB,IAAI,UAAiC;KAC3D,MAAM,YAAY;IACpB;GACF,QAAQ;IACN,MAAM,YAAY;GACpB;GACA,IAAI,KAAK,kBAAkB;IAAE;IAAI;GAAM,CAAC;EAC1C;EACA,IAAI,iBAAiB,oBAAoB,OAAO;EAChD,IAAI,iBAAiB,SAAS,OAAO;EACrC,IAAI,iBAAiB,SAAS,OAAO;EACrC,IAAI,iBAAiB,WAAW,SAAS;EACzC,IAAI,iBAAiB,WAAW,SAAS;EAEzC,IAAI;GACF,OAAO,SAAS,KAAK,MAAM,IAAI;EACjC,SAAS,KAAK;GACZ,IAAI,KAAK,kBAAkB;IAAE;IAAI,OAAO;KAAE,OAAO;KAAU,OAAO,OAAO,GAAG;KAAG,SAAS,YAAY,IAAI;KAAG,WAAW;IAAO;GAAE,CAAC;GAChI,MAAM;EACR;CACF;CAEA,MAAM,OAAO;CACb,MAAM,OAAO;CACb,MAAM,mBAAmB;CAEzB,aAAa;EACX,IAAI,MAAM,SAAU,MAAkB,MAAM,OAAO;EACnD,IAAI,MAAM,SAAS,MAAM,MAAM,OAAO;EACtC,IAAI,MAAM,qBAAqB,kBAAkB,MAAM,mBAAmB;CAC5E;AACF;;ACpLA,SAAgB,gBAAgB,GAA6C;CAC3E,MAAM,KAAK,GAAW,MAAe,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAA;CACxE,OAAO;EACL,WAAW,EAAE;EACb,UAAU,EAAE,EAAE,eAAe,EAAE,WAAW;EAC1C,KAAK,EAAE,EAAE,mBAAmB,EAAE,eAAe;EAC7C,SAAS,EAAE,EAAE,cAAc,EAAE,UAAU;EACvC,KAAK,EAAE,wBAAwB,IAAI,EAAE,EAAE,uBAAuB,EAAE,UAAU,IAAI,KAAA;EAC9E,SAAS,EAAE,EAAE,YAAY,EAAE,YAAY;EACvC,SAAS,EAAE,EAAE,cAAc,EAAE,aAAa;EAC1C,UAAU,EAAE,EAAE,eAAe,EAAE,WAAW;EAC1C,OAAO,EAAE;CACX;AACF;;;;;;;AAQA,SAAgB,iBAAiB,KAAU,KAAgC;CACzE,IAAI,OAAO,wBAAwB,eAAe,OAAO,gBAAgB,aAAa,aAAa,CAAC;CAEpG,MAAM,aAAa,MAAiD;EAClE,MAAM,OAAO;EACb,MAAM,OAAO,EAAE,cAAc,eAAe,QAAQ,kBAAkB,EAAE,eAAe,EAAE,IAAI;EAC7F,MAAM,YAAY,KAAK,iBAAiB,WAAY,EAAE,iBAAiB,KAAK,EAAE,kBAAkB;EAChG,OAAO;GACL,IAAI,aAAa;GACjB,KAAK,EAAE;GACP,QAAQ;GACR;GACA,WAAW,EAAE,iBAAiB;GAC9B,OAAO;GACP,QAAQ,KAAK,kBAAkB,KAAA;GAC/B,YAAY,YAAY,YAAY;GACpC,gBAAgB,CAAC;GACjB,iBAAiB,CAAC;GAClB,WAAW;GACX,UAAU,KAAK,eAAe,KAAA;GAC9B,WAAW,EAAE;GACb,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE;GAC1C,UAAU,YAAY,aAAa,EAAE;GACrC,cAAc,EAAE,gBAAgB,KAAA;GAChC,cAAc,EAAE,mBAAmB,EAAE,mBAAmB,KAAA;GACxD;GACA,QAAQ,gBAAgB,CAAC;EAC3B;CACF;CAEA,MAAM,UAAU,SAA+B;EAC7C,KAAK,MAAM,SAAS,MAAM;GACxB,MAAM,IAAI;GACV,IAAI,aAAa,EAAE,MAAM,GAAG,GAAG;GAC/B,IAAI,EAAE,kBAAkB,WAAW,EAAE,kBAAkB,oBAAoB,EAAE,kBAAkB,UAAU;IACvG,IAAI,KAAK,oBAAoB,UAAU,CAAC,CAAC;IACzC;GACF;GAEA,IAAI,gBAAgB,KAAK,EAAE,IAAI,GAAG;GAClC,IAAI,KAAK,iBAAiB,UAAU,CAAC,CAAC;EACxC;CACF;CAEA,IAAI,WAAuC;CAC3C,IAAI;EACF,WAAW,IAAI,qBAAqB,SAAS,OAAO,KAAK,WAAW,CAAC,CAAC;EACtE,SAAS,QAAQ;GAAE,MAAM;GAAY,UAAU;EAAK,CAAC;CACvD,QAAQ;EACN,IAAI;GACF,OAAO,YAAY,iBAAiB,UAAU,CAAC;GAC/C,UAAU,QAAQ,EAAE,YAAY,CAAC,UAAU,EAAE,CAAC;EAChD,QAAQ,CAAC;CACX;CAEA,IAAI;EAEF,OADY,YAAY,iBAAiB,YAClC,CAAG;CACZ,QAAQ,CAAC;CAET,aAAa,UAAU,WAAW;AACpC;;AAGA,SAAgB,iBAAiB,KAAU,KAAgC;CACzE,IAAI,OAAO,cAAc,aAAa,aAAa,CAAC;CACpD,MAAM,WAAW,OAAO;CACxB,MAAM,aAAa;CAEnB,MAAM,aAAa,SAA6E;EAC9F,IAAI,OAAO,SAAS,UAAU,OAAO;GAAE,MAAM,KAAK,MAAM,GAAG,GAAM;GAAG,MAAM,KAAK;GAAQ,QAAQ;EAAO;EACtG,IAAI,gBAAgB,aAAa,OAAO;GAAE,MAAM,iBAAiB,KAAK,WAAW;GAAM,MAAM,KAAK;GAAY,QAAQ;EAAS;EAC/H,IAAI,OAAO,SAAS,eAAe,gBAAgB,MAAM,OAAO;GAAE,MAAM,iBAAiB,KAAK,KAAK;GAAM,MAAM,KAAK;GAAM,QAAQ;EAAS;EAC3I,IAAI,YAAY,OAAO,IAAI,GAAG,OAAO;GAAE,MAAM,iBAAiB,KAAK,WAAW;GAAM,MAAM,KAAK;GAAY,QAAQ;EAAS;EAC5H,OAAO;GAAE,MAAM,OAAO,IAAI;GAAG,MAAM;GAAG,QAAQ;EAAO;CACvD;CAEA,MAAM,8BAA8B,SAAS;EAC3C,YAAY,KAAmB,WAA+B;GAC5D,MAAM,KAAK,SAAS;GACpB,MAAM,OAAO,OAAO,GAAG;GACvB,IAAI,aAAa,MAAM,GAAG,GAAG;GAC7B,MAAM,KAAK,aAAa;GACxB,MAAM,SAAgD,CAAC;GACvD,KAAc,UAAU;GACxB,KAAc,cAAc;GAC5B,IAAI,KAAK,iBAAiB;IACxB;IACA,KAAK;IACL,QAAQ;IACR,MAAM;IACN,WAAW;IACX,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,gBAAgB,CAAC;IACjB,iBAAiB,CAAC;IAClB,WAAW;IACX,WAAW,YAAY,IAAI;IAC3B,UAAU,KAAK,IAAI;IACnB,QAAQ,CAAC;GACX,CAAC;GACD,MAAM,QAAQ,WAA+B,SAAkB;IAC7D,OAAO,KAAK;KAAE;KAAW,MAAM,KAAK,IAAI;KAAG,GAAG,UAAU,IAAI;IAAE,CAAC;IAC/D,IAAI,OAAO,SAAS,YAAY,OAAO,OAAO,GAAG,OAAO,SAAS,UAAU;IAC3E,IAAI,KAAK,kBAAkB;KAAE;KAAI,OAAO,EAAE,QAAQ,OAAO,MAAM,EAAE;IAAE,CAAC;GACtE;GACA,KAAc,YAAY;GAC1B,KAAK,iBAAiB,YAAY,OAAqB,KAAK,WAAW,GAAG,IAAI,CAAC;GAC/E,KAAK,iBAAiB,UAAU,OAC9B,IAAI,KAAK,kBAAkB;IACzB;IACA,OAAO;KAAE,OAAO;KAAY,SAAS,YAAY,IAAI;KAAG,YAAY,WAAW,GAAG,KAAK;IAAG;GAC5F,CAAC,CACH;GACA,KAAK,iBAAiB,eACpB,IAAI,KAAK,kBAAkB;IAAE;IAAI,OAAO;KAAE,OAAO;KAAU,OAAO;KAAmB,SAAS,YAAY,IAAI;IAAE;GAAE,CAAC,CACrH;EACF;EAEA,KAAK,MAA+D;GAClE,MAAM,KAAK,IAAW;GACtB,IAAI;IACF,KAAc,YAAY,QAAQ,IAAI;GACxC,QAAQ,CAAC;EACX;CACF;CAEA,OAAO,YAAY;CACnB,aAAa;EACX,IAAI,OAAO,cAAe,uBAAmC,OAAO,YAAY;CAClF;AACF;;;;;;;ACrJA,SAAgB,eAAe,KAAsB;CACnD,IAAI,OAAO,YAAY,aAAa,aAAa,CAAC;CAClD,wBAAwB;CACxB,MAAM,QAAQ,QAAQ;CACtB,MAAM,OAAO;EAAE,SAAS,MAAM;EAAS,YAAY,MAAM;EAAY,OAAO,MAAM;CAAM;CAExF,MAAM,UAAU,MAA2C;EACzD,IAAI;GACF,IAAI,MAAM,OAAO,cAAc,OAAO;GACtC,IAAI,MAAM,OAAO,gBAAgB,OAAO;EAC1C,QAAQ,CAAC;EACT,OAAO;CACT;CACA,IAAI,4BAAY,IAAI,IAAyB;CAC7C,MAAM,UAAU,GAAY,QAAiB;EAC3C,IAAI,OAAO,QAAQ,cAAc,GAAG,GAAG;EACvC,MAAM,OAAO,OAAO,CAAC;EACrB,IAAI,CAAC,MAAM;EACX,IAAI,CAAC,UAAU,MACb,qBAAqB;GACnB,MAAM,QAAQ;GACd,4BAAY,IAAI,IAAI;GACpB,MAAM,SAAS,MAAM,IAAI,KAAK,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;EAC9D,CAAC;EAEH,UAAU,IAAI,IAAI;CACpB;CAEA,MAAM,UAAU,SAAyB,KAAa,OAAe;EACnE,MAAM,IAAI,KAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;EAC5C,OAAO,MAAM,OAAO,GAAG,CAAC;EACxB,OAAO;CACT;CACA,MAAM,aAAa,SAAyB,KAAa;EACvD,MAAM,IAAI,KAAK,WAAW,KAAK,MAAM,GAAG;EACxC,OAAO,MAAM,OAAO,GAAG,CAAC;EACxB,OAAO;CACT;CACA,MAAM,QAAQ,WAAyB;EACrC,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI;EAC9B,OAAO,IAAI;EACX,OAAO;CACT;CACA,MAAM,UAAU;CAChB,MAAM,aAAa;CACnB,MAAM,QAAQ;CAEd,MAAM,aAAa,MAAoB;EACrC,IAAI,EAAE,aAAa,OAAO,EAAE,aAAa,EAAE,OAAO,KAAA,CAAS;CAC7D;CACA,OAAO,iBAAiB,WAAW,SAAS;CAE5C,aAAa;EACX,OAAO,oBAAoB,WAAW,SAAS;EAC/C,IAAI,MAAM,YAAY,SAAS,MAAM,UAAU,KAAK;EACpD,IAAI,MAAM,eAAe,YAAY,MAAM,aAAa,KAAK;EAC7D,IAAI,MAAM,UAAU,OAAO,MAAM,QAAQ,KAAK;CAChD;AACF;;;;;;;AC1DA,SAAgB,mBAAmB,KAAsB;CACvD,IAAI,OAAO,qBAAqB,aAAa,aAAa,CAAC;CAC3D,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,MAAM,MAAM,OAAO,0BAA0B,aAAa,yBAAyB,OAA6B,iBAAiB,GAAG,CAAC,GAAG,EAAE;CAC1I,MAAM,MAAM,OAAO,yBAAyB,aAAa,uBAAuB;CAEhF,MAAM,WAAW,IAAI,kBAAkB,YAAY;EACjD,IAAI,WAAW;EACf,KAAK,MAAM,KAAK,SAAS;GACvB,IAAI,eAAe,EAAE,MAAM,GAAG;GAC9B,IAAI,EAAE,SAAS,aACI;QAAA,CAAC,GAAG,MAAM,KAAK,EAAE,UAAU,GAAG,GAAG,MAAM,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,MAAM,eAAe,CAAC,CACvG,MAAa,EAAE,WAAW,UAAU,EAAE,aAAa,SAAS;GAAA;GAElE;EACF;EACA,IAAI,CAAC,UAAU;EACf,SAAS;EACT,IAAI,CAAC,OACH,QAAQ,UAAU;GAChB,QAAQ;GACR,MAAM,IAAI;GACV,QAAQ;GACR,IAAI,KAAK,gBAAgB,EAAE,SAAS,EAAE,CAAC;EACzC,CAAC;CAEL,CAAC;CACD,SAAS,QAAQ,SAAS,iBAAiB;EACzC,WAAW;EACX,SAAS;EACT,YAAY;EACZ,eAAe;CACjB,CAAC;CACD,aAAa;EACX,SAAS,WAAW;EACpB,IAAI,OAAO,IAAI,KAAK;CACtB;AACF;;AChBA,IAAM,0BAAU,IAAI,IAAyD;AAE7E,IAAM,gBAA+B;CACnC,YAAY,CAAC;CACb,uBAAuB,YAAY,SAAS,CAAC,CAAC;AAChD;AAEA,SAAS,QAAQ,MAAkB,SAAuC;CACxE,MAAM,IAAI,QAAQ,IAAI,IAAI;CAC1B,IAAI,GAAG,EAAE;MAEP,IAAI;EACF,QAAQ,IAAI,MAAM;GAAE,MAAM;GAAG,WAAW,QAAQ;EAAE,CAAC;CACrD,QAAQ;EACN,QAAQ,IAAI,MAAM;GAAE,MAAM;GAAG,iBAAiB,CAAC;EAAE,CAAC;CACpD;CAEF,IAAI,WAAW;CACf,aAAa;EACX,IAAI,UAAU;EACd,WAAW;EACX,MAAM,MAAM,QAAQ,IAAI,IAAI;EAC5B,IAAI,CAAC,KAAK;EACV,IAAI;EACJ,IAAI,IAAI,QAAQ,GAAG;GACjB,QAAQ,OAAO,IAAI;GACnB,IAAI;IACF,IAAI,UAAU;GAChB,QAAQ,CAAC;EACX;CACF;AACF;AAIA,IAAI,YAAY;AAChB,IAAI,mBAAwC;AAE5C,SAAS,gBAAsB;CAC7B,IAAI,WAAW;CACf,YAAY;CACZ,MAAM,OAAO;EACX,IAAI,GAAG,iBAAiB,eAAe;EACvC,IAAI,GAAG,kBAAkB,EAAE,cAAc;GACvC,IAAI,WAAW,YAAY,SAAS,CAAC,CAAC,oBAAoB;IACxD,gBAAgB;KAAE,OAAO;KAAQ,MAAM;KAAU,MAAM,CAAC,qDAAqD;KAAG,WAAW,KAAK,IAAI;IAAE,CAAC;IACvI;GACF;GACA,MAAM;GACN,WAAW,SAAS,CAAC,CAAC,MAAM;GAC5B,gBAAgB;GAChB,gBAAgB;IAAE,OAAO;IAAQ,MAAM;IAAU,MAAM,CAAC,qBAAqB;IAAG,WAAW,KAAK,IAAI;GAAE,CAAC;EACzG,CAAC;EACD,IAAI,GAAG,iBAAiB,UAAU;EAClC,IAAI,GAAG,mBAAmB,EAAE,IAAI,YAAY,aAAa,IAAI,KAAK,CAAC;EACnE,IAAI,GAAG,qBAAqB,QAAQ;GAClC,MAAM,QAAQ,MAAc,EAAE,QAAQ,sBAAsB,IAAI,CAAC,CAAC,QAAQ,SAAS,EAAE;GACrF,MAAM,QAAQ,aACX,OAAO,EAAE,SAAS,WAAW,EAAE,SAAS,UAAU,CAAC,EAAE,UAAU,KAAK,EAAE,GAAG,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,EAAE,YAAY,IAAI,SAAS,IAAI,GAC3I;GACA,IAAI,OACF,aAAa,MAAM,IAAI;IACrB,QAAQ,IAAI;IACZ,cAAc,IAAI;IAClB,WAAW,IAAI;IACf,cAAc,MAAM,gBAAgB,IAAI;GAC1C,CAAC;EAEL,CAAC;EACD,IAAI,GAAG,gBAAgB,cAAc;EACrC,IAAI,GAAG,mBAAmB,EAAE,WAAW,eAAe,SAAS,CAAC,CAAC,KAAK,SAAS,WAAW,WAAW,IAAI,CAAC;CAC5G;CAEA,MAAM,mBAAmB;EACvB,MAAM,IAAI,YAAY,SAAS;EAC/B,IAAI,EAAE,oBAAoB,qBAAqB;EAC/C,IAAI,EAAE,oBAAoB,qBAAqB;CACjD;CACA,OAAO,iBAAiB,YAAY,UAAU;CAG9C,MAAM,QAAQ,aAA6E,YAAY,CAAC,CAAC;CACzG,IAAI,MAAM,sBAAsB,YAAY,SAAS,CAAC,CAAC,oBAAoB,wBAAwB;CACnG,IAAI,MAAM,sBAAsB,YAAY,SAAS,CAAC,CAAC,oBAAoB,wBAAwB;CAEnG,yBAAyB;EACvB,KAAK,SAAS,MAAM,EAAE,CAAC;EACvB,OAAO,oBAAoB,YAAY,UAAU;EACjD,YAAY;CACd;AACF;AAEA,IAAI,qBAAqB;;;;;;;AAQzB,SAAgB,uBAAuB,MAA6B,CAAC,GAAe;CAClF,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;CAChC,MAAM,EAAE,SAAS,IAAI,MAAM,UAAU,MAAM,UAAU,MAAM,MAAM,SAAS;CAC1E,IAAI,IAAI,YAAY,cAAc,aAAa,IAAI;CACnD,IAAI,IAAI,mBAAmB,WAAW,SAAS,EAAE,KAAK,IAAI,kBAAkB,CAAC;CAC7E,IAAI,IAAI,mBAAmB,WAAW,SAAS,EAAE,KAAK,IAAI,kBAAkB,CAAC;CAC7E,cAAc;CACd;CAEA,MAAM,WAA2B,CAAC;CAClC,IAAI,GAAG;EACL,SAAS,KAAK,QAAQ,iBAAiB,eAAe,GAAG,CAAC,CAAC;EAC3D,SAAS,KAAK,QAAQ,gBAAgB,cAAc,GAAG,CAAC,CAAC;CAC3D;CACA,IAAI,SAAS;EACX,SAAS,KAAK,QAAQ,eAAe,aAAa,KAAK,aAAa,CAAC,CAAC;EACtE,SAAS,KAAK,QAAQ,aAAa,WAAW,KAAK,aAAa,CAAC,CAAC;EAClE,SAAS,KAAK,QAAQ,mBAAmB,iBAAiB,KAAK,aAAa,CAAC,CAAC;EAC9E,SAAS,KAAK,QAAQ,mBAAmB,iBAAiB,KAAK,aAAa,CAAC,CAAC;CAChF;CACA,IAAI,SAAS,SAAS,KAAK,QAAQ,iBAAiB,eAAe,GAAG,CAAC,CAAC;CACxE,IAAI,KAAK,SAAS,KAAK,QAAQ,aAAa,mBAAmB,GAAG,CAAC,CAAC;CACpE,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,SAAS,sBAAsB,CAAC;CAErE,IAAI,WAAW;CACf,aAAa;EACX,IAAI,UAAU;EACd,WAAW;EACX,SAAS,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC;EACrC;EACA,IAAI,sBAAsB,KAAK,kBAAkB;GAC/C,iBAAiB;GACjB,mBAAmB;EACrB;CACF;AACF;AAEA,IAAI,eAAoC;;;;;;AAOxC,SAAgB,aAAa,MAA6B,CAAC,GAAe;CACxE,IAAI,CAAC,UAAU,GAAG,aAAa,CAAC;CAChC,IAAI,CAAC,cAAc,eAAe,uBAAuB;EAAE,KAAK;EAAO,OAAO;EAAM,GAAG;CAAI,CAAC;CAC5F,aAAa;EACX,eAAe;EACf,eAAe;CACjB;AACF;;ACzKA,IAAM,iBAA2C;CAAC;CAAY;CAAW;CAAW;AAAa;;;;;;;AAejG,SAAgB,kBAAkB,OAA+B;CAC/D,IAAI,MAAM,YAAY,SAAS,CAAC,UAAU,GAAG,OAAO;CACpD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,uBAAD,EAAuB,GAAI,MAAQ,CAAA;AAC5C;AAEA,SAAS,sBAAsB,OAA+B;CAC5D,MAAM,EACJ,cAAc,OACd,MACA,cACA,UACA,OACA,QACA,OACA,WAAW,gBACX,SAAS,gBACT,cACA,SACA,QACA,eAAe,MACf,oBAAoB,OACpB,mBACA,mBACA,YACA,WACE;CAEJ,MAAM,CAAC,OAAO,aAAA,GAAYG,MAAAA,SAAAA,CAAuB,IAAI;CACrD,MAAM,mBAAA,GAAkBC,MAAAA,OAAAA,CAAO,YAAY;CAC3C,gBAAgB,UAAU;CAE1B,MAAM,OAAO;EAAE,GAAG;EAAgB,GAAG;CAAQ;CAG7C,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,gBAAgB;GACd,MAAM;GACN;GACA,cAAc;GACd,YAAY;GACZ,MAAM,QAAQ;EAChB,CAAC;EACD,IAAI,SAAS,KAAA,GAAW,YAAY,SAAS,EAAE,KAAK,CAAC;EACrD,cAAc;EACd,mBAAmB;EAEnB,MAAM,OAAO,SAAS,cAAc,KAAK;EACzC,KAAK,aAAa,WAAW,EAAE;EAC/B,KAAK,aAAa,cAAc,0BAA0B;EAC1D,MAAM,SAAS,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EACjD,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;EACpB,MAAM,YAAY,SAAS,cAAc,KAAK;EAC9C,UAAU,YAAY;EACtB,OAAO,OAAO,OAAO,SAAS;EAC9B,SAAS,KAAK,YAAY,IAAI;EAC9B,eAAe,IAAI;EACnB,MAAM,QAAA,GAAOC,iBAAAA,WAAAA,CAAW,SAAS;EACjC,SAAS;GAAE;GAAM;GAAQ;GAAW;EAAK,CAAC;EAE1C,aAAa;GACX,eAAe,IAAI;GACnB,YAAY,SAAS;IAAE,cAAc;IAAO,YAAY;GAAM,CAAC;GAE/D,iBAAiB;IACf,KAAK,QAAQ;IACb,KAAK,OAAO;GACd,CAAC;EACH;CAEF,GAAG,CAAC,CAAC;CAGL,MAAM,aAAa,cAAc,CAAC,EAAA,CAAG,IAAI,MAAM,CAAC,CAAC,KAAK,GAAG;CACzD,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,OAAO,uBAAuB;GAC5B,SAAS,KAAK;GACd,SAAS,KAAK;GACd,SAAS,KAAK;GACd,KAAK;GACL,OAAO,KAAK,uBAAuB,KAAK;GACxC;GACA;GACA;EACF,CAAC;CAEH,GAAG;EAAC,KAAK;EAAe,KAAK;EAAe,KAAK;EAAmB,KAAK;EAAqB,KAAK;EAAqB;EAAW;EAAmB;CAAiB,CAAC;CAGxK,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,SAAS,KAAA,KAAa,YAAY,SAAS,CAAC,CAAC,SAAS,MAAM,YAAY,SAAS,CAAC,CAAC,QAAQ,IAAI;CACrG,GAAG,CAAC,IAAI,CAAC;CACT,CAAA,GAAA,MAAA,UAAA,OAEI,YAAY,WAAW,GAAG,SAAS;EACjC,IAAI,EAAE,SAAS,KAAK,MAAM,gBAAgB,UAAU,EAAE,IAAI;CAC5D,CAAC,GACH,CAAC,CACH;CACA,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,SAAS,WAAW,KAAA,GAAW,MAAM,KAAK,MAAM,YAAY,WAAW,OAAO,MAAM,CAAC;CAC3F,GAAG,CAAC,OAAO,MAAM,CAAC;CAClB,CAAA,GAAA,MAAA,UAAA,OAAgB,gBAAgB,YAAY,SAAS,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC;CAGxE,MAAM,SAAyB;EAC7B;EACA,cAAc,gBAAgB,CAAC;EAC/B,SAAS;EACT;EACA;EACA;EACA;CACF;CACA,MAAM,YAAY,KAAK,UAAU;EAAE;EAAQ,SAAS;EAAM;EAAU;EAAc;EAAmB,GAAG,OAAO,WAAW,WAAW,SAAS,CAAC,CAAC;EAAQ,GAAG,cAAc,KAAK,MAAM,EAAE,EAAE;CAAE,CAAC;CAC3L,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,OAAO;EACZ,MAAM,KAAK,OACT,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;GAAe,OAAM;GACnB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAgB,UAAjB;IAA0B,OAAO;KAAE,YAAY,MAAM;KAAQ,WAAW,MAAM;KAAW,gBAAgB;IAAO;IAC9G,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAc,UAAf;KAAwB,OAAO;KAC7B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD,CAAc,CAAA;IACQ,CAAA;GACA,CAAA;EACb,CAAA,CACjB;CAEF,GAAG;EAAC;EAAO;EAAW;EAAc;CAAM,CAAC;CAE3C,OAAO;AACT"}
|