sheet-happens 0.0.53 → 0.0.55

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/image.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/cell.ts","../src/text.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/render.ts","../src/style.ts","../src/sheet.tsx"],"sourcesContent":["import { CellContentRender, XY, Rectangle, Selection, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [2000, 1000];\n\nexport const ORIGIN: XY = [0, 0];\nexport const ONE_ONE: XY = [1, 1];\nexport const NEG_NEG: XY = [-1, -1];\n\nexport const NO_CELL: XY = [-1, -1];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: CellContentRender[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#d8e6ff80',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#ffffff',\n\n shadowColor: '#000000',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n\n shadowBlur: 12,\n shadowOpacity: 0.05,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginLeft: 5,\n marginRight: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n ArrowRight: 'right',\n ArrowLeft: 'left',\n ArrowUp: 'up',\n ArrowDown: 'down',\n};\n","export const tail = <T>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] =>\n Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [\n clamp(p[0], min[0], max[0]),\n clamp(p[1], min[1], max[1]),\n];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameRectangle = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\nexport const isPointInsideRectangle = (rectangle: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = rectangle;\n const [x, y] = point;\n return x >= left && x < right && y >= top && y < bottom;\n};\n\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap =\n <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) =>\n <B>(map: (...args: A) => B) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n };\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return left === -1 && right === -1;\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return top === -1 && bottom === -1;\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return top === -1 && bottom === -1 && left !== -1 && right !== -1;\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left !== -1 && right !== -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top === -1 && bottom === -1;\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return x >= left && x <= right && y >= top && y <= bottom;\n};\n\n// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\n};\n\n// Orient normalized rectangle to match existing orientation\nexport const orientSelection = (normalized: Rectangle, to: Rectangle): Rectangle => {\n const [[left, top], [right, bottom]] = normalized;\n\n const [anchor, head] = to;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const swapX = (ax - hx || 1) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport toRGBA from 'color-rgba';\nimport { CellContentItem, Rectangle, Style } from './types';\n\nconst DEFAULT_ICON_SIZE = 32;\n\nexport const svgToImage = (icon: ReactElement | string): HTMLImageElement => {\n const image = new Image();\n try {\n const iconAsString = typeof icon === 'string' ? icon : renderToString(icon);\n const base64String = window.btoa(iconAsString);\n image.src = `data:image/svg+xml;base64,${base64String}`;\n } catch (err) {\n console.log(err);\n }\n return image;\n};\n\nexport const useImageRenderer = () => {\n const [, setVersion] = useState(0);\n\n const [canvasWidth, setCanvasWidth] = useState(DEFAULT_ICON_SIZE);\n const [canvasHeight, setCanvasHeight] = useState(DEFAULT_ICON_SIZE);\n\n const imageMap = useMemo(() => new Map<string, HTMLImageElement>(), []);\n const loadImage = useCallback(\n (src: string): HTMLImageElement => {\n let image = imageMap.get(src);\n if (image) return image;\n\n image = new Image();\n image.src = src;\n imageMap.set(src, image!);\n return image!;\n },\n [imageMap],\n );\n\n const dpi = window.devicePixelRatio;\n const iconContext = useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth * dpi;\n canvas.height = canvasHeight * dpi;\n\n const context = canvas.getContext('2d', { willReadFrequently: true }) as any as CanvasRenderingContext2D;\n return context;\n }, [canvasWidth, canvasHeight, dpi]);\n\n return (\n renderContext: CanvasRenderingContext2D,\n item: CellContentItem & { display: 'image' | 'icon' },\n style: Required<Style>,\n box: Rectangle,\n ) => {\n if (!iconContext) return;\n\n const { display } = item;\n\n const image = 'image' in item ? item.image : 'src' in item ? loadImage(item.src) : null;\n if (!image) return;\n\n if (!image.complete) {\n if (!image.onload) {\n image.onload = () => {\n setVersion((v) => v + 1);\n setCanvasWidth((w) => Math.max(w, image.width));\n setCanvasHeight((h) => Math.max(h, image.height));\n };\n }\n return;\n } else {\n if (canvasWidth < image.width) setCanvasWidth((w) => Math.max(w, image.width));\n if (canvasHeight < image.height) setCanvasHeight((h) => Math.max(h, image.height));\n }\n\n const [[left, top], [right, bottom]] = box;\n const width = right - left;\n const height = bottom - top;\n\n if (display === 'image') {\n // Draw image directly\n renderContext.drawImage(image, 0, 0, image.width, image.height, left, top, width, height);\n } else if (display === 'icon') {\n // Recolor icon according to text color style\n const color = item.color ?? style.color;\n const rgba = toRGBA(color);\n const [r = 0, g = 0, b = 0, a = 1] = rgba;\n\n try {\n const wDpi = width * dpi;\n const hDpi = height * dpi;\n\n iconContext.clearRect(0, 0, wDpi, hDpi);\n iconContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, wDpi, hDpi);\n\n const imageData = iconContext.getImageData(0, 0, wDpi, hDpi);\n const { data } = imageData;\n const n = data.length;\n\n for (let i = 0; i < n; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = data[i + 3] * a;\n }\n\n iconContext.putImageData(imageData, 0, 0, 0, 0, wDpi, hDpi);\n renderContext.drawImage(iconContext.canvas, 0, 0, wDpi, hDpi, left, top, width, height);\n } catch (e) {\n console.error(e);\n }\n }\n };\n};\n","import { XY, Rectangle, RowOrColumnPropertyFunction } from './types';\nimport { normalizeSelection, orientSelection } from './coordinate';\n\nconst LIMIT = 1000;\n\nconst scanGroup = (\n keys: RowOrColumnPropertyFunction<string | number | null>,\n index: number,\n direction: number,\n matchKeys: Set<string | number | null>,\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number, // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(index);\n return before != null && after != null && before === after;\n};\n","import {\n Direction,\n XY,\n CellContentType,\n CellProperty,\n CellPropertyFunction,\n CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T,\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyStyledFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T,\n): CellPropertyStyledFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n};\n\nexport const findInDisplayData = (\n displayData: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n};\n","import { MouseEvent, PointerEvent, RefObject, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n Change,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideRectangle,\n isPointInsideSelection,\n isSameRectangle,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { isBoundaryInsideGroup, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } from './util';\n\ntype DragOp = {\n anchor: XY;\n offset: XY;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n elementRef: RefObject<HTMLDivElement>,\n dataOffset: XY,\n\n hitmapRef: RefObject<CellContentRender[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n getAutoSizeHeight: (row: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | null]) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean,\n) => {\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [hitTestDown, setHitTestDown] = useState<CellContentRender | null>(null);\n const [autoScroll, setAutoScroll] = useState<XY | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const { hideRowHeaders, hideColumnHeaders } = sheetStyle;\n const { cellToPixel, getVersion } = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n dataOffset,\n\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>, strict?: boolean) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n // Ignore clicks on scrollbar\n if (strict && (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight)) {\n return null;\n }\n\n return xy;\n }, []);\n\n // Check if mouse is out of bounds and in what direction\n const getMouseOutOfBounds = useCallback(\n (e: PointerEvent<any> | MouseEvent<any>, allowX: boolean, allowY: boolean) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n const indentX = cellLayout.getIndentX();\n const indentY = cellLayout.getIndentY();\n\n const xSign = allowX ? (xy[0] < indentX ? -1 : xy[0] > e.target.clientWidth ? 1 : 0) : 0;\n const ySign = allowY ? (xy[1] < indentY ? -1 : xy[1] > e.target.clientHeight ? 1 : 0) : 0;\n\n return xSign || ySign ? ([xSign, ySign] as XY) : null;\n },\n [cellLayout],\n );\n\n const getMouseHit = useCallback(\n (xy: XY) => {\n const { current: hitmap } = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const { box } = object;\n if (isPointInsideRectangle(box, xy)) {\n return object;\n }\n }\n\n return null;\n },\n [hitmapRef],\n );\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n dataOffset,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e, true);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n setHitTestDown(hitTarget);\n\n const [x, y] = xy;\n\n const normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index)),\n )\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n\n setColumnDrag({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([dragIndices, null]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup ? selectedColumns : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n\n setColumnResize({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n\n setRowDrag({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([null, dragIndices]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup ? selectedRows : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n\n setRowResize({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n },\n [\n getMousePosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n dontCommitEditOnSelectionChange,\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n ],\n );\n\n const onPointerUp = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n\n cellLayout: { pixelToColumn, pixelToRow },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragIndicesChange?.([null, null]);\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(x, 0.5);\n const cellY = pixelToRow(y, 0.5);\n\n if (columnDrag) {\n const { indices } = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\n ]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const { indices } = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\n ]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n setAutoScroll(null);\n },\n [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n dontChangeSelectionOnOrderChange,\n ],\n );\n\n const onPointerMove = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n dataOffset,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {\n cellToPixel,\n columnToPixel,\n rowToPixel,\n pixelToCell,\n pixelToColumn,\n pixelToRow,\n getIndentX,\n getIndentY,\n },\n },\n } = ref;\n\n window.document.body.style.cursor = 'auto';\n\n const isDraggingX =\n !!columnResize || !!columnDrag || draggingColumnSelection || draggingSelection || draggingKnob;\n\n const isDraggingY = !!rowResize || !!rowDrag || draggingRowSelection || draggingSelection || draggingKnob;\n\n const isDragging = isDraggingX || isDraggingY;\n\n const outOfBounds = getMouseOutOfBounds(e, isDraggingX, isDraggingY);\n if (isDragging) setAutoScroll(outOfBounds);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n\n if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n } else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n } else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n } else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n } else if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const getDragScrollOffset = (startOffset: XY): XY => {\n return subXY(cellToPixel(dataOffset), cellToPixel(startOffset));\n };\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) ||\n selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const { size, anchor, offset, indices } = columnResize;\n const [scrollOffset] = getDragScrollOffset(offset);\n const newWidth = Math.round(\n Math.max(size + x - anchor[0] + scrollOffset, SIZES.minimumWidth * indices.length),\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length)),\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, offset, indices } = rowResize;\n const [, scrollOffset] = getDragScrollOffset(offset);\n const newHeight = Math.round(\n Math.max(size + y - anchor[1] + scrollOffset, SIZES.minimumHeight * indices.length),\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length),\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = maxXY(dataOffset, pixelToCell(xy));\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.(\n [\n [-1, anchorY],\n [-1, Math.max(0, headY)],\n ],\n false,\n );\n } else if (draggingColumnSelection) {\n onSelectionChange?.(\n [\n [anchorX, -1],\n [Math.max(0, headX), -1],\n ],\n false,\n );\n } else {\n onSelectionChange?.([maxXY(anchor, ORIGIN), maxXY(head, ORIGIN)], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(x, 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, offset } = columnDrag;\n const shift = x - anchor[0];\n const [scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([shift + scrollOffset, 0]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [cellX, -1],\n [cellX, -1],\n ],\n );\n }\n if (rowDrag) {\n const cellY = pixelToRow(y, 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, offset } = rowDrag;\n const shift = y - anchor[1];\n const [, scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([0, shift + scrollOffset]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ],\n );\n }\n }\n },\n [\n getMousePosition,\n getMouseOutOfBounds,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ],\n );\n\n const onClick = useCallback(\n (e: MouseEvent) => {\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const mouseHit = getMouseHit(xy);\n\n // Verify if same object was clicked down and up to avoid false clicks due to drags\n if (hitTestDown && mouseHit) {\n if (isSameRectangle(hitTestDown.box, mouseHit.box)) {\n mouseHit?.item?.onClick?.(e);\n }\n }\n\n setHitTestDown(null);\n },\n [getMousePosition, getMouseHit, hitTestDown],\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, rowToPixel, getIndentX, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n\n // Double click column divider to autosize\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column)),\n );\n if (autosized.length) return;\n }\n\n // Double click row divider to autosize\n const indentX = getIndentX();\n const { rows } = visibleCells;\n if (onCellHeightChange && x < indentX) {\n const autosized = [];\n\n for (const index of [-1, ...rows]) {\n const edge = index < 0 ? rowToPixel(0) : rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n const [[, minY], [, maxY]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isRowSelection(selection) && index >= minY && index <= maxY\n ? mapSelectionRows(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const row of autosized) {\n onInvalidateRow?.(row - 1);\n }\n onCellHeightChange(\n autosized,\n autosized.map((row) => getAutoSizeHeight(row)),\n );\n if (autosized.length) return;\n }\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n },\n [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ],\n );\n\n const onContextMenu = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell, getIndentX, getIndentY },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n },\n [getMousePosition, onSelectionChange, onPointerMove, onRightClick],\n );\n\n useLayoutEffect(() => {\n if (!autoScroll) return;\n\n const loop = () => {\n const { current: element } = elementRef;\n if (!element) return;\n\n const [x, y] = autoScroll;\n const speed = 4;\n element.scrollLeft += x * speed * 2;\n element.scrollTop += y * speed;\n };\n\n const timer = setInterval(loop, 33);\n loop();\n\n return () => {\n clearInterval(timer);\n };\n }, [elementRef, autoScroll]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n};\n","import { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void,\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\n return;\n }\n\n const direction =\n e.key === 'Enter' ? 'down' : e.key === 'Tab' ? 'right' : arrowKeyCommitMode ? ARROW_KEYS[e.key] : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n\n onChange?.(changes);\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n if (e.key === 'Enter') e.preventDefault();\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY, subXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void,\n) => {\n return useCallback(\n (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const { absoluteToCell, cellToAbsolute } = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const xy: XY = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = maxScrollX < x + 1 ? 1.5 : 1;\n const growY = maxScrollY < y + 1 ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n },\n [cellLayout, onOffsetChange, onMaxScrollChange],\n );\n};\n\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 1);\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout,\n): {\n edge: XY;\n viewport: XY;\n} => {\n const { cellToAbsolute } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX;\n const scrollH = h - frozenY;\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n };\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void,\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const { cellToAbsolute, cellToPixel, columnToPixel, rowToPixel } = cellLayout;\n\n const origin = cellToAbsolute([0, 0]);\n const frozen = cellToAbsolute(freeze);\n const [frozenX, frozenY] = frozen;\n\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {}\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {}\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [newX >= 0 ? newX : offsetX, newY >= 0 ? newY : offsetY];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = subXY(cellToAbsolute(newOffset), origin);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import type {\n Align,\n Anchor,\n CellContentContainer,\n CellContentItem,\n CellContentRender,\n Justify,\n Rectangle,\n} from './types';\n\nexport const getInlineAlignment = (cellWidth: number, contentWidth: number, align: Align): number => {\n if (align === 'left') return 0;\n if (align === 'right') return cellWidth - contentWidth;\n\n return Math.round((cellWidth - contentWidth) / 2);\n};\n\nexport const measureFlexWidth = (context: CanvasRenderingContext2D, item: CellContentItem): number => {\n const { width } = item;\n if (width != null) return width;\n\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n const { actualBoundingBoxLeft, actualBoundingBoxRight } = context.measureText(text.toString());\n const w = actualBoundingBoxRight + actualBoundingBoxLeft;\n return width ?? w;\n }\n } else {\n throw new Error('Image or JSX content must have dimension specified');\n }\n return 0;\n};\n\nexport const resolveCellFlexLayout = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { flexJustify = 'start', flexAlign = 'center', flexGap = 0, items } = cellContent;\n\n // Gather flex items\n const flexItems = items.filter((item) => !item.absolute);\n\n // Measure natural size without wrapping\n const measuredWidths = cellContent.items.map((item) => measureFlexWidth(context, item));\n\n // Gather flex box horizontal info\n const sizes: number[] = [];\n const grows: number[] = [];\n const shrinks: number[] = [];\n\n let x = 0;\n flexItems.forEach((item, i) => {\n const defaultGrow = item.display === 'inline' ? 1 : 0;\n const defaultShrink = defaultGrow || (item.display === 'space' ? 1 : 0);\n const {\n width = measuredWidths[i],\n flexGrow = defaultGrow,\n flexShrink = defaultShrink,\n marginLeft = 0,\n marginRight = 0,\n } = item;\n\n sizes.push(width);\n grows.push(flexGrow);\n shrinks.push(flexShrink);\n\n x += width + marginLeft + marginRight + flexGap;\n });\n\n // Horizontal slack: leave space for n-1 gaps, without last extra\n let slackX = cellWidth - x + flexGap;\n\n // Flex horizontally\n if (slackX > 0 && growRow(slackX, grows, sizes)) slackX = 0;\n if (slackX < 0 && shrinkRow(slackX, shrinks, sizes)) slackX = 0;\n\n const [gapX, leadX] = getAlignmentSpacing(slackX, flexItems.length, flexJustify);\n const combinedGapX = gapX + flexGap;\n\n // Gather flex box vertical info\n const maxHeight = flexItems\n .map(({ height, marginTop = 0, marginBottom = 0 }) => (height ?? cellHeight) + marginTop + marginBottom)\n .reduce((a, b) => Math.max(a, b));\n\n const slackY = Math.max(0, cellHeight - maxHeight);\n const offsetY = getAlignmentAnchor(flexAlign) * slackY;\n\n // Resolve flex boxes\n let leftCursor = leadX;\n return flexItems.map((item, i) => {\n const {\n height: fixedHeight,\n marginLeft = 0,\n marginRight = 0,\n marginTop = 0,\n marginBottom = 0,\n flexAlignSelf = flexAlign,\n } = item;\n\n const marginX = marginLeft + marginRight;\n const marginY = marginTop + marginBottom;\n\n const height = fixedHeight ?? maxHeight - marginY;\n\n const slackSelfY = maxHeight - height - marginY;\n const offsetSelfY = getAlignmentAnchor(flexAlignSelf) * slackSelfY;\n\n const x = Math.round(cellLeft + marginLeft + leftCursor);\n const y = Math.round(cellTop + marginTop + offsetY + offsetSelfY);\n leftCursor += combinedGapX + marginX + sizes[i];\n\n const boxW = sizes[i];\n const boxH = height;\n const box: Rectangle = [\n [x, y],\n [x + boxW, y + boxH],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\nexport const resolveCellAbsoluteLayout = (\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { items } = cellContent;\n\n // Gather absolute items\n const absoluteItems = items.filter((item) => item.absolute);\n\n const resolvePosition = (\n container: number,\n size: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (start != null) return start + marginStart;\n if (end != null) return container - end - marginEnd - size;\n return 0;\n };\n\n const resolveSize = (\n container: number,\n span?: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (span != null) return span;\n if (start != null && end != null) return container - start - end - marginStart - marginEnd;\n return 0;\n };\n\n // Resolve absolute boxes\n return absoluteItems.map((item) => {\n const { left, top, right, bottom, width, height, marginLeft, marginTop, marginRight, marginBottom } = item;\n\n const w = resolveSize(cellWidth, width, left, right, marginLeft, marginRight);\n const h = resolveSize(cellHeight, height, top, bottom, marginTop, marginBottom);\n\n const l = cellLeft + resolvePosition(cellWidth, w, left, right, marginLeft, marginRight);\n const t = cellTop + resolvePosition(cellHeight, h, top, bottom, marginTop, marginBottom);\n\n const box: Rectangle = [\n [l, t],\n [l + w, t + h],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\n// Grow all applicable blocks in a row to add extra slack.\nexport const growRow = (slack: number, grow: number[], sizes: number[]) => {\n const n = grow.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (grow[i] > 0) weight += grow[i];\n\n if (weight > 0) {\n for (let i = 0; i < n; ++i) {\n if (grow[i] > 0) {\n sizes[i] += (slack * grow[i]) / weight;\n }\n }\n return true;\n }\n return false;\n};\n\n// Shrink all applicable blocks in a row to remove excess slack.\nexport const shrinkRow = (slack: number, shrink: number[], sizes: number[]): boolean => {\n const n = shrink.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (shrink[i]) weight += shrink[i] * sizes[i];\n\n if (weight > 0) {\n let negative = 0;\n for (let i = 0; i < n; ++i) {\n if (shrink[i] > 0 && sizes[i]) {\n sizes[i] += (slack * shrink[i] * sizes[i]) / weight;\n if (sizes[i] < 0) {\n negative += sizes[i];\n sizes[i] = 0;\n }\n }\n }\n if (negative) {\n shrinkRow(negative, shrink, sizes);\n }\n return true;\n }\n return false;\n};\n\n// Alignment to relative anchor position [0...1]\nexport const getAlignmentAnchor = (x: Anchor): number => {\n const isStart = x === 'start';\n const isEnd = x === 'end';\n\n const align = isStart ? 0 : isEnd ? 1 : 0.5;\n return align;\n};\n\n// Alignment/justification spacing and indent\nexport const getAlignmentSpacing = (slack: number, n: number, justify: Justify) => {\n let gap = 0;\n let lead = 0;\n\n const isJustify = justify === 'justify';\n const isBetween = justify === 'between';\n const isEvenly = justify === 'evenly';\n\n if (slack > 0) {\n if (isEvenly || isBetween || isJustify) {\n if (n === 1) {\n lead = slack / 2;\n } else if (isEvenly) {\n gap = Math.max(0, slack / (n + 1));\n lead = gap;\n } else if (isBetween) {\n gap = Math.max(0, slack / n);\n lead = gap / 2;\n } else if (isJustify) {\n gap = Math.max(0, slack / Math.max(1, n - 1));\n }\n } else {\n lead = getAlignmentAnchor(justify as Anchor) * slack;\n }\n }\n\n return [gap, lead];\n};\n","import LineBreak from 'linebreak';\nimport { getInlineAlignment } from './cell';\nimport { Align, Style } from './types';\n\nexport const wrapText = (\n context: CanvasRenderingContext2D,\n text: string | number,\n style: Required<Style>,\n itemAlign: Align | undefined,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n emit: (text: string, x: number, y: number) => void,\n) => {\n const { textAlign, lineHeight, fontSize, marginBottom } = style;\n\n const align = itemAlign ?? textAlign;\n context.textAlign = align;\n\n const x = xCoord + getInlineAlignment(cellWidth, 0, align);\n const y = yCoord;\n const s = text.toString();\n const n = s.length;\n\n let xCursor = 0;\n let yCursor = 0;\n let wordsPerLine = 0;\n let startOfLine = 0;\n const newline = (endOfLine: number, ellipsis: boolean = false, endsInSpace: boolean = false) => {\n const line = s.slice(startOfLine, endOfLine - +endsInSpace);\n emit(ellipsis ? line + '…' : line, x, y + yCursor);\n\n startOfLine = endOfLine;\n wordsPerLine = 0;\n xCursor = 0;\n yCursor += lineHeight;\n };\n\n const breaker = new LineBreak(s);\n\n let lastPosition = 0;\n let bk;\n while ((bk = breaker.nextBreak())) {\n const { position, required } = bk;\n const word = s.slice(lastPosition, position);\n\n const { width } = context.measureText(word);\n\n const canNewLine = yCursor + lineHeight + marginBottom < cellHeight;\n const hasMoreText = position < n;\n const endsInSpace = word[word.length - 1] === ' ';\n const ellipsisSpace = !canNewLine && hasMoreText ? (endsInSpace ? 0.5 : 1) * fontSize : 0;\n\n const nextX = xCursor + width + ellipsisSpace;\n if (wordsPerLine && nextX >= cellWidth) {\n if (canNewLine) newline(lastPosition);\n else {\n if (endsInSpace) {\n const { width } = context.measureText(' ');\n xCursor -= width;\n }\n newline(lastPosition, true, endsInSpace);\n return;\n }\n }\n\n xCursor += width;\n wordsPerLine++;\n\n if (required) newline(position);\n\n lastPosition = position;\n }\n\n newline(n);\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { resolveCellFlexLayout } from './cell';\nimport { wrapText } from './text';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number,\n frozenColumns: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n const viewWidth = canvasWidth - cellLayout.columnToAbsolute(x < frozenColumns ? 0 : frozenColumns);\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.marginRight;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n return width + inlineMargin;\n } else if (typeof cellContent === 'object') {\n let totalWidth = inlineMargin;\n\n const { flexGap = 0, items } = cellContent;\n for (const item of items) {\n if (item.absolute) continue;\n\n if (item.width != null) {\n totalWidth += item.width;\n } else if (item.display === 'inline' && item.text != null) {\n const { width } = context.measureText(item.text.toString());\n totalWidth += width;\n }\n totalWidth += flexGap;\n }\n totalWidth -= flexGap;\n\n return totalWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(viewWidth, maxWidth));\n },\n [\n context,\n rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n frozenColumns,\n ],\n );\n\n return getAutoSizeWidth;\n};\n\nexport const useAutoSizeRow = (\n columns: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n canvasHeight: number,\n frozenRows: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeHeight = useCallback(\n (y: number) => {\n if (!context) return 0;\n\n const viewHeight = canvasHeight - cellLayout.rowToAbsolute(y < frozenRows ? 0 : frozenRows);\n\n const measureTextHeight = (text: string, style: Required<Style>, columnWidth: number) => {\n let maxY = 0;\n const measureY = (_t: string, _x: number, y: number) => {\n maxY = y + style.lineHeight;\n };\n wrapText(context, text, style, undefined, 0, 0, columnWidth, viewHeight, measureY);\n return maxY;\n };\n\n const getHeight = (\n cellContent: Exclude<CellContentType, null>,\n style: Required<Style>,\n columnWidth: number,\n ) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const verticalMargin = style.marginTop + style.marginBottom;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const height = measureTextHeight(cellContent.toString(), style, columnWidth);\n return height + verticalMargin;\n } else if (typeof cellContent === 'object') {\n let maxHeight = 0;\n\n const flexLayout = resolveCellFlexLayout(context, cellContent, 0, 0, columnWidth, 0);\n\n for (const { box, item } of flexLayout) {\n if (item.height != null) {\n maxHeight = Math.max(maxHeight, item.height);\n } else if (item.display === 'inline' && item.text != null) {\n const [[left], [right]] = box;\n const height = measureTextHeight(item.text.toString(), style, right - left);\n maxHeight = Math.max(maxHeight, height);\n }\n }\n\n return maxHeight + verticalMargin;\n }\n return 0;\n };\n\n const isHeader = y === -1;\n let maxHeight = SIZES.minimumHeight;\n\n for (const x of columns) {\n const style = isHeader\n ? { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) }\n : { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n\n const cellContent = isHeader ? columnHeaders(x, style) : displayData(x, y, style);\n\n if (cellContent != null) {\n const columnWidth = cellWidth(x) - style.marginLeft - style.marginRight;\n maxHeight = Math.max(maxHeight, getHeight(cellContent, style, columnWidth));\n }\n }\n\n return Math.ceil(Math.min(viewHeight, maxHeight));\n },\n [\n context,\n columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n frozenRows,\n ],\n );\n\n return getAutoSizeHeight;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import { ClipboardPayload, CellPropertyFunction, Change, Rectangle } from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n subXY,\n mulXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nexport type ClipboardTable<T = any> = {\n rows: string[][];\n payload?: ClipboardPayload<T>;\n};\n\nconst EMPTY_TABLE: ClipboardTable = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = () => {\n const [peek, setPeek] = useState<ClipboardTable | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (item) {\n const peek = await parseClipboardTable(item);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek],\n );\n\n return {\n peek,\n canPaste,\n copyTable: copyClipboardTable,\n pasteTable: pasteClipboardTable,\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T = any>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, rows: string[][], cut: boolean) => ClipboardPayload<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n rows: string[][],\n payload?: ClipboardPayload<T>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>,\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable();\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable) => {\n const { rows, payload } = table;\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const selectionSize = mulXY(addXY(subXY(max, min), [1, 1]), [1 / width, 1 / height]);\n const repeatX = Math.max(1, Math.floor(selectionSize[0]));\n const repeatY = Math.max(1, Math.floor(selectionSize[1]));\n\n const newSelection: Rectangle = [min, addXY(min, [width * repeatX - 1, height * repeatY - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, rows, payload);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.flatMap((value, i) => {\n const cells: Change[] = [];\n for (let rx = 0; rx < repeatX; ++rx) {\n for (let ry = 0; ry < repeatY; ++ry) {\n const x = left + i + rx * width;\n const y = top + j + ry * height;\n if (!cellReadOnly?.(x, y)) cells.push({ x, y, value });\n }\n }\n return cells;\n }),\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly],\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const rows = formatSelectionAsRows(selection, editData);\n const payload = onCopy?.(selection, rows, cut);\n\n copyTable(rows, payload);\n\n if (payload?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '' };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly],\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection],\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const table = await parseClipboardTable(clipboardData);\n if (table) pasteIntoSelection(selection, table);\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste],\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async () => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return;\n\n return parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async (item: ClipboardItem | DataTransfer): Promise<ClipboardTable | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row.map(formatTextAsHTML).map((cell) => `<td>${cell}</td>`);\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s.replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`);\n\nconst formatSelectionAsRows = (selection: Rectangle, editData: CellPropertyFunction<string>) => {\n if (isEmptySelection(selection)) return [];\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string,\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll('\\n', '');\n str = str.replaceAll(/\\s\\s+/g, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => columns.getStart(0);\n const getIndentY = () => rows.getStart(0);\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n\n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = columns.getSize(column);\n\n return getIndentX() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = rows.getSize(row);\n\n return getIndentY() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToPixel(cellX, anchorX), rowToPixel(cellY, anchorY)];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToAbsolute(cellX, anchorX), rowToAbsolute(cellY, anchorY)];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (pixel: number, anchor: number, freeze: number, offset: number, layout: LayoutCache) => {\n const { getStart, lookupIndex } = layout;\n\n const indent = getStart(0);\n if (pixel < indent) return 0;\n\n const frozen = getStart(freeze);\n if (pixel < frozen) {\n return lookupIndex(pixel, anchor);\n } else {\n const relative = pixel - indent;\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) =>\n pixelToIndex(pixelX, anchorX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [pixelToColumn(pixelX, anchorX), pixelToRow(pixelY, anchorY)];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const { lookupIndex } = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [absoluteToColumn(pixelX, anchorX), absoluteToRow(pixelY, anchorY)];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n};\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = sizer(-1)\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (sizer: (index: number) => number): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, sizer(-1));\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return sizer(i);\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = offsets.tail() || -1;\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return { getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter };\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => (used[last] ? last : null);\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => (used[i] ? values[i] : null);\n const hasValue = (i: number) => !!used[i];\n\n return { truncate, set: setValue, get: getValue, has: hasValue, tail: getTail };\n};\n","import {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n ImageRenderer,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { resolveCellFlexLayout, resolveCellAbsoluteLayout } from './cell';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { wrapText } from './text';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport {\n COLORS,\n SIZES,\n DEFAULT_CELL_STYLE,\n DEFAULT_COLUMN_HEADER_STYLE,\n HEADER_SELECTED_STYLE,\n HEADER_GROUP_SELECTED_STYLE,\n HEADER_ACTIVE_STYLE,\n NO_STYLE,\n ONE_ONE,\n} from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n dataOffset: XY,\n): CellContentRender[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n freezeColumns,\n freezeRows,\n shadowBlur,\n shadowColor,\n shadowOpacity,\n } = sheetStyle;\n const { columns, rows } = visibleCells;\n const { columnToPixel, rowToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const allClickables: CellContentRender[] = [];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n context.shadowColor = '#00000080';\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const { fillColor } = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, indentX, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, indentX, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, indentY);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, indentY);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? indentX : context.canvas.width;\n const gridBottom = hideGridlines ? indentY : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - 0.5, 0);\n context.lineTo(x - 0.5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - 0.5);\n context.lineTo(width, y - 0.5);\n context.stroke();\n };\n\n drawGridLineX(indentX, context.canvas.height);\n drawGridLineY(indentY, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : NO_STYLE;\n\n const resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n const clickables = renderCell(\n context,\n imageRenderer,\n content,\n resolvedStyle,\n 0,\n top,\n indentX,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n\n for (const column of columns) {\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n const clickables = renderCell(context, imageRenderer, content, style, left, 0, right - left, indentY);\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 1;\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 4;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Draw frozen row/col shadow\n const [scrollX, scrollY] = dataOffset;\n const hasRowShadow = freezeRows > 0 && scrollY > 0;\n const hasColumnShadow = freezeColumns > 0 && scrollX > 0;\n if (hasRowShadow || hasColumnShadow) {\n if (hasRowShadow) {\n const h = rowToAbsolute(freezeRows);\n const gradient = context.createLinearGradient(0, h, 0, h + shadowBlur);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(0, h, width, shadowBlur);\n }\n if (hasColumnShadow) {\n const w = columnToAbsolute(freezeColumns);\n const gradient = context.createLinearGradient(w, 0, w + shadowBlur, 0);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(w, 0, shadowBlur, height);\n }\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n const clickables = renderCell(\n context,\n imageRenderer,\n cellContent,\n style,\n left,\n top,\n right - left,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n }\n\n return allClickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] | null => {\n if (cellContent === null) {\n return null;\n }\n\n const fillText = context.fillText.bind(context);\n const fontString = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n context.font = fontString;\n context.fillStyle = style.color;\n\n // Apply cell margins\n const { marginTop, marginBottom, marginLeft, marginRight, lineHeight } = style;\n\n const innerX = Math.round(xCoord + marginLeft);\n const innerY = Math.round(yCoord + marginTop);\n const innerWidth = Math.round(cellWidth - marginRight - marginLeft);\n const innerHeight = Math.round(cellHeight - marginTop - marginBottom);\n\n // Snap to device-pixels for better alignment\n const middleY = roundDpi(yCoord + marginTop + lineHeight / 2);\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n wrapText(context, cellContent, style, undefined, innerX, middleY, innerWidth, innerHeight, fillText);\n });\n return null;\n } else if (typeof cellContent === 'object') {\n const renderedFlex = resolveCellFlexLayout(context, cellContent, innerX, innerY, innerWidth, innerHeight);\n const renderedAbsolute = resolveCellAbsoluteLayout(cellContent, innerX, innerY, innerWidth, innerHeight);\n const rendered = [...renderedFlex, ...renderedAbsolute];\n\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n for (const [i, render] of rendered.entries()) {\n const { box, item } = render;\n\n const [[left, top], [right, bottom]] = box;\n\n const width = right - left;\n const height = bottom - top;\n\n if (cellContent.inspect) {\n context.lineWidth = 1;\n context.strokeStyle = '#ff00ff';\n context.strokeRect(left + 0.5, top + 0.5, width - 0.5, height - 0.5);\n }\n\n const clipLeft = i > 0 ? left : xCoord;\n const clipRight = i < rendered.length ? right : yCoord + cellWidth;\n const clipWidth = clipRight - clipLeft;\n\n clipToBox(context, clipLeft, yCoord, clipWidth, cellHeight, () => {\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n wrapText(\n context,\n text,\n style,\n item.textAlign,\n left,\n roundDpi(top + lineHeight / 2),\n width,\n height,\n fillText,\n );\n }\n }\n if (item.display === 'image' || item.display === 'icon') {\n imageRenderer(context, item, style, box);\n }\n });\n }\n });\n\n return rendered.filter(({ item }) => item?.onClick);\n }\n return null;\n};\n\nconst clipToBox = (\n context: CanvasRenderingContext2D,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n callback: () => void,\n) => {\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n callback();\n context.restore();\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (selection: Rectangle, cellLayout: CellLayout) => {\n const { cellToPixel } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n offset: XY,\n) => {\n const { cellToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get fixed indent\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [\n [left, top],\n [right, bottom],\n ],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n }\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n\nconst halfShadowGradient = (gradient: CanvasGradient, rgb: string, opacity: number) => {\n const hex = (x: number) => ('0' + Math.round(x).toString(16)).slice(-2);\n // Half-sine ease\n const ease = (x: number) => 1.0 - Math.sin((x * Math.PI) / 2);\n // Gamma adjustment assuming blend on white\n const adjust = (x: number) => 1.0 - Math.pow(1.0 - x, 2.2);\n for (let i = 0; i <= 16; ++i) {\n const f = i / 16;\n gradient.addColorStop(f, rgb + hex(adjust(opacity * ease(f) * 0.5) * 255));\n }\n};\n\n// Move down half a logical pixel on high-dpi\nexport const getDpiNudge = () => {\n const { devicePixelRatio } = window;\n return (devicePixelRatio - 1) / devicePixelRatio;\n};\n\n// Round to device pixels instead of logical pixels, and nudge downwards on high-dpi for baseline alignment\nexport const roundDpi = (y: number) => {\n const { devicePixelRatio } = window;\n return Math.round((y + getDpiNudge()) * devicePixelRatio) / devicePixelRatio;\n};\n","import { InternalSheetStyle, SheetStyle } from './types';\nimport { COLORS, SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellContentRender,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardPayload,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n DEFAULT_CELL_STYLE,\n INITIAL_MAX_SCROLL,\n NO_CELL,\n NO_CLICKABLES,\n NO_SELECTION,\n NO_SELECTIONS,\n ORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n validateSelection,\n isSameRectangle,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useImageRenderer } from './image';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn, useAutoSizeRow } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet, getDpiNudge } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: string) => void;\n style: InputStyle;\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout;\n cellLayout: CellLayout;\n selection: Rectangle;\n editMode: boolean;\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnPropertyStyled<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n columnGroupKeys?: RowOrColumnProperty<string | number | null>;\n rowGroupKeys?: RowOrColumnProperty<string | number | null>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellPropertyStyled<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle;\n secondarySelections?: Selection[];\n\n maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: boolean;\n\n autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void,\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode;\n renderOutside?: (props: SheetRenderProps) => React.ReactNode;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n\n onCopy?: (selection: Rectangle, cells: string[][]) => ClipboardPayload<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n cells: string[][],\n payload: ClipboardPayload<any>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [rawSelection, setRawSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([null, null]);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: overlayRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(\n () => createRowOrColumnProp(props.columnHeaderStyle, {}),\n [props.columnHeaderStyle],\n );\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const rowGroupKeys = useMemo(() => createRowOrColumnProp(props.rowGroupKeys, null), [props.rowGroupKeys]);\n const columnGroupKeys = useMemo(() => createRowOrColumnProp(props.columnGroupKeys, null), [props.columnGroupKeys]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellStyledProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\n\n const selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection],\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection],\n );\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const shouldCacheLayout = (props.cacheLayout ?? false) !== false;\n const layoutVersion = typeof props.cacheLayout === 'number' ? props.cacheLayout : 0;\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [shouldCacheLayout ? layoutVersion : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [shouldCacheLayout ? layoutVersion : cellHeight]);\n useMemo(() => {\n if (!shouldCacheLayout) return;\n\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n\n // Depend on layoutVersion to allow for controlled external invalidation\n // eslint-disable-next-line\n }, [shouldCacheLayout, layoutVersion, cellWidth, cellHeight]);\n\n // Virtual layout for indented/scrolled/frozen grid\n const { freezeColumns, freezeRows } = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout([freezeColumns, freezeRows], dataOffset, columnLayout, rowLayout),\n [freezeColumns, freezeRows, dataOffset, columnLayout, rowLayout],\n );\n\n // Build range of visible cells\n const { getVisibleCells, cellToPixel, getVersion } = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()],\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n },\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameRectangle(selection, newSelection)) {\n setRawSelection(newSelection);\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<CellContentRender[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste,\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n freezeColumns,\n );\n\n const getAutoSizeHeight = useAutoSizeRow(\n visibleCells.columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n freezeRows,\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n overlayRef,\n dataOffset,\n\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n getAutoSizeHeight,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n props.dontChangeSelectionOnOrderChange,\n );\n\n const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange,\n );\n\n const imageRenderer = useImageRenderer();\n\n useLayoutEffect(() => {\n const { current: canvas } = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n imageRenderer,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n ]);\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextAlign: 'right' | 'left' | 'center' = 'right';\n let editTextLineHeight = '';\n let editTextMargin = '';\n let editTextFontSize = DEFAULT_CELL_STYLE.fontSize;\n let editTextFontFamily = DEFAULT_CELL_STYLE.fontFamily;\n let editTextFontWeight = DEFAULT_CELL_STYLE.fontWeight;\n if (editMode) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(...editCell) };\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextAlign = style.textAlign;\n editTextLineHeight = `${style.lineHeight}px`;\n editTextFontSize = style.fontSize;\n editTextFontFamily = style.fontFamily;\n editTextFontWeight = style.fontWeight;\n\n // Deduct border + apply high-dpi nudge to line up with render\n const yNudge = getDpiNudge();\n editTextMargin = `${style.marginTop - 1 + yNudge}px ${style.marginRight - 2}px ${style.marginBottom - 2}px ${style.marginLeft - 1}px`;\n\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: editTextMargin,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextAlign,\n lineHeight: editTextLineHeight,\n color: 'black',\n fontSize: editTextFontSize,\n fontFamily: editTextFontFamily,\n fontWeight: editTextFontWeight,\n resize: 'none',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell,\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n outline: 0,\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: canvasWidth,\n height: canvasHeight,\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n }\n\n const renderedInside = useMemo(\n () => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderInside, visibleCells, cellLayout, selection, editMode],\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode],\n );\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, startEditingCell],\n );\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <textarea\n {...inputProps}\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","shadowColor","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","shadowBlur","shadowOpacity","DEFAULT_CELL_STYLE","textAlign","fontSize","lineHeight","marginTop","marginBottom","marginLeft","marginRight","color","fontFamily","fontWeight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameRectangle","a1","a2","b1","b2","isPointInsideRectangle","rectangle","point","_rectangle$","left","top","_rectangle$2","right","bottom","y","forRange","callback","forSelectionColumns","selection","_normalizeSelection","normalizeSelection","_normalizeSelection$","_normalizeSelection$2","forSelectionRows","_normalizeSelection2","_normalizeSelection2$","_normalizeSelection2$2","forToMap","forLoop","out","push","apply","arguments","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","_selection$","_selection$2","isMaybeColumnSelection","_selection$3","_selection$4","isRowSelection","_selection$5","_selection$6","isColumnSelection","_selection$7","_selection$8","isCellSelection","_selection$9","_selection$10","isEmptySelection","_selection$11","_selection$12","isPointInsideSelection","_normalizeSelection3","_normalizeSelection3$","_normalizeSelection3$2","validateSelection","anchor","head","slice","orientSelection","normalized","to","_normalized$","_normalized$2","ax","ay","hx","hy","swapX","swapY","DEFAULT_ICON_SIZE","svgToImage","icon","image","Image","iconAsString","renderToString","base64String","window","btoa","src","err","console","log","useImageRenderer","_useState","useState","setVersion","_useState2","canvasWidth","setCanvasWidth","_useState3","canvasHeight","setCanvasHeight","imageMap","useMemo","Map","loadImage","useCallback","get","set","dpi","devicePixelRatio","iconContext","canvas","document","createElement","width","height","context","getContext","willReadFrequently","renderContext","item","style","box","display","complete","onload","v","w","h","_box$","_box$2","drawImage","_item$color","rgba","toRGBA","_rgba$","r","_rgba$2","g","_rgba$3","_rgba$4","wDpi","hDpi","clearRect","imageData","getImageData","data","putImageData","e","error","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","floor","xx","findInDisplayData","displayData","step","cell","_addXY","firstFilled","_cell","cellX","cellY","maxX","maxY","_cell2","useMouse","elementRef","dataOffset","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","getAutoSizeHeight","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","_useState4","rowDrag","setRowDrag","_useState5","hitTestDown","setHitTestDown","_useState6","autoScroll","setAutoScroll","_useState7","draggingKnob","setDraggingKnob","_useState8","draggingSelection","setDraggingSelection","_useState9","draggingRowSelection","setDraggingRowSelection","_useState10","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","refState","ref","useRef","current","getMousePosition","strict","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getMouseOutOfBounds","allowX","allowY","indentX","getIndentX","indentY","getIndentY","xSign","ySign","getMouseHit","hitmap","_iterator","_createForOfIteratorHelperLoose","_step","done","object","value","onPointerLeave","body","cursor","onPointerDown","_ref$current","_ref$current$cellLayo","columnToPixel","rowToPixel","pixelToCell","_ref$current$visibleC","columns","rows","button","_e$target","_e$target$setPointerC","setPointerCapture","call","pointerId","hitTarget","minX","minY","selectedColumns","selectedRows","_iterator2","_step2","indices","Set","concat","filter","values","sort","dragIndices","clickSelection","_expandSelectionToRow","_expandSelectionToRow2","_expandSelectionToRow3","connected","dragStart","dragEnd","size","offset","_i","_arr","edge","abs","asGroup","_iterator3","_step3","_expandSelectionToRow4","_expandSelectionToRow5","_expandSelectionToRow6","_i2","_arr2","knobX","knobY","shiftKey","scrollTo","onPointerUp","_ref$current2","_ref$current2$cellLay","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","_ref$current3","_ref$current3$cellLay","isDraggingX","isDraggingY","isDragging","outOfBounds","preventDefault","getDragScrollOffset","startOffset","_iterator4","_step4","_i3","_arr3","_iterator5","_step5","_i4","_arr4","_getDragScrollOffset","scrollOffset","newWidth","round","_getDragScrollOffset2","newHeight","anchorX","anchorY","headX","headY","_pixelToCell","_normalizeSelection4","_normalizeSelection4$","_normalizeSelection4$2","xCellDiff","yCellDiff","shift","_getDragScrollOffset3","_getDragScrollOffset4","onClick","mouseHit","_mouseHit$item","_mouseHit$item$onClic","onDoubleClick","_ref$current4","_ref$current4$cellLay","autosized","_iterator6","_step6","_normalizeSelection5","_normalizeSelection5$","_normalizeSelection5$2","_i5","_autosized","column","_i6","_arr5","_normalizeSelection6","_normalizeSelection6$","_normalizeSelection6$2","_i7","_autosized3","row","editCell","onContextMenu","_ref$current$cellLayo2","event","_extends","useLayoutEffect","loop","element","speed","scrollLeft","scrollTop","timer","setInterval","clearInterval","mouseHandlers","_normalizeSelection7","_normalizeSelection7$","kx1","ky1","_normalizeSelection7$2","kx2","ky2","_normalizeSelection8","_normalizeSelection8$","sx1","sy1","_normalizeSelection8$2","sx2","sy2","fx1","fy1","fx2","fy2","_findApproxMaxEditDat","srcY","source","_findApproxMaxEditDat2","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","_subXY","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","_getViewExtent","getViewExtent","_getViewExtent$edge","leftEdge","topEdge","_getViewExtent$viewpo","viewport","scrollW","scrollH","remainder","_cellToAbsolute","frozenX","frozenY","scrollToCell","offsetX","offsetY","origin","frozen","_cellToPixel","_cellToPixel2","newOffset","scroll","setTimeout","updateScrollPosition","_subXY2","scrollX","scrollY","getInlineAlignment","cellWidth","contentWidth","align","measureFlexWidth","text","_context$measureText","measureText","toString","actualBoundingBoxLeft","actualBoundingBoxRight","Error","resolveCellFlexLayout","cellContent","cellLeft","cellTop","cellHeight","_cellContent$flexJust","flexJustify","_cellContent$flexAlig","flexAlign","_cellContent$flexGap","flexGap","items","flexItems","absolute","measuredWidths","sizes","grows","shrinks","forEach","defaultGrow","defaultShrink","_item$width","_item$flexGrow","flexGrow","_item$flexShrink","flexShrink","_item$marginLeft","_item$marginRight","slackX","growRow","shrinkRow","_getAlignmentSpacing","getAlignmentSpacing","gapX","leadX","combinedGapX","maxHeight","_ref","_ref$marginTop","_ref$marginBottom","reduce","slackY","getAlignmentAnchor","leftCursor","fixedHeight","_item$marginLeft2","_item$marginRight2","_item$marginTop","_item$marginBottom","_item$flexAlignSelf","flexAlignSelf","marginX","marginY","slackSelfY","offsetSelfY","boxW","boxH","resolveCellAbsoluteLayout","absoluteItems","resolvePosition","container","marginStart","marginEnd","resolveSize","span","l","t","slack","grow","weight","shrink","negative","isStart","isEnd","justify","gap","lead","isJustify","isBetween","isEvenly","wrapText","itemAlign","xCoord","yCoord","emit","xCursor","yCursor","wordsPerLine","startOfLine","newline","endOfLine","ellipsis","endsInSpace","line","breaker","LineBreak","lastPosition","bk","nextBreak","_bk","position","required","word","canNewLine","hasMoreText","ellipsisSpace","nextX","_context$measureText2","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","frozenColumns","viewWidth","getWidth","font","inlineMargin","totalWidth","maxWidth","headerStyle","headerContent","ceil","useAutoSizeRow","frozenRows","viewHeight","measureTextHeight","columnWidth","measureY","_t","_x","getHeight","verticalMargin","flexLayout","_step3$value","isHeader","EMPTY_TABLE","useClipboardTable","peek","setPeek","softRefresh","Promise","resolve","navigator","permissions","query","name","then","status","state","hardRefresh","clipboard","read","_temp","parseClipboardTable","_temp2","reject","delayedRefresh","addEventListener","removeEventListener","canPaste","_peek$rows","copyTable","copyClipboardTable","pasteTable","pasteClipboardTable","useClipboardAPI","addListener","onCopy","onPaste","_useClipboardTable","pasteIntoSelection","table","payload","selectionSize","repeatX","repeatY","newSelection","shouldPaste","flatMap","j","cells","rx","ry","change","copySelection","cut","formatSelectionAsRows","_payload$cut","pasteSelection","onClipboardPaste","clipboardData","clipboardApi","canPasteSelection","formatRowsAsTSV","html","formatRowsAsHTML","write","ClipboardItem","Blob","type","Event","dispatchEvent","types","includes","getData","getType","blob","_temp4","pastedHtml","_parsePastedHtml","parsePastedHtml","_temp6","parsePastedText","_temp5","join","trs","tds","formatTextAsHTML","extra","JSON","stringify","replace","charCodeAt","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","tableChild","tr","td","str","p","textContent","replaceAll","split","INITIAL_SIZE","makeCellLayout","getStart","getBaseOriginFor","base","relative","adjust","getSize","_anchor","_anchor2","pixelToIndex","pixel","layout","lookupIndex","indent","pixelX","pixelY","_anchor3","absoluteToIndex","_anchor4","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","getTail","setValue","getValue","hasValue","renderSheet","imageRenderer","secondarySelections","isFocused","dragOffset","hideGridlines","freezeColumns","freezeRows","allClickables","resizeCanvas","fillStyle","fillRect","_iterator10","_step10","_cellStyle","selectionActive","rowSelectionActive","columnSelectionActive","_resolveFrozenSelecti","resolveFrozenSelection","selected","hideKnob","_selected$","_selected$2","_selected$3","_selected$4","_selected$5","_selected$6","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","content","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","clickables","renderCell","_columnHeaders","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","_selected$7","_selected$8","strokeRect","secondarySelection","_resolveFrozenSelecti2","_selected$9","_selected$10","setLineDash","shiftX","shiftY","dragColumns","dragRows","_iterator7","_step7","_iterator8","_step8","_resolveSelection","resolveSelection","_resolveSelection$","_resolveSelection$2","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","_iterator9","_step9","_iterator11","_step11","fillText","bind","fontString","innerX","innerY","innerWidth","innerHeight","middleY","roundDpi","clipToBox","renderedFlex","renderedAbsolute","rendered","_step12$value","_step12","render","inspect","clipLeft","clipRight","clipWidth","_iterator12","entries","_loop","save","clip","restore","_cellToPixel3","_cellToPixel4","lastInvisibleX","lastInvisibleY","_canvas$getBoundingCl","_window","_window$devicePixelRa","ratio","newCanvasWidth","newCanvasHeight","scale","num","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","getDpiNudge","_window2","_window3","resolveSheetStyle","hideScrollBars","_sheetStyle$shadowBlu","_sheetStyle$shadowOpa","_sheetStyle$shadowCol","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","_props$selection","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","lastSelectionProp","setLastSelectionProp","_useState11","editValue","setEditValue","_useState12","setArrowKeyCommitMode","_useResizeObserver","useResizeObserver","_useResizeObserver$wi","_useResizeObserver$he","readOnly","editKeys","_props$secondarySelec","editCellX","editCellY","shouldCacheLayout","_props$cacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","_props$maxColumns","Infinity","_props$maxRows","_useClipboardAPI","onScroll","_useMouse","_useKeyboard","animationFrameId","requestAnimationFrame","cancelAnimationFrame","_useState13","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextAlign","editTextLineHeight","editTextMargin","editTextFontSize","editTextFontFamily","editTextFontWeight","yNudge","editKey","_editTextPosition","textX","textY","inputProps","onKeyDown","padding","outline","border","resize","input","_props$inputComponent","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","_props$renderInside","renderInside","renderedOutside","_props$renderOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/constants.ts","../src/util.ts","../src/coordinate.ts","../src/image.ts","../src/group.ts","../src/props.ts","../src/mouse.ts","../src/keyboard.ts","../src/scroll.ts","../src/cell.ts","../src/text.ts","../src/autosize.ts","../node_modules/babel-plugin-transform-async-to-promises/helpers.js","../src/clipboard.ts","../src/layout.ts","../src/render.ts","../src/style.ts","../src/sheet.tsx"],"sourcesContent":["import { CellContentRender, XY, Rectangle, Selection, Direction, Style } from './types';\n\nexport const INITIAL_MAX_SCROLL: XY = [2000, 1000];\n\nexport const ORIGIN: XY = [0, 0];\nexport const ONE_ONE: XY = [1, 1];\nexport const NEG_NEG: XY = [-1, -1];\n\nexport const NO_CELL: XY = [-1, -1];\nexport const NO_SELECTION: Rectangle = [NO_CELL, NO_CELL];\nexport const NO_SELECTIONS: Selection[] = [];\nexport const NO_CLICKABLES: CellContentRender[] = [];\nexport const NO_STYLE = {};\n\nexport const MAX_SEARCHABLE_INDEX = 100000;\n\nexport const COLORS = {\n selectionBorder: '#1a66ff',\n selectionBackground: '#d8e6ff80',\n\n gridLine: '#0000001f',\n\n dragGhost: '#1a66ff30',\n dropTarget: '#1a66ff',\n knobAreaBorder: '#707070',\n\n headerBackground: '#f6f9fc',\n headerText: '#666666',\n headerActive: '#e8f0ff',\n headerActiveText: '#1a66ff',\n\n headerSelected: '#1a66ff',\n headerSelectedGroup: '#1a66ff70',\n headerSelectedText: '#ffffff',\n headerSelectedGroupText: '#ffffff',\n\n shadowColor: '#000000',\n};\n\nexport const SIZES = {\n knobArea: 6,\n headerWidth: 50,\n headerHeight: 22,\n minimumWidth: 50,\n minimumHeight: 22,\n resizeZone: 4,\n scrollZone: 50,\n scrollSpeed: 30,\n\n shadowBlur: 12,\n shadowOpacity: 0.05,\n};\n\nexport const DEFAULT_CELL_STYLE: Required<Style> = {\n textAlign: 'left',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginLeft: 5,\n marginRight: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const DEFAULT_COLUMN_HEADER_STYLE: Required<Style> = {\n textAlign: 'center',\n fontSize: 12,\n lineHeight: 16,\n marginTop: 3,\n marginBottom: 3,\n marginRight: 5,\n marginLeft: 5,\n color: '#000',\n fontFamily: 'sans-serif',\n fontWeight: '',\n fillColor: '',\n backgroundColor: '',\n};\n\nexport const HEADER_ACTIVE_STYLE = {\n color: COLORS.headerActiveText,\n};\n\nexport const HEADER_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelected,\n color: COLORS.headerSelectedText,\n};\n\nexport const HEADER_GROUP_SELECTED_STYLE = {\n backgroundColor: COLORS.headerSelectedGroup,\n color: COLORS.headerSelectedGroupText,\n};\n\nexport const ARROW_KEYS: Record<string, Direction> = {\n ArrowRight: 'right',\n ArrowLeft: 'left',\n ArrowUp: 'up',\n ArrowDown: 'down',\n};\n","export const tail = <T>(list: T[]): T => list[list.length - 1];\n\nexport const clamp = (x: number, min: number, max: number) => Math.max(Math.min(max, x), min);\n\nexport const seq = (n: number, s: number = 0, d: number = 1): number[] =>\n Array.from({ length: n }).map((_, i: number) => s + d * i);\n\nexport const isInRange = (x: number, min: number, max: number) => min <= x && x <= max;\nexport const isInRangeLeft = (x: number, min: number, max: number) => min <= x && x < max;\nexport const isInRangeRight = (x: number, min: number, max: number) => min < x && x <= max;\nexport const isInRangeCenter = (x: number, min: number, max: number) => min < x && x < max;\n","import { XY, Rectangle } from './types';\nimport { clamp } from './util';\n\nexport const addXY = (a: XY, b: XY): XY => [a[0] + b[0], a[1] + b[1]];\nexport const subXY = (a: XY, b: XY): XY => [a[0] - b[0], a[1] - b[1]];\nexport const mulXY = (a: XY, b: XY): XY => [a[0] * b[0], a[1] * b[1]];\nexport const maxXY = (a: XY, b: XY): XY => [Math.max(a[0], b[0]), Math.max(a[1], b[1])];\nexport const minXY = (a: XY, b: XY): XY => [Math.min(a[0], b[0]), Math.min(a[1], b[1])];\nexport const clampXY = (p: XY, min: XY, max: XY = [Infinity, Infinity]): XY => [\n clamp(p[0], min[0], max[0]),\n clamp(p[1], min[1], max[1]),\n];\n\nexport const getDirectionStep = (direction: string): XY => {\n if (direction === 'left') return [-1, 0];\n if (direction === 'right') return [1, 0];\n if (direction === 'up') return [0, -1];\n if (direction === 'down') return [0, 1];\n return [0, 0];\n};\n\nexport const isSameXY = (a: XY, b: XY) => a[0] === b[0] && a[1] === b[1];\n\nexport const isSameRectangle = (a: Rectangle, b: Rectangle) => {\n const [a1, a2] = a;\n const [b1, b2] = b;\n return isSameXY(a1, b1) && isSameXY(a2, b2);\n};\n\nexport const isPointInsideRectangle = (rectangle: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = rectangle;\n const [x, y] = point;\n return x >= left && x < right && y >= top && y < bottom;\n};\n\nexport const forRange = (min: number, max: number, callback: (i: number) => void) => {\n for (let i = min; i <= max; ++i) callback(i);\n};\n\nexport const forSelectionColumns = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[left], [right]] = normalizeSelection(selection);\n forRange(left, right, callback);\n};\n\nexport const forSelectionRows = (selection: Rectangle) => (callback: (i: number) => void) => {\n const [[, top], [, bottom]] = normalizeSelection(selection);\n forRange(top, bottom, callback);\n};\n\nconst forToMap =\n <A extends Array<any>>(forLoop: (callback: (...args: A) => void) => void) =>\n <B>(map: (...args: A) => B) => {\n const out: B[] = [];\n forLoop((...args: A) => out.push(map(...args)));\n return out;\n };\n\nexport const mapSelectionColumns = (selection: Rectangle) => forToMap(forSelectionColumns(selection));\nexport const mapSelectionRows = (selection: Rectangle) => forToMap(forSelectionRows(selection));\n\n// Selection is infinite horizontally\nexport const isMaybeRowSelection = (selection: Rectangle) => {\n const [[left], [right]] = selection;\n return left === -1 && right === -1;\n};\n\n// Selection is infinite vertically\nexport const isMaybeColumnSelection = (selection: Rectangle) => {\n const [[, top], [, bottom]] = selection;\n return top === -1 && bottom === -1;\n};\n\n// Selection is ONLY infinite horizontally\nexport const isRowSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is ONLY infinite vertically\nexport const isColumnSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return top === -1 && bottom === -1 && left !== -1 && right !== -1;\n};\n\n// Selection is not infinite\nexport const isCellSelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left !== -1 && right !== -1 && top !== -1 && bottom !== -1;\n};\n\n// Selection is null\nexport const isEmptySelection = (selection: Rectangle) => {\n const [[left, top], [right, bottom]] = selection;\n return left === -1 && right === -1 && top === -1 && bottom === -1;\n};\n\n// Test cell inside selection (inclusive edges)\nexport const isPointInsideSelection = (selection: Rectangle, point: XY) => {\n const [[left, top], [right, bottom]] = normalizeSelection(selection);\n const [x, y] = point;\n return x >= left && x <= right && y >= top && y <= bottom;\n};\n\n// Validate selections to avoid half-infinite anchor/head\nexport const validateSelection = (selection: Rectangle): Rectangle => {\n let [anchor, head] = selection;\n anchor = anchor.slice() as XY;\n head = head.slice() as XY;\n\n const min = minXY(anchor, head);\n if (min[0] === -1) anchor[0] = head[0] = -1;\n if (min[1] === -1) anchor[1] = head[1] = -1;\n\n return [anchor, head];\n};\n\n// Normalize rectangle to min/max pair\nexport const normalizeSelection = (selection: Rectangle): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, head), maxXY(anchor, head)];\n};\n\n// Orient normalized rectangle to match existing orientation\nexport const orientSelection = (normalized: Rectangle, to: Rectangle): Rectangle => {\n const [[left, top], [right, bottom]] = normalized;\n\n const [anchor, head] = to;\n const [ax, ay] = anchor;\n const [hx, hy] = head;\n\n const swapX = (ax - hx || 1) * (right - left || 1) < 0;\n const swapY = (ay - hy || 1) * (bottom - top || 1) < 0;\n\n return [\n [swapX ? right : left, swapY ? bottom : top],\n [swapX ? left : right, swapY ? top : bottom],\n ];\n};\n\n// Clip rectangle to max range\nexport const clipSelection = (selection: Rectangle, max: XY): Rectangle => {\n const [anchor, head] = selection;\n return [minXY(anchor, max), minXY(head, max)];\n};\n","import { ReactElement, useCallback, useMemo, useState } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport toRGBA from 'color-rgba';\nimport { CellContentItem, Rectangle, Style } from './types';\n\nconst DEFAULT_ICON_SIZE = 32;\n\nexport const svgToImage = (icon: ReactElement | string): HTMLImageElement => {\n const image = new Image();\n try {\n const iconAsString = typeof icon === 'string' ? icon : renderToString(icon);\n const base64String = window.btoa(iconAsString);\n image.src = `data:image/svg+xml;base64,${base64String}`;\n } catch (err) {\n console.log(err);\n }\n return image;\n};\n\nexport const useImageRenderer = () => {\n const [, setVersion] = useState(0);\n\n const [canvasWidth, setCanvasWidth] = useState(DEFAULT_ICON_SIZE);\n const [canvasHeight, setCanvasHeight] = useState(DEFAULT_ICON_SIZE);\n\n const imageMap = useMemo(() => new Map<string, HTMLImageElement>(), []);\n const loadImage = useCallback(\n (src: string): HTMLImageElement => {\n let image = imageMap.get(src);\n if (image) return image;\n\n image = new Image();\n image.src = src;\n imageMap.set(src, image!);\n return image!;\n },\n [imageMap],\n );\n\n const dpi = window.devicePixelRatio;\n const iconContext = useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth * dpi;\n canvas.height = canvasHeight * dpi;\n\n const context = canvas.getContext('2d', { willReadFrequently: true }) as any as CanvasRenderingContext2D;\n return context;\n }, [canvasWidth, canvasHeight, dpi]);\n\n return (\n renderContext: CanvasRenderingContext2D,\n item: CellContentItem & { display: 'image' | 'icon' },\n style: Required<Style>,\n box: Rectangle,\n ) => {\n if (!iconContext) return;\n\n const { display } = item;\n\n const image = 'image' in item ? item.image : 'src' in item ? loadImage(item.src) : null;\n if (!image) return;\n\n if (!image.complete) {\n if (!image.onload) {\n image.onload = () => {\n setVersion((v) => v + 1);\n setCanvasWidth((w) => Math.max(w, image.width));\n setCanvasHeight((h) => Math.max(h, image.height));\n };\n }\n return;\n } else {\n if (canvasWidth < image.width) setCanvasWidth((w) => Math.max(w, image.width));\n if (canvasHeight < image.height) setCanvasHeight((h) => Math.max(h, image.height));\n }\n\n const [[left, top], [right, bottom]] = box;\n const width = right - left;\n const height = bottom - top;\n\n if (display === 'image') {\n // Draw image directly\n renderContext.drawImage(image, 0, 0, image.width, image.height, left, top, width, height);\n } else if (display === 'icon') {\n // Recolor icon according to text color style\n const color = item.color ?? style.color;\n const rgba = toRGBA(color);\n const [r = 0, g = 0, b = 0, a = 1] = rgba;\n\n try {\n const wDpi = width * dpi;\n const hDpi = height * dpi;\n\n iconContext.clearRect(0, 0, wDpi, hDpi);\n iconContext.drawImage(image, 0, 0, image.width, image.height, 0, 0, wDpi, hDpi);\n\n const imageData = iconContext.getImageData(0, 0, wDpi, hDpi);\n const { data } = imageData;\n const n = data.length;\n\n for (let i = 0; i < n; i += 4) {\n data[i] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = data[i + 3] * a;\n }\n\n iconContext.putImageData(imageData, 0, 0, 0, 0, wDpi, hDpi);\n renderContext.drawImage(iconContext.canvas, 0, 0, wDpi, hDpi, left, top, width, height);\n } catch (e) {\n console.error(e);\n }\n }\n };\n};\n","import { XY, Rectangle, RowOrColumnPropertyFunction } from './types';\nimport { normalizeSelection, orientSelection } from './coordinate';\n\nconst LIMIT = 1000;\n\nconst scanGroup = (\n keys: RowOrColumnPropertyFunction<string | number | null>,\n index: number,\n direction: number,\n matchKeys: Set<string | number | null>,\n) => {\n let i = 1;\n const limit = direction > 0 ? LIMIT : Math.min(LIMIT, index + 1);\n for (; i < limit; i++) {\n const key = keys(index + i * direction);\n if (key == null || !matchKeys.has(key)) break;\n }\n return index + (i - 1) * direction;\n};\n\n// Expand a selection to its adjacent row or column group\nexport const expandSelectionToRowOrColumnGroups = (\n selection: Rectangle,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n matchKeys: Set<string | number | null> | null,\n coordinate: number, // 0/1 for X/Y\n) => {\n if (!matchKeys) return selection;\n\n const [first, second] = normalizeSelection(selection);\n\n const start = first[coordinate];\n const end = second[coordinate];\n\n const startIndex = scanGroup(groupKeys, start, -1, matchKeys);\n const endIndex = scanGroup(groupKeys, end, 1, matchKeys);\n\n const expanded: Rectangle = [first.slice() as XY, second.slice() as XY];\n expanded[0][coordinate] = startIndex;\n expanded[1][coordinate] = endIndex;\n\n const oriented = orientSelection(expanded, selection);\n return oriented;\n};\n\nexport const isBoundaryInsideGroup = (\n index: number,\n groupKeys: RowOrColumnPropertyFunction<string | number | null>,\n) => {\n const before = groupKeys(index - 1);\n const after = groupKeys(index);\n return before != null && after != null && before === after;\n};\n","import {\n Direction,\n XY,\n CellContentType,\n CellProperty,\n CellPropertyFunction,\n CellPropertyStyled,\n CellPropertyStyledFunction,\n PropTypes,\n RowOrColumnProperty,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyled,\n RowOrColumnPropertyStyledFunction,\n} from './types';\nimport { MAX_SEARCHABLE_INDEX, ORIGIN, DEFAULT_CELL_STYLE } from './constants';\nimport { addXY, subXY, maxXY, getDirectionStep } from './coordinate';\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnProp = <T extends PropTypes>(\n rowColProp: RowOrColumnProperty<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellProp = <T extends PropTypes>(\n cellProp: CellProperty<T> | undefined,\n defaultValue: T,\n): CellPropertyFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject row/column props from an array, function, constant or default value\nexport const createRowOrColumnStyledProp = <T extends PropTypes>(\n rowColProp: RowOrColumnPropertyStyled<T> | undefined,\n defaultValue: T,\n): RowOrColumnPropertyStyledFunction<T> => {\n if (Array.isArray(rowColProp)) {\n return (rowOrColIndex: number) => {\n if (rowOrColIndex >= 0 && rowOrColIndex < rowColProp.length) {\n return rowColProp[rowOrColIndex];\n } else {\n return defaultValue;\n }\n };\n } else if (typeof rowColProp === 'function') {\n return rowColProp;\n } else if (rowColProp !== null && rowColProp !== undefined) {\n return () => rowColProp;\n } else {\n return () => defaultValue;\n }\n};\n\n// Inject cell props from a nested array, function, constant or default value\nexport const createCellStyledProp = <T extends PropTypes>(\n cellProp: CellPropertyStyled<T> | undefined,\n defaultValue: T,\n): CellPropertyStyledFunction<T> => {\n if (Array.isArray(cellProp)) {\n return (x: number, y: number) => {\n if (y >= 0 && y < cellProp.length) {\n if (x >= 0 && x < cellProp[y].length) {\n return cellProp[y][x];\n } else {\n return defaultValue;\n }\n } else {\n return defaultValue;\n }\n };\n } else if (typeof cellProp === 'function') {\n return cellProp;\n } else if (cellProp !== null && cellProp !== undefined) {\n return () => cellProp;\n } else {\n return () => defaultValue;\n }\n};\n\nexport const findApproxMaxEditDataIndex = (editData: CellPropertyFunction<string>): XY => {\n let x = 0;\n let y = 0;\n let howManyEmpty = 0;\n let growthIncrement = 10;\n let growthIncrementFactor = 1.5;\n\n // x\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let yy = 0; yy < 10; yy++) {\n const data = editData(x, yy);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n x += growthIncrement;\n if (x > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n\n howManyEmpty = 0;\n growthIncrement = 10;\n growthIncrementFactor = 1.5;\n\n // y\n while (howManyEmpty < 4) {\n let allEmpty = true;\n for (let xx = 0; xx < 10; xx++) {\n const data = editData(xx, y);\n if (data !== null && data !== undefined && data !== '') {\n allEmpty = false;\n break;\n }\n }\n if (allEmpty) {\n howManyEmpty += 1;\n }\n y += growthIncrement;\n if (y > MAX_SEARCHABLE_INDEX) {\n break;\n }\n growthIncrement = Math.floor(growthIncrement * growthIncrementFactor);\n }\n return [x, y];\n};\n\nexport const findInDisplayData = (\n displayData: CellPropertyStyledFunction<CellContentType>,\n start: XY,\n direction: Direction,\n): XY => {\n const step = getDirectionStep(direction);\n\n let cell = maxXY(start, ORIGIN);\n const [x, y] = addXY(cell, step);\n const first = displayData(x, y, DEFAULT_CELL_STYLE);\n const firstFilled = first !== '' && first !== null && first !== undefined;\n\n if (!firstFilled) {\n cell = addXY(cell, step);\n }\n\n let [cellX, cellY] = cell;\n const maxX = cellX + MAX_SEARCHABLE_INDEX - 1;\n const maxY = cellY + MAX_SEARCHABLE_INDEX - 1;\n\n while (cellX < maxX && cellY < maxY && cellX >= 0 && cellY >= 0) {\n const data = displayData(cellX, cellY, DEFAULT_CELL_STYLE);\n\n // if first cell is filled, find the last filled cell, so first look for first unfilled\n if (firstFilled && (data === '' || data === null || data === undefined)) {\n return subXY(cell, step);\n }\n // if first cell is not filled, just find the first filled\n if (!firstFilled && data !== '' && data !== null && data !== undefined) {\n return cell;\n }\n\n [cellX, cellY] = cell = addXY(cell, step);\n }\n\n return maxXY(cell, [0, 0]);\n};\n","import { MouseEvent, PointerEvent, RefObject, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\nimport {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n Change,\n Rectangle,\n RowOrColumnPropertyFunction,\n SheetMouseEvent,\n SheetStyle,\n VisibleLayout,\n XY,\n} from './types';\nimport {\n normalizeSelection,\n mapSelectionColumns,\n mapSelectionRows,\n isColumnSelection,\n isRowSelection,\n isCellSelection,\n isMaybeRowSelection,\n isPointInsideRectangle,\n isPointInsideSelection,\n isSameRectangle,\n addXY,\n subXY,\n maxXY,\n} from './coordinate';\nimport { ONE_ONE, ORIGIN, SIZES } from './constants';\nimport { isBoundaryInsideGroup, expandSelectionToRowOrColumnGroups } from './group';\nimport { findApproxMaxEditDataIndex } from './props';\nimport { isInRange, seq } from './util';\n\ntype DragOp = {\n anchor: XY;\n offset: XY;\n size: number;\n indices: number[];\n};\n\nexport const useMouse = (\n elementRef: RefObject<HTMLDivElement>,\n dataOffset: XY,\n\n hitmapRef: RefObject<CellContentRender[]>,\n selection: Rectangle,\n knobArea: Rectangle | null,\n editMode: boolean,\n editData: CellPropertyFunction<string>,\n sourceData: CellPropertyFunction<string | number | null>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n\n canSizeColumn: RowOrColumnPropertyFunction<boolean | null>,\n canSizeRow: RowOrColumnPropertyFunction<boolean | null>,\n canOrderColumn: RowOrColumnPropertyFunction<boolean | null>,\n canOrderRow: RowOrColumnPropertyFunction<boolean | null>,\n\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n sheetStyle: SheetStyle,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n getAutoSizeWidth: (column: number) => number,\n getAutoSizeHeight: (row: number) => number,\n\n onEdit?: (cell: XY) => void,\n onCommit?: () => void,\n onKnobAreaChange?: (knobArea: Rectangle | null) => void,\n onDragIndicesChange?: (indices: [number[] | null, number[] | null]) => void,\n onDragOffsetChange?: (dragOffset: XY | null) => void,\n onDropTargetChange?: (selection: Rectangle | null) => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n\n onInvalidateColumn?: (column: number) => void,\n onInvalidateRow?: (row: number) => void,\n\n onChange?: (changes: Change[]) => void,\n onColumnOrderChange?: (indices: number[], order: number) => void,\n onRowOrderChange?: (indices: number[], order: number) => void,\n onCellWidthChange?: (indices: number[], values: number[]) => void,\n onCellHeightChange?: (indices: number[], values: number[]) => void,\n onRightClick?: (e: SheetMouseEvent) => void,\n\n dontCommitEditOnSelectionChange?: boolean,\n dontChangeSelectionOnOrderChange?: boolean,\n) => {\n const [columnResize, setColumnResize] = useState<DragOp | null>(null);\n const [rowResize, setRowResize] = useState<DragOp | null>(null);\n const [columnDrag, setColumnDrag] = useState<DragOp | null>(null);\n const [rowDrag, setRowDrag] = useState<DragOp | null>(null);\n\n const [hitTestDown, setHitTestDown] = useState<CellContentRender | null>(null);\n const [autoScroll, setAutoScroll] = useState<XY | null>(null);\n\n const [draggingKnob, setDraggingKnob] = useState(false);\n const [draggingSelection, setDraggingSelection] = useState(false);\n const [draggingRowSelection, setDraggingRowSelection] = useState(false);\n const [draggingColumnSelection, setDraggingColumnSelection] = useState(false);\n\n const { hideRowHeaders, hideColumnHeaders } = sheetStyle;\n const { cellToPixel, getVersion } = cellLayout;\n const version = getVersion();\n\n const knobPosition = useMemo((): XY | null => {\n const [, [maxX, maxY]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n return subXY(addXY(cellToPixel([0, maxY], [0, 1]), [SIZES.knobArea * 0.5, 0]), ONE_ONE);\n }\n if (isColumnSelection(selection)) {\n return subXY(addXY(cellToPixel([maxX, 0], [1, 0]), [0, SIZES.knobArea * 0.5]), ONE_ONE);\n }\n if (isCellSelection(selection)) {\n return subXY(cellToPixel([maxX, maxY], ONE_ONE), ONE_ONE);\n }\n return null;\n }, [selection, cellToPixel, version]);\n\n // Pass pointer/dragging state into handlers via ref so they don't need to rebind during resizes/drags\n const refState = {\n selection,\n dataOffset,\n\n knobArea,\n editMode,\n editData,\n sourceData,\n cellLayout,\n visibleCells,\n\n knobPosition,\n columnResize,\n rowResize,\n columnDrag,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingRowSelection,\n draggingColumnSelection,\n };\n const ref = useRef(refState);\n ref.current = refState;\n\n // Hit-testing for rendered objects\n const getMousePosition = useCallback((e: PointerEvent<any> | MouseEvent<any>, strict?: boolean) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n // Ignore clicks on scrollbar\n if (strict && (xy[0] > e.target.clientWidth || xy[1] > e.target.clientHeight)) {\n return null;\n }\n\n return xy;\n }, []);\n\n // Check if mouse is out of bounds and in what direction\n const getMouseOutOfBounds = useCallback(\n (e: PointerEvent<any> | MouseEvent<any>, allowX: boolean, allowY: boolean) => {\n if (!e.target || !(e.target instanceof Element)) {\n return null;\n }\n\n const rect = e.target.getBoundingClientRect();\n const xy: XY = [e.clientX - rect.left, e.clientY - rect.top];\n\n const indentX = cellLayout.getIndentX();\n const indentY = cellLayout.getIndentY();\n\n const xSign = allowX ? (xy[0] < indentX ? -1 : xy[0] > e.target.clientWidth ? 1 : 0) : 0;\n const ySign = allowY ? (xy[1] < indentY ? -1 : xy[1] > e.target.clientHeight ? 1 : 0) : 0;\n\n return xSign || ySign ? ([xSign, ySign] as XY) : null;\n },\n [cellLayout],\n );\n\n const getMouseHit = useCallback(\n (xy: XY) => {\n const { current: hitmap } = hitmapRef;\n if (!hitmap) return null;\n\n for (const object of hitmap) {\n const { box } = object;\n if (isPointInsideRectangle(box, xy)) {\n return object;\n }\n }\n\n return null;\n },\n [hitmapRef],\n );\n\n const onPointerLeave = useCallback(() => {\n window.document.body.style.cursor = 'auto';\n }, []);\n\n const onPointerDown = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n dataOffset,\n cellLayout: { columnToPixel, rowToPixel, pixelToCell, getIndentX, getIndentY },\n visibleCells: { columns, rows },\n knobPosition,\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (e.button !== 0) return;\n\n (e.target as Element)?.setPointerCapture?.(e.pointerId);\n\n const xy = getMousePosition(e, true);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n setHitTestDown(hitTarget);\n\n const [x, y] = xy;\n\n const normalized = normalizeSelection(selection);\n const [[minX, minY], [maxX, maxY]] = normalized;\n\n const selectedColumns = mapSelectionColumns(selection)((i) => i);\n const selectedRows = mapSelectionRows(selection)((i) => i);\n\n // Column header\n if (!hideColumnHeaders && y < getIndentY()) {\n // Grab selected columns in column selection\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index, 0);\n const end = columnToPixel(index, 1);\n\n if (\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) || selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedColumns,\n ...(selectedColumnGroups\n ? columns.filter((index) =>\n selectedColumnGroups.has(columnGroupKeys(index)),\n )\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedColumnGroups) {\n const clickSelection: Rectangle = [\n [index, -1],\n [index, -1],\n ];\n const [[left], [right]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n columnGroupKeys,\n selectedColumnGroups,\n 0,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minX > right || maxX < left);\n const dragStart = connected ? Math.min(minX, left) : left;\n const dragEnd = connected ? Math.max(maxX, right) : right;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = columnToPixel(maxX, 1) - columnToPixel(minX);\n\n setColumnDrag({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([dragIndices, null]);\n return;\n }\n }\n }\n }\n\n // Resize columns\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n\n const asGroup = isColumnSelection(selection) && maxX === index;\n const indices = asGroup ? selectedColumns : [index];\n\n const size = asGroup\n ? columnToPixel(maxX, 1) - columnToPixel(minX)\n : columnToPixel(index, 1) - columnToPixel(index);\n\n setColumnResize({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n // Grab selected rows in row selection\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index, 0);\n const end = rowToPixel(index, 1);\n\n if (\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grabbing';\n\n // Find all indices that need to be moved, from selection or matching groups\n const indices = Array.from(\n new Set([\n ...selectedRows,\n ...(selectedRowGroups\n ? rows\n .map((_, i) => i)\n .filter((index) => selectedRowGroups.has(rowGroupKeys(index)))\n : []),\n ]).values(),\n );\n indices.sort((a, b) => a - b);\n\n // Make one continuous drag shadow around the cursor for a contiguous group\n let dragIndices = indices;\n if (selectedRowGroups) {\n const clickSelection: Rectangle = [\n [-1, index],\n [-1, index],\n ];\n const [[, top], [, bottom]] = expandSelectionToRowOrColumnGroups(\n clickSelection,\n rowGroupKeys,\n selectedRowGroups,\n 1,\n );\n\n // Extend to whole selection if it's part of the same 'chunk'\n const connected = !(minY > bottom || maxY < top);\n const dragStart = connected ? Math.min(minY, top) : top;\n const dragEnd = connected ? Math.max(maxY, bottom) : bottom;\n dragIndices = seq(dragEnd - dragStart + 1, dragStart);\n }\n\n const size = rowToPixel(maxY, 1) - rowToPixel(minY);\n\n setRowDrag({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n onDragOffsetChange?.([0, 0]);\n onDragIndicesChange?.([null, dragIndices]);\n return;\n }\n }\n }\n }\n\n // Resize rows\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n\n const asGroup = isRowSelection(selection) && maxY === index;\n const indices = asGroup ? selectedRows : [index];\n\n const size = asGroup\n ? rowToPixel(maxY, 1) - rowToPixel(minY)\n : rowToPixel(index, 1) - rowToPixel(index);\n\n setRowResize({\n anchor: xy,\n offset: dataOffset,\n size,\n indices,\n });\n return;\n }\n }\n }\n }\n\n // Knob drag mode\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n setDraggingKnob(true);\n onKnobAreaChange?.(selection);\n return;\n }\n }\n\n // Normal cell click\n const head = pixelToCell(xy);\n const anchor: XY = e.shiftKey ? [...selection[0]] : head;\n\n if (editMode) {\n if (!dontCommitEditOnSelectionChange) {\n onCommit?.();\n }\n }\n\n let scrollTo = true;\n\n if (!hideRowHeaders && x < getIndentX()) {\n scrollTo = false;\n setDraggingRowSelection(true);\n anchor[0] = -1;\n head[0] = -1;\n }\n\n if (!hideColumnHeaders && y < getIndentY()) {\n scrollTo = false;\n setDraggingColumnSelection(true);\n anchor[1] = -1;\n head[1] = -1;\n }\n\n setDraggingSelection(true);\n onSelectionChange?.([anchor, head], scrollTo, true);\n },\n [\n getMousePosition,\n getMouseHit,\n onColumnOrderChange,\n onRowOrderChange,\n onCellWidthChange,\n onCellHeightChange,\n onKnobAreaChange,\n onSelectionChange,\n onCommit,\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n dontCommitEditOnSelectionChange,\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n ],\n );\n\n const onPointerUp = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n knobArea,\n selection,\n sourceData,\n editData,\n\n columnDrag,\n rowDrag,\n\n draggingKnob,\n\n cellLayout: { pixelToColumn, pixelToRow },\n },\n } = ref;\n\n onFocusChange?.(true);\n\n if (knobArea && draggingKnob) {\n const changes = parseKnobOperation(knobArea, selection, sourceData, editData, cellReadOnly);\n\n onChange?.(changes);\n onSelectionChange?.(knobArea, true, true);\n onKnobAreaChange?.(null);\n }\n\n const xy = getMousePosition(e);\n if (xy && (columnDrag || rowDrag)) {\n window.document.body.style.cursor = 'auto';\n onDragIndicesChange?.([null, null]);\n onDragOffsetChange?.(null);\n onDropTargetChange?.(null);\n\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const cellX = pixelToColumn(x, 0.5);\n const cellY = pixelToRow(y, 0.5);\n\n if (columnDrag) {\n const { indices } = columnDrag;\n\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = selectedColumnGroups?.has(columnGroupKeys(x));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellX);\n const order = cellX - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [order, minY],\n [order + indices.length - 1, maxY],\n ]);\n onColumnOrderChange?.(indices, order);\n onInvalidateColumn?.(Math.min(minX, order));\n }\n }\n if (rowDrag) {\n const { indices } = rowDrag;\n\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = selectedRowGroups?.has(rowGroupKeys(y));\n if (!insideSelection && !insideGroup) {\n const preceding = indices.filter((i) => i < cellY);\n const order = cellY - preceding.length;\n dontChangeSelectionOnOrderChange ||\n onSelectionChange?.([\n [minX, order],\n [maxX, order + indices.length - 1],\n ]);\n onRowOrderChange?.(indices, order);\n onInvalidateRow?.(Math.min(minY, order));\n }\n }\n }\n\n setDraggingSelection(false);\n setDraggingRowSelection(false);\n setDraggingColumnSelection(false);\n setDraggingKnob(false);\n setColumnResize(null);\n setColumnDrag(null);\n setRowResize(null);\n setRowDrag(null);\n setAutoScroll(null);\n },\n [\n getMousePosition,\n getMouseHit,\n onChange,\n onSelectionChange,\n onKnobAreaChange,\n onDropTargetChange,\n onColumnOrderChange,\n onRowOrderChange,\n dontChangeSelectionOnOrderChange,\n ],\n );\n\n const onPointerMove = useCallback(\n (e: PointerEvent<HTMLDivElement>) => {\n const {\n current: {\n selection,\n dataOffset,\n visibleCells,\n\n knobPosition,\n columnResize,\n columnDrag,\n rowResize,\n rowDrag,\n\n draggingKnob,\n draggingSelection,\n draggingColumnSelection,\n draggingRowSelection,\n\n cellLayout: {\n cellToPixel,\n columnToPixel,\n rowToPixel,\n pixelToCell,\n pixelToColumn,\n pixelToRow,\n getIndentX,\n getIndentY,\n },\n },\n } = ref;\n\n window.document.body.style.cursor = 'auto';\n\n const isDraggingX =\n !!columnResize || !!columnDrag || draggingColumnSelection || draggingSelection || draggingKnob;\n\n const isDraggingY = !!rowResize || !!rowDrag || draggingRowSelection || draggingSelection || draggingKnob;\n\n const isDragging = isDraggingX || isDraggingY;\n\n const outOfBounds = getMouseOutOfBounds(e, isDraggingX, isDraggingY);\n if (isDragging) setAutoScroll(outOfBounds);\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const hitTarget = getMouseHit(xy);\n\n if (columnDrag || rowDrag) {\n window.document.body.style.cursor = 'grabbing';\n } else if (columnResize) {\n window.document.body.style.cursor = 'col-resize';\n e.preventDefault();\n } else if (rowResize) {\n window.document.body.style.cursor = 'row-resize';\n e.preventDefault();\n } else if (draggingRowSelection || draggingColumnSelection) {\n e.preventDefault();\n } else if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n }\n\n const { columns, rows } = visibleCells;\n const [x, y] = xy;\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n const getDragScrollOffset = (startOffset: XY): XY => {\n return subXY(cellToPixel(dataOffset), cellToPixel(startOffset));\n };\n\n if (!isDragging) {\n if (!hideColumnHeaders && y < getIndentY()) {\n if (onColumnOrderChange) {\n // Trim off start/end so resize works there\n const start = columnToPixel(minX) + SIZES.resizeZone;\n const end = columnToPixel(maxX, 1) - SIZES.resizeZone;\n if (isInRange(x, start, end) || selectedColumnGroups) {\n for (const index of columns) {\n const start = columnToPixel(index);\n const end = columnToPixel(index, 1);\n\n if (\n !draggingColumnSelection &&\n isColumnSelection(selection) &&\n isInRange(x, start, end) &&\n (isInRange(index, minX, maxX) ||\n selectedColumnGroups?.has(columnGroupKeys(index))) &&\n canOrderColumn(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellWidthChange) {\n for (const index of [-1, ...columns]) {\n const edge = columnToPixel(index, 1);\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n window.document.body.style.cursor = 'col-resize';\n return;\n }\n }\n }\n }\n\n if (!hideRowHeaders && x < getIndentX()) {\n if (onRowOrderChange) {\n // Trim off start/end so resize works there\n const start = rowToPixel(minY) + SIZES.resizeZone;\n const end = rowToPixel(maxY, 1) - SIZES.resizeZone;\n if (isInRange(y, start, end) || selectedRowGroups) {\n for (const index of rows) {\n const start = rowToPixel(index);\n const end = rowToPixel(index, 1);\n\n if (\n !draggingRowSelection &&\n isRowSelection(selection) &&\n isInRange(y, start, end) &&\n (isInRange(index, minY, maxY) || selectedRowGroups?.has(rowGroupKeys(index))) &&\n canOrderRow(index)\n ) {\n window.document.body.style.cursor = 'grab';\n return;\n }\n }\n }\n }\n if (onCellHeightChange) {\n for (const index of [-1, ...rows]) {\n const edge = rowToPixel(index, 1);\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n window.document.body.style.cursor = 'row-resize';\n return;\n }\n }\n }\n }\n\n if (knobPosition) {\n const [knobX, knobY] = knobPosition;\n if (Math.abs(x - knobX) < SIZES.knobArea && Math.abs(y - knobY) < SIZES.knobArea) {\n window.document.body.style.cursor = 'crosshair';\n return;\n }\n }\n }\n\n if (columnResize) {\n if (onCellWidthChange) {\n const { size, anchor, offset, indices } = columnResize;\n const [scrollOffset] = getDragScrollOffset(offset);\n const newWidth = Math.round(\n Math.max(size + x - anchor[0] + scrollOffset, SIZES.minimumWidth * indices.length),\n );\n onInvalidateColumn?.(indices[0] - 1);\n onCellWidthChange(\n indices,\n indices.map((_) => Math.round(newWidth / indices.length)),\n );\n }\n return;\n }\n\n if (rowResize) {\n if (onCellHeightChange) {\n const { size, anchor, offset, indices } = rowResize;\n const [, scrollOffset] = getDragScrollOffset(offset);\n const newHeight = Math.round(\n Math.max(size + y - anchor[1] + scrollOffset, SIZES.minimumHeight * indices.length),\n );\n onInvalidateRow?.(indices[0] - 1);\n onCellHeightChange(\n indices,\n indices.map((_) => newHeight / indices.length),\n );\n }\n return;\n }\n\n if (draggingSelection) {\n const [anchor] = selection;\n const head = maxXY(dataOffset, pixelToCell(xy));\n\n const [anchorX, anchorY] = anchor;\n const [headX, headY] = head;\n\n if (draggingRowSelection) {\n onSelectionChange?.(\n [\n [-1, anchorY],\n [-1, Math.max(0, headY)],\n ],\n false,\n );\n } else if (draggingColumnSelection) {\n onSelectionChange?.(\n [\n [anchorX, -1],\n [Math.max(0, headX), -1],\n ],\n false,\n );\n } else {\n onSelectionChange?.([maxXY(anchor, ORIGIN), maxXY(head, ORIGIN)], false);\n }\n }\n\n if (draggingKnob) {\n window.document.body.style.cursor = 'crosshair';\n\n const [cellX, cellY] = pixelToCell(xy);\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // check if vertical or horizontal\n let xCellDiff = Math.min(cellX - minX, maxX - cellX, 0); // zero or less\n let yCellDiff = Math.min(cellY - minY, maxY - cellY, 0); // zero or less\n\n if (isMaybeRowSelection(selection) || xCellDiff > yCellDiff) {\n if (cellY < minY) {\n minY = cellY;\n } else if (cellY > maxY) {\n maxY = cellY;\n }\n } else {\n if (cellX < minX) {\n minX = cellX;\n } else if (cellX > maxX) {\n maxX = cellX;\n }\n }\n\n onKnobAreaChange?.([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n if (columnDrag || rowDrag) {\n const [x, y] = xy;\n if (columnDrag) {\n const cellX = pixelToColumn(x, 0.5);\n const insideSelection = cellX >= minX && cellX <= maxX + 1;\n const insideGroup = isBoundaryInsideGroup(cellX, columnGroupKeys);\n\n const { anchor, offset } = columnDrag;\n const shift = x - anchor[0];\n const [scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([shift + scrollOffset, 0]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [cellX, -1],\n [cellX, -1],\n ],\n );\n }\n if (rowDrag) {\n const cellY = pixelToRow(y, 0.5);\n const insideSelection = cellY >= minY && cellY <= maxY + 1;\n const insideGroup = isBoundaryInsideGroup(cellY, rowGroupKeys);\n\n const { anchor, offset } = rowDrag;\n const shift = y - anchor[1];\n const [, scrollOffset] = getDragScrollOffset(offset);\n\n onDragOffsetChange?.([0, shift + scrollOffset]);\n onDropTargetChange?.(\n insideSelection || insideGroup\n ? null\n : [\n [-1, cellY],\n [-1, cellY],\n ],\n );\n }\n }\n },\n [\n getMousePosition,\n getMouseOutOfBounds,\n getMouseHit,\n onCellWidthChange,\n onCellHeightChange,\n onDragIndicesChange,\n onDragOffsetChange,\n onDropTargetChange,\n onSelectionChange,\n onKnobAreaChange,\n onInvalidateRow,\n onInvalidateColumn,\n columnGroupKeys,\n rowGroupKeys,\n ],\n );\n\n const onClick = useCallback(\n (e: MouseEvent) => {\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const mouseHit = getMouseHit(xy);\n\n // Verify if same object was clicked down and up to avoid false clicks due to drags\n if (hitTestDown && mouseHit) {\n if (isSameRectangle(hitTestDown.box, mouseHit.box)) {\n mouseHit?.item?.onClick?.(e);\n }\n }\n\n setHitTestDown(null);\n },\n [getMousePosition, getMouseHit, hitTestDown],\n );\n\n const onDoubleClick = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n selection,\n cellLayout: { pixelToCell, columnToPixel, rowToPixel, getIndentX, getIndentY },\n },\n } = ref;\n\n e.preventDefault();\n if (e.shiftKey) return;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n\n // Double click column divider to autosize\n const indentY = getIndentY();\n const { columns } = visibleCells;\n if (onCellWidthChange && y < indentY) {\n const autosized = [];\n\n for (const index of columns) {\n const edge = columnToPixel(index, 1);\n\n if (Math.abs(edge - x) < SIZES.resizeZone && canSizeColumn(index)) {\n const [[minX], [maxX]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isColumnSelection(selection) && index >= minX && index <= maxX\n ? mapSelectionColumns(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const column of autosized) {\n onInvalidateColumn?.(column - 1);\n }\n onCellWidthChange(\n autosized,\n autosized.map((column) => getAutoSizeWidth(column)),\n );\n if (autosized.length) return;\n }\n\n // Double click row divider to autosize\n const indentX = getIndentX();\n const { rows } = visibleCells;\n if (onCellHeightChange && x < indentX) {\n const autosized = [];\n\n for (const index of [-1, ...rows]) {\n const edge = index < 0 ? rowToPixel(0) : rowToPixel(index, 1);\n\n if (Math.abs(edge - y) < SIZES.resizeZone && canSizeRow(index)) {\n const [[, minY], [, maxY]] = normalizeSelection(selection);\n\n // Autosize entire selection if double-clicking a right edge\n const indices =\n isRowSelection(selection) && index >= minY && index <= maxY\n ? mapSelectionRows(selection)((i) => i)\n : [index];\n\n autosized.push(...indices);\n }\n }\n\n for (const row of autosized) {\n onInvalidateRow?.(row - 1);\n }\n onCellHeightChange(\n autosized,\n autosized.map((row) => getAutoSizeHeight(row)),\n );\n if (autosized.length) return;\n }\n\n const hitTarget = getMouseHit(xy);\n if (hitTarget) {\n window.document.body.style.cursor = 'pointer';\n return;\n }\n\n const editCell = pixelToCell(xy);\n if (editMode) onCommit?.();\n onEdit?.(editCell);\n },\n [\n getMousePosition,\n getMouseHit,\n onCommit,\n onEdit,\n onInvalidateColumn,\n onCellWidthChange,\n getAutoSizeWidth,\n visibleCells,\n canSizeColumn,\n ],\n );\n\n const onContextMenu = useCallback(\n (e: MouseEvent) => {\n const {\n current: {\n cellLayout: { pixelToCell, getIndentX, getIndentY },\n },\n } = ref;\n\n const xy = getMousePosition(e);\n if (!xy) return;\n\n const [x, y] = xy;\n if (x <= getIndentX() || y <= getIndentY()) {\n return;\n }\n\n // If click is not inside of selection, select the right clicked cell\n const cell = pixelToCell(xy);\n if (!isPointInsideSelection(selection, cell)) {\n onSelectionChange?.([cell, cell]);\n }\n\n onPointerMove(e as any);\n\n const [cellX, cellY] = cell;\n const event: SheetMouseEvent = {\n ...e,\n cellX,\n cellY,\n };\n onRightClick?.(event);\n },\n [getMousePosition, onSelectionChange, onPointerMove, onRightClick],\n );\n\n useLayoutEffect(() => {\n if (!autoScroll) return;\n\n const loop = () => {\n const { current: element } = elementRef;\n if (!element) return;\n\n const [x, y] = autoScroll;\n const speed = 4;\n element.scrollLeft += x * speed * 2;\n element.scrollTop += y * speed;\n };\n\n const timer = setInterval(loop, 33);\n loop();\n\n return () => {\n clearInterval(timer);\n };\n }, [elementRef, autoScroll]);\n\n const mouseHandlers = {\n onPointerLeave,\n onPointerDown,\n onPointerMove,\n onPointerUp,\n onClick,\n onDoubleClick,\n onContextMenu,\n };\n\n return { knobPosition, mouseHandlers };\n};\n\nconst parseKnobOperation = (\n knobArea: Rectangle,\n selection: Rectangle,\n sourceData: CellPropertyFunction<string | number | null>,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n): Change[] => {\n const [[kx1, ky1], [kx2, ky2]] = normalizeSelection(knobArea);\n const [[sx1, sy1], [sx2, sy2]] = normalizeSelection(selection);\n\n let fx1 = kx1;\n let fy1 = ky1;\n let fx2 = kx2;\n let fy2 = ky2;\n\n const changes: Change[] = [];\n\n // TODO: this should be made less cryptic, using logical selection ops/fns\n\n if (fx2 - fx1 === sx2 - sx1) {\n // vertical\n if (fy1 === sy1) {\n fy1 = sy2 + 1;\n } else {\n fy2 = sy1 - 1;\n }\n if (fx1 === -1 && fx2 === -1) {\n const [maxX] = findApproxMaxEditDataIndex(editData);\n fx1 = 0;\n fx2 = maxX;\n }\n let srcY = sy1;\n for (let y = fy1; y <= fy2; y++) {\n for (let x = fx1; x <= fx2; x++) {\n const value = sourceData(x, srcY);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: x, y: srcY } });\n }\n }\n srcY = srcY + 1;\n if (srcY > sy2) {\n srcY = sy1;\n }\n }\n } else {\n // horizontal\n if (fx1 === sx1) {\n fx1 = sx2 + 1;\n } else {\n fx2 = sx1 - 1;\n }\n if (fy1 === -1 && fy2 === -1) {\n const [, maxY] = findApproxMaxEditDataIndex(editData);\n fy1 = 0;\n fy2 = maxY;\n }\n let srcX = sx1;\n for (let x = fx1; x <= fx2; x++) {\n for (let y = fy1; y <= fy2; y++) {\n const value = sourceData(srcX, y);\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: value, source: { x: srcX, y: y } });\n }\n }\n srcX = srcX + 1;\n if (srcX > sx2) {\n srcX = sx1;\n }\n }\n }\n\n return changes;\n};\n","import { RefObject, KeyboardEvent, useLayoutEffect } from 'react';\n\nimport { ARROW_KEYS, MAX_SEARCHABLE_INDEX, ORIGIN, NEG_NEG } from './constants';\n\nimport { findInDisplayData } from './props';\n\nimport { CellContentType, CellPropertyFunction, CellPropertyStyledFunction, Change, Rectangle, XY } from './types';\n\nimport {\n normalizeSelection,\n isRowSelection,\n isColumnSelection,\n isEmptySelection,\n getDirectionStep,\n maxXY,\n addXY,\n} from './coordinate';\n\nexport const useKeyboard = (\n arrowKeyCommitMode: boolean,\n overlayRef: RefObject<HTMLDivElement>,\n cellReadOnly: CellPropertyFunction<boolean | null>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n editCell: XY,\n editMode: boolean,\n focused: boolean,\n rawSelection: Rectangle,\n selection: Rectangle,\n\n onEdit?: (cell: XY, arrowKeyCommitMode?: boolean) => void,\n onCommit?: () => void,\n onCancel?: () => void,\n onSelectionChange?: (selection: Rectangle, scrollTo?: boolean, toHead?: boolean) => void,\n onFocusChange?: (focus: boolean) => void,\n onClipboardCopy?: (cut: boolean) => void,\n onChange?: (changes: Change[]) => void,\n) => {\n const onInputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onCancel?.();\n return;\n }\n\n const direction =\n e.key === 'Enter' ? 'down' : e.key === 'Tab' ? 'right' : arrowKeyCommitMode ? ARROW_KEYS[e.key] : null;\n\n if (direction) {\n e.preventDefault();\n const step = getDirectionStep(direction);\n const head = maxXY(addXY(editCell, step), ORIGIN);\n onCommit?.();\n onSelectionChange?.([head, head]);\n }\n };\n\n const onGridKeyDown = (e: KeyboardEvent) => {\n if (editMode && arrowKeyCommitMode && e.key in ARROW_KEYS) {\n onCommit?.();\n return;\n }\n\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'v') {\n return;\n }\n\n // copy\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'c') {\n onClipboardCopy?.(false);\n return;\n }\n // cut\n if ((e.metaKey || e.ctrlKey) && String.fromCharCode(e.which).toLowerCase() === 'x') {\n onClipboardCopy?.(true);\n return;\n }\n\n if (e.key === 'Backspace' || e.key === 'Delete') {\n let [[x1, y1], [x2, y2]] = normalizeSelection(selection);\n if (isRowSelection(selection)) {\n x1 = 0;\n x2 = MAX_SEARCHABLE_INDEX;\n }\n if (isColumnSelection(selection)) {\n y1 = 0;\n y2 = MAX_SEARCHABLE_INDEX;\n }\n\n const changes: Change[] = [];\n for (let y = y1; y <= y2; y++) {\n for (let x = x1; x <= x2; x++) {\n if (!cellReadOnly(x, y)) {\n changes.push({ x: x, y: y, value: null });\n }\n }\n }\n\n onChange?.(changes);\n return;\n }\n\n // nothing selected\n if (isEmptySelection(selection)) {\n return;\n }\n\n if (\n (e.keyCode >= 48 && e.keyCode <= 57) ||\n (e.keyCode >= 96 && e.keyCode <= 105) ||\n (e.keyCode >= 65 && e.keyCode <= 90) ||\n e.key === 'Enter' ||\n e.key === '-' ||\n e.key === '.' ||\n e.key === ','\n ) {\n const [cell] = selection;\n const [cellX, cellY] = cell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n if (e.key === 'Enter') e.preventDefault();\n onEdit?.(cell, e.key !== 'Enter');\n return;\n }\n\n e.preventDefault();\n\n if (e.key in ARROW_KEYS) {\n let [anchor, head] = rawSelection;\n\n const direction = ARROW_KEYS[e.key];\n const step = getDirectionStep(direction);\n const shift = e.shiftKey;\n\n if (e.metaKey || e.ctrlKey) {\n head = findInDisplayData(displayData, head, direction);\n } else {\n // Allow stepping into row/column headers with shift\n const limit: XY = shift\n ? isRowSelection(selection)\n ? [-1, 0]\n : isColumnSelection(selection)\n ? [0, -1]\n : NEG_NEG\n : ORIGIN;\n head = maxXY(addXY(head, step), limit);\n }\n\n if (!shift) {\n anchor = head;\n }\n\n onSelectionChange?.([anchor, head], true, true);\n return;\n }\n };\n\n const onGridFocus = () => {\n onFocusChange?.(true);\n };\n\n const onGridBlur = () => {\n onFocusChange?.(false);\n };\n\n // Focus canvas for keyboard\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) {\n return;\n }\n if (editMode || !focused) {\n return;\n }\n if (document.activeElement === overlay) {\n return;\n }\n\n const activeTagName = (document as any).activeElement.tagName.toLowerCase();\n if (\n !(\n (activeTagName === 'div' && (document as any).activeElement.contentEditable === 'true') ||\n activeTagName === 'input' ||\n activeTagName === 'textarea' ||\n activeTagName === 'select'\n )\n ) {\n overlay.focus({ preventScroll: true });\n }\n }, [editMode, focused]);\n\n return { onInputKeyDown, onGridFocus, onGridBlur, onGridKeyDown };\n};\n","import { UIEvent, useCallback } from 'react';\nimport { XY, CellLayout } from './types';\nimport { isSameXY, maxXY, mulXY, subXY } from './coordinate';\nimport { ONE_ONE } from './constants';\n\nexport const useScroll = (\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n onOffsetChange?: (offset: XY) => void,\n onMaxScrollChange?: (maxScroll: XY) => void,\n) => {\n return useCallback(\n (e: UIEvent) => {\n if (!e.target || !(e.target instanceof Element)) {\n return;\n }\n const { absoluteToCell, cellToAbsolute } = cellLayout;\n\n // Zero scroll position is considered in the center of the top/left cell\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const xy: XY = [e.target.scrollLeft + nudgeX, e.target.scrollTop + nudgeY];\n\n const cell = absoluteToCell(xy);\n if (!isSameXY(cell, offset)) {\n onOffsetChange?.(cell);\n }\n\n const [x, y] = xy;\n const [maxScrollX, maxScrollY] = maxScroll;\n const growX = maxScrollX < x + 1 ? 1.5 : 1;\n const growY = maxScrollY < y + 1 ? 1.5 : 1;\n if (growX > 1 || growY > 1) {\n onMaxScrollChange?.(mulXY(maxScroll, [growX, growY]));\n }\n },\n [cellLayout, onOffsetChange, onMaxScrollChange],\n );\n};\n\n// If view extends past end of table\n// Limit view to table contents\nexport const clipDataOffset = (view: XY, offset: XY, freeze: XY, maxCells: XY, cellLayout: CellLayout): XY => {\n let [newX, newY] = offset;\n const [freezeX, freezeY] = freeze;\n const [maxColumns, maxRows] = maxCells;\n\n const { absoluteToColumn, columnToAbsolute, absoluteToRow, rowToAbsolute } = cellLayout;\n\n const {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n } = getViewExtent(view, [newX, newY], freeze, cellLayout);\n\n // Move extra space on the right/bottom to equivalent on the left/top\n if (leftEdge >= maxColumns) {\n const remainder = columnToAbsolute(maxColumns) - columnToAbsolute(newX + freezeX);\n newX = Math.max(0, absoluteToColumn(columnToAbsolute(newX + freezeX) - scrollW + remainder) - freezeX + 1);\n }\n if (topEdge >= maxRows) {\n const remainder = rowToAbsolute(maxRows) - rowToAbsolute(newY + freezeY);\n newY = Math.max(0, absoluteToRow(rowToAbsolute(newY + freezeY) - scrollH + remainder) - freezeY + 1);\n }\n\n return [newX, newY];\n};\n\n// Get bottom-right corner cell + non-frozen viewport size\nexport const getViewExtent = (\n view: XY,\n offset: XY,\n freeze: XY,\n cellLayout: CellLayout,\n): {\n edge: XY;\n viewport: XY;\n} => {\n const { cellToAbsolute } = cellLayout;\n\n const [x, y] = offset;\n const [w, h] = view;\n const [frozenX, frozenY] = cellToAbsolute(freeze);\n\n const scrollW = w - frozenX;\n const scrollH = h - frozenY;\n\n const leftEdge = x + freeze[0];\n const topEdge = y + freeze[1];\n\n return {\n edge: [leftEdge, topEdge],\n viewport: [scrollW, scrollH],\n };\n};\n\nexport const scrollToCell = (\n element: HTMLDivElement,\n cell: XY,\n view: XY,\n freeze: XY,\n offset: XY,\n maxScroll: XY,\n cellLayout: CellLayout,\n callback: (offset: XY, maxScroll: XY) => void,\n) => {\n const [x, y] = cell;\n const [w, h] = view;\n const [offsetX, offsetY] = offset;\n\n const { cellToAbsolute, cellToPixel, columnToPixel, rowToPixel } = cellLayout;\n\n const origin = cellToAbsolute([0, 0]);\n const frozen = cellToAbsolute(freeze);\n const [frozenX, frozenY] = frozen;\n\n const [left, top] = cellToPixel(cell);\n const [right, bottom] = cellToPixel(cell, ONE_ONE);\n\n let [newX, newY] = offset;\n\n // If moving left/up, scroll to head\n if (left <= frozenX) {\n newX = x - freeze[0];\n }\n if (top <= frozenY) {\n newY = y - freeze[1];\n }\n\n // If moving right/down, scroll cell by cell until right/bottom of cell is visible\n if (right > w) {\n let edge = right - w + columnToPixel(newX);\n while (columnToPixel(++newX) < edge) {}\n }\n if (bottom > h) {\n let edge = bottom - h + rowToPixel(newY);\n while (rowToPixel(++newY) < edge) {}\n }\n\n // Don't scroll on infinite axis\n const newOffset: XY = [newX >= 0 ? newX : offsetX, newY >= 0 ? newY : offsetY];\n\n if (!isSameXY(newOffset, offset)) {\n const scroll = subXY(cellToAbsolute(newOffset), origin);\n\n callback(newOffset, maxXY(maxScroll, scroll));\n\n setTimeout(() => {\n updateScrollPosition(element, newOffset, cellLayout);\n });\n }\n};\n\nexport const updateScrollPosition = (element: HTMLDivElement, dataOffset: XY, cellLayout: CellLayout) => {\n const { cellToAbsolute } = cellLayout;\n\n const scroll = cellToAbsolute(dataOffset);\n const [nudgeX, nudgeY] = subXY(cellToAbsolute([0, 0], [0.5, 0.5]), cellToAbsolute([0, 0]));\n\n const [scrollX, scrollY] = scroll;\n element.scrollLeft = scrollX - nudgeX;\n element.scrollTop = scrollY - nudgeY;\n};\n","import type {\n Align,\n Anchor,\n CellContentContainer,\n CellContentItem,\n CellContentRender,\n Justify,\n Rectangle,\n} from './types';\n\nexport const getInlineAlignment = (cellWidth: number, contentWidth: number, align: Align): number => {\n if (align === 'left') return 0;\n if (align === 'right') return cellWidth - contentWidth;\n\n return Math.round((cellWidth - contentWidth) / 2);\n};\n\nexport const measureFlexWidth = (context: CanvasRenderingContext2D, item: CellContentItem): number => {\n const { width } = item;\n if (width != null) return width;\n\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n const { actualBoundingBoxLeft, actualBoundingBoxRight } = context.measureText(text.toString());\n const w = actualBoundingBoxRight + actualBoundingBoxLeft;\n return width ?? w;\n }\n } else {\n throw new Error('Image or JSX content must have dimension specified');\n }\n return 0;\n};\n\nexport const resolveCellFlexLayout = (\n context: CanvasRenderingContext2D,\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { flexJustify = 'start', flexAlign = 'center', flexGap = 0, items } = cellContent;\n\n // Gather flex items\n const flexItems = items.filter((item) => !item.absolute);\n\n // Measure natural size without wrapping\n const measuredWidths = cellContent.items.map((item) => measureFlexWidth(context, item));\n\n // Gather flex box horizontal info\n const sizes: number[] = [];\n const grows: number[] = [];\n const shrinks: number[] = [];\n\n let x = 0;\n flexItems.forEach((item, i) => {\n const defaultGrow = item.display === 'inline' ? 1 : 0;\n const defaultShrink = defaultGrow || (item.display === 'space' ? 1 : 0);\n const {\n width = measuredWidths[i],\n flexGrow = defaultGrow,\n flexShrink = defaultShrink,\n marginLeft = 0,\n marginRight = 0,\n } = item;\n\n sizes.push(width);\n grows.push(flexGrow);\n shrinks.push(flexShrink);\n\n x += width + marginLeft + marginRight + flexGap;\n });\n\n // Horizontal slack: leave space for n-1 gaps, without last extra\n let slackX = cellWidth - x + flexGap;\n\n // Flex horizontally\n if (slackX > 0 && growRow(slackX, grows, sizes)) slackX = 0;\n if (slackX < 0 && shrinkRow(slackX, shrinks, sizes)) slackX = 0;\n\n const [gapX, leadX] = getAlignmentSpacing(slackX, flexItems.length, flexJustify);\n const combinedGapX = gapX + flexGap;\n\n // Gather flex box vertical info\n const maxHeight = flexItems\n .map(({ height, marginTop = 0, marginBottom = 0 }) => (height ?? cellHeight) + marginTop + marginBottom)\n .reduce((a, b) => Math.max(a, b));\n\n const slackY = Math.max(0, cellHeight - maxHeight);\n const offsetY = getAlignmentAnchor(flexAlign) * slackY;\n\n // Resolve flex boxes\n let leftCursor = leadX;\n return flexItems.map((item, i) => {\n const {\n height: fixedHeight,\n marginLeft = 0,\n marginRight = 0,\n marginTop = 0,\n marginBottom = 0,\n flexAlignSelf = flexAlign,\n } = item;\n\n const marginX = marginLeft + marginRight;\n const marginY = marginTop + marginBottom;\n\n const height = fixedHeight ?? maxHeight - marginY;\n\n const slackSelfY = maxHeight - height - marginY;\n const offsetSelfY = getAlignmentAnchor(flexAlignSelf) * slackSelfY;\n\n const x = Math.round(cellLeft + marginLeft + leftCursor);\n const y = Math.round(cellTop + marginTop + offsetY + offsetSelfY);\n leftCursor += combinedGapX + marginX + sizes[i];\n\n const boxW = sizes[i];\n const boxH = height;\n const box: Rectangle = [\n [x, y],\n [x + boxW, y + boxH],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\nexport const resolveCellAbsoluteLayout = (\n cellContent: CellContentContainer,\n cellLeft: number,\n cellTop: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] => {\n const { items } = cellContent;\n\n // Gather absolute items\n const absoluteItems = items.filter((item) => item.absolute);\n\n const resolvePosition = (\n container: number,\n size: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (start != null) return start + marginStart;\n if (end != null) return container - end - marginEnd - size;\n return 0;\n };\n\n const resolveSize = (\n container: number,\n span?: number,\n start?: number,\n end?: number,\n marginStart: number = 0,\n marginEnd: number = 0,\n ) => {\n if (span != null) return span;\n if (start != null && end != null) return container - start - end - marginStart - marginEnd;\n return 0;\n };\n\n // Resolve absolute boxes\n return absoluteItems.map((item) => {\n const { left, top, right, bottom, width, height, marginLeft, marginTop, marginRight, marginBottom } = item;\n\n const w = resolveSize(cellWidth, width, left, right, marginLeft, marginRight);\n const h = resolveSize(cellHeight, height, top, bottom, marginTop, marginBottom);\n\n const l = cellLeft + resolvePosition(cellWidth, w, left, right, marginLeft, marginRight);\n const t = cellTop + resolvePosition(cellHeight, h, top, bottom, marginTop, marginBottom);\n\n const box: Rectangle = [\n [l, t],\n [l + w, t + h],\n ];\n\n return {\n box,\n item,\n };\n });\n};\n\n// Grow all applicable blocks in a row to add extra slack.\nexport const growRow = (slack: number, grow: number[], sizes: number[]) => {\n const n = grow.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (grow[i] > 0) weight += grow[i];\n\n if (weight > 0) {\n for (let i = 0; i < n; ++i) {\n if (grow[i] > 0) {\n sizes[i] += (slack * grow[i]) / weight;\n }\n }\n return true;\n }\n return false;\n};\n\n// Shrink all applicable blocks in a row to remove excess slack.\nexport const shrinkRow = (slack: number, shrink: number[], sizes: number[]): boolean => {\n const n = shrink.length;\n\n let weight = 0;\n for (let i = 0; i < n; ++i) if (shrink[i]) weight += shrink[i] * sizes[i];\n\n if (weight > 0) {\n let negative = 0;\n for (let i = 0; i < n; ++i) {\n if (shrink[i] > 0 && sizes[i]) {\n sizes[i] += (slack * shrink[i] * sizes[i]) / weight;\n if (sizes[i] < 0) {\n negative += sizes[i];\n sizes[i] = 0;\n }\n }\n }\n if (negative) {\n shrinkRow(negative, shrink, sizes);\n }\n return true;\n }\n return false;\n};\n\n// Alignment to relative anchor position [0...1]\nexport const getAlignmentAnchor = (x: Anchor): number => {\n const isStart = x === 'start';\n const isEnd = x === 'end';\n\n const align = isStart ? 0 : isEnd ? 1 : 0.5;\n return align;\n};\n\n// Alignment/justification spacing and indent\nexport const getAlignmentSpacing = (slack: number, n: number, justify: Justify) => {\n let gap = 0;\n let lead = 0;\n\n const isJustify = justify === 'justify';\n const isBetween = justify === 'between';\n const isEvenly = justify === 'evenly';\n\n if (slack > 0) {\n if (isEvenly || isBetween || isJustify) {\n if (n === 1) {\n lead = slack / 2;\n } else if (isEvenly) {\n gap = Math.max(0, slack / (n + 1));\n lead = gap;\n } else if (isBetween) {\n gap = Math.max(0, slack / n);\n lead = gap / 2;\n } else if (isJustify) {\n gap = Math.max(0, slack / Math.max(1, n - 1));\n }\n } else {\n lead = getAlignmentAnchor(justify as Anchor) * slack;\n }\n }\n\n return [gap, lead];\n};\n","import LineBreak from 'linebreak';\nimport { getInlineAlignment } from './cell';\nimport { Align, Style } from './types';\n\nexport const wrapText = (\n context: CanvasRenderingContext2D,\n text: string | number,\n style: Required<Style>,\n itemAlign: Align | undefined,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n emit: (text: string, x: number, y: number) => void,\n) => {\n const { textAlign, lineHeight, fontSize, marginBottom } = style;\n\n const align = itemAlign ?? textAlign;\n context.textAlign = align;\n\n const x = xCoord + getInlineAlignment(cellWidth, 0, align);\n const y = yCoord;\n const s = text.toString();\n const n = s.length;\n\n let xCursor = 0;\n let yCursor = 0;\n let wordsPerLine = 0;\n let startOfLine = 0;\n const newline = (endOfLine: number, ellipsis: boolean = false, endsInSpace: boolean = false) => {\n const line = s.slice(startOfLine, endOfLine - +endsInSpace);\n emit(ellipsis ? line + '…' : line, x, y + yCursor);\n\n startOfLine = endOfLine;\n wordsPerLine = 0;\n xCursor = 0;\n yCursor += lineHeight;\n };\n\n const breaker = new LineBreak(s);\n\n let lastPosition = 0;\n let bk;\n while ((bk = breaker.nextBreak())) {\n const { position, required } = bk;\n const word = s.slice(lastPosition, position);\n\n const { width } = context.measureText(word);\n\n const canNewLine = yCursor + lineHeight + marginBottom < cellHeight;\n const hasMoreText = position < n;\n const endsInSpace = word[word.length - 1] === ' ';\n const ellipsisSpace = !canNewLine && hasMoreText ? (endsInSpace ? 0.5 : 1) * fontSize : 0;\n\n const nextX = xCursor + width + ellipsisSpace;\n if (wordsPerLine && nextX >= cellWidth) {\n if (canNewLine) newline(lastPosition);\n else {\n if (endsInSpace) {\n const { width } = context.measureText(' ');\n xCursor -= width;\n }\n newline(lastPosition, true, endsInSpace);\n return;\n }\n }\n\n xCursor += width;\n wordsPerLine++;\n\n if (required) newline(position);\n\n lastPosition = position;\n }\n\n newline(n);\n};\n","import { useCallback, useMemo } from 'react';\nimport { DEFAULT_COLUMN_HEADER_STYLE, DEFAULT_CELL_STYLE, SIZES } from './constants';\nimport { resolveCellFlexLayout } from './cell';\nimport { wrapText } from './text';\nimport {\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n CellContentType,\n Style,\n} from './types';\n\nexport const useAutoSizeColumn = (\n rows: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n canvasWidth: number,\n frozenColumns: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeWidth = useCallback(\n (x: number) => {\n if (!context) return 0;\n\n const viewWidth = canvasWidth - cellLayout.columnToAbsolute(x < frozenColumns ? 0 : frozenColumns);\n\n const getWidth = (cellContent: Exclude<CellContentType, null>, style: Required<Style>) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const inlineMargin = style.marginLeft + style.marginRight;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const { width } = context.measureText(cellContent.toString());\n return width + inlineMargin;\n } else if (typeof cellContent === 'object') {\n let totalWidth = inlineMargin;\n\n const { flexGap = 0, items } = cellContent;\n for (const item of items) {\n if (item.absolute) continue;\n\n if (item.width != null) {\n totalWidth += item.width;\n } else if (item.display === 'inline' && item.text != null) {\n const { width } = context.measureText(item.text.toString());\n totalWidth += width;\n }\n totalWidth += flexGap;\n }\n totalWidth -= flexGap;\n\n return totalWidth;\n }\n return 0;\n };\n\n let maxWidth = SIZES.minimumWidth;\n\n const headerStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) };\n const headerContent = columnHeaders(x, headerStyle);\n if (headerContent) {\n maxWidth = Math.max(maxWidth, getWidth(headerContent, headerStyle));\n }\n\n for (const y of rows) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n const cellContent = displayData(x, y, style);\n if (cellContent != null) {\n maxWidth = Math.max(maxWidth, getWidth(cellContent, style));\n }\n }\n\n return Math.ceil(Math.min(viewWidth, maxWidth));\n },\n [\n context,\n rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n frozenColumns,\n ],\n );\n\n return getAutoSizeWidth;\n};\n\nexport const useAutoSizeRow = (\n columns: number[],\n displayData: CellPropertyStyledFunction<CellContentType>,\n cellLayout: CellLayout,\n cellStyle: CellPropertyFunction<Style>,\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n cellWidth: RowOrColumnPropertyFunction<number>,\n canvasHeight: number,\n frozenRows: number,\n) => {\n const context = useMemo(() => document.createElement('canvas').getContext('2d'), []);\n\n const getAutoSizeHeight = useCallback(\n (y: number) => {\n if (!context) return 0;\n\n const viewHeight = canvasHeight - cellLayout.rowToAbsolute(y < frozenRows ? 0 : frozenRows);\n\n const measureTextHeight = (text: string, style: Required<Style>, columnWidth: number) => {\n let maxY = 0;\n const measureY = (_t: string, _x: number, y: number) => {\n maxY = y + style.lineHeight;\n };\n wrapText(context, text, style, undefined, 0, 0, columnWidth, viewHeight, measureY);\n return maxY;\n };\n\n const getHeight = (\n cellContent: Exclude<CellContentType, null>,\n style: Required<Style>,\n columnWidth: number,\n ) => {\n context.font = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n const verticalMargin = style.marginTop + style.marginBottom;\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n const height = measureTextHeight(cellContent.toString(), style, columnWidth);\n return height + verticalMargin;\n } else if (typeof cellContent === 'object') {\n let maxHeight = 0;\n\n const flexLayout = resolveCellFlexLayout(context, cellContent, 0, 0, columnWidth, 0);\n\n for (const { box, item } of flexLayout) {\n if (item.height != null) {\n maxHeight = Math.max(maxHeight, item.height);\n } else if (item.display === 'inline' && item.text != null) {\n const [[left], [right]] = box;\n const height = measureTextHeight(item.text.toString(), style, right - left);\n maxHeight = Math.max(maxHeight, height);\n }\n }\n\n return maxHeight + verticalMargin;\n }\n return 0;\n };\n\n const isHeader = y === -1;\n let maxHeight = SIZES.minimumHeight;\n\n for (const x of columns) {\n const style = isHeader\n ? { ...DEFAULT_COLUMN_HEADER_STYLE, ...columnHeaderStyle(x) }\n : { ...DEFAULT_CELL_STYLE, ...cellStyle(x, y) };\n\n const cellContent = isHeader ? columnHeaders(x, style) : displayData(x, y, style);\n\n if (cellContent != null) {\n const columnWidth = cellWidth(x) - style.marginLeft - style.marginRight;\n maxHeight = Math.max(maxHeight, getHeight(cellContent, style, columnWidth));\n }\n }\n\n return Math.ceil(Math.min(viewHeight, maxHeight));\n },\n [\n context,\n columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n frozenRows,\n ],\n );\n\n return getAutoSizeHeight;\n};\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","import { ClipboardPayload, CellPropertyFunction, Change, Rectangle } from './types';\nimport { useCallback, useLayoutEffect, useMemo, useState } from 'react';\nimport { findApproxMaxEditDataIndex } from './props';\nimport {\n normalizeSelection,\n isMaybeRowSelection,\n isMaybeColumnSelection,\n isEmptySelection,\n addXY,\n subXY,\n mulXY,\n forSelectionRows,\n forSelectionColumns,\n} from './coordinate';\n\nconst NON_BREAKING_SPACE = ' ';\n\n// Type missing from TS <=4.3\ninterface ClipboardItem {\n readonly types: string[];\n readonly presentationStyle: 'unspecified' | 'inline' | 'attachment';\n getType(): Promise<Blob>;\n}\n\ndeclare var ClipboardItem: {\n prototype: ClipboardItem;\n new (itemData: any): ClipboardItem;\n};\n\nexport type ClipboardTable<T = any> = {\n rows: string[][];\n payload?: ClipboardPayload<T>;\n};\n\nconst EMPTY_TABLE: ClipboardTable = { rows: [] };\n\n// Access clipboard as HTML table + JSON payload.\n// Provide peek access to clipboard if permission granted.\n// Ask permission on first copy.\nexport const useClipboardTable = () => {\n const [peek, setPeek] = useState<ClipboardTable | null>();\n\n useLayoutEffect(() => {\n const softRefresh = async () => {\n try {\n const status = await navigator.permissions.query({ name: 'clipboard-read' as any });\n if (status.state !== 'granted') return;\n\n hardRefresh();\n } catch (e) {}\n };\n\n const hardRefresh = async () => {\n try {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (item) {\n const peek = await parseClipboardTable(item);\n setPeek(peek);\n } else {\n setPeek(EMPTY_TABLE);\n }\n } catch (e) {}\n };\n\n const delayedRefresh = () => setTimeout(hardRefresh);\n\n window.document.addEventListener('cut', delayedRefresh);\n window.document.addEventListener('copy', delayedRefresh);\n window.document.addEventListener('focus', softRefresh);\n\n softRefresh();\n\n return () => {\n window.document.removeEventListener('cut', delayedRefresh);\n window.document.removeEventListener('copy', delayedRefresh);\n window.document.removeEventListener('focus', softRefresh);\n };\n }, []);\n\n const canPaste = useCallback(\n // Peek may not be available, allow paste attempt.\n () => !!(peek == null || peek.rows?.length),\n [peek],\n );\n\n return {\n peek,\n canPaste,\n copyTable: copyClipboardTable,\n pasteTable: pasteClipboardTable,\n };\n};\n\n// Sheet clipboard with payload-handler injected\nexport const useClipboardAPI = <T = any>(\n selection: Rectangle,\n editData: CellPropertyFunction<string>,\n cellReadOnly: CellPropertyFunction<boolean>,\n addListener: boolean,\n\n onSelectionChange?: (selection: Rectangle) => void,\n onChange?: (changes: Change[]) => void,\n onCopy?: (selection: Rectangle, rows: string[][], cut: boolean) => ClipboardPayload<T> | null | undefined,\n onPaste?: (\n selection: Rectangle,\n rows: string[][],\n payload?: ClipboardPayload<T>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>,\n) => {\n const { canPaste, copyTable, pasteTable } = useClipboardTable();\n\n const pasteIntoSelection = useCallback(\n async (selection: Rectangle, table: ClipboardTable) => {\n const { rows, payload } = table;\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n\n const left = Math.max(0, minX);\n const top = Math.max(0, minY);\n\n const width = rows.reduce((a, b) => Math.max(a, b.length), 0);\n const height = rows.length;\n\n const selectionSize = mulXY(addXY(subXY(max, min), [1, 1]), [1 / width, 1 / height]);\n const repeatX = Math.max(1, Math.floor(selectionSize[0]));\n const repeatY = Math.max(1, Math.floor(selectionSize[1]));\n\n const newSelection: Rectangle = [min, addXY(min, [width * repeatX - 1, height * repeatY - 1])];\n\n const shouldPaste = await onPaste?.(newSelection, rows, payload);\n if (shouldPaste !== false) {\n const changes = rows\n .flatMap((row, j) =>\n row.flatMap((value, i) => {\n const cells: Change[] = [];\n for (let rx = 0; rx < repeatX; ++rx) {\n for (let ry = 0; ry < repeatY; ++ry) {\n const x = left + i + rx * width;\n const y = top + j + ry * height;\n if (!cellReadOnly?.(x, y)) cells.push({ x, y, value });\n }\n }\n return cells;\n }),\n )\n .filter((change) => !!change) as Change[];\n\n onChange?.(changes);\n onSelectionChange?.(newSelection);\n }\n },\n [onChange, onSelectionChange, cellReadOnly],\n );\n\n // Imperative API\n const copySelection = useCallback(\n async (selection: Rectangle, cut: boolean = false) => {\n const rows = formatSelectionAsRows(selection, editData);\n const payload = onCopy?.(selection, rows, cut);\n\n copyTable(rows, payload);\n\n if (payload?.cut ?? cut) {\n const changes: Change[] = [];\n forSelectionRows(selection)((y: number) => {\n forSelectionColumns(selection)((x: number) => {\n if (!cellReadOnly?.(x, y)) {\n const change = { x, y, value: '' };\n changes.push(change);\n }\n });\n });\n onChange?.(changes);\n }\n },\n [onCopy, onChange, cellReadOnly],\n );\n\n const pasteSelection = useCallback(\n async (selection: Rectangle) => {\n const table = await pasteTable();\n if (table) pasteIntoSelection(selection, table);\n },\n [pasteIntoSelection],\n );\n\n // Event handlers\n const onClipboardCopy = (cut: boolean) => {\n if (isEmptySelection(selection)) return;\n return copySelection(selection, cut);\n };\n\n const onClipboardPaste = async (e: any) => {\n e.preventDefault();\n\n const clipboardData = e.clipboardData || (window as any).clipboardData;\n const table = await parseClipboardTable(clipboardData);\n if (table) pasteIntoSelection(selection, table);\n };\n\n useLayoutEffect(() => {\n if (!addListener) return;\n\n // Use onpaste event when we can because it has more browser support\n window.document.addEventListener('paste', onClipboardPaste);\n return () => {\n window.document.removeEventListener('paste', onClipboardPaste);\n };\n });\n\n const clipboardApi = useMemo(\n () => ({\n copySelection,\n pasteSelection,\n canPasteSelection: canPaste,\n }),\n [copySelection, pasteSelection, canPaste],\n );\n\n return { clipboardApi, onClipboardCopy, onClipboardPaste };\n};\n\nconst copyClipboardTable = async (rows: string[][], payload?: ClipboardPayload<any> | null) => {\n const text = formatRowsAsTSV(rows);\n const html = formatRowsAsHTML(rows, payload ?? undefined);\n\n await (navigator.clipboard as any).write([\n new ClipboardItem({\n 'text/html': new Blob([html], { type: 'text/html' }),\n 'text/plain': new Blob([text], { type: 'text/plain' }),\n }),\n ]);\n\n const event = new Event('copy');\n document.dispatchEvent(event);\n};\n\nconst pasteClipboardTable = async () => {\n const items = await (navigator.clipboard as any).read();\n const [item] = items;\n if (!item) return;\n\n return parseClipboardTable(item);\n};\n\nconst parseClipboardTable = async (item: ClipboardItem | DataTransfer): Promise<ClipboardTable | null> => {\n // Work with both clipboard API (ClipboardItem) and onpaste event (DataTransfer)\n const has = (type: string) => {\n return item.types.includes(type);\n };\n\n const get = (type: string) => {\n if ('getData' in item) return item.getData(type);\n else if ('getType' in item) return (item as any).getType(type).then((blob: Blob) => blob.text());\n return '';\n };\n\n let rows, payload;\n if (has('text/html')) {\n const pastedHtml = await get('text/html');\n ({ rows, payload } = parsePastedHtml(pastedHtml));\n } else if (has('text/plain')) {\n const text = await get('text/plain');\n rows = parsePastedText(text);\n }\n if (!rows) return { rows: [] };\n\n return { rows, payload };\n};\n\nconst formatRowsAsTSV = (rows: string[][]) => rows.map((row) => row.join('\\t')).join('\\n');\n\nconst formatRowsAsHTML = (rows: string[][], payload?: ClipboardPayload<any>) => {\n const trs = rows\n .map((row) => {\n const tds = row\n .map(formatTextAsHTML)\n .map(\n (cell) =>\n `<td>${cell.replaceAll(/ +/g, (x) => ' ' + NON_BREAKING_SPACE.repeat(x.length - 1))}</td>`,\n );\n return tds.join('');\n })\n .map((row) => `<tr>${row}</tr>`)\n .join('\\n');\n\n const table = `<table>${trs}</table>`;\n\n if (payload) {\n const extra = `<SheetHappens payload=\"${formatTextAsHTML(JSON.stringify(payload))}\"></SheetHappens>`;\n return extra + table;\n }\n\n return table;\n};\n\nconst formatTextAsHTML = (s: string) => s.replace(/[&\"'<>]/g, (i) => `&#${i.charCodeAt(0)};`);\n\nconst formatSelectionAsRows = (selection: Rectangle, editData: CellPropertyFunction<string>) => {\n if (isEmptySelection(selection)) return [];\n\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n if (isMaybeRowSelection(selection)) {\n const [cellX] = findApproxMaxEditDataIndex(editData);\n minX = 0;\n maxX = cellX;\n }\n if (isMaybeColumnSelection(selection)) {\n const [, cellY] = findApproxMaxEditDataIndex(editData);\n minY = 0;\n maxY = cellY;\n }\n\n const rows: string[][] = [];\n\n for (let y = minY; y <= maxY; y++) {\n const row: string[] = [];\n\n for (let x = minX; x <= maxX; x++) {\n const value = editData(x, y);\n if (value !== null && value !== undefined) {\n row.push(value != null ? value : '');\n }\n }\n\n rows.push(row);\n }\n\n return rows;\n};\n\nconst findTag = (element: any, tagName: string): any => {\n for (const child of element.children) {\n if (child.nodeName === tagName) {\n return child;\n }\n const maybeTag = findTag(child, tagName);\n if (maybeTag) {\n return maybeTag;\n }\n }\n};\n\nconst parsePastedHtml = (\n html: string,\n): {\n rows: string[][];\n payload: any;\n} => {\n const div = document.createElement('div');\n div.innerHTML = html.trim();\n\n const rows = [];\n let payload: any = undefined;\n\n const sheetNode = findTag(div, 'SHEETHAPPENS');\n if (sheetNode) {\n const json = sheetNode.getAttribute('payload');\n try {\n payload = JSON.parse(json);\n } catch (e) {}\n }\n\n const tableNode = findTag(div, 'TABLE');\n if (tableNode) {\n for (const tableChild of tableNode.children) {\n if (tableChild.nodeName === 'TBODY') {\n for (const tr of tableChild.children) {\n if (tr.nodeName === 'TR') {\n const row = [];\n for (const td of tr.children) {\n if (td.nodeName === 'TD') {\n let str: string = '';\n if (td.children.length !== 0 && td.children[0].nodeName === 'P') {\n const p = td.children[0];\n if (p.children.length !== 0 && p.children[0].nodeName === 'FONT') {\n str = p.children[0].textContent.trim();\n } else {\n str = p.textContent.trim();\n }\n } else {\n str = td.textContent.trim();\n }\n str = str.replaceAll(/[\\r\\n\\t ]+/g, ' ');\n str = str.replaceAll(NON_BREAKING_SPACE, ' ');\n\n row.push(str);\n }\n }\n rows.push(row);\n }\n }\n }\n }\n }\n\n return {\n rows,\n payload,\n };\n};\n\nconst parsePastedText = (text: string): string[][] => {\n return text.split(/\\r?\\n/).map((line) => line.split('\\t'));\n};\n","import { XY, CellLayout, VisibleLayout, LayoutCache } from './types';\nimport { seq } from './util';\nimport { ORIGIN } from './constants';\n\nconst INITIAL_SIZE = 256;\n\n// Local cell layout (virtualized with frozen columns/rows)\n//\n// - converts cell indices to (x, y) canvas pixels for any cell, including off-screen\n// - maps (x, y) canvas pixels back to cell index for any visible cell\n// - can also generate absolute, unscrolled offsets relative to (0,0) to drive scrolling\n// - generates list of visible cols/rows in view\n//\n// Note that adjacent column indices are not necessarily adjacent, i.e. end of [i] != start of [i + 1].\nexport const makeCellLayout = (\n freeze: XY,\n offset: XY,\n\n columns: LayoutCache,\n rows: LayoutCache,\n): CellLayout => {\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n const getIndentX = () => columns.getStart(0);\n const getIndentY = () => rows.getStart(0);\n\n // Origin for cell, frozen or relative\n const getBaseOriginFor = (index: number, freeze: number, offset: number) => {\n return index < freeze ? 0 : offset + freeze;\n };\n\n // Get visible pixel x of cell\n const columnToPixel = (column: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(column, freezeX, offsetX);\n const relative = columns.getStart(column) - columns.getStart(base);\n const adjust = column < freezeX ? 0 : columns.getStart(freezeX) - columns.getStart(0);\n const size = columns.getSize(column);\n\n return getIndentX() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel y of cell\n const rowToPixel = (row: number, anchor: number = 0): number => {\n const base = getBaseOriginFor(row, freezeY, offsetY);\n const relative = rows.getStart(row) - rows.getStart(base);\n const adjust = row < freezeY ? 0 : rows.getStart(freezeY) - rows.getStart(0);\n const size = rows.getSize(row);\n\n return getIndentY() + relative + adjust + anchor * size;\n };\n\n // Get visible pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToPixel = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToPixel(cellX, anchorX), rowToPixel(cellY, anchorY)];\n };\n\n // Get absolute / unscrolled pixel x of cell\n const columnToAbsolute = (column: number, anchorX: number = 0): number => {\n const relative = columns.getStart(column);\n const size = column < 0 ? 0 : columns.getSize(column);\n\n return relative + anchorX * size;\n };\n\n // Get absolute / unscrolled pixel y of cell\n const rowToAbsolute = (row: number, anchorY: number = 0): number => {\n const relative = rows.getStart(row);\n const size = row < 0 ? 0 : rows.getSize(row);\n\n return relative + anchorY * size;\n };\n\n // Get absolute / unscrolled pixel position of cell, offset with anchor [0..1, 0..1]\n const cellToAbsolute = (cell: XY, anchor: XY = ORIGIN): XY => {\n const [cellX, cellY] = cell;\n const [anchorX, anchorY] = anchor;\n return [columnToAbsolute(cellX, anchorX), rowToAbsolute(cellY, anchorY)];\n };\n\n // Lookup pixel X or Y in cell layout\n const pixelToIndex = (pixel: number, anchor: number, freeze: number, offset: number, layout: LayoutCache) => {\n const { getStart, lookupIndex } = layout;\n\n const indent = getStart(0);\n if (pixel < indent) return 0;\n\n const frozen = getStart(freeze);\n if (pixel < frozen) {\n return lookupIndex(pixel, anchor);\n } else {\n const relative = pixel - indent;\n const base = getStart(offset + freeze);\n const adjust = getStart(freeze) - getStart(0);\n return lookupIndex(base + relative - adjust, anchor);\n }\n };\n\n // Lookup pixel X or Y in cell layout (helpers)\n const pixelToColumn = (pixelX: number, anchorX: number = 0) =>\n pixelToIndex(pixelX, anchorX, freezeX, offsetX, columns);\n const pixelToRow = (pixelY: number, anchorY: number = 0) => pixelToIndex(pixelY, anchorY, freezeY, offsetY, rows);\n\n // Lookup pixel XY in cell layout\n const pixelToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [pixelToColumn(pixelX, anchorX), pixelToRow(pixelY, anchorY)];\n };\n\n // Lookup absolute / unscrolled pixel X or Y in cell layout\n const absoluteToIndex = (pixel: number, anchor: number, layout: LayoutCache) => {\n if (pixel < 0) return -1;\n\n const { lookupIndex } = layout;\n return lookupIndex(pixel, anchor);\n };\n\n // Lookup absolute / unscrolled X or Y in cell layout (helpers)\n const absoluteToColumn = (pixelX: number, anchorX: number = 0) => absoluteToIndex(pixelX, anchorX, columns);\n const absoluteToRow = (pixelY: number, anchorY: number = 0) => absoluteToIndex(pixelY, anchorY, rows);\n\n // Lookup absolute / unscrolled XY in cell layout\n const absoluteToCell = (pixel: XY, anchor: XY = ORIGIN): XY => {\n const [pixelX, pixelY] = pixel;\n const [anchorX, anchorY] = anchor;\n return [absoluteToColumn(pixelX, anchorX), absoluteToRow(pixelY, anchorY)];\n };\n\n // Get visible range of columns or rows\n const getVisibleIndices = (view: number, freeze: number, offset: number, layout: LayoutCache) => {\n const indices = [...seq(freeze)];\n\n const { getStart, getEnd } = layout;\n\n const frozen = getEnd(freeze - 1);\n const notFrozen = getStart(offset + freeze);\n\n const relative = view - frozen;\n for (let i = offset + freeze; getStart(i) - notFrozen <= relative; ++i) {\n indices.push(i);\n }\n\n return indices;\n };\n\n // Get visible range for an XY viewport\n const getVisibleCells = (view: XY): VisibleLayout => {\n const [viewX, viewY] = view;\n return {\n columns: getVisibleIndices(viewX, freezeX, offsetX, columns),\n rows: getVisibleIndices(viewY, freezeY, offsetY, rows),\n };\n };\n\n const getVersion = () => columns.getVersion() + rows.getVersion();\n\n return {\n columnToPixel,\n rowToPixel,\n cellToPixel,\n\n columnToAbsolute,\n rowToAbsolute,\n cellToAbsolute,\n\n pixelToColumn,\n pixelToRow,\n pixelToCell,\n\n absoluteToColumn,\n absoluteToRow,\n absoluteToCell,\n\n getVisibleCells,\n getIndentX,\n getIndentY,\n\n getVersion,\n };\n};\n\n// Offset cache in 1 dimension.\n//\n// Allows O(1) queries of distance between any two points, once warmed up.\n// Can do reverse lookup back to index with binary search, once warmed up.\n//\n// - caches sizer(i), each is only called once\n// - offset[0] = sizer(-1)\n// - adds up offset[i] = sizer(0) + sizer(1) + ... + sizer(i - 1)\n// - cache can be truncated during resizing ops at split\n// - to replace sizer function, cache must be destroyed\nexport const makeLayoutCache = (sizer: (index: number) => number): LayoutCache => {\n const offsets = makeIntMap(INITIAL_SIZE);\n const sizes = makeIntMap(INITIAL_SIZE);\n\n let version = 0;\n offsets.set(0, sizer(-1));\n\n // Cache size lookup directly\n const getSize = (i: number): number => {\n if (i < 0) return sizer(i);\n if (sizes.has(i)) return sizes.get(i)!;\n\n const size = sizer(i) || 0;\n sizes.set(i, size);\n return size;\n };\n\n // Cache offset sum recursively\n const getOffset = (i: number): number => {\n if (i < 0) return 0;\n if (offsets.has(i)) return offsets.get(i)!;\n\n let j = offsets.tail() || -1;\n\n // Use a while loop to avoid stack overflow\n while (j < i) {\n const size = getSize(j);\n const offset = (offsets.get(j) || 0) + size;\n offsets.set(++j, offset);\n }\n\n return offsets.get(i)!;\n };\n\n // Boundary points\n const getStart = (i: number) => getOffset(i);\n const getEnd = (i: number) => getOffset(i + 1);\n\n // Reverse lookup from offset to index\n const lookupIndex = (x: number, anchor: number = 0) => {\n // Get end of offsets array\n let last = offsets.tail() || 0;\n\n // Extend cache if value exceeds current end\n while (getOffset(last) < x && getSize(last)) last += 64;\n\n // Do binary search for exact position\n let start = 0;\n let end = last;\n while (start < end) {\n let mid = start + Math.floor((end - start) / 2) + 1;\n let value = getOffset(mid) - (anchor ? anchor * getSize(mid - 1) : 0);\n if (value <= x) start = mid;\n else end = mid - 1;\n }\n\n return start;\n };\n\n const clearAfter = (index: number) => {\n index = Math.max(0, index);\n offsets.truncate(index);\n sizes.truncate(index);\n version++;\n };\n\n const setSizer = (s: (index: number) => number) => {\n sizer = s;\n };\n const getVersion = () => version;\n\n return { getSize, getStart, getEnd, getVersion, lookupIndex, setSizer, clearAfter };\n};\n\n// Fast map<integer, integer> that is mostly filled in from start to end.\n// Elements are only removed by truncating all indices > n.\nconst makeIntMap = (initialSize: number = 128) => {\n let used: Uint8Array;\n let values: Uint32Array;\n let last = 0;\n\n const GROW = 1.2; // 20% growth at a time\n\n const allocate = (size: number) => {\n let newUsed = new Uint8Array(size);\n let newValues = new Uint32Array(size);\n if (used) copy(used, newUsed);\n if (values) copy(values, newValues);\n used = newUsed;\n values = newValues;\n };\n allocate(initialSize);\n\n const copy = (from: Uint8Array | Uint32Array, to: Uint8Array | Uint32Array) => {\n let n = Math.min(from.length, to.length);\n for (let i = 0; i < n; ++i) {\n to[i] = from[i];\n }\n };\n\n const ensure = (size: number) => {\n const l = values.length;\n const grow = Math.round(l * GROW);\n if (l < size) allocate(Math.max(grow, size));\n };\n\n const truncate = (size: number) => {\n const l = values.length;\n\n // Do nothing if smaller\n if (l < size) return;\n\n // If more than 20% bigger, shrink to exact size\n const shrink = Math.round(size * GROW);\n if (l > shrink) allocate(size);\n // Else zero out tail\n else for (let i = size; i < l; ++i) used[i] = 0;\n\n // Track last filled element\n last = Math.min(last, size);\n while (last > 0 && !used[last]) last--;\n };\n\n const getTail = () => (used[last] ? last : null);\n\n const setValue = (i: number, value: number) => {\n ensure(i + 1);\n values[i] = value;\n used[i] = 1;\n last = Math.max(last, i);\n };\n\n const getValue = (i: number) => (used[i] ? values[i] : null);\n const hasValue = (i: number) => !!used[i];\n\n return { truncate, set: setValue, get: getValue, has: hasValue, tail: getTail };\n};\n","import {\n CellContentRender,\n CellLayout,\n CellPropertyFunction,\n CellPropertyStyledFunction,\n RowOrColumnPropertyFunction,\n RowOrColumnPropertyStyledFunction,\n ImageRenderer,\n InternalSheetStyle,\n Rectangle,\n Selection,\n Style,\n CellContentType,\n VisibleLayout,\n XY,\n} from './types';\nimport { resolveCellFlexLayout, resolveCellAbsoluteLayout } from './cell';\nimport { normalizeSelection, isEmptySelection, isColumnSelection, isRowSelection } from './coordinate';\nimport { wrapText } from './text';\nimport { isInRange, isInRangeLeft, isInRangeCenter } from './util';\nimport {\n COLORS,\n SIZES,\n DEFAULT_CELL_STYLE,\n DEFAULT_COLUMN_HEADER_STYLE,\n HEADER_SELECTED_STYLE,\n HEADER_GROUP_SELECTED_STYLE,\n HEADER_ACTIVE_STYLE,\n NO_STYLE,\n ONE_ONE,\n} from './constants';\n\nexport const renderSheet = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellLayout: CellLayout,\n visibleCells: VisibleLayout,\n\n sheetStyle: InternalSheetStyle,\n cellStyle: CellPropertyFunction<Style>,\n\n selection: Rectangle,\n secondarySelections: Selection[],\n isFocused: boolean,\n\n knobPosition: XY | null,\n knobArea: Rectangle | null,\n dragIndices: [number[] | null, number[] | null],\n dragOffset: XY | null,\n dropTarget: Rectangle | null,\n\n columnHeaders: RowOrColumnPropertyStyledFunction<CellContentType>,\n columnHeaderStyle: RowOrColumnPropertyFunction<Style>,\n displayData: CellPropertyStyledFunction<CellContentType>,\n\n columnGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n rowGroupKeys: RowOrColumnPropertyFunction<string | number | null>,\n selectedColumnGroups: Set<string | number | null> | null,\n selectedRowGroups: Set<string | number | null> | null,\n\n dataOffset: XY,\n): CellContentRender[] => {\n const { canvas } = context;\n const { width, height } = canvas;\n const {\n hideGridlines,\n hideRowHeaders,\n hideColumnHeaders,\n freezeColumns,\n freezeRows,\n shadowBlur,\n shadowColor,\n shadowOpacity,\n } = sheetStyle;\n const { columns, rows } = visibleCells;\n const { columnToPixel, rowToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const allClickables: CellContentRender[] = [];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n resizeCanvas(canvas);\n context.clearRect(0, 0, width, height);\n context.fillStyle = 'white';\n context.fillRect(0, 0, width, height);\n context.shadowColor = '#00000080';\n\n // Cell fill\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const { fillColor } = cellStyle(x, y);\n if (fillColor) {\n context.fillStyle = fillColor;\n context.fillRect(left, top, right - left, bottom - top);\n }\n }\n }\n\n const selectionActive = !isEmptySelection(selection);\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [selected, hideKnob] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n\n // Selection fill\n if (selectionActive) {\n const [[left, top], [right, bottom]] = selected;\n context.fillStyle = COLORS.selectionBackground;\n context.fillRect(left, top, right - left, bottom - top);\n }\n\n if (!hideRowHeaders) {\n // Row header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, indentX, context.canvas.height);\n\n // Row header selection shadow\n if (selectionActive && !columnSelectionActive) {\n const [[, top], [, bottom]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(0, top, indentX, bottom - top);\n }\n }\n\n if (!hideColumnHeaders) {\n // Column header background\n context.fillStyle = COLORS.headerBackground;\n context.fillRect(0, 0, context.canvas.width, indentY);\n\n // Column header selection shadow\n if (selectionActive && !rowSelectionActive) {\n const [[left], [right]] = selected;\n context.fillStyle = COLORS.headerActive;\n context.fillRect(left, 0, right - left, indentY);\n }\n }\n\n // Grid\n context.strokeStyle = COLORS.gridLine;\n context.lineWidth = 1;\n\n const gridRight = hideGridlines ? indentX : context.canvas.width;\n const gridBottom = hideGridlines ? indentY : context.canvas.height;\n\n const drawGridLineX = (x: number, height: number) => {\n context.beginPath();\n context.moveTo(x - 0.5, 0);\n context.lineTo(x - 0.5, height);\n context.stroke();\n };\n\n const drawGridLineY = (y: number, width: number) => {\n context.beginPath();\n context.moveTo(0, y - 0.5);\n context.lineTo(width, y - 0.5);\n context.stroke();\n };\n\n drawGridLineX(indentX, context.canvas.height);\n drawGridLineY(indentY, context.canvas.width);\n\n for (const column of columns) {\n const right = columnToPixel(column, 1);\n drawGridLineX(right, gridBottom);\n }\n\n for (const row of rows) {\n const bottom = rowToPixel(row, 1);\n drawGridLineY(bottom, gridRight);\n }\n\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(selection);\n\n // Row header text\n if (!hideRowHeaders) {\n context.textBaseline = 'middle';\n context.textAlign = 'center';\n context.font = DEFAULT_CELL_STYLE.fontSize + 'px ' + DEFAULT_CELL_STYLE.fontFamily;\n context.fillStyle = COLORS.headerText;\n\n for (const row of rows) {\n const content = `${row + 1}`;\n\n // Row selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(row, minY, maxY);\n\n const groupKey = rowGroupKeys(row);\n const isInRowGroup = groupKey != null && selectedRowGroups?.has(groupKey);\n\n const isSelfSelected = rowSelectionActive && isActive;\n const isGroupSelected = rowSelectionActive && isInRowGroup;\n\n const style = isSelfSelected\n ? HEADER_SELECTED_STYLE\n : isGroupSelected\n ? HEADER_GROUP_SELECTED_STYLE\n : isActive\n ? HEADER_ACTIVE_STYLE\n : NO_STYLE;\n\n const resolvedStyle = { ...DEFAULT_COLUMN_HEADER_STYLE, ...style };\n\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n\n const clickables = renderCell(\n context,\n imageRenderer,\n content,\n resolvedStyle,\n 0,\n top,\n indentX,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Column header text\n if (!hideColumnHeaders) {\n context.textBaseline = 'middle';\n\n for (const column of columns) {\n // Column selection mode\n // (this is separate from the header selection shadow because we only want to highlight visible headers)\n const isActive = isInRange(column, minX, maxX);\n\n const groupKey = columnGroupKeys(column);\n const isInColumnGroup = groupKey != null && selectedColumnGroups?.has(groupKey);\n\n const isSelected = columnSelectionActive && !rowSelectionActive && (isActive || isInColumnGroup);\n const selectedStyle = isSelected ? HEADER_SELECTED_STYLE : NO_STYLE;\n const activeStyle = isActive ? HEADER_ACTIVE_STYLE : NO_STYLE;\n const style = {\n ...DEFAULT_COLUMN_HEADER_STYLE,\n ...columnHeaderStyle(column),\n ...activeStyle,\n ...selectedStyle,\n };\n\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n\n const content = columnHeaders(column, style) ?? excelHeaderString(column + 1);\n\n const clickables = renderCell(context, imageRenderer, content, style, left, 0, right - left, indentY);\n if (clickables) allClickables.push(...clickables);\n }\n }\n\n // Selection outline\n if (selectionActive) {\n context.strokeStyle = COLORS.selectionBorder;\n context.lineWidth = 2;\n context.globalAlpha = isFocused ? 1 : 0.5;\n\n const [[left, top], [right, bottom]] = selected;\n context.strokeRect(left, top, right - left - 1, bottom - top - 1);\n\n context.globalAlpha = 1;\n }\n\n for (const secondarySelection of secondarySelections) {\n const selection = secondarySelection.span;\n if (isEmptySelection(selection)) continue;\n\n const [selected] = resolveFrozenSelection(selection, cellLayout, freeze, dataOffset);\n const [[left, top], [right, bottom]] = selected;\n\n context.strokeStyle = secondarySelection.color;\n context.lineWidth = 1;\n context.beginPath();\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n }\n\n // Knob drag outline\n if (knobArea) {\n let [[minX, minY], [maxX, maxY]] = normalizeSelection(knobArea);\n const left = columnToPixel(minX);\n const top = rowToPixel(minY);\n const right = columnToPixel(maxX, 1);\n const bottom = rowToPixel(maxY, 1);\n\n context.strokeStyle = COLORS.knobAreaBorder;\n context.setLineDash([3, 3]);\n context.lineWidth = 1;\n\n context.strokeRect(left - 1, top - 1, right - left + 1, bottom - top + 1);\n context.setLineDash([]);\n }\n\n // Selection knob\n if (knobPosition && !hideKnob) {\n const [knobX, knobY] = knobPosition;\n context.fillStyle = COLORS.selectionBorder;\n context.fillRect(knobX - SIZES.knobArea * 0.5, knobY - SIZES.knobArea * 0.5, SIZES.knobArea, SIZES.knobArea);\n }\n\n // Drag ghost (pixels)\n if (dragOffset) {\n const [shiftX, shiftY] = dragOffset;\n const [dragColumns, dragRows] = dragIndices;\n\n context.fillStyle = COLORS.dragGhost;\n\n if (dragColumns) {\n for (const column of dragColumns) {\n const left = columnToPixel(column);\n const right = columnToPixel(column, 1);\n context.fillRect(left + shiftX, 0, right - left, height);\n }\n }\n if (dragRows) {\n for (const row of dragRows) {\n const top = rowToPixel(row);\n const bottom = rowToPixel(row, 1);\n context.fillRect(0, top + shiftY, width, bottom - top);\n }\n }\n }\n\n // Drop target\n if (dropTarget) {\n let [[left, top], [right, bottom]] = resolveSelection(dropTarget, cellLayout);\n\n context.strokeStyle = COLORS.dropTarget;\n context.lineWidth = 4;\n\n if (isColumnSelection(dropTarget)) {\n right = left;\n }\n if (isRowSelection(dropTarget)) {\n bottom = top;\n }\n context.strokeRect(left - 1, top - 1, right - left, bottom - top);\n }\n\n // Draw frozen row/col shadow\n const [scrollX, scrollY] = dataOffset;\n const hasRowShadow = freezeRows > 0 && scrollY > 0;\n const hasColumnShadow = freezeColumns > 0 && scrollX > 0;\n if (hasRowShadow || hasColumnShadow) {\n if (hasRowShadow) {\n const h = rowToAbsolute(freezeRows);\n const gradient = context.createLinearGradient(0, h, 0, h + shadowBlur);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(0, h, width, shadowBlur);\n }\n if (hasColumnShadow) {\n const w = columnToAbsolute(freezeColumns);\n const gradient = context.createLinearGradient(w, 0, w + shadowBlur, 0);\n halfShadowGradient(gradient, shadowColor, shadowOpacity);\n context.fillStyle = gradient;\n context.fillRect(w, 0, shadowBlur, height);\n }\n }\n\n // Cell contents\n context.textBaseline = 'middle';\n\n for (const y of rows) {\n for (const x of columns) {\n const left = columnToPixel(x);\n const right = columnToPixel(x, 1);\n const top = rowToPixel(y);\n const bottom = rowToPixel(y, 1);\n\n const style = {\n ...DEFAULT_CELL_STYLE,\n ...cellStyle(x, y),\n };\n const cellContent = displayData(x, y, style);\n if (cellContent !== null && cellContent !== undefined) {\n const clickables = renderCell(\n context,\n imageRenderer,\n cellContent,\n style,\n left,\n top,\n right - left,\n bottom - top,\n );\n if (clickables) allClickables.push(...clickables);\n }\n }\n }\n\n return allClickables;\n};\n\nexport const renderCell = (\n context: CanvasRenderingContext2D,\n imageRenderer: ImageRenderer,\n cellContent: CellContentType,\n style: Required<Style>,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n): CellContentRender[] | null => {\n if (cellContent === null) {\n return null;\n }\n\n const fillText = context.fillText.bind(context);\n const fontString = style.fontWeight + ' ' + style.fontSize + 'px ' + style.fontFamily;\n\n context.font = fontString;\n context.fillStyle = style.color;\n\n // Apply cell margins\n const { marginTop, marginBottom, marginLeft, marginRight, lineHeight } = style;\n\n const innerX = Math.round(xCoord + marginLeft);\n const innerY = Math.round(yCoord + marginTop);\n const innerWidth = Math.round(cellWidth - marginRight - marginLeft);\n const innerHeight = Math.round(cellHeight - marginTop - marginBottom);\n\n // Snap to device-pixels for better alignment\n const middleY = roundDpi(yCoord + marginTop + lineHeight / 2);\n\n if (style.backgroundColor !== '') {\n context.fillStyle = style.backgroundColor;\n context.fillRect(xCoord, yCoord, cellWidth, cellHeight);\n context.fillStyle = style.color;\n }\n\n if (typeof cellContent === 'string' || typeof cellContent === 'number') {\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n wrapText(context, cellContent, style, undefined, innerX, middleY, innerWidth, innerHeight, fillText);\n });\n return null;\n } else if (typeof cellContent === 'object') {\n const renderedFlex = resolveCellFlexLayout(context, cellContent, innerX, innerY, innerWidth, innerHeight);\n const renderedAbsolute = resolveCellAbsoluteLayout(cellContent, innerX, innerY, innerWidth, innerHeight);\n const rendered = [...renderedFlex, ...renderedAbsolute];\n\n clipToBox(context, xCoord, yCoord, cellWidth, cellHeight, () => {\n for (const [i, render] of rendered.entries()) {\n const { box, item } = render;\n\n const [[left, top], [right, bottom]] = box;\n\n const width = right - left;\n const height = bottom - top;\n\n if (cellContent.inspect) {\n context.lineWidth = 1;\n context.strokeStyle = '#ff00ff';\n context.strokeRect(left + 0.5, top + 0.5, width - 0.5, height - 0.5);\n }\n\n const clipLeft = i > 0 ? left : xCoord;\n const clipRight = i < rendered.length ? right : yCoord + cellWidth;\n const clipWidth = clipRight - clipLeft;\n\n clipToBox(context, clipLeft, yCoord, clipWidth, cellHeight, () => {\n if (item.display === 'inline') {\n const { text } = item;\n if (text != null) {\n wrapText(\n context,\n text,\n style,\n item.textAlign,\n left,\n roundDpi(top + lineHeight / 2),\n width,\n height,\n fillText,\n );\n }\n }\n if (item.display === 'image' || item.display === 'icon') {\n imageRenderer(context, item, style, box);\n }\n });\n }\n });\n\n return rendered.filter(({ item }) => item?.onClick);\n }\n return null;\n};\n\nconst clipToBox = (\n context: CanvasRenderingContext2D,\n xCoord: number,\n yCoord: number,\n cellWidth: number,\n cellHeight: number,\n callback: () => void,\n) => {\n context.save();\n context.beginPath();\n context.rect(xCoord, yCoord, cellWidth, cellHeight);\n context.clip();\n callback();\n context.restore();\n};\n\n// Resolve selection into a consistent rectangle, without dealing with frozen rows/columns\nconst resolveSelection = (selection: Rectangle, cellLayout: CellLayout) => {\n const { cellToPixel } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [left, top],\n [right, bottom],\n ];\n};\n\n// Resolve selection into a consistent rectangle, handling edge cases around frozen rows/columns.\nconst resolveFrozenSelection = (\n selection: Rectangle,\n cellLayout: CellLayout,\n\n freeze: XY,\n offset: XY,\n) => {\n const { cellToPixel, columnToAbsolute, rowToAbsolute } = cellLayout;\n\n const rowSelectionActive = isRowSelection(selection);\n const columnSelectionActive = isColumnSelection(selection);\n\n const [freezeX, freezeY] = freeze;\n const [offsetX, offsetY] = offset;\n\n // Get selection range\n const [min, max] = normalizeSelection(selection);\n const [minX, minY] = min;\n const [maxX, maxY] = max;\n\n // Direct projection to visible grid\n let [left, top] = cellToPixel(min);\n let [right, bottom] = cellToPixel(max, ONE_ONE);\n\n // Get fixed indent\n const indentX = columnToAbsolute(0);\n const indentY = rowToAbsolute(0);\n\n // Get frozen edge\n const frozenX = columnToAbsolute(freezeX);\n const frozenY = rowToAbsolute(freezeY);\n\n let hideKnob = false;\n\n // If the selection crosses the frozen edge, it needs to always cover the entire frozen area.\n if (isInRangeCenter(freezeX, minX, maxX + 1)) {\n const edge = frozenX;\n if (right <= edge) {\n right = edge;\n hideKnob = true;\n }\n }\n if (isInRangeCenter(freezeY, minY, maxY + 1)) {\n const edge = frozenY;\n if (bottom <= edge) {\n bottom = edge;\n hideKnob = true;\n }\n }\n\n // If the selection starts/ends under the frozen area, treat as off-screen\n if (isInRangeLeft(minX, freezeX, offsetX + freezeX)) {\n left = -1e5;\n\n const lastInvisibleX = offsetX + freezeX - 1;\n if (maxX <= lastInvisibleX) {\n if (maxX === lastInvisibleX) right = indentX;\n else right = -1e5;\n hideKnob = true;\n }\n }\n if (isInRangeLeft(minY, freezeY, offsetY + freezeY)) {\n top = -1e5;\n\n const lastInvisibleY = offsetY + freezeY - 1;\n if (maxY <= lastInvisibleY) {\n if (maxY === lastInvisibleY) bottom = indentY;\n else bottom = -1e5;\n hideKnob = true;\n }\n }\n\n if (rowSelectionActive && offsetX > 0) {\n hideKnob = true;\n }\n if (columnSelectionActive && offsetY > 0) {\n hideKnob = true;\n }\n\n // Extend full row/column selection infinitely right/down\n if (rowSelectionActive) {\n right = 1e5;\n }\n if (columnSelectionActive) {\n bottom = 1e5;\n }\n\n return [\n [\n [left, top],\n [right, bottom],\n ],\n hideKnob,\n ] as [Rectangle, boolean];\n};\n\nconst resizeCanvas = (canvas: HTMLCanvasElement) => {\n const { width, height } = canvas.getBoundingClientRect();\n let { devicePixelRatio: ratio = 1 } = window;\n if (ratio < 1) {\n ratio = 1;\n }\n const newCanvasWidth = Math.round(width * ratio);\n const newCanvasHeight = Math.round(height * ratio);\n\n if (canvas.width !== newCanvasWidth || canvas.height !== newCanvasHeight) {\n const context = canvas.getContext('2d');\n if (context) {\n canvas.width = newCanvasWidth;\n canvas.height = newCanvasHeight;\n context.scale(ratio, ratio);\n }\n }\n};\n\nconst excelHeaderString = (num: number) => {\n let s = '';\n let t = 0;\n while (num > 0) {\n t = (num - 1) % 26;\n s = String.fromCharCode(65 + t) + s;\n num = ((num - t) / 26) | 0;\n }\n return s || '';\n};\n\nconst halfShadowGradient = (gradient: CanvasGradient, rgb: string, opacity: number) => {\n const hex = (x: number) => ('0' + Math.round(x).toString(16)).slice(-2);\n // Half-sine ease\n const ease = (x: number) => 1.0 - Math.sin((x * Math.PI) / 2);\n // Gamma adjustment assuming blend on white\n const adjust = (x: number) => 1.0 - Math.pow(1.0 - x, 2.2);\n for (let i = 0; i <= 16; ++i) {\n const f = i / 16;\n gradient.addColorStop(f, rgb + hex(adjust(opacity * ease(f) * 0.5) * 255));\n }\n};\n\n// Move down half a logical pixel on high-dpi\nexport const getDpiNudge = () => {\n const { devicePixelRatio } = window;\n return (devicePixelRatio - 1) / devicePixelRatio;\n};\n\n// Round to device pixels instead of logical pixels, and nudge downwards on high-dpi for baseline alignment\nexport const roundDpi = (y: number) => {\n const { devicePixelRatio } = window;\n return Math.round((y + getDpiNudge()) * devicePixelRatio) / devicePixelRatio;\n};\n","import { InternalSheetStyle, SheetStyle } from './types';\nimport { COLORS, SIZES } from './constants';\n\nexport const resolveSheetStyle = (sheetStyle?: SheetStyle): InternalSheetStyle => {\n return {\n freezeColumns: sheetStyle?.freezeColumns || 0,\n freezeRows: sheetStyle?.freezeRows || 0,\n hideColumnHeaders: sheetStyle?.hideColumnHeaders || false,\n hideRowHeaders: sheetStyle?.hideRowHeaders || false,\n hideGridlines: sheetStyle?.hideGridlines || false,\n hideScrollBars: sheetStyle?.hideScrollBars || false,\n shadowBlur: sheetStyle?.shadowBlur ?? SIZES.shadowBlur,\n shadowOpacity: sheetStyle?.shadowOpacity ?? SIZES.shadowOpacity,\n shadowColor: sheetStyle?.shadowColor ?? COLORS.shadowColor,\n };\n};\n","import styles from './styles.module.css';\nimport React, {\n forwardRef,\n useRef,\n useImperativeHandle,\n useLayoutEffect,\n useState,\n useMemo,\n KeyboardEventHandler,\n ReactElement,\n} from 'react';\nimport useResizeObserver from 'use-resize-observer';\n\nimport {\n XY,\n Rectangle,\n CellContentRender,\n CellLayout,\n CellProperty,\n CellPropertyStyled,\n CellContentType,\n ClipboardPayload,\n RowOrColumnPropertyStyled,\n RowOrColumnProperty,\n Selection,\n Change,\n SheetPointerEvent,\n InternalSheetStyle,\n InputStyle,\n SheetStyle,\n Style,\n VisibleLayout,\n} from './types';\n\nimport {\n DEFAULT_CELL_STYLE,\n INITIAL_MAX_SCROLL,\n NO_CELL,\n NO_CLICKABLES,\n NO_SELECTION,\n NO_SELECTIONS,\n ORIGIN,\n ONE_ONE,\n} from './constants';\nimport {\n normalizeSelection,\n validateSelection,\n isSameRectangle,\n mapSelectionColumns,\n mapSelectionRows,\n addXY,\n} from './coordinate';\nimport { useImageRenderer } from './image';\nimport { useMouse } from './mouse';\nimport { useKeyboard } from './keyboard';\nimport { useScroll, scrollToCell, clipDataOffset, updateScrollPosition } from './scroll';\nimport { useAutoSizeColumn, useAutoSizeRow } from './autosize';\nimport { useClipboardAPI } from './clipboard';\nimport { makeLayoutCache, makeCellLayout } from './layout';\nimport { createCellProp, createCellStyledProp, createRowOrColumnProp, createRowOrColumnStyledProp } from './props';\nimport { renderSheet, getDpiNudge } from './render';\nimport { resolveSheetStyle } from './style';\n\nexport type SheetInputProps = {\n value: string;\n autoFocus: boolean;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onChange: (value: string) => void;\n style: InputStyle;\n};\n\nexport type SheetRenderProps = {\n visibleCells: VisibleLayout;\n cellLayout: CellLayout;\n selection: Rectangle;\n editMode: boolean;\n};\n\nexport type SheetProps = {\n cellWidth?: RowOrColumnProperty<number>;\n cellHeight?: RowOrColumnProperty<number>;\n columnHeaders?: RowOrColumnPropertyStyled<CellContentType>;\n columnHeaderStyle?: RowOrColumnProperty<Style>;\n cellStyle?: CellProperty<Style>;\n readOnly?: CellProperty<boolean>;\n canSizeColumn?: RowOrColumnProperty<boolean>;\n canSizeRow?: RowOrColumnProperty<boolean>;\n canOrderColumn?: RowOrColumnProperty<boolean>;\n canOrderRow?: RowOrColumnProperty<boolean>;\n columnGroupKeys?: RowOrColumnProperty<string | number | null>;\n rowGroupKeys?: RowOrColumnProperty<string | number | null>;\n sourceData?: CellProperty<string | number | null>;\n displayData?: CellPropertyStyled<CellContentType>;\n editData?: CellProperty<string>;\n editKeys?: CellProperty<string>;\n sheetStyle?: SheetStyle;\n selection?: Rectangle;\n secondarySelections?: Selection[];\n\n maxRows?: number;\n maxColumns?: number;\n cacheLayout?: boolean | number;\n dontCommitEditOnSelectionChange?: boolean;\n dontChangeSelectionOnOrderChange?: boolean;\n\n autoFocus?: boolean;\n inputComponent?: (\n x: number,\n y: number,\n props: SheetInputProps,\n commitEditingCell?: (value?: string | number | null) => void,\n ) => ReactElement | undefined;\n\n renderInside?: (props: SheetRenderProps) => React.ReactNode;\n renderOutside?: (props: SheetRenderProps) => React.ReactNode;\n\n onSelectionChanged?: (minX: number, minY: number, maxX: number, maxY: number) => void;\n onRightClick?: (e: SheetPointerEvent) => void;\n onChange?: (changes: Array<Change>) => void;\n onColumnOrderChange?: (indices: number[], order: number) => void;\n onRowOrderChange?: (indices: number[], order: number) => void;\n onCellWidthChange?: (indices: number[], values: number[]) => void;\n onCellHeightChange?: (indices: number[], values: number[]) => void;\n onScrollChange?: (visibleRows: number[], visibleColumns: number[]) => void;\n\n onCopy?: (selection: Rectangle, cells: string[][]) => ClipboardPayload<any> | null | undefined;\n onPaste?: (\n selection: Rectangle,\n cells: string[][],\n payload: ClipboardPayload<any>,\n ) => boolean | null | undefined | Promise<boolean | null | undefined>;\n};\n\nexport type SheetRef = CellLayout & {\n startEditingCell: (editCell: XY, arrowKeyCommitMode?: boolean) => void;\n copySelection: (selection: Rectangle, cut?: boolean) => Promise<void>;\n pasteSelection: (selection: Rectangle) => Promise<void>;\n canPasteSelection: () => boolean;\n};\n\nconst Sheet = forwardRef<SheetRef, SheetProps>((props, ref) => {\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n\n const [maxScroll, setMaxScroll] = useState<XY>(INITIAL_MAX_SCROLL);\n const [dataOffset, setDataOffset] = useState<XY>(ORIGIN);\n\n const selectionProp = props.selection ?? NO_SELECTION;\n\n const [rawSelection, setRawSelection] = useState<Rectangle>(selectionProp);\n const [knobArea, setKnobArea] = useState<Rectangle | null>(null);\n const [dragOffset, setDragOffset] = useState<XY | null>(null);\n const [dragIndices, setDragIndices] = useState<[number[] | null, number[] | null]>([null, null]);\n const [dropTarget, setDropTarget] = useState<Rectangle | null>(null);\n const [editCell, setEditCell] = useState<XY>(NO_CELL);\n\n const [focused, setFocused] = useState(!!props.autoFocus);\n\n const [lastSelectionProp, setLastSelectionProp] = useState<Rectangle>(selectionProp);\n if (lastSelectionProp !== selectionProp) {\n setLastSelectionProp(selectionProp);\n setRawSelection(selectionProp);\n }\n\n const [editValue, setEditValue] = useState<string | number>('');\n const [arrowKeyCommitMode, setArrowKeyCommitMode] = useState(false);\n\n const { width: canvasWidth = 3000, height: canvasHeight = 3000 } = useResizeObserver({ ref: overlayRef });\n\n const cellWidth = useMemo(() => createRowOrColumnProp(props.cellWidth, 100), [props.cellWidth]);\n const cellHeight = useMemo(() => createRowOrColumnProp(props.cellHeight, 22), [props.cellHeight]);\n const columnHeaders = useMemo(() => createRowOrColumnStyledProp(props.columnHeaders, null), [props.columnHeaders]);\n const columnHeaderStyle = useMemo(\n () => createRowOrColumnProp(props.columnHeaderStyle, {}),\n [props.columnHeaderStyle],\n );\n\n const canSizeColumn = useMemo(() => createRowOrColumnProp(props.canSizeColumn, true), [props.canSizeColumn]);\n const canSizeRow = useMemo(() => createRowOrColumnProp(props.canSizeRow, true), [props.canSizeRow]);\n const canOrderColumn = useMemo(() => createRowOrColumnProp(props.canOrderColumn, true), [props.canOrderColumn]);\n const canOrderRow = useMemo(() => createRowOrColumnProp(props.canOrderRow, true), [props.canOrderRow]);\n\n const rowGroupKeys = useMemo(() => createRowOrColumnProp(props.rowGroupKeys, null), [props.rowGroupKeys]);\n const columnGroupKeys = useMemo(() => createRowOrColumnProp(props.columnGroupKeys, null), [props.columnGroupKeys]);\n\n const cellReadOnly = useMemo(() => createCellProp(props.readOnly, false), [props.readOnly]);\n\n const sourceData = useMemo(() => createCellProp(props.sourceData, null), [props.sourceData]);\n const displayData = useMemo(() => createCellStyledProp(props.displayData, ''), [props.displayData]);\n const editData = useMemo(() => createCellProp(props.editData, ''), [props.editData]);\n const editKeys = useMemo(() => createCellProp(props.editKeys, ''), [props.editKeys]);\n const cellStyle = useMemo(() => createCellProp(props.cellStyle, DEFAULT_CELL_STYLE), [props.cellStyle]);\n\n const sheetStyle: InternalSheetStyle = useMemo(() => resolveSheetStyle(props.sheetStyle), [props.sheetStyle]);\n const secondarySelections = props.secondarySelections ?? NO_SELECTIONS;\n\n const selection = useMemo(() => validateSelection(rawSelection), [rawSelection]);\n\n const selectedColumnGroups = useMemo(\n () =>\n props.columnGroupKeys\n ? new Set(mapSelectionColumns(selection)((x: number) => columnGroupKeys(x)).filter((x) => x != null))\n : null,\n [props.columnGroupKeys, columnGroupKeys, selection],\n );\n const selectedRowGroups = useMemo(\n () =>\n props.rowGroupKeys\n ? new Set(mapSelectionRows(selection)((y: number) => rowGroupKeys(y)).filter((x) => x != null))\n : null,\n [props.rowGroupKeys, rowGroupKeys, selection],\n );\n\n const [maxScrollX, maxScrollY] = maxScroll;\n\n const [editCellX, editCellY] = editCell;\n const editMode = editCellX !== -1 && editCellY !== -1;\n\n // Global layout for unscrolled/unfrozen grid\n // Cached either per width/height pair, or permanently with invalidation on resize/reorder.\n const shouldCacheLayout = (props.cacheLayout ?? false) !== false;\n const layoutVersion = typeof props.cacheLayout === 'number' ? props.cacheLayout : 0;\n const columnLayout = useMemo(() => makeLayoutCache(cellWidth), [shouldCacheLayout ? layoutVersion : cellWidth]);\n const rowLayout = useMemo(() => makeLayoutCache(cellHeight), [shouldCacheLayout ? layoutVersion : cellHeight]);\n useMemo(() => {\n if (!shouldCacheLayout) return;\n\n columnLayout.setSizer(cellWidth);\n rowLayout.setSizer(cellHeight);\n\n // Depend on layoutVersion to allow for controlled external invalidation\n // eslint-disable-next-line\n }, [shouldCacheLayout, layoutVersion, cellWidth, cellHeight]);\n\n // Virtual layout for indented/scrolled/frozen grid\n const { freezeColumns, freezeRows } = sheetStyle;\n const cellLayout = useMemo(\n () => makeCellLayout([freezeColumns, freezeRows], dataOffset, columnLayout, rowLayout),\n [freezeColumns, freezeRows, dataOffset, columnLayout, rowLayout],\n );\n\n // Build range of visible cells\n const { getVisibleCells, cellToPixel, getVersion } = cellLayout;\n const visibleCells = useMemo(\n () => getVisibleCells([canvasWidth, canvasHeight]),\n // Need to invalidate view if cached layout version changed\n // eslint-disable-next-line\n [getVisibleCells, canvasWidth, canvasHeight, getVersion()],\n );\n\n // Notify of viewport change\n useLayoutEffect(() => {\n if (props.onScrollChange) {\n props.onScrollChange([...visibleCells.rows], [...visibleCells.columns]);\n }\n }, [visibleCells, props.onScrollChange]);\n\n const scrollToSelection = (selection: Rectangle, toHead = false) => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const [anchor, head] = selection;\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n scrollToCell(\n overlay,\n toHead ? head : anchor,\n view,\n freeze,\n dataOffset,\n maxScroll,\n cellLayout,\n (dataOffset: XY, maxScroll: XY) => {\n setDataOffset(dataOffset);\n setMaxScroll(maxScroll);\n },\n );\n };\n\n // Set selection with scrolling\n const changeSelection = (newSelection: Rectangle, scrollTo = true, toHead = false) => {\n if (!isSameRectangle(selection, newSelection)) {\n setRawSelection(newSelection);\n }\n\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n if (scrollTo) {\n scrollToSelection(newSelection, toHead);\n }\n\n if (props.onSelectionChanged) {\n const [[minX, minY], [maxX, maxY]] = normalizeSelection(validateSelection(newSelection));\n props.onSelectionChanged(minX, minY, maxX, maxY);\n }\n };\n\n const cancelEditingCell = () => {\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const commitEditingCell = (value?: string) => {\n if (props.onChange) {\n const [cellX, cellY] = editCell;\n props.onChange([{ x: cellX, y: cellY, value: value !== undefined ? value : editValue }]);\n }\n setEditCell(NO_CELL);\n setFocused(true);\n };\n\n const startEditingCell = (editCell: XY, arrowKeyCommitMode = false) => {\n const [cellX, cellY] = editCell;\n if (cellReadOnly(cellX, cellY)) {\n return;\n }\n\n const editDataValue = editData(cellX, cellY);\n let val = '';\n if (editDataValue !== null && editDataValue !== undefined) {\n val = editDataValue;\n }\n setEditCell(editCell);\n setEditValue(val);\n setArrowKeyCommitMode(arrowKeyCommitMode);\n setLastEditKey(editKeys(...editCell));\n };\n\n // If max row or column count changes, keep sheet in view\n const { maxColumns = Infinity, maxRows = Infinity } = props;\n useLayoutEffect(() => {\n const { current: overlay } = overlayRef;\n if (!overlay) return;\n\n const view: XY = [canvasWidth, canvasHeight];\n const freeze: XY = [freezeColumns, freezeRows];\n\n const newOffset = clipDataOffset(view, dataOffset, freeze, [maxColumns, maxRows], cellLayout);\n setDataOffset(newOffset);\n updateScrollPosition(overlay, newOffset, cellLayout);\n\n // Only fire if extents change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [maxRows, maxColumns]);\n\n // Output from rendered layout is used to drive events on user content\n const hitmapRef = useRef<CellContentRender[]>(NO_CLICKABLES);\n\n // Detect focus on canvas\n const isFocused = focused || editMode;\n\n const { clipboardApi, onClipboardCopy } = useClipboardAPI(\n selection,\n editData,\n cellReadOnly,\n isFocused && !editMode,\n changeSelection,\n props.onChange,\n props.onCopy,\n props.onPaste,\n );\n\n const onScroll = useScroll(dataOffset, maxScroll, cellLayout, setDataOffset, setMaxScroll);\n\n const getAutoSizeWidth = useAutoSizeColumn(\n visibleCells.rows,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n canvasWidth,\n freezeColumns,\n );\n\n const getAutoSizeHeight = useAutoSizeRow(\n visibleCells.columns,\n displayData,\n cellLayout,\n cellStyle,\n columnHeaders,\n columnHeaderStyle,\n cellWidth,\n canvasHeight,\n freezeRows,\n );\n\n const { mouseHandlers, knobPosition } = useMouse(\n overlayRef,\n dataOffset,\n\n hitmapRef,\n selection,\n knobArea,\n editMode,\n editData,\n sourceData,\n cellReadOnly,\n\n canSizeColumn,\n canSizeRow,\n canOrderColumn,\n canOrderRow,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n getAutoSizeWidth,\n getAutoSizeHeight,\n\n startEditingCell,\n commitEditingCell,\n setKnobArea,\n setDragIndices,\n setDragOffset,\n setDropTarget,\n changeSelection,\n setFocused,\n\n props.cacheLayout ? columnLayout.clearAfter : undefined,\n props.cacheLayout ? rowLayout.clearAfter : undefined,\n\n props.onChange,\n props.onColumnOrderChange,\n props.onRowOrderChange,\n props.onCellWidthChange,\n props.onCellHeightChange,\n props.onRightClick,\n props.dontCommitEditOnSelectionChange,\n props.dontChangeSelectionOnOrderChange,\n );\n\n const { onInputKeyDown, onGridKeyDown, onGridFocus, onGridBlur } = useKeyboard(\n arrowKeyCommitMode,\n overlayRef,\n cellReadOnly,\n displayData,\n editCell,\n editMode,\n focused,\n rawSelection,\n selection,\n\n startEditingCell,\n commitEditingCell,\n cancelEditingCell,\n changeSelection,\n setFocused,\n onClipboardCopy,\n\n props.onChange,\n );\n\n const imageRenderer = useImageRenderer();\n\n useLayoutEffect(() => {\n const { current: canvas } = canvasRef;\n if (!canvas) {\n return;\n }\n\n const context = canvas.getContext('2d');\n if (!context) {\n return;\n }\n\n const animationFrameId = window.requestAnimationFrame(() => {\n hitmapRef.current = renderSheet(\n context,\n imageRenderer,\n\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragIndices,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n );\n });\n\n return () => {\n window.cancelAnimationFrame(animationFrameId);\n };\n }, [\n cellLayout,\n visibleCells,\n sheetStyle,\n cellStyle,\n selection,\n secondarySelections,\n isFocused,\n\n knobPosition,\n knobArea,\n dragOffset,\n dropTarget,\n\n columnHeaders,\n columnHeaderStyle,\n displayData,\n\n columnGroupKeys,\n rowGroupKeys,\n selectedColumnGroups,\n selectedRowGroups,\n\n dataOffset,\n ]);\n\n const [lastEditKey, setLastEditKey] = useState('');\n\n let editTextPosition = ORIGIN;\n let editTextWidth = 0;\n let editTextHeight = 0;\n let editTextAlign: 'right' | 'left' | 'center' = 'right';\n let editTextLineHeight = '';\n let editTextMargin = '';\n let editTextFontSize = DEFAULT_CELL_STYLE.fontSize;\n let editTextFontFamily = DEFAULT_CELL_STYLE.fontFamily;\n let editTextFontWeight = DEFAULT_CELL_STYLE.fontWeight;\n if (editMode) {\n const style = { ...DEFAULT_CELL_STYLE, ...cellStyle(...editCell) };\n editTextPosition = cellToPixel(editCell);\n editTextPosition = addXY(editTextPosition, ONE_ONE);\n editTextWidth = cellWidth(editCellX) - 3;\n editTextHeight = cellHeight(editCellY) - 3;\n editTextAlign = style.textAlign;\n editTextLineHeight = `${style.lineHeight}px`;\n editTextFontSize = style.fontSize;\n editTextFontFamily = style.fontFamily;\n editTextFontWeight = style.fontWeight;\n\n // Deduct border + apply high-dpi nudge to line up with render\n const yNudge = getDpiNudge();\n editTextMargin = `${style.marginTop - 1 + yNudge}px ${style.marginRight - 2}px ${style.marginBottom - 2}px ${style.marginLeft - 1}px`;\n\n const editKey = editKeys(...editCell);\n if (editKey !== lastEditKey) {\n setLastEditKey('');\n setEditCell(NO_CELL);\n }\n }\n\n const [textX, textY] = editTextPosition;\n const inputProps = {\n value: editValue,\n autoFocus: true,\n onKeyDown: onInputKeyDown,\n style: {\n position: 'absolute',\n left: textX,\n top: textY,\n padding: editTextMargin,\n width: editTextWidth,\n height: editTextHeight,\n outline: 'none',\n border: 'none',\n textAlign: editTextAlign,\n lineHeight: editTextLineHeight,\n color: 'black',\n fontSize: editTextFontSize,\n fontFamily: editTextFontFamily,\n fontWeight: editTextFontWeight,\n resize: 'none',\n } as InputStyle,\n };\n\n const input = props.inputComponent?.(\n editCellX,\n editCellY,\n { ...inputProps, onChange: setEditValue } as SheetInputProps,\n commitEditingCell,\n );\n\n let overlayDivClassName = styles.sheetscroll;\n const overlayDivStyles: React.CSSProperties = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n overflow: 'scroll',\n outline: 0,\n borderBottom: '1px solid #ddd',\n };\n const canvasStyles: React.CSSProperties = {\n width: canvasWidth,\n height: canvasHeight,\n outline: '1px solid #ddd', // find another better solution ?\n };\n\n if (sheetStyle.hideScrollBars) {\n delete canvasStyles['outline'];\n delete overlayDivStyles['borderBottom'];\n overlayDivClassName = '';\n }\n\n const renderedInside = useMemo(\n () => props.renderInside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderInside, visibleCells, cellLayout, selection, editMode],\n );\n\n const renderedOutside = useMemo(\n () => props.renderOutside?.({ visibleCells, cellLayout, selection, editMode }),\n [props.renderOutside, visibleCells, cellLayout, selection, editMode],\n );\n\n // External component API\n useImperativeHandle(\n ref,\n () => ({\n ...cellLayout,\n ...clipboardApi,\n startEditingCell,\n }),\n [cellLayout, clipboardApi, startEditingCell],\n );\n\n return (\n <div style={{ position: 'relative', height: '100%', overflow: 'hidden' }}>\n <canvas style={canvasStyles} ref={canvasRef} />\n <div\n ref={overlayRef}\n {...mouseHandlers}\n onKeyDown={onGridKeyDown}\n onFocus={onGridFocus}\n onBlur={onGridBlur}\n tabIndex={0}\n onScroll={onScroll}\n className={overlayDivClassName}\n style={overlayDivStyles}\n >\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: 1,\n height: maxScrollY + 2000,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: maxScrollX + 5000,\n height: 1,\n backgroundColor: 'rgba(0,0,0,0.0)',\n }}\n ></div>\n {renderedInside ? (\n <div\n style={{\n position: 'sticky',\n left: 0,\n top: 0,\n }}\n >\n {renderedInside}\n </div>\n ) : null}\n </div>\n {renderedOutside ? (\n <div\n style={{\n position: 'absolute',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n pointerEvents: 'none',\n }}\n >\n {renderedOutside}\n </div>\n ) : null}\n {editMode &&\n (input !== undefined ? (\n input\n ) : (\n <textarea\n {...inputProps}\n onFocus={(e) => e.target.select()}\n onChange={(e) => setEditValue(e.target.value)}\n />\n ))}\n </div>\n );\n});\n\nexport default Sheet;\n"],"names":["INITIAL_MAX_SCROLL","ORIGIN","ONE_ONE","NEG_NEG","NO_CELL","NO_SELECTION","NO_SELECTIONS","NO_CLICKABLES","NO_STYLE","MAX_SEARCHABLE_INDEX","COLORS","selectionBorder","selectionBackground","gridLine","dragGhost","dropTarget","knobAreaBorder","headerBackground","headerText","headerActive","headerActiveText","headerSelected","headerSelectedGroup","headerSelectedText","headerSelectedGroupText","shadowColor","SIZES","knobArea","headerWidth","headerHeight","minimumWidth","minimumHeight","resizeZone","scrollZone","scrollSpeed","shadowBlur","shadowOpacity","DEFAULT_CELL_STYLE","textAlign","fontSize","lineHeight","marginTop","marginBottom","marginLeft","marginRight","color","fontFamily","fontWeight","fillColor","backgroundColor","DEFAULT_COLUMN_HEADER_STYLE","HEADER_ACTIVE_STYLE","HEADER_SELECTED_STYLE","HEADER_GROUP_SELECTED_STYLE","ARROW_KEYS","ArrowRight","ArrowLeft","ArrowUp","ArrowDown","seq","n","s","d","Array","from","length","map","_","i","isInRange","x","min","max","isInRangeLeft","isInRangeCenter","addXY","a","b","subXY","mulXY","maxXY","Math","minXY","getDirectionStep","direction","isSameXY","isSameRectangle","a1","a2","b1","b2","isPointInsideRectangle","rectangle","point","_rectangle$","left","top","_rectangle$2","right","bottom","y","forRange","callback","forSelectionColumns","selection","_normalizeSelection","normalizeSelection","_normalizeSelection$","_normalizeSelection$2","forSelectionRows","_normalizeSelection2","_normalizeSelection2$","_normalizeSelection2$2","forToMap","forLoop","out","push","apply","arguments","mapSelectionColumns","mapSelectionRows","isMaybeRowSelection","_selection$","_selection$2","isMaybeColumnSelection","_selection$3","_selection$4","isRowSelection","_selection$5","_selection$6","isColumnSelection","_selection$7","_selection$8","isCellSelection","_selection$9","_selection$10","isEmptySelection","_selection$11","_selection$12","isPointInsideSelection","_normalizeSelection3","_normalizeSelection3$","_normalizeSelection3$2","validateSelection","anchor","head","slice","orientSelection","normalized","to","_normalized$","_normalized$2","ax","ay","hx","hy","swapX","swapY","DEFAULT_ICON_SIZE","svgToImage","icon","image","Image","iconAsString","renderToString","base64String","window","btoa","src","err","console","log","useImageRenderer","_useState","useState","setVersion","_useState2","canvasWidth","setCanvasWidth","_useState3","canvasHeight","setCanvasHeight","imageMap","useMemo","Map","loadImage","useCallback","get","set","dpi","devicePixelRatio","iconContext","canvas","document","createElement","width","height","context","getContext","willReadFrequently","renderContext","item","style","box","display","complete","onload","v","w","h","_box$","_box$2","drawImage","_item$color","rgba","toRGBA","_rgba$","r","_rgba$2","g","_rgba$3","_rgba$4","wDpi","hDpi","clearRect","imageData","getImageData","data","putImageData","e","error","LIMIT","scanGroup","keys","index","matchKeys","limit","key","has","expandSelectionToRowOrColumnGroups","groupKeys","coordinate","first","second","start","end","startIndex","endIndex","expanded","oriented","isBoundaryInsideGroup","before","after","createRowOrColumnProp","rowColProp","defaultValue","isArray","rowOrColIndex","undefined","createCellProp","cellProp","createRowOrColumnStyledProp","createCellStyledProp","findApproxMaxEditDataIndex","editData","howManyEmpty","growthIncrement","growthIncrementFactor","allEmpty","yy","floor","xx","findInDisplayData","displayData","step","cell","_addXY","firstFilled","_cell","cellX","cellY","maxX","maxY","_cell2","useMouse","elementRef","dataOffset","hitmapRef","editMode","sourceData","cellReadOnly","canSizeColumn","canSizeRow","canOrderColumn","canOrderRow","cellLayout","visibleCells","sheetStyle","columnGroupKeys","rowGroupKeys","selectedColumnGroups","selectedRowGroups","getAutoSizeWidth","getAutoSizeHeight","onEdit","onCommit","onKnobAreaChange","onDragIndicesChange","onDragOffsetChange","onDropTargetChange","onSelectionChange","onFocusChange","onInvalidateColumn","onInvalidateRow","onChange","onColumnOrderChange","onRowOrderChange","onCellWidthChange","onCellHeightChange","onRightClick","dontCommitEditOnSelectionChange","dontChangeSelectionOnOrderChange","columnResize","setColumnResize","rowResize","setRowResize","columnDrag","setColumnDrag","_useState4","rowDrag","setRowDrag","_useState5","hitTestDown","setHitTestDown","_useState6","autoScroll","setAutoScroll","_useState7","draggingKnob","setDraggingKnob","_useState8","draggingSelection","setDraggingSelection","_useState9","draggingRowSelection","setDraggingRowSelection","_useState10","draggingColumnSelection","setDraggingColumnSelection","hideRowHeaders","hideColumnHeaders","cellToPixel","getVersion","version","knobPosition","refState","ref","useRef","current","getMousePosition","strict","target","Element","rect","getBoundingClientRect","xy","clientX","clientY","clientWidth","clientHeight","getMouseOutOfBounds","allowX","allowY","indentX","getIndentX","indentY","getIndentY","xSign","ySign","getMouseHit","hitmap","_iterator","_createForOfIteratorHelperLoose","_step","done","object","value","onPointerLeave","body","cursor","onPointerDown","_ref$current","_ref$current$cellLayo","columnToPixel","rowToPixel","pixelToCell","_ref$current$visibleC","columns","rows","button","_e$target","_e$target$setPointerC","setPointerCapture","call","pointerId","hitTarget","minX","minY","selectedColumns","selectedRows","_iterator2","_step2","indices","Set","concat","filter","values","sort","dragIndices","clickSelection","_expandSelectionToRow","_expandSelectionToRow2","_expandSelectionToRow3","connected","dragStart","dragEnd","size","offset","_i","_arr","edge","abs","asGroup","_iterator3","_step3","_expandSelectionToRow4","_expandSelectionToRow5","_expandSelectionToRow6","_i2","_arr2","knobX","knobY","shiftKey","scrollTo","onPointerUp","_ref$current2","_ref$current2$cellLay","pixelToColumn","pixelToRow","changes","parseKnobOperation","insideSelection","insideGroup","preceding","order","onPointerMove","_ref$current3","_ref$current3$cellLay","isDraggingX","isDraggingY","isDragging","outOfBounds","preventDefault","getDragScrollOffset","startOffset","_iterator4","_step4","_i3","_arr3","_iterator5","_step5","_i4","_arr4","_getDragScrollOffset","scrollOffset","newWidth","round","_getDragScrollOffset2","newHeight","anchorX","anchorY","headX","headY","_pixelToCell","_normalizeSelection4","_normalizeSelection4$","_normalizeSelection4$2","xCellDiff","yCellDiff","shift","_getDragScrollOffset3","_getDragScrollOffset4","onClick","mouseHit","_mouseHit$item","_mouseHit$item$onClic","onDoubleClick","_ref$current4","_ref$current4$cellLay","autosized","_iterator6","_step6","_normalizeSelection5","_normalizeSelection5$","_normalizeSelection5$2","_i5","_autosized","column","_i6","_arr5","_normalizeSelection6","_normalizeSelection6$","_normalizeSelection6$2","_i7","_autosized3","row","editCell","onContextMenu","_ref$current$cellLayo2","event","_extends","useLayoutEffect","loop","element","speed","scrollLeft","scrollTop","timer","setInterval","clearInterval","mouseHandlers","_normalizeSelection7","_normalizeSelection7$","kx1","ky1","_normalizeSelection7$2","kx2","ky2","_normalizeSelection8","_normalizeSelection8$","sx1","sy1","_normalizeSelection8$2","sx2","sy2","fx1","fy1","fx2","fy2","_findApproxMaxEditDat","srcY","source","_findApproxMaxEditDat2","srcX","useKeyboard","arrowKeyCommitMode","overlayRef","focused","rawSelection","onCancel","onClipboardCopy","onInputKeyDown","onGridKeyDown","metaKey","ctrlKey","String","fromCharCode","which","toLowerCase","x1","y1","x2","y2","keyCode","onGridFocus","onGridBlur","overlay","activeElement","activeTagName","tagName","contentEditable","focus","preventScroll","useScroll","maxScroll","onOffsetChange","onMaxScrollChange","absoluteToCell","cellToAbsolute","_subXY","nudgeX","nudgeY","maxScrollX","maxScrollY","growX","growY","clipDataOffset","view","freeze","maxCells","newX","newY","freezeX","freezeY","maxColumns","maxRows","absoluteToColumn","columnToAbsolute","absoluteToRow","rowToAbsolute","_getViewExtent","getViewExtent","_getViewExtent$edge","leftEdge","topEdge","_getViewExtent$viewpo","viewport","scrollW","scrollH","remainder","_cellToAbsolute","frozenX","frozenY","scrollToCell","offsetX","offsetY","origin","frozen","_cellToPixel","_cellToPixel2","newOffset","scroll","setTimeout","updateScrollPosition","_subXY2","scrollX","scrollY","getInlineAlignment","cellWidth","contentWidth","align","measureFlexWidth","text","_context$measureText","measureText","toString","actualBoundingBoxLeft","actualBoundingBoxRight","Error","resolveCellFlexLayout","cellContent","cellLeft","cellTop","cellHeight","_cellContent$flexJust","flexJustify","_cellContent$flexAlig","flexAlign","_cellContent$flexGap","flexGap","items","flexItems","absolute","measuredWidths","sizes","grows","shrinks","forEach","defaultGrow","defaultShrink","_item$width","_item$flexGrow","flexGrow","_item$flexShrink","flexShrink","_item$marginLeft","_item$marginRight","slackX","growRow","shrinkRow","_getAlignmentSpacing","getAlignmentSpacing","gapX","leadX","combinedGapX","maxHeight","_ref","_ref$marginTop","_ref$marginBottom","reduce","slackY","getAlignmentAnchor","leftCursor","fixedHeight","_item$marginLeft2","_item$marginRight2","_item$marginTop","_item$marginBottom","_item$flexAlignSelf","flexAlignSelf","marginX","marginY","slackSelfY","offsetSelfY","boxW","boxH","resolveCellAbsoluteLayout","absoluteItems","resolvePosition","container","marginStart","marginEnd","resolveSize","span","l","t","slack","grow","weight","shrink","negative","isStart","isEnd","justify","gap","lead","isJustify","isBetween","isEvenly","wrapText","itemAlign","xCoord","yCoord","emit","xCursor","yCursor","wordsPerLine","startOfLine","newline","endOfLine","ellipsis","endsInSpace","line","breaker","LineBreak","lastPosition","bk","nextBreak","_bk","position","required","word","canNewLine","hasMoreText","ellipsisSpace","nextX","_context$measureText2","useAutoSizeColumn","cellStyle","columnHeaders","columnHeaderStyle","frozenColumns","viewWidth","getWidth","font","inlineMargin","totalWidth","maxWidth","headerStyle","headerContent","ceil","useAutoSizeRow","frozenRows","viewHeight","measureTextHeight","columnWidth","measureY","_t","_x","getHeight","verticalMargin","flexLayout","_step3$value","isHeader","NON_BREAKING_SPACE","EMPTY_TABLE","useClipboardTable","peek","setPeek","softRefresh","Promise","resolve","navigator","permissions","query","name","then","status","state","hardRefresh","clipboard","read","_temp","parseClipboardTable","_temp2","reject","delayedRefresh","addEventListener","removeEventListener","canPaste","_peek$rows","copyTable","copyClipboardTable","pasteTable","pasteClipboardTable","useClipboardAPI","addListener","onCopy","onPaste","_useClipboardTable","pasteIntoSelection","table","payload","selectionSize","repeatX","repeatY","newSelection","shouldPaste","flatMap","j","cells","rx","ry","change","copySelection","cut","formatSelectionAsRows","_payload$cut","pasteSelection","onClipboardPaste","clipboardData","clipboardApi","canPasteSelection","formatRowsAsTSV","html","formatRowsAsHTML","write","ClipboardItem","Blob","type","Event","dispatchEvent","types","includes","getData","getType","blob","_temp4","pastedHtml","_parsePastedHtml","parsePastedHtml","_temp6","parsePastedText","_temp5","join","trs","tds","formatTextAsHTML","replaceAll","repeat","extra","JSON","stringify","replace","charCodeAt","findTag","children","child","nodeName","maybeTag","div","innerHTML","trim","sheetNode","json","getAttribute","parse","tableNode","tableChild","tr","td","str","p","textContent","split","INITIAL_SIZE","makeCellLayout","getStart","getBaseOriginFor","base","relative","adjust","getSize","_anchor","_anchor2","pixelToIndex","pixel","layout","lookupIndex","indent","pixelX","pixelY","_anchor3","absoluteToIndex","_anchor4","getVisibleIndices","getEnd","notFrozen","getVisibleCells","viewX","viewY","makeLayoutCache","sizer","offsets","makeIntMap","getOffset","tail","last","mid","clearAfter","truncate","setSizer","initialSize","used","GROW","allocate","newUsed","Uint8Array","newValues","Uint32Array","copy","ensure","getTail","setValue","getValue","hasValue","renderSheet","imageRenderer","secondarySelections","isFocused","dragOffset","hideGridlines","freezeColumns","freezeRows","allClickables","resizeCanvas","fillStyle","fillRect","_iterator10","_step10","_cellStyle","selectionActive","rowSelectionActive","columnSelectionActive","_resolveFrozenSelecti","resolveFrozenSelection","selected","hideKnob","_selected$","_selected$2","_selected$3","_selected$4","_selected$5","_selected$6","strokeStyle","lineWidth","gridRight","gridBottom","drawGridLineX","beginPath","moveTo","lineTo","stroke","drawGridLineY","textBaseline","content","isActive","groupKey","isInRowGroup","isSelfSelected","isGroupSelected","resolvedStyle","clickables","renderCell","_columnHeaders","isInColumnGroup","isSelected","selectedStyle","activeStyle","excelHeaderString","globalAlpha","_selected$7","_selected$8","strokeRect","secondarySelection","_resolveFrozenSelecti2","_selected$9","_selected$10","setLineDash","shiftX","shiftY","dragColumns","dragRows","_iterator7","_step7","_iterator8","_step8","_resolveSelection","resolveSelection","_resolveSelection$","_resolveSelection$2","hasRowShadow","hasColumnShadow","gradient","createLinearGradient","halfShadowGradient","_iterator9","_step9","_iterator11","_step11","fillText","bind","fontString","innerX","innerY","innerWidth","innerHeight","middleY","roundDpi","clipToBox","renderedFlex","renderedAbsolute","rendered","_step12$value","_step12","render","inspect","clipLeft","clipRight","clipWidth","_iterator12","entries","_loop","save","clip","restore","_cellToPixel3","_cellToPixel4","lastInvisibleX","lastInvisibleY","_canvas$getBoundingCl","_window","_window$devicePixelRa","ratio","newCanvasWidth","newCanvasHeight","scale","num","rgb","opacity","hex","ease","sin","PI","pow","f","addColorStop","getDpiNudge","_window2","_window3","resolveSheetStyle","hideScrollBars","_sheetStyle$shadowBlu","_sheetStyle$shadowOpa","_sheetStyle$shadowCol","Sheet","forwardRef","props","canvasRef","setMaxScroll","setDataOffset","selectionProp","_props$selection","setRawSelection","setKnobArea","setDragOffset","setDragIndices","setDropTarget","setEditCell","autoFocus","setFocused","lastSelectionProp","setLastSelectionProp","_useState11","editValue","setEditValue","_useState12","setArrowKeyCommitMode","_useResizeObserver","useResizeObserver","_useResizeObserver$wi","_useResizeObserver$he","readOnly","editKeys","_props$secondarySelec","editCellX","editCellY","shouldCacheLayout","_props$cacheLayout","cacheLayout","layoutVersion","columnLayout","rowLayout","onScrollChange","scrollToSelection","toHead","changeSelection","onSelectionChanged","cancelEditingCell","commitEditingCell","startEditingCell","editDataValue","val","setLastEditKey","_props$maxColumns","Infinity","_props$maxRows","_useClipboardAPI","onScroll","_useMouse","_useKeyboard","animationFrameId","requestAnimationFrame","cancelAnimationFrame","_useState13","lastEditKey","editTextPosition","editTextWidth","editTextHeight","editTextAlign","editTextLineHeight","editTextMargin","editTextFontSize","editTextFontFamily","editTextFontWeight","yNudge","editKey","_editTextPosition","textX","textY","inputProps","onKeyDown","padding","outline","border","resize","input","_props$inputComponent","inputComponent","overlayDivClassName","styles","sheetscroll","overlayDivStyles","overflow","borderBottom","canvasStyles","renderedInside","_props$renderInside","renderInside","renderedOutside","_props$renderOutside","renderOutside","useImperativeHandle","React","onFocus","onBlur","tabIndex","className","pointerEvents","select"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,IAAMA,kBAAkB,GAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AAElD,AAAO,IAAMC,MAAM,GAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnC,AAAO,IAAMC,OAAO,GAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnC,AAAO,IAAMC,YAAY,GAAc,CAACD,OAAO,EAAEA,OAAO,CAAC;AACzD,AAAO,IAAME,aAAa,GAAgB,EAAE;AAC5C,AAAO,IAAMC,aAAa,GAAwB,EAAE;AACpD,AAAO,IAAMC,QAAQ,GAAG,EAAE;AAE1B,AAAO,IAAMC,oBAAoB,GAAG,MAAM;AAE1C,AAAO,IAAMC,MAAM,GAAG;EAClBC,eAAe,EAAE,SAAS;EAC1BC,mBAAmB,EAAE,WAAW;EAEhCC,QAAQ,EAAE,WAAW;EAErBC,SAAS,EAAE,WAAW;EACtBC,UAAU,EAAE,SAAS;EACrBC,cAAc,EAAE,SAAS;EAEzBC,gBAAgB,EAAE,SAAS;EAC3BC,UAAU,EAAE,SAAS;EACrBC,YAAY,EAAE,SAAS;EACvBC,gBAAgB,EAAE,SAAS;EAE3BC,cAAc,EAAE,SAAS;EACzBC,mBAAmB,EAAE,WAAW;EAChCC,kBAAkB,EAAE,SAAS;EAC7BC,uBAAuB,EAAE,SAAS;EAElCC,WAAW,EAAE;CAChB;AAED,AAAO,IAAMC,KAAK,GAAG;EACjBC,QAAQ,EAAE,CAAC;EACXC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,EAAE;EAChBC,YAAY,EAAE,EAAE;EAChBC,aAAa,EAAE,EAAE;EACjBC,UAAU,EAAE,CAAC;EACbC,UAAU,EAAE,EAAE;EACdC,WAAW,EAAE,EAAE;EAEfC,UAAU,EAAE,EAAE;EACdC,aAAa,EAAE;CAClB;AAED,AAAO,IAAMC,kBAAkB,GAAoB;EAC/CC,SAAS,EAAE,MAAM;EACjBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,CAAC;EACZC,YAAY,EAAE,CAAC;EACfC,UAAU,EAAE,CAAC;EACbC,WAAW,EAAE,CAAC;EACdC,KAAK,EAAE,MAAM;EACbC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,eAAe,EAAE;CACpB;AAED,AAAO,IAAMC,2BAA2B,GAAoB;EACxDZ,SAAS,EAAE,QAAQ;EACnBC,QAAQ,EAAE,EAAE;EACZC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,CAAC;EACZC,YAAY,EAAE,CAAC;EACfE,WAAW,EAAE,CAAC;EACdD,UAAU,EAAE,CAAC;EACbE,KAAK,EAAE,MAAM;EACbC,UAAU,EAAE,YAAY;EACxBC,UAAU,EAAE,EAAE;EACdC,SAAS,EAAE,EAAE;EACbC,eAAe,EAAE;CACpB;AAED,AAAO,IAAME,mBAAmB,GAAG;EAC/BN,KAAK,EAAEnC,MAAM,CAACU;CACjB;AAED,AAAO,IAAMgC,qBAAqB,GAAG;EACjCH,eAAe,EAAEvC,MAAM,CAACW,cAAc;EACtCwB,KAAK,EAAEnC,MAAM,CAACa;CACjB;AAED,AAAO,IAAM8B,2BAA2B,GAAG;EACvCJ,eAAe,EAAEvC,MAAM,CAACY,mBAAmB;EAC3CuB,KAAK,EAAEnC,MAAM,CAACc;CACjB;AAED,AAAO,IAAM8B,UAAU,GAA8B;EACjDC,UAAU,EAAE,OAAO;EACnBC,SAAS,EAAE,MAAM;EACjBC,OAAO,EAAE,IAAI;EACbC,SAAS,EAAE;CACd;;AClGM,IAAMC,GAAG,GAAG,SAANA,GAAGA,CAAIC,CAAS,EAAEC,GAAeC;MAAfD;IAAAA,IAAY,CAAC;;EAAA,IAAEC;IAAAA,IAAY,CAAC;;EAAA,OACvDC,KAAK,CAACC,IAAI,CAAC;IAAEC,MAAM,EAAEL;GAAG,CAAC,CAACM,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAS;IAAA,OAAKP,CAAC,GAAGC,CAAC,GAAGM,CAAC;IAAC;AAAA;AAE9D,AAAO,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAIC,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,IAAID,CAAC,IAAIA,CAAC,IAAIE,GAAG;AAAA;AACtF,AAAO,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIH,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,IAAID,CAAC,IAAIA,CAAC,GAAGE,GAAG;AAAA;AACzF,AACO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAIJ,CAAS,EAAEC,GAAW,EAAEC,GAAW;EAAA,OAAKD,GAAG,GAAGD,CAAC,IAAIA,CAAC,GAAGE,GAAG;AAAA;;ACPnF,IAAMG,KAAK,GAAG,SAARA,KAAKA,CAAIC,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAIF,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAME,KAAK,GAAG,SAARA,KAAKA,CAAIH,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACD,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,EAAED,CAAC,CAAC,CAAC,CAAC,GAAGC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACrE,AAAO,IAAMG,KAAK,GAAG,SAARA,KAAKA,CAAIJ,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACI,IAAI,CAACT,GAAG,CAACI,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEI,IAAI,CAACT,GAAG,CAACI,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACvF,AAAO,IAAMK,KAAK,GAAG,SAARA,KAAKA,CAAIN,CAAK,EAAEC,CAAK;EAAA,OAAS,CAACI,IAAI,CAACV,GAAG,CAACK,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEI,IAAI,CAACV,GAAG,CAACK,CAAC,CAAC,CAAC,CAAC,EAAEC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAAA;AACvF,AAKO,IAAMM,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,SAAiB;EAC9C,IAAIA,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;EACxC,IAAIA,SAAS,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACxC,IAAIA,SAAS,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACtC,IAAIA,SAAS,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;EACvC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,AAAO,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAIT,CAAK,EAAEC,CAAK;EAAA,OAAKD,CAAC,CAAC,CAAC,CAAC,KAAKC,CAAC,CAAC,CAAC,CAAC,IAAID,CAAC,CAAC,CAAC,CAAC,KAAKC,CAAC,CAAC,CAAC,CAAC;AAAA;AAExE,AAAO,IAAMS,eAAe,GAAG,SAAlBA,eAAeA,CAAIV,CAAY,EAAEC,CAAY;EACtD,IAAOU,EAAE,GAAQX,CAAC;IAAPY,EAAE,GAAIZ,CAAC;EAClB,IAAOa,EAAE,GAAQZ,CAAC;IAAPa,EAAE,GAAIb,CAAC;EAClB,OAAOQ,QAAQ,CAACE,EAAE,EAAEE,EAAE,CAAC,IAAIJ,QAAQ,CAACG,EAAE,EAAEE,EAAE,CAAC;AAC/C,CAAC;AAED,AAAO,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIC,SAAoB,EAAEC,KAAS;EAClE,IAAAC,WAAA,GAAuCF,SAAS;IAAxCG,IAAI,GAAAD,WAAA;IAAEE,GAAG,GAAAF,WAAA;IAAAG,YAAA,GAAsBL,SAAS;IAA3BM,KAAK,GAAAD,YAAA;IAAEE,MAAM,GAAAF,YAAA;EAClC,IAAO3B,CAAC,GAAOuB,KAAK;IAAVO,CAAC,GAAIP,KAAK;EACpB,OAAOvB,CAAC,IAAIyB,IAAI,IAAIzB,CAAC,GAAG4B,KAAK,IAAIE,CAAC,IAAIJ,GAAG,IAAII,CAAC,GAAGD,MAAM;AAC3D,CAAC;AAED,AAAO,IAAME,QAAQ,GAAG,SAAXA,QAAQA,CAAI9B,GAAW,EAAEC,GAAW,EAAE8B,QAA6B;EAC5E,KAAK,IAAIlC,CAAC,GAAGG,GAAG,EAAEH,CAAC,IAAII,GAAG,EAAE,EAAEJ,CAAC,EAAEkC,QAAQ,CAAClC,CAAC,CAAC;AAChD,CAAC;AAED,AAAO,IAAMmC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,SAAoB;EAAA,OAAK,UAACF,QAA6B;IACvF,IAAAG,mBAAA,GAA0BC,kBAAkB,CAACF,SAAS,CAAC;MAAAG,oBAAA,GAAAF,mBAAA;MAA/CV,IAAI,GAAAY,oBAAA;MAAAC,qBAAA,GAAAH,mBAAA;MAAIP,KAAK,GAAAU,qBAAA;IACrBP,QAAQ,CAACN,IAAI,EAAEG,KAAK,EAAEI,QAAQ,CAAC;GAClC;AAAA;AAED,AAAO,IAAMO,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIL,SAAoB;EAAA,OAAK,UAACF,QAA6B;IACpF,IAAAQ,oBAAA,GAA8BJ,kBAAkB,CAACF,SAAS,CAAC;MAAAO,qBAAA,GAAAD,oBAAA;MAAjDd,GAAG,GAAAe,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAMX,MAAM,GAAAa,sBAAA;IACzBX,QAAQ,CAACL,GAAG,EAAEG,MAAM,EAAEG,QAAQ,CAAC;GAClC;AAAA;AAED,IAAMW,QAAQ,GACV,SADEA,QAAQA,CACaC,OAAiD;EAAA,OACxE,UAAIhD,GAAsB;IACtB,IAAMiD,GAAG,GAAQ,EAAE;IACnBD,OAAO,CAAC;MAAA,OAAgBC,GAAG,CAACC,IAAI,CAAClD,GAAG,CAAAmD,KAAA,SAAAC,SAAQ,CAAC,CAAC;MAAC;IAC/C,OAAOH,GAAG;GACb;AAAA;AAEL,AAAO,IAAMI,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIf,SAAoB;EAAA,OAAKS,QAAQ,CAACV,mBAAmB,CAACC,SAAS,CAAC,CAAC;AAAA;AACrG,AAAO,IAAMgB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIhB,SAAoB;EAAA,OAAKS,QAAQ,CAACJ,gBAAgB,CAACL,SAAS,CAAC,CAAC;AAAA;AAG/F,AAAO,IAAMiB,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIjB,SAAoB;EACpD,IAAAkB,WAAA,GAA0BlB,SAAS;IAA3BT,IAAI,GAAA2B,WAAA;IAAAC,YAAA,GAAcnB,SAAS;IAAnBN,KAAK,GAAAyB,YAAA;EACrB,OAAO5B,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC;AACtC,CAAC;AAGD,AAAO,IAAM0B,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIpB,SAAoB;EACvD,IAAAqB,YAAA,GAA8BrB,SAAS;IAA7BR,GAAG,GAAA6B,YAAA;IAAAC,YAAA,GAAiBtB,SAAS;IAApBL,MAAM,GAAA2B,YAAA;EACzB,OAAO9B,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACtC,CAAC;AAGD,AAAO,IAAM4B,cAAc,GAAG,SAAjBA,cAAcA,CAAIvB,SAAoB;EAC/C,IAAAwB,YAAA,GAAuCxB,SAAS;IAAxCT,IAAI,GAAAiC,YAAA;IAAEhC,GAAG,GAAAgC,YAAA;IAAAC,YAAA,GAAsBzB,SAAS;IAA3BN,KAAK,GAAA+B,YAAA;IAAE9B,MAAM,GAAA8B,YAAA;EAClC,OAAOlC,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAM+B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI1B,SAAoB;EAClD,IAAA2B,YAAA,GAAuC3B,SAAS;IAAxCT,IAAI,GAAAoC,YAAA;IAAEnC,GAAG,GAAAmC,YAAA;IAAAC,YAAA,GAAsB5B,SAAS;IAA3BN,KAAK,GAAAkC,YAAA;IAAEjC,MAAM,GAAAiC,YAAA;EAClC,OAAOpC,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC,IAAIJ,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMmC,eAAe,GAAG,SAAlBA,eAAeA,CAAI7B,SAAoB;EAChD,IAAA8B,YAAA,GAAuC9B,SAAS;IAAxCT,IAAI,GAAAuC,YAAA;IAAEtC,GAAG,GAAAsC,YAAA;IAAAC,aAAA,GAAsB/B,SAAS;IAA3BN,KAAK,GAAAqC,aAAA;IAAEpC,MAAM,GAAAoC,aAAA;EAClC,OAAOxC,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMqC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIhC,SAAoB;EACjD,IAAAiC,aAAA,GAAuCjC,SAAS;IAAxCT,IAAI,GAAA0C,aAAA;IAAEzC,GAAG,GAAAyC,aAAA;IAAAC,aAAA,GAAsBlC,SAAS;IAA3BN,KAAK,GAAAwC,aAAA;IAAEvC,MAAM,GAAAuC,aAAA;EAClC,OAAO3C,IAAI,KAAK,CAAC,CAAC,IAAIG,KAAK,KAAK,CAAC,CAAC,IAAIF,GAAG,KAAK,CAAC,CAAC,IAAIG,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAGD,AAAO,IAAMwC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAInC,SAAoB,EAAEX,KAAS;EAClE,IAAA+C,oBAAA,GAAuClC,kBAAkB,CAACF,SAAS,CAAC;IAAAqC,qBAAA,GAAAD,oBAAA;IAA5D7C,IAAI,GAAA8C,qBAAA;IAAE7C,GAAG,GAAA6C,qBAAA;IAAAC,sBAAA,GAAAF,oBAAA;IAAI1C,KAAK,GAAA4C,sBAAA;IAAE3C,MAAM,GAAA2C,sBAAA;EAClC,IAAOxE,CAAC,GAAOuB,KAAK;IAAVO,CAAC,GAAIP,KAAK;EACpB,OAAOvB,CAAC,IAAIyB,IAAI,IAAIzB,CAAC,IAAI4B,KAAK,IAAIE,CAAC,IAAIJ,GAAG,IAAII,CAAC,IAAID,MAAM;AAC7D,CAAC;AAGD,AAAO,IAAM4C,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIvC,SAAoB;EAClD,IAAKwC,MAAM,GAAUxC,SAAS;IAAjByC,IAAI,GAAIzC,SAAS;EAC9BwC,MAAM,GAAGA,MAAM,CAACE,KAAK,EAAQ;EAC7BD,IAAI,GAAGA,IAAI,CAACC,KAAK,EAAQ;EAEzB,IAAM3E,GAAG,GAAGW,KAAK,CAAC8D,MAAM,EAAEC,IAAI,CAAC;EAC/B,IAAI1E,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAEyE,MAAM,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAC3C,IAAI1E,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAEyE,MAAM,CAAC,CAAC,CAAC,GAAGC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAE3C,OAAO,CAACD,MAAM,EAAEC,IAAI,CAAC;AACzB,CAAC;AAGD,AAAO,IAAMvC,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIF,SAAoB;EACnD,IAAOwC,MAAM,GAAUxC,SAAS;IAAjByC,IAAI,GAAIzC,SAAS;EAChC,OAAO,CAACtB,KAAK,CAAC8D,MAAM,EAAEC,IAAI,CAAC,EAAEjE,KAAK,CAACgE,MAAM,EAAEC,IAAI,CAAC,CAAC;AACrD,CAAC;AAGD,AAAO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,UAAqB,EAAEC,EAAa;EAChE,IAAAC,YAAA,GAAuCF,UAAU;IAAzCrD,IAAI,GAAAuD,YAAA;IAAEtD,GAAG,GAAAsD,YAAA;IAAAC,aAAA,GAAsBH,UAAU;IAA5BlD,KAAK,GAAAqD,aAAA;IAAEpD,MAAM,GAAAoD,aAAA;EAElC,IAAOP,MAAM,GAAUK,EAAE;IAAVJ,IAAI,GAAII,EAAE;EACzB,IAAOG,EAAE,GAAQR,MAAM;IAAZS,EAAE,GAAIT,MAAM;EACvB,IAAOU,EAAE,GAAQT,IAAI;IAAVU,EAAE,GAAIV,IAAI;EAErB,IAAMW,KAAK,GAAG,CAACJ,EAAE,GAAGE,EAAE,IAAI,CAAC,KAAKxD,KAAK,GAAGH,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;EACtD,IAAM8D,KAAK,GAAG,CAACJ,EAAE,GAAGE,EAAE,IAAI,CAAC,KAAKxD,MAAM,GAAGH,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC;EAEtD,OAAO,CACH,CAAC4D,KAAK,GAAG1D,KAAK,GAAGH,IAAI,EAAE8D,KAAK,GAAG1D,MAAM,GAAGH,GAAG,CAAC,EAC5C,CAAC4D,KAAK,GAAG7D,IAAI,GAAGG,KAAK,EAAE2D,KAAK,GAAG7D,GAAG,GAAGG,MAAM,CAAC,CAC/C;AACL,CAAC;;ACpID,IAAM2D,iBAAiB,GAAG,EAAE;AAE5B,IAAaC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,IAA2B;EAClD,IAAMC,KAAK,GAAG,IAAIC,KAAK,EAAE;EACzB,IAAI;IACA,IAAMC,YAAY,GAAG,OAAOH,IAAI,KAAK,QAAQ,GAAGA,IAAI,GAAGI,qBAAc,CAACJ,IAAI,CAAC;IAC3E,IAAMK,YAAY,GAAGC,MAAM,CAACC,IAAI,CAACJ,YAAY,CAAC;IAC9CF,KAAK,CAACO,GAAG,kCAAgCH,YAAc;GAC1D,CAAC,OAAOI,GAAG,EAAE;IACVC,OAAO,CAACC,GAAG,CAACF,GAAG,CAAC;;EAEpB,OAAOR,KAAK;AAChB,CAAC;AAED,AAAO,IAAMW,gBAAgB,GAAG,SAAnBA,gBAAgBA;EACzB,IAAAC,SAAA,GAAuBC,cAAQ,CAAC,CAAC,CAAC;IAAzBC,UAAU,GAAAF,SAAA;EAEnB,IAAAG,UAAA,GAAsCF,cAAQ,CAAChB,iBAAiB,CAAC;IAA1DmB,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAClC,IAAAG,UAAA,GAAwCL,cAAQ,CAAChB,iBAAiB,CAAC;IAA5DsB,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EAEpC,IAAMG,QAAQ,GAAGC,aAAO,CAAC;IAAA,OAAM,IAAIC,GAAG,EAA4B;KAAE,EAAE,CAAC;EACvE,IAAMC,SAAS,GAAGC,iBAAW,CACzB,UAAClB,GAAW;IACR,IAAIP,KAAK,GAAGqB,QAAQ,CAACK,GAAG,CAACnB,GAAG,CAAC;IAC7B,IAAIP,KAAK,EAAE,OAAOA,KAAK;IAEvBA,KAAK,GAAG,IAAIC,KAAK,EAAE;IACnBD,KAAK,CAACO,GAAG,GAAGA,GAAG;IACfc,QAAQ,CAACM,GAAG,CAACpB,GAAG,EAAEP,KAAM,CAAC;IACzB,OAAOA,KAAM;GAChB,EACD,CAACqB,QAAQ,CAAC,CACb;EAED,IAAMO,GAAG,GAAGvB,MAAM,CAACwB,gBAAgB;EACnC,IAAMC,WAAW,GAAGR,aAAO,CAAC;IACxB,IAAMS,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;IAC/CF,MAAM,CAACG,KAAK,GAAGlB,WAAW,GAAGY,GAAG;IAChCG,MAAM,CAACI,MAAM,GAAGhB,YAAY,GAAGS,GAAG;IAElC,IAAMQ,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,EAAE;MAAEC,kBAAkB,EAAE;KAAM,CAAoC;IACxG,OAAOF,OAAO;GACjB,EAAE,CAACpB,WAAW,EAAEG,YAAY,EAAES,GAAG,CAAC,CAAC;EAEpC,OAAO,UACHW,aAAuC,EACvCC,IAAqD,EACrDC,KAAsB,EACtBC,GAAc;IAEd,IAAI,CAACZ,WAAW,EAAE;IAElB,IAAQa,OAAO,GAAKH,IAAI,CAAhBG,OAAO;IAEf,IAAM3C,KAAK,GAAG,OAAO,IAAIwC,IAAI,GAAGA,IAAI,CAACxC,KAAK,GAAG,KAAK,IAAIwC,IAAI,GAAGhB,SAAS,CAACgB,IAAI,CAACjC,GAAG,CAAC,GAAG,IAAI;IACvF,IAAI,CAACP,KAAK,EAAE;IAEZ,IAAI,CAACA,KAAK,CAAC4C,QAAQ,EAAE;MACjB,IAAI,CAAC5C,KAAK,CAAC6C,MAAM,EAAE;QACf7C,KAAK,CAAC6C,MAAM,GAAG;UACX/B,UAAU,CAAC,UAACgC,CAAC;YAAA,OAAKA,CAAC,GAAG,CAAC;YAAC;UACxB7B,cAAc,CAAC,UAAC8B,CAAC;YAAA,OAAK/H,IAAI,CAACT,GAAG,CAACwI,CAAC,EAAE/C,KAAK,CAACkC,KAAK,CAAC;YAAC;UAC/Cd,eAAe,CAAC,UAAC4B,CAAC;YAAA,OAAKhI,IAAI,CAACT,GAAG,CAACyI,CAAC,EAAEhD,KAAK,CAACmC,MAAM,CAAC;YAAC;SACpD;;MAEL;KACH,MAAM;MACH,IAAInB,WAAW,GAAGhB,KAAK,CAACkC,KAAK,EAAEjB,cAAc,CAAC,UAAC8B,CAAC;QAAA,OAAK/H,IAAI,CAACT,GAAG,CAACwI,CAAC,EAAE/C,KAAK,CAACkC,KAAK,CAAC;QAAC;MAC9E,IAAIf,YAAY,GAAGnB,KAAK,CAACmC,MAAM,EAAEf,eAAe,CAAC,UAAC4B,CAAC;QAAA,OAAKhI,IAAI,CAACT,GAAG,CAACyI,CAAC,EAAEhD,KAAK,CAACmC,MAAM,CAAC;QAAC;;IAGtF,IAAAc,KAAA,GAAuCP,GAAG;MAAlC5G,IAAI,GAAAmH,KAAA;MAAElH,GAAG,GAAAkH,KAAA;MAAAC,MAAA,GAAsBR,GAAG;MAArBzG,KAAK,GAAAiH,MAAA;MAAEhH,MAAM,GAAAgH,MAAA;IAClC,IAAMhB,KAAK,GAAGjG,KAAK,GAAGH,IAAI;IAC1B,IAAMqG,MAAM,GAAGjG,MAAM,GAAGH,GAAG;IAE3B,IAAI4G,OAAO,KAAK,OAAO,EAAE;MAErBJ,aAAa,CAACY,SAAS,CAACnD,KAAK,EAAE,CAAC,EAAE,CAAC,EAAEA,KAAK,CAACkC,KAAK,EAAElC,KAAK,CAACmC,MAAM,EAAErG,IAAI,EAAEC,GAAG,EAAEmG,KAAK,EAAEC,MAAM,CAAC;KAC5F,MAAM,IAAIQ,OAAO,KAAK,MAAM,EAAE;MAAA,IAAAS,WAAA;MAE3B,IAAMxK,KAAK,IAAAwK,WAAA,GAAGZ,IAAI,CAAC5J,KAAK,YAAAwK,WAAA,GAAIX,KAAK,CAAC7J,KAAK;MACvC,IAAMyK,IAAI,GAAGC,MAAM,CAAC1K,KAAK,CAAC;MAC1B,IAAA2K,MAAA,GAAqCF,IAAI;QAAlCG,CAAC,GAAAD,MAAA,cAAG,CAAC,GAAAA,MAAA;QAAAE,OAAA,GAAyBJ,IAAI;QAA3BK,CAAC,GAAAD,OAAA,cAAG,CAAC,GAAAA,OAAA;QAAAE,OAAA,GAAkBN,IAAI;QAApBzI,CAAC,GAAA+I,OAAA,cAAG,CAAC,GAAAA,OAAA;QAAAC,OAAA,GAAWP,IAAI;QAAb1I,CAAC,GAAAiJ,OAAA,cAAG,CAAC,GAAAA,OAAA;MAEjC,IAAI;QACA,IAAMC,IAAI,GAAG3B,KAAK,GAAGN,GAAG;QACxB,IAAMkC,IAAI,GAAG3B,MAAM,GAAGP,GAAG;QAEzBE,WAAW,CAACiC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAEF,IAAI,EAAEC,IAAI,CAAC;QACvChC,WAAW,CAACqB,SAAS,CAACnD,KAAK,EAAE,CAAC,EAAE,CAAC,EAAEA,KAAK,CAACkC,KAAK,EAAElC,KAAK,CAACmC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE0B,IAAI,EAAEC,IAAI,CAAC;QAE/E,IAAME,SAAS,GAAGlC,WAAW,CAACmC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAEJ,IAAI,EAAEC,IAAI,CAAC;QAC5D,IAAQI,IAAI,GAAKF,SAAS,CAAlBE,IAAI;QACZ,IAAMvK,CAAC,GAAGuK,IAAI,CAAClK,MAAM;QAErB,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAEQ,CAAC,IAAI,CAAC,EAAE;UAC3B+J,IAAI,CAAC/J,CAAC,CAAC,GAAGqJ,CAAC;UACXU,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGuJ,CAAC;UACfQ,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGS,CAAC;UACfsJ,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAG+J,IAAI,CAAC/J,CAAC,GAAG,CAAC,CAAC,GAAGQ,CAAC;;QAGjCmH,WAAW,CAACqC,YAAY,CAACH,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEH,IAAI,EAAEC,IAAI,CAAC;QAC3DvB,aAAa,CAACY,SAAS,CAACrB,WAAW,CAACC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE8B,IAAI,EAAEC,IAAI,EAAEhI,IAAI,EAAEC,GAAG,EAAEmG,KAAK,EAAEC,MAAM,CAAC;OAC1F,CAAC,OAAOiC,CAAC,EAAE;QACR3D,OAAO,CAAC4D,KAAK,CAACD,CAAC,CAAC;;;GAG3B;AACL,CAAC;;AC/GD,IAAME,KAAK,GAAG,IAAI;AAElB,IAAMC,SAAS,GAAG,SAAZA,SAASA,CACXC,IAAyD,EACzDC,KAAa,EACbtJ,SAAiB,EACjBuJ,SAAsC;EAEtC,IAAIvK,CAAC,GAAG,CAAC;EACT,IAAMwK,KAAK,GAAGxJ,SAAS,GAAG,CAAC,GAAGmJ,KAAK,GAAGtJ,IAAI,CAACV,GAAG,CAACgK,KAAK,EAAEG,KAAK,GAAG,CAAC,CAAC;EAChE,OAAOtK,CAAC,GAAGwK,KAAK,EAAExK,CAAC,EAAE,EAAE;IACnB,IAAMyK,GAAG,GAAGJ,IAAI,CAACC,KAAK,GAAGtK,CAAC,GAAGgB,SAAS,CAAC;IACvC,IAAIyJ,GAAG,IAAI,IAAI,IAAI,CAACF,SAAS,CAACG,GAAG,CAACD,GAAG,CAAC,EAAE;;EAE5C,OAAOH,KAAK,GAAG,CAACtK,CAAC,GAAG,CAAC,IAAIgB,SAAS;AACtC,CAAC;AAGD,AAAO,IAAM2J,kCAAkC,GAAG,SAArCA,kCAAkCA,CAC3CvI,SAAoB,EACpBwI,SAA8D,EAC9DL,SAA6C,EAC7CM,UAAkB;EAElB,IAAI,CAACN,SAAS,EAAE,OAAOnI,SAAS;EAEhC,IAAAC,mBAAA,GAAwBC,kBAAkB,CAACF,SAAS,CAAC;IAA9C0I,KAAK,GAAAzI,mBAAA;IAAE0I,MAAM,GAAA1I,mBAAA;EAEpB,IAAM2I,KAAK,GAAGF,KAAK,CAACD,UAAU,CAAC;EAC/B,IAAMI,GAAG,GAAGF,MAAM,CAACF,UAAU,CAAC;EAE9B,IAAMK,UAAU,GAAGd,SAAS,CAACQ,SAAS,EAAEI,KAAK,EAAE,CAAC,CAAC,EAAET,SAAS,CAAC;EAC7D,IAAMY,QAAQ,GAAGf,SAAS,CAACQ,SAAS,EAAEK,GAAG,EAAE,CAAC,EAAEV,SAAS,CAAC;EAExD,IAAMa,QAAQ,GAAc,CAACN,KAAK,CAAChG,KAAK,EAAQ,EAAEiG,MAAM,CAACjG,KAAK,EAAQ,CAAC;EACvEsG,QAAQ,CAAC,CAAC,CAAC,CAACP,UAAU,CAAC,GAAGK,UAAU;EACpCE,QAAQ,CAAC,CAAC,CAAC,CAACP,UAAU,CAAC,GAAGM,QAAQ;EAElC,IAAME,QAAQ,GAAGtG,eAAe,CAACqG,QAAQ,EAAEhJ,SAAS,CAAC;EACrD,OAAOiJ,QAAQ;AACnB,CAAC;AAED,AAAO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9BhB,KAAa,EACbM,SAA8D;EAE9D,IAAMW,MAAM,GAAGX,SAAS,CAACN,KAAK,GAAG,CAAC,CAAC;EACnC,IAAMkB,KAAK,GAAGZ,SAAS,CAACN,KAAK,CAAC;EAC9B,OAAOiB,MAAM,IAAI,IAAI,IAAIC,KAAK,IAAI,IAAI,IAAID,MAAM,KAAKC,KAAK;AAC9D,CAAC;;AClCM,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9BC,UAA8C,EAC9CC,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACF,UAAU,CAAC,EAAE;IAC3B,OAAO,UAACG,aAAqB;MACzB,IAAIA,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAGH,UAAU,CAAC7L,MAAM,EAAE;QACzD,OAAO6L,UAAU,CAACG,aAAa,CAAC;OACnC,MAAM;QACH,OAAOF,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOD,UAAU,KAAK,UAAU,EAAE;IACzC,OAAOA,UAAU;GACpB,MAAM,IAAIA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAKI,SAAS,EAAE;IACxD,OAAO;MAAA,OAAMJ,UAAU;;GAC1B,MAAM;IACH,OAAO;MAAA,OAAMC,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMI,cAAc,GAAG,SAAjBA,cAAcA,CACvBC,QAAqC,EACrCL,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACI,QAAQ,CAAC,EAAE;IACzB,OAAO,UAAC9L,CAAS,EAAE8B,CAAS;MACxB,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGgK,QAAQ,CAACnM,MAAM,EAAE;QAC/B,IAAIK,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAG8L,QAAQ,CAAChK,CAAC,CAAC,CAACnC,MAAM,EAAE;UAClC,OAAOmM,QAAQ,CAAChK,CAAC,CAAC,CAAC9B,CAAC,CAAC;SACxB,MAAM;UACH,OAAOyL,YAAY;;OAE1B,MAAM;QACH,OAAOA,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOK,QAAQ,KAAK,UAAU,EAAE;IACvC,OAAOA,QAAQ;GAClB,MAAM,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAKF,SAAS,EAAE;IACpD,OAAO;MAAA,OAAME,QAAQ;;GACxB,MAAM;IACH,OAAO;MAAA,OAAML,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMM,2BAA2B,GAAG,SAA9BA,2BAA2BA,CACpCP,UAAoD,EACpDC,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACF,UAAU,CAAC,EAAE;IAC3B,OAAO,UAACG,aAAqB;MACzB,IAAIA,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAGH,UAAU,CAAC7L,MAAM,EAAE;QACzD,OAAO6L,UAAU,CAACG,aAAa,CAAC;OACnC,MAAM;QACH,OAAOF,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOD,UAAU,KAAK,UAAU,EAAE;IACzC,OAAOA,UAAU;GACpB,MAAM,IAAIA,UAAU,KAAK,IAAI,IAAIA,UAAU,KAAKI,SAAS,EAAE;IACxD,OAAO;MAAA,OAAMJ,UAAU;;GAC1B,MAAM;IACH,OAAO;MAAA,OAAMC,YAAY;;;AAEjC,CAAC;AAGD,AAAO,IAAMO,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAC7BF,QAA2C,EAC3CL,YAAe;EAEf,IAAIhM,KAAK,CAACiM,OAAO,CAACI,QAAQ,CAAC,EAAE;IACzB,OAAO,UAAC9L,CAAS,EAAE8B,CAAS;MACxB,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAGgK,QAAQ,CAACnM,MAAM,EAAE;QAC/B,IAAIK,CAAC,IAAI,CAAC,IAAIA,CAAC,GAAG8L,QAAQ,CAAChK,CAAC,CAAC,CAACnC,MAAM,EAAE;UAClC,OAAOmM,QAAQ,CAAChK,CAAC,CAAC,CAAC9B,CAAC,CAAC;SACxB,MAAM;UACH,OAAOyL,YAAY;;OAE1B,MAAM;QACH,OAAOA,YAAY;;KAE1B;GACJ,MAAM,IAAI,OAAOK,QAAQ,KAAK,UAAU,EAAE;IACvC,OAAOA,QAAQ;GAClB,MAAM,IAAIA,QAAQ,KAAK,IAAI,IAAIA,QAAQ,KAAKF,SAAS,EAAE;IACpD,OAAO;MAAA,OAAME,QAAQ;;GACxB,MAAM;IACH,OAAO;MAAA,OAAML,YAAY;;;AAEjC,CAAC;AAED,AAAO,IAAMQ,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAAIC,QAAsC;EAC7E,IAAIlM,CAAC,GAAG,CAAC;EACT,IAAI8B,CAAC,GAAG,CAAC;EACT,IAAIqK,YAAY,GAAG,CAAC;EACpB,IAAIC,eAAe,GAAG,EAAE;EACxB,IAAIC,qBAAqB,GAAG,GAAG;EAG/B,OAAOF,YAAY,GAAG,CAAC,EAAE;IACrB,IAAIG,QAAQ,GAAG,IAAI;IACnB,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAG,EAAE,EAAEA,EAAE,EAAE,EAAE;MAC5B,IAAM1C,IAAI,GAAGqC,QAAQ,CAAClM,CAAC,EAAEuM,EAAE,CAAC;MAC5B,IAAI1C,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,IAAI/B,IAAI,KAAK,EAAE,EAAE;QACpDyC,QAAQ,GAAG,KAAK;QAChB;;;IAGR,IAAIA,QAAQ,EAAE;MACVH,YAAY,IAAI,CAAC;;IAErBnM,CAAC,IAAIoM,eAAe;IACpB,IAAIpM,CAAC,GAAG7D,oBAAoB,EAAE;MAC1B;;IAEJiQ,eAAe,GAAGzL,IAAI,CAAC6L,KAAK,CAACJ,eAAe,GAAGC,qBAAqB,CAAC;;EAGzEF,YAAY,GAAG,CAAC;EAChBC,eAAe,GAAG,EAAE;EACpBC,qBAAqB,GAAG,GAAG;EAG3B,OAAOF,YAAY,GAAG,CAAC,EAAE;IACrB,IAAIG,SAAQ,GAAG,IAAI;IACnB,KAAK,IAAIG,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAG,EAAE,EAAEA,EAAE,EAAE,EAAE;MAC5B,IAAM5C,KAAI,GAAGqC,QAAQ,CAACO,EAAE,EAAE3K,CAAC,CAAC;MAC5B,IAAI+H,KAAI,KAAK,IAAI,IAAIA,KAAI,KAAK+B,SAAS,IAAI/B,KAAI,KAAK,EAAE,EAAE;QACpDyC,SAAQ,GAAG,KAAK;QAChB;;;IAGR,IAAIA,SAAQ,EAAE;MACVH,YAAY,IAAI,CAAC;;IAErBrK,CAAC,IAAIsK,eAAe;IACpB,IAAItK,CAAC,GAAG3F,oBAAoB,EAAE;MAC1B;;IAEJiQ,eAAe,GAAGzL,IAAI,CAAC6L,KAAK,CAACJ,eAAe,GAAGC,qBAAqB,CAAC;;EAEzE,OAAO,CAACrM,CAAC,EAAE8B,CAAC,CAAC;AACjB,CAAC;AAED,AAAO,IAAM4K,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC1BC,WAAwD,EACxD7B,KAAS,EACThK,SAAoB;EAEpB,IAAM8L,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;EAExC,IAAI+L,IAAI,GAAGnM,KAAK,CAACoK,KAAK,EAAEnP,MAAM,CAAC;EAC/B,IAAAmR,MAAA,GAAezM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;IAAzB5M,CAAC,GAAA8M,MAAA;IAAEhL,CAAC,GAAAgL,MAAA;EACX,IAAMlC,KAAK,GAAG+B,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAE/D,kBAAkB,CAAC;EACnD,IAAMgP,WAAW,GAAGnC,KAAK,KAAK,EAAE,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKgB,SAAS;EAEzE,IAAI,CAACmB,WAAW,EAAE;IACdF,IAAI,GAAGxM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;;EAG5B,IAAAI,KAAA,GAAqBH,IAAI;IAApBI,KAAK,GAAAD,KAAA;IAAEE,KAAK,GAAAF,KAAA;EACjB,IAAMG,IAAI,GAAGF,KAAK,GAAG9Q,oBAAoB,GAAG,CAAC;EAC7C,IAAMiR,IAAI,GAAGF,KAAK,GAAG/Q,oBAAoB,GAAG,CAAC;EAE7C,OAAO8Q,KAAK,GAAGE,IAAI,IAAID,KAAK,GAAGE,IAAI,IAAIH,KAAK,IAAI,CAAC,IAAIC,KAAK,IAAI,CAAC,EAAE;IAC7D,IAAMrD,IAAI,GAAG8C,WAAW,CAACM,KAAK,EAAEC,KAAK,EAAEnP,kBAAkB,CAAC;IAG1D,IAAIgP,WAAW,KAAKlD,IAAI,KAAK,EAAE,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,CAAC,EAAE;MACrE,OAAOpL,KAAK,CAACqM,IAAI,EAAED,IAAI,CAAC;;IAG5B,IAAI,CAACG,WAAW,IAAIlD,IAAI,KAAK,EAAE,IAAIA,IAAI,KAAK,IAAI,IAAIA,IAAI,KAAK+B,SAAS,EAAE;MACpE,OAAOiB,IAAI;;IACd,IAAAQ,MAAA,GAEgBR,IAAI,GAAGxM,KAAK,CAACwM,IAAI,EAAED,IAAI,CAAC;IAAxCK,KAAK,GAAAI,MAAA;IAAEH,KAAK,GAAAG,MAAA;;EAGjB,OAAO3M,KAAK,CAACmM,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;;AClKM,IAAMS,QAAQ,GAAG,SAAXA,QAAQA,CACjBC,UAAqC,EACrCC,UAAc,EAEdC,SAAyC,EACzCvL,SAAoB,EACpB7E,QAA0B,EAC1BqQ,QAAiB,EACjBxB,QAAsC,EACtCyB,UAAwD,EACxDC,YAAkD,EAElDC,aAA0D,EAC1DC,UAAuD,EACvDC,cAA2D,EAC3DC,WAAwD,EAExDC,UAAsB,EACtBC,YAA2B,EAC3BC,UAAsB,EAEtBC,eAAoE,EACpEC,YAAiE,EACjEC,oBAAwD,EACxDC,iBAAqD,EAErDC,gBAA4C,EAC5CC,iBAA0C,EAE1CC,MAA2B,EAC3BC,QAAqB,EACrBC,gBAAuD,EACvDC,mBAA2E,EAC3EC,kBAAoD,EACpDC,kBAA0D,EAC1DC,iBAAwF,EACxFC,aAAwC,EAExCC,kBAA6C,EAC7CC,eAAuC,EAEvCC,QAAsC,EACtCC,mBAAgE,EAChEC,gBAA6D,EAC7DC,iBAAiE,EACjEC,kBAAkE,EAClEC,YAA2C,EAE3CC,+BAAyC,EACzCC,gCAA0C;EAE1C,IAAApJ,SAAA,GAAwCC,cAAQ,CAAgB,IAAI,CAAC;IAA9DoJ,YAAY,GAAArJ,SAAA;IAAEsJ,eAAe,GAAAtJ,SAAA;EACpC,IAAAG,UAAA,GAAkCF,cAAQ,CAAgB,IAAI,CAAC;IAAxDsJ,SAAS,GAAApJ,UAAA;IAAEqJ,YAAY,GAAArJ,UAAA;EAC9B,IAAAG,UAAA,GAAoCL,cAAQ,CAAgB,IAAI,CAAC;IAA1DwJ,UAAU,GAAAnJ,UAAA;IAAEoJ,aAAa,GAAApJ,UAAA;EAChC,IAAAqJ,UAAA,GAA8B1J,cAAQ,CAAgB,IAAI,CAAC;IAApD2J,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;EAE1B,IAAAG,UAAA,GAAsC7J,cAAQ,CAA2B,IAAI,CAAC;IAAvE8J,WAAW,GAAAD,UAAA;IAAEE,cAAc,GAAAF,UAAA;EAClC,IAAAG,UAAA,GAAoChK,cAAQ,CAAY,IAAI,CAAC;IAAtDiK,UAAU,GAAAD,UAAA;IAAEE,aAAa,GAAAF,UAAA;EAEhC,IAAAG,UAAA,GAAwCnK,cAAQ,CAAC,KAAK,CAAC;IAAhDoK,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EACpC,IAAAG,UAAA,GAAkDtK,cAAQ,CAAC,KAAK,CAAC;IAA1DuK,iBAAiB,GAAAD,UAAA;IAAEE,oBAAoB,GAAAF,UAAA;EAC9C,IAAAG,UAAA,GAAwDzK,cAAQ,CAAC,KAAK,CAAC;IAAhE0K,oBAAoB,GAAAD,UAAA;IAAEE,uBAAuB,GAAAF,UAAA;EACpD,IAAAG,WAAA,GAA8D5K,cAAQ,CAAC,KAAK,CAAC;IAAtE6K,uBAAuB,GAAAD,WAAA;IAAEE,0BAA0B,GAAAF,WAAA;EAE1D,IAAQG,cAAc,GAAwBpD,UAAU,CAAhDoD,cAAc;IAAEC,iBAAiB,GAAKrD,UAAU,CAAhCqD,iBAAiB;EACzC,IAAQC,WAAW,GAAiBxD,UAAU,CAAtCwD,WAAW;IAAEC,UAAU,GAAKzD,UAAU,CAAzByD,UAAU;EAC/B,IAAMC,OAAO,GAAGD,UAAU,EAAE;EAE5B,IAAME,YAAY,GAAG3K,aAAO,CAAC;IACzB,IAAA9E,mBAAA,GAAyBC,kBAAkB,CAACF,SAAS,CAAC;MAAAG,oBAAA,GAAAF,mBAAA;MAA5CgL,IAAI,GAAA9K,oBAAA;MAAE+K,IAAI,GAAA/K,oBAAA;IACpB,IAAIoB,cAAc,CAACvB,SAAS,CAAC,EAAE;MAC3B,OAAO1B,KAAK,CAACH,KAAK,CAACoR,WAAW,CAAC,CAAC,CAAC,EAAErE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAChQ,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAEzB,OAAO,CAAC;;IAE3F,IAAIgI,iBAAiB,CAAC1B,SAAS,CAAC,EAAE;MAC9B,OAAO1B,KAAK,CAACH,KAAK,CAACoR,WAAW,CAAC,CAACtE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE/P,KAAK,CAACC,QAAQ,GAAG,GAAG,CAAC,CAAC,EAAEzB,OAAO,CAAC;;IAE3F,IAAImI,eAAe,CAAC7B,SAAS,CAAC,EAAE;MAC5B,OAAO1B,KAAK,CAACiR,WAAW,CAAC,CAACtE,IAAI,EAAEC,IAAI,CAAC,EAAExR,OAAO,CAAC,EAAEA,OAAO,CAAC;;IAE7D,OAAO,IAAI;GACd,EAAE,CAACsG,SAAS,EAAEuP,WAAW,EAAEE,OAAO,CAAC,CAAC;EAGrC,IAAME,QAAQ,GAAG;IACb3P,SAAS,EAATA,SAAS;IACTsL,UAAU,EAAVA,UAAU;IAEVnQ,QAAQ,EAARA,QAAQ;IACRqQ,QAAQ,EAARA,QAAQ;IACRxB,QAAQ,EAARA,QAAQ;IACRyB,UAAU,EAAVA,UAAU;IACVM,UAAU,EAAVA,UAAU;IACVC,YAAY,EAAZA,YAAY;IAEZ0D,YAAY,EAAZA,YAAY;IACZhC,YAAY,EAAZA,YAAY;IACZE,SAAS,EAATA,SAAS;IACTE,UAAU,EAAVA,UAAU;IACVG,OAAO,EAAPA,OAAO;IAEPS,YAAY,EAAZA,YAAY;IACZG,iBAAiB,EAAjBA,iBAAiB;IACjBG,oBAAoB,EAApBA,oBAAoB;IACpBG,uBAAuB,EAAvBA;GACH;EACD,IAAMS,GAAG,GAAGC,YAAM,CAACF,QAAQ,CAAC;EAC5BC,GAAG,CAACE,OAAO,GAAGH,QAAQ;EAGtB,IAAMI,gBAAgB,GAAG7K,iBAAW,CAAC,UAAC2C,CAAsC,EAAEmI,MAAgB;IAC1F,IAAI,CAACnI,CAAC,CAACoI,MAAM,IAAI,EAAEpI,CAAC,CAACoI,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C,OAAO,IAAI;;IAGf,IAAMC,IAAI,GAAGtI,CAAC,CAACoI,MAAM,CAACG,qBAAqB,EAAE;IAC7C,IAAMC,EAAE,GAAO,CAACxI,CAAC,CAACyI,OAAO,GAAGH,IAAI,CAAC5Q,IAAI,EAAEsI,CAAC,CAAC0I,OAAO,GAAGJ,IAAI,CAAC3Q,GAAG,CAAC;IAG5D,IAAIwQ,MAAM,KAAKK,EAAE,CAAC,CAAC,CAAC,GAAGxI,CAAC,CAACoI,MAAM,CAACO,WAAW,IAAIH,EAAE,CAAC,CAAC,CAAC,GAAGxI,CAAC,CAACoI,MAAM,CAACQ,YAAY,CAAC,EAAE;MAC3E,OAAO,IAAI;;IAGf,OAAOJ,EAAE;GACZ,EAAE,EAAE,CAAC;EAGN,IAAMK,mBAAmB,GAAGxL,iBAAW,CACnC,UAAC2C,CAAsC,EAAE8I,MAAe,EAAEC,MAAe;IACrE,IAAI,CAAC/I,CAAC,CAACoI,MAAM,IAAI,EAAEpI,CAAC,CAACoI,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C,OAAO,IAAI;;IAGf,IAAMC,IAAI,GAAGtI,CAAC,CAACoI,MAAM,CAACG,qBAAqB,EAAE;IAC7C,IAAMC,EAAE,GAAO,CAACxI,CAAC,CAACyI,OAAO,GAAGH,IAAI,CAAC5Q,IAAI,EAAEsI,CAAC,CAAC0I,OAAO,GAAGJ,IAAI,CAAC3Q,GAAG,CAAC;IAE5D,IAAMqR,OAAO,GAAG9E,UAAU,CAAC+E,UAAU,EAAE;IACvC,IAAMC,OAAO,GAAGhF,UAAU,CAACiF,UAAU,EAAE;IAEvC,IAAMC,KAAK,GAAGN,MAAM,GAAIN,EAAE,CAAC,CAAC,CAAC,GAAGQ,OAAO,GAAG,CAAC,CAAC,GAAGR,EAAE,CAAC,CAAC,CAAC,GAAGxI,CAAC,CAACoI,MAAM,CAACO,WAAW,GAAG,CAAC,GAAG,CAAC,GAAI,CAAC;IACxF,IAAMU,KAAK,GAAGN,MAAM,GAAIP,EAAE,CAAC,CAAC,CAAC,GAAGU,OAAO,GAAG,CAAC,CAAC,GAAGV,EAAE,CAAC,CAAC,CAAC,GAAGxI,CAAC,CAACoI,MAAM,CAACQ,YAAY,GAAG,CAAC,GAAG,CAAC,GAAI,CAAC;IAEzF,OAAOQ,KAAK,IAAIC,KAAK,GAAI,CAACD,KAAK,EAAEC,KAAK,CAAQ,GAAG,IAAI;GACxD,EACD,CAACnF,UAAU,CAAC,CACf;EAED,IAAMoF,WAAW,GAAGjM,iBAAW,CAC3B,UAACmL,EAAM;IACH,IAAiBe,MAAM,GAAK7F,SAAS,CAA7BuE,OAAO;IACf,IAAI,CAACsB,MAAM,EAAE,OAAO,IAAI;IAExB,SAAAC,SAAA,GAAAC,+BAAA,CAAqBF,MAAM,GAAAG,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;MAAA,IAAlBC,MAAM,GAAAF,KAAA,CAAAG,KAAA;MACb,IAAQvL,GAAG,GAAKsL,MAAM,CAAdtL,GAAG;MACX,IAAIhH,sBAAsB,CAACgH,GAAG,EAAEkK,EAAE,CAAC,EAAE;QACjC,OAAOoB,MAAM;;;IAIrB,OAAO,IAAI;GACd,EACD,CAAClG,SAAS,CAAC,CACd;EAED,IAAMoG,cAAc,GAAGzM,iBAAW,CAAC;IAC/BpB,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,MAAM;GAC7C,EAAE,EAAE,CAAC;EAEN,IAAMC,aAAa,GAAG5M,iBAAW,CAC7B,UAAC2C,CAA+B;;IAC5B,IAAAkK,YAAA,GAQInC,GAAG,CAPHE,OAAO;MACH9P,SAAS,GAAA+R,YAAA,CAAT/R,SAAS;MACTsL,UAAU,GAAAyG,YAAA,CAAVzG,UAAU;MAAA0G,qBAAA,GAAAD,YAAA,CACVhG,UAAU;MAAIkG,aAAa,GAAAD,qBAAA,CAAbC,aAAa;MAAEC,UAAU,GAAAF,qBAAA,CAAVE,UAAU;MAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;MAAErB,UAAU,GAAAkB,qBAAA,CAAVlB,UAAU;MAAEE,UAAU,GAAAgB,qBAAA,CAAVhB,UAAU;MAAAoB,qBAAA,GAAAL,YAAA,CAC5E/F,YAAY;MAAIqG,OAAO,GAAAD,qBAAA,CAAPC,OAAO;MAAEC,IAAI,GAAAF,qBAAA,CAAJE,IAAI;MAC7B5C,YAAY,GAAAqC,YAAA,CAAZrC,YAAY;IAIpB3C,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;IAErB,IAAIlF,CAAC,CAAC0K,MAAM,KAAK,CAAC,EAAE;IAEnB,CAAAC,SAAA,GAAA3K,CAAC,CAACoI,MAAkB,cAAAuC,SAAA,wBAAAC,qBAAA,GAApBD,SAAA,CAAsBE,iBAAiB,cAAAD,qBAAA,uBAAvCA,qBAAA,CAAAE,IAAA,CAAAH,SAAA,EAA0C3K,CAAC,CAAC+K,SAAS,CAAC;IAEvD,IAAMvC,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,EAAE,IAAI,CAAC;IACpC,IAAI,CAACwI,EAAE,EAAE;IAET,IAAMwC,SAAS,GAAG1B,WAAW,CAACd,EAAE,CAAC;IACjChC,cAAc,CAACwE,SAAS,CAAC;IAEzB,IAAO/U,CAAC,GAAOuS,EAAE;MAAPzQ,CAAC,GAAIyQ,EAAE;IAEjB,IAAMzN,UAAU,GAAG1C,kBAAkB,CAACF,SAAS,CAAC;IAChD,IAAA8C,YAAA,GAAqCF,UAAU;MAAvCkQ,IAAI,GAAAhQ,YAAA;MAAEiQ,IAAI,GAAAjQ,YAAA;MAAAC,aAAA,GAAmBH,UAAU;MAAzBqI,IAAI,GAAAlI,aAAA;MAAEmI,IAAI,GAAAnI,aAAA;IAEhC,IAAMiQ,eAAe,GAAGjS,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAACpC,CAAC;MAAA,OAAKA,CAAC;MAAC;IAChE,IAAMqV,YAAY,GAAGjS,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACpC,CAAC;MAAA,OAAKA,CAAC;MAAC;IAG1D,IAAI,CAAC0R,iBAAiB,IAAI1P,CAAC,GAAGoR,UAAU,EAAE,EAAE;MAExC,IAAI7D,mBAAmB,EAAE;QAErB,IAAMvE,KAAK,GAAGqJ,aAAa,CAACa,IAAI,CAAC,GAAG5X,KAAK,CAACM,UAAU;QACpD,IAAMqN,GAAG,GAAGoJ,aAAa,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAG/P,KAAK,CAACM,UAAU;QACrD,IAAIqC,SAAS,CAACC,CAAC,EAAE8K,KAAK,EAAEC,GAAG,CAAC,IAAIuD,oBAAoB,EAAE;UAClD,SAAA8G,UAAA,GAAA5B,+BAAA,CAAoBe,OAAO,GAAAc,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA1B,IAAA,GAAE;YAAA,IAAlBtJ,KAAK,GAAAiL,MAAA,CAAAzB,KAAA;YACZ,IAAM9I,MAAK,GAAGqJ,aAAa,CAAC/J,KAAK,EAAE,CAAC,CAAC;YACrC,IAAMW,IAAG,GAAGoJ,aAAa,CAAC/J,KAAK,EAAE,CAAC,CAAC;YAEnC,IACIxG,iBAAiB,CAAC1B,SAAS,CAAC,IAC5BnC,SAAS,CAACC,CAAC,EAAE8K,MAAK,EAAEC,IAAG,CAAC,KACvBhL,SAAS,CAACqK,KAAK,EAAE4K,IAAI,EAAE7H,IAAI,CAAC,IAAImB,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAE9D,GAAG,CAAC4D,eAAe,CAAChE,KAAK,CAAC,CAAC,CAAC,IACnF2D,cAAc,CAAC3D,KAAK,CAAC,EACvB;cACEpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,UAAU;cAG9C,IAAMuB,OAAO,GAAG7V,KAAK,CAACC,IAAI,CACtB,IAAI6V,GAAG,IAAAC,MAAA,CACAN,eAAe,EACd5G,oBAAoB,GAClBiG,OAAO,CAACkB,MAAM,CAAC,UAACrL,KAAK;gBAAA,OACjBkE,oBAAoB,CAAC9D,GAAG,CAAC4D,eAAe,CAAChE,KAAK,CAAC,CAAC;gBACnD,GACD,EAAE,CACX,CAAC,CAACsL,MAAM,EAAE,CACd;cACDJ,OAAO,CAACK,IAAI,CAAC,UAACrV,CAAC,EAAEC,CAAC;gBAAA,OAAKD,CAAC,GAAGC,CAAC;gBAAC;cAG7B,IAAIqV,WAAW,GAAGN,OAAO;cACzB,IAAIhH,oBAAoB,EAAE;gBACtB,IAAMuH,cAAc,GAAc,CAC9B,CAACzL,KAAK,EAAE,CAAC,CAAC,CAAC,EACX,CAACA,KAAK,EAAE,CAAC,CAAC,CAAC,CACd;gBACD,IAAA0L,qBAAA,GAA0BrL,kCAAkC,CACxDoL,cAAc,EACdzH,eAAe,EACfE,oBAAoB,EACpB,CAAC,CACJ;kBAAAyH,sBAAA,GAAAD,qBAAA;kBALOrU,IAAI,GAAAsU,sBAAA;kBAAAC,sBAAA,GAAAF,qBAAA;kBAAIlU,KAAK,GAAAoU,sBAAA;gBAQrB,IAAMC,SAAS,GAAG,EAAEjB,IAAI,GAAGpT,KAAK,IAAIuL,IAAI,GAAG1L,IAAI,CAAC;gBAChD,IAAMyU,SAAS,GAAGD,SAAS,GAAGtV,IAAI,CAACV,GAAG,CAAC+U,IAAI,EAAEvT,IAAI,CAAC,GAAGA,IAAI;gBACzD,IAAM0U,OAAO,GAAGF,SAAS,GAAGtV,IAAI,CAACT,GAAG,CAACiN,IAAI,EAAEvL,KAAK,CAAC,GAAGA,KAAK;gBACzDgU,WAAW,GAAGvW,GAAG,CAAC8W,OAAO,GAAGD,SAAS,GAAG,CAAC,EAAEA,SAAS,CAAC;;cAGzD,IAAME,IAAI,GAAGjC,aAAa,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGgH,aAAa,CAACa,IAAI,CAAC;cAEzD/E,aAAa,CAAC;gBACVvL,MAAM,EAAE6N,EAAE;gBACV8D,MAAM,EAAE7I,UAAU;gBAClB4I,IAAI,EAAJA,IAAI;gBACJd,OAAO,EAAPA;eACH,CAAC;cACFxG,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cAC5BD,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAAC+G,WAAW,EAAE,IAAI,CAAC,CAAC;cAC1C;;;;;MAOhB,IAAIrG,iBAAiB,EAAE;QACnB,SAAA+G,EAAA,MAAAC,IAAA,IAAqB,CAAC,CAAC,EAAAf,MAAA,CAAKjB,OAAO,GAAA+B,EAAA,GAAAC,IAAA,CAAA5W,MAAA,EAAA2W,EAAA,IAAG;UAAjC,IAAMlM,MAAK,GAAAmM,IAAA,CAAAD,EAAA;UACZ,IAAME,IAAI,GAAGrC,aAAa,CAAC/J,MAAK,EAAE,CAAC,CAAC;UAEpC,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,IAAI,GAAGxW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAImQ,aAAa,CAACzD,MAAK,CAAC,EAAE;YAC/DpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;YAEhD,IAAM2C,OAAO,GAAG9S,iBAAiB,CAAC1B,SAAS,CAAC,IAAIiL,IAAI,KAAK/C,MAAK;YAC9D,IAAMkL,QAAO,GAAGoB,OAAO,GAAGxB,eAAe,GAAG,CAAC9K,MAAK,CAAC;YAEnD,IAAMgM,KAAI,GAAGM,OAAO,GACdvC,aAAa,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGgH,aAAa,CAACa,IAAI,CAAC,GAC5Cb,aAAa,CAAC/J,MAAK,EAAE,CAAC,CAAC,GAAG+J,aAAa,CAAC/J,MAAK,CAAC;YAEpDyF,eAAe,CAAC;cACZnL,MAAM,EAAE6N,EAAE;cACV8D,MAAM,EAAE7I,UAAU;cAClB4I,IAAI,EAAJA,KAAI;cACJd,OAAO,EAAPA;aACH,CAAC;YACF;;;;;IAMhB,IAAI,CAAC/D,cAAc,IAAIvR,CAAC,GAAGgT,UAAU,EAAE,EAAE;MAErC,IAAI1D,gBAAgB,EAAE;QAElB,IAAMxE,OAAK,GAAGsJ,UAAU,CAACa,IAAI,CAAC,GAAG7X,KAAK,CAACM,UAAU;QACjD,IAAMqN,KAAG,GAAGqJ,UAAU,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGhQ,KAAK,CAACM,UAAU;QAElD,IAAIqC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,IAAIwD,iBAAiB,EAAE;UAC/C,SAAAoI,UAAA,GAAAnD,+BAAA,CAAoBgB,IAAI,GAAAoC,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjD,IAAA,GAAE;YAAA,IAAftJ,OAAK,GAAAwM,MAAA,CAAAhD,KAAA;YACZ,IAAM9I,OAAK,GAAGsJ,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;YAClC,IAAMW,KAAG,GAAGqJ,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;YAEhC,IACI3G,cAAc,CAACvB,SAAS,CAAC,IACzBnC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,OAAK,EAAE6K,IAAI,EAAE7H,IAAI,CAAC,IAAImB,iBAAiB,aAAjBA,iBAAiB,eAAjBA,iBAAiB,CAAE/D,GAAG,CAAC6D,YAAY,CAACjE,OAAK,CAAC,CAAC,CAAC,IAC7E4D,WAAW,CAAC5D,OAAK,CAAC,EACpB;cACEpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,UAAU;cAG9C,IAAMuB,SAAO,GAAG7V,KAAK,CAACC,IAAI,CACtB,IAAI6V,GAAG,IAAAC,MAAA,CACAL,YAAY,EACX5G,iBAAiB,GACfiG,IAAI,CACC5U,GAAG,CAAC,UAACC,CAAC,EAAEC,CAAC;gBAAA,OAAKA,CAAC;gBAAC,CAChB2V,MAAM,CAAC,UAACrL,KAAK;gBAAA,OAAKmE,iBAAiB,CAAC/D,GAAG,CAAC6D,YAAY,CAACjE,KAAK,CAAC,CAAC;gBAAC,GAClE,EAAE,CACX,CAAC,CAACsL,MAAM,EAAE,CACd;cACDJ,SAAO,CAACK,IAAI,CAAC,UAACrV,CAAC,EAAEC,CAAC;gBAAA,OAAKD,CAAC,GAAGC,CAAC;gBAAC;cAG7B,IAAIqV,YAAW,GAAGN,SAAO;cACzB,IAAI/G,iBAAiB,EAAE;gBACnB,IAAMsH,eAAc,GAAc,CAC9B,CAAC,CAAC,CAAC,EAAEzL,OAAK,CAAC,EACX,CAAC,CAAC,CAAC,EAAEA,OAAK,CAAC,CACd;gBACD,IAAAyM,sBAAA,GAA8BpM,kCAAkC,CAC5DoL,eAAc,EACdxH,YAAY,EACZE,iBAAiB,EACjB,CAAC,CACJ;kBAAAuI,sBAAA,GAAAD,sBAAA;kBALSnV,GAAG,GAAAoV,sBAAA;kBAAAC,sBAAA,GAAAF,sBAAA;kBAAMhV,MAAM,GAAAkV,sBAAA;gBAQzB,IAAMd,UAAS,GAAG,EAAEhB,IAAI,GAAGpT,MAAM,IAAIuL,IAAI,GAAG1L,GAAG,CAAC;gBAChD,IAAMwU,UAAS,GAAGD,UAAS,GAAGtV,IAAI,CAACV,GAAG,CAACgV,IAAI,EAAEvT,GAAG,CAAC,GAAGA,GAAG;gBACvD,IAAMyU,QAAO,GAAGF,UAAS,GAAGtV,IAAI,CAACT,GAAG,CAACkN,IAAI,EAAEvL,MAAM,CAAC,GAAGA,MAAM;gBAC3D+T,YAAW,GAAGvW,GAAG,CAAC8W,QAAO,GAAGD,UAAS,GAAG,CAAC,EAAEA,UAAS,CAAC;;cAGzD,IAAME,MAAI,GAAGhC,UAAU,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGgH,UAAU,CAACa,IAAI,CAAC;cAEnD7E,UAAU,CAAC;gBACP1L,MAAM,EAAE6N,EAAE;gBACV8D,MAAM,EAAE7I,UAAU;gBAClB4I,IAAI,EAAJA,MAAI;gBACJd,OAAO,EAAPA;eACH,CAAC;cACFxG,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;cAC5BD,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAAC,IAAI,EAAE+G,YAAW,CAAC,CAAC;cAC1C;;;;;MAOhB,IAAIpG,kBAAkB,EAAE;QACpB,SAAAwH,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAAzB,MAAA,CAAKhB,IAAI,GAAAwC,GAAA,GAAAC,KAAA,CAAAtX,MAAA,EAAAqX,GAAA,IAAG;UAA9B,IAAM5M,OAAK,GAAA6M,KAAA,CAAAD,GAAA;UACZ,IAAMR,KAAI,GAAGpC,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;UAEjC,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,KAAI,GAAG1U,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIoQ,UAAU,CAAC1D,OAAK,CAAC,EAAE;YAC5DpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;YAEhD,IAAM2C,QAAO,GAAGjT,cAAc,CAACvB,SAAS,CAAC,IAAIkL,IAAI,KAAKhD,OAAK;YAC3D,IAAMkL,SAAO,GAAGoB,QAAO,GAAGvB,YAAY,GAAG,CAAC/K,OAAK,CAAC;YAEhD,IAAMgM,MAAI,GAAGM,QAAO,GACdtC,UAAU,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGgH,UAAU,CAACa,IAAI,CAAC,GACtCb,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC,GAAGgK,UAAU,CAAChK,OAAK,CAAC;YAE9C2F,YAAY,CAAC;cACTrL,MAAM,EAAE6N,EAAE;cACV8D,MAAM,EAAE7I,UAAU;cAClB4I,IAAI,EAAJA,MAAI;cACJd,OAAO,EAAPA;aACH,CAAC;YACF;;;;;IAOhB,IAAI1D,YAAY,EAAE;MACd,IAAOsF,KAAK,GAAWtF,YAAY;QAArBuF,KAAK,GAAIvF,YAAY;MACnC,IAAIjR,IAAI,CAAC8V,GAAG,CAACzW,CAAC,GAAGkX,KAAK,CAAC,GAAG9Z,KAAK,CAACC,QAAQ,IAAIsD,IAAI,CAAC8V,GAAG,CAAC3U,CAAC,GAAGqV,KAAK,CAAC,GAAG/Z,KAAK,CAACC,QAAQ,EAAE;QAC9EwT,eAAe,CAAC,IAAI,CAAC;QACrBjC,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAG1M,SAAS,CAAC;QAC7B;;;IAKR,IAAMyC,IAAI,GAAG0P,WAAW,CAAC9B,EAAE,CAAC;IAC5B,IAAM7N,MAAM,GAAOqF,CAAC,CAACqN,QAAQ,MAAA5B,MAAA,CAAOtT,SAAS,CAAC,CAAC,CAAC,IAAIyC,IAAI;IAExD,IAAI+I,QAAQ,EAAE;MACV,IAAI,CAACgC,+BAA+B,EAAE;QAClCf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;;;IAIpB,IAAI0I,QAAQ,GAAG,IAAI;IAEnB,IAAI,CAAC9F,cAAc,IAAIvR,CAAC,GAAGgT,UAAU,EAAE,EAAE;MACrCqE,QAAQ,GAAG,KAAK;MAChBlG,uBAAuB,CAAC,IAAI,CAAC;MAC7BzM,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACdC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;IAGhB,IAAI,CAAC6M,iBAAiB,IAAI1P,CAAC,GAAGoR,UAAU,EAAE,EAAE;MACxCmE,QAAQ,GAAG,KAAK;MAChB/F,0BAA0B,CAAC,IAAI,CAAC;MAChC5M,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;MACdC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;IAGhBqM,oBAAoB,CAAC,IAAI,CAAC;IAC1BhC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACtK,MAAM,EAAEC,IAAI,CAAC,EAAE0S,QAAQ,EAAE,IAAI,CAAC;GACtD,EACD,CACIpF,gBAAgB,EAChBoB,WAAW,EACXhE,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,kBAAkB,EAClBZ,gBAAgB,EAChBI,iBAAiB,EACjBL,QAAQ,EACRd,aAAa,EACbC,UAAU,EACVC,cAAc,EACdC,WAAW,EACX0B,+BAA+B,EAC/BtB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,CACpB,CACJ;EAED,IAAM+I,WAAW,GAAGlQ,iBAAW,CAC3B,UAAC2C,CAA+B;IAC5B,IAAAwN,aAAA,GAcIzF,GAAG,CAbHE,OAAO;MACH3U,QAAQ,GAAAka,aAAA,CAARla,QAAQ;MACR6E,SAAS,GAAAqV,aAAA,CAATrV,SAAS;MACTyL,UAAU,GAAA4J,aAAA,CAAV5J,UAAU;MACVzB,QAAQ,GAAAqL,aAAA,CAARrL,QAAQ;MAER8D,UAAU,GAAAuH,aAAA,CAAVvH,UAAU;MACVG,OAAO,GAAAoH,aAAA,CAAPpH,OAAO;MAEPS,YAAY,GAAA2G,aAAA,CAAZ3G,YAAY;MAAA4G,qBAAA,GAAAD,aAAA,CAEZtJ,UAAU;MAAIwJ,aAAa,GAAAD,qBAAA,CAAbC,aAAa;MAAEC,UAAU,GAAAF,qBAAA,CAAVE,UAAU;IAI/CzI,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;IAErB,IAAI5R,QAAQ,IAAIuT,YAAY,EAAE;MAC1B,IAAM+G,OAAO,GAAGC,kBAAkB,CAACva,QAAQ,EAAE6E,SAAS,EAAEyL,UAAU,EAAEzB,QAAQ,EAAE0B,YAAY,CAAC;MAE3FwB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGuI,OAAO,CAAC;MACnB3I,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG3R,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC;MACzCuR,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAG,IAAI,CAAC;;IAG5B,IAAM2D,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,CAAC;IAC9B,IAAIwI,EAAE,KAAKvC,UAAU,IAAIG,OAAO,CAAC,EAAE;MAC/BnK,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,MAAM;MAC1ClF,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;MACnCC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,IAAI,CAAC;MAC1BC,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,IAAI,CAAC;MAE1B,IAAO/O,CAAC,GAAOuS,EAAE;QAAPzQ,CAAC,GAAIyQ,EAAE;MACjB,IAAA/P,oBAAA,GAAqCJ,kBAAkB,CAACF,SAAS,CAAC;QAAAO,qBAAA,GAAAD,oBAAA;QAA1DwS,IAAI,GAAAvS,qBAAA;QAAEwS,IAAI,GAAAxS,qBAAA;QAAAC,sBAAA,GAAAF,oBAAA;QAAI2K,IAAI,GAAAzK,sBAAA;QAAE0K,IAAI,GAAA1K,sBAAA;MAEhC,IAAMuK,KAAK,GAAGwK,aAAa,CAACzX,CAAC,EAAE,GAAG,CAAC;MACnC,IAAMkN,KAAK,GAAGwK,UAAU,CAAC5V,CAAC,EAAE,GAAG,CAAC;MAEhC,IAAIkO,UAAU,EAAE;QACZ,IAAQsF,OAAO,GAAKtF,UAAU,CAAtBsF,OAAO;QAEf,IAAMuC,eAAe,GAAG5K,KAAK,IAAI+H,IAAI,IAAI/H,KAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAM2K,WAAW,GAAGxJ,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAE9D,GAAG,CAAC4D,eAAe,CAACpO,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC6X,eAAe,IAAI,CAACC,WAAW,EAAE;UAClC,IAAMC,SAAS,GAAGzC,OAAO,CAACG,MAAM,CAAC,UAAC3V,CAAC;YAAA,OAAKA,CAAC,GAAGmN,KAAK;YAAC;UAClD,IAAM+K,KAAK,GAAG/K,KAAK,GAAG8K,SAAS,CAACpY,MAAM;UACtCgQ,gCAAgC,KAC5BX,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAChB,CAACgJ,KAAK,EAAE/C,IAAI,CAAC,EACb,CAAC+C,KAAK,GAAG1C,OAAO,CAAC3V,MAAM,GAAG,CAAC,EAAEyN,IAAI,CAAC,CACrC,CAAC;UACNiC,mBAAmB,aAAnBA,mBAAmB,uBAAnBA,mBAAmB,CAAGiG,OAAO,EAAE0C,KAAK,CAAC;UACrC9I,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAGvO,IAAI,CAACV,GAAG,CAAC+U,IAAI,EAAEgD,KAAK,CAAC,CAAC;;;MAGnD,IAAI7H,OAAO,EAAE;QACT,IAAQmF,SAAO,GAAKnF,OAAO,CAAnBmF,OAAO;QAEf,IAAMuC,gBAAe,GAAG3K,KAAK,IAAI+H,IAAI,IAAI/H,KAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAM0K,YAAW,GAAGvJ,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAE/D,GAAG,CAAC6D,YAAY,CAACvM,CAAC,CAAC,CAAC;QAC3D,IAAI,CAAC+V,gBAAe,IAAI,CAACC,YAAW,EAAE;UAClC,IAAMC,UAAS,GAAGzC,SAAO,CAACG,MAAM,CAAC,UAAC3V,CAAC;YAAA,OAAKA,CAAC,GAAGoN,KAAK;YAAC;UAClD,IAAM8K,MAAK,GAAG9K,KAAK,GAAG6K,UAAS,CAACpY,MAAM;UACtCgQ,gCAAgC,KAC5BX,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAChB,CAACgG,IAAI,EAAEgD,MAAK,CAAC,EACb,CAAC7K,IAAI,EAAE6K,MAAK,GAAG1C,SAAO,CAAC3V,MAAM,GAAG,CAAC,CAAC,CACrC,CAAC;UACN2P,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAGgG,SAAO,EAAE0C,MAAK,CAAC;UAClC7I,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGxO,IAAI,CAACV,GAAG,CAACgV,IAAI,EAAE+C,MAAK,CAAC,CAAC;;;;IAKpDhH,oBAAoB,CAAC,KAAK,CAAC;IAC3BG,uBAAuB,CAAC,KAAK,CAAC;IAC9BG,0BAA0B,CAAC,KAAK,CAAC;IACjCT,eAAe,CAAC,KAAK,CAAC;IACtBhB,eAAe,CAAC,IAAI,CAAC;IACrBI,aAAa,CAAC,IAAI,CAAC;IACnBF,YAAY,CAAC,IAAI,CAAC;IAClBK,UAAU,CAAC,IAAI,CAAC;IAChBM,aAAa,CAAC,IAAI,CAAC;GACtB,EACD,CACIuB,gBAAgB,EAChBoB,WAAW,EACXjE,QAAQ,EACRJ,iBAAiB,EACjBJ,gBAAgB,EAChBG,kBAAkB,EAClBM,mBAAmB,EACnBC,gBAAgB,EAChBK,gCAAgC,CACnC,CACJ;EAED,IAAMsI,aAAa,GAAG7Q,iBAAW,CAC7B,UAAC2C,CAA+B;IAC5B,IAAAmO,aAAA,GA4BIpG,GAAG,CA3BHE,OAAO;MACH9P,SAAS,GAAAgW,aAAA,CAAThW,SAAS;MACTsL,UAAU,GAAA0K,aAAA,CAAV1K,UAAU;MACVU,YAAY,GAAAgK,aAAA,CAAZhK,YAAY;MAEZ0D,YAAY,GAAAsG,aAAA,CAAZtG,YAAY;MACZhC,YAAY,GAAAsI,aAAA,CAAZtI,YAAY;MACZI,UAAU,GAAAkI,aAAA,CAAVlI,UAAU;MACVF,SAAS,GAAAoI,aAAA,CAATpI,SAAS;MACTK,OAAO,GAAA+H,aAAA,CAAP/H,OAAO;MAEPS,YAAY,GAAAsH,aAAA,CAAZtH,YAAY;MACZG,iBAAiB,GAAAmH,aAAA,CAAjBnH,iBAAiB;MACjBM,uBAAuB,GAAA6G,aAAA,CAAvB7G,uBAAuB;MACvBH,oBAAoB,GAAAgH,aAAA,CAApBhH,oBAAoB;MAAAiH,qBAAA,GAAAD,aAAA,CAEpBjK,UAAU;MACNwD,WAAW,GAAA0G,qBAAA,CAAX1G,WAAW;MACX0C,aAAa,GAAAgE,qBAAA,CAAbhE,aAAa;MACbC,UAAU,GAAA+D,qBAAA,CAAV/D,UAAU;MACVC,WAAW,GAAA8D,qBAAA,CAAX9D,WAAW;MACXoD,aAAa,GAAAU,qBAAA,CAAbV,aAAa;MACbC,UAAU,GAAAS,qBAAA,CAAVT,UAAU;MACV1E,UAAU,GAAAmF,qBAAA,CAAVnF,UAAU;MACVE,UAAU,GAAAiF,qBAAA,CAAVjF,UAAU;IAKtBlN,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,MAAM;IAE1C,IAAMqE,WAAW,GACb,CAAC,CAACxI,YAAY,IAAI,CAAC,CAACI,UAAU,IAAIqB,uBAAuB,IAAIN,iBAAiB,IAAIH,YAAY;IAElG,IAAMyH,WAAW,GAAG,CAAC,CAACvI,SAAS,IAAI,CAAC,CAACK,OAAO,IAAIe,oBAAoB,IAAIH,iBAAiB,IAAIH,YAAY;IAEzG,IAAM0H,UAAU,GAAGF,WAAW,IAAIC,WAAW;IAE7C,IAAME,WAAW,GAAG3F,mBAAmB,CAAC7I,CAAC,EAAEqO,WAAW,EAAEC,WAAW,CAAC;IACpE,IAAIC,UAAU,EAAE5H,aAAa,CAAC6H,WAAW,CAAC;IAE1C,IAAMhG,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,CAAC;IAC9B,IAAI,CAACwI,EAAE,EAAE;IAET,IAAMwC,SAAS,GAAG1B,WAAW,CAACd,EAAE,CAAC;IAEjC,IAAIvC,UAAU,IAAIG,OAAO,EAAE;MACvBnK,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,UAAU;KACjD,MAAM,IAAInE,YAAY,EAAE;MACrB5J,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;MAChDhK,CAAC,CAACyO,cAAc,EAAE;KACrB,MAAM,IAAI1I,SAAS,EAAE;MAClB9J,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;MAChDhK,CAAC,CAACyO,cAAc,EAAE;KACrB,MAAM,IAAItH,oBAAoB,IAAIG,uBAAuB,EAAE;MACxDtH,CAAC,CAACyO,cAAc,EAAE;KACrB,MAAM,IAAIzD,SAAS,EAAE;MAClB/O,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,SAAS;;IAGjD,IAAQQ,OAAO,GAAWrG,YAAY,CAA9BqG,OAAO;MAAEC,IAAI,GAAKtG,YAAY,CAArBsG,IAAI;IACrB,IAAOxU,CAAC,GAAOuS,EAAE;MAAPzQ,CAAC,GAAIyQ,EAAE;IACjB,IAAAjO,oBAAA,GAAqClC,kBAAkB,CAACF,SAAS,CAAC;MAAAqC,qBAAA,GAAAD,oBAAA;MAA1D0Q,IAAI,GAAAzQ,qBAAA;MAAE0Q,IAAI,GAAA1Q,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAI6I,IAAI,GAAA3I,sBAAA;MAAE4I,IAAI,GAAA5I,sBAAA;IAEhC,IAAMiU,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,WAAe;MACxC,OAAOlY,KAAK,CAACiR,WAAW,CAACjE,UAAU,CAAC,EAAEiE,WAAW,CAACiH,WAAW,CAAC,CAAC;KAClE;IAED,IAAI,CAACJ,UAAU,EAAE;MACb,IAAI,CAAC9G,iBAAiB,IAAI1P,CAAC,GAAGoR,UAAU,EAAE,EAAE;QACxC,IAAI7D,mBAAmB,EAAE;UAErB,IAAMvE,KAAK,GAAGqJ,aAAa,CAACa,IAAI,CAAC,GAAG5X,KAAK,CAACM,UAAU;UACpD,IAAMqN,GAAG,GAAGoJ,aAAa,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAG/P,KAAK,CAACM,UAAU;UACrD,IAAIqC,SAAS,CAACC,CAAC,EAAE8K,KAAK,EAAEC,GAAG,CAAC,IAAIuD,oBAAoB,EAAE;YAClD,SAAAqK,UAAA,GAAAnF,+BAAA,CAAoBe,OAAO,GAAAqE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjF,IAAA,GAAE;cAAA,IAAlBtJ,KAAK,GAAAwO,MAAA,CAAAhF,KAAA;cACZ,IAAM9I,OAAK,GAAGqJ,aAAa,CAAC/J,KAAK,CAAC;cAClC,IAAMW,KAAG,GAAGoJ,aAAa,CAAC/J,KAAK,EAAE,CAAC,CAAC;cAEnC,IACI,CAACiH,uBAAuB,IACxBzN,iBAAiB,CAAC1B,SAAS,CAAC,IAC5BnC,SAAS,CAACC,CAAC,EAAE8K,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,KAAK,EAAE4K,IAAI,EAAE7H,IAAI,CAAC,IACzBmB,oBAAoB,aAApBA,oBAAoB,eAApBA,oBAAoB,CAAE9D,GAAG,CAAC4D,eAAe,CAAChE,KAAK,CAAC,CAAC,CAAC,IACtD2D,cAAc,CAAC3D,KAAK,CAAC,EACvB;gBACEpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,MAAM;gBAC1C;;;;;QAKhB,IAAIxE,iBAAiB,EAAE;UACnB,SAAAsJ,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAAtD,MAAA,CAAKjB,OAAO,GAAAsE,GAAA,GAAAC,KAAA,CAAAnZ,MAAA,EAAAkZ,GAAA,IAAG;YAAjC,IAAMzO,OAAK,GAAA0O,KAAA,CAAAD,GAAA;YACZ,IAAMrC,IAAI,GAAGrC,aAAa,CAAC/J,OAAK,EAAE,CAAC,CAAC;YACpC,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,IAAI,GAAGxW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAImQ,aAAa,CAACzD,OAAK,CAAC,EAAE;cAC/DpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;cAChD;;;;;MAMhB,IAAI,CAACxC,cAAc,IAAIvR,CAAC,GAAGgT,UAAU,EAAE,EAAE;QACrC,IAAI1D,gBAAgB,EAAE;UAElB,IAAMxE,OAAK,GAAGsJ,UAAU,CAACa,IAAI,CAAC,GAAG7X,KAAK,CAACM,UAAU;UACjD,IAAMqN,KAAG,GAAGqJ,UAAU,CAAChH,IAAI,EAAE,CAAC,CAAC,GAAGhQ,KAAK,CAACM,UAAU;UAClD,IAAIqC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,IAAIwD,iBAAiB,EAAE;YAC/C,SAAAwK,UAAA,GAAAvF,+BAAA,CAAoBgB,IAAI,GAAAwE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArF,IAAA,GAAE;cAAA,IAAftJ,OAAK,GAAA4O,MAAA,CAAApF,KAAA;cACZ,IAAM9I,OAAK,GAAGsJ,UAAU,CAAChK,OAAK,CAAC;cAC/B,IAAMW,KAAG,GAAGqJ,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;cAEhC,IACI,CAAC8G,oBAAoB,IACrBzN,cAAc,CAACvB,SAAS,CAAC,IACzBnC,SAAS,CAAC+B,CAAC,EAAEgJ,OAAK,EAAEC,KAAG,CAAC,KACvBhL,SAAS,CAACqK,OAAK,EAAE6K,IAAI,EAAE7H,IAAI,CAAC,IAAImB,iBAAiB,aAAjBA,iBAAiB,eAAjBA,iBAAiB,CAAE/D,GAAG,CAAC6D,YAAY,CAACjE,OAAK,CAAC,CAAC,CAAC,IAC7E4D,WAAW,CAAC5D,OAAK,CAAC,EACpB;gBACEpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,MAAM;gBAC1C;;;;;QAKhB,IAAIvE,kBAAkB,EAAE;UACpB,SAAAyJ,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAA1D,MAAA,CAAKhB,IAAI,GAAAyE,GAAA,GAAAC,KAAA,CAAAvZ,MAAA,EAAAsZ,GAAA,IAAG;YAA9B,IAAM7O,OAAK,GAAA8O,KAAA,CAAAD,GAAA;YACZ,IAAMzC,MAAI,GAAGpC,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;YACjC,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,MAAI,GAAG1U,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIoQ,UAAU,CAAC1D,OAAK,CAAC,EAAE;cAC5DpE,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,YAAY;cAChD;;;;;MAMhB,IAAInC,YAAY,EAAE;QACd,IAAOsF,KAAK,GAAWtF,YAAY;UAArBuF,KAAK,GAAIvF,YAAY;QACnC,IAAIjR,IAAI,CAAC8V,GAAG,CAACzW,CAAC,GAAGkX,KAAK,CAAC,GAAG9Z,KAAK,CAACC,QAAQ,IAAIsD,IAAI,CAAC8V,GAAG,CAAC3U,CAAC,GAAGqV,KAAK,CAAC,GAAG/Z,KAAK,CAACC,QAAQ,EAAE;UAC9E2I,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,WAAW;UAC/C;;;;IAKZ,IAAInE,YAAY,EAAE;MACd,IAAIL,iBAAiB,EAAE;QACnB,IAAQ6G,IAAI,GAA8BxG,YAAY,CAA9CwG,IAAI;UAAE1R,MAAM,GAAsBkL,YAAY,CAAxClL,MAAM;UAAE2R,MAAM,GAAczG,YAAY,CAAhCyG,MAAM;UAAEf,OAAO,GAAK1F,YAAY,CAAxB0F,OAAO;QACrC,IAAA6D,oBAAA,GAAuBV,mBAAmB,CAACpC,MAAM,CAAC;UAA3C+C,YAAY,GAAAD,oBAAA;QACnB,IAAME,QAAQ,GAAG1Y,IAAI,CAAC2Y,KAAK,CACvB3Y,IAAI,CAACT,GAAG,CAACkW,IAAI,GAAGpW,CAAC,GAAG0E,MAAM,CAAC,CAAC,CAAC,GAAG0U,YAAY,EAAEhc,KAAK,CAACI,YAAY,GAAG8X,OAAO,CAAC3V,MAAM,CAAC,CACrF;QACDuP,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAGoG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACpC/F,iBAAiB,CACb+F,OAAO,EACPA,OAAO,CAAC1V,GAAG,CAAC,UAACC,CAAC;UAAA,OAAKc,IAAI,CAAC2Y,KAAK,CAACD,QAAQ,GAAG/D,OAAO,CAAC3V,MAAM,CAAC;UAAC,CAC5D;;MAEL;;IAGJ,IAAImQ,SAAS,EAAE;MACX,IAAIN,kBAAkB,EAAE;QACpB,IAAQ4G,MAAI,GAA8BtG,SAAS,CAA3CsG,IAAI;UAAE1R,OAAM,GAAsBoL,SAAS,CAArCpL,MAAM;UAAE2R,OAAM,GAAcvG,SAAS,CAA7BuG,MAAM;UAAEf,SAAO,GAAKxF,SAAS,CAArBwF,OAAO;QACrC,IAAAiE,qBAAA,GAAyBd,mBAAmB,CAACpC,OAAM,CAAC;UAA3C+C,aAAY,GAAAG,qBAAA;QACrB,IAAMC,SAAS,GAAG7Y,IAAI,CAAC2Y,KAAK,CACxB3Y,IAAI,CAACT,GAAG,CAACkW,MAAI,GAAGtU,CAAC,GAAG4C,OAAM,CAAC,CAAC,CAAC,GAAG0U,aAAY,EAAEhc,KAAK,CAACK,aAAa,GAAG6X,SAAO,CAAC3V,MAAM,CAAC,CACtF;QACDwP,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAGmG,SAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjC9F,kBAAkB,CACd8F,SAAO,EACPA,SAAO,CAAC1V,GAAG,CAAC,UAACC,CAAC;UAAA,OAAK2Z,SAAS,GAAGlE,SAAO,CAAC3V,MAAM;UAAC,CACjD;;MAEL;;IAGJ,IAAIoR,iBAAiB,EAAE;MACnB,IAAOrM,QAAM,GAAIxC,SAAS;MAC1B,IAAMyC,IAAI,GAAGjE,KAAK,CAAC8M,UAAU,EAAE6G,WAAW,CAAC9B,EAAE,CAAC,CAAC;MAE/C,IAAOkH,OAAO,GAAa/U,QAAM;QAAjBgV,OAAO,GAAIhV,QAAM;MACjC,IAAOiV,KAAK,GAAWhV,IAAI;QAAbiV,KAAK,GAAIjV,IAAI;MAE3B,IAAIuM,oBAAoB,EAAE;QACtBlC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CACb,CACI,CAAC,CAAC,CAAC,EAAE0K,OAAO,CAAC,EACb,CAAC,CAAC,CAAC,EAAE/Y,IAAI,CAACT,GAAG,CAAC,CAAC,EAAE0Z,KAAK,CAAC,CAAC,CAC3B,EACD,KAAK,CACR;OACJ,MAAM,IAAIvI,uBAAuB,EAAE;QAChCrC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CACb,CACI,CAACyK,OAAO,EAAE,CAAC,CAAC,CAAC,EACb,CAAC9Y,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEyZ,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAC3B,EACD,KAAK,CACR;OACJ,MAAM;QACH3K,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACtO,KAAK,CAACgE,QAAM,EAAE/I,MAAM,CAAC,EAAE+E,KAAK,CAACiE,IAAI,EAAEhJ,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;;;IAIhF,IAAIiV,YAAY,EAAE;MACd5K,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,WAAW;MAE/C,IAAA8F,YAAA,GAAuBxF,WAAW,CAAC9B,EAAE,CAAC;QAA/BtF,KAAK,GAAA4M,YAAA;QAAE3M,KAAK,GAAA2M,YAAA;MACnB,IAAAC,oBAAA,GAAmC1X,kBAAkB,CAACF,SAAS,CAAC;QAAA6X,qBAAA,GAAAD,oBAAA;QAA1D9E,KAAI,GAAA+E,qBAAA;QAAE9E,KAAI,GAAA8E,qBAAA;QAAAC,sBAAA,GAAAF,oBAAA;QAAI3M,KAAI,GAAA6M,sBAAA;QAAE5M,KAAI,GAAA4M,sBAAA;MAG9B,IAAIC,SAAS,GAAGtZ,IAAI,CAACV,GAAG,CAACgN,KAAK,GAAG+H,KAAI,EAAE7H,KAAI,GAAGF,KAAK,EAAE,CAAC,CAAC;MACvD,IAAIiN,SAAS,GAAGvZ,IAAI,CAACV,GAAG,CAACiN,KAAK,GAAG+H,KAAI,EAAE7H,KAAI,GAAGF,KAAK,EAAE,CAAC,CAAC;MAEvD,IAAI/J,mBAAmB,CAACjB,SAAS,CAAC,IAAI+X,SAAS,GAAGC,SAAS,EAAE;QACzD,IAAIhN,KAAK,GAAG+H,KAAI,EAAE;UACdA,KAAI,GAAG/H,KAAK;SACf,MAAM,IAAIA,KAAK,GAAGE,KAAI,EAAE;UACrBA,KAAI,GAAGF,KAAK;;OAEnB,MAAM;QACH,IAAID,KAAK,GAAG+H,KAAI,EAAE;UACdA,KAAI,GAAG/H,KAAK;SACf,MAAM,IAAIA,KAAK,GAAGE,KAAI,EAAE;UACrBA,KAAI,GAAGF,KAAK;;;MAIpB2B,gBAAgB,aAAhBA,gBAAgB,uBAAhBA,gBAAgB,CAAG,CACf,CAACoG,KAAI,EAAEC,KAAI,CAAC,EACZ,CAAC9H,KAAI,EAAEC,KAAI,CAAC,CACf,CAAC;;IAGN,IAAI4C,UAAU,IAAIG,OAAO,EAAE;MACvB,IAAOnQ,EAAC,GAAOuS,EAAE;QAAPzQ,EAAC,GAAIyQ,EAAE;MACjB,IAAIvC,UAAU,EAAE;QACZ,IAAM/C,MAAK,GAAGwK,aAAa,CAACzX,EAAC,EAAE,GAAG,CAAC;QACnC,IAAM6X,eAAe,GAAG5K,MAAK,IAAI+H,IAAI,IAAI/H,MAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAM2K,WAAW,GAAG1M,qBAAqB,CAAC6B,MAAK,EAAEmB,eAAe,CAAC;QAEjE,IAAQ1J,QAAM,GAAasL,UAAU,CAA7BtL,MAAM;UAAE2R,QAAM,GAAKrG,UAAU,CAArBqG,MAAM;QACtB,IAAM8D,KAAK,GAAGna,EAAC,GAAG0E,QAAM,CAAC,CAAC,CAAC;QAC3B,IAAA0V,qBAAA,GAAuB3B,mBAAmB,CAACpC,QAAM,CAAC;UAA3C+C,cAAY,GAAAgB,qBAAA;QAEnBtL,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAACqL,KAAK,GAAGf,cAAY,EAAE,CAAC,CAAC,CAAC;QAC/CrK,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CACd8I,eAAe,IAAIC,WAAW,GACxB,IAAI,GACJ,CACI,CAAC7K,MAAK,EAAE,CAAC,CAAC,CAAC,EACX,CAACA,MAAK,EAAE,CAAC,CAAC,CAAC,CACd,CACV;;MAEL,IAAIkD,OAAO,EAAE;QACT,IAAMjD,MAAK,GAAGwK,UAAU,CAAC5V,EAAC,EAAE,GAAG,CAAC;QAChC,IAAM+V,iBAAe,GAAG3K,MAAK,IAAI+H,IAAI,IAAI/H,MAAK,IAAIE,IAAI,GAAG,CAAC;QAC1D,IAAM0K,aAAW,GAAG1M,qBAAqB,CAAC8B,MAAK,EAAEmB,YAAY,CAAC;QAE9D,IAAQ3J,QAAM,GAAayL,OAAO,CAA1BzL,MAAM;UAAE2R,QAAM,GAAKlG,OAAO,CAAlBkG,MAAM;QACtB,IAAM8D,MAAK,GAAGrY,EAAC,GAAG4C,QAAM,CAAC,CAAC,CAAC;QAC3B,IAAA2V,qBAAA,GAAyB5B,mBAAmB,CAACpC,QAAM,CAAC;UAA3C+C,cAAY,GAAAiB,qBAAA;QAErBvL,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAG,CAAC,CAAC,EAAEqL,MAAK,GAAGf,cAAY,CAAC,CAAC;QAC/CrK,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CACd8I,iBAAe,IAAIC,aAAW,GACxB,IAAI,GACJ,CACI,CAAC,CAAC,CAAC,EAAE5K,MAAK,CAAC,EACX,CAAC,CAAC,CAAC,EAAEA,MAAK,CAAC,CACd,CACV;;;GAGZ,EACD,CACI+E,gBAAgB,EAChBW,mBAAmB,EACnBS,WAAW,EACX9D,iBAAiB,EACjBC,kBAAkB,EAClBX,mBAAmB,EACnBC,kBAAkB,EAClBC,kBAAkB,EAClBC,iBAAiB,EACjBJ,gBAAgB,EAChBO,eAAe,EACfD,kBAAkB,EAClBd,eAAe,EACfC,YAAY,CACf,CACJ;EAED,IAAMiM,OAAO,GAAGlT,iBAAW,CACvB,UAAC2C,CAAa;IACV,IAAMwI,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,CAAC;IAC9B,IAAI,CAACwI,EAAE,EAAE;IAET,IAAMgI,QAAQ,GAAGlH,WAAW,CAACd,EAAE,CAAC;IAGhC,IAAIjC,WAAW,IAAIiK,QAAQ,EAAE;MACzB,IAAIvZ,eAAe,CAACsP,WAAW,CAACjI,GAAG,EAAEkS,QAAQ,CAAClS,GAAG,CAAC,EAAE;QAAA,IAAAmS,cAAA,EAAAC,qBAAA;QAChDF,QAAQ,aAARA,QAAQ,wBAAAC,cAAA,GAARD,QAAQ,CAAEpS,IAAI,cAAAqS,cAAA,wBAAAC,qBAAA,GAAdD,cAAA,CAAgBF,OAAO,cAAAG,qBAAA,uBAAvBA,qBAAA,CAAA5F,IAAA,CAAA2F,cAAA,EAA0BzQ,CAAC,CAAC;;;IAIpCwG,cAAc,CAAC,IAAI,CAAC;GACvB,EACD,CAAC0B,gBAAgB,EAAEoB,WAAW,EAAE/C,WAAW,CAAC,CAC/C;EAED,IAAMoK,aAAa,GAAGtT,iBAAW,CAC7B,UAAC2C,CAAa;IACV,IAAA4Q,aAAA,GAKI7I,GAAG,CAJHE,OAAO;MACH9P,SAAS,GAAAyY,aAAA,CAATzY,SAAS;MAAA0Y,qBAAA,GAAAD,aAAA,CACT1M,UAAU;MAAIoG,WAAW,GAAAuG,qBAAA,CAAXvG,WAAW;MAAEF,aAAa,GAAAyG,qBAAA,CAAbzG,aAAa;MAAEC,UAAU,GAAAwG,qBAAA,CAAVxG,UAAU;MAAEpB,UAAU,GAAA4H,qBAAA,CAAV5H,UAAU;MAAEE,UAAU,GAAA0H,qBAAA,CAAV1H,UAAU;IAIpFnJ,CAAC,CAACyO,cAAc,EAAE;IAClB,IAAIzO,CAAC,CAACqN,QAAQ,EAAE;IAEhB,IAAM7E,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,CAAC;IAC9B,IAAI,CAACwI,EAAE,EAAE;IAET,IAAOvS,CAAC,GAAOuS,EAAE;MAAPzQ,CAAC,GAAIyQ,EAAE;IAGjB,IAAMU,OAAO,GAAGC,UAAU,EAAE;IAC5B,IAAQqB,OAAO,GAAKrG,YAAY,CAAxBqG,OAAO;IACf,IAAIhF,iBAAiB,IAAIzN,CAAC,GAAGmR,OAAO,EAAE;MAClC,IAAM4H,SAAS,GAAG,EAAE;MAEpB,SAAAC,UAAA,GAAAtH,+BAAA,CAAoBe,OAAO,GAAAwG,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAApH,IAAA,GAAE;QAAA,IAAlBtJ,KAAK,GAAA2Q,MAAA,CAAAnH,KAAA;QACZ,IAAM4C,IAAI,GAAGrC,aAAa,CAAC/J,KAAK,EAAE,CAAC,CAAC;QAEpC,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,IAAI,GAAGxW,CAAC,CAAC,GAAG5C,KAAK,CAACM,UAAU,IAAImQ,aAAa,CAACzD,KAAK,CAAC,EAAE;UAC/D,IAAA4Q,oBAAA,GAAyB5Y,kBAAkB,CAACF,SAAS,CAAC;YAAA+Y,qBAAA,GAAAD,oBAAA;YAA9ChG,IAAI,GAAAiG,qBAAA;YAAAC,sBAAA,GAAAF,oBAAA;YAAI7N,IAAI,GAAA+N,sBAAA;UAGpB,IAAM5F,OAAO,GACT1R,iBAAiB,CAAC1B,SAAS,CAAC,IAAIkI,KAAK,IAAI4K,IAAI,IAAI5K,KAAK,IAAI+C,IAAI,GACxDlK,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAACpC,CAAC;YAAA,OAAKA,CAAC;YAAC,GACxC,CAACsK,KAAK,CAAC;UAEjByQ,SAAS,CAAC/X,IAAI,CAAAC,KAAA,CAAd8X,SAAS,EAASvF,OAAO,CAAC;;;MAIlC,SAAA6F,GAAA,MAAAC,UAAA,GAAqBP,SAAS,EAAAM,GAAA,GAAAC,UAAA,CAAAzb,MAAA,EAAAwb,GAAA,IAAE;QAA3B,IAAME,MAAM,GAAAD,UAAA,CAAAD,GAAA;QACbjM,kBAAkB,aAAlBA,kBAAkB,uBAAlBA,kBAAkB,CAAGmM,MAAM,GAAG,CAAC,CAAC;;MAEpC9L,iBAAiB,CACbsL,SAAS,EACTA,SAAS,CAACjb,GAAG,CAAC,UAACyb,MAAM;QAAA,OAAK7M,gBAAgB,CAAC6M,MAAM,CAAC;QAAC,CACtD;MACD,IAAIR,SAAS,CAAClb,MAAM,EAAE;;IAI1B,IAAMoT,OAAO,GAAGC,UAAU,EAAE;IAC5B,IAAQwB,IAAI,GAAKtG,YAAY,CAArBsG,IAAI;IACZ,IAAIhF,kBAAkB,IAAIxP,CAAC,GAAG+S,OAAO,EAAE;MACnC,IAAM8H,WAAS,GAAG,EAAE;MAEpB,SAAAS,GAAA,MAAAC,KAAA,IAAqB,CAAC,CAAC,EAAA/F,MAAA,CAAKhB,IAAI,GAAA8G,GAAA,GAAAC,KAAA,CAAA5b,MAAA,EAAA2b,GAAA,IAAG;QAA9B,IAAMlR,OAAK,GAAAmR,KAAA,CAAAD,GAAA;QACZ,IAAM9E,MAAI,GAAGpM,OAAK,GAAG,CAAC,GAAGgK,UAAU,CAAC,CAAC,CAAC,GAAGA,UAAU,CAAChK,OAAK,EAAE,CAAC,CAAC;QAE7D,IAAIzJ,IAAI,CAAC8V,GAAG,CAACD,MAAI,GAAG1U,CAAC,CAAC,GAAG1E,KAAK,CAACM,UAAU,IAAIoQ,UAAU,CAAC1D,OAAK,CAAC,EAAE;UAC5D,IAAAoR,oBAAA,GAA6BpZ,kBAAkB,CAACF,SAAS,CAAC;YAAAuZ,qBAAA,GAAAD,oBAAA;YAAhDvG,IAAI,GAAAwG,qBAAA;YAAAC,sBAAA,GAAAF,oBAAA;YAAMpO,IAAI,GAAAsO,sBAAA;UAGxB,IAAMpG,SAAO,GACT7R,cAAc,CAACvB,SAAS,CAAC,IAAIkI,OAAK,IAAI6K,IAAI,IAAI7K,OAAK,IAAIgD,IAAI,GACrDlK,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACpC,CAAC;YAAA,OAAKA,CAAC;YAAC,GACrC,CAACsK,OAAK,CAAC;UAEjByQ,WAAS,CAAC/X,IAAI,CAAAC,KAAA,CAAd8X,WAAS,EAASvF,SAAO,CAAC;;;MAIlC,SAAAqG,GAAA,MAAAC,WAAA,GAAkBf,WAAS,EAAAc,GAAA,GAAAC,WAAA,CAAAjc,MAAA,EAAAgc,GAAA,IAAE;QAAxB,IAAME,GAAG,GAAAD,WAAA,CAAAD,GAAA;QACVxM,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG0M,GAAG,GAAG,CAAC,CAAC;;MAE9BrM,kBAAkB,CACdqL,WAAS,EACTA,WAAS,CAACjb,GAAG,CAAC,UAACic,GAAG;QAAA,OAAKpN,iBAAiB,CAACoN,GAAG,CAAC;QAAC,CACjD;MACD,IAAIhB,WAAS,CAAClb,MAAM,EAAE;;IAG1B,IAAMoV,SAAS,GAAG1B,WAAW,CAACd,EAAE,CAAC;IACjC,IAAIwC,SAAS,EAAE;MACX/O,MAAM,CAAC2B,QAAQ,CAACmM,IAAI,CAAC1L,KAAK,CAAC2L,MAAM,GAAG,SAAS;MAC7C;;IAGJ,IAAM+H,QAAQ,GAAGzH,WAAW,CAAC9B,EAAE,CAAC;IAChC,IAAI7E,QAAQ,EAAEiB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;IAC1BD,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGoN,QAAQ,CAAC;GACrB,EACD,CACI7J,gBAAgB,EAChBoB,WAAW,EACX1E,QAAQ,EACRD,MAAM,EACNQ,kBAAkB,EAClBK,iBAAiB,EACjBf,gBAAgB,EAChBN,YAAY,EACZL,aAAa,CAChB,CACJ;EAED,IAAMkO,aAAa,GAAG3U,iBAAW,CAC7B,UAAC2C,CAAa;IACV,IAAAiS,sBAAA,GAIIlK,GAAG,CAHHE,OAAO,CACH/D,UAAU;MAAIoG,WAAW,GAAA2H,sBAAA,CAAX3H,WAAW;MAAErB,UAAU,GAAAgJ,sBAAA,CAAVhJ,UAAU;MAAEE,UAAU,GAAA8I,sBAAA,CAAV9I,UAAU;IAIzD,IAAMX,EAAE,GAAGN,gBAAgB,CAAClI,CAAC,CAAC;IAC9B,IAAI,CAACwI,EAAE,EAAE;IAET,IAAOvS,CAAC,GAAOuS,EAAE;MAAPzQ,CAAC,GAAIyQ,EAAE;IACjB,IAAIvS,CAAC,IAAIgT,UAAU,EAAE,IAAIlR,CAAC,IAAIoR,UAAU,EAAE,EAAE;MACxC;;IAIJ,IAAMrG,IAAI,GAAGwH,WAAW,CAAC9B,EAAE,CAAC;IAC5B,IAAI,CAAClO,sBAAsB,CAACnC,SAAS,EAAE2K,IAAI,CAAC,EAAE;MAC1CmC,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACnC,IAAI,EAAEA,IAAI,CAAC,CAAC;;IAGrCoL,aAAa,CAAClO,CAAQ,CAAC;IAEvB,IAAOkD,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAMoP,KAAK,GAAAC,QAAA,KACJnS,CAAC;MACJkD,KAAK,EAALA,KAAK;MACLC,KAAK,EAALA;MACH;IACDuC,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAGwM,KAAK,CAAC;GACxB,EACD,CAAChK,gBAAgB,EAAEjD,iBAAiB,EAAEiJ,aAAa,EAAExI,YAAY,CAAC,CACrE;EAED0M,qBAAe,CAAC;IACZ,IAAI,CAAC1L,UAAU,EAAE;IAEjB,IAAM2L,IAAI,GAAG,SAAPA,IAAIA;MACN,IAAiBC,OAAO,GAAK9O,UAAU,CAA/ByE,OAAO;MACf,IAAI,CAACqK,OAAO,EAAE;MAEd,IAAOrc,CAAC,GAAOyQ,UAAU;QAAf3O,CAAC,GAAI2O,UAAU;MACzB,IAAM6L,KAAK,GAAG,CAAC;MACfD,OAAO,CAACE,UAAU,IAAIvc,CAAC,GAAGsc,KAAK,GAAG,CAAC;MACnCD,OAAO,CAACG,SAAS,IAAI1a,CAAC,GAAGwa,KAAK;KACjC;IAED,IAAMG,KAAK,GAAGC,WAAW,CAACN,IAAI,EAAE,EAAE,CAAC;IACnCA,IAAI,EAAE;IAEN,OAAO;MACHO,aAAa,CAACF,KAAK,CAAC;KACvB;GACJ,EAAE,CAAClP,UAAU,EAAEkD,UAAU,CAAC,CAAC;EAE5B,IAAMmM,aAAa,GAAG;IAClB/I,cAAc,EAAdA,cAAc;IACdG,aAAa,EAAbA,aAAa;IACbiE,aAAa,EAAbA,aAAa;IACbX,WAAW,EAAXA,WAAW;IACXgD,OAAO,EAAPA,OAAO;IACPI,aAAa,EAAbA,aAAa;IACbqB,aAAa,EAAbA;GACH;EAED,OAAO;IAAEnK,YAAY,EAAZA,YAAY;IAAEgL,aAAa,EAAbA;GAAe;AAC1C,CAAC;AAED,IAAMhF,kBAAkB,GAAG,SAArBA,kBAAkBA,CACpBva,QAAmB,EACnB6E,SAAoB,EACpByL,UAAwD,EACxDzB,QAAsC,EACtC0B,YAAkD;EAElD,IAAAiP,oBAAA,GAAiCza,kBAAkB,CAAC/E,QAAQ,CAAC;IAAAyf,qBAAA,GAAAD,oBAAA;IAArDE,GAAG,GAAAD,qBAAA;IAAEE,GAAG,GAAAF,qBAAA;IAAAG,sBAAA,GAAAJ,oBAAA;IAAIK,GAAG,GAAAD,sBAAA;IAAEE,GAAG,GAAAF,sBAAA;EAC5B,IAAAG,oBAAA,GAAiChb,kBAAkB,CAACF,SAAS,CAAC;IAAAmb,qBAAA,GAAAD,oBAAA;IAAtDE,GAAG,GAAAD,qBAAA;IAAEE,GAAG,GAAAF,qBAAA;IAAAG,sBAAA,GAAAJ,oBAAA;IAAIK,GAAG,GAAAD,sBAAA;IAAEE,GAAG,GAAAF,sBAAA;EAE5B,IAAIG,GAAG,GAAGZ,GAAG;EACb,IAAIa,GAAG,GAAGZ,GAAG;EACb,IAAIa,GAAG,GAAGX,GAAG;EACb,IAAIY,GAAG,GAAGX,GAAG;EAEb,IAAMxF,OAAO,GAAa,EAAE;EAI5B,IAAIkG,GAAG,GAAGF,GAAG,KAAKF,GAAG,GAAGH,GAAG,EAAE;IAEzB,IAAIM,GAAG,KAAKL,GAAG,EAAE;MACbK,GAAG,GAAGF,GAAG,GAAG,CAAC;KAChB,MAAM;MACHI,GAAG,GAAGP,GAAG,GAAG,CAAC;;IAEjB,IAAII,GAAG,KAAK,CAAC,CAAC,IAAIE,GAAG,KAAK,CAAC,CAAC,EAAE;MAC1B,IAAAE,qBAAA,GAAe9R,0BAA0B,CAACC,QAAQ,CAAC;QAA5CiB,IAAI,GAAA4Q,qBAAA;MACXJ,GAAG,GAAG,CAAC;MACPE,GAAG,GAAG1Q,IAAI;;IAEd,IAAI6Q,IAAI,GAAGT,GAAG;IACd,KAAK,IAAIzb,CAAC,GAAG8b,GAAG,EAAE9b,CAAC,IAAIgc,GAAG,EAAEhc,CAAC,EAAE,EAAE;MAC7B,KAAK,IAAI9B,CAAC,GAAG2d,GAAG,EAAE3d,CAAC,IAAI6d,GAAG,EAAE7d,CAAC,EAAE,EAAE;QAC7B,IAAM4T,KAAK,GAAGjG,UAAU,CAAC3N,CAAC,EAAEge,IAAI,CAAC;QACjC,IAAI,CAACpQ,YAAY,CAAC5N,CAAC,EAAE8B,CAAC,CAAC,EAAE;UACrB6V,OAAO,CAAC7U,IAAI,CAAC;YAAE9C,CAAC,EAAEA,CAAC;YAAE8B,CAAC,EAAEA,CAAC;YAAE8R,KAAK,EAAEA,KAAK;YAAEqK,MAAM,EAAE;cAAEje,CAAC,EAAEA,CAAC;cAAE8B,CAAC,EAAEkc;;WAAQ,CAAC;;;MAG7EA,IAAI,GAAGA,IAAI,GAAG,CAAC;MACf,IAAIA,IAAI,GAAGN,GAAG,EAAE;QACZM,IAAI,GAAGT,GAAG;;;GAGrB,MAAM;IAEH,IAAII,GAAG,KAAKL,GAAG,EAAE;MACbK,GAAG,GAAGF,GAAG,GAAG,CAAC;KAChB,MAAM;MACHI,GAAG,GAAGP,GAAG,GAAG,CAAC;;IAEjB,IAAIM,GAAG,KAAK,CAAC,CAAC,IAAIE,GAAG,KAAK,CAAC,CAAC,EAAE;MAC1B,IAAAI,sBAAA,GAAiBjS,0BAA0B,CAACC,QAAQ,CAAC;QAA5CkB,IAAI,GAAA8Q,sBAAA;MACbN,GAAG,GAAG,CAAC;MACPE,GAAG,GAAG1Q,IAAI;;IAEd,IAAI+Q,IAAI,GAAGb,GAAG;IACd,KAAK,IAAItd,GAAC,GAAG2d,GAAG,EAAE3d,GAAC,IAAI6d,GAAG,EAAE7d,GAAC,EAAE,EAAE;MAC7B,KAAK,IAAI8B,GAAC,GAAG8b,GAAG,EAAE9b,GAAC,IAAIgc,GAAG,EAAEhc,GAAC,EAAE,EAAE;QAC7B,IAAM8R,MAAK,GAAGjG,UAAU,CAACwQ,IAAI,EAAErc,GAAC,CAAC;QACjC,IAAI,CAAC8L,YAAY,CAAC5N,GAAC,EAAE8B,GAAC,CAAC,EAAE;UACrB6V,OAAO,CAAC7U,IAAI,CAAC;YAAE9C,CAAC,EAAEA,GAAC;YAAE8B,CAAC,EAAEA,GAAC;YAAE8R,KAAK,EAAEA,MAAK;YAAEqK,MAAM,EAAE;cAAEje,CAAC,EAAEme,IAAI;cAAErc,CAAC,EAAEA;;WAAK,CAAC;;;MAG7Eqc,IAAI,GAAGA,IAAI,GAAG,CAAC;MACf,IAAIA,IAAI,GAAGV,GAAG,EAAE;QACZU,IAAI,GAAGb,GAAG;;;;EAKtB,OAAO3F,OAAO;AAClB,CAAC;;ACpnCM,IAAMyG,WAAW,GAAG,SAAdA,WAAWA,CACpBC,kBAA2B,EAC3BC,UAAqC,EACrC1Q,YAAkD,EAClDjB,WAAwD,EACxDmP,QAAY,EACZpO,QAAiB,EACjB6Q,OAAgB,EAChBC,YAAuB,EACvBtc,SAAoB,EAEpBwM,MAAyD,EACzDC,QAAqB,EACrB8P,QAAqB,EACrBzP,iBAAwF,EACxFC,aAAwC,EACxCyP,eAAwC,EACxCtP,QAAsC;EAEtC,IAAMuP,cAAc,GAAG,SAAjBA,cAAcA,CAAI5U,CAAgB;IACpC,IAAIA,CAAC,CAACQ,GAAG,KAAK,QAAQ,EAAE;MACpBkU,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZ;;IAGJ,IAAM3d,SAAS,GACXiJ,CAAC,CAACQ,GAAG,KAAK,OAAO,GAAG,MAAM,GAAGR,CAAC,CAACQ,GAAG,KAAK,KAAK,GAAG,OAAO,GAAG8T,kBAAkB,GAAGrf,UAAU,CAAC+K,CAAC,CAACQ,GAAG,CAAC,GAAG,IAAI;IAE1G,IAAIzJ,SAAS,EAAE;MACXiJ,CAAC,CAACyO,cAAc,EAAE;MAClB,IAAM5L,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;MACxC,IAAM6D,IAAI,GAAGjE,KAAK,CAACL,KAAK,CAACyb,QAAQ,EAAElP,IAAI,CAAC,EAAEjR,MAAM,CAAC;MACjDgT,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZK,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACrK,IAAI,EAAEA,IAAI,CAAC,CAAC;;GAExC;EAED,IAAMia,aAAa,GAAG,SAAhBA,aAAaA,CAAI7U,CAAgB;IACnC,IAAI2D,QAAQ,IAAI2Q,kBAAkB,IAAItU,CAAC,CAACQ,GAAG,IAAIvL,UAAU,EAAE;MACvD2P,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,EAAI;MACZ;;IAGJ,IAAI,CAAC5E,CAAC,CAAC8U,OAAO,IAAI9U,CAAC,CAAC+U,OAAO,KAAKC,MAAM,CAACC,YAAY,CAACjV,CAAC,CAACkV,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChF;;IAIJ,IAAI,CAACnV,CAAC,CAAC8U,OAAO,IAAI9U,CAAC,CAAC+U,OAAO,KAAKC,MAAM,CAACC,YAAY,CAACjV,CAAC,CAACkV,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChFR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG,KAAK,CAAC;MACxB;;IAGJ,IAAI,CAAC3U,CAAC,CAAC8U,OAAO,IAAI9U,CAAC,CAAC+U,OAAO,KAAKC,MAAM,CAACC,YAAY,CAACjV,CAAC,CAACkV,KAAK,CAAC,CAACC,WAAW,EAAE,KAAK,GAAG,EAAE;MAChFR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAG,IAAI,CAAC;MACvB;;IAGJ,IAAI3U,CAAC,CAACQ,GAAG,KAAK,WAAW,IAAIR,CAAC,CAACQ,GAAG,KAAK,QAAQ,EAAE;MAC7C,IAAApI,mBAAA,GAA2BC,kBAAkB,CAACF,SAAS,CAAC;QAAAG,oBAAA,GAAAF,mBAAA;QAAlDgd,EAAE,GAAA9c,oBAAA;QAAE+c,EAAE,GAAA/c,oBAAA;QAAAC,qBAAA,GAAAH,mBAAA;QAAIkd,EAAE,GAAA/c,qBAAA;QAAEgd,EAAE,GAAAhd,qBAAA;MACtB,IAAImB,cAAc,CAACvB,SAAS,CAAC,EAAE;QAC3Bid,EAAE,GAAG,CAAC;QACNE,EAAE,GAAGljB,oBAAoB;;MAE7B,IAAIyH,iBAAiB,CAAC1B,SAAS,CAAC,EAAE;QAC9Bkd,EAAE,GAAG,CAAC;QACNE,EAAE,GAAGnjB,oBAAoB;;MAG7B,IAAMwb,OAAO,GAAa,EAAE;MAC5B,KAAK,IAAI7V,CAAC,GAAGsd,EAAE,EAAEtd,CAAC,IAAIwd,EAAE,EAAExd,CAAC,EAAE,EAAE;QAC3B,KAAK,IAAI9B,CAAC,GAAGmf,EAAE,EAAEnf,CAAC,IAAIqf,EAAE,EAAErf,CAAC,EAAE,EAAE;UAC3B,IAAI,CAAC4N,YAAY,CAAC5N,CAAC,EAAE8B,CAAC,CAAC,EAAE;YACrB6V,OAAO,CAAC7U,IAAI,CAAC;cAAE9C,CAAC,EAAEA,CAAC;cAAE8B,CAAC,EAAEA,CAAC;cAAE8R,KAAK,EAAE;aAAM,CAAC;;;;MAKrDxE,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGuI,OAAO,CAAC;MACnB;;IAIJ,IAAIzT,gBAAgB,CAAChC,SAAS,CAAC,EAAE;MAC7B;;IAGJ,IACK6H,CAAC,CAACwV,OAAO,IAAI,EAAE,IAAIxV,CAAC,CAACwV,OAAO,IAAI,EAAE,IAClCxV,CAAC,CAACwV,OAAO,IAAI,EAAE,IAAIxV,CAAC,CAACwV,OAAO,IAAI,GAAI,IACpCxV,CAAC,CAACwV,OAAO,IAAI,EAAE,IAAIxV,CAAC,CAACwV,OAAO,IAAI,EAAG,IACpCxV,CAAC,CAACQ,GAAG,KAAK,OAAO,IACjBR,CAAC,CAACQ,GAAG,KAAK,GAAG,IACbR,CAAC,CAACQ,GAAG,KAAK,GAAG,IACbR,CAAC,CAACQ,GAAG,KAAK,GAAG,EACf;MACE,IAAOsC,IAAI,GAAI3K,SAAS;MACxB,IAAO+K,KAAK,GAAWJ,IAAI;QAAbK,KAAK,GAAIL,IAAI;MAC3B,IAAIe,YAAY,CAACX,KAAK,EAAEC,KAAK,CAAC,EAAE;QAC5B;;MAGJ,IAAInD,CAAC,CAACQ,GAAG,KAAK,OAAO,EAAER,CAAC,CAACyO,cAAc,EAAE;MACzC9J,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG7B,IAAI,EAAE9C,CAAC,CAACQ,GAAG,KAAK,OAAO,CAAC;MACjC;;IAGJR,CAAC,CAACyO,cAAc,EAAE;IAElB,IAAIzO,CAAC,CAACQ,GAAG,IAAIvL,UAAU,EAAE;MACrB,IAAK0F,MAAM,GAAU8Z,YAAY;QAApB7Z,IAAI,GAAI6Z,YAAY;MAEjC,IAAM1d,SAAS,GAAG9B,UAAU,CAAC+K,CAAC,CAACQ,GAAG,CAAC;MACnC,IAAMqC,IAAI,GAAG/L,gBAAgB,CAACC,SAAS,CAAC;MACxC,IAAMqZ,KAAK,GAAGpQ,CAAC,CAACqN,QAAQ;MAExB,IAAIrN,CAAC,CAAC8U,OAAO,IAAI9U,CAAC,CAAC+U,OAAO,EAAE;QACxBna,IAAI,GAAG+H,iBAAiB,CAACC,WAAW,EAAEhI,IAAI,EAAE7D,SAAS,CAAC;OACzD,MAAM;QAEH,IAAMwJ,KAAK,GAAO6P,KAAK,GACjB1W,cAAc,CAACvB,SAAS,CAAC,GACrB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GACP0B,iBAAiB,CAAC1B,SAAS,CAAC,GAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACPrG,OAAO,GACbF,MAAM;QACZgJ,IAAI,GAAGjE,KAAK,CAACL,KAAK,CAACsE,IAAI,EAAEiI,IAAI,CAAC,EAAEtC,KAAK,CAAC;;MAG1C,IAAI,CAAC6P,KAAK,EAAE;QACRzV,MAAM,GAAGC,IAAI;;MAGjBqK,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG,CAACtK,MAAM,EAAEC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;MAC/C;;GAEP;EAED,IAAM6a,WAAW,GAAG,SAAdA,WAAWA;IACbvQ,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,IAAI,CAAC;GACxB;EAED,IAAMwQ,UAAU,GAAG,SAAbA,UAAUA;IACZxQ,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAG,KAAK,CAAC;GACzB;EAGDkN,qBAAe,CAAC;IACZ,IAAiBuD,OAAO,GAAKpB,UAAU,CAA/BtM,OAAO;IACf,IAAI,CAAC0N,OAAO,EAAE;MACV;;IAEJ,IAAIhS,QAAQ,IAAI,CAAC6Q,OAAO,EAAE;MACtB;;IAEJ,IAAI5W,QAAQ,CAACgY,aAAa,KAAKD,OAAO,EAAE;MACpC;;IAGJ,IAAME,aAAa,GAAIjY,QAAgB,CAACgY,aAAa,CAACE,OAAO,CAACX,WAAW,EAAE;IAC3E,IACI,EACKU,aAAa,KAAK,KAAK,IAAKjY,QAAgB,CAACgY,aAAa,CAACG,eAAe,KAAK,MAAM,IACtFF,aAAa,KAAK,OAAO,IACzBA,aAAa,KAAK,UAAU,IAC5BA,aAAa,KAAK,QAAQ,CAC7B,EACH;MACEF,OAAO,CAACK,KAAK,CAAC;QAAEC,aAAa,EAAE;OAAM,CAAC;;GAE7C,EAAE,CAACtS,QAAQ,EAAE6Q,OAAO,CAAC,CAAC;EAEvB,OAAO;IAAEI,cAAc,EAAdA,cAAc;IAAEa,WAAW,EAAXA,WAAW;IAAEC,UAAU,EAAVA,UAAU;IAAEb,aAAa,EAAbA;GAAe;AACrE,CAAC;;AC3LM,IAAMqB,SAAS,GAAG,SAAZA,SAASA,CAClB5J,MAAU,EACV6J,SAAa,EACbjS,UAAsB,EACtBkS,cAAqC,EACrCC,iBAA2C;EAE3C,OAAOhZ,iBAAW,CACd,UAAC2C,CAAU;IACP,IAAI,CAACA,CAAC,CAACoI,MAAM,IAAI,EAAEpI,CAAC,CAACoI,MAAM,YAAYC,OAAO,CAAC,EAAE;MAC7C;;IAEJ,IAAQiO,cAAc,GAAqBpS,UAAU,CAA7CoS,cAAc;MAAEC,cAAc,GAAKrS,UAAU,CAA7BqS,cAAc;IAGtC,IAAAC,MAAA,GAAyB/f,KAAK,CAAC8f,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAEA,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MAAnFE,MAAM,GAAAD,MAAA;MAAEE,MAAM,GAAAF,MAAA;IAErB,IAAMhO,EAAE,GAAO,CAACxI,CAAC,CAACoI,MAAM,CAACoK,UAAU,GAAGiE,MAAM,EAAEzW,CAAC,CAACoI,MAAM,CAACqK,SAAS,GAAGiE,MAAM,CAAC;IAE1E,IAAM5T,IAAI,GAAGwT,cAAc,CAAC9N,EAAE,CAAC;IAC/B,IAAI,CAACxR,QAAQ,CAAC8L,IAAI,EAAEwJ,MAAM,CAAC,EAAE;MACzB8J,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGtT,IAAI,CAAC;;IAG1B,IAAO7M,CAAC,GAAOuS,EAAE;MAAPzQ,CAAC,GAAIyQ,EAAE;IACjB,IAAOmO,UAAU,GAAgBR,SAAS;MAAvBS,UAAU,GAAIT,SAAS;IAC1C,IAAMU,KAAK,GAAGF,UAAU,GAAG1gB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1C,IAAM6gB,KAAK,GAAGF,UAAU,GAAG7e,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAC1C,IAAI8e,KAAK,GAAG,CAAC,IAAIC,KAAK,GAAG,CAAC,EAAE;MACxBT,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAG3f,KAAK,CAACyf,SAAS,EAAE,CAACU,KAAK,EAAEC,KAAK,CAAC,CAAC,CAAC;;GAE5D,EACD,CAAC5S,UAAU,EAAEkS,cAAc,EAAEC,iBAAiB,CAAC,CAClD;AACL,CAAC;AAID,AAAO,IAAMU,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAQ,EAAE1K,MAAU,EAAE2K,MAAU,EAAEC,QAAY,EAAEhT,UAAsB;EACjG,IAAKiT,IAAI,GAAU7K,MAAM;IAAd8K,IAAI,GAAI9K,MAAM;EACzB,IAAO+K,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAOM,UAAU,GAAaL,QAAQ;IAAnBM,OAAO,GAAIN,QAAQ;EAEtC,IAAQO,gBAAgB,GAAqDvT,UAAU,CAA/EuT,gBAAgB;IAAEC,gBAAgB,GAAmCxT,UAAU,CAA7DwT,gBAAgB;IAAEC,aAAa,GAAoBzT,UAAU,CAA3CyT,aAAa;IAAEC,aAAa,GAAK1T,UAAU,CAA5B0T,aAAa;EAExE,IAAAC,cAAA,GAGIC,aAAa,CAACd,IAAI,EAAE,CAACG,IAAI,EAAEC,IAAI,CAAC,EAAEH,MAAM,EAAE/S,UAAU,CAAC;IAAA6T,mBAAA,GAAAF,cAAA,CAFrDpL,IAAI;IAAGuL,QAAQ,GAAAD,mBAAA;IAAEE,OAAO,GAAAF,mBAAA;IAAAG,qBAAA,GAAAL,cAAA,CACxBM,QAAQ;IAAGC,OAAO,GAAAF,qBAAA;IAAEG,OAAO,GAAAH,qBAAA;EAI/B,IAAIF,QAAQ,IAAIT,UAAU,EAAE;IACxB,IAAMe,SAAS,GAAGZ,gBAAgB,CAACH,UAAU,CAAC,GAAGG,gBAAgB,CAACP,IAAI,GAAGE,OAAO,CAAC;IACjFF,IAAI,GAAGvgB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEshB,gBAAgB,CAACC,gBAAgB,CAACP,IAAI,GAAGE,OAAO,CAAC,GAAGe,OAAO,GAAGE,SAAS,CAAC,GAAGjB,OAAO,GAAG,CAAC,CAAC;;EAE9G,IAAIY,OAAO,IAAIT,OAAO,EAAE;IACpB,IAAMc,UAAS,GAAGV,aAAa,CAACJ,OAAO,CAAC,GAAGI,aAAa,CAACR,IAAI,GAAGE,OAAO,CAAC;IACxEF,IAAI,GAAGxgB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEwhB,aAAa,CAACC,aAAa,CAACR,IAAI,GAAGE,OAAO,CAAC,GAAGe,OAAO,GAAGC,UAAS,CAAC,GAAGhB,OAAO,GAAG,CAAC,CAAC;;EAGxG,OAAO,CAACH,IAAI,EAAEC,IAAI,CAAC;AACvB,CAAC;AAGD,AAAO,IAAMU,aAAa,GAAG,SAAhBA,aAAaA,CACtBd,IAAQ,EACR1K,MAAU,EACV2K,MAAU,EACV/S,UAAsB;EAKtB,IAAQqS,cAAc,GAAKrS,UAAU,CAA7BqS,cAAc;EAEtB,IAAOtgB,CAAC,GAAOqW,MAAM;IAAXvU,CAAC,GAAIuU,MAAM;EACrB,IAAO3N,CAAC,GAAOqY,IAAI;IAATpY,CAAC,GAAIoY,IAAI;EACnB,IAAAuB,eAAA,GAA2BhC,cAAc,CAACU,MAAM,CAAC;IAA1CuB,OAAO,GAAAD,eAAA;IAAEE,OAAO,GAAAF,eAAA;EAEvB,IAAMH,OAAO,GAAGzZ,CAAC,GAAG6Z,OAAO;EAC3B,IAAMH,OAAO,GAAGzZ,CAAC,GAAG6Z,OAAO;EAE3B,IAAMT,QAAQ,GAAG/hB,CAAC,GAAGghB,MAAM,CAAC,CAAC,CAAC;EAC9B,IAAMgB,OAAO,GAAGlgB,CAAC,GAAGkf,MAAM,CAAC,CAAC,CAAC;EAE7B,OAAO;IACHxK,IAAI,EAAE,CAACuL,QAAQ,EAAEC,OAAO,CAAC;IACzBE,QAAQ,EAAE,CAACC,OAAO,EAAEC,OAAO;GAC9B;AACL,CAAC;AAED,AAAO,IAAMK,YAAY,GAAG,SAAfA,YAAYA,CACrBpG,OAAuB,EACvBxP,IAAQ,EACRkU,IAAQ,EACRC,MAAU,EACV3K,MAAU,EACV6J,SAAa,EACbjS,UAAsB,EACtBjM,QAA6C;EAE7C,IAAOhC,CAAC,GAAO6M,IAAI;IAAT/K,CAAC,GAAI+K,IAAI;EACnB,IAAOnE,CAAC,GAAOqY,IAAI;IAATpY,CAAC,GAAIoY,IAAI;EACnB,IAAO2B,OAAO,GAAarM,MAAM;IAAjBsM,OAAO,GAAItM,MAAM;EAEjC,IAAQiK,cAAc,GAA6CrS,UAAU,CAArEqS,cAAc;IAAE7O,WAAW,GAAgCxD,UAAU,CAArDwD,WAAW;IAAE0C,aAAa,GAAiBlG,UAAU,CAAxCkG,aAAa;IAAEC,UAAU,GAAKnG,UAAU,CAAzBmG,UAAU;EAE9D,IAAMwO,MAAM,GAAGtC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EACrC,IAAMuC,MAAM,GAAGvC,cAAc,CAACU,MAAM,CAAC;EACrC,IAAOuB,OAAO,GAAaM,MAAM;IAAjBL,OAAO,GAAIK,MAAM;EAEjC,IAAAC,YAAA,GAAoBrR,WAAW,CAAC5E,IAAI,CAAC;IAA9BpL,IAAI,GAAAqhB,YAAA;IAAEphB,GAAG,GAAAohB,YAAA;EAChB,IAAAC,aAAA,GAAwBtR,WAAW,CAAC5E,IAAI,EAAEjR,OAAO,CAAC;IAA3CgG,KAAK,GAAAmhB,aAAA;IAAElhB,MAAM,GAAAkhB,aAAA;EAEpB,IAAK7B,IAAI,GAAU7K,MAAM;IAAd8K,IAAI,GAAI9K,MAAM;EAGzB,IAAI5U,IAAI,IAAI8gB,OAAO,EAAE;IACjBrB,IAAI,GAAGlhB,CAAC,GAAGghB,MAAM,CAAC,CAAC,CAAC;;EAExB,IAAItf,GAAG,IAAI8gB,OAAO,EAAE;IAChBrB,IAAI,GAAGrf,CAAC,GAAGkf,MAAM,CAAC,CAAC,CAAC;;EAIxB,IAAIpf,KAAK,GAAG8G,CAAC,EAAE;IACX,IAAI8N,IAAI,GAAG5U,KAAK,GAAG8G,CAAC,GAAGyL,aAAa,CAAC+M,IAAI,CAAC;IAC1C,OAAO/M,aAAa,CAAC,EAAE+M,IAAI,CAAC,GAAG1K,IAAI,EAAE;;EAEzC,IAAI3U,MAAM,GAAG8G,CAAC,EAAE;IACZ,IAAI6N,KAAI,GAAG3U,MAAM,GAAG8G,CAAC,GAAGyL,UAAU,CAAC+M,IAAI,CAAC;IACxC,OAAO/M,UAAU,CAAC,EAAE+M,IAAI,CAAC,GAAG3K,KAAI,EAAE;;EAItC,IAAMwM,SAAS,GAAO,CAAC9B,IAAI,IAAI,CAAC,GAAGA,IAAI,GAAGwB,OAAO,EAAEvB,IAAI,IAAI,CAAC,GAAGA,IAAI,GAAGwB,OAAO,CAAC;EAE9E,IAAI,CAAC5hB,QAAQ,CAACiiB,SAAS,EAAE3M,MAAM,CAAC,EAAE;IAC9B,IAAM4M,MAAM,GAAGziB,KAAK,CAAC8f,cAAc,CAAC0C,SAAS,CAAC,EAAEJ,MAAM,CAAC;IAEvD5gB,QAAQ,CAACghB,SAAS,EAAEtiB,KAAK,CAACwf,SAAS,EAAE+C,MAAM,CAAC,CAAC;IAE7CC,UAAU,CAAC;MACPC,oBAAoB,CAAC9G,OAAO,EAAE2G,SAAS,EAAE/U,UAAU,CAAC;KACvD,CAAC;;AAEV,CAAC;AAED,AAAO,IAAMkV,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAI9G,OAAuB,EAAE7O,UAAc,EAAES,UAAsB;EAChG,IAAQqS,cAAc,GAAKrS,UAAU,CAA7BqS,cAAc;EAEtB,IAAM2C,MAAM,GAAG3C,cAAc,CAAC9S,UAAU,CAAC;EACzC,IAAA4V,OAAA,GAAyB5iB,KAAK,CAAC8f,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAEA,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAnFE,MAAM,GAAA4C,OAAA;IAAE3C,MAAM,GAAA2C,OAAA;EAErB,IAAOC,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC5G,OAAO,CAACE,UAAU,GAAG8G,OAAO,GAAG7C,MAAM;EACrCnE,OAAO,CAACG,SAAS,GAAG8G,OAAO,GAAG7C,MAAM;AACxC,CAAC;;ACxJM,IAAM8C,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIC,SAAiB,EAAEC,YAAoB,EAAEC,KAAY;EACpF,IAAIA,KAAK,KAAK,MAAM,EAAE,OAAO,CAAC;EAC9B,IAAIA,KAAK,KAAK,OAAO,EAAE,OAAOF,SAAS,GAAGC,YAAY;EAEtD,OAAO9iB,IAAI,CAAC2Y,KAAK,CAAC,CAACkK,SAAS,GAAGC,YAAY,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,AAAO,IAAME,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI5b,OAAiC,EAAEI,IAAqB;EACrF,IAAQN,KAAK,GAAKM,IAAI,CAAdN,KAAK;EACb,IAAIA,KAAK,IAAI,IAAI,EAAE,OAAOA,KAAK;EAE/B,IAAIM,IAAI,CAACG,OAAO,KAAK,QAAQ,EAAE;IAC3B,IAAQsb,IAAI,GAAKzb,IAAI,CAAbyb,IAAI;IACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;MACd,IAAAC,oBAAA,GAA0D9b,OAAO,CAAC+b,WAAW,CAACF,IAAI,CAACG,QAAQ,EAAE,CAAC;QAAtFC,qBAAqB,GAAAH,oBAAA,CAArBG,qBAAqB;QAAEC,sBAAsB,GAAAJ,oBAAA,CAAtBI,sBAAsB;MACrD,IAAMvb,CAAC,GAAGub,sBAAsB,GAAGD,qBAAqB;MACxD,OAAOnc,KAAK,WAALA,KAAK,GAAIa,CAAC;;GAExB,MAAM;IACH,MAAM,IAAIwb,KAAK,CAAC,oDAAoD,CAAC;;EAEzE,OAAO,CAAC;AACZ,CAAC;AAED,AAAO,IAAMC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAC9Bpc,OAAiC,EACjCqc,WAAiC,EACjCC,QAAgB,EAChBC,OAAe,EACfd,SAAiB,EACjBe,UAAkB;EAElB,IAAAC,qBAAA,GAA4EJ,WAAW,CAA/EK,WAAW;IAAXA,WAAW,GAAAD,qBAAA,cAAG,OAAO,GAAAA,qBAAA;IAAAE,qBAAA,GAA+CN,WAAW,CAAxDO,SAAS;IAATA,SAAS,GAAAD,qBAAA,cAAG,QAAQ,GAAAA,qBAAA;IAAAE,oBAAA,GAAyBR,WAAW,CAAlCS,OAAO;IAAPA,OAAO,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;IAAEE,KAAK,GAAKV,WAAW,CAArBU,KAAK;EAGvE,IAAMC,SAAS,GAAGD,KAAK,CAACrP,MAAM,CAAC,UAACtN,IAAI;IAAA,OAAK,CAACA,IAAI,CAAC6c,QAAQ;IAAC;EAGxD,IAAMC,cAAc,GAAGb,WAAW,CAACU,KAAK,CAACllB,GAAG,CAAC,UAACuI,IAAI;IAAA,OAAKwb,gBAAgB,CAAC5b,OAAO,EAAEI,IAAI,CAAC;IAAC;EAGvF,IAAM+c,KAAK,GAAa,EAAE;EAC1B,IAAMC,KAAK,GAAa,EAAE;EAC1B,IAAMC,OAAO,GAAa,EAAE;EAE5B,IAAIplB,CAAC,GAAG,CAAC;EACT+kB,SAAS,CAACM,OAAO,CAAC,UAACld,IAAI,EAAErI,CAAC;IACtB,IAAMwlB,WAAW,GAAGnd,IAAI,CAACG,OAAO,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;IACrD,IAAMid,aAAa,GAAGD,WAAW,KAAKnd,IAAI,CAACG,OAAO,KAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;IACvE,IAAAkd,WAAA,GAMIrd,IAAI,CALJN,KAAK;MAALA,KAAK,GAAA2d,WAAA,cAAGP,cAAc,CAACnlB,CAAC,CAAC,GAAA0lB,WAAA;MAAAC,cAAA,GAKzBtd,IAAI,CAJJud,QAAQ;MAARA,QAAQ,GAAAD,cAAA,cAAGH,WAAW,GAAAG,cAAA;MAAAE,gBAAA,GAItBxd,IAAI,CAHJyd,UAAU;MAAVA,UAAU,GAAAD,gBAAA,cAAGJ,aAAa,GAAAI,gBAAA;MAAAE,gBAAA,GAG1B1d,IAAI,CAFJ9J,UAAU;MAAVA,UAAU,GAAAwnB,gBAAA,cAAG,CAAC,GAAAA,gBAAA;MAAAC,iBAAA,GAEd3d,IAAI,CADJ7J,WAAW;MAAXA,WAAW,GAAAwnB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;IAGnBZ,KAAK,CAACpiB,IAAI,CAAC+E,KAAK,CAAC;IACjBsd,KAAK,CAACriB,IAAI,CAAC4iB,QAAQ,CAAC;IACpBN,OAAO,CAACtiB,IAAI,CAAC8iB,UAAU,CAAC;IAExB5lB,CAAC,IAAI6H,KAAK,GAAGxJ,UAAU,GAAGC,WAAW,GAAGumB,OAAO;GAClD,CAAC;EAGF,IAAIkB,MAAM,GAAGvC,SAAS,GAAGxjB,CAAC,GAAG6kB,OAAO;EAGpC,IAAIkB,MAAM,GAAG,CAAC,IAAIC,OAAO,CAACD,MAAM,EAAEZ,KAAK,EAAED,KAAK,CAAC,EAAEa,MAAM,GAAG,CAAC;EAC3D,IAAIA,MAAM,GAAG,CAAC,IAAIE,UAAS,CAACF,MAAM,EAAEX,OAAO,EAAEF,KAAK,CAAC,EAAEa,MAAM,GAAG,CAAC;EAE/D,IAAAG,oBAAA,GAAsBC,mBAAmB,CAACJ,MAAM,EAAEhB,SAAS,CAACplB,MAAM,EAAE8kB,WAAW,CAAC;IAAzE2B,IAAI,GAAAF,oBAAA;IAAEG,KAAK,GAAAH,oBAAA;EAClB,IAAMI,YAAY,GAAGF,IAAI,GAAGvB,OAAO;EAGnC,IAAM0B,SAAS,GAAGxB,SAAS,CACtBnlB,GAAG,CAAC,UAAA4mB,IAAA;IAAA,IAAG1e,MAAM,GAAA0e,IAAA,CAAN1e,MAAM;MAAA2e,cAAA,GAAAD,IAAA,CAAEroB,SAAS;MAATA,SAAS,GAAAsoB,cAAA,cAAG,CAAC,GAAAA,cAAA;MAAAC,iBAAA,GAAAF,IAAA,CAAEpoB,YAAY;MAAZA,YAAY,GAAAsoB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;IAAA,OAAO,CAAC5e,MAAM,WAANA,MAAM,GAAIyc,UAAU,IAAIpmB,SAAS,GAAGC,YAAY;IAAC,CACvGuoB,MAAM,CAAC,UAACrmB,CAAC,EAAEC,CAAC;IAAA,OAAKI,IAAI,CAACT,GAAG,CAACI,CAAC,EAAEC,CAAC,CAAC;IAAC;EAErC,IAAMqmB,MAAM,GAAGjmB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEqkB,UAAU,GAAGgC,SAAS,CAAC;EAClD,IAAM5D,OAAO,GAAGkE,kBAAkB,CAAClC,SAAS,CAAC,GAAGiC,MAAM;EAGtD,IAAIE,UAAU,GAAGT,KAAK;EACtB,OAAOtB,SAAS,CAACnlB,GAAG,CAAC,UAACuI,IAAI,EAAErI,CAAC;IACzB,IACYinB,WAAW,GAMnB5e,IAAI,CANJL,MAAM;MAAAkf,iBAAA,GAMN7e,IAAI,CALJ9J,UAAU;MAAVA,UAAU,GAAA2oB,iBAAA,cAAG,CAAC,GAAAA,iBAAA;MAAAC,kBAAA,GAKd9e,IAAI,CAJJ7J,WAAW;MAAXA,WAAW,GAAA2oB,kBAAA,cAAG,CAAC,GAAAA,kBAAA;MAAAC,eAAA,GAIf/e,IAAI,CAHJhK,SAAS;MAATA,SAAS,GAAA+oB,eAAA,cAAG,CAAC,GAAAA,eAAA;MAAAC,kBAAA,GAGbhf,IAAI,CAFJ/J,YAAY;MAAZA,YAAY,GAAA+oB,kBAAA,cAAG,CAAC,GAAAA,kBAAA;MAAAC,mBAAA,GAEhBjf,IAAI,CADJkf,aAAa;MAAbA,aAAa,GAAAD,mBAAA,cAAGzC,SAAS,GAAAyC,mBAAA;IAG7B,IAAME,OAAO,GAAGjpB,UAAU,GAAGC,WAAW;IACxC,IAAMipB,OAAO,GAAGppB,SAAS,GAAGC,YAAY;IAExC,IAAM0J,MAAM,GAAGif,WAAW,WAAXA,WAAW,GAAIR,SAAS,GAAGgB,OAAO;IAEjD,IAAMC,UAAU,GAAGjB,SAAS,GAAGze,MAAM,GAAGyf,OAAO;IAC/C,IAAME,WAAW,GAAGZ,kBAAkB,CAACQ,aAAa,CAAC,GAAGG,UAAU;IAElE,IAAMxnB,CAAC,GAAGW,IAAI,CAAC2Y,KAAK,CAAC+K,QAAQ,GAAGhmB,UAAU,GAAGyoB,UAAU,CAAC;IACxD,IAAMhlB,CAAC,GAAGnB,IAAI,CAAC2Y,KAAK,CAACgL,OAAO,GAAGnmB,SAAS,GAAGwkB,OAAO,GAAG8E,WAAW,CAAC;IACjEX,UAAU,IAAIR,YAAY,GAAGgB,OAAO,GAAGpC,KAAK,CAACplB,CAAC,CAAC;IAE/C,IAAM4nB,IAAI,GAAGxC,KAAK,CAACplB,CAAC,CAAC;IACrB,IAAM6nB,IAAI,GAAG7f,MAAM;IACnB,IAAMO,GAAG,GAAc,CACnB,CAACrI,CAAC,EAAE8B,CAAC,CAAC,EACN,CAAC9B,CAAC,GAAG0nB,IAAI,EAAE5lB,CAAC,GAAG6lB,IAAI,CAAC,CACvB;IAED,OAAO;MACHtf,GAAG,EAAHA,GAAG;MACHF,IAAI,EAAJA;KACH;GACJ,CAAC;AACN,CAAC;AAED,AAAO,IAAMyf,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAClCxD,WAAiC,EACjCC,QAAgB,EAChBC,OAAe,EACfd,SAAiB,EACjBe,UAAkB;EAElB,IAAQO,KAAK,GAAKV,WAAW,CAArBU,KAAK;EAGb,IAAM+C,aAAa,GAAG/C,KAAK,CAACrP,MAAM,CAAC,UAACtN,IAAI;IAAA,OAAKA,IAAI,CAAC6c,QAAQ;IAAC;EAE3D,IAAM8C,eAAe,GAAG,SAAlBA,eAAeA,CACjBC,SAAiB,EACjB3R,IAAY,EACZtL,KAAc,EACdC,GAAY,EACZid,aACAC;QADAD;MAAAA,cAAsB,CAAC;;IAAA,IACvBC;MAAAA,YAAoB,CAAC;;IAErB,IAAInd,KAAK,IAAI,IAAI,EAAE,OAAOA,KAAK,GAAGkd,WAAW;IAC7C,IAAIjd,GAAG,IAAI,IAAI,EAAE,OAAOgd,SAAS,GAAGhd,GAAG,GAAGkd,SAAS,GAAG7R,IAAI;IAC1D,OAAO,CAAC;GACX;EAED,IAAM8R,WAAW,GAAG,SAAdA,WAAWA,CACbH,SAAiB,EACjBI,IAAa,EACbrd,KAAc,EACdC,GAAY,EACZid,aACAC;QADAD;MAAAA,cAAsB,CAAC;;IAAA,IACvBC;MAAAA,YAAoB,CAAC;;IAErB,IAAIE,IAAI,IAAI,IAAI,EAAE,OAAOA,IAAI;IAC7B,IAAIrd,KAAK,IAAI,IAAI,IAAIC,GAAG,IAAI,IAAI,EAAE,OAAOgd,SAAS,GAAGjd,KAAK,GAAGC,GAAG,GAAGid,WAAW,GAAGC,SAAS;IAC1F,OAAO,CAAC;GACX;EAGD,OAAOJ,aAAa,CAACjoB,GAAG,CAAC,UAACuI,IAAI;IAC1B,IAAQ1G,IAAI,GAA0F0G,IAAI,CAAlG1G,IAAI;MAAEC,GAAG,GAAqFyG,IAAI,CAA5FzG,GAAG;MAAEE,KAAK,GAA8EuG,IAAI,CAAvFvG,KAAK;MAAEC,MAAM,GAAsEsG,IAAI,CAAhFtG,MAAM;MAAEgG,KAAK,GAA+DM,IAAI,CAAxEN,KAAK;MAAEC,MAAM,GAAuDK,IAAI,CAAjEL,MAAM;MAAEzJ,UAAU,GAA2C8J,IAAI,CAAzD9J,UAAU;MAAEF,SAAS,GAAgCgK,IAAI,CAA7ChK,SAAS;MAAEG,WAAW,GAAmB6J,IAAI,CAAlC7J,WAAW;MAAEF,YAAY,GAAK+J,IAAI,CAArB/J,YAAY;IAEjG,IAAMsK,CAAC,GAAGwf,WAAW,CAAC1E,SAAS,EAAE3b,KAAK,EAAEpG,IAAI,EAAEG,KAAK,EAAEvD,UAAU,EAAEC,WAAW,CAAC;IAC7E,IAAMqK,CAAC,GAAGuf,WAAW,CAAC3D,UAAU,EAAEzc,MAAM,EAAEpG,GAAG,EAAEG,MAAM,EAAE1D,SAAS,EAAEC,YAAY,CAAC;IAE/E,IAAMgqB,CAAC,GAAG/D,QAAQ,GAAGyD,eAAe,CAACtE,SAAS,EAAE9a,CAAC,EAAEjH,IAAI,EAAEG,KAAK,EAAEvD,UAAU,EAAEC,WAAW,CAAC;IACxF,IAAM+pB,CAAC,GAAG/D,OAAO,GAAGwD,eAAe,CAACvD,UAAU,EAAE5b,CAAC,EAAEjH,GAAG,EAAEG,MAAM,EAAE1D,SAAS,EAAEC,YAAY,CAAC;IAExF,IAAMiK,GAAG,GAAc,CACnB,CAAC+f,CAAC,EAAEC,CAAC,CAAC,EACN,CAACD,CAAC,GAAG1f,CAAC,EAAE2f,CAAC,GAAG1f,CAAC,CAAC,CACjB;IAED,OAAO;MACHN,GAAG,EAAHA,GAAG;MACHF,IAAI,EAAJA;KACH;GACJ,CAAC;AACN,CAAC;AAGD,AAAO,IAAM6d,OAAO,GAAG,SAAVA,OAAOA,CAAIsC,KAAa,EAAEC,IAAc,EAAErD,KAAe;EAClE,IAAM5lB,CAAC,GAAGipB,IAAI,CAAC5oB,MAAM;EAErB,IAAI6oB,MAAM,GAAG,CAAC;EACd,KAAK,IAAI1oB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE,IAAIyoB,IAAI,CAACzoB,CAAC,CAAC,GAAG,CAAC,EAAE0oB,MAAM,IAAID,IAAI,CAACzoB,CAAC,CAAC;EAE9D,IAAI0oB,MAAM,GAAG,CAAC,EAAE;IACZ,KAAK,IAAI1oB,EAAC,GAAG,CAAC,EAAEA,EAAC,GAAGR,CAAC,EAAE,EAAEQ,EAAC,EAAE;MACxB,IAAIyoB,IAAI,CAACzoB,EAAC,CAAC,GAAG,CAAC,EAAE;QACbolB,KAAK,CAACplB,EAAC,CAAC,IAAKwoB,KAAK,GAAGC,IAAI,CAACzoB,EAAC,CAAC,GAAI0oB,MAAM;;;IAG9C,OAAO,IAAI;;EAEf,OAAO,KAAK;AAChB,CAAC;AAGM,IAAMvC,UAAS,GAAG,SAAZA,SAASA,CAAIqC,KAAa,EAAEG,MAAgB,EAAEvD,KAAe;EACtE,IAAM5lB,CAAC,GAAGmpB,MAAM,CAAC9oB,MAAM;EAEvB,IAAI6oB,MAAM,GAAG,CAAC;EACd,KAAK,IAAI1oB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE,IAAI2oB,MAAM,CAAC3oB,CAAC,CAAC,EAAE0oB,MAAM,IAAIC,MAAM,CAAC3oB,CAAC,CAAC,GAAGolB,KAAK,CAACplB,CAAC,CAAC;EAEzE,IAAI0oB,MAAM,GAAG,CAAC,EAAE;IACZ,IAAIE,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAI5oB,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGR,CAAC,EAAE,EAAEQ,GAAC,EAAE;MACxB,IAAI2oB,MAAM,CAAC3oB,GAAC,CAAC,GAAG,CAAC,IAAIolB,KAAK,CAACplB,GAAC,CAAC,EAAE;QAC3BolB,KAAK,CAACplB,GAAC,CAAC,IAAKwoB,KAAK,GAAGG,MAAM,CAAC3oB,GAAC,CAAC,GAAGolB,KAAK,CAACplB,GAAC,CAAC,GAAI0oB,MAAM;QACnD,IAAItD,KAAK,CAACplB,GAAC,CAAC,GAAG,CAAC,EAAE;UACd4oB,QAAQ,IAAIxD,KAAK,CAACplB,GAAC,CAAC;UACpBolB,KAAK,CAACplB,GAAC,CAAC,GAAG,CAAC;;;;IAIxB,IAAI4oB,QAAQ,EAAE;MACVzC,UAAS,CAACyC,QAAQ,EAAED,MAAM,EAAEvD,KAAK,CAAC;;IAEtC,OAAO,IAAI;;EAEf,OAAO,KAAK;AAChB,CAAC;AAAC,AAGK,IAAM2B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAI7mB,CAAS;EACxC,IAAM2oB,OAAO,GAAG3oB,CAAC,KAAK,OAAO;EAC7B,IAAM4oB,KAAK,GAAG5oB,CAAC,KAAK,KAAK;EAEzB,IAAM0jB,KAAK,GAAGiF,OAAO,GAAG,CAAC,GAAGC,KAAK,GAAG,CAAC,GAAG,GAAG;EAC3C,OAAOlF,KAAK;AAChB,CAAC;AAGD,AAAO,IAAMyC,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAImC,KAAa,EAAEhpB,CAAS,EAAEupB,OAAgB;EAC1E,IAAIC,GAAG,GAAG,CAAC;EACX,IAAIC,IAAI,GAAG,CAAC;EAEZ,IAAMC,SAAS,GAAGH,OAAO,KAAK,SAAS;EACvC,IAAMI,SAAS,GAAGJ,OAAO,KAAK,SAAS;EACvC,IAAMK,QAAQ,GAAGL,OAAO,KAAK,QAAQ;EAErC,IAAIP,KAAK,GAAG,CAAC,EAAE;IACX,IAAIY,QAAQ,IAAID,SAAS,IAAID,SAAS,EAAE;MACpC,IAAI1pB,CAAC,KAAK,CAAC,EAAE;QACTypB,IAAI,GAAGT,KAAK,GAAG,CAAC;OACnB,MAAM,IAAIY,QAAQ,EAAE;QACjBJ,GAAG,GAAGnoB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEooB,KAAK,IAAIhpB,CAAC,GAAG,CAAC,CAAC,CAAC;QAClCypB,IAAI,GAAGD,GAAG;OACb,MAAM,IAAIG,SAAS,EAAE;QAClBH,GAAG,GAAGnoB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEooB,KAAK,GAAGhpB,CAAC,CAAC;QAC5BypB,IAAI,GAAGD,GAAG,GAAG,CAAC;OACjB,MAAM,IAAIE,SAAS,EAAE;QAClBF,GAAG,GAAGnoB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEooB,KAAK,GAAG3nB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEZ,CAAC,GAAG,CAAC,CAAC,CAAC;;KAEpD,MAAM;MACHypB,IAAI,GAAGlC,kBAAkB,CAACgC,OAAiB,CAAC,GAAGP,KAAK;;;EAI5D,OAAO,CAACQ,GAAG,EAAEC,IAAI,CAAC;AACtB,CAAC;;AC3QM,IAAMI,QAAQ,GAAG,SAAXA,QAAQA,CACjBphB,OAAiC,EACjC6b,IAAqB,EACrBxb,KAAsB,EACtBghB,SAA4B,EAC5BC,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB,EAClBgF,IAAkD;EAElD,IAAQvrB,SAAS,GAAyCoK,KAAK,CAAvDpK,SAAS;IAAEE,UAAU,GAA6BkK,KAAK,CAA5ClK,UAAU;IAAED,QAAQ,GAAmBmK,KAAK,CAAhCnK,QAAQ;IAAEG,YAAY,GAAKgK,KAAK,CAAtBhK,YAAY;EAErD,IAAMslB,KAAK,GAAG0F,SAAS,WAATA,SAAS,GAAIprB,SAAS;EACpC+J,OAAO,CAAC/J,SAAS,GAAG0lB,KAAK;EAEzB,IAAM1jB,CAAC,GAAGqpB,MAAM,GAAG9F,kBAAkB,CAACC,SAAS,EAAE,CAAC,EAAEE,KAAK,CAAC;EAC1D,IAAM5hB,CAAC,GAAGwnB,MAAM;EAChB,IAAM/pB,CAAC,GAAGqkB,IAAI,CAACG,QAAQ,EAAE;EACzB,IAAMzkB,CAAC,GAAGC,CAAC,CAACI,MAAM;EAElB,IAAI6pB,OAAO,GAAG,CAAC;EACf,IAAIC,OAAO,GAAG,CAAC;EACf,IAAIC,YAAY,GAAG,CAAC;EACpB,IAAIC,WAAW,GAAG,CAAC;EACnB,IAAMC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,SAAiB,EAAEC,UAA2BC;QAA3BD;MAAAA,WAAoB,KAAK;;IAAA,IAAEC;MAAAA,cAAuB,KAAK;;IACvF,IAAMC,IAAI,GAAGzqB,CAAC,CAACqF,KAAK,CAAC+kB,WAAW,EAAEE,SAAS,GAAG,CAACE,WAAW,CAAC;IAC3DR,IAAI,CAACO,QAAQ,GAAGE,IAAI,GAAG,GAAG,GAAGA,IAAI,EAAEhqB,CAAC,EAAE8B,CAAC,GAAG2nB,OAAO,CAAC;IAElDE,WAAW,GAAGE,SAAS;IACvBH,YAAY,GAAG,CAAC;IAChBF,OAAO,GAAG,CAAC;IACXC,OAAO,IAAIvrB,UAAU;GACxB;EAED,IAAM+rB,OAAO,GAAG,IAAIC,SAAS,CAAC3qB,CAAC,CAAC;EAEhC,IAAI4qB,YAAY,GAAG,CAAC;EACpB,IAAIC,EAAE;EACN,OAAQA,EAAE,GAAGH,OAAO,CAACI,SAAS,EAAE,EAAG;IAC/B,IAAAC,GAAA,GAA+BF,EAAE;MAAzBG,QAAQ,GAAAD,GAAA,CAARC,QAAQ;MAAEC,QAAQ,GAAAF,GAAA,CAARE,QAAQ;IAC1B,IAAMC,IAAI,GAAGlrB,CAAC,CAACqF,KAAK,CAACulB,YAAY,EAAEI,QAAQ,CAAC;IAE5C,IAAA1G,oBAAA,GAAkB9b,OAAO,CAAC+b,WAAW,CAAC2G,IAAI,CAAC;MAAnC5iB,KAAK,GAAAgc,oBAAA,CAALhc,KAAK;IAEb,IAAM6iB,UAAU,GAAGjB,OAAO,GAAGvrB,UAAU,GAAGE,YAAY,GAAGmmB,UAAU;IACnE,IAAMoG,WAAW,GAAGJ,QAAQ,GAAGjrB,CAAC;IAChC,IAAMyqB,WAAW,GAAGU,IAAI,CAACA,IAAI,CAAC9qB,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;IACjD,IAAMirB,aAAa,GAAG,CAACF,UAAU,IAAIC,WAAW,GAAG,CAACZ,WAAW,GAAG,GAAG,GAAG,CAAC,IAAI9rB,QAAQ,GAAG,CAAC;IAEzF,IAAM4sB,KAAK,GAAGrB,OAAO,GAAG3hB,KAAK,GAAG+iB,aAAa;IAC7C,IAAIlB,YAAY,IAAImB,KAAK,IAAIrH,SAAS,EAAE;MACpC,IAAIkH,UAAU,EAAEd,OAAO,CAACO,YAAY,CAAC,CAAC,KACjC;QACD,IAAIJ,WAAW,EAAE;UACb,IAAAe,qBAAA,GAAkB/iB,OAAO,CAAC+b,WAAW,CAAC,GAAG,CAAC;YAAlCjc,MAAK,GAAAijB,qBAAA,CAALjjB,KAAK;UACb2hB,OAAO,IAAI3hB,MAAK;;QAEpB+hB,OAAO,CAACO,YAAY,EAAE,IAAI,EAAEJ,WAAW,CAAC;QACxC;;;IAIRP,OAAO,IAAI3hB,KAAK;IAChB6hB,YAAY,EAAE;IAEd,IAAIc,QAAQ,EAAEZ,OAAO,CAACW,QAAQ,CAAC;IAE/BJ,YAAY,GAAGI,QAAQ;;EAG3BX,OAAO,CAACtqB,CAAC,CAAC;AACd,CAAC;;AC9DM,IAAMyrB,iBAAiB,GAAG,SAApBA,iBAAiBA,CAC1BvW,IAAc,EACd7H,WAAwD,EACxDsB,UAAsB,EACtB+c,SAAsC,EACtCC,aAAiE,EACjEC,iBAAqD,EACrDvkB,WAAmB,EACnBwkB,aAAqB;EAErB,IAAMpjB,OAAO,GAAGd,aAAO,CAAC;IAAA,OAAMU,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAACI,UAAU,CAAC,IAAI,CAAC;KAAE,EAAE,CAAC;EAEpF,IAAMwG,gBAAgB,GAAGpH,iBAAW,CAChC,UAACpH,CAAS;IACN,IAAI,CAAC+H,OAAO,EAAE,OAAO,CAAC;IAEtB,IAAMqjB,SAAS,GAAGzkB,WAAW,GAAGsH,UAAU,CAACwT,gBAAgB,CAACzhB,CAAC,GAAGmrB,aAAa,GAAG,CAAC,GAAGA,aAAa,CAAC;IAElG,IAAME,QAAQ,GAAG,SAAXA,QAAQA,CAAIjH,WAA2C,EAAEhc,KAAsB;MACjFL,OAAO,CAACujB,IAAI,GAAGljB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;MAEjF,IAAM+sB,YAAY,GAAGnjB,KAAK,CAAC/J,UAAU,GAAG+J,KAAK,CAAC9J,WAAW;MACzD,IAAI,OAAO8lB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;QACpE,IAAAP,oBAAA,GAAkB9b,OAAO,CAAC+b,WAAW,CAACM,WAAW,CAACL,QAAQ,EAAE,CAAC;UAArDlc,KAAK,GAAAgc,oBAAA,CAALhc,KAAK;QACb,OAAOA,KAAK,GAAG0jB,YAAY;OAC9B,MAAM,IAAI,OAAOnH,WAAW,KAAK,QAAQ,EAAE;QACxC,IAAIoH,UAAU,GAAGD,YAAY;QAE7B,IAAA3G,oBAAA,GAA+BR,WAAW,CAAlCS,OAAO;UAAPA,OAAO,GAAAD,oBAAA,cAAG,CAAC,GAAAA,oBAAA;UAAEE,KAAK,GAAKV,WAAW,CAArBU,KAAK;QAC1B,SAAAvR,SAAA,GAAAC,+BAAA,CAAmBsR,KAAK,GAAArR,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;UAAA,IAAfvL,IAAI,GAAAsL,KAAA,CAAAG,KAAA;UACX,IAAIzL,IAAI,CAAC6c,QAAQ,EAAE;UAEnB,IAAI7c,IAAI,CAACN,KAAK,IAAI,IAAI,EAAE;YACpB2jB,UAAU,IAAIrjB,IAAI,CAACN,KAAK;WAC3B,MAAM,IAAIM,IAAI,CAACG,OAAO,KAAK,QAAQ,IAAIH,IAAI,CAACyb,IAAI,IAAI,IAAI,EAAE;YACvD,IAAAkH,qBAAA,GAAkB/iB,OAAO,CAAC+b,WAAW,CAAC3b,IAAI,CAACyb,IAAI,CAACG,QAAQ,EAAE,CAAC;cAAnDlc,MAAK,GAAAijB,qBAAA,CAALjjB,KAAK;YACb2jB,UAAU,IAAI3jB,MAAK;;UAEvB2jB,UAAU,IAAI3G,OAAO;;QAEzB2G,UAAU,IAAI3G,OAAO;QAErB,OAAO2G,UAAU;;MAErB,OAAO,CAAC;KACX;IAED,IAAIC,QAAQ,GAAGruB,KAAK,CAACI,YAAY;IAEjC,IAAMkuB,WAAW,GAAAxP,QAAA,KAAQtd,2BAA2B,EAAKssB,iBAAiB,CAAClrB,CAAC,CAAC,CAAE;IAC/E,IAAM2rB,aAAa,GAAGV,aAAa,CAACjrB,CAAC,EAAE0rB,WAAW,CAAC;IACnD,IAAIC,aAAa,EAAE;MACfF,QAAQ,GAAG9qB,IAAI,CAACT,GAAG,CAACurB,QAAQ,EAAEJ,QAAQ,CAACM,aAAa,EAAED,WAAW,CAAC,CAAC;;IAGvE,SAAAtW,UAAA,GAAA5B,+BAAA,CAAgBgB,IAAI,GAAAa,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA1B,IAAA,GAAE;MAAA,IAAX5R,CAAC,GAAAuT,MAAA,CAAAzB,KAAA;MACR,IAAMxL,KAAK,GAAA8T,QAAA,KAAQne,kBAAkB,EAAKitB,SAAS,CAAChrB,CAAC,EAAE8B,CAAC,CAAC,CAAE;MAC3D,IAAMsiB,WAAW,GAAGzX,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAEsG,KAAK,CAAC;MAC5C,IAAIgc,WAAW,IAAI,IAAI,EAAE;QACrBqH,QAAQ,GAAG9qB,IAAI,CAACT,GAAG,CAACurB,QAAQ,EAAEJ,QAAQ,CAACjH,WAAW,EAAEhc,KAAK,CAAC,CAAC;;;IAInE,OAAOzH,IAAI,CAACirB,IAAI,CAACjrB,IAAI,CAACV,GAAG,CAACmrB,SAAS,EAAEK,QAAQ,CAAC,CAAC;GAClD,EACD,CACI1jB,OAAO,EACPyM,IAAI,EACJ7H,WAAW,EACXsB,UAAU,EACV+c,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjBvkB,WAAW,EACXwkB,aAAa,CAChB,CACJ;EAED,OAAO3c,gBAAgB;AAC3B,CAAC;AAED,AAAO,IAAMqd,cAAc,GAAG,SAAjBA,cAAcA,CACvBtX,OAAiB,EACjB5H,WAAwD,EACxDsB,UAAsB,EACtB+c,SAAsC,EACtCC,aAAiE,EACjEC,iBAAqD,EACrD1H,SAA8C,EAC9C1c,YAAoB,EACpBglB,UAAkB;EAElB,IAAM/jB,OAAO,GAAGd,aAAO,CAAC;IAAA,OAAMU,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC,CAACI,UAAU,CAAC,IAAI,CAAC;KAAE,EAAE,CAAC;EAEpF,IAAMyG,iBAAiB,GAAGrH,iBAAW,CACjC,UAACtF,CAAS;IACN,IAAI,CAACiG,OAAO,EAAE,OAAO,CAAC;IAEtB,IAAMgkB,UAAU,GAAGjlB,YAAY,GAAGmH,UAAU,CAAC0T,aAAa,CAAC7f,CAAC,GAAGgqB,UAAU,GAAG,CAAC,GAAGA,UAAU,CAAC;IAE3F,IAAME,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIpI,IAAY,EAAExb,KAAsB,EAAE6jB,WAAmB;MAChF,IAAI7e,IAAI,GAAG,CAAC;MACZ,IAAM8e,QAAQ,GAAG,SAAXA,QAAQA,CAAIC,EAAU,EAAEC,EAAU,EAAEtqB,CAAS;QAC/CsL,IAAI,GAAGtL,CAAC,GAAGsG,KAAK,CAAClK,UAAU;OAC9B;MACDirB,QAAQ,CAACphB,OAAO,EAAE6b,IAAI,EAAExb,KAAK,EAAEwD,SAAS,EAAE,CAAC,EAAE,CAAC,EAAEqgB,WAAW,EAAEF,UAAU,EAAEG,QAAQ,CAAC;MAClF,OAAO9e,IAAI;KACd;IAED,IAAMif,SAAS,GAAG,SAAZA,SAASA,CACXjI,WAA2C,EAC3Chc,KAAsB,EACtB6jB,WAAmB;MAEnBlkB,OAAO,CAACujB,IAAI,GAAGljB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;MAEjF,IAAM8tB,cAAc,GAAGlkB,KAAK,CAACjK,SAAS,GAAGiK,KAAK,CAAChK,YAAY;MAC3D,IAAI,OAAOgmB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;QACpE,IAAMtc,MAAM,GAAGkkB,iBAAiB,CAAC5H,WAAW,CAACL,QAAQ,EAAE,EAAE3b,KAAK,EAAE6jB,WAAW,CAAC;QAC5E,OAAOnkB,MAAM,GAAGwkB,cAAc;OACjC,MAAM,IAAI,OAAOlI,WAAW,KAAK,QAAQ,EAAE;QACxC,IAAImC,UAAS,GAAG,CAAC;QAEjB,IAAMgG,UAAU,GAAGpI,qBAAqB,CAACpc,OAAO,EAAEqc,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE6H,WAAW,EAAE,CAAC,CAAC;QAEpF,SAAAtV,UAAA,GAAAnD,+BAAA,CAA4B+Y,UAAU,GAAA3V,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjD,IAAA,GAAE;UAAA,IAAA8Y,YAAA,GAAA5V,MAAA,CAAAhD,KAAA;YAA3BvL,GAAG,GAAAmkB,YAAA,CAAHnkB,GAAG;YAAEF,IAAI,GAAAqkB,YAAA,CAAJrkB,IAAI;UAClB,IAAIA,IAAI,CAACL,MAAM,IAAI,IAAI,EAAE;YACrBye,UAAS,GAAG5lB,IAAI,CAACT,GAAG,CAACqmB,UAAS,EAAEpe,IAAI,CAACL,MAAM,CAAC;WAC/C,MAAM,IAAIK,IAAI,CAACG,OAAO,KAAK,QAAQ,IAAIH,IAAI,CAACyb,IAAI,IAAI,IAAI,EAAE;YACvD,IAAAhb,KAAA,GAA0BP,GAAG;cAArB5G,IAAI,GAAAmH,KAAA;cAAAC,MAAA,GAAcR,GAAG;cAAbzG,KAAK,GAAAiH,MAAA;YACrB,IAAMf,OAAM,GAAGkkB,iBAAiB,CAAC7jB,IAAI,CAACyb,IAAI,CAACG,QAAQ,EAAE,EAAE3b,KAAK,EAAExG,KAAK,GAAGH,IAAI,CAAC;YAC3E8kB,UAAS,GAAG5lB,IAAI,CAACT,GAAG,CAACqmB,UAAS,EAAEze,OAAM,CAAC;;;QAI/C,OAAOye,UAAS,GAAG+F,cAAc;;MAErC,OAAO,CAAC;KACX;IAED,IAAMG,QAAQ,GAAG3qB,CAAC,KAAK,CAAC,CAAC;IACzB,IAAIykB,SAAS,GAAGnpB,KAAK,CAACK,aAAa;IAEnC,SAAAkb,UAAA,GAAAnF,+BAAA,CAAgBe,OAAO,GAAAqE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjF,IAAA,GAAE;MAAA,IAAd1T,CAAC,GAAA4Y,MAAA,CAAAhF,KAAA;MACR,IAAMxL,KAAK,GAAGqkB,QAAQ,GAAAvQ,QAAA,KACXtd,2BAA2B,EAAKssB,iBAAiB,CAAClrB,CAAC,CAAC,IAAAkc,QAAA,KACpDne,kBAAkB,EAAKitB,SAAS,CAAChrB,CAAC,EAAE8B,CAAC,CAAC,CAAE;MAEnD,IAAMsiB,WAAW,GAAGqI,QAAQ,GAAGxB,aAAa,CAACjrB,CAAC,EAAEoI,KAAK,CAAC,GAAGuE,WAAW,CAAC3M,CAAC,EAAE8B,CAAC,EAAEsG,KAAK,CAAC;MAEjF,IAAIgc,WAAW,IAAI,IAAI,EAAE;QACrB,IAAM6H,WAAW,GAAGzI,SAAS,CAACxjB,CAAC,CAAC,GAAGoI,KAAK,CAAC/J,UAAU,GAAG+J,KAAK,CAAC9J,WAAW;QACvEioB,SAAS,GAAG5lB,IAAI,CAACT,GAAG,CAACqmB,SAAS,EAAE8F,SAAS,CAACjI,WAAW,EAAEhc,KAAK,EAAE6jB,WAAW,CAAC,CAAC;;;IAInF,OAAOtrB,IAAI,CAACirB,IAAI,CAACjrB,IAAI,CAACV,GAAG,CAAC8rB,UAAU,EAAExF,SAAS,CAAC,CAAC;GACpD,EACD,CACIxe,OAAO,EACPwM,OAAO,EACP5H,WAAW,EACXsB,UAAU,EACV+c,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjB1H,SAAS,EACT1c,YAAY,EACZglB,UAAU,CACb,CACJ;EAED,OAAOrd,iBAAiB;AAC5B,CAAC;;AC3LD;AACA,AAkKA;AACA,AAAO,MAAM,eAAe,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,YAAY,CAAC;AAC/J,AA2DA;AACA,AAAO,MAAM,oBAAoB,iBAAiB,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,iBAAiB,CAAC;AACxL,AA8UA;AACA;AACA,AAAO,SAAS,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE;AACtC,CAAC,IAAI;AACL,EAAE,IAAI,MAAM,GAAG,IAAI,EAAE,CAAC;AACtB,EAAE,CAAC,MAAM,CAAC,EAAE;AACZ,EAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,EAAE;AACF,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE;AAC5B,EAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;AACtC,EAAE;AACF,CAAC,OAAO,MAAM,CAAC;AACf,CAAC;;AC7iBD,IAAMie,kBAAkB,GAAG,GAAG;AAmB9B,IAAMC,WAAW,GAAmB;EAAEnY,IAAI,EAAE;CAAI;AAKhD,IAAaoY,iBAAiB,GAAG,SAApBA,iBAAiBA;EAC1B,IAAArmB,SAAA,GAAwBC,cAAQ,EAAyB;IAAlDqmB,IAAI,GAAAtmB,SAAA;IAAEumB,OAAO,GAAAvmB,SAAA;EAEpB4V,qBAAe,CAAC;IACZ,IAAM4Q,WAAW,YAAXA,WAAWA;gDACT;QAAA,OAAAC,OAAA,CAAAC,OAAA,CACqBC,SAAS,CAACC,WAAW,CAACC,KAAK,CAAC;UAAEC,IAAI,EAAE;SAAyB,CAAC,EAAAC,IAAA,WAA7EC,MAAM;UACZ,IAAIA,MAAM,CAACC,KAAK,KAAK,SAAS,EAAE;UAEhCC,WAAW,EAAE;;OAChB;KACJ;IAED,IAAMA,WAAW,YAAXA,WAAWA;MAAA;wCACT;UAAA,OAAAT,OAAA,CAAAC,OAAA,CACqBC,SAAS,CAACQ,SAAiB,CAACC,IAAI,EAAE,EAAAL,IAAA,WAAjDxI,KAAK;YACX,IAAO3c,IAAI,GAAI2c,KAAK;YAAC,IAAA8I,KAAA;cAAA,IACjBzlB,IAAI;gBAAA,OAAA6kB,OAAA,CAAAC,OAAA,CACeY,mBAAmB,CAAC1lB,IAAI,CAAC,EAAAmlB,IAAA,WAAtCT,IAAI;kBACVC,OAAO,CAACD,IAAI,CAAC;;;gBAEbC,OAAO,CAACH,WAAW,CAAC;;;YAAC,IAAAiB,KAAA,IAAAA,KAAA,CAAAN,IAAA,SAAAM,KAAA,CAAAN,IAAA;;SAE5B;QAAA,OAAAN,OAAA,CAAAC,OAAA,CAAAa,MAAA,IAAAA,MAAA,CAAAR,IAAA,GAAAQ,MAAA,CAAAR,IAAA;OACJ,QAAAvjB,CAAA;QAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;;IAED,IAAMikB,cAAc,GAAG,SAAjBA,cAAcA;MAAA,OAAS9K,UAAU,CAACuK,WAAW,CAAC;;IAEpDznB,MAAM,CAAC2B,QAAQ,CAACsmB,gBAAgB,CAAC,KAAK,EAAED,cAAc,CAAC;IACvDhoB,MAAM,CAAC2B,QAAQ,CAACsmB,gBAAgB,CAAC,MAAM,EAAED,cAAc,CAAC;IACxDhoB,MAAM,CAAC2B,QAAQ,CAACsmB,gBAAgB,CAAC,OAAO,EAAElB,WAAW,CAAC;IAEtDA,WAAW,EAAE;IAEb,OAAO;MACH/mB,MAAM,CAAC2B,QAAQ,CAACumB,mBAAmB,CAAC,KAAK,EAAEF,cAAc,CAAC;MAC1DhoB,MAAM,CAAC2B,QAAQ,CAACumB,mBAAmB,CAAC,MAAM,EAAEF,cAAc,CAAC;MAC3DhoB,MAAM,CAAC2B,QAAQ,CAACumB,mBAAmB,CAAC,OAAO,EAAEnB,WAAW,CAAC;KAC5D;GACJ,EAAE,EAAE,CAAC;EAEN,IAAMoB,QAAQ,GAAG/mB,iBAAW,CAExB;IAAA,IAAAgnB,UAAA;IAAA,OAAM,CAAC,EAAEvB,IAAI,IAAI,IAAI,KAAAuB,UAAA,GAAIvB,IAAI,CAACrY,IAAI,cAAA4Z,UAAA,eAATA,UAAA,CAAWzuB,MAAM,CAAC;KAC3C,CAACktB,IAAI,CAAC,CACT;EAED,OAAO;IACHA,IAAI,EAAJA,IAAI;IACJsB,QAAQ,EAARA,QAAQ;IACRE,SAAS,EAAEC,kBAAkB;IAC7BC,UAAU,EAAEC;GACf;AACL,CAAC;AAGD,AAAO,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CACxBvsB,SAAoB,EACpBgK,QAAsC,EACtC0B,YAA2C,EAC3C8gB,WAAoB,EAEpB1f,iBAAkD,EAClDI,QAAsC,EACtCuf,MAAyG,EACzGC,OAIqE;EAErE,IAAAC,kBAAA,GAA4CjC,iBAAiB,EAAE;IAAvDuB,QAAQ,GAAAU,kBAAA,CAARV,QAAQ;IAAEE,SAAS,GAAAQ,kBAAA,CAATR,SAAS;IAAEE,UAAU,GAAAM,kBAAA,CAAVN,UAAU;EAEvC,IAAMO,kBAAkB,GAAG1nB,iBAAW,WAC3BlF,SAAoB,EAAE6sB,KAAqB;IAAA;MAC9C,IAAQva,IAAI,GAAcua,KAAK,CAAvBva,IAAI;QAAEwa,OAAO,GAAKD,KAAK,CAAjBC,OAAO;MACrB,IAAA7sB,mBAAA,GAAmBC,kBAAkB,CAACF,SAAS,CAAC;QAAzCjC,GAAG,GAAAkC,mBAAA;QAAEjC,GAAG,GAAAiC,mBAAA;MACf,IAAO6S,IAAI,GAAU/U,GAAG;QAAXgV,IAAI,GAAIhV,GAAG;MAExB,IAAMwB,IAAI,GAAGd,IAAI,CAACT,GAAG,CAAC,CAAC,EAAE8U,IAAI,CAAC;MAC9B,IAAMtT,GAAG,GAAGf,IAAI,CAACT,GAAG,CAAC,CAAC,EAAE+U,IAAI,CAAC;MAE7B,IAAMpN,KAAK,GAAG2M,IAAI,CAACmS,MAAM,CAAC,UAACrmB,CAAC,EAAEC,CAAC;QAAA,OAAKI,IAAI,CAACT,GAAG,CAACI,CAAC,EAAEC,CAAC,CAACZ,MAAM,CAAC;SAAE,CAAC,CAAC;MAC7D,IAAMmI,MAAM,GAAG0M,IAAI,CAAC7U,MAAM;MAE1B,IAAMsvB,aAAa,GAAGxuB,KAAK,CAACJ,KAAK,CAACG,KAAK,CAACN,GAAG,EAAED,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG4H,KAAK,EAAE,CAAC,GAAGC,MAAM,CAAC,CAAC;MACpF,IAAMonB,OAAO,GAAGvuB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAES,IAAI,CAAC6L,KAAK,CAACyiB,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;MACzD,IAAME,OAAO,GAAGxuB,IAAI,CAACT,GAAG,CAAC,CAAC,EAAES,IAAI,CAAC6L,KAAK,CAACyiB,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;MAEzD,IAAMG,YAAY,GAAc,CAACnvB,GAAG,EAAEI,KAAK,CAACJ,GAAG,EAAE,CAAC4H,KAAK,GAAGqnB,OAAO,GAAG,CAAC,EAAEpnB,MAAM,GAAGqnB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;MAAC,OAAAnC,OAAA,CAAAC,OAAA,CAErE2B,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAGQ,YAAY,EAAE5a,IAAI,EAAEwa,OAAO,CAAC,EAAA1B,IAAA,WAA1D+B,WAAW;QAAA,IACbA,WAAW,KAAK,KAAK;UACrB,IAAM1X,OAAO,GAAGnD,IAAI,CACf8a,OAAO,CAAC,UAACzT,GAAG,EAAE0T,CAAC;YAAA,OACZ1T,GAAG,CAACyT,OAAO,CAAC,UAAC1b,KAAK,EAAE9T,CAAC;cACjB,IAAM0vB,KAAK,GAAa,EAAE;cAC1B,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGP,OAAO,EAAE,EAAEO,EAAE,EAAE;gBACjC,KAAK,IAAIC,EAAE,GAAG,CAAC,EAAEA,EAAE,GAAGP,OAAO,EAAE,EAAEO,EAAE,EAAE;kBACjC,IAAM1vB,CAAC,GAAGyB,IAAI,GAAG3B,CAAC,GAAG2vB,EAAE,GAAG5nB,KAAK;kBAC/B,IAAM/F,CAAC,GAAGJ,GAAG,GAAG6tB,CAAC,GAAGG,EAAE,GAAG5nB,MAAM;kBAC/B,IAAI,EAAC8F,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAG5N,CAAC,EAAE8B,CAAC,CAAC,GAAE0tB,KAAK,CAAC1sB,IAAI,CAAC;oBAAE9C,CAAC,EAADA,CAAC;oBAAE8B,CAAC,EAADA,CAAC;oBAAE8R,KAAK,EAALA;mBAAO,CAAC;;;cAG9D,OAAO4b,KAAK;aACf,CAAC;YACL,CACA/Z,MAAM,CAAC,UAACka,MAAM;YAAA,OAAK,CAAC,CAACA,MAAM;YAAa;UAE7CvgB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGuI,OAAO,CAAC;UACnB3I,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAGogB,YAAY,CAAC;;;KAExC,QAAArlB,CAAA;MAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;KACD,CAACqF,QAAQ,EAAEJ,iBAAiB,EAAEpB,YAAY,CAAC,CAC9C;EAGD,IAAMgiB,aAAa,GAAGxoB,iBAAW,WACtBlF,SAAoB,EAAE2tB;QAAAA;MAAAA,MAAe,KAAK;;IAAA;;MAC7C,IAAMrb,IAAI,GAAGsb,qBAAqB,CAAC5tB,SAAS,EAAEgK,QAAQ,CAAC;MACvD,IAAM8iB,OAAO,GAAGL,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAGzsB,SAAS,EAAEsS,IAAI,EAAEqb,GAAG,CAAC;MAE9CxB,SAAS,CAAC7Z,IAAI,EAAEwa,OAAO,CAAC;MAExB,KAAAe,YAAA,GAAIf,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEa,GAAG,YAAAE,YAAA,GAAIF,GAAG,EAAE;QACrB,IAAMlY,OAAO,GAAa,EAAE;QAC5BpV,gBAAgB,CAACL,SAAS,CAAC,CAAC,UAACJ,CAAS;UAClCG,mBAAmB,CAACC,SAAS,CAAC,CAAC,UAAClC,CAAS;YACrC,IAAI,EAAC4N,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAG5N,CAAC,EAAE8B,CAAC,CAAC,GAAE;cACvB,IAAM6tB,MAAM,GAAG;gBAAE3vB,CAAC,EAADA,CAAC;gBAAE8B,CAAC,EAADA,CAAC;gBAAE8R,KAAK,EAAE;eAAI;cAClC+D,OAAO,CAAC7U,IAAI,CAAC6sB,MAAM,CAAC;;WAE3B,CAAC;SACL,CAAC;QACFvgB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAGuI,OAAO,CAAC;;MACtB,OAAAqV,OAAA,CAAAC,OAAA;KACJ,QAAAljB,CAAA;MAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;KACD,CAAC4kB,MAAM,EAAEvf,QAAQ,EAAExB,YAAY,CAAC,CACnC;EAED,IAAMoiB,cAAc,GAAG5oB,iBAAW,WACvBlF,SAAoB;IAAA;6BACHqsB,UAAU,EAAE,EAAAjB,IAAA,WAA1ByB,KAAK;QACX,IAAIA,KAAK,EAAED,kBAAkB,CAAC5sB,SAAS,EAAE6sB,KAAK,CAAC;;KAClD,QAAAhlB,CAAA;MAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;KACD,CAAC+kB,kBAAkB,CAAC,CACvB;EAGD,IAAMpQ,eAAe,GAAG,SAAlBA,eAAeA,CAAImR,GAAY;IACjC,IAAI3rB,gBAAgB,CAAChC,SAAS,CAAC,EAAE;IACjC,OAAO0tB,aAAa,CAAC1tB,SAAS,EAAE2tB,GAAG,CAAC;GACvC;EAED,IAAMI,gBAAgB,YAAhBA,gBAAgBA,CAAUlmB,CAAM;IAAA;MAClCA,CAAC,CAACyO,cAAc,EAAE;MAElB,IAAM0X,aAAa,GAAGnmB,CAAC,CAACmmB,aAAa,IAAKlqB,MAAc,CAACkqB,aAAa;MAAC,OAAAlD,OAAA,CAAAC,OAAA,CACnDY,mBAAmB,CAACqC,aAAa,CAAC,EAAA5C,IAAA,WAAhDyB,KAAK;QACX,IAAIA,KAAK,EAAED,kBAAkB,CAAC5sB,SAAS,EAAE6sB,KAAK,CAAC;;KAClD,QAAAhlB,CAAA;MAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;;EAEDoS,qBAAe,CAAC;IACZ,IAAI,CAACuS,WAAW,EAAE;IAGlB1oB,MAAM,CAAC2B,QAAQ,CAACsmB,gBAAgB,CAAC,OAAO,EAAEgC,gBAAgB,CAAC;IAC3D,OAAO;MACHjqB,MAAM,CAAC2B,QAAQ,CAACumB,mBAAmB,CAAC,OAAO,EAAE+B,gBAAgB,CAAC;KACjE;GACJ,CAAC;EAEF,IAAME,YAAY,GAAGlpB,aAAO,CACxB;IAAA,OAAO;MACH2oB,aAAa,EAAbA,aAAa;MACbI,cAAc,EAAdA,cAAc;MACdI,iBAAiB,EAAEjC;KACtB;GAAC,EACF,CAACyB,aAAa,EAAEI,cAAc,EAAE7B,QAAQ,CAAC,CAC5C;EAED,OAAO;IAAEgC,YAAY,EAAZA,YAAY;IAAEzR,eAAe,EAAfA,eAAe;IAAEuR,gBAAgB,EAAhBA;GAAkB;AAC9D,CAAC;AAED,IAAM3B,kBAAkB,YAAlBA,kBAAkBA,CAAU9Z,IAAgB,EAAEwa,OAAsC;EAAA;IACtF,IAAMpL,IAAI,GAAGyM,eAAe,CAAC7b,IAAI,CAAC;IAClC,IAAM8b,IAAI,GAAGC,gBAAgB,CAAC/b,IAAI,EAAEwa,OAAO,WAAPA,OAAO,GAAIpjB,SAAS,CAAC;IAAC,OAAAohB,OAAA,CAAAC,OAAA,CAEnDC,SAAS,CAACQ,SAAiB,CAAC8C,KAAK,CAAC,CACrC,IAAIC,aAAa,CAAC;MACd,WAAW,EAAE,IAAIC,IAAI,CAAC,CAACJ,IAAI,CAAC,EAAE;QAAEK,IAAI,EAAE;OAAa,CAAC;MACpD,YAAY,EAAE,IAAID,IAAI,CAAC,CAAC9M,IAAI,CAAC,EAAE;QAAE+M,IAAI,EAAE;OAAc;KACxD,CAAC,CACL,CAAC,EAAArD,IAAA;MAEF,IAAMrR,KAAK,GAAG,IAAI2U,KAAK,CAAC,MAAM,CAAC;MAC/BjpB,QAAQ,CAACkpB,aAAa,CAAC5U,KAAK,CAAC;;GAChC,QAAAlS,CAAA;IAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;AAAA;AAED,IAAMykB,mBAAmB,YAAnBA,mBAAmBA;EAAA;2BACAtB,SAAS,CAACQ,SAAiB,CAACC,IAAI,EAAE,EAAAL,IAAA,WAAjDxI,KAAK;MACX,IAAO3c,IAAI,GAAI2c,KAAK;MACpB,IAAI,CAAC3c,IAAI,EAAE;MAEX,OAAO0lB,mBAAmB,CAAC1lB,IAAI,CAAC;;GACnC,QAAA4B,CAAA;IAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;AAAA;AAED,IAAM8jB,mBAAmB,YAAnBA,mBAAmBA,CAAU1lB,IAAkC;EAAA;;aAoB5DqM,IAAI,GAEF;QAAEA,IAAI,EAAJA,IAAI;QAAEwa,OAAO,EAAPA;OAAS,GAFN;QAAExa,IAAI,EAAE;OAAI;;IAlB9B,IAAMhK,GAAG,GAAG,SAANA,GAAGA,CAAImmB,IAAY;MACrB,OAAOxoB,IAAI,CAAC2oB,KAAK,CAACC,QAAQ,CAACJ,IAAI,CAAC;KACnC;IAED,IAAMtpB,GAAG,GAAG,SAANA,GAAGA,CAAIspB,IAAY;MACrB,IAAI,SAAS,IAAIxoB,IAAI,EAAE,OAAOA,IAAI,CAAC6oB,OAAO,CAACL,IAAI,CAAC,CAAC,KAC5C,IAAI,SAAS,IAAIxoB,IAAI,EAAE,OAAQA,IAAY,CAAC8oB,OAAO,CAACN,IAAI,CAAC,CAACrD,IAAI,CAAC,UAAC4D,IAAU;QAAA,OAAKA,IAAI,CAACtN,IAAI,EAAE;QAAC;MAChG,OAAO,EAAE;KACZ;IAED,IAAIpP,IAAI,EAAEwa,OAAO;IAAC,IAAAmC,MAAA;MAAA,IACd3mB,GAAG,CAAC,WAAW,CAAC;QAAA,OAAAwiB,OAAA,CAAAC,OAAA,CACS5lB,GAAG,CAAC,WAAW,CAAC,EAAAimB,IAAA,WAAnC8D,UAAU;UAAA,IAAAC,gBAAA,GACKC,eAAe,CAACF,UAAU,CAAC;UAA7C5c,IAAI,GAAA6c,gBAAA,CAAJ7c,IAAI;UAAEwa,OAAO,GAAAqC,gBAAA,CAAPrC,OAAO;;;QAAA,IAAAuC,MAAA;UAAA,IACT/mB,GAAG,CAAC,YAAY,CAAC;YAAA,OAAAwiB,OAAA,CAAAC,OAAA,CACL5lB,GAAG,CAAC,YAAY,CAAC,EAAAimB,IAAA,WAA9B1J,IAAI;cACVpP,IAAI,GAAGgd,eAAe,CAAC5N,IAAI,CAAC;;;;QAAC,IAAA2N,MAAA,IAAAA,MAAA,CAAAjE,IAAA,SAAAiE,MAAA,CAAAjE,IAAA;;;IAAA,OAAAN,OAAA,CAAAC,OAAA,CAAAkE,MAAA,IAAAA,MAAA,CAAA7D,IAAA,GAAA6D,MAAA,CAAA7D,IAAA,CAAAmE,MAAA,IAAAA,MAAA,CAAAN,MAAA;GAKpC,QAAApnB,CAAA;IAAA,OAAAijB,OAAA,CAAAe,MAAA,CAAAhkB,CAAA;;AAAA;AAED,IAAMsmB,eAAe,GAAG,SAAlBA,eAAeA,CAAI7b,IAAgB;EAAA,OAAKA,IAAI,CAAC5U,GAAG,CAAC,UAACic,GAAG;IAAA,OAAKA,GAAG,CAAC6V,IAAI,CAAC,IAAI,CAAC;IAAC,CAACA,IAAI,CAAC,IAAI,CAAC;AAAA;AAE1F,IAAMnB,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAI/b,IAAgB,EAAEwa,OAA+B;EACvE,IAAM2C,GAAG,GAAGnd,IAAI,CACX5U,GAAG,CAAC,UAACic,GAAG;IACL,IAAM+V,GAAG,GAAG/V,GAAG,CACVjc,GAAG,CAACiyB,gBAAgB,CAAC,CACrBjyB,GAAG,CACA,UAACiN,IAAI;MAAA,gBACMA,IAAI,CAACilB,UAAU,CAAC,KAAK,EAAE,UAAC9xB,CAAC;QAAA,OAAK,GAAG,GAAG0sB,kBAAkB,CAACqF,MAAM,CAAC/xB,CAAC,CAACL,MAAM,GAAG,CAAC,CAAC;QAAC;KAAO,CACjG;IACL,OAAOiyB,GAAG,CAACF,IAAI,CAAC,EAAE,CAAC;GACtB,CAAC,CACD9xB,GAAG,CAAC,UAACic,GAAG;IAAA,gBAAYA,GAAG;GAAO,CAAC,CAC/B6V,IAAI,CAAC,IAAI,CAAC;EAEf,IAAM3C,KAAK,eAAa4C,GAAG,aAAU;EAErC,IAAI3C,OAAO,EAAE;IACT,IAAMgD,KAAK,gCAA6BH,gBAAgB,CAACI,IAAI,CAACC,SAAS,CAAClD,OAAO,CAAC,CAAC,uBAAmB;IACpG,OAAOgD,KAAK,GAAGjD,KAAK;;EAGxB,OAAOA,KAAK;AAChB,CAAC;AAED,IAAM8C,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAItyB,CAAS;EAAA,OAAKA,CAAC,CAAC4yB,OAAO,CAAC,UAAU,EAAE,UAACryB,CAAC;IAAA,cAAUA,CAAC,CAACsyB,UAAU,CAAC,CAAC,CAAC;GAAG,CAAC;AAAA;AAE7F,IAAMtC,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAI5tB,SAAoB,EAAEgK,QAAsC;EACvF,IAAIhI,gBAAgB,CAAChC,SAAS,CAAC,EAAE,OAAO,EAAE;EAE1C,IAAAM,oBAAA,GAAmCJ,kBAAkB,CAACF,SAAS,CAAC;IAAAO,qBAAA,GAAAD,oBAAA;IAA1DwS,IAAI,GAAAvS,qBAAA;IAAEwS,IAAI,GAAAxS,qBAAA;IAAAC,sBAAA,GAAAF,oBAAA;IAAI2K,IAAI,GAAAzK,sBAAA;IAAE0K,IAAI,GAAA1K,sBAAA;EAC9B,IAAIS,mBAAmB,CAACjB,SAAS,CAAC,EAAE;IAChC,IAAA6b,qBAAA,GAAgB9R,0BAA0B,CAACC,QAAQ,CAAC;MAA7Ce,KAAK,GAAA8Q,qBAAA;IACZ/I,IAAI,GAAG,CAAC;IACR7H,IAAI,GAAGF,KAAK;;EAEhB,IAAI3J,sBAAsB,CAACpB,SAAS,CAAC,EAAE;IACnC,IAAAgc,sBAAA,GAAkBjS,0BAA0B,CAACC,QAAQ,CAAC;MAA7CgB,KAAK,GAAAgR,sBAAA;IACdjJ,IAAI,GAAG,CAAC;IACR7H,IAAI,GAAGF,KAAK;;EAGhB,IAAMsH,IAAI,GAAe,EAAE;EAE3B,KAAK,IAAI1S,CAAC,GAAGmT,IAAI,EAAEnT,CAAC,IAAIsL,IAAI,EAAEtL,CAAC,EAAE,EAAE;IAC/B,IAAM+Z,GAAG,GAAa,EAAE;IAExB,KAAK,IAAI7b,CAAC,GAAGgV,IAAI,EAAEhV,CAAC,IAAImN,IAAI,EAAEnN,CAAC,EAAE,EAAE;MAC/B,IAAM4T,KAAK,GAAG1H,QAAQ,CAAClM,CAAC,EAAE8B,CAAC,CAAC;MAC5B,IAAI8R,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKhI,SAAS,EAAE;QACvCiQ,GAAG,CAAC/Y,IAAI,CAAC8Q,KAAK,IAAI,IAAI,GAAGA,KAAK,GAAG,EAAE,CAAC;;;IAI5CY,IAAI,CAAC1R,IAAI,CAAC+Y,GAAG,CAAC;;EAGlB,OAAOrH,IAAI;AACf,CAAC;AAED,IAAM6d,QAAO,GAAG,SAAVA,OAAOA,CAAIhW,OAAY,EAAEwD,OAAe;EAC1C,SAAAtM,SAAA,GAAAC,+BAAA,CAAoB6I,OAAO,CAACiW,QAAQ,GAAA7e,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAA3B6e,KAAK,GAAA9e,KAAA,CAAAG,KAAA;IACZ,IAAI2e,KAAK,CAACC,QAAQ,KAAK3S,OAAO,EAAE;MAC5B,OAAO0S,KAAK;;IAEhB,IAAME,QAAQ,GAAGJ,QAAO,CAACE,KAAK,EAAE1S,OAAO,CAAC;IACxC,IAAI4S,QAAQ,EAAE;MACV,OAAOA,QAAQ;;;AAG3B,CAAC;AAED,IAAMnB,eAAe,GAAG,SAAlBA,eAAeA,CACjBhB,IAAY;EAKZ,IAAMoC,GAAG,GAAG/qB,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;EACzC8qB,GAAG,CAACC,SAAS,GAAGrC,IAAI,CAACsC,IAAI,EAAE;EAE3B,IAAMpe,IAAI,GAAG,EAAE;EACf,IAAIwa,OAAO,GAAQpjB,SAAS;EAE5B,IAAMinB,SAAS,GAAGR,QAAO,CAACK,GAAG,EAAE,cAAc,CAAC;EAC9C,IAAIG,SAAS,EAAE;IACX,IAAMC,IAAI,GAAGD,SAAS,CAACE,YAAY,CAAC,SAAS,CAAC;IAC9C,IAAI;MACA/D,OAAO,GAAGiD,IAAI,CAACe,KAAK,CAACF,IAAI,CAAC;KAC7B,CAAC,OAAO/oB,CAAC,EAAE;;EAGhB,IAAMkpB,SAAS,GAAGZ,QAAO,CAACK,GAAG,EAAE,OAAO,CAAC;EACvC,IAAIO,SAAS,EAAE;IACX,SAAA7d,UAAA,GAAA5B,+BAAA,CAAyByf,SAAS,CAACX,QAAQ,GAAAjd,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA1B,IAAA,GAAE;MAAA,IAAlCwf,UAAU,GAAA7d,MAAA,CAAAzB,KAAA;MACjB,IAAIsf,UAAU,CAACV,QAAQ,KAAK,OAAO,EAAE;QACjC,SAAA7b,UAAA,GAAAnD,+BAAA,CAAiB0f,UAAU,CAACZ,QAAQ,GAAA1b,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjD,IAAA,GAAE;UAAA,IAA3Byf,EAAE,GAAAvc,MAAA,CAAAhD,KAAA;UACT,IAAIuf,EAAE,CAACX,QAAQ,KAAK,IAAI,EAAE;YACtB,IAAM3W,GAAG,GAAG,EAAE;YACd,SAAAlD,UAAA,GAAAnF,+BAAA,CAAiB2f,EAAE,CAACb,QAAQ,GAAA1Z,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjF,IAAA,GAAE;cAAA,IAAnB0f,EAAE,GAAAxa,MAAA,CAAAhF,KAAA;cACT,IAAIwf,EAAE,CAACZ,QAAQ,KAAK,IAAI,EAAE;gBACtB,IAAIa,GAAG,GAAW,EAAE;gBACpB,IAAID,EAAE,CAACd,QAAQ,CAAC3yB,MAAM,KAAK,CAAC,IAAIyzB,EAAE,CAACd,QAAQ,CAAC,CAAC,CAAC,CAACE,QAAQ,KAAK,GAAG,EAAE;kBAC7D,IAAMc,CAAC,GAAGF,EAAE,CAACd,QAAQ,CAAC,CAAC,CAAC;kBACxB,IAAIgB,CAAC,CAAChB,QAAQ,CAAC3yB,MAAM,KAAK,CAAC,IAAI2zB,CAAC,CAAChB,QAAQ,CAAC,CAAC,CAAC,CAACE,QAAQ,KAAK,MAAM,EAAE;oBAC9Da,GAAG,GAAGC,CAAC,CAAChB,QAAQ,CAAC,CAAC,CAAC,CAACiB,WAAW,CAACX,IAAI,EAAE;mBACzC,MAAM;oBACHS,GAAG,GAAGC,CAAC,CAACC,WAAW,CAACX,IAAI,EAAE;;iBAEjC,MAAM;kBACHS,GAAG,GAAGD,EAAE,CAACG,WAAW,CAACX,IAAI,EAAE;;gBAE/BS,GAAG,GAAGA,GAAG,CAACvB,UAAU,CAAC,aAAa,EAAE,GAAG,CAAC;gBACxCuB,GAAG,GAAGA,GAAG,CAACvB,UAAU,CAACpF,kBAAkB,EAAE,GAAG,CAAC;gBAE7C7Q,GAAG,CAAC/Y,IAAI,CAACuwB,GAAG,CAAC;;;YAGrB7e,IAAI,CAAC1R,IAAI,CAAC+Y,GAAG,CAAC;;;;;;EAOlC,OAAO;IACHrH,IAAI,EAAJA,IAAI;IACJwa,OAAO,EAAPA;GACH;AACL,CAAC;AAED,IAAMwC,eAAe,GAAG,SAAlBA,eAAeA,CAAI5N,IAAY;EACjC,OAAOA,IAAI,CAAC4P,KAAK,CAAC,OAAO,CAAC,CAAC5zB,GAAG,CAAC,UAACoqB,IAAI;IAAA,OAAKA,IAAI,CAACwJ,KAAK,CAAC,IAAI,CAAC;IAAC;AAC9D,CAAC;;ACjZD,IAAMC,YAAY,GAAG,GAAG;AAUxB,AAAO,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CACvB1S,MAAU,EACV3K,MAAU,EAEV9B,OAAoB,EACpBC,IAAiB;EAEjB,IAAO4M,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAO0B,OAAO,GAAarM,MAAM;IAAjBsM,OAAO,GAAItM,MAAM;EAEjC,IAAMrD,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASuB,OAAO,CAACof,QAAQ,CAAC,CAAC,CAAC;;EAC5C,IAAMzgB,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASsB,IAAI,CAACmf,QAAQ,CAAC,CAAC,CAAC;;EAGzC,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIxpB,KAAa,EAAE4W,MAAc,EAAE3K,MAAc;IACnE,OAAOjM,KAAK,GAAG4W,MAAM,GAAG,CAAC,GAAG3K,MAAM,GAAG2K,MAAM;GAC9C;EAGD,IAAM7M,aAAa,GAAG,SAAhBA,aAAaA,CAAIkH,MAAc,EAAE3W;QAAAA;MAAAA,SAAiB,CAAC;;IACrD,IAAMmvB,IAAI,GAAGD,gBAAgB,CAACvY,MAAM,EAAE+F,OAAO,EAAEsB,OAAO,CAAC;IACvD,IAAMoR,QAAQ,GAAGvf,OAAO,CAACof,QAAQ,CAACtY,MAAM,CAAC,GAAG9G,OAAO,CAACof,QAAQ,CAACE,IAAI,CAAC;IAClE,IAAME,MAAM,GAAG1Y,MAAM,GAAG+F,OAAO,GAAG,CAAC,GAAG7M,OAAO,CAACof,QAAQ,CAACvS,OAAO,CAAC,GAAG7M,OAAO,CAACof,QAAQ,CAAC,CAAC,CAAC;IACrF,IAAMvd,IAAI,GAAG7B,OAAO,CAACyf,OAAO,CAAC3Y,MAAM,CAAC;IAEpC,OAAOrI,UAAU,EAAE,GAAG8gB,QAAQ,GAAGC,MAAM,GAAGrvB,MAAM,GAAG0R,IAAI;GAC1D;EAGD,IAAMhC,UAAU,GAAG,SAAbA,UAAUA,CAAIyH,GAAW,EAAEnX;QAAAA;MAAAA,SAAiB,CAAC;;IAC/C,IAAMmvB,IAAI,GAAGD,gBAAgB,CAAC/X,GAAG,EAAEwF,OAAO,EAAEsB,OAAO,CAAC;IACpD,IAAMmR,QAAQ,GAAGtf,IAAI,CAACmf,QAAQ,CAAC9X,GAAG,CAAC,GAAGrH,IAAI,CAACmf,QAAQ,CAACE,IAAI,CAAC;IACzD,IAAME,MAAM,GAAGlY,GAAG,GAAGwF,OAAO,GAAG,CAAC,GAAG7M,IAAI,CAACmf,QAAQ,CAACtS,OAAO,CAAC,GAAG7M,IAAI,CAACmf,QAAQ,CAAC,CAAC,CAAC;IAC5E,IAAMvd,IAAI,GAAG5B,IAAI,CAACwf,OAAO,CAACnY,GAAG,CAAC;IAE9B,OAAO3I,UAAU,EAAE,GAAG4gB,QAAQ,GAAGC,MAAM,GAAGrvB,MAAM,GAAG0R,IAAI;GAC1D;EAGD,IAAM3E,WAAW,GAAG,SAAdA,WAAWA,CAAI5E,IAAQ,EAAEnI;QAAAA;MAAAA,SAAa/I,MAAM;;IAC9C,IAAOsR,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAAonB,OAAA,GAA2BvvB,MAAM;MAA1B+U,OAAO,GAAAwa,OAAA;MAAEva,OAAO,GAAAua,OAAA;IACvB,OAAO,CAAC9f,aAAa,CAAClH,KAAK,EAAEwM,OAAO,CAAC,EAAErF,UAAU,CAAClH,KAAK,EAAEwM,OAAO,CAAC,CAAC;GACrE;EAGD,IAAM+H,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIpG,MAAc,EAAE5B;QAAAA;MAAAA,UAAkB,CAAC;;IACzD,IAAMqa,QAAQ,GAAGvf,OAAO,CAACof,QAAQ,CAACtY,MAAM,CAAC;IACzC,IAAMjF,IAAI,GAAGiF,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG9G,OAAO,CAACyf,OAAO,CAAC3Y,MAAM,CAAC;IAErD,OAAOyY,QAAQ,GAAGra,OAAO,GAAGrD,IAAI;GACnC;EAGD,IAAMuL,aAAa,GAAG,SAAhBA,aAAaA,CAAI9F,GAAW,EAAEnC;QAAAA;MAAAA,UAAkB,CAAC;;IACnD,IAAMoa,QAAQ,GAAGtf,IAAI,CAACmf,QAAQ,CAAC9X,GAAG,CAAC;IACnC,IAAMzF,IAAI,GAAGyF,GAAG,GAAG,CAAC,GAAG,CAAC,GAAGrH,IAAI,CAACwf,OAAO,CAACnY,GAAG,CAAC;IAE5C,OAAOiY,QAAQ,GAAGpa,OAAO,GAAGtD,IAAI;GACnC;EAGD,IAAMkK,cAAc,GAAG,SAAjBA,cAAcA,CAAIzT,IAAQ,EAAEnI;QAAAA;MAAAA,SAAa/I,MAAM;;IACjD,IAAOsR,KAAK,GAAWJ,IAAI;MAAbK,KAAK,GAAIL,IAAI;IAC3B,IAAAqnB,QAAA,GAA2BxvB,MAAM;MAA1B+U,OAAO,GAAAya,QAAA;MAAExa,OAAO,GAAAwa,QAAA;IACvB,OAAO,CAACzS,gBAAgB,CAACxU,KAAK,EAAEwM,OAAO,CAAC,EAAEkI,aAAa,CAACzU,KAAK,EAAEwM,OAAO,CAAC,CAAC;GAC3E;EAGD,IAAMya,YAAY,GAAG,SAAfA,YAAYA,CAAIC,KAAa,EAAE1vB,MAAc,EAAEsc,MAAc,EAAE3K,MAAc,EAAEge,MAAmB;IACpG,IAAQV,QAAQ,GAAkBU,MAAM,CAAhCV,QAAQ;MAAEW,WAAW,GAAKD,MAAM,CAAtBC,WAAW;IAE7B,IAAMC,MAAM,GAAGZ,QAAQ,CAAC,CAAC,CAAC;IAC1B,IAAIS,KAAK,GAAGG,MAAM,EAAE,OAAO,CAAC;IAE5B,IAAM1R,MAAM,GAAG8Q,QAAQ,CAAC3S,MAAM,CAAC;IAC/B,IAAIoT,KAAK,GAAGvR,MAAM,EAAE;MAChB,OAAOyR,WAAW,CAACF,KAAK,EAAE1vB,MAAM,CAAC;KACpC,MAAM;MACH,IAAMovB,QAAQ,GAAGM,KAAK,GAAGG,MAAM;MAC/B,IAAMV,IAAI,GAAGF,QAAQ,CAACtd,MAAM,GAAG2K,MAAM,CAAC;MACtC,IAAM+S,MAAM,GAAGJ,QAAQ,CAAC3S,MAAM,CAAC,GAAG2S,QAAQ,CAAC,CAAC,CAAC;MAC7C,OAAOW,WAAW,CAACT,IAAI,GAAGC,QAAQ,GAAGC,MAAM,EAAErvB,MAAM,CAAC;;GAE3D;EAGD,IAAM+S,aAAa,GAAG,SAAhBA,aAAaA,CAAI+c,MAAc,EAAE/a;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OACtD0a,YAAY,CAACK,MAAM,EAAE/a,OAAO,EAAE2H,OAAO,EAAEsB,OAAO,EAAEnO,OAAO,CAAC;;EAC5D,IAAMmD,UAAU,GAAG,SAAbA,UAAUA,CAAI+c,MAAc,EAAE/a;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAKya,YAAY,CAACM,MAAM,EAAE/a,OAAO,EAAE2H,OAAO,EAAEsB,OAAO,EAAEnO,IAAI,CAAC;;EAGjH,IAAMH,WAAW,GAAG,SAAdA,WAAWA,CAAI+f,KAAS,EAAE1vB;QAAAA;MAAAA,SAAa/I,MAAM;;IAC/C,IAAO64B,MAAM,GAAYJ,KAAK;MAAfK,MAAM,GAAIL,KAAK;IAC9B,IAAAM,QAAA,GAA2BhwB,MAAM;MAA1B+U,OAAO,GAAAib,QAAA;MAAEhb,OAAO,GAAAgb,QAAA;IACvB,OAAO,CAACjd,aAAa,CAAC+c,MAAM,EAAE/a,OAAO,CAAC,EAAE/B,UAAU,CAAC+c,MAAM,EAAE/a,OAAO,CAAC,CAAC;GACvE;EAGD,IAAMib,eAAe,GAAG,SAAlBA,eAAeA,CAAIP,KAAa,EAAE1vB,MAAc,EAAE2vB,MAAmB;IACvE,IAAID,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAExB,IAAQE,WAAW,GAAKD,MAAM,CAAtBC,WAAW;IACnB,OAAOA,WAAW,CAACF,KAAK,EAAE1vB,MAAM,CAAC;GACpC;EAGD,IAAM8c,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIgT,MAAc,EAAE/a;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAKkb,eAAe,CAACH,MAAM,EAAE/a,OAAO,EAAElF,OAAO,CAAC;;EAC3G,IAAMmN,aAAa,GAAG,SAAhBA,aAAaA,CAAI+S,MAAc,EAAE/a;QAAAA;MAAAA,UAAkB,CAAC;;IAAA,OAAKib,eAAe,CAACF,MAAM,EAAE/a,OAAO,EAAElF,IAAI,CAAC;;EAGrG,IAAM6L,cAAc,GAAG,SAAjBA,cAAcA,CAAI+T,KAAS,EAAE1vB;QAAAA;MAAAA,SAAa/I,MAAM;;IAClD,IAAO64B,MAAM,GAAYJ,KAAK;MAAfK,MAAM,GAAIL,KAAK;IAC9B,IAAAQ,QAAA,GAA2BlwB,MAAM;MAA1B+U,OAAO,GAAAmb,QAAA;MAAElb,OAAO,GAAAkb,QAAA;IACvB,OAAO,CAACpT,gBAAgB,CAACgT,MAAM,EAAE/a,OAAO,CAAC,EAAEiI,aAAa,CAAC+S,MAAM,EAAE/a,OAAO,CAAC,CAAC;GAC7E;EAGD,IAAMmb,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI9T,IAAY,EAAEC,MAAc,EAAE3K,MAAc,EAAEge,MAAmB;IACxF,IAAM/e,OAAO,MAAAE,MAAA,CAAOnW,GAAG,CAAC2hB,MAAM,CAAC,CAAC;IAEhC,IAAQ2S,QAAQ,GAAaU,MAAM,CAA3BV,QAAQ;MAAEmB,MAAM,GAAKT,MAAM,CAAjBS,MAAM;IAExB,IAAMjS,MAAM,GAAGiS,MAAM,CAAC9T,MAAM,GAAG,CAAC,CAAC;IACjC,IAAM+T,SAAS,GAAGpB,QAAQ,CAACtd,MAAM,GAAG2K,MAAM,CAAC;IAE3C,IAAM8S,QAAQ,GAAG/S,IAAI,GAAG8B,MAAM;IAC9B,KAAK,IAAI/iB,CAAC,GAAGuW,MAAM,GAAG2K,MAAM,EAAE2S,QAAQ,CAAC7zB,CAAC,CAAC,GAAGi1B,SAAS,IAAIjB,QAAQ,EAAE,EAAEh0B,CAAC,EAAE;MACpEwV,OAAO,CAACxS,IAAI,CAAChD,CAAC,CAAC;;IAGnB,OAAOwV,OAAO;GACjB;EAGD,IAAM0f,eAAe,GAAG,SAAlBA,eAAeA,CAAIjU,IAAQ;IAC7B,IAAOkU,KAAK,GAAWlU,IAAI;MAAbmU,KAAK,GAAInU,IAAI;IAC3B,OAAO;MACHxM,OAAO,EAAEsgB,iBAAiB,CAACI,KAAK,EAAE7T,OAAO,EAAEsB,OAAO,EAAEnO,OAAO,CAAC;MAC5DC,IAAI,EAAEqgB,iBAAiB,CAACK,KAAK,EAAE7T,OAAO,EAAEsB,OAAO,EAAEnO,IAAI;KACxD;GACJ;EAED,IAAM9C,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAAS6C,OAAO,CAAC7C,UAAU,EAAE,GAAG8C,IAAI,CAAC9C,UAAU,EAAE;;EAEjE,OAAO;IACHyC,aAAa,EAAbA,aAAa;IACbC,UAAU,EAAVA,UAAU;IACV3C,WAAW,EAAXA,WAAW;IAEXgQ,gBAAgB,EAAhBA,gBAAgB;IAChBE,aAAa,EAAbA,aAAa;IACbrB,cAAc,EAAdA,cAAc;IAEd7I,aAAa,EAAbA,aAAa;IACbC,UAAU,EAAVA,UAAU;IACVrD,WAAW,EAAXA,WAAW;IAEXmN,gBAAgB,EAAhBA,gBAAgB;IAChBE,aAAa,EAAbA,aAAa;IACbrB,cAAc,EAAdA,cAAc;IAEd2U,eAAe,EAAfA,eAAe;IACfhiB,UAAU,EAAVA,UAAU;IACVE,UAAU,EAAVA,UAAU;IAEVxB,UAAU,EAAVA;GACH;AACL,CAAC;AAYD,AAAO,IAAMyjB,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,KAAgC;EAC5D,IAAMC,OAAO,GAAGC,UAAU,CAAC7B,YAAY,CAAC;EACxC,IAAMvO,KAAK,GAAGoQ,UAAU,CAAC7B,YAAY,CAAC;EAEtC,IAAI9hB,OAAO,GAAG,CAAC;EACf0jB,OAAO,CAAC/tB,GAAG,CAAC,CAAC,EAAE8tB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;EAGzB,IAAMpB,OAAO,GAAG,SAAVA,OAAOA,CAAIl0B,CAAS;IACtB,IAAIA,CAAC,GAAG,CAAC,EAAE,OAAOs1B,KAAK,CAACt1B,CAAC,CAAC;IAC1B,IAAIolB,KAAK,CAAC1a,GAAG,CAAC1K,CAAC,CAAC,EAAE,OAAOolB,KAAK,CAAC7d,GAAG,CAACvH,CAAC,CAAE;IAEtC,IAAMsW,IAAI,GAAGgf,KAAK,CAACt1B,CAAC,CAAC,IAAI,CAAC;IAC1BolB,KAAK,CAAC5d,GAAG,CAACxH,CAAC,EAAEsW,IAAI,CAAC;IAClB,OAAOA,IAAI;GACd;EAGD,IAAMmf,SAAS,GAAG,SAAZA,SAASA,CAAIz1B,CAAS;IACxB,IAAIA,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACnB,IAAIu1B,OAAO,CAAC7qB,GAAG,CAAC1K,CAAC,CAAC,EAAE,OAAOu1B,OAAO,CAAChuB,GAAG,CAACvH,CAAC,CAAE;IAE1C,IAAIyvB,CAAC,GAAG8F,OAAO,CAACG,IAAI,EAAE,IAAI,CAAC,CAAC;IAG5B,OAAOjG,CAAC,GAAGzvB,CAAC,EAAE;MACV,IAAMsW,IAAI,GAAG4d,OAAO,CAACzE,CAAC,CAAC;MACvB,IAAMlZ,MAAM,GAAG,CAACgf,OAAO,CAAChuB,GAAG,CAACkoB,CAAC,CAAC,IAAI,CAAC,IAAInZ,IAAI;MAC3Cif,OAAO,CAAC/tB,GAAG,CAAC,EAAEioB,CAAC,EAAElZ,MAAM,CAAC;;IAG5B,OAAOgf,OAAO,CAAChuB,GAAG,CAACvH,CAAC,CAAE;GACzB;EAGD,IAAM6zB,QAAQ,GAAG,SAAXA,QAAQA,CAAI7zB,CAAS;IAAA,OAAKy1B,SAAS,CAACz1B,CAAC,CAAC;;EAC5C,IAAMg1B,MAAM,GAAG,SAATA,MAAMA,CAAIh1B,CAAS;IAAA,OAAKy1B,SAAS,CAACz1B,CAAC,GAAG,CAAC,CAAC;;EAG9C,IAAMw0B,WAAW,GAAG,SAAdA,WAAWA,CAAIt0B,CAAS,EAAE0E;QAAAA;MAAAA,SAAiB,CAAC;;IAE9C,IAAI+wB,IAAI,GAAGJ,OAAO,CAACG,IAAI,EAAE,IAAI,CAAC;IAG9B,OAAOD,SAAS,CAACE,IAAI,CAAC,GAAGz1B,CAAC,IAAIg0B,OAAO,CAACyB,IAAI,CAAC,EAAEA,IAAI,IAAI,EAAE;IAGvD,IAAI3qB,KAAK,GAAG,CAAC;IACb,IAAIC,GAAG,GAAG0qB,IAAI;IACd,OAAO3qB,KAAK,GAAGC,GAAG,EAAE;MAChB,IAAI2qB,GAAG,GAAG5qB,KAAK,GAAGnK,IAAI,CAAC6L,KAAK,CAAC,CAACzB,GAAG,GAAGD,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC;MACnD,IAAI8I,KAAK,GAAG2hB,SAAS,CAACG,GAAG,CAAC,IAAIhxB,MAAM,GAAGA,MAAM,GAAGsvB,OAAO,CAAC0B,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;MACrE,IAAI9hB,KAAK,IAAI5T,CAAC,EAAE8K,KAAK,GAAG4qB,GAAG,CAAC,KACvB3qB,GAAG,GAAG2qB,GAAG,GAAG,CAAC;;IAGtB,OAAO5qB,KAAK;GACf;EAED,IAAM6qB,UAAU,GAAG,SAAbA,UAAUA,CAAIvrB,KAAa;IAC7BA,KAAK,GAAGzJ,IAAI,CAACT,GAAG,CAAC,CAAC,EAAEkK,KAAK,CAAC;IAC1BirB,OAAO,CAACO,QAAQ,CAACxrB,KAAK,CAAC;IACvB8a,KAAK,CAAC0Q,QAAQ,CAACxrB,KAAK,CAAC;IACrBuH,OAAO,EAAE;GACZ;EAED,IAAMkkB,QAAQ,GAAG,SAAXA,QAAQA,CAAIt2B,CAA4B;IAC1C61B,KAAK,GAAG71B,CAAC;GACZ;EACD,IAAMmS,UAAU,GAAG,SAAbA,UAAUA;IAAA,OAASC,OAAO;;EAEhC,OAAO;IAAEqiB,OAAO,EAAPA,OAAO;IAAEL,QAAQ,EAARA,QAAQ;IAAEmB,MAAM,EAANA,MAAM;IAAEpjB,UAAU,EAAVA,UAAU;IAAE4iB,WAAW,EAAXA,WAAW;IAAEuB,QAAQ,EAARA,QAAQ;IAAEF,UAAU,EAAVA;GAAY;AACvF,CAAC;AAID,IAAML,UAAU,GAAG,SAAbA,UAAUA,CAAIQ;MAAAA;IAAAA,cAAsB,GAAG;;EACzC,IAAIC,IAAgB;EACpB,IAAIrgB,MAAmB;EACvB,IAAI+f,IAAI,GAAG,CAAC;EAEZ,IAAMO,IAAI,GAAG,GAAG;EAEhB,IAAMC,QAAQ,GAAG,SAAXA,QAAQA,CAAI7f,IAAY;IAC1B,IAAI8f,OAAO,GAAG,IAAIC,UAAU,CAAC/f,IAAI,CAAC;IAClC,IAAIggB,SAAS,GAAG,IAAIC,WAAW,CAACjgB,IAAI,CAAC;IACrC,IAAI2f,IAAI,EAAEO,IAAI,CAACP,IAAI,EAAEG,OAAO,CAAC;IAC7B,IAAIxgB,MAAM,EAAE4gB,IAAI,CAAC5gB,MAAM,EAAE0gB,SAAS,CAAC;IACnCL,IAAI,GAAGG,OAAO;IACdxgB,MAAM,GAAG0gB,SAAS;GACrB;EACDH,QAAQ,CAACH,WAAW,CAAC;EAErB,IAAMQ,IAAI,GAAG,SAAPA,IAAIA,CAAI52B,IAA8B,EAAEqF,EAA4B;IACtE,IAAIzF,CAAC,GAAGqB,IAAI,CAACV,GAAG,CAACP,IAAI,CAACC,MAAM,EAAEoF,EAAE,CAACpF,MAAM,CAAC;IACxC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGR,CAAC,EAAE,EAAEQ,CAAC,EAAE;MACxBiF,EAAE,CAACjF,CAAC,CAAC,GAAGJ,IAAI,CAACI,CAAC,CAAC;;GAEtB;EAED,IAAMy2B,MAAM,GAAG,SAATA,MAAMA,CAAIngB,IAAY;IACxB,IAAMgS,CAAC,GAAG1S,MAAM,CAAC/V,MAAM;IACvB,IAAM4oB,IAAI,GAAG5nB,IAAI,CAAC2Y,KAAK,CAAC8O,CAAC,GAAG4N,IAAI,CAAC;IACjC,IAAI5N,CAAC,GAAGhS,IAAI,EAAE6f,QAAQ,CAACt1B,IAAI,CAACT,GAAG,CAACqoB,IAAI,EAAEnS,IAAI,CAAC,CAAC;GAC/C;EAED,IAAMwf,QAAQ,GAAG,SAAXA,QAAQA,CAAIxf,IAAY;IAC1B,IAAMgS,CAAC,GAAG1S,MAAM,CAAC/V,MAAM;IAGvB,IAAIyoB,CAAC,GAAGhS,IAAI,EAAE;IAGd,IAAMqS,MAAM,GAAG9nB,IAAI,CAAC2Y,KAAK,CAAClD,IAAI,GAAG4f,IAAI,CAAC;IACtC,IAAI5N,CAAC,GAAGK,MAAM,EAAEwN,QAAQ,CAAC7f,IAAI,CAAC,CAAC,KAE1B,KAAK,IAAItW,CAAC,GAAGsW,IAAI,EAAEtW,CAAC,GAAGsoB,CAAC,EAAE,EAAEtoB,CAAC,EAAEi2B,IAAI,CAACj2B,CAAC,CAAC,GAAG,CAAC;IAG/C21B,IAAI,GAAG90B,IAAI,CAACV,GAAG,CAACw1B,IAAI,EAAErf,IAAI,CAAC;IAC3B,OAAOqf,IAAI,GAAG,CAAC,IAAI,CAACM,IAAI,CAACN,IAAI,CAAC,EAAEA,IAAI,EAAE;GACzC;EAED,IAAMe,OAAO,GAAG,SAAVA,OAAOA;IAAA,OAAUT,IAAI,CAACN,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;GAAC;EAEhD,IAAMgB,QAAQ,GAAG,SAAXA,QAAQA,CAAI32B,CAAS,EAAE8T,KAAa;IACtC2iB,MAAM,CAACz2B,CAAC,GAAG,CAAC,CAAC;IACb4V,MAAM,CAAC5V,CAAC,CAAC,GAAG8T,KAAK;IACjBmiB,IAAI,CAACj2B,CAAC,CAAC,GAAG,CAAC;IACX21B,IAAI,GAAG90B,IAAI,CAACT,GAAG,CAACu1B,IAAI,EAAE31B,CAAC,CAAC;GAC3B;EAED,IAAM42B,QAAQ,GAAG,SAAXA,QAAQA,CAAI52B,CAAS;IAAA,OAAMi2B,IAAI,CAACj2B,CAAC,CAAC,GAAG4V,MAAM,CAAC5V,CAAC,CAAC,GAAG,IAAI;GAAC;EAC5D,IAAM62B,QAAQ,GAAG,SAAXA,QAAQA,CAAI72B,CAAS;IAAA,OAAK,CAAC,CAACi2B,IAAI,CAACj2B,CAAC,CAAC;;EAEzC,OAAO;IAAE81B,QAAQ,EAARA,QAAQ;IAAEtuB,GAAG,EAAEmvB,QAAQ;IAAEpvB,GAAG,EAAEqvB,QAAQ;IAAElsB,GAAG,EAAEmsB,QAAQ;IAAEnB,IAAI,EAAEgB;GAAS;AACnF,CAAC;;AC1SM,IAAMI,WAAW,GAAG,SAAdA,WAAWA,CACpB7uB,OAAiC,EACjC8uB,aAA4B,EAC5B5oB,UAAsB,EACtBC,YAA2B,EAE3BC,UAA8B,EAC9B6c,SAAsC,EAEtC9oB,SAAoB,EACpB40B,mBAAgC,EAChCC,SAAkB,EAElBnlB,YAAuB,EACvBvU,QAA0B,EAC1BuY,WAA+C,EAC/CohB,UAAqB,EACrBv6B,UAA4B,EAE5BwuB,aAAiE,EACjEC,iBAAqD,EACrDve,WAAwD,EAExDyB,eAAoE,EACpEC,YAAiE,EACjEC,oBAAwD,EACxDC,iBAAqD,EAErDf,UAAc;EAEd,IAAQ9F,MAAM,GAAKK,OAAO,CAAlBL,MAAM;EACd,IAAQG,KAAK,GAAaH,MAAM,CAAxBG,KAAK;IAAEC,MAAM,GAAKJ,MAAM,CAAjBI,MAAM;EACrB,IACImvB,aAAa,GAQb9oB,UAAU,CARV8oB,aAAa;IACb1lB,cAAc,GAOdpD,UAAU,CAPVoD,cAAc;IACdC,iBAAiB,GAMjBrD,UAAU,CANVqD,iBAAiB;IACjB0lB,aAAa,GAKb/oB,UAAU,CALV+oB,aAAa;IACbC,UAAU,GAIVhpB,UAAU,CAJVgpB,UAAU;IACVt5B,UAAU,GAGVsQ,UAAU,CAHVtQ,UAAU;IACVV,WAAW,GAEXgR,UAAU,CAFVhR,WAAW;IACXW,aAAa,GACbqQ,UAAU,CADVrQ,aAAa;EAEjB,IAAQyW,OAAO,GAAWrG,YAAY,CAA9BqG,OAAO;IAAEC,IAAI,GAAKtG,YAAY,CAArBsG,IAAI;EACrB,IAAQL,aAAa,GAAkDlG,UAAU,CAAzEkG,aAAa;IAAEC,UAAU,GAAsCnG,UAAU,CAA1DmG,UAAU;IAAEqN,gBAAgB,GAAoBxT,UAAU,CAA9CwT,gBAAgB;IAAEE,aAAa,GAAK1T,UAAU,CAA5B0T,aAAa;EAElE,IAAMyV,aAAa,GAAwB,EAAE;EAC7C,IAAMpW,MAAM,GAAO,CAACkW,aAAa,EAAEC,UAAU,CAAC;EAE9C,IAAMpkB,OAAO,GAAG0O,gBAAgB,CAAC,CAAC,CAAC;EACnC,IAAMxO,OAAO,GAAG0O,aAAa,CAAC,CAAC,CAAC;EAEhC0V,YAAY,CAAC3vB,MAAM,CAAC;EACpBK,OAAO,CAAC2B,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE7B,KAAK,EAAEC,MAAM,CAAC;EACtCC,OAAO,CAACuvB,SAAS,GAAG,OAAO;EAC3BvvB,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE1vB,KAAK,EAAEC,MAAM,CAAC;EACrCC,OAAO,CAAC5K,WAAW,GAAG,WAAW;EAGjC,SAAAoW,SAAA,GAAAC,+BAAA,CAAgBgB,IAAI,GAAAf,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE;IAAA,IAAX5R,CAAC,GAAA2R,KAAA,CAAAG,KAAA;IACR,SAAA4jB,WAAA,GAAAhkB,+BAAA,CAAgBe,OAAO,GAAAkjB,OAAA,IAAAA,OAAA,GAAAD,WAAA,IAAA9jB,IAAA,GAAE;MAAA,IAAd1T,CAAC,GAAAy3B,OAAA,CAAA7jB,KAAA;MACR,IAAMnS,MAAI,GAAG0S,aAAa,CAACnU,CAAC,CAAC;MAC7B,IAAM4B,OAAK,GAAGuS,aAAa,CAACnU,CAAC,EAAE,CAAC,CAAC;MACjC,IAAM0B,KAAG,GAAG0S,UAAU,CAACtS,CAAC,CAAC;MACzB,IAAMD,QAAM,GAAGuS,UAAU,CAACtS,CAAC,EAAE,CAAC,CAAC;MAE/B,IAAA41B,UAAA,GAAsB1M,SAAS,CAAChrB,CAAC,EAAE8B,CAAC,CAAC;QAA7BpD,SAAS,GAAAg5B,UAAA,CAATh5B,SAAS;MACjB,IAAIA,SAAS,EAAE;QACXqJ,OAAO,CAACuvB,SAAS,GAAG54B,SAAS;QAC7BqJ,OAAO,CAACwvB,QAAQ,CAAC91B,MAAI,EAAEC,KAAG,EAAEE,OAAK,GAAGH,MAAI,EAAEI,QAAM,GAAGH,KAAG,CAAC;;;;EAKnE,IAAMi2B,eAAe,GAAG,CAACzzB,gBAAgB,CAAChC,SAAS,CAAC;EACpD,IAAM01B,kBAAkB,GAAGn0B,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM21B,qBAAqB,GAAGj0B,iBAAiB,CAAC1B,SAAS,CAAC;EAG1D,IAAA41B,qBAAA,GAA6BC,sBAAsB,CAAC71B,SAAS,EAAE+L,UAAU,EAAE+S,MAAM,EAAExT,UAAU,CAAC;IAAvFwqB,QAAQ,GAAAF,qBAAA;IAAEG,QAAQ,GAAAH,qBAAA;EAGzB,IAAIH,eAAe,EAAE;IACjB,IAAAO,UAAA,GAAuCF,QAAQ;MAAvCv2B,IAAI,GAAAy2B,UAAA;MAAEx2B,GAAG,GAAAw2B,UAAA;MAAAC,WAAA,GAAsBH,QAAQ;MAA1Bp2B,KAAK,GAAAu2B,WAAA;MAAEt2B,MAAM,GAAAs2B,WAAA;IAClCpwB,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACE,mBAAmB;IAC9CyL,OAAO,CAACwvB,QAAQ,CAAC91B,IAAI,EAAEC,GAAG,EAAEE,KAAK,GAAGH,IAAI,EAAEI,MAAM,GAAGH,GAAG,CAAC;;EAG3D,IAAI,CAAC6P,cAAc,EAAE;IAEjBxJ,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACO,gBAAgB;IAC3CoL,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAExkB,OAAO,EAAEhL,OAAO,CAACL,MAAM,CAACI,MAAM,CAAC;IAGtD,IAAI6vB,eAAe,IAAI,CAACE,qBAAqB,EAAE;MAC3C,IAAAO,WAAA,GAA8BJ,QAAQ;QAA5Bt2B,IAAG,GAAA02B,WAAA;QAAAC,WAAA,GAAiBL,QAAQ;QAAnBn2B,OAAM,GAAAw2B,WAAA;MACzBtwB,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACS,YAAY;MACvCkL,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE71B,IAAG,EAAEqR,OAAO,EAAElR,OAAM,GAAGH,IAAG,CAAC;;;EAIvD,IAAI,CAAC8P,iBAAiB,EAAE;IAEpBzJ,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACO,gBAAgB;IAC3CoL,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAExvB,OAAO,CAACL,MAAM,CAACG,KAAK,EAAEoL,OAAO,CAAC;IAGrD,IAAI0kB,eAAe,IAAI,CAACC,kBAAkB,EAAE;MACxC,IAAAU,WAAA,GAA0BN,QAAQ;QAA1Bv2B,KAAI,GAAA62B,WAAA;QAAAC,WAAA,GAAcP,QAAQ;QAAlBp2B,MAAK,GAAA22B,WAAA;MACrBxwB,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACS,YAAY;MACvCkL,OAAO,CAACwvB,QAAQ,CAAC91B,KAAI,EAAE,CAAC,EAAEG,MAAK,GAAGH,KAAI,EAAEwR,OAAO,CAAC;;;EAKxDlL,OAAO,CAACywB,WAAW,GAAGp8B,MAAM,CAACG,QAAQ;EACrCwL,OAAO,CAAC0wB,SAAS,GAAG,CAAC;EAErB,IAAMC,SAAS,GAAGzB,aAAa,GAAGlkB,OAAO,GAAGhL,OAAO,CAACL,MAAM,CAACG,KAAK;EAChE,IAAM8wB,UAAU,GAAG1B,aAAa,GAAGhkB,OAAO,GAAGlL,OAAO,CAACL,MAAM,CAACI,MAAM;EAElE,IAAM8wB,aAAa,GAAG,SAAhBA,aAAaA,CAAI54B,CAAS,EAAE8H,MAAc;IAC5CC,OAAO,CAAC8wB,SAAS,EAAE;IACnB9wB,OAAO,CAAC+wB,MAAM,CAAC94B,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAC1B+H,OAAO,CAACgxB,MAAM,CAAC/4B,CAAC,GAAG,GAAG,EAAE8H,MAAM,CAAC;IAC/BC,OAAO,CAACixB,MAAM,EAAE;GACnB;EAED,IAAMC,aAAa,GAAG,SAAhBA,aAAaA,CAAIn3B,CAAS,EAAE+F,KAAa;IAC3CE,OAAO,CAAC8wB,SAAS,EAAE;IACnB9wB,OAAO,CAAC+wB,MAAM,CAAC,CAAC,EAAEh3B,CAAC,GAAG,GAAG,CAAC;IAC1BiG,OAAO,CAACgxB,MAAM,CAAClxB,KAAK,EAAE/F,CAAC,GAAG,GAAG,CAAC;IAC9BiG,OAAO,CAACixB,MAAM,EAAE;GACnB;EAEDJ,aAAa,CAAC7lB,OAAO,EAAEhL,OAAO,CAACL,MAAM,CAACI,MAAM,CAAC;EAC7CmxB,aAAa,CAAChmB,OAAO,EAAElL,OAAO,CAACL,MAAM,CAACG,KAAK,CAAC;EAE5C,SAAAuN,UAAA,GAAA5B,+BAAA,CAAqBe,OAAO,GAAAc,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAA1B,IAAA,GAAE;IAAA,IAAnB2H,QAAM,GAAAhG,MAAA,CAAAzB,KAAA;IACb,IAAMhS,OAAK,GAAGuS,aAAa,CAACkH,QAAM,EAAE,CAAC,CAAC;IACtCud,aAAa,CAACh3B,OAAK,EAAE+2B,UAAU,CAAC;;EAGpC,SAAAhiB,UAAA,GAAAnD,+BAAA,CAAkBgB,IAAI,GAAAoC,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjD,IAAA,GAAE;IAAA,IAAbmI,KAAG,GAAAjF,MAAA,CAAAhD,KAAA;IACV,IAAM/R,QAAM,GAAGuS,UAAU,CAACyH,KAAG,EAAE,CAAC,CAAC;IACjCod,aAAa,CAACp3B,QAAM,EAAE62B,SAAS,CAAC;;EAGpC,IAAAv2B,mBAAA,GAAqCC,kBAAkB,CAACF,SAAS,CAAC;IAAAG,oBAAA,GAAAF,mBAAA;IAA1D6S,IAAI,GAAA3S,oBAAA;IAAE4S,IAAI,GAAA5S,oBAAA;IAAAC,qBAAA,GAAAH,mBAAA;IAAIgL,IAAI,GAAA7K,qBAAA;IAAE8K,IAAI,GAAA9K,qBAAA;EAGhC,IAAI,CAACiP,cAAc,EAAE;IACjBxJ,OAAO,CAACmxB,YAAY,GAAG,QAAQ;IAC/BnxB,OAAO,CAAC/J,SAAS,GAAG,QAAQ;IAC5B+J,OAAO,CAACujB,IAAI,GAAGvtB,kBAAkB,CAACE,QAAQ,GAAG,KAAK,GAAGF,kBAAkB,CAACS,UAAU;IAClFuJ,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACQ,UAAU;IAErC,SAAA+b,UAAA,GAAAnF,+BAAA,CAAkBgB,IAAI,GAAAoE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAjF,IAAA,GAAE;MAAA,IAAbmI,GAAG,GAAAjD,MAAA,CAAAhF,KAAA;MACV,IAAMulB,OAAO,SAAMtd,GAAG,GAAG,CAAC,CAAE;MAI5B,IAAMud,QAAQ,GAAGr5B,SAAS,CAAC8b,GAAG,EAAE5G,IAAI,EAAE7H,IAAI,CAAC;MAE3C,IAAMisB,QAAQ,GAAGhrB,YAAY,CAACwN,GAAG,CAAC;MAClC,IAAMyd,YAAY,GAAGD,QAAQ,IAAI,IAAI,KAAI9qB,iBAAiB,aAAjBA,iBAAiB,uBAAjBA,iBAAiB,CAAE/D,GAAG,CAAC6uB,QAAQ,CAAC;MAEzE,IAAME,cAAc,GAAG3B,kBAAkB,IAAIwB,QAAQ;MACrD,IAAMI,eAAe,GAAG5B,kBAAkB,IAAI0B,YAAY;MAE1D,IAAMlxB,KAAK,GAAGmxB,cAAc,GACtBz6B,qBAAqB,GACrB06B,eAAe,GACbz6B,2BAA2B,GAC3Bq6B,QAAQ,GACNv6B,mBAAmB,GACnB3C,QAAQ;MAElB,IAAMu9B,aAAa,GAAAvd,QAAA,KAAQtd,2BAA2B,EAAKwJ,KAAK,CAAE;MAElE,IAAM1G,KAAG,GAAG0S,UAAU,CAACyH,GAAG,CAAC;MAC3B,IAAMha,QAAM,GAAGuS,UAAU,CAACyH,GAAG,EAAE,CAAC,CAAC;MAEjC,IAAM6d,UAAU,GAAGC,UAAU,CACzB5xB,OAAO,EACP8uB,aAAa,EACbsC,OAAO,EACPM,aAAa,EACb,CAAC,EACD/3B,KAAG,EACHqR,OAAO,EACPlR,QAAM,GAAGH,KAAG,CACf;MACD,IAAIg4B,UAAU,EAAEtC,aAAa,CAACt0B,IAAI,CAAAC,KAAA,CAAlBq0B,aAAa,EAASsC,UAAU,CAAC;;;EAKzD,IAAI,CAACloB,iBAAiB,EAAE;IACpBzJ,OAAO,CAACmxB,YAAY,GAAG,QAAQ;IAE/B,SAAAngB,UAAA,GAAAvF,+BAAA,CAAqBe,OAAO,GAAAyE,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArF,IAAA,GAAE;MAAA,IAAAkmB,cAAA;MAAA,IAAnBve,MAAM,GAAArC,MAAA,CAAApF,KAAA;MAGb,IAAMwlB,SAAQ,GAAGr5B,SAAS,CAACsb,MAAM,EAAErG,IAAI,EAAE7H,IAAI,CAAC;MAE9C,IAAMksB,SAAQ,GAAGjrB,eAAe,CAACiN,MAAM,CAAC;MACxC,IAAMwe,eAAe,GAAGR,SAAQ,IAAI,IAAI,KAAI/qB,oBAAoB,aAApBA,oBAAoB,uBAApBA,oBAAoB,CAAE9D,GAAG,CAAC6uB,SAAQ,CAAC;MAE/E,IAAMS,UAAU,GAAGjC,qBAAqB,IAAI,CAACD,kBAAkB,KAAKwB,SAAQ,IAAIS,eAAe,CAAC;MAChG,IAAME,aAAa,GAAGD,UAAU,GAAGh7B,qBAAqB,GAAG5C,QAAQ;MACnE,IAAM89B,WAAW,GAAGZ,SAAQ,GAAGv6B,mBAAmB,GAAG3C,QAAQ;MAC7D,IAAMkM,MAAK,GAAA8T,QAAA,KACJtd,2BAA2B,EAC3BssB,iBAAiB,CAAC7P,MAAM,CAAC,EACzB2e,WAAW,EACXD,aAAa,CACnB;MAED,IAAMt4B,MAAI,GAAG0S,aAAa,CAACkH,MAAM,CAAC;MAClC,IAAMzZ,OAAK,GAAGuS,aAAa,CAACkH,MAAM,EAAE,CAAC,CAAC;MAEtC,IAAM8d,QAAO,IAAAS,cAAA,GAAG3O,aAAa,CAAC5P,MAAM,EAAEjT,MAAK,CAAC,YAAAwxB,cAAA,GAAIK,iBAAiB,CAAC5e,MAAM,GAAG,CAAC,CAAC;MAE7E,IAAMqe,WAAU,GAAGC,UAAU,CAAC5xB,OAAO,EAAE8uB,aAAa,EAAEsC,QAAO,EAAE/wB,MAAK,EAAE3G,MAAI,EAAE,CAAC,EAAEG,OAAK,GAAGH,MAAI,EAAEwR,OAAO,CAAC;MACrG,IAAIymB,WAAU,EAAEtC,aAAa,CAACt0B,IAAI,CAAAC,KAAA,CAAlBq0B,aAAa,EAASsC,WAAU,CAAC;;;EAKzD,IAAI/B,eAAe,EAAE;IACjB5vB,OAAO,CAACywB,WAAW,GAAGp8B,MAAM,CAACC,eAAe;IAC5C0L,OAAO,CAAC0wB,SAAS,GAAG,CAAC;IACrB1wB,OAAO,CAACmyB,WAAW,GAAGnD,SAAS,GAAG,CAAC,GAAG,GAAG;IAEzC,IAAAoD,WAAA,GAAuCnC,QAAQ;MAAvCv2B,MAAI,GAAA04B,WAAA;MAAEz4B,KAAG,GAAAy4B,WAAA;MAAAC,WAAA,GAAsBpC,QAAQ;MAA1Bp2B,OAAK,GAAAw4B,WAAA;MAAEv4B,QAAM,GAAAu4B,WAAA;IAClCryB,OAAO,CAACsyB,UAAU,CAAC54B,MAAI,EAAEC,KAAG,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;IAEjEqG,OAAO,CAACmyB,WAAW,GAAG,CAAC;;EAG3B,SAAApf,UAAA,GAAAtH,+BAAA,CAAiCsjB,mBAAmB,GAAA/b,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAApH,IAAA,GAAE;IAAA,IAA3C4mB,kBAAkB,GAAAvf,MAAA,CAAAnH,KAAA;IACzB,IAAM1R,UAAS,GAAGo4B,kBAAkB,CAACnS,IAAI;IACzC,IAAIjkB,gBAAgB,CAAChC,UAAS,CAAC,EAAE;IAEjC,IAAAq4B,sBAAA,GAAmBxC,sBAAsB,CAAC71B,UAAS,EAAE+L,UAAU,EAAE+S,MAAM,EAAExT,UAAU,CAAC;MAA7EwqB,SAAQ,GAAAuC,sBAAA;IACf,IAAAC,WAAA,GAAuCxC,SAAQ;MAAvCv2B,MAAI,GAAA+4B,WAAA;MAAE94B,KAAG,GAAA84B,WAAA;MAAAC,YAAA,GAAsBzC,SAAQ;MAA1Bp2B,OAAK,GAAA64B,YAAA;MAAE54B,QAAM,GAAA44B,YAAA;IAElC1yB,OAAO,CAACywB,WAAW,GAAG8B,kBAAkB,CAAC/7B,KAAK;IAC9CwJ,OAAO,CAAC0wB,SAAS,GAAG,CAAC;IACrB1wB,OAAO,CAAC8wB,SAAS,EAAE;IACnB9wB,OAAO,CAACsyB,UAAU,CAAC54B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;;EAI7E,IAAIrE,QAAQ,EAAE;IACV,IAAAmF,oBAAA,GAAmCJ,kBAAkB,CAAC/E,QAAQ,CAAC;MAAAoF,qBAAA,GAAAD,oBAAA;MAAzDwS,KAAI,GAAAvS,qBAAA;MAAEwS,KAAI,GAAAxS,qBAAA;MAAAC,sBAAA,GAAAF,oBAAA;MAAI2K,KAAI,GAAAzK,sBAAA;MAAE0K,KAAI,GAAA1K,sBAAA;IAC9B,IAAMjB,MAAI,GAAG0S,aAAa,CAACa,KAAI,CAAC;IAChC,IAAMtT,KAAG,GAAG0S,UAAU,CAACa,KAAI,CAAC;IAC5B,IAAMrT,OAAK,GAAGuS,aAAa,CAAChH,KAAI,EAAE,CAAC,CAAC;IACpC,IAAMtL,QAAM,GAAGuS,UAAU,CAAChH,KAAI,EAAE,CAAC,CAAC;IAElCrF,OAAO,CAACywB,WAAW,GAAGp8B,MAAM,CAACM,cAAc;IAC3CqL,OAAO,CAAC2yB,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B3yB,OAAO,CAAC0wB,SAAS,GAAG,CAAC;IAErB1wB,OAAO,CAACsyB,UAAU,CAAC54B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,GAAG,CAAC,EAAEI,QAAM,GAAGH,KAAG,GAAG,CAAC,CAAC;IACzEqG,OAAO,CAAC2yB,WAAW,CAAC,EAAE,CAAC;;EAI3B,IAAI9oB,YAAY,IAAI,CAACqmB,QAAQ,EAAE;IAC3B,IAAO/gB,KAAK,GAAWtF,YAAY;MAArBuF,KAAK,GAAIvF,YAAY;IACnC7J,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACC,eAAe;IAC1C0L,OAAO,CAACwvB,QAAQ,CAACrgB,KAAK,GAAG9Z,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAE8Z,KAAK,GAAG/Z,KAAK,CAACC,QAAQ,GAAG,GAAG,EAAED,KAAK,CAACC,QAAQ,EAAED,KAAK,CAACC,QAAQ,CAAC;;EAIhH,IAAI25B,UAAU,EAAE;IACZ,IAAO2D,MAAM,GAAY3D,UAAU;MAApB4D,MAAM,GAAI5D,UAAU;IACnC,IAAO6D,WAAW,GAAcjlB,WAAW;MAAvBklB,QAAQ,GAAIllB,WAAW;IAE3C7N,OAAO,CAACuvB,SAAS,GAAGl7B,MAAM,CAACI,SAAS;IAEpC,IAAIq+B,WAAW,EAAE;MACb,SAAAE,UAAA,GAAAvnB,+BAAA,CAAqBqnB,WAAW,GAAAG,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAArnB,IAAA,GAAE;QAAA,IAAvB2H,OAAM,GAAA2f,MAAA,CAAApnB,KAAA;QACb,IAAMnS,MAAI,GAAG0S,aAAa,CAACkH,OAAM,CAAC;QAClC,IAAMzZ,OAAK,GAAGuS,aAAa,CAACkH,OAAM,EAAE,CAAC,CAAC;QACtCtT,OAAO,CAACwvB,QAAQ,CAAC91B,MAAI,GAAGk5B,MAAM,EAAE,CAAC,EAAE/4B,OAAK,GAAGH,MAAI,EAAEqG,MAAM,CAAC;;;IAGhE,IAAIgzB,QAAQ,EAAE;MACV,SAAAG,UAAA,GAAAznB,+BAAA,CAAkBsnB,QAAQ,GAAAI,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAvnB,IAAA,GAAE;QAAA,IAAjBmI,IAAG,GAAAqf,MAAA,CAAAtnB,KAAA;QACV,IAAMlS,KAAG,GAAG0S,UAAU,CAACyH,IAAG,CAAC;QAC3B,IAAMha,QAAM,GAAGuS,UAAU,CAACyH,IAAG,EAAE,CAAC,CAAC;QACjC9T,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE71B,KAAG,GAAGk5B,MAAM,EAAE/yB,KAAK,EAAEhG,QAAM,GAAGH,KAAG,CAAC;;;;EAMlE,IAAIjF,UAAU,EAAE;IACZ,IAAA0+B,iBAAA,GAAqCC,gBAAgB,CAAC3+B,UAAU,EAAEwR,UAAU,CAAC;MAAAotB,kBAAA,GAAAF,iBAAA;MAAvE15B,MAAI,GAAA45B,kBAAA;MAAE35B,KAAG,GAAA25B,kBAAA;MAAAC,mBAAA,GAAAH,iBAAA;MAAIv5B,OAAK,GAAA05B,mBAAA;MAAEz5B,QAAM,GAAAy5B,mBAAA;IAEhCvzB,OAAO,CAACywB,WAAW,GAAGp8B,MAAM,CAACK,UAAU;IACvCsL,OAAO,CAAC0wB,SAAS,GAAG,CAAC;IAErB,IAAI70B,iBAAiB,CAACnH,UAAU,CAAC,EAAE;MAC/BmF,OAAK,GAAGH,MAAI;;IAEhB,IAAIgC,cAAc,CAAChH,UAAU,CAAC,EAAE;MAC5BoF,QAAM,GAAGH,KAAG;;IAEhBqG,OAAO,CAACsyB,UAAU,CAAC54B,MAAI,GAAG,CAAC,EAAEC,KAAG,GAAG,CAAC,EAAEE,OAAK,GAAGH,MAAI,EAAEI,QAAM,GAAGH,KAAG,CAAC;;EAIrE,IAAO2hB,OAAO,GAAa7V,UAAU;IAArB8V,OAAO,GAAI9V,UAAU;EACrC,IAAM+tB,YAAY,GAAGpE,UAAU,GAAG,CAAC,IAAI7T,OAAO,GAAG,CAAC;EAClD,IAAMkY,eAAe,GAAGtE,aAAa,GAAG,CAAC,IAAI7T,OAAO,GAAG,CAAC;EACxD,IAAIkY,YAAY,IAAIC,eAAe,EAAE;IACjC,IAAID,YAAY,EAAE;MACd,IAAM5yB,CAAC,GAAGgZ,aAAa,CAACwV,UAAU,CAAC;MACnC,IAAMsE,QAAQ,GAAG1zB,OAAO,CAAC2zB,oBAAoB,CAAC,CAAC,EAAE/yB,CAAC,EAAE,CAAC,EAAEA,CAAC,GAAG9K,UAAU,CAAC;MACtE89B,kBAAkB,CAACF,QAAQ,EAAEt+B,WAAW,EAAEW,aAAa,CAAC;MACxDiK,OAAO,CAACuvB,SAAS,GAAGmE,QAAQ;MAC5B1zB,OAAO,CAACwvB,QAAQ,CAAC,CAAC,EAAE5uB,CAAC,EAAEd,KAAK,EAAEhK,UAAU,CAAC;;IAE7C,IAAI29B,eAAe,EAAE;MACjB,IAAM9yB,CAAC,GAAG+Y,gBAAgB,CAACyV,aAAa,CAAC;MACzC,IAAMuE,SAAQ,GAAG1zB,OAAO,CAAC2zB,oBAAoB,CAAChzB,CAAC,EAAE,CAAC,EAAEA,CAAC,GAAG7K,UAAU,EAAE,CAAC,CAAC;MACtE89B,kBAAkB,CAACF,SAAQ,EAAEt+B,WAAW,EAAEW,aAAa,CAAC;MACxDiK,OAAO,CAACuvB,SAAS,GAAGmE,SAAQ;MAC5B1zB,OAAO,CAACwvB,QAAQ,CAAC7uB,CAAC,EAAE,CAAC,EAAE7K,UAAU,EAAEiK,MAAM,CAAC;;;EAKlDC,OAAO,CAACmxB,YAAY,GAAG,QAAQ;EAE/B,SAAA0C,UAAA,GAAApoB,+BAAA,CAAgBgB,IAAI,GAAAqnB,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAloB,IAAA,GAAE;IAAA,IAAX5R,EAAC,GAAA+5B,MAAA,CAAAjoB,KAAA;IACR,SAAAkoB,WAAA,GAAAtoB,+BAAA,CAAgBe,OAAO,GAAAwnB,OAAA,IAAAA,OAAA,GAAAD,WAAA,IAAApoB,IAAA,GAAE;MAAA,IAAd1T,EAAC,GAAA+7B,OAAA,CAAAnoB,KAAA;MACR,IAAMnS,MAAI,GAAG0S,aAAa,CAACnU,EAAC,CAAC;MAC7B,IAAM4B,QAAK,GAAGuS,aAAa,CAACnU,EAAC,EAAE,CAAC,CAAC;MACjC,IAAM0B,KAAG,GAAG0S,UAAU,CAACtS,EAAC,CAAC;MACzB,IAAMD,SAAM,GAAGuS,UAAU,CAACtS,EAAC,EAAE,CAAC,CAAC;MAE/B,IAAMsG,OAAK,GAAA8T,QAAA,KACJne,kBAAkB,EAClBitB,SAAS,CAAChrB,EAAC,EAAE8B,EAAC,CAAC,CACrB;MACD,IAAMsiB,WAAW,GAAGzX,WAAW,CAAC3M,EAAC,EAAE8B,EAAC,EAAEsG,OAAK,CAAC;MAC5C,IAAIgc,WAAW,KAAK,IAAI,IAAIA,WAAW,KAAKxY,SAAS,EAAE;QACnD,IAAM8tB,YAAU,GAAGC,UAAU,CACzB5xB,OAAO,EACP8uB,aAAa,EACbzS,WAAW,EACXhc,OAAK,EACL3G,MAAI,EACJC,KAAG,EACHE,QAAK,GAAGH,MAAI,EACZI,SAAM,GAAGH,KAAG,CACf;QACD,IAAIg4B,YAAU,EAAEtC,aAAa,CAACt0B,IAAI,CAAAC,KAAA,CAAlBq0B,aAAa,EAASsC,YAAU,CAAC;;;;EAK7D,OAAOtC,aAAa;AACxB,CAAC;AAED,AAAO,IAAMuC,UAAU,GAAG,SAAbA,UAAUA,CACnB5xB,OAAiC,EACjC8uB,aAA4B,EAC5BzS,WAA4B,EAC5Bhc,KAAsB,EACtBihB,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB;EAElB,IAAIH,WAAW,KAAK,IAAI,EAAE;IACtB,OAAO,IAAI;;EAGf,IAAM4X,QAAQ,GAAGj0B,OAAO,CAACi0B,QAAQ,CAACC,IAAI,CAACl0B,OAAO,CAAC;EAC/C,IAAMm0B,UAAU,GAAG9zB,KAAK,CAAC3J,UAAU,GAAG,GAAG,GAAG2J,KAAK,CAACnK,QAAQ,GAAG,KAAK,GAAGmK,KAAK,CAAC5J,UAAU;EAErFuJ,OAAO,CAACujB,IAAI,GAAG4Q,UAAU;EACzBn0B,OAAO,CAACuvB,SAAS,GAAGlvB,KAAK,CAAC7J,KAAK;EAG/B,IAAQJ,SAAS,GAAwDiK,KAAK,CAAtEjK,SAAS;IAAEC,YAAY,GAA0CgK,KAAK,CAA3DhK,YAAY;IAAEC,UAAU,GAA8B+J,KAAK,CAA7C/J,UAAU;IAAEC,WAAW,GAAiB8J,KAAK,CAAjC9J,WAAW;IAAEJ,UAAU,GAAKkK,KAAK,CAApBlK,UAAU;EAEpE,IAAMi+B,MAAM,GAAGx7B,IAAI,CAAC2Y,KAAK,CAAC+P,MAAM,GAAGhrB,UAAU,CAAC;EAC9C,IAAM+9B,MAAM,GAAGz7B,IAAI,CAAC2Y,KAAK,CAACgQ,MAAM,GAAGnrB,SAAS,CAAC;EAC7C,IAAMk+B,UAAU,GAAG17B,IAAI,CAAC2Y,KAAK,CAACkK,SAAS,GAAGllB,WAAW,GAAGD,UAAU,CAAC;EACnE,IAAMi+B,WAAW,GAAG37B,IAAI,CAAC2Y,KAAK,CAACiL,UAAU,GAAGpmB,SAAS,GAAGC,YAAY,CAAC;EAGrE,IAAMm+B,OAAO,GAAGC,QAAQ,CAAClT,MAAM,GAAGnrB,SAAS,GAAGD,UAAU,GAAG,CAAC,CAAC;EAE7D,IAAIkK,KAAK,CAACzJ,eAAe,KAAK,EAAE,EAAE;IAC9BoJ,OAAO,CAACuvB,SAAS,GAAGlvB,KAAK,CAACzJ,eAAe;IACzCoJ,OAAO,CAACwvB,QAAQ,CAAClO,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,CAAC;IACvDxc,OAAO,CAACuvB,SAAS,GAAGlvB,KAAK,CAAC7J,KAAK;;EAGnC,IAAI,OAAO6lB,WAAW,KAAK,QAAQ,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;IACpEqY,SAAS,CAAC10B,OAAO,EAAEshB,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,EAAE;MACtD4E,QAAQ,CAACphB,OAAO,EAAEqc,WAAW,EAAEhc,KAAK,EAAEwD,SAAS,EAAEuwB,MAAM,EAAEI,OAAO,EAAEF,UAAU,EAAEC,WAAW,EAAEN,QAAQ,CAAC;KACvG,CAAC;IACF,OAAO,IAAI;GACd,MAAM,IAAI,OAAO5X,WAAW,KAAK,QAAQ,EAAE;IACxC,IAAMsY,YAAY,GAAGvY,qBAAqB,CAACpc,OAAO,EAAEqc,WAAW,EAAE+X,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,WAAW,CAAC;IACzG,IAAMK,gBAAgB,GAAG/U,yBAAyB,CAACxD,WAAW,EAAE+X,MAAM,EAAEC,MAAM,EAAEC,UAAU,EAAEC,WAAW,CAAC;IACxG,IAAMM,QAAQ,MAAApnB,MAAA,CAAOknB,YAAY,EAAKC,gBAAgB,CAAC;IAEvDF,SAAS,CAAC10B,OAAO,EAAEshB,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,EAAE;mCACR;QAAA,IAAAsY,aAAA,GAAAC,OAAA,CAAAlpB,KAAA;UAAlC9T,CAAC,GAAA+8B,aAAA;UAAEE,MAAM,GAAAF,aAAA;QACjB,IAAQx0B,GAAG,GAAW00B,MAAM,CAApB10B,GAAG;UAAEF,IAAI,GAAK40B,MAAM,CAAf50B,IAAI;QAEjB,IAAAS,KAAA,GAAuCP,GAAG;UAAlC5G,IAAI,GAAAmH,KAAA;UAAElH,GAAG,GAAAkH,KAAA;UAAAC,MAAA,GAAsBR,GAAG;UAArBzG,KAAK,GAAAiH,MAAA;UAAEhH,MAAM,GAAAgH,MAAA;QAElC,IAAMhB,KAAK,GAAGjG,KAAK,GAAGH,IAAI;QAC1B,IAAMqG,MAAM,GAAGjG,MAAM,GAAGH,GAAG;QAE3B,IAAI0iB,WAAW,CAAC4Y,OAAO,EAAE;UACrBj1B,OAAO,CAAC0wB,SAAS,GAAG,CAAC;UACrB1wB,OAAO,CAACywB,WAAW,GAAG,SAAS;UAC/BzwB,OAAO,CAACsyB,UAAU,CAAC54B,IAAI,GAAG,GAAG,EAAEC,GAAG,GAAG,GAAG,EAAEmG,KAAK,GAAG,GAAG,EAAEC,MAAM,GAAG,GAAG,CAAC;;QAGxE,IAAMm1B,QAAQ,GAAGn9B,CAAC,GAAG,CAAC,GAAG2B,IAAI,GAAG4nB,MAAM;QACtC,IAAM6T,SAAS,GAAGp9B,CAAC,GAAG88B,QAAQ,CAACj9B,MAAM,GAAGiC,KAAK,GAAG0nB,MAAM,GAAG9F,SAAS;QAClE,IAAM2Z,SAAS,GAAGD,SAAS,GAAGD,QAAQ;QAEtCR,SAAS,CAAC10B,OAAO,EAAEk1B,QAAQ,EAAE3T,MAAM,EAAE6T,SAAS,EAAE5Y,UAAU,EAAE;UACxD,IAAIpc,IAAI,CAACG,OAAO,KAAK,QAAQ,EAAE;YAC3B,IAAQsb,IAAI,GAAKzb,IAAI,CAAbyb,IAAI;YACZ,IAAIA,IAAI,IAAI,IAAI,EAAE;cACduF,QAAQ,CACJphB,OAAO,EACP6b,IAAI,EACJxb,KAAK,EACLD,IAAI,CAACnK,SAAS,EACdyD,IAAI,EACJ+6B,QAAQ,CAAC96B,GAAG,GAAGxD,UAAU,GAAG,CAAC,CAAC,EAC9B2J,KAAK,EACLC,MAAM,EACNk0B,QAAQ,CACX;;;UAGT,IAAI7zB,IAAI,CAACG,OAAO,KAAK,OAAO,IAAIH,IAAI,CAACG,OAAO,KAAK,MAAM,EAAE;YACrDuuB,aAAa,CAAC9uB,OAAO,EAAEI,IAAI,EAAEC,KAAK,EAAEC,GAAG,CAAC;;SAE/C,CAAC;OACL;MAvCD,SAAA+0B,WAAA,GAAA5pB,+BAAA,CAA0BopB,QAAQ,CAACS,OAAO,EAAE,GAAAP,OAAA,IAAAA,OAAA,GAAAM,WAAA,IAAA1pB,IAAA;QAAA4pB,KAAA;;KAwC/C,CAAC;IAEF,OAAOV,QAAQ,CAACnnB,MAAM,CAAC,UAAA+Q,IAAA;MAAA,IAAGre,IAAI,GAAAqe,IAAA,CAAJre,IAAI;MAAA,OAAOA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEmS,OAAO;MAAC;;EAEvD,OAAO,IAAI;AACf,CAAC;AAED,IAAMmiB,SAAS,GAAG,SAAZA,SAASA,CACX10B,OAAiC,EACjCshB,MAAc,EACdC,MAAc,EACd9F,SAAiB,EACjBe,UAAkB,EAClBviB,QAAoB;EAEpB+F,OAAO,CAACw1B,IAAI,EAAE;EACdx1B,OAAO,CAAC8wB,SAAS,EAAE;EACnB9wB,OAAO,CAACsK,IAAI,CAACgX,MAAM,EAAEC,MAAM,EAAE9F,SAAS,EAAEe,UAAU,CAAC;EACnDxc,OAAO,CAACy1B,IAAI,EAAE;EACdx7B,QAAQ,EAAE;EACV+F,OAAO,CAAC01B,OAAO,EAAE;AACrB,CAAC;AAGD,IAAMrC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIl5B,SAAoB,EAAE+L,UAAsB;EAClE,IAAQwD,WAAW,GAAKxD,UAAU,CAA1BwD,WAAW;EAEnB,IAAMmmB,kBAAkB,GAAGn0B,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM21B,qBAAqB,GAAGj0B,iBAAiB,CAAC1B,SAAS,CAAC;EAG1D,IAAAoC,oBAAA,GAAmBlC,kBAAkB,CAACF,SAAS,CAAC;IAAzCjC,GAAG,GAAAqE,oBAAA;IAAEpE,GAAG,GAAAoE,oBAAA;EAGf,IAAAwe,YAAA,GAAkBrR,WAAW,CAACxR,GAAG,CAAC;IAA7BwB,IAAI,GAAAqhB,YAAA;IAAEphB,GAAG,GAAAohB,YAAA;EACd,IAAAC,aAAA,GAAsBtR,WAAW,CAACvR,GAAG,EAAEtE,OAAO,CAAC;IAA1CgG,KAAK,GAAAmhB,aAAA;IAAElhB,MAAM,GAAAkhB,aAAA;EAGlB,IAAI6U,kBAAkB,EAAE;IACpBh2B,KAAK,GAAG,GAAG;;EAEf,IAAIi2B,qBAAqB,EAAE;IACvBh2B,MAAM,GAAG,GAAG;;EAGhB,OAAO,CACH,CAACJ,IAAI,EAAEC,GAAG,CAAC,EACX,CAACE,KAAK,EAAEC,MAAM,CAAC,CAClB;AACL,CAAC;AAGD,IAAMk2B,sBAAsB,GAAG,SAAzBA,sBAAsBA,CACxB71B,SAAoB,EACpB+L,UAAsB,EAEtB+S,MAAU,EACV3K,MAAU;EAEV,IAAQ5E,WAAW,GAAsCxD,UAAU,CAA3DwD,WAAW;IAAEgQ,gBAAgB,GAAoBxT,UAAU,CAA9CwT,gBAAgB;IAAEE,aAAa,GAAK1T,UAAU,CAA5B0T,aAAa;EAEpD,IAAMiW,kBAAkB,GAAGn0B,cAAc,CAACvB,SAAS,CAAC;EACpD,IAAM21B,qBAAqB,GAAGj0B,iBAAiB,CAAC1B,SAAS,CAAC;EAE1D,IAAOkf,OAAO,GAAaJ,MAAM;IAAjBK,OAAO,GAAIL,MAAM;EACjC,IAAO0B,OAAO,GAAarM,MAAM;IAAjBsM,OAAO,GAAItM,MAAM;EAGjC,IAAAyD,oBAAA,GAAmB1X,kBAAkB,CAACF,SAAS,CAAC;IAAzCjC,GAAG,GAAA6Z,oBAAA;IAAE5Z,GAAG,GAAA4Z,oBAAA;EACf,IAAO9E,IAAI,GAAU/U,GAAG;IAAXgV,IAAI,GAAIhV,GAAG;EACxB,IAAOkN,IAAI,GAAUjN,GAAG;IAAXkN,IAAI,GAAIlN,GAAG;EAGxB,IAAAw9B,aAAA,GAAkBjsB,WAAW,CAACxR,GAAG,CAAC;IAA7BwB,IAAI,GAAAi8B,aAAA;IAAEh8B,GAAG,GAAAg8B,aAAA;EACd,IAAAC,aAAA,GAAsBlsB,WAAW,CAACvR,GAAG,EAAEtE,OAAO,CAAC;IAA1CgG,KAAK,GAAA+7B,aAAA;IAAE97B,MAAM,GAAA87B,aAAA;EAGlB,IAAM5qB,OAAO,GAAG0O,gBAAgB,CAAC,CAAC,CAAC;EACnC,IAAMxO,OAAO,GAAG0O,aAAa,CAAC,CAAC,CAAC;EAGhC,IAAMY,OAAO,GAAGd,gBAAgB,CAACL,OAAO,CAAC;EACzC,IAAMoB,OAAO,GAAGb,aAAa,CAACN,OAAO,CAAC;EAEtC,IAAI4W,QAAQ,GAAG,KAAK;EAGpB,IAAI73B,eAAe,CAACghB,OAAO,EAAEpM,IAAI,EAAE7H,IAAI,GAAG,CAAC,CAAC,EAAE;IAC1C,IAAMqJ,IAAI,GAAG+L,OAAO;IACpB,IAAI3gB,KAAK,IAAI4U,IAAI,EAAE;MACf5U,KAAK,GAAG4U,IAAI;MACZyhB,QAAQ,GAAG,IAAI;;;EAGvB,IAAI73B,eAAe,CAACihB,OAAO,EAAEpM,IAAI,EAAE7H,IAAI,GAAG,CAAC,CAAC,EAAE;IAC1C,IAAMoJ,KAAI,GAAGgM,OAAO;IACpB,IAAI3gB,MAAM,IAAI2U,KAAI,EAAE;MAChB3U,MAAM,GAAG2U,KAAI;MACbyhB,QAAQ,GAAG,IAAI;;;EAKvB,IAAI93B,aAAa,CAAC6U,IAAI,EAAEoM,OAAO,EAAEsB,OAAO,GAAGtB,OAAO,CAAC,EAAE;IACjD3f,IAAI,GAAG,CAAC,GAAG;IAEX,IAAMm8B,cAAc,GAAGlb,OAAO,GAAGtB,OAAO,GAAG,CAAC;IAC5C,IAAIjU,IAAI,IAAIywB,cAAc,EAAE;MACxB,IAAIzwB,IAAI,KAAKywB,cAAc,EAAEh8B,KAAK,GAAGmR,OAAO,CAAC,KACxCnR,KAAK,GAAG,CAAC,GAAG;MACjBq2B,QAAQ,GAAG,IAAI;;;EAGvB,IAAI93B,aAAa,CAAC8U,IAAI,EAAEoM,OAAO,EAAEsB,OAAO,GAAGtB,OAAO,CAAC,EAAE;IACjD3f,GAAG,GAAG,CAAC,GAAG;IAEV,IAAMm8B,cAAc,GAAGlb,OAAO,GAAGtB,OAAO,GAAG,CAAC;IAC5C,IAAIjU,IAAI,IAAIywB,cAAc,EAAE;MACxB,IAAIzwB,IAAI,KAAKywB,cAAc,EAAEh8B,MAAM,GAAGoR,OAAO,CAAC,KACzCpR,MAAM,GAAG,CAAC,GAAG;MAClBo2B,QAAQ,GAAG,IAAI;;;EAIvB,IAAIL,kBAAkB,IAAIlV,OAAO,GAAG,CAAC,EAAE;IACnCuV,QAAQ,GAAG,IAAI;;EAEnB,IAAIJ,qBAAqB,IAAIlV,OAAO,GAAG,CAAC,EAAE;IACtCsV,QAAQ,GAAG,IAAI;;EAInB,IAAIL,kBAAkB,EAAE;IACpBh2B,KAAK,GAAG,GAAG;;EAEf,IAAIi2B,qBAAqB,EAAE;IACvBh2B,MAAM,GAAG,GAAG;;EAGhB,OAAO,CACH,CACI,CAACJ,IAAI,EAAEC,GAAG,CAAC,EACX,CAACE,KAAK,EAAEC,MAAM,CAAC,CAClB,EACDo2B,QAAQ,CACa;AAC7B,CAAC;AAED,IAAMZ,YAAY,GAAG,SAAfA,YAAYA,CAAI3vB,MAAyB;EAC3C,IAAAo2B,qBAAA,GAA0Bp2B,MAAM,CAAC4K,qBAAqB,EAAE;IAAhDzK,KAAK,GAAAi2B,qBAAA,CAALj2B,KAAK;IAAEC,MAAM,GAAAg2B,qBAAA,CAANh2B,MAAM;EACrB,IAAAi2B,OAAA,GAAsC/3B,MAAM;IAAAg4B,qBAAA,GAAAD,OAAA,CAAtCv2B,gBAAgB;IAAEy2B,KAAK,GAAAD,qBAAA,cAAG,CAAC,GAAAA,qBAAA;EACjC,IAAIC,KAAK,GAAG,CAAC,EAAE;IACXA,KAAK,GAAG,CAAC;;EAEb,IAAMC,cAAc,GAAGv9B,IAAI,CAAC2Y,KAAK,CAACzR,KAAK,GAAGo2B,KAAK,CAAC;EAChD,IAAME,eAAe,GAAGx9B,IAAI,CAAC2Y,KAAK,CAACxR,MAAM,GAAGm2B,KAAK,CAAC;EAElD,IAAIv2B,MAAM,CAACG,KAAK,KAAKq2B,cAAc,IAAIx2B,MAAM,CAACI,MAAM,KAAKq2B,eAAe,EAAE;IACtE,IAAMp2B,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,CAAC;IACvC,IAAID,OAAO,EAAE;MACTL,MAAM,CAACG,KAAK,GAAGq2B,cAAc;MAC7Bx2B,MAAM,CAACI,MAAM,GAAGq2B,eAAe;MAC/Bp2B,OAAO,CAACq2B,KAAK,CAACH,KAAK,EAAEA,KAAK,CAAC;;;AAGvC,CAAC;AAED,IAAMhE,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIoE,GAAW;EAClC,IAAI9+B,CAAC,GAAG,EAAE;EACV,IAAI8oB,CAAC,GAAG,CAAC;EACT,OAAOgW,GAAG,GAAG,CAAC,EAAE;IACZhW,CAAC,GAAG,CAACgW,GAAG,GAAG,CAAC,IAAI,EAAE;IAClB9+B,CAAC,GAAGwf,MAAM,CAACC,YAAY,CAAC,EAAE,GAAGqJ,CAAC,CAAC,GAAG9oB,CAAC;IACnC8+B,GAAG,GAAI,CAACA,GAAG,GAAGhW,CAAC,IAAI,EAAE,GAAI,CAAC;;EAE9B,OAAO9oB,CAAC,IAAI,EAAE;AAClB,CAAC;AAED,IAAMo8B,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAIF,QAAwB,EAAE6C,GAAW,EAAEC,OAAe;EAC9E,IAAMC,GAAG,GAAG,SAANA,GAAGA,CAAIx+B,CAAS;IAAA,OAAK,CAAC,GAAG,GAAGW,IAAI,CAAC2Y,KAAK,CAACtZ,CAAC,CAAC,CAAC+jB,QAAQ,CAAC,EAAE,CAAC,EAAEnf,KAAK,CAAC,CAAC,CAAC,CAAC;;EAEvE,IAAM65B,IAAI,GAAG,SAAPA,IAAIA,CAAIz+B,CAAS;IAAA,OAAK,GAAG,GAAGW,IAAI,CAAC+9B,GAAG,CAAE1+B,CAAC,GAAGW,IAAI,CAACg+B,EAAE,GAAI,CAAC,CAAC;;EAE7D,IAAM5K,MAAM,GAAG,SAATA,MAAMA,CAAI/zB,CAAS;IAAA,OAAK,GAAG,GAAGW,IAAI,CAACi+B,GAAG,CAAC,GAAG,GAAG5+B,CAAC,EAAE,GAAG,CAAC;;EAC1D,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAI,EAAE,EAAE,EAAEA,CAAC,EAAE;IAC1B,IAAM++B,CAAC,GAAG/+B,CAAC,GAAG,EAAE;IAChB27B,QAAQ,CAACqD,YAAY,CAACD,CAAC,EAAEP,GAAG,GAAGE,GAAG,CAACzK,MAAM,CAACwK,OAAO,GAAGE,IAAI,CAACI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;;AAElF,CAAC;AAGD,AAAO,IAAME,WAAW,GAAG,SAAdA,WAAWA;EACpB,IAAAC,QAAA,GAA6Bh5B,MAAM;IAA3BwB,gBAAgB,GAAAw3B,QAAA,CAAhBx3B,gBAAgB;EACxB,OAAO,CAACA,gBAAgB,GAAG,CAAC,IAAIA,gBAAgB;AACpD,CAAC;AAGD,AAAO,IAAMg1B,QAAQ,GAAG,SAAXA,QAAQA,CAAI16B,CAAS;EAC9B,IAAAm9B,QAAA,GAA6Bj5B,MAAM;IAA3BwB,gBAAgB,GAAAy3B,QAAA,CAAhBz3B,gBAAgB;EACxB,OAAO7G,IAAI,CAAC2Y,KAAK,CAAC,CAACxX,CAAC,GAAGi9B,WAAW,EAAE,IAAIv3B,gBAAgB,CAAC,GAAGA,gBAAgB;AAChF,CAAC;;AC/qBM,IAAM03B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI/wB,UAAuB;;EACrD,OAAO;IACH+oB,aAAa,EAAE,CAAA/oB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE+oB,aAAa,KAAI,CAAC;IAC7CC,UAAU,EAAE,CAAAhpB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEgpB,UAAU,KAAI,CAAC;IACvC3lB,iBAAiB,EAAE,CAAArD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEqD,iBAAiB,KAAI,KAAK;IACzDD,cAAc,EAAE,CAAApD,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEoD,cAAc,KAAI,KAAK;IACnD0lB,aAAa,EAAE,CAAA9oB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAE8oB,aAAa,KAAI,KAAK;IACjDkI,cAAc,EAAE,CAAAhxB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEgxB,cAAc,KAAI,KAAK;IACnDthC,UAAU,GAAAuhC,qBAAA,GAAEjxB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEtQ,UAAU,YAAAuhC,qBAAA,GAAIhiC,KAAK,CAACS,UAAU;IACtDC,aAAa,GAAAuhC,qBAAA,GAAElxB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAErQ,aAAa,YAAAuhC,qBAAA,GAAIjiC,KAAK,CAACU,aAAa;IAC/DX,WAAW,GAAAmiC,qBAAA,GAAEnxB,UAAU,aAAVA,UAAU,uBAAVA,UAAU,CAAEhR,WAAW,YAAAmiC,qBAAA,GAAIljC,MAAM,CAACe;GAClD;AACL,CAAC;;AC6HD,IAAMoiC,KAAK,GAAGC,gBAAU,CAAuB,UAACC,KAAK,EAAE3tB,GAAG;;EACtD,IAAM4tB,SAAS,GAAG3tB,YAAM,CAAoB,IAAI,CAAC;EACjD,IAAMuM,UAAU,GAAGvM,YAAM,CAAiB,IAAI,CAAC;EAE/C,IAAAxL,SAAA,GAAkCC,cAAQ,CAAK9K,kBAAkB,CAAC;IAA3DwkB,SAAS,GAAA3Z,SAAA;IAAEo5B,YAAY,GAAAp5B,SAAA;EAC9B,IAAAG,UAAA,GAAoCF,cAAQ,CAAK7K,MAAM,CAAC;IAAjD6R,UAAU,GAAA9G,UAAA;IAAEk5B,aAAa,GAAAl5B,UAAA;EAEhC,IAAMm5B,aAAa,IAAAC,gBAAA,GAAGL,KAAK,CAACv9B,SAAS,YAAA49B,gBAAA,GAAI/jC,YAAY;EAErD,IAAA8K,UAAA,GAAwCL,cAAQ,CAAYq5B,aAAa,CAAC;IAAnErhB,YAAY,GAAA3X,UAAA;IAAEk5B,eAAe,GAAAl5B,UAAA;EACpC,IAAAqJ,UAAA,GAAgC1J,cAAQ,CAAmB,IAAI,CAAC;IAAzDnJ,QAAQ,GAAA6S,UAAA;IAAE8vB,WAAW,GAAA9vB,UAAA;EAC5B,IAAAG,UAAA,GAAoC7J,cAAQ,CAAY,IAAI,CAAC;IAAtDwwB,UAAU,GAAA3mB,UAAA;IAAE4vB,aAAa,GAAA5vB,UAAA;EAChC,IAAAG,UAAA,GAAsChK,cAAQ,CAAqC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAAzFoP,WAAW,GAAApF,UAAA;IAAE0vB,cAAc,GAAA1vB,UAAA;EAClC,IAAAG,UAAA,GAAoCnK,cAAQ,CAAmB,IAAI,CAAC;IAA7D/J,UAAU,GAAAkU,UAAA;IAAEwvB,aAAa,GAAAxvB,UAAA;EAChC,IAAAG,UAAA,GAAgCtK,cAAQ,CAAK1K,OAAO,CAAC;IAA9CggB,QAAQ,GAAAhL,UAAA;IAAEsvB,WAAW,GAAAtvB,UAAA;EAE5B,IAAAG,UAAA,GAA8BzK,cAAQ,CAAC,CAAC,CAACi5B,KAAK,CAACY,SAAS,CAAC;IAAlD9hB,OAAO,GAAAtN,UAAA;IAAEqvB,UAAU,GAAArvB,UAAA;EAE1B,IAAAG,WAAA,GAAkD5K,cAAQ,CAAYq5B,aAAa,CAAC;IAA7EU,iBAAiB,GAAAnvB,WAAA;IAAEovB,oBAAoB,GAAApvB,WAAA;EAC9C,IAAImvB,iBAAiB,KAAKV,aAAa,EAAE;IACrCW,oBAAoB,CAACX,aAAa,CAAC;IACnCE,eAAe,CAACF,aAAa,CAAC;;EAGlC,IAAAY,WAAA,GAAkCj6B,cAAQ,CAAkB,EAAE,CAAC;IAAxDk6B,SAAS,GAAAD,WAAA;IAAEE,YAAY,GAAAF,WAAA;EAC9B,IAAAG,WAAA,GAAoDp6B,cAAQ,CAAC,KAAK,CAAC;IAA5D6X,kBAAkB,GAAAuiB,WAAA;IAAEC,qBAAqB,GAAAD,WAAA;EAEhD,IAAAE,kBAAA,GAAmEC,iBAAiB,CAAC;MAAEjvB,GAAG,EAAEwM;KAAY,CAAC;IAAA0iB,qBAAA,GAAAF,kBAAA,CAAjGj5B,KAAK;IAAElB,WAAW,GAAAq6B,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IAAAC,qBAAA,GAAAH,kBAAA,CAAEh5B,MAAM;IAAEhB,YAAY,GAAAm6B,qBAAA,cAAG,IAAI,GAAAA,qBAAA;EAE9D,IAAMzd,SAAS,GAAGvc,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAACjc,SAAS,EAAE,GAAG,CAAC;KAAE,CAACic,KAAK,CAACjc,SAAS,CAAC,CAAC;EAC/F,IAAMe,UAAU,GAAGtd,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAAClb,UAAU,EAAE,EAAE,CAAC;KAAE,CAACkb,KAAK,CAAClb,UAAU,CAAC,CAAC;EACjG,IAAM0G,aAAa,GAAGhkB,aAAO,CAAC;IAAA,OAAM8E,2BAA2B,CAAC0zB,KAAK,CAACxU,aAAa,EAAE,IAAI,CAAC;KAAE,CAACwU,KAAK,CAACxU,aAAa,CAAC,CAAC;EAClH,IAAMC,iBAAiB,GAAGjkB,aAAO,CAC7B;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAACvU,iBAAiB,EAAE,EAAE,CAAC;KACxD,CAACuU,KAAK,CAACvU,iBAAiB,CAAC,CAC5B;EAED,IAAMrd,aAAa,GAAG5G,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAAC5xB,aAAa,EAAE,IAAI,CAAC;KAAE,CAAC4xB,KAAK,CAAC5xB,aAAa,CAAC,CAAC;EAC5G,IAAMC,UAAU,GAAG7G,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAAC3xB,UAAU,EAAE,IAAI,CAAC;KAAE,CAAC2xB,KAAK,CAAC3xB,UAAU,CAAC,CAAC;EACnG,IAAMC,cAAc,GAAG9G,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAAC1xB,cAAc,EAAE,IAAI,CAAC;KAAE,CAAC0xB,KAAK,CAAC1xB,cAAc,CAAC,CAAC;EAC/G,IAAMC,WAAW,GAAG/G,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAACzxB,WAAW,EAAE,IAAI,CAAC;KAAE,CAACyxB,KAAK,CAACzxB,WAAW,CAAC,CAAC;EAEtG,IAAMK,YAAY,GAAGpH,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAACpxB,YAAY,EAAE,IAAI,CAAC;KAAE,CAACoxB,KAAK,CAACpxB,YAAY,CAAC,CAAC;EACzG,IAAMD,eAAe,GAAGnH,aAAO,CAAC;IAAA,OAAMsE,qBAAqB,CAACk0B,KAAK,CAACrxB,eAAe,EAAE,IAAI,CAAC;KAAE,CAACqxB,KAAK,CAACrxB,eAAe,CAAC,CAAC;EAElH,IAAMR,YAAY,GAAG3G,aAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC4zB,KAAK,CAACyB,QAAQ,EAAE,KAAK,CAAC;KAAE,CAACzB,KAAK,CAACyB,QAAQ,CAAC,CAAC;EAE3F,IAAMvzB,UAAU,GAAG1G,aAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC4zB,KAAK,CAAC9xB,UAAU,EAAE,IAAI,CAAC;KAAE,CAAC8xB,KAAK,CAAC9xB,UAAU,CAAC,CAAC;EAC5F,IAAMhB,WAAW,GAAG1F,aAAO,CAAC;IAAA,OAAM+E,oBAAoB,CAACyzB,KAAK,CAAC9yB,WAAW,EAAE,EAAE,CAAC;KAAE,CAAC8yB,KAAK,CAAC9yB,WAAW,CAAC,CAAC;EACnG,IAAMT,QAAQ,GAAGjF,aAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC4zB,KAAK,CAACvzB,QAAQ,EAAE,EAAE,CAAC;KAAE,CAACuzB,KAAK,CAACvzB,QAAQ,CAAC,CAAC;EACpF,IAAMi1B,QAAQ,GAAGl6B,aAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC4zB,KAAK,CAAC0B,QAAQ,EAAE,EAAE,CAAC;KAAE,CAAC1B,KAAK,CAAC0B,QAAQ,CAAC,CAAC;EACpF,IAAMnW,SAAS,GAAG/jB,aAAO,CAAC;IAAA,OAAM4E,cAAc,CAAC4zB,KAAK,CAACzU,SAAS,EAAEjtB,kBAAkB,CAAC;KAAE,CAAC0hC,KAAK,CAACzU,SAAS,CAAC,CAAC;EAEvG,IAAM7c,UAAU,GAAuBlH,aAAO,CAAC;IAAA,OAAMi4B,iBAAiB,CAACO,KAAK,CAACtxB,UAAU,CAAC;KAAE,CAACsxB,KAAK,CAACtxB,UAAU,CAAC,CAAC;EAC7G,IAAM2oB,mBAAmB,IAAAsK,qBAAA,GAAG3B,KAAK,CAAC3I,mBAAmB,YAAAsK,qBAAA,GAAIplC,aAAa;EAEtE,IAAMkG,SAAS,GAAG+E,aAAO,CAAC;IAAA,OAAMxC,iBAAiB,CAAC+Z,YAAY,CAAC;KAAE,CAACA,YAAY,CAAC,CAAC;EAEhF,IAAMlQ,oBAAoB,GAAGrH,aAAO,CAChC;IAAA,OACIw4B,KAAK,CAACrxB,eAAe,GACf,IAAImH,GAAG,CAACtS,mBAAmB,CAACf,SAAS,CAAC,CAAC,UAAClC,CAAS;MAAA,OAAKoO,eAAe,CAACpO,CAAC,CAAC;MAAC,CAACyV,MAAM,CAAC,UAACzV,CAAC;MAAA,OAAKA,CAAC,IAAI,IAAI;MAAC,CAAC,GACnG,IAAI;KACd,CAACy/B,KAAK,CAACrxB,eAAe,EAAEA,eAAe,EAAElM,SAAS,CAAC,CACtD;EACD,IAAMqM,iBAAiB,GAAGtH,aAAO,CAC7B;IAAA,OACIw4B,KAAK,CAACpxB,YAAY,GACZ,IAAIkH,GAAG,CAACrS,gBAAgB,CAAChB,SAAS,CAAC,CAAC,UAACJ,CAAS;MAAA,OAAKuM,YAAY,CAACvM,CAAC,CAAC;MAAC,CAAC2T,MAAM,CAAC,UAACzV,CAAC;MAAA,OAAKA,CAAC,IAAI,IAAI;MAAC,CAAC,GAC7F,IAAI;KACd,CAACy/B,KAAK,CAACpxB,YAAY,EAAEA,YAAY,EAAEnM,SAAS,CAAC,CAChD;EAED,IAAOwe,UAAU,GAAgBR,SAAS;IAAvBS,UAAU,GAAIT,SAAS;EAE1C,IAAOmhB,SAAS,GAAevlB,QAAQ;IAArBwlB,SAAS,GAAIxlB,QAAQ;EACvC,IAAMpO,QAAQ,GAAG2zB,SAAS,KAAK,CAAC,CAAC,IAAIC,SAAS,KAAK,CAAC,CAAC;EAIrD,IAAMC,iBAAiB,GAAG,EAAAC,kBAAA,GAAC/B,KAAK,CAACgC,WAAW,YAAAD,kBAAA,GAAI,KAAK,MAAM,KAAK;EAChE,IAAME,aAAa,GAAG,OAAOjC,KAAK,CAACgC,WAAW,KAAK,QAAQ,GAAGhC,KAAK,CAACgC,WAAW,GAAG,CAAC;EACnF,IAAME,YAAY,GAAG16B,aAAO,CAAC;IAAA,OAAMkuB,eAAe,CAAC3R,SAAS,CAAC;KAAE,CAAC+d,iBAAiB,GAAGG,aAAa,GAAGle,SAAS,CAAC,CAAC;EAC/G,IAAMoe,SAAS,GAAG36B,aAAO,CAAC;IAAA,OAAMkuB,eAAe,CAAC5Q,UAAU,CAAC;KAAE,CAACgd,iBAAiB,GAAGG,aAAa,GAAGnd,UAAU,CAAC,CAAC;EAC9Gtd,aAAO,CAAC;IACJ,IAAI,CAACs6B,iBAAiB,EAAE;IAExBI,YAAY,CAAC9L,QAAQ,CAACrS,SAAS,CAAC;IAChCoe,SAAS,CAAC/L,QAAQ,CAACtR,UAAU,CAAC;GAIjC,EAAE,CAACgd,iBAAiB,EAAEG,aAAa,EAAEle,SAAS,EAAEe,UAAU,CAAC,CAAC;EAG7D,IAAQ2S,aAAa,GAAiB/oB,UAAU,CAAxC+oB,aAAa;IAAEC,UAAU,GAAKhpB,UAAU,CAAzBgpB,UAAU;EACjC,IAAMlpB,UAAU,GAAGhH,aAAO,CACtB;IAAA,OAAMysB,cAAc,CAAC,CAACwD,aAAa,EAAEC,UAAU,CAAC,EAAE3pB,UAAU,EAAEm0B,YAAY,EAAEC,SAAS,CAAC;KACtF,CAAC1K,aAAa,EAAEC,UAAU,EAAE3pB,UAAU,EAAEm0B,YAAY,EAAEC,SAAS,CAAC,CACnE;EAGD,IAAQ5M,eAAe,GAA8B/mB,UAAU,CAAvD+mB,eAAe;IAAEvjB,WAAW,GAAiBxD,UAAU,CAAtCwD,WAAW;IAAEC,UAAU,GAAKzD,UAAU,CAAzByD,UAAU;EAChD,IAAMxD,YAAY,GAAGjH,aAAO,CACxB;IAAA,OAAM+tB,eAAe,CAAC,CAACruB,WAAW,EAAEG,YAAY,CAAC,CAAC;KAGlD,CAACkuB,eAAe,EAAEruB,WAAW,EAAEG,YAAY,EAAE4K,UAAU,EAAE,CAAC,CAC7D;EAGDyK,qBAAe,CAAC;IACZ,IAAIsjB,KAAK,CAACoC,cAAc,EAAE;MACtBpC,KAAK,CAACoC,cAAc,IAAArsB,MAAA,CAAKtH,YAAY,CAACsG,IAAI,MAAAgB,MAAA,CAAOtH,YAAY,CAACqG,OAAO,CAAC,CAAC;;GAE9E,EAAE,CAACrG,YAAY,EAAEuxB,KAAK,CAACoC,cAAc,CAAC,CAAC;EAExC,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAI5/B,SAAoB,EAAE6/B,MAAM;QAANA,MAAM;MAANA,MAAM,GAAG,KAAK;;IAC3D,IAAiBriB,OAAO,GAAKpB,UAAU,CAA/BtM,OAAO;IACf,IAAI,CAAC0N,OAAO,EAAE;IAEd,IAAOhb,MAAM,GAAUxC,SAAS;MAAjByC,IAAI,GAAIzC,SAAS;IAChC,IAAM6e,IAAI,GAAO,CAACpa,WAAW,EAAEG,YAAY,CAAC;IAC5C,IAAMka,MAAM,GAAO,CAACkW,aAAa,EAAEC,UAAU,CAAC;IAE9C1U,YAAY,CACR/C,OAAO,EACPqiB,MAAM,GAAGp9B,IAAI,GAAGD,MAAM,EACtBqc,IAAI,EACJC,MAAM,EACNxT,UAAU,EACV0S,SAAS,EACTjS,UAAU,EACV,UAACT,UAAc,EAAE0S,SAAa;MAC1B0f,aAAa,CAACpyB,UAAU,CAAC;MACzBmyB,YAAY,CAACzf,SAAS,CAAC;KAC1B,CACJ;GACJ;EAGD,IAAM8hB,eAAe,GAAG,SAAlBA,eAAeA,CAAI5S,YAAuB,EAAE/X,QAAQ,EAAS0qB,MAAM;QAAvB1qB,QAAQ;MAARA,QAAQ,GAAG,IAAI;;IAAA,IAAE0qB,MAAM;MAANA,MAAM,GAAG,KAAK;;IAC7E,IAAI,CAAC/gC,eAAe,CAACkB,SAAS,EAAEktB,YAAY,CAAC,EAAE;MAC3C2Q,eAAe,CAAC3Q,YAAY,CAAC;;IAGjC,IAAiB1P,OAAO,GAAKpB,UAAU,CAA/BtM,OAAO;IACf,IAAI,CAAC0N,OAAO,EAAE;IAEd,IAAIrI,QAAQ,EAAE;MACVyqB,iBAAiB,CAAC1S,YAAY,EAAE2S,MAAM,CAAC;;IAG3C,IAAItC,KAAK,CAACwC,kBAAkB,EAAE;MAC1B,IAAA9/B,mBAAA,GAAqCC,kBAAkB,CAACqC,iBAAiB,CAAC2qB,YAAY,CAAC,CAAC;QAAA/sB,oBAAA,GAAAF,mBAAA;QAAhF6S,IAAI,GAAA3S,oBAAA;QAAE4S,IAAI,GAAA5S,oBAAA;QAAAC,qBAAA,GAAAH,mBAAA;QAAIgL,IAAI,GAAA7K,qBAAA;QAAE8K,IAAI,GAAA9K,qBAAA;MAChCm9B,KAAK,CAACwC,kBAAkB,CAACjtB,IAAI,EAAEC,IAAI,EAAE9H,IAAI,EAAEC,IAAI,CAAC;;GAEvD;EAED,IAAM80B,iBAAiB,GAAG,SAApBA,iBAAiBA;IACnB9B,WAAW,CAACtkC,OAAO,CAAC;IACpBwkC,UAAU,CAAC,IAAI,CAAC;GACnB;EAED,IAAM6B,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIvuB,KAAc;IACrC,IAAI6rB,KAAK,CAACrwB,QAAQ,EAAE;MAChB,IAAOnC,KAAK,GAAW6O,QAAQ;QAAjB5O,KAAK,GAAI4O,QAAQ;MAC/B2jB,KAAK,CAACrwB,QAAQ,CAAC,CAAC;QAAEpP,CAAC,EAAEiN,KAAK;QAAEnL,CAAC,EAAEoL,KAAK;QAAE0G,KAAK,EAAEA,KAAK,KAAKhI,SAAS,GAAGgI,KAAK,GAAG8sB;OAAW,CAAC,CAAC;;IAE5FN,WAAW,CAACtkC,OAAO,CAAC;IACpBwkC,UAAU,CAAC,IAAI,CAAC;GACnB;EAED,IAAM8B,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAItmB,QAAY,EAAEuC,kBAAkB;QAAlBA,kBAAkB;MAAlBA,kBAAkB,GAAG,KAAK;;IAC9D,IAAOpR,KAAK,GAAW6O,QAAQ;MAAjB5O,KAAK,GAAI4O,QAAQ;IAC/B,IAAIlO,YAAY,CAACX,KAAK,EAAEC,KAAK,CAAC,EAAE;MAC5B;;IAGJ,IAAMm1B,aAAa,GAAGn2B,QAAQ,CAACe,KAAK,EAAEC,KAAK,CAAC;IAC5C,IAAIo1B,GAAG,GAAG,EAAE;IACZ,IAAID,aAAa,KAAK,IAAI,IAAIA,aAAa,KAAKz2B,SAAS,EAAE;MACvD02B,GAAG,GAAGD,aAAa;;IAEvBjC,WAAW,CAACtkB,QAAQ,CAAC;IACrB6kB,YAAY,CAAC2B,GAAG,CAAC;IACjBzB,qBAAqB,CAACxiB,kBAAkB,CAAC;IACzCkkB,cAAc,CAACpB,QAAQ,CAAAp+B,KAAA,SAAI+Y,QAAQ,CAAC,CAAC;GACxC;EAGD,IAAA0mB,iBAAA,GAAsD/C,KAAK,CAAnDne,UAAU;IAAVA,UAAU,GAAAkhB,iBAAA,cAAGC,QAAQ,GAAAD,iBAAA;IAAAE,cAAA,GAAyBjD,KAAK,CAA5Ble,OAAO;IAAPA,OAAO,GAAAmhB,cAAA,cAAGD,QAAQ,GAAAC,cAAA;EACjDvmB,qBAAe,CAAC;IACZ,IAAiBuD,OAAO,GAAKpB,UAAU,CAA/BtM,OAAO;IACf,IAAI,CAAC0N,OAAO,EAAE;IAEd,IAAMqB,IAAI,GAAO,CAACpa,WAAW,EAAEG,YAAY,CAAC;IAC5C,IAAMka,MAAM,GAAO,CAACkW,aAAa,EAAEC,UAAU,CAAC;IAE9C,IAAMnU,SAAS,GAAGlC,cAAc,CAACC,IAAI,EAAEvT,UAAU,EAAEwT,MAAM,EAAE,CAACM,UAAU,EAAEC,OAAO,CAAC,EAAEtT,UAAU,CAAC;IAC7F2xB,aAAa,CAAC5c,SAAS,CAAC;IACxBG,oBAAoB,CAACzD,OAAO,EAAEsD,SAAS,EAAE/U,UAAU,CAAC;GAIvD,EAAE,CAACsT,OAAO,EAAED,UAAU,CAAC,CAAC;EAGzB,IAAM7T,SAAS,GAAGsE,YAAM,CAAsB9V,aAAa,CAAC;EAG5D,IAAM86B,SAAS,GAAGxY,OAAO,IAAI7Q,QAAQ;EAErC,IAAAi1B,gBAAA,GAA0ClU,eAAe,CACrDvsB,SAAS,EACTgK,QAAQ,EACR0B,YAAY,EACZmpB,SAAS,IAAI,CAACrpB,QAAQ,EACtBs0B,eAAe,EACfvC,KAAK,CAACrwB,QAAQ,EACdqwB,KAAK,CAAC9Q,MAAM,EACZ8Q,KAAK,CAAC7Q,OAAO,CAChB;IATOuB,YAAY,GAAAwS,gBAAA,CAAZxS,YAAY;IAAEzR,eAAe,GAAAikB,gBAAA,CAAfjkB,eAAe;EAWrC,IAAMkkB,QAAQ,GAAG3iB,SAAS,CAACzS,UAAU,EAAE0S,SAAS,EAAEjS,UAAU,EAAE2xB,aAAa,EAAED,YAAY,CAAC;EAE1F,IAAMnxB,gBAAgB,GAAGuc,iBAAiB,CACtC7c,YAAY,CAACsG,IAAI,EACjB7H,WAAW,EACXsB,UAAU,EACV+c,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjBvkB,WAAW,EACXuwB,aAAa,CAChB;EAED,IAAMzoB,iBAAiB,GAAGod,cAAc,CACpC3d,YAAY,CAACqG,OAAO,EACpB5H,WAAW,EACXsB,UAAU,EACV+c,SAAS,EACTC,aAAa,EACbC,iBAAiB,EACjB1H,SAAS,EACT1c,YAAY,EACZqwB,UAAU,CACb;EAED,IAAA0L,SAAA,GAAwCv1B,QAAQ,CAC5CgR,UAAU,EACV9Q,UAAU,EAEVC,SAAS,EACTvL,SAAS,EACT7E,QAAQ,EACRqQ,QAAQ,EACRxB,QAAQ,EACRyB,UAAU,EACVC,YAAY,EAEZC,aAAa,EACbC,UAAU,EACVC,cAAc,EACdC,WAAW,EAEXC,UAAU,EACVC,YAAY,EACZC,UAAU,EAEVC,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBC,gBAAgB,EAChBC,iBAAiB,EAEjB2zB,gBAAgB,EAChBD,iBAAiB,EACjBnC,WAAW,EACXE,cAAc,EACdD,aAAa,EACbE,aAAa,EACb6B,eAAe,EACf1B,UAAU,EAEVb,KAAK,CAACgC,WAAW,GAAGE,YAAY,CAAChM,UAAU,GAAG/pB,SAAS,EACvD6zB,KAAK,CAACgC,WAAW,GAAGG,SAAS,CAACjM,UAAU,GAAG/pB,SAAS,EAEpD6zB,KAAK,CAACrwB,QAAQ,EACdqwB,KAAK,CAACpwB,mBAAmB,EACzBowB,KAAK,CAACnwB,gBAAgB,EACtBmwB,KAAK,CAAClwB,iBAAiB,EACvBkwB,KAAK,CAACjwB,kBAAkB,EACxBiwB,KAAK,CAAChwB,YAAY,EAClBgwB,KAAK,CAAC/vB,+BAA+B,EACrC+vB,KAAK,CAAC9vB,gCAAgC,CACzC;IAjDOiN,aAAa,GAAAimB,SAAA,CAAbjmB,aAAa;IAAEhL,YAAY,GAAAixB,SAAA,CAAZjxB,YAAY;EAmDnC,IAAAkxB,YAAA,GAAmE1kB,WAAW,CAC1EC,kBAAkB,EAClBC,UAAU,EACV1Q,YAAY,EACZjB,WAAW,EACXmP,QAAQ,EACRpO,QAAQ,EACR6Q,OAAO,EACPC,YAAY,EACZtc,SAAS,EAETkgC,gBAAgB,EAChBD,iBAAiB,EACjBD,iBAAiB,EACjBF,eAAe,EACf1B,UAAU,EACV5hB,eAAe,EAEf+gB,KAAK,CAACrwB,QAAQ,CACjB;IAnBOuP,cAAc,GAAAmkB,YAAA,CAAdnkB,cAAc;IAAEC,aAAa,GAAAkkB,YAAA,CAAblkB,aAAa;IAAEY,WAAW,GAAAsjB,YAAA,CAAXtjB,WAAW;IAAEC,UAAU,GAAAqjB,YAAA,CAAVrjB,UAAU;EAqB9D,IAAMoX,aAAa,GAAGvwB,gBAAgB,EAAE;EAExC6V,qBAAe,CAAC;IACZ,IAAiBzU,MAAM,GAAKg4B,SAAS,CAA7B1tB,OAAO;IACf,IAAI,CAACtK,MAAM,EAAE;MACT;;IAGJ,IAAMK,OAAO,GAAGL,MAAM,CAACM,UAAU,CAAC,IAAI,CAAC;IACvC,IAAI,CAACD,OAAO,EAAE;MACV;;IAGJ,IAAMg7B,gBAAgB,GAAG/8B,MAAM,CAACg9B,qBAAqB,CAAC;MAClDv1B,SAAS,CAACuE,OAAO,GAAG4kB,WAAW,CAC3B7uB,OAAO,EACP8uB,aAAa,EAEb5oB,UAAU,EACVC,YAAY,EACZC,UAAU,EACV6c,SAAS,EACT9oB,SAAS,EACT40B,mBAAmB,EACnBC,SAAS,EAETnlB,YAAY,EACZvU,QAAQ,EACRuY,WAAW,EACXohB,UAAU,EACVv6B,UAAU,EAEVwuB,aAAa,EACbC,iBAAiB,EACjBve,WAAW,EAEXyB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBf,UAAU,CACb;KACJ,CAAC;IAEF,OAAO;MACHxH,MAAM,CAACi9B,oBAAoB,CAACF,gBAAgB,CAAC;KAChD;GACJ,EAAE,CACC90B,UAAU,EACVC,YAAY,EACZC,UAAU,EACV6c,SAAS,EACT9oB,SAAS,EACT40B,mBAAmB,EACnBC,SAAS,EAETnlB,YAAY,EACZvU,QAAQ,EACR25B,UAAU,EACVv6B,UAAU,EAEVwuB,aAAa,EACbC,iBAAiB,EACjBve,WAAW,EAEXyB,eAAe,EACfC,YAAY,EACZC,oBAAoB,EACpBC,iBAAiB,EAEjBf,UAAU,CACb,CAAC;EAEF,IAAA01B,WAAA,GAAsC18B,cAAQ,CAAC,EAAE,CAAC;IAA3C28B,WAAW,GAAAD,WAAA;IAAEX,cAAc,GAAAW,WAAA;EAElC,IAAIE,gBAAgB,GAAGznC,MAAM;EAC7B,IAAI0nC,aAAa,GAAG,CAAC;EACrB,IAAIC,cAAc,GAAG,CAAC;EACtB,IAAIC,aAAa,GAAgC,OAAO;EACxD,IAAIC,kBAAkB,GAAG,EAAE;EAC3B,IAAIC,cAAc,GAAG,EAAE;EACvB,IAAIC,gBAAgB,GAAG3lC,kBAAkB,CAACE,QAAQ;EAClD,IAAI0lC,kBAAkB,GAAG5lC,kBAAkB,CAACS,UAAU;EACtD,IAAIolC,kBAAkB,GAAG7lC,kBAAkB,CAACU,UAAU;EACtD,IAAIiP,QAAQ,EAAE;IACV,IAAMtF,KAAK,GAAA8T,QAAA,KAAQne,kBAAkB,EAAKitB,SAAS,CAAAjoB,KAAA,SAAI+Y,QAAQ,CAAC,CAAE;IAClEsnB,gBAAgB,GAAG3xB,WAAW,CAACqK,QAAQ,CAAC;IACxCsnB,gBAAgB,GAAG/iC,KAAK,CAAC+iC,gBAAgB,EAAExnC,OAAO,CAAC;IACnDynC,aAAa,GAAG7f,SAAS,CAAC6d,SAAS,CAAC,GAAG,CAAC;IACxCiC,cAAc,GAAG/e,UAAU,CAAC+c,SAAS,CAAC,GAAG,CAAC;IAC1CiC,aAAa,GAAGn7B,KAAK,CAACpK,SAAS;IAC/BwlC,kBAAkB,GAAMp7B,KAAK,CAAClK,UAAU,OAAI;IAC5CwlC,gBAAgB,GAAGt7B,KAAK,CAACnK,QAAQ;IACjC0lC,kBAAkB,GAAGv7B,KAAK,CAAC5J,UAAU;IACrColC,kBAAkB,GAAGx7B,KAAK,CAAC3J,UAAU;IAGrC,IAAMolC,MAAM,GAAG9E,WAAW,EAAE;IAC5B0E,cAAc,GAAMr7B,KAAK,CAACjK,SAAS,GAAG,CAAC,GAAG0lC,MAAM,YAAMz7B,KAAK,CAAC9J,WAAW,GAAG,CAAC,aAAM8J,KAAK,CAAChK,YAAY,GAAG,CAAC,aAAMgK,KAAK,CAAC/J,UAAU,GAAG,CAAC,QAAI;IAErI,IAAMylC,OAAO,GAAG3C,QAAQ,CAAAp+B,KAAA,SAAI+Y,QAAQ,CAAC;IACrC,IAAIgoB,OAAO,KAAKX,WAAW,EAAE;MACzBZ,cAAc,CAAC,EAAE,CAAC;MAClBnC,WAAW,CAACtkC,OAAO,CAAC;;;EAI5B,IAAAioC,iBAAA,GAAuBX,gBAAgB;IAAhCY,KAAK,GAAAD,iBAAA;IAAEE,KAAK,GAAAF,iBAAA;EACnB,IAAMG,UAAU,GAAG;IACftwB,KAAK,EAAE8sB,SAAS;IAChBL,SAAS,EAAE,IAAI;IACf8D,SAAS,EAAExlB,cAAc;IACzBvW,KAAK,EAAE;MACHmiB,QAAQ,EAAE,UAAU;MACpB9oB,IAAI,EAAEuiC,KAAK;MACXtiC,GAAG,EAAEuiC,KAAK;MACVG,OAAO,EAAEX,cAAc;MACvB57B,KAAK,EAAEw7B,aAAa;MACpBv7B,MAAM,EAAEw7B,cAAc;MACtBe,OAAO,EAAE,MAAM;MACfC,MAAM,EAAE,MAAM;MACdtmC,SAAS,EAAEulC,aAAa;MACxBrlC,UAAU,EAAEslC,kBAAkB;MAC9BjlC,KAAK,EAAE,OAAO;MACdN,QAAQ,EAAEylC,gBAAgB;MAC1BllC,UAAU,EAAEmlC,kBAAkB;MAC9BllC,UAAU,EAAEmlC,kBAAkB;MAC9BW,MAAM,EAAE;;GAEf;EAED,IAAMC,KAAK,IAAAC,qBAAA,GAAGhF,KAAK,CAACiF,cAAc,cAAAD,qBAAA,uBAApBA,qBAAA,CAAA5vB,IAAA,CAAA4qB,KAAK,EACf4B,SAAS,EACTC,SAAS,EAAAplB,QAAA,KACJgoB,UAAU;IAAE90B,QAAQ,EAAEuxB;MAC3BwB,iBAAiB,CACpB;EAED,IAAIwC,mBAAmB,GAAGC,MAAM,CAACC,WAAW;EAC5C,IAAMC,gBAAgB,GAAwB;IAC1Cva,QAAQ,EAAE,UAAU;IACpB1iB,KAAK,EAAE,MAAM;IACbC,MAAM,EAAE,MAAM;IACdpG,GAAG,EAAE,CAAC;IACND,IAAI,EAAE,CAAC;IACPsjC,QAAQ,EAAE,QAAQ;IAClBV,OAAO,EAAE,CAAC;IACVW,YAAY,EAAE;GACjB;EACD,IAAMC,YAAY,GAAwB;IACtCp9B,KAAK,EAAElB,WAAW;IAClBmB,MAAM,EAAEhB,YAAY;IACpBu9B,OAAO,EAAE;GACZ;EAED,IAAIl2B,UAAU,CAACgxB,cAAc,EAAE;IAC3B,OAAO8F,YAAY,CAAC,SAAS,CAAC;IAC9B,OAAOH,gBAAgB,CAAC,cAAc,CAAC;IACvCH,mBAAmB,GAAG,EAAE;;EAG5B,IAAMO,cAAc,GAAGj+B,aAAO,CAC1B;IAAA,IAAAk+B,mBAAA;IAAA,QAAAA,mBAAA,GAAM1F,KAAK,CAAC2F,YAAY,cAAAD,mBAAA,uBAAlBA,mBAAA,CAAAtwB,IAAA,CAAA4qB,KAAK,EAAgB;MAAEvxB,YAAY,EAAZA,YAAY;MAAED,UAAU,EAAVA,UAAU;MAAE/L,SAAS,EAATA,SAAS;MAAEwL,QAAQ,EAARA;KAAU,CAAC;KAC7E,CAAC+xB,KAAK,CAAC2F,YAAY,EAAEl3B,YAAY,EAAED,UAAU,EAAE/L,SAAS,EAAEwL,QAAQ,CAAC,CACtE;EAED,IAAM23B,eAAe,GAAGp+B,aAAO,CAC3B;IAAA,IAAAq+B,oBAAA;IAAA,QAAAA,oBAAA,GAAM7F,KAAK,CAAC8F,aAAa,cAAAD,oBAAA,uBAAnBA,oBAAA,CAAAzwB,IAAA,CAAA4qB,KAAK,EAAiB;MAAEvxB,YAAY,EAAZA,YAAY;MAAED,UAAU,EAAVA,UAAU;MAAE/L,SAAS,EAATA,SAAS;MAAEwL,QAAQ,EAARA;KAAU,CAAC;KAC9E,CAAC+xB,KAAK,CAAC8F,aAAa,EAAEr3B,YAAY,EAAED,UAAU,EAAE/L,SAAS,EAAEwL,QAAQ,CAAC,CACvE;EAGD83B,yBAAmB,CACf1zB,GAAG,EACH;IAAA,OAAAoK,QAAA,KACOjO,UAAU,EACVkiB,YAAY;MACfiS,gBAAgB,EAAhBA;;GACF,EACF,CAACn0B,UAAU,EAAEkiB,YAAY,EAAEiS,gBAAgB,CAAC,CAC/C;EAED,OACIqD;IAAKr9B,KAAK,EAAE;MAAEmiB,QAAQ,EAAE,UAAU;MAAEziB,MAAM,EAAE,MAAM;MAAEi9B,QAAQ,EAAE;;KAC1DU;IAAQr9B,KAAK,EAAE68B,YAAY;IAAEnzB,GAAG,EAAE4tB;IAAa,EAC/C+F;IACI3zB,GAAG,EAAEwM;KACD1B,aAAa;IACjBunB,SAAS,EAAEvlB,aAAa;IACxB8mB,OAAO,EAAElmB,WAAW;IACpBmmB,MAAM,EAAElmB,UAAU;IAClBmmB,QAAQ,EAAE,CAAC;IACXhD,QAAQ,EAAEA,QAAQ;IAClBiD,SAAS,EAAElB,mBAAmB;IAC9Bv8B,KAAK,EAAE08B;MAEPW;IACIr9B,KAAK,EAAE;MACHmiB,QAAQ,EAAE,UAAU;MACpB9oB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE,CAAC;MACRC,MAAM,EAAE6Y,UAAU,GAAG,IAAI;MACzBhiB,eAAe,EAAE;;IAElB,EACP8mC;IACIr9B,KAAK,EAAE;MACHmiB,QAAQ,EAAE,UAAU;MACpB9oB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE6Y,UAAU,GAAG,IAAI;MACxB5Y,MAAM,EAAE,CAAC;MACTnJ,eAAe,EAAE;;IAElB,EACNumC,cAAc,GACXO;IACIr9B,KAAK,EAAE;MACHmiB,QAAQ,EAAE,QAAQ;MAClB9oB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE;;KAGRwjC,cAAc,CACb,GACN,IAAI,CACN,EACLG,eAAe,GACZI;IACIr9B,KAAK,EAAE;MACHmiB,QAAQ,EAAE,UAAU;MACpB9oB,IAAI,EAAE,CAAC;MACPC,GAAG,EAAE,CAAC;MACNmG,KAAK,EAAE,MAAM;MACbC,MAAM,EAAE,MAAM;MACdg+B,aAAa,EAAE;;KAGlBT,eAAe,CACd,GACN,IAAI,EACP33B,QAAQ,KACJ82B,KAAK,KAAK54B,SAAS,GAChB44B,KAAK,GAELiB,2DACQvB,UAAU;IACdwB,OAAO,EAAE,SAATA,OAAOA,CAAG37B,CAAC;MAAA,OAAKA,CAAC,CAACoI,MAAM,CAAC4zB,MAAM,EAAE;;IACjC32B,QAAQ,EAAE,SAAVA,QAAQA,CAAGrF,CAAC;MAAA,OAAK42B,YAAY,CAAC52B,CAAC,CAACoI,MAAM,CAACyB,KAAK,CAAC;;KAEpD,CAAC,CACJ;AAEd,CAAC,CAAC;;;;;;"}